diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000..7a73a41
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,2 @@
+{
+}
\ No newline at end of file
diff --git a/docs/finance-solutions/compliance/introduction.mdx b/docs/finance-solutions/compliance/introduction.mdx
new file mode 100644
index 0000000..e7ad66e
--- /dev/null
+++ b/docs/finance-solutions/compliance/introduction.mdx
@@ -0,0 +1,114 @@
+---
+title: Introduction
+sidebar_label: Compliance
+---
+
+# Privacy-Preserving Compliance
+
+Compliance on Merces is a set of primitives that let regulated entities enforce KYC, AML, sanctions
+screening, and Travel Rule obligations **without exposing plaintext user data**, not to the
+application, not to a third-party screening engine, and not to TACEO. Compliance is built into the
+payment flow at the protocol layer, not bolted on as a separate surveillance system.
+
+:::tip Compliance is the wedge, not the tax
+Private payments cannot scale in regulated jurisdictions without compliance. The standard answer
+(run KYC and monitoring on plaintext, ship PII to third-party screening engines, and log everything)
+is fundamentally incompatible with privacy. Privacy-preserving compliance is what makes private
+rails shippable in regulated markets at all.
+:::
+
+## The core mechanism: selective disclosure via MPC
+
+By default, every Merces transaction is encrypted. The TACEO Network maintains the transaction
+graph in encrypted form; only the parties involved in a transfer see its full details. No
+plaintext sits anywhere in the system.
+
+When an authorized party (a regulator, compliance team, or other entity with reveal rights)
+submits a decryption request for a specific account, the MPC network nodes **jointly approve and
+perform the decryption**. The result is the transaction history for that account, returned in
+plaintext. Decryption requests are scoped: they expose the selected data and nothing else.
+
+This same pattern underlies every Merces compliance primitive. An application or policy authority
+queries the TACEO Network about a user, and the network returns a verifiable answer without
+disclosing the underlying data. Sanctions screens, allowlist checks, and AML audits all share
+this shape.
+
+ZK-only approaches give you selective disclosure but struggle with persistent identity state,
+auditability, and lawful disclosure paths. MPC adds the missing pieces: stateful attestations,
+multi-party authorization for reveals, and the ability to enforce policies that depend on data the
+user themselves doesn't hold.
+
+:::note Public testnet vs. production
+On the [public Plasma testnet reference app](https://merces.taceo.io/compliance), anyone can try the
+decryption flow. In production deployments, access is restricted to explicitly authorized
+entities by policy and contract configuration.
+:::
+
+## Compliance primitives
+
+| Primitive | What it does | Status |
+|---|---|---|
+| **Selective disclosure (decryption requests)** | Authorized parties submit decryption requests for a specific account. MPC nodes jointly approve and decrypt, returning that account's transaction history in plaintext. Same flow used for AML audits and lawful disclosure. | Live on Plasma testnet ([compliance dashboard](https://merces.taceo.io/compliance)) |
+| **Wallet registration and blocklist** | Wallets must be registered in the Merces contract before transacting. Optional KYC or policy checks can be enforced at registration. Registered wallets can later be restricted or added to a blocklist by the administrator, blocking transfers to or from those accounts. | Live on Plasma testnet |
+| **Programmable reveal rules** | Per-token or per-jurisdiction policies defining who can decrypt what, under which conditions | In active design |
+| **Proof-of-compliance bundles** | Composable attestations a user can present (e.g. "KYC'd by issuer X, not on list Y, under threshold Z") | In active design |
+| **MPKYC** | MPC-based KYC: licensed providers attest to a user once; downstream apps query the attestation without seeing the underlying PII | Design / proposal stage |
+| **Travel Rule selective disclosure** | VASP-to-VASP information exchange that satisfies FATF Travel Rule without putting counterparty data on a public ledger | Design / proposal stage |
+
+## TACEO doesn't replace KYC. It makes KYC privacy-preserving.
+
+The compliance decision still belongs to a licensed provider, a KYC vendor, a screening engine, a
+VASP's compliance team. What changes is **where the plaintext lives** and **who sees it**.
+
+In the standard model, every application that needs a compliance signal pulls the user's full
+identity profile, hands it to a third-party API, and stores the result in a database. Each new
+integration is another copy of the user's data and another surveillance vector.
+
+In the Merces model, the licensed provider attests to a property of the user **once**, into the
+TACEO Network. Downstream applications query the attestation and receive a verifiable yes/no, no
+data shared, no copies created, no per-integration breach surface.
+
+## The identity proof point
+
+The MPC architecture that powers Merces compliance is built on the same cryptographic foundation
+TACEO co-architected for [World](https://world.org/)'s iris-code system, deployed in production
+at global scale as a GDPR regulatory remediation for biometric data. The protocol underneath
+Merces compliance is the same kind of system, applied to financial flows.
+
+## Who it's for
+
+| Audience | How they use it |
+|---|---|
+| **Fintechs and stablecoin issuers integrating Merces** | Compliance is built into the payment flow they're already shipping |
+| **VASPs and regulated entities** | Satisfy AML, KYC, sanctions, and Travel Rule obligations on private rails without standing up surveillance infrastructure |
+| **Licensed KYC and screening providers** | Issue privacy-preserving attestations on top of existing diligence work, expanding their reach without expanding their data exposure |
+| **Compliance and policy teams** | Auditable, scoped lawful disclosure paths that don't require the application to hold plaintext |
+
+## Status
+
+Compliance primitives sit at mixed maturity:
+
+- **Selective disclosure** is live on Plasma testnet, exposed through the
+ [compliance dashboard at merces.taceo.io/compliance](https://merces.taceo.io/compliance). MPC
+ nodes jointly approve and perform the decryption when an authorized party submits a request.
+ AML audits run through this same flow.
+- **Wallet registration and blocklisting** are live on Plasma. Wallets must be registered in the
+ Merces contract before transacting; the administrator can restrict or blocklist registered
+ wallets. Optional KYC or policy checks can be wired in at the registration step.
+- **Programmable reveal rules and proof-of-compliance bundles** are in active design, shaped by
+ ongoing work with regulated partners.
+- **MPKYC and Travel Rule selective disclosure** are at design / proposal stage. The use cases
+ are defined; the implementations are being worked through.
+- **The cryptographic foundation TACEO co-architected** is in production at global scale via
+ World's iris-code deployment.
+
+The product framing, *privacy and compliance can coexist with no trade-off needed*, is the
+position we are taking publicly and shipping toward.
+
+## Going deeper
+
+| Goal | Start here |
+|---|---|
+| Try the compliance dashboard | [merces.taceo.io/compliance](https://merces.taceo.io/compliance) |
+| Understand the underlying transfer protocol | [How it works](/docs/finance-solutions/x402/how-it-works) |
+| Talk through a regulated deployment | [Email the team](mailto:hello@taceo.io) |
diff --git a/docs/finance-solutions/overview.mdx b/docs/finance-solutions/overview.mdx
new file mode 100644
index 0000000..d8c72f2
--- /dev/null
+++ b/docs/finance-solutions/overview.mdx
@@ -0,0 +1,151 @@
+---
+title: Finance Solutions Overview
+description: Private onchain finance, powered by Merces
+---
+
+# Finance Solutions on the TACEO Network
+
+Public blockchains expose everything by default: balances, counterparties, amounts, transaction
+flows. That's a dealbreaker for real financial operations. TACEO's finance solutions let
+developers, institutions, and AI agents move value on the chains they already use without
+putting their business on a public ledger.
+
+Our finance offering is one privacy solution, **Merces**, with multiple features on top. Merces
+is TACEO's confidential token transfer protocol. It wraps existing ERC-20 tokens (such as USDC)
+into a private form. Balances are held as secret shares across the TACEO Network, state
+transitions are verified onchain via CoSNARKs, and no single party (including TACEO) sees what
+anyone holds or sends. Compliance primitives are built into the protocol, not bolted on top.
+
+:::tip What is Merces?
+Merces is an integrable privacy layer for the chain you already use. Two things set it apart:
+
+- **We come to you.** Merces deploys on the EVM chain you already use. No migration, no new asset.
+- **Solutions, not primitives.** A payment system you can plug into a stablecoin or fintech
+ product, not raw cryptographic building blocks you have to assemble.
+
+Canonical write-up: [core.taceo.io/articles/merces-onchain-finance](https://core.taceo.io/articles/merces-onchain-finance/).
+:::
+
+## What's available today
+
+Merces ships two privacy modes, selectable per transaction, plus compliance and integrations on top.
+
+| Capability | What it does | Status |
+|---|---|---|
+| **Confidential payments** | Hide amounts and balances. Sender and receiver visible. | Live on Arc and Base testnets. Reference Implementation: [merces-dashboard.taceo.io/arc](https://merces-dashboard.taceo.io/arc). |
+| **Fully private payments** | Hide amounts, balances, sender, and receiver. | Live on Plasma testnet. Reference App: [merces.taceo.io](https://merces.taceo.io). |
+| **Compliance dashboard** | Selective disclosure to authorized auditors. | Live on Plasma testnet alongside the private payments deployment. |
+| **Confidential x402** | HTTP-embedded confidential payments. | Live on Base testnet. |
+
+The confidential payments network has processed ~5M demo transactions across Arc and Base testnets, sustaining ~300 TPS with single-digit-cents gas per transfer on L2. Mainnet deployment is in progress.
+
+## Features
+
+
+
+
+
+### Private Payments
+
+Private ERC-20 transfers on the EVM chain you already use. Users get a private virtual account
+alongside their normal public wallet.
+
+**Best fit:**
+
+- Payroll, treasury, and B2B settlement that can't be public
+- Stablecoin issuers and fintechs offering confidential accounts
+- White-labeled privacy rails inside an existing product
+
+[Learn more →](/docs/finance-solutions/payments/introduction)
+
+
+
+
+
+### Confidential x402
+
+The HTTP 402 Payment Required protocol with hidden amounts. Drop-in privacy for x402 clients
+and servers, no application code changes.
+
+**Best fit:**
+
+- Paid APIs with dynamic or negotiated pricing
+- AI agents transacting across providers without leaking strategy
+- Per-customer deals you can't put on a public ledger
+
+[Learn more →](/docs/finance-solutions/x402/introduction)
+
+
+
+
+
+### Compliance
+
+Privacy-preserving KYC, AML, sanctions, and Travel Rule. Selective disclosure via MPC, not
+surveillance infrastructure.
+
+**Best fit:**
+
+- VASPs and regulated entities on private payment rails
+- Fintechs integrating Merces who need compliance in the flow
+- KYC providers issuing privacy-preserving attestations
+
+[Learn more →](/docs/finance-solutions/compliance/introduction)
+
+
+
+
+
+## Coming Soon
+
+
+
+
+
+### Private Yield
+
+**In active development.**
+
+Compliant private yield on Ethereum. Earn on private balances without exposing positions,
+counterparties, or strategy. Designed for regulated deployment from day one.
+
+[Learn more →](/docs/finance-solutions/yield/introduction)
+
+
+
+
+
+### Private DeFi
+
+**On the roadmap.**
+
+Confidential swaps, dark pools, and approvals. Brings the private-balance model to swap
+routers, intent flows, and DeFi composability, so traders and LPs aren't forced to broadcast
+strategy to the rest of the market.
+
+
+
+
+
+## Going deeper
+
+| Goal | Start here |
+|---|---|
+| Add private payments to your product | [Private Payments](/docs/finance-solutions/payments/introduction) |
+| Hide payment amounts on a paid API | [Confidential x402 Quickstart](/docs/finance-solutions/x402/quickstart) |
+| Understand the compliance story | [Compliance](/docs/finance-solutions/compliance/introduction) |
+| Read the protocol paper | [Escudero et al., IACR ePrint 2026/850](https://eprint.iacr.org/2026/850) |
+| Browse the source | [github.com/TaceoLabs](https://github.com/TaceoLabs) |
+
+---
+
+**Looking for a design partner slot?** We're working with a small group of stablecoin issuers,
+fintechs, and payment infrastructure teams shipping private rails to production.
+[Email the team](mailto:hello@taceo.io?subject=Merces%20design%20partner). General questions go
+in [Discord](https://taceo.io/discord).
diff --git a/docs/finance-solutions/payments/introduction.mdx b/docs/finance-solutions/payments/introduction.mdx
new file mode 100644
index 0000000..91d1faf
--- /dev/null
+++ b/docs/finance-solutions/payments/introduction.mdx
@@ -0,0 +1,123 @@
+---
+title: Introduction
+sidebar_label: Private Payments
+---
+
+# Private Payments
+
+Private Payments is the core capability of [Merces](https://core.taceo.io/articles/merces-onchain-finance/),
+TACEO's confidential token transfer protocol. It lets users send and receive ERC-20 tokens on a
+public EVM chain, with two privacy modes that callers select per transaction.
+
+The integration model is API/SDK: stablecoin issuers, fintechs, and payment infrastructure builders
+white-label Merces into their products. End users never see TACEO.
+
+:::tip Live infrastructure
+Merces is live across multiple testnets today.
+
+- **Confidential mode** on Arc and Base testnets. Reference Implementation: [merces-dashboard.taceo.io/arc](https://merces-dashboard.taceo.io/arc).
+- **Fully private mode and the compliance dashboard** on Plasma testnet. Referenece App: [merces.taceo.io](https://merces.taceo.io).
+
+The confidential network has processed ~5M demo transactions sustaining ~300 TPS, with single-digit-cents gas per transfer on L2.
+:::
+
+## The problem with public rails
+
+Public blockchains expose everything by default: balances, counterparties, amounts, transaction
+flows. For real financial operations this is a non-starter.
+
+- **Payroll** broadcasts every employee's salary to the world.
+- **Treasury** moves reveal cash position, runway, and operational tempo.
+- **B2B settlement** exposes customer relationships, deal sizes, and pricing structure.
+- **Consumer payments** turn every wallet into a public spending diary.
+
+Existing privacy approaches force a trade-off. Privacy-first L1s require migrating off the chain
+you've already chosen. Cryptographic toolkits hand you raw primitives and leave assembly to you.
+Neither is a path most issuers, fintechs, or institutions can take to production.
+
+## Two privacy modes
+
+Merces supports two modes for transfers, selectable per transaction:
+
+| Mode | What's hidden | What's visible | Use when |
+|---|---|---|---|
+| **Confidential** | Amounts, balances, transfer history | Sender and receiver wallet addresses | You want to hide pricing or amounts but settle to known counterparty wallets. The basis for [Confidential x402](/docs/finance-solutions/x402/introduction). |
+| **Fully private** | Amounts, balances, sender, and receiver | Nothing identifying about the transfer | You need full transaction-graph privacy: consumer payments, sensitive treasury moves, regulated user flows. |
+
+Both modes share the same Merces protocol, the same secret-shared balance model, and the same
+compliance primitives. Callers pick the mode for each transfer.
+
+## How Merces works
+
+Merces wraps existing ERC-20 tokens (such as USDC) into a private form that lives alongside the
+public token on the same chain. Users gain a **private virtual account** without leaving their
+existing wallet, RPC, or chain.
+
+Three properties make this work:
+
+1. **Balances are held as secret shares** across the TACEO Network's MPC operators. No single
+ party, including TACEO, ever sees a plaintext balance or amount.
+2. **State transitions are verified onchain via CoSNARKs.** Both the client's spending proof and
+ the MPC network's balance update proof are checked by the Merces contract before any commitment
+ moves.
+3. **The chain stays the chain.** Merces deploys as a contract on the EVM you already use. There's
+ no bridge, no new consensus, no migration.
+
+For a step-by-step walk through the cryptographic flow (commitments, secret shares, Groth16
+proofs, EIP-712 signing, and the MPC settlement loop), see
+[How it works](/docs/finance-solutions/x402/how-it-works), which uses the x402 payment as the worked example but
+documents the underlying Merces protocol.
+
+## What you get
+
+| Capability | Status |
+|---|---|
+| Confidential transfers (amounts hidden, addresses visible) | Live on Arc and Base testnets |
+| Fully private transfers (amounts and addresses hidden) | Live on Plasma testnet |
+| Per-transaction mode selection | Live on Plasma testnet |
+| Compliance dashboard with selective disclosure | Live on Plasma testnet (see [Compliance](/docs/finance-solutions/compliance/introduction)) |
+| `transferWithAuthorization` (basis for [Confidential x402](/docs/finance-solutions/x402/introduction)) | Live on Base testnet |
+| Allowlists at the contract layer | Live on testnet |
+| Private yield | In development (see [Private Yield](/docs/finance-solutions/yield/introduction)) |
+| Private DeFi (swaps, dark pools, approvals) | On the roadmap |
+| Mainnet deployment | Shipping toward production |
+
+## Privacy assumptions
+
+In **confidential mode**, Merces hides balances, transfer amounts, and the state of the virtual
+account. Sender and receiver wallet addresses remain visible onchain.
+
+In **fully private mode**, Merces additionally hides sender and receiver. A gateway service
+abstracts gas payment and submitter identity so the transaction graph itself stays opaque.
+
+In both modes, no single party (including TACEO) ever sees a plaintext balance or amount.
+Balances are held as MPC secret shares; reveals require explicit authorization through the
+compliance flow.
+
+For a full privacy analysis at the protocol level, see the x402
+[Protocol reference](/docs/finance-solutions/x402/protocol-reference#privacy--trust-model).
+
+## Who it's for
+
+| Audience | What Merces gives them |
+|---|---|
+| **Stablecoin issuers** | Privacy as a feature for issued tokens, without forking the asset |
+| **Fintechs and neobanks** | A confidential rail under existing user accounts |
+| **Payment infrastructure builders** | An SDK-integrable private ledger on the EVM they already target |
+| **Institutions and treasuries** | Confidential settlement on public rails for payroll, vendor payments, and intra-org transfers |
+| **AI agents and agent platforms** | Spending that doesn't broadcast strategy across paid endpoints |
+
+## Get started
+
+| Goal | Start here |
+|---|---|
+| Try confidential payments in a browser | [merces-dashboard.taceo.io/arc](https://merces-dashboard.taceo.io/arc) |
+| Try fully private payments and the compliance dashboard | [merces.taceo.io](https://merces.taceo.io) |
+| See it run end-to-end with a real (test) payment via x402 | [Confidential x402 Quickstart](/docs/finance-solutions/x402/quickstart) |
+| Understand the protocol architecture | [How it works](/docs/finance-solutions/x402/how-it-works) |
+| Look up addresses and endpoints | [Network & Contracts](/docs/finance-solutions/x402/network-and-contracts) |
+| Read the underlying paper | [Escudero et al., IACR ePrint 2026/850](https://eprint.iacr.org/2026/850) |
+| Browse source | [github.com/TaceoLabs](https://github.com/TaceoLabs) |
+
+For production access, integration support, or a deeper conversation about a specific use case,
+[email the team](mailto:hello@taceo.io).
diff --git a/docs/finance-solutions/x402/how-it-works.mdx b/docs/finance-solutions/x402/how-it-works.mdx
new file mode 100644
index 0000000..f0fb643
--- /dev/null
+++ b/docs/finance-solutions/x402/how-it-works.mdx
@@ -0,0 +1,130 @@
+---
+title: How it works
+---
+
+# How it works
+
+A Confidential x402 payment flows through five components. This page describes each component's
+role and walks through a full payment end-to-end.
+
+
+## Components
+
+**Client.** The agent or application making the API request. It holds the private key to the spending wallet, generates
+the ZK proof, and constructs the payment payload. The client library handles all cryptographic
+operations; the client application only needs to register the scheme and make HTTP requests as
+normal.
+
+**Resource server.** The API provider. It issues `402 Payment Required` responses, forwards
+payment payloads to the facilitator for verification, and serves content on success. Apart from
+advertising `scheme: "confidential"` in its payment requirements, it behaves identically to a
+standard x402 resource server.
+
+**Facilitator.** An offchain service that verifies payment proofs and triggers settlements. It
+checks the ZK proof, validates the EIP-712 signature, queries the MPC network for balance
+sufficiency, and submits the settlement transaction onchain. TACEO operates a facilitator that can be
+used directly.
+
+**MPC network.** A committee of three operators that collectively hold secret-shared balances. No
+single operator ever sees a plaintext balance or payment amount. The network answers
+yes/no affordability queries during verification and processes transfers during
+settlement.
+
+**Merces contract.** Stores balances in encryped form (i.e., commitments), verifies
+the client's Groth16 proof onchain during `transferFrom`, enqueues transfer actions for the MPC
+network, and verifies the MPC's proof when the balance update is finalised.
+
+## Sequence diagram
+
+```mermaid
+sequenceDiagram
+ Client->>Resource Server: GET /api
+ Resource Server-->>Client: 402 + PayReq
+ Note over Client: compute commitment, create ciphertext, create typed 712 data and sign
+ Note over Client: generate Groth16 ZK proof (~800ms), compute commitment, create ciphertext, sign EIP-712
+ Client->>Resource Server: GET + PAYMENT
+ Resource Server->>Facilitator: POST /verify
+ Note over Facilitator: verify client proof
+ Facilitator->>MPC Network: validBalance?
+ MPC Network-->>Facilitator: yes/no
+ Facilitator-->>Resource Server: isValid: true
+ Resource Server->>Facilitator: POST /settle
+ Facilitator->>Contract: transferFrom()
+ Note over Contract: verify Groth16 proof onchain via ClientTransferVerifier
+ Contract-->>MPC Network: action_index
+ Note over MPC Network: read_queue, decrypt, update bal, gen proof
+ MPC Network->>Contract: processMPC
+ Note over Contract: verify proof, update comms
+ Contract-->>Facilitator: tx_hash, isValid?
+ Facilitator-->>Resource Server: success: true
+ Resource Server-->>Client: 200 + content
+```
+
+
+## Payment flow
+
+### Phase 1: Discovery
+
+The client sends an unauthenticated HTTP request to a protected endpoint. The resource server
+checks its configuration, finds no valid payment attached, and responds with `HTTP 402 Payment
+Required`. The response has a `PAYMENT-REQUIRED` header, containing the base64-encoded `PaymentRequired` payload advertising the
+`confidential` scheme, the required token and amount, the recipient address, and the MPC network's
+current public keys.
+
+### Phase 2: Payment construction
+
+The client builds the payment payload locally. No network calls are required for this step.
+
+1. Generate a random blinding factor `r`.
+2. Compute a **Poseidon2 commitment** to the amount: `commit(amount, r)`.
+3. Split the amount into three additive secret shares, one per MPC operator.
+4. Encrypt each share to the corresponding operator's BabyJubJub public key using ECDH.
+5. Generate a **Groth16 ZK proof** that proves all of the above is consistent:
+ - The commitment is the hash of the true amount and blinding factor.
+ - The three shares sum to the committed amount.
+ - Each share is correctly encrypted to the stated operator key.
+ - The amount fits in 80 bits.
+6. Sign the full payload with **EIP-712.** Binding sender, receiver, commitment, ciphertexts, nonce, and deadline.
+7. Re-send the original request with a `PAYMENT-SIGNATURE` header containing the encoded payload.
+
+### Phase 3: Verification
+
+The resource server decodes the payment signature and forwards it to the facilitator's `/verify`
+endpoint. The facilitator runs a series of checks:
+
+- **Schema match.** The accepted scheme matches `"confidential"`.
+- **Recipient match.** `payload.to` equals the resource server's address.
+- **Deadline.** The payment has not expired.
+- **Nonce.** Not already used onchain.
+- **Amount commitment match.** Random blinding factor `r` and `amount` produce the provided commitment
+- **Signature.** The EIP-712 signature recovers to the claimed sender.
+- **ZK proof.** The Groth16 proof is valid against 15 public signals (sender key, commitment, ciphertexts, MPC keys).
+- **Balance.** The facilitator queries all three MPC nodes; they collectively confirm the sender holds sufficient funds without revealing the balance to anyone.
+
+If all checks pass, the facilitator returns `{ isValid: true }` to the resource server.
+
+### Phase 4: Content delivery & settlement
+
+The resource server then calls the facilitator's `/settle` endpoint. The facilitator calls
+`transferFrom()` on the Merces contract, passing the proof and ciphertexts. The contract verifies
+the proof onchain and enqueues a transfer action.
+
+The MPC network picks up the queued action, decrypts the secret shares to recover the actual
+amount, verifies the commitment, updates both parties' balance commitments, and generates a second
+ZK proof that the update is correct. It calls `processMPC()` on the contract, which verifies the
+proof and commits the new balance state.
+
+On a valid response, the resource server returns `HTTP 200` with the requested content.
+
+:::info Asynchronous Settlement
+Alternatively, content delivery can already take places simultaneously to the settlement.
+:::
+
+## Performance
+
+| Operation | Cost |
+|---|---|
+| Proof generation (client) | ~400ms (SnarkJS) / ~60ms (Rust) |
+| Offchain verification | ~3ms |
+| Onchain verification | ~300,000 gas |
+
diff --git a/docs/finance-solutions/x402/integration-guide.mdx b/docs/finance-solutions/x402/integration-guide.mdx
new file mode 100644
index 0000000..279d119
--- /dev/null
+++ b/docs/finance-solutions/x402/integration-guide.mdx
@@ -0,0 +1,295 @@
+---
+sidebar_position: 4
+title: Integration guide
+---
+
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+
+# Integration guide
+
+This page covers integrating the confidential payment scheme into your own client application and
+API server. If you just want to run a quick end-to-end test using TACEO's hosted infrastructure,
+start with the [Quickstart](../quickstart) instead.
+
+## Install
+
+
+
+
+```bash
+npm install @taceo/confidential-x402 @x402/fetch viem
+```
+
+
+
+
+```toml
+[dependencies]
+alloy = "2"
+eyre = "0.6"
+axum = "0.8"
+reqwest = { version = "0.13", features = ["json", "rustls"] }
+taceo-merces1-x402 = { git = "https://github.com/TaceoLabs/merces1-x402.git", version = "0.1", features = ["server", "client"] }
+tokio = { version = "1", features = ["macros", "rt-multi-thread"] }
+x402-axum = "1"
+x402-reqwest = "1"
+```
+
+
+
+
+---
+
+## Client
+
+The client library intercepts any `402 Payment Required` response, constructs the ZK proof and
+signed payment payload, and retries the request automatically. Your application code makes a
+normal HTTP request, the payment is invisible to it.
+
+### Register the scheme
+
+
+
+
+```typescript
+import { privateKeyToAccount } from 'viem/accounts';
+import { x402Client, wrapFetchWithPayment } from '@x402/fetch';
+import { ConfidentialEvmScheme } from '@taceo/confidential-x402/client';
+
+const signer = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`);
+
+const client = new x402Client();
+client.register('eip155:*', new ConfidentialEvmScheme(signer));
+
+export const fetchWithPayment = wrapFetchWithPayment(fetch, client);
+```
+
+`fetchWithPayment` is a drop-in replacement for `fetch`. Use it anywhere you would normally
+call `fetch`.
+
+
+
+
+```rust
+use alloy::signers::local::PrivateKeySigner;
+use reqwest::Client;
+use taceo_merces1_x402::V2Eip155ConfidentialClient;
+use x402_reqwest::{ReqwestWithPayments, ReqwestWithPaymentsBuild, X402Client};
+
+let signer: PrivateKeySigner = std::env::var("PRIVATE_KEY")?.parse()?;
+
+let x402_client = X402Client::new()
+ .register(V2Eip155ConfidentialClient::new(signer));
+
+let http_client = Client::new()
+ .with_payments(x402_client)
+ .build();
+```
+
+`http_client` is a drop-in replacement for `reqwest::Client`.
+
+
+
+
+### Make a payment-gated request
+
+
+
+
+```typescript
+const response = await fetchWithPayment(
+ 'https://api.example.com/api/premium-data',
+ { method: 'GET' }
+);
+
+if (response.ok) {
+ const data = await response.json();
+ console.log(data);
+}
+```
+
+
+
+
+```rust
+let response = http_client
+ .get("https://api.example.com/api/premium-data")
+ .send()
+ .await?;
+
+println!("Status: {}", response.status());
+println!("Body: {}", response.text().await?);
+```
+
+
+
+
+When the server responds with `402`, the client handles it invisibly: parses the `PaymentRequired`
+payload, generates the Groth16 ZK proof, retries the request with a `PAYMENT-SIGNATURE`
+header, and returns the final `200 OK` to your code.
+
+---
+
+## Server
+
+The server middleware intercepts incoming requests, returns `402 Payment Required` when no valid
+payment is attached, and verifies the payment against the TACEO facilitator before forwarding the
+request to your handler.
+
+### Basic example
+
+The following examples protect a single route at `GET /api/protected` and price it at $1 of
+confidential USDC.
+
+
+
+
+```typescript
+import express from 'express';
+import { paymentMiddleware, x402ResourceServer } from '@x402/express';
+import { HTTPFacilitatorClient } from '@x402/core/server';
+import { ConfidentialEvmScheme } from '@taceo/confidential-x402/server';
+
+const app = express();
+
+const facilitatorClient = new HTTPFacilitatorClient({
+ url: 'https://x402-facilitator.merces1.taceo.io',
+});
+
+app.use(
+ paymentMiddleware(
+ {
+ 'GET /api/protected': {
+ accepts: [
+ {
+ scheme: 'confidential',
+ price: '$1',
+ network: 'eip155:84532',
+ payTo: process.env.WALLET_ADDRESS as `0x${string}`,
+ },
+ ],
+ },
+ },
+ new x402ResourceServer(facilitatorClient).register(
+ 'eip155:84532',
+ new ConfidentialEvmScheme({ asset: process.env.TOKEN_ADDRESS as string })
+ )
+ )
+);
+
+app.get('/api/protected', (req, res) => {
+ res.json({ message: 'Payment verified. Here is your data.' });
+});
+
+app.listen(8080, () => console.log('Listening on http://localhost:8080'));
+```
+
+
+
+
+```rust
+use std::str::FromStr;
+use alloy::primitives::Address;
+use axum::{Router, routing::get, response::IntoResponse, http::StatusCode};
+use taceo_merces1_x402::{ConfidentialUSDC, V2Eip155Confidential};
+use x402_axum::X402Middleware;
+
+#[tokio::main]
+async fn main() -> eyre::Result<()> {
+ let pay_to = Address::from_str(&std::env::var("WALLET_ADDRESS")?)?;
+ let facilitator_url = std::env::var("FACILITATOR_URL")
+ .unwrap_or("https://x402-facilitator.merces1.taceo.io".to_string());
+
+ let usdc = ConfidentialUSDC::base_sepolia();
+ let x402 = X402Middleware::new(&facilitator_url);
+
+ let app = Router::new().route(
+ "/api/protected",
+ get(handler).layer(
+ x402.with_price_tag(
+ V2Eip155Confidential::price_tag(pay_to, usdc.parse("$1")?)
+ ),
+ ),
+ );
+
+ let listener = tokio::net::TcpListener::bind("0.0.0.0:8080").await?;
+ println!("Listening on http://0.0.0.0:8080");
+ axum::serve(listener, app).await?;
+
+ Ok(())
+}
+
+async fn handler() -> impl IntoResponse {
+ (StatusCode::OK, "Payment verified. Here is your data.")
+}
+```
+
+
+
+
+### How the middleware works
+
+When a request arrives without a valid `PAYMENT-SIGNATURE` header:
+
+1. The middleware returns `HTTP 402 Payment Required` with a base64-encoded `PaymentRequired`
+ payload containing the scheme, required amount, your wallet address, and the MPC public keys
+ (fetched from the facilitator's `/supported` endpoint).
+2. When the client retries with a payment, the middleware forwards it to the facilitator's
+ `/verify` endpoint.
+3. If verification succeeds, the request is forwarded to your handler.
+4. After your handler responds, the middleware calls `/settle` asynchronously.
+
+### Protecting multiple routes
+
+
+
+
+```typescript
+app.use(
+ paymentMiddleware(
+ {
+ 'GET /api/basic': { accepts: [{ scheme: 'confidential', price: '$0.10', network: 'eip155:84532', payTo: address }] },
+ 'GET /api/premium': { accepts: [{ scheme: 'confidential', price: '$5.00', network: 'eip155:84532', payTo: address }] },
+ 'POST /api/action': { accepts: [{ scheme: 'confidential', price: '$1.00', network: 'eip155:84532', payTo: address }] },
+ },
+ resourceServer
+ )
+);
+```
+
+
+
+
+```rust
+let app = Router::new()
+ .route("/api/basic",
+ get(basic_handler).layer(
+ x402.with_price_tag(V2Eip155Confidential::price_tag(pay_to, usdc.parse("$0.10")?))
+ )
+ )
+ .route("/api/premium",
+ get(premium_handler).layer(
+ x402.with_price_tag(V2Eip155Confidential::price_tag(pay_to, usdc.parse("$5.00")?))
+ )
+ );
+```
+
+
+
+
+### Configuration reference
+
+| Parameter | Description |
+|---|---|
+| `scheme` | Must be `"confidential"` |
+| `price` | Required payment amount, e.g. `"$1"`, `"$0.50"` |
+| `network` | CAIP-2 chain ID, e.g. `"eip155:84532"` for Base Sepolia |
+| `payTo` | Your wallet address that receives payments |
+| `asset` | Token contract address (provided by the TACEO facilitator automatically) |
+| Facilitator URL | `https://x402-facilitator.merces1.taceo.io` for TACEO's hosted facilitator |
+
+:::info Receiving payments
+Payments are credited to your `payTo` address as confidential Merces balance. To withdraw tokens
+back to a regular ERC-20 balance, use the `withdraw` function in the Merces client library.
+:::
diff --git a/docs/finance-solutions/x402/introduction.mdx b/docs/finance-solutions/x402/introduction.mdx
new file mode 100644
index 0000000..7ade6dc
--- /dev/null
+++ b/docs/finance-solutions/x402/introduction.mdx
@@ -0,0 +1,79 @@
+---
+title: Introduction
+---
+
+# Confidential x402
+
+Confidential x402 is a privacy extension to the x402 payment protocol that
+hides payment amounts from public view while keeping the full payment flow onchain and verifiable.
+
+:::tip What is x402?
+x402 is an open HTTP payment protocol for machine-to-machine payments. A resource server responds
+with HTTP `402 Payment Required` when a request lacks a valid payment. The client attaches a
+signed payment to its next request, the server verifies it, and access is granted.
+See the [x402 documentation](https://x402.org) for the full protocol specification.
+:::
+
+## The problem with public payments
+
+Standard x402 settles payments as plain ERC-20 token transfers, every amount is visible onchain.
+This works for flat-rate APIs, but breaks down the moment pricing becomes dynamic:
+
+- **Competitors can read your pricing strategy off the blockchain.** Every `transferWithAuthorization`
+ call exposes exactly what each customer paid.
+- **Per-customer deals are impossible to keep confidential.** Volume discounts, enterprise rates,
+ and promotional pricing are all public record.
+- **AI agents reveal their economic strategy.** Spending patterns across API providers expose which
+ data sources an agent values by how much budget it allocates.
+
+## How Confidential x402 addresses this
+
+Confidential x402 introduces a `confidential` payment scheme built on top of
+[Merces](https://core.taceo.io/articles/merces-onchain-finance/), TACEO's confidential token
+transfer system. Instead of transferring a plaintext amount, the client:
+
+1. Commits to the payment amount using a Poseidon2 cryptographic commitment.
+2. Secret-shares the amount across a network of MPC operators, encrypted to their public keys.
+3. Generates a Groth16 ZK proof that the commitment and ciphertexts are consistent.
+4. Signs the payload with EIP-712 for replay protection.
+
+The onchain contract verifies the proof and updates balance commitments, without any plaintext
+amount ever appearing onchain. The MPC network holds balances as secret shares, so no single
+party learns what anyone has or spends.
+
+
+## Components
+
+To run a full x402 confidential payment cycle TACEO operates all required components:
+
+| Component | Description |
+|---|---|
+| **Resource server** | Endpoint that responds with a x402 payment request when called |
+| **MPC network** | 3-party network that holds secret-shared balances and processes transfers |
+| **Facilitator** | Offchain service that verifies payment proofs and settles transactions |
+| **Merces contract** | Holds balance commitments and verifies ZK proofs onchain |
+
+
+See [Network & Contracts](../network-and-contracts) for addresses and endpoints.
+
+## Privacy assumptions
+
+Confidential x402 hides **payment amounts** and **account balances**. It does not hide sender or
+receiver addresses, payment frequency, or the sender-receiver relationship. For a full privacy
+analysis, see [Privacy & Trust Model](../protocol-reference/#privacy--trust-model).
+
+:::info[Private Payments]
+Confidential x402 uses Merces' **confidential mode** (amounts hidden, addresses visible).
+Merces also supports a **fully private mode** that hides sender and receiver addresses as well,
+live on Plasma testnet today. Exposing fully private mode through the x402 scheme is planned
+for an upcoming version.
+:::
+
+## Where to go next
+
+| Goal | Start here |
+|---|---|
+| Understand how the system works before writing code | [How it works](../how-it-works) |
+| Run a payment end-to-end right now | [Quickstart](../quickstart) |
+| Add the confidential scheme to your own client & server | [Integration guide](../integration-guide) |
+| Look up message schemas and ZK circuit details | [Protocol reference](../protocol-reference) |
diff --git a/docs/finance-solutions/x402/network-and-contracts.mdx b/docs/finance-solutions/x402/network-and-contracts.mdx
new file mode 100644
index 0000000..0b5ac52
--- /dev/null
+++ b/docs/finance-solutions/x402/network-and-contracts.mdx
@@ -0,0 +1,87 @@
+---
+sidebar_position: 6
+title: Network & contracts
+---
+
+# Network & contracts
+
+All Confidential x402 infrastructure is currently deployed on **Base Sepolia** (chain ID 84532).
+This is a testnet environment intended for development and integration testing.
+
+:::warning Testnet only
+The current deployment uses test tokens with no real-world value. Do not use mainnet private keys
+or real funds.
+:::
+
+## Deployed contracts
+
+| Contract | Address |
+|---|---|
+| Merces Contract | `0x7F73402cB6AF7Ffa446e2D463701e3eA89C95f8f` |
+| Confidential USDC token | `0x6AA4dd47444154A1E4424D08622EF6e96bf66de6` |
+
+Contract source code is available in the
+[merces1-x402 GitHub repository](https://github.com/TaceoLabs/merces1-x402).
+
+## TACEO-hosted endpoints
+
+| Service | URL |
+|---|---|
+| Faucet | `https://faucet.merces1.taceo.io` |
+| Facilitator | `https://x402-facilitator.merces1.taceo.io` |
+| Resource server (test) | `https://x402-server.merces1.taceo.io` |
+| MPC node 0 | `https://node0.merces1.taceo.io` |
+| MPC node 1 | `https://node1.merces1.taceo.io` |
+| MPC node 2 | `https://node2.merces1.taceo.io` |
+
+## Chain details
+
+| Parameter | Value |
+|---|---|
+| Network name | Base Sepolia |
+| Chain ID | `84532` |
+| CAIP-2 identifier | `eip155:84532` |
+| Block explorer | [https://sepolia.basescan.org](https://sepolia.basescan.org) |
+| Public RPC | `https://sepolia.base.org` |
+
+## Faucet API
+
+The faucet funds a new Merces wallet with 1,000 test tokens. Each address is limited to one
+claim per 24 hours.
+
+**Endpoint:** `POST /claim/{address}`
+
+```bash
+curl -X POST https://faucet.merces1.taceo.io/claim/0xYourWalletAddress
+```
+
+**Responses:**
+
+| Status | Meaning |
+|---|---|
+| `200 OK` | Tokens deposited successfully |
+| `429 Too Many Requests` | Address already claimed within the last 24 hours |
+| `500 Internal Server Error` | Faucet encountered an error, try again shortly |
+
+## MPC public keys
+
+The BabyJubJub public keys of the three MPC operators are published by the facilitator's
+`/supported` endpoint and injected into every `PaymentRequired` response automatically. You do
+not need to configure them manually.
+
+To fetch them directly:
+
+```bash
+curl https://x402-facilitator.merces1.taceo.io/supported
+```
+
+The response includes the current MPC public keys alongside the supported scheme, network, and
+contract address.
+
+## Support
+
+For questions, issues, or integration help:
+
+- **Discord:** [taceo.io/discord](https://taceo.io/discord)
+- **GitHub:** [github.com/TaceoLabs/merces1-x402](https://github.com/TaceoLabs/merces1-x402)
+- **Email:** [hello@taceo.io](mailto:hello@taceo.io)
diff --git a/docs/finance-solutions/x402/protocol-reference.mdx b/docs/finance-solutions/x402/protocol-reference.mdx
new file mode 100644
index 0000000..c3684e0
--- /dev/null
+++ b/docs/finance-solutions/x402/protocol-reference.mdx
@@ -0,0 +1,282 @@
+---
+sidebar_position: 5
+title: Protocol reference
+---
+
+# Protocol reference
+
+This page documents the wire format for each message in the Confidential x402 protocol, the ZK
+circuit, and the privacy and trust model.
+
+---
+
+## Payment schemas
+
+### PaymentRequired (402 response)
+
+The resource server encodes this object as base64 and sends it in the body of its `402` response.
+
+```json
+{
+ "x402Version": 2,
+ "resource": {
+ "url": "/api/premium-data",
+ "description": "Premium data endpoint"
+ },
+ "accepts": [
+ {
+ "scheme": "confidential",
+ "network": "eip155:84532",
+ "amount": "1000000",
+ "asset": "0xUSDC...",
+ "payTo": "0xResourceServer...",
+ "maxTimeoutSeconds": 300,
+ "extra": {
+ "confidentialToken": "0xMercesContract...",
+ "eip712Domain": {
+ "name": "Merces",
+ "version": "1"
+ },
+ "mpcPks": [
+ ["", ""],
+ ["", ""],
+ ["", ""]
+ ]
+ }
+ }
+ ]
+}
+```
+
+| Field | Type | Description |
+|---|---|---|
+| `x402Version` | `number` | Always `2` |
+| `scheme` | `string` | Always `"confidential"` |
+| `network` | `string` | CAIP-2 chain identifier, e.g. `"eip155:84532"` |
+| `amount` | `string` | Required payment in token base units (e.g. USDC with 6 decimals) |
+| `asset` | `string` | ERC-20 token contract address |
+| `payTo` | `string` | Resource server's receiving wallet address |
+| `maxTimeoutSeconds` | `number` | Maximum age of a valid payment signature in seconds |
+| `extra.confidentialToken` | `string` | Merces contract address |
+| `extra.eip712Domain` | `object` | EIP-712 domain name and version for signing |
+| `extra.mpcPks` | `[[x,y], ...]` | BabyJubJub public keys of the three MPC operators |
+
+### PaymentPayload (client → server)
+
+The client encodes this object as base64 and sends it in the `PAYMENT-SIGNATURE` header of its
+retried request.
+
+```json
+{
+ "x402Version": 2,
+ "resource": { "url": "/api/premium-data" },
+ "accepted": {
+ "scheme": "confidential",
+ "network": "eip155:84532",
+ "amount": "1000000",
+ "asset": "0xUSDC...",
+ "payTo": "0xResourceServer...",
+ "maxTimeoutSeconds": 300,
+ "extra": { "...": "..." }
+ },
+ "payload": {
+ "signature": "0x",
+ "authorization": {
+ "from": "0xClient...",
+ "to": "0xResourceServer...",
+ "amountCommitment": "",
+ "amountR": "",
+ "beta": "",
+ "ciphertexts": ["", "", "", "", "", ""],
+ "senderPk": ["", ""],
+ "nonce": "0x<32-bytes>",
+ "deadline": "",
+ "proof": {
+ "pi_a": ["", "", "1"],
+ "pi_b": [["", ""], ["", ""], ["1", "0"]],
+ "pi_c": ["", "", "1"],
+ "protocol": "groth16",
+ "curve": "bn254"
+ }
+ }
+ }
+}
+```
+
+| Field | Type | Description |
+|---|---|---|
+| `payload.signature` | `0x...` | EIP-712 signature over the authorization struct |
+| `authorization.from` | `address` | Client's wallet address (token owner) |
+| `authorization.to` | `address` | Resource server's wallet address (recipient) |
+| `authorization.amountCommitment` | `Fr` | Poseidon2 commitment to `(amount, blindingFactor)` |
+| `authorization.amountR` | `Fr` | `blindingFactor` for amount commitment |
+| `authorization.beta` | `Fr` | Public input derived during proof generation |
+| `authorization.ciphertexts` | `Fr[6]` | Six BN254 field elements: two encrypted shares per MPC operator |
+| `authorization.senderPk` | `[x, y]` | Ephemeral BabyJubJub public key used for ECDH encryption |
+| `authorization.nonce` | `bytes32` | Unique 32-byte nonce for replay protection |
+| `authorization.deadline` | `uint` | Unix timestamp after which the signature is invalid |
+| `authorization.proof` | `Groth16Proof` | Groth16 proof in snarkjs format |
+
+### EIP-712 typed data
+
+The client signs the following typed data. The `verifyingContract` is the Merces contract address
+provided in `extra.confidentialToken`.
+
+```json
+{
+ "domain": {
+ "name": "Merces",
+ "version": "1",
+ "chainId": 84532,
+ "verifyingContract": "0xMercesContract..."
+ },
+ "types": {
+ "TransferFromAuthorization": [
+ { "name": "sender", "type": "address" },
+ { "name": "receiver", "type": "address" },
+ { "name": "amountCommitment", "type": "uint256" },
+ { "name": "ciphertextHash", "type": "bytes32" },
+ { "name": "beta", "type": "uint256" },
+ { "name": "nonce", "type": "uint256" },
+ { "name": "deadline", "type": "uint256" }
+ ]
+ },
+ "primaryType": "TransferFromAuthorization"
+}
+```
+
+`ciphertextHash` is `keccak256(abi.encode(ciphertexts, senderPk))`.
+
+### Facilitator API
+
+#### POST /verify
+
+Called by the resource server before serving content.
+
+**Request:**
+
+```json
+{
+ "x402Version": 2,
+ "paymentPayload": { "...": "..." },
+ "paymentRequirements": { "...": "..." }
+}
+```
+
+**Response (success):**
+
+```json
+{ "isValid": true, "payer": "0xClient..." }
+```
+
+**Response (failure):**
+
+```json
+{ "isValid": false, "invalidReason": "insufficient_funds" }
+```
+
+#### POST /settle
+
+Called by the resource server after content has been served.
+
+**Request:** Same structure as `/verify`.
+
+**Response:**
+
+```json
+{
+ "success": true,
+ "transaction": "0xTxHash...",
+ "network": "eip155:84532"
+}
+```
+
+### ZK circuit
+
+The Groth16 proof is generated over the BN254 curve and proves four simultaneous claims:
+
+| Claim | Description |
+|---|---|
+| Commitment correctness | `amountCommitment = Poseidon2([amount, blindingFactor])` |
+| Share validity | Three additive shares sum to `amount` modulo the BN254 scalar field order |
+| Encryption correctness | Each share is correctly encrypted to the stated MPC operator key via BabyJubJub ECDH |
+| Range | `amount` fits in 80 bits |
+
+**Public inputs (15 elements):**
+
+| Index | Value |
+|---|---|
+| 0 | `beta` |
+| 1–2 | `senderPk.x`, `senderPk.y` |
+| 3 | `amountCommitment` |
+| 4–9 | `ciphertexts[0..5]` |
+| 10–11 | `mpcPk[0].x`, `mpcPk[0].y` |
+| 12–13 | `mpcPk[1].x`, `mpcPk[1].y` |
+| 14–15 | `mpcPk[2].x`, `mpcPk[2].y` |
+
+**Private inputs:** `amount`, `blindingFactor`, three plaintext shares, three blinding shares,
+BabyJubJub ephemeral secret key.
+
+---
+
+## Privacy & trust model
+
+### What is protected
+
+| Data | Standard x402 | Confidential x402 | How |
+|---|---|---|---|
+| Transfer amounts | Plaintext in `transferWithAuthorization` | Poseidon2 commitment onchain | Real amount secret-shared across MPC network |
+| Account balances | Public via ERC-20 `balanceOf()` | Only a commitment stored onchain | Actual balances held as secret shares by MPC operators |
+| Spending patterns | Full payment history enables behaviour profiling | Observers can count payments but cannot sum amounts | Amounts hidden; only frequency and counterparties visible |
+| Price discrimination evidence | Onchain proof of what each user paid | No onchain evidence of negotiated price | Resource server holds client payment data offchain |
+
+### What is not protected
+
+**Onchain:**
+
+| Leaked data | Source | Impact |
+|---|---|---|
+| Sender address | `ActionQuery.sender` | Anyone can see who sends payments |
+| Receiver address | `ActionQuery.receiver` | Anyone can see who receives payments |
+| Payment frequency and timing | `transferFrom()` call events | Observers can count API calls and when they occur |
+| Nonce consumption | `usedNonces` mapping | Number of nonces reveals payment count per sender |
+| Sender–receiver graph | Aggregated from all transfers | Can map which clients use which APIs |
+
+**HTTP layer:**
+
+| Leaked data | Who can see it |
+|---|---|
+| Required payment amount | Resource server (sets it), facilitator; transmitted over TLS to client |
+| API endpoint path | Resource server, facilitator |
+| Client wallet address | Resource server, facilitator |
+
+The amount in the `PaymentRequired` response is visible to the client over TLS but is not written
+to the blockchain. A passive observer without TLS access cannot learn the amount.
+
+### Trust model
+
+**MPC network**
+
+Privacy of payment amounts and balances depends on the MPC operators not colluding. The current
+deployment uses **REP3 secret sharing**: where a majority of operators must cooperate to
+reconstruct any amount or balance. If two operators are honest, no amount is revealed.
+TACEO operates all three nodes in the current testnet deployment.
+
+**Facilitator**
+
+The facilitator is a **liveness dependency, not a privacy dependency**. It can refuse to verify
+or settle payments, and it can observe which addresses are paying which resource servers. It
+cannot learn balances, forge valid proofs or signatures, or steal funds.
+
+**Merces contract**
+
+The contract is the trust anchor for correctness. It verifies the client's Groth16 proof before
+enqueuing any transfer, verifies the MPC's proof before committing balance updates, and enforces
+nonce uniqueness and deadline expiry.
+
+
+### Roadmap to stronger privacy
+
+The current `confidential` scheme hides amounts and balances. Sender and receiver addresses remain
+visible onchain. Future versions will include an enhanced variant that additionally hide
+the sender–receiver relationship, building on Merces' existing support for fully private transactions.
diff --git a/docs/finance-solutions/x402/quickstart.mdx b/docs/finance-solutions/x402/quickstart.mdx
new file mode 100644
index 0000000..1e054f8
--- /dev/null
+++ b/docs/finance-solutions/x402/quickstart.mdx
@@ -0,0 +1,156 @@
+---
+sidebar_position: 3
+title: Quickstart
+---
+
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+
+# Quickstart
+
+This guide gets you making a confidential payment in under five minutes using TACEO's hosted
+infrastructure, no contract deployment, no facilitator setup required.
+
+You will:
+1. Fund a new wallet with test tokens from the faucet.
+2. Send a request to the TACEO resource server.
+3. Watch the payment go through automatically.
+
+## Prerequisites
+
+- Node.js 20+ (TypeScript) or Rust 1.91+ (Rust)
+- A wallet private key
+
+## Step 1: Install the package
+
+
+
+
+```bash
+npm install @taceo/confidential-x402 @x402/fetch viem
+```
+
+
+
+
+Add the following to your `Cargo.toml`:
+
+```toml
+[dependencies]
+alloy = "2"
+eyre = "0.6"
+reqwest = "0.13"
+taceo-merces1-x402 = { git = "https://github.com/TaceoLabs/merces1-x402.git", version = "0.1", features = ["server", "client"] }
+tokio = { version = "1", features = ["macros", "rt-multi-thread"] }
+x402-reqwest = "1"
+```
+
+
+
+
+## Step 2: Get test tokens from the faucet
+
+Each new wallet needs to be funded before it can make confidential payments. The faucet deposits
+1,000 test tokens and enforces a 24-hour cooldown per address.
+
+```bash
+curl -X POST https://faucet.merces.taceo.io/claim/
+```
+
+
+
+:::warning Keep your private key safe
+Even on testnet, never commit private keys to source control. Use environment variables or a
+secrets manager.
+:::
+
+## Step 3: Send a confidential payment
+
+The client library intercepts the `402 Payment Required` response, constructs the proof, and
+retries the request automatically. Your application code makes a normal HTTP GET, the payment
+is invisible to it.
+
+
+
+
+```typescript
+import { privateKeyToAccount } from 'viem/accounts';
+import { x402Client, wrapFetchWithPayment } from '@x402/fetch';
+import { ConfidentialEvmScheme } from '@taceo/confidential-x402/client';
+
+const privateKey = process.env.PRIVATE_KEY as `0x${string}`;
+const signer = privateKeyToAccount(privateKey);
+
+// Register the confidential scheme
+const client = new x402Client();
+client.register('eip155:*', new ConfidentialEvmScheme(signer));
+
+// Wrap fetch, payments are handled automatically
+const fetchWithPayment = wrapFetchWithPayment(fetch, client);
+
+// Make the request as normal
+const response = await fetchWithPayment(
+ 'https://resource.merces.taceo.io/api/protected',
+ { method: 'GET' }
+);
+
+console.log('Status:', response.status);
+console.log('Body:', await response.text());
+```
+
+
+
+
+```rust
+use alloy::signers::local::PrivateKeySigner;
+use reqwest::Client;
+use taceo_merces1_x402::V2Eip155ConfidentialClient;
+use x402_reqwest::{ReqwestWithPayments, ReqwestWithPaymentsBuild, X402Client};
+
+#[tokio::main]
+async fn main() -> eyre::Result<()> {
+ let private_key = std::env::var("PRIVATE_KEY")?;
+ let signer: PrivateKeySigner = private_key.parse()?;
+
+ // Register the confidential scheme
+ let x402_client = X402Client::new()
+ .register(V2Eip155ConfidentialClient::new(signer));
+
+ // Wrap reqwest, payments are handled automatically
+ let http_client = Client::new()
+ .with_payments(x402_client)
+ .build();
+
+ // Make the request as normal
+ let response = http_client
+ .get("https://resource.merces.taceo.io/api/protected")
+ .send()
+ .await?;
+
+ println!("Status: {}", response.status());
+ println!("Body: {}", response.text().await?);
+
+ Ok(())
+}
+```
+
+
+
+
+## What happens under the hood
+
+When `fetchWithPayment` (or the wrapped `reqwest` client) receives a `402` response:
+
+1. It reads the `PaymentRequired` payload from the response body.
+2. The `ConfidentialEvmScheme` generates a Groth16 ZK proof (~60ms in Rust / ~400ms in SnarkJS) and constructs the signed
+ payment payload.
+3. The original request is retried with a `PAYMENT-SIGNATURE` header.
+4. The TACEO resource server forwards the payment to the TACEO facilitator for verification.
+5. On success, the server returns `200 OK` with the response body.
+6. Settlement happens asynchronously in the background.
+
+## Next steps
+
+- **Understand the full protocol in detail** → [How it works](../how-it-works)
+- **Add confidential x402 payments to your own API** → [Integration guide](../integration-guide)
+
diff --git a/docs/finance-solutions/yield/introduction.mdx b/docs/finance-solutions/yield/introduction.mdx
new file mode 100644
index 0000000..8fb928e
--- /dev/null
+++ b/docs/finance-solutions/yield/introduction.mdx
@@ -0,0 +1,59 @@
+---
+title: Introduction
+sidebar_label: Private Yield
+---
+
+# Private Yield
+
+Private Yield brings compliant, confidential yield to Ethereum, built on top of
+[Merces](/docs/finance-solutions/payments/introduction). Users earn on private balances without exposing positions,
+counterparty relationships, or strategy onchain, and without giving up the regulatory posture
+required to operate in real markets.
+
+:::info Coming soon
+Private Yield is in active development. The capability extends Merces from a confidential transfer
+system into a confidential earning system, while keeping the same integration model and the same
+compliance primitives.
+:::
+
+## Why this is hard today
+
+Public DeFi yield broadcasts every position. Anyone can read a wallet's allocations, infer
+strategy, copy or front-run trades, and reconstruct counterparty graphs. For institutions,
+treasuries, and any user that values strategic privacy, that exposure is the reason they aren't
+onchain at all.
+
+The two existing paths each fail in their own way:
+
+- **Move to a private chain.** Forces migration off Ethereum and away from the assets, liquidity,
+ and integrations that matter.
+- **Use a privacy mixer.** Obscures flows but doesn't compose with regulated counterparties or
+ give institutions a defensible compliance story.
+
+## What we're building
+
+Private Yield uses the same Merces private-balance model as
+[Private Payments](/docs/finance-solutions/payments/introduction) and [Confidential x402](/docs/finance-solutions/x402/introduction):
+balances held as secret shares across the TACEO Network, state transitions verified onchain via
+CoSNARKs, compliance primitives built into the protocol layer.
+
+The yield layer adds the ability for private balances to participate in earning strategies,
+without revealing positions, without leaving Ethereum, and without compromising the compliance
+guarantees that make these rails deployable in regulated markets.
+
+## What's planned
+
+- Yield on private ERC-20 balances (starting with USDC)
+- Allowlists and reveal rules carried through from Merces' [Compliance](/docs/finance-solutions/compliance/introduction)
+ layer
+- The same SDK integration model as Private Payments, issuers and fintechs can offer yield
+ inside their existing product surface
+
+## Stay in the loop
+
+Private Yield is shipping toward public testnet. To get early access, integration support, or to
+discuss a specific use case, [email the team](mailto:hello@taceo.io) or
+[join Discord](https://taceo.io/discord).
+
+In the meantime, the foundation is already live, see [Private Payments](/docs/finance-solutions/payments/introduction)
+to understand the transfer system this builds on.
diff --git a/docs/index.mdx b/docs/index.mdx
index edab7ae..789af3c 100644
--- a/docs/index.mdx
+++ b/docs/index.mdx
@@ -2,99 +2,110 @@
id: index
title: Welcome to TACEO
slug: /
-description: Start here to understand TACEO Network, privacy services, and developer tooling
+description: Private onchain finance, integrable privacy services, and the TACEO Network that powers them
---
import Link from "@docusaurus/Link";
# Welcome to TACEO
-TACEO provides private execution infrastructure for applications that need to compute on sensitive data without exposing inputs.
+TACEO provides a privacy layer for applications that need to compute on
+sensitive data without exposing inputs. Our **finance solutions** sit on top of **integrable
+privacy services**, all powered by the **TACEO Network**, a production MPC network already
+running at global scale.
-This documentation is organized around three areas: the **TACEO Network**, **production privacy services** such as TACEO:OPRF and TACEO:Proof, and **developer tooling** for collaborative zero-knowledge workflows (coSNARKs).
+We're best known for our identity work: TACEO Network is a privacy backbone for
+global-scale identity systems, with services used by **World** and **zkPassport**. We're now bringing
+the same stack to onchain finance through **Merces**.
-If you are new, start by choosing the path that best matches your goal. This page is designed to help you get oriented quickly and then move into the right part of the documentation.
+## Build private payments on the chain you already use
-## Choose your path
+
-
+### **Finance Solutions**
-
-
-**Understand how the TACEO Network works**
-
+Private payments on the EVM chains you already use, built on Merces. Merces wraps ERC-20s like USDC into private balances, with compliance primitives at the protocol layer.
-
+**Live on Arc, Base, and Plasma testnets.** ~5M demo transactions, ~300 TPS, sub-cent gas on L2. Mainnet deployment in progress. The MPC protocol underneath is the same one TACEO co-architected for World's iris-code system, in production at global scale.
-**Best for:** Potential customers, partners, and technical stakeholders
+**Looking for design partners.** Stablecoin issuers, fintechs, and payment infrastructure teams shipping private rails to production. Talk to us.
-Learn how the network enables verifiable collaboration over encrypted data, what security assumptions it relies on, and why private execution matters for real applications.
+{/* prettier-ignore */}
+
+ Read Finance Solutions
+ Try the Quickstart
+ Become a Design Partner
+
-**Start here:**
+
-1. **[Read Network Overview](/docs/taceo-network/)** - Understand the motivation and system model
-2. **[Review Architecture](/docs/taceo-network/network#taceo-network-how-it-works)** - See how the network operates
+## Other paths
-**Next steps:** Explore the [Security Model](/docs/taceo-network/node-operators#security-model) and [Network Governance](/docs/taceo-network/governance)
+
-
-
+
-
-
-**Add privacy services to my application**
-
+### **Privacy Services**
-
+_OPRF, Proof, OMap_
-**Best for:** Application developers, product teams, and technical founders
+Production-ready privacy primitives you can call directly: privacy-preserving nullifiers
+(TACEO:OPRF), private proof delegation (TACEO:Proof), and confidential shared state (TACEO:OMap).
-Use TACEO services when you want production-ready privacy primitives in your application, such as privacy-preserving nullifiers with TACEO:OPRF or private proof delegation with TACEO:Proof.
+**Use this if you are:** an application developer adding a single privacy feature without taking
+on a full payment system.
-**Start here:**
+{/* prettier-ignore */}
+Explore Services
-1. **[Get an overview of the TACEO Services](/docs/services/overview)** - Compare TACEO:OPRF, TACEO:Proof and see upcoming services
-2. **[Explore TACEO:OPRF](/docs/taceo-oprf/overview)** - Understand privacy-preserving nullifiers and OPRFs
-3. **[Explore TACEO:Proof](/docs/taceo-proof/overview)** - Understand private proof delegation
+
-**Next steps:** [Email us for production access](mailto:hello@taceo.io) and [join Discord](https://taceo.io/discord) for technical support
+
+Understand how the network enables verifiable collaboration over encrypted data, the security
+model, and governance. The same MPC foundation TACEO co-architected for World's iris-code
+system runs in production at global scale.
-**Best for:** Crypto developers, researchers, and privacy-tech experimenters
+**Use this if you are:** a partner, technical stakeholder, or potential node operator evaluating
+the foundation everything else builds on.
-Experiment with coCircom and coNoir to run collaborative zero-knowledge workflows in an MPC setting. These tools are intended for developers exploring custom circuits and coSNARK-based systems.
+{/* prettier-ignore */}
+Explore the Network
-**Start here:**
+
-1. **[CoSNARKs Overview](/docs/overview)** - Understand collaborative zero-knowledge proofs
-2. **[Install Tools](/docs/getting-started/install)** - Set up coCircom or coNoir locally
-3. **[Run an Example](/docs/getting-started/quick-start-co-circom)** - Try your first collaborative circuit
+
-**Next steps:** Explore [examples](/docs/examples/) and [network configuration](/docs/network-config/)
+### **Collaborative SNARKs**
-**Note:** These tools are currently for experimentation and development. They require running your own MPC environment and are not the same as using TACEO’s managed services.
+_coCircom, coNoir_
-
-
+Experiment with collaborative zero-knowledge workflows in an MPC setting. Run custom circuits and
+coSNARK-based systems locally. Distinct from TACEO's managed services.
+
+**Use this if you are:** a crypto developer, researcher, or privacy-tech experimenter.
+
+{/* prettier-ignore */}
+Experiment
-## What is available today
+
-- **TACEO Network documentation** explains the system architecture, security model, and application context
-- **TACEO:OPRF** and **TACEO:Proof** are the main service entry points for teams looking to integrate privacy features
-- **Developer tooling** is available for teams exploring MPC-based proving workflows
+## Where TACEO is today
-This means some parts of the docs describe production-oriented services, while others describe lower-level or experimental developer workflows. If you are evaluating TACEO for an application, the services section is usually the right place to begin.
+- **Finance Solutions.** Merces is live on Arc, Base, and Plasma testnets with ~5M demo transactions, ~300 TPS, and single-digit-cents gas on L2. Mainnet deployment in progress.
+- **Privacy Services.** TACEO:OPRF and TACEO:Proof are in production for partners including World and zkPassport.
+- **TACEO Network.** The MPC infrastructure underpinning all of the above is built on the same foundation TACEO co-architected for World's iris-code system, in production at global scale.
## Learning Resources
@@ -125,10 +136,10 @@ New to privacy-preserving computation? Start here:
- Identity & Uniqueness
+ Finance
- Finance
+ Identity & Uniqueness
More Use Cases
@@ -180,4 +191,4 @@ New to privacy-preserving computation? Start here:
---
-**Ready to dive deeper?** Use the sidebar to explore the TACEO Network, Services, and Developer Tools sections.
+**Ready to dive deeper?** Use the sidebar to explore Finance Solutions, Services, the TACEO Network, and Developer Tools.
diff --git a/docs/taceo-network/governance.mdx b/docs/taceo-network/governance.mdx
index fd04654..1ef37ba 100644
--- a/docs/taceo-network/governance.mdx
+++ b/docs/taceo-network/governance.mdx
@@ -15,7 +15,7 @@ Current governance responsibilities include:
Applications using the network are involved in upgrade coordination for the services they depend on.
-Major changes are coordinated through an off-chain process with production integrators so service evolution is aligned with real workload requirements.
+Major changes are coordinated through an offchain process with production integrators so service evolution is aligned with real workload requirements.
## Node participation
diff --git a/docs/taceo-network/network.mdx b/docs/taceo-network/network.mdx
index 7312cb6..6cca413 100644
--- a/docs/taceo-network/network.mdx
+++ b/docs/taceo-network/network.mdx
@@ -35,7 +35,7 @@ Requests generally follow the same high-level flow:
An application sends a request through a TACEO service API, for example proof generation, OPRF evaluation, or private state updates.
2. **Service coordination**
- The request is handled by a specific service instance. Each instance has its own cryptographic keys, committee configuration, and operational policy, which can be handled by traditional off-chain processes or an on-chain smart contract.
+ The request is handled by a specific service instance. Each instance has its own cryptographic keys, committee configuration, and operational policy, which can be handled by traditional offchain processes or an onchain smart contract.
3. **Distributed MPC execution**
A committee of MPC nodes executes the protocol over encrypted or secret-shared inputs. It also optionally generates a coSNARK of the correct execution of the protocol.
diff --git a/docs/taceo-oprf/concepts.mdx b/docs/taceo-oprf/concepts.mdx
index 8f3bf58..d1a7ce6 100644
--- a/docs/taceo-oprf/concepts.mdx
+++ b/docs/taceo-oprf/concepts.mdx
@@ -41,7 +41,7 @@ TACEO:OPRF builds on the OPRF design with threshold security:
The TACEO:OPRF architecture consists of:
1. Independent OPRF nodes that hold shares of the OPRF secret key(s)
-2. On-chain public registry of corresponding OPRF public keys
+2. Onchain public registry of corresponding OPRF public keys
3. Authorized accounts that can trigger secure key generation

diff --git a/docs/taceo-oprf/use-cases.mdx b/docs/taceo-oprf/use-cases.mdx
index cec9338..45c69fb 100644
--- a/docs/taceo-oprf/use-cases.mdx
+++ b/docs/taceo-oprf/use-cases.mdx
@@ -42,7 +42,7 @@ DeFi protocols need to pay referral fees and track user activity, but current me
### Current Surveillance Model
- Referral tracking requires linking wallets to referrers
- Fee distribution exposes user trading patterns
-- On-chain analysis reveals complete transaction history
+- Onchain analysis reveals complete transaction history
### TACEO:OPRF Solution
diff --git a/docs/taceo-proof/dev/bestpractice.mdx b/docs/taceo-proof/dev/bestpractice.mdx
index f3147a5..04dfa7b 100644
--- a/docs/taceo-proof/dev/bestpractice.mdx
+++ b/docs/taceo-proof/dev/bestpractice.mdx
@@ -57,13 +57,13 @@ The choice depends on your use case. Here’s what to consider:
**Use Shamir when...**
* You’ve already **computed the extended witness** locally and can take the increased upload.
-* You want **stronger security guarantees**—the protocol still falls under the assumptions in the referenced paper, resulting in a notion of active security.
+* You want **stronger security guarantees**, the protocol still falls under the assumptions in the referenced paper, resulting in a notion of active security.
* You’re okay with slightly larger uploads and minimal performance gains in return for stricter protocol guarantees.
### Handling proof latencies & fallbacks
When scheduling a coSNARK execution, there are a few practical steps and strategies to help reduce latency and improve robustness in case of failures.
- - You can **cache** the used **node operators** temporarily if you're planning to submit additional proofs soon after. Just be aware that **node operators can go offline** — if a cached key is stale, your request will fail at scheduling time.
+ - You can **cache** the used **node operators** temporarily if you're planning to submit additional proofs soon after. Just be aware that **node operators can go offline.** If a cached key is stale, your request will fail at scheduling time.
This reduces them amount of API calls to schedule a coSNARK job to just 1!
- After encrypting your input shares for the selected providers, you include the corresponding Node Provider IDs and submit the job.
diff --git a/docs/taceo-proof/dev/blueprints.mdx b/docs/taceo-proof/dev/blueprints.mdx
index afa2c5c..4ca986d 100644
--- a/docs/taceo-proof/dev/blueprints.mdx
+++ b/docs/taceo-proof/dev/blueprints.mdx
@@ -1,5 +1,5 @@
# Blueprints and Vouchers
-At the heart of TACEO:Proof are *blueprints* — registered circuit definitions that specify everything the network needs to generate a coSNARK proof. A blueprint contains the circuit, proving key, and verification key, and it defines how the proof will be computed.
+At the heart of TACEO:Proof are *blueprints*, registered circuit definitions that specify everything the network needs to generate a coSNARK proof. A blueprint contains the circuit, proving key, and verification key, and it defines how the proof will be computed.
Developers and projects that want to delegate private proof generation to the network can register on TACEO:Proof and upload their own blueprints. We currently support the following blueprint types:
@@ -22,14 +22,14 @@ Registered users can upload and manage blueprints either through our API or the
Blueprints can be either public or restricted:
-* Public blueprints can be used by any user who knows the identifier—no additional authorization needed.
+* Public blueprints can be used by any user who knows the identifier, no additional authorization needed.
* Restricted blueprints require a voucher, issued by the blueprint creator, to schedule jobs. This allows for fine-grained access control over who can generate proofs.
Vouchers serve as short-lived, verifiable permits. They authorize the use of a specific blueprint and can include additional constraints such as usage limits or expiration.
### Getting and using vouchers
-To use a **restricted blueprint**, users must first obtain **a voucher** from the blueprint creator. This process involves an out-of-band authentication step—TACEO:Proof does not manage or enforce this interaction. It’s entirely up to the application or project to decide how users are verified and approved.
+To use a **restricted blueprint**, users must first obtain **a voucher** from the blueprint creator. This process involves an out-of-band authentication step, TACEO:Proof does not manage or enforce this interaction. It’s entirely up to the application or project to decide how users are verified and approved.
Once a user is deemed eligible, the blueprint creator authenticates with the CCL using their credentials. The CCL then issues a signed voucher, which is returned to the user.
diff --git a/docs/taceo-proof/ops/onboarding.mdx b/docs/taceo-proof/ops/onboarding.mdx
index c7fe18c..56f6b14 100644
--- a/docs/taceo-proof/ops/onboarding.mdx
+++ b/docs/taceo-proof/ops/onboarding.mdx
@@ -1,10 +1,10 @@
# Onboarding as a Node Provider for TACEO:Proof
-TACEO:Proof is currently in the early stages of decentralization. At this time, we operate a permissioned network with a vetted set of node operators. However, we're actively expanding, and if you're interested in joining as a Node Provider, we’d love to hear from you—reach [out here](mailto:office@taceo.io).
+TACEO:Proof is currently in the early stages of decentralization. At this time, we operate a permissioned network with a vetted set of node operators. However, we're actively expanding, and if you're interested in joining as a Node Provider, we’d love to hear from you, reach [out here](mailto:office@taceo.io).
## Hardware & Network Prerequisites
To ensure reliable performance, we expect node operators to be able to run **multiple CSEs** in parallel. Running only a single CSE introduces bottlenecks: all jobs assigned to your node would have to queue behind that one instance, slowing down the entire network.
-Since we’re still using a permissioned set of node operators, we can’t tackle throughput by sheer amount of online nodes. That’s why your setup should support **horizontal scaling**—multiple CSEs running simultaneously.
+Since we’re still using a permissioned set of node operators, we can’t tackle throughput by sheer amount of online nodes. That’s why your setup should support **horizontal scaling**, multiple CSEs running simultaneously.
### Performance Requirements
Each CSE should be able to execute our [Groth16 prover](https://github.com/TaceoLabs/co-snarks/tree/main/co-circom/co-groth16) for a circuit of size $2^{16}$ **in under one second**. This is our current baseline for acceptable latency and throughput.
diff --git a/docs/taceo-proof/ops/ops-scaling.mdx b/docs/taceo-proof/ops/ops-scaling.mdx
index 483fc7a..9bd57a8 100644
--- a/docs/taceo-proof/ops/ops-scaling.mdx
+++ b/docs/taceo-proof/ops/ops-scaling.mdx
@@ -23,7 +23,7 @@ While we don’t ingest logs or metrics, your CSE _does_ send minimal runtime me
These are used solely for **job-level tracing and auditing**, not continuous telemetry.
## Auto-Recovery & Failover
-Each CSE instance is **stateless** and identified by your secret key phrase. From TACEO:Proof’s perspective, **restarting your CSE creates a fresh logical instance**—there’s no persistent session management required.
+Each CSE instance is **stateless** and identified by your secret key phrase. From TACEO:Proof’s perspective, **restarting your CSE creates a fresh logical instance**, there’s no persistent session management required.
If you’re using our official Docker image, it comes preconfigured with:
```yaml
diff --git a/docs/taceo-proof/ops/security.md b/docs/taceo-proof/ops/security.md
index a5ef9b5..e13f0c7 100644
--- a/docs/taceo-proof/ops/security.md
+++ b/docs/taceo-proof/ops/security.md
@@ -8,7 +8,7 @@ Every Node Provider is assigned a unique **key phrase**, which serves as the see
* A **signing key** (used to authenticate messages and proofs)
The public parts of these keys are uploaded during initial registration with the TACEO:Proof network.
-> ⚠️ TACEO will never ask for your key phrase. Do not share your key phrase with _anyone_—not even someone claiming to represent TACEO.
+> ⚠️ TACEO will never ask for your key phrase. Do not share your key phrase with _anyone_, not even someone claiming to represent TACEO.
The CSE binary enforces a minimum entropy requirement for key phrases to help prevent weak seeds. However, it is your responsibility to:
* Keep the key phrase **strictly local** to your machine.
diff --git a/docs/taceo-proof/overview.mdx b/docs/taceo-proof/overview.mdx
index ef2425e..0e1d4db 100644
--- a/docs/taceo-proof/overview.mdx
+++ b/docs/taceo-proof/overview.mdx
@@ -40,7 +40,7 @@ Clients submit encrypted input shares and a short-lived voucher, and receive bac
You receive the node operators with their ids, encryption keys and verification keys.
You should request a new set of node operators for each coSNARK job to decrease waiting times.
We do not recommend to use the same node operators over a longer period of time.
- But you may **cache** them temporarily if you're planning to submit additional proofs soon after. Just be aware that **node operators can go offline** — if a cached key is stale, your request will fail at scheduling time.
+ But you may **cache** them temporarily if you're planning to submit additional proofs soon after. Just be aware that **node operators can go offline.** If a cached key is stale, your request will fail at scheduling time.
> 💡 If you're submitting multiple proofs at once, you can reuse the same set of node operators across jobs. This reduces the number of HTTP calls and enables you to encrypt in parallel.
diff --git a/docs/use-cases/ai.md b/docs/use-cases/ai.md
index c178d2b..84b6ff3 100644
--- a/docs/use-cases/ai.md
+++ b/docs/use-cases/ai.md
@@ -4,6 +4,6 @@ Bringing AI to Blockchains was an - until yet - unfulfilled promise. Verified of
A premise for ZK-powered ML inference is: the one who runs the actual computation and generates the ZK proof must have all data at its hand. As long as this entity is the same as the one who owns IP rights for the (trained) model and user inputs contain no sensitive information, ZK is sufficient.
-In cases where users send prompts to the ML model, which shouldn’t be shared with anyone additional encryption techniques need to be added to ZK. With co-SNARKS user inputs can be fully shielded from AI service providers, while not restricting them in offering their services.
+In cases where users send prompts to the ML model, which shouldn’t be shared with anyone additional encryption techniques need to be added to ZK. With co-SNARKS user inputs can be fully private from AI service providers, while not restricting them in offering their services.
In general, ZK proof generation is hardware intense and often requires specialized equipment. ZK cloud providers or proof markets offer proof computations as a service. As a side effect, all data needs to be shared with the prover, which could leak proprietary IP, like model weights. Co-SNARKS could mitigate this issue by splitting up the sensitive data (e.g. model weights) in secret shares and distributing them among the MPC network.
diff --git a/docs/use-cases/defi.md b/docs/use-cases/defi.md
index 5ac4833..ee292a3 100644
--- a/docs/use-cases/defi.md
+++ b/docs/use-cases/defi.md
@@ -1,11 +1,11 @@
# DeFi
-Decentralized Finance (DeFi) is transforming the traditional financial landscape by offering open, permissionless, and transparent services. However, privacy and security remain significant challenges. Public on-chain information relating to a user’s financial records, trade intentions or identity could be misused in a sense that the user ends up with worse terms and economic disadvantages.
+Decentralized Finance (DeFi) is transforming the traditional financial landscape by offering open, permissionless, and transparent services. However, privacy and security remain significant challenges. Public onchain information relating to a user’s financial records, trade intentions or identity could be misused in a sense that the user ends up with worse terms and economic disadvantages.
-For instance, publishing a large limit order on-chain immediately reveals the intention of a user to sell or buy a certain asset in high quantities. Market participants know how to use this new piece of information to their advantage. Traditional finance faced the same issue with public stock markets. As a response they introduced so-called Dark Pools, which keep the price impact for large quantity trades as low as possible by matching trades privately.
+For instance, publishing a large limit order onchain immediately reveals the intention of a user to sell or buy a certain asset in high quantities. Market participants know how to use this new piece of information to their advantage. Traditional finance faced the same issue with public stock markets. As a response they introduced so-called Dark Pools, which keep the price impact for large quantity trades as low as possible by matching trades privately.
In TradFi Dark Pools work because market participations trust a central entity to run the service. Blockchains aim for getting rid of these types of intermediaries. However, running a Dark Pool via a public Smart Contract would not work, since all sensitive information would immediately be leaked.
We need to make sure that sensitive information (e.g. Limit order: I want to buy 10 BTC @ price $100k) is kept private. Yet, at some point multiple private inputs need to be combined so that a buy order can be matched with a sell order.
-co-SNARKs have the ability to compute on multiple, encrypted user inputs, while not leaking any information about the inputs itself. For the example of on-chain Dark Pools, users could submit their desire to trade large quantities in an encrypted form to the MPC network, which processes and match trades with each other. Market participants don't get any information headstart they could use for their very own advantage and users get the best price possible.
+co-SNARKs have the ability to compute on multiple, encrypted user inputs, while not leaking any information about the inputs itself. For the example of onchain Dark Pools, users could submit their desire to trade large quantities in an encrypted form to the MPC network, which processes and match trades with each other. Market participants don't get any information headstart they could use for their very own advantage and users get the best price possible.
diff --git a/docs/use-cases/finance.mdx b/docs/use-cases/finance.mdx
index 2ca8446..6b2df90 100644
--- a/docs/use-cases/finance.mdx
+++ b/docs/use-cases/finance.mdx
@@ -1,24 +1,55 @@
-# Private onchain accounts for payroll, treasury, and B2B payments
+---
+title: Finance
+description: Confidential payments, treasury, and B2B settlement on the chains you already use
+---
-Onchain financial systems offer transparency and programmability, but this transparency comes at a cost. Public transaction data exposes balances, counterparties, and intent, which can be exploited or make systems unusable for real-world financial operations.
+# Confidential payments, treasury, and B2B settlement on public chains
-For instance, executing payroll, treasury transfers, or large trades on public infrastructure reveals sensitive financial information. This creates risks ranging from front-running to operational exposure, and prevents many institutions from adopting onchain rails.
+Onchain financial systems offer transparency and programmability, but that transparency comes at
+a cost. Public transaction data exposes balances, counterparties, and intent, which can be
+exploited, and which makes onchain rails unusable for most real-world financial operations.
-Traditional finance solves this through private accounts and restricted data access, but relies on centralized intermediaries.
+Executing payroll, treasury transfers, vendor payments, or large trades on a public ledger reveals
+sensitive financial information by default. This creates risks that range from front-running and
+copy-trading to operational exposure of business relationships, deal sizes, and pricing strategy.
+For most institutions, it's the reason they aren't on public rails at all.
-We need onchain financial infrastructure where balances, transactions, and counterparties remain private by default, while still enabling verifiable execution and settlement.
+Traditional finance solves this through private accounts and restricted data access, but relies
+on centralized intermediaries. The challenge is to get the same confidentiality guarantees on a
+public, programmable chain, without giving up settlement guarantees or compliance posture.
-TACEO enables this through **private shared state services (e.g. TACEO:OMap)**, which allow encrypted balances and financial data to be updated and queried without being revealed. Transactions are executed across the MPC network, ensuring correctness while keeping all sensitive inputs hidden.
+## TACEO's answer: Merces
-This model is particularly relevant for stablecoin-based financial flows (USDC), where confidentiality of balances and transfers is required for real-world usage. It also aligns with emerging standards such as x402, where payments are embedded directly into application-layer interactions (e.g. HTTP requests), enabling programmable financial flows across services.
+TACEO addresses this through **[Merces](/docs/finance-solutions/payments/introduction)**, a
+confidential token transfer protocol that wraps existing ERC-20 tokens (e.g. USDC) into private
+balances on the EVM chain you already use. Balances are held as secret shares across the
+[TACEO Network](/docs/taceo-network/), state transitions are verified onchain via CoSNARKs, and
+no single party, including TACEO, sees what anyone holds or sends.
-Selective disclosure can be added when required, enabling compliance or auditing without compromising baseline privacy.
+Merces is a complete, integrable privacy layer rather than a new chain or a raw cryptographic
+toolkit. Stablecoin issuers, fintechs, and payment infrastructure builders white-label it into
+their products; end users never see TACEO.
-This allows financial applications to combine the programmability and settlement guarantees of blockchains with the privacy properties of traditional financial systems.
+This model is particularly relevant for stablecoin-based financial flows, where confidentiality
+of balances and transfers is required for real-world usage. It also aligns with emerging standards
+such as **[x402](/docs/finance-solutions/x402/introduction)**, which embeds payments directly into
+HTTP request flows and enables confidential machine-to-machine and AI-agent payments.
-Examples of this can be found in [Merces](https://merces-dashboard.taceo.io/arc).
+**[Compliance](/docs/finance-solutions/compliance/introduction)** is built into the protocol, not
+bolted on top: allowlists, AML hooks, programmable reveal rules, and selective-disclosure
+attestations let regulated entities meet KYC, sanctions, and Travel Rule obligations without
+running surveillance infrastructure.
-Next steps:
-- [TACEO Services Overview](/docs/services/overview)
-- [TACEO:OPRF for identity controls](/docs/use-cases/identity)
-- [Learn more about OMAP](https://core.taceo.io/articles/taceo-omap/)
\ No newline at end of file
+This lets financial applications combine the programmability and settlement guarantees of public
+blockchains with the privacy properties of traditional financial systems.
+
+A live reference app runs at [merces.taceo.io](https://merces.taceo.io).
+
+## Where to go next
+
+- **[Finance Solutions overview](/docs/finance-solutions/overview).** The full product section
+- **[Private Payments](/docs/finance-solutions/payments/introduction).** Merces in depth
+- **[Confidential x402](/docs/finance-solutions/x402/introduction).** Payments over HTTP
+- **[Privacy-preserving Compliance](/docs/finance-solutions/compliance/introduction).** KYC, AML, and selective disclosure
+- **[TACEO:OPRF for identity controls](/docs/use-cases/identity).** Companion identity primitive
+- **[Merces: Onchain Finance](https://core.taceo.io/articles/merces-onchain-finance/).** Long-form write-up
diff --git a/docusaurus.config.ts b/docusaurus.config.ts
index 49242f3..a9c2867 100644
--- a/docusaurus.config.ts
+++ b/docusaurus.config.ts
@@ -6,7 +6,8 @@ import rehypeKatex from "rehype-katex";
const config: Config = {
title: "TACEO Documentation",
- tagline: "MPC and coSNARKs for Proof Delegation and Private Shared State",
+ tagline:
+ "Private onchain finance, integrable privacy services, and the network underneath.",
favicon: "img/favicon.png",
// Set the production url of your site here
@@ -24,6 +25,10 @@ const config: Config = {
onBrokenLinks: "throw",
onBrokenMarkdownLinks: "throw",
+ markdown: {
+ mermaid: true,
+ },
+
scripts: [
{
src: "https://cdn.matomo.cloud/taceo.matomo.cloud/container_v2uCJC8k.js",
@@ -37,6 +42,7 @@ const config: Config = {
plugins: [
require.resolve("docusaurus-lunr-search"),
+ require.resolve("docusaurus-plugin-image-zoom"),
[
require.resolve("@docusaurus/plugin-client-redirects"),
{
@@ -51,6 +57,8 @@ const config: Config = {
],
],
+ themes: ['@docusaurus/theme-mermaid'],
+
// Even if you don't use internationalization, you can use this field to set
// useful metadata like html lang. For example, if your site is Chinese, you
// may want to replace "en" with "zh-Hans".
@@ -124,21 +132,21 @@ const config: Config = {
title: "Docs",
items: [
{
- label: "TACEO Network",
- to: "/docs/taceo-network/",
+ label: "Finance Solutions",
+ to: "/docs/finance-solutions/overview",
},
{
label: "Privacy Services",
to: "/docs/services/overview",
},
+ {
+ label: "TACEO Network",
+ to: "/docs/taceo-network/",
+ },
{
label: "Developer Tools",
to: "/docs/overview",
},
- // {
- // label: "Infrastructure",
- // to: "/docs/taceo-proof/ops/onboarding",
- // },
],
},
{
@@ -182,6 +190,13 @@ const config: Config = {
theme: prismThemes.github,
darkTheme: prismThemes.dracula,
},
+ zoom: {
+ selector: '.markdown img, .docusaurus-mermaid-container svg',
+ background: {
+ light: 'rgb(255, 255, 255)',
+ dark: 'rgb(50, 50, 50)',
+ },
+ },
} satisfies Preset.ThemeConfig,
};
diff --git a/package-lock.json b/package-lock.json
index 469df3c..49d3be4 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -12,12 +12,14 @@
"@algolia/autocomplete-shared": "^1.19.2",
"@algolia/client-search": "^5.34.1",
"@docusaurus/core": "3.8.1",
- "@docusaurus/plugin-client-redirects": "^3.8.1",
+ "@docusaurus/plugin-client-redirects": "3.8.1",
"@docusaurus/preset-classic": "3.8.1",
+ "@docusaurus/theme-mermaid": "3.8.1",
"@mdx-js/react": "^3.1.0",
"algoliasearch": "^5.34.1",
"clsx": "^2.0.0",
"docusaurus-lunr-search": "^3.6.0",
+ "docusaurus-plugin-image-zoom": "^3.0.1",
"prism-react-renderer": "^2.3.0",
"react": "^18.0.0",
"react-dom": "^18.0.0",
@@ -301,6 +303,19 @@
"node": ">= 14.0.0"
}
},
+ "node_modules/@antfu/install-pkg": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@antfu/install-pkg/-/install-pkg-1.1.0.tgz",
+ "integrity": "sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==",
+ "license": "MIT",
+ "dependencies": {
+ "package-manager-detector": "^1.3.0",
+ "tinyexec": "^1.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ }
+ },
"node_modules/@babel/code-frame": {
"version": "7.27.1",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz",
@@ -2001,6 +2016,49 @@
"node": ">=6.9.0"
}
},
+ "node_modules/@braintree/sanitize-url": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-7.1.2.tgz",
+ "integrity": "sha512-jigsZK+sMF/cuiB7sERuo9V7N9jx+dhmHHnQyDSVdpZwVutaBu7WvNYqMDLSgFgfB30n452TP3vjDAvFC973mA==",
+ "license": "MIT"
+ },
+ "node_modules/@chevrotain/cst-dts-gen": {
+ "version": "12.0.0",
+ "resolved": "https://registry.npmjs.org/@chevrotain/cst-dts-gen/-/cst-dts-gen-12.0.0.tgz",
+ "integrity": "sha512-fSL4KXjTl7cDgf0B5Rip9Q05BOrYvkJV/RrBTE/bKDN096E4hN/ySpcBK5B24T76dlQ2i32Zc3PAE27jFnFrKg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@chevrotain/gast": "12.0.0",
+ "@chevrotain/types": "12.0.0"
+ }
+ },
+ "node_modules/@chevrotain/gast": {
+ "version": "12.0.0",
+ "resolved": "https://registry.npmjs.org/@chevrotain/gast/-/gast-12.0.0.tgz",
+ "integrity": "sha512-1ne/m3XsIT8aEdrvT33so0GUC+wkctpUPK6zU9IlOyJLUbR0rg4G7ZiApiJbggpgPir9ERy3FRjT6T7lpgetnQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@chevrotain/types": "12.0.0"
+ }
+ },
+ "node_modules/@chevrotain/regexp-to-ast": {
+ "version": "12.0.0",
+ "resolved": "https://registry.npmjs.org/@chevrotain/regexp-to-ast/-/regexp-to-ast-12.0.0.tgz",
+ "integrity": "sha512-p+EW9MaJwgaHguhoqwOtx/FwuGr+DnNn857sXWOi/mClXIkPGl3rn7hGNWvo31HA3vyeQxjqe+H36yZJwYU8cA==",
+ "license": "Apache-2.0"
+ },
+ "node_modules/@chevrotain/types": {
+ "version": "12.0.0",
+ "resolved": "https://registry.npmjs.org/@chevrotain/types/-/types-12.0.0.tgz",
+ "integrity": "sha512-S+04vjFQKeuYw0/eW3U52LkAHQsB1ASxsPGsLPUyQgrZ2iNNibQrsidruDzjEX2JYfespXMG0eZmXlhA6z7nWA==",
+ "license": "Apache-2.0"
+ },
+ "node_modules/@chevrotain/utils": {
+ "version": "12.0.0",
+ "resolved": "https://registry.npmjs.org/@chevrotain/utils/-/utils-12.0.0.tgz",
+ "integrity": "sha512-lB59uJoaGIfOOL9knQqQRfhl9g7x8/wqFkp13zTdkRu1huG9kg6IJs1O8hqj9rs6h7orGxHJUKb+mX3rPbWGhA==",
+ "license": "Apache-2.0"
+ },
"node_modules/@colors/colors": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz",
@@ -3869,6 +3927,28 @@
"react-dom": "^18.0.0 || ^19.0.0"
}
},
+ "node_modules/@docusaurus/theme-mermaid": {
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/@docusaurus/theme-mermaid/-/theme-mermaid-3.8.1.tgz",
+ "integrity": "sha512-IWYqjyTPjkNnHsFFu9+4YkeXS7PD1xI3Bn2shOhBq+f95mgDfWInkpfBN4aYvx4fTT67Am6cPtohRdwh4Tidtg==",
+ "license": "MIT",
+ "dependencies": {
+ "@docusaurus/core": "3.8.1",
+ "@docusaurus/module-type-aliases": "3.8.1",
+ "@docusaurus/theme-common": "3.8.1",
+ "@docusaurus/types": "3.8.1",
+ "@docusaurus/utils-validation": "3.8.1",
+ "mermaid": ">=11.6.0",
+ "tslib": "^2.6.0"
+ },
+ "engines": {
+ "node": ">=18.0"
+ },
+ "peerDependencies": {
+ "react": "^18.0.0 || ^19.0.0",
+ "react-dom": "^18.0.0 || ^19.0.0"
+ }
+ },
"node_modules/@docusaurus/theme-search-algolia": {
"version": "3.8.1",
"resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.8.1.tgz",
@@ -4034,6 +4114,23 @@
"@hapi/hoek": "^9.0.0"
}
},
+ "node_modules/@iconify/types": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz",
+ "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==",
+ "license": "MIT"
+ },
+ "node_modules/@iconify/utils": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/@iconify/utils/-/utils-3.1.1.tgz",
+ "integrity": "sha512-MwzoDtw9rO1x+qfgLTV/IVXsHDBqeYZoMIQC8SfxfYSlaSUG+oWiAcoiB1yajAda6mqblm4/1/w2E8tRu7a7Tw==",
+ "license": "MIT",
+ "dependencies": {
+ "@antfu/install-pkg": "^1.1.0",
+ "@iconify/types": "^2.0.0",
+ "mlly": "^1.8.2"
+ }
+ },
"node_modules/@jest/schemas": {
"version": "29.6.3",
"resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz",
@@ -4178,6 +4275,15 @@
"react": ">=16"
}
},
+ "node_modules/@mermaid-js/parser": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@mermaid-js/parser/-/parser-1.1.0.tgz",
+ "integrity": "sha512-gxK9ZX2+Fex5zu8LhRQoMeMPEHbc73UKZ0FQ54YrQtUxE1VVhMwzeNtKRPAu5aXks4FasbMe4xB4bWrmq6Jlxw==",
+ "license": "MIT",
+ "dependencies": {
+ "langium": "^4.0.0"
+ }
+ },
"node_modules/@nodelib/fs.scandir": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@@ -4626,6 +4732,259 @@
"@types/node": "*"
}
},
+ "node_modules/@types/d3": {
+ "version": "7.4.3",
+ "resolved": "https://registry.npmjs.org/@types/d3/-/d3-7.4.3.tgz",
+ "integrity": "sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/d3-array": "*",
+ "@types/d3-axis": "*",
+ "@types/d3-brush": "*",
+ "@types/d3-chord": "*",
+ "@types/d3-color": "*",
+ "@types/d3-contour": "*",
+ "@types/d3-delaunay": "*",
+ "@types/d3-dispatch": "*",
+ "@types/d3-drag": "*",
+ "@types/d3-dsv": "*",
+ "@types/d3-ease": "*",
+ "@types/d3-fetch": "*",
+ "@types/d3-force": "*",
+ "@types/d3-format": "*",
+ "@types/d3-geo": "*",
+ "@types/d3-hierarchy": "*",
+ "@types/d3-interpolate": "*",
+ "@types/d3-path": "*",
+ "@types/d3-polygon": "*",
+ "@types/d3-quadtree": "*",
+ "@types/d3-random": "*",
+ "@types/d3-scale": "*",
+ "@types/d3-scale-chromatic": "*",
+ "@types/d3-selection": "*",
+ "@types/d3-shape": "*",
+ "@types/d3-time": "*",
+ "@types/d3-time-format": "*",
+ "@types/d3-timer": "*",
+ "@types/d3-transition": "*",
+ "@types/d3-zoom": "*"
+ }
+ },
+ "node_modules/@types/d3-array": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.2.tgz",
+ "integrity": "sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==",
+ "license": "MIT"
+ },
+ "node_modules/@types/d3-axis": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/@types/d3-axis/-/d3-axis-3.0.6.tgz",
+ "integrity": "sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/d3-selection": "*"
+ }
+ },
+ "node_modules/@types/d3-brush": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/@types/d3-brush/-/d3-brush-3.0.6.tgz",
+ "integrity": "sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/d3-selection": "*"
+ }
+ },
+ "node_modules/@types/d3-chord": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/@types/d3-chord/-/d3-chord-3.0.6.tgz",
+ "integrity": "sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg==",
+ "license": "MIT"
+ },
+ "node_modules/@types/d3-color": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz",
+ "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==",
+ "license": "MIT"
+ },
+ "node_modules/@types/d3-contour": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/@types/d3-contour/-/d3-contour-3.0.6.tgz",
+ "integrity": "sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/d3-array": "*",
+ "@types/geojson": "*"
+ }
+ },
+ "node_modules/@types/d3-delaunay": {
+ "version": "6.0.4",
+ "resolved": "https://registry.npmjs.org/@types/d3-delaunay/-/d3-delaunay-6.0.4.tgz",
+ "integrity": "sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==",
+ "license": "MIT"
+ },
+ "node_modules/@types/d3-dispatch": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/@types/d3-dispatch/-/d3-dispatch-3.0.7.tgz",
+ "integrity": "sha512-5o9OIAdKkhN1QItV2oqaE5KMIiXAvDWBDPrD85e58Qlz1c1kI/J0NcqbEG88CoTwJrYe7ntUCVfeUl2UJKbWgA==",
+ "license": "MIT"
+ },
+ "node_modules/@types/d3-drag": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/@types/d3-drag/-/d3-drag-3.0.7.tgz",
+ "integrity": "sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/d3-selection": "*"
+ }
+ },
+ "node_modules/@types/d3-dsv": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/@types/d3-dsv/-/d3-dsv-3.0.7.tgz",
+ "integrity": "sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==",
+ "license": "MIT"
+ },
+ "node_modules/@types/d3-ease": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz",
+ "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==",
+ "license": "MIT"
+ },
+ "node_modules/@types/d3-fetch": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/@types/d3-fetch/-/d3-fetch-3.0.7.tgz",
+ "integrity": "sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/d3-dsv": "*"
+ }
+ },
+ "node_modules/@types/d3-force": {
+ "version": "3.0.10",
+ "resolved": "https://registry.npmjs.org/@types/d3-force/-/d3-force-3.0.10.tgz",
+ "integrity": "sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw==",
+ "license": "MIT"
+ },
+ "node_modules/@types/d3-format": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@types/d3-format/-/d3-format-3.0.4.tgz",
+ "integrity": "sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==",
+ "license": "MIT"
+ },
+ "node_modules/@types/d3-geo": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@types/d3-geo/-/d3-geo-3.1.0.tgz",
+ "integrity": "sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/geojson": "*"
+ }
+ },
+ "node_modules/@types/d3-hierarchy": {
+ "version": "3.1.7",
+ "resolved": "https://registry.npmjs.org/@types/d3-hierarchy/-/d3-hierarchy-3.1.7.tgz",
+ "integrity": "sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg==",
+ "license": "MIT"
+ },
+ "node_modules/@types/d3-interpolate": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz",
+ "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/d3-color": "*"
+ }
+ },
+ "node_modules/@types/d3-path": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.1.tgz",
+ "integrity": "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==",
+ "license": "MIT"
+ },
+ "node_modules/@types/d3-polygon": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@types/d3-polygon/-/d3-polygon-3.0.2.tgz",
+ "integrity": "sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==",
+ "license": "MIT"
+ },
+ "node_modules/@types/d3-quadtree": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/@types/d3-quadtree/-/d3-quadtree-3.0.6.tgz",
+ "integrity": "sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg==",
+ "license": "MIT"
+ },
+ "node_modules/@types/d3-random": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/d3-random/-/d3-random-3.0.3.tgz",
+ "integrity": "sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ==",
+ "license": "MIT"
+ },
+ "node_modules/@types/d3-scale": {
+ "version": "4.0.9",
+ "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.9.tgz",
+ "integrity": "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/d3-time": "*"
+ }
+ },
+ "node_modules/@types/d3-scale-chromatic": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz",
+ "integrity": "sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ==",
+ "license": "MIT"
+ },
+ "node_modules/@types/d3-selection": {
+ "version": "3.0.11",
+ "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-3.0.11.tgz",
+ "integrity": "sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==",
+ "license": "MIT"
+ },
+ "node_modules/@types/d3-shape": {
+ "version": "3.1.8",
+ "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.8.tgz",
+ "integrity": "sha512-lae0iWfcDeR7qt7rA88BNiqdvPS5pFVPpo5OfjElwNaT2yyekbM0C9vK+yqBqEmHr6lDkRnYNoTBYlAgJa7a4w==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/d3-path": "*"
+ }
+ },
+ "node_modules/@types/d3-time": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz",
+ "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==",
+ "license": "MIT"
+ },
+ "node_modules/@types/d3-time-format": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-4.0.3.tgz",
+ "integrity": "sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==",
+ "license": "MIT"
+ },
+ "node_modules/@types/d3-timer": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz",
+ "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==",
+ "license": "MIT"
+ },
+ "node_modules/@types/d3-transition": {
+ "version": "3.0.9",
+ "resolved": "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-3.0.9.tgz",
+ "integrity": "sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/d3-selection": "*"
+ }
+ },
+ "node_modules/@types/d3-zoom": {
+ "version": "3.0.8",
+ "resolved": "https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-3.0.8.tgz",
+ "integrity": "sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/d3-interpolate": "*",
+ "@types/d3-selection": "*"
+ }
+ },
"node_modules/@types/debug": {
"version": "4.1.12",
"resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz",
@@ -4706,6 +5065,12 @@
"@types/send": "*"
}
},
+ "node_modules/@types/geojson": {
+ "version": "7946.0.16",
+ "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.16.tgz",
+ "integrity": "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==",
+ "license": "MIT"
+ },
"node_modules/@types/gtag.js": {
"version": "0.0.12",
"resolved": "https://registry.npmjs.org/@types/gtag.js/-/gtag.js-0.0.12.tgz",
@@ -4954,6 +5319,13 @@
"@types/node": "*"
}
},
+ "node_modules/@types/trusted-types": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz",
+ "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==",
+ "license": "MIT",
+ "optional": true
+ },
"node_modules/@types/unist": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz",
@@ -4990,6 +5362,16 @@
"integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==",
"license": "ISC"
},
+ "node_modules/@upsetjs/venn.js": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@upsetjs/venn.js/-/venn.js-2.0.0.tgz",
+ "integrity": "sha512-WbBhLrooyePuQ1VZxrJjtLvTc4NVfpOyKx0sKqioq9bX1C1m7Jgykkn8gLrtwumBioXIqam8DLxp88Adbue6Hw==",
+ "license": "MIT",
+ "optionalDependencies": {
+ "d3-selection": "^3.0.0",
+ "d3-transition": "^3.0.1"
+ }
+ },
"node_modules/@webassemblyjs/ast": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz",
@@ -5198,9 +5580,9 @@
}
},
"node_modules/acorn": {
- "version": "8.15.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
- "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
+ "version": "8.16.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz",
+ "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==",
"license": "MIT",
"bin": {
"acorn": "bin/acorn"
@@ -6081,6 +6463,34 @@
"url": "https://github.com/sponsors/fb55"
}
},
+ "node_modules/chevrotain": {
+ "version": "12.0.0",
+ "resolved": "https://registry.npmjs.org/chevrotain/-/chevrotain-12.0.0.tgz",
+ "integrity": "sha512-csJvb+6kEiQaqo1woTdSAuOWdN0WTLIydkKrBnS+V5gZz0oqBrp4kQ35519QgK6TpBThiG3V1vNSHlIkv4AglQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@chevrotain/cst-dts-gen": "12.0.0",
+ "@chevrotain/gast": "12.0.0",
+ "@chevrotain/regexp-to-ast": "12.0.0",
+ "@chevrotain/types": "12.0.0",
+ "@chevrotain/utils": "12.0.0"
+ },
+ "engines": {
+ "node": ">=22.0.0"
+ }
+ },
+ "node_modules/chevrotain-allstar": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/chevrotain-allstar/-/chevrotain-allstar-0.4.2.tgz",
+ "integrity": "sha512-J3WoNdejJDlmUR0XXgmJK2GnCYKp2eWHnaG1fGkvnBVQw9Y6piP4Q30ETz47bfvPTeaN/DV0V5jqLDgX4PCygg==",
+ "license": "MIT",
+ "dependencies": {
+ "lodash-es": "^4.18.1"
+ },
+ "peerDependencies": {
+ "chevrotain": "^12.0.0"
+ }
+ },
"node_modules/chokidar": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
@@ -6381,6 +6791,12 @@
"integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
"license": "MIT"
},
+ "node_modules/confbox": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz",
+ "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==",
+ "license": "MIT"
+ },
"node_modules/config-chain": {
"version": "1.1.13",
"resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz",
@@ -6593,6 +7009,15 @@
"integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
"license": "MIT"
},
+ "node_modules/cose-base": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-1.0.3.tgz",
+ "integrity": "sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==",
+ "license": "MIT",
+ "dependencies": {
+ "layout-base": "^1.0.0"
+ }
+ },
"node_modules/cosmiconfig": {
"version": "8.3.6",
"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz",
@@ -6985,103 +7410,629 @@
"engines": {
"node": "^14 || ^16 || >=18.0"
},
- "peerDependencies": {
- "postcss": "^8.4.31"
+ "peerDependencies": {
+ "postcss": "^8.4.31"
+ }
+ },
+ "node_modules/cssnano-preset-default": {
+ "version": "6.1.2",
+ "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.1.2.tgz",
+ "integrity": "sha512-1C0C+eNaeN8OcHQa193aRgYexyJtU8XwbdieEjClw+J9d94E41LwT6ivKH0WT+fYwYWB0Zp3I3IZ7tI/BbUbrg==",
+ "license": "MIT",
+ "dependencies": {
+ "browserslist": "^4.23.0",
+ "css-declaration-sorter": "^7.2.0",
+ "cssnano-utils": "^4.0.2",
+ "postcss-calc": "^9.0.1",
+ "postcss-colormin": "^6.1.0",
+ "postcss-convert-values": "^6.1.0",
+ "postcss-discard-comments": "^6.0.2",
+ "postcss-discard-duplicates": "^6.0.3",
+ "postcss-discard-empty": "^6.0.3",
+ "postcss-discard-overridden": "^6.0.2",
+ "postcss-merge-longhand": "^6.0.5",
+ "postcss-merge-rules": "^6.1.1",
+ "postcss-minify-font-values": "^6.1.0",
+ "postcss-minify-gradients": "^6.0.3",
+ "postcss-minify-params": "^6.1.0",
+ "postcss-minify-selectors": "^6.0.4",
+ "postcss-normalize-charset": "^6.0.2",
+ "postcss-normalize-display-values": "^6.0.2",
+ "postcss-normalize-positions": "^6.0.2",
+ "postcss-normalize-repeat-style": "^6.0.2",
+ "postcss-normalize-string": "^6.0.2",
+ "postcss-normalize-timing-functions": "^6.0.2",
+ "postcss-normalize-unicode": "^6.1.0",
+ "postcss-normalize-url": "^6.0.2",
+ "postcss-normalize-whitespace": "^6.0.2",
+ "postcss-ordered-values": "^6.0.2",
+ "postcss-reduce-initial": "^6.1.0",
+ "postcss-reduce-transforms": "^6.0.2",
+ "postcss-svgo": "^6.0.3",
+ "postcss-unique-selectors": "^6.0.4"
+ },
+ "engines": {
+ "node": "^14 || ^16 || >=18.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.31"
+ }
+ },
+ "node_modules/cssnano-utils": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.2.tgz",
+ "integrity": "sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ==",
+ "license": "MIT",
+ "engines": {
+ "node": "^14 || ^16 || >=18.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.31"
+ }
+ },
+ "node_modules/csso": {
+ "version": "5.0.5",
+ "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz",
+ "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==",
+ "license": "MIT",
+ "dependencies": {
+ "css-tree": "~2.2.0"
+ },
+ "engines": {
+ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0",
+ "npm": ">=7.0.0"
+ }
+ },
+ "node_modules/csso/node_modules/css-tree": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz",
+ "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==",
+ "license": "MIT",
+ "dependencies": {
+ "mdn-data": "2.0.28",
+ "source-map-js": "^1.0.1"
+ },
+ "engines": {
+ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0",
+ "npm": ">=7.0.0"
+ }
+ },
+ "node_modules/csso/node_modules/mdn-data": {
+ "version": "2.0.28",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz",
+ "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==",
+ "license": "CC0-1.0"
+ },
+ "node_modules/csstype": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
+ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
+ "license": "MIT"
+ },
+ "node_modules/cytoscape": {
+ "version": "3.33.3",
+ "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.33.3.tgz",
+ "integrity": "sha512-Gej7U+OKR+LZ8kvX7rb2HhCYJ0IhvEFsnkud4SB1PR+BUY/TsSO0dmOW59WEVLu51b1Rm+gQRKoz4bLYxGSZ2g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/cytoscape-cose-bilkent": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/cytoscape-cose-bilkent/-/cytoscape-cose-bilkent-4.1.0.tgz",
+ "integrity": "sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==",
+ "license": "MIT",
+ "dependencies": {
+ "cose-base": "^1.0.0"
+ },
+ "peerDependencies": {
+ "cytoscape": "^3.2.0"
+ }
+ },
+ "node_modules/cytoscape-fcose": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/cytoscape-fcose/-/cytoscape-fcose-2.2.0.tgz",
+ "integrity": "sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==",
+ "license": "MIT",
+ "dependencies": {
+ "cose-base": "^2.2.0"
+ },
+ "peerDependencies": {
+ "cytoscape": "^3.2.0"
+ }
+ },
+ "node_modules/cytoscape-fcose/node_modules/cose-base": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-2.2.0.tgz",
+ "integrity": "sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==",
+ "license": "MIT",
+ "dependencies": {
+ "layout-base": "^2.0.0"
+ }
+ },
+ "node_modules/cytoscape-fcose/node_modules/layout-base": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-2.0.1.tgz",
+ "integrity": "sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==",
+ "license": "MIT"
+ },
+ "node_modules/d3": {
+ "version": "7.9.0",
+ "resolved": "https://registry.npmjs.org/d3/-/d3-7.9.0.tgz",
+ "integrity": "sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-array": "3",
+ "d3-axis": "3",
+ "d3-brush": "3",
+ "d3-chord": "3",
+ "d3-color": "3",
+ "d3-contour": "4",
+ "d3-delaunay": "6",
+ "d3-dispatch": "3",
+ "d3-drag": "3",
+ "d3-dsv": "3",
+ "d3-ease": "3",
+ "d3-fetch": "3",
+ "d3-force": "3",
+ "d3-format": "3",
+ "d3-geo": "3",
+ "d3-hierarchy": "3",
+ "d3-interpolate": "3",
+ "d3-path": "3",
+ "d3-polygon": "3",
+ "d3-quadtree": "3",
+ "d3-random": "3",
+ "d3-scale": "4",
+ "d3-scale-chromatic": "3",
+ "d3-selection": "3",
+ "d3-shape": "3",
+ "d3-time": "3",
+ "d3-time-format": "4",
+ "d3-timer": "3",
+ "d3-transition": "3",
+ "d3-zoom": "3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-array": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz",
+ "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==",
+ "license": "ISC",
+ "dependencies": {
+ "internmap": "1 - 2"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-axis": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz",
+ "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-brush": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz",
+ "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-dispatch": "1 - 3",
+ "d3-drag": "2 - 3",
+ "d3-interpolate": "1 - 3",
+ "d3-selection": "3",
+ "d3-transition": "3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-chord": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz",
+ "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-path": "1 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-color": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz",
+ "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-contour": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz",
+ "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-array": "^3.2.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-delaunay": {
+ "version": "6.0.4",
+ "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz",
+ "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==",
+ "license": "ISC",
+ "dependencies": {
+ "delaunator": "5"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-dispatch": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz",
+ "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-drag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz",
+ "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-dispatch": "1 - 3",
+ "d3-selection": "3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-dsv": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz",
+ "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==",
+ "license": "ISC",
+ "dependencies": {
+ "commander": "7",
+ "iconv-lite": "0.6",
+ "rw": "1"
+ },
+ "bin": {
+ "csv2json": "bin/dsv2json.js",
+ "csv2tsv": "bin/dsv2dsv.js",
+ "dsv2dsv": "bin/dsv2dsv.js",
+ "dsv2json": "bin/dsv2json.js",
+ "json2csv": "bin/json2dsv.js",
+ "json2dsv": "bin/json2dsv.js",
+ "json2tsv": "bin/json2dsv.js",
+ "tsv2csv": "bin/dsv2dsv.js",
+ "tsv2json": "bin/dsv2json.js"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-dsv/node_modules/commander": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
+ "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/d3-dsv/node_modules/iconv-lite": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+ "license": "MIT",
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/d3-ease": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz",
+ "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==",
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-fetch": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz",
+ "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-dsv": "1 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-force": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz",
+ "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-dispatch": "1 - 3",
+ "d3-quadtree": "1 - 3",
+ "d3-timer": "1 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-format": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.2.tgz",
+ "integrity": "sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-geo": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.1.tgz",
+ "integrity": "sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-array": "2.5.0 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-hierarchy": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz",
+ "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-interpolate": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz",
+ "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-color": "1 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-path": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz",
+ "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-polygon": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz",
+ "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-quadtree": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz",
+ "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-random": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz",
+ "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-sankey": {
+ "version": "0.12.3",
+ "resolved": "https://registry.npmjs.org/d3-sankey/-/d3-sankey-0.12.3.tgz",
+ "integrity": "sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "d3-array": "1 - 2",
+ "d3-shape": "^1.2.0"
+ }
+ },
+ "node_modules/d3-sankey/node_modules/d3-array": {
+ "version": "2.12.1",
+ "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz",
+ "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "internmap": "^1.0.0"
+ }
+ },
+ "node_modules/d3-sankey/node_modules/d3-path": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz",
+ "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==",
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/d3-sankey/node_modules/d3-shape": {
+ "version": "1.3.7",
+ "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz",
+ "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "d3-path": "1"
+ }
+ },
+ "node_modules/d3-sankey/node_modules/internmap": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz",
+ "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==",
+ "license": "ISC"
+ },
+ "node_modules/d3-scale": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz",
+ "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-array": "2.10.0 - 3",
+ "d3-format": "1 - 3",
+ "d3-interpolate": "1.2.0 - 3",
+ "d3-time": "2.1.1 - 3",
+ "d3-time-format": "2 - 4"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-scale-chromatic": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz",
+ "integrity": "sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-color": "1 - 3",
+ "d3-interpolate": "1 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-selection": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz",
+ "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-shape": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz",
+ "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-path": "^3.1.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-time": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz",
+ "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-array": "2 - 3"
+ },
+ "engines": {
+ "node": ">=12"
}
},
- "node_modules/cssnano-preset-default": {
- "version": "6.1.2",
- "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.1.2.tgz",
- "integrity": "sha512-1C0C+eNaeN8OcHQa193aRgYexyJtU8XwbdieEjClw+J9d94E41LwT6ivKH0WT+fYwYWB0Zp3I3IZ7tI/BbUbrg==",
- "license": "MIT",
+ "node_modules/d3-time-format": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz",
+ "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==",
+ "license": "ISC",
"dependencies": {
- "browserslist": "^4.23.0",
- "css-declaration-sorter": "^7.2.0",
- "cssnano-utils": "^4.0.2",
- "postcss-calc": "^9.0.1",
- "postcss-colormin": "^6.1.0",
- "postcss-convert-values": "^6.1.0",
- "postcss-discard-comments": "^6.0.2",
- "postcss-discard-duplicates": "^6.0.3",
- "postcss-discard-empty": "^6.0.3",
- "postcss-discard-overridden": "^6.0.2",
- "postcss-merge-longhand": "^6.0.5",
- "postcss-merge-rules": "^6.1.1",
- "postcss-minify-font-values": "^6.1.0",
- "postcss-minify-gradients": "^6.0.3",
- "postcss-minify-params": "^6.1.0",
- "postcss-minify-selectors": "^6.0.4",
- "postcss-normalize-charset": "^6.0.2",
- "postcss-normalize-display-values": "^6.0.2",
- "postcss-normalize-positions": "^6.0.2",
- "postcss-normalize-repeat-style": "^6.0.2",
- "postcss-normalize-string": "^6.0.2",
- "postcss-normalize-timing-functions": "^6.0.2",
- "postcss-normalize-unicode": "^6.1.0",
- "postcss-normalize-url": "^6.0.2",
- "postcss-normalize-whitespace": "^6.0.2",
- "postcss-ordered-values": "^6.0.2",
- "postcss-reduce-initial": "^6.1.0",
- "postcss-reduce-transforms": "^6.0.2",
- "postcss-svgo": "^6.0.3",
- "postcss-unique-selectors": "^6.0.4"
+ "d3-time": "1 - 3"
},
"engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.4.31"
+ "node": ">=12"
}
},
- "node_modules/cssnano-utils": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.2.tgz",
- "integrity": "sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ==",
- "license": "MIT",
+ "node_modules/d3-timer": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz",
+ "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==",
+ "license": "ISC",
"engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.4.31"
+ "node": ">=12"
}
},
- "node_modules/csso": {
- "version": "5.0.5",
- "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz",
- "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==",
- "license": "MIT",
+ "node_modules/d3-transition": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz",
+ "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==",
+ "license": "ISC",
"dependencies": {
- "css-tree": "~2.2.0"
+ "d3-color": "1 - 3",
+ "d3-dispatch": "1 - 3",
+ "d3-ease": "1 - 3",
+ "d3-interpolate": "1 - 3",
+ "d3-timer": "1 - 3"
},
"engines": {
- "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0",
- "npm": ">=7.0.0"
+ "node": ">=12"
+ },
+ "peerDependencies": {
+ "d3-selection": "2 - 3"
}
},
- "node_modules/csso/node_modules/css-tree": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz",
- "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==",
- "license": "MIT",
+ "node_modules/d3-zoom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz",
+ "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==",
+ "license": "ISC",
"dependencies": {
- "mdn-data": "2.0.28",
- "source-map-js": "^1.0.1"
+ "d3-dispatch": "1 - 3",
+ "d3-drag": "2 - 3",
+ "d3-interpolate": "1 - 3",
+ "d3-selection": "2 - 3",
+ "d3-transition": "2 - 3"
},
"engines": {
- "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0",
- "npm": ">=7.0.0"
+ "node": ">=12"
}
},
- "node_modules/csso/node_modules/mdn-data": {
- "version": "2.0.28",
- "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz",
- "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==",
- "license": "CC0-1.0"
+ "node_modules/dagre-d3-es": {
+ "version": "7.0.14",
+ "resolved": "https://registry.npmjs.org/dagre-d3-es/-/dagre-d3-es-7.0.14.tgz",
+ "integrity": "sha512-P4rFMVq9ESWqmOgK+dlXvOtLwYg0i7u0HBGJER0LZDJT2VHIPAMZ/riPxqJceWMStH5+E61QxFra9kIS3AqdMg==",
+ "license": "MIT",
+ "dependencies": {
+ "d3": "^7.9.0",
+ "lodash-es": "^4.17.21"
+ }
},
- "node_modules/csstype": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
- "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
+ "node_modules/dayjs": {
+ "version": "1.11.20",
+ "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.20.tgz",
+ "integrity": "sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ==",
"license": "MIT"
},
"node_modules/debounce": {
@@ -7229,6 +8180,15 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/delaunator": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.1.0.tgz",
+ "integrity": "sha512-AGrQ4QSgssa1NGmWmLPqN5NY2KajF5MqxetNEO+o0n3ZwZZeTmt7bBnvzHWrmkZFxGgr4HdyFgelzgi06otLuQ==",
+ "license": "ISC",
+ "dependencies": {
+ "robust-predicates": "^3.0.2"
+ }
+ },
"node_modules/depd": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
@@ -7456,6 +8416,19 @@
"url": "https://opencollective.com/unified"
}
},
+ "node_modules/docusaurus-plugin-image-zoom": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/docusaurus-plugin-image-zoom/-/docusaurus-plugin-image-zoom-3.0.1.tgz",
+ "integrity": "sha512-mQrqA99VpoMQJNbi02qkWAMVNC4+kwc6zLLMNzraHAJlwn+HrlUmZSEDcTwgn+H4herYNxHKxveE2WsYy73eGw==",
+ "license": "MIT",
+ "dependencies": {
+ "medium-zoom": "^1.1.0",
+ "validate-peer-dependencies": "^2.2.0"
+ },
+ "peerDependencies": {
+ "@docusaurus/theme-classic": ">=3.0.0"
+ }
+ },
"node_modules/dom-converter": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz",
@@ -7506,6 +8479,15 @@
"url": "https://github.com/fb55/domhandler?sponsor=1"
}
},
+ "node_modules/dompurify": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.4.1.tgz",
+ "integrity": "sha512-JahakDAIg1gyOm7dlgWSDjV4n7Ip2PKR55NIT6jrMfIgLFgWo81vdr1/QGqWtFNRqXP9UV71oVePtjqS2ebnPw==",
+ "license": "(MPL-2.0 OR Apache-2.0)",
+ "optionalDependencies": {
+ "@types/trusted-types": "^2.0.7"
+ }
+ },
"node_modules/domutils": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz",
@@ -8820,6 +9802,12 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/hachure-fill": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/hachure-fill/-/hachure-fill-0.5.2.tgz",
+ "integrity": "sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg==",
+ "license": "MIT"
+ },
"node_modules/handle-thing": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz",
@@ -9874,6 +10862,15 @@
"integrity": "sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==",
"license": "MIT"
},
+ "node_modules/internmap": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz",
+ "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
"node_modules/invariant": {
"version": "2.2.4",
"resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
@@ -10348,9 +11345,9 @@
}
},
"node_modules/katex": {
- "version": "0.16.22",
- "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.22.tgz",
- "integrity": "sha512-XCHRdUw4lf3SKBaJe4EvgqIuWwkPSo9XoeO8GjQW94Bp7TWv9hNhzZjZ+OH9yf1UmLygb7DIT5GSFQiyt16zYg==",
+ "version": "0.16.45",
+ "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.45.tgz",
+ "integrity": "sha512-pQpZbdBu7wCTmQUh7ufPmLr0pFoObnGUoL/yhtwJDgmmQpbkg/0HSVti25Fu4rmd1oCR6NGWe9vqTWuWv3GcNA==",
"funding": [
"https://opencollective.com/katex",
"https://github.com/sponsors/katex"
@@ -10381,6 +11378,11 @@
"json-buffer": "3.0.1"
}
},
+ "node_modules/khroma": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/khroma/-/khroma-2.1.0.tgz",
+ "integrity": "sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw=="
+ },
"node_modules/kind-of": {
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
@@ -10399,6 +11401,24 @@
"node": ">=6"
}
},
+ "node_modules/langium": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/langium/-/langium-4.2.2.tgz",
+ "integrity": "sha512-JUshTRAfHI4/MF9dH2WupvjSXyn8JBuUEWazB8ZVJUtXutT0doDlAv1XKbZ1Pb5sMexa8FF4CFBc0iiul7gbUQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@chevrotain/regexp-to-ast": "~12.0.0",
+ "chevrotain": "~12.0.0",
+ "chevrotain-allstar": "~0.4.1",
+ "vscode-languageserver": "~9.0.1",
+ "vscode-languageserver-textdocument": "~1.0.11",
+ "vscode-uri": "~3.1.0"
+ },
+ "engines": {
+ "node": ">=20.10.0",
+ "npm": ">=10.2.3"
+ }
+ },
"node_modules/latest-version": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/latest-version/-/latest-version-7.0.0.tgz",
@@ -10424,6 +11444,12 @@
"shell-quote": "^1.8.3"
}
},
+ "node_modules/layout-base": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-1.0.2.tgz",
+ "integrity": "sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==",
+ "license": "MIT"
+ },
"node_modules/leven": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
@@ -10495,6 +11521,12 @@
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
"license": "MIT"
},
+ "node_modules/lodash-es": {
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.18.1.tgz",
+ "integrity": "sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==",
+ "license": "MIT"
+ },
"node_modules/lodash.debounce": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
@@ -10605,6 +11637,18 @@
"url": "https://github.com/sponsors/wooorm"
}
},
+ "node_modules/marked": {
+ "version": "16.4.2",
+ "resolved": "https://registry.npmjs.org/marked/-/marked-16.4.2.tgz",
+ "integrity": "sha512-TI3V8YYWvkVf3KJe1dRkpnjs68JUPyEa5vjKrp1XEEJUAOaQc+Qj+L1qWbPd0SJuAdQkFU0h73sXXqwDYxsiDA==",
+ "license": "MIT",
+ "bin": {
+ "marked": "bin/marked.js"
+ },
+ "engines": {
+ "node": ">= 20"
+ }
+ },
"node_modules/math-intrinsics": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
@@ -11086,6 +12130,12 @@
"node": ">= 0.6"
}
},
+ "node_modules/medium-zoom": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/medium-zoom/-/medium-zoom-1.1.0.tgz",
+ "integrity": "sha512-ewyDsp7k4InCUp3jRmwHBRFGyjBimKps/AJLjRSox+2q/2H4p/PNpQf+pwONWlJiOudkBXtbdmVbFjqyybfTmQ==",
+ "license": "MIT"
+ },
"node_modules/memfs": {
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz",
@@ -11122,6 +12172,48 @@
"node": ">= 8"
}
},
+ "node_modules/mermaid": {
+ "version": "11.14.0",
+ "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-11.14.0.tgz",
+ "integrity": "sha512-GSGloRsBs+JINmmhl0JDwjpuezCsHB4WGI4NASHxL3fHo3o/BRXTxhDLKnln8/Q0lRFRyDdEjmk1/d5Sn1Xz8g==",
+ "license": "MIT",
+ "dependencies": {
+ "@braintree/sanitize-url": "^7.1.1",
+ "@iconify/utils": "^3.0.2",
+ "@mermaid-js/parser": "^1.1.0",
+ "@types/d3": "^7.4.3",
+ "@upsetjs/venn.js": "^2.0.0",
+ "cytoscape": "^3.33.1",
+ "cytoscape-cose-bilkent": "^4.1.0",
+ "cytoscape-fcose": "^2.2.0",
+ "d3": "^7.9.0",
+ "d3-sankey": "^0.12.3",
+ "dagre-d3-es": "7.0.14",
+ "dayjs": "^1.11.19",
+ "dompurify": "^3.3.1",
+ "katex": "^0.16.25",
+ "khroma": "^2.1.0",
+ "lodash-es": "^4.17.23",
+ "marked": "^16.3.0",
+ "roughjs": "^4.6.6",
+ "stylis": "^4.3.6",
+ "ts-dedent": "^2.2.0",
+ "uuid": "^11.1.0"
+ }
+ },
+ "node_modules/mermaid/node_modules/uuid": {
+ "version": "11.1.1",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.1.tgz",
+ "integrity": "sha512-vIYxrBCC/N/K+Js3qSN88go7kIfNPssr/hHCesKCQNAjmgvYS2oqr69kIufEG+O4+PfezOH4EbIeHCfFov8ZgQ==",
+ "funding": [
+ "https://github.com/sponsors/broofa",
+ "https://github.com/sponsors/ctavan"
+ ],
+ "license": "MIT",
+ "bin": {
+ "uuid": "dist/esm/bin/uuid"
+ }
+ },
"node_modules/methods": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
@@ -13084,9 +14176,9 @@
"license": "ISC"
},
"node_modules/minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
+ "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
"license": "ISC",
"dependencies": {
"brace-expansion": "^1.1.7"
@@ -13114,6 +14206,18 @@
"node": "*"
}
},
+ "node_modules/mlly": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.8.2.tgz",
+ "integrity": "sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==",
+ "license": "MIT",
+ "dependencies": {
+ "acorn": "^8.16.0",
+ "pathe": "^2.0.3",
+ "pkg-types": "^1.3.1",
+ "ufo": "^1.6.3"
+ }
+ },
"node_modules/mrmime": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz",
@@ -13613,6 +14717,12 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/package-manager-detector": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.6.0.tgz",
+ "integrity": "sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==",
+ "license": "MIT"
+ },
"node_modules/param-case": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz",
@@ -13740,6 +14850,12 @@
"tslib": "^2.0.3"
}
},
+ "node_modules/path-data-parser": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/path-data-parser/-/path-data-parser-0.1.0.tgz",
+ "integrity": "sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w==",
+ "license": "MIT"
+ },
"node_modules/path-exists": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz",
@@ -13779,6 +14895,27 @@
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
"license": "MIT"
},
+ "node_modules/path-root": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz",
+ "integrity": "sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==",
+ "license": "MIT",
+ "dependencies": {
+ "path-root-regex": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-root-regex": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz",
+ "integrity": "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/path-to-regexp": {
"version": "1.9.0",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.9.0.tgz",
@@ -13797,6 +14934,12 @@
"node": ">=8"
}
},
+ "node_modules/pathe": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz",
+ "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==",
+ "license": "MIT"
+ },
"node_modules/picocolors": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
@@ -13830,6 +14973,33 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/pkg-types": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz",
+ "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==",
+ "license": "MIT",
+ "dependencies": {
+ "confbox": "^0.1.8",
+ "mlly": "^1.7.4",
+ "pathe": "^2.0.1"
+ }
+ },
+ "node_modules/points-on-curve": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/points-on-curve/-/points-on-curve-0.2.0.tgz",
+ "integrity": "sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A==",
+ "license": "MIT"
+ },
+ "node_modules/points-on-path": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/points-on-path/-/points-on-path-0.2.1.tgz",
+ "integrity": "sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g==",
+ "license": "MIT",
+ "dependencies": {
+ "path-data-parser": "0.1.0",
+ "points-on-curve": "0.2.0"
+ }
+ },
"node_modules/postcss": {
"version": "8.5.6",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
@@ -15618,9 +16788,9 @@
}
},
"node_modules/react-loadable-ssr-addon-v5-slorber": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz",
- "integrity": "sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.3.tgz",
+ "integrity": "sha512-GXfh9VLwB5ERaCsU6RULh7tkemeX15aNh6wuMEBtfdyMa7fFG8TXrhXlx1SoEK2Ty/l6XIkzzYIQmyaWW3JgdQ==",
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.10.3"
@@ -16425,6 +17595,18 @@
"node": ">=4"
}
},
+ "node_modules/resolve-package-path": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/resolve-package-path/-/resolve-package-path-4.0.3.tgz",
+ "integrity": "sha512-SRpNAPW4kewOaNUt8VPqhJ0UMxawMwzJD8V7m1cJfdSTK9ieZwS6K7Dabsm4bmLFM96Z5Y/UznrpG5kt1im8yA==",
+ "license": "MIT",
+ "dependencies": {
+ "path-root": "^0.1.1"
+ },
+ "engines": {
+ "node": ">= 12"
+ }
+ },
"node_modules/resolve-pathname": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz",
@@ -16481,6 +17663,24 @@
"url": "https://github.com/sponsors/isaacs"
}
},
+ "node_modules/robust-predicates": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.3.tgz",
+ "integrity": "sha512-NS3levdsRIUOmiJ8FZWCP7LG3QpJyrs/TE0Zpf1yvZu8cAJJ6QMW92H1c7kWpdIHo8RvmLxN/o2JXTKHp74lUA==",
+ "license": "Unlicense"
+ },
+ "node_modules/roughjs": {
+ "version": "4.6.6",
+ "resolved": "https://registry.npmjs.org/roughjs/-/roughjs-4.6.6.tgz",
+ "integrity": "sha512-ZUz/69+SYpFN/g/lUlo2FXcIjRkSu3nDarreVdGGndHEBJ6cXPdKguS8JGxwj5HA5xIbVKSmLgr5b3AWxtRfvQ==",
+ "license": "MIT",
+ "dependencies": {
+ "hachure-fill": "^0.5.2",
+ "path-data-parser": "^0.1.0",
+ "points-on-curve": "^0.2.0",
+ "points-on-path": "^0.2.1"
+ }
+ },
"node_modules/rtlcss": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-4.3.0.tgz",
@@ -16522,6 +17722,12 @@
"queue-microtask": "^1.2.2"
}
},
+ "node_modules/rw": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz",
+ "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==",
+ "license": "BSD-3-Clause"
+ },
"node_modules/safe-buffer": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
@@ -16720,15 +17926,15 @@
}
},
"node_modules/serve-handler": {
- "version": "6.1.6",
- "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.6.tgz",
- "integrity": "sha512-x5RL9Y2p5+Sh3D38Fh9i/iQ5ZK+e4xuXRd/pGbM4D13tgo/MGwbttUk8emytcr1YYzBYs+apnUngBDFYfpjPuQ==",
+ "version": "6.1.7",
+ "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.7.tgz",
+ "integrity": "sha512-CinAq1xWb0vR3twAv9evEU8cNWkXCb9kd5ePAHUKJBkOsUpR1wt/CvGdeca7vqumL1U5cSaeVQ6zZMxiJ3yWsg==",
"license": "MIT",
"dependencies": {
"bytes": "3.0.0",
"content-disposition": "0.5.2",
"mime-types": "2.1.18",
- "minimatch": "3.1.2",
+ "minimatch": "3.1.5",
"path-is-inside": "1.0.2",
"path-to-regexp": "3.3.0",
"range-parser": "1.2.0"
@@ -17348,6 +18554,12 @@
"postcss": "^8.4.31"
}
},
+ "node_modules/stylis": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.4.0.tgz",
+ "integrity": "sha512-5Z9ZpRzfuH6l/UAvCPAPUo3665Nk2wLaZU3x+TLHKVzIz33+sbJqbtrYoC3KD4/uVOr2Zp+L0LySezP9OHV9yA==",
+ "license": "MIT"
+ },
"node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -17530,6 +18742,15 @@
"integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==",
"license": "MIT"
},
+ "node_modules/tinyexec": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.1.2.tgz",
+ "integrity": "sha512-dAqSqE/RabpBKI8+h26GfLq6Vb3JVXs30XYQjdMjaj/c2tS8IYYMbIzP599KtRj7c57/wYApb3QjgRgXmrCukA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
+ },
"node_modules/tinypool": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz",
@@ -17652,6 +18873,15 @@
"url": "https://github.com/sponsors/wooorm"
}
},
+ "node_modules/ts-dedent": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz",
+ "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.10"
+ }
+ },
"node_modules/tslib": {
"version": "2.8.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
@@ -17727,6 +18957,12 @@
"node": ">=14.17"
}
},
+ "node_modules/ufo": {
+ "version": "1.6.4",
+ "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.4.tgz",
+ "integrity": "sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==",
+ "license": "MIT"
+ },
"node_modules/undici-types": {
"version": "7.12.0",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.12.0.tgz",
@@ -18214,6 +19450,19 @@
"uuid": "dist/bin/uuid"
}
},
+ "node_modules/validate-peer-dependencies": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/validate-peer-dependencies/-/validate-peer-dependencies-2.2.0.tgz",
+ "integrity": "sha512-8X1OWlERjiUY6P6tdeU9E0EwO8RA3bahoOVG7ulOZT5MqgNDUO/BQoVjYiHPcNe+v8glsboZRIw9iToMAA2zAA==",
+ "license": "MIT",
+ "dependencies": {
+ "resolve-package-path": "^4.0.3",
+ "semver": "^7.3.8"
+ },
+ "engines": {
+ "node": ">= 12"
+ }
+ },
"node_modules/value-equal": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz",
@@ -18271,6 +19520,55 @@
"url": "https://opencollective.com/unified"
}
},
+ "node_modules/vscode-jsonrpc": {
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz",
+ "integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/vscode-languageserver": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-9.0.1.tgz",
+ "integrity": "sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==",
+ "license": "MIT",
+ "dependencies": {
+ "vscode-languageserver-protocol": "3.17.5"
+ },
+ "bin": {
+ "installServerIntoExtension": "bin/installServerIntoExtension"
+ }
+ },
+ "node_modules/vscode-languageserver-protocol": {
+ "version": "3.17.5",
+ "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz",
+ "integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==",
+ "license": "MIT",
+ "dependencies": {
+ "vscode-jsonrpc": "8.2.0",
+ "vscode-languageserver-types": "3.17.5"
+ }
+ },
+ "node_modules/vscode-languageserver-textdocument": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz",
+ "integrity": "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==",
+ "license": "MIT"
+ },
+ "node_modules/vscode-languageserver-types": {
+ "version": "3.17.5",
+ "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz",
+ "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==",
+ "license": "MIT"
+ },
+ "node_modules/vscode-uri": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz",
+ "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==",
+ "license": "MIT"
+ },
"node_modules/watchpack": {
"version": "2.4.4",
"resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.4.tgz",
diff --git a/package.json b/package.json
index db8bde2..4b86d54 100644
--- a/package.json
+++ b/package.json
@@ -19,12 +19,14 @@
"@algolia/autocomplete-shared": "^1.19.2",
"@algolia/client-search": "^5.34.1",
"@docusaurus/core": "3.8.1",
- "@docusaurus/plugin-client-redirects": "^3.8.1",
+ "@docusaurus/plugin-client-redirects": "3.8.1",
"@docusaurus/preset-classic": "3.8.1",
+ "@docusaurus/theme-mermaid": "3.8.1",
"@mdx-js/react": "^3.1.0",
"algoliasearch": "^5.34.1",
"clsx": "^2.0.0",
"docusaurus-lunr-search": "^3.6.0",
+ "docusaurus-plugin-image-zoom": "^3.0.1",
"prism-react-renderer": "^2.3.0",
"react": "^18.0.0",
"react-dom": "^18.0.0",
diff --git a/sidebars.ts b/sidebars.ts
index 721c9d9..853f3a2 100644
--- a/sidebars.ts
+++ b/sidebars.ts
@@ -16,13 +16,26 @@ const sidebars: SidebarsConfig = {
"index",
{
type: "category",
- label: "TACEO Network",
- link: { type: "doc", id: "taceo-network/index" },
+ label: "Finance Solutions",
+ collapsed: false,
+ link: { type: "doc", id: "finance-solutions/overview" },
items: [
- "taceo-network/network",
- "taceo-network/node-operators",
- "taceo-network/governance",
- "taceo-network/roadmap",
+ "finance-solutions/payments/introduction",
+ {
+ type: "category",
+ label: "Confidential x402",
+ link: { type: "generated-index", title:"Confidential x402", slug: "finance-solutions/x402/", description: "Confidential x402 is a privacy extension to the x402 payment protocol that hides payment amounts and balances onchain using ZK proofs and MPC, without changing how you write HTTP clients or servers." },
+ items: [
+ "finance-solutions/x402/introduction",
+ "finance-solutions/x402/quickstart",
+ "finance-solutions/x402/how-it-works",
+ "finance-solutions/x402/integration-guide",
+ "finance-solutions/x402/protocol-reference",
+ "finance-solutions/x402/network-and-contracts",
+ ],
+ },
+ "finance-solutions/compliance/introduction",
+ "finance-solutions/yield/introduction",
],
},
{
@@ -70,6 +83,17 @@ const sidebars: SidebarsConfig = {
},
],
},
+ {
+ type: "category",
+ label: "TACEO Network",
+ link: { type: "doc", id: "taceo-network/index" },
+ items: [
+ "taceo-network/network",
+ "taceo-network/node-operators",
+ "taceo-network/governance",
+ "taceo-network/roadmap",
+ ],
+ },
{
type: "category",
label: "Developer Tools",
diff --git a/src/css/custom.css b/src/css/custom.css
index 759eb0d..45b3f10 100644
--- a/src/css/custom.css
+++ b/src/css/custom.css
@@ -8,6 +8,58 @@
--ifm-color-primary-lightest: #066b75;
--docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.1);
--ifm-background-color: #f1f0ec;
+ --taceo-green: #52ffc5;
+ --taceo-cream: #f1f0ec;
+ --font-ppneue: "ppneue", sans-serif;
+}
+
+/* TACEO brand font (ppneue), loaded globally, applied only on the marketing
+ landing page (src/pages/index.tsx → .homepage-layout). */
+@font-face {
+ font-family: "ppneue";
+ src: url("/fonts/neue-100.woff2") format("woff2");
+ font-weight: 100;
+ font-style: normal;
+ font-display: swap;
+}
+@font-face {
+ font-family: "ppneue";
+ src: url("/fonts/neue-300.woff2") format("woff2");
+ font-weight: 300;
+ font-style: normal;
+ font-display: swap;
+}
+@font-face {
+ font-family: "ppneue";
+ src: url("/fonts/neue-400.woff2") format("woff2");
+ font-weight: 400;
+ font-style: normal;
+ font-display: swap;
+}
+@font-face {
+ font-family: "ppneue";
+ src: url("/fonts/neue-500.woff2") format("woff2");
+ font-weight: 500;
+ font-style: normal;
+ font-display: swap;
+}
+@font-face {
+ font-family: "ppneue";
+ src: url("/fonts/neue-700.woff2") format("woff2");
+ font-weight: 700;
+ font-style: normal;
+ font-display: swap;
+}
+
+/* Apply ppneue across the marketing landing page only. */
+.homepage-layout,
+.homepage-layout h1,
+.homepage-layout h2,
+.homepage-layout h3,
+.homepage-layout h4,
+.homepage-layout p,
+.homepage-layout a {
+ font-family: var(--font-ppneue);
}
/* Light mode styling */
@@ -285,6 +337,17 @@ html:not([data-theme="dark"]) .main-wrapper {
background-color: rgba(40, 167, 69, 0.1);
}
+.service-card-warning {
+ padding: 2rem;
+ border: 2px solid var(--ifm-color-warning);
+ border-radius: 12px;
+ background-color: rgba(255, 193, 7, 0.08);
+}
+
+[data-theme="dark"] .service-card-warning {
+ background-color: rgba(255, 193, 7, 0.1);
+}
+
.service-card-muted {
padding: 2rem;
border: 1px solid var(--ifm-color-emphasis-400);
diff --git a/src/pages/index.module.css b/src/pages/index.module.css
index 0091ea8..5c0c839 100644
--- a/src/pages/index.module.css
+++ b/src/pages/index.module.css
@@ -1,6 +1,9 @@
/**
* CSS files with the .module.css suffix will be treated as CSS modules
* and scoped locally.
+ *
+ * Brand source: aligned with /Users/ais/Documents/www.taceo.io
+ * (ppneue font, mint #52ffc5, cream #f1f0ec, 0.5px borders, ultra-thin headings)
*/
/* ─── Page wrapper ─────────────────────────────────────────────────────────── */
@@ -9,57 +12,55 @@
padding: 4rem 0 6rem;
}
-/* ─── Hero ──────────────────────────────────────────────────────────────────── */
+/* ─── Hero (docs-style page header) ─────────────────────────────────────────── */
.hero {
text-align: center;
- margin-bottom: 4rem;
- padding-bottom: 3rem;
+ margin-bottom: 3rem;
+ padding: 1.5rem 0 2rem;
border-bottom: 0.5px solid var(--ifm-color-emphasis-300);
}
.heroTitle {
- font-size: 3.5rem !important;
- font-weight: 100 !important;
- line-height: 1.15 !important;
- margin-bottom: 1.2rem !important;
- letter-spacing: -0.01em;
-}
-
-.heroSubtitle {
- font-size: 1.3rem !important;
+ font-size: 2.4rem !important;
font-weight: 300 !important;
- color: var(--ifm-color-emphasis-700) !important;
+ line-height: 1.25 !important;
margin-bottom: 0.6rem !important;
- line-height: 1.5 !important;
+ letter-spacing: -0.01em;
}
-.heroTagline {
+.heroSubtitle {
font-size: 1rem !important;
font-weight: 400 !important;
- color: var(--ifm-color-emphasis-600) !important;
- margin-bottom: 2.5rem !important;
- line-height: 1.6 !important;
+ color: var(--ifm-color-emphasis-700) !important;
+ margin-bottom: 1.5rem !important;
+ line-height: 1.5 !important;
+ max-width: 42rem;
+ margin-left: auto !important;
+ margin-right: auto !important;
}
.heroLinks {
display: flex;
- gap: 2.5rem;
+ gap: 2rem;
justify-content: center;
flex-wrap: wrap;
}
-.heroLink {
+/* ─── Animated arrow link (marketing-site signature) ────────────────────────── */
+
+.arrowLink {
position: relative;
- font-size: 1.1rem !important;
+ display: inline-block;
+ font-size: 1rem !important;
font-weight: 400 !important;
+ color: inherit !important;
text-decoration: none !important;
padding: 0.4rem 0;
- display: inline-block;
- color: inherit !important;
+ white-space: nowrap;
}
-.heroLink::after {
+.arrowLink::after {
content: "";
position: absolute;
width: 100%;
@@ -70,20 +71,54 @@
transition: height 0.2s ease;
}
-.heroLink:hover {
+.arrowLink:hover {
text-decoration: none !important;
}
-.heroLink:hover::after {
+.arrowLink:hover::after {
height: 1.5px;
}
-.heroLinkPrimary {
- color: #52ffc5 !important;
+.arrowLink .arrowLeft,
+.arrowLink .arrowRight {
+ display: inline-block;
+ transition: margin 0.25s ease, max-width 0.25s ease, opacity 0.2s ease;
+ overflow: hidden;
+ vertical-align: middle;
+}
+
+/* Default: right arrow visible, left arrow collapsed */
+.arrowLink .arrowLeft {
+ max-width: 0;
+ margin-right: 0;
+ opacity: 0;
+}
+
+.arrowLink .arrowRight {
+ max-width: 1.5em;
+ margin-left: 0.5rem;
+ opacity: 1;
}
-.heroLinkPrimary::after {
- background-color: #52ffc5;
+/* Hover: arrows swap sides */
+.arrowLink:hover .arrowLeft {
+ max-width: 1.5em;
+ margin-right: 0.5rem;
+ opacity: 1;
+}
+
+.arrowLink:hover .arrowRight {
+ max-width: 0;
+ margin-left: 0;
+ opacity: 0;
+}
+
+.arrowLinkPrimary {
+ color: var(--ifm-color-primary) !important;
+}
+
+[data-theme="dark"] .arrowLinkPrimary {
+ color: var(--taceo-green) !important;
}
/* ─── Section titles ────────────────────────────────────────────────────────── */
@@ -107,8 +142,9 @@
}
.journeyCard {
+ position: relative;
border: 0.5px solid var(--ifm-color-emphasis-400);
- padding: 2rem 1.8rem;
+ padding: 2rem 1.8rem 2rem 2.6rem;
display: flex;
flex-direction: column;
justify-content: space-between;
@@ -119,23 +155,48 @@
border-color: var(--ifm-color-emphasis-700);
}
+/* Rotated mint bar, accent motif from the marketing site's network cards */
+.journeyCard::before {
+ content: "";
+ position: absolute;
+ top: 1.8rem;
+ left: 0.6rem;
+ width: 1.2rem;
+ height: 0.5rem;
+ background-color: var(--taceo-green);
+ transform: rotate(-45deg);
+ transform-origin: center;
+}
+
+.journeyCardLead {
+ border: 0.5px solid var(--ifm-color-primary);
+ background-color: rgba(82, 255, 197, 0.04);
+}
+
+[data-theme="dark"] .journeyCardLead {
+ border-color: var(--taceo-green);
+ background-color: rgba(82, 255, 197, 0.06);
+}
+
.journeyStatus {
- font-size: 0.9rem !important;
- color: #05525a !important;
+ font-size: 0.85rem !important;
+ color: var(--ifm-color-primary) !important;
font-weight: 400;
margin-bottom: 0.8rem;
- letter-spacing: 0.03em;
+ letter-spacing: 0.06em;
text-transform: uppercase;
}
+
[data-theme="dark"] .journeyStatus {
- color: #52ffc5 !important;
+ color: var(--taceo-green) !important;
}
.journeyCardTitle {
- font-size: 1.3rem !important;
+ font-size: 1.4rem !important;
font-weight: 300 !important;
- line-height: 1.4 !important;
+ line-height: 1.35 !important;
margin-bottom: 1rem !important;
+ letter-spacing: -0.01em;
}
.journeyCardDesc {
@@ -146,6 +207,13 @@
margin-bottom: 1.5rem !important;
}
+.journeyCardCtas {
+ display: flex;
+ flex-direction: column;
+ gap: 0.5rem;
+ margin-top: auto;
+}
+
/* ─── Quick links ────────────────────────────────────────────────────────────── */
.quickLinksSection {
@@ -156,9 +224,9 @@
.quickLinksGrid {
display: grid;
- grid-template-columns: repeat(3, 1fr);
+ grid-template-columns: repeat(4, 1fr);
gap: 1.5rem;
- max-width: 800px;
+ max-width: 1100px;
margin: 0 auto;
}
@@ -203,195 +271,9 @@
flex-wrap: wrap;
}
-/* ─── Network card section (legacy classes kept for reference) ──────────────── */
-.network {
- position: relative;
- z-index: 1;
- background-color: var(--taceo-foreground);
- padding: 3rem 0 6rem 0;
-}
-
-.networkTitle {
- font-weight: 100 !important;
- color: var(--taceo-background) !important;
- font-size: 3.5rem !important;
- line-height: 4rem !important;
- text-align: center;
- margin-bottom: 2rem !important;
-}
-
-.networkDescription {
- font-size: 1.2rem !important;
- color: var(--taceo-background) !important;
- font-weight: 400 !important;
- line-height: 1.4rem !important;
- max-width: 50rem;
- margin: 0 auto;
- text-align: center;
- padding-bottom: 4rem;
-}
-
-.networkGrid {
- position: relative;
- display: grid;
- grid-template-columns: repeat(3, 1fr);
- align-items: stretch;
- max-width: 1200px;
- margin: 0 auto;
- gap: 2.5rem;
- padding: 0 1.5rem;
-}
-
-.networkCard {
- height: 100%;
- position: relative;
-}
-
-.networkCard::after {
- display: none;
-}
-
-.networkCard:first-child::after {
- display: none;
-}
-
-.networkCardInner {
- position: relative;
- border: 1px solid #000000;
- padding: 1.5rem 1.2rem;
- height: 100%;
- display: grid;
- grid-template-columns: repeat(12, 1fr);
- gap: 1.5rem;
- align-items: flex-start;
-}
-
-.networkIcon {
- grid-column: span 2;
- display: flex;
- align-items: flex-start;
- padding-top: 1rem;
-}
-
-.networkIconBar {
- width: 100%;
- height: 0.8rem;
- background-color: #52ffc5;
- transform: rotate(-45deg);
-}
-
-.networkContent {
- grid-column: span 10;
- display: flex;
- flex-direction: column;
- justify-content: space-between;
- height: 100%;
-}
-
-.networkCardTitle {
- color: var(--taceo-background) !important;
- font-weight: 300 !important;
- font-size: 1.8rem !important;
- line-height: 1.2 !important;
- margin-bottom: 1.5rem !important;
-}
-
-.networkStatus {
- font-size: 1.1rem !important;
- color: var(--taceo-green) !important;
- font-weight: 400;
- margin-bottom: 1.2rem;
-}
-
-.networkCardDescription {
- font-size: 1.1rem !important;
- color: var(--taceo-background) !important;
- font-weight: 400 !important;
- line-height: 1.4rem !important;
- margin-bottom: 1.5rem;
-}
-
-.networkLinkWrapper {
- margin-top: auto;
-}
-
-.networkLink {
- position: relative;
- color: inherit !important;
- font-weight: 400 !important;
- font-size: 1rem !important;
- text-decoration: none !important;
- padding: 0.4rem 0;
- display: inline-block;
-}
-
-.networkLink::after {
- content: "";
- position: absolute;
- width: 100%;
- height: 1px;
- bottom: 0;
- left: 0;
- background-color: currentColor;
- transition: height 0.2s ease;
-}
-
-.networkLink:hover {
- text-decoration: none !important;
-}
-
-.networkLink:hover::after {
- height: 2px;
-}
-
-/* Dark mode overrides */
-[data-theme="dark"] .network {
- background-color: var(--ifm-background-color);
-}
-
-[data-theme="dark"] .networkCardInner {
- border: 1px solid #f1f0ec;
-}
-
-[data-theme="dark"] .networkTitle,
-[data-theme="dark"] .networkDescription,
-[data-theme="dark"] .networkCardTitle,
-[data-theme="dark"] .networkCardDescription,
-[data-theme="dark"] .networkLink {
- color: #f1f0ec !important;
-}
-
-[data-theme="dark"] .networkStatus {
- color: var(--ifm-color-primary) !important;
-}
-
-[data-theme="dark"] .networkLink::after {
- background-color: #f1f0ec;
-}
-
-[data-theme="dark"] .networkLink:hover::after {
- background-color: #f1f0ec;
-}
-
-/* Responsive Design */
-@media screen and (max-width: 1200px) {
- .networkGrid {
- padding: 0 1rem;
- gap: 2rem;
- }
-}
+/* ─── Responsive ─────────────────────────────────────────────────────────────── */
@media screen and (max-width: 996px) {
- .networkTitle {
- font-size: 2.8rem !important;
- line-height: 3.2rem !important;
- }
-
- .heroTitle {
- font-size: 2.6rem !important;
- }
-
- .networkGrid,
.journeyGrid,
.quickLinksGrid {
grid-template-columns: 1fr !important;
@@ -401,48 +283,15 @@
}
@media screen and (max-width: 768px) {
- .networkTitle {
- font-size: 2.2rem !important;
- line-height: 2.6rem !important;
- }
-
- .heroTitle {
- font-size: 2rem !important;
- }
-
.heroLinks,
.ctaLinks {
gap: 1.5rem;
}
- .networkGrid,
.journeyGrid,
.quickLinksGrid {
grid-template-columns: 1fr !important;
gap: 1.2rem;
padding: 0;
}
-
- .networkCardInner {
- grid-template-columns: auto 1fr;
- text-align: left;
- padding: 1.2rem 1rem;
- gap: 1rem;
- }
-
- .networkIcon {
- grid-column: 1;
- display: flex;
- align-items: flex-start;
- padding-top: 1rem;
- width: 3rem;
- }
-
- .networkContent {
- grid-column: 2;
- display: flex;
- flex-direction: column;
- justify-content: space-between;
- height: 100%;
- }
}
diff --git a/src/pages/index.tsx b/src/pages/index.tsx
index 4cf7a12..2074c38 100644
--- a/src/pages/index.tsx
+++ b/src/pages/index.tsx
@@ -4,24 +4,73 @@ import Layout from "@theme/Layout";
import styles from "./index.module.css";
+interface ArrowLinkProps {
+ to: string;
+ label: string;
+ className?: string;
+}
+
+function ArrowLink({ to, label, className }: ArrowLinkProps) {
+ return (
+
+ →
+ {label}
+ →
+
+ );
+}
+
+interface JourneyCardProps {
+ status: string;
+ title: string;
+ description: string;
+ ctas: { to: string; label: string }[];
+ lead?: boolean;
+}
+
+function JourneyCard({
+ status,
+ title,
+ description,
+ ctas,
+ lead = false,
+}: JourneyCardProps) {
+ return (
+
+
+
{status}
+
{title}
+
{description}
+
+
+ {ctas.map((cta) => (
+
+ ))}
+
+
+ );
+}
+
function GuidanceSection() {
return (
{/* ── Hero ── */}
-
TACEO Network
+
TACEO Documentation
- Private execution layer for digital rails.
-
-
- The TACEO Network and services enable computation over sensitive
- data without exposing inputs.
+ In production for global-scale identity. Now powering private
+ onchain finance through Merces.
-
- Browse Documentation
-
+
+
@@ -29,55 +78,46 @@ function GuidanceSection() {
What do you want to accomplish?
-
-
-
Learn the fundamentals
-
- I want to understand TACEO Network
-
-
- Understand how distributed privacy-preserving computation works
- and why it matters.
-
-
-
- Explore Network
-
-
+
-
-
-
- Production ready services
-
-
- I want to add privacy services to my app
-
-
- Integrate TACEO:OPRF for privacy-preserving nullifiers or
- TACEO:Proof for private proof delegation.
-
-
-
- Browse Services
-
-
+
-
-
-
Developer tools
-
- I want to experiment with CoSNARKs
-
-
- Build collaborative zero-knowledge circuits using Co-Circom and
- Co-Noir tooling.
-
@@ -160,7 +184,7 @@ export default function Home() {
return (
diff --git a/static/fonts/neue-100.woff2 b/static/fonts/neue-100.woff2
new file mode 100644
index 0000000..0634733
Binary files /dev/null and b/static/fonts/neue-100.woff2 differ
diff --git a/static/fonts/neue-300.woff2 b/static/fonts/neue-300.woff2
new file mode 100644
index 0000000..ebac434
Binary files /dev/null and b/static/fonts/neue-300.woff2 differ
diff --git a/static/fonts/neue-400.woff2 b/static/fonts/neue-400.woff2
new file mode 100644
index 0000000..bd23f87
Binary files /dev/null and b/static/fonts/neue-400.woff2 differ
diff --git a/static/fonts/neue-500.woff2 b/static/fonts/neue-500.woff2
new file mode 100644
index 0000000..1e0f2fb
Binary files /dev/null and b/static/fonts/neue-500.woff2 differ
diff --git a/static/fonts/neue-700.woff2 b/static/fonts/neue-700.woff2
new file mode 100644
index 0000000..077769c
Binary files /dev/null and b/static/fonts/neue-700.woff2 differ
diff --git a/static/llms.txt b/static/llms.txt
new file mode 100644
index 0000000..3d4323e
--- /dev/null
+++ b/static/llms.txt
@@ -0,0 +1,54 @@
+# TACEO Documentation
+
+> Privacy layer on the chains you already use. Merces ships private onchain finance with two privacy modes (confidential and fully private, selectable per transaction), plus integrable privacy services (OPRF, Proof) and the production MPC network beneath. TACEO co-architected the protocol behind World's iris-code system at global scale, and is now bringing the same foundation to onchain payments.
+
+TACEO is best known for the privacy-preserving identity infrastructure used by World and zkPassport. The same MPC and coSNARK stack now underpins Merces, our confidential token transfer protocol live on Arc, Base, and Plasma testnets.
+
+## Finance Solutions
+
+- [Finance Solutions Overview](https://docs.taceo.io/docs/finance-solutions/overview): Private onchain finance powered by Merces. Two privacy modes selectable per transaction, plus compliance and integrations.
+- [Private Payments](https://docs.taceo.io/docs/finance-solutions/payments/introduction): Private ERC-20 transfers on the EVM chain you already use. Confidential mode (amounts hidden, addresses visible) live on Arc and Base; fully private mode (addresses also hidden) live on Plasma.
+- [Confidential x402](https://docs.taceo.io/docs/finance-solutions/x402/introduction): HTTP-embedded confidential payments using the x402 protocol with hidden amounts. Live on Base testnet.
+- [Confidential x402 Quickstart](https://docs.taceo.io/docs/finance-solutions/x402/quickstart): Make a confidential x402 payment in under five minutes using TACEO's hosted infrastructure. TypeScript and Rust examples.
+- [Confidential x402 How it works](https://docs.taceo.io/docs/finance-solutions/x402/how-it-works): Component-by-component walkthrough of a confidential x402 payment with sequence diagram and performance numbers.
+- [Confidential x402 Integration guide](https://docs.taceo.io/docs/finance-solutions/x402/integration-guide): Add the confidential payment scheme to your own client and server (TypeScript and Rust).
+- [Confidential x402 Protocol reference](https://docs.taceo.io/docs/finance-solutions/x402/protocol-reference): Wire format, EIP-712 typed data, ZK circuit details, privacy and trust model.
+- [Confidential x402 Network and contracts](https://docs.taceo.io/docs/finance-solutions/x402/network-and-contracts): Deployed contract addresses, hosted endpoints, faucet API, MPC public keys.
+- [Compliance](https://docs.taceo.io/docs/finance-solutions/compliance/introduction): Privacy-preserving KYC, AML, sanctions, and Travel Rule via selective disclosure. Compliance dashboard live on Plasma testnet.
+- [Private Yield](https://docs.taceo.io/docs/finance-solutions/yield/introduction): Compliant private yield on Ethereum. In active development.
+
+## Privacy Services
+
+- [Privacy Services Overview](https://docs.taceo.io/docs/services/overview): Compare TACEO:OPRF, TACEO:Proof, and upcoming services.
+- [TACEO:OPRF](https://docs.taceo.io/docs/taceo-oprf/overview): Privacy-preserving nullifiers via oblivious pseudorandom functions. In production via World ID and zkPassport.
+- [TACEO:Proof](https://docs.taceo.io/docs/taceo-proof/overview): Private proof delegation for ZK proofs without exposing witness data to any single party.
+
+## TACEO Network
+
+- [Network Overview](https://docs.taceo.io/docs/taceo-network/): The MPC network underpinning Merces and the privacy services.
+- [Node Operators](https://docs.taceo.io/docs/taceo-network/node-operators): How to run a TACEO node, hardware requirements, security model.
+- [Governance](https://docs.taceo.io/docs/taceo-network/governance): Network governance model and decision-making process.
+- [Roadmap](https://docs.taceo.io/docs/taceo-network/roadmap): TACEO Network development plan.
+
+## Developer Tools (coSNARKs)
+
+- [Collaborative SNARKs Overview](https://docs.taceo.io/docs/overview): coCircom and coNoir, tools for building MPC-based zero-knowledge circuits.
+- [coCircom Quickstart](https://docs.taceo.io/docs/getting-started/quick-start-co-circom): First collaborative Circom circuit.
+- [coNoir Quickstart](https://docs.taceo.io/docs/getting-started/quick-start-co-noir): First collaborative Noir circuit.
+
+## Use Cases
+
+- [Finance](https://docs.taceo.io/docs/use-cases/finance): Confidential payments, treasury, and B2B settlement on public chains.
+- [Identity](https://docs.taceo.io/docs/use-cases/identity): Privacy-preserving identity and uniqueness checks.
+- [Compliance](https://docs.taceo.io/docs/use-cases/compliance): Privacy-preserving compliance for regulated entities.
+
+## Optional
+
+- [Merces: Onchain Finance](https://core.taceo.io/articles/merces-onchain-finance/): Canonical positioning piece for Merces.
+- [Merces deep-dive](https://core.taceo.io/articles/merces-deep-dive/): Technical detail on the two privacy modes, compliance dashboard, and Plasma deployment.
+- [Confidential transfers writeup](https://core.taceo.io/articles/confidential-token-transfers-demo/): The original Merces I confidential payments demo on Arc and Base.
+- [IACR ePrint 2026/850](https://eprint.iacr.org/2026/850): Escudero et al., "Merces: Confidential Token Transfers via MPC and CoSNARKs."
+- [TACEO on GitHub](https://github.com/TaceoLabs): All TACEO open source repositories.
+- [Confidential payments (Arc, Base)](https://merces-dashboard.taceo.io/arc): Live demo of Merces confidential mode.
+- [Fully private payments and compliance (Plasma)](https://merces.taceo.io): Live demo of Merces fully private mode and compliance dashboard.
+- [Compliance dashboard](https://merces.taceo.io/compliance): Live selective-disclosure dashboard for authorized auditors on Plasma testnet.
diff --git a/static/robots.txt b/static/robots.txt
new file mode 100644
index 0000000..0e47042
--- /dev/null
+++ b/static/robots.txt
@@ -0,0 +1,29 @@
+# TACEO Documentation
+# https://docs.taceo.io
+
+User-agent: *
+Allow: /
+
+# Explicit allowance for major AI crawlers (already covered by User-agent: *
+# but listed explicitly so policy is unambiguous if a future change tightens
+# the default).
+User-agent: GPTBot
+Allow: /
+
+User-agent: ClaudeBot
+Allow: /
+
+User-agent: PerplexityBot
+Allow: /
+
+User-agent: Google-Extended
+Allow: /
+
+User-agent: Applebot-Extended
+Allow: /
+
+User-agent: CCBot
+Allow: /
+
+Sitemap: https://docs.taceo.io/sitemap.xml
+Sitemap: https://docs.taceo.io/llms.txt