From f700b6fbc93cf7a55316bdbcf2d47a1c88811b6c Mon Sep 17 00:00:00 2001 From: Graham Ritter Date: Mon, 20 Apr 2026 19:12:20 -0400 Subject: [PATCH 001/117] docs revamp v1 --- ai/skills.mdx | 8 + changelogs/api-changelog/readme.mdx | 8 + changelogs/tvc-changelog/readme.mdx | 8 + docs.json | 499 ++++++++++----------- other-primitives/encryption-decryption.mdx | 8 + other-primitives/tls-fetcher.mdx | 8 + solutions/overview.mdx | 8 + transaction-management/trading.mdx | 15 + transaction-management/yield.mdx | 15 + tvc/overview.mdx | 17 + tvc/reference.mdx | 8 + 11 files changed, 345 insertions(+), 257 deletions(-) create mode 100644 ai/skills.mdx create mode 100644 changelogs/api-changelog/readme.mdx create mode 100644 changelogs/tvc-changelog/readme.mdx create mode 100644 other-primitives/encryption-decryption.mdx create mode 100644 other-primitives/tls-fetcher.mdx create mode 100644 solutions/overview.mdx create mode 100644 transaction-management/trading.mdx create mode 100644 transaction-management/yield.mdx create mode 100644 tvc/overview.mdx create mode 100644 tvc/reference.mdx diff --git a/ai/skills.mdx b/ai/skills.mdx new file mode 100644 index 00000000..fd5f8de9 --- /dev/null +++ b/ai/skills.mdx @@ -0,0 +1,8 @@ +--- +title: "Skills" +description: "PLACEHOLDER -- Turnkey Skills for AI agent integrations." +--- + +# Skills + +> **This is a placeholder page.** Content will be written in a future phase. diff --git a/changelogs/api-changelog/readme.mdx b/changelogs/api-changelog/readme.mdx new file mode 100644 index 00000000..6a78f815 --- /dev/null +++ b/changelogs/api-changelog/readme.mdx @@ -0,0 +1,8 @@ +--- +title: "API changelog" +description: "PLACEHOLDER -- Version history and breaking changes for the Turnkey API." +--- + +# API changelog + +> **This is a placeholder page.** API changelog entries will be added in a future phase. diff --git a/changelogs/tvc-changelog/readme.mdx b/changelogs/tvc-changelog/readme.mdx new file mode 100644 index 00000000..ce2f4161 --- /dev/null +++ b/changelogs/tvc-changelog/readme.mdx @@ -0,0 +1,8 @@ +--- +title: "TVC changelog" +description: "PLACEHOLDER -- Version history for Turnkey's Verifiable Cloud." +--- + +# TVC changelog + +> **This is a placeholder page.** TVC changelog entries will be added in a future phase. diff --git a/docs.json b/docs.json index 097c3180..3c314cc5 100644 --- a/docs.json +++ b/docs.json @@ -40,6 +40,109 @@ ] }, "tabs": [ + { + "tab": "Solutions", + "groups": [ + { + "group": "Solutions", + "pages": [ + "solutions/overview" + ] + }, + { + "group": "Embedded Wallets", + "pages": [ + "embedded-wallets/overview", + { + "group": "Examples", + "pages": [ + "embedded-wallets/code-examples/embedded-consumer-wallet", + "embedded-wallets/code-examples/create-sub-org-passkey", + "embedded-wallets/code-examples/authenticate-user-passkey", + "embedded-wallets/code-examples/create-passkey-session", + "embedded-wallets/code-examples/sending-sponsored-transactions", + "embedded-wallets/code-examples/sending-sponsored-solana-transactions", + "reference/tron-gasless-transactions", + "embedded-wallets/code-examples/client-side-signing", + "embedded-wallets/code-examples/create-user-email", + "embedded-wallets/code-examples/authenticate-user-email", + "embedded-wallets/code-examples/add-credential", + "embedded-wallets/code-examples/wallet-auth", + "embedded-wallets/code-examples/signing-transactions", + "embedded-wallets/code-examples/import", + "embedded-wallets/code-examples/export" + ] + } + ] + }, + { + "group": "Company Wallets", + "pages": [ + "company-wallets/overview", + "products/embedded-wallets/features/agentic-wallets", + { + "group": "Examples", + "pages": [ + "company-wallets/code-examples/signing-transactions", + "company-wallets/code-examples/smart-contract-management", + "company-wallets/code-examples/payment-orchestration" + ] + } + ] + }, + { + "group": "Key Management", + "pages": [ + "products/key-management/overview", + { + "group": "Examples", + "pages": [ + "products/key-management/examples/encryption-key-storage", + "products/key-management/examples/enterprise-disaster-recovery" + ] + } + ] + }, + { + "group": "Turnkey Verifiable Cloud", + "pages": [ + "tvc/overview", + "tvc/reference" + ] + }, + { + "group": "Cookbook", + "pages": [ + "cookbook/landing", + { + "group": "Yield", + "pages": [ + "cookbook/morpho", + "cookbook/aave", + "cookbook/breeze", + "cookbook/yieldxyz" + ] + }, + { + "group": "Trading & bridges", + "pages": [ + "cookbook/jupiter", + "cookbook/lifi", + "cookbook/0x", + "cookbook/relay" + ] + }, + { + "group": "Examples library", + "pages": [ + "cookbook/polymarket-builders", + "cookbook/base-builder-codes" + ] + } + ] + } + ] + }, { "tab": "Documentation", "groups": [ @@ -47,8 +150,17 @@ "group": "Get started", "pages": [ "home", + "getting-started", + { + "group": "Quickstarts", + "pages": [ + "getting-started/embedded-wallet-quickstart", + "getting-started/company-wallets-quickstart", + "getting-started/verifiable-cloud-quickstart" + ] + }, { - "group": "Concepts", + "group": "How Turnkey works", "pages": [ "concepts/overview", "concepts/organizations", @@ -62,213 +174,105 @@ ] }, "concepts/wallets", - "concepts/resource-limits", - "concepts/policies/overview" - ] - }, - { - "group": "Architecture", - "pages": [ - "products/company-wallets/features/security/quorum-os", - "products/company-wallets/features/security/remote-attestation", - "products/company-wallets/features/security/secure-hardware", - "sdks/cli" - ] - }, - "getting-started/quickstart", - { - "group": "Quickstarts", - "pages": [ - "getting-started/embedded-wallet-quickstart", - "getting-started/migration-guide", - "getting-started/company-wallets-quickstart", - "getting-started/verifiable-cloud-quickstart" + "concepts/policies/overview", + "production-checklist/production-checklist" ] }, { - "group": "Production checklist", + "group": "Going live", "pages": [ - "production-checklist/production-checklist", - "production-checklist/backup-recovery", - "production-checklist/embedded-wallet", - "production-checklist/company-wallet" + "production-checklist/backup-recovery" ] } ] }, { - "group": "Products", + "group": "Authentication", "pages": [ + "authentication/overview", + "reference/embedded-wallet-kit", { - "group": "Embedded Wallets", + "group": "Auth methods", "pages": [ - "embedded-wallets/overview", + "authentication/email", + "authentication/social-logins", + "authentication/sms", + "authentication/otp-migration-guide", { - "group": "Features", + "group": "Passkeys", "pages": [ - "embedded-wallets/features/overview", - "products/embedded-wallets/features/agentic-wallets", - "reference/embedded-wallet-kit", - "reference/auth-proxy", - { - "group": "Transaction Management", - "pages": [ - "concepts/broadcasting", - "concepts/balances" - ] - }, - { - "group": "Authentication", - "pages": [ - "authentication/overview", - "authentication/email", - "authentication/social-logins", - "authentication/sms", - "authentication/otp-migration-guide", - { - "group": "Passkeys", - "pages": [ - "authentication/passkeys/introduction", - "authentication/passkeys/integration", - "authentication/passkeys/options", - "authentication/passkeys/native", - "authentication/passkeys/discoverable-vs-non-discoverable" - ] - }, - "authentication/backend-setup", - "authentication/proxying-signed-requests", - "authentication/credentials" - ] - }, - "products/embedded-wallets/features/multi-chain-support", - "products/embedded-wallets/features/fiat-on-ramp", - "authentication/sessions", - { - "group": "Wallets", - "pages": [ - "wallets/pregenerated-wallets", - "wallets/claim-links", - "reference/aa-wallets", - "wallets/import-wallets", - "wallets/export-wallets", - "wallets/wagmi", - "wallets/fiat-on-ramp" - ] - } + "authentication/passkeys/introduction", + "authentication/passkeys/integration", + "authentication/passkeys/options", + "authentication/passkeys/native", + "authentication/passkeys/discoverable-vs-non-discoverable" ] }, - { - "group": "SDKs", - "pages": [ - "sdks/react/landing", - "sdks/react-native", - "sdks/flutter/landing", - "sdks/swift/landing", - "sdks/kotlin/landing", - "sdks/typescript-frontend/landing", - "sdks/javascript-server" - ] - }, - { - "group": "Examples", - "pages": [ - "category/code-examples", - "embedded-wallets/code-examples/embedded-consumer-wallet", - "products/embedded-business-wallets/overview", - "embedded-wallets/embedded-waas", - "embedded-wallets/code-examples/create-sub-org-passkey", - "embedded-wallets/code-examples/authenticate-user-passkey", - "embedded-wallets/code-examples/create-passkey-session", - "embedded-wallets/code-examples/sending-sponsored-transactions", - "embedded-wallets/code-examples/sending-sponsored-solana-transactions", - "reference/tron-gasless-transactions", - "embedded-wallets/code-examples/client-side-signing", - "embedded-wallets/code-examples/create-user-email", - "embedded-wallets/code-examples/authenticate-user-email", - "embedded-wallets/code-examples/add-credential", - "embedded-wallets/code-examples/wallet-auth", - "embedded-wallets/code-examples/signing-transactions", - "embedded-wallets/code-examples/import", - "embedded-wallets/code-examples/export" - ] - } + "authentication/backend-setup" ] }, + "reference/auth-proxy", + "authentication/sessions", + "authentication/proxying-signed-requests", + "authentication/credentials" + ] + }, + { + "group": "Wallet and key management", + "pages": [ + "wallets/pregenerated-wallets", + "wallets/claim-links", + "reference/aa-wallets", + "products/company-wallets/features/import-wallets", + "products/company-wallets/features/export-wallets", + "wallets/wagmi" + ] + }, + { + "group": "Policies", + "pages": [ + "concepts/policies/quickstart", + "concepts/policies/language", { - "group": "Company Wallets", + "group": "Examples", "pages": [ - "company-wallets/overview", - { - "group": "Features", - "pages": [ - "products/company-wallets/features/multi-chain-support", - "company-wallets/co-signing-transactions", - { - "group": "Transaction Management", - "pages": [ - "company-wallets/code-examples/sending-sponsored-transactions", - "concepts/balances" - ] - }, - "products/company-wallets/features/import-wallets", - "products/company-wallets/features/export-wallets", - "developer-reference/webhooks" - ] - }, - { - "group": "SDKs", - "pages": [ - "sdks/golang", - "sdks/ruby", - "sdks/rust", - "sdks/python", - "sdks/javascript-server", - "sdks/foundry" - ] - }, - { - "group": "Examples", - "pages": [ - "category/code-examples-1", - "company-wallets/code-examples/signing-transactions", - "company-wallets/code-examples/smart-contract-management", - "company-wallets/code-examples/payment-orchestration" - ] - } + "concepts/policies/examples/access-control", + "concepts/policies/examples/signing-control", + "concepts/policies/examples/ethereum", + "concepts/policies/examples/solana", + "concepts/policies/examples/tron", + "concepts/policies/examples/bitcoin", + "concepts/policies/examples/tempo" ] }, { - "group": "Key Management", + "group": "Delegated access", "pages": [ - "products/key-management/overview", - { - "group": "Examples", - "pages": [ - "products/key-management/examples/overview", - "products/key-management/examples/encryption-key-storage", - "products/key-management/examples/enterprise-disaster-recovery" - ] - } + "concepts/policies/delegated-access-overview", + "concepts/policies/delegated-access-frontend", + "concepts/policies/delegated-access-backend" ] - } + }, + "company-wallets/co-signing-transactions", + "concepts/policies/smart-contract-interfaces" ] }, { - "group": "Crypto ecosystems", + "group": "Transaction management", "pages": [ - "networks/overview", + "wallets/fiat-on-ramp", + "concepts/broadcasting", + "concepts/balances", + "transaction-management/yield", + "transaction-management/trading", { "group": "Supported networks", "pages": [ + "networks/overview", "networks/ethereum", - { - "group": "Solana (SVM)", - "pages": [ - "networks/solana", - "networks/solana-transaction-construction", - "networks/solana-rent-refunds" - ] - }, + "networks/solana", + "networks/solana-transaction-construction", + "networks/solana-rent-refunds", "networks/bitcoin", "networks/spark", "networks/hyperliquid", @@ -284,74 +288,56 @@ "networks/doge", "networks/others" ] - }, - { - "group": "Cookbook", - "pages": [ - "cookbook/landing", - "cookbook/morpho", - "cookbook/aave", - "cookbook/breeze", - "cookbook/jupiter", - "cookbook/lifi", - "cookbook/0x", - "cookbook/yieldxyz", - "cookbook/polymarket-builders", - "cookbook/base-builder-codes", - "cookbook/relay" - ] } ] }, { - "group": "Developers", + "group": "TVC", + "pages": [ + "tvc/overview", + "tvc/reference" + ] + }, + { + "group": "Other primitives", + "pages": [ + "other-primitives/encryption-decryption", + "other-primitives/tls-fetcher" + ] + }, + { + "group": "Security", + "pages": [ + "category/security", + "security/our-approach", + "security/non-custodial-key-mgmt", + "security/secure-enclaves", + "security/quorum-deployments", + "security/enclave-secure-channels", + "security/verifiable-data", + "security/turnkey-verified", + "products/company-wallets/features/security/remote-attestation", + "security/shared-responsibility-model", + "security/disaster-recovery", + "security/whitepaper", + "security/reporting-a-vulnerability" + ] + }, + { + "group": "AI", "pages": [ - "getting-started/examples", "developer-reference/using-llms", - { - "group": "API overview", - "pages": [ - "developer-reference/api-overview/intro", - "developer-reference/api-overview/stamps", - "developer-reference/api-overview/queries", - "developer-reference/api-overview/submissions", - "developer-reference/api-overview/errors" - ] - }, - { - "group": "Policies", - "pages": [ - "concepts/policies/quickstart", - "concepts/policies/language", - { - "group": "Examples", - "pages": [ - "concepts/policies/examples/access-control", - "concepts/policies/examples/signing-control", - "concepts/policies/examples/ethereum", - "concepts/policies/examples/solana", - "concepts/policies/examples/tron", - "concepts/policies/examples/bitcoin", - "concepts/policies/examples/tempo" - ] - }, - { - "group": "Delegated access", - "pages": [ - "concepts/policies/delegated-access-overview", - "concepts/policies/delegated-access-frontend", - "concepts/policies/delegated-access-backend" - ] - }, - "concepts/policies/smart-contract-interfaces" - ] - }, - "faq" + "ai/skills" ] }, { - "group": "Community Examples", - "pages": [] + "group": "Reference", + "pages": [ + "concepts/resource-limits", + "developer-reference/webhooks", + "getting-started/migration-guide", + "faq" + ] } ] }, @@ -751,7 +737,16 @@ { "tab": "API reference", "pages": [ - "api-reference/overview", + { + "group": "Overview", + "pages": [ + "developer-reference/api-overview/intro", + "developer-reference/api-overview/stamps", + "developer-reference/api-overview/queries", + "developer-reference/api-overview/submissions", + "developer-reference/api-overview/errors" + ] + }, { "group": "Activities", "pages": [ @@ -884,28 +879,6 @@ } ] }, - { - "tab": "Security", - "pages": [ - { - "group": "Security", - "pages": [ - "category/security", - "security/our-approach", - "security/non-custodial-key-mgmt", - "security/secure-enclaves", - "security/quorum-deployments", - "security/verifiable-data", - "security/turnkey-verified", - "security/disaster-recovery", - "security/enclave-secure-channels", - "security/whitepaper", - "security/shared-responsibility-model", - "security/reporting-a-vulnerability" - ] - } - ] - }, { "tab": "Changelogs", "pages": [ @@ -938,6 +911,18 @@ "changelogs/core/readme", "changelogs/react-wallet-kit/readme" ] + }, + { + "group": "API changelog", + "pages": [ + "changelogs/api-changelog/readme" + ] + }, + { + "group": "TVC changelog", + "pages": [ + "changelogs/tvc-changelog/readme" + ] } ] } diff --git a/other-primitives/encryption-decryption.mdx b/other-primitives/encryption-decryption.mdx new file mode 100644 index 00000000..4438e4d0 --- /dev/null +++ b/other-primitives/encryption-decryption.mdx @@ -0,0 +1,8 @@ +--- +title: "Encryption / decryption" +description: "PLACEHOLDER -- Guide to using Turnkey's encryption and decryption primitives." +--- + +# Encryption / decryption + +> **This is a placeholder page.** Content will be written in a future phase. diff --git a/other-primitives/tls-fetcher.mdx b/other-primitives/tls-fetcher.mdx new file mode 100644 index 00000000..1c0ce135 --- /dev/null +++ b/other-primitives/tls-fetcher.mdx @@ -0,0 +1,8 @@ +--- +title: "TLS fetcher" +description: "PLACEHOLDER -- Guide to using Turnkey's TLS fetcher primitive." +--- + +# TLS fetcher + +> **This is a placeholder page.** Content will be written in a future phase. diff --git a/solutions/overview.mdx b/solutions/overview.mdx new file mode 100644 index 00000000..0e2e1172 --- /dev/null +++ b/solutions/overview.mdx @@ -0,0 +1,8 @@ +--- +title: "Solutions" +description: "PLACEHOLDER LANDING PAGE" +--- + +# Solutions + +> **This is a placeholder landing page.** Content will be written in a future phase. diff --git a/transaction-management/trading.mdx b/transaction-management/trading.mdx new file mode 100644 index 00000000..1ea24b64 --- /dev/null +++ b/transaction-management/trading.mdx @@ -0,0 +1,15 @@ +--- +title: "Trading" +description: "PLACEHOLDER -- Trading and bridge integrations with Turnkey." +--- + +# Trading + +> **This is a placeholder page.** Content will be written in a future phase. + +## Related integrations + +- [Jupiter](/cookbook/jupiter) +- [Li.Fi](/cookbook/lifi) +- [0x](/cookbook/0x) +- [Relay](/cookbook/relay) diff --git a/transaction-management/yield.mdx b/transaction-management/yield.mdx new file mode 100644 index 00000000..49ca24d6 --- /dev/null +++ b/transaction-management/yield.mdx @@ -0,0 +1,15 @@ +--- +title: "Yield" +description: "PLACEHOLDER -- Yield integrations and strategies with Turnkey." +--- + +# Yield + +> **This is a placeholder page.** Content will be written in a future phase. + +## Related integrations + +- [Morpho](/cookbook/morpho) +- [Aave](/cookbook/aave) +- [Breeze](/cookbook/breeze) +- [Yield.xyz](/cookbook/yieldxyz) diff --git a/tvc/overview.mdx b/tvc/overview.mdx new file mode 100644 index 00000000..155b6a12 --- /dev/null +++ b/tvc/overview.mdx @@ -0,0 +1,17 @@ +--- +title: "TVC docs" +description: "PLACEHOLDER -- Documentation for Turnkey's Verifiable Cloud (TVC)." +--- + +# Turnkey Verifiable Cloud (TVC) + +> **This is a placeholder page.** TVC documentation will be written in a future phase. + +Turnkey's Verifiable Cloud (TVC) lets you run workloads inside secure enclaves +with verifiable computation guarantees. + +## Related resources + +- [Verifiable cloud quickstart](/getting-started/verifiable-cloud-quickstart) +- [Secure enclaves](/security/secure-enclaves) +- [Turnkey Verified](/security/turnkey-verified) diff --git a/tvc/reference.mdx b/tvc/reference.mdx new file mode 100644 index 00000000..cdf0d69c --- /dev/null +++ b/tvc/reference.mdx @@ -0,0 +1,8 @@ +--- +title: "TVC reference" +description: "PLACEHOLDER -- API and configuration reference for Turnkey's Verifiable Cloud." +--- + +# TVC reference + +> **This is a placeholder page.** TVC reference documentation will be written in a future phase. From 7310bd518390f783cf1f8af699cce53b1f677b73 Mon Sep 17 00:00:00 2001 From: Graham Ritter Date: Tue, 21 Apr 2026 17:27:48 -0400 Subject: [PATCH 002/117] docs revamp v2 - nav restructure - Security moved to standalone top-nav tab (between API reference and Changelogs) - TVC removed from Documentation tab (already in Solutions) - Authentication: Auth Proxy elevated, Sessions standalone, Advanced accordion added - Wallet and key management: Import & export accordion first, Wagmi moved to Web3 libraries - Company Wallets: Examples renamed to Use cases, Agentic wallets moved inside - Key Management: Examples renamed to Use cases - Policies: Smart contract interfaces to #3, multi-sig approvals into Examples after Access control - Get started: AI accordion (Using LLMs + Skills) added, production checklist moved to Going live - using-llms.mdx title updated to "Using AI to integrate to Turnkey" Co-Authored-By: Claude Sonnet 4.6 --- developer-reference/using-llms.mdx | 2 +- docs.json | 112 +++++++++++++++++------------ 2 files changed, 66 insertions(+), 48 deletions(-) diff --git a/developer-reference/using-llms.mdx b/developer-reference/using-llms.mdx index 1bd8a1fa..cc4576cf 100644 --- a/developer-reference/using-llms.mdx +++ b/developer-reference/using-llms.mdx @@ -1,5 +1,5 @@ --- -title: "Using LLMs" +title: "Using AI to integrate to Turnkey" --- ### Using AI to integrate Turnkey diff --git a/docs.json b/docs.json index 3c314cc5..8e4f1ef5 100644 --- a/docs.json +++ b/docs.json @@ -79,13 +79,13 @@ "group": "Company Wallets", "pages": [ "company-wallets/overview", - "products/embedded-wallets/features/agentic-wallets", { - "group": "Examples", + "group": "Use cases", "pages": [ "company-wallets/code-examples/signing-transactions", "company-wallets/code-examples/smart-contract-management", - "company-wallets/code-examples/payment-orchestration" + "company-wallets/code-examples/payment-orchestration", + "products/embedded-wallets/features/agentic-wallets" ] } ] @@ -95,7 +95,7 @@ "pages": [ "products/key-management/overview", { - "group": "Examples", + "group": "Use cases", "pages": [ "products/key-management/examples/encryption-key-storage", "products/key-management/examples/enterprise-disaster-recovery" @@ -174,13 +174,20 @@ ] }, "concepts/wallets", - "concepts/policies/overview", - "production-checklist/production-checklist" + "concepts/policies/overview" + ] + }, + { + "group": "Using LLMs", + "pages": [ + "developer-reference/using-llms", + "ai/skills" ] }, { "group": "Going live", "pages": [ + "production-checklist/production-checklist", "production-checklist/backup-recovery" ] } @@ -213,19 +220,28 @@ }, "reference/auth-proxy", "authentication/sessions", - "authentication/proxying-signed-requests", - "authentication/credentials" + { + "group": "Advanced", + "pages": [ + "authentication/proxying-signed-requests", + "authentication/credentials" + ] + } ] }, { "group": "Wallet and key management", "pages": [ + { + "group": "Import & export", + "pages": [ + "products/company-wallets/features/import-wallets", + "products/company-wallets/features/export-wallets" + ] + }, "wallets/pregenerated-wallets", "wallets/claim-links", - "reference/aa-wallets", - "products/company-wallets/features/import-wallets", - "products/company-wallets/features/export-wallets", - "wallets/wagmi" + "reference/aa-wallets" ] }, { @@ -233,10 +249,12 @@ "pages": [ "concepts/policies/quickstart", "concepts/policies/language", + "concepts/policies/smart-contract-interfaces", { "group": "Examples", "pages": [ "concepts/policies/examples/access-control", + "company-wallets/co-signing-transactions", "concepts/policies/examples/signing-control", "concepts/policies/examples/ethereum", "concepts/policies/examples/solana", @@ -252,9 +270,7 @@ "concepts/policies/delegated-access-frontend", "concepts/policies/delegated-access-backend" ] - }, - "company-wallets/co-signing-transactions", - "concepts/policies/smart-contract-interfaces" + } ] }, { @@ -291,13 +307,6 @@ } ] }, - { - "group": "TVC", - "pages": [ - "tvc/overview", - "tvc/reference" - ] - }, { "group": "Other primitives", "pages": [ @@ -305,31 +314,6 @@ "other-primitives/tls-fetcher" ] }, - { - "group": "Security", - "pages": [ - "category/security", - "security/our-approach", - "security/non-custodial-key-mgmt", - "security/secure-enclaves", - "security/quorum-deployments", - "security/enclave-secure-channels", - "security/verifiable-data", - "security/turnkey-verified", - "products/company-wallets/features/security/remote-attestation", - "security/shared-responsibility-model", - "security/disaster-recovery", - "security/whitepaper", - "security/reporting-a-vulnerability" - ] - }, - { - "group": "AI", - "pages": [ - "developer-reference/using-llms", - "ai/skills" - ] - }, { "group": "Reference", "pages": [ @@ -711,6 +695,7 @@ "category/web3-libraries", "sdks/web3/ethers", "sdks/web3/viem", + "wallets/wagmi", "sdks/web3/cosmjs", "sdks/web3/eip-1193", "sdks/web3/solana", @@ -879,6 +864,39 @@ } ] }, + { + "tab": "Security", + "groups": [ + { + "group": "Security", + "pages": [ + "category/security", + "security/shared-responsibility-model", + { + "group": "Architecture", + "pages": [ + "security/our-approach", + "security/non-custodial-key-mgmt", + "security/secure-enclaves", + "security/quorum-deployments", + "security/enclave-secure-channels", + "security/verifiable-data", + "products/company-wallets/features/security/remote-attestation" + ] + }, + { + "group": "Resources", + "pages": [ + "security/turnkey-verified", + "security/disaster-recovery", + "security/whitepaper", + "security/reporting-a-vulnerability" + ] + } + ] + } + ] + }, { "tab": "Changelogs", "pages": [ From 779d276a29d9a7003b00719d6d8d0dce4db869ca Mon Sep 17 00:00:00 2001 From: Graham Ritter Date: Tue, 21 Apr 2026 17:56:04 -0400 Subject: [PATCH 003/117] docs revamp v3 - security tab, solutions, nav cleanup - Security tab restructured into 4 flat bold headers: Overview, Turnkey Shared Responsibility Model, Architecture, Resources - Removed /getting-started page from Get started group - Solutions landing group renamed to LANDING PAGE PLACEHOLDER, page title set to ROUTER PAGE Co-Authored-By: Claude Sonnet 4.6 --- docs.json | 56 ++++++++++++++++++++++-------------------- solutions/overview.mdx | 2 +- 2 files changed, 31 insertions(+), 27 deletions(-) diff --git a/docs.json b/docs.json index 8e4f1ef5..60391bb7 100644 --- a/docs.json +++ b/docs.json @@ -44,7 +44,7 @@ "tab": "Solutions", "groups": [ { - "group": "Solutions", + "group": "LANDING PAGE PLACEHOLDER", "pages": [ "solutions/overview" ] @@ -150,7 +150,6 @@ "group": "Get started", "pages": [ "home", - "getting-started", { "group": "Quickstarts", "pages": [ @@ -868,31 +867,36 @@ "tab": "Security", "groups": [ { - "group": "Security", + "group": "Overview", "pages": [ - "category/security", - "security/shared-responsibility-model", - { - "group": "Architecture", - "pages": [ - "security/our-approach", - "security/non-custodial-key-mgmt", - "security/secure-enclaves", - "security/quorum-deployments", - "security/enclave-secure-channels", - "security/verifiable-data", - "products/company-wallets/features/security/remote-attestation" - ] - }, - { - "group": "Resources", - "pages": [ - "security/turnkey-verified", - "security/disaster-recovery", - "security/whitepaper", - "security/reporting-a-vulnerability" - ] - } + "category/security" + ] + }, + { + "group": "Turnkey Shared Responsibility Model", + "pages": [ + "security/shared-responsibility-model" + ] + }, + { + "group": "Architecture", + "pages": [ + "security/our-approach", + "security/non-custodial-key-mgmt", + "security/secure-enclaves", + "security/quorum-deployments", + "security/enclave-secure-channels", + "security/verifiable-data", + "products/company-wallets/features/security/remote-attestation" + ] + }, + { + "group": "Resources", + "pages": [ + "security/turnkey-verified", + "security/disaster-recovery", + "security/whitepaper", + "security/reporting-a-vulnerability" ] } ] diff --git a/solutions/overview.mdx b/solutions/overview.mdx index 0e2e1172..34871e29 100644 --- a/solutions/overview.mdx +++ b/solutions/overview.mdx @@ -1,5 +1,5 @@ --- -title: "Solutions" +title: "ROUTER PAGE" description: "PLACEHOLDER LANDING PAGE" --- From d4677585a3992333544cc707540e5c3525960b72 Mon Sep 17 00:00:00 2001 From: Graham Ritter Date: Wed, 22 Apr 2026 15:55:40 -0400 Subject: [PATCH 004/117] docs revamp v4 - embedded wallets, examples cleanup - Embedded Wallets Use cases: replaced placeholders with real pages (embedded-business-wallets/overview, embedded-waas) - Embedded Wallets: removed Examples accordion entirely (10 deprecated pages dropped from nav) - Sponsored EVM + Solana transactions moved to Documentation > Transaction management - Gasless Tron transactions moved to Solutions > Cookbook > Examples library - Client-side signing moved to SDK Reference > Advanced (after iframe-stamper) - Company Wallets: added Agentic Wallets placeholder page under Use cases Co-Authored-By: Claude Sonnet 4.6 --- company-wallets/use-cases/agentic-wallets.mdx | 8 ++++++ docs.json | 27 +++++++------------ 2 files changed, 18 insertions(+), 17 deletions(-) create mode 100644 company-wallets/use-cases/agentic-wallets.mdx diff --git a/company-wallets/use-cases/agentic-wallets.mdx b/company-wallets/use-cases/agentic-wallets.mdx new file mode 100644 index 00000000..0b4cb325 --- /dev/null +++ b/company-wallets/use-cases/agentic-wallets.mdx @@ -0,0 +1,8 @@ +--- +title: "Agentic Wallets" +description: "PLACEHOLDER -- Agentic wallets use case guide for company wallets." +--- + +# Agentic Wallets + +> **This is a placeholder page.** Content will be written in a future phase. diff --git a/docs.json b/docs.json index 60391bb7..624d5cb2 100644 --- a/docs.json +++ b/docs.json @@ -54,23 +54,12 @@ "pages": [ "embedded-wallets/overview", { - "group": "Examples", + "group": "Use cases", "pages": [ "embedded-wallets/code-examples/embedded-consumer-wallet", - "embedded-wallets/code-examples/create-sub-org-passkey", - "embedded-wallets/code-examples/authenticate-user-passkey", - "embedded-wallets/code-examples/create-passkey-session", - "embedded-wallets/code-examples/sending-sponsored-transactions", - "embedded-wallets/code-examples/sending-sponsored-solana-transactions", - "reference/tron-gasless-transactions", - "embedded-wallets/code-examples/client-side-signing", - "embedded-wallets/code-examples/create-user-email", - "embedded-wallets/code-examples/authenticate-user-email", - "embedded-wallets/code-examples/add-credential", - "embedded-wallets/code-examples/wallet-auth", - "embedded-wallets/code-examples/signing-transactions", - "embedded-wallets/code-examples/import", - "embedded-wallets/code-examples/export" + "products/embedded-business-wallets/overview", + "products/embedded-wallets/features/agentic-wallets", + "embedded-wallets/embedded-waas" ] } ] @@ -85,7 +74,7 @@ "company-wallets/code-examples/signing-transactions", "company-wallets/code-examples/smart-contract-management", "company-wallets/code-examples/payment-orchestration", - "products/embedded-wallets/features/agentic-wallets" + "company-wallets/use-cases/agentic-wallets" ] } ] @@ -136,7 +125,8 @@ "group": "Examples library", "pages": [ "cookbook/polymarket-builders", - "cookbook/base-builder-codes" + "cookbook/base-builder-codes", + "reference/tron-gasless-transactions" ] } ] @@ -277,6 +267,8 @@ "pages": [ "wallets/fiat-on-ramp", "concepts/broadcasting", + "embedded-wallets/code-examples/sending-sponsored-transactions", + "embedded-wallets/code-examples/sending-sponsored-solana-transactions", "concepts/balances", "transaction-management/yield", "transaction-management/trading", @@ -710,6 +702,7 @@ "sdks/advanced/wallet-stamper", "sdks/advanced/webauthn-stamper", "sdks/advanced/iframe-stamper", + "embedded-wallets/code-examples/client-side-signing", "sdks/advanced/indexed-db-stamper" ] }, From 522126ea057762fa31b63aeaa1be8bd235a4a821 Mon Sep 17 00:00:00 2001 From: lucy-aziz Date: Mon, 27 Apr 2026 14:16:07 -0400 Subject: [PATCH 005/117] Create welcome.mdx Add /welcome landing page --- welcome.mdx | 119 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 welcome.mdx diff --git a/welcome.mdx b/welcome.mdx new file mode 100644 index 00000000..9de8d70c --- /dev/null +++ b/welcome.mdx @@ -0,0 +1,119 @@ +--- +title: "Welcome to Turnkey" +description: "Secure, flexible, and scalable wallet infrastructure" +--- + +# Turnkey: Secure, flexible, and scalable wallet infrastructure + +Turnkey provides the infrastructure to create and manage wallets, sign transactions, and secure cryptographic keys — where every key operation is hardware-isolated, policy-governed, and cryptographically auditable. Build on a foundation where security isn't a tradeoff. + +
+ +{/* SEARCH */} + +## Where do you want to start? + +
+ + + Use the search bar above (⌘K) to find anything across the docs. + + +--- + +## Explore Turnkey's products + + + + + **Wallet experiences built into your product** + + Build wallets directly into your app — for consumers, business accounts, or as the foundation for your own wallet product. Users authenticate with email, passkeys, or social login. You control the experience. + + {/* + ⚠️ INTERNAL NOTE — NOT FOR PUBLICATION + Are embedded wallets always non-custodial? Previous description said "non-custodial" + but the product supports non-custodial and hybrid custody models. + Needs stakeholder confirmation before finalizing this description. + */} + + + + **Wallets your organization operates for onchain automation** + + Run high-volume signing workflows with programmable controls — spending limits, multi-party approvals, role-based access, and automated policy execution. Purpose-built for teams that need to operate onchain at scale. + + + + **Enterprise-grade security for your most sensitive keys** + + Hardware-backed key storage with programmable access controls, quorum approvals, and tamper-evident audit logs. The security model your most critical infrastructure deserves. + + + + **Run code inside hardware-isolated enclaves** `Beta` + + Execute workloads with verifiable computation guarantees — built for applications where trust and auditability are non-negotiable. + + + + +--- + +## How Turnkey works + + + Understand the core architecture behind Turnkey's key infrastructure. + + +--- + +## Start building + + + + + Create your organization and generate an API keypair — the two steps every Turnkey integration starts with. + + + + Jump into code with a step-by-step guide for building embedded wallets. + + + + Get started running workloads inside Turnkey's secure enclave infrastructure. + + + From 61a32505f8e0c6fbf2157020c3748e1ac64725b8 Mon Sep 17 00:00:00 2001 From: lucy-aziz Date: Mon, 27 Apr 2026 14:20:21 -0400 Subject: [PATCH 006/117] Register /welcome route in docs.json --- docs.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs.json b/docs.json index 624d5cb2..f212ebeb 100644 --- a/docs.json +++ b/docs.json @@ -46,7 +46,7 @@ { "group": "LANDING PAGE PLACEHOLDER", "pages": [ - "solutions/overview" + "welcome" ] }, { From 288fc482b6f7590a95194c524b614a3526101fdd Mon Sep 17 00:00:00 2001 From: Graham Ritter Date: Mon, 27 Apr 2026 14:38:40 -0400 Subject: [PATCH 007/117] Embedded wallets: add demos page, move Gelato to cookbook, clean up overview --- cookbook/gelato.mdx | 35 +++++++ docs.json | 7 ++ embedded-wallets/demos.mdx | 63 ++++++++++++ embedded-wallets/overview.mdx | 181 +--------------------------------- 4 files changed, 108 insertions(+), 178 deletions(-) create mode 100644 cookbook/gelato.mdx create mode 100644 embedded-wallets/demos.mdx diff --git a/cookbook/gelato.mdx b/cookbook/gelato.mdx new file mode 100644 index 00000000..075f9e6d --- /dev/null +++ b/cookbook/gelato.mdx @@ -0,0 +1,35 @@ +--- +title: "Sponsored transactions with Gelato" +sidebarTitle: "Gelato relay" +description: "Combine Turnkey key management with Gelato's relay infrastructure for gasless transactions." +--- + +[Gelato](https://www.gelato.network/) is a battle-tested relay infrastructure for meta-transactions. +This cookbook shows how to pair Turnkey's signing with Gelato's ERC-2771 relay so users can +transact without holding native tokens for gas. + +Uses [`@turnkey/viem`](https://github.com/tkhq/sdk/tree/main/packages/viem) and +[`@gelatonetwork/relay-sdk-viem`](https://github.com/gelatodigital/relay-sdk-viem). + +**Code:** [github.com/gelatodigital/gelato-turnkey-passkeys-relay](https://github.com/gelatodigital/gelato-turnkey-passkeys-relay) + + +
+ gelato turnkey screenshot +
+ + +## How Infinex uses this pattern + +[Infinex](https://www.turnkey.com/customers/making-onchain-ux-seamless-with-infinex-and-turnkey) +unifies decentralized apps under a single UX layer. Their integration combines two capabilities: + +- **Key management with Turnkey:** Private keys stay in Turnkey's secure enclaves. Passkey-based + authentication replaces wallet pop-ups, removing seed phrases from the user experience entirely. +- **Gasless transactions with Gelato:** Using Gelato Relay (ERC-2771), Infinex sponsors gas for + users so they can interact with dapps without holding native tokens. + +The result: users onboard and transact without managing keys or gas. diff --git a/docs.json b/docs.json index 624d5cb2..4e16ef3c 100644 --- a/docs.json +++ b/docs.json @@ -53,6 +53,7 @@ "group": "Embedded Wallets", "pages": [ "embedded-wallets/overview", + "embedded-wallets/demos", { "group": "Use cases", "pages": [ @@ -128,6 +129,12 @@ "cookbook/base-builder-codes", "reference/tron-gasless-transactions" ] + }, + { + "group": "Integrations", + "pages": [ + "cookbook/gelato" + ] } ] } diff --git a/embedded-wallets/demos.mdx b/embedded-wallets/demos.mdx new file mode 100644 index 00000000..54938257 --- /dev/null +++ b/embedded-wallets/demos.mdx @@ -0,0 +1,63 @@ +--- +title: "Demos" +sidebarTitle: "Demos" +description: "Complete, runnable demo apps for building embedded wallet experiences with Turnkey." +--- + +The demos below are full applications you can clone and adapt as a starting point. For +SDK method usage and component examples, see the [SDK Reference](/sdks/introduction). For +concept explanations, see [Documentation](/authentication/overview). + +## Web + +### Demo Embedded Wallet ([code](https://github.com/tkhq/demo-embedded-wallet)) + +The flagship embedded wallet demo. Built with `@turnkey/sdk-browser`, `@turnkey/sdk-react`, +and `@turnkey/sdk-server`. Covers the full embedded wallet lifecycle: + +- Authentication via passkeys, email OTP, and OAuth +- Creating wallets and wallet accounts +- Sending and receiving funds +- Importing and exporting wallets +- Adding credentials + + + + demo embedded wallet login view + + + demo embedded wallet dashboard view + + + +## Mobile + +### React Native Demo ([code](https://github.com/tkhq/react-native-demo-wallet)) + +Demonstrates Turnkey's JavaScript packages in a React Native environment. Covers +authentication, wallet creation, export, and transaction signing. + + + + + +### Flutter Demo ([code](https://github.com/tkhq/dart-sdk/tree/main/examples/flutter-demo-app)) + +Demonstrates Turnkey's Flutter packages. Covers authentication, wallet creation, export, +and transaction signing. + + + + diff --git a/embedded-wallets/overview.mdx b/embedded-wallets/overview.mdx index 5782ffee..b6917521 100644 --- a/embedded-wallets/overview.mdx +++ b/embedded-wallets/overview.mdx @@ -3,9 +3,6 @@ title: "Overview" sidebarTitle: "Overview" --- -import { Logo } from "/snippets/logo.mdx"; -import { SquareCard } from "/snippets/square-card.mdx"; - With Embedded Wallets, you can create custom wallet experiences that are seamlessly integrated into your product, without compromising on security. Whether you need custodial or non-custodial wallets, our infrastructure provides the foundation for building innovative, user-friendly crypto products. ### Why embedded wallets? @@ -38,178 +35,6 @@ the Embedded Wallets concepts and architecture. Head over to the [Getting Started](/sdks/react/getting-started) guide to set up your React app with `@turnkey/react-wallet-kit`. -Looking for more support? Check out our Demos, SDKs and Code Examples below\! - -## Demos -{/* TODO: Please add wallets.turnkey.com in here after we replace it with the new ewk2 demo (the one with the spinning Turnkey logo!). -If you're from the future, we probably already replaced wallets.turnkey.com with the new ewk2 demo. If this comment is still here, FIX IT!*/} - -### Demo embedded wallet ([code](https://github.com/tkhq/demo-embedded-wallet)) - -A comprehensive demo showcasing how to build an embedded wallet using Turnkey. This demo uses the [`@turnkey/sdk-browser`](https://www.npmjs.com/package/@turnkey/sdk-browser), [`@turnkey/sdk-react`](https://www.npmjs.com/package/@turnkey/sdk-react) and [`@turnkey/sdk-server`](https://www.npmjs.com/package/@turnkey/sdk-server) packages and includes features such as: - -- User authentication with passkeys, email auth, and OAuth -- Creating new wallets and wallet accounts -- Sending and receiving funds -- Importing/Exporting a wallet -- Adding a credential to the wallet - - - - demo embedded wallet login view - - - - demo embedded wallet dashboard view - - - -See [https://github.com/tkhq/demo-embedded-wallet](https://github.com/tkhq/demo-embedded-wallet) for the code. - -### Demo consumer wallet ([code](https://github.com/tkhq/demo-consumer-wallet)) - -A minimal consumer wallet app powered by Turnkey. Behind the scenes, it uses [`@turnkey/ethers`](https://www.npmjs.com/package/@turnkey/ethers) for signing and WalletConnect (v1) for accessing dapps. - - - - - -See [https://github.com/tkhq/demo-consumer-wallet](https://github.com/tkhq/demo-consumer-wallet) for the code. - -### Demo embedded wallet ([code](https://github.com/tkhq/demo-embedded-wallet), [live link](https://wallet.tx.xyz)) - -A wallet application showing how users can register and authenticate using passkeys. This demo uses the Turnkey API to create a new [Turnkey Sub-Organization](/concepts/sub-organizations) for each user, create a testnet Ethereum address and send a transaction on Sepolia (ETH testnet). - - - demo embedded wallet screenshot - - -See [https://wallet.tx.xyz](https://wallet.tx.xyz) (and [https://github.com/tkhq/demo-embedded-wallet](https://github.com/tkhq/demo-embedded-wallet) for the code). - -### Demo Ethers passkeys ([code](https://github.com/tkhq/demo-ethers-passkeys)) - -A simple application demonstrating how to create sub-organizations, create private keys, and sign with the [`@turnkey/ethers`](https://github.com/tkhq/sdk/tree/main/packages/ethers) signer, using passkeys. - - - ethers ui screenshot - - -See [https://github.com/tkhq/demo-ethers-passkeys](https://github.com/tkhq/demo-ethers-passkeys) for the code. - -### Demo Viem passkeys ([code](https://github.com/tkhq/demo-viem-passkeys)) - -A similar, simple application demonstrating how to create sub-organizations, create private keys, and sign with the [`@turnkey/viem`](https://github.com/tkhq/sdk/tree/main/packages/viem) signer, using passkeys. - - - viem ui screenshot - - -See [https://github.com/tkhq/demo-viem-passkeys](https://github.com/tkhq/demo-viem-passkeys) for the code. - -### Demo Viem passkeys with Gelato relay ([code](https://github.com/gelatodigital/gelato-turnkey-passkeys-relay)) - -This example demonstrates how to leverage Turnkey’s secure key management and Gelato's battle-tested relay infrastructure to enable seamless, sponsored interactions with meta-transactions using the [`@turnkey/viem`](https://github.com/tkhq/sdk/tree/main/packages/viem) signer and [`@gelatonetwork/relay-sdk-viem`](https://github.com/gelatodigital/relay-sdk-viem). - - -
- gelato turnkey screenshot -
- - -#### How Infinex leverages Turnkey and Gelato - -Infinex, a platform designed to unify the decentralized ecosystem and applications under a single UX layer, eliminates the complexities of navigating fragmented crypto protocols. By integrating **Turnkey** and **Gelato**, Infinex delivers a seamless, secure, and cost-efficient experience for decentralized finance users. - -- **Secure Key Management with Turnkey**: Infinex ensures private keys are securely managed within Turnkey’s infrastructure, removing the need for traditional wallet pop-ups. This approach streamlines authentication through passkeys, offering a frictionless and secure user experience. - -- **Gasless Transactions with Gelato**: Leveraging Gelato’s Relay (ERC-2771), Infinex enables fully **sponsored transactions**, allowing users to interact with decentralized applications without ever paying gas fees. This enhances accessibility and usability, ensuring that users can participate without holding or managing native blockchain tokens for fees. - -The synergy between Turnkey and Gelato allows Infinex to offer an intuitive, cost-free user experience while maintaining the highest standards of security and scalability. - -### React Native demo app ([code](https://github.com/tkhq/react-native-demo-wallet)) - -A React Native app that demonstrates how to use the Turnkey's JavaScript packages in a mobile environment to authenticate users, create wallets, export wallets, sign messages, and more - - - - -See [https://github.com/tkhq/react-native-demo-wallet](https://github.com/tkhq/react-native-demo-wallet) -for the code. - -### Flutter demo app ([code](https://github.com/tkhq/dart-sdk/tree/main/examples/flutter-demo-app)) - -A Flutter app that demonstrates how to use the Turnkey's Flutter packages to authenticate users, create wallets, export wallets, sign messages, and more - - - - -See [https://github.com/tkhq/dart-sdk/tree/main/examples/flutter-demo-app](https://github.com/tkhq/dart-sdk/tree/main/examples/flutter-demo-app) -for the code - -### SDKs - -
- } - label="React" - href="/sdks/react" - /> - } - label="React Native" - href="/sdks/react-native" - /> - } - label="iOS (Swift)" - href="/sdks/swift" - /> - } - label="Flutter" - href="/sdks/flutter" - /> - } - label="Typescript" - href="/sdks/javascript-browser" - /> - } - label="Kotlin" - href="/sdks/kotlin" - /> -
- -### Next steps - -Learn more about our powerful features [here](/embedded-wallets/features/overview). +Looking for a full starting point? See the [Demos](/embedded-wallets/demos). Ready to build? +Head to the [Quickstart](/getting-started/embedded-wallet-quickstart) or the +[Features overview](/embedded-wallets/features/overview). From 68258a558f10d854e7d96a809fef86283340754a Mon Sep 17 00:00:00 2001 From: Graham Ritter Date: Mon, 27 Apr 2026 14:58:59 -0400 Subject: [PATCH 008/117] Embedded wallets overview: add use case tiles, ready to build section, reorder demos in nav --- docs.json | 4 +-- embedded-wallets/overview.mdx | 47 ++++++++++++++++++++++++++++------- 2 files changed, 40 insertions(+), 11 deletions(-) diff --git a/docs.json b/docs.json index 908fc5b0..beb46c51 100644 --- a/docs.json +++ b/docs.json @@ -53,7 +53,6 @@ "group": "Embedded Wallets", "pages": [ "embedded-wallets/overview", - "embedded-wallets/demos", { "group": "Use cases", "pages": [ @@ -62,7 +61,8 @@ "products/embedded-wallets/features/agentic-wallets", "embedded-wallets/embedded-waas" ] - } + }, + "embedded-wallets/demos" ] }, { diff --git a/embedded-wallets/overview.mdx b/embedded-wallets/overview.mdx index b6917521..c6250e6e 100644 --- a/embedded-wallets/overview.mdx +++ b/embedded-wallets/overview.mdx @@ -19,6 +19,29 @@ With Embedded Wallets, you can: - Sign multiple transactions without additional approvals - Access simple integrations for gas sponsorship and smart contract wallets +## Use cases + + + + Give users self-custodial wallets with passkey, email, or social login. No seed phrases or browser extensions. + + + Shared wallets with role-based signing controls for teams, operators, and finance workflows. + + + Build a white-labeled WaaS with isolated per-user wallets and your own APIs and UI on top. + + + ### Custodial vs non-custodial Turnkey's Embedded Wallets are built on top of Sub-Organizations. @@ -28,13 +51,19 @@ Each wallet is represented by a sub-organization, which can be configured with d - For non-custodial wallets, users hold their own private keys and must approve each transaction, using one of their configured [authentication](/authentication/overview) methods. -Below, we'll dive into how we set each of these up but first, let's make sure you're familiar with -the Embedded Wallets concepts and architecture. - -### Embedded wallets quickstart - -Head over to the [Getting Started](/sdks/react/getting-started) guide to set up your React app with `@turnkey/react-wallet-kit`. +## Ready to build? -Looking for a full starting point? See the [Demos](/embedded-wallets/demos). Ready to build? -Head to the [Quickstart](/getting-started/embedded-wallet-quickstart) or the -[Features overview](/embedded-wallets/features/overview). + + + Step-by-step guide to your first embedded wallet. + + + Clone a full working app as a starting point. + + + Explore auth methods, signing, import/export, and more. + + + Browse SDK methods and component examples. + + From 1ef36896c880fe73fbbe1240d5514a03588df049 Mon Sep 17 00:00:00 2001 From: Graham Ritter Date: Mon, 27 Apr 2026 15:58:18 -0400 Subject: [PATCH 009/117] Embedded wallets overview: reorder sections, add agentic card, subtitle, rename CTA section --- embedded-wallets/overview.mdx | 34 +++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/embedded-wallets/overview.mdx b/embedded-wallets/overview.mdx index c6250e6e..8e0515f5 100644 --- a/embedded-wallets/overview.mdx +++ b/embedded-wallets/overview.mdx @@ -19,9 +19,20 @@ With Embedded Wallets, you can: - Sign multiple transactions without additional approvals - Access simple integrations for gas sponsorship and smart contract wallets +### Custodial vs non-custodial + +Turnkey's Embedded Wallets are built on top of Sub-Organizations. +Each wallet is represented by a sub-organization, which can be configured with different security settings and access controls. + +- For custodial wallets, your application holds the master key and can initiate transactions on behalf of users. +- For non-custodial wallets, users hold their own private keys and must approve each transaction, + using one of their configured [authentication](/authentication/overview) methods. + ## Use cases - +Find guidance tailored to what you're building. + + Build a white-labeled WaaS with isolated per-user wallets and your own APIs and UI on top. + + Let embedded wallet users delegate spending permissions to an AI agent. + -### Custodial vs non-custodial - -Turnkey's Embedded Wallets are built on top of Sub-Organizations. -Each wallet is represented by a sub-organization, which can be configured with different security settings and access controls. - -- For custodial wallets, your application holds the master key and can initiate transactions on behalf of users. -- For non-custodial wallets, users hold their own private keys and must approve each transaction, - using one of their configured [authentication](/authentication/overview) methods. - -## Ready to build? +## Already know what you want? @@ -60,8 +68,8 @@ Each wallet is represented by a sub-organization, which can be configured with d Clone a full working app as a starting point. - - Explore auth methods, signing, import/export, and more. + + Understand authentication, wallets, policies, and more. Browse SDK methods and component examples. From e4323900040c9f0a7c12b68f9eb3cca126eef1e0 Mon Sep 17 00:00:00 2001 From: Graham Ritter Date: Mon, 27 Apr 2026 16:16:13 -0400 Subject: [PATCH 010/117] Add About Turnkey tab: move home and How Turnkey works from Documentation --- docs.json | 48 +++++++++++++++++++++++++++++------------------- 1 file changed, 29 insertions(+), 19 deletions(-) diff --git a/docs.json b/docs.json index beb46c51..f2b62125 100644 --- a/docs.json +++ b/docs.json @@ -40,6 +40,35 @@ ] }, "tabs": [ + { + "tab": "About Turnkey", + "groups": [ + { + "group": "About Turnkey", + "pages": [ + "home", + { + "group": "How Turnkey works", + "pages": [ + "concepts/overview", + "concepts/organizations", + "concepts/sub-organizations", + { + "group": "Users", + "pages": [ + "concepts/users/introduction", + "concepts/users/credentials", + "concepts/users/root-quorum" + ] + }, + "concepts/wallets", + "concepts/policies/overview" + ] + } + ] + } + ] + }, { "tab": "Solutions", "groups": [ @@ -146,7 +175,6 @@ { "group": "Get started", "pages": [ - "home", { "group": "Quickstarts", "pages": [ @@ -155,24 +183,6 @@ "getting-started/verifiable-cloud-quickstart" ] }, - { - "group": "How Turnkey works", - "pages": [ - "concepts/overview", - "concepts/organizations", - "concepts/sub-organizations", - { - "group": "Users", - "pages": [ - "concepts/users/introduction", - "concepts/users/credentials", - "concepts/users/root-quorum" - ] - }, - "concepts/wallets", - "concepts/policies/overview" - ] - }, { "group": "Using LLMs", "pages": [ From b07345e458c4f85745ed8bd0e1e0a337d6449bb2 Mon Sep 17 00:00:00 2001 From: Graham Ritter Date: Mon, 27 Apr 2026 17:00:20 -0400 Subject: [PATCH 011/117] added new entries for documentation --- docs.json | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/docs.json b/docs.json index f2b62125..59b83a07 100644 --- a/docs.json +++ b/docs.json @@ -199,6 +199,18 @@ } ] }, + { + "group": "Organizations", + "pages": [ + "concepts/organizations" + ] + }, + { + "group": "Users", + "pages": [ + "concepts/users/introduction" + ] + }, { "group": "Authentication", "pages": [ From 3d3354521e7acc874937dd3293d1060ecb42a0e7 Mon Sep 17 00:00:00 2001 From: Lucy Aziz Date: Tue, 28 Apr 2026 11:33:11 -0400 Subject: [PATCH 012/117] Welcome page: move to root, full-width layout, centered hero, styled headings - Add home icon tab in docs.json so welcome is the root URL (no tab highlighted) - Remove welcome from Solutions tab LANDING PAGE PLACEHOLDER group - Set mode: custom to hide sidebar and go full-width - Center-align hero section (H1 + description + search bar) - Add embedded search bar that triggers native Mintlify search - Apply explicit heading styles (size, weight) since custom mode strips defaults - Brand H1 in Turnkey purple (#6a5bf5) Co-Authored-By: Claude Sonnet 4.6 --- docs.json | 18 ++++++++++----- welcome.mdx | 65 ++++++++++++++++++++++++++++++++++++----------------- 2 files changed, 57 insertions(+), 26 deletions(-) diff --git a/docs.json b/docs.json index 59b83a07..d81dac99 100644 --- a/docs.json +++ b/docs.json @@ -40,6 +40,18 @@ ] }, "tabs": [ + { + "tab": "Home", + "icon": "house", + "groups": [ + { + "group": "Welcome", + "pages": [ + "welcome" + ] + } + ] + }, { "tab": "About Turnkey", "groups": [ @@ -72,12 +84,6 @@ { "tab": "Solutions", "groups": [ - { - "group": "LANDING PAGE PLACEHOLDER", - "pages": [ - "welcome" - ] - }, { "group": "Embedded Wallets", "pages": [ diff --git a/welcome.mdx b/welcome.mdx index 9de8d70c..28872794 100644 --- a/welcome.mdx +++ b/welcome.mdx @@ -1,27 +1,50 @@ --- title: "Welcome to Turnkey" description: "Secure, flexible, and scalable wallet infrastructure" +mode: "custom" --- -# Turnkey: Secure, flexible, and scalable wallet infrastructure - -Turnkey provides the infrastructure to create and manage wallets, sign transactions, and secure cryptographic keys — where every key operation is hardware-isolated, policy-governed, and cryptographically auditable. Build on a foundation where security isn't a tradeoff. - -
- -{/* SEARCH */} - -## Where do you want to start? - -
+
+ +
+ +

Turnkey: Secure, flexible, and scalable wallet infrastructure

+ +

+ Turnkey provides the infrastructure to create and manage wallets, sign transactions, and secure cryptographic keys — where every key operation is hardware-isolated, policy-governed, and cryptographically auditable. Build on a foundation where security isn't a tradeoff. +

+ +
{ + if (typeof window !== 'undefined') { + document.dispatchEvent(new KeyboardEvent('keydown', { key: 'k', metaKey: true, bubbles: true })); + } + }} + style={{ + display: 'flex', + alignItems: 'center', + gap: '12px', + borderRadius: '8px', + border: '1px solid #e5e7eb', + backgroundColor: '#f9fafb', + padding: '12px 16px', + cursor: 'pointer', + maxWidth: '560px', + margin: '0 auto' + }} +> + + + + Search the docs... + ⌘K +
- - Use the search bar above (⌘K) to find anything across the docs. - +
---- +
-## Explore Turnkey's products +

Explore Turnkey's products

@@ -74,9 +97,9 @@ Turnkey provides the infrastructure to create and manage wallets, sign transacti ---- +
-## How Turnkey works +

How Turnkey works

---- +
-## Start building +

Start building

@@ -117,3 +140,5 @@ Turnkey provides the infrastructure to create and manage wallets, sign transacti
+ +
From 7766524b99ee818f6de9b8a450c140f33c7efe89 Mon Sep 17 00:00:00 2001 From: Graham Ritter Date: Tue, 28 Apr 2026 12:24:38 -0400 Subject: [PATCH 013/117] Nav restructuring: Organizations, Users, Transaction management, overview cleanup --- docs.json | 34 ++++++++++++++++++++++++++-------- embedded-wallets/overview.mdx | 18 ++++-------------- 2 files changed, 30 insertions(+), 22 deletions(-) diff --git a/docs.json b/docs.json index 59b83a07..f48347e3 100644 --- a/docs.json +++ b/docs.json @@ -87,8 +87,8 @@ "pages": [ "embedded-wallets/code-examples/embedded-consumer-wallet", "products/embedded-business-wallets/overview", - "products/embedded-wallets/features/agentic-wallets", - "embedded-wallets/embedded-waas" + "embedded-wallets/embedded-waas", + "products/embedded-wallets/features/agentic-wallets" ] }, "embedded-wallets/demos" @@ -175,6 +175,7 @@ { "group": "Get started", "pages": [ + "embedded-wallets/features/overview", { "group": "Quickstarts", "pages": [ @@ -202,13 +203,19 @@ { "group": "Organizations", "pages": [ - "concepts/organizations" + "concepts/organizations", + "concepts/sub-organizations", + "embedded-wallets/sub-organization-auth", + "embedded-wallets/sub-organization-recovery" ] }, { "group": "Users", "pages": [ - "concepts/users/introduction" + "concepts/users/introduction", + "concepts/users/credentials", + "concepts/users/root-quorum", + "concepts/users/best-practices" ] }, { @@ -258,7 +265,13 @@ ] }, "wallets/pregenerated-wallets", - "wallets/claim-links", + { + "group": "Claim links", + "pages": [ + "wallets/claim-links", + "embedded-wallets/send-crypto-via-url" + ] + }, "reference/aa-wallets" ] }, @@ -295,9 +308,14 @@ "group": "Transaction management", "pages": [ "wallets/fiat-on-ramp", - "concepts/broadcasting", - "embedded-wallets/code-examples/sending-sponsored-transactions", - "embedded-wallets/code-examples/sending-sponsored-solana-transactions", + { + "group": "Broadcasting", + "pages": [ + "concepts/broadcasting", + "embedded-wallets/code-examples/sending-sponsored-transactions", + "embedded-wallets/code-examples/sending-sponsored-solana-transactions" + ] + }, "concepts/balances", "transaction-management/yield", "transaction-management/trading", diff --git a/embedded-wallets/overview.mdx b/embedded-wallets/overview.mdx index 8e0515f5..58cd2423 100644 --- a/embedded-wallets/overview.mdx +++ b/embedded-wallets/overview.mdx @@ -61,17 +61,7 @@ Find guidance tailored to what you're building. ## Already know what you want? - - - Step-by-step guide to your first embedded wallet. - - - Clone a full working app as a starting point. - - - Understand authentication, wallets, policies, and more. - - - Browse SDK methods and component examples. - - +- [Quickstart](/getting-started/embedded-wallet-quickstart) — step-by-step guide to your first embedded wallet +- [Demos](/embedded-wallets/demos) — clone a full working app as a starting point +- [Documentation](/authentication/overview) — authentication, wallets, policies, and more +- [SDK Reference](/sdks/introduction) — browse SDK methods and component examples From f3d91a5fdf23439c8212d8e726f641db2100e9bf Mon Sep 17 00:00:00 2001 From: Graham Ritter Date: Tue, 28 Apr 2026 13:39:36 -0400 Subject: [PATCH 014/117] tvc changes --- docs.json | 5 +- products/verifiable-cloud/onboarding.mdx | 48 ++++++++++ products/verifiable-cloud/overview.mdx | 111 +++++++++++++++++++++++ tvc/overview.mdx | 17 ---- tvc/reference.mdx | 8 -- 5 files changed, 162 insertions(+), 27 deletions(-) create mode 100644 products/verifiable-cloud/onboarding.mdx create mode 100644 products/verifiable-cloud/overview.mdx delete mode 100644 tvc/overview.mdx delete mode 100644 tvc/reference.mdx diff --git a/docs.json b/docs.json index 74cc2bf0..a2c13e4b 100644 --- a/docs.json +++ b/docs.json @@ -131,8 +131,8 @@ { "group": "Turnkey Verifiable Cloud", "pages": [ - "tvc/overview", - "tvc/reference" + "products/verifiable-cloud/overview", + "products/verifiable-cloud/onboarding" ] }, { @@ -182,6 +182,7 @@ "group": "Get started", "pages": [ "embedded-wallets/features/overview", + "getting-started/quickstart", { "group": "Quickstarts", "pages": [ diff --git a/products/verifiable-cloud/onboarding.mdx b/products/verifiable-cloud/onboarding.mdx new file mode 100644 index 00000000..f833d7ea --- /dev/null +++ b/products/verifiable-cloud/onboarding.mdx @@ -0,0 +1,48 @@ +--- +title: "Building Your First App" +--- + +## TVC template + +To help with bootstrapping we have put together a template repository, available at [`tkhq/tvc-template`](https://github.com/tkhq/tvc-template). + +This repository uses [StageX](https://stagex.tools/) as a build system, has CI workflow to build and test the application, and is a great base to build your own app. + +This template uses Rust but the concepts carry over to other languages: the application is a simple webserver listening on configurable port and host. + +## Supported languages + +Turnkey writes all enclave applications in Rust, but TVC isn't opinionated about languages: as long as your toolchain can statically compile to a binary (ELF), QuorumOS can run it. + +If you are planning to use dynamic linking or interpreted languages, [get in touch](https://www.turnkey.com/turnkey-verifiable-cloud#waitlist) ahead of time and we can look at your toolchain's compatibility. + +## Recommended First Steps + +Start with our minimal template and deploy it within your TVC-enabled organization. To do this, follow our [TVC quickstart guide](/getting-started/verifiable-cloud-quickstart). + +Verify it comes up healthy, and confirm one or more endpoints respond correctly. Once the baseline is confirmed, layer your application logic incrementally. + +## Known platform limitations + +| Limitation | Workaround | +| :-----------| :----------- | +| Deployment deletion not implemented | Ask our team on Slack, or simply kick-off another deploy. There can only be one live deployment at a time. Kicking off a new deployment automatically deletes any existing one | +| No metrics or logs in dashboard | Ask our team on Slack | +| No egress connectivity | Pass signed data as input to your API instead of fetching it from within the TEE | +| No custom provisioning | Use static provisioning for now. This feature is coming sometime in May. + +## Getting help + +Slack is the primary channel for async questions, debugging, and quick turnaround on deployment issues. Don't hesitate to use it – especially early on. + +What to ask for: +* Code snippet for reading the quorum key and signing within the TEE +* Help interpreting deployment config fields +* Assistance debugging a deployment that isn't coming up as expected +* Observability you'd want surfaced in the dashboard + +**Feedback welcome**: You are among the first developers building a brand-new app on this platform, end-to-end. Your experience with gaps, sharp edges, and missing features is genuinely valuable – please share it! + +## Getting access to TVC + +TVC is currently in private Beta. A select group of design partners are already building on it and getting exclusive access to the latest features and capabilities. If you're interested in being an early design partner, or if you want to be notified when TVC is generally available for all, please [join the waitlist](https://www.turnkey.com/turnkey-verifiable-cloud#waitlist). \ No newline at end of file diff --git a/products/verifiable-cloud/overview.mdx b/products/verifiable-cloud/overview.mdx new file mode 100644 index 00000000..06da4488 --- /dev/null +++ b/products/verifiable-cloud/overview.mdx @@ -0,0 +1,111 @@ +--- +title: "Overview" +--- + +## What is Turnkey Verifiable Cloud (“TVC”)? + +Turnkey Verifiable Cloud is a new offering to externalize the [Foundations](https://whitepaper.turnkey.com/foundations) of our TEE-based key management system. With TVC, you can run any code in isolated, verifiable secure enclaves powered by Turnkey’s trusted infrastructure. + +Turnkey started as a key management system with a drastic [threat model](https://whitepaper.turnkey.com/architecture#threat-model), and we placed a bet on TEEs early on. More specifically, Turnkey uses [AWS Nitro Enclaves](https://aws.amazon.com/ec2/nitro/nitro-enclaves/) to deploy all sensitive workloads, and we plan to support other major cloud providers in the future. + +To establish the foundations for our key management system, we went deep on build systems, deployment tooling, verification tooling, provisioning, performance, and scaling. +This work, developed over 3+ years, is broadly applicable. Any team building at scale within Trusted Execution Environments will encounter the same challenges. + +TVC solves these problems transparently for the industry at large, within and outside of web3. A few of the hard problems solved by TVC: +* **Reproducible builds**: These are crucial to leverage remote attestations (see [this blog post](https://quorum.tkhq.xyz/posts/remote-attestations-useless-without-reproducible-builds/)). To support this, we bootstrapped [StageX](https://stagex.tools), an open-source distro focused on reproducibility. TVC works with StageX so reproducibility is handled for you. Learn more about it [here](https://quorum.tkhq.xyz/posts/reproducible-builds-made-easy-introducing-stagex/). +* **Packaging**: Packaging applications into EIF files is [easy on the surface](https://docs.aws.amazon.com/enclaves/latest/user/building-eif.html) but leaves application developers with load-bearing security decisions: which base OS do I use? How do I handle application upgrades? How do I persist state? Turnkey built [QuorumOS](https://github.com/tkhq/qos) to solve these problems in the context of our own key management platform. TVC is integrated with QOS to handle these problems for you. In TVC, you provide the binary application you'd like to run, and we take care of the rest. +* **Running at production scale**: Turnkey has invested years of engineering time to get this right. We are running enclaves with autoscaling to ensure your application can transparently scale up and down with traffic. We have automated provisioning and invented [key forwarding](https://github.com/tkhq/qos/blob/main/src/qos_core/KEY_FORWARDING.MD) to ensure enclaves going down are automatically replaced and provisioned from already-running enclaves, Operators do not have to wake up in the middle of the night. +* **Verification tooling**: Turnkey is regularly audited by top security firms to guarantee verification procedures and the code implementing them remains secure and correct over time. + +TVC is the first TEE platform to offer autoscaling and strong security defaults. Your secure workloads run at scale, on the same infrastructure as Turnkey's own secure workloads. + +## Use cases + +Many different types of workloads can benefit from verifiability. Below is a list of use cases supported by TVC. + +| Workload type | Advantages to verifiability | +| :-------------------------| :-------------------------------------------------------------------------------------------------- | +| Chain Abstraction | Trustworthy cosigners for cross-chain resource locks (e.g. [OneBalance](https://www.onebalance.io)) | +| Transaction Construction | Users know that the unsigned transaction bytes are legitimate. | +| Transaction Parsing | Provide accurate metadata about the effects of a transaction. This is critical for trusted wallet UX. See [VisualSign Parser](https://github.com/anchorageoss/visualsign-parser/). | +| Oracles | Leverage external data without the overhead of full decentralization, on-chain or off-chain. Replace economic incentives with verifiability. | +| Blockchain nodes | Allow for private balance lookups, verifiable mempool inclusion, and more. | +| Web2 data bridging | Import and use data from web2 providers (centralized exchange balances, credit scores, X follower counts) in decentralized computation | +| AI training & inference | Verifiable training to prove no hidden backdoors; guarantee user prompts remain private | +| Sequencers | Prove correct behavior and eliminate the need for challenge periods and economic incentives around them (e.g. [Base sequencer](https://github.com/base/base/tree/main/crates/proof/tee)) | +| Identity verification | Prove no identity is leaked as part of the verification process. | +| VPN nodes | Guarantees privacy by proving that forwarded traffic isn't logged anywhere. | +| Exchanges | Ensure no malicious behavior (frontrunning), and create verifiable order books. | +| PII processing | Prove that processing does not leak or misuse PII (Personally Identifiable Information). | + +These are just a subset of possible use cases. Any computation where two parties need to agree on what was executed can benefit from or require verifiability. + +## Architecture + +We’ve engineered TVC to fit within the existing Turnkey products and APIs. You will interact with TVC via our [dashboard](https://app.turnkey.com/), via the [TVC CLI](https://github.com/tkhq/rust-sdk/tree/main/tvc), or programmatically via [APIs](/api-reference/overview). + +## Applications + +TVC is programmable infrastructure, enabling you to create and manage verifiable apps. Each TVC App is deployed on Turnkey infrastructure in the exact same way as Turnkey's own [core enclave apps](https://github.com/tkhq/core-enclaves). +* TVC Applications are deployed within Kubernetes clusters operated by Turnkey, using [QuorumOS](https://github.com/tkhq/qos) ("QOS") as a base OS. +* Key provisioning, high-availability deployments (minimum of 3 replicas), and in-depth verification workflows are supported by default. +* Because TVC relies on Turnkey for its own operations, it's possible to use Consensus in the context of TVC activities (with [Turnkey Policies](/concepts/policies) or [Root Quorum](/concepts/users/root-quorum)) + +A TVC Application has a stable [Quorum Key](https://github.com/tkhq/qos#quorum-key) and set of approvers. + +## Deployments + +Each TVC application can be deployed many times. For every TVC deployment, you will specify: + +* An OCI image URL (e.g. `ghcr.io/myorg/myrepo:tag@sha256:…`). This container is pulled by our Kubernetes infrastructure. If the container is private, TVC supports uploading encrypted [pull secrets](https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/). +* An executable path + args: within the container, you must indicate where the desired binary lives such that Turnkey’s infrastructure can extract this binary from its OCI container, and run it within a TEE on your behalf. +* The port on which external requests should be forwarded. This is typically port 3000. For convenience TVC lets you specify different ports for user requests and health requests made by Turnkey infrastructure. +* Your expected executable digest: this is a security measure, to ensure the binary pulled by Turnkey's infrastructure is the binary you expect. + +Once the deployment is submitted and approved, our infrastructure deploys and makes it available on a dedicated subdomain. + +| Resource | Default Allocation | +| :-----------| :----------- | +| vCPUs | 2 | +| RAM | 1 GiB | +| Filesystem | RAM-based (no persistence) | +| Replicas | 3 | +| Ingress | Load-balanced across all replicas | +| Sub-domain | Automated (`.turnkey.cloud`) | + +## Manifests + +Each TVC deployment is ultimately specified with a QOS manifest. The information you provide to TVC APIs (expected digest, executable arguments, and so on) is used to create a new QOS Manifest document. See [`Manifest`](https://github.com/tkhq/qos/blob/d69bcd348073ed7322c0d0423a35b7ab56831de8/src/qos_core/src/protocol/services/boot.rs#L414) for a full definition of the fields within it. + +This manifest document is the source of truth used by QOS to boot your application. It is also the document which must be cryptographically signed for each deployment. QOS Manifests are returned along with the AWS attestation document, within [Boot Proofs](https://whitepaper.turnkey.com/foundations#boot-proofs-and-app-proofs). More on this in the next section. + +## Operators + +Operators are humans or systems. In TVC, an operator is represented by an alias and a public key. Operator keys can be created and managed externally via our TVC CLI, or managed via Turnkey's own key management APIs. + +QuorumOS uses operators to cryptographically control deployments: operators must approve QOS manifests and take part in deployments where Quorum Keys must be injected. + +## Keys, Signatures, and Verification + +Your TVC app has access to two keys when it boots: + +* **Ephemeral Key**: a key which is created at boot. This key **never leaves the enclave** and is different for every enclave. A signature by this key is a signature bound to a particular enclave, hence bound to a particular **code version** of your TVC application. +* **Quorum Key**: a key which is injected at boot and is the same across all enclaves. This key can be used to encrypt state which needs to survive application upgrades. Internally at Turnkey we use this key to sign or encrypt long-lived data. + +Both of these keys follow the [QOS Key Set](https://github.com/tkhq/qos/blob/main/src/qos_p256/SPEC.md) specification. Ephemeral Keys and Quorum Keys can be used to sign data, or to encrypt/decrypt data. + +App Proofs are signed statements by enclave Ephemeral Keys; Boot Proofs are bundles composed of an AWS attestation document and a QOS manifest. + +Together, App Proofs and Boot Proofs can be used to verify workloads end-to-end. See [our documentation](https://docs.turnkey.com/security/turnkey-verified#turnkey-verified) for more on this subject. We’ve already released tooling for proof verification in [Rust](https://crates.io/crates/turnkey_proofs), [JS](https://github.com/tkhq/sdk/blob/main/packages/crypto/src/proof.ts), and [Golang](https://github.com/tkhq/go-sdk/tree/main/pkg/proofs). + +## Pricing + +TVC pricing has two components: +* A fixed per-month platform fee. +* Variable pricing based on wall-clock enclave uptime + +[Get in touch with us](https://www.turnkey.com/turnkey-verifiable-cloud#waitlist) for more details. + +## Getting access to TVC + +TVC is currently in private Beta. A select group of design partners are already building on it and getting exclusive access to the latest features and capabilities. If you're interested in being an early design partner, or if you want to be notified when TVC is generally available for all, please [join the waitlist](https://www.turnkey.com/turnkey-verifiable-cloud#waitlist). \ No newline at end of file diff --git a/tvc/overview.mdx b/tvc/overview.mdx deleted file mode 100644 index 155b6a12..00000000 --- a/tvc/overview.mdx +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: "TVC docs" -description: "PLACEHOLDER -- Documentation for Turnkey's Verifiable Cloud (TVC)." ---- - -# Turnkey Verifiable Cloud (TVC) - -> **This is a placeholder page.** TVC documentation will be written in a future phase. - -Turnkey's Verifiable Cloud (TVC) lets you run workloads inside secure enclaves -with verifiable computation guarantees. - -## Related resources - -- [Verifiable cloud quickstart](/getting-started/verifiable-cloud-quickstart) -- [Secure enclaves](/security/secure-enclaves) -- [Turnkey Verified](/security/turnkey-verified) diff --git a/tvc/reference.mdx b/tvc/reference.mdx deleted file mode 100644 index cdf0d69c..00000000 --- a/tvc/reference.mdx +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "TVC reference" -description: "PLACEHOLDER -- API and configuration reference for Turnkey's Verifiable Cloud." ---- - -# TVC reference - -> **This is a placeholder page.** TVC reference documentation will be written in a future phase. From 616ffa1e3bdb3e039325bbec10eb85f0430002f5 Mon Sep 17 00:00:00 2001 From: Graham Ritter Date: Tue, 28 Apr 2026 15:33:11 -0400 Subject: [PATCH 015/117] killed about turnkey page, consolidated and moved things --- docs.json | 33 ++++----------------------------- home.mdx | 2 +- 2 files changed, 5 insertions(+), 30 deletions(-) diff --git a/docs.json b/docs.json index a2c13e4b..3a976daf 100644 --- a/docs.json +++ b/docs.json @@ -52,35 +52,6 @@ } ] }, - { - "tab": "About Turnkey", - "groups": [ - { - "group": "About Turnkey", - "pages": [ - "home", - { - "group": "How Turnkey works", - "pages": [ - "concepts/overview", - "concepts/organizations", - "concepts/sub-organizations", - { - "group": "Users", - "pages": [ - "concepts/users/introduction", - "concepts/users/credentials", - "concepts/users/root-quorum" - ] - }, - "concepts/wallets", - "concepts/policies/overview" - ] - } - ] - } - ] - }, { "tab": "Solutions", "groups": [ @@ -181,6 +152,8 @@ { "group": "Get started", "pages": [ + "home", + "concepts/overview", "embedded-wallets/features/overview", "getting-started/quickstart", { @@ -264,6 +237,7 @@ { "group": "Wallet and key management", "pages": [ + "concepts/wallets", { "group": "Import & export", "pages": [ @@ -285,6 +259,7 @@ { "group": "Policies", "pages": [ + "concepts/policies/overview", "concepts/policies/quickstart", "concepts/policies/language", "concepts/policies/smart-contract-interfaces", diff --git a/home.mdx b/home.mdx index a0e55e34..d60af26d 100644 --- a/home.mdx +++ b/home.mdx @@ -1,7 +1,7 @@ --- title: "Overview" description: "Welcome to Turnkey!" -sidebarTitle: "Overview" +sidebarTitle: "About Turnkey" --- import { Logo } from "/snippets/logo.mdx"; From b329980a086696df68618fc13a0ea6dd18d836ee Mon Sep 17 00:00:00 2001 From: Graham Ritter Date: Tue, 28 Apr 2026 17:46:51 -0400 Subject: [PATCH 016/117] reorganization of quickstarts and embedded wallet kit --- concepts/organizations.mdx | 1 + concepts/policies/overview.mdx | 4 +- concepts/transaction-management.mdx | 1 + concepts/users/credentials.mdx | 36 +++-- concepts/users/introduction.mdx | 4 +- concepts/wallets.mdx | 1 + docs.json | 28 ++-- embedded-wallets/overview.mdx | 17 +- .../company-wallets-quickstart.mdx | 2 +- .../embedded-wallet-quickstart.mdx | 2 +- .../verifiable-cloud-quickstart.mdx | 2 +- home.mdx | 150 ++++++++---------- 12 files changed, 116 insertions(+), 132 deletions(-) diff --git a/concepts/organizations.mdx b/concepts/organizations.mdx index 303204de..46d7cbbc 100644 --- a/concepts/organizations.mdx +++ b/concepts/organizations.mdx @@ -1,6 +1,7 @@ --- title: "Organizations" description: "An organization is a logical grouping of resources (e.g. users, policies, wallets). These resources can only be accessed by authorized and permissioned users within the organization. Resources are not shared between organizations." +sidebarTitle: "Overview" --- ## Root quorum diff --git a/concepts/policies/overview.mdx b/concepts/policies/overview.mdx index 2adfb485..31c1b486 100644 --- a/concepts/policies/overview.mdx +++ b/concepts/policies/overview.mdx @@ -1,7 +1,7 @@ --- -title: "Policy overview" +title: "Policies" description: "Our policy engine is the foundation for flexible controls and permissions within your organization. This page provides an overview of how to author policies." -sidebarTitle: "Policies" +sidebarTitle: "Overview" --- import PolicyEngine from "/snippets/shared/policy-engine.mdx"; diff --git a/concepts/transaction-management.mdx b/concepts/transaction-management.mdx index b94cf79a..b23fd69a 100644 --- a/concepts/transaction-management.mdx +++ b/concepts/transaction-management.mdx @@ -1,6 +1,7 @@ --- title: "Transaction management" description: "Learn about Turnkey's gas sponsorship, transaction construction, broadcast, nonce management and monitoring capabilities." +sidebarTitle: "Overview" --- import SendTxConcepts from "/snippets/shared/send-tx-concepts.mdx"; diff --git a/concepts/users/credentials.mdx b/concepts/users/credentials.mdx index b566f081..b18f2ce0 100644 --- a/concepts/users/credentials.mdx +++ b/concepts/users/credentials.mdx @@ -1,24 +1,30 @@ --- title: "Credentials" -description: "Credentials represent ways for Users to authenticate to Turnkey. All Turnkey Credentials are held by you, the end-user. Turnkey only keeps **public keys**." +description: "Credentials are how users authenticate to Turnkey. Turnkey only stores public keys; private keys never leave your device." +sidebarTitle: "Credentials" --- -At the moment, Turnkey supports 2 types of Credentials: -* Authenticators -* API Keys +## Types -Note that every Turnkey user needs at least one long-lived credential (a passkey, or non-expiring API key). This is to prevent users from getting locked out of their accounts. The exception is if the user belongs to a suborg, and [Email Auth](/authentication/email) is enabled for that sub-organization. +**Authenticators** — WebAuthn devices registered on Turnkey: passkeys, biometrics, and hardware keys. Used to sign requests directly, using the [WebAuthn standard](https://www.w3.org/TR/webauthn-2/) (no passwords). -### Authenticators +**API keys** — P-256 key pairs used to sign API requests. Come in two forms: +- *Long-lived* — created via the dashboard, CLI, or [API](/api-reference/activities/create-api-keys). You generate the key pair; Turnkey stores the public key. +- *Expiring* — issued automatically when a user authenticates via email, SMS, OAuth, or wallet auth. Short-lived by default (15 minutes), with a configurable expiration window. -Turnkey uses [Webauthn](https://www.w3.org/TR/webauthn-2/) for authentication into its dashboard (no passwords!). Authenticators on Turnkey represent a Webauthn device registered on Turnkey. +## Credential types -When logging into Turnkey, you'll be prompted for a signature with a registered device. This signature is then verified to grant dashboard access. To avoid repeated signatures, Turnkey's dashboard uses session cookies for read traffic. However, all write actions require an authenticator signature. +Each issuance path produces a credential of a specific type, which Turnkey returns in API responses. You can retrieve the type and public key for any API key via [GetAPIKey](/api-reference/queries/get-api-key). -### API keys - -Turnkey API requests are authenticated with API key signatures. When you generate an API key (either through our CLI or through our dashboard), you generate a P-256 key pair. Turnkey keeps the public key, and you hold the private key. - -Requests made via SDK or CLI use the private API key to sign requests. Turnkey's public API expects all requests (e.g. to get data or to submit activities) to be signed. - -See our [API reference](/api-reference/api-keys/create-api-keys) for how to programmatically create API keys. +| Credential type | Issued by | +|---|---| +| `CREDENTIAL_TYPE_WEBAUTHN_AUTHENTICATOR` | [Passkeys](/authentication/passkeys/introduction) | +| `CREDENTIAL_TYPE_API_KEY_P256` | [Manually created API keys](/api-reference/activities/create-api-keys) | +| `CREDENTIAL_TYPE_OTP_AUTH_KEY_P256` | [Email OTP](/authentication/email) or [SMS](/authentication/sms) auth | +| `CREDENTIAL_TYPE_EMAIL_AUTH_KEY_P256` | [Email auth — credential bundle method](/authentication/email) (legacy) | +| `CREDENTIAL_TYPE_RECOVER_USER_KEY_P256` | [Email recovery](/authentication/email) (legacy) | +| `CREDENTIAL_TYPE_OAUTH_KEY_P256` | [Social logins](/authentication/social-logins) | +| `CREDENTIAL_TYPE_API_KEY_SECP256K1` | [Wallet auth — Ethereum/SECP256K1](/embedded-wallets/code-examples/wallet-auth) | +| `CREDENTIAL_TYPE_API_KEY_ED25519` | [Wallet auth — Solana/ED25519](/embedded-wallets/code-examples/wallet-auth) | +| `CREDENTIAL_TYPE_READ_WRITE_SESSION_KEY_P256` | [Read-write sessions](/api-reference/activities/create-read-write-session) | +| `CREDENTIAL_TYPE_LOGIN` | [IndexedDB auth](/sdks/javascript-browser#indexeddbclient) — OTP, passkey, or OAuth | diff --git a/concepts/users/introduction.mdx b/concepts/users/introduction.mdx index bc3f0082..4b6d6943 100644 --- a/concepts/users/introduction.mdx +++ b/concepts/users/introduction.mdx @@ -1,8 +1,8 @@ --- -title: "Introduction to users" +title: "Users" description: "Turnkey users are resources within organizations or sub-organizations that can submit activities to Turnkey via a valid credential (e.g., API key, passkey)." mode: wide -sidebarTitle: "Introduction" +sidebarTitle: "Overview" --- These requests can be made either by making direct API calls or through the Turnkey Dashboard. Users must have at least one valid credential (one of API key, passkey), with upper limits on credentials defined here in our [resource limits](/concepts/resource-limits). Users can also have associated “tags” which are logical groupings that can be referenced in policies. Users can only submit activities within their given organization — they cannot take action across organizations. diff --git a/concepts/wallets.mdx b/concepts/wallets.mdx index fb552ead..624f8677 100644 --- a/concepts/wallets.mdx +++ b/concepts/wallets.mdx @@ -1,6 +1,7 @@ --- title: "Wallets" description: "A [hierarchical deterministic (HD) wallet](https://learnmeabitcoin.com/technical/hd-wallets) is a collection of cryptographic private/public key pairs that share a common seed. A wallet is used to generate accounts." +sidebarTitle: "Overview" --- ```json diff --git a/docs.json b/docs.json index 3a976daf..81d227f6 100644 --- a/docs.json +++ b/docs.json @@ -68,6 +68,7 @@ "products/embedded-wallets/features/agentic-wallets" ] }, + "getting-started/embedded-wallet-quickstart", "embedded-wallets/demos" ] }, @@ -83,7 +84,8 @@ "company-wallets/code-examples/payment-orchestration", "company-wallets/use-cases/agentic-wallets" ] - } + }, + "getting-started/company-wallets-quickstart" ] }, { @@ -103,7 +105,8 @@ "group": "Turnkey Verifiable Cloud", "pages": [ "products/verifiable-cloud/overview", - "products/verifiable-cloud/onboarding" + "products/verifiable-cloud/onboarding", + "getting-started/verifiable-cloud-quickstart" ] }, { @@ -153,17 +156,7 @@ "group": "Get started", "pages": [ "home", - "concepts/overview", - "embedded-wallets/features/overview", "getting-started/quickstart", - { - "group": "Quickstarts", - "pages": [ - "getting-started/embedded-wallet-quickstart", - "getting-started/company-wallets-quickstart", - "getting-started/verifiable-cloud-quickstart" - ] - }, { "group": "Using LLMs", "pages": [ @@ -184,9 +177,7 @@ "group": "Organizations", "pages": [ "concepts/organizations", - "concepts/sub-organizations", - "embedded-wallets/sub-organization-auth", - "embedded-wallets/sub-organization-recovery" + "concepts/sub-organizations" ] }, { @@ -202,7 +193,6 @@ "group": "Authentication", "pages": [ "authentication/overview", - "reference/embedded-wallet-kit", { "group": "Auth methods", "pages": [ @@ -228,8 +218,7 @@ { "group": "Advanced", "pages": [ - "authentication/proxying-signed-requests", - "authentication/credentials" + "authentication/proxying-signed-requests" ] } ] @@ -289,7 +278,7 @@ { "group": "Transaction management", "pages": [ - "wallets/fiat-on-ramp", + "concepts/transaction-management", { "group": "Broadcasting", "pages": [ @@ -299,6 +288,7 @@ ] }, "concepts/balances", + "wallets/fiat-on-ramp", "transaction-management/yield", "transaction-management/trading", { diff --git a/embedded-wallets/overview.mdx b/embedded-wallets/overview.mdx index 58cd2423..017ce0a8 100644 --- a/embedded-wallets/overview.mdx +++ b/embedded-wallets/overview.mdx @@ -5,7 +5,7 @@ sidebarTitle: "Overview" With Embedded Wallets, you can create custom wallet experiences that are seamlessly integrated into your product, without compromising on security. Whether you need custodial or non-custodial wallets, our infrastructure provides the foundation for building innovative, user-friendly crypto products. -### Why embedded wallets? +## Why embedded wallets? Embedded Wallets give you the freedom to design and control the entire user experience, while offloading the complexity and risk of private key management to Turnkey. @@ -19,6 +19,14 @@ With Embedded Wallets, you can: - Sign multiple transactions without additional approvals - Access simple integrations for gas sponsorship and smart contract wallets +## Building with Turnkey + +For React applications, the **Embedded Wallet Kit (EWK)** is the recommended starting point. It provides pre-built auth and wallet UI components, a hook-based API, and requires no backend. It is the most opinionated path — designed to get you to a working embedded wallet with minimal configuration. + +If you need more control, Turnkey provides SDKs for React Native, Swift, Kotlin, Flutter, and a framework-agnostic core library. For fully custom implementations, you can call the Turnkey API directly. + +See the [SDK Reference](/sdks/introduction) for all available libraries. + ### Custodial vs non-custodial Turnkey's Embedded Wallets are built on top of Sub-Organizations. @@ -59,9 +67,8 @@ Find guidance tailored to what you're building.
-## Already know what you want? +## Ready to build? -- [Quickstart](/getting-started/embedded-wallet-quickstart) — step-by-step guide to your first embedded wallet +- [Quickstart](/getting-started/embedded-wallet-quickstart) — get your first embedded wallet running - [Demos](/embedded-wallets/demos) — clone a full working app as a starting point -- [Documentation](/authentication/overview) — authentication, wallets, policies, and more -- [SDK Reference](/sdks/introduction) — browse SDK methods and component examples +- [Documentation](/authentication/overview) — dig into the underlying concepts: auth, wallets, policies, and more diff --git a/getting-started/company-wallets-quickstart.mdx b/getting-started/company-wallets-quickstart.mdx index e60cf481..d4705529 100644 --- a/getting-started/company-wallets-quickstart.mdx +++ b/getting-started/company-wallets-quickstart.mdx @@ -1,7 +1,7 @@ --- title: "Company Wallets quickstart" description: "Turnkey's Company Wallets enable you to build secure, programmatic signing workflows directly into your applications. With features like customizable policies, multi-party approvals, and support for any blockchain, you can confidently automate complex signing operations while maintaining enterprise-grade security." -sidebarTitle: "Company Wallets" +sidebarTitle: "Quickstart" --- ## Prerequisites diff --git a/getting-started/embedded-wallet-quickstart.mdx b/getting-started/embedded-wallet-quickstart.mdx index acdabfb7..93b824a0 100644 --- a/getting-started/embedded-wallet-quickstart.mdx +++ b/getting-started/embedded-wallet-quickstart.mdx @@ -1,7 +1,7 @@ --- title: "Embedded wallets quickstart" description: "Turnkey's embedded wallets enable you to integrate secure, custom wallet experiences directly into your product. With features like advanced security, seamless authentication, and flexible UX options, you can focus on building great products while we handle the complexities of private key management." -sidebarTitle: "Embedded wallets" +sidebarTitle: "Quickstart" --- ## `@turnkey/react-wallet-kit` diff --git a/getting-started/verifiable-cloud-quickstart.mdx b/getting-started/verifiable-cloud-quickstart.mdx index fa47dc08..e3490332 100644 --- a/getting-started/verifiable-cloud-quickstart.mdx +++ b/getting-started/verifiable-cloud-quickstart.mdx @@ -1,7 +1,7 @@ --- title: "Turnkey Verifiable Cloud quickstart" description: "Run any code in isolated, verifiable secure enclaves powered by Turnkey’s trusted infrastructure." -sidebarTitle: "Turnkey Verifiable Cloud" +sidebarTitle: "Quickstart" tag: "Beta" --- diff --git a/home.mdx b/home.mdx index d60af26d..bafa9082 100644 --- a/home.mdx +++ b/home.mdx @@ -1,121 +1,99 @@ --- -title: "Overview" -description: "Welcome to Turnkey!" +title: "About Turnkey" +description: "Turnkey is wallet infrastructure for developers — secure key management, transaction signing, and programmable access controls built on hardware-backed secure enclaves." sidebarTitle: "About Turnkey" --- -import { Logo } from "/snippets/logo.mdx"; -import { SquareCard } from "/snippets/square-card.mdx"; +Turnkey provides the infrastructure to create and manage wallets, sign transactions, and secure cryptographic keys at scale. Every signing operation happens inside hardware-backed secure enclaves — private keys are never exposed to Turnkey, your application, or your team. - - ![](/images/home-page.png) - - -Turnkey provides secure, scalable and programmable crypto infrastructure for Embedded Wallets and onchain Company Wallets. - -Whether you're building a DeFi platform, a payments app, an AI agent, or anything requiring a private key, Turnkey's modular components empower you to build fully customizable, innovative products - offering complete flexibility without limitations. +## How Turnkey works -Seamlessly create in-app wallets, sign millions of transactions at millisecond speed, create superior end-user experiences and set granular controls without sacrificing security. +Instead of managing private keys directly, Turnkey abstracts key management into a layered system. Your application is a parent organization, and sub-organizations are available to fully isolate wallets, users, and policies per end user or tenant. -Our documentation makes it easy for you to integrate with Turnkey, no matter what you're building. +Every action — signing, creating wallets, updating permissions — is evaluated by a policy engine running inside a hardware-backed secure enclave before anything executes. - - - - - - - - - - - - - - - - +Keys never leave the enclave. Turnkey returns signed payloads and supports transaction broadcasting directly to the network. -# Turnkey's products + + Turnkey architecture: organizations, sub-organizations, users, authenticators, policies, and wallets + -Turnkey covers two main use cases: Embedded Wallets and Company Wallets. +## Core concepts -## Embedded Wallets +- **Organization** — Top-level entity representing your application. Contains users, wallets, and policies. +- **Sub-organization** — Fully isolated organization nested under the parent, typically representing an end user or business customer. Parent orgs have read-only access and cannot modify sub-org contents. +- **User** — A resource within an org or sub-org that submits activities via a valid credential. Users can have tags, which policies reference for role-based controls. +- **Root user / root quorum** — Root users can bypass the policy engine. A root quorum sets the approval threshold required to exercise root permissions. +- **Authenticator** — A credential used to stamp API requests: passkeys, API keys, email OTP, or OAuth. +- **Activity** — Any action submitted to Turnkey (sign transaction, create user, update policy). All activities are evaluated by the policy engine. +- **Policy** — A logical rule that evaluates to ALLOW, DENY, or REQUIRES_CONSENSUS. Controls who can sign what, under what conditions. +- **Wallet** — An HD wallet (seed phrase) that generates multiple accounts across chains. Lives inside the enclave; only addresses and signatures are returned. -Turnkey's Embedded Wallets offer the most secure way to integrate wallets into your app. With Turnkey, you can create millions of embedded wallets on behalf of your users for a flawless onboarding and in-app experience. +## Where to start -### Features +- **Explore by use case** — [Embedded Wallets](/embedded-wallets/overview), [Company Wallets](/company-wallets/overview), [Key Management](/products/key-management/overview) +- **Account setup** — [create your org and API key](/getting-started/quickstart) +- **SDKs** — [client libraries](/sdks/introduction) for React, React Native, Swift, Kotlin, Flutter, and more +- **Security** — [how the enclave model works](/security/our-approach) and what Turnkey's security guarantees are +- **AI-ready docs** — [use Turnkey docs](/developer-reference/using-llms) with Cursor, ChatGPT, or your own LLM tooling -| Feature | Description | -| :-------------------- | :-------------------------------------------------------------------------------------- | -| Embedded Wallet Kit | Speed up your integration with pre-built UI components | -| Authentication | Authenticate users via email, phone number, biometrics, social logins, etc. | -| Policies | Determine delegated access and co-ownership controls. | -| Multichain support | Sign transactions across chains with out-of-the-box support for most chains and assets. | -| Broadcasting | Broadcast signed transactions using Turnkey's infrastructure. | -| Pre-generated wallets | Streamline onboarding by generating wallets for your users before authentication. | -| Sessions | Sign multiple transactions without requiring additional approvals. | -| Account abstraction | Access simple integrations for gas sponsorship and smart contract wallets. | -| Import + export | Migrate existing wallets in and out of Turnkey without exposure. | -| Delegated access | Onchain wallets with flexible co-ownership controls. | +## Features -## Company Wallets +Browse the full set of product capabilities. -Turnkey's Company Wallets empower teams to automate complex workflows at scale with granular policies for transaction limits, user permissions, and more. + + -### Features + + -| Feature | Description | -| :------------------------ | :-------------------------------------------------------------------------------------- | -| Multichain Support | Sign transactions across chains with out-of-the-box support for most chains and assets. | -| Authentication | Access wallets via email, phone number, biometrics, social logins, etc. | -| API-based authentication | Create API keys with limited permissions for specific applications or use cases. | -| Compliance (audit trail) | Track events and changes across the stack, ensuring accountability. | -| Import + export | Easily migrate existing private keys without exposure. | -| Multi-signature approvals | Set a quorum of users for approving and/or denying transactions. | + + -# Concepts + + -Before getting started, we highly recommend familiarizing yourself with Turnkey's core concepts to ensure a smooth implementation. At the core of Turnkey is an important concept: instead of directly managing private keys, wallets are accessed through authenticators like passkeys, social logins, or API keys. + + -### Core terms + + -- **Organizations (parent orgs)**: The initial parent organization typically represents an entire Turnkey-powered application. -- **Sub-organizations (sub-orgs)**: Fully segregated organizations, typically representing an end user, nested under the parent organization. Parent orgs cannot modify the contents of a sub-org. -- **Resources**: All identifiers within parent orgs such as users, policies, and wallets are collectively referred to as resources. -- **Users**: Resources within organizations or sub-organizations that can submit activities to Turnkey via a valid credential. -- **Authenticators**: Each parent org, sub-org and user contain their own sets of authenticators that you can configure, including their own wallets, API keys, and private keys. -- **Activities**: All actions Organizations can take such as signing transactions or creating users are known as activities. -- **Policies**: Policies govern all activities and permissions within Organizations. -- **Root users**: Users with root permissions, meaning they can bypass the policy engine to take any action within that specific organization. -- **Root quorum**: A pre-determined consensus threshold that consists of a set of Root Users. This consensus threshold must be reached in order for any root permissions to take place. -- **Wallets**: A collection of cryptographic private/public key pairs that share a common seed. HD seed phrases can generate multiple wallet accounts (addresses) for signing operations. + + {" "} - - ![](/images/img/diagrams/org-diagram.png) - + -There is no set relationship between organizations, sub-organizations, activities, wallets, and resources. This makes Turnkey highly flexible and configurable to any use case. + + {" "} -For a more in-depth overview, learn more [here](/concepts/overview). + -# SDKs + + {" "} -Turnkey provides a variety of client libraries for building with Embedded Wallets, Company Wallets, and other common workflows. We also have several wrappers for popular web3 libraries for easy integration into existing dApps. We recommend reviewing our concepts, account setup and solution pages before moving forward with [our SDKs](/sdks/introduction). + -# AI-ready docs + + -Turnkey documentation is fully integrated with AI tooling. Whether you're chatting with GPT, coding with Cursor, or building your own LLM assistant, our docs are structured for direct ingestion and deep context—plus, search and chat with specific pages right from your IDE or browser. Explore the [docs](/developer-reference/using-llms). + + -# Security + + -Turnkey is the first verifiable key management system of its kind, securing millions of wallets and private keys for a wide variety of use cases. Turnkey's security architecture ensures that raw private keys are never exposed to Turnkey, your software, or your team. We provide end-to-end private key generation and access control within secure enclaves. Our [whitepaper](https://whitepaper.turnkey.com/) covers our holistic security model in-depth, and speaks to our vision for building verifiable key management infrastructure. Learn more about our approach to security [here](/security/our-approach). + + -# Account setup + + -Before diving into the code, let's set up your organization and spin up an API keypair to unlock the full potential of Turnkey! Get started [here](/getting-started/quickstart). + + -# Support + + -To chat with our account team, please reach out [here](https://www.turnkey.com/contact-us).\ -For support, product feedback, and input, join our community Slack channel [here](https://join.slack.com/t/clubturnkey/shared_invite/zt-3aemp2g38-zIh4V~3vNpbX5PsSmkKxcQ). + + From df8cd11df7f78a5dc71bf1e930a3c48dd2a5dfa3 Mon Sep 17 00:00:00 2001 From: lucy-aziz Date: Wed, 29 Apr 2026 09:39:27 -0400 Subject: [PATCH 017/117] Homepage redesign and Solutions overview: mental model, routing, visual polish (#644) - welcome.mdx: add 2-sentence mental model blurb above search bar, move Build with Turnkey section to top for immediate routing, add Other Solutions grid, feature card grid, branded whitepaper CTA tile - solutions/overview.mdx: new page with intro copy and CardGroups by product category (Embedded Wallets, Company Wallets, Key Management, Verifiable Cloud) - docs.json: add Solutions Overview page to nav - scripts/sync-solutions-order.js: new script to keep homepage use case lists in sync with docs.json nav ordering - .claude/settings.json: PostToolUse hook to auto-run sync script on docs.json edits Co-authored-by: Lucy Aziz Co-authored-by: Claude Sonnet 4.6 --- .claude/settings.json | 16 +++ docs.json | 4 + scripts/sync-solutions-order.js | 65 +++++++++++ solutions/overview.mdx | 69 ++++++++++- welcome.mdx | 201 ++++++++++++++++++-------------- 5 files changed, 263 insertions(+), 92 deletions(-) create mode 100644 .claude/settings.json create mode 100644 scripts/sync-solutions-order.js diff --git a/.claude/settings.json b/.claude/settings.json new file mode 100644 index 00000000..5f9894f4 --- /dev/null +++ b/.claude/settings.json @@ -0,0 +1,16 @@ +{ + "hooks": { + "PostToolUse": [ + { + "matcher": "Write|Edit", + "hooks": [ + { + "type": "command", + "command": "jq -r '.tool_input.file_path // \"\"' | grep -q 'docs\\.json$' && cd /Users/lucy/docs && node scripts/sync-solutions-order.js 2>/dev/null || true", + "statusMessage": "Syncing homepage solution order..." + } + ] + } + ] + } +} diff --git a/docs.json b/docs.json index 81d227f6..409c414b 100644 --- a/docs.json +++ b/docs.json @@ -55,6 +55,10 @@ { "tab": "Solutions", "groups": [ + { + "group": "Overview", + "pages": ["solutions/overview"] + }, { "group": "Embedded Wallets", "pages": [ diff --git a/scripts/sync-solutions-order.js b/scripts/sync-solutions-order.js new file mode 100644 index 00000000..db8853dc --- /dev/null +++ b/scripts/sync-solutions-order.js @@ -0,0 +1,65 @@ +#!/usr/bin/env node +// Keeps welcome.mdx solution ordering in sync with the Solutions tab in docs.json. +// Run manually: node scripts/sync-solutions-order.js +// Also runs automatically via Claude Code hook when docs.json is edited. + +const fs = require('fs'); +const path = require('path'); + +const ROOT = path.join(__dirname, '..'); +const DOCS_JSON = path.join(ROOT, 'docs.json'); +const WELCOME_MDX = path.join(ROOT, 'welcome.mdx'); + +// Display names for each page path as they appear on the homepage. +// Update this map if a page is renamed or a new use case is added. +const PAGE_NAMES = { + 'embedded-wallets/code-examples/embedded-consumer-wallet': 'Embedded Consumer Wallets', + 'products/embedded-business-wallets/overview': 'Embedded Business Wallets', + 'embedded-wallets/embedded-waas': 'Wallets-as-a-Service', + 'products/embedded-wallets/features/agentic-wallets': 'Agentic Wallets', + 'company-wallets/code-examples/signing-transactions': 'Signing Transactions', + 'company-wallets/code-examples/smart-contract-management': 'Smart Contract Management', + 'company-wallets/code-examples/payment-orchestration': 'Payment Orchestration', + 'company-wallets/use-cases/agentic-wallets': 'Agentic Wallets', +}; + +function getUseCases(docsJson, tabName, groupName) { + const tab = docsJson.navigation.tabs.find(t => t.tab === tabName); + if (!tab) return []; + const group = tab.groups.find(g => g.group === groupName); + if (!group) return []; + const useCasesGroup = group.pages.find(p => typeof p === 'object' && p.group === 'Use cases'); + if (!useCasesGroup) return []; + return useCasesGroup.pages.filter(p => typeof p === 'string' && PAGE_NAMES[p]); +} + +function buildList(pages) { + return pages.map((p, i) => ` ${i + 1}. [${PAGE_NAMES[p]}](/${p})`).join('\n'); +} + +function escapeRegex(str) { + return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); +} + +function replaceSection(content, marker, newList) { + const start = `{/* sync-start: ${marker} */}`; + const end = `{/* sync-end: ${marker} */}`; + const re = new RegExp(`${escapeRegex(start)}[\\s\\S]*?${escapeRegex(end)}`); + const replacement = `${start}\n${newList}\n ${end}`; + if (!re.test(content)) { + console.warn(`Warning: marker "${marker}" not found in welcome.mdx — skipping.`); + return content; + } + return content.replace(re, replacement); +} + +const docsJson = JSON.parse(fs.readFileSync(DOCS_JSON, 'utf8')); +const embeddedPages = getUseCases(docsJson, 'Solutions', 'Embedded Wallets'); +const companyPages = getUseCases(docsJson, 'Solutions', 'Company Wallets'); + +let welcome = fs.readFileSync(WELCOME_MDX, 'utf8'); +welcome = replaceSection(welcome, 'embedded-wallets-use-cases', buildList(embeddedPages)); +welcome = replaceSection(welcome, 'company-wallets-use-cases', buildList(companyPages)); +fs.writeFileSync(WELCOME_MDX, welcome); + +console.log('✓ welcome.mdx solution ordering synced from docs.json'); diff --git a/solutions/overview.mdx b/solutions/overview.mdx index 34871e29..2c89114e 100644 --- a/solutions/overview.mdx +++ b/solutions/overview.mdx @@ -1,8 +1,69 @@ --- -title: "ROUTER PAGE" -description: "PLACEHOLDER LANDING PAGE" +title: "Introducing Solutions" +description: "Structured starting points for building onchain with Turnkey" --- -# Solutions +To help you ship quickly, we've packaged common patterns like wallet provisioning, policy enforcement, and transaction flows into easy integration paths called solutions. Each solution is built on Turnkey's underlying primitives, so you're never locked into a rigid workflow and can always go deeper when you need more flexibility. -> **This is a placeholder landing page.** Content will be written in a future phase. +Whether you're building consumer apps, business tooling, or AI-powered systems, there's a solution designed for your use case. + +--- + +## Embedded Wallets + +Wallet experiences built directly into your product. Users authenticate with email, passkeys, or social login — you control the UX. + + + + Non-custodial wallets with plug-and-play UI for consumer onboarding. + + + Multi-user access with policy controls and automated payment flows. + + + Transaction signing and smart contract interaction for AI agents. + + + White-labeled wallets with isolated user environments for your own wallet product. + + + +--- + +## Company Wallets + +Wallets your organization operates for onchain automation — high-volume signing with programmable controls. + + + + Automated stablecoin movement flows at scale. + + + Production infrastructure for governing smart contract execution. + + + +--- + +## Key Management + +Enterprise-grade security for your most sensitive keys — hardware-backed with programmable access controls. + + + + Secure key generation and policy-controlled access for encrypted data. + + + Non-custodial wallet recovery with instant policy enforcement. + + + +--- + +## Turnkey Verifiable Cloud + +Run code inside hardware-isolated enclaves with verifiable computation guarantees. + + + Purpose-built for applications where trust and auditability are non-negotiable. + diff --git a/welcome.mdx b/welcome.mdx index 28872794..ca79622d 100644 --- a/welcome.mdx +++ b/welcome.mdx @@ -4,14 +4,16 @@ description: "Secure, flexible, and scalable wallet infrastructure" mode: "custom" --- -
+
+ +
-

Turnkey: Secure, flexible, and scalable wallet infrastructure

+

Secure, flexible, and scalable wallet infrastructure

-

- Turnkey provides the infrastructure to create and manage wallets, sign transactions, and secure cryptographic keys — where every key operation is hardware-isolated, policy-governed, and cryptographically auditable. Build on a foundation where security isn't a tradeoff. +

+ Turnkey is infrastructure for generating wallets and keys, signing transactions, and controlling who can use them, when, and how. Private keys are secured in hardware-isolated enclaves and never exposed — not even to Turnkey.

- Search the docs... + Search Turnkey's docs... ⌘K
-
- -

Explore Turnkey's products

+

Build with Turnkey

+ +
+ +
+
+
+
Solutions
+
Pre-built patterns for common use cases
+
+
+
+
SDK
+
TypeScript, React, React Native, and more
+
+
+
+
API
+
REST API for complete control over every operation
+
+
+
+ +
+

+ Build at whichever level best meets your needs. Start with Solutions for common patterns, go deeper with our SDKs for more control, or reach all the way down to the API for complete flexibility. The full stack is always available. +

+ +
- +
- - **Wallet experiences built into your product** - - Build wallets directly into your app — for consumers, business accounts, or as the foundation for your own wallet product. Users authenticate with email, passkeys, or social login. You control the experience. - - {/* - ⚠️ INTERNAL NOTE — NOT FOR PUBLICATION - Are embedded wallets always non-custodial? Previous description said "non-custodial" - but the product supports non-custodial and hybrid custody models. - Needs stakeholder confirmation before finalizing this description. - */} - +
- - **Wallets your organization operates for onchain automation** +

Explore our solutions

- Run high-volume signing workflows with programmable controls — spending limits, multi-party approvals, role-based access, and automated policy execution. Purpose-built for teams that need to operate onchain at scale. -
+ - - **Enterprise-grade security for your most sensitive keys** + + Build wallets directly into your app. Users authenticate with email, passkeys, or social login. You control the experience. - Hardware-backed key storage with programmable access controls, quorum approvals, and tamper-evident audit logs. The security model your most critical infrastructure deserves. + {/* sync-start: embedded-wallets-use-cases */} + 1. [Embedded Consumer Wallets](/embedded-wallets/code-examples/embedded-consumer-wallet) + 2. [Embedded Business Wallets](/products/embedded-business-wallets/overview) + 3. [Wallets-as-a-Service](/embedded-wallets/embedded-waas) + 4. [Agentic Wallets](/products/embedded-wallets/features/agentic-wallets) + {/* sync-end: embedded-wallets-use-cases */} - - **Run code inside hardware-isolated enclaves** `Beta` + + Automate your onchain operations with wallets, keys and programmable controls purpose built for scale. - Execute workloads with verifiable computation guarantees — built for applications where trust and auditability are non-negotiable. + {/* sync-start: company-wallets-use-cases */} + 1. [Signing Transactions](/company-wallets/code-examples/signing-transactions) + 2. [Smart Contract Management](/company-wallets/code-examples/smart-contract-management) + 3. [Payment Orchestration](/company-wallets/code-examples/payment-orchestration) + 4. [Agentic Wallets](/company-wallets/use-cases/agentic-wallets) + {/* sync-end: company-wallets-use-cases */} -
- -

How Turnkey works

- - - Understand the core architecture behind Turnkey's key infrastructure. - - -
- -

Start building

- - - - - Create your organization and generate an API keypair — the two steps every Turnkey integration starts with. - - - - Jump into code with a step-by-step guide for building embedded wallets. - - - - Get started running workloads inside Turnkey's secure enclave infrastructure. - + +
+ +

Explore our features

+ + + + + + + + + + + + + + + + + + +
+
Read our whitepaper for an in-depth look at Turnkey's security model and verifiable key management infrastructure.
+ + Read the Turnkey Whitepaper → + +
+
From 1a282a150b04b0a1c40a464476294265f2c2f66b Mon Sep 17 00:00:00 2001 From: Graham Ritter Date: Wed, 29 Apr 2026 10:13:54 -0400 Subject: [PATCH 018/117] Add brale to cookbook nav, add .claude/ to .gitignore --- .gitignore | 3 ++- docs.json | 12 +++++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index acecd96c..59cc627e 100644 --- a/.gitignore +++ b/.gitignore @@ -8,4 +8,5 @@ build # windsurf rules .windsurfrules -CLAUDE.md \ No newline at end of file +CLAUDE.md +.claude/ \ No newline at end of file diff --git a/docs.json b/docs.json index ea50d43f..03653481 100644 --- a/docs.json +++ b/docs.json @@ -8,7 +8,12 @@ "dark": "#050a0b" }, "contextual": { - "options": ["copy", "view", "chatgpt", "claude"] + "options": [ + "copy", + "view", + "chatgpt", + "claude" + ] }, "integrations": { "ga4": { @@ -142,7 +147,8 @@ { "group": "Integrations", "pages": [ - "cookbook/gelato" + "cookbook/gelato", + "cookbook/brale" ] } ] @@ -1197,4 +1203,4 @@ "permanent": true } ] -} +} \ No newline at end of file From c8b10caedc8ba99ed036f07c9cced31490fea41f Mon Sep 17 00:00:00 2001 From: Graham Ritter Date: Wed, 29 Apr 2026 10:15:32 -0400 Subject: [PATCH 019/117] Remove Lucy's sync script and Claude settings file --- .claude/settings.json | 16 -------- scripts/sync-solutions-order.js | 65 --------------------------------- 2 files changed, 81 deletions(-) delete mode 100644 .claude/settings.json delete mode 100644 scripts/sync-solutions-order.js diff --git a/.claude/settings.json b/.claude/settings.json deleted file mode 100644 index 5f9894f4..00000000 --- a/.claude/settings.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "hooks": { - "PostToolUse": [ - { - "matcher": "Write|Edit", - "hooks": [ - { - "type": "command", - "command": "jq -r '.tool_input.file_path // \"\"' | grep -q 'docs\\.json$' && cd /Users/lucy/docs && node scripts/sync-solutions-order.js 2>/dev/null || true", - "statusMessage": "Syncing homepage solution order..." - } - ] - } - ] - } -} diff --git a/scripts/sync-solutions-order.js b/scripts/sync-solutions-order.js deleted file mode 100644 index db8853dc..00000000 --- a/scripts/sync-solutions-order.js +++ /dev/null @@ -1,65 +0,0 @@ -#!/usr/bin/env node -// Keeps welcome.mdx solution ordering in sync with the Solutions tab in docs.json. -// Run manually: node scripts/sync-solutions-order.js -// Also runs automatically via Claude Code hook when docs.json is edited. - -const fs = require('fs'); -const path = require('path'); - -const ROOT = path.join(__dirname, '..'); -const DOCS_JSON = path.join(ROOT, 'docs.json'); -const WELCOME_MDX = path.join(ROOT, 'welcome.mdx'); - -// Display names for each page path as they appear on the homepage. -// Update this map if a page is renamed or a new use case is added. -const PAGE_NAMES = { - 'embedded-wallets/code-examples/embedded-consumer-wallet': 'Embedded Consumer Wallets', - 'products/embedded-business-wallets/overview': 'Embedded Business Wallets', - 'embedded-wallets/embedded-waas': 'Wallets-as-a-Service', - 'products/embedded-wallets/features/agentic-wallets': 'Agentic Wallets', - 'company-wallets/code-examples/signing-transactions': 'Signing Transactions', - 'company-wallets/code-examples/smart-contract-management': 'Smart Contract Management', - 'company-wallets/code-examples/payment-orchestration': 'Payment Orchestration', - 'company-wallets/use-cases/agentic-wallets': 'Agentic Wallets', -}; - -function getUseCases(docsJson, tabName, groupName) { - const tab = docsJson.navigation.tabs.find(t => t.tab === tabName); - if (!tab) return []; - const group = tab.groups.find(g => g.group === groupName); - if (!group) return []; - const useCasesGroup = group.pages.find(p => typeof p === 'object' && p.group === 'Use cases'); - if (!useCasesGroup) return []; - return useCasesGroup.pages.filter(p => typeof p === 'string' && PAGE_NAMES[p]); -} - -function buildList(pages) { - return pages.map((p, i) => ` ${i + 1}. [${PAGE_NAMES[p]}](/${p})`).join('\n'); -} - -function escapeRegex(str) { - return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); -} - -function replaceSection(content, marker, newList) { - const start = `{/* sync-start: ${marker} */}`; - const end = `{/* sync-end: ${marker} */}`; - const re = new RegExp(`${escapeRegex(start)}[\\s\\S]*?${escapeRegex(end)}`); - const replacement = `${start}\n${newList}\n ${end}`; - if (!re.test(content)) { - console.warn(`Warning: marker "${marker}" not found in welcome.mdx — skipping.`); - return content; - } - return content.replace(re, replacement); -} - -const docsJson = JSON.parse(fs.readFileSync(DOCS_JSON, 'utf8')); -const embeddedPages = getUseCases(docsJson, 'Solutions', 'Embedded Wallets'); -const companyPages = getUseCases(docsJson, 'Solutions', 'Company Wallets'); - -let welcome = fs.readFileSync(WELCOME_MDX, 'utf8'); -welcome = replaceSection(welcome, 'embedded-wallets-use-cases', buildList(embeddedPages)); -welcome = replaceSection(welcome, 'company-wallets-use-cases', buildList(companyPages)); -fs.writeFileSync(WELCOME_MDX, welcome); - -console.log('✓ welcome.mdx solution ordering synced from docs.json'); From fa14a0eba82af8bcddebe074d7da91635e4b6ef5 Mon Sep 17 00:00:00 2001 From: Graham Ritter Date: Wed, 29 Apr 2026 10:21:11 -0400 Subject: [PATCH 020/117] fixing some broken links on the new homepage --- home.mdx | 2 +- welcome.mdx | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/home.mdx b/home.mdx index bafa9082..a1268f49 100644 --- a/home.mdx +++ b/home.mdx @@ -42,7 +42,7 @@ Keys never leave the enclave. Turnkey returns signed payloads and supports trans Browse the full set of product capabilities. - + diff --git a/welcome.mdx b/welcome.mdx index ca79622d..ac81fef0 100644 --- a/welcome.mdx +++ b/welcome.mdx @@ -73,7 +73,7 @@ mode: "custom"

@@ -141,7 +141,7 @@ mode: "custom"

Explore our features

- + From 95cab7292071f44a31c8a65e2e9093d6c15a6034 Mon Sep 17 00:00:00 2001 From: Lucy Aziz Date: Wed, 29 Apr 2026 11:20:36 -0400 Subject: [PATCH 021/117] Homepage tweaks: fix links, remove Key Management from Other Solutions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Consolidate duplicate links into single "Learn how Turnkey works" → /home - Link Solutions/SDK/API boxes to their respective pages - Link Embedded Wallets and Company Wallets card titles to overview pages - Update API box link to API reference intro page - Open whitepaper link in new tab - Remove Key Management tile from Other Solutions grid (3-col layout) Co-Authored-By: Claude Sonnet 4.6 --- welcome.mdx | 32 +++++++++++++------------------- 1 file changed, 13 insertions(+), 19 deletions(-) diff --git a/welcome.mdx b/welcome.mdx index ac81fef0..b5727403 100644 --- a/welcome.mdx +++ b/welcome.mdx @@ -49,22 +49,22 @@ mode: "custom"
@@ -72,7 +72,6 @@ mode: "custom" Build at whichever level best meets your needs. Start with Solutions for common patterns, go deeper with our SDKs for more control, or reach all the way down to the API for complete flexibility. The full stack is always available.

@@ -86,7 +85,7 @@ mode: "custom" - + Embedded Wallets} icon="wallet"> Build wallets directly into your app. Users authenticate with email, passkeys, or social login. You control the experience. {/* sync-start: embedded-wallets-use-cases */} @@ -97,7 +96,7 @@ mode: "custom" {/* sync-end: embedded-wallets-use-cases */} - + Company Wallets} icon="building"> Automate your onchain operations with wallets, keys and programmable controls purpose built for scale. {/* sync-start: company-wallets-use-cases */} @@ -112,24 +111,19 @@ mode: "custom"
Other solutions
-
- -
1.
-
Key Management
-
Enterprise-grade key security
-
+
-
2.
+
1.
Encryption Key Storage
Policy-controlled key access
-
3.
+
2.
Enterprise Disaster Recovery
Non-custodial wallet recovery
-
4.
+
3.
Verifiable Cloud Beta
Hardware-isolated compute
@@ -161,7 +155,7 @@ mode: "custom"
Read our whitepaper for an in-depth look at Turnkey's security model and verifiable key management infrastructure.
- + Read the Turnkey Whitepaper →
From 5389cc9f293e54384f0e2e5fbef40868a643f1fc Mon Sep 17 00:00:00 2001 From: Graham Ritter Date: Wed, 29 Apr 2026 11:22:48 -0400 Subject: [PATCH 022/117] reorganized the chain support section --- docs.json | 27 ++++++++++++++++++++------- home.mdx | 6 +++--- welcome.mdx | 6 +++--- 3 files changed, 26 insertions(+), 13 deletions(-) diff --git a/docs.json b/docs.json index 8a8faae1..da73b359 100644 --- a/docs.json +++ b/docs.json @@ -62,7 +62,9 @@ "groups": [ { "group": "Overview", - "pages": ["solutions/overview"] + "pages": [ + "solutions/overview" + ] }, { "group": "Embedded Wallets", @@ -308,15 +310,25 @@ "concepts/balances", "wallets/fiat-on-ramp", "transaction-management/yield", - "transaction-management/trading", + "transaction-management/trading" + ] + }, + { + "group": "Chain support", + "pages": [ + "networks/overview", { "group": "Supported networks", "pages": [ - "networks/overview", "networks/ethereum", - "networks/solana", - "networks/solana-transaction-construction", - "networks/solana-rent-refunds", + { + "group": "Solana (SVM)", + "pages": [ + "networks/solana", + "networks/solana-transaction-construction", + "networks/solana-rent-refunds" + ] + }, "networks/bitcoin", "networks/spark", "networks/hyperliquid", @@ -727,7 +739,8 @@ "sdks/web3/cosmjs", "sdks/web3/eip-1193", "sdks/web3/solana", - "sdks/web3/gas-station" + "sdks/web3/gas-station", + "sdks/foundry" ] }, { diff --git a/home.mdx b/home.mdx index a1268f49..24c2b9e2 100644 --- a/home.mdx +++ b/home.mdx @@ -62,7 +62,7 @@ Browse the full set of product capabilities. {" "} - + {" "} @@ -78,10 +78,10 @@ Browse the full set of product capabilities. - + - + diff --git a/welcome.mdx b/welcome.mdx index ac81fef0..bac3b04d 100644 --- a/welcome.mdx +++ b/welcome.mdx @@ -147,12 +147,12 @@ mode: "custom" - + - - + + From a2a7f04baa6c24b542bacf0d7222df92a9ebdcd1 Mon Sep 17 00:00:00 2001 From: Graham Ritter Date: Thu, 30 Apr 2026 11:56:25 -0400 Subject: [PATCH 023/117] moved changelog, TVC to documentation tab --- docs.json | 109 ++++++++++++++++++++++++++---------------------------- 1 file changed, 52 insertions(+), 57 deletions(-) diff --git a/docs.json b/docs.json index da73b359..cabf1168 100644 --- a/docs.json +++ b/docs.json @@ -232,14 +232,6 @@ "pages": [ "authentication/proxying-signed-requests" ] - }, - { - "group": "Verifiable Cloud", - "tag": "Beta", - "pages": [ - "products/verifiable-cloud/overview", - "products/verifiable-cloud/onboarding" - ] } ] }, @@ -347,6 +339,14 @@ } ] }, + { + "group": "Turnkey Verifiable Cloud", + "pages": [ + "products/verifiable-cloud/overview", + "products/verifiable-cloud/onboarding", + "getting-started/verifiable-cloud-quickstart" + ] + }, { "group": "Other primitives", "pages": [ @@ -362,6 +362,50 @@ "getting-started/migration-guide", "faq" ] + }, + { + "group": "Changelogs", + "pages": [ + { + "group": "SDK changelogs", + "pages": [ + "changelogs/api-key-stamper/readme", + "changelogs/cosmjs/readme", + "changelogs/crypto/readme", + "changelogs/eip-1193-provider/readme", + "changelogs/encoding/readme", + "changelogs/ethers/readme", + "changelogs/http/readme", + "changelogs/iframe-stamper/readme", + "changelogs/react-native-passkey-stamper/readme", + "changelogs/sdk-browser/readme", + "changelogs/sdk-react/readme", + "changelogs/sdk-react-native/readme", + "changelogs/sdk-server/readme", + "changelogs/solana/readme", + "changelogs/telegram-cloud-storage-stamper/readme", + "changelogs/viem/readme", + "changelogs/wallet-stamper/readme", + "changelogs/webauthn-stamper/readme", + "changelogs/golang/readme", + "changelogs/dart/readme", + "changelogs/core/readme", + "changelogs/react-wallet-kit/readme" + ] + }, + { + "group": "API changelog", + "pages": [ + "changelogs/api-changelog/readme" + ] + }, + { + "group": "TVC changelog", + "pages": [ + "changelogs/tvc-changelog/readme" + ] + } + ] } ] }, @@ -943,55 +987,6 @@ ] } ] - }, - { - "tab": "Changelogs", - "pages": [ - { - "group": "Changelogs", - "pages": [ - { - "group": "SDK changelogs", - "pages": [ - "changelogs/api-key-stamper/readme", - "changelogs/cosmjs/readme", - "changelogs/crypto/readme", - "changelogs/eip-1193-provider/readme", - "changelogs/encoding/readme", - "changelogs/ethers/readme", - "changelogs/http/readme", - "changelogs/iframe-stamper/readme", - "changelogs/react-native-passkey-stamper/readme", - "changelogs/sdk-browser/readme", - "changelogs/sdk-react/readme", - "changelogs/sdk-react-native/readme", - "changelogs/sdk-server/readme", - "changelogs/solana/readme", - "changelogs/telegram-cloud-storage-stamper/readme", - "changelogs/viem/readme", - "changelogs/wallet-stamper/readme", - "changelogs/webauthn-stamper/readme", - "changelogs/golang/readme", - "changelogs/dart/readme", - "changelogs/core/readme", - "changelogs/react-wallet-kit/readme" - ] - }, - { - "group": "API changelog", - "pages": [ - "changelogs/api-changelog/readme" - ] - }, - { - "group": "TVC changelog", - "pages": [ - "changelogs/tvc-changelog/readme" - ] - } - ] - } - ] } ] }, From 4fdf445df15ca08d17247b93f9396cdf0fcff56e Mon Sep 17 00:00:00 2001 From: Graham Ritter Date: Thu, 30 Apr 2026 14:54:27 -0400 Subject: [PATCH 024/117] Moved SDK reference content to integration guide, new quickstart page for embedded wallets --- api-reference/activities/overview.mdx | 2 +- api-reference/queries/overview.mdx | 2 +- docs.json | 341 ++++++++++-------- .../integration-guide/overview.mdx | 10 + .../embedded-wallet-quickstart.mdx | 115 +++++- 5 files changed, 306 insertions(+), 164 deletions(-) create mode 100644 embedded-wallets/integration-guide/overview.mdx diff --git a/api-reference/activities/overview.mdx b/api-reference/activities/overview.mdx index 153fcc3c..67603027 100644 --- a/api-reference/activities/overview.mdx +++ b/api-reference/activities/overview.mdx @@ -1,7 +1,7 @@ --- title: "Activities" description: "Activities are requests to securely execute a workload in Turnkey." -sidebarTitle: "Overview" +sidebarTitle: "Activities" mode: wide --- diff --git a/api-reference/queries/overview.mdx b/api-reference/queries/overview.mdx index 0466d0ea..c42cbe14 100644 --- a/api-reference/queries/overview.mdx +++ b/api-reference/queries/overview.mdx @@ -1,7 +1,7 @@ --- title: "Queries" description: "Queries are read requests to Turnkey's API. They allow you to retrieve data about your organization and its resources." -sidebarTitle: "Overview" +sidebarTitle: "Queries" mode: wide --- diff --git a/docs.json b/docs.json index cabf1168..ead396e2 100644 --- a/docs.json +++ b/docs.json @@ -80,7 +80,119 @@ ] }, "getting-started/embedded-wallet-quickstart", - "embedded-wallets/demos" + { + "group": "Integration Guide", + "pages": [ + "embedded-wallets/integration-guide/overview", + { + "group": "React", + "pages": [ + "sdks/react/index", + "sdks/react/getting-started", + "sdks/react/auth", + "sdks/react/using-embedded-wallets", + { + "group": "Using external wallets", + "pages": [ + "sdks/react/using-external-wallets/overview", + "sdks/react/using-external-wallets/authentication", + "sdks/react/using-external-wallets/connecting" + ] + }, + "sdks/react/signing", + "sdks/react/ui-customization", + "sdks/react/sub-organization-customization", + "sdks/react/advanced-api-requests", + "sdks/react/advanced-backend-authentication", + "sdks/react/migrating-sdk-react", + "sdks/react/troubleshooting", + "sdks/react/legacy" + ] + }, + { + "group": "React Native", + "pages": [ + "sdks/react-native/overview", + "sdks/react-native/getting-started", + { + "group": "Authentication", + "pages": [ + "sdks/react-native/authentication/overview", + "sdks/react-native/authentication/email-sms", + "sdks/react-native/authentication/passkey", + "sdks/react-native/authentication/social-logins" + ] + }, + "sdks/react-native/sub-organization-customization", + "sdks/react-native/using-embedded-wallets", + "sdks/react-native/signing", + "sdks/react-native/advanced-api-requests" + ] + }, + { + "group": "Flutter", + "pages": [ + "sdks/flutter/index", + "sdks/flutter/getting-started", + { + "group": "Authentication", + "pages": [ + "sdks/flutter/authentication/overview", + "sdks/flutter/authentication/email-sms", + "sdks/flutter/authentication/passkey", + "sdks/flutter/authentication/social-logins" + ] + }, + "sdks/flutter/sub-organization-customization", + "sdks/flutter/using-embedded-wallets", + "sdks/flutter/signing", + "sdks/flutter/advanced-api-requests" + ] + }, + { + "group": "Swift", + "pages": [ + "sdks/swift/overview", + "sdks/swift/getting-started", + { + "group": "Authentication", + "pages": [ + "sdks/swift/authentication/overview", + "sdks/swift/authentication/email-sms", + "sdks/swift/authentication/passkey", + "sdks/swift/authentication/social-logins" + ] + }, + "sdks/swift/signing", + "sdks/swift/sub-organization-customization", + "sdks/swift/advanced-api-requests", + "sdks/swift/using-embedded-wallets", + "sdks/swift/advanced-backend-authentication" + ] + }, + { + "group": "Kotlin", + "pages": [ + "sdks/kotlin/overview", + "sdks/kotlin/getting-started", + { + "group": "Authentication", + "pages": [ + "sdks/kotlin/authentication/overview", + "sdks/kotlin/authentication/email-sms", + "sdks/kotlin/authentication/passkey", + "sdks/kotlin/authentication/social-logins", + "sdks/kotlin/authentication/rp-id-setup" + ] + }, + "sdks/kotlin/sub-organization-customization", + "sdks/kotlin/using-embedded-wallets", + "sdks/kotlin/signing", + "sdks/kotlin/advanced-api-requests" + ] + } + ] + } ] }, { @@ -112,14 +224,6 @@ } ] }, - { - "group": "Turnkey Verifiable Cloud", - "pages": [ - "products/verifiable-cloud/overview", - "products/verifiable-cloud/onboarding", - "getting-started/verifiable-cloud-quickstart" - ] - }, { "group": "Cookbook", "pages": [ @@ -185,22 +289,6 @@ } ] }, - { - "group": "Organizations", - "pages": [ - "concepts/organizations", - "concepts/sub-organizations" - ] - }, - { - "group": "Users", - "pages": [ - "concepts/users/introduction", - "concepts/users/credentials", - "concepts/users/root-quorum", - "concepts/users/best-practices" - ] - }, { "group": "Authentication", "pages": [ @@ -236,25 +324,44 @@ ] }, { - "group": "Wallet and key management", + "group": "Chain support", "pages": [ - "concepts/wallets", - { - "group": "Import & export", - "pages": [ - "products/company-wallets/features/import-wallets", - "products/company-wallets/features/export-wallets" - ] - }, - "wallets/pregenerated-wallets", + "networks/overview", { - "group": "Claim links", + "group": "Supported networks", "pages": [ - "wallets/claim-links", - "embedded-wallets/send-crypto-via-url" + "networks/ethereum", + { + "group": "Solana (SVM)", + "pages": [ + "networks/solana", + "networks/solana-transaction-construction", + "networks/solana-rent-refunds" + ] + }, + "networks/bitcoin", + "networks/spark", + "networks/hyperliquid", + "networks/cosmos", + "networks/tron", + "networks/sui", + "networks/sei", + "networks/stacks", + "networks/aptos", + "networks/tempo", + "networks/movement", + "networks/iota", + "networks/doge", + "networks/others" ] - }, - "reference/aa-wallets" + } + ] + }, + { + "group": "Organizations", + "pages": [ + "concepts/organizations", + "concepts/sub-organizations" ] }, { @@ -305,40 +412,6 @@ "transaction-management/trading" ] }, - { - "group": "Chain support", - "pages": [ - "networks/overview", - { - "group": "Supported networks", - "pages": [ - "networks/ethereum", - { - "group": "Solana (SVM)", - "pages": [ - "networks/solana", - "networks/solana-transaction-construction", - "networks/solana-rent-refunds" - ] - }, - "networks/bitcoin", - "networks/spark", - "networks/hyperliquid", - "networks/cosmos", - "networks/tron", - "networks/sui", - "networks/sei", - "networks/stacks", - "networks/aptos", - "networks/tempo", - "networks/movement", - "networks/iota", - "networks/doge", - "networks/others" - ] - } - ] - }, { "group": "Turnkey Verifiable Cloud", "pages": [ @@ -347,6 +420,37 @@ "getting-started/verifiable-cloud-quickstart" ] }, + { + "group": "Users", + "pages": [ + "concepts/users/introduction", + "concepts/users/credentials", + "concepts/users/root-quorum", + "concepts/users/best-practices" + ] + }, + { + "group": "Wallet and key management", + "pages": [ + "concepts/wallets", + { + "group": "Import & export", + "pages": [ + "products/company-wallets/features/import-wallets", + "products/company-wallets/features/export-wallets" + ] + }, + "wallets/pregenerated-wallets", + { + "group": "Claim links", + "pages": [ + "wallets/claim-links", + "embedded-wallets/send-crypto-via-url" + ] + }, + "reference/aa-wallets" + ] + }, { "group": "Other primitives", "pages": [ @@ -357,6 +461,8 @@ { "group": "Reference", "pages": [ + "api-reference/activities/overview", + "api-reference/queries/overview", "concepts/resource-limits", "developer-reference/webhooks", "getting-started/migration-guide", @@ -419,26 +525,6 @@ { "group": "React", "pages": [ - "sdks/react/index", - "sdks/react/getting-started", - "sdks/react/auth", - "sdks/react/using-embedded-wallets", - { - "group": "Using external wallets", - "pages": [ - "sdks/react/using-external-wallets/overview", - "sdks/react/using-external-wallets/authentication", - "sdks/react/using-external-wallets/connecting" - ] - }, - "sdks/react/signing", - "sdks/react/ui-customization", - "sdks/react/sub-organization-customization", - "sdks/react/advanced-api-requests", - "sdks/react/advanced-backend-authentication", - "sdks/react/migrating-sdk-react", - "sdks/react/troubleshooting", - "sdks/react/legacy", { "group": "SDK reference", "pages": [ @@ -543,21 +629,6 @@ { "group": "React Native", "pages": [ - "sdks/react-native/overview", - "sdks/react-native/getting-started", - { - "group": "Authentication", - "pages": [ - "sdks/react-native/authentication/overview", - "sdks/react-native/authentication/email-sms", - "sdks/react-native/authentication/passkey", - "sdks/react-native/authentication/social-logins" - ] - }, - "sdks/react-native/sub-organization-customization", - "sdks/react-native/using-embedded-wallets", - "sdks/react-native/signing", - "sdks/react-native/advanced-api-requests", { "group": "SDK reference", "pages": [ @@ -626,63 +697,19 @@ { "group": "Flutter", "pages": [ - "sdks/flutter/index", - "sdks/flutter/getting-started", - { - "group": "Authentication", - "pages": [ - "sdks/flutter/authentication/overview", - "sdks/flutter/authentication/email-sms", - "sdks/flutter/authentication/passkey", - "sdks/flutter/authentication/social-logins" - ] - }, - "sdks/flutter/sub-organization-customization", - "sdks/flutter/using-embedded-wallets", - "sdks/flutter/signing", - "sdks/flutter/advanced-api-requests" + "sdks/flutter/index" ] }, { "group": "Swift", "pages": [ - "sdks/swift/overview", - "sdks/swift/getting-started", - { - "group": "Authentication", - "pages": [ - "sdks/swift/authentication/overview", - "sdks/swift/authentication/email-sms", - "sdks/swift/authentication/passkey", - "sdks/swift/authentication/social-logins" - ] - }, - "sdks/swift/signing", - "sdks/swift/sub-organization-customization", - "sdks/swift/advanced-api-requests", - "sdks/swift/using-embedded-wallets", - "sdks/swift/advanced-backend-authentication" + "sdks/swift/overview" ] }, { "group": "Kotlin", "pages": [ - "sdks/kotlin/overview", - "sdks/kotlin/getting-started", - { - "group": "Authentication", - "pages": [ - "sdks/kotlin/authentication/overview", - "sdks/kotlin/authentication/email-sms", - "sdks/kotlin/authentication/passkey", - "sdks/kotlin/authentication/social-logins", - "sdks/kotlin/authentication/rp-id-setup" - ] - }, - "sdks/kotlin/sub-organization-customization", - "sdks/kotlin/using-embedded-wallets", - "sdks/kotlin/signing", - "sdks/kotlin/advanced-api-requests" + "sdks/kotlin/overview" ] }, { @@ -821,7 +848,6 @@ { "group": "Activities", "pages": [ - "api-reference/activities/overview", "api-reference/activities/approve-activity", "api-reference/activities/broadcast-evm-transaction", "api-reference/activities/broadcast-svm-transaction", @@ -905,7 +931,6 @@ { "group": "Queries", "pages": [ - "api-reference/queries/overview", "api-reference/queries/get-a-specific-boot-proof", "api-reference/queries/get-activity", "api-reference/queries/get-api-key", diff --git a/embedded-wallets/integration-guide/overview.mdx b/embedded-wallets/integration-guide/overview.mdx new file mode 100644 index 00000000..7d446c52 --- /dev/null +++ b/embedded-wallets/integration-guide/overview.mdx @@ -0,0 +1,10 @@ +--- +title: "Overview" +sidebarTitle: "Overview" +--- + +# Integration Guide + +This guide walks you through integrating Turnkey's Embedded Wallets into your application. + +{/* TODO: Add integration guide content */} diff --git a/getting-started/embedded-wallet-quickstart.mdx b/getting-started/embedded-wallet-quickstart.mdx index 93b824a0..f88ee014 100644 --- a/getting-started/embedded-wallet-quickstart.mdx +++ b/getting-started/embedded-wallet-quickstart.mdx @@ -1,11 +1,118 @@ --- title: "Embedded wallets quickstart" -description: "Turnkey's embedded wallets enable you to integrate secure, custom wallet experiences directly into your product. With features like advanced security, seamless authentication, and flexible UX options, you can focus on building great products while we handle the complexities of private key management." +description: "Three paths to get started with Turnkey's embedded wallets, whether you want to explore, clone, or build from scratch." sidebarTitle: "Quickstart" --- -## `@turnkey/react-wallet-kit` +Turnkey's embedded wallets let you add secure, fully-featured wallet experiences to your app. There are three ways to get started, depending on how hands-on you want to be. -The `@turnkey/react-wallet-kit` is a powerful SDK that allows you to integrate Turnkey's Embedded Wallets into your React applications. It provides a set of UI components and easy-to-use functions, all exported from a hook, enabling you to quickly build secure embedded wallet experiences. + +**Building with AI?** Connect your IDE or LLM to Turnkey's docs via our +[MCP server and LLM feeds](/developer-reference/using-llms) for contextual +help while you integrate. + -Head over to the [Getting Started](/sdks/react/getting-started) guide to set up your React app with Turnkey's Embedded Wallets. + + + Try a working embedded wallet in your browser. No setup required. + + + Start from a full demo app and make it your own. + + + Follow the integration guide to build from your own codebase. + + + +--- + +## Explore the live demo + +The fastest way to see Turnkey embedded wallets in action. Our [live demo app](https://wallets.turnkey.com/) is a fully functional embedded wallet built with the Embedded Wallet Kit. Use it to try out authentication flows, wallet creation, transaction signing, and more, all from your browser with no setup. + + + Open wallets.turnkey.com and start exploring. + + +## Clone and customize + +If you want to get running locally, clone one of the demo apps below and start customizing. Each is a complete, runnable application you can use as a starting point for your own integration. + +### Web + +#### Demo Embedded Wallet ([code](https://github.com/tkhq/demo-embedded-wallet)) + +The flagship embedded wallet demo. Built with `@turnkey/sdk-browser`, `@turnkey/sdk-react`, and `@turnkey/sdk-server`. Covers the full embedded wallet lifecycle: + +- Authentication via passkeys, email OTP, and OAuth +- Creating wallets and wallet accounts +- Sending and receiving funds +- Importing and exporting wallets +- Adding credentials + + + + demo embedded wallet login view + + + demo embedded wallet dashboard view + + + +### Mobile + +#### React Native Demo ([code](https://github.com/tkhq/react-native-demo-wallet)) + +Demonstrates Turnkey's JavaScript packages in a React Native environment. Covers authentication, wallet creation, export, and transaction signing. + + + + + +#### Flutter Demo ([code](https://github.com/tkhq/dart-sdk/tree/main/examples/flutter-demo-app)) + +Demonstrates Turnkey's Flutter packages. Covers authentication, wallet creation, export, and transaction signing. + + + + + +## Build with the integration guide + +Ready to integrate Turnkey into your own app? The [Integration Guide](/embedded-wallets/integration-guide/overview) walks you through everything step by step. + +For React apps, the **Embedded Wallet Kit (EWK)** is the recommended starting point. It provides pre-built auth and wallet UI components, a hook-based API, and requires no backend setup. + +For React Native, Flutter, Swift, or Kotlin, choose the guide for your platform: + + + + Pre-built components with minimal configuration. + + + JavaScript packages for React Native. + + + Dart SDK for Flutter apps. + + + Native iOS integration. + + + Native Android integration. + + + +For fully custom implementations or lower-level control, you can work directly with the [Turnkey API](/developer-reference/api-overview/intro). From 68cf3df7e25acbb6f06e001cf1a632c79febaa82 Mon Sep 17 00:00:00 2001 From: Graham Ritter Date: Mon, 4 May 2026 13:54:22 -0400 Subject: [PATCH 025/117] New Overview and Consumer Wallet pages --- docs.json | 2 + .../embedded-consumer-wallet-2.mdx | 55 ++++++++++ embedded-wallets/overview-2.mdx | 101 ++++++++++++++++++ embedded-wallets/overview.mdx | 4 +- 4 files changed, 160 insertions(+), 2 deletions(-) create mode 100644 embedded-wallets/code-examples/embedded-consumer-wallet-2.mdx create mode 100644 embedded-wallets/overview-2.mdx diff --git a/docs.json b/docs.json index ead396e2..3960df3f 100644 --- a/docs.json +++ b/docs.json @@ -70,10 +70,12 @@ "group": "Embedded Wallets", "pages": [ "embedded-wallets/overview", + "embedded-wallets/overview-2", { "group": "Use cases", "pages": [ "embedded-wallets/code-examples/embedded-consumer-wallet", + "embedded-wallets/code-examples/embedded-consumer-wallet-2", "products/embedded-business-wallets/overview", "embedded-wallets/embedded-waas", "products/embedded-wallets/features/agentic-wallets" diff --git a/embedded-wallets/code-examples/embedded-consumer-wallet-2.mdx b/embedded-wallets/code-examples/embedded-consumer-wallet-2.mdx new file mode 100644 index 00000000..7d2f501e --- /dev/null +++ b/embedded-wallets/code-examples/embedded-consumer-wallet-2.mdx @@ -0,0 +1,55 @@ +--- +title: "Embedded Consumer Wallet" +sidebarTitle: "Consumer Wallet 2" +description: "Give every user of your application their own wallet, provisioned automatically at signup." +--- + +With Turnkey, you can provision a dedicated wallet for every user as part of your application's signup flow, at any scale. Users authenticate with familiar methods like passkeys, email, or social login. They never manage keys or install extensions. + +**Built with Turnkey:** +- [Moonshot](https://www.turnkey.com/customers/how-moonshot-powers-millions-of-self-custodial-wallets-using-turnkey) — millions of self-custodial wallets powering one of crypto's fastest-growing consumer apps +- [Infinex](https://www.turnkey.com/customers/making-onchain-ux-seamless-with-infinex-and-turnkey) — seamless onchain UX for a unified DeFi experience +- [Axiom](https://www.turnkey.com/customers/axiom-global-defi-trading-platform) — global DeFi trading platform with embedded wallet infrastructure + +## Key implementation decisions + +Turnkey enables developers to tailor non-custodial, embedded user wallets across dimensions such as +custody model, authentication, and more. See the key implementation decisions below to curate the +exact user experience you need. + +| Decision | Explanation | Learn more | +| :------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **Custody model** | Choose who can authorize the enclave to sign: the user only (non-custodial), your application (custodial), or both with scoped permissions (hybrid). | [Custody models](/embedded-wallets/overview-2#custody-models) | +| **Authentication methods** | Choose user auth methods: Passkeys, OAuth/email, or SMS. You can use the [Auth Proxy](/reference/auth-proxy) for backend-signed OTP/OAuth/signup without your own backend, or wire auth to your app. | [Authentication Overview](/authentication/overview), [Auth Proxy](/reference/auth-proxy) | +| **Policies and guardrails** | Set guardrails for what your end users can do, such as spending limits, allowed destinations, or multi-party approval. Optionally let users configure their own guardrails within your app. | [Policies](/concepts/policies/overview), [Delegated Access](/concepts/policies/delegated-access-overview) | +| **Session management** | Allow a user to take multiple, contiguous actions in a defined period of time. Actions include: Read-write or read-only. | [Sessions](/authentication/sessions) | +| **Wallet architecture** | Choose between key-based (HD) or smart contract wallets for your users. Turnkey supports both. | [Wallets Concept](/concepts/wallets), [Transaction Management](/concepts/transaction-management) | +| **Gas sponsorship** | Integrate a gasless UX via sponsored transactions to cover who pays gas and how transactions are broadcast. | [Transaction Management](/concepts/transaction-management), [Sending sponsored transactions](/embedded-wallets/code-examples/sending-sponsored-transactions) | +| **Key portability** | Determine whether users can import or export keys. | [Import wallets](/products/company-wallets/features/import-wallets), [Export wallets](/products/company-wallets/features/export-wallets) | +| **Recovery flows** | Define how users regain access if they lose their authenticator. Options include email recovery and backup passkeys. | [Email recovery](/embedded-wallets/sub-organization-recovery) | + +## Example: Neobank-style embedded consumer wallet + +Typical requirements and how Turnkey addresses them: + +| Requirement | Turnkey capability | +| :-------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Seamless onboarding | Passkey registration and automated wallet provisioning. See [Quickstart](/getting-started/embedded-wallet-quickstart) or [Integration Guide](/embedded-wallets/integration-guide/overview) | +| User custody without key exposure | Keys remain in [secure enclaves](/security/secure-enclaves); only signatures are returned. See [Security](/security/our-approach) | +| Gasless UX | [Sponsored transactions](/concepts/transaction-management) and [sending sponsored transactions](/embedded-wallets/code-examples/sending-sponsored-transactions) | +| Email-based auth and recovery | [Sub-organization recovery](/embedded-wallets/sub-organization-recovery) | +| Send without wallet setup | [Claim links](/wallets/claim-links#claim-links): send via URL; recipient claims with email | +| Backend automation | [Delegated access](/concepts/policies/delegated-access-overview) and scoped signing policies | +| Multichain support | Chain-agnostic derivation and signing. See [Networks](/networks/overview) and [Wallets Concept](/concepts/wallets) | +| Fast integration | Use the [Embedded Wallet Kit](/sdks/react/index) for built-in auth and wallet UI components. See [Quickstart](/getting-started/embedded-wallet-quickstart) | + +## Next steps + + + + Explore the live demo, clone a starter app, or jump straight into building. + + + Step-by-step guides for React, React Native, Flutter, Swift, and Kotlin. + + diff --git a/embedded-wallets/overview-2.mdx b/embedded-wallets/overview-2.mdx new file mode 100644 index 00000000..bdcb5be8 --- /dev/null +++ b/embedded-wallets/overview-2.mdx @@ -0,0 +1,101 @@ +--- +title: "Overview" +sidebarTitle: "Overview 2" +--- + +## What are embedded wallets? + +An embedded wallet is a crypto wallet built directly into your application. Instead of asking users to install a browser extension or manage seed phrases, your app handles wallet creation, authentication, and signing behind the scenes. **Users interact with your product; the wallet is infrastructure they never have to think about.** + +## Why Turnkey for embedded wallets? + +Building embedded wallets from scratch means solving key management, multi-chain signing, authentication, custody models, and policy controls, all without exposing private keys. Turnkey handles this infrastructure so you can focus on your product. + +With Turnkey, you can: + +- Authenticate users via email, phone number, biometrics, social logins, or passkeys +- Create and manage wallets across multiple chains +- Configure custodial, non-custodial, or hybrid custody models +- Control signing permissions with a programmable policy engine +- Sponsor gas so users never need native tokens +- Leverage pre-built UI components or build fully custom experiences +- Import and export keys to support user sovereignty + +## How it works + +User authentication flows into a signed request to Turnkey. Inside the secure enclave, the +[policy engine](/concepts/policies/overview) evaluates the request; key derivation and signing +follow, and only the signature is returned. Your app can then broadcast the transaction through +another provider or with +[Turnkey Transaction Management](/concepts/transaction-management). + + + ![Embedded Wallets architecture: user/service, wallets, policy engine, authenticators, + secure enclave infrastructure](/assets/files/embedded-consumer-wallet.png) + + +### Custody models + +We recommend creating a Turnkey [sub-organization](/concepts/sub-organizations) for each end user. This gives every user a fully isolated environment with their own wallets, credentials, and policies. + +Private keys in Turnkey never leave the [secure enclave](/security/secure-enclaves). Custody is determined by who holds the credentials that can authorize the enclave to sign. + +- **Non-custodial:** The user is the sole party with signing authority. Only their authenticator (passkey, email, biometric) can authorize the enclave to produce a signature. Users can [export their keys](/products/company-wallets/features/export-wallets) to access assets independently of your application. +- **Custodial:** Your application holds signing authority (via API key) and can authorize transactions without per-action user approval. Common for automated workflows like trading or subscription payments. +- **Hybrid:** Both the user and your application hold credentials, but [policies](/concepts/policies/quickstart) define what each party can authorize. For example, the user controls asset transfers while your app handles gas sponsorship or scheduled operations. + +Turnkey supports all three models. The custody configuration is up to your application and can be tailored to match your product's requirements. + +### Security model + +- **Keys never leave the enclave.** Private keys live in [Trusted Execution Environments (TEEs)](/security/secure-enclaves). All derivation and signing happen inside verifiable infrastructure; only signatures are returned. +- **Authenticator-bound requests.** Every sensitive operation is signed by a user-held authenticator (passkey, email, etc.). The enclave verifies the signature before performing the operation. See [Authentication Overview](/authentication/overview). +- **Scoped, programmable control.** Choose non-custodial, hybrid, or app-controlled custody. [Policies](/concepts/policies/quickstart) and sub-organization isolation limit who can sign what. +- **Trusted vs. untrusted separation.** Verification and execution run only inside secure enclaves. A breach of your app or backend does not expose keys or signing capability. + +For a deeper look, see [Security](/security/our-approach) and [Secure Enclaves](/security/secure-enclaves). + +## Building with Turnkey + +For React applications, the **[Embedded Wallet Kit (EWK)](/sdks/react/index)** is the recommended starting point. It provides pre-built auth and wallet UI components, a hook-based API, and requires no backend. It is the most opinionated path, designed to get you to a working embedded wallet with minimal configuration. + +Turnkey also provides SDKs for [React Native](/sdks/react-native/overview), [Swift](/sdks/swift/overview), [Kotlin](/sdks/kotlin/overview), and [Flutter](/sdks/flutter/index). For fully custom implementations, you can call the Turnkey API directly. + +See the [Integration Guide](/embedded-wallets/integration-guide/overview) to start building, or the [SDK Reference](/sdks/introduction) for detailed method documentation. + +## Use cases + +Embedded wallets serve different needs depending on who holds the wallet and how it's operated. Choose the pattern that matches what you're building. + + + + One wallet per end user. Users authenticate with passkeys, email, or social login. No seed phrases or browser extensions. + + + Shared wallets with role-based signing controls for teams, operators, and finance workflows. + + + White-labeled wallet infrastructure for platforms that resell embedded wallets to their own customers. + + + Delegated wallet access for AI agents and automated systems, scoped by granular policy controls. + + + +## Ready to build? + +- [Quickstart](/getting-started/embedded-wallet-quickstart) — explore the live demo, clone a starter app, or jump straight into building +- [Integration Guide](/embedded-wallets/integration-guide/overview) — step-by-step guides for React, React Native, Flutter, Swift, and Kotlin +- [Documentation](/authentication/overview) — dig into the underlying concepts: auth, wallets, policies, and more diff --git a/embedded-wallets/overview.mdx b/embedded-wallets/overview.mdx index 017ce0a8..607f4d8f 100644 --- a/embedded-wallets/overview.mdx +++ b/embedded-wallets/overview.mdx @@ -69,6 +69,6 @@ Find guidance tailored to what you're building. ## Ready to build? -- [Quickstart](/getting-started/embedded-wallet-quickstart) — get your first embedded wallet running -- [Demos](/embedded-wallets/demos) — clone a full working app as a starting point +- [Quickstart](/getting-started/embedded-wallet-quickstart) — explore the live demo, clone a starter app, or jump straight into building +- [Integration Guide](/embedded-wallets/integration-guide/overview) — step-by-step guides for React, React Native, Flutter, Swift, and Kotlin - [Documentation](/authentication/overview) — dig into the underlying concepts: auth, wallets, policies, and more From b4d84e2ebd51b5888cce56307c7431852adc166a Mon Sep 17 00:00:00 2001 From: Henry Wilson Date: Mon, 4 May 2026 16:10:30 -0400 Subject: [PATCH 026/117] fix embedded wallet kit demo and provisionally combine sdk & api reference tabs --- docs.json | 753 +++++++++--------- .../embedded-wallet-quickstart.mdx | 59 +- 2 files changed, 418 insertions(+), 394 deletions(-) diff --git a/docs.json b/docs.json index 3960df3f..e5be7b74 100644 --- a/docs.json +++ b/docs.json @@ -523,179 +523,7 @@ { "group": "SDK reference", "pages": [ - "sdks/introduction", - { - "group": "React", - "pages": [ - { - "group": "SDK reference", - "pages": [ - "generated-docs/react-wallet-kit/client-context-type-add-oauth-provider", - "generated-docs/react-wallet-kit/client-context-type-add-passkey", - "generated-docs/react-wallet-kit/client-context-type-build-wallet-login-request", - "generated-docs/react-wallet-kit/client-context-type-clear-all-sessions", - "generated-docs/react-wallet-kit/client-context-type-clear-session", - "generated-docs/react-wallet-kit/client-context-type-clear-unused-key-pairs", - "generated-docs/react-wallet-kit/client-context-type-complete-oauth", - "generated-docs/react-wallet-kit/client-context-type-complete-otp", - "generated-docs/react-wallet-kit/client-context-type-connect-wallet-account", - "generated-docs/react-wallet-kit/client-context-type-create-api-key-pair", - "generated-docs/react-wallet-kit/client-context-type-create-http-client", - "generated-docs/react-wallet-kit/client-context-type-create-passkey", - "generated-docs/react-wallet-kit/client-context-type-create-wallet", - "generated-docs/react-wallet-kit/client-context-type-create-wallet-accounts", - "generated-docs/react-wallet-kit/client-context-type-delete-sub-organization", - "generated-docs/react-wallet-kit/client-context-type-disconnect-wallet-account", - "generated-docs/react-wallet-kit/client-context-type-eth-send-erc20-transfer", - "generated-docs/react-wallet-kit/client-context-type-eth-send-transaction", - "generated-docs/react-wallet-kit/client-context-type-export-private-key", - "generated-docs/react-wallet-kit/client-context-type-export-wallet", - "generated-docs/react-wallet-kit/client-context-type-export-wallet-account", - "generated-docs/react-wallet-kit/client-context-type-fetch-boot-proof-for-app-proof", - "generated-docs/react-wallet-kit/client-context-type-fetch-or-create-p256-api-key-user", - "generated-docs/react-wallet-kit/client-context-type-fetch-or-create-policies", - "generated-docs/react-wallet-kit/client-context-type-fetch-private-keys", - "generated-docs/react-wallet-kit/client-context-type-fetch-user", - "generated-docs/react-wallet-kit/client-context-type-fetch-wallet-accounts", - "generated-docs/react-wallet-kit/client-context-type-fetch-wallet-providers", - "generated-docs/react-wallet-kit/client-context-type-fetch-wallets", - "generated-docs/react-wallet-kit/client-context-type-get-active-session-key", - "generated-docs/react-wallet-kit/client-context-type-get-all-sessions", - "generated-docs/react-wallet-kit/client-context-type-get-proxy-auth-config", - "generated-docs/react-wallet-kit/client-context-type-get-session", - "generated-docs/react-wallet-kit/client-context-type-handle-add-email", - "generated-docs/react-wallet-kit/client-context-type-handle-add-oauth-provider", - "generated-docs/react-wallet-kit/client-context-type-handle-add-passkey", - "generated-docs/react-wallet-kit/client-context-type-handle-add-phone-number", - "generated-docs/react-wallet-kit/client-context-type-handle-apple-oauth", - "generated-docs/react-wallet-kit/client-context-type-handle-connect-external-wallet", - "generated-docs/react-wallet-kit/client-context-type-handle-discord-oauth", - "generated-docs/react-wallet-kit/client-context-type-handle-export-private-key", - "generated-docs/react-wallet-kit/client-context-type-handle-export-wallet", - "generated-docs/react-wallet-kit/client-context-type-handle-export-wallet-account", - "generated-docs/react-wallet-kit/client-context-type-handle-facebook-oauth", - "generated-docs/react-wallet-kit/client-context-type-handle-google-oauth", - "generated-docs/react-wallet-kit/client-context-type-handle-import-private-key", - "generated-docs/react-wallet-kit/client-context-type-handle-import-wallet", - "generated-docs/react-wallet-kit/client-context-type-handle-login", - "generated-docs/react-wallet-kit/client-context-type-handle-on-ramp", - "generated-docs/react-wallet-kit/client-context-type-handle-remove-oauth-provider", - "generated-docs/react-wallet-kit/client-context-type-handle-remove-passkey", - "generated-docs/react-wallet-kit/client-context-type-handle-remove-user-email", - "generated-docs/react-wallet-kit/client-context-type-handle-remove-user-phone-number", - "generated-docs/react-wallet-kit/client-context-type-handle-send-erc20-transfer", - "generated-docs/react-wallet-kit/client-context-type-handle-send-transaction", - "generated-docs/react-wallet-kit/client-context-type-handle-sign-message", - "generated-docs/react-wallet-kit/client-context-type-handle-update-user-email", - "generated-docs/react-wallet-kit/client-context-type-handle-update-user-name", - "generated-docs/react-wallet-kit/client-context-type-handle-update-user-phone-number", - "generated-docs/react-wallet-kit/client-context-type-handle-verify-app-proofs", - "generated-docs/react-wallet-kit/client-context-type-handle-xoauth", - "generated-docs/react-wallet-kit/client-context-type-import-private-key", - "generated-docs/react-wallet-kit/client-context-type-import-wallet", - "generated-docs/react-wallet-kit/client-context-type-init-otp", - "generated-docs/react-wallet-kit/client-context-type-login-or-signup-with-wallet", - "generated-docs/react-wallet-kit/client-context-type-login-with-oauth", - "generated-docs/react-wallet-kit/client-context-type-login-with-otp", - "generated-docs/react-wallet-kit/client-context-type-login-with-passkey", - "generated-docs/react-wallet-kit/client-context-type-login-with-wallet", - "generated-docs/react-wallet-kit/client-context-type-logout", - "generated-docs/react-wallet-kit/client-context-type-refresh-session", - "generated-docs/react-wallet-kit/client-context-type-refresh-user", - "generated-docs/react-wallet-kit/client-context-type-refresh-wallets", - "generated-docs/react-wallet-kit/client-context-type-remove-oauth-providers", - "generated-docs/react-wallet-kit/client-context-type-remove-passkeys", - "generated-docs/react-wallet-kit/client-context-type-remove-user-email", - "generated-docs/react-wallet-kit/client-context-type-remove-user-phone-number", - "generated-docs/react-wallet-kit/client-context-type-set-active-session", - "generated-docs/react-wallet-kit/client-context-type-sign-and-send-transaction", - "generated-docs/react-wallet-kit/client-context-type-sign-message", - "generated-docs/react-wallet-kit/client-context-type-sign-transaction", - "generated-docs/react-wallet-kit/client-context-type-sign-up-with-oauth", - "generated-docs/react-wallet-kit/client-context-type-sign-up-with-otp", - "generated-docs/react-wallet-kit/client-context-type-sign-up-with-passkey", - "generated-docs/react-wallet-kit/client-context-type-sign-up-with-wallet", - "generated-docs/react-wallet-kit/client-context-type-sol-send-transaction", - "generated-docs/react-wallet-kit/client-context-type-store-session", - "generated-docs/react-wallet-kit/client-context-type-switch-wallet-account-chain", - "generated-docs/react-wallet-kit/client-context-type-update-user-email", - "generated-docs/react-wallet-kit/client-context-type-update-user-name", - "generated-docs/react-wallet-kit/client-context-type-update-user-phone-number", - "generated-docs/react-wallet-kit/client-context-type-verify-app-proofs", - "generated-docs/react-wallet-kit/client-context-type-verify-otp", - "generated-docs/react-wallet-kit/turnkey-provider-config" - ] - } - ] - }, - { - "group": "React Native", - "pages": [ - { - "group": "SDK reference", - "pages": [ - "generated-docs/react-native-wallet-kit/client-context-type-add-oauth-provider", - "generated-docs/react-native-wallet-kit/client-context-type-add-passkey", - "generated-docs/react-native-wallet-kit/client-context-type-clear-all-sessions", - "generated-docs/react-native-wallet-kit/client-context-type-clear-session", - "generated-docs/react-native-wallet-kit/client-context-type-clear-unused-key-pairs", - "generated-docs/react-native-wallet-kit/client-context-type-complete-oauth", - "generated-docs/react-native-wallet-kit/client-context-type-complete-otp", - "generated-docs/react-native-wallet-kit/client-context-type-create-api-key-pair", - "generated-docs/react-native-wallet-kit/client-context-type-create-http-client", - "generated-docs/react-native-wallet-kit/client-context-type-create-passkey", - "generated-docs/react-native-wallet-kit/client-context-type-create-wallet", - "generated-docs/react-native-wallet-kit/client-context-type-create-wallet-accounts", - "generated-docs/react-native-wallet-kit/client-context-type-delete-sub-organization", - "generated-docs/react-native-wallet-kit/client-context-type-eth-send-erc20-transfer", - "generated-docs/react-native-wallet-kit/client-context-type-eth-send-transaction", - "generated-docs/react-native-wallet-kit/client-context-type-fetch-boot-proof-for-app-proof", - "generated-docs/react-native-wallet-kit/client-context-type-fetch-or-create-p256-api-key-user", - "generated-docs/react-native-wallet-kit/client-context-type-fetch-or-create-policies", - "generated-docs/react-native-wallet-kit/client-context-type-fetch-private-keys", - "generated-docs/react-native-wallet-kit/client-context-type-fetch-user", - "generated-docs/react-native-wallet-kit/client-context-type-fetch-wallet-accounts", - "generated-docs/react-native-wallet-kit/client-context-type-fetch-wallets", - "generated-docs/react-native-wallet-kit/client-context-type-get-active-session-key", - "generated-docs/react-native-wallet-kit/client-context-type-get-all-sessions", - "generated-docs/react-native-wallet-kit/client-context-type-get-proxy-auth-config", - "generated-docs/react-native-wallet-kit/client-context-type-get-session", - "generated-docs/react-native-wallet-kit/client-context-type-handle-apple-oauth", - "generated-docs/react-native-wallet-kit/client-context-type-handle-discord-oauth", - "generated-docs/react-native-wallet-kit/client-context-type-handle-facebook-oauth", - "generated-docs/react-native-wallet-kit/client-context-type-handle-google-oauth", - "generated-docs/react-native-wallet-kit/client-context-type-handle-xoauth", - "generated-docs/react-native-wallet-kit/client-context-type-init-otp", - "generated-docs/react-native-wallet-kit/client-context-type-login-with-oauth", - "generated-docs/react-native-wallet-kit/client-context-type-login-with-otp", - "generated-docs/react-native-wallet-kit/client-context-type-login-with-passkey", - "generated-docs/react-native-wallet-kit/client-context-type-logout", - "generated-docs/react-native-wallet-kit/client-context-type-refresh-session", - "generated-docs/react-native-wallet-kit/client-context-type-refresh-user", - "generated-docs/react-native-wallet-kit/client-context-type-refresh-wallets", - "generated-docs/react-native-wallet-kit/client-context-type-remove-oauth-providers", - "generated-docs/react-native-wallet-kit/client-context-type-remove-passkeys", - "generated-docs/react-native-wallet-kit/client-context-type-remove-user-email", - "generated-docs/react-native-wallet-kit/client-context-type-remove-user-phone-number", - "generated-docs/react-native-wallet-kit/client-context-type-set-active-session", - "generated-docs/react-native-wallet-kit/client-context-type-sign-and-send-transaction", - "generated-docs/react-native-wallet-kit/client-context-type-sign-message", - "generated-docs/react-native-wallet-kit/client-context-type-sign-transaction", - "generated-docs/react-native-wallet-kit/client-context-type-sign-up-with-oauth", - "generated-docs/react-native-wallet-kit/client-context-type-sign-up-with-otp", - "generated-docs/react-native-wallet-kit/client-context-type-sign-up-with-passkey", - "generated-docs/react-native-wallet-kit/client-context-type-sol-send-transaction", - "generated-docs/react-native-wallet-kit/client-context-type-store-session", - "generated-docs/react-native-wallet-kit/client-context-type-update-user-email", - "generated-docs/react-native-wallet-kit/client-context-type-update-user-name", - "generated-docs/react-native-wallet-kit/client-context-type-update-user-phone-number", - "generated-docs/react-native-wallet-kit/client-context-type-verify-app-proofs", - "generated-docs/react-native-wallet-kit/client-context-type-verify-otp", - "generated-docs/react-native-wallet-kit/turnkey-provider-config" - ] - } - ] - }, + "category/advanced", { "group": "Flutter", "pages": [ @@ -722,78 +550,7 @@ "sdks/typescript-frontend/auth", "sdks/typescript-frontend/advanced-backend-authentication", "sdks/typescript-frontend/advanced-api-requests", - "sdks/typescript-frontend/legacy", - { - "group": "SDK reference", - "pages": [ - "generated-docs/core/turnkey-client-add-oauth-provider", - "generated-docs/core/turnkey-client-add-passkey", - "generated-docs/core/turnkey-client-build-wallet-login-request", - "generated-docs/core/turnkey-client-clear-all-sessions", - "generated-docs/core/turnkey-client-clear-session", - "generated-docs/core/turnkey-client-clear-unused-key-pairs", - "generated-docs/core/turnkey-client-complete-oauth", - "generated-docs/core/turnkey-client-complete-otp", - "generated-docs/core/turnkey-client-connect-wallet-account", - "generated-docs/core/turnkey-client-constructor", - "generated-docs/core/turnkey-client-create-api-key-pair", - "generated-docs/core/turnkey-client-create-http-client", - "generated-docs/core/turnkey-client-create-passkey", - "generated-docs/core/turnkey-client-create-wallet", - "generated-docs/core/turnkey-client-create-wallet-accounts", - "generated-docs/core/turnkey-client-delete-sub-organization", - "generated-docs/core/turnkey-client-disconnect-wallet-account", - "generated-docs/core/turnkey-client-eth-send-erc20-transfer", - "generated-docs/core/turnkey-client-eth-send-transaction", - "generated-docs/core/turnkey-client-export-private-key", - "generated-docs/core/turnkey-client-export-wallet", - "generated-docs/core/turnkey-client-export-wallet-account", - "generated-docs/core/turnkey-client-fetch-boot-proof-for-app-proof", - "generated-docs/core/turnkey-client-fetch-or-create-p256-api-key-user", - "generated-docs/core/turnkey-client-fetch-or-create-policies", - "generated-docs/core/turnkey-client-fetch-private-keys", - "generated-docs/core/turnkey-client-fetch-user", - "generated-docs/core/turnkey-client-fetch-wallet-accounts", - "generated-docs/core/turnkey-client-fetch-wallet-providers", - "generated-docs/core/turnkey-client-fetch-wallets", - "generated-docs/core/turnkey-client-get-active-session-key", - "generated-docs/core/turnkey-client-get-all-sessions", - "generated-docs/core/turnkey-client-get-proxy-auth-config", - "generated-docs/core/turnkey-client-get-session", - "generated-docs/core/turnkey-client-import-private-key", - "generated-docs/core/turnkey-client-import-wallet", - "generated-docs/core/turnkey-client-init", - "generated-docs/core/turnkey-client-init-otp", - "generated-docs/core/turnkey-client-login-or-signup-with-wallet", - "generated-docs/core/turnkey-client-login-with-oauth", - "generated-docs/core/turnkey-client-login-with-otp", - "generated-docs/core/turnkey-client-login-with-passkey", - "generated-docs/core/turnkey-client-login-with-wallet", - "generated-docs/core/turnkey-client-logout", - "generated-docs/core/turnkey-client-poll-transaction-status", - "generated-docs/core/turnkey-client-refresh-session", - "generated-docs/core/turnkey-client-remove-oauth-providers", - "generated-docs/core/turnkey-client-remove-passkeys", - "generated-docs/core/turnkey-client-remove-user-email", - "generated-docs/core/turnkey-client-remove-user-phone-number", - "generated-docs/core/turnkey-client-set-active-session", - "generated-docs/core/turnkey-client-sign-and-send-transaction", - "generated-docs/core/turnkey-client-sign-message", - "generated-docs/core/turnkey-client-sign-transaction", - "generated-docs/core/turnkey-client-sign-up-with-oauth", - "generated-docs/core/turnkey-client-sign-up-with-otp", - "generated-docs/core/turnkey-client-sign-up-with-passkey", - "generated-docs/core/turnkey-client-sign-up-with-wallet", - "generated-docs/core/turnkey-client-sol-send-transaction", - "generated-docs/core/turnkey-client-store-session", - "generated-docs/core/turnkey-client-switch-wallet-account-chain", - "generated-docs/core/turnkey-client-update-user-email", - "generated-docs/core/turnkey-client-update-user-name", - "generated-docs/core/turnkey-client-update-user-phone-number", - "generated-docs/core/turnkey-client-verify-app-proofs", - "generated-docs/core/turnkey-client-verify-otp" - ] - } + "sdks/typescript-frontend/legacy" ] }, "sdks/javascript-server", @@ -835,144 +592,388 @@ ] }, { - "tab": "API reference", + "tab": "API & SDK reference", "pages": [ { - "group": "Overview", - "pages": [ - "developer-reference/api-overview/intro", - "developer-reference/api-overview/stamps", - "developer-reference/api-overview/queries", - "developer-reference/api-overview/submissions", - "developer-reference/api-overview/errors" - ] - }, - { - "group": "Activities", + "group": "REST API", "pages": [ - "api-reference/activities/approve-activity", - "api-reference/activities/broadcast-evm-transaction", - "api-reference/activities/broadcast-svm-transaction", - "api-reference/activities/create-a-fiat-on-ramp-credential", - "api-reference/activities/create-an-oauth-20-credential", - "api-reference/activities/create-api-keys", - "api-reference/activities/create-authenticators", - "api-reference/activities/create-invitations", - "api-reference/activities/create-oauth-providers", - "api-reference/activities/create-policies", - "api-reference/activities/create-policy", - "api-reference/activities/create-private-key-tag", - "api-reference/activities/create-private-keys", - "api-reference/activities/create-read-only-session", - "api-reference/activities/create-read-write-session", - "api-reference/activities/create-smart-contract-interface", - "api-reference/activities/create-sub-organization", - "api-reference/activities/create-user-tag", - "api-reference/activities/create-users", - "api-reference/activities/create-wallet", - "api-reference/activities/create-wallet-accounts", - "api-reference/activities/create-webhook-endpoint", - "api-reference/activities/delete-a-fiat-on-ramp-credential", - "api-reference/activities/delete-an-oauth-20-credential", - "api-reference/activities/delete-api-keys", - "api-reference/activities/delete-authenticators", - "api-reference/activities/delete-invitation", - "api-reference/activities/delete-oauth-providers", - "api-reference/activities/delete-policies", - "api-reference/activities/delete-policy", - "api-reference/activities/delete-private-key-tags", - "api-reference/activities/delete-private-keys", - "api-reference/activities/delete-smart-contract-interface", - "api-reference/activities/delete-sub-organization", - "api-reference/activities/delete-user-tags", - "api-reference/activities/delete-users", - "api-reference/activities/delete-wallet-accounts", - "api-reference/activities/delete-wallets", - "api-reference/activities/delete-webhook-endpoint", - "api-reference/activities/export-private-key", - "api-reference/activities/export-wallet", - "api-reference/activities/export-wallet-account", - "api-reference/activities/import-private-key", - "api-reference/activities/import-wallet", - "api-reference/activities/init-email-recovery", - "api-reference/activities/init-fiat-on-ramp", - "api-reference/activities/init-generic-otp", - "api-reference/activities/init-import-private-key", - "api-reference/activities/init-import-wallet", - "api-reference/activities/init-otp-auth", - "api-reference/activities/login-with-a-stamp", - "api-reference/activities/login-with-oauth", - "api-reference/activities/login-with-otp", - "api-reference/activities/oauth", - "api-reference/activities/oauth-20-authentication", - "api-reference/activities/otp-auth", - "api-reference/activities/perform-email-auth", - "api-reference/activities/recover-a-user", - "api-reference/activities/reject-activity", - "api-reference/activities/remove-organization-feature", - "api-reference/activities/set-organization-feature", - "api-reference/activities/sign-raw-payload", - "api-reference/activities/sign-raw-payloads", - "api-reference/activities/sign-transaction", - "api-reference/activities/update-a-fiat-on-ramp-credential", - "api-reference/activities/update-an-oauth-20-credential", - "api-reference/activities/update-organization-name", - "api-reference/activities/update-policy", - "api-reference/activities/update-private-key-tag", - "api-reference/activities/update-root-quorum", - "api-reference/activities/update-user", - "api-reference/activities/update-user-tag", - "api-reference/activities/update-users-email", - "api-reference/activities/update-users-name", - "api-reference/activities/update-users-phone-number", - "api-reference/activities/update-wallet", - "api-reference/activities/update-webhook-endpoint", - "api-reference/activities/verify-generic-otp" + { + "group": "Overview", + "pages": [ + "developer-reference/api-overview/intro", + "developer-reference/api-overview/stamps", + "developer-reference/api-overview/queries", + "developer-reference/api-overview/submissions", + "developer-reference/api-overview/errors" + ] + }, + { + "group": "Activities", + "pages": [ + "api-reference/activities/approve-activity", + "api-reference/activities/broadcast-evm-transaction", + "api-reference/activities/broadcast-svm-transaction", + "api-reference/activities/create-a-fiat-on-ramp-credential", + "api-reference/activities/create-an-oauth-20-credential", + "api-reference/activities/create-api-keys", + "api-reference/activities/create-authenticators", + "api-reference/activities/create-invitations", + "api-reference/activities/create-oauth-providers", + "api-reference/activities/create-policies", + "api-reference/activities/create-policy", + "api-reference/activities/create-private-key-tag", + "api-reference/activities/create-private-keys", + "api-reference/activities/create-read-only-session", + "api-reference/activities/create-read-write-session", + "api-reference/activities/create-smart-contract-interface", + "api-reference/activities/create-sub-organization", + "api-reference/activities/create-user-tag", + "api-reference/activities/create-users", + "api-reference/activities/create-wallet", + "api-reference/activities/create-wallet-accounts", + "api-reference/activities/create-webhook-endpoint", + "api-reference/activities/delete-a-fiat-on-ramp-credential", + "api-reference/activities/delete-an-oauth-20-credential", + "api-reference/activities/delete-api-keys", + "api-reference/activities/delete-authenticators", + "api-reference/activities/delete-invitation", + "api-reference/activities/delete-oauth-providers", + "api-reference/activities/delete-policies", + "api-reference/activities/delete-policy", + "api-reference/activities/delete-private-key-tags", + "api-reference/activities/delete-private-keys", + "api-reference/activities/delete-smart-contract-interface", + "api-reference/activities/delete-sub-organization", + "api-reference/activities/delete-user-tags", + "api-reference/activities/delete-users", + "api-reference/activities/delete-wallet-accounts", + "api-reference/activities/delete-wallets", + "api-reference/activities/delete-webhook-endpoint", + "api-reference/activities/export-private-key", + "api-reference/activities/export-wallet", + "api-reference/activities/export-wallet-account", + "api-reference/activities/import-private-key", + "api-reference/activities/import-wallet", + "api-reference/activities/init-email-recovery", + "api-reference/activities/init-fiat-on-ramp", + "api-reference/activities/init-generic-otp", + "api-reference/activities/init-import-private-key", + "api-reference/activities/init-import-wallet", + "api-reference/activities/init-otp-auth", + "api-reference/activities/login-with-a-stamp", + "api-reference/activities/login-with-oauth", + "api-reference/activities/login-with-otp", + "api-reference/activities/oauth", + "api-reference/activities/oauth-20-authentication", + "api-reference/activities/otp-auth", + "api-reference/activities/perform-email-auth", + "api-reference/activities/recover-a-user", + "api-reference/activities/reject-activity", + "api-reference/activities/remove-organization-feature", + "api-reference/activities/set-organization-feature", + "api-reference/activities/sign-raw-payload", + "api-reference/activities/sign-raw-payloads", + "api-reference/activities/sign-transaction", + "api-reference/activities/update-a-fiat-on-ramp-credential", + "api-reference/activities/update-an-oauth-20-credential", + "api-reference/activities/update-organization-name", + "api-reference/activities/update-policy", + "api-reference/activities/update-private-key-tag", + "api-reference/activities/update-root-quorum", + "api-reference/activities/update-user", + "api-reference/activities/update-user-tag", + "api-reference/activities/update-users-email", + "api-reference/activities/update-users-name", + "api-reference/activities/update-users-phone-number", + "api-reference/activities/update-wallet", + "api-reference/activities/update-webhook-endpoint", + "api-reference/activities/verify-generic-otp" + ] + }, + { + "group": "Queries", + "pages": [ + "api-reference/queries/get-a-specific-boot-proof", + "api-reference/queries/get-activity", + "api-reference/queries/get-api-key", + "api-reference/queries/get-api-keys", + "api-reference/queries/get-authenticator", + "api-reference/queries/get-authenticators", + "api-reference/queries/get-balances", + "api-reference/queries/get-configs", + "api-reference/queries/get-gas-usage", + "api-reference/queries/get-nonces", + "api-reference/queries/get-oauth-20-credential", + "api-reference/queries/get-oauth-providers", + "api-reference/queries/get-on-ramp-transaction-status", + "api-reference/queries/get-policy", + "api-reference/queries/get-policy-evaluations", + "api-reference/queries/get-private-key", + "api-reference/queries/get-send-transaction-status", + "api-reference/queries/get-smart-contract-interface", + "api-reference/queries/get-sub-organizations", + "api-reference/queries/get-the-latest-boot-proof-for-an-app", + "api-reference/queries/get-tvc-app-status", + "api-reference/queries/get-user", + "api-reference/queries/get-verified-sub-organizations", + "api-reference/queries/get-wallet", + "api-reference/queries/get-wallet-account", + "api-reference/queries/list-activities", + "api-reference/queries/list-app-proofs-for-an-activity", + "api-reference/queries/list-fiat-on-ramp-credentials", + "api-reference/queries/list-oauth-20-credentials", + "api-reference/queries/list-policies", + "api-reference/queries/list-private-key-tags", + "api-reference/queries/list-private-keys", + "api-reference/queries/list-smart-contract-interfaces", + "api-reference/queries/list-supported-assets", + "api-reference/queries/list-user-tags", + "api-reference/queries/list-users", + "api-reference/queries/list-wallets", + "api-reference/queries/list-wallets-accounts", + "api-reference/queries/list-webhook-endpoints", + "api-reference/queries/who-am-i" + ] + } ] }, { - "group": "Queries", + "group": "SDK reference", "pages": [ - "api-reference/queries/get-a-specific-boot-proof", - "api-reference/queries/get-activity", - "api-reference/queries/get-api-key", - "api-reference/queries/get-api-keys", - "api-reference/queries/get-authenticator", - "api-reference/queries/get-authenticators", - "api-reference/queries/get-balances", - "api-reference/queries/get-configs", - "api-reference/queries/get-gas-usage", - "api-reference/queries/get-nonces", - "api-reference/queries/get-oauth-20-credential", - "api-reference/queries/get-oauth-providers", - "api-reference/queries/get-on-ramp-transaction-status", - "api-reference/queries/get-policy", - "api-reference/queries/get-policy-evaluations", - "api-reference/queries/get-private-key", - "api-reference/queries/get-send-transaction-status", - "api-reference/queries/get-smart-contract-interface", - "api-reference/queries/get-sub-organizations", - "api-reference/queries/get-the-latest-boot-proof-for-an-app", - "api-reference/queries/get-tvc-app-status", - "api-reference/queries/get-user", - "api-reference/queries/get-verified-sub-organizations", - "api-reference/queries/get-wallet", - "api-reference/queries/get-wallet-account", - "api-reference/queries/list-activities", - "api-reference/queries/list-app-proofs-for-an-activity", - "api-reference/queries/list-fiat-on-ramp-credentials", - "api-reference/queries/list-oauth-20-credentials", - "api-reference/queries/list-policies", - "api-reference/queries/list-private-key-tags", - "api-reference/queries/list-private-keys", - "api-reference/queries/list-smart-contract-interfaces", - "api-reference/queries/list-supported-assets", - "api-reference/queries/list-user-tags", - "api-reference/queries/list-users", - "api-reference/queries/list-wallets", - "api-reference/queries/list-wallets-accounts", - "api-reference/queries/list-webhook-endpoints", - "api-reference/queries/who-am-i" + "sdks/introduction", + { + "group": "React wallet kit", + "pages": [ + "generated-docs/react-wallet-kit/client-context-type-add-oauth-provider", + "generated-docs/react-wallet-kit/client-context-type-add-passkey", + "generated-docs/react-wallet-kit/client-context-type-build-wallet-login-request", + "generated-docs/react-wallet-kit/client-context-type-clear-all-sessions", + "generated-docs/react-wallet-kit/client-context-type-clear-session", + "generated-docs/react-wallet-kit/client-context-type-clear-unused-key-pairs", + "generated-docs/react-wallet-kit/client-context-type-complete-oauth", + "generated-docs/react-wallet-kit/client-context-type-complete-otp", + "generated-docs/react-wallet-kit/client-context-type-connect-wallet-account", + "generated-docs/react-wallet-kit/client-context-type-create-api-key-pair", + "generated-docs/react-wallet-kit/client-context-type-create-http-client", + "generated-docs/react-wallet-kit/client-context-type-create-passkey", + "generated-docs/react-wallet-kit/client-context-type-create-wallet", + "generated-docs/react-wallet-kit/client-context-type-create-wallet-accounts", + "generated-docs/react-wallet-kit/client-context-type-delete-sub-organization", + "generated-docs/react-wallet-kit/client-context-type-disconnect-wallet-account", + "generated-docs/react-wallet-kit/client-context-type-eth-send-erc20-transfer", + "generated-docs/react-wallet-kit/client-context-type-eth-send-transaction", + "generated-docs/react-wallet-kit/client-context-type-export-private-key", + "generated-docs/react-wallet-kit/client-context-type-export-wallet", + "generated-docs/react-wallet-kit/client-context-type-export-wallet-account", + "generated-docs/react-wallet-kit/client-context-type-fetch-boot-proof-for-app-proof", + "generated-docs/react-wallet-kit/client-context-type-fetch-or-create-p256-api-key-user", + "generated-docs/react-wallet-kit/client-context-type-fetch-or-create-policies", + "generated-docs/react-wallet-kit/client-context-type-fetch-private-keys", + "generated-docs/react-wallet-kit/client-context-type-fetch-user", + "generated-docs/react-wallet-kit/client-context-type-fetch-wallet-accounts", + "generated-docs/react-wallet-kit/client-context-type-fetch-wallet-providers", + "generated-docs/react-wallet-kit/client-context-type-fetch-wallets", + "generated-docs/react-wallet-kit/client-context-type-get-active-session-key", + "generated-docs/react-wallet-kit/client-context-type-get-all-sessions", + "generated-docs/react-wallet-kit/client-context-type-get-proxy-auth-config", + "generated-docs/react-wallet-kit/client-context-type-get-session", + "generated-docs/react-wallet-kit/client-context-type-handle-add-email", + "generated-docs/react-wallet-kit/client-context-type-handle-add-oauth-provider", + "generated-docs/react-wallet-kit/client-context-type-handle-add-passkey", + "generated-docs/react-wallet-kit/client-context-type-handle-add-phone-number", + "generated-docs/react-wallet-kit/client-context-type-handle-apple-oauth", + "generated-docs/react-wallet-kit/client-context-type-handle-connect-external-wallet", + "generated-docs/react-wallet-kit/client-context-type-handle-discord-oauth", + "generated-docs/react-wallet-kit/client-context-type-handle-export-private-key", + "generated-docs/react-wallet-kit/client-context-type-handle-export-wallet", + "generated-docs/react-wallet-kit/client-context-type-handle-export-wallet-account", + "generated-docs/react-wallet-kit/client-context-type-handle-facebook-oauth", + "generated-docs/react-wallet-kit/client-context-type-handle-google-oauth", + "generated-docs/react-wallet-kit/client-context-type-handle-import-private-key", + "generated-docs/react-wallet-kit/client-context-type-handle-import-wallet", + "generated-docs/react-wallet-kit/client-context-type-handle-login", + "generated-docs/react-wallet-kit/client-context-type-handle-on-ramp", + "generated-docs/react-wallet-kit/client-context-type-handle-remove-oauth-provider", + "generated-docs/react-wallet-kit/client-context-type-handle-remove-passkey", + "generated-docs/react-wallet-kit/client-context-type-handle-remove-user-email", + "generated-docs/react-wallet-kit/client-context-type-handle-remove-user-phone-number", + "generated-docs/react-wallet-kit/client-context-type-handle-send-erc20-transfer", + "generated-docs/react-wallet-kit/client-context-type-handle-send-transaction", + "generated-docs/react-wallet-kit/client-context-type-handle-sign-message", + "generated-docs/react-wallet-kit/client-context-type-handle-update-user-email", + "generated-docs/react-wallet-kit/client-context-type-handle-update-user-name", + "generated-docs/react-wallet-kit/client-context-type-handle-update-user-phone-number", + "generated-docs/react-wallet-kit/client-context-type-handle-verify-app-proofs", + "generated-docs/react-wallet-kit/client-context-type-handle-xoauth", + "generated-docs/react-wallet-kit/client-context-type-import-private-key", + "generated-docs/react-wallet-kit/client-context-type-import-wallet", + "generated-docs/react-wallet-kit/client-context-type-init-otp", + "generated-docs/react-wallet-kit/client-context-type-login-or-signup-with-wallet", + "generated-docs/react-wallet-kit/client-context-type-login-with-oauth", + "generated-docs/react-wallet-kit/client-context-type-login-with-otp", + "generated-docs/react-wallet-kit/client-context-type-login-with-passkey", + "generated-docs/react-wallet-kit/client-context-type-login-with-wallet", + "generated-docs/react-wallet-kit/client-context-type-logout", + "generated-docs/react-wallet-kit/client-context-type-refresh-session", + "generated-docs/react-wallet-kit/client-context-type-refresh-user", + "generated-docs/react-wallet-kit/client-context-type-refresh-wallets", + "generated-docs/react-wallet-kit/client-context-type-remove-oauth-providers", + "generated-docs/react-wallet-kit/client-context-type-remove-passkeys", + "generated-docs/react-wallet-kit/client-context-type-remove-user-email", + "generated-docs/react-wallet-kit/client-context-type-remove-user-phone-number", + "generated-docs/react-wallet-kit/client-context-type-set-active-session", + "generated-docs/react-wallet-kit/client-context-type-sign-and-send-transaction", + "generated-docs/react-wallet-kit/client-context-type-sign-message", + "generated-docs/react-wallet-kit/client-context-type-sign-transaction", + "generated-docs/react-wallet-kit/client-context-type-sign-up-with-oauth", + "generated-docs/react-wallet-kit/client-context-type-sign-up-with-otp", + "generated-docs/react-wallet-kit/client-context-type-sign-up-with-passkey", + "generated-docs/react-wallet-kit/client-context-type-sign-up-with-wallet", + "generated-docs/react-wallet-kit/client-context-type-sol-send-transaction", + "generated-docs/react-wallet-kit/client-context-type-store-session", + "generated-docs/react-wallet-kit/client-context-type-switch-wallet-account-chain", + "generated-docs/react-wallet-kit/client-context-type-update-user-email", + "generated-docs/react-wallet-kit/client-context-type-update-user-name", + "generated-docs/react-wallet-kit/client-context-type-update-user-phone-number", + "generated-docs/react-wallet-kit/client-context-type-verify-app-proofs", + "generated-docs/react-wallet-kit/client-context-type-verify-otp", + "generated-docs/react-wallet-kit/turnkey-provider-config" + ] + }, + { + "group": "React Native wallet kit", + "pages": [ + "generated-docs/react-native-wallet-kit/client-context-type-add-oauth-provider", + "generated-docs/react-native-wallet-kit/client-context-type-add-passkey", + "generated-docs/react-native-wallet-kit/client-context-type-clear-all-sessions", + "generated-docs/react-native-wallet-kit/client-context-type-clear-session", + "generated-docs/react-native-wallet-kit/client-context-type-clear-unused-key-pairs", + "generated-docs/react-native-wallet-kit/client-context-type-complete-oauth", + "generated-docs/react-native-wallet-kit/client-context-type-complete-otp", + "generated-docs/react-native-wallet-kit/client-context-type-create-api-key-pair", + "generated-docs/react-native-wallet-kit/client-context-type-create-http-client", + "generated-docs/react-native-wallet-kit/client-context-type-create-passkey", + "generated-docs/react-native-wallet-kit/client-context-type-create-wallet", + "generated-docs/react-native-wallet-kit/client-context-type-create-wallet-accounts", + "generated-docs/react-native-wallet-kit/client-context-type-delete-sub-organization", + "generated-docs/react-native-wallet-kit/client-context-type-eth-send-erc20-transfer", + "generated-docs/react-native-wallet-kit/client-context-type-eth-send-transaction", + "generated-docs/react-native-wallet-kit/client-context-type-fetch-boot-proof-for-app-proof", + "generated-docs/react-native-wallet-kit/client-context-type-fetch-or-create-p256-api-key-user", + "generated-docs/react-native-wallet-kit/client-context-type-fetch-or-create-policies", + "generated-docs/react-native-wallet-kit/client-context-type-fetch-private-keys", + "generated-docs/react-native-wallet-kit/client-context-type-fetch-user", + "generated-docs/react-native-wallet-kit/client-context-type-fetch-wallet-accounts", + "generated-docs/react-native-wallet-kit/client-context-type-fetch-wallets", + "generated-docs/react-native-wallet-kit/client-context-type-get-active-session-key", + "generated-docs/react-native-wallet-kit/client-context-type-get-all-sessions", + "generated-docs/react-native-wallet-kit/client-context-type-get-proxy-auth-config", + "generated-docs/react-native-wallet-kit/client-context-type-get-session", + "generated-docs/react-native-wallet-kit/client-context-type-handle-apple-oauth", + "generated-docs/react-native-wallet-kit/client-context-type-handle-discord-oauth", + "generated-docs/react-native-wallet-kit/client-context-type-handle-facebook-oauth", + "generated-docs/react-native-wallet-kit/client-context-type-handle-google-oauth", + "generated-docs/react-native-wallet-kit/client-context-type-handle-xoauth", + "generated-docs/react-native-wallet-kit/client-context-type-init-otp", + "generated-docs/react-native-wallet-kit/client-context-type-login-with-oauth", + "generated-docs/react-native-wallet-kit/client-context-type-login-with-otp", + "generated-docs/react-native-wallet-kit/client-context-type-login-with-passkey", + "generated-docs/react-native-wallet-kit/client-context-type-logout", + "generated-docs/react-native-wallet-kit/client-context-type-refresh-session", + "generated-docs/react-native-wallet-kit/client-context-type-refresh-user", + "generated-docs/react-native-wallet-kit/client-context-type-refresh-wallets", + "generated-docs/react-native-wallet-kit/client-context-type-remove-oauth-providers", + "generated-docs/react-native-wallet-kit/client-context-type-remove-passkeys", + "generated-docs/react-native-wallet-kit/client-context-type-remove-user-email", + "generated-docs/react-native-wallet-kit/client-context-type-remove-user-phone-number", + "generated-docs/react-native-wallet-kit/client-context-type-set-active-session", + "generated-docs/react-native-wallet-kit/client-context-type-sign-and-send-transaction", + "generated-docs/react-native-wallet-kit/client-context-type-sign-message", + "generated-docs/react-native-wallet-kit/client-context-type-sign-transaction", + "generated-docs/react-native-wallet-kit/client-context-type-sign-up-with-oauth", + "generated-docs/react-native-wallet-kit/client-context-type-sign-up-with-otp", + "generated-docs/react-native-wallet-kit/client-context-type-sign-up-with-passkey", + "generated-docs/react-native-wallet-kit/client-context-type-sol-send-transaction", + "generated-docs/react-native-wallet-kit/client-context-type-store-session", + "generated-docs/react-native-wallet-kit/client-context-type-update-user-email", + "generated-docs/react-native-wallet-kit/client-context-type-update-user-name", + "generated-docs/react-native-wallet-kit/client-context-type-update-user-phone-number", + "generated-docs/react-native-wallet-kit/client-context-type-verify-app-proofs", + "generated-docs/react-native-wallet-kit/client-context-type-verify-otp", + "generated-docs/react-native-wallet-kit/turnkey-provider-config" + ] + }, + { + "group": "SDK server | Core", + "pages": [ + "generated-docs/core/turnkey-client-add-oauth-provider", + "generated-docs/core/turnkey-client-add-passkey", + "generated-docs/core/turnkey-client-build-wallet-login-request", + "generated-docs/core/turnkey-client-clear-all-sessions", + "generated-docs/core/turnkey-client-clear-session", + "generated-docs/core/turnkey-client-clear-unused-key-pairs", + "generated-docs/core/turnkey-client-complete-oauth", + "generated-docs/core/turnkey-client-complete-otp", + "generated-docs/core/turnkey-client-connect-wallet-account", + "generated-docs/core/turnkey-client-constructor", + "generated-docs/core/turnkey-client-create-api-key-pair", + "generated-docs/core/turnkey-client-create-http-client", + "generated-docs/core/turnkey-client-create-passkey", + "generated-docs/core/turnkey-client-create-wallet", + "generated-docs/core/turnkey-client-create-wallet-accounts", + "generated-docs/core/turnkey-client-delete-sub-organization", + "generated-docs/core/turnkey-client-disconnect-wallet-account", + "generated-docs/core/turnkey-client-eth-send-erc20-transfer", + "generated-docs/core/turnkey-client-eth-send-transaction", + "generated-docs/core/turnkey-client-export-private-key", + "generated-docs/core/turnkey-client-export-wallet", + "generated-docs/core/turnkey-client-export-wallet-account", + "generated-docs/core/turnkey-client-fetch-boot-proof-for-app-proof", + "generated-docs/core/turnkey-client-fetch-or-create-p256-api-key-user", + "generated-docs/core/turnkey-client-fetch-or-create-policies", + "generated-docs/core/turnkey-client-fetch-private-keys", + "generated-docs/core/turnkey-client-fetch-user", + "generated-docs/core/turnkey-client-fetch-wallet-accounts", + "generated-docs/core/turnkey-client-fetch-wallet-providers", + "generated-docs/core/turnkey-client-fetch-wallets", + "generated-docs/core/turnkey-client-get-active-session-key", + "generated-docs/core/turnkey-client-get-all-sessions", + "generated-docs/core/turnkey-client-get-proxy-auth-config", + "generated-docs/core/turnkey-client-get-session", + "generated-docs/core/turnkey-client-import-private-key", + "generated-docs/core/turnkey-client-import-wallet", + "generated-docs/core/turnkey-client-init", + "generated-docs/core/turnkey-client-init-otp", + "generated-docs/core/turnkey-client-login-or-signup-with-wallet", + "generated-docs/core/turnkey-client-login-with-oauth", + "generated-docs/core/turnkey-client-login-with-otp", + "generated-docs/core/turnkey-client-login-with-passkey", + "generated-docs/core/turnkey-client-login-with-wallet", + "generated-docs/core/turnkey-client-logout", + "generated-docs/core/turnkey-client-poll-transaction-status", + "generated-docs/core/turnkey-client-refresh-session", + "generated-docs/core/turnkey-client-remove-oauth-providers", + "generated-docs/core/turnkey-client-remove-passkeys", + "generated-docs/core/turnkey-client-remove-user-email", + "generated-docs/core/turnkey-client-remove-user-phone-number", + "generated-docs/core/turnkey-client-set-active-session", + "generated-docs/core/turnkey-client-sign-and-send-transaction", + "generated-docs/core/turnkey-client-sign-message", + "generated-docs/core/turnkey-client-sign-transaction", + "generated-docs/core/turnkey-client-sign-up-with-oauth", + "generated-docs/core/turnkey-client-sign-up-with-otp", + "generated-docs/core/turnkey-client-sign-up-with-passkey", + "generated-docs/core/turnkey-client-sign-up-with-wallet", + "generated-docs/core/turnkey-client-sol-send-transaction", + "generated-docs/core/turnkey-client-store-session", + "generated-docs/core/turnkey-client-switch-wallet-account-chain", + "generated-docs/core/turnkey-client-update-user-email", + "generated-docs/core/turnkey-client-update-user-name", + "generated-docs/core/turnkey-client-update-user-phone-number", + "generated-docs/core/turnkey-client-verify-app-proofs", + "generated-docs/core/turnkey-client-verify-otp" + ] + } ] } ] diff --git a/getting-started/embedded-wallet-quickstart.mdx b/getting-started/embedded-wallet-quickstart.mdx index f88ee014..2b4f9e04 100644 --- a/getting-started/embedded-wallet-quickstart.mdx +++ b/getting-started/embedded-wallet-quickstart.mdx @@ -1,15 +1,17 @@ --- title: "Embedded wallets quickstart" -description: "Three paths to get started with Turnkey's embedded wallets, whether you want to explore, clone, or build from scratch." +description: + "Three paths to get started with Turnkey's embedded wallets, whether you want to explore, clone, + or build from scratch." sidebarTitle: "Quickstart" --- -Turnkey's embedded wallets let you add secure, fully-featured wallet experiences to your app. There are three ways to get started, depending on how hands-on you want to be. +Turnkey's embedded wallets let you add secure, fully-featured wallet experiences to your app. There +are three ways to get started, depending on how hands-on you want to be. -**Building with AI?** Connect your IDE or LLM to Turnkey's docs via our -[MCP server and LLM feeds](/developer-reference/using-llms) for contextual -help while you integrate. + **Building with AI?** Connect your IDE or LLM to Turnkey's docs via our [MCP server and LLM + feeds](/developer-reference/using-llms) for contextual help while you integrate. @@ -28,21 +30,30 @@ help while you integrate. ## Explore the live demo -The fastest way to see Turnkey embedded wallets in action. Our [live demo app](https://wallets.turnkey.com/) is a fully functional embedded wallet built with the Embedded Wallet Kit. Use it to try out authentication flows, wallet creation, transaction signing, and more, all from your browser with no setup. +The fastest way to see Turnkey embedded wallets in action. Our +[live demo app](https://wallets.turnkey.com/) is a fully functional embedded wallet built with the +Wallet Kit. Use it to try out authentication flows, wallet creation, transaction signing, and more, +all from your browser with no setup. - + Open wallets.turnkey.com and start exploring. ## Clone and customize -If you want to get running locally, clone one of the demo apps below and start customizing. Each is a complete, runnable application you can use as a starting point for your own integration. +If you want to get running locally, clone one of the demo apps below and start customizing. Each is +a complete, runnable application you can use as a starting point for your own integration. ### Web -#### Demo Embedded Wallet ([code](https://github.com/tkhq/demo-embedded-wallet)) +#### Demo Embedded Wallet ([code](https://github.com/tkhq/sdk/tree/main/examples/react-wallet-kit)) -The flagship embedded wallet demo. Built with `@turnkey/sdk-browser`, `@turnkey/sdk-react`, and `@turnkey/sdk-server`. Covers the full embedded wallet lifecycle: +The flagship embedded wallet demo. Built with `@turnkey/react-wallet-kit`. Covers the full embedded +wallet lifecycle: - Authentication via passkeys, email OTP, and OAuth - Creating wallets and wallet accounts @@ -52,10 +63,16 @@ The flagship embedded wallet demo. Built with `@turnkey/sdk-browser`, `@turnkey/ - demo embedded wallet login view + demo embedded wallet login view - demo embedded wallet dashboard view + demo embedded wallet dashboard view @@ -63,7 +80,8 @@ The flagship embedded wallet demo. Built with `@turnkey/sdk-browser`, `@turnkey/ #### React Native Demo ([code](https://github.com/tkhq/react-native-demo-wallet)) -Demonstrates Turnkey's JavaScript packages in a React Native environment. Covers authentication, wallet creation, export, and transaction signing. +Demonstrates Turnkey's JavaScript packages in a React Native environment. Covers authentication, +wallet creation, export, and transaction signing. -For fully custom implementations or lower-level control, you can work directly with the [Turnkey API](/developer-reference/api-overview/intro). +For fully custom implementations or lower-level control, you can work directly with the +[Turnkey API](/developer-reference/api-overview/intro). From dbc2e627684280930320574f48a43dfa2bc93768 Mon Sep 17 00:00:00 2001 From: Graham Ritter Date: Tue, 5 May 2026 10:24:10 -0400 Subject: [PATCH 027/117] continued solutions pages work --- docs.json | 2 + .../embedded-consumer-wallet-2.mdx | 2 +- embedded-wallets/embedded-waas-2.mdx | 177 ++++++++++++++++++ .../embedded-business-wallets/overview-2.mdx | 53 ++++++ solutions/overview.mdx | 2 +- welcome.mdx | 2 +- 6 files changed, 235 insertions(+), 3 deletions(-) create mode 100644 embedded-wallets/embedded-waas-2.mdx create mode 100644 products/embedded-business-wallets/overview-2.mdx diff --git a/docs.json b/docs.json index 3960df3f..8119c83a 100644 --- a/docs.json +++ b/docs.json @@ -77,7 +77,9 @@ "embedded-wallets/code-examples/embedded-consumer-wallet", "embedded-wallets/code-examples/embedded-consumer-wallet-2", "products/embedded-business-wallets/overview", + "products/embedded-business-wallets/overview-2", "embedded-wallets/embedded-waas", + "embedded-wallets/embedded-waas-2", "products/embedded-wallets/features/agentic-wallets" ] }, diff --git a/embedded-wallets/code-examples/embedded-consumer-wallet-2.mdx b/embedded-wallets/code-examples/embedded-consumer-wallet-2.mdx index 7d2f501e..e13ffcb2 100644 --- a/embedded-wallets/code-examples/embedded-consumer-wallet-2.mdx +++ b/embedded-wallets/code-examples/embedded-consumer-wallet-2.mdx @@ -6,7 +6,7 @@ description: "Give every user of your application their own wallet, provisioned With Turnkey, you can provision a dedicated wallet for every user as part of your application's signup flow, at any scale. Users authenticate with familiar methods like passkeys, email, or social login. They never manage keys or install extensions. -**Built with Turnkey:** +**Powered by Turnkey:** - [Moonshot](https://www.turnkey.com/customers/how-moonshot-powers-millions-of-self-custodial-wallets-using-turnkey) — millions of self-custodial wallets powering one of crypto's fastest-growing consumer apps - [Infinex](https://www.turnkey.com/customers/making-onchain-ux-seamless-with-infinex-and-turnkey) — seamless onchain UX for a unified DeFi experience - [Axiom](https://www.turnkey.com/customers/axiom-global-defi-trading-platform) — global DeFi trading platform with embedded wallet infrastructure diff --git a/embedded-wallets/embedded-waas-2.mdx b/embedded-wallets/embedded-waas-2.mdx new file mode 100644 index 00000000..ac4467ed --- /dev/null +++ b/embedded-wallets/embedded-waas-2.mdx @@ -0,0 +1,177 @@ +--- +title: "Embedded Wallet-as-a-Service" +sidebarTitle: "Wallet-as-a-Service 2" +description: "Distribute embedded wallets through your developer platform with co-signing authority, billing gates, and compliance controls." +--- + +With Turnkey, you can build a platform that distributes embedded wallets to your own customers. Your platform abstracts Turnkey behind your own SDK, APIs, or UI components. A 2-of-2 root quorum model gives your platform co-signing authority over every transaction, enabling billing gates, compliance checks, and risk controls at the infrastructure layer, while end users remain non-custodial. + +**Powered by Turnkey:** +- [DIMO](https://www.turnkey.com/customers/how-dimo-is-bringing-transportation-solutions-onchain-with-turnkey) -- decentralized transportation network with 165,000+ connected vehicles, built their own [transactions SDK](https://github.com/DIMO-Network/transactions) on Turnkey's infrastructure + +## What makes Wallet-as-a-Service different + +With [consumer wallets](/embedded-wallets/code-examples/embedded-consumer-wallet) and [business wallets](/products/embedded-business-wallets/overview), your application integrates Turnkey directly and manages wallets for end users. With Wallet-as-a-Service, your platform is an intermediary layer: you build wallet infrastructure on top of Turnkey, and your customers integrate with your SDK rather than Turnkey directly. + +The defining pattern is the **2-of-2 root quorum**. Both the end user and your platform must approve every fund-moving transaction. The end user authenticates via passkey (or equivalent), then your platform evaluates its own rules (billing status, compliance, risk) before co-signing. If either party withholds approval, the transaction does not execute. + +End users remain non-custodial because they can always [export their keys](/products/company-wallets/features/export-wallets) independently, without platform approval. + +### When to use Wallet-as-a-Service + +| Scenario | Why Wallet-as-a-Service fits | +| :-------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------- | +| Your customers embed wallets through your SDK, not Turnkey's | You own the developer experience end-to-end. Downstream integrators never interact with Turnkey directly. | +| You need platform-level co-signing on every transaction | 2-of-2 root quorum lets your platform enforce billing gates, compliance checks, or risk controls before any fund-moving transaction. | +| You want to white-label wallet infrastructure | Fork or wrap the Embedded Wallet Kit with your branding and expose your own APIs. Turnkey is invisible to your customers. | + +## Architecture + +Each end user maps to a [Turnkey sub-organization](/concepts/sub-organizations). The sub-org contains the user's wallets, credentials, policies, and activity logs, fully isolated from other users and from your platform's management layer. + + + Wallet-as-a-Service provider and end user co-signing model + + +### Transaction authorization flow + +1. End user initiates a transaction from your embedded wallet UI +2. End user approves via their authenticator (e.g. passkey). Turnkey records the activity as partially approved +3. Your platform evaluates on its backend: billing status, risk/compliance rules, and any other checks +4. Your platform approves via API key and the transaction executes +5. If the platform withholds approval, the transaction does not execute + + + Wallet-as-a-Service transaction authorization with platform co-signing + + +See [Activities and approvals](/concepts/overview#activities) and [Root quorum](/concepts/users/root-quorum). + +## Implementation + +### Step 1: Define the tenant model + +Map each end user to a [sub-organization](/concepts/sub-organizations). One sub-org per end user. + +- **Isolated tenants:** Each sub-org is a self-contained data boundary with wallets, policies, authenticators, and activity logs fully isolated from one another. +- **Scoped parent org permissions:** Your parent organization has read-only access to sub-orgs and can initiate auth and recovery flows, but cannot sign transactions or modify policies within them. +- **External mapping:** Track the relationship between your platform's user IDs and their corresponding Turnkey sub-org IDs in your own database. + +See [Sub-organizations](/concepts/sub-organizations) and [Root quorum](/concepts/users/root-quorum). + +### Step 2: Design the sub-organization control model + +Define what lives inside each sub-org and how control is shared between your platform and the end user. + +- **End user (root):** Authenticated via passkey or equivalent user-controlled authenticator. +- **Platform provider (root):** Authenticated via API key. Used to approve or block transactions based on your service rules. +- **Delegated access (optional):** For automation or backend-initiated workflows, add a scoped non-root API key via [Delegated Access](/concepts/policies/delegated-access-overview). This must be tightly policy-scoped and should never have broad signing authority or bypass user consent. + +See [Delegated Access](/concepts/policies/delegated-access-overview) and [Policies](/concepts/policies/overview). + +### Step 3: Create sub-org with wallet and export policy + +Specify what gets created in every sub-org by default: wallet structure, supported chains/accounts, and baseline policies. + +For the 2-of-2 quorum model, establish the threshold last so your platform can configure policies (including export) with only your platform's approval. Once the 2-of-2 quorum is established, the end user can trigger exports via the export policy without needing your platform's co-signature. + +| Step | Action | Quorum State | +| ---- | --------------------------------------------- | ------------ | +| 3a | Create sub-org with both root users + wallet | 1-of-2 | +| 3b | Create export policy for end user | 1-of-2 | +| 3c | Update threshold to 2 | **2-of-2** | + +**3a. Create sub-org with both root users at 1-of-2 threshold** + +```javascript +const subOrg = await turnkeyClient.createSubOrganization({ + parameters: { + subOrganizationName: `User Wallet - ${userId}`, + rootUsers: [ + { userName: "Platform", apiKeys: [{ publicKey: PROVIDER_KEY }] }, + { + userName: "End User", + authenticators: [ + { + /* passkey */ + }, + ], + }, + ], + rootQuorumThreshold: 1, + wallet: { + walletName: "Primary Wallet", + accounts: [ + { + /* eth account */ + }, + ], + }, + }, +}); +``` + +**3b. Create export policy (user escape hatch)** + +```javascript +await turnkeyClient.createPolicy({ + organizationId: subOrgId, + parameters: { + policyName: "Allow User Wallet Export", + effect: "EFFECT_ALLOW", + consensus: `approvers.any(user, user.id == '${endUserId}')`, + condition: `activity.type == 'ACTIVITY_TYPE_EXPORT_WALLET' + && wallet.id == '${walletId}'`, + }, +}); +``` + +**3c. Raise threshold to 2-of-2** + +```javascript +await turnkeyClient.updateRootQuorum({ + organizationId: subOrgId, + parameters: { + threshold: 2, + userIds: [providerUserId, endUserId], + }, +}); +``` + +See [Export wallets](/products/company-wallets/features/export-wallets) and [Policy examples](/concepts/policies/examples/access-control). + +### Step 4: Build your integration surface + +Create the SDK, APIs, or UI components that downstream developers will integrate with. Abstract Turnkey and expose only your platform's intended wallet, auth, and signing flows. + +- **Embedded Wallet Kit (EWK):** Fork or wrap [EWK](/sdks/react/index) components (authentication, wallet UI, approval prompts) with your branding. Surface "pending platform approval" states in the transaction flow. +- **Backend service:** Handle platform root approvals (via API key), billing and risk evaluation, and activity monitoring through your backend. +- **SDK abstraction layer:** Wrap Turnkey's SDK calls behind your own interface for full control over the developer experience. + +See [Embedded Wallet Kit](/sdks/react/index) and [SDK Reference](/sdks/introduction). + +### Step 5: Wire the wallet into your platform flow + +Integrate the wallet into your onboarding and runtime flows so every downstream integration inherits a working embedded wallet. + +- **Onboarding:** Handle Turnkey org setup, auth configuration, and the staged sub-org creation flow as part of user registration. The end user should experience passkey registration as a natural part of sign-up. +- **Client initialization:** Initialize the Turnkey client with the user's sub-org context on each session. Use [sessions](/authentication/sessions) for batched signing workflows to reduce authentication friction. +- **Transaction flow:** Surface the approval prompt via EWK components, submit the user's approval to Turnkey, run your backend checks, then co-sign or withhold. +- **Recovery:** Expose the export flow in your settings UI so users can self-serve wallet recovery. Turnkey's enclave encrypts the mnemonic to a user-generated target key via HPKE. Neither Turnkey nor your platform can view the exported material. + +## Next steps + + + + Create a Turnkey organization and generate your API keypair. + + + Detailed method documentation for all Turnkey SDKs. + + diff --git a/products/embedded-business-wallets/overview-2.mdx b/products/embedded-business-wallets/overview-2.mdx new file mode 100644 index 00000000..0834a138 --- /dev/null +++ b/products/embedded-business-wallets/overview-2.mdx @@ -0,0 +1,53 @@ +--- +title: "Embedded Business Wallets" +sidebarTitle: "Business Wallet 2" +description: "Shared wallets with role-based signing controls for teams, operators, and finance workflows." +--- + +With Turnkey, your application can provision wallets designed for team usage. Multiple end users operate within a single sub-organization with role-based access control governed by the policy engine. No seed phrases, no browser extensions. + +**Powered by Turnkey:** +- [Mural Pay](https://www.turnkey.com/customers/mural-pay-cross-border-payments) -- cross-border stablecoin payments platform processing 5,000+ monthly transactions for global businesses, fintechs, and banks +- [AllScale](https://www.turnkey.com/customers/allscale-cross-border-stablecoin-transactions) -- stablecoin neobank where small businesses manage payments with team-based wallet access + +## Key implementation decisions + +Turnkey enables developers to build shared business wallets with role-based controls across dimensions such as organization hierarchy, access control, and custody. See the key implementation decisions below to curate the exact experience your business customers need. + +| Decision | Explanation | Learn more | +| :------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **Organization hierarchy** | Create a sub-organization for each business customer. Each sub-org is a fully isolated environment with its own wallets, users, and policies. | [Sub-Organizations](/concepts/sub-organizations) | +| **Role-based access control** | Assign roles to users via tags (e.g. `finance-team`, `operator`, `admin`). Write policies that reference these roles to control who can sign, what they can sign, and under what conditions. | [Policies](/concepts/policies/overview), [Policy Language](/concepts/policies/language) | +| **Policies and guardrails** | With roles in place, enforce spending limits, require multi-party approval for high-value transactions, restrict payments to allowlisted addresses, or require quorum for policy changes. Optionally let business customers configure their own guardrails. | [Policies](/concepts/policies/overview), [Delegated Access](/concepts/policies/delegated-access-overview) | +| **Custody model** | Choose who can authorize the enclave to sign: the user only (non-custodial), your application (custodial), or both with scoped permissions (hybrid). Business wallets commonly use hybrid custody with policy-backed controls. | [Custody models](/embedded-wallets/overview-2#custody-models) | +| **Authentication methods** | Choose user auth methods: Passkeys, OAuth/email, or SMS. You can use the [Auth Proxy](/reference/auth-proxy) for backend-signed OTP/OAuth/signup without your own backend, or wire auth to your app. | [Authentication Overview](/authentication/overview), [Auth Proxy](/reference/auth-proxy) | +| **Session management** | Allow a user to take multiple, contiguous actions in a defined period of time. Actions include: Read-write or read-only. | [Sessions](/authentication/sessions) | +| **Gas sponsorship** | Integrate a gasless UX via sponsored transactions to cover who pays gas and how transactions are broadcast. | [Transaction Management](/concepts/transaction-management), [Sending sponsored transactions](/embedded-wallets/code-examples/sending-sponsored-transactions) | +| **Key portability** | Determine whether users can import or export keys. | [Import wallets](/products/company-wallets/features/import-wallets), [Export wallets](/products/company-wallets/features/export-wallets) | +| **Recovery flows** | Define how users regain access if they lose their authenticator. Options include email recovery and backup passkeys. | [Email recovery](/embedded-wallets/sub-organization-recovery) | + +## Example: Payments platform with role-based controls + +Typical requirements and how Turnkey addresses them: + +| Requirement | Turnkey capability | +| :-------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Multi-user team access | One [sub-organization](/concepts/sub-organizations) per business customer with isolated wallets, users, and [role-based policies](/concepts/policies/overview) | +| Non-custodial with oversight | Hybrid custody with [policy engine](/concepts/policies/overview) controls. See [Custody models](/embedded-wallets/overview-2#custody-models) | +| Multi-party approval | [Policies](/concepts/policies/language) requiring 2+ approvers for high-value transactions or policy changes | +| Vendor and recipient controls | Allowlisted addresses and spending limits via [policy language](/concepts/policies/language) | +| Familiar auth for non-crypto users | Passkey and email authentication with [email recovery](/embedded-wallets/sub-organization-recovery). No seed phrases | +| Cross-border payments | Chain-agnostic derivation and signing. See [Networks](/networks/overview) and [Wallets Concept](/concepts/wallets) | +| Gasless UX | [Sponsored transactions](/concepts/transaction-management) and [sending sponsored transactions](/embedded-wallets/code-examples/sending-sponsored-transactions) | +| Fast integration | Use the [Embedded Wallet Kit](/sdks/react/index) for built-in auth and wallet UI components. See [Quickstart](/getting-started/embedded-wallet-quickstart) | + +## Next steps + + + + Explore the live demo, clone a starter app, or jump straight into building. + + + Step-by-step guides for React, React Native, Flutter, Swift, and Kotlin. + + diff --git a/solutions/overview.mdx b/solutions/overview.mdx index 2c89114e..e36e589b 100644 --- a/solutions/overview.mdx +++ b/solutions/overview.mdx @@ -23,7 +23,7 @@ Wallet experiences built directly into your product. Users authenticate with ema Transaction signing and smart contract interaction for AI agents. - + White-labeled wallets with isolated user environments for your own wallet product. diff --git a/welcome.mdx b/welcome.mdx index e18123d5..c6f02400 100644 --- a/welcome.mdx +++ b/welcome.mdx @@ -91,7 +91,7 @@ mode: "custom" {/* sync-start: embedded-wallets-use-cases */} 1. [Embedded Consumer Wallets](/embedded-wallets/code-examples/embedded-consumer-wallet) 2. [Embedded Business Wallets](/products/embedded-business-wallets/overview) - 3. [Wallets-as-a-Service](/embedded-wallets/embedded-waas) + 3. [Embedded Wallet-as-a-Service](/embedded-wallets/embedded-waas) 4. [Agentic Wallets](/products/embedded-wallets/features/agentic-wallets) {/* sync-end: embedded-wallets-use-cases */} From 34bf4aa31f3a58f8d540815abf07d6ee197dde37 Mon Sep 17 00:00:00 2001 From: Graham Ritter Date: Tue, 5 May 2026 12:02:42 -0400 Subject: [PATCH 028/117] restore API reference tab for comparison alongside combined tab --- docs.json | 143 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 143 insertions(+) diff --git a/docs.json b/docs.json index c1883266..e4c535e8 100644 --- a/docs.json +++ b/docs.json @@ -593,6 +593,149 @@ } ] }, + { + "tab": "API reference", + "pages": [ + { + "group": "Overview", + "pages": [ + "developer-reference/api-overview/intro", + "developer-reference/api-overview/stamps", + "developer-reference/api-overview/queries", + "developer-reference/api-overview/submissions", + "developer-reference/api-overview/errors" + ] + }, + { + "group": "Activities", + "pages": [ + "api-reference/activities/approve-activity", + "api-reference/activities/broadcast-evm-transaction", + "api-reference/activities/broadcast-svm-transaction", + "api-reference/activities/create-a-fiat-on-ramp-credential", + "api-reference/activities/create-an-oauth-20-credential", + "api-reference/activities/create-api-keys", + "api-reference/activities/create-authenticators", + "api-reference/activities/create-invitations", + "api-reference/activities/create-oauth-providers", + "api-reference/activities/create-policies", + "api-reference/activities/create-policy", + "api-reference/activities/create-private-key-tag", + "api-reference/activities/create-private-keys", + "api-reference/activities/create-read-only-session", + "api-reference/activities/create-read-write-session", + "api-reference/activities/create-smart-contract-interface", + "api-reference/activities/create-sub-organization", + "api-reference/activities/create-user-tag", + "api-reference/activities/create-users", + "api-reference/activities/create-wallet", + "api-reference/activities/create-wallet-accounts", + "api-reference/activities/create-webhook-endpoint", + "api-reference/activities/delete-a-fiat-on-ramp-credential", + "api-reference/activities/delete-an-oauth-20-credential", + "api-reference/activities/delete-api-keys", + "api-reference/activities/delete-authenticators", + "api-reference/activities/delete-invitation", + "api-reference/activities/delete-oauth-providers", + "api-reference/activities/delete-policies", + "api-reference/activities/delete-policy", + "api-reference/activities/delete-private-key-tags", + "api-reference/activities/delete-private-keys", + "api-reference/activities/delete-smart-contract-interface", + "api-reference/activities/delete-sub-organization", + "api-reference/activities/delete-user-tags", + "api-reference/activities/delete-users", + "api-reference/activities/delete-wallet-accounts", + "api-reference/activities/delete-wallets", + "api-reference/activities/delete-webhook-endpoint", + "api-reference/activities/export-private-key", + "api-reference/activities/export-wallet", + "api-reference/activities/export-wallet-account", + "api-reference/activities/import-private-key", + "api-reference/activities/import-wallet", + "api-reference/activities/init-email-recovery", + "api-reference/activities/init-fiat-on-ramp", + "api-reference/activities/init-generic-otp", + "api-reference/activities/init-import-private-key", + "api-reference/activities/init-import-wallet", + "api-reference/activities/init-otp-auth", + "api-reference/activities/login-with-a-stamp", + "api-reference/activities/login-with-oauth", + "api-reference/activities/login-with-otp", + "api-reference/activities/oauth", + "api-reference/activities/oauth-20-authentication", + "api-reference/activities/otp-auth", + "api-reference/activities/perform-email-auth", + "api-reference/activities/recover-a-user", + "api-reference/activities/reject-activity", + "api-reference/activities/remove-organization-feature", + "api-reference/activities/set-organization-feature", + "api-reference/activities/sign-raw-payload", + "api-reference/activities/sign-raw-payloads", + "api-reference/activities/sign-transaction", + "api-reference/activities/update-a-fiat-on-ramp-credential", + "api-reference/activities/update-an-oauth-20-credential", + "api-reference/activities/update-organization-name", + "api-reference/activities/update-policy", + "api-reference/activities/update-private-key-tag", + "api-reference/activities/update-root-quorum", + "api-reference/activities/update-user", + "api-reference/activities/update-user-tag", + "api-reference/activities/update-users-email", + "api-reference/activities/update-users-name", + "api-reference/activities/update-users-phone-number", + "api-reference/activities/update-wallet", + "api-reference/activities/update-webhook-endpoint", + "api-reference/activities/verify-generic-otp" + ] + }, + { + "group": "Queries", + "pages": [ + "api-reference/queries/get-a-specific-boot-proof", + "api-reference/queries/get-activity", + "api-reference/queries/get-api-key", + "api-reference/queries/get-api-keys", + "api-reference/queries/get-authenticator", + "api-reference/queries/get-authenticators", + "api-reference/queries/get-balances", + "api-reference/queries/get-configs", + "api-reference/queries/get-gas-usage", + "api-reference/queries/get-nonces", + "api-reference/queries/get-oauth-20-credential", + "api-reference/queries/get-oauth-providers", + "api-reference/queries/get-on-ramp-transaction-status", + "api-reference/queries/get-policy", + "api-reference/queries/get-policy-evaluations", + "api-reference/queries/get-private-key", + "api-reference/queries/get-send-transaction-status", + "api-reference/queries/get-smart-contract-interface", + "api-reference/queries/get-sub-organizations", + "api-reference/queries/get-the-latest-boot-proof-for-an-app", + "api-reference/queries/get-tvc-app-status", + "api-reference/queries/get-user", + "api-reference/queries/get-verified-sub-organizations", + "api-reference/queries/get-wallet", + "api-reference/queries/get-wallet-account", + "api-reference/queries/list-activities", + "api-reference/queries/list-app-proofs-for-an-activity", + "api-reference/queries/list-fiat-on-ramp-credentials", + "api-reference/queries/list-oauth-20-credentials", + "api-reference/queries/list-policies", + "api-reference/queries/list-private-key-tags", + "api-reference/queries/list-private-keys", + "api-reference/queries/list-smart-contract-interfaces", + "api-reference/queries/list-supported-assets", + "api-reference/queries/list-user-tags", + "api-reference/queries/list-users", + "api-reference/queries/list-wallets", + "api-reference/queries/list-wallets-accounts", + "api-reference/queries/list-webhook-endpoints", + "api-reference/queries/who-am-i" + ] + } + ] + }, { "tab": "API & SDK reference", "pages": [ From f2e6285a130b7fbe244a01ad02b740c7f4fe7286 Mon Sep 17 00:00:00 2001 From: Henry Wilson Date: Tue, 5 May 2026 16:34:21 -0400 Subject: [PATCH 029/117] remove unified sdk & api reference tab but preserve restructuring work --- docs.json | 571 ++++++++++++++++++++---------------------------------- 1 file changed, 211 insertions(+), 360 deletions(-) diff --git a/docs.json b/docs.json index e4c535e8..a387b764 100644 --- a/docs.json +++ b/docs.json @@ -526,366 +526,6 @@ "group": "SDK reference", "pages": [ "category/advanced", - { - "group": "Flutter", - "pages": [ - "sdks/flutter/index" - ] - }, - { - "group": "Swift", - "pages": [ - "sdks/swift/overview" - ] - }, - { - "group": "Kotlin", - "pages": [ - "sdks/kotlin/overview" - ] - }, - { - "group": "TypeScript | Frontend", - "pages": [ - "sdks/typescript-frontend/index", - "sdks/typescript-frontend/getting-started", - "sdks/typescript-frontend/auth", - "sdks/typescript-frontend/advanced-backend-authentication", - "sdks/typescript-frontend/advanced-api-requests", - "sdks/typescript-frontend/legacy" - ] - }, - "sdks/javascript-server", - "sdks/golang", - "sdks/rust", - "sdks/ruby", - "sdks/cli", - "sdks/python", - { - "group": "Web3 libraries", - "pages": [ - "category/web3-libraries", - "sdks/web3/ethers", - "sdks/web3/viem", - "wallets/wagmi", - "sdks/web3/cosmjs", - "sdks/web3/eip-1193", - "sdks/web3/solana", - "sdks/web3/gas-station", - "sdks/foundry" - ] - }, - { - "group": "Advanced", - "pages": [ - "category/advanced", - "sdks/advanced/turnkey-client", - "sdks/advanced/api-key-stamper", - "sdks/advanced/wallet-stamper", - "sdks/advanced/webauthn-stamper", - "sdks/advanced/iframe-stamper", - "embedded-wallets/code-examples/client-side-signing", - "sdks/advanced/indexed-db-stamper" - ] - }, - "sdks/migration-path" - ] - } - ] - }, - { - "tab": "API reference", - "pages": [ - { - "group": "Overview", - "pages": [ - "developer-reference/api-overview/intro", - "developer-reference/api-overview/stamps", - "developer-reference/api-overview/queries", - "developer-reference/api-overview/submissions", - "developer-reference/api-overview/errors" - ] - }, - { - "group": "Activities", - "pages": [ - "api-reference/activities/approve-activity", - "api-reference/activities/broadcast-evm-transaction", - "api-reference/activities/broadcast-svm-transaction", - "api-reference/activities/create-a-fiat-on-ramp-credential", - "api-reference/activities/create-an-oauth-20-credential", - "api-reference/activities/create-api-keys", - "api-reference/activities/create-authenticators", - "api-reference/activities/create-invitations", - "api-reference/activities/create-oauth-providers", - "api-reference/activities/create-policies", - "api-reference/activities/create-policy", - "api-reference/activities/create-private-key-tag", - "api-reference/activities/create-private-keys", - "api-reference/activities/create-read-only-session", - "api-reference/activities/create-read-write-session", - "api-reference/activities/create-smart-contract-interface", - "api-reference/activities/create-sub-organization", - "api-reference/activities/create-user-tag", - "api-reference/activities/create-users", - "api-reference/activities/create-wallet", - "api-reference/activities/create-wallet-accounts", - "api-reference/activities/create-webhook-endpoint", - "api-reference/activities/delete-a-fiat-on-ramp-credential", - "api-reference/activities/delete-an-oauth-20-credential", - "api-reference/activities/delete-api-keys", - "api-reference/activities/delete-authenticators", - "api-reference/activities/delete-invitation", - "api-reference/activities/delete-oauth-providers", - "api-reference/activities/delete-policies", - "api-reference/activities/delete-policy", - "api-reference/activities/delete-private-key-tags", - "api-reference/activities/delete-private-keys", - "api-reference/activities/delete-smart-contract-interface", - "api-reference/activities/delete-sub-organization", - "api-reference/activities/delete-user-tags", - "api-reference/activities/delete-users", - "api-reference/activities/delete-wallet-accounts", - "api-reference/activities/delete-wallets", - "api-reference/activities/delete-webhook-endpoint", - "api-reference/activities/export-private-key", - "api-reference/activities/export-wallet", - "api-reference/activities/export-wallet-account", - "api-reference/activities/import-private-key", - "api-reference/activities/import-wallet", - "api-reference/activities/init-email-recovery", - "api-reference/activities/init-fiat-on-ramp", - "api-reference/activities/init-generic-otp", - "api-reference/activities/init-import-private-key", - "api-reference/activities/init-import-wallet", - "api-reference/activities/init-otp-auth", - "api-reference/activities/login-with-a-stamp", - "api-reference/activities/login-with-oauth", - "api-reference/activities/login-with-otp", - "api-reference/activities/oauth", - "api-reference/activities/oauth-20-authentication", - "api-reference/activities/otp-auth", - "api-reference/activities/perform-email-auth", - "api-reference/activities/recover-a-user", - "api-reference/activities/reject-activity", - "api-reference/activities/remove-organization-feature", - "api-reference/activities/set-organization-feature", - "api-reference/activities/sign-raw-payload", - "api-reference/activities/sign-raw-payloads", - "api-reference/activities/sign-transaction", - "api-reference/activities/update-a-fiat-on-ramp-credential", - "api-reference/activities/update-an-oauth-20-credential", - "api-reference/activities/update-organization-name", - "api-reference/activities/update-policy", - "api-reference/activities/update-private-key-tag", - "api-reference/activities/update-root-quorum", - "api-reference/activities/update-user", - "api-reference/activities/update-user-tag", - "api-reference/activities/update-users-email", - "api-reference/activities/update-users-name", - "api-reference/activities/update-users-phone-number", - "api-reference/activities/update-wallet", - "api-reference/activities/update-webhook-endpoint", - "api-reference/activities/verify-generic-otp" - ] - }, - { - "group": "Queries", - "pages": [ - "api-reference/queries/get-a-specific-boot-proof", - "api-reference/queries/get-activity", - "api-reference/queries/get-api-key", - "api-reference/queries/get-api-keys", - "api-reference/queries/get-authenticator", - "api-reference/queries/get-authenticators", - "api-reference/queries/get-balances", - "api-reference/queries/get-configs", - "api-reference/queries/get-gas-usage", - "api-reference/queries/get-nonces", - "api-reference/queries/get-oauth-20-credential", - "api-reference/queries/get-oauth-providers", - "api-reference/queries/get-on-ramp-transaction-status", - "api-reference/queries/get-policy", - "api-reference/queries/get-policy-evaluations", - "api-reference/queries/get-private-key", - "api-reference/queries/get-send-transaction-status", - "api-reference/queries/get-smart-contract-interface", - "api-reference/queries/get-sub-organizations", - "api-reference/queries/get-the-latest-boot-proof-for-an-app", - "api-reference/queries/get-tvc-app-status", - "api-reference/queries/get-user", - "api-reference/queries/get-verified-sub-organizations", - "api-reference/queries/get-wallet", - "api-reference/queries/get-wallet-account", - "api-reference/queries/list-activities", - "api-reference/queries/list-app-proofs-for-an-activity", - "api-reference/queries/list-fiat-on-ramp-credentials", - "api-reference/queries/list-oauth-20-credentials", - "api-reference/queries/list-policies", - "api-reference/queries/list-private-key-tags", - "api-reference/queries/list-private-keys", - "api-reference/queries/list-smart-contract-interfaces", - "api-reference/queries/list-supported-assets", - "api-reference/queries/list-user-tags", - "api-reference/queries/list-users", - "api-reference/queries/list-wallets", - "api-reference/queries/list-wallets-accounts", - "api-reference/queries/list-webhook-endpoints", - "api-reference/queries/who-am-i" - ] - } - ] - }, - { - "tab": "API & SDK reference", - "pages": [ - { - "group": "REST API", - "pages": [ - { - "group": "Overview", - "pages": [ - "developer-reference/api-overview/intro", - "developer-reference/api-overview/stamps", - "developer-reference/api-overview/queries", - "developer-reference/api-overview/submissions", - "developer-reference/api-overview/errors" - ] - }, - { - "group": "Activities", - "pages": [ - "api-reference/activities/approve-activity", - "api-reference/activities/broadcast-evm-transaction", - "api-reference/activities/broadcast-svm-transaction", - "api-reference/activities/create-a-fiat-on-ramp-credential", - "api-reference/activities/create-an-oauth-20-credential", - "api-reference/activities/create-api-keys", - "api-reference/activities/create-authenticators", - "api-reference/activities/create-invitations", - "api-reference/activities/create-oauth-providers", - "api-reference/activities/create-policies", - "api-reference/activities/create-policy", - "api-reference/activities/create-private-key-tag", - "api-reference/activities/create-private-keys", - "api-reference/activities/create-read-only-session", - "api-reference/activities/create-read-write-session", - "api-reference/activities/create-smart-contract-interface", - "api-reference/activities/create-sub-organization", - "api-reference/activities/create-user-tag", - "api-reference/activities/create-users", - "api-reference/activities/create-wallet", - "api-reference/activities/create-wallet-accounts", - "api-reference/activities/create-webhook-endpoint", - "api-reference/activities/delete-a-fiat-on-ramp-credential", - "api-reference/activities/delete-an-oauth-20-credential", - "api-reference/activities/delete-api-keys", - "api-reference/activities/delete-authenticators", - "api-reference/activities/delete-invitation", - "api-reference/activities/delete-oauth-providers", - "api-reference/activities/delete-policies", - "api-reference/activities/delete-policy", - "api-reference/activities/delete-private-key-tags", - "api-reference/activities/delete-private-keys", - "api-reference/activities/delete-smart-contract-interface", - "api-reference/activities/delete-sub-organization", - "api-reference/activities/delete-user-tags", - "api-reference/activities/delete-users", - "api-reference/activities/delete-wallet-accounts", - "api-reference/activities/delete-wallets", - "api-reference/activities/delete-webhook-endpoint", - "api-reference/activities/export-private-key", - "api-reference/activities/export-wallet", - "api-reference/activities/export-wallet-account", - "api-reference/activities/import-private-key", - "api-reference/activities/import-wallet", - "api-reference/activities/init-email-recovery", - "api-reference/activities/init-fiat-on-ramp", - "api-reference/activities/init-generic-otp", - "api-reference/activities/init-import-private-key", - "api-reference/activities/init-import-wallet", - "api-reference/activities/init-otp-auth", - "api-reference/activities/login-with-a-stamp", - "api-reference/activities/login-with-oauth", - "api-reference/activities/login-with-otp", - "api-reference/activities/oauth", - "api-reference/activities/oauth-20-authentication", - "api-reference/activities/otp-auth", - "api-reference/activities/perform-email-auth", - "api-reference/activities/recover-a-user", - "api-reference/activities/reject-activity", - "api-reference/activities/remove-organization-feature", - "api-reference/activities/set-organization-feature", - "api-reference/activities/sign-raw-payload", - "api-reference/activities/sign-raw-payloads", - "api-reference/activities/sign-transaction", - "api-reference/activities/update-a-fiat-on-ramp-credential", - "api-reference/activities/update-an-oauth-20-credential", - "api-reference/activities/update-organization-name", - "api-reference/activities/update-policy", - "api-reference/activities/update-private-key-tag", - "api-reference/activities/update-root-quorum", - "api-reference/activities/update-user", - "api-reference/activities/update-user-tag", - "api-reference/activities/update-users-email", - "api-reference/activities/update-users-name", - "api-reference/activities/update-users-phone-number", - "api-reference/activities/update-wallet", - "api-reference/activities/update-webhook-endpoint", - "api-reference/activities/verify-generic-otp" - ] - }, - { - "group": "Queries", - "pages": [ - "api-reference/queries/get-a-specific-boot-proof", - "api-reference/queries/get-activity", - "api-reference/queries/get-api-key", - "api-reference/queries/get-api-keys", - "api-reference/queries/get-authenticator", - "api-reference/queries/get-authenticators", - "api-reference/queries/get-balances", - "api-reference/queries/get-configs", - "api-reference/queries/get-gas-usage", - "api-reference/queries/get-nonces", - "api-reference/queries/get-oauth-20-credential", - "api-reference/queries/get-oauth-providers", - "api-reference/queries/get-on-ramp-transaction-status", - "api-reference/queries/get-policy", - "api-reference/queries/get-policy-evaluations", - "api-reference/queries/get-private-key", - "api-reference/queries/get-send-transaction-status", - "api-reference/queries/get-smart-contract-interface", - "api-reference/queries/get-sub-organizations", - "api-reference/queries/get-the-latest-boot-proof-for-an-app", - "api-reference/queries/get-tvc-app-status", - "api-reference/queries/get-user", - "api-reference/queries/get-verified-sub-organizations", - "api-reference/queries/get-wallet", - "api-reference/queries/get-wallet-account", - "api-reference/queries/list-activities", - "api-reference/queries/list-app-proofs-for-an-activity", - "api-reference/queries/list-fiat-on-ramp-credentials", - "api-reference/queries/list-oauth-20-credentials", - "api-reference/queries/list-policies", - "api-reference/queries/list-private-key-tags", - "api-reference/queries/list-private-keys", - "api-reference/queries/list-smart-contract-interfaces", - "api-reference/queries/list-supported-assets", - "api-reference/queries/list-user-tags", - "api-reference/queries/list-users", - "api-reference/queries/list-wallets", - "api-reference/queries/list-wallets-accounts", - "api-reference/queries/list-webhook-endpoints", - "api-reference/queries/who-am-i" - ] - } - ] - }, - { - "group": "SDK reference", - "pages": [ - "sdks/introduction", { "group": "React wallet kit", "pages": [ @@ -1118,6 +758,217 @@ "generated-docs/core/turnkey-client-verify-app-proofs", "generated-docs/core/turnkey-client-verify-otp" ] + }, + { + "group": "Flutter", + "pages": [ + "sdks/flutter/index" + ] + }, + { + "group": "Swift", + "pages": [ + "sdks/swift/overview" + ] + }, + { + "group": "Kotlin", + "pages": [ + "sdks/kotlin/overview" + ] + }, + { + "group": "TypeScript | Frontend", + "pages": [ + "sdks/typescript-frontend/index", + "sdks/typescript-frontend/getting-started", + "sdks/typescript-frontend/auth", + "sdks/typescript-frontend/advanced-backend-authentication", + "sdks/typescript-frontend/advanced-api-requests", + "sdks/typescript-frontend/legacy" + ] + }, + "sdks/javascript-server", + "sdks/golang", + "sdks/rust", + "sdks/ruby", + "sdks/cli", + "sdks/python", + { + "group": "Web3 libraries", + "pages": [ + "category/web3-libraries", + "sdks/web3/ethers", + "sdks/web3/viem", + "wallets/wagmi", + "sdks/web3/cosmjs", + "sdks/web3/eip-1193", + "sdks/web3/solana", + "sdks/web3/gas-station", + "sdks/foundry" + ] + }, + { + "group": "Advanced", + "pages": [ + "category/advanced", + "sdks/advanced/turnkey-client", + "sdks/advanced/api-key-stamper", + "sdks/advanced/wallet-stamper", + "sdks/advanced/webauthn-stamper", + "sdks/advanced/iframe-stamper", + "embedded-wallets/code-examples/client-side-signing", + "sdks/advanced/indexed-db-stamper" + ] + }, + "sdks/migration-path" + ] + } + ] + }, + { + "tab": "API reference", + "pages": [ + { + "group": "REST API", + "pages": [ + { + "group": "Overview", + "pages": [ + "developer-reference/api-overview/intro", + "developer-reference/api-overview/stamps", + "developer-reference/api-overview/queries", + "developer-reference/api-overview/submissions", + "developer-reference/api-overview/errors" + ] + }, + { + "group": "Activities", + "pages": [ + "api-reference/activities/approve-activity", + "api-reference/activities/broadcast-evm-transaction", + "api-reference/activities/broadcast-svm-transaction", + "api-reference/activities/create-a-fiat-on-ramp-credential", + "api-reference/activities/create-an-oauth-20-credential", + "api-reference/activities/create-api-keys", + "api-reference/activities/create-authenticators", + "api-reference/activities/create-invitations", + "api-reference/activities/create-oauth-providers", + "api-reference/activities/create-policies", + "api-reference/activities/create-policy", + "api-reference/activities/create-private-key-tag", + "api-reference/activities/create-private-keys", + "api-reference/activities/create-read-only-session", + "api-reference/activities/create-read-write-session", + "api-reference/activities/create-smart-contract-interface", + "api-reference/activities/create-sub-organization", + "api-reference/activities/create-user-tag", + "api-reference/activities/create-users", + "api-reference/activities/create-wallet", + "api-reference/activities/create-wallet-accounts", + "api-reference/activities/create-webhook-endpoint", + "api-reference/activities/delete-a-fiat-on-ramp-credential", + "api-reference/activities/delete-an-oauth-20-credential", + "api-reference/activities/delete-api-keys", + "api-reference/activities/delete-authenticators", + "api-reference/activities/delete-invitation", + "api-reference/activities/delete-oauth-providers", + "api-reference/activities/delete-policies", + "api-reference/activities/delete-policy", + "api-reference/activities/delete-private-key-tags", + "api-reference/activities/delete-private-keys", + "api-reference/activities/delete-smart-contract-interface", + "api-reference/activities/delete-sub-organization", + "api-reference/activities/delete-user-tags", + "api-reference/activities/delete-users", + "api-reference/activities/delete-wallet-accounts", + "api-reference/activities/delete-wallets", + "api-reference/activities/delete-webhook-endpoint", + "api-reference/activities/export-private-key", + "api-reference/activities/export-wallet", + "api-reference/activities/export-wallet-account", + "api-reference/activities/import-private-key", + "api-reference/activities/import-wallet", + "api-reference/activities/init-email-recovery", + "api-reference/activities/init-fiat-on-ramp", + "api-reference/activities/init-generic-otp", + "api-reference/activities/init-import-private-key", + "api-reference/activities/init-import-wallet", + "api-reference/activities/init-otp-auth", + "api-reference/activities/login-with-a-stamp", + "api-reference/activities/login-with-oauth", + "api-reference/activities/login-with-otp", + "api-reference/activities/oauth", + "api-reference/activities/oauth-20-authentication", + "api-reference/activities/otp-auth", + "api-reference/activities/perform-email-auth", + "api-reference/activities/recover-a-user", + "api-reference/activities/reject-activity", + "api-reference/activities/remove-organization-feature", + "api-reference/activities/set-organization-feature", + "api-reference/activities/sign-raw-payload", + "api-reference/activities/sign-raw-payloads", + "api-reference/activities/sign-transaction", + "api-reference/activities/update-a-fiat-on-ramp-credential", + "api-reference/activities/update-an-oauth-20-credential", + "api-reference/activities/update-organization-name", + "api-reference/activities/update-policy", + "api-reference/activities/update-private-key-tag", + "api-reference/activities/update-root-quorum", + "api-reference/activities/update-user", + "api-reference/activities/update-user-tag", + "api-reference/activities/update-users-email", + "api-reference/activities/update-users-name", + "api-reference/activities/update-users-phone-number", + "api-reference/activities/update-wallet", + "api-reference/activities/update-webhook-endpoint", + "api-reference/activities/verify-generic-otp" + ] + }, + { + "group": "Queries", + "pages": [ + "api-reference/queries/get-a-specific-boot-proof", + "api-reference/queries/get-activity", + "api-reference/queries/get-api-key", + "api-reference/queries/get-api-keys", + "api-reference/queries/get-authenticator", + "api-reference/queries/get-authenticators", + "api-reference/queries/get-balances", + "api-reference/queries/get-configs", + "api-reference/queries/get-gas-usage", + "api-reference/queries/get-nonces", + "api-reference/queries/get-oauth-20-credential", + "api-reference/queries/get-oauth-providers", + "api-reference/queries/get-on-ramp-transaction-status", + "api-reference/queries/get-policy", + "api-reference/queries/get-policy-evaluations", + "api-reference/queries/get-private-key", + "api-reference/queries/get-send-transaction-status", + "api-reference/queries/get-smart-contract-interface", + "api-reference/queries/get-sub-organizations", + "api-reference/queries/get-the-latest-boot-proof-for-an-app", + "api-reference/queries/get-tvc-app-status", + "api-reference/queries/get-user", + "api-reference/queries/get-verified-sub-organizations", + "api-reference/queries/get-wallet", + "api-reference/queries/get-wallet-account", + "api-reference/queries/list-activities", + "api-reference/queries/list-app-proofs-for-an-activity", + "api-reference/queries/list-fiat-on-ramp-credentials", + "api-reference/queries/list-oauth-20-credentials", + "api-reference/queries/list-policies", + "api-reference/queries/list-private-key-tags", + "api-reference/queries/list-private-keys", + "api-reference/queries/list-smart-contract-interfaces", + "api-reference/queries/list-supported-assets", + "api-reference/queries/list-user-tags", + "api-reference/queries/list-users", + "api-reference/queries/list-wallets", + "api-reference/queries/list-wallets-accounts", + "api-reference/queries/list-webhook-endpoints", + "api-reference/queries/who-am-i" + ] } ] } From ad23a978e9d0b42778e57d69892f4c016188ca61 Mon Sep 17 00:00:00 2001 From: Graham Ritter Date: Tue, 5 May 2026 17:03:48 -0400 Subject: [PATCH 030/117] re-did embedded wallets overviews and usecases. Re-did company wallets overview --- company-wallets/overview-2.mdx | 89 +++++++ company-wallets/overview.mdx | 156 +++++------ docs.json | 14 +- .../embedded-consumer-wallet-2.mdx | 1 + .../embedded-consumer-wallet.mdx | 244 +++--------------- embedded-wallets/embedded-waas-2.mdx | 6 +- embedded-wallets/embedded-waas.mdx | 239 ++++++----------- embedded-wallets/overview-2.mdx | 6 - embedded-wallets/overview.mdx | 88 ++++--- .../embedded-business-wallets/overview-2.mdx | 1 + .../embedded-business-wallets/overview.mdx | 240 ++++------------- .../features/agentic-wallets.mdx | 5 +- solutions/overview.mdx | 3 - 13 files changed, 395 insertions(+), 697 deletions(-) create mode 100644 company-wallets/overview-2.mdx diff --git a/company-wallets/overview-2.mdx b/company-wallets/overview-2.mdx new file mode 100644 index 00000000..21671f61 --- /dev/null +++ b/company-wallets/overview-2.mdx @@ -0,0 +1,89 @@ +--- +title: "Overview" +sidebarTitle: "Overview 2" +--- + +## What are company wallets? + +Company wallets are custodial wallets owned and operated by your organization. Your team controls the keys and defines who can sign, what they can sign, and under what conditions. **The wallets belong to your business; Turnkey provides the infrastructure to operate them securely at scale.** + +Where [embedded wallets](/embedded-wallets/overview) give each end user their own wallet, company wallets centralize control within your organization. Your backend services, operators, and automated systems sign transactions through Turnkey's API, governed by role-based access controls and the policy engine. + +## Why Turnkey for company wallets? + +Managing company-controlled keys means solving for security, access control, multi-chain support, and automation, all without exposing private keys to your team or your infrastructure. Turnkey handles this so you can focus on your operations. + +With Turnkey, you can: + +- Sign millions of transactions with sub-100ms latency via [secure enclaves](/security/secure-enclaves) +- Define role-based access controls so each operator, service, or team member can only sign what they're authorized to +- Require multi-party approval for high-value or sensitive operations +- Support any blockchain with chain-agnostic, arbitrary signing +- Automate workflows like sweeps, payouts, and contract interactions via API +- Import existing keys or export them when needed + +## How it works + +Your backend authenticates to Turnkey via API key. Inside the secure enclave, the [policy engine](/concepts/policies/overview) evaluates the request against the signing policies you've defined. If approved, the enclave signs and returns the signature. If denied, no signature is produced. + +Private keys never leave the [secure enclave](/security/secure-enclaves). Your operators and services interact with signatures, not keys. + +### Access control model + +Company wallets use a single [organization](/concepts/organizations) (or [sub-organizations](/concepts/sub-organizations) for tenant isolation). Within that org, you define: + +- **Users** representing human operators and automated services, each with their own credentials (API keys, passkeys) +- **Tags** grouping users by role (e.g. `deployer`, `treasury-ops`, `sweeper`) +- **Policies** controlling what each role can sign: by recipient address, contract address, function selector, chain ID, transaction value, or any combination + +Turnkey is deny-by-default. If no policy explicitly allows an action, it is rejected. See [Policies](/concepts/policies/overview) and [Policy Language](/concepts/policies/language). + +### Security model + +- **Keys never leave the enclave.** Private keys live in [Trusted Execution Environments (TEEs)](/security/secure-enclaves). All signing happens inside verifiable infrastructure; only signatures are returned. +- **Role-scoped access.** Every signing request is evaluated against policies in the enclave. Operators and services can only perform actions they've been explicitly authorized for. +- **Multi-party approval.** For sensitive operations, require multiple approvers before the enclave will sign. See [Co-signing transactions](/company-wallets/co-signing-transactions). +- **Trusted vs. untrusted separation.** A breach of your backend does not expose keys or signing capability. The enclave enforces policies independently of your infrastructure. + +For a deeper look, see [Security](/security/our-approach) and [Secure Enclaves](/security/secure-enclaves). + +## Building with Turnkey + +Most company wallet integrations are backend-driven. Use Turnkey's server SDKs to create wallets, sign transactions, and manage policies programmatically from your infrastructure. + +Server SDKs are available for [TypeScript](/sdks/javascript-server), [Go](/sdks/golang), [Ruby](/sdks/ruby), [Python](/sdks/python), and [Rust](/sdks/rust). For full control, you can call the [Turnkey API](/developer-reference/api-overview/intro) directly. + +The [Turnkey Dashboard](https://app.turnkey.com) serves as an internal GUI for managing wallets, users, and policies. If you need a custom operator-facing interface, you can build one using the [Embedded Wallet Kit](/sdks/react/index). + +See the [Company Wallets Quickstart](/getting-started/company-wallets-quickstart) to get started. + +## Use cases + +Company wallets serve different needs depending on what you're building. Choose the pattern that matches your operations. + + + + Automate treasury operations, deposit sweeps, and cross-chain payouts with role-based controls at every transaction. + + + Deploy, interact with, and upgrade smart contracts with RBAC and multi-party approval for high-value operations. + + + Wallets operated by AI agents and automated systems with policy-scoped signing authority. + + + +## Ready to build? + +- [Company Wallets Quickstart](/getting-started/company-wallets-quickstart) — set up your organization, create wallets, and sign your first transaction +- [Policy Quickstart](/concepts/policies/quickstart) — define access controls and signing rules for your team +- [SDK Reference](/sdks/introduction) — server SDKs for TypeScript, Go, Ruby, Python, and Rust diff --git a/company-wallets/overview.mdx b/company-wallets/overview.mdx index 96c0f860..fc7a9790 100644 --- a/company-wallets/overview.mdx +++ b/company-wallets/overview.mdx @@ -2,75 +2,87 @@ title: "Overview" --- -import { SquareCard } from "/snippets/square-card.mdx"; -import { Logo } from "/snippets/logo.mdx"; - -Turnkey empowers teams to automate complex signing workflows at scale without compromising on security or flexibility. Company Wallets provide the building blocks for creating custom solutions that make your product more secure, from role-based access controls to privacy-preserving smart contracts. - -With Company Wallets, you can: - -- Automate millions of signatures with customizable security controls -- Implement role-based access controls and multi-party approvals -- Support any blockchain or asset type with our chain-agnostic, arbitrary signing capabilities -- Minimize attack surface area with our paranoid security model -- Easily migrate existing wallets and keys in and out of Turnkey - -## Policy engine - -At the foundation of Company Wallets are our policy engine. -Policies offer flexible controls and permissions within your organization -and enable a variety of use cases, including cross-border stablecoin payments, -treasury management, and more. - -## What kind of policies can you create? - -| Example | Description | -| ---------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- | -| [`deployer`](https://github.com/tkhq/sdk/tree/main/examples/deployer/) | Compile and deploy a smart contract | -| [`rebalancer`](https://github.com/tkhq/sdk/tree/main/examples/rebalancer/) | A demo application which showcases an example of how to use Turnkey for managing multiple types of keys & users | -| [`sweeper`](https://github.com/tkhq/sdk/tree/main/examples/sweeper/) | Sweep funds from one address to a different address | -| [`trading-runner`](https://github.com/tkhq/sdk/tree/main/examples/trading-runner/) | A sample application demonstrating a trading operation, using various private keys, users, and policies, powered by Uniswap | - -Almost all actions on Turnkey are implicitly denied by default. -See our [Policy Overview](/products/company-wallets/policy-engine) for exceptions. - -## Other use cases - -### Staking operations - -Staking teams can use Turnkey to streamline their operations and secure their keys. Automate critical workflows like: - -- Mnemonic and key generation -- Rewards claiming and distribution -- Network voting and governance actions - -## SDKs - -
- } label="Go" href="/sdks/golang" /> - } - label="Ruby" - href="/sdks/ruby" - /> - } - label="Python" - href="/sdks/python" - /> - } - label="Rust" - href="/sdks/rust" - /> - - } - label="Typescript" - href="/sdks/javascript-server" - /> -
- -## Next steps - -Dig into Company Wallet features like multichain support, scoped API keys, multi-signature approvals, and [more](/products/company-wallets/features/multi-chain-support). +## What are company wallets? + +Company wallets are custodial wallets owned and operated by your organization. Your team controls the keys and defines who can sign, what they can sign, and under what conditions. **The wallets belong to your business; Turnkey provides the infrastructure to operate them securely at scale.** + +Where [embedded wallets](/embedded-wallets/overview) give each end user their own wallet, company wallets centralize control within your organization. Your backend services, operators, and automated systems sign transactions through Turnkey's API, governed by role-based access controls and the policy engine. + +## Why Turnkey for company wallets? + +Managing company-controlled keys means solving for security, access control, multi-chain support, and automation, all without exposing private keys to your team or your infrastructure. Turnkey handles this so you can focus on your operations. + +With Turnkey, you can: + +- Sign millions of transactions with sub-100ms latency via [secure enclaves](/security/secure-enclaves) +- Define role-based access controls so each operator, service, or team member can only sign what they're authorized to +- Require multi-party approval for high-value or sensitive operations +- Support any blockchain with chain-agnostic, arbitrary signing +- Automate workflows like sweeps, payouts, and contract interactions via API +- Import existing keys or export them when needed + +## How it works + +Your backend authenticates to Turnkey via API key. Inside the secure enclave, the [policy engine](/concepts/policies/overview) evaluates the request against the signing policies you've defined. If approved, the enclave signs and returns the signature. If denied, no signature is produced. + +Private keys never leave the [secure enclave](/security/secure-enclaves). Your operators and services interact with signatures, not keys. + +### Access control model + +Company wallets use a single [organization](/concepts/organizations) (or [sub-organizations](/concepts/sub-organizations) for tenant isolation). Within that org, you define: + +- **Users** representing human operators and automated services, each with their own credentials (API keys, passkeys) +- **Tags** grouping users by role (e.g. `deployer`, `treasury-ops`, `sweeper`) +- **Policies** controlling what each role can sign: by recipient address, contract address, function selector, chain ID, transaction value, or any combination + +Turnkey is deny-by-default. If no policy explicitly allows an action, it is rejected. See [Policies](/concepts/policies/overview) and [Policy Language](/concepts/policies/language). + +### Security model + +- **Keys never leave the enclave.** Private keys live in [Trusted Execution Environments (TEEs)](/security/secure-enclaves). All signing happens inside verifiable infrastructure; only signatures are returned. +- **Role-scoped access.** Every signing request is evaluated against policies in the enclave. Operators and services can only perform actions they've been explicitly authorized for. +- **Multi-party approval.** For sensitive operations, require multiple approvers before the enclave will sign. See [Co-signing transactions](/company-wallets/co-signing-transactions). +- **Trusted vs. untrusted separation.** A breach of your backend does not expose keys or signing capability. The enclave enforces policies independently of your infrastructure. + +For a deeper look, see [Security](/security/our-approach) and [Secure Enclaves](/security/secure-enclaves). + +## Building with Turnkey + +Most company wallet integrations are backend-driven. Use Turnkey's server SDKs to create wallets, sign transactions, and manage policies programmatically from your infrastructure. + +Server SDKs are available for [TypeScript](/sdks/javascript-server), [Go](/sdks/golang), [Ruby](/sdks/ruby), [Python](/sdks/python), and [Rust](/sdks/rust). For full control, you can call the [Turnkey API](/developer-reference/api-overview/intro) directly. + +The [Turnkey Dashboard](https://app.turnkey.com) serves as an internal GUI for managing wallets, users, and policies. If you need a custom operator-facing interface, you can build one using the [Embedded Wallet Kit](/sdks/react/index). + +See the [Company Wallets Quickstart](/getting-started/company-wallets-quickstart) to get started. + +## Use cases + +Company wallets serve different needs depending on what you're building. Choose the pattern that matches your operations. + + + + Automate treasury operations, deposit sweeps, and cross-chain payouts with role-based controls at every transaction. + + + Deploy, interact with, and upgrade smart contracts with RBAC and multi-party approval for high-value operations. + + + Wallets operated by AI agents and automated systems with policy-scoped signing authority. + + + +## Ready to build? + +- [Company Wallets Quickstart](/getting-started/company-wallets-quickstart) -- set up your organization, create wallets, and sign your first transaction +- [Policy Quickstart](/concepts/policies/quickstart) -- define access controls and signing rules for your team +- [SDK Reference](/sdks/introduction) -- server SDKs for TypeScript, Go, Ruby, Python, and Rust diff --git a/docs.json b/docs.json index e4c535e8..90cb96d0 100644 --- a/docs.json +++ b/docs.json @@ -70,17 +70,12 @@ "group": "Embedded Wallets", "pages": [ "embedded-wallets/overview", - "embedded-wallets/overview-2", { "group": "Use cases", "pages": [ "embedded-wallets/code-examples/embedded-consumer-wallet", - "embedded-wallets/code-examples/embedded-consumer-wallet-2", "products/embedded-business-wallets/overview", - "products/embedded-business-wallets/overview-2", - "embedded-wallets/embedded-waas", - "embedded-wallets/embedded-waas-2", - "products/embedded-wallets/features/agentic-wallets" + "embedded-wallets/embedded-waas" ] }, "getting-started/embedded-wallet-quickstart", @@ -206,13 +201,13 @@ { "group": "Use cases", "pages": [ - "company-wallets/code-examples/signing-transactions", "company-wallets/code-examples/smart-contract-management", "company-wallets/code-examples/payment-orchestration", "company-wallets/use-cases/agentic-wallets" ] }, - "getting-started/company-wallets-quickstart" + "getting-started/company-wallets-quickstart", + "company-wallets/code-examples/signing-transactions" ] }, { @@ -393,7 +388,8 @@ "pages": [ "concepts/policies/delegated-access-overview", "concepts/policies/delegated-access-frontend", - "concepts/policies/delegated-access-backend" + "concepts/policies/delegated-access-backend", + "products/embedded-wallets/features/agentic-wallets" ] } ] diff --git a/embedded-wallets/code-examples/embedded-consumer-wallet-2.mdx b/embedded-wallets/code-examples/embedded-consumer-wallet-2.mdx index e13ffcb2..6713d9de 100644 --- a/embedded-wallets/code-examples/embedded-consumer-wallet-2.mdx +++ b/embedded-wallets/code-examples/embedded-consumer-wallet-2.mdx @@ -27,6 +27,7 @@ exact user experience you need. | **Gas sponsorship** | Integrate a gasless UX via sponsored transactions to cover who pays gas and how transactions are broadcast. | [Transaction Management](/concepts/transaction-management), [Sending sponsored transactions](/embedded-wallets/code-examples/sending-sponsored-transactions) | | **Key portability** | Determine whether users can import or export keys. | [Import wallets](/products/company-wallets/features/import-wallets), [Export wallets](/products/company-wallets/features/export-wallets) | | **Recovery flows** | Define how users regain access if they lose their authenticator. Options include email recovery and backup passkeys. | [Email recovery](/embedded-wallets/sub-organization-recovery) | +| **Agent-delegated signing** | Let end users grant scoped signing authority to AI agents or automated systems from their own wallet. The user retains root control and can revoke access at any time. | [End-User Delegated Agent Signing](/products/embedded-wallets/features/agentic-wallets) | ## Example: Neobank-style embedded consumer wallet diff --git a/embedded-wallets/code-examples/embedded-consumer-wallet.mdx b/embedded-wallets/code-examples/embedded-consumer-wallet.mdx index 0b04d528..74ed5077 100644 --- a/embedded-wallets/code-examples/embedded-consumer-wallet.mdx +++ b/embedded-wallets/code-examples/embedded-consumer-wallet.mdx @@ -1,151 +1,32 @@ --- title: "Embedded Consumer Wallet" -description: - "Turnkey provides wallet infrastructure with flexible authentication, programmable transaction - flows, and granular access controls, while keys remain in hardware-backed enclaves. Start with the - Embedded Wallet Kit and drop down to low-level primitives when you need to customize. " +description: "Give every user of your application their own wallet, provisioned automatically at signup." --- -**Why Turnkey for Embedded Consumer Wallets**\ -Turnkey delivers a secure, flexible solution for embedding end-user wallets directly into your -application. Users sign in with familiar methods (passkeys, email, OAuth), without seed phrases, -browser extensions, or external wallets. Turnkey lets you compose your app's core experiences -(onboarding, wallet flows, and transactions) with full control, without restricting critical product -decisions to pre-built flows. Keys stay inside hardware-backed Trusted Execution Environments -[(TEEs)](/security/secure-enclaves), ensuring private keys are never exposed to your developers or -to Turnkey. +With Turnkey, you can provision a dedicated wallet for every user as part of your application's signup flow, at any scale. Users authenticate with familiar methods like passkeys, email, or social login. They never manage keys or install extensions. -You can use the [Embedded Wallet Kit](/reference/embedded-wallet-kit) for fast integration, or -[Turnkey SDKs](/sdks/introduction) and the [API](/api-reference/overview) for more customization. -Leading apps like -[Moonshot](https://www.turnkey.com/customers/how-moonshot-powers-millions-of-self-custodial-wallets-using-turnkey), -[Infinex](https://www.turnkey.com/customers/making-onchain-ux-seamless-with-infinex-and-turnkey), -and [Axiom](https://www.turnkey.com/customers/axiom-global-defi-trading-platform) use Turnkey for -embedded consumer wallets in production. +**Powered by Turnkey:** +- [Moonshot](https://www.turnkey.com/customers/how-moonshot-powers-millions-of-self-custodial-wallets-using-turnkey) -- millions of self-custodial wallets powering one of crypto's fastest-growing consumer apps +- [Infinex](https://www.turnkey.com/customers/making-onchain-ux-seamless-with-infinex-and-turnkey) -- seamless onchain UX for a unified DeFi experience +- [Axiom](https://www.turnkey.com/customers/axiom-global-defi-trading-platform) -- global DeFi trading platform with embedded wallet infrastructure ## Key implementation decisions Turnkey enables developers to tailor non-custodial, embedded user wallets across dimensions such as custody model, authentication, and more. See the key implementation decisions below to curate the -exact user experience you need. For a full map of embedded wallet capabilities, see the -[Features overview](/embedded-wallets/features/overview). +exact user experience you need. | Decision | Explanation | Learn more | | :------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **Custody model** | Determine the appropriate custody model for your app. Options include user-controlled, app-controlled, or delegated/hybrid. Configure via policies and sub-organization settings. | [Delegated Access](/concepts/policies/delegated-access-frontend), [Sub-Organization Customization](/sdks/react/sub-organization-customization) | -| **Authentication methods** | Choose user auth methods: Passkeys, OAuth/email, or SMS. You can use the [Auth Proxy](/reference/auth-proxy) for backend-signed OTP/OAuth/signup without your own backend, or wire auth to your app. | [Authentication Overview](/authentication/overview), [Auth Proxy](/reference/auth-proxy) | -| **Session management** | Allow a user to take multiple, contiguous actions in a defined period of time. Actions include: Read-write or read-only. | [Sessions](/authentication/sessions) | -| **Wallet architecture** | Choose between key-based (HD) or smart contract wallets for your users. Turnkey supports both. | [Wallets Concept](/concepts/wallets), [Transaction Management](/concepts/transaction-management) | -| **Gas sponsorship** | Integrate a gasless UX via sponsored transactions to cover who pays gas and how transactions are broadcast. | [Transaction Management](/concepts/transaction-management), [Sending sponsored transactions](/embedded-wallets/code-examples/sending-sponsored-transactions) | -| **Key portability** | Determine whether users can import or export keys. | [Import/Export](https://docs.turnkey.com/sdks/react/using-embedded-wallets#importing-and-exporting-wallets) | - -### Custody model - -Choose how much control users and your app have over signing: - -| Model | Description | Why choose this? | -| :--------------------- | :----------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **User-controlled** | Only the user can authorize actions (self-custody). | **Full Sovereignty**: Best for non-custodial apps where users require exclusive signing authority via their own authenticators (e.g., passkeys). | -| **App-controlled** | Your backend can authorize actions (automation, trading, subscriptions). | **Seamless Automation:** Ideal for custodial products like trading bots or subscriptions that require acting on a user's behalf without manual approval. | -| **Delegated / hybrid** | Scoped permissions shared between user and backend. | **Frictionless UX:** Enables background actions (e.g., gas sponsorship or scheduled ops) while keeping the user in final control of asset transfers. | - -Configure via [policies](/concepts/policies/quickstart) -and[ sub-organization settings](/sdks/react/sub-organization-customization). See -[Delegated Access](/concepts/policies/delegated-access-frontend) for non-custodial, hybrid, and -app-controlled options. - -### Authentication - -Balance security and friction for your audience: - -- **Passkeys:** Phishing-resistant, biometric. See - [passkey authentication](/authentication/overview). -- **OAuth / email:** Familiar, low-friction. See - [Authentication Overview](/authentication/overview). -- **SMS:** Market-dependent; consider risk and compliance. - -Turnkey authentication plugs into your onboarding flow. You can use the -[Auth Proxy](/reference/auth-proxy) when you want backend-signed OTP/OAuth/signup with origin -enforcement and central config without hosting your own backend; your frontend calls Auth Proxy -endpoints directly. Alternatively, wire auth to your app. Get started with the -[Embedded Wallets Quickstart](/sdks/react/index). - -### Session management - -Choose how users stay authorized and where session credentials live: - -- **Read-write vs read-only:** Read-write sessions (OTP, OAuth, passkey sessions) let users perform - multiple signed actions in a time window. Read-only sessions suit low-touch apps where you mainly - need to read data (e.g., via parent-org access or a read-only session token). -- **Storage:** IndexedDB (web) for persistent, client-held sessions without exposing keys to your - JavaScript; SecureStorage (mobile); or LocalStorage (keys in app-accessible storage). -- **Session duration:** Default: 15 minutes (configurable via `expirationSeconds`). - -See [Sessions](/authentication/sessions) for mechanisms, refresh, and FAQ, and the -[Embedded Wallets Quickstart](/sdks/react/index) for configuration. - -### Wallet architecture - -Choose where keys are generated and how wallets interact with the blockchain. - -| Approach | Pros | Considerations | -| :------------------------- | :----------------------------------------------------------- | :----------------------------------------------- | -| **Key-based (HD wallets)** | Chain-agnostic, no on-chain deployment, broad compatibility. | Standard derivation and signing. | -| **Smart contract wallets** | Gas sponsorship, batching, advanced permissions. | Requires on-chain deployment and infrastructure. | - -Turnkey supports both. See [Wallets Concept](/concepts/wallets) and -[Transaction Management](/concepts/transaction-management) for derivation and gas sponsorship. - -### Gas sponsorship - -Provide gasless UX by sponsoring gas for your users. Turnkey supports sponsored transactions and -relay integration so users can sign and send without holding native tokens. - -See [Transaction Management](/concepts/transaction-management) for gas sponsorship, transaction -construction, broadcast, nonce management and monitoring capabilities. - -### Key portability - -Enable key portability and define whether users can import or export private keys. Enabling export -can support user sovereignty and long-term trust. See -[Import/Export wallets](https://docs.turnkey.com/sdks/react/using-embedded-wallets#importing-and-exporting-wallets). - -## Core security principles - -Embedded consumer wallet with Turnkey is built on these key principles: - -- **Keys never leave the enclave:** Private keys live in - [Trusted Execution Environments (TEEs)](/security/secure-enclaves). All derivation and signing - happen inside verifiable infrastructure; only signatures are returned. - [Remote attestation](https://whitepaper.turnkey.com/architecture) lets you verify enclave - integrity. Raw keys are never exposed to your app or to Turnkey. -- **Authenticator-bound requests:** Every sensitive operation is signed by a user-held authenticator - (passkey, email, etc.). The enclave verifies the signature and then performs the operation. No - request, no signing; a compromise outside the enclave cannot move funds. See - [Authentication Overview](/authentication/overview) for supported methods and - [Enclave to end-user secure channel](/security/enclave-secure-channels) for how requests are - verified. -- **Scoped, programmable control:** Choose non-custodial, hybrid, or app-controlled custody. - [Policies](/concepts/policies/quickstart) and sub-organization isolation limit who can sign what. -- **Trusted vs. untrusted separation:** Verification and execution run only inside secure enclaves. - Trusted and untrusted infrastructure are strictly separated so that a breach of your app or - backend does not expose keys or signing capability. - -## Architecture at a glance - -User authentication flows into a signed request to Turnkey. Inside the enclave, the -[policy engine](/concepts/policies/overview) evaluates the request; key derivation and signing -follow, and only the signature is returned. Your app can then broadcast the transaction through -another provider or with -[Turnkey Transaction Management](https://docs.turnkey.com/concepts/transaction-management#construction-and-broadcast). -For data flow and infrastructure details, see -[Embedded Wallets overview](/embedded-wallets/overview) and -[Secure enclaves](/security/secure-enclaves). - - - ![Embedded Consumer Wallets architecture: user/service, wallets, policy engine, authenticators, - secure enclave infrastructure](/assets/files/embedded-consumer-wallet.png) - +| **Custody model** | Choose who can authorize the enclave to sign: the user only (non-custodial), your application (custodial), or both with scoped permissions (hybrid). | [Custody models](/embedded-wallets/overview#custody-models) | +| **Authentication methods** | Choose user auth methods: Passkeys, OAuth/email, or SMS. You can use the [Auth Proxy](/reference/auth-proxy) for backend-signed OTP/OAuth/signup without your own backend, or wire auth to your app. | [Authentication Overview](/authentication/overview), [Auth Proxy](/reference/auth-proxy) | +| **Policies and guardrails** | Set guardrails for what your end users can do, such as spending limits, allowed destinations, or multi-party approval. Optionally let users configure their own guardrails within your app. | [Policies](/concepts/policies/overview), [Delegated Access](/concepts/policies/delegated-access-overview) | +| **Session management** | Allow a user to take multiple, contiguous actions in a defined period of time. Actions include: Read-write or read-only. | [Sessions](/authentication/sessions) | +| **Wallet architecture** | Choose between key-based (HD) or smart contract wallets for your users. Turnkey supports both. | [Wallets Concept](/concepts/wallets), [Transaction Management](/concepts/transaction-management) | +| **Gas sponsorship** | Integrate a gasless UX via sponsored transactions to cover who pays gas and how transactions are broadcast. | [Transaction Management](/concepts/transaction-management), [Sending sponsored transactions](/embedded-wallets/code-examples/sending-sponsored-transactions) | +| **Key portability** | Determine whether users can import or export keys. | [Import wallets](/products/company-wallets/features/import-wallets), [Export wallets](/products/company-wallets/features/export-wallets) | +| **Recovery flows** | Define how users regain access if they lose their authenticator. Options include email recovery and backup passkeys. | [Email recovery](/embedded-wallets/sub-organization-recovery) | +| **Agent-delegated signing** | Let end users grant scoped signing authority to AI agents or automated systems from their own wallet. The user retains root control and can revoke access at any time. | [End-User Delegated Agent Signing](/products/embedded-wallets/features/agentic-wallets) | ## Example: Neobank-style embedded consumer wallet @@ -153,89 +34,22 @@ Typical requirements and how Turnkey addresses them: | Requirement | Turnkey capability | | :-------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Seamless onboarding | Automated provisioning via [Quickstart](/sdks/react/getting-started) and [SDKs](/sdks/introduction) | -| User custody without key exposure | Keys remain in [secure enclaves](/security/secure-enclaves); only signatures are returned | +| Seamless onboarding | Passkey registration and automated wallet provisioning. See [Quickstart](/getting-started/embedded-wallet-quickstart) or [Integration Guide](/embedded-wallets/integration-guide/overview) | +| User custody without key exposure | Keys remain in [secure enclaves](/security/secure-enclaves); only signatures are returned. See [Security](/security/our-approach) | | Gasless UX | [Sponsored transactions](/concepts/transaction-management) and [sending sponsored transactions](/embedded-wallets/code-examples/sending-sponsored-transactions) | | Email-based auth and recovery | [Sub-organization recovery](/embedded-wallets/sub-organization-recovery) | | Send without wallet setup | [Claim links](/wallets/claim-links#claim-links): send via URL; recipient claims with email | -| Backend automation | [Delegated access](/concepts/policies/delegated-access-backend) and scoped signing policies | -| Multichain support | Chain-agnostic derivation and signing; [Networks](/networks/overview) and [Wallets Concept](/concepts/wallets) | -| Fast integration | [Code Examples Hub](/category/code-examples) and [SDKs](/sdks/introduction) | - -## Setting up your embedded consumer wallet - -Follow these steps to launch an embedded consumer wallet experience inside your app. - - - - Create an organization in the [Turnkey Dashboard](https://app.turnkey.com) and choose how end users authenticate (Email OTP, Passkeys, OAuth). - - **Docs** - - - [Account setup (create org)](https://docs.turnkey.com/getting-started/quickstart) - - [Auth Proxy overview](https://docs.turnkey.com/reference/auth-proxy) - - [Email authentication (OTP)](https://docs.turnkey.com/authentication/email) - - [Passkeys integration](https://docs.turnkey.com/authentication/passkeys/integration) - - - - Install and initialize the Turnkey SDK at app startup so sessions and wallet operations are ready immediately. - - **Docs** - - - [Embedded Wallet Kit (React)](https://docs.turnkey.com/sdks/react/getting-started) - - [Embedded Wallet Kit (React Native)](https://docs.turnkey.com/sdks/react-native/getting-started) - - - - Build your login/signup flow and gate wallet actions until: - - - The user is authenticated - - The Turnkey client is initialized - - **Docs** - - - [Wallet authentication guide](/sdks/react/auth) - - [OAuth signup helper](https://docs.turnkey.com/generated-docs/react-wallet-kit/client-context-type-add-oauth-provider) - - - - **On first login:** - - 1. Create a sub-organization - 2. Create a wallet - 3. Create required accounts (e.g., Ethereum, Solana) - - **Docs** - - - [Sub-organization customization](/sdks/react/sub-organization-customization) - - [Create wallet](https://docs.turnkey.com/sdks/react/using-embedded-wallets#creating-an-embedded-wallet) - - [Create wallet accounts](https://docs.turnkey.com/sdks/react/using-embedded-wallets#creating-wallet-accounts) - - - - Expose wallet functionality directly inside your app. - - **Signing Docs** - - - [Sign message](/sdks/react/signing) - - [Sign transaction](https://docs.turnkey.com/sdks/react/signing#signing-transactions) - - [Sign & send transaction](/embedded-wallets/code-examples/sending-sponsored-transactions) - - **Import / Export / Recovery (Optional) Docs** - - - [Import & Export wallets](https://docs.turnkey.com/wallets/export-wallets) - - - +| Backend automation | [Delegated access](/concepts/policies/delegated-access-overview) and scoped signing policies | +| Multichain support | Chain-agnostic derivation and signing. See [Networks](/networks/overview) and [Wallets Concept](/concepts/wallets) | +| Fast integration | Use the [Embedded Wallet Kit](/sdks/react/index) for built-in auth and wallet UI components. See [Quickstart](/getting-started/embedded-wallet-quickstart) | ## Next steps -Ready to build? You can start with the -[Embedded Wallets Quickstart](/getting-started/embedded-wallet-quickstart), explore the -[Features overview](/embedded-wallets/features/overview), or browse the -[Code Examples Hub](/category/code-examples). - - - ![Turnkey in action: Moonshot onboarding — email sign-in, verification, portfolio, and asset view](/assets/files/moonshot_consumerwallet.png) - + + + Explore the live demo, clone a starter app, or jump straight into building. + + + Step-by-step guides for React, React Native, Flutter, Swift, and Kotlin. + + diff --git a/embedded-wallets/embedded-waas-2.mdx b/embedded-wallets/embedded-waas-2.mdx index ac4467ed..b073c177 100644 --- a/embedded-wallets/embedded-waas-2.mdx +++ b/embedded-wallets/embedded-waas-2.mdx @@ -7,7 +7,7 @@ description: "Distribute embedded wallets through your developer platform with c With Turnkey, you can build a platform that distributes embedded wallets to your own customers. Your platform abstracts Turnkey behind your own SDK, APIs, or UI components. A 2-of-2 root quorum model gives your platform co-signing authority over every transaction, enabling billing gates, compliance checks, and risk controls at the infrastructure layer, while end users remain non-custodial. **Powered by Turnkey:** -- [DIMO](https://www.turnkey.com/customers/how-dimo-is-bringing-transportation-solutions-onchain-with-turnkey) -- decentralized transportation network with 165,000+ connected vehicles, built their own [transactions SDK](https://github.com/DIMO-Network/transactions) on Turnkey's infrastructure +- [DIMO](https://www.turnkey.com/customers/how-dimo-is-bringing-transportation-solutions-onchain-with-turnkey) -- decentralized transportation network with 165,000+ connected vehicles. 90% reduction in onboarding time, 30% increase in completion rates. Built their own [transactions SDK](https://github.com/DIMO-Network/transactions) on Turnkey's infrastructure ## What makes Wallet-as-a-Service different @@ -15,7 +15,7 @@ With [consumer wallets](/embedded-wallets/code-examples/embedded-consumer-wallet The defining pattern is the **2-of-2 root quorum**. Both the end user and your platform must approve every fund-moving transaction. The end user authenticates via passkey (or equivalent), then your platform evaluates its own rules (billing status, compliance, risk) before co-signing. If either party withholds approval, the transaction does not execute. -End users remain non-custodial because they can always [export their keys](/products/company-wallets/features/export-wallets) independently, without platform approval. +No transaction executes without the end user's authentication. End users remain non-custodial because they can always [export their keys](/products/company-wallets/features/export-wallets) independently, without platform approval. ### When to use Wallet-as-a-Service @@ -79,7 +79,7 @@ See [Delegated Access](/concepts/policies/delegated-access-overview) and [Polici Specify what gets created in every sub-org by default: wallet structure, supported chains/accounts, and baseline policies. -For the 2-of-2 quorum model, establish the threshold last so your platform can configure policies (including export) with only your platform's approval. Once the 2-of-2 quorum is established, the end user can trigger exports via the export policy without needing your platform's co-signature. +For the 2-of-2 quorum model, establish the threshold last so your platform can configure policies (including export) with only your platform's approval. Once the 2-of-2 quorum is established, the end user can trigger exports via the export policy without needing your platform's co-signature. This keeps the co-managed model non-custodial: end users can always export their keys and access their funds directly, independent of your platform. | Step | Action | Quorum State | | ---- | --------------------------------------------- | ------------ | diff --git a/embedded-wallets/embedded-waas.mdx b/embedded-wallets/embedded-waas.mdx index 1edc2255..3640e197 100644 --- a/embedded-wallets/embedded-waas.mdx +++ b/embedded-wallets/embedded-waas.mdx @@ -1,115 +1,89 @@ --- -title: "Embedded WaaS" -description: - "Build a white-labeled Wallet-as-a-Service product on Turnkey. This guide covers the step-by-step - implementation for embedding dedicated, non-custodial wallets with authenticators and signing - rules into your platform." +title: "Embedded Wallet-as-a-Service" +sidebarTitle: "Wallet-as-a-Service" +description: "Distribute embedded wallets through your developer platform with co-signing authority, billing gates, and compliance controls." --- -## Why Turnkey for Embedded WaaS? +With Turnkey, you can build a platform that distributes embedded wallets to your own customers. Your platform abstracts Turnkey behind your own SDK, APIs, or UI components. A 2-of-2 root quorum model gives your platform co-signing authority over every transaction, enabling billing gates, compliance checks, and risk controls at the infrastructure layer, while end users remain non-custodial. -Turnkey provides the infrastructure to embed wallets directly into your developer product without -building or managing key management yourself. Use it to provision isolated user wallets, enforce -signing policies, and create your own APIs, SDKs, and UI components on top of Turnkey. +**Powered by Turnkey:** +- [DIMO](https://www.turnkey.com/customers/how-dimo-is-bringing-transportation-solutions-onchain-with-turnkey) -- decentralized transportation network with 165,000+ connected vehicles. 90% reduction in onboarding time, 30% increase in completion rates. Built their own [transactions SDK](https://github.com/DIMO-Network/transactions) on Turnkey's infrastructure -## Core Principles +## What makes Wallet-as-a-Service different -- **Segregated environments per end user:** Each end user's wallets, credentials, policies, and - activity logs are fully isolated from other users and from your platform's management layer. -- **Configurable admin and billing controls:** For every fund-moving transaction, you can require - approval from both the end user and your platform, enforced directly at the signing layer. -- **User-authenticated action:** No transaction executes without the end user’s authentication - (e.g., passkey). -- **Non-custodial by design:** End users remain in control of their keys, while platform controls - allow you to manage transaction-level approvals. -- **User-controlled key export:** End users can [export their wallet](/wallets/export-wallets) - independently if they choose to leave, or if your platform goes offline. -- **Quorum control:** 2-of-2 root quorum ensures billing, compliance, and risk controls are enforced - at the cryptographic layer, while guaranteeing explicit user consent on every transaction. +With [consumer wallets](/embedded-wallets/code-examples/embedded-consumer-wallet) and [business wallets](/products/embedded-business-wallets/overview), your application integrates Turnkey directly and manages wallets for end users. With Wallet-as-a-Service, your platform is an intermediary layer: you build wallet infrastructure on top of Turnkey, and your customers integrate with your SDK rather than Turnkey directly. + +The defining pattern is the **2-of-2 root quorum**. Both the end user and your platform must approve every fund-moving transaction. The end user authenticates via passkey (or equivalent), then your platform evaluates its own rules (billing status, compliance, risk) before co-signing. If either party withholds approval, the transaction does not execute. + +No transaction executes without the end user's authentication. End users remain non-custodial because they can always [export their keys](/products/company-wallets/features/export-wallets) independently, without platform approval. + +### When to use Wallet-as-a-Service + +| Scenario | Why Wallet-as-a-Service fits | +| :-------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------- | +| Your customers embed wallets through your SDK, not Turnkey's | You own the developer experience end-to-end. Downstream integrators never interact with Turnkey directly. | +| You need platform-level co-signing on every transaction | 2-of-2 root quorum lets your platform enforce billing gates, compliance checks, or risk controls before any fund-moving transaction. | +| You want to white-label wallet infrastructure | Fork or wrap the Embedded Wallet Kit with your branding and expose your own APIs. Turnkey is invisible to your customers. | ## Architecture -The diagram below shows the recommended sub-org structure for a WaaS deployment using 2-of-2 root -quorum signing. +Each end user maps to a [Turnkey sub-organization](/concepts/sub-organizations). The sub-org contains the user's wallets, credentials, policies, and activity logs, fully isolated from other users and from your platform's management layer. typical waas provider and end user co-signing model -### Transaction Authorization Flow +### Transaction authorization flow -The sequence below describes the default funds-moving flow under the 2-of-2 root quorum model: - -- End user initiates a transaction from your embedded wallet UI. -- End user approves via their authenticator (e.g., passkey). Turnkey records the activity as - partially approved. -- Your platform evaluates on its own backend: billing status, risk/compliance rules, and any other - checks. -- Your platform approves via API key and the transaction executes. -- If the platform withholds approval, the transaction does not execute. +1. End user initiates a transaction from your embedded wallet UI +2. End user approves via their authenticator (e.g. passkey). Turnkey records the activity as partially approved +3. Your platform evaluates on its backend: billing status, risk/compliance rules, and any other checks +4. Your platform approves via API key and the transaction executes +5. If the platform withholds approval, the transaction does not execute typical waas negative control for transaction permission -Relevant docs: [Activities & approvals](/concepts/overview#activities) | -[Root quorum](/concepts/users/root-quorum) +See [Activities and approvals](/concepts/overview#activities) and [Root quorum](/concepts/users/root-quorum). -## How to Get Started on Embedded WaaS with Turnkey +## Implementation -### Step 1: Define the Tenant Model and Ownership Boundaries +### Step 1: Define the tenant model -Map each end user to a [Turnkey sub-organization](/concepts/sub-organizations). The standard -approach is one sub-org per end user. +Map each end user to a [sub-organization](/concepts/sub-organizations). One sub-org per end user. -- **Isolated tenants:** Each sub-org is a self-contained data boundary, with wallets, policies, - authenticators, and activity logs fully isolated from one another. -- **Scoped parent org permissions:** Your parent organization has read-only access to sub-orgs and - can initiate auth and recovery flows, but cannot sign transactions or modify policies within them. -- **External mapping:** Track the relationship between your platform's user IDs and their - corresponding Turnkey sub-org IDs in your own database. +- **Isolated tenants:** Each sub-org is a self-contained data boundary with wallets, policies, authenticators, and activity logs fully isolated from one another. +- **Scoped parent org permissions:** Your parent organization has read-only access to sub-orgs and can initiate auth and recovery flows, but cannot sign transactions or modify policies within them. +- **External mapping:** Track the relationship between your platform's user IDs and their corresponding Turnkey sub-org IDs in your own database. -Relevant docs: [Sub-organizations](/concepts/sub-organizations) | -[Root quorum](/concepts/users/root-quorum) +See [Sub-organizations](/concepts/sub-organizations) and [Root quorum](/concepts/users/root-quorum). -### Step 2: Design the Sub-Organization Control Model +### Step 2: Design the sub-organization control model -Define what lives inside each sub-org and how control is shared between your platform and the end -user. +Define what lives inside each sub-org and how control is shared between your platform and the end user. - **End user (root):** Authenticated via passkey or equivalent user-controlled authenticator. -- **WaaS provider (root):** Authenticated via API key. Used to approve or block transactions based - on your service rules. -- **Delegated Access (optional):** If needed for automation or backend-initiated workflows, add a - scoped non-root API key via [Delegated Access](/concepts/policies/delegated-access-overview). DA - must be tightly policy-scoped and should never have broad signing authority or bypass user - consent. +- **Platform provider (root):** Authenticated via API key. Used to approve or block transactions based on your service rules. +- **Delegated access (optional):** For automation or backend-initiated workflows, add a scoped non-root API key via [Delegated Access](/concepts/policies/delegated-access-overview). This must be tightly policy-scoped and should never have broad signing authority or bypass user consent. -**Relevant docs:** [Delegated Access](/concepts/policies/delegated-access-overview) | -[Policy scoping](/concepts/policies/overview) +See [Delegated Access](/concepts/policies/delegated-access-overview) and [Policies](/concepts/policies/overview). -### Step 3: Define Default Wallet and Policy Template +### Step 3: Create sub-org with wallet and export policy -Specify what gets created in every sub-org by default: wallet structure, supported chains/accounts, -and baseline policies. +Specify what gets created in every sub-org by default: wallet structure, supported chains/accounts, and baseline policies. -For the 2-of-2 quorum model, establish the threshold last so the backend can configure policies -(including export) with only your platform’s approval. Start by creating a sub-org with both root -users and wallets (Step 3a). Then, create the export policy while the platform has sole root access -(Step 3b). Once the 2-of-2 quorum is established (Step 3c), the end user can trigger exports via -this policy without needing your platform’s co-signature. This keeps the co-managed model -non-custodial because end users can always export their keys and access their funds directly, -independent of your platform. +For the 2-of-2 quorum model, establish the threshold last so your platform can configure policies (including export) with only your platform's approval. Once the 2-of-2 quorum is established, the end user can trigger exports via the export policy without needing your platform's co-signature. This keeps the co-managed model non-custodial: end users can always export their keys and access their funds directly, independent of your platform. | Step | Action | Quorum State | | ---- | --------------------------------------------- | ------------ | -| 3a | Create sub-org with both root users \+ wallet | 1-of-2 | +| 3a | Create sub-org with both root users + wallet | 1-of-2 | | 3b | Create export policy for end user | 1-of-2 | | 3c | Update threshold to 2 | **2-of-2** | @@ -170,93 +144,34 @@ await turnkeyClient.updateRootQuorum({ }); ``` -Relevant docs: [Export wallets](/wallets/export-wallets) | -[Policy examples](/concepts/policies/examples/access-control) - -### Step 4: Build the Developer-Facing SDK or Integration Surface - -Create the SDK, APIs, or UI components that downstream developers will integrate with. Abstract away -Turnkey and expose only your platform's intended wallet, auth, and signing flows. - -- **Embedded Wallet Kit (EWK):** Fork or wrap [Embedded Wallet Kit](/sdks/react/index) components - (e.g., authentication, wallet UI, and approval prompts) with your branding and surface "pending - platform approval" states. -- **Backend service:** Handle platform root approvals (via API key), billing and risk evaluation, - and activity monitoring through your backend. -- **SDK abstraction layer:** Wrap Turnkey's SDK calls behind your own interface for full control - over the developer experience, with flexibility to swap or upgrade infrastructure without breaking - integrations. - -Relevant docs: [Embedded Wallet Kit](/sdks/react/index) | -[SDK reference](/generated-docs/react-wallet-kit/client-context-type-handle-login) - -### Step 5: Incorporate the Embedded Wallet into the Platform Flow - -Wire the wallet into your onboarding and runtime flows so every downstream integration inherits a -working embedded wallet. - -- **Onboarding:** Handle Turnkey org setup, auth configuration, and the staged sub-org creation flow - as part of your user registration. The end user should experience passkey registration (or - equivalent) as a natural part of sign-up. -- **Client initialization:** Initialize the Turnkey client with the user's sub-org context on each - session. Use [sessions](/authentication/sessions) for batched signing workflows to reduce - authentication friction during active use. -- **Transaction flow:** Surface the approval prompt via EWK components, submit the user's approval - to Turnkey, run your backend checks, then co-sign or withhold. -- **Recovery:** Expose the export flow in your settings UI so users can self-serve wallet recovery. - Turnkey's enclave encrypts the mnemonic to a user-generated target key via HPKE. Neither Turnkey - nor your platform can view the exported material. - -## Use Cases - -| Need | Configuration | -| -------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Fintech or neobank with card-linked crypto wallets | **Co-managed with billing gates:** Platform co-signs after verifying account standing. Export policy as user escape hatch. Passkey auth for consumer UX. | -| Dev tooling platform reselling embedded wallets | **White-labeled EWK with SDK abstraction:** Downstream developers integrate with your SDK, never touching Turnkey directly. Segregated environments per end user, provider co-sign for compliance. | -| Self-custody consumer wallet | **Self-custody model:** Maximum user sovereignty. Provider handles auth initiation and UX but has no signing authority. Application-layer controls for billing. | -| Institutional or high-value accounts | **Co-managed with policy-based limits:** Transaction-aware policies for amount thresholds, sanctioned address deny-lists, and chain restrictions. | - -## The Result: Non-Custodial Control at the Infrastructure Layer - -Embedded WaaS with Turnkey lets you build wallets into your dev platform without owning custody or -managing key infrastructure. - -- **Tenant isolation:** Isolated user wallets, credentials, and activity logs help protect end - users’ key material and data. -- **Quorum control:** 2-of-2 root quorum guarantees explicit user consent on every transaction. -- **Flexible models:** Customers can evolve custody models over time as needs change. -- **Full auditability:** Every operation is logged and nothing moves unless both the user and your - platform approve. - -## DIMO Case Study - -[DIMO](https://dimo.co/) is a decentralized transportation network connecting over 165,000 vehicles. -Drivers share vehicle data to access apps for insurance, fleet management, and predictive -maintenance. DIMO uses Turnkey to power its embedded wallet infrastructure, replacing a fragmented -onboarding flow that required external wallet apps and seed phrases. - -With Turnkey, DIMO delivered: - -- **Passkey-first onboarding:** DIMO replaced seed phrases and external wallet installs with - Turnkey's passkey authentication, cutting sign-in time from 2 minutes to 10 seconds and boosting - onboarding completion by 30%. -- **Fully branded interface:** DIMO built a native auth and signing experience on an open-source - [transactions SDK](https://github.com/DIMO-Network/transactions), powered by Turnkey’s Embedded - WaaS passkey-based signing. -- **Sub-org per user with full ownership:** Each driver gets an independent sub-organization, giving - them complete control of their credentials and transactions while DIMO retains the governance - layer needed for enterprise compliance. -- **2-3 week integration:** DIMO deployed into their global login stack in under three weeks. - -Read the full case study: -[How DIMO is bringing transportation solutions onchain with Turnkey](https://www.turnkey.com/customers/how-dimo-is-bringing-transportation-solutions-onchain-with-turnkey) - -## Resources - -- [Sub-organizations](/concepts/sub-organizations): Tenant isolation and user modeling -- [Root quorum](/concepts/users/root-quorum): Multi-party approval and ownership configuration -- [Policy engine](/concepts/policies/overview): Authorization rules, transaction controls, and - export policies -- [Embedded Wallet Kit](/reference/embedded-wallet-kit): Prebuilt UI components for auth and wallet - flows -- [Export wallets](/products/company-wallets/features/export-wallets): Key export and user recovery +See [Export wallets](/products/company-wallets/features/export-wallets) and [Policy examples](/concepts/policies/examples/access-control). + +### Step 4: Build your integration surface + +Create the SDK, APIs, or UI components that downstream developers will integrate with. Abstract Turnkey and expose only your platform's intended wallet, auth, and signing flows. + +- **Embedded Wallet Kit (EWK):** Fork or wrap [EWK](/sdks/react/index) components (authentication, wallet UI, approval prompts) with your branding. Surface "pending platform approval" states in the transaction flow. +- **Backend service:** Handle platform root approvals (via API key), billing and risk evaluation, and activity monitoring through your backend. +- **SDK abstraction layer:** Wrap Turnkey's SDK calls behind your own interface for full control over the developer experience. + +See [Embedded Wallet Kit](/sdks/react/index) and [SDK Reference](/sdks/introduction). + +### Step 5: Wire the wallet into your platform flow + +Integrate the wallet into your onboarding and runtime flows so every downstream integration inherits a working embedded wallet. + +- **Onboarding:** Handle Turnkey org setup, auth configuration, and the staged sub-org creation flow as part of user registration. The end user should experience passkey registration as a natural part of sign-up. +- **Client initialization:** Initialize the Turnkey client with the user's sub-org context on each session. Use [sessions](/authentication/sessions) for batched signing workflows to reduce authentication friction. +- **Transaction flow:** Surface the approval prompt via EWK components, submit the user's approval to Turnkey, run your backend checks, then co-sign or withhold. +- **Recovery:** Expose the export flow in your settings UI so users can self-serve wallet recovery. Turnkey's enclave encrypts the mnemonic to a user-generated target key via HPKE. Neither Turnkey nor your platform can view the exported material. + +## Next steps + + + + Create a Turnkey organization and generate your API keypair. + + + Detailed method documentation for all Turnkey SDKs. + + diff --git a/embedded-wallets/overview-2.mdx b/embedded-wallets/overview-2.mdx index bdcb5be8..d901906c 100644 --- a/embedded-wallets/overview-2.mdx +++ b/embedded-wallets/overview-2.mdx @@ -86,12 +86,6 @@ Embedded wallets serve different needs depending on who holds the wallet and how > White-labeled wallet infrastructure for platforms that resell embedded wallets to their own customers.
- - Delegated wallet access for AI agents and automated systems, scoped by granular policy controls. - ## Ready to build? diff --git a/embedded-wallets/overview.mdx b/embedded-wallets/overview.mdx index 607f4d8f..fd78bd45 100644 --- a/embedded-wallets/overview.mdx +++ b/embedded-wallets/overview.mdx @@ -1,51 +1,77 @@ --- title: "Overview" -sidebarTitle: "Overview" --- -With Embedded Wallets, you can create custom wallet experiences that are seamlessly integrated into your product, without compromising on security. Whether you need custodial or non-custodial wallets, our infrastructure provides the foundation for building innovative, user-friendly crypto products. +## What are embedded wallets? -## Why embedded wallets? +An embedded wallet is a crypto wallet built directly into your application. Instead of asking users to install a browser extension or manage seed phrases, your app handles wallet creation, authentication, and signing behind the scenes. **Users interact with your product; the wallet is infrastructure they never have to think about.** -Embedded Wallets give you the freedom to design and control the entire user experience, while offloading the complexity and risk of private key management to Turnkey. +## Why Turnkey for embedded wallets? -With Embedded Wallets, you can: +Building embedded wallets from scratch means solving key management, multi-chain signing, authentication, custody models, and policy controls, all without exposing private keys. Turnkey handles this infrastructure so you can focus on your product. -- Leverage pre-built UI components to speed up your integration -- Easily create a variety of wallets for your users -- Authenticate users via email, phone number, biometrics, social logins, etc -- Determine delegated access and co-owernership controls -- Access out-of-the-box support for multiple chains and assets -- Sign multiple transactions without additional approvals -- Access simple integrations for gas sponsorship and smart contract wallets +With Turnkey, you can: -## Building with Turnkey +- Authenticate users via email, phone number, biometrics, social logins, or passkeys +- Create and manage wallets across multiple chains +- Configure custodial, non-custodial, or hybrid custody models +- Control signing permissions with a programmable policy engine +- Sponsor gas so users never need native tokens +- Leverage pre-built UI components or build fully custom experiences +- Import and export keys to support user sovereignty + +## How it works + +User authentication flows into a signed request to Turnkey. Inside the secure enclave, the +[policy engine](/concepts/policies/overview) evaluates the request; key derivation and signing +follow, and only the signature is returned. Your app can then broadcast the transaction through +another provider or with +[Turnkey Transaction Management](/concepts/transaction-management). + + + ![Embedded Wallets architecture: user/service, wallets, policy engine, authenticators, + secure enclave infrastructure](/assets/files/embedded-consumer-wallet.png) + + +### Custody models + +We recommend creating a Turnkey [sub-organization](/concepts/sub-organizations) for each end user. This gives every user a fully isolated environment with their own wallets, credentials, and policies. + +Private keys in Turnkey never leave the [secure enclave](/security/secure-enclaves). Custody is determined by who holds the credentials that can authorize the enclave to sign. -For React applications, the **Embedded Wallet Kit (EWK)** is the recommended starting point. It provides pre-built auth and wallet UI components, a hook-based API, and requires no backend. It is the most opinionated path — designed to get you to a working embedded wallet with minimal configuration. +- **Non-custodial:** The user is the sole party with signing authority. Only their authenticator (passkey, email, biometric) can authorize the enclave to produce a signature. Users can [export their keys](/products/company-wallets/features/export-wallets) to access assets independently of your application. +- **Custodial:** Your application holds signing authority (via API key) and can authorize transactions without per-action user approval. Common for automated workflows like trading or subscription payments. +- **Hybrid:** Both the user and your application hold credentials, but [policies](/concepts/policies/quickstart) define what each party can authorize. For example, the user controls asset transfers while your app handles gas sponsorship or scheduled operations. -If you need more control, Turnkey provides SDKs for React Native, Swift, Kotlin, Flutter, and a framework-agnostic core library. For fully custom implementations, you can call the Turnkey API directly. +Turnkey supports all three models. The custody configuration is up to your application and can be tailored to match your product's requirements. -See the [SDK Reference](/sdks/introduction) for all available libraries. +### Security model -### Custodial vs non-custodial +- **Keys never leave the enclave.** Private keys live in [Trusted Execution Environments (TEEs)](/security/secure-enclaves). All derivation and signing happen inside verifiable infrastructure; only signatures are returned. +- **Authenticator-bound requests.** Every sensitive operation is signed by a user-held authenticator (passkey, email, etc.). The enclave verifies the signature before performing the operation. See [Authentication Overview](/authentication/overview). +- **Scoped, programmable control.** Choose non-custodial, hybrid, or app-controlled custody. [Policies](/concepts/policies/quickstart) and sub-organization isolation limit who can sign what. +- **Trusted vs. untrusted separation.** Verification and execution run only inside secure enclaves. A breach of your app or backend does not expose keys or signing capability. -Turnkey's Embedded Wallets are built on top of Sub-Organizations. -Each wallet is represented by a sub-organization, which can be configured with different security settings and access controls. +For a deeper look, see [Security](/security/our-approach) and [Secure Enclaves](/security/secure-enclaves). -- For custodial wallets, your application holds the master key and can initiate transactions on behalf of users. -- For non-custodial wallets, users hold their own private keys and must approve each transaction, - using one of their configured [authentication](/authentication/overview) methods. +## Building with Turnkey + +For React applications, the **[Embedded Wallet Kit (EWK)](/sdks/react/index)** is the recommended starting point. It provides pre-built auth and wallet UI components, a hook-based API, and requires no backend. It is the most opinionated path, designed to get you to a working embedded wallet with minimal configuration. + +Turnkey also provides SDKs for [React Native](/sdks/react-native/overview), [Swift](/sdks/swift/overview), [Kotlin](/sdks/kotlin/overview), and [Flutter](/sdks/flutter/index). For fully custom implementations, you can call the Turnkey API directly. + +See the [Integration Guide](/embedded-wallets/integration-guide/overview) to start building, or the [SDK Reference](/sdks/introduction) for detailed method documentation. ## Use cases -Find guidance tailored to what you're building. +Embedded wallets serve different needs depending on who holds the wallet and how it's operated. Choose the pattern that matches what you're building. - Give users self-custodial wallets with passkey, email, or social login. No seed phrases or browser extensions. + One wallet per end user. Users authenticate with passkeys, email, or social login. No seed phrases or browser extensions. - Build a white-labeled WaaS with isolated per-user wallets and your own APIs and UI on top. - - - Let embedded wallet users delegate spending permissions to an AI agent. + White-labeled wallet infrastructure for platforms that resell embedded wallets to their own customers. ## Ready to build? -- [Quickstart](/getting-started/embedded-wallet-quickstart) — explore the live demo, clone a starter app, or jump straight into building -- [Integration Guide](/embedded-wallets/integration-guide/overview) — step-by-step guides for React, React Native, Flutter, Swift, and Kotlin -- [Documentation](/authentication/overview) — dig into the underlying concepts: auth, wallets, policies, and more +- [Quickstart](/getting-started/embedded-wallet-quickstart) -- explore the live demo, clone a starter app, or jump straight into building +- [Integration Guide](/embedded-wallets/integration-guide/overview) -- step-by-step guides for React, React Native, Flutter, Swift, and Kotlin +- [Documentation](/authentication/overview) -- dig into the underlying concepts: auth, wallets, policies, and more diff --git a/products/embedded-business-wallets/overview-2.mdx b/products/embedded-business-wallets/overview-2.mdx index 0834a138..888feb9c 100644 --- a/products/embedded-business-wallets/overview-2.mdx +++ b/products/embedded-business-wallets/overview-2.mdx @@ -25,6 +25,7 @@ Turnkey enables developers to build shared business wallets with role-based cont | **Gas sponsorship** | Integrate a gasless UX via sponsored transactions to cover who pays gas and how transactions are broadcast. | [Transaction Management](/concepts/transaction-management), [Sending sponsored transactions](/embedded-wallets/code-examples/sending-sponsored-transactions) | | **Key portability** | Determine whether users can import or export keys. | [Import wallets](/products/company-wallets/features/import-wallets), [Export wallets](/products/company-wallets/features/export-wallets) | | **Recovery flows** | Define how users regain access if they lose their authenticator. Options include email recovery and backup passkeys. | [Email recovery](/embedded-wallets/sub-organization-recovery) | +| **Agent-delegated signing** | Let end users grant scoped signing authority to AI agents or automated systems from their own wallet. The user retains root control and can revoke access at any time. | [End-User Delegated Agent Signing](/products/embedded-wallets/features/agentic-wallets) | ## Example: Payments platform with role-based controls diff --git a/products/embedded-business-wallets/overview.mdx b/products/embedded-business-wallets/overview.mdx index d52f3285..d1083686 100644 --- a/products/embedded-business-wallets/overview.mdx +++ b/products/embedded-business-wallets/overview.mdx @@ -1,195 +1,53 @@ --- title: "Embedded Business Wallets" -description: "Turnkey provides non-custodial business wallets that allow multiple employees or operators to access a shared wallet with customizable permissions and signing controls." +description: "Shared wallets with role-based signing controls for teams, operators, and finance workflows." --- -With Embedded Business Wallets, businesses can grant different levels of access to team members, enabling business operations like seamless onchain payroll automation, vendor payments, merchant settlements, and more. - -## Why Turnkey for Embedded Business wallets? - -Turnkey's [Embedded Wallet Kit](/embedded-wallets/overview) powers some of the largest consumer applications in crypto, creating user accounts and accompanying wallets using familiar authentication like passkeys, email, and social login. Embedded Business Wallets bring that same infrastructure to business operations. - -Assign roles to users within your customers' organizations such as `finance-team`, `operator`, or `accounts-payable`. Then, write policies that reference those roles to control who can sign, what they can sign, and under what conditions. For example, require two finance approvers for large transfers or restrict a backend service to paying only pre-approved vendors. - -## Core principles - -**Instant wallet provisioning** -Create secure wallets for businesses with familiar authentication methods, plug & play UI components, and options for white-labeling using [Embedded Wallet Kit](/embedded-wallets/overview). - -**Scoped org hierarchy** -Parent organizations can create fully isolated [sub-organizations](/concepts/sub-organizations) for each business customer — each with their own wallets, users, and policies, all managed from a single integration. - -**Role-based access controls (RBAC)** -Restrict actions based on a user's assigned role rather than their individual identity. Roles are represented by tags assigned to users and services. [Policies](/concepts/policies/overview) reference these tags to determine wallet access, transaction signing permissions, and approval conditions for each role. - -**Transaction Management and Gas Sponsorship** -Sponsor gas fees and manage the transaction lifecycle end-to-end from construction to broadcast. See [Transaction Management](/concepts/transaction-management). - -## Architecture - - - Embedded Business Wallets architecture showing sub-organizations with users, roles, and policies per business - - -## How to get started on Embedded Business wallets with Turnkey - -1. **Set up Turnkey and end-user authentication:** Create a Turnkey org and configure how users will authenticate (e.g., email OTP, passkeys, OAuth). -2. **Integrate Turnkey into the application and initialize the client:** Add Turnkey to the app so authentication, sessions, and wallet operations are available at runtime. -3. **Provision a sub-organization per business or account:** Create a sub-org that represents the business entity and will contain its wallets, users, and policies. -4. **Expose roles and permissions in the application UI:** Build UI that allows business users to manage roles (admin, operator, viewer) which map to Turnkey users and policies within the sub-org. -5. **Enable business-grade wallet actions:** Surface wallet functionality (send/receive, signing, recovery) with policy-backed controls that reflect the business's internal approval structure. - -## Example policies your customers can configure - -| Need | RBAC Configuration | -| :--- | :--- | -| Treasury Manager initiates high-value transactions, requiring sign-off from both the CFO and Controller before processing. | **Multi-approval workflow:** Require 2+ approvers for high-value transactions | -| The Controller or Head of Finance needs to maintain approved vendors and spending limits without manual review. | **Contractor and vendor payments:** Payments to allowlisted addresses with set spending limits. Manage the allowlist to add or remove recipients. | -| Finance or Treasury needs to automatically execute recurring payments with set schedules, recipients, and amounts. | **Scheduled payments:** Restrict backend services to send recurring disbursements to approved recipients. | -| Any changes to policies or admin permissions should require more than one executive approval. | **Organization admin / Root Quorum:** Require 2+ executives to approve changes to policies, permissions, or user access. | - - - - Create a [Turnkey organization](https://app.turnkey.com/dashboard/auth/initial) and choose which authentication methods to offer your business users. Turnkey supports [passkeys](/authentication/passkeys/introduction), [email OTP](/authentication/email), [phone OTP](/authentication/sms), and [social logins](/authentication/social-logins) out of the box. Enable your preferred methods in the [dashboard](https://app.turnkey.com) or via API. This determines how business users will log in, create sessions, and authorize wallet operations within their sub-organizations. - - - - Add Turnkey to your application to enable authentication, sessions, and wallet operations for your business users. Our [React Wallet Kit](/sdks/react) provides a drop-in provider component that handles client initialization, session management, and wallet UI. - - ```tsx - import { TurnkeyProvider } from "@turnkey/react-wallet-kit"; - - const turnkeyConfig = { - organizationId: process.env.NEXT_PUBLIC_ORGANIZATION_ID!, - authProxyConfigId: process.env.NEXT_PUBLIC_AUTH_PROXY_CONFIG_ID!, - }; - - export function Providers({ children }: { children: React.ReactNode }) { - return ( - - {children} - - ); - } - ``` - - For server-side operations like provisioning sub-organizations or creating policies, use the [@turnkey/sdk-server](https://www.npmjs.com/package/@turnkey/sdk-server) package. - - - - Create a sub-organization for each of your business customers. Each sub-organization is an isolated environment containing its own wallets, users, and policies. One business cannot access the resources of another. When creating a sub-organization, you can provision an initial [root user](/concepts/users/root-quorum) and wallet in a single API call. Root users can execute any action or bypass policies if a defined [quorum](/concepts/users/root-quorum) is met. Non-root users can be added after and are recommended for day-to-day operations. They are governed by the policies defined in the sub-organization. - - ```ts - import { Turnkey } from "@turnkey/sdk-server"; - - const turnkey = new Turnkey({ - defaultOrganizationId: process.env.TURNKEY_ORGANIZATION_ID, - apiBaseUrl: "https://api.turnkey.com", - apiPrivateKey: process.env.TURNKEY_API_PRIVATE_KEY, - apiPublicKey: process.env.TURNKEY_API_PUBLIC_KEY, - }); - - const apiClient = turnkey.apiClient(); - - const { subOrganizationId } = await apiClient.createSubOrganization({ - subOrganizationName: "Northstar Logistics", - rootUsers: [ - { - userName: "James Rivera", - userEmail: "james.rivera@northstarlogistics.com", - authenticators: [], - apiKeys: [], - oauthProviders: [], - }, - ], - rootQuorumThreshold: 1, - wallet: { - walletName: "Northstar Treasury", - accounts: [ - { - curve: "CURVE_SECP256K1", - pathFormat: "PATH_FORMAT_BIP32", - path: "m/44'/60'/0'/0/0", - addressFormat: "ADDRESS_FORMAT_ETHEREUM", - }, - ], - }, - }); - ``` - - Your application logic manages resources in each sub-org such as users, tags, and policies on behalf of your business customers. See [Sub-Organizations](/concepts/sub-organizations) for more detail. - - - - Build UI that allows the root user(s) to add team members and assign roles (admin, operator, viewer) represented by Turnkey users and policies in the sub-organization. When a root user adds a team member or updates a policy, your backend executes the corresponding action in their sub-organization. - - - Example application UI showing team members and role assignments for Northstar Logistics - - - ```ts - // Create role tags - const { userTagId: financeTagId } = await apiClient.createUserTag({ - userTagName: "finance-team", - userIds: [], - }); - - const { userTagId: operatorTagId } = await apiClient.createUserTag({ - userTagName: "operator", - userIds: [], - }); - - // Add the Head of Finance with the finance role - await apiClient.createUsers({ - users: [ - { - userName: "Sarah Chen", - userEmail: "sarah.chen@northstarlogistics.com", - userTags: [financeTagId], - apiKeys: [], - authenticators: [], - oauthProviders: [], - }, - ], - }); - ``` - - Business users assign roles through your UI, and your application creates the corresponding tags and policies in their sub-org. Once roles are in place, create policies that reference them. See [Policy Quickstart](/concepts/policies/quickstart) for guidance. - - - - Surface wallet functions like sending payments, signing transactions, and recovery. Combine these with policy-backed controls that reflect the business's internal approval structure. If a transaction doesn't match an allowed policy, it's rejected. - - **Top-level policy:** Enforce a maximum transaction size of $100,000 USDC across all business wallets. - - ```json - { - "policyName": "Global per-transaction USDC limit", - "effect": "EFFECT_DENY", - "consensus": "approvers.any(user, true)", - "condition": "eth.tx.to == '' && eth.tx.function_name == 'transfer' && eth.tx.contract_call_args['value'] > 100000000000" - } - ``` - - **User-configured policy:** When your customers add approved vendors, they dynamically create a policy in their sub-organization. - - ```ts - await apiClient.createPolicy({ - policyName: "Auto-approve payments to allowlisted vendors", - effect: "EFFECT_ALLOW", - consensus: "approvers.any(user, user.tags.contains('accounts-payable'))", - condition: `wallet.id == '${walletId}' && eth.tx.to == '${usdcContractAddress}' && eth.tx.function_name == 'transfer' && eth.tx.contract_call_args['to'] in [${vendorAddresses.map(a => `'${a}'`).join(', ')}]`, - }); - ``` - - Our policy engine covers a wide range of uses. See [Policy Language](/concepts/policies/language) to start creating policies for your business users. - - - -## The result: secure, automated onchain payments - -Embedded Business Wallets with Turnkey enables you to launch business wallets built for how your customers operate. Power onchain payroll, vendor payments, and settlements using white-labeled, non-custodial wallets with role-based permissions for secure, automated business transactions. - -## Case study - -[Mural Pay](https://www.turnkey.com/customers/mural-pay-cross-border-payments), a payments platform, uses Embedded Business Wallets with Turnkey to deliver a simplified experience. They can spin up non-custodial embedded wallets in minutes with familiar login methods like passkey or email authentication. Without seed phrases, business users can rely on email-based flows to recover access to lost wallets. Using Turnkey, Mural Pay simplifies cross-border payments for global businesses, fintechs, and banks. +With Turnkey, your application can provision wallets designed for team usage. Multiple end users operate within a single sub-organization with role-based access control governed by the policy engine. No seed phrases, no browser extensions. + +**Powered by Turnkey:** +- [Mural Pay](https://www.turnkey.com/customers/mural-pay-cross-border-payments) -- cross-border stablecoin payments platform processing 5,000+ monthly transactions for global businesses, fintechs, and banks +- [AllScale](https://www.turnkey.com/customers/allscale-cross-border-stablecoin-transactions) -- stablecoin neobank where small businesses manage payments with team-based wallet access + +## Key implementation decisions + +Turnkey enables developers to build shared business wallets with role-based controls across dimensions such as organization hierarchy, access control, and custody. See the key implementation decisions below to curate the exact experience your business customers need. + +| Decision | Explanation | Learn more | +| :------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **Organization hierarchy** | Create a sub-organization for each business customer. Each sub-org is a fully isolated environment with its own wallets, users, and policies. | [Sub-Organizations](/concepts/sub-organizations) | +| **Role-based access control** | Assign roles to users via tags (e.g. `finance-team`, `operator`, `admin`). Write policies that reference these roles to control who can sign, what they can sign, and under what conditions. | [Policies](/concepts/policies/overview), [Policy Language](/concepts/policies/language) | +| **Policies and guardrails** | With roles in place, enforce spending limits, require multi-party approval for high-value transactions, restrict payments to allowlisted addresses, or require quorum for policy changes. Optionally let business customers configure their own guardrails. | [Policies](/concepts/policies/overview), [Delegated Access](/concepts/policies/delegated-access-overview) | +| **Custody model** | Choose who can authorize the enclave to sign: the user only (non-custodial), your application (custodial), or both with scoped permissions (hybrid). Business wallets commonly use hybrid custody with policy-backed controls. | [Custody models](/embedded-wallets/overview#custody-models) | +| **Authentication methods** | Choose user auth methods: Passkeys, OAuth/email, or SMS. You can use the [Auth Proxy](/reference/auth-proxy) for backend-signed OTP/OAuth/signup without your own backend, or wire auth to your app. | [Authentication Overview](/authentication/overview), [Auth Proxy](/reference/auth-proxy) | +| **Session management** | Allow a user to take multiple, contiguous actions in a defined period of time. Actions include: Read-write or read-only. | [Sessions](/authentication/sessions) | +| **Gas sponsorship** | Integrate a gasless UX via sponsored transactions to cover who pays gas and how transactions are broadcast. | [Transaction Management](/concepts/transaction-management), [Sending sponsored transactions](/embedded-wallets/code-examples/sending-sponsored-transactions) | +| **Key portability** | Determine whether users can import or export keys. | [Import wallets](/products/company-wallets/features/import-wallets), [Export wallets](/products/company-wallets/features/export-wallets) | +| **Recovery flows** | Define how users regain access if they lose their authenticator. Options include email recovery and backup passkeys. | [Email recovery](/embedded-wallets/sub-organization-recovery) | +| **Agent-delegated signing** | Let end users grant scoped signing authority to AI agents or automated systems from their own wallet. The user retains root control and can revoke access at any time. | [End-User Delegated Agent Signing](/products/embedded-wallets/features/agentic-wallets) | + +## Example: Payments platform with role-based controls + +Typical requirements and how Turnkey addresses them: + +| Requirement | Turnkey capability | +| :-------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Multi-user team access | One [sub-organization](/concepts/sub-organizations) per business customer with isolated wallets, users, and [role-based policies](/concepts/policies/overview) | +| Non-custodial with oversight | Hybrid custody with [policy engine](/concepts/policies/overview) controls. See [Custody models](/embedded-wallets/overview#custody-models) | +| Multi-party approval | [Policies](/concepts/policies/language) requiring 2+ approvers for high-value transactions or policy changes | +| Vendor and recipient controls | Allowlisted addresses and spending limits via [policy language](/concepts/policies/language) | +| Familiar auth for non-crypto users | Passkey and email authentication with [email recovery](/embedded-wallets/sub-organization-recovery). No seed phrases | +| Cross-border payments | Chain-agnostic derivation and signing. See [Networks](/networks/overview) and [Wallets Concept](/concepts/wallets) | +| Gasless UX | [Sponsored transactions](/concepts/transaction-management) and [sending sponsored transactions](/embedded-wallets/code-examples/sending-sponsored-transactions) | +| Fast integration | Use the [Embedded Wallet Kit](/sdks/react/index) for built-in auth and wallet UI components. See [Quickstart](/getting-started/embedded-wallet-quickstart) | + +## Next steps + + + + Explore the live demo, clone a starter app, or jump straight into building. + + + Step-by-step guides for React, React Native, Flutter, Swift, and Kotlin. + + diff --git a/products/embedded-wallets/features/agentic-wallets.mdx b/products/embedded-wallets/features/agentic-wallets.mdx index 728390bd..952e5d7b 100644 --- a/products/embedded-wallets/features/agentic-wallets.mdx +++ b/products/embedded-wallets/features/agentic-wallets.mdx @@ -1,6 +1,7 @@ --- -title: "Agentic wallets" -description: "Enable AI agents and automated systems to operate crypto wallets with granular policy controls" +title: "End-User Delegated Agent Signing" +sidebarTitle: "Agent Signing" +description: "Let embedded wallet users delegate scoped signing authority to AI agents, controlled by granular policies" --- ## What is an agentic wallet? diff --git a/solutions/overview.mdx b/solutions/overview.mdx index e36e589b..441bad08 100644 --- a/solutions/overview.mdx +++ b/solutions/overview.mdx @@ -20,9 +20,6 @@ Wallet experiences built directly into your product. Users authenticate with ema Multi-user access with policy controls and automated payment flows. - - Transaction signing and smart contract interaction for AI agents. - White-labeled wallets with isolated user environments for your own wallet product. From 8b5549c6b610566c72ac0868f8da536b5c59e0ec Mon Sep 17 00:00:00 2001 From: Henry Wilson Date: Tue, 5 May 2026 17:13:53 -0400 Subject: [PATCH 031/117] restore sdk landing page --- docs.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs.json b/docs.json index 4d138eab..6596f34a 100644 --- a/docs.json +++ b/docs.json @@ -521,7 +521,7 @@ { "group": "SDK reference", "pages": [ - "category/advanced", + "sdks/introduction", { "group": "React wallet kit", "pages": [ From 8a14db54a8644528895d2d256d63040016c208a8 Mon Sep 17 00:00:00 2001 From: Henry Wilson Date: Tue, 5 May 2026 17:45:54 -0400 Subject: [PATCH 032/117] remove cli from company wallets quickstart, bring over sdk-server --- docs.json | 3 +- .../company-wallets-quickstart.mdx | 144 ++++++++---------- 2 files changed, 68 insertions(+), 79 deletions(-) diff --git a/docs.json b/docs.json index 6596f34a..620498dc 100644 --- a/docs.json +++ b/docs.json @@ -206,8 +206,7 @@ "company-wallets/use-cases/agentic-wallets" ] }, - "getting-started/company-wallets-quickstart", - "company-wallets/code-examples/signing-transactions" + "getting-started/company-wallets-quickstart" ] }, { diff --git a/getting-started/company-wallets-quickstart.mdx b/getting-started/company-wallets-quickstart.mdx index d4705529..4244f4ae 100644 --- a/getting-started/company-wallets-quickstart.mdx +++ b/getting-started/company-wallets-quickstart.mdx @@ -10,110 +10,100 @@ This guide assumes you've completed the steps to create an account, organization ## Installation -Install the Turnkey CLI to get started: + -```bash -brew install tkhq/tap/turnkey +```bash npm +npm install @turnkey/sdk-server @turnkey/viem viem +``` + +```bash yarn +yarn add @turnkey/sdk-server @turnkey/viem viem ``` -We use Homebrew for a quick installation process. For a more secure installation that requires no trust in external parties, see our [CLI repository](https://github.com/tkhq/tkcli). + ## Transaction signing - + -Set the `ORGANIZATION_ID` environment variable to your organization ID. This will be used to identify your organization in the API requests. +Add your API credentials to a `.env` file: ```bash -export ORGANIZATION_ID= +TURNKEY_ORGANIZATION_ID= +TURNKEY_API_PRIVATE_KEY= +TURNKEY_API_PUBLIC_KEY= ``` -An API keypair is required to authenticate requests to the Turnkey API. - -Create a new key named `quickstart` using the turnkey CLI: - -```bash -turnkey generate api-key --organization $ORGANIZATION_ID --key-name quickstart -``` +Then initialize the client in your application: -You'll see output like this: +```ts +import { Turnkey } from "@turnkey/sdk-server"; -```json -{ - "privateKeyFile": "/home/user/.config/turnkey/keys/quickstart.private", - "publicKey": "03...72", - "publicKeyFile": "/home/user/.config/turnkey/keys/quickstart.public" -} +const turnkeyClient = new Turnkey({ + apiBaseUrl: "https://api.turnkey.com", + defaultOrganizationId: process.env.TURNKEY_ORGANIZATION_ID!, + apiPrivateKey: process.env.TURNKEY_API_PRIVATE_KEY!, + apiPublicKey: process.env.TURNKEY_API_PUBLIC_KEY!, +}); ``` -Follow the instructions in this [guide](/sdks/cli#add-your-public-api-key) to add your new public API key to your organization via the dashboard. - - - -Wallets are collections of cryptographic key pairs typically used for sending and receiving digital assets. To create one, we need to provide a name: - -```bash -turnkey wallets create --name default --key-name quickstart + + +Create a wallet and derive an Ethereum address in a single call: + +```ts +const { walletId, addresses } = await turnkeyClient.apiClient().createWallet({ + walletName: "default", + accounts: [ + { + curve: "CURVE_SECP256K1", + pathFormat: "PATH_FORMAT_BIP32", + path: "m/44'/60'/0'/0/0", + addressFormat: "ADDRESS_FORMAT_ETHEREUM", + }, + ], +}); + +const ethereumAddress = addresses[0]; +console.log("Ethereum address:", ethereumAddress); ``` - - This command requires a key named `quickstart` to exist in your configuration. This key should have been created during the [Quickstart](/getting-started/quickstart) guide. If you haven't created it yet, please complete the initial setup steps first. - -If the key doesn't exist, you'll see an error like this: - -```json -{ - "error": "failed to load key bytes \"quickstart\": failed to read from \"/.config/turnkey/keys/quickstart.private\": open /.config/turnkey/keys/quickstart.private: no such file or directory" -} -``` - -If the key exists but has not been added to your organization, you'll see an error like this: - -```json -{ - "error": "failed to associate the API key with an organization; please manually specify the organization ID" -} -``` - - - - -To create a cryptographic key pair on our new wallet, we need to pass our desired address format: - -```bash -turnkey wallets accounts create --wallet default --address-format ADDRESS_FORMAT_ETHEREUM --key-name quickstart -``` - -This command will produce an Ethereum address (e.g. `0x08cb1216C95149DF66978b574E484869512CE2bF`) that we'll need to sign a transaction. You can see your new Wallet account with: - -```bash -turnkey wallets accounts list --wallet default --key-name quickstart + + +```ts +import { createAccount } from "@turnkey/viem"; +import { createWalletClient, http } from "viem"; +import { mainnet } from "viem/chains"; + +const turnkeyAccount = await createAccount({ + client: turnkeyClient.apiClient(), + organizationId: process.env.TURNKEY_ORGANIZATION_ID!, + signWith: ethereumAddress, +}); + +const walletClient = createWalletClient({ + account: turnkeyAccount, + chain: mainnet, + transport: http(), +}); ``` - + -Now you can sign an Ethereum transaction with this new address with our [`sign_transaction` endpoint](/api-reference/signing/sign-transaction). Make sure to replace the `unsignedTransaction` below with your own. You can use our [simple transaction generator](https://build.tx.xyz) if you need a quick transaction for testing: +```ts +import { parseEther } from "viem"; -```bash -turnkey request --path /public/v1/submit/sign_transaction --body '{ - "timestampMs": "'"$(date +%s)"'000", - "type": "ACTIVITY_TYPE_SIGN_TRANSACTION_V2", - "organizationId": "'"$ORGANIZATION_ID"'", - "parameters": { - "type": "TRANSACTION_TYPE_ETHEREUM", - "signWith": "", - "unsignedTransaction": "" - } -}' --key-name quickstart +const txHash = await walletClient.sendTransaction({ + to: "", + value: parseEther(""), +}); +console.log("Transaction hash:", txHash); ``` -If you'd like to broadcast your transaction, you can easily do so -via [Etherscan](https://etherscan.io/pushTx). - From 90f7b9ec141c3e4c95b9524c001351f70f244212 Mon Sep 17 00:00:00 2001 From: Henry Wilson Date: Tue, 5 May 2026 20:02:19 -0400 Subject: [PATCH 033/117] company wallets integration guide --- docs.json | 12 +++++++- sdks/javascript-server.mdx | 63 +++++++++++++++++++++++++------------- 2 files changed, 52 insertions(+), 23 deletions(-) diff --git a/docs.json b/docs.json index 620498dc..5273d8b3 100644 --- a/docs.json +++ b/docs.json @@ -206,7 +206,17 @@ "company-wallets/use-cases/agentic-wallets" ] }, - "getting-started/company-wallets-quickstart" + "getting-started/company-wallets-quickstart", + { + "group": "Integration Guide", + "pages": [ + "sdks/javascript-server", + "sdks/golang", + "sdks/ruby", + "sdks/rust", + "sdks/python" + ] + } ] }, { diff --git a/sdks/javascript-server.mdx b/sdks/javascript-server.mdx index 8dcb65d4..6f37189a 100644 --- a/sdks/javascript-server.mdx +++ b/sdks/javascript-server.mdx @@ -1,14 +1,21 @@ --- title: "TypeScript server" -description: "The [`@turnkey/sdk-server`](https://www.npmjs.com/package/@turnkey/sdk-server) package exposes functionality that lets developers build server-side functionality for applications that interact with the Turnkey API." -sidebarTitle: "TypeScript | Server" +description: + "The [`@turnkey/sdk-server`](https://www.npmjs.com/package/@turnkey/sdk-server) package exposes + functionality that lets developers build server-side functionality for applications that interact + with the Turnkey API." +sidebarTitle: "TypeScript Server" --- ## Overview -It exposes a ready-made API client class which manages the process of constructing requests to the Turnkey API and authenticating them with a valid API key. Furthermore, it exposes API proxies that forward requests from your application's client that need to be signed by parent organizations API key. +It exposes a ready-made API client class which manages the process of constructing requests to the +Turnkey API and authenticating them with a valid API key. Furthermore, it exposes API proxies that +forward requests from your application's client that need to be signed by parent organizations API +key. -Use the [`@turnkey/sdk-server`](https://www.npmjs.com/package/@turnkey/sdk-server) package to handle server-side interactions for applications that interact with the Turnkey API. +Use the [`@turnkey/sdk-server`](https://www.npmjs.com/package/@turnkey/sdk-server) package to handle +server-side interactions for applications that interact with the Turnkey API. ## Installation @@ -63,7 +70,8 @@ The root organization that requests will be made from unless otherwise specified required > -The base URL that API requests will be sent to (use [https://api.turnkey.com](https://api.turnkey.com) when making requests to Turnkey's API) +The base URL that API requests will be sent to (use +[https://api.turnkey.com](https://api.turnkey.com) when making requests to Turnkey's API) -The API Private Key to sign requests with (this will normally be the API Private Key to your root organization) +The API Private Key to sign requests with (this will normally be the API Private Key to your root +organization) ## Creating clients -Calls to Turnkey's API must be signed with a valid credential (often referred to in the docs as [stamping](/developer-reference/api-overview/stamps)) from the user initiating the API call. When using the Server SDK, the user initiating the API call is normally your root organization, and the API call is authenticated with the API keypair you create on the Turnkey dashboard. +Calls to Turnkey's API must be signed with a valid credential (often referred to in the docs as +[stamping](/developer-reference/api-overview/stamps)) from the user initiating the API call. When +using the Server SDK, the user initiating the API call is normally your root organization, and the +API call is authenticated with the API keypair you create on the Turnkey dashboard. #### `apiClient()` -The `apiClient` method returns an instance of the `TurnkeyApiClient` which will sign requests with the injected `apiPrivateKey`, and `apiPublicKey` credentials. +The `apiClient` method returns an instance of the `TurnkeyApiClient` which will sign requests with +the injected `apiPrivateKey`, and `apiPublicKey` credentials. ```js const apiClient = turnkey.apiClient(); @@ -99,13 +112,20 @@ const walletsResponse = await apiClient.getWallets(); ## Creating API proxies -There are certain actions that are initiated by users, but require the activity to be signed by the root organization itself. Examples of this include the initial creation of the user `subOrganization` or sending an email to a user with a login credential as part of an `emailAuth` flow. +There are certain actions that are initiated by users, but require the activity to be signed by the +root organization itself. Examples of this include the initial creation of the user +`subOrganization` or sending an email to a user with a login credential as part of an `emailAuth` +flow. -These can be implemented in your backend by creating an `apiClient` and handling requests from your browser application at different routes, but we have also provided a convenience method for doing this by having allowing a single `apiProxy` to handle requests at a single route and automatically sign specific user actions with the root organization's credentials. +These can be implemented in your backend by creating an `apiClient` and handling requests from your +browser application at different routes, but we have also provided a convenience method for doing +this by having allowing a single `apiProxy` to handle requests at a single route and automatically +sign specific user actions with the root organization's credentials. #### expressProxyHandler() -The `expressProxyHandler()` method creates a proxy handler designed as a middleware for Express applications. It provides an API endpoint that forwards requests to the Turnkey API server. +The `expressProxyHandler()` method creates a proxy handler designed as a middleware for Express +applications. It provides an API endpoint that forwards requests to the Turnkey API server. ```js const turnkeyProxyHandler = turnkey.expressProxyHandler({ @@ -119,7 +139,8 @@ app.post("/apiProxy", turnkeyProxyHandler); #### 2. nextProxyHandler() -The `nextProxyHandler()` method creates a proxy handler designed as a middleware for Next.js applications. It provides an API endpoint that forwards requests to the Turnkey API server. +The `nextProxyHandler()` method creates a proxy handler designed as a middleware for Next.js +applications. It provides an API endpoint that forwards requests to the Turnkey API server. ```js // Configure the Next.js handler with allowed methods @@ -134,7 +155,8 @@ export default turnkeyProxyHandler; ## TurnkeyServerClient -The `@turnkey/sdk-server` exposes NextJS Server Actions. These server actions can be used to facilitate implementing common authentication flows. +The `@turnkey/sdk-server` exposes NextJS Server Actions. These server actions can be used to +facilitate implementing common authentication flows. ### `sendOtp()` @@ -173,8 +195,7 @@ if (initAuthResponse?.otpId) { #### Parameters - An object containing the parameters to initiate an `EMAIL` or `SMS` OTP - authentication flow. + An object containing the parameters to initiate an `EMAIL` or `SMS` OTP authentication flow. @@ -268,13 +289,13 @@ if (verifyResponse?.verificationToken) { - Optional. The session lifetime in seconds. Defaults to 900 seconds (15 - minutes). + Optional. The session lifetime in seconds. Defaults to 900 seconds (15 minutes). ### `createOauthSession()` -Complete an OAuth authentication flow after obtaining an OIDC token from the OAuth provider. This creates a Turnkey session bound to the provided public key. +Complete an OAuth authentication flow after obtaining an OIDC token from the OAuth provider. This +creates a Turnkey session bound to the provided public key. ```typescript import { server } from "@turnkey/sdk-server"; @@ -367,13 +388,11 @@ const sendCredentialResponse = await server.sendCredential({ - IP Address, iframePublicKey, or other unique identifier used for rate - limiting. + IP Address, iframePublicKey, or other unique identifier used for rate limiting. - Specify the length of the session in seconds. Defaults to 900 seconds or 15 - minutes. + Specify the length of the session in seconds. Defaults to 900 seconds or 15 minutes. From 4b00dc261646acaa41589ad3d4edaf3cde058111 Mon Sep 17 00:00:00 2001 From: Henry Wilson Date: Tue, 5 May 2026 21:27:44 -0400 Subject: [PATCH 034/117] embedded wallets integration guide overview --- .../integration-guide/overview.mdx | 140 +++++++++++++++++- 1 file changed, 136 insertions(+), 4 deletions(-) diff --git a/embedded-wallets/integration-guide/overview.mdx b/embedded-wallets/integration-guide/overview.mdx index 7d446c52..1552f228 100644 --- a/embedded-wallets/integration-guide/overview.mdx +++ b/embedded-wallets/integration-guide/overview.mdx @@ -1,10 +1,142 @@ --- -title: "Overview" +title: "Integration Guide" +description: + "An SDK-agnostic introduction to integrating Turnkey embedded wallets: how to choose your SDK, how + integrations are structured, and what the Auth Proxy is." sidebarTitle: "Overview" --- -# Integration Guide +You've seen what Turnkey's embedded wallets can do. This page covers the concepts and architectural +decisions that apply across all platforms before you dive into the platform-specific guides. -This guide walks you through integrating Turnkey's Embedded Wallets into your application. +## Choose your SDK -{/* TODO: Add integration guide content */} +Turnkey provides SDKs at different levels of abstraction. The right choice depends on your platform +and how much you want pre-built for you. + + + + Pre-built UI components, hook-based API, and no backend required. Recommended for React and + Next.js apps. + + + The mobile counterpart to the React wallet kit, optimized for mobile-native flows. + + + **Dart SDK** — Cross-platform iOS and Android support. + + + **Swift SDK** — Native iOS integration. + + + **Kotlin SDK** — Native Android integration. + + + For fully custom implementations or non-JS backends, use `@turnkey/core` or call the REST API + directly. + + + +## How integrations are structured + +Every Turnkey embedded wallet integration is built around the same model: **one sub-organization per +user.** + +Your account is the **parent organization**. Each end user gets their own **sub-organization** — a +fully isolated environment with its own wallets, credentials, and policies. Isolation is strict: +credentials in one sub-org cannot authorize actions in another. + + + Turnkey architecture: organizations, sub-organizations, users, authenticators, policies, and wallets + + +See [Embedded Wallets Overview](/embedded-wallets/overview#custody-models) for a breakdown of +custodial models based on this architecture. + +## The Auth Proxy + +Creating a sub-organization and initiating email/SMS OTP flows require a request stamped by your +root organization's API key. Traditionally this means hosting a backend. + +The **Auth Proxy** is Turnkey's managed backend for these operations. Enable it in the dashboard, +configure your allowed origins and auth methods, and your frontend can call +`https://authproxy.turnkey.com` directly — no server needed on your end. + + + +
    +
  • You want to ship without standing up a backend
  • +
  • You're using the React or React Native Wallet Kit (they're designed around it)
  • +
  • Your auth flows are OTP, OAuth, and new-user signup
  • +
+
+ +
    +
  • You already run a backend and want to keep signing logic there
  • +
  • You need flows the Auth Proxy doesn't cover
  • +
  • You need full control over request construction and error handling
  • +
+
+
+ + + The React Wallet Kit's `TurnkeyProvider` accepts an `authProxyConfigId` and handles all + proxy-bound requests automatically. You only need your Organization ID and Proxy Config ID from + the dashboard. + + +See [Auth Proxy reference](/reference/auth-proxy) for endpoint documentation and configuration +options. + +## How request signing works + +Every write to Turnkey — creating a wallet, signing a transaction, updating a policy — is an +**activity**. Activities must be **stamped** (cryptographically signed) by an authorized credential +before the enclave will execute them. + +The typical flow for a user-initiated action: + + + + The user completes an auth flow (passkey prompt, OTP code, OAuth). The SDK stores a session + credential — a short-lived signing key — in the device's secure storage. + + + When your app calls an SDK method (e.g., `createWallet`, `signTransaction`), the SDK constructs + the activity payload and signs it with the session credential. + + + The enclave verifies the stamp, checks it against the sub-org's policies, and executes the + operation. For signing operations, only the signature is returned — private keys never leave the + enclave. + + + +For operations that require your root org's authorization (like creating a new sub-org), the stamp +comes from the Auth Proxy or your own backend, not the user's session credential. + +## Sessions + +Sessions control how long a user stays authenticated without re-prompting. The SDK stores the +session credential in device-native secure storage (IndexedDB in browsers, SecureStorage on mobile) +and renews it automatically when possible. + +Default session length is 15 minutes, configurable per flow. If a session expires, the SDK surfaces +an unauthenticated state and your app prompts re-auth. + +See [Sessions](/authentication/sessions) for configuration options. + +## What the platform guides cover + +Each platform guide walks through the full integration lifecycle: + +- Installing and configuring the SDK +- Auth flows: passkeys, email/SMS OTP, and OAuth (Google, Apple, etc.) +- Creating wallets and deriving addresses +- Signing transactions +- Advanced topics: custom sub-org configuration, backend-authenticated flows, import/export + +Select your platform from the sidebar to begin. From 43b782d6e72fc48c628cab875319f96f099e9396 Mon Sep 17 00:00:00 2001 From: Graham Ritter Date: Wed, 6 May 2026 10:49:18 -0400 Subject: [PATCH 035/117] quick updates to embedded integration guide and the quickstart --- embedded-wallets/integration-guide/overview.mdx | 2 +- getting-started/company-wallets-quickstart.mdx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/embedded-wallets/integration-guide/overview.mdx b/embedded-wallets/integration-guide/overview.mdx index 1552f228..18ea7b10 100644 --- a/embedded-wallets/integration-guide/overview.mdx +++ b/embedded-wallets/integration-guide/overview.mdx @@ -2,7 +2,7 @@ title: "Integration Guide" description: "An SDK-agnostic introduction to integrating Turnkey embedded wallets: how to choose your SDK, how - integrations are structured, and what the Auth Proxy is." + integrations are structured, and when to use the Auth Proxy." sidebarTitle: "Overview" --- diff --git a/getting-started/company-wallets-quickstart.mdx b/getting-started/company-wallets-quickstart.mdx index 4244f4ae..bc9f5784 100644 --- a/getting-started/company-wallets-quickstart.mdx +++ b/getting-started/company-wallets-quickstart.mdx @@ -6,7 +6,7 @@ sidebarTitle: "Quickstart" ## Prerequisites -This guide assumes you've completed the steps to create an account, organization, and API keypair as described in the [account setup](/getting-started/quickstart) section. +This guide assumes you've completed the steps to create an account, organization, and API keypair as described in the [account setup](/getting-started/quickstart) section. This guide uses the TypeScript server SDK (`@turnkey/sdk-server`). For other languages, see [Server SDKs](/sdks/introduction). ## Installation From 9cc017cb956389bb6d8dae6feaa469d0b96cd661 Mon Sep 17 00:00:00 2001 From: Graham Ritter Date: Wed, 6 May 2026 12:50:15 -0400 Subject: [PATCH 036/117] Update company wallets quickstart with Ethers tab and rename Integration Guide to Server SDKs. Added ethers.js as a tabbed alternative to Viem in the quickstart --- docs.json | 2 +- .../company-wallets-quickstart.mdx | 68 ++++++++++++++++--- 2 files changed, 60 insertions(+), 10 deletions(-) diff --git a/docs.json b/docs.json index 5273d8b3..36622b3c 100644 --- a/docs.json +++ b/docs.json @@ -208,7 +208,7 @@ }, "getting-started/company-wallets-quickstart", { - "group": "Integration Guide", + "group": "Server SDKs", "pages": [ "sdks/javascript-server", "sdks/golang", diff --git a/getting-started/company-wallets-quickstart.mdx b/getting-started/company-wallets-quickstart.mdx index bc9f5784..244eada1 100644 --- a/getting-started/company-wallets-quickstart.mdx +++ b/getting-started/company-wallets-quickstart.mdx @@ -1,6 +1,6 @@ --- title: "Company Wallets quickstart" -description: "Turnkey's Company Wallets enable you to build secure, programmatic signing workflows directly into your applications. With features like customizable policies, multi-party approvals, and support for any blockchain, you can confidently automate complex signing operations while maintaining enterprise-grade security." +description: "Get from zero to a signed transaction with Turnkey's Company Wallets. Initialize the server SDK, create a wallet, and sign your first Ethereum transaction using Viem or Ethers." sidebarTitle: "Quickstart" --- @@ -10,19 +10,25 @@ This guide assumes you've completed the steps to create an account, organization ## Installation +Install the server SDK and your preferred Ethereum library: + -```bash npm +```bash Viem npm install @turnkey/sdk-server @turnkey/viem viem ``` -```bash yarn -yarn add @turnkey/sdk-server @turnkey/viem viem +```bash Ethers +npm install @turnkey/sdk-server @turnkey/ethers ethers ``` -## Transaction signing + + This quickstart uses Ethereum, but Turnkey supports all EVM and SVM chains, along with Bitcoin, Tron, and [more](/networks/overview). To sign Solana transactions, derive a Solana address using `ADDRESS_FORMAT_SOLANA` with `CURVE_ED25519` and use [`@turnkey/solana`](https://www.npmjs.com/package/@turnkey/solana) or the server SDK's [`solSendTransaction`](/networks/solana) method. + + +## Sign your first transaction @@ -71,8 +77,10 @@ console.log("Ethereum address:", ethereumAddress); ``` - + + + ```ts import { createAccount } from "@turnkey/viem"; import { createWalletClient, http } from "viem"; @@ -90,10 +98,28 @@ const walletClient = createWalletClient({ transport: http(), }); ``` + + +```ts +import { ethers } from "ethers"; +import { TurnkeySigner } from "@turnkey/ethers"; + +const provider = new ethers.JsonRpcProvider("YOUR_RPC_URL"); +const turnkeySigner = new TurnkeySigner({ + client: turnkeyClient.apiClient(), + organizationId: process.env.TURNKEY_ORGANIZATION_ID!, + signWith: ethereumAddress, +}); +const connectedSigner = turnkeySigner.connect(provider); +``` + + - + + + ```ts import { parseEther } from "viem"; @@ -103,11 +129,35 @@ const txHash = await walletClient.sendTransaction({ }); console.log("Transaction hash:", txHash); ``` + + +```ts +const txHash = await connectedSigner.sendTransaction({ + to: "", + value: ethers.parseEther(""), + type: 2, +}); +console.log("Transaction hash:", txHash.hash); +``` + + ## Next steps -Learn more about integrating Company Wallets and our powerful -features [here](/company-wallets/overview). + + + Build deposit wallets, sweep automations, and treasury flows with policy-enforced access control. + + + Secure the full contract lifecycle from deployment to upgrades with granular RBAC. + + + Define who can sign what with Turnkey's default-deny policy engine. + + + Explore server SDKs for TypeScript, Go, Ruby, Rust, and Python. + + From 40eaa2cd6c702f8d175bf7391d2a6d93b13ca2aa Mon Sep 17 00:00:00 2001 From: Graham Ritter Date: Wed, 6 May 2026 14:35:35 -0400 Subject: [PATCH 037/117] new payment orchestration and smart contract use case pages --- .../code-examples/payment-orchestration.mdx | 169 +++++++----------- .../smart-contract-management.mdx | 148 +++++++++------ docs.json | 2 +- .../embedded-consumer-wallet.mdx | 9 +- embedded-wallets/embedded-waas.mdx | 5 +- .../embedded-business-wallets/overview.mdx | 7 +- 6 files changed, 173 insertions(+), 167 deletions(-) diff --git a/company-wallets/code-examples/payment-orchestration.mdx b/company-wallets/code-examples/payment-orchestration.mdx index 1e31a5ce..ac5eeb80 100644 --- a/company-wallets/code-examples/payment-orchestration.mdx +++ b/company-wallets/code-examples/payment-orchestration.mdx @@ -1,84 +1,65 @@ --- title: "Payment Orchestration" -description: "Programmatically move funds across wallet types including hot wallets, omnibus wallets, and payout wallets -with role-based access controls defining which users or wallets can execute transfers, sweeps, swaps, mints, and redemptions." +description: "Build automated sweep, deposit, and treasury flows with policy-enforced access control and gas sponsorship." mode: wide --- -## Why Turnkey for Payment Orchestration? +Move funds programmatically across deposit, omnibus, and cold wallets with sub-100ms signing and policy-enforced access control at every transaction. For a basic signing walkthrough, start with the [Quickstart](/getting-started/company-wallets-quickstart). -Turnkey automates treasury operations, internal transfers, and crosschain routing through a single integration with sub-100ms -signing and role-based-access-controls (RBAC) at every transaction. Keys stay secure in hardware-backed enclaves while your team -gets full visibility into every fund movement. +This guide covers the key implementation decisions for company wallet payment flows, then walks through a production example end-to-end: creating per-user deposit addresses, sweeping those deposits into an omnibus wallet with gas sponsorship, and gating treasury outflows with multi-party approval. -## Core security principles +## Powered by Turnkey -Turnkey's solution is engineered to meet the operational and security needs of high-value, high-volume payment flows: +Leading platforms use Turnkey to deliver onchain payment rails at scale: -* **Zero exposure of private keys:** Private keys are default-generated and isolated within [Turnkey’s secure enclave](/security/secure-enclaves), ensuring raw private keys are never exposed to employees, automated systems, or even to Turnkey itself. -* **Strict access control (RBAC):** Every action is explicitly permissioned in [Turnkey’s Policy Engine](/concepts/policies/quickstart). If an employee or automated system is not explicitly allowed to perform an action, they cannot. -* **Predictable and flexible workflows:** Policies allow for granular control over permissions based on transaction type, value, wallet properties, smart contract interactions, and more. This flexibility allows businesses to meet both automated and human-operator review requirements. -* **Enhanced operational security:** Workflows ensure that all transfers and actions come from known, authorized addresses, adding a layer of transparency and accountability to activity. +- [**Squads**](https://www.turnkey.com/customers/how-squads-improves-ux-and-accounting-efficiency-with-turnkey) improved UX and accounting efficiency for multisig treasury management. +- [**Flutterwave**](https://flutterwave.com/us/blog/flutterwave-partners-with-turnkey-to-power-secure-stablecoin-wallets-for-customers) powers secure stablecoin wallets for customers across Africa. -Leading platforms like [Squads](https://www.turnkey.com/customers/how-squads-improves-ux-and-accounting-efficiency-with-turnkey) -and [Flutterwave](https://flutterwave.com/us/blog/flutterwave-partners-with-turnkey-to-power-secure-stablecoin-wallets-for-customers) -leverage Turnkey, to deliver web3 payment rails at scale. +## Key implementation decisions -## Example +| Decision | What to consider | +| :--- | :--- | +| Wallet architecture | Single HD wallet with many accounts (cost-efficient, shared seed) vs separate wallets per function (deposits, omnibus, cold) | +| Deposit addressing | Per-user deposit addresses via `createWalletAccounts` at no extra cost | +| Sweep strategy | Policy-enforced sweeps restricting deposit addresses to a single omnibus destination | +| Gas management | [Sponsored transactions](/company-wallets/code-examples/sending-sponsored-transactions) (`sponsor: true`) eliminate the need to fund each deposit address for gas | +| Chain coverage | EVM and SVM require separate policies due to different transaction models | +| Hot wallet controls | Automated API key user with policies scoping exactly which transfers are allowed | +| Treasury controls | Multi-party approval via [consensus expressions](/concepts/policies/quickstart) (e.g., 2-of-N ops team) | +| Cold storage transfers | Policy-gated with parsed calldata for token transfers, or [upload the contract ABI](/concepts/policies/smart-contract-interfaces) for full parsing | -Exchanges and custodial payment processors are common examples requiring highly scalable, highly secure onchain systems. +## Example: custodial payment processing -![payment-flow](/assets/files/payment-flow.png) +Exchanges and custodial payment processors are common examples requiring highly scalable, highly secure onchain systems. -**Typical needs in custodial payment processing:** +![payment-flow](/assets/files/payment-flow.png) -| Need | Solution | -| :---- | :---- | +| Need | How Turnkey solves it | +| :--- | :--- | | All users have a unique deposit address | Wallet accounts are efficiently created and controlled within a Turnkey organization | | Access to all wallets must be strictly permissioned | Policies enforce RBAC and least-privilege for all signing actions | -| Keys must never be exposed | Keys remain secure in secure enclave; only signatures are provided | -| Must support automation and human review | Policies can be written to allow automation for common tasks, or require multi-party consensus for sensitive ones | -| Must move funds efficiently | Transaction sponsorship makes it trivial to pay for only gas used on thousands of wallets | - +| Keys must never be exposed | Keys remain in the [secure enclave](/security/secure-enclaves); only signatures are returned | +| Must support automation and human review | Policies allow automation for routine tasks and require multi-party consensus for sensitive ones | +| Must move funds efficiently | [Transaction sponsorship](/company-wallets/code-examples/sending-sponsored-transactions) eliminates the cost of funding thousands of deposit addresses for gas | -## How Turnkey smooths payment flows +### Implementation steps -Turnkey can help at every step to remove friction, accelerate time-to-value, and meet sophisticated requirements: + + This guide assumes you've completed the [Quickstart](/getting-started/company-wallets-quickstart) and have a Turnkey client initialized. If not, start there first. + - - -The first step is to create a Turnkey Organization and populate it with users representing your team and automated workflows. -These users (human and machine) are assigned specific Policies dictating their access patterns to different wallets and onchain functions. - -Among these users, the [Root Quorum](/concepts/users/root-quorum) holds the highest level of access as a group that -can execute any action and bypass the policy engine. By default, your initial user is the sole member. To prevent a single point -of failure, we recommend raising the Root Quorum to require multiple root users to approve the most sensitive organizational changes. + - - - - -Turnkey allows you to create numerous wallet accounts at no cost, each with a unique address belonging to the same -underlying [wallet](/concepts/wallets) resource. Before we can programmatically create an unlimited number of wallet accounts, -let's create a “Deposits wallet” using the [@turnkey/sdk-server](https://www.npmjs.com/package/@turnkey/sdk-server) Typescript SDK. +Turnkey lets you create unlimited wallet accounts at no cost, each with a unique address belonging to the same underlying [wallet](/concepts/wallets). Create a deposits wallet with both EVM and SVM accounts: ```ts -import { Turnkey } from "@turnkey/sdk-server"; - -const turnkeyClient = new Turnkey({ - apiBaseUrl: "https://api.turnkey.com", - apiPublicKey: process.env.API_PUBLIC_KEY!, - apiPrivateKey: process.env.API_PRIVATE_KEY!, - defaultOrganizationId: process.env.ORGANIZATION_ID!, -}); - -const { walletId, addresses } = await turnkeyClient.apiClient().createWallet({ +const { walletId } = await turnkeyClient.apiClient().createWallet({ walletName: "Deposits wallet", accounts: [ { curve: "CURVE_SECP256K1", - pathFormat: "PATH_FORMAT_BIP32", + pathFormat: "PATH_FORMAT_BIP32", path: "m/44'/60'/0'/0/0", addressFormat: "ADDRESS_FORMAT_ETHEREUM", }, @@ -87,71 +68,59 @@ const { walletId, addresses } = await turnkeyClient.apiClient().createWallet({ pathFormat: "PATH_FORMAT_BIP32", path: "m/44'/501'/0'/0'", addressFormat: "ADDRESS_FORMAT_SOLANA", - } + }, ], }); ``` -Now we can create a function that produces a fresh EVM and SVM deposit address each time it's called. +Then generate fresh deposit addresses on demand: ```ts async function createDepositAddresses( turnkeyClient: Turnkey, - walletId: string // Deposits wallet - ): Promise { - const addresses = await turnkeyClient.apiClient().createWalletAccounts({ + walletId: string +): Promise { + const addresses = await turnkeyClient.apiClient().createWalletAccounts({ walletId, - accounts: ["ADDRESS_FORMAT_ETHEREUM", "ADDRESS_FORMAT_SOLANA"] + accounts: ["ADDRESS_FORMAT_ETHEREUM", "ADDRESS_FORMAT_SOLANA"], }); return addresses.addresses; } ``` -Such a function could be connected to end-user action, or kicked off by some internal flow. +This function can be triggered by end-user signup, a deposit request, or any internal flow. - - -Creating deposit addresses on demand is straightforward, but traditionally, the complexity begins after something is deposited. -Moving these funds to a company wallet after deposit (a “sweep”) is subject to major security and cost considerations. With Turnkey, we can: - -* Enforce that all transfers from deposit addresses are into a centrally controlled omnibus address. -* Forgo sending additional funds to every deposit address to cover transaction fees (gas). + -Assume you have created an omnibus wallet for your organization, either as shown above or in the Web Dashboard. -This is a new hot wallet collecting the funds initially deposited across thousands of deposit addresses. +Now that you have deposit addresses generating on demand, the next step is moving those funds into a central omnibus wallet. This is where the complexity typically starts: sweeping funds from thousands of addresses involves both security and cost considerations. -Let's first create a policy that only allows transactions from deposit addresses to the omnibus address. -EVM and SVM will require similar yet distinct policies due to their distinct transaction types. These policies can also vary -by chain, and in production, they likely will need to. +**Policy-enforced sweeps** +Create policies that restrict deposit wallets to only transfer to the omnibus address. EVM and SVM require separate policies due to their different transaction models: ```json { - "policyName": "(EVM) Allow API Key User to sign transactions with Deposits wallet", + "policyName": "(EVM) Deposit wallet sweep to omnibus", "effect": "EFFECT_ALLOW", "consensus": "approvers.any(user, user.id == '')", "condition": "activity.action == 'SIGN' && wallet.id == '' && eth.tx.to == ''" }, { - "policyName": "(SVM) Allow API Key User to sign transactions with Deposits wallet", + "policyName": "(SVM) Deposit wallet sweep to omnibus", "effect": "EFFECT_ALLOW", "consensus": "approvers.any(user, user.id == '')", "condition": "activity.action == 'SIGN' && wallet.id == '' && solana.tx.transfers.count == 1 && solana.tx.transfers[0].to == ''" } ``` -Turnkey's Policy Engine is default-deny, so you only need to specify the exact conditions to allow. -Transactions must be fully parsed and validated against your policy parameters. Any **raw or obfuscated payloads are rejected** unless otherwise specified. +Turnkey's Policy Engine is default-deny: you only specify the exact conditions to allow. Raw or obfuscated payloads are rejected unless explicitly permitted. -A costly component of deposit wallet operations is funding each address with enough gas to cover the network fee for sweeping into -your central wallet. This funding transaction itself incurs a second fee. - -Thankfully, with a single line, we can enable Turnkey’s sponsored transaction feature and bypass this entirely, executing a single -optimized externally sponsored transaction. +**Gas sponsorship** +Normally you'd need to fund every deposit address with gas before sweeping. Sponsored transactions bypass this entirely: ```ts const sendTransactionStatusId = await turnkeyClient.apiClient().ethSendTransaction({ @@ -167,18 +136,15 @@ const sendTransactionStatusId = await turnkeyClient.apiClient().ethSendTransacti }); ``` -A more complete guide to gas sponsorship can be [found here](/company-wallets/code-examples/sending-sponsored-transactions). - - - +See the [gas sponsorship guide](/company-wallets/code-examples/sending-sponsored-transactions) for more details. -At this point, we've covered creating deposit addresses on demand and securely sweeping funds to a treasury address. + -The next step is managing a wallet that likely requires human-operator approval and may need more sophisticated automations like asset rebalancing. + -To set multi-user approval in policies, create a user tag (e.g., 'ops-team') and apply it to your teammates. You can then set a policy requiring -their approval for transfers to a company cold wallet. +The omnibus wallet likely requires human-operator approval for outbound transfers and may need more sophisticated automations like asset rebalancing. +Create a user tag (e.g., `ops-team`) and apply it to your teammates, then set a policy requiring their approval for transfers to a cold wallet: ```json { @@ -189,18 +155,21 @@ their approval for transfers to a company cold wallet. } ``` -When transferring tokens rather than native funds, the transaction data can be parsed for known function signatures (e.g., an ERC-20 transfer), -but the recommended approach is to [upload the contract ABI](/concepts/policies/smart-contract-interfaces) for supported assets and act -on fully parsed transactions. +For token transfers, the policy above parses the ERC-20 `transfer` function signature. For production use, the recommended approach is to [upload the contract ABI](/concepts/policies/smart-contract-interfaces) for supported assets and act on fully parsed transactions. -Managing real assets at scale introduces security complexity. Balancing risk management, regulatory compliance, and maintaining enough -liquidity to meet ongoing withdrawal demand makes fund movement one of the hardest problems to engineer. While there's no universal solution, -pairing application-specific users with tailored policies is the security posture adopted by leading Web3 teams. -## The result: security as code - -Turnkey makes onchain movement easy, scaling to meet high-value and high-volume workflows where access and actions are defined by code. -This "Security as Code" approach allows businesses to scale Web3 operations with confidence, knowing their mission-critical payment -flows are protected by cryptographically enforced security and least-privilege access control. +## Next steps + + + + Eliminate gas costs across thousands of deposit wallets with sponsored transactions. + + + Define granular access controls for every signing action in your organization. + + + Secure contract deployment, interactions, and upgrades with the same RBAC model. + + diff --git a/company-wallets/code-examples/smart-contract-management.mdx b/company-wallets/code-examples/smart-contract-management.mdx index 90ca91d6..76636b98 100644 --- a/company-wallets/code-examples/smart-contract-management.mdx +++ b/company-wallets/code-examples/smart-contract-management.mdx @@ -1,95 +1,129 @@ --- title: "Smart Contract Management" -description: "This is a guide to Smart Contract Management. Our approach is built on a chain-agnostic, primitive-first foundation, -providing consistent security and workflow management regardless of the blockchain, development tools, or specific use case." +description: "Secure the full smart contract lifecycle with policy-enforced deployment, function-level access control, and safe upgrade workflows." mode: wide --- -## Why Turnkey for Smart Contract Management? +This guide covers the key implementation decisions for securing smart contract operations, then walks through the contract lifecycle end-to-end: permissioned deployment, function-level interaction policies, and minimizing risk during upgrades. For basic signing, start with the [Quickstart](/getting-started/company-wallets-quickstart). -Turnkey provides a highly secure, predictable, and flexible solution for managing onchain assets. Our approach combines mature, -cryptographic security with Role-Based Access Control (RBAC) to implement least privilege access and programmatically sign critical -smart contract operations, such as minting, burning, and pausing. +## Powered by Turnkey -## Core security principles +Teams managing high-value contracts use Turnkey for policy-enforced signing at every stage: -Turnkey's solution is engineered to meet the operational and security needs of high-value, high-scrutiny contracts: +- [**Polymarket**](/cookbook/polymarket-builders) transitioned to Turnkey for secure contract interactions at scale, including Safe deployment and gasless trading infrastructure. +- [**Brale**](/cookbook/brale) uses Turnkey's policy engine to constrain stablecoin minting and transfer operations to an allowlist of approved contracts. -* **Zero exposure of private keys:** Private and signing keys are default generated and kept within [Turnkey’s secure enclave](/security/secure-enclaves), never directly exposed or handled by users or automated systems. -* **Strict access control (RBAC):** Every action – from deployment to token minting to upgrades – is explicitly permissioned via [Policies](/concepts/policies/quickstart). If a user or automated system is not explicitly allowed to perform an action, they cannot. -* **Predictable and flexible workflows:** Policies allow for granular control over permissions based on transaction type, chain ID, contract address, function hash, and even transaction values. This flexibility allows businesses to meet both automated and human-operator review requirements. -* **Enhanced operational security:** Workflows ensure that all contract deployments and actions come from known, authorized addresses, adding a layer of transparency and accountability to all onchain activity. +Turnkey also fits **existing** contract deployments. You don't need to redeploy to start managing signing through Turnkey. -![rbac](/assets/files/rbac.png) +## Key implementation decisions -The above features can also fit **existing** smart contract deployments and management setups; many of the largest teams in Web3 (like Polymarket) have successfully transitioned. +| Decision | What to consider | +| :--- | :--- | +| Role isolation | Separate wallets for deployer, operator, and upgrade owner so each role has its own keys and scoped policies | +| Deployment permissions | Policy scoping the deployer to a specific wallet and network | +| Function-level controls | Policies targeting specific contract addresses and function signatures, or [upload the ABI](/concepts/policies/smart-contract-interfaces) for full parsing | +| Value thresholds | Automated approval for routine operations (small mints), multi-party consensus for large ones | +| Upgrade controls | Grant upgrade permissions only when needed via temporary policies, then revoke immediately after | -## A high-stakes example: stablecoins and RWAs +## Example: stablecoins and RWAs -Consider the management of Stablecoins or tokenized Real-World Assets, which often secure billions of dollars in value. These high-value contracts require workflows that demand absolute control and accountability. +Stablecoins and tokenized Real-World Assets often secure billions of dollars in value. These contracts typically involve minting, burning, pausing, and upgrades, each requiring different levels of authorization. -**Typical needs for high-value contracts:** +| Need | How Turnkey solves it | +| :--- | :--- | +| Minting must be constrained to approved limits | Policies can bound mint amounts and require multi-party approval above a threshold via [smart contract interfaces](/concepts/policies/smart-contract-interfaces) | +| Only authorized addresses can receive new supply | Policies target specific contract addresses and function arguments, restricting who the `mint` recipient can be | +| Must support emergency pause | A dedicated pause operator wallet with a scoped policy for the `pause` function, separate from day-to-day minting | +| Upgrades must not introduce unreviewed logic | Temporary upgrade policies with multi-party consensus, revoked immediately after execution | +| Full audit trail of every operation | Every signing action is an activity in Turnkey with a complete audit log of who approved what and when | -| Need | Solution | -| :---- | :---- | -| All actions must come from known addresses | Wallets are created and controlled within a Turnkey organization | -| Access must be strictly permissioned | Policies enforce RBAC and least-privilege for all signing actions | -| Keys must never be exposed | Keys remain secure in secure enclave; only signatures are provided | -| Must support automation and human review | Policies can be written to allow automation for common tasks, or require multi-party consensus for sensitive ones | +![rbac](/assets/files/rbac.png) -## How Turnkey secures the lifecycle +### Implementation steps -Turnkey provides secure, granular control across the entire contract lifecycle: + + This guide assumes you've completed the [Quickstart](/getting-started/company-wallets-quickstart) and have a Turnkey client initialized. If not, start there first. + - + -The first step involves creating a Turnkey Organization and populating it with users (both human and machine). These users are assigned specific Policies that dictate their access patterns to different wallets and on-chain functions. - -Crucially, the organization’s highest security threshold, the [**Root Quorum**](/concepts/users/root-quorum), -is secured. To prevent a single point of failure, we recommend raising the root quorum to require multiple root users to approve the -most sensitive organizational changes, ensuring operational continuity even in the event of credential loss. - +Deployment is strictly permissioned. A designated deployer user must have a policy that explicitly grants them permission to sign the deployment transaction for a specific wallet and network. - +```json +{ + "policyName": "Allow deployer to deploy on Base", + "effect": "EFFECT_ALLOW", + "consensus": "approvers.any(user, user.id == '')", + "condition": "activity.action == 'SIGN' && wallet.id == '' && eth.tx.to == '' && eth.tx.chain_id == '8453'" +} +``` -Deployment is strictly permissioned. A designated 'deployer' user must have a policy that explicitly grants them permission to sign the -deployment transaction for a specific wallet and network. +The `eth.tx.to == ''` condition matches contract creation transactions (where the `to` field is empty). Combined with a chain ID constraint, this ensures the deployer can only deploy on the intended network. - + -Once deployed, interactions like minting new token supply are governed by precise policies. +Once deployed, interactions like minting new token supply are governed by precise policies. For example, a minting policy can be configured to: -For example, a policy can be configured to: +- Allow a specific operator user to sign +- Require the transaction to originate from a designated wallet +- Target the deployed contract's exact address +- Call only the `mint` function -* Allow a 'token owner' user to sign a transaction -* Require the transaction to originate from a specific wallet -* Target the deployed contract's exact address -* Call a specific function (e.g., `mint`) +```json +{ + "policyName": "Allow minter to mint tokens", + "effect": "EFFECT_ALLOW", + "consensus": "approvers.any(user, user.id == '')", + "condition": "activity.action == 'SIGN' && wallet.id == '' && eth.tx.to == '' && eth.tx.data[0..10] == '0x40c10f19'" +} +``` + +The `0x40c10f19` value is the function selector for `mint(address,uint256)`. For production use, the recommended approach is to [upload the contract ABI](/concepts/policies/smart-contract-interfaces) so policies can reference function names and constrain arguments directly (e.g., bounding mint amounts or requiring multi-party approval above a threshold). -Policies can also bound [minting amounts](/concepts/policies/smart-contract-interfaces), requiring an additional human review and approval for large transactions. - + + +Upgrading a contract redirects the underlying implementation logic, making it one of the most sensitive operations. Turnkey minimizes the risk window: -Upgrading a contract is one of the most sensitive operations, as it redirects the underlying implementation logic – a process that can be exploited if unsecured. +1. Designate a specific upgrade owner wallet (separate from the operator wallet). +2. Create a temporary, highly restrictive policy **only when an upgrade is needed**, granting the upgrade owner permission to sign the upgrade transaction. +3. Once the upgrade is complete, remove the policy. The wallet remains dormant and secured until the next upgrade. -Turnkey ensures this process is secure: +```json +{ + "policyName": "Temporary: allow upgrade owner to upgrade proxy", + "effect": "EFFECT_ALLOW", + "consensus": "approvers.any(user, user.id == '')", + "condition": "activity.action == 'SIGN' && wallet.id == '' && eth.tx.to == '' && eth.tx.data[0..10] == '0x3659cfe6'" +} +``` -* The contract is designed to be upgradeable from the start (e.g., using a proxy pattern). -* A specific 'upgrade owner' wallet is designated. -* A temporary, highly restrictive policy is created **only when an upgrade is needed**. This policy grants an 'upgrade owner' permission to sign the upgrade transaction. -* Once the upgrade is complete, the policy is removed, and the wallet remains dormant and secured until the next required upgrade, minimizing the window of risk. +The `0x3659cfe6` selector matches `upgradeTo(address)`. After the upgrade completes, delete this policy to close the window. -> This process is further explored in our [GitHub 'Smart Contract Management' demo](https://github.com/tkhq/solutions/tree/main/smart-contract-mgmt) - -## The result: security as code - -Turnkey transforms Smart Contract Management from a high-risk, manual operation into a secure, predictable workflow where access is defined -by code. This "Security as Code" approach allows businesses to scale their Web3 operations with confidence, knowing their mission-critical -smart contracts are protected by cryptographically enforced security and least-privilege access control. + + This lifecycle is further explored in the [Smart Contract Management demo](https://github.com/tkhq/solutions/tree/main/smart-contract-mgmt) on GitHub. + + +## Next steps + + + + Upload ABIs and Solana IDLs for human-readable, argument-level policy control. + + + Define granular access controls for every signing action in your organization. + + + Build deposit wallets, sweep automations, and treasury flows with the same RBAC model. + + + Ready-made policy patterns for ERC-20 transfers, EIP-712 signing, and more. + + diff --git a/docs.json b/docs.json index 36622b3c..7f560d93 100644 --- a/docs.json +++ b/docs.json @@ -201,8 +201,8 @@ { "group": "Use cases", "pages": [ - "company-wallets/code-examples/smart-contract-management", "company-wallets/code-examples/payment-orchestration", + "company-wallets/code-examples/smart-contract-management", "company-wallets/use-cases/agentic-wallets" ] }, diff --git a/embedded-wallets/code-examples/embedded-consumer-wallet.mdx b/embedded-wallets/code-examples/embedded-consumer-wallet.mdx index 74ed5077..2ba617f4 100644 --- a/embedded-wallets/code-examples/embedded-consumer-wallet.mdx +++ b/embedded-wallets/code-examples/embedded-consumer-wallet.mdx @@ -5,10 +5,11 @@ description: "Give every user of your application their own wallet, provisioned With Turnkey, you can provision a dedicated wallet for every user as part of your application's signup flow, at any scale. Users authenticate with familiar methods like passkeys, email, or social login. They never manage keys or install extensions. -**Powered by Turnkey:** -- [Moonshot](https://www.turnkey.com/customers/how-moonshot-powers-millions-of-self-custodial-wallets-using-turnkey) -- millions of self-custodial wallets powering one of crypto's fastest-growing consumer apps -- [Infinex](https://www.turnkey.com/customers/making-onchain-ux-seamless-with-infinex-and-turnkey) -- seamless onchain UX for a unified DeFi experience -- [Axiom](https://www.turnkey.com/customers/axiom-global-defi-trading-platform) -- global DeFi trading platform with embedded wallet infrastructure +## Powered by Turnkey + +- [**Moonshot**](https://www.turnkey.com/customers/how-moonshot-powers-millions-of-self-custodial-wallets-using-turnkey) -- millions of self-custodial wallets powering one of crypto's fastest-growing consumer apps +- [**Infinex**](https://www.turnkey.com/customers/making-onchain-ux-seamless-with-infinex-and-turnkey) -- seamless onchain UX for a unified DeFi experience +- [**Axiom**](https://www.turnkey.com/customers/axiom-global-defi-trading-platform) -- global DeFi trading platform with embedded wallet infrastructure ## Key implementation decisions diff --git a/embedded-wallets/embedded-waas.mdx b/embedded-wallets/embedded-waas.mdx index 3640e197..fb0651fb 100644 --- a/embedded-wallets/embedded-waas.mdx +++ b/embedded-wallets/embedded-waas.mdx @@ -6,8 +6,9 @@ description: "Distribute embedded wallets through your developer platform with c With Turnkey, you can build a platform that distributes embedded wallets to your own customers. Your platform abstracts Turnkey behind your own SDK, APIs, or UI components. A 2-of-2 root quorum model gives your platform co-signing authority over every transaction, enabling billing gates, compliance checks, and risk controls at the infrastructure layer, while end users remain non-custodial. -**Powered by Turnkey:** -- [DIMO](https://www.turnkey.com/customers/how-dimo-is-bringing-transportation-solutions-onchain-with-turnkey) -- decentralized transportation network with 165,000+ connected vehicles. 90% reduction in onboarding time, 30% increase in completion rates. Built their own [transactions SDK](https://github.com/DIMO-Network/transactions) on Turnkey's infrastructure +## Powered by Turnkey + +- [**DIMO**](https://www.turnkey.com/customers/how-dimo-is-bringing-transportation-solutions-onchain-with-turnkey) -- decentralized transportation network with 165,000+ connected vehicles. 90% reduction in onboarding time, 30% increase in completion rates. Built their own [transactions SDK](https://github.com/DIMO-Network/transactions) on Turnkey's infrastructure ## What makes Wallet-as-a-Service different diff --git a/products/embedded-business-wallets/overview.mdx b/products/embedded-business-wallets/overview.mdx index d1083686..7e0891b5 100644 --- a/products/embedded-business-wallets/overview.mdx +++ b/products/embedded-business-wallets/overview.mdx @@ -5,9 +5,10 @@ description: "Shared wallets with role-based signing controls for teams, operato With Turnkey, your application can provision wallets designed for team usage. Multiple end users operate within a single sub-organization with role-based access control governed by the policy engine. No seed phrases, no browser extensions. -**Powered by Turnkey:** -- [Mural Pay](https://www.turnkey.com/customers/mural-pay-cross-border-payments) -- cross-border stablecoin payments platform processing 5,000+ monthly transactions for global businesses, fintechs, and banks -- [AllScale](https://www.turnkey.com/customers/allscale-cross-border-stablecoin-transactions) -- stablecoin neobank where small businesses manage payments with team-based wallet access +## Powered by Turnkey + +- [**Mural Pay**](https://www.turnkey.com/customers/mural-pay-cross-border-payments) -- cross-border stablecoin payments platform processing 5,000+ monthly transactions for global businesses, fintechs, and banks +- [**AllScale**](https://www.turnkey.com/customers/allscale-cross-border-stablecoin-transactions) -- stablecoin neobank where small businesses manage payments with team-based wallet access ## Key implementation decisions From 414e41fbe9ad27fc619aee9a55cadede20cd59c8 Mon Sep 17 00:00:00 2001 From: Graham Ritter Date: Wed, 6 May 2026 16:52:57 -0400 Subject: [PATCH 038/117] new agentic wallets page under company wallets --- company-wallets/use-cases/agentic-wallets.mdx | 238 +++++++++++++++++- 1 file changed, 235 insertions(+), 3 deletions(-) diff --git a/company-wallets/use-cases/agentic-wallets.mdx b/company-wallets/use-cases/agentic-wallets.mdx index 0b4cb325..368a9fc5 100644 --- a/company-wallets/use-cases/agentic-wallets.mdx +++ b/company-wallets/use-cases/agentic-wallets.mdx @@ -1,8 +1,240 @@ --- title: "Agentic Wallets" -description: "PLACEHOLDER -- Agentic wallets use case guide for company wallets." +description: "Give AI agents scoped signing authority over company wallets with policy-enforced access control, spending caps, and multi-party consensus for high-value actions." --- -# Agentic Wallets +This guide covers the key implementation decisions for giving AI agents secure access to company wallets, then walks through provisioning an agent end-to-end: creating a scoped wallet, assigning a non-root agent user, and defining policies that constrain exactly what the agent can sign. For basic signing, start with the [Quickstart](/getting-started/company-wallets-quickstart). -> **This is a placeholder page.** Content will be written in a future phase. +## Turnkey Agent Skills + +[Agent Skills](/ai/skills) let you operate on Turnkey directly through an AI assistant, no application code required. The agent provisioning workflow skill lets you quickly create a wallet scoped for agent usage through your AI assistant. You can then equip your agent with skills so it can autonomously operate within the boundaries you've configured. + +## Agent personas + +Turnkey supports different agent roles through policy composition: + +| Persona | What it can do | Policy approach | +| :--- | :--- | :--- | +| **Worker** | Signs transactions on a designated wallet | ALLOW with wallet scope + destination/function/value constraints | +| **Observer** | Read-only access (balance checks, activity monitoring) | No policies needed; default-deny prevents signing. Add explicit DENY if org has shared ALLOWs. | +| **Approver** | Reviews and approves other agents' transactions | Narrow ALLOW for `APPROVE_ACTIVITY` and `REJECT_ACTIVITY` only. Must NOT have signing permissions. | + +These personas can be composed for multi-agent systems. For example, a worker agent proposes trades, an approver agent validates them against risk models, and a human admin retains override authority for high-value actions. + +## Key implementation decisions + +| Decision | What to consider | +| :--- | :--- | +| Wallet scope | Dedicate a wallet (or specific accounts) to the agent. Never share wallets between agents with different trust levels. | +| Destination allowlist | Restrict which addresses the agent can send to (e.g., only a treasury address, only a specific DEX router) | +| Spending caps | Bound transaction values per-signing to limit blast radius if the agent misbehaves | +| Function restrictions | For smart contract interactions, restrict to specific function selectors or [upload the ABI](/concepts/policies/smart-contract-interfaces) for argument-level control | +| Consensus requirements | For high-value actions, require both the agent and a human (or another agent) to approve before the enclave signs | +| Key management | Store agent API keys in a secrets manager. Plan for rotation without downtime. Use short-lived keys where viable. | + +## Example: autonomous trading agent + +An AI agent that analyzes market data and executes trades on a DEX needs scoped signing authority: it should only be able to call specific router functions on approved contracts, with spending limits and human oversight for large trades. + +| Need | How Turnkey solves it | +| :--- | :--- | +| Agent must never access the private key | Keys stay in the [secure enclave](/security/secure-enclaves); the agent authenticates via API key and receives signatures only | +| Signing must be restricted to approved contracts | Policies target specific contract addresses and function selectors | +| Large trades need human approval | Consensus expressions require both the agent and a human approver for transactions above a threshold | +| Must support multiple chains | One agent user with chain-specific policies (EVM, SVM, etc.) covering each network | +| Must be revocable instantly | Delete the agent user to permanently and immediately revoke all access | + +### Implementation steps + + + The [agent provisioning skill](/ai/skills) can run this entire workflow for you through an AI assistant. Use the steps below if you prefer to implement it manually. + + + + This guide assumes you've completed the [Quickstart](/getting-started/company-wallets-quickstart) and have a Turnkey client initialized with your root credentials. The agent will get its own separate credentials. + + + + + +Create a dedicated wallet scoped to the agent's needs. Always check for existing wallets first to avoid creating duplicates. + +```ts +const { wallets } = await turnkeyClient.apiClient().getWallets(); +console.log("Existing wallets:", wallets.map((w) => `${w.walletName} (${w.walletId})`)); + +const { walletId, addresses } = await turnkeyClient.apiClient().createWallet({ + walletName: "Trading Agent Wallet", + accounts: [ + { + curve: "CURVE_SECP256K1", + pathFormat: "PATH_FORMAT_BIP32", + path: "m/44'/60'/0'/0/0", + addressFormat: "ADDRESS_FORMAT_ETHEREUM", + }, + ], +}); + +const agentAddress = addresses[0]; +``` + + + + + +The agent gets its own user with a P-256 API key pair. This user is **non-root** by default, meaning it has zero permissions until you explicitly create policies. + +Generate a key pair for the agent (the private key never touches Turnkey): + +```ts +import crypto from "crypto"; + +const keyPair = crypto.generateKeyPairSync("ec", { namedCurve: "P-256" }); +const pubJwk = keyPair.publicKey.export({ format: "jwk" }); +const privJwk = keyPair.privateKey.export({ format: "jwk" }); + +// SEC1-compressed P-256 public key (33 bytes, 66 hex chars) +const xHex = Buffer.from(pubJwk.x!, "base64url").toString("hex").padStart(64, "0"); +const yBuf = Buffer.from( + Buffer.from(pubJwk.y!, "base64url").toString("hex").padStart(64, "0"), + "hex" +); +const prefix = (yBuf[yBuf.length - 1] & 1) === 0 ? "02" : "03"; +const agentPublicKey = prefix + xHex; +const agentPrivateKey = Buffer.from(privJwk.d!, "base64url").toString("hex").padStart(64, "0"); +``` + +Then create a user tag and the agent user. `userTags` takes tag IDs (UUIDs), not string labels, so create the tag first: + +```ts +const { userTagId: agentTagId } = await turnkeyClient.apiClient().createUserTag({ + userTagName: "agent", + userIds: [], +}); + +const { userIds } = await turnkeyClient.apiClient().createUsers({ + users: [ + { + userName: "trading-agent", + userTags: [agentTagId], + apiKeys: [ + { + apiKeyName: "trading-agent-key", + publicKey: agentPublicKey, + curveType: "API_KEY_CURVE_P256", + }, + ], + authenticators: [], + oauthProviders: [], + }, + ], +}); + +const agentUserId = userIds[0]; +``` + + + Never create agents as root users. Root users bypass the policy engine entirely. Always use non-root users with explicit ALLOW policies. + + + + + + +With the agent user and wallet created, define policies that scope exactly what the agent can do. Turnkey is default-deny: without an ALLOW policy, the agent cannot sign anything. + +**Base signing policy** (scoped to the agent's wallet): + +```json +{ + "policyName": "Allow trading agent to sign on its wallet", + "effect": "EFFECT_ALLOW", + "consensus": "approvers.any(user, user.id == '')", + "condition": "activity.type in ['ACTIVITY_TYPE_SIGN_TRANSACTION_V2', 'ACTIVITY_TYPE_ETH_SEND_TRANSACTION'] && wallet.id == ''" +} +``` + +**Destination allowlist** (restrict to a specific DEX router): + +```json +{ + "policyName": "Restrict agent to Uniswap router", + "effect": "EFFECT_ALLOW", + "consensus": "approvers.any(user, user.id == '')", + "condition": "activity.action == 'SIGN' && wallet.id == '' && eth.tx.to == '' && eth.tx.chain_id == '1'" +} +``` + +**Spending cap** (limit per-transaction value): + +```json +{ + "policyName": "Cap agent transactions at 0.5 ETH", + "effect": "EFFECT_DENY", + "consensus": "approvers.any(user, user.id == '')", + "condition": "activity.action == 'SIGN' && eth.tx.value > 500000000000000000" +} +``` + +**Multi-party consensus for large trades:** + +```json +{ + "policyName": "Require human approval above 0.1 ETH", + "effect": "EFFECT_ALLOW", + "consensus": "approvers.any(user, user.id == '') && approvers.any(user, user.id == '')", + "condition": "activity.action == 'SIGN' && wallet.id == '' && eth.tx.value > 100000000000000000" +} +``` + + + + + +Test the agent's credentials by initializing a client with the agent's key pair and verifying access: + +```ts +const agentClient = new Turnkey({ + apiBaseUrl: "https://api.turnkey.com", + apiPublicKey: agentPublicKey, + apiPrivateKey: agentPrivateKey, + defaultOrganizationId: process.env.TURNKEY_ORGANIZATION_ID!, +}); + +const whoami = await agentClient.apiClient().getWhoami(); +console.log("Agent user ID:", whoami.userId); +console.log("Agent org ID:", whoami.organizationId); +``` + +Store the agent's credentials in your secrets manager: + +```bash +TURNKEY_API_PUBLIC_KEY= +TURNKEY_API_PRIVATE_KEY= +TURNKEY_ORGANIZATION_ID= +SIGN_WITH= +``` + + + Never output or log root credentials alongside agent credentials. The agent should only ever have its own key pair. + + + + + +## Next steps + + + + Embeddable guides for provisioning, managing, and monitoring agents with Turnkey. + + + Define granular access controls for every signing action in your organization. + + + Upload ABIs for function-level policy control over agent contract interactions. + + + Agents can automate sweep, deposit, and treasury flows with the same RBAC model. + + From 32b6c743b64a81e0792763ba35239f937102468e Mon Sep 17 00:00:00 2001 From: Graham Ritter Date: Wed, 6 May 2026 17:33:58 -0400 Subject: [PATCH 039/117] Agent Skills page written --- ai/skills.mdx | 86 ++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 82 insertions(+), 4 deletions(-) diff --git a/ai/skills.mdx b/ai/skills.mdx index fd5f8de9..674f641b 100644 --- a/ai/skills.mdx +++ b/ai/skills.mdx @@ -1,8 +1,86 @@ --- -title: "Skills" -description: "PLACEHOLDER -- Turnkey Skills for AI agent integrations." +title: "Agent Skills" +description: "Opinionated instructions that tell AI agents how to interact with Turnkey through conversation, not code." --- -# Skills +Each agent skill is a `SKILL.md` file with opinionated, step-by-step instructions for a specific Turnkey operation. Instead of an agent reasoning about API docs, parameter formatting, and chain-specific details on its own, skills give it exactly what it needs to execute correctly. They work with Claude Code, Codex, Gemini, and any AI assistant that can read files. -> **This is a placeholder page.** Content will be written in a future phase. +Skills are for interacting with Turnkey directly through an AI assistant, not for building the application layer on top of Turnkey. If you're using a coding agent to develop a Turnkey integration, connect it to the [Docs MCP server](/developer-reference/using-llms) instead. + +Skills are open source at [**tkhq/turnkey-agent-skills**](https://github.com/tkhq/turnkey-agent-skills) on GitHub. Distribution through plugin marketplaces is coming soon. + +## Use cases + +Skills are composable. Each skill handles a single domain (wallets, signing, policies, etc.) and can be combined for any workflow. Common starting points: + +| Use case | What you can do | Start with | +| :--- | :--- | :--- | +| **Explore and test** | Create wallets, sign transactions, and set policies without writing integration code | `getting-started` | +| **Administer your org** | Manage users, rotate API keys, configure policies, and monitor activities conversationally | `managing-users`, `managing-policies` | +| **Provision autonomous agents** | Set up a scoped wallet with constrained credentials and governance policies for on-chain automation | `provisioning-agent` | + +## Credentials and security + + + Read the following carefully before giving any AI agent access to your Turnkey organization. + + +- **LLMs are unpredictable.** They can misinterpret instructions or execute unintended actions. Always review what an agent is doing before approving it. +- **Root credentials are dangerous to give to an AI agent.** A root API key bypasses all policies and has full access to your organization. Only use root credentials with an interactive assistant where you approve each action. This is entirely at your own risk. + - For best security, create a non-root user with specifically scoped permissions and approval flows. When testing against a non-production organization, root keys are more acceptable. +- **Never test against wallets holding real funds** unless you have appropriate safeguards in place (scoped credentials, spending caps, destination allowlists). + +All skills require an API key pair and organization ID from the [Turnkey Dashboard](https://app.turnkey.com) (**Settings > API Keys**). Which credentials you use depends on your setup: + +| Setup | Credential type | When to use | +| :--- | :--- | :--- | +| **Interactive assistant** (human approves each action) | Root API key (with extreme caution) | Organization administration, testing, and exploration. Acceptable because a human is reviewing every action before it executes. | +| **Autonomous agent** (acts without human review) | Scoped, non-root API key | Production automation. **Never use root credentials for autonomous agents.** Root keys bypass all policies. Create a non-root user with scoped policies instead. See [Agentic Wallets](/company-wallets/use-cases/agentic-wallets) and the `provisioning-agent` skill. | + +## Available skills + +Skills are organized into **workflows** (guided multi-step procedures) and **primitives** (individual operations). + +### Workflows + +| Skill | Description | +| :--- | :--- | +| **Getting Started** | Day-0 onboarding: verify credentials, create your first wallet | +| **Provisioning Agent** | Create a scoped agent with constrained credentials and policies | +| **Managing Agent** | Debug denied transactions, rotate keys, update agent policies | + +### Primitives + +| Skill | Description | +| :--- | :--- | +| **Managing Wallets** | Create wallets, derive addresses, add chains, import/export | +| **Signing Transactions** | Sign and broadcast on any supported chain (EVM, Solana, Bitcoin, and more) | +| **Managing Users** | Create users, rotate API keys, manage user tags | +| **Managing Policies** | Access control, spending limits, allowlists, multi-party approval | +| **Monitoring Activities** | Activity status, consensus approvals, audit logs | + +## Getting started + +Clone the repo and point your AI assistant at the skill files: + +```bash +git clone https://github.com/tkhq/turnkey-agent-skills.git +cd turnkey-agent-skills +``` + +## Next steps + + + + Give AI agents scoped signing authority with policy-enforced access control. + + + Define granular access controls for every signing action in your organization. + + + MCP server, docs context, and other ways to use LLMs with Turnkey. + + + Sign your first transaction with the Turnkey server SDK. + + From a97f498ee7b4d833e34cf3640438aeb06cb48c58 Mon Sep 17 00:00:00 2001 From: Graham Ritter Date: Fri, 8 May 2026 17:14:36 -0400 Subject: [PATCH 040/117] added reference to shared security model on the skills and about turnkey pages --- ai/skills.mdx | 1 + home.mdx | 2 ++ 2 files changed, 3 insertions(+) diff --git a/ai/skills.mdx b/ai/skills.mdx index 674f641b..3dfff11a 100644 --- a/ai/skills.mdx +++ b/ai/skills.mdx @@ -29,6 +29,7 @@ Skills are composable. Each skill handles a single domain (wallets, signing, pol - **Root credentials are dangerous to give to an AI agent.** A root API key bypasses all policies and has full access to your organization. Only use root credentials with an interactive assistant where you approve each action. This is entirely at your own risk. - For best security, create a non-root user with specifically scoped permissions and approval flows. When testing against a non-production organization, root keys are more acceptable. - **Never test against wallets holding real funds** unless you have appropriate safeguards in place (scoped credentials, spending caps, destination allowlists). +- **Turnkey operates based on a [shared responsibility model](/security/shared-responsibility-model).** Turnkey secures the platform, including enclaves, the policy engine, and key confidentiality. You are responsible for how you configure your organization, scope credentials, and author policies. This applies doubly when delegating actions to an AI agent. All skills require an API key pair and organization ID from the [Turnkey Dashboard](https://app.turnkey.com) (**Settings > API Keys**). Which credentials you use depends on your setup: diff --git a/home.mdx b/home.mdx index 24c2b9e2..42c5d1b7 100644 --- a/home.mdx +++ b/home.mdx @@ -14,6 +14,8 @@ Every action — signing, creating wallets, updating permissions — is evaluate Keys never leave the enclave. Turnkey returns signed payloads and supports transaction broadcasting directly to the network. +Turnkey operates based on a [shared responsibility model](/security/shared-responsibility-model). Turnkey is responsible for the security of the platform itself, including enclave infrastructure, policy engine correctness, key confidentiality, and service availability. You are responsible for securing your integration: configuring your root quorum, scoping user permissions, authoring policies, and managing credentials. See the [full model](/security/shared-responsibility-model) for details. + Turnkey architecture: organizations, sub-organizations, users, authenticators, policies, and wallets From 728a6e778cfa17e36bae4371583fca0d057d3499 Mon Sep 17 00:00:00 2001 From: Graham Ritter Date: Tue, 12 May 2026 11:16:06 -0400 Subject: [PATCH 041/117] revamped key encryption solutions pages --- docs.json | 7 +- .../examples/encryption-key-storage.mdx | 101 ++++----- .../examples/enterprise-disaster-recovery.mdx | 203 ++++++++---------- products/key-management/overview.mdx | 81 +++++-- solutions/overview.mdx | 12 +- 5 files changed, 190 insertions(+), 214 deletions(-) diff --git a/docs.json b/docs.json index 7f560d93..c8d227c1 100644 --- a/docs.json +++ b/docs.json @@ -985,12 +985,7 @@ { "group": "Overview", "pages": [ - "category/security" - ] - }, - { - "group": "Turnkey Shared Responsibility Model", - "pages": [ + "category/security", "security/shared-responsibility-model" ] }, diff --git a/products/key-management/examples/encryption-key-storage.mdx b/products/key-management/examples/encryption-key-storage.mdx index 1e2de7a0..e5a8fd4d 100644 --- a/products/key-management/examples/encryption-key-storage.mdx +++ b/products/key-management/examples/encryption-key-storage.mdx @@ -1,41 +1,42 @@ --- title: "Encryption Key Storage" -description: "Use Turnkey as a secure key storage and retrieval service to build user-controlled recovery with risk separation between your infrastructure and Turnkey." +description: "Build recovery flows with risk separation between your infrastructure and Turnkey." --- -This guide demonstrates how to use Turnkey to store and retrieve encryption keys with granular access controls. Storing the encryption key in Turnkey's secure enclave, separate from the data in your platform, allows you to build applications with enhanced security, performance, and flexibility. +Store and retrieve encryption keys from Turnkey's secure enclave with policy-controlled access. Your infrastructure holds encrypted data and Turnkey holds the encryption key. Neither party alone can access plaintext. For an overview of Turnkey's key management capabilities, see the [Key Management Overview](/products/key-management/overview). -## Why Turnkey for Encryption Key Storage? +## Powered by Turnkey -Turnkey provides secure storage and policy-controlled access for encryption keys. Use it to encrypt sensitive data, build user-controlled recovery flows, or separate risk between your infrastructure and Turnkey's secure enclave. +- [**World App**](https://www.turnkey.com/blog/turnkey-announces-integration-tools-for-humanitys-world-app) (by Tools for Humanity) -- encrypts each user's recovery bundle on-device and stores the encryption key in Turnkey's secure enclave, gated by user authentication via OAuth. [View on GitHub](https://github.com/worldcoin/backup-service). -## Core Principles +## Key implementation decisions -- **Risk separation:** Neither party alone can access plaintext data. Your infrastructure holds encrypted data while Turnkey's [secure enclave](/security/secure-enclaves) holds the encryption key. -- **Secure enclaves:** Keys are generated and stored inside hardware-backed enclaves. Key material never exists in plaintext outside the enclave boundary. -- **Policy-gated key export:** Use Turnkey's [policy engine](/concepts/policies/overview) to add controls over key export, such as requiring [quorum approval](/concepts/users/root-quorum) for sensitive operations. -- **Flexible authentication:** Turnkey supports multiple authentication methods for key export: API keys, [passkeys](/authentication/passkeys/introduction), [social logins](/authentication/social-logins), [email](/authentication/email) and [SMS OTP](/authentication/sms), allowing you to match your security requirements. +| Decision | What to consider | Learn more | +| :--- | :--- | :--- | +| **Export controls** | Gate key export through policies. Require quorum approval, restrict which users can trigger export, or scope export to specific key IDs. | [Policy Engine](/concepts/policies/overview), [Root Quorum](/concepts/users/root-quorum) | +| **Authentication method** | Choose how users authenticate to access keys: API keys, passkeys, social logins, email, or SMS OTP. Match the method to your security and UX requirements. | [Authentication Overview](/authentication/overview) | +| **Encrypted data storage** | Store encrypted bundles wherever you control: client-side (localStorage, IndexedDB), mobile secure enclave, your database, or object storage (S3, GCS). Turnkey only holds the encryption key. | | -## Architecture +## Example: backup and recovery + +A common pattern for applications: encrypt recovery bundles, store them in your infrastructure, and authenticate through Turnkey to decrypt when needed. No single party holds both the encrypted data and the decryption key. 2-of-2 security model diagram showing encrypted data in your infrastructure and encryption key in Turnkey secure enclave -## How to Get Started on Encryption Key Storage with Turnkey +| Need | How Turnkey solves it | +| :--- | :--- | +| Risk separation between platforms | Turnkey never sees the encrypted data; your infrastructure never sees the encryption key. Both must be compromised. | +| Decrypt recovery bundles without managing keys directly | Encryption key lives in the enclave; authenticate to export it on demand | +| Caller retains control | Only the caller's authenticator (passkey, email, social login) can trigger key export | +| Policy-gated access for sensitive operations | Quorum approval, scoped export policies, and audit trails for every key operation | -1. **Create encryption keypair:** Generate a P-256 keypair in Turnkey. The private key is stored in the secure enclave and never exposed. -2. **Retrieve public key:** Fetch the public key to use for encryption on your side. -3. **Encrypt data locally:** Use the public key to encrypt sensitive data and store it in your infrastructure. -4. **Authenticate and export decryption key:** Authenticate the user and request the private key from Turnkey. -5. **Decrypt and use locally:** Decrypt your stored bundles and use them locally, then clear sensitive data from memory. +### Implementation steps -## Use Cases - -| Need | Configuration | -| :--- | :--- | -| Users need to recover wallets without managing backup keys themselves. | **User-controlled backup & recovery:** Encrypt recovery bundles on-device using Turnkey's public key, store encrypted bundles client-side, and gate decryption through user authentication ([social logins](/authentication/social-logins), [passkeys](/authentication/passkeys/introduction), [email OTP](/authentication/email)). | -| Compliance or architecture requires sensitive material is not held by any single party. | **Distributed trust:** Store encrypted credentials, API keys, or secrets in your infrastructure. Gate decryption through Turnkey's policy engine and require quorum approval for key export in high-security scenarios. | + + Explore the complete implementation in the [GitHub encryption-key-escrow example](https://github.com/tkhq/sdk/tree/main/examples/encryption-key-escrow). + @@ -73,15 +74,6 @@ Turnkey provides secure storage and policy-controlled access for encryption keys // Store in YOUR infrastructure await saveToYourStorage(encryptedBundle); ``` - - Encrypted bundles can be stored anywhere you control: - - | Storage Type | Use Case | - | :--- | :--- | - | **localStorage / IndexedDB** | Client-side web apps (cleared on browser data wipe) | - | **Secure Enclave (mobile)** | iOS/Android apps with hardware-backed protection | - | **Your database** | Server-managed data with your standard backup/DR | - | **Object storage (S3, GCS)** | Scalable, distributed access with appropriate IAM policies | @@ -133,34 +125,19 @@ Turnkey provides secure storage and policy-controlled access for encryption keys -## The Result: Security Without Compromise - -Encryption Key Storage with Turnkey enables you to: - -- **Maintain full control** over your data and operations -- **Implement flexible recovery** flows that keep users in control -- **Distribute trust** between your infrastructure and Turnkey - -Turnkey provides secure key storage, authentication, and policy enforcement. You decide how to use the keys and where to store the encrypted data. - -## World App Case Study - -[World App](https://www.turnkey.com/blog/turnkey-announces-integration-tools-for-humanitys-world-app) (by Tools for Humanity) uses Encryption Key Storage with Turnkey for user wallet recovery. - -Learn more: [World App Backup Service (GitHub)](https://github.com/worldcoin/backup-service) - -World App encrypts each user's recovery bundle locally on-device. Turnkey's infrastructure manages the bundle's encryption key within secure enclaves, which can only be used in response to user-authenticated actions such as OAuth. - -- Users retain control of their encrypted recovery data -- The encryption key lives in secure enclaves, not centralized servers -- Key access requires explicit user authentication -- No single point of failure: both components must be compromised - -## Resources - -Explore the complete implementation in our [GitHub encryption-key-escrow example](https://github.com/tkhq/sdk/tree/main/examples/encryption-key-escrow). - -- [Secure Enclaves](/security/secure-enclaves): How Turnkey protects key material -- [Export Private Keys](/wallets/export-wallets): API documentation for key export -- [Policy Engine](/concepts/policies/overview): Configuring access controls -- [Root Quorum](/concepts/users/root-quorum): Multi-party approval for sensitive operations +## Next steps + + + + How Turnkey protects key material inside hardware-backed enclaves. + + + Define granular access controls and approval requirements for key operations. + + + API documentation for key export flows. + + + Import and recover wallets with quorum approval and a cryptographic audit trail. + + diff --git a/products/key-management/examples/enterprise-disaster-recovery.mdx b/products/key-management/examples/enterprise-disaster-recovery.mdx index 68016076..02cd3971 100644 --- a/products/key-management/examples/enterprise-disaster-recovery.mdx +++ b/products/key-management/examples/enterprise-disaster-recovery.mdx @@ -1,30 +1,22 @@ --- title: "Enterprise Disaster Recovery" -description: "Import and recover wallets with strict access controls. " +description: "Import and recover wallets with end-to-end encryption, quorum-controlled access, and a cryptographic audit trail." --- -This guide covers how to backup your wallets on Turnkey for incident response, provider migration, -and wallet backups. +Back up wallets on Turnkey and recover them when you need to for incident response, provider migration, and redundancy. All key material is encrypted directly to Turnkey's secure enclave using [HPKE](/security/enclave-secure-channels), and every recovery operation is cryptographically stamped. For an overview of Turnkey's key management capabilities, see the [Key Management Overview](/products/key-management/overview). -## Why Turnkey for Enterprise Disaster Recovery? +## Key implementation decisions -Turnkey provides a secure foundation for disaster recovery. Our approach combines -[secure enclaves](/security/secure-enclaves), end-to-end encryption, and -[programmable policies](/concepts/policies/overview) to ensure recovery material is protected at -rest, in transit, and during use. +| Decision | What to consider | Learn more | +| :--- | :--- | :--- | +| **Organization setup** | Create dedicated recovery users with limited permissions. Distribute authenticators (passkeys, YubiKeys) across geographic locations where possible. | [Organizations](/concepts/organizations) | +| **Root quorum** | Require multiple approvers for sensitive operations to prevent any single credential compromise from triggering unauthorized recovery. | [Root Quorum](/concepts/users/root-quorum) | +| **Recovery policies** | Restrict what can be done with recovered wallets: limit fund movement to allowed addresses, require multi-party approval, scope signing by chain or value. | [Policy Engine](/concepts/policies/overview), [Signing Control](/concepts/policies/examples/signing-control) | +| **Import method** | Use the NodeJS server SDK for the full import flow including encryption and secure transport, or the React Wallet Kit for client-side import. | [Import Wallets](/wallets/import-wallets), [SDK Server](https://github.com/tkhq/sdk/tree/main/examples/import-in-node) | -## Core principles +## Example: treasury recovery -- **End-to-end encryption:** All key import material is encrypted directly to Turnkey's secure - enclave using [HPKE (Hybrid Public Key Encryption)](/security/enclave-secure-channels). The - plaintext never exists outside the enclave boundary. -- **Cryptographic audit trail:** Every recovery operation during transmission and import is - cryptographically stamped, ensuring that recoveries can not be tampered with along the way. -- **Policy-based guardrails:** Turnkey’s [policy engine](/concepts/policies/overview) restricts how - wallets are accessed, like limiting fund movement to allowed addresses or requiring multiple - approvals from your organization. - -## Direct Import Flow +Import wallet keys into Turnkey's secure enclave ahead of time. If a key holder becomes unavailable or a hardware wallet fails, recover treasury assets with quorum-controlled access and policy-restricted fund movement. -## How to Get Started on Enterprise Disaster Recovery with Turnkey - -1. **Secure organization & policy setup**: Create your Turnkey org, configure the root quorum, and - define recovery policies. -2. **Set up the Turnkey SDK**: Integrate - [React Wallet Kit](/sdks/react/using-embedded-wallets#importing-and-exporting-wallets) or - [@turnkey/sdk-server](/embedded-wallets/code-examples/import#nodejs) into your application. -3. **Import wallets**: Use handleImportWallet() to import wallet keys into Turnkey's secure enclave. - -## **Use Cases** - -| Need | Configuration | -| :------------------------------------------------------------------------------------------------------------ | :------------------------------------------------------------------------------------------------------------------------------------------------------- | -| A key holder becomes unavailable or a hardware wallet fails, requiring immediate recovery of treasury assets. | **Treasury recovery**: Import wallet keys into Turnkey's secure enclave with quorum-controlled access and policy-restricted fund sweeping. | -| Migrating from another key management provider with no plaintext exposure during transit. | **Provider migration**: Encrypt keys to Turnkey's secure enclave on a hardened machine, import directly with full policy controls inherited immediately. | -| Operations need to continue even if a primary signer or infrastructure goes down. | **Redundancy and failover**: Import backup copies of critical wallet keys into Turnkey so a secondary signing path is always available. | - -### 1. Secure Organization Setup and Recovery Policies - -Create a [Turnkey organization](https://app.turnkey.com/dashboard/auth/initial) and establish the -security foundation for recovery operations: - -- Create dedicated recovery users with specific, limited permissions -- Configure the [Root Quorum](/concepts/users/root-quorum) to require multiple approvers for - sensitive operations - - Require [quorum approval](/concepts/users/root-quorum) for high-value operations to prevent any - single person from unilaterally moving recovered funds. This ensures no single credential - compromise can trigger unauthorized recovery. See [Policy overview](/concepts/policies/overview) - for setup guidance. - -- Distribute authenticators ([passkeys](/authentication/passkeys/introduction), YubiKeys) across - geographic locations if possible -- Define [policies](/concepts/policies/examples/signing-control) that restrict what can be done with - recovered wallets. - -### 2. Set up the Turnkey SDK - -Integrate Turnkey into your application to enable wallet import and recovery operations. The -[NodeJS server SDK](https://github.com/tkhq/sdk/tree/main/examples/import-in-node) is well oriented -to handle the entire import flow, including encryption and secure transport. - -```ts -import { Turnkey } from "@turnkey/sdk-server"; -import { encryptPrivateKeyToBundle, encryptWalletToBundle } from "@turnkey/crypto"; - -const initResult = await turnkeyClient.apiClient().initImportWallet({ - userId, -}); - -const walletBundle = await encryptWalletToBundle({ - mnemonic, - importBundle: initResult.importBundle, - userId, - organizationId, -}); -``` - -### 3. Import Wallets - -Use [importWallet()](/generated-docs/core/turnkey-client-import-wallet) to import wallet keys into -Turnkey's secure enclave. In the last step the SDK encrypts the mnemonic or private key to Turnkey's -enclave public key using [HPKE (Hybrid Public Key Encryption)](/security/enclave-secure-channels), -and now transmits the encrypted bundle. The enclave decrypts and stores the key material. - -```ts -const walletImportResult = await turnkeyClient.apiClient().importWallet({ - userId: userId, - walletName: "Your imported wallet!", - encryptedBundle: walletBundle, - accounts: [], -}); -``` - -All fund movements are logged with cryptographic signatures, providing a complete audit trail of the -recovery operation. - -## The Result: Enterprise-grade Key Recovery - -Turnkey transforms enterprise disaster recovery from a high-risk, manual operation into a secure, -verifiable process. Import wallet keys directly into Turnkey's secure enclave and gain immediate -operational capability with full policy controls: - -- **Cryptographic guarantees**: Key material is protected by secure enclaves and end-to-end - encryption -- **Organizational controls**: Quorum policies prevent unilateral action on sensitive operations -- **Operational flexibility**: Support for all major chains and key types through a unified - interface -- **Audit compliance**: Every operation is logged with cryptographic signatures - -## Resources - -Explore the complete implementation in our -[GitHub 'Disaster Recovery' example](https://github.com/tkhq/sdk/tree/main/examples/disaster-recovery). - -- [Import Wallets Guide](/wallets/import-wallets) -- [Export Wallets Guide](/wallets/export-wallets) -- [Root Quorum Configuration](/concepts/users/root-quorum) -- [Secure Enclaves Overview](/security/secure-enclaves) -- [Enclave Secure Channels](/security/enclave-secure-channels) +| Need | How Turnkey solves it | +| :--- | :--- | +| Import keys with no plaintext exposure in transit | All key material is encrypted directly to the enclave using [HPKE](/security/enclave-secure-channels). Plaintext never exists outside the enclave boundary. | +| No single person can unilaterally move recovered funds | [Quorum approval](/concepts/users/root-quorum) requires multiple approvers for sensitive operations | +| Restrict what can be done with recovered wallets | [Policies](/concepts/policies/overview) scope fund movement to allowed addresses, chains, and value thresholds | +| Cryptographic audit trail | Every recovery operation is cryptographically stamped, ensuring recoveries cannot be tampered with | +| Secondary signing path must always be available | Import backup copies of critical wallet keys so operations continue if a primary signer goes down | + +### Implementation steps + + + Explore the complete implementation in the [GitHub disaster-recovery example](https://github.com/tkhq/sdk/tree/main/examples/disaster-recovery). + + + + + Create a [Turnkey organization](https://app.turnkey.com/dashboard/auth/initial) and establish the security foundation for recovery operations: + + - Create dedicated recovery users with specific, limited permissions + - Configure the [Root Quorum](/concepts/users/root-quorum) to require multiple approvers for sensitive operations + - Distribute authenticators ([passkeys](/authentication/passkeys/introduction), YubiKeys) across geographic locations + - Define [policies](/concepts/policies/examples/signing-control) that restrict what can be done with recovered wallets + + + + Use the [NodeJS server SDK](https://github.com/tkhq/sdk/tree/main/examples/import-in-node) to initialize the import and encrypt the wallet material to Turnkey's enclave: + + ```ts + import { Turnkey } from "@turnkey/sdk-server"; + import { encryptPrivateKeyToBundle, encryptWalletToBundle } from "@turnkey/crypto"; + + const initResult = await turnkeyClient.apiClient().initImportWallet({ + userId, + }); + + const walletBundle = await encryptWalletToBundle({ + mnemonic, + importBundle: initResult.importBundle, + userId, + organizationId, + }); + ``` + + + + Use [importWallet()](/generated-docs/core/turnkey-client-import-wallet) to transmit the encrypted bundle. The enclave decrypts and stores the key material. All fund movements are logged with cryptographic signatures. + + ```ts + const walletImportResult = await turnkeyClient.apiClient().importWallet({ + userId: userId, + walletName: "Your imported wallet!", + encryptedBundle: walletBundle, + accounts: [], + }); + ``` + + + +## Next steps + + + + Full guide for importing wallets and private keys into Turnkey. + + + Export wallets and keys when needed for migration or backup. + + + Define granular access controls and approval requirements. + + + Store encryption keys with risk separation between your infrastructure and Turnkey. + + diff --git a/products/key-management/overview.mdx b/products/key-management/overview.mdx index 0e742324..4da5cd13 100644 --- a/products/key-management/overview.mdx +++ b/products/key-management/overview.mdx @@ -2,26 +2,73 @@ title: "Overview" --- -Turnkey is not just for crypto wallets. Our infrastructure also allows for more generic private key -management: store, recover, and manage cryptographic keys with programmable access controls, and -quorum approvals. +## What is key management? -With Key Management, you can: +Turnkey provides infrastructure to store, recover, and operate on cryptographic keys beyond just wallet use cases. Instead of managing raw key material in your own infrastructure, your application delegates key storage to Turnkey's secure enclaves and controls access through programmable policies. **You define who can use a key and under what conditions; Turnkey ensures the key material is never exposed.** -- Securely store cryptographic keys in hardware-backed - [secure enclave infrastructure](/security/secure-enclaves) -- Implement disaster recovery with cryptographic guarantees -- Protect sensitive material like API secrets, credentials, and recovery bundles +## Why Turnkey for key management? -## Solutions +Protecting cryptographic keys means solving for secure storage, access control, disaster recovery, and auditability. Turnkey's infrastructure handles this so your keys remain protected throughout their lifecycle. -| Example | Description | -| :--------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------ | -| [Enterprise Disaster Recovery](/products/key-management/examples/enterprise-disaster-recovery) | Back up wallets and private keys for disaster scenarios | -| [Encryption Key Storage](/products/key-management/examples/encryption-key-storage) | Use Turnkey private keys to encrypt sensitive data (e.g., recovery bundles, API secrets, credentials) with simple authentication & policies | +With Turnkey, you can: -## Next Steps +- Store and [import](/security/enclave-secure-channels) cryptographic keys in hardware-backed [secure enclaves](/security/secure-enclaves) where key material never exists in plaintext outside the enclave boundary +- Gate key access and export through a programmable [policy engine](/concepts/policies/overview), including [quorum approval](/concepts/users/root-quorum) for sensitive operations +- Authenticate key access through multiple methods including API keys, [passkeys](/authentication/passkeys/introduction), [social logins](/authentication/social-logins), [email](/authentication/email), and [SMS OTP](/authentication/sms) +- Maintain a cryptographic audit trail where every key operation is stamped and verifiable +- Distribute trust between your infrastructure and Turnkey so no single party can access plaintext material -Explore the [code examples](/products/key-management/examples/overview) for detailed implementation -guides, or learn more about [secure enclaves](/security/secure-enclaves) and -[quorum policies](/concepts/users/root-quorum). +## How it works + +Your backend authenticates to Turnkey via API key. The [policy engine](/concepts/policies/overview) evaluates every request inside the secure enclave before any key operation executes. Keys are stored and operated on entirely within the enclave. Only derived outputs (public keys, encrypted export bundles, and operation results) are returned. + +### Access control model + +Key management is configured through an [organization](/concepts/organizations) with users, tags, and policies to control access: + +- **Users** representing human operators and automated services, each with their own credentials (API keys, passkeys) +- **Tags** grouping users by role (e.g. `recovery-admin`, `backup-operator`) +- **Policies** controlling who can access keys and under what conditions: by key ID, operation type, approval threshold, or any combination + +Turnkey is deny-by-default. If no policy explicitly allows an action, it is rejected. See [Policies](/concepts/policies/overview) and [Policy Language](/concepts/policies/language). + +### Security model + +- **Keys never leave the enclave.** Cryptographic keys live in [Trusted Execution Environments (TEEs)](/security/secure-enclaves). All key operations happen inside verifiable infrastructure; only derived outputs are returned. +- **End-to-end encryption for import and export.** Key material in transit is encrypted directly to the enclave using [HPKE](/security/enclave-secure-channels). Plaintext never exists outside the enclave boundary. +- **Policy-gated access.** Every key operation is evaluated against policies in the enclave. Users and services can only perform actions they have been explicitly authorized for. +- **Trusted vs. untrusted separation.** A breach of your backend does not expose keys. The enclave enforces policies independently of your infrastructure. + +For a deeper look, see [Security](/security/our-approach) and [Secure Enclaves](/security/secure-enclaves). + +## Building with Turnkey + +Key management integrations are backend-driven. Use Turnkey's server SDKs to store keys, manage policies, and handle import and export operations programmatically from your infrastructure. + +Server SDKs are available for [TypeScript](/sdks/javascript-server), [Go](/sdks/golang), [Ruby](/sdks/ruby), [Python](/sdks/python), and [Rust](/sdks/rust). For full control, you can call the [Turnkey API](/developer-reference/api-overview/intro) directly. + +The [Turnkey Dashboard](https://app.turnkey.com) provides an interface for managing organizations, users, and policies. + +## Use cases + +Key management serves different needs depending on how your application uses cryptographic keys. Choose the pattern that matches your requirements. + + + + Store encryption keys in Turnkey's secure enclave and separate risk between your infrastructure and Turnkey. Build user-controlled recovery, distributed trust, and policy-gated decryption. + + + Import and recover wallets with end-to-end encryption, quorum-controlled access, and a cryptographic audit trail for treasury recovery, provider migration, and failover. + + + +## Ready to build? + +- [Policy Quickstart](/concepts/policies/quickstart) -- define access controls and approval requirements +- [SDK Reference](/sdks/introduction) -- server SDKs for TypeScript, Go, Ruby, Python, and Rust diff --git a/solutions/overview.mdx b/solutions/overview.mdx index 441bad08..0b02967d 100644 --- a/solutions/overview.mdx +++ b/solutions/overview.mdx @@ -3,7 +3,7 @@ title: "Introducing Solutions" description: "Structured starting points for building onchain with Turnkey" --- -To help you ship quickly, we've packaged common patterns like wallet provisioning, policy enforcement, and transaction flows into easy integration paths called solutions. Each solution is built on Turnkey's underlying primitives, so you're never locked into a rigid workflow and can always go deeper when you need more flexibility. +To help you build quickly, we've packaged common patterns like wallet provisioning, policy enforcement, and transaction flows into easy integration paths called solutions. Each solution is built on Turnkey's underlying primitives, so you're never locked into a rigid workflow and can always go deeper when you need more flexibility. Whether you're building consumer apps, business tooling, or AI-powered systems, there's a solution designed for your use case. @@ -54,13 +54,3 @@ Enterprise-grade security for your most sensitive keys — hardware-backed with Non-custodial wallet recovery with instant policy enforcement.
- ---- - -## Turnkey Verifiable Cloud - -Run code inside hardware-isolated enclaves with verifiable computation guarantees. - - - Purpose-built for applications where trust and auditability are non-negotiable. - From dd588343c67522c9dbdd895262bdf98813e41362 Mon Sep 17 00:00:00 2001 From: Henry Wilson Date: Tue, 12 May 2026 16:25:25 -0400 Subject: [PATCH 042/117] add server sdk overview --- .../integration-guide/overview.mdx | 69 +++++++++++++++++++ docs.json | 1 + 2 files changed, 70 insertions(+) create mode 100644 company-wallets/integration-guide/overview.mdx diff --git a/company-wallets/integration-guide/overview.mdx b/company-wallets/integration-guide/overview.mdx new file mode 100644 index 00000000..82ab53ba --- /dev/null +++ b/company-wallets/integration-guide/overview.mdx @@ -0,0 +1,69 @@ +--- +title: "Server SDKs" +description: + "Language and framework options for integrating Company Wallets from a backend service." +sidebarTitle: "Overview" +--- + +Company wallet integrations are backend-driven. Your server creates wallets, constructs +transactions, and signs them via the Turnkey API using an API key. This page covers that model, and +choosing the right SDK for your stack. + +## Choose your SDK + + + + Our most complete SDK. Recommended if your backend can run Node.js. + + + Native Go SDK. + + + turnkey_client gem for Ruby and Rails projects. + + + Native Rust SDK. + + + Pydantic type definitions, an HTTP-client for easy direct requests, and API-key stamper. + + + Call the Turnkey REST API directly from any language. + + + +## How server integrations work + +All server integrations follow the same pattern regardless of language: + +1. **Create an API keypair** on the Turnkey dashboard create an API user and save its credentials. +2. **Initialize a client** with your API credentials. The SDK handles request construction and + signing. +3. **Call the API** — create wallets, sign transactions, manage policies — and receive results. For + signing operations, only the signature is returned; private keys never leave the enclave. +4. **Create policies** scoping your API user to only its routinely performed functions. + +This credential model is simpler than embedded wallets: there's no end-user authentication, no +sessions to manage, and no Auth Proxy. Your API private key lives on your server and signs every +request. + +## API users and policies + +API users are native to your organization. You can create multiple API users — one per service or +environment — and scope each with policies that restrict what it can sign. + +For example, a payment sweeper service might be allowed to sign outbound transfers up to a certain +value, while a contract deployer has authority over a specific set of addresses. Turnkey is +deny-by-default: if no policy explicitly allows an action, it is rejected. + +See [Policies](/concepts/policies/overview) for the policy language and +[Policy Quickstart](/concepts/policies/quickstart) to set up your first rules. + +## Organization structure + +Most custodial integrations run within a single parent organization. Your org holds the wallets; +your API users (backend services and human operators) act on them subject to policy. + +If you need tenant isolation — for example, you're building a product that provisions wallets on +behalf of your customers — you can create sub-organizations, one per tenant, each with its own +wallets and policies. See [Sub-Organizations](/concepts/sub-organizations). diff --git a/docs.json b/docs.json index c8d227c1..0a78e425 100644 --- a/docs.json +++ b/docs.json @@ -210,6 +210,7 @@ { "group": "Server SDKs", "pages": [ + "company-wallets/integration-guide/overview", "sdks/javascript-server", "sdks/golang", "sdks/ruby", From 77b8347a6273bf88f9407b67005df2612661d30e Mon Sep 17 00:00:00 2001 From: Graham Ritter Date: Tue, 12 May 2026 17:30:41 -0400 Subject: [PATCH 043/117] new docs structure --- docs.json | 265 +++++++++++++++++++++++++++--------------------------- 1 file changed, 135 insertions(+), 130 deletions(-) diff --git a/docs.json b/docs.json index c8d227c1..e0e6571e 100644 --- a/docs.json +++ b/docs.json @@ -298,173 +298,178 @@ ] }, { - "group": "Authentication", + "group": "Feature Documentation", "pages": [ - "authentication/overview", { - "group": "Auth methods", + "group": "Authentication", "pages": [ - "authentication/email", - "authentication/social-logins", - "authentication/sms", - "authentication/otp-migration-guide", + "authentication/overview", { - "group": "Passkeys", + "group": "Auth methods", "pages": [ - "authentication/passkeys/introduction", - "authentication/passkeys/integration", - "authentication/passkeys/options", - "authentication/passkeys/native", - "authentication/passkeys/discoverable-vs-non-discoverable" + "authentication/email", + "authentication/social-logins", + "authentication/sms", + "authentication/otp-migration-guide", + { + "group": "Passkeys", + "pages": [ + "authentication/passkeys/introduction", + "authentication/passkeys/integration", + "authentication/passkeys/options", + "authentication/passkeys/native", + "authentication/passkeys/discoverable-vs-non-discoverable" + ] + }, + "authentication/backend-setup" ] }, - "authentication/backend-setup" + "reference/auth-proxy", + "authentication/sessions", + { + "group": "Advanced", + "pages": [ + "authentication/proxying-signed-requests" + ] + } ] }, - "reference/auth-proxy", - "authentication/sessions", { - "group": "Advanced", + "group": "Chain support", "pages": [ - "authentication/proxying-signed-requests" + "networks/overview", + { + "group": "Supported networks", + "pages": [ + "networks/ethereum", + { + "group": "Solana (SVM)", + "pages": [ + "networks/solana", + "networks/solana-transaction-construction", + "networks/solana-rent-refunds" + ] + }, + "networks/bitcoin", + "networks/spark", + "networks/hyperliquid", + "networks/cosmos", + "networks/tron", + "networks/sui", + "networks/sei", + "networks/stacks", + "networks/aptos", + "networks/tempo", + "networks/movement", + "networks/iota", + "networks/doge", + "networks/others" + ] + } ] - } - ] - }, - { - "group": "Chain support", - "pages": [ - "networks/overview", + }, + { + "group": "Organizations", + "pages": [ + "concepts/organizations", + "concepts/sub-organizations" + ] + }, { - "group": "Supported networks", + "group": "Policies", "pages": [ - "networks/ethereum", + "concepts/policies/overview", + "concepts/policies/quickstart", + "concepts/policies/language", + "concepts/policies/smart-contract-interfaces", { - "group": "Solana (SVM)", + "group": "Examples", "pages": [ - "networks/solana", - "networks/solana-transaction-construction", - "networks/solana-rent-refunds" + "concepts/policies/examples/access-control", + "company-wallets/co-signing-transactions", + "concepts/policies/examples/signing-control", + "concepts/policies/examples/ethereum", + "concepts/policies/examples/solana", + "concepts/policies/examples/tron", + "concepts/policies/examples/bitcoin", + "concepts/policies/examples/tempo" ] }, - "networks/bitcoin", - "networks/spark", - "networks/hyperliquid", - "networks/cosmos", - "networks/tron", - "networks/sui", - "networks/sei", - "networks/stacks", - "networks/aptos", - "networks/tempo", - "networks/movement", - "networks/iota", - "networks/doge", - "networks/others" + { + "group": "Delegated access", + "pages": [ + "concepts/policies/delegated-access-overview", + "concepts/policies/delegated-access-frontend", + "concepts/policies/delegated-access-backend", + "products/embedded-wallets/features/agentic-wallets" + ] + } ] - } - ] - }, - { - "group": "Organizations", - "pages": [ - "concepts/organizations", - "concepts/sub-organizations" - ] - }, - { - "group": "Policies", - "pages": [ - "concepts/policies/overview", - "concepts/policies/quickstart", - "concepts/policies/language", - "concepts/policies/smart-contract-interfaces", + }, { - "group": "Examples", + "group": "Transaction management", "pages": [ - "concepts/policies/examples/access-control", - "company-wallets/co-signing-transactions", - "concepts/policies/examples/signing-control", - "concepts/policies/examples/ethereum", - "concepts/policies/examples/solana", - "concepts/policies/examples/tron", - "concepts/policies/examples/bitcoin", - "concepts/policies/examples/tempo" + "concepts/transaction-management", + { + "group": "Broadcasting", + "pages": [ + "concepts/broadcasting", + "embedded-wallets/code-examples/sending-sponsored-transactions", + "embedded-wallets/code-examples/sending-sponsored-solana-transactions" + ] + }, + "concepts/balances", + "wallets/fiat-on-ramp", + "transaction-management/yield", + "transaction-management/trading" ] }, { - "group": "Delegated access", + "group": "Turnkey Verifiable Cloud", "pages": [ - "concepts/policies/delegated-access-overview", - "concepts/policies/delegated-access-frontend", - "concepts/policies/delegated-access-backend", - "products/embedded-wallets/features/agentic-wallets" + "products/verifiable-cloud/overview", + "products/verifiable-cloud/onboarding", + "getting-started/verifiable-cloud-quickstart" ] - } - ] - }, - { - "group": "Transaction management", - "pages": [ - "concepts/transaction-management", + }, { - "group": "Broadcasting", + "group": "Users", "pages": [ - "concepts/broadcasting", - "embedded-wallets/code-examples/sending-sponsored-transactions", - "embedded-wallets/code-examples/sending-sponsored-solana-transactions" + "concepts/users/introduction", + "concepts/users/credentials", + "concepts/users/root-quorum", + "concepts/users/best-practices" ] }, - "concepts/balances", - "wallets/fiat-on-ramp", - "transaction-management/yield", - "transaction-management/trading" - ] - }, - { - "group": "Turnkey Verifiable Cloud", - "pages": [ - "products/verifiable-cloud/overview", - "products/verifiable-cloud/onboarding", - "getting-started/verifiable-cloud-quickstart" - ] - }, - { - "group": "Users", - "pages": [ - "concepts/users/introduction", - "concepts/users/credentials", - "concepts/users/root-quorum", - "concepts/users/best-practices" - ] - }, - { - "group": "Wallet and key management", - "pages": [ - "concepts/wallets", { - "group": "Import & export", + "group": "Wallet and key management", "pages": [ - "products/company-wallets/features/import-wallets", - "products/company-wallets/features/export-wallets" + "concepts/wallets", + { + "group": "Import & export", + "pages": [ + "products/company-wallets/features/import-wallets", + "products/company-wallets/features/export-wallets" + ] + }, + "wallets/pregenerated-wallets", + { + "group": "Claim links", + "pages": [ + "wallets/claim-links", + "embedded-wallets/send-crypto-via-url" + ] + }, + "reference/aa-wallets" ] }, - "wallets/pregenerated-wallets", { - "group": "Claim links", + "group": "Other primitives", "pages": [ - "wallets/claim-links", - "embedded-wallets/send-crypto-via-url" + "other-primitives/encryption-decryption", + "other-primitives/tls-fetcher" ] - }, - "reference/aa-wallets" - ] - }, - { - "group": "Other primitives", - "pages": [ - "other-primitives/encryption-decryption", - "other-primitives/tls-fetcher" + } ] }, { From d01706bdd607ed22365c5fe4fc99ee885d315177 Mon Sep 17 00:00:00 2001 From: Henry Wilson Date: Wed, 13 May 2026 18:03:02 -0400 Subject: [PATCH 044/117] more SDKs cleanup --- docs.json | 67 ++++++------------- .../integration-guide/overview.mdx | 9 ++- sdks/typescript-frontend/index.mdx | 11 ++- 3 files changed, 33 insertions(+), 54 deletions(-) diff --git a/docs.json b/docs.json index 40767318..7aaef50b 100644 --- a/docs.json +++ b/docs.json @@ -80,7 +80,7 @@ }, "getting-started/embedded-wallet-quickstart", { - "group": "Integration Guide", + "group": "Integration guide", "pages": [ "embedded-wallets/integration-guide/overview", { @@ -128,6 +128,17 @@ "sdks/react-native/advanced-api-requests" ] }, + { + "group": "TypeScript", + "pages": [ + "sdks/typescript-frontend/index", + "sdks/typescript-frontend/getting-started", + "sdks/typescript-frontend/auth", + "sdks/typescript-frontend/advanced-backend-authentication", + "sdks/typescript-frontend/advanced-api-requests", + "sdks/typescript-frontend/legacy" + ] + }, { "group": "Flutter", "pages": [ @@ -208,7 +219,7 @@ }, "getting-started/company-wallets-quickstart", { - "group": "Server SDKs", + "group": "Integration guide", "pages": [ "company-wallets/integration-guide/overview", "sdks/javascript-server", @@ -770,41 +781,7 @@ "generated-docs/core/turnkey-client-verify-otp" ] }, - { - "group": "Flutter", - "pages": [ - "sdks/flutter/index" - ] - }, - { - "group": "Swift", - "pages": [ - "sdks/swift/overview" - ] - }, - { - "group": "Kotlin", - "pages": [ - "sdks/kotlin/overview" - ] - }, - { - "group": "TypeScript | Frontend", - "pages": [ - "sdks/typescript-frontend/index", - "sdks/typescript-frontend/getting-started", - "sdks/typescript-frontend/auth", - "sdks/typescript-frontend/advanced-backend-authentication", - "sdks/typescript-frontend/advanced-api-requests", - "sdks/typescript-frontend/legacy" - ] - }, - "sdks/javascript-server", - "sdks/golang", - "sdks/rust", - "sdks/ruby", "sdks/cli", - "sdks/python", { "group": "Web3 libraries", "pages": [ @@ -831,8 +808,7 @@ "embedded-wallets/code-examples/client-side-signing", "sdks/advanced/indexed-db-stamper" ] - }, - "sdks/migration-path" + } ] } ] @@ -843,16 +819,11 @@ { "group": "REST API", "pages": [ - { - "group": "Overview", - "pages": [ - "developer-reference/api-overview/intro", - "developer-reference/api-overview/stamps", - "developer-reference/api-overview/queries", - "developer-reference/api-overview/submissions", - "developer-reference/api-overview/errors" - ] - }, + "developer-reference/api-overview/intro", + "developer-reference/api-overview/stamps", + "developer-reference/api-overview/queries", + "developer-reference/api-overview/submissions", + "developer-reference/api-overview/errors", { "group": "Activities", "pages": [ diff --git a/embedded-wallets/integration-guide/overview.mdx b/embedded-wallets/integration-guide/overview.mdx index 18ea7b10..a7d5765d 100644 --- a/embedded-wallets/integration-guide/overview.mdx +++ b/embedded-wallets/integration-guide/overview.mdx @@ -22,6 +22,10 @@ and how much you want pre-built for you. The mobile counterpart to the React wallet kit, optimized for mobile-native flows. + + The underlying TypeScript SDK. Best for Angular, Vue, Svelte, or any web framework where the + React Wallet Kit doesn't apply. + **Dart SDK** — Cross-platform iOS and Android support. @@ -31,9 +35,8 @@ and how much you want pre-built for you. **Kotlin SDK** — Native Android integration. - - For fully custom implementations or non-JS backends, use `@turnkey/core` or call the REST API - directly. + + Call the Turnkey REST API directly from any language. diff --git a/sdks/typescript-frontend/index.mdx b/sdks/typescript-frontend/index.mdx index 27373995..bbb2d2d7 100644 --- a/sdks/typescript-frontend/index.mdx +++ b/sdks/typescript-frontend/index.mdx @@ -1,6 +1,12 @@ --- title: "Overview" -description: "`@turnkey/core` is the core TypeScript client-side SDK for Turnkey's Embedded Wallets. It provides a set of functions and utilities to interact with Turnkey's APIs, a powerful session management system, built-in stampers, and a raw HTTP client for advanced use cases. This SDK is designed to be used as a foundation for building Turnkey's Embedded Wallets in various frontend frameworks, including React, React-native (alpha), Angular, Vue, and Svelte. If you're using React, please consider using the [`@turnkey/react-wallet-kit`](/sdks/react/) for a more tailored experience." +description: + "`@turnkey/core` is the core TypeScript client-side SDK for Turnkey's Embedded Wallets. It + provides a set of functions and utilities to interact with Turnkey's APIs, a powerful session + management system, built-in stampers, and a raw HTTP client for advanced use cases. This SDK is + designed to be used as a foundation for building Turnkey's Embedded Wallets in various frontend + frameworks, including React, React Native, Angular, Vue, and Svelte. If you're using React, please + consider using the [`@turnkey/react-wallet-kit`](/sdks/react/) for a more tailored experience." sidebarTitle: "Overview" --- @@ -22,8 +28,7 @@ sidebarTitle: "Overview" iconType="solid" horizontal > - Learn how to set up log in or sign up using @turnkey/core in your frontend - JavaScript application. + Learn how to set up log in or sign up using @turnkey/core in your frontend JavaScript application. Date: Wed, 13 May 2026 18:09:29 -0400 Subject: [PATCH 045/117] delist cli page (still searchable) --- sdks/cli.mdx | 1 + 1 file changed, 1 insertion(+) diff --git a/sdks/cli.mdx b/sdks/cli.mdx index 0ef0b8da..7179baa2 100644 --- a/sdks/cli.mdx +++ b/sdks/cli.mdx @@ -2,6 +2,7 @@ title: "Using the CLI" description: "This quickstart will guide you through Turnkey’s onboarding, adding an API key, creating a wallet, and signing your first Ethereum transaction." sidebarTitle: "CLI" +hidden: true --- ## Create your Turnkey organization From d4d8a4bfba29d641daf9f174f0b2297e8c65247d Mon Sep 17 00:00:00 2001 From: Henry Wilson Date: Wed, 13 May 2026 22:40:08 -0400 Subject: [PATCH 046/117] hiding CLI page attempt #2 --- docs.json | 1 - 1 file changed, 1 deletion(-) diff --git a/docs.json b/docs.json index 7aaef50b..d6578f92 100644 --- a/docs.json +++ b/docs.json @@ -781,7 +781,6 @@ "generated-docs/core/turnkey-client-verify-otp" ] }, - "sdks/cli", { "group": "Web3 libraries", "pages": [ From b1663246b9bf654487f2eaf7d0cac6a8f4c29b5f Mon Sep 17 00:00:00 2001 From: Henry Wilson Date: Wed, 13 May 2026 22:55:29 -0400 Subject: [PATCH 047/117] combine api & sdk reference tabs again --- docs.json | 285 +++++++++++++++++++++++++++--------------------------- 1 file changed, 140 insertions(+), 145 deletions(-) diff --git a/docs.json b/docs.json index d6578f92..ec068cea 100644 --- a/docs.json +++ b/docs.json @@ -542,8 +542,146 @@ ] }, { - "tab": "SDK reference", - "groups": [ + "tab": "API & SDK reference", + "pages": [ + { + "group": "REST API", + "pages": [ + "developer-reference/api-overview/intro", + "developer-reference/api-overview/stamps", + "developer-reference/api-overview/queries", + "developer-reference/api-overview/submissions", + "developer-reference/api-overview/errors", + { + "group": "Activities", + "pages": [ + "api-reference/activities/approve-activity", + "api-reference/activities/broadcast-evm-transaction", + "api-reference/activities/broadcast-svm-transaction", + "api-reference/activities/create-a-fiat-on-ramp-credential", + "api-reference/activities/create-an-oauth-20-credential", + "api-reference/activities/create-api-keys", + "api-reference/activities/create-authenticators", + "api-reference/activities/create-invitations", + "api-reference/activities/create-oauth-providers", + "api-reference/activities/create-policies", + "api-reference/activities/create-policy", + "api-reference/activities/create-private-key-tag", + "api-reference/activities/create-private-keys", + "api-reference/activities/create-read-only-session", + "api-reference/activities/create-read-write-session", + "api-reference/activities/create-smart-contract-interface", + "api-reference/activities/create-sub-organization", + "api-reference/activities/create-user-tag", + "api-reference/activities/create-users", + "api-reference/activities/create-wallet", + "api-reference/activities/create-wallet-accounts", + "api-reference/activities/create-webhook-endpoint", + "api-reference/activities/delete-a-fiat-on-ramp-credential", + "api-reference/activities/delete-an-oauth-20-credential", + "api-reference/activities/delete-api-keys", + "api-reference/activities/delete-authenticators", + "api-reference/activities/delete-invitation", + "api-reference/activities/delete-oauth-providers", + "api-reference/activities/delete-policies", + "api-reference/activities/delete-policy", + "api-reference/activities/delete-private-key-tags", + "api-reference/activities/delete-private-keys", + "api-reference/activities/delete-smart-contract-interface", + "api-reference/activities/delete-sub-organization", + "api-reference/activities/delete-user-tags", + "api-reference/activities/delete-users", + "api-reference/activities/delete-wallet-accounts", + "api-reference/activities/delete-wallets", + "api-reference/activities/delete-webhook-endpoint", + "api-reference/activities/export-private-key", + "api-reference/activities/export-wallet", + "api-reference/activities/export-wallet-account", + "api-reference/activities/import-private-key", + "api-reference/activities/import-wallet", + "api-reference/activities/init-email-recovery", + "api-reference/activities/init-fiat-on-ramp", + "api-reference/activities/init-generic-otp", + "api-reference/activities/init-import-private-key", + "api-reference/activities/init-import-wallet", + "api-reference/activities/init-otp-auth", + "api-reference/activities/login-with-a-stamp", + "api-reference/activities/login-with-oauth", + "api-reference/activities/login-with-otp", + "api-reference/activities/oauth", + "api-reference/activities/oauth-20-authentication", + "api-reference/activities/otp-auth", + "api-reference/activities/perform-email-auth", + "api-reference/activities/recover-a-user", + "api-reference/activities/reject-activity", + "api-reference/activities/remove-organization-feature", + "api-reference/activities/set-organization-feature", + "api-reference/activities/sign-raw-payload", + "api-reference/activities/sign-raw-payloads", + "api-reference/activities/sign-transaction", + "api-reference/activities/update-a-fiat-on-ramp-credential", + "api-reference/activities/update-an-oauth-20-credential", + "api-reference/activities/update-organization-name", + "api-reference/activities/update-policy", + "api-reference/activities/update-private-key-tag", + "api-reference/activities/update-root-quorum", + "api-reference/activities/update-user", + "api-reference/activities/update-user-tag", + "api-reference/activities/update-users-email", + "api-reference/activities/update-users-name", + "api-reference/activities/update-users-phone-number", + "api-reference/activities/update-wallet", + "api-reference/activities/update-webhook-endpoint", + "api-reference/activities/verify-generic-otp" + ] + }, + { + "group": "Queries", + "pages": [ + "api-reference/queries/get-a-specific-boot-proof", + "api-reference/queries/get-activity", + "api-reference/queries/get-api-key", + "api-reference/queries/get-api-keys", + "api-reference/queries/get-authenticator", + "api-reference/queries/get-authenticators", + "api-reference/queries/get-balances", + "api-reference/queries/get-configs", + "api-reference/queries/get-gas-usage", + "api-reference/queries/get-nonces", + "api-reference/queries/get-oauth-20-credential", + "api-reference/queries/get-oauth-providers", + "api-reference/queries/get-on-ramp-transaction-status", + "api-reference/queries/get-policy", + "api-reference/queries/get-policy-evaluations", + "api-reference/queries/get-private-key", + "api-reference/queries/get-send-transaction-status", + "api-reference/queries/get-smart-contract-interface", + "api-reference/queries/get-sub-organizations", + "api-reference/queries/get-the-latest-boot-proof-for-an-app", + "api-reference/queries/get-tvc-app-status", + "api-reference/queries/get-user", + "api-reference/queries/get-verified-sub-organizations", + "api-reference/queries/get-wallet", + "api-reference/queries/get-wallet-account", + "api-reference/queries/list-activities", + "api-reference/queries/list-app-proofs-for-an-activity", + "api-reference/queries/list-fiat-on-ramp-credentials", + "api-reference/queries/list-oauth-20-credentials", + "api-reference/queries/list-policies", + "api-reference/queries/list-private-key-tags", + "api-reference/queries/list-private-keys", + "api-reference/queries/list-smart-contract-interfaces", + "api-reference/queries/list-supported-assets", + "api-reference/queries/list-user-tags", + "api-reference/queries/list-users", + "api-reference/queries/list-wallets", + "api-reference/queries/list-wallets-accounts", + "api-reference/queries/list-webhook-endpoints", + "api-reference/queries/who-am-i" + ] + } + ] + }, { "group": "SDK reference", "pages": [ @@ -812,149 +950,6 @@ } ] }, - { - "tab": "API reference", - "pages": [ - { - "group": "REST API", - "pages": [ - "developer-reference/api-overview/intro", - "developer-reference/api-overview/stamps", - "developer-reference/api-overview/queries", - "developer-reference/api-overview/submissions", - "developer-reference/api-overview/errors", - { - "group": "Activities", - "pages": [ - "api-reference/activities/approve-activity", - "api-reference/activities/broadcast-evm-transaction", - "api-reference/activities/broadcast-svm-transaction", - "api-reference/activities/create-a-fiat-on-ramp-credential", - "api-reference/activities/create-an-oauth-20-credential", - "api-reference/activities/create-api-keys", - "api-reference/activities/create-authenticators", - "api-reference/activities/create-invitations", - "api-reference/activities/create-oauth-providers", - "api-reference/activities/create-policies", - "api-reference/activities/create-policy", - "api-reference/activities/create-private-key-tag", - "api-reference/activities/create-private-keys", - "api-reference/activities/create-read-only-session", - "api-reference/activities/create-read-write-session", - "api-reference/activities/create-smart-contract-interface", - "api-reference/activities/create-sub-organization", - "api-reference/activities/create-user-tag", - "api-reference/activities/create-users", - "api-reference/activities/create-wallet", - "api-reference/activities/create-wallet-accounts", - "api-reference/activities/create-webhook-endpoint", - "api-reference/activities/delete-a-fiat-on-ramp-credential", - "api-reference/activities/delete-an-oauth-20-credential", - "api-reference/activities/delete-api-keys", - "api-reference/activities/delete-authenticators", - "api-reference/activities/delete-invitation", - "api-reference/activities/delete-oauth-providers", - "api-reference/activities/delete-policies", - "api-reference/activities/delete-policy", - "api-reference/activities/delete-private-key-tags", - "api-reference/activities/delete-private-keys", - "api-reference/activities/delete-smart-contract-interface", - "api-reference/activities/delete-sub-organization", - "api-reference/activities/delete-user-tags", - "api-reference/activities/delete-users", - "api-reference/activities/delete-wallet-accounts", - "api-reference/activities/delete-wallets", - "api-reference/activities/delete-webhook-endpoint", - "api-reference/activities/export-private-key", - "api-reference/activities/export-wallet", - "api-reference/activities/export-wallet-account", - "api-reference/activities/import-private-key", - "api-reference/activities/import-wallet", - "api-reference/activities/init-email-recovery", - "api-reference/activities/init-fiat-on-ramp", - "api-reference/activities/init-generic-otp", - "api-reference/activities/init-import-private-key", - "api-reference/activities/init-import-wallet", - "api-reference/activities/init-otp-auth", - "api-reference/activities/login-with-a-stamp", - "api-reference/activities/login-with-oauth", - "api-reference/activities/login-with-otp", - "api-reference/activities/oauth", - "api-reference/activities/oauth-20-authentication", - "api-reference/activities/otp-auth", - "api-reference/activities/perform-email-auth", - "api-reference/activities/recover-a-user", - "api-reference/activities/reject-activity", - "api-reference/activities/remove-organization-feature", - "api-reference/activities/set-organization-feature", - "api-reference/activities/sign-raw-payload", - "api-reference/activities/sign-raw-payloads", - "api-reference/activities/sign-transaction", - "api-reference/activities/update-a-fiat-on-ramp-credential", - "api-reference/activities/update-an-oauth-20-credential", - "api-reference/activities/update-organization-name", - "api-reference/activities/update-policy", - "api-reference/activities/update-private-key-tag", - "api-reference/activities/update-root-quorum", - "api-reference/activities/update-user", - "api-reference/activities/update-user-tag", - "api-reference/activities/update-users-email", - "api-reference/activities/update-users-name", - "api-reference/activities/update-users-phone-number", - "api-reference/activities/update-wallet", - "api-reference/activities/update-webhook-endpoint", - "api-reference/activities/verify-generic-otp" - ] - }, - { - "group": "Queries", - "pages": [ - "api-reference/queries/get-a-specific-boot-proof", - "api-reference/queries/get-activity", - "api-reference/queries/get-api-key", - "api-reference/queries/get-api-keys", - "api-reference/queries/get-authenticator", - "api-reference/queries/get-authenticators", - "api-reference/queries/get-balances", - "api-reference/queries/get-configs", - "api-reference/queries/get-gas-usage", - "api-reference/queries/get-nonces", - "api-reference/queries/get-oauth-20-credential", - "api-reference/queries/get-oauth-providers", - "api-reference/queries/get-on-ramp-transaction-status", - "api-reference/queries/get-policy", - "api-reference/queries/get-policy-evaluations", - "api-reference/queries/get-private-key", - "api-reference/queries/get-send-transaction-status", - "api-reference/queries/get-smart-contract-interface", - "api-reference/queries/get-sub-organizations", - "api-reference/queries/get-the-latest-boot-proof-for-an-app", - "api-reference/queries/get-tvc-app-status", - "api-reference/queries/get-user", - "api-reference/queries/get-verified-sub-organizations", - "api-reference/queries/get-wallet", - "api-reference/queries/get-wallet-account", - "api-reference/queries/list-activities", - "api-reference/queries/list-app-proofs-for-an-activity", - "api-reference/queries/list-fiat-on-ramp-credentials", - "api-reference/queries/list-oauth-20-credentials", - "api-reference/queries/list-policies", - "api-reference/queries/list-private-key-tags", - "api-reference/queries/list-private-keys", - "api-reference/queries/list-smart-contract-interfaces", - "api-reference/queries/list-supported-assets", - "api-reference/queries/list-user-tags", - "api-reference/queries/list-users", - "api-reference/queries/list-wallets", - "api-reference/queries/list-wallets-accounts", - "api-reference/queries/list-webhook-endpoints", - "api-reference/queries/who-am-i" - ] - } - ] - } - ] - }, { "tab": "Security", "groups": [ From 8661d770a2c576f71515077d9d51dc4b29073d73 Mon Sep 17 00:00:00 2001 From: Henry Wilson Date: Wed, 13 May 2026 23:11:48 -0400 Subject: [PATCH 048/117] cookbook tweaks --- cookbook/landing.mdx | 9 +++++ docs.json | 12 ++----- reference/tron-gasless-transactions.mdx | 48 ++++++++++++++++++------- 3 files changed, 47 insertions(+), 22 deletions(-) diff --git a/cookbook/landing.mdx b/cookbook/landing.mdx index 1374b971..5103867f 100644 --- a/cookbook/landing.mdx +++ b/cookbook/landing.mdx @@ -64,4 +64,13 @@ slug: "cookbook/landing" Onramp USD, mint stablecoins, and send payouts via Brale, using Turnkey's policy engine to secure signing authority. + + Sponsor user gas on Tron leveraging Turnkey's key infrastructure with Tron's resource model. + diff --git a/docs.json b/docs.json index ec068cea..995def4e 100644 --- a/docs.json +++ b/docs.json @@ -258,7 +258,7 @@ ] }, { - "group": "Trading & bridges", + "group": "Swaps & bridges", "pages": [ "cookbook/jupiter", "cookbook/lifi", @@ -267,19 +267,13 @@ ] }, { - "group": "Examples library", + "group": "Payments & infrastructure", "pages": [ "cookbook/polymarket-builders", "cookbook/base-builder-codes", + "cookbook/brale", "reference/tron-gasless-transactions" ] - }, - { - "group": "Integrations", - "pages": [ - "cookbook/gelato", - "cookbook/brale" - ] } ] } diff --git a/reference/tron-gasless-transactions.mdx b/reference/tron-gasless-transactions.mdx index 42b08354..941ea0e6 100644 --- a/reference/tron-gasless-transactions.mdx +++ b/reference/tron-gasless-transactions.mdx @@ -3,13 +3,21 @@ title: "How to integrate gasless transactions on Tron with Turnkey" sidebarTitle: "Gasless Tron Transactions" --- -Turnkey offers flexible infrastructure to create and manage private keys. By combining the secure private key infrastructure and with gas abstracted transactions, developers can easily integrate account abstraction features for any Turnkey-powered wallets. +Turnkey offers flexible infrastructure to create and manage private keys. By combining the secure +private key infrastructure and with gas abstracted transactions, developers can easily integrate +account abstraction features for any Turnkey-powered wallets. ## **Setting up gasless transactions on Tron (TVM)** -Turnkey offers deep and robust support for the [Tron (TVM) ecosystem](https://docs.turnkey.com/networks/tron). We utilize the SECP256K1 elliptic curve as the primitive for signing transactions, and provide address derivation support. Beyond this, Tron developers can also leverage TVM transaction parsing and policies for additional security and transaction granularity, all managed by the Turnkey Policy Engine. +Turnkey offers deep and robust support for the +[Tron (TVM) ecosystem](https://docs.turnkey.com/networks/tron). We utilize the SECP256K1 elliptic +curve as the primitive for signing transactions, and provide address derivation support. Beyond +this, Tron developers can also leverage TVM transaction parsing and policies for additional security +and transaction granularity, all managed by the Turnkey Policy Engine. -Below, we demonstrate how to take advantage of Tron’s existing smart contract functions, combining it with Turnkey’s infrastructure to give end-users a gasless wallet experience, while maintaining the high standard for security, flexibility, and scalability. +Below, we demonstrate how to take advantage of Tron’s existing smart contract functions, combining +it with Turnkey’s infrastructure to give end-users a gasless wallet experience, while maintaining +the high standard for security, flexibility, and scalability. ### **Gasless architecture: setup guide** @@ -17,21 +25,32 @@ Below, we demonstrate how to take advantage of Tron’s existing smart contract - Ensure that your organization’s Turnkey wallet is funded with a sufficient TRX balance > **TIP:** This can be a wallet contained within your parent organization - - Initialize the staking activity by calling the [freezeBalanceV2](https://developers.tron.network/reference/freezebalancev2-1) function - > Refer to Tron Network’s [official documentation](https://developers.tron.network/docs/) for further information + - Initialize the staking activity by calling the + [freezeBalanceV2](https://developers.tron.network/reference/freezebalancev2-1) function + + > Refer to Tron Network’s [official documentation](https://developers.tron.network/docs/) for + > further information + 2. **Delegate the resource to end-user wallets** - - After you’ve initialized the staking operation using freezeBalanceV2 (Step 1) you’re now able to delegate the resources to end-user wallets - - From the staking wallet, make a call to the Tron network using [DelegateResource](https://developers.tron.network/reference/delegateresource-1) function + - After you’ve initialized the staking operation using freezeBalanceV2 (Step 1) you’re now able + to delegate the resources to end-user wallets + - From the staking wallet, make a call to the Tron network using + [DelegateResource](https://developers.tron.network/reference/delegateresource-1) function - `owner_address`: Wallet that is staking TRX (Step 1A) - `receiver_address`: Wallet controlled by the end-user - `resource`: The resource you’re delegating, bandwidth 3. **Transaction flow (end-user)** - - After the staking has been initialized and resources delegated, the user experience is trivial: end-user wallets (receiver_address) can transact via the Tron network without needing to provide gas for their own transactions. + - After the staking has been initialized and resources delegated, the user experience is trivial: + end-user wallets (receiver_address) can transact via the Tron network without needing to + provide gas for their own transactions. ### **Leveraging delegateResource smart contract function** -As shown above, we are leveraging the existing [DelegateResource](https://developers.tron.network/reference/delegateresource-1) call to delegate bandwidth or energy resources to other accounts. Note that this operation requires you to have Tron’s native network token TRX staked in order to fund end-user’s transactions. +As shown above, we are leveraging the existing +[DelegateResource](https://developers.tron.network/reference/delegateresource-1) call to delegate +bandwidth or energy resources to other accounts. Note that this operation requires you to have +Tron’s native network token TRX staked in order to fund end-user’s transactions. ```shellscript { @@ -44,11 +63,14 @@ As shown above, we are leveraging the existing [DelegateResource](https:/ } ``` -> **Remember**: In the context of Tron, `owner_address` will be the Turnkey wallet that holds and stakes TRX. The `receiver_address` will be the end-user wallets. +> **Remember**: In the context of Tron, `owner_address` will be the Turnkey wallet that holds and +> stakes TRX. The `receiver_address` will be the end-user wallets. ### **Thinking about gasless transactions for other chains?** -If you have questions, feedback, or find yourself in need of a gas abstraction or integration that doesn’t exist yet, please get in touch with us! You  can +If you have questions, feedback, or find yourself in need of a gas abstraction or integration that +doesn’t exist yet, please get in touch with us! You  can -- Join our slack community [here](https://join.slack.com/t/clubturnkey/shared_invite/zt-3aemp2g38-zIh4V~3vNpbX5PsSmkKxcQ) -- Contact us at [hello@turnkey.com](mailto:hello@turnkey.com) +- Join our slack community + [here](https://join.slack.com/t/clubturnkey/shared_invite/zt-3aemp2g38-zIh4V~3vNpbX5PsSmkKxcQ) +- Contact us at [hello@turnkey.com](mailto:hello@turnkey.com) From e9f3864ac36534c34d2a5bd17dd133bdba90b40b Mon Sep 17 00:00:00 2001 From: Henry Wilson Date: Wed, 13 May 2026 23:24:58 -0400 Subject: [PATCH 049/117] move anchor to navbar - maybe controversial --- docs.json | 37 +++++++++++++------------------------ 1 file changed, 13 insertions(+), 24 deletions(-) diff --git a/docs.json b/docs.json index 995def4e..c84fe55b 100644 --- a/docs.json +++ b/docs.json @@ -25,25 +25,7 @@ }, "favicon": "/favicon.svg", "navigation": { - "global": { - "anchors": [ - { - "anchor": "Support", - "icon": "slack", - "href": "https://join.slack.com/t/clubturnkey/shared_invite/zt-3aemp2g38-zIh4V~3vNpbX5PsSmkKxcQ" - }, - { - "anchor": "Blog", - "icon": "newspaper", - "href": "https://www.turnkey.com/blog" - }, - { - "anchor": "Contact us", - "icon": "headset", - "href": "https://www.turnkey.com/contact-us" - } - ] - }, + "global": {}, "tabs": [ { "tab": "Home", @@ -245,7 +227,7 @@ ] }, { - "group": "Cookbook", + "group": "Cookbooks", "pages": [ "cookbook/landing", { @@ -990,12 +972,19 @@ "navbar": { "links": [ { - "label": "Demo", - "href": "https://wallets.turnkey.com/" + "label": "Support", + "href": "https://join.slack.com/t/clubturnkey/shared_invite/zt-3aemp2g38-zIh4V~3vNpbX5PsSmkKxcQ", + "icon": "slack" + }, + { + "label": "Blog", + "href": "https://www.turnkey.com/blog", + "icon": "newspaper" }, { - "label": "Login", - "href": "https://app.turnkey.com/dashboard/auth/login?step=1" + "label": "Contact us", + "href": "https://www.turnkey.com/contact-us", + "icon": "headset" } ], "primary": { From 6700bb641d4eab49c9912671a45b00c780d1c6b2 Mon Sep 17 00:00:00 2001 From: Henry Wilson Date: Wed, 13 May 2026 23:26:59 -0400 Subject: [PATCH 050/117] remove icons from navbar --- docs.json | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/docs.json b/docs.json index c84fe55b..20413706 100644 --- a/docs.json +++ b/docs.json @@ -973,18 +973,15 @@ "links": [ { "label": "Support", - "href": "https://join.slack.com/t/clubturnkey/shared_invite/zt-3aemp2g38-zIh4V~3vNpbX5PsSmkKxcQ", - "icon": "slack" + "href": "https://join.slack.com/t/clubturnkey/shared_invite/zt-3aemp2g38-zIh4V~3vNpbX5PsSmkKxcQ" }, { "label": "Blog", - "href": "https://www.turnkey.com/blog", - "icon": "newspaper" + "href": "https://www.turnkey.com/blog" }, { "label": "Contact us", - "href": "https://www.turnkey.com/contact-us", - "icon": "headset" + "href": "https://www.turnkey.com/contact-us" } ], "primary": { From 143b34c9faec9d0f3158ba8b0e88df0920f83c78 Mon Sep 17 00:00:00 2001 From: Henry Wilson Date: Wed, 13 May 2026 23:34:18 -0400 Subject: [PATCH 051/117] add missing cards --- category/advanced.mdx | 3 +++ category/code-examples-1.mdx | 3 --- category/security.mdx | 30 ++++++++++++++++++++++++++++++ category/web3-libraries.mdx | 6 ++++++ 4 files changed, 39 insertions(+), 3 deletions(-) diff --git a/category/advanced.mdx b/category/advanced.mdx index 45fba0b5..de697b7c 100644 --- a/category/advanced.mdx +++ b/category/advanced.mdx @@ -24,4 +24,7 @@ sidebarTitle: "Overview" Guide on using the IndexedDbStamper + + Sign transactions and messages in the browser using the iframe stamper, without exposing private keys to your app. + diff --git a/category/code-examples-1.mdx b/category/code-examples-1.mdx index 0730b735..ded9250a 100644 --- a/category/code-examples-1.mdx +++ b/category/code-examples-1.mdx @@ -5,9 +5,6 @@ mode: wide --- - - Signing transactions - Smart contract management diff --git a/category/security.mdx b/category/security.mdx index fe302332..20ebd37f 100644 --- a/category/security.mdx +++ b/category/security.mdx @@ -103,4 +103,34 @@ holistic security model in-depth, and speaks to our vision for building verifiab Overview of Turnkey's responsible disclosure program
+ + Which security responsibilities are Turnkey's and which are yours as an integrator. + + + + How Turnkey enclaves cryptographically prove their identity and integrity to a remote verifier. + + + + Cryptographic verification that only authorized code is running in Turnkey's secure enclaves. + + diff --git a/category/web3-libraries.mdx b/category/web3-libraries.mdx index 554085c5..4c8110fd 100644 --- a/category/web3-libraries.mdx +++ b/category/web3-libraries.mdx @@ -25,4 +25,10 @@ sidebarTitle: "Overview" Solana Web3 wrapper + + SDK for implementing gasless transactions using EIP-7702 and your own paymaster. + + + Deploy smart contracts from Turnkey wallets using Foundry's native Turnkey support. + From 59170bae092027ba6d9db2d49c1a23df44c90aa4 Mon Sep 17 00:00:00 2001 From: Henry Wilson Date: Thu, 14 May 2026 11:19:02 -0400 Subject: [PATCH 052/117] move changelogs --- docs.json | 88 +++++++++++++++++++++++++++---------------------------- 1 file changed, 44 insertions(+), 44 deletions(-) diff --git a/docs.json b/docs.json index 20413706..479448e2 100644 --- a/docs.json +++ b/docs.json @@ -470,50 +470,6 @@ "getting-started/migration-guide", "faq" ] - }, - { - "group": "Changelogs", - "pages": [ - { - "group": "SDK changelogs", - "pages": [ - "changelogs/api-key-stamper/readme", - "changelogs/cosmjs/readme", - "changelogs/crypto/readme", - "changelogs/eip-1193-provider/readme", - "changelogs/encoding/readme", - "changelogs/ethers/readme", - "changelogs/http/readme", - "changelogs/iframe-stamper/readme", - "changelogs/react-native-passkey-stamper/readme", - "changelogs/sdk-browser/readme", - "changelogs/sdk-react/readme", - "changelogs/sdk-react-native/readme", - "changelogs/sdk-server/readme", - "changelogs/solana/readme", - "changelogs/telegram-cloud-storage-stamper/readme", - "changelogs/viem/readme", - "changelogs/wallet-stamper/readme", - "changelogs/webauthn-stamper/readme", - "changelogs/golang/readme", - "changelogs/dart/readme", - "changelogs/core/readme", - "changelogs/react-wallet-kit/readme" - ] - }, - { - "group": "API changelog", - "pages": [ - "changelogs/api-changelog/readme" - ] - }, - { - "group": "TVC changelog", - "pages": [ - "changelogs/tvc-changelog/readme" - ] - } - ] } ] }, @@ -923,6 +879,50 @@ ] } ] + }, + { + "group": "Changelogs", + "pages": [ + { + "group": "SDK changelogs", + "pages": [ + "changelogs/api-key-stamper/readme", + "changelogs/cosmjs/readme", + "changelogs/crypto/readme", + "changelogs/eip-1193-provider/readme", + "changelogs/encoding/readme", + "changelogs/ethers/readme", + "changelogs/http/readme", + "changelogs/iframe-stamper/readme", + "changelogs/react-native-passkey-stamper/readme", + "changelogs/sdk-browser/readme", + "changelogs/sdk-react/readme", + "changelogs/sdk-react-native/readme", + "changelogs/sdk-server/readme", + "changelogs/solana/readme", + "changelogs/telegram-cloud-storage-stamper/readme", + "changelogs/viem/readme", + "changelogs/wallet-stamper/readme", + "changelogs/webauthn-stamper/readme", + "changelogs/golang/readme", + "changelogs/dart/readme", + "changelogs/core/readme", + "changelogs/react-wallet-kit/readme" + ] + }, + { + "group": "API changelog", + "pages": [ + "changelogs/api-changelog/readme" + ] + }, + { + "group": "TVC changelog", + "pages": [ + "changelogs/tvc-changelog/readme" + ] + } + ] } ] }, From c5bb461691af232de684ce9cdbc0f329ba467689 Mon Sep 17 00:00:00 2001 From: Lucy Aziz Date: Thu, 14 May 2026 11:31:25 -0400 Subject: [PATCH 053/117] update primary color to #4C48FF --- docs.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs.json b/docs.json index 20413706..8a37cf5c 100644 --- a/docs.json +++ b/docs.json @@ -3,8 +3,8 @@ "theme": "mint", "name": "Turnkey", "colors": { - "primary": "#6a5bf5", - "light": "#6a5bf5", + "primary": "#4C48FF", + "light": "#4C48FF", "dark": "#050a0b" }, "contextual": { From 6b7885ebb23538a7aca41b0c8bf1e724ccfe389c Mon Sep 17 00:00:00 2001 From: Graham Ritter Date: Thu, 14 May 2026 11:35:27 -0400 Subject: [PATCH 054/117] added back arch diagram to embedded business wallets --- products/embedded-business-wallets/overview.mdx | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/products/embedded-business-wallets/overview.mdx b/products/embedded-business-wallets/overview.mdx index 7e0891b5..bc967124 100644 --- a/products/embedded-business-wallets/overview.mdx +++ b/products/embedded-business-wallets/overview.mdx @@ -5,6 +5,11 @@ description: "Shared wallets with role-based signing controls for teams, operato With Turnkey, your application can provision wallets designed for team usage. Multiple end users operate within a single sub-organization with role-based access control governed by the policy engine. No seed phrases, no browser extensions. + + ![Embedded Business Wallets architecture: sub-organizations with users, roles, policies, and + wallets per business](/images/embedded-wallets/embedded-business-wallets-diagram.png) + + ## Powered by Turnkey - [**Mural Pay**](https://www.turnkey.com/customers/mural-pay-cross-border-payments) -- cross-border stablecoin payments platform processing 5,000+ monthly transactions for global businesses, fintechs, and banks From 1a0aa68f66c1f256b4fabe71084da2bb1b111976 Mon Sep 17 00:00:00 2001 From: Graham Ritter Date: Thu, 14 May 2026 12:17:51 -0400 Subject: [PATCH 055/117] add custom solution icons with dark/light mode and agentic wallets card Replace Font Awesome icons on solutions overview with custom SVGs supporting dark/light theme switching. Add reusable SolutionCard snippet component and new Agentic Wallets card under Company Wallets. Co-Authored-By: Claude Opus 4.6 --- images/solutions/dark/agentic-wallets.svg | 9 ++ .../dark/embedded-business-wallets.svg | 8 ++ .../dark/embedded-consumer-wallets.svg | 9 ++ .../dark/embedded-wallet-as-a-service.svg | 7 ++ .../solutions/dark/encryption-key-storage.svg | 12 +++ .../dark/enterprise-disaster-recovery.svg | 7 ++ .../solutions/dark/payment-orchestration.svg | 10 +++ .../dark/smart-contract-management.svg | 17 ++++ images/solutions/dark/tvc.svg | 12 +++ images/solutions/light/agentic-wallets.svg | 9 ++ .../light/embedded-business-wallets.svg | 8 ++ .../light/embedded-consumer-wallets.svg | 16 ++++ .../light/embedded-wallet-as-a-service.svg | 7 ++ .../light/encryption-key-storage.svg | 12 +++ .../light/enterprise-disaster-recovery.svg | 7 ++ .../solutions/light/payment-orchestration.svg | 10 +++ .../light/smart-contract-management.svg | 17 ++++ images/solutions/light/tvc.svg | 12 +++ snippets/solution-card.mdx | 31 +++++++ solutions/overview.mdx | 83 +++++++++++++------ 20 files changed, 276 insertions(+), 27 deletions(-) create mode 100644 images/solutions/dark/agentic-wallets.svg create mode 100644 images/solutions/dark/embedded-business-wallets.svg create mode 100644 images/solutions/dark/embedded-consumer-wallets.svg create mode 100644 images/solutions/dark/embedded-wallet-as-a-service.svg create mode 100644 images/solutions/dark/encryption-key-storage.svg create mode 100644 images/solutions/dark/enterprise-disaster-recovery.svg create mode 100644 images/solutions/dark/payment-orchestration.svg create mode 100644 images/solutions/dark/smart-contract-management.svg create mode 100644 images/solutions/dark/tvc.svg create mode 100644 images/solutions/light/agentic-wallets.svg create mode 100644 images/solutions/light/embedded-business-wallets.svg create mode 100644 images/solutions/light/embedded-consumer-wallets.svg create mode 100644 images/solutions/light/embedded-wallet-as-a-service.svg create mode 100644 images/solutions/light/encryption-key-storage.svg create mode 100644 images/solutions/light/enterprise-disaster-recovery.svg create mode 100644 images/solutions/light/payment-orchestration.svg create mode 100644 images/solutions/light/smart-contract-management.svg create mode 100644 images/solutions/light/tvc.svg create mode 100644 snippets/solution-card.mdx diff --git a/images/solutions/dark/agentic-wallets.svg b/images/solutions/dark/agentic-wallets.svg new file mode 100644 index 00000000..f77de399 --- /dev/null +++ b/images/solutions/dark/agentic-wallets.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/images/solutions/dark/embedded-business-wallets.svg b/images/solutions/dark/embedded-business-wallets.svg new file mode 100644 index 00000000..0a88e01b --- /dev/null +++ b/images/solutions/dark/embedded-business-wallets.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/images/solutions/dark/embedded-consumer-wallets.svg b/images/solutions/dark/embedded-consumer-wallets.svg new file mode 100644 index 00000000..417c3cf2 --- /dev/null +++ b/images/solutions/dark/embedded-consumer-wallets.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/images/solutions/dark/embedded-wallet-as-a-service.svg b/images/solutions/dark/embedded-wallet-as-a-service.svg new file mode 100644 index 00000000..63ad1d94 --- /dev/null +++ b/images/solutions/dark/embedded-wallet-as-a-service.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/images/solutions/dark/encryption-key-storage.svg b/images/solutions/dark/encryption-key-storage.svg new file mode 100644 index 00000000..d5708a35 --- /dev/null +++ b/images/solutions/dark/encryption-key-storage.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/images/solutions/dark/enterprise-disaster-recovery.svg b/images/solutions/dark/enterprise-disaster-recovery.svg new file mode 100644 index 00000000..43cfd4f6 --- /dev/null +++ b/images/solutions/dark/enterprise-disaster-recovery.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/images/solutions/dark/payment-orchestration.svg b/images/solutions/dark/payment-orchestration.svg new file mode 100644 index 00000000..c443810d --- /dev/null +++ b/images/solutions/dark/payment-orchestration.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/images/solutions/dark/smart-contract-management.svg b/images/solutions/dark/smart-contract-management.svg new file mode 100644 index 00000000..ce85e2e2 --- /dev/null +++ b/images/solutions/dark/smart-contract-management.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/images/solutions/dark/tvc.svg b/images/solutions/dark/tvc.svg new file mode 100644 index 00000000..08d2b020 --- /dev/null +++ b/images/solutions/dark/tvc.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/images/solutions/light/agentic-wallets.svg b/images/solutions/light/agentic-wallets.svg new file mode 100644 index 00000000..465060f6 --- /dev/null +++ b/images/solutions/light/agentic-wallets.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/images/solutions/light/embedded-business-wallets.svg b/images/solutions/light/embedded-business-wallets.svg new file mode 100644 index 00000000..647ef54e --- /dev/null +++ b/images/solutions/light/embedded-business-wallets.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/images/solutions/light/embedded-consumer-wallets.svg b/images/solutions/light/embedded-consumer-wallets.svg new file mode 100644 index 00000000..1a85be8d --- /dev/null +++ b/images/solutions/light/embedded-consumer-wallets.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/images/solutions/light/embedded-wallet-as-a-service.svg b/images/solutions/light/embedded-wallet-as-a-service.svg new file mode 100644 index 00000000..016a035f --- /dev/null +++ b/images/solutions/light/embedded-wallet-as-a-service.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/images/solutions/light/encryption-key-storage.svg b/images/solutions/light/encryption-key-storage.svg new file mode 100644 index 00000000..61773682 --- /dev/null +++ b/images/solutions/light/encryption-key-storage.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/images/solutions/light/enterprise-disaster-recovery.svg b/images/solutions/light/enterprise-disaster-recovery.svg new file mode 100644 index 00000000..45d1e082 --- /dev/null +++ b/images/solutions/light/enterprise-disaster-recovery.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/images/solutions/light/payment-orchestration.svg b/images/solutions/light/payment-orchestration.svg new file mode 100644 index 00000000..2815fdf2 --- /dev/null +++ b/images/solutions/light/payment-orchestration.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/images/solutions/light/smart-contract-management.svg b/images/solutions/light/smart-contract-management.svg new file mode 100644 index 00000000..415817f5 --- /dev/null +++ b/images/solutions/light/smart-contract-management.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/images/solutions/light/tvc.svg b/images/solutions/light/tvc.svg new file mode 100644 index 00000000..d8716e1f --- /dev/null +++ b/images/solutions/light/tvc.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/snippets/solution-card.mdx b/snippets/solution-card.mdx new file mode 100644 index 00000000..3c56dc8f --- /dev/null +++ b/snippets/solution-card.mdx @@ -0,0 +1,31 @@ +export const SolutionCard = ({ title, description, icon, href }) => { + return ( + +
+
+ + +
+
+
+ {title} +
+
+ {description} +
+
+
+
+ ); +}; diff --git a/solutions/overview.mdx b/solutions/overview.mdx index 0b02967d..2171193c 100644 --- a/solutions/overview.mdx +++ b/solutions/overview.mdx @@ -3,6 +3,8 @@ title: "Introducing Solutions" description: "Structured starting points for building onchain with Turnkey" --- +import { SolutionCard } from '/snippets/solution-card.mdx'; + To help you build quickly, we've packaged common patterns like wallet provisioning, policy enforcement, and transaction flows into easy integration paths called solutions. Each solution is built on Turnkey's underlying primitives, so you're never locked into a rigid workflow and can always go deeper when you need more flexibility. Whether you're building consumer apps, business tooling, or AI-powered systems, there's a solution designed for your use case. @@ -13,17 +15,26 @@ Whether you're building consumer apps, business tooling, or AI-powered systems, Wallet experiences built directly into your product. Users authenticate with email, passkeys, or social login — you control the UX. - - - Non-custodial wallets with plug-and-play UI for consumer onboarding. - - - Multi-user access with policy controls and automated payment flows. - - - White-labeled wallets with isolated user environments for your own wallet product. - - +
+ + + +
--- @@ -31,14 +42,26 @@ Wallet experiences built directly into your product. Users authenticate with ema Wallets your organization operates for onchain automation — high-volume signing with programmable controls. - - - Automated stablecoin movement flows at scale. - - - Production infrastructure for governing smart contract execution. - - +
+ + + +
--- @@ -46,11 +69,17 @@ Wallets your organization operates for onchain automation — high-volume signin Enterprise-grade security for your most sensitive keys — hardware-backed with programmable access controls. - - - Secure key generation and policy-controlled access for encrypted data. - - - Non-custodial wallet recovery with instant policy enforcement. - - +
+ + +
From 414d6a0aa682ff35b506b26b4b0ce368cfe9b92d Mon Sep 17 00:00:00 2001 From: Graham Ritter Date: Thu, 14 May 2026 13:15:45 -0400 Subject: [PATCH 056/117] add architecture header to embedded business wallets and tx management reference to agentic wallets Co-Authored-By: Claude Opus 4.6 --- company-wallets/use-cases/agentic-wallets.mdx | 1 + products/embedded-business-wallets/overview.mdx | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/company-wallets/use-cases/agentic-wallets.mdx b/company-wallets/use-cases/agentic-wallets.mdx index 368a9fc5..2c12de54 100644 --- a/company-wallets/use-cases/agentic-wallets.mdx +++ b/company-wallets/use-cases/agentic-wallets.mdx @@ -31,6 +31,7 @@ These personas can be composed for multi-agent systems. For example, a worker ag | Function restrictions | For smart contract interactions, restrict to specific function selectors or [upload the ABI](/concepts/policies/smart-contract-interfaces) for argument-level control | | Consensus requirements | For high-value actions, require both the agent and a human (or another agent) to approve before the enclave signs | | Key management | Store agent API keys in a secrets manager. Plan for rotation without downtime. Use short-lived keys where viable. | +| Transaction management | Enterprise customers can use Turnkey's [transaction management](/concepts/transaction-management) to offload gas sponsorship, nonce management, and broadcasting — so agents only need to handle signing logic. | ## Example: autonomous trading agent diff --git a/products/embedded-business-wallets/overview.mdx b/products/embedded-business-wallets/overview.mdx index bc967124..a47a619f 100644 --- a/products/embedded-business-wallets/overview.mdx +++ b/products/embedded-business-wallets/overview.mdx @@ -5,6 +5,10 @@ description: "Shared wallets with role-based signing controls for teams, operato With Turnkey, your application can provision wallets designed for team usage. Multiple end users operate within a single sub-organization with role-based access control governed by the policy engine. No seed phrases, no browser extensions. +## Architecture at a glance + +Your parent organization sits at the top with read-only visibility. Each business customer gets its own sub-organization — fully isolated, with independent wallets, team members, and policy configurations. + ![Embedded Business Wallets architecture: sub-organizations with users, roles, policies, and wallets per business](/images/embedded-wallets/embedded-business-wallets-diagram.png) From 0443896a00ee71791bf2b7d0d54752b6c07e42d0 Mon Sep 17 00:00:00 2001 From: Lucy Aziz Date: Thu, 14 May 2026 11:31:25 -0400 Subject: [PATCH 057/117] update primary color to #4C48FF --- docs.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs.json b/docs.json index 479448e2..0b871068 100644 --- a/docs.json +++ b/docs.json @@ -3,8 +3,8 @@ "theme": "mint", "name": "Turnkey", "colors": { - "primary": "#6a5bf5", - "light": "#6a5bf5", + "primary": "#4C48FF", + "light": "#4C48FF", "dark": "#050a0b" }, "contextual": { From 51fffda615d423ef76d766f2760f117a65f4dca9 Mon Sep 17 00:00:00 2001 From: Lucy Aziz Date: Thu, 14 May 2026 11:51:39 -0400 Subject: [PATCH 058/117] Homepage v2.2 redesign: full welcome page rewrite MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Complete welcome.mdx rewrite with hero, cube+selector interaction, solution cards, 3-column features list, and whitepaper CTA - styles.css: all homepage layout, light/dark mode, hover interactions, CSS :has() cube↔selector cross-element hover, ABC Favorit font - 33 image/SVG assets: hero, grid, cube planes, solution thumbnails, use-case icons (light+dark), whitepaper thumb - ABC Favorit Bold font files (woff2/woff) - Primary color updated to #4C48FF throughout Co-Authored-By: Claude Sonnet 4.6 --- fonts/ABCFavorit-Bold.woff | Bin 0 -> 64396 bytes fonts/ABCFavorit-Bold.woff2 | Bin 0 -> 34968 bytes images/grid-dark.svg | 14 + images/grid-light.svg | 14 + images/hero-dark.svg | 66 ++ images/hero-light.svg | 66 ++ images/plane-a-dark.svg | 6 + images/plane-a-light.svg | 6 + images/plane-b-dark.svg | 6 + images/plane-b-light.svg | 6 + images/plane-c-dark.svg | 6 + images/plane-c-light.svg | 6 + images/solution-company-wallets.png | Bin 0 -> 65899 bytes images/solution-embedded-wallets.png | Bin 0 -> 64906 bytes images/solution-key-management.png | Bin 0 -> 63105 bytes images/solution-verifiable-cloud.png | Bin 0 -> 62284 bytes images/uc-agentic-wallets-dark.svg | 9 + images/uc-agentic-wallets-light.svg | 9 + images/uc-embedded-business-wallets-dark.svg | 8 + images/uc-embedded-business-wallets-light.svg | 8 + images/uc-embedded-consumer-wallets-dark.svg | 9 + images/uc-embedded-consumer-wallets-light.svg | 16 + images/uc-embedded-waas-dark.svg | 7 + images/uc-embedded-waas-light.svg | 7 + images/uc-encryption-key-storage-dark.svg | 12 + images/uc-encryption-key-storage-light.svg | 12 + .../uc-enterprise-disaster-recovery-dark.svg | 7 + .../uc-enterprise-disaster-recovery-light.svg | 7 + images/uc-payment-orchestration-dark.svg | 10 + images/uc-payment-orchestration-light.svg | 10 + images/uc-smart-contract-management-dark.svg | 17 + images/uc-smart-contract-management-light.svg | 17 + images/uc-tvc-dark.svg | 12 + images/uc-tvc-light.svg | 12 + images/whitepaper.png | Bin 0 -> 40724 bytes styles.css | 677 +++++++++++++++++- welcome.mdx | 496 +++++++++---- 37 files changed, 1411 insertions(+), 147 deletions(-) create mode 100644 fonts/ABCFavorit-Bold.woff create mode 100644 fonts/ABCFavorit-Bold.woff2 create mode 100644 images/grid-dark.svg create mode 100644 images/grid-light.svg create mode 100644 images/hero-dark.svg create mode 100644 images/hero-light.svg create mode 100644 images/plane-a-dark.svg create mode 100644 images/plane-a-light.svg create mode 100644 images/plane-b-dark.svg create mode 100644 images/plane-b-light.svg create mode 100644 images/plane-c-dark.svg create mode 100644 images/plane-c-light.svg create mode 100644 images/solution-company-wallets.png create mode 100644 images/solution-embedded-wallets.png create mode 100644 images/solution-key-management.png create mode 100644 images/solution-verifiable-cloud.png create mode 100644 images/uc-agentic-wallets-dark.svg create mode 100644 images/uc-agentic-wallets-light.svg create mode 100644 images/uc-embedded-business-wallets-dark.svg create mode 100644 images/uc-embedded-business-wallets-light.svg create mode 100644 images/uc-embedded-consumer-wallets-dark.svg create mode 100644 images/uc-embedded-consumer-wallets-light.svg create mode 100644 images/uc-embedded-waas-dark.svg create mode 100644 images/uc-embedded-waas-light.svg create mode 100644 images/uc-encryption-key-storage-dark.svg create mode 100644 images/uc-encryption-key-storage-light.svg create mode 100644 images/uc-enterprise-disaster-recovery-dark.svg create mode 100644 images/uc-enterprise-disaster-recovery-light.svg create mode 100644 images/uc-payment-orchestration-dark.svg create mode 100644 images/uc-payment-orchestration-light.svg create mode 100644 images/uc-smart-contract-management-dark.svg create mode 100644 images/uc-smart-contract-management-light.svg create mode 100644 images/uc-tvc-dark.svg create mode 100644 images/uc-tvc-light.svg create mode 100644 images/whitepaper.png diff --git a/fonts/ABCFavorit-Bold.woff b/fonts/ABCFavorit-Bold.woff new file mode 100644 index 0000000000000000000000000000000000000000..3c0c2a95a7670fa666951a643da457c4100d011f GIT binary patch literal 64396 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

8sS+|NB~$zZ$#^ zTaV>XrdYg3ievh!M%KKVJB?_mZlE)v{^%zS2HvZd!LH_H1m$gdNC58Tq{nQ_@j%V#fZGhcBWk!2J1d z%h)87Gs1i$M6vqClNt!T2DJ$KUS6Zq?vY($Ha&Gavn9zwSebP3!l_DDaSu@m#ByxC z%N2u5m+)F}QzvyVt^p7J_#S>O_4B^g0{kh%;S)p8fPNdjY%(A1hT+T^75O07{t z*hYimQB%~8ZHCVc$Y96zLYMTgHLJO2GVMX%`g%R1;J!BQm3389-Fk9yaD96Hxt(~z z`{qQf=Lv97jX?tv3auEKo9DhtlXjN#^l{J;o zYX`LXFlOqp!{-nC>9*={xv*!xBP@_ji~%D*p#QnGD-!XEQ*L%$q2)JJA}_|SIhtr!W3 z@si&xCi^^&0;->FEw+wkcGfiT@6*oTfnNV=oR+e#G>x^iU#?LNLw1wK%1UGp$d9BLl-?0D92;=5fiW2qK7aZ zv5RYkETAai`0JTQqVI8?YBKo6j8jKfCq501F3vH1irg*1!4S-q4ZW+$sZF5`Tttw+ zO(BBw!+d3KM@QZ!97^5>XLr30kTz|u9^%*JvgJnw5}$1_KVLd7ONO3Gih@Ulp8RHD z(MCV3sl_)$V&Y_H*HxYov{UM6L9nCWP;b^SZqivu?o^Q`mO_mt51I%Rv#{&CzRF#- z&dtGiu4rq>QlT9@Re6Bi~DPop&auBc#aSXy6RiWT!Skyz)JL?bMlb ziQ#EM4C0oJjOh`(@w~;TD|Wmby#}32hr|Yp()a4D8Z`eB0bM8;O{DIz8Zs!Zb)YrB z^Kfc3YE6T^?6`A|fGWI`b|p~afzcXV>YQqU&=quuMh#Zb4+_rC((3BK+|OQy)vXSK z@QWLeTh`JdK}XqCGCn(`UB-dPhWcH57t6@hh92&_fKj0w9P1nS6>0;?lh99QNxr3azUaQg!VULKKq6-8i%1| ztrT5BwO~O*LsC4Vzez>x4tv$g_oHozP8!9uDqkFgfO~8_(J8@3e_2fJrt*UnvY6{;?I+cLa;X0-qE7F!7$bGZddiHp3dc{H-|)t89=a`V>Zx8{EQ$HP_#C#sp4-sf5Lf;PS!LJX?MXNxrgv{t_U;meCiH8SAfra< zq*chH4yuY5j+f?|{4?5R(uYmV6ueLNh~38&;YmdaQC3=0T2u8mBt;E?XjwVw0hpOc z&0|ASocmyk%C&`gY_0V7u2O=0_p-d=&nmjvRU~ruTs~S{^y4FCS2X)z z!4<0!<%llN{lrZY+ps@?Uxun1EVatNFPu)D1Tkj1B&c{a@EXomkCb}^_G+#o$YjoM z3qXRNPvZ2QM+EV`-fwt8l$kV~9n1o7@$Ul-oS3LmMR`g;VtG*$AUE&3G^OU@?HoND z!p*PsYiX|)B#RV4br#co#lZs2)EP1%Blm;9J$V8jDTNh0J}wfBh@5GOj{<4E^tF44 zRv}Ur)~AYq1ua4Jp@;b@SO%6e=s{bUr!P4f(B?-hSu(+*9if6?!JB86Z2gvC5TZC0 zbOkywXOoZAOLw7jEAWFZWJ4ezt|gaOLmif}skU=Zh-lDZRKs0@D58Z=^-fr@5bo}3 z(M)A%VjG|G-ac~1<>K7^Za>;ii!QJPZ*M=JisIpkIzFjLVS5>GUw;?$pC+||{7R$Zdw)=gZ8dovFF+3t;@2Gz_Bg^b*p?-+TZEtl3B!o``lK_@s??{2vvVa*uFCS>UA zK?PTukcfEouy>XIeN;>7F7RLy_?5`XmGCPBR6ILj5jZ+J?g+7~>l~$2K0P0`%_P{~ zt?$^HH}!nhc57nd`Iem@*fzLq?!VwJe<2MVNEvhDjj^3(yy5w;cJcs!GBLGI;EV)g zR|YfqEDV`(K65Ys6u*2uvs*wq8<%Fk#!r}9dMca0q1J`0uJ*3zd=d(KX=Bk}pWA4i zY3b^HYEmBF>2|eX4!+*_+~29_Z4eKBZ-1>XXob8S3tHiTn^nOMQ+_E%e%TxqQNWNq zu(@0Q`*`5W_cq+y=vaa!HJ{@~{5sE>J8=HJFvUjnH$i}7?}Iu3yI9V1jk9;p=id#Y z4dn5TC$D07rc4t91w@<(87A`m-$=zwq3i&YZ-aVB&@k*3oi9U~ z)L)pKyw;o>{oJwi7xiFom^u?M#~$$!$7i2^TsiDp(d`F==-(`N0XNQ@eTVdSj;tnr zA8EIpv!?O)E^|B_1h%b5LJ4f7H?|D!->_$rNv@HoeMudwZg7l)=$!Z)5L9=W3?BB} zP=jn?Bhb5~$gMvch)!oGw~c-W8gnyjv5f|x^=qtFSD&CwTVM*ly#5(&;0jwq%LTC; z*`tFza7-yZTk>qi2;)`>fR8)&NsReK4k*N96H4yp>O;)@(_r%JtHfdJj&uE!)Qfc5 z;sq@wAPa%GB8NV}U$_z08&CQ=_NtQkce5gcx&9$A>8M*=zlfH2qve5pMg=5_C;2Fw z1*@ZVHk)n<7vb2EaVu;4`oYF*qx+|{dr@1prwOXhEL)1Q>XPb;>J6@(SHLnW3#=#- z-NL%|3sqY;(54NeoosKvHmVgF75~s*ztrab*HzKf)sG_E4~c>O6!S9)jgQleiTM>? zS-$S0}nc-@3HV)Gy`9605l}3m|51R%i zap`WfSu2q>3B~TxUirxd4^&22j02b@5)Z7YaHs@IU$*r*pH(L*(y-X7X0*1Y-*c`D zm5+0A!O`s1;c0Do3ztRgZeZQl3PRfHi-V=!Y7OGc%-%FFcCNp2{&5ZFsy5n|0CPiE zBdP84DDjEx-xIp4*_F1{*Se#w+Ot++%)^BxV-y|Kw+ye1S&!JwH&!sFdgW!uEMD+Z zXP`2I-Ib$bJ^vp{ub_MagFIH7s!`PzRkNT??J`fwP6DYuM%%C!h+um)hRX)^K>ZzI zhmAnsQ`fS@(f1nh12aR=(Al|7_H7*F#n>Br_bL4pXfr}hXbDJdd>qHm17x2{<(Tp`eZv24>bhI(1S0CG)9M*ASqUt|N z;$-?RC55WU?R64i+65REwhUGQCxvbyJkuE1OI9-)m(zw)r)`j0a27;b$}7J~2Tb3L zG=rIRj%#gVK)WBeYGIs40?VzU2COgPTtkV)7Lq8xC5)lK*vxwfi3WAARgfs1MxZ4Pd(=T`9ZP|143wm~kv3XS1`!B-v#VO<&hHmOF`fN zQ`qs;if3|Ipm9nrovhzAv@R)rO5j;O+wL`>oFM{de1Ogj@epnZ>U>{Y5BAc=f@d35 zt}~Q14$i0lGlC9-hykFsdR5@_;y*K`%$<-M1IhSHqJVQz49vA zk1ACPG$Jl^>?6Bw$eLk_G6xEwDlNw7qT-XA#~^~9tL;Ra?~+4 z-4N$&F~p6L$j4I?XeELxoFaU#YKSv4;;`NA^+$gu`%r(*oKnO6QWN3Q3g(RGCNrq1dPeHUE;3e%t#l5&=94M(_^%L zE|paK@NXAQw-p-Lqpa>mn@4@o8{aQC=j&KkF)1%0T%?}ZS=nDw8rjq9Iq!Km8q7ph zJq`Lr<&M#+>P<~8mInpp%i@X$N<{z@d8x;KPX7;0xYss~w#2s40ymlvaajqgpFk`_ z`t(CDCAg_V|4U^)`+2l`IxRWbfko0y!?^p;XXnNO;&so}x`+ zrMx-7dH!|o2O2^8SHrA9zg9?s4k`;kO7_Vn4y3~L7&Lz~Efb`pM!F--=oLjcTi_vC zVIh4Mivaq)YPrIrszBr7&ttIv7M}1$vm=o@zhupUK7#L43G+JDL}d`mcrzQIK2s28 zQk%Td*Qf2hKq43pRbBQ=)2>neU1FS{4!N&qB=CuqXpz=kmN~HZBv;dj%G9w-aKR1{ zQ7mQieSzNZ&6m9o(ubB_A@)|xHg>?CY#uUP>_1unc8GL@ouyCRu(seDt*-xis^qZg zP}ezfN4^KfyHJ}mZg2`BWyVj*BMT+^U21-Gy(3HTU~vX2%z~^YuG33)=-Y7jMI3pQzPZ%@aGy4Vow6mAsoVUZj=y`sC5X zkjbOf5l|G#)Y2mjFf;R2u=SPa!T!_zQ#)3>wprb#9yAoR@VqlP|FSbkY4;PI5c**Y zaClzkQEbiPalP;lZ0-6;-LUyM*d*ia+cQ3>KY6j^)itr=t8FRVc?9zGdDe=Yg_>zi zoF=n2LDrL<5a9YJru?ULySXv}p1-zDSgAEb88S`N3EvvT8#oQ~Ww7MzaQHbTH8)b*d*B*`32(_h2L zeGIde3cu%=YtT#62KN>_#H(%+6rmIgD)8iLBR`*~bEa{vtEu{u9pQ&WKi;t>i{ld# z#LL&#?X9j(=VIP_^$0EL|MIbP7>$`7=~-VTP&VTQtQ^cLQ_AX)K5PiA$o;2WwVL|B zh!bOc65Hgh-b>m0`w!**wEVYTQa0@Mo4FC+D-hvgk+5h*QLNG7*R8CEw+?op{P+GYS^Np5e4E3e+B5D)$_;eE6Iwr?ir*YFLpVKa#Cg16){!k_ zAqBVeno2^#TDZbXRE|s7k@icGF)=sd{tNrQXDu7CK96+MDJh+-$8IYNKm13YdoAk- z6PO1~7`nD9M>n2EK3t=T8A6Buz2=QcjQaBRUj5&IVg28L;cB~n>P^jU=>EjLQ^8hi zO2L*5eOxo7y48B?jmB+{w8Bfp+U3Z1|Y`oVpsRhRm1dV?5( zI24NG?C&}?%y`9kgq=G%?DA&hz`5)1<{xtAVj*c&kU_Z_h}^cfV|Tko!#m8=G#OJj z)Ekq!z#fRW31QJeN}PHVR3k^IQLHvvzd--YZlE@pY0!9Rz3p_!Zgj997BCp5PpE-k zIXt?(7oEcTmFc-Z#`R{tlvsycBqk>vqyYH!>SUziA^^kS*lcf*LolJLyD zT77!ueSxsVPgw@vPKobMPdMO%u^w*K@25&ZbtC6$yRp);IehR{6h|`z7k>^v_|4`0 zSK>if)ASU3!IESW$p2zyohhobQoUwII8dWJrY55tg#8aVW)*yg&tfz<{1pGy_q=;B+aBL*;D9JZaZ&^#YcwA;4u_zVdjjXjW*Uwp^ zG}3Hr(2Iek9|197nb5zE)ifR_7R@DGUR6E!lsk{|RIF(3rWn4UpR*9Uv*V$Hlb!Md z!o>>K_e@D(rI!mgEPcvBMJt8Dd=ONC5=AqI<$obDJG2Q#iDKPu&i{>uj22bo z&zkSJ%tj`uuIA76%0uR9w7A<}a*xqO77I)U!?IUD2f=cefHaS6)sv|81NRIcH0pT04zP~1{H9RrPEolR9}|S*hyUz z>Z9{CmbBVBS;r12sU;a!+I)%n_~3EjhipSbi?U#-$=r#kSJD3gk9Ax`5=^Edx#~)# zjN(zsRN>(M_8Xwhj8u9uQw!(mJF2ce(Bx{Y`uald-$tBy{p%9rez?;Hs|`i^K);&@ zVRVw2<)T8DEK;d*0HsU(Z^Sam)PamR(C;2>rd4;;m=dB=tLg}=cjV#v(Cqd{uaY(D zk{|uM&iPL|U7Xrd@;p4hyl)^FQ5k7pD};F0E|^bRnq1$iu~vcBLi#q8Jx!}xoj^t` z7qh8fPHC;%&{o~l&&|+Kv8bxHOGA4zk@vs9`rihjA0H7A zk9`C|4q>A7gOly-POX5<6vY=^e<{@*ZWb*MFA?zEhiPD^&V$cDIJ5VH_Kt;VWaGF& z-42cq_h*IQg+G0~EL1u`o7wME9R#?G4=muhJ$JpcJ@pktkW~2^D&CgWqo)nm>|Ma& zxcmCv(bm6TT-1DS8jUgHz8uPiAnTl{l<)P?rnzTh8{}c7_%5ez{1`nUN2nAk=l*+! zF6t_pv8pMBqE)heU@e<6;kHz26{eTSr+J(TOi;DiW4Jp27mKDav0u z9(ge~%l6A%J8@I<%cxN5s3;ki)qs>fmwV9 zHd?1}WH*9y0_qWkj$DD??sW!EGiZXm#UN~j&xU0nf}+uZoYab^;ia#}-Nac$dfeQt z&@<&G{fG$4UP&)!sxq=@Ul`)5AXN?fjg6};BRkYasxP7%93e3EInVgL@llk$c$DCP zljFmG0DF8Du#(IUaXYvHYN&bvfpx>g@rD#MVs9RC=i{t1qd} zfD-Z+ojK*CzWZgy>{3Kj#q%(OU8yl913BrM#<1f*Vhx(?EtPuZvjf}zM(4|M_v@tE zs_jP=^WR$rZ!s1$JAFQe*@M!&of%6E4G?EotyNv*nL;DUANQS_5dGt(&$kf z8D}{3-V{de5QjcOc>9Cf-gBqh-5<}*O_!+Wd|gIkH2B&bNqypGG?m%v1hs#QPf#u9 zAE1;ybo|4yW~g?N)pha>>NmdUh@?`ka?8uy`FQkQHOs%IxqcYc6#MLv1KgWvy|z`7 z@kVM@4qjj5Foy4vO=9_+?gJOS?o$SB&*;8QihhKMw8&I`-CTmHyTtvY9%=I99(S!^ zbS^+%YMxWm-uBbGgeDHHW{(lYEA}U4d~ulpjC0%9JrJ}Q3d<)g}0049tlrmj^ zug5jD`*9}0k4L|L;G5KK1?u1gY_=HJ;f2WFMwKtq~fJmiW`p#l{;Pb?1 zXNq*cY^Amp;vA%8^vpcBSL}qYy;T0&ZwNjU{ch0c6N~LLe`!$^7##?%jh;6{P#94U zo$d|n!*zvbF}COY?j?$UFVx*C@5s2_WFRcgeKv^*dXSoVEWB zS=Q8#(yeRks5n41rUe!e)Rco#Ent5*|CdgUZ|vWOTs0^tAzR8)Fp9#3VO<4s$M#%Q ztnNFz-mE*nbPUy3BK1VV7So$R4#pEOxQvA$7gCFOysVD3Ed|j&5t=CwHW|}W(-m-)o4Oe1j2fw~ zd-wOYR7H6%0UhWIw;%4CnrPFb!mi+ zBllX|L03kr6Rktpr$6+A2h%?p=v~P}Ig1R8u#aK>i1T6pgf59W|}aor)o|@K~8Pb>iYziwQKT zuTS~67kX)Sm|mEG7|~?6>xJ0#W!_!&i_XV2*=c5L?SUQ2oGvE4fCT1lU;nNeO6}2K zAcTLazF<;;S$u2#ShNNFuRBZI9nr)Y8FqzSiC4{I;-gxIo21anQ}mm8U<41pU-+ml zwcTtBT_QmPC<=Sz#E}QyI7rw529f~@iOJT=(h_?2_gXbw{ayV5pUim<=wMLpgpg@% zZzY-A907ii?XISN(S2lpyc}xbbRpG|b;tfpnh=ajAmDO5S7}ui5c~gb1@C=KewB=f zWc+o}#a>qqB&E9Jw6JlZ?C0#01KtS5Hoo*QnPTs!oh-J0N2?m6eyGGMnZ}{qpEZ4X z$z8i}Zh9D3l*#2@>4||uTKj0&6%Xvq{Y)hndt^9iE{jg(b>rk(Py%$~2N=D5jR> z06SHou%fUzMh4-g@RyOy9|MLwV2LcwTglsLnY;AHuL}*yJWZ|*6E4nU# z^NHMyM5M=0B)?)3e@5%Is6q)(x(nElZTd^XEh+ozt=2-h9knZzky5H6luY4Uq?%H< zsI%;oUiV7QYvH#qIF6|7NjH4W`fY|kjBQNs3NWcIxat^Ve9(%MPF3YQD?7KzBBr@R zQ4cH}HHF-}1P|UfY1^fyN^Os!qLt}wMpWX$E;GP^QC_vI6ek+ z@=F(ruEW8cB`@>p$2@=WIWiHA4*F{+&MFs)6D3eW8;`M9EC`?nDOT#RY1Re&lrCSy zTkhqi!}IH%sS~+%0T;Zc>%JFb-t?;U8Ta+^bny;e#}g%)_W-#3S5Bs!!ClzKAExib z)rB`I2WlvcW#Qo>av`sOLaGC$;*?};2LvrzWj%kgTU_CDgO0O4@KbW?ve*|sk9#ZM zefyxj{>p&F$g@;BZn8xZPJg_j^laRRpWQDG^qqsJku!k*+1=flKj2J;C@_$!n(A(V z^BV{-g|=h<(fb;o7z&p?h+nWy*Ti(D>Q9r^5j?*)-}3jD2Egm3P;mwNFb4c5K6|eV zB9AtJ<9+m$qu@PMhTGn+d3&;DWxEk*c~%ABxEkvDuy}F)@ds9QB-iN>G@It~$ezL5 zMsilqp3*1QcdpX=DW1~On~Z1a0nj(3c$GbolNX6xQ|UX03m=@>Q4r{9FonIb&-KCQ z7&L{v^G6Y?ZaMy9MtRpBgR<&r@b^Ulq`vaOG9ds{AC-LKchhfjs1k{5&Y$_fqKsy=F^+nb~>^)KeN zWcmX6<;_nk=nJ6hgKCeJU>I)~gd&p_mjNQn!){%38jELNy&fK%cUr}rd>A{Z7rb5l zSnUOk9r=yz?JRt`KF_17n{V~mJRpi!IBYUN4^X?&1`0wk*^UZ{)3~p!a%!Ezhfs;s z2JP{r{cQ|7d^@3J_il0p-MJY%@$gp!4aJID#S@3x7@vuCLZom++P&8;&+hvowG z8Sh#js}0$5N)D^@55QFc57FB?S|9Q|sPx)@MGOvik!{owq_MCjChL#_U1y3UhjROs zva8B_k!axZTxHJa@#v~*hMioTt2o!ybd{8q5UB^6T&hJ@!t0ern2D|x;Dz7ba?HAl zt;?Qv$CJS|L)SI-=Xj(niRS81!7A#Oom`hREIT_atCmOA99OVPJ*9jP)TAcV41dsC z9c5G>)DFcJjg1{0jg673&8ll+hAJvGmt0F}mfyyPgZK}~l+AbD<$vud^fDSE0(w?^ zEzip`B0B#eqljVLX#s2H9Lz~j>6 z%G?zUok%r|?3%r}WH)&;DK@#HIjzLs;Cgyp+#V?@!Q1Hc83=iL zJ$U($DpvR`3xfW{a(ch7pK~6GsmA7MX{W)mwv83tXv>+`dm(h;u}OuXG!3@kmd?P~ zHSB=><8Zm&?NYmtZ^(wbn?_XTW)OpN`aV+2758gq8T;-kuG~(^(5g0K93t2V zNjkyrU5+_l2Fd_tVuJXVruZJCLIBDNdWT(U>G_-h?HHx3&REcd8Y`;&;|~MuPQf2V zd2Wi^Z4VPmd;7fB4p-@Qv4^XKtpk_scuxOlLx6{`y_BALXyI&Prlwggu1uyB*K)2$ znbkhV5jSuH*&ZUsU{#n&RhJTV1EX;vn%e#F-6n6x7L;#=qeW}$kOpD2Gs{x)A766` z`9GQJ%Ys%4`Akv{7OyofPqF-Mgb-Ruj0-JOBqD%<`kI`l4^X+9v9o8+i3#mDP};<9 zzia%+Qt9{d7&CK27Zq)ZqRPslW4n#3Yx&fHJ!hkl4n^a91SfE}9soD6YvEp{|8EJD zlKO(bNJg8}V6vIa=6g*|^coq?8ffTi&{w;_Agi>=8Ou?NgIkKd)>C+)WXd=#B893v zpLB}l#20wp7wF&}I~W$varu0&dp1xqrU&pnE>vY zp|jt_3I;%(2E@n;Bbl<V8jr&JnKTs)pevII@>iy?^sGQ-<;`;BQq?|b6b_v2BL_E0FBvT|Z%BVNl#HjDTigWOM zVb7pe6hN;cY9c zw4Bq6Z?3nJU%}sm3&r-Gf9p!Pb7!bCNSNu%XOyVwkQZR70E1*DaBtS`hNX zSrkGm35}as(~g><`(WLDsGtf&HL5a616TrDlF@>-^rm4fYOB$BT%!NY zv9n%IKka69_!##6BMi0>dKbxRO9z>l|Ef?rFkOwWR!%%g6d`Wdq6EpE9d=(x{}!MA zd3c1FfIdw{M>8B8A+wUD-$5Ab?B+ZWD92^&um`ddEvIdqra$g=y26%|CXKUYo27D& zBiXm!_MnyiPCIPiVg!&-ATHSe#SAYOK}8AR<~BbnYGPE-z@WGr^>RV>MIAEUX2CNZ zw(``ptjY(plu%mb0j}m3Yw5v^VHna)Vtobfcbr2Pu7E44bFUMJdnKV!&~14VU&s2n zZ2x%Eu=9paFZYRmg~S^HPENbwQSo;Rfy}?r2clv}2DG#$ zQc`Iy&d$wjgNNDx|0oF<^l>yV4MER@3}j0c$B3n%V{JxOd^B~LTA*(=_YS2iSIkEq zL0=c19mBoEG;27zX*r2o^;Yy;xHa-k0=O+HH8tWA+A1!F=1l{63-qkY(&wWoucR!z zB4z6IiguL527eMj4Xt;@(@Lv6HZ2$h>2093>&4R8O|h~u_Py$aKS5beZ2}ufwbBqrr?F}FjM%#V75SD7 z`{h1lo!m{8tC40$VMz-x?FxoT7@1yM!q7)0=uQ;-hC86@?7d2pgaqQS60W*yB?4Z=3EQmZ$phJddwlk(?OJ=GLwkw1<w&`L3}kQ!-2mY9y2{GD1FVOfi5ZicKtm zw-Q*>z^tW}m94F%31g6}ope?C$e#5o+V&TkN^f6&N{V4UCT8`Zsig2C&eH#_+tKu7 zSQ*!~*3rcGrr?3$?BQ-#)2$C3gVggNv7Ho+TI5QUztcQ_mYN2|qL9#|mJk$8Z=E*O zywj@W>is<jQ3?bLm-Ot;M4^YULqGkKX}w$mqc^akW}yLgB@`f|WZU#36E zHa4FYi-rzsQ+=zemx%hCcrCIvC>JLz?UvALD}vOdDR%tOrmD?H=zEIH}r)z)pNnv0TjZ* z8qtxSpB zTDoq&+~42%f1cMCwzl-Idt(Zwh9%9}Ow^`fDL&a5U*#734nz(h#B5GNAzLlRGOL^EbpBOaQnNT2^SU2+S9a)ChsjO6@BU`#`AG6@)%m!HnccX+vqB7 z@vbV{R$s@NxKTFrG+U2NsrvN%tAMPfjE#L9X{ zvVLE?hBXR?G_naS^moK_pmWTWq{lJ}aVh}1oDO5*X;e(CzGNI6eSI4*FUXC~Mold@ z1OMd2eEJ+lOpD9`)T%m*!hBrL&12td zj4KOHg4RDi3XfOk`&b)Obf|63R{1nGCLIM8h3Z#l8(Lb7!#vq$IWn{7kRm>0&bNUG zH%G^_Mi$X||2C{2*o8R=$Vj;}j<8D|BjK0W;(pAAeqS^yYJ}MP#MqmA)n^z@CUHv3 z?NKN3B>i-(4RoZWNLrHkEIvK{tK}#0TxuNJTg}%7tZh~*rjP4Km8#(6NUI~~I-b|x zYii!tT}m{+dRuWXzf4)!rN}VYM?umgkxTq1`E3(}a)``0kyUh9_?jCvOaL zQbid~BHMLEYZ=o_sV0$M)U>^5q<2h*Od4l1e%du{+P^(s&#*C0SzQl8pUOk=JfM7I zr15z;qxr0?dpkO9R5s*M;iU*`+YL=?_YBAr7<9&`C|CQ+8Vo_Xs6(tof>_F)&pPq5 z-;aY;V`npMeQ)vUxZQtSE*8?8038$0b{f0*kWDg70(=$vI8OS+gsaH}cxa)KC@JNU z?G!f8U16&CQUa zDfTp7N}%WAcVQAfOUA*RA#?w5rw1O8 z}K8K27m{-&+!)0*yvO1q0r$V?JNtQcg#9Vw4D2jJaY zx;b8dtoabD{-$DUZ&;A#g zs|OvIr_&Nif^bP>aR3mh+T$t1ZtRbY7ePwG?ptt1@7XdEOB5?_9<19xuYE5H5_HAf zj7W8Q-Z)|zznf=qi7u^sRxhy!V^Kl{$VBOUyM8UgV24XW3M9o4rLY>JXP_MettStj z75TTH)s|s3bBk@kSS>A1Tl@WecgO|7H}GNTx7#`RuDIZqrmi}gXwW%~O8OEwR*Q1~ zY7Z#C+n4GtAvRz*_bmJ!2Ez`kjaadV6Omh*3@{%##LqJ+(NmdJn)?rLy?xjUF43i5B65ed!VWjbOGD zmePF-x?Z;NMKb$bVux4rBi<<+y)t1=q&;>0V?TUhO#iLn@;st=e z)}5*0OTF_6@`cC#DaE{*3BCJR`buo?)-juJ3!`a&AEN? zqkjD6#Pa$uGkB2q62J)sZ`-fD)SA@oiY9aXWWzmn3!q!Mb(#GTFf%=|oyUi6KIcN) zMuaccG9B@r&xIiQ{35jbvT^Y_rjz-6H-CCp@cseUcz^ypy$5}N z4p7XPj-bxwLa9ub+I``FCzR{@9Jbmj0W? z`L(s-f{xp}me^}YTxEQ9dtetJ%?7Ra8YIJT?Yd6}Wro17n&I~96W7>kHdN*k(tw~mbuYNor}I0Z9@693VIL7p-N3#D#!%(&2m{!S2pxq=g)xt*+al_Kr+lwRco?wVZ zng_i7dc}IWX>2s7CdPr^Z)ZNOyP&gT!@IlLrPHn~~q8a^(ATT)Oh zigX$VIi7#7cU8Vw>}*t=jZ%csukQ45fsNf`X%On-76Y8KXnM@VG|>qu(PrQy7Qw!GY3LP z5JHa{u?L_scukS`8_rd078cHpl7HZa&)3FU<5l7Z{;biZGzP#o4S5wMQHR6t zswZ)n#QDmv8qPF_F;7q;V0+S`UjH-aXVqM6sVFNeYbryLtE27Zp==wF{4#ajH3tO( z|1eisjSYp&L5k{w4~|{vtfAua;;4G%qsip*u3iNXj zi06WY64%?~I8>2Wn<~;~mHdEjZ~DTxv4=^*Ew+X8TijNMl93m0c(-p3|&ZI)l4q?SY3xa0CyU{<2>}B@S2+ZTy z&Kjnb#TOxakSj8#7co5HY9yF952#}}sf;-wUT?-{wg5hnhN;-?QTAf*O!WmhxAHU5N%>$}p}837Go&l@;OyROw3JA4*AWw*aDx zJ8K{CA8rD2pX2ALV(xp&E1gu$!Nv^Rmwz-jQ~g?Yt_H)eR_l>Vb>@j<4A0piWw8<$tuvTq8k0(zWYSa6G)Vm!LHyHG@|#eg1{nFF z7xHn*Ka=1lnouxWruk<5=SP1yUU+D>6HrV5eDOIu3!N{Uj?>!H?Jqf=a9^0aA1C*T zTIso-bgFwR+9~;E7hMt~0)cItX;;nestXB&@MksVGJGD1>b0aZuE?mE?m_vLqeQDa z@9;UH7Yr77!v*KO1D_vx#`oE2a*~ObDgh4?;Z@;4)bJ^Muy&kgpxH$?!EYwQszNBU zm-v-?l4b8P9B-ZPN86A@pW05vu6~-x^4{^6rL7R&1dg9~3EaWvngmk98R2P{~k&(C-3j!b+2yS))6CWjv}xtve49`3?w+ndr4cg(!zBMOS# zkf0a`_ZDPiV>E;1Lt`Zt8d%X6)1*I-G&Dg0(|}wXKgNI}CcIEqN`=KVVW-ZZLS)g& z-HIvX^rv#9%QdT-WE47^OVI{8UjQa|HB|4UsNAggw{Z%MIOU`96$wS5}+kQH-U4^jEYsKQhAh*FN=@DOdRgLN}&iHL|9n#j`G z9>RjIZ7{!5``vPB$$b&wEu6G{ftV1Muhe|RSPIM}bZ?Y5FrD0VckR`RhOCwEBQNKQbF16=%E!y~Sj(q00mnUa&ayvgErS&)m4;ERnJZ0ZFWs*kK`g-_I{ z#kk>gdM4}kGbqKSa`M9uEenZF;Nz(6K9COIj|spaq*)3+VIRTw&5B=ZhP`)#?lu=~ z_$D=#^X_sq#;h|`1#IOIG}50hYlbH!6wLI8OdC_~#)InlI=h9yIw0>a?Y|*iZXxq5VQEU`Zao+sFw>ub{5F*GI1gAS=v_hJ&ND_?B@>L2q9`(%n%@md z#1~C9gx~=m=)Op?MtN1f)_MZYTD8Si5L%rS{EAO|S1lL0T@ zL`(E}6$XaPA`jKCg=!w2*5_t;nBk)_cQGWrIQ3YEHfNw#G7y^*I?V(~ zRqPw%C3j1D4=E_xk8z~l3V4Noo`Byi!|%9WRU^pbM@7_s4NeTn&8D0uVxA(wJb8zC zxAh+mk3Fn#EnSk@v)=y_Ak1@V8*{N*RYA7l+k;!M+N3eHL3LJq%K9p+=1%(uIZu_0JRkAHB{NS(B~A-FkO%VE&<)MyVZ?Oa4KcDq0fiwt(4Cw!>7UieEBjP$+z zs^Efs^0Q5Q0kbKXTX=2|)ip-Lo|EekM9XX@`5u%AZtcZQlvnipjBf!L5Ti#tbSKzN zTsBWWmHy6bYNxF54Epx8V-iU;)1PXclf&x>2B7=~iv6Ss1#d9FlQe}wgv;km&%C*d zXQG}i$oq)JT$g__jcq1#{xNZ58{M&Xru6}TD|^4zV8PdpiQ)nC&L0dsoh8CbZrkgItU*xxu4 zS!_&$Yt4Z(8zy4k{_8jN8QBl{Y?DAinWKJwo2j}o ztBNbClJi@K<fle91s0;jtjHc7^Aa@ynSj?&2!nG7n!l}Qc7q&~D6HvpCh z61kOXOPLo@1<}qSnvzI$c5ic4O4~X>F|if_C~jEAr)q$R_^qH5_qhG8pj#|8ZFnhn zt20SKzG&>dXpo}C0oiAqRF{sbk^N2>yJ2C^;q0pD*yn`tIDum+>r!JtVaMgH&hd;B zIh~V={})C6uT#O$X{(wwnn3PNB}AIJHNnhambybqLb7#3CQpN!b_NaR3i=#%x0QYa zEebl8pprQrRJw&#%D7f`7L`#d$|{u6kh=Dzv(Z`hO4DoEgo4t+!|!a-a7j@i6}0B| zsbQ_oErTRnv__E@TY3yL0Do~n08Sv6rEu;E8f*wRo7AS5^|FB@U@W~dXX77dG`U;2 zpeT{M%AJw6z@tyN9IFxx&*?nycno8OP~RxIq!A`hPLVRw3Es7uh^jM8r#1xGa_ObB zopo9<;F)k9QCcpIy1~gIn|68R0U^hjIcH~;5~6A zYSVLS)|+e0YriKuKTh{Cm`ZA>@IcpN=8o+3X^u zy&3yvi^09dHAHkpNx8P?G{cQ+TIiM?Mg;e=4Nij^)tEO}+&arY zhC3!_u|R?EkH11L`n?A~7uAyr)+1;hp{d4OWd>P75!gR#0}!`ZKHkno^R4ren$;HN zn+@Hb4jPBu!T^p? ziNHPLo%K{w-xrM3`+JIbR-|gq3~jUc%c7j_E;aEC1*SqFma5R-07gLXPMIO5g$?uM z@#h?CM3v>rs=%~UwkbEyWWA{o5wCRTy?oc_qV$t{hHsAV_Duw&MopxjWR0_+!wtmQ z5nUox3GY!Q&?gx`;_iwSqk5jzUV_zp&W-tjJr~nwx3inxZH<*z)z&e`Izm}hv^9qN zt8K&3*=mdXFFNIIl+H(gi{Okn!1JkY0+V*8@#5m@E`z_6s18u+xo*L-W*pnuU2M=j zg?HC%Q?jxVt>fLRrBC6<3vU*3(nH5=@okPZW^2Dy|H6QM+Y}#`5D>G0qOJlL2jeUA zNgS0Wau@W5SJQT-Vs3Lc$(1jm4)AGbH@KQTjLVvk!rQJn zxRrI+1KQgG#RphdqrQv0NB@l|ssgn`avk*nE zcES0c=ahEZpvuasYhaQ=r6QPC;~br>5STY2oG{oj;a4MU@Kp~7Joz@(5ouxHT~Aim zU3>nnt+y~DpI%HY<#QJ2y@qHnZ!XY*gLp^2{sqp$h=CWF0?Ds1uNj6`pUWQ+2Gxvg z%Q`9h3!#n>5#;A(^&5J$2WmuLaD2dczU+{Z8Q&L4j{8~8ciVue*;OZI_bIxvBgT8g zgkb}G)+K#7SaGwqK6!D(5|%Mam2fNXRF9OVVSzq;FfDK3H8qUOh!V-3=;hmH_!UG! zKFr`Rej3JrR^M@;Fzt~K`?rmqXXle zS*91ZTsD%lZMSZAs7(O(&Vl=) zGBn=1c$!AXYlhYxnE9_AnbKW+SW;Q26_RU(7f)WLBs>CkVOHwAKrt8)22hOs zV{*kx4cJ6O2~a_%w;Z=!f8^VI-CXy#qjafSLLF3~M~O0gGKxMIC4>Iic?_LwDdKS% zL4}WgPOXepadAX8g&J~X64NqTtmHxl=g9@HmlDQB|i%y$LCuw%+#z&Aly|zVz&e0WEKG`4K)22AHF1Qj(4_waA zZhkMiM0(;~OeLCl2^wA|OgS>Y+?0Y#>zBi9D2<=7Nx5YZIq2!k}&x zC)gOsOeYKy5~(dM!Lu7yS4fufxfy?K(Fslm-=(!;kT}T~K-ZEmgR+6@lIqou-gcuk z6sjMshfizcJ1j?IH@q)Acx+c|Raf1a(p9knueZ3ksHoU5HnM+RR(K#*yCD?XP}?z4 zHWOLh?0?VJ+o~JSmHF?ndFyF!$Y+m~7MGV7tNk!Me;a!V<^>gG6}cw9*+pd`2U-(L zyI@mS+VKzvOt0i=14s%cD(G}qlEh(dGz99bC~XV@2Scku4RzIcj3`haD6s~NQo#c8 zz{5VLlzE3%!BTS7caavq=b1y(kI!tqZOvS0dmRp6b?+!0+pKIj+`i?nuKnfj+aq;B zxvVY{l#lND$}P8ic~9rTuEg=Kfrg2;w(-b7X3PTD?Z% ztu5`9{@lD!u{Y%LS6~~|EvSzOX~FU4FVWRn>YJNZEw8IxnGMV8X-TbRB}NQQ1S|3_ zHfy6X$KN<@$}<;vFT(`t^%Xe0x?D?lOSWP2iJY7qV{{20DoEYc=xfs}>uYtP+M23m z^|h;GL6Y*z5#BddT3%jS)i`DGc|4aR*%$QtgZ)RdOodJA7~DDkPt3~K2lo`<^DO8^ zX!FF_ferXvK7WCImygj$-dZq5!@Ejyj($zGm--n#mA$pJ(N&OtgMLsmg`GK(w~eIo7^zcVyeV4?Q-35S9(JU_mOs`k}V<#(O;iZX?Dx14W`VO^c8M{=|-zQT%*M$*vqCIjpt;lKZ}gEk_KB}KlxGDmtS)o zalPl0u5bRCfrUhy?W{@p|(6qoPf0qhjJu^ka$Phj&e!x;S@H zZEr660(~u=mWrayANA80AgP!brXQn|6T8&Z$jdlfs#rFpHy|%1R52;=wP#5ia_}~! zmW=F-({+ibQYPk@KMXD^9ac@zUlg%x|@?B#$ZY9J3t|g=Av?1)rq3?Y9)29v|q?Xy4nOQX^ zn$>gZR93$(4L)!y2bjOa{ppZOp$D0;o&APoOTNzORyokc}O5cd$hWYmwM14UT@ zIjPqhC$gzgZ`|aL_oPBTb4cQG1f>}C$5mLy<5v%CH12V`32{f=^)RYdmIq6H-XcIc z-|X|5OLHVQ=&?c7)xA%XqiBuCw?BQ-%CG3ThM+ZQwAfAzG!`}a!e+SZZ*(p9Bemz| z$XOOkS^c`a95es>(vn~J7!xP6tc1Q3XkM*ak=wbmmFpL831a}V<<7f~ej4po^!Xv~ zoXbZaPJEdD`>8i)-$d9TqdrIf9!P&!UFX7as8|cst;56aY>b<$j$y#^2}y)LO7XaK zk!qE@Fs?Tdg;BHu7IA+{5O@@BL4>L+UmC4@g|u40?qpS9;3}LVli&iLJ2H9h@tLx% z#@xIev4)yrQ=ug{cSkHnoera-*v+oGxXozhe~}qpT1fxIbKo}a(@(X+dDy_-Fq*!jjAYCP17LW~7q#*aSl2jYDOsv~uUOw>6k69o(%Em3}g z#~|wkG-Mg&HzM1q2=K%P%gfO#jOwetpsXNJQiNV%0;Ql|=Vw^HJ2Hg28rT*Wl2h7T zaq6@N4K`%<~V?4*}0CTvFgkeQs>EFr>2I>n~Ov zQeimW)EcgduiHk$z8#b68}Pa=*B7QA8y}kWg%iW$Ln!Z)@rxO~o$CY1ILeHk;pM|L zk9~^ApXC+=P+Dda*DU#C@ZS0<{C!asbx@TuEJ;}N+J;}#+!Zvew zwec!6s*!OCfV(!@u%aL|n=G8XSTKsx6@%B6{ovayKk@K0Kcu%^dU5s-Kb)QW*EiXb%bVZj}-#*Z~dUtb0yDfVnUf6Cica~mvcFpPoJ@xJFwT7zJ_G;0v`e5(c18r`{ z=01ZwD;xHF=J2jNyKm@dZ&|mtwQVie6V=$zjJ`W{uJkNlYx~ik)U`H#riZ?$oy~;z zx+6>8`_%V5-Jf{6GO`bNGYI37|LON`_4ZfP;h9x_M&i>-locNiDHDGt; zzp8i>)owGu9Q45}>E7+!zWl*ij^hA1!o0kGPP?vEalAH(f0P_#K3=b9blcUs+pglz zNIUr|l=a3{>Aq50_f^Zr?;EqdsQb2SeBioo&i_~4_lviD$nn&_6&xuz27g~JIPz7% zaO+mMi~=uqlf%r!I|#0Wz@MSl4${iR zcj)I6o%}noe*LkV?!PH-7GQP*OzCaFOzXAX0P8ydSA{u#|4laoSPrubkTq#~t-6{D zjFlNik2#*9=LYgY=Hz3` zJ#U0m{%HnZA_>p`iG^V768P?bpH!2b@$Hn#62tkMKt&xNwk4VIU@v-*6ta*Sz?X>} z6bN7hJDo029SDcY3j75=uSeZZ(Bn`6;Pt*_EoQRcUKYy~cd-m16cW&;v( zoe394l4MHDa={P0(xslXG>&At64bZ;5qQv&WXe0?A+Ze^M!nka4JE}f{2MFIt#;Ax zB0G8)^5~Zr2QR)q^?OMPzvfyp#xH0~f5*o_FSO(LuvY+mTil%4Gss~F1#+kygw_)@ z`Kaxo5gMb>k%vyw-=80*vBa~(=MzSLW`NwrM%m{828_)T_t&e)jCC(NG0@D}0j5_7 z#%Pe<`Xfp|!;Y}T2e+{fb|le5e+0Muj0hn;_o&|t`pZ174w&;K*hm6|@ zMBxU?6d=Rb8)f-vRO$JLMiS2^z6lhlD&8cCHxkdtDRfH1M`rB0jCWnc z+aHXX{4ob`;)f|*zxN}WSPvA?iES!R=f4j;eR>g3yHh;H{50k;Md*VmjJ|$;IPolv z4WFmKS7j3vdL)UPgjyEoX%F)B)C$K70It{Kkg0>_r!l&T9idOqA0=@sAZ2Wx^Ry}+ zQtc&?oju6d?hLrx?t1}C0Wd`slp4~g(t=c@;5eUPH*&f;KQ)|@a7Ioq)j&Bv0bi2{ zZA|`b3QziKx<#n<1nqzU&RG~29+hSzI){QO5ADgK(9F1nI{b2)&ku&v^8+Y@E6^51 zoSQ6z5?utSU!Vt1o=n_zVVG{Cv5|+KN*JDcXoQ!A8?5hx{=oe?Wf=`ncM@`kb4E3B z)mU!j%^3TJ8tEH|7*7LZuRx=_khtsQNqX?Yu-e|X03EB6bQrk@RAABuprHq7=|&P% z2e^2AlpkTmmMxGJ9lTAep~ZtSVO3@cbVuS@D4V{)3Bhw>-v>HyFWVO{PSVkx(HWVh zEO9bKY>w&_2HNIC8dNZoSqL`^`14z!!GP^Y$0sl_7h)I4WAH+}wBF~T*wT$lN&*3blBf@^0Fr?@>sL~O|CO```I?8|!tqcUr zbiBf`xbEdU@?tt7-{zI8(qTB69>VB(qywm!{~a4=HJ}$eV9r_%bBlFkGhn=z+(2$4 zcazV>KSQh~)JCng=^W@vxlVx^2%WZ5gU?YY7!`wY+DsL%r9jX#ML(TKS+OZ!z&*)n z;JYl1W>K9d+a-uH1~Zi;d8ZrCWelD?IXAa&-}v~@(E9Z)Ej2ZzrA{Y0%{Y1Y$-C~j zeeSlo6UT1ecf-EJ2M>(z9p7`^2sEN3bGtocC+d-vUJh5Zsxsxh5O7j4J+v*Z!>)+eENjRl${OV!~@#RfcE!b^2P79 z8=LkQmoyi?N&RA5{N`K96wj-FvrUPQB=5E*Z%UIllqBzNS(==FX6bLYEX{dq@U{z^Jq2J>-nLJ!m&(V8A5g2h%ONVcUX`pQLML}(kY5o&!mgLRF zk&)}huIt>;9&PF!UI(||sf)$xKJtOuNTl`y?CH6=xm!)!R<9n;%^q3PK9P6J+}!Ko z%F4=5Qh%ttyy9=wx+t5!o&J&S10B8ueOVS+vO#(GSOo#3H7fAfLD5n}+(|^SnXjSm zgeqz!{bsw>;3cKQ>@@SR~0ty_P9kSAT4}$2?_QwN|=S zG>6@#;;qV|u{o=?vOHv%Iqp8OW&P}0-OLf|Xq(%b_?@oIy=C&>TWpkOZHyqUHK2!o znoV$D)r0YVQ?5}DDuvyw=s@+!cL)@%d^hA7VDxq}u4b%gtb|LH87`~QSgAB92hll+&z?HFk5>1kG)@lqBX8r$5~ zv%VSr1j@FIjWn(8ZoOt~OWEw^&h~+U_Rh`FCJUiWZh|&h0`%08vvEhjWd(lM`rQT{ z)nOoGm`6!Et#O8M;(m(gxCl8;Ft{*AJr+fBJ$L#dQ%Mphu$FMUuwsSOpdc+yJQ~jp zRaDf4>hi57_$a9w4MyyaSTLhvZBVhYLkrsq@1SDU)))-Rw9!0k8`>hA5gXjn<1MoT zmRVc>&>3B2f%N6Jn}%jfg6?qaOhZdaSaBO>Zg$=iThMx4}`T5XEi#%?Z6NV0*UPryfxc;sa zv3`2bC)QdjINNyyw%XRgE*dmZo~ z8snD*{`BRTO}1Gba8;c?qH_by|dG>b;vbiwUwD?tT*3tY&$vd~>eudWRAX+u!QKr#u#+(P z+qgMY0Z4}{9o!>~LZQF*K9&vS`+yv(?nx1PfD;21%@5nK2|N?m%-!&)oZ?Bj{{{j5 zH!Pnx2{N5dBh8wUE-k7x=PxYb4EV&?!-UQi>x6k#UtVwaqi^M{ET3`7exeN>MO!`-6*Ca0&am>TDisf3E8Q;wtUnSzd#lj(_~ zB$MO5P+2fwDzRA2CZ}ox7s(h=9a`_J4`RRcp#u*slz`2<`OwC`_8a<59eF;tsolDH z=drHBjuK~~-q&8ds_od3moI&Lvg|!O#@;hxJUGL|L$~|>`p}(?Uwu{jk003%j?LaX zqsjq18*m6@vK?kYE%8R9o(ZCAuqUDCbfTc$fx*DHQaSEXrQhlB6gY~UMf^Yj3bCvV z<2{o%6)PTBol;Wk?AX}0ZB)Pe#v|9Ac<+19yx9<`kIo)H5IIbJ*X^E~j2t*lA1n)p z%RjE-RS%cjSrb2FxjNoVB!+Rp@suo#YsYX}K%wJeIBFhO7ro@8g@HUyWH~DL`>cRi zsdoA@k~EY7JWReAKbxT%v;ms+uk4%HlUp9RWzUEA+z<-o?b)~I2drt+jxT<((3_k1 z><<%fSVF;9UYQ;zsdiNZ{Nj-LbTf*J+N4NXmJdN}yZA*M9`JGJsjOOF__S+|Kz4ceOBOl$s#|Jsyp?DcbAU7x5 zAZx1`CR{7Q1sLwcEz0^`W+&h5MYC1-0(yWMGS7yiua7!To%-<1*YEz+V|QNYejxkI znN!oA8PDp{87Ezv_yP4N{+KsYVylGTaPC_H^0zCc6F$7WP8eCJ6XH^a5z_5WDSM#d zLEj!uDS8U7fY)Z~g;$m5a=M}Pwspf3f3a?ezMg#Wg3mUe!xTwIL4}+JeGwNuG zfJP5!HoSsnB#PV#0oRWNQ47}xx{;+4-AXLhjV`Yo=?)id?GRXNr}^}CYxcGZw~4Vz zrLsBazVqx|JBquN%9wZ?ZQa{t7~5jmo8zp=-kWpFU9rjbn#Q)(#d}K>M``|E>u_UD z`(zB;>--;pwsCHk_wDat`_0n!!Wnz?eL0g~_%dtioBYz3ii*vNPyaaapQcdw)mNWIJZrQ# zRg8U4hwT!}9!ZVmz47&K7t_N)DA80KG*aALlSM)G3dV0J*^!-PP;|H=R9LXYA6Sl5 z#CIxjNRLGv3x;$H4CygnTU*S1)Ew~M;PvO;t=^>1efwdu@y$}UtIkF&h-Nii_-1vNxt9d=T2YbBS5h$~3Fq`0LbFi6diB zklXDpVEgGy$ zxTvy3HC+pEXO-+Ay1)@}9;g$z?{QHe{B*A{K~x5oX@)h&Q_gZ$ND31ay}8t9_Iq)? zhm*&rz7BiZRIMa!#pY?R&M&fW@Zx4ZrX`%QbV%}mwtV7`@{pZ~|J!3nLAJtt1IpWyYD_#t^}{%aZds4SjJ+m!9Z zJ)=RNsiZiGPo_T_pU=aQ0i<5Cyf8%0Rd#w;;VKV?Cd%lgePXZMY6vb=0wZ@tb*i_E(^_U0#EacocG z)=B?JpSY53kB9ys;ipf`YU9f#x?MQL$L_+*j@wCD^^>DVzjE}ba0v8v-e3NUToi7) zl3!wwQNm5CjQR!n$(7QBZ2Caim~hiMjjpT7Bm25OFrCc9NE!PD{V30KCAuieA^6g4 z$bX*-109g_a_Rd429Le9f*jIh(EWGL%?u38K-Q)vvLx>c@+T>KFy|cbr>W_jmiJY9 z5b|b|ZuL0(|A5?CD07bOpfiHk>GTRSbVm<+b<-MmL4kYCrlibyiM%O10XnPm3Ng>J zv!M)Uw!>nA#6~~L8*|dkaj~!&?O%6vMdc0>Z#j6S;MIDvZZCy_OOP*7s z|2OnO;Us9B_o%YQ%`Kxxbu?vnzOsq5X8fKsdrqcb&O|zC-M&)V3=?UPH$Gf&Mf2!P zi}XzMXtBcVHs|K;Pz6p&E;o;6zi}G!>}FRrN*k+Y9?faIMBgdwy^_yX58asfq_B5J z8{fXgo@T$!92+Pf8>lRM-jzo;=53nZYDqli828?5qaU;G-Zbk>Z1K$Tv(}n!%Gghd z_RMum#$MB&Ro#)XpYi9UKFHY5`EydoW6&41^jybc>^~Mg|5A-Pq3KVI{YrbU>M;!P zSD#g#g28V|{7~*P_FFAZiYj9mj4$f5I<_Lb%S6$wS1$LN>)WW@4fMCPX26 zSTd6IPQsJeNynXC(c`P5*Zb#Ty{H`qM8$?9-eO`+ARLuQM^ zVc9%;uCpmWWH(()ui0s`l{=a`r>%KPo^`q@@lw;Y#iW=l)2dC`e%hC$0p|n;ZUe>L zQHnBDv+Ch{T65hvz1VtX2@Pf~Op7TQ2rlVRQ+2Hgv@QJQTbH3h=+lTuTwFv14Wx)b zpXxI-!TR~x)XU3K?z19&;FK>zUjD%8b2IJj$xnDgW#xvjdYx&{c+s2s8Lp~)uOmM8 zQTE`Uhg0e0aiY$1Tec)WnRxiNWW4Cje52|d^Z!Sv(9ZC_ZJe&)NQE|MI8Dh!qb$=+ zN^j;HZl_U4W|yAWxQuO_L}#EKg6c$t7f+KKW|am9j@_4d7f;qY|VVE)`c7SCs`8 z9gDs~i_lzKE$4G(#m2IbWTYnQU%3G-rXLxk(l2Jju}1paNH5tHAJ61~f?fiY9Et)1 z!!&29tXRfhKs=sgM!YxP)3v6it!DMAh9xXnE@1QJS#p_nKsT+jqpR=~)la0>>=Vntz!Ac4krk#yG}x>@d6IZNU5E9fO0(Pu*a~gQg3= z!G6R20j&gYaUD?q-|XC({1|p-JZO8U6yxsIkiK|N7DeAR%gD>A%gM_cQe9P97V!Iu z3JY9ztHq?3>^D!afYMy)y|@!`0TDci`7)!jkB}vYK#K5^PRp{ zsHH49UKMVXvKs@dHq7Pa<(cN}Hk(VmIgf5tc;BO7cBe|V~=e9y%PD0ahd$p*e6@gUO@hC zJV*X%Jdee|H?CkgST?R=CAet3fYqRZyGYT;2rtpWJ`R{+hz->EUL);NdWZ-;YK3@0 zy*^rKQxbE{DBI&+6Zf%3-a(g7IOQwTFVSpq9r8D!<_;uohKch6|c|wh`#TYeuZqa4~*LjK>HS47D)8tNs8(f9A zsMY4$WM;C~Ia8b5|G&&STAPS(PFY0F7AqN%Ur?4Z!oOAj_`1@UoVyurVx3P!Y0UT& z`!#;2q=)=|MIQt0>Oi|V&Ml`O`D$xLU8m)AlbwXtxt=gKok(NI421OCQO%C_<9BaD z9Y%GTxA2-iy38OkiDW4mw|P$Su#d|&X%Y7`t!0xIvwQA*6IsSct|KA|Z8rLh<7_47 zNV_!D+`C$IRXnxDImGM%n>GKYzF#@&=iZ6(*XYV@?H<69(t zS~LBPwRf&|Qt!;pxqZZx9e*CzXFSU!$Ujc5d5>wYpvMJ`3c6I#or1OtdXEnm&axH~ zrLXr#I#%cX?eOfec3vcpSi7E9RC?dguElz9kJS7Hok|V80001ZoNZVKd>cj9fA6ic zii%4T2)*|JW>;NwNtP3bkU$C{p_sM2l9kAkqY}rV_uk9VkIn%{@4fea^xk{DJK*Si zvop`qI{ECM^?z^X?JG0yKRYrI$e+K?hamhvKiU-WL7>6L@FWsy@Hq5g3yy){3n;dby1gdu|4 z;|{nZL~$qh7=FW@F^MTmLkznxgWWh4r$HQE#vYswufPEA0+!bfyEZhweur2P6 zvvCg2h3#-2?g87wS2!Q;#yxQXE`%L$FZdMq#(i*K?8W`i!amGmKiZhXJPu$17eN;k za4{BPF%)qSORxybI0PkJ0)uc7R~h{NzDOoJg@h9gjcDlW(U zVF@092jW3^F!aE5JOqBhL-8;?9FM>wVHZ3KkH%wQ2D}C}JQk0Gr7(=g;|Wm56Y(TG z8Bc*-@l-qwPluU!2F$`U@htoso{i_gN3a|0j_2Zecs^bL%kV;&4I}t>ya@J(1Mp&4 zj+fx2a4}v62f~do2QPShL7VD_#{4sPvbNAEIxG@eO=?9efuafCuqC zd>=o+5Ah@X7(c;J@iY7!zrZi?EBqS2!Ef<9{2u>}|H1#_5BMYgg#W{z@fZ9Re}fC) zLi`>7z(3(U{EL8)h%{=Uaio)n#*>$PmHum<+4I>aYf^32VXH)JkpCP8~FX zCekEYg;u4>v>L5WYtWjs7OhR|(7Lo9txp@!hO`lFOq9zqThJ8RlD49)sgt%L zgG>rih{6=1D8(pF3EGynqwQ%2+L3mmoheBvN>dkQsGFwJH0q)0v1p+o5~m;mjt4y+5;Knq+78^R^j;3SiSm=P8;AT1wQgl3>Kqt~k;D-S03;V&2urr-Zr_iZ%8l6sO z(3x}={f*A1bLd<;kIttH=tBBCT?CK7qi_q{3b(=Sa1~q)_rd)z4t#VmT|$@AWpD*u zPFKK2;Dux0C^#ODqbuPA`Uf0NSJBnb3!lSbbPYU2|D&u;S4w(u7u0Lf+U;<=hGc@C!7oCz~yi@-38;}F}j=Xp?m2* zx}P4P2k9Ytm>!`==`nhoo}ee`DSDcop=aqidY)dO7wKR061_~X(5v(sy-sh?oAegF zP4CdV^d7xWAJB*N5q(Ub(5LhneGYfh7xX0@0r!H3zM`+`8~T>MgCpsCIE(&G|DpfV z5A-AbME|3o=@_3+g#g1o1$&0ZKZ9kb!yvahGuF(Eu<&=D)v&_Q!f<^Guqh- zW|D>{IcQ}o<&q~^&X-H}VqdaSDCMney=Hro8HMuEOwgas7Ao2LV6JE{^QHUCH7lF7 zOEtYKYY7JeDrKvt{2FOJBg5($IqAzZ%#}eZ?#XcAj0()-X%#Krt*|?+Pn910Q=7rn zR50k9x`NlB(K4;is`#gkwG|U#>Y1+hxL2ZE&7_l_9!{i3C8GD#3dMfg@0c0kq!BVq z|MV4uhobrnxj6a^nI4a(T4soplxJZwQ<=*1HXPP6rMy1Nl~R|BM%6i+iI{R^7L`htdu5e#wi-En=Pbn9EVLLVf8`qa*9)d&W-iKOD6D$8J5 zRxITXS8KVR3I?Up-fXhQq|<3q(Pujl@~d57x#2k!;Qf$_r>A#LZ>o2uZn@hq!-R}6 zAx)3P>u50{ttKHY+fB%jKkFi7wn@nT#%>BGcImcaqOF){ugJuN$L5Ik7$)*j5lJu; zBYIvjF~1TML%#fqOf*{t93~E|#KeeRaCej8Ep!&k+2Y*UyKwiXJO$3Dz=SNw9-_h` z-v5~5W>j%=(MsHm=|#ngqMMuPmSU5eF}sIJ7#1oJJ_Qgb+2b8|ApHYv90((CT*!pzA?Ykf?1bzaFj zbFwZuSy!AKR*4L|I62(lMdWZcg&4(4EkiD^4z7k&_|aa(H0+tp-_y z+@PcxU_wZx!y3y;v&|Y!t!XS+(@-4huuGYinqV%mq833aid9l=g;)esgHVwsDAgO4%-rP9x*ISUEMc;6*`0Xqf@|Lqq^`WZX zry#4KUxBS4ry#FjKtVylA_a>T6cr3AC@Cl_7*eoAK}A7TK}|tj!BPdo3YIAtQLtQs zUuCUUaHJv2#xz0+#-ut-Lh3aiG@}Ni$rxk|F@_l)KCmzkEUIgjX8iM3&=dusy~TaJv+mFpEH6qYKRYGIkQsR}xkq+}QJ12t(>Dkw)j zHB_ydrbh;;<#Z>804GE(H(o`kw~kgQEdsoraw@=!q3lMZs3}faKICnL8t+sf1*Zl_@Tn>s(JSjvl2eJa zb83-xsv0S(NYYSNB&A0FGKLhK7>>X(98twkk`qJPIWeT2iXlZ6LmJ8$j-=W%(#^4Zzd=8wuV2c zPH;PwBONZ!%Eawn^_Y{J5jPk|^&n%2G0YfYj55X;J=WMqFa_7`J+ zOmKq=Yp}mOTvP?y7cH>;%s;f6b`J;<~KC zA+d2*so&Y7h%+oO)|M>~ja2wFHsb9SJ71{Q#4SRa#RD8mD&h#q%HF8uy#01w9nb;x zFTKg2e18DBw>kc)k+oZs`4~}hnt3N&YVki;x{9ASVKdV^0MZ9d$F7^WUZnICUuX@ zSG;Z1Gqs$*k*l*7DpTiWBt3}fMwYdlZ!|}-gEGTfu6;~?Vhx+w38k5vc$>L1tL0i< zc?r*AL*=(YVJF1eK)EjWx0dU0rKbw8DwXnZeMoIcBIc8NgI{7O?v+ChlX)beMx5^C z5kCBr{8C8r{w7Dqxg}G4mrC(nD#dpxJ{TkEv`6s3%5yqKs=Fmq=j)J>;!`t~VN}-} zBbj7O`1m1bLAiW?wq6k|&Z_Mw7mJo$ZpW*$PVBfTb~VIg(s|tJ_@Z+SZwx1#yT*t; z$~*D>F3uS9%4>DDJlN-zmvKkpxfElNG0hldOnT*w-t`1uN6lbBd`s!Gi{;_wWRM?I zU&#e>3Lzd3@pwqmRA8jj`5%g(^A#IE#B$7$TN`;xt&zLSF6EMgE;;Rzqb@lqJvC}_ z&4eA9(~7GWbd+E!?e7&Qt~hP1eoJ0DGKOI=nv6ll5M!7z!WdsNWReT8lgY#vr_QIR(-|I_Tm}7S zN3JWVC{tN2Y%9X9df3+pCz|3+b6jeLYi)3=JsxzzR2RJJfls|w z7!gU7*X0|D>(!_K5a}}RnsMW$#e^HLnJir{xpZn<>A`iJ^q6$%_-ka?%@vXp zT(7wD3hAJ!M10+12>G{TBvxbMBwo^`h4hhOGEt_=-SVI$5NBzHbe{8`c`)>uHn#MW zk@tr_rzP^l=N1p3?C)Jl-p?9R>i(&c_iy~OT+!=2Pn(ht#%L9 zIT#g1ycJ^$>@MD|2}T3o@|T0Fz*KN^fZM^n;C}E&@GzJOo&zs}SHPR#!vGt=oFKfA z(&v~Wu9xWbS-qaE*L(H4Os@;{dXHY$==BY~4%h1(JKN`=*O&F$Pp|*b>vX-Y(d&G! z(bPSWHpuX~YwQBO-eU{77Wr0^>&^1$ZZ_H`+Pb!xecrxq7eqCU>Jc?8x?6Prs7X;% zqNYXNAN9|ug;6V_Q=)T-B|dss^vLLm(bJ;uj{alxbJ4S-Ka1WFT@d|UOnOXKOxu`V zF@s~q##|Hghu8yg@o_0}*>TO{y2K5On;bVI?xDCB;-|&m9zQ!iFTN-tF`;8ZA3X;p z4A*mV!mSBKiMJ;WsnViKVbYMK*ORYGo}c_>^19?L$%V;9DK@2QN;k!%lqo6GQf^JT zm-CgB*(sl;tVwN^QkW{KnW@>Sty0^k4okfxb!zIJsrRKml=@ui%k*>;-}^AhpUu-^ z%q%lYlFXZCt|Xhq<};~jmYStf+vJ%%$u!%|cBw=1IH_wBY<0=D^=+24v5jqWX=hv7 zmeR$xwr!-VZEHJ7ciYi+kzTf&?IwL~58Fe|wLNW5`lpxeCH-w5+eZf2bL=@X(4K40 zmGf+W+g}FRfp)N*Z->|kGR$6PC&@&6mAy(P+3W4~@+*6Ty+JOwH`*KJ3VVmWOD5ZU z>^<^p`?!5VuChOZwf$PIjY^M7M`u)#o7_g3?zYPex7*y~cG_&IW}CTE_B*x}|yCj2rlO>AyRNLL{wz=fgfc$ovU%4IT3b)-% z23NX#Gll!B+%9u9&#sZC=32tnf$O=S3T`0HjikMa@NYlahDZtK4p-B@61}pgK;XxvR@vHK^M|ngV2YI+!6<%oK?+ zH%o%KRjQibN}{<1MW@Yu=-tIrMfjdOx5M?y61Q^T;ES zoEwox1FdIr+4Y37O;ENPs+Lps7f_Y2y%Mgc*q{gV;Hd3xEB7mTvPNpdTlU>W!Vdux*#SjC3G-pI?j(yPFJVB4op~nr{ z)c2&n?qlpI0tY}WF<+>b-6x%i?M!TEFJ~&D4UnNiWGLSbaSQEGw~$`9QjK@s=AF-F zAzZjm#_`@b-W%t+0NL8?DRC>6lk*6zM|&3_!<(d?oFR>*yPS#bmLR<(4Lhs3+youd zrLoG!Lh7+ea%Ho0l6-8i0=ZOn$oWzznX(%zaj*QEl17=jQk~W*GN+&|J2B36mkdgo zZ620Z<`E?QQHeuier0CLDdtH=#zmx`v5L};BzA6GL^ zx{c<2^mlz~n?>D+@HrGM-xw;ZQ}UUVJdBb%QgRJS?xB|ZLh7@b&wOb^DcO|bOZb7@ z$CCS4avw|X3A9EYy|k0IE`VeF7+YW-ml{Y-J|*ulPl314iF3GrpYUA9srrmLS&T4# zEE+<1C^cvXH8r57E7V*B4V|H;Ce-wVnu}CQR=T~k!(Q59FYU0GcGwGr7eV1^P}l?t zt3u)Tw1FQ9#zWV+KlkxBIN?s9srD-@N=N^gVG+ssHLaugU1#(=S495~d2ouLR@)2%_G*4vKoPbbhBoCyZHMRpLj z$`H~G1*6>oI|ht(FWGVKLpz?&3GPE$yDM$eU2cKuF;LwDsxO1;TNpLIMFtI{h7mtU z`xAHw{24q99s!%tHu<#s4(U&up8@Z+q|MvW&JEDI`%FJ?yOFLIrJO=3=a7F_O6W}q zBmDSDo9v-Y_RuDKXp=qU*oPdm$+00hCX!<^Io2wn7wbwi_4hV+I`ykh{p!Q}C3|87 zrFEdRi-MjQOTL%U6Mh^oqSPWvEuz#SN-ff!IPxCoRLLIb1cjZ-?E%l}!=UzRsJ#Gc z+e7ULsJ)sV@MG*Q#>3IGJ3x=+!$$?A-XRwTJkg7kSCaA~QuZfh5h;sw4E;*A<6Jc02EAXQ z_p|lh=QNU>hLY1za%xXbxj|0-$?2SMnZ7n368cc}>1y6yLd;9VyhL4YVtk2wzM{nQ zXs>H@e$gGxpUZe2i$>Ur2JoXBmb!b35hkC}tv==G9El#Wp%Kh^$+hrQJnyVxbgadD z>lvLk@$TB--KA)db=bu-(J`|bN3pz_4LpKgoCzn*W~6=3+lbuda~IF^EUe|3Sj$nQ zs;*=2OmD4nm&RQxcbge4ALiLxy26q#=h03hXs5Gjr&hF658CNc+UWw?DMxItEI*^~ zwe0Mhk%tK)ZiUNpyWMuT&VBB_ay#8dx6r-A{YLk(`^Xh?u66m`?*bd#7WXxGtKE7& zHxk-Gzx_KMvE@CW_6w=e9=DluH=&&;lC0x*xG$+s5!&=*9ZArzBcNqhRw~C z@Xyw|t>}eyXoW&o;Fdc-dpm(g<@>|E13Z=MLj6L0K5-w0dI)L%0?oFV5mwOoq4aCr zCb#AIP+f|$O3H+${g~b;aC6bUYlFUc+kN2cM2NOWdw+6BcF@iRj7Orn{0K@p-iP}L z%m!bF+8esxaf?HogZ^FTwo!}1i1hiK+e&MNpGm_)MljztTM2!_HJ>?mNYg9~QfxtQ zZVd4R?YIuxGem8^K3yGT6jgm?RNPS8ZJ|gD1zISsh2jN@`vAo$?ykjM2iF#NclRmo z4#nMdU~qRCWPsuFzV}<-x;JaDCpmdeR#uW9$vIE<-Wq1Nu0f78oss63*d^Pe5>1J0 zT#joLuCX=V#wkvCZ239WLCW0ZR`UtH)cVA%=GS>qHK z_q6bijS8qpI^ide&VJs>ju_Qd!ai?YPmtKK5r$siI)UX6wj!W?o7T;Q-Hk5b#+FaL zf%(zFKBYNh+tvP~zQO~#C?}>d+7mm+vXUl)los+fmH@%t?`nx}3k>`+5OSIA!FL^U zjxXbD-WVw)6)J@M5a%jn`*BC-8)xQw^RO#mu;=`®%-U}6ETdpwX%@1lj~e$~6Q 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 literal 0 HcmV?d00001 diff --git a/images/grid-dark.svg b/images/grid-dark.svg new file mode 100644 index 00000000..28fefa4f --- /dev/null +++ b/images/grid-dark.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/images/grid-light.svg b/images/grid-light.svg new file mode 100644 index 00000000..7c7a34e9 --- /dev/null +++ b/images/grid-light.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/images/hero-dark.svg b/images/hero-dark.svg new file mode 100644 index 00000000..580a5990 --- /dev/null +++ b/images/hero-dark.svg @@ -0,0 +1,66 @@ + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+
+ + + + + +
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/images/hero-light.svg b/images/hero-light.svg new file mode 100644 index 00000000..1b9e5ef6 --- /dev/null +++ b/images/hero-light.svg @@ -0,0 +1,66 @@ + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+
+ + + + + +
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/images/plane-a-dark.svg b/images/plane-a-dark.svg new file mode 100644 index 00000000..f86ea198 --- /dev/null +++ b/images/plane-a-dark.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/images/plane-a-light.svg b/images/plane-a-light.svg new file mode 100644 index 00000000..35c5e8a8 --- /dev/null +++ b/images/plane-a-light.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/images/plane-b-dark.svg b/images/plane-b-dark.svg new file mode 100644 index 00000000..e07ed0fc --- /dev/null +++ b/images/plane-b-dark.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/images/plane-b-light.svg b/images/plane-b-light.svg new file mode 100644 index 00000000..473e5f1d --- /dev/null +++ b/images/plane-b-light.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/images/plane-c-dark.svg b/images/plane-c-dark.svg new file mode 100644 index 00000000..f84f710f --- /dev/null +++ b/images/plane-c-dark.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/images/plane-c-light.svg b/images/plane-c-light.svg new file mode 100644 index 00000000..f975ee83 --- /dev/null +++ b/images/plane-c-light.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/images/solution-company-wallets.png b/images/solution-company-wallets.png new file mode 100644 index 0000000000000000000000000000000000000000..ddececb657fa8a5663cceb6e31b93cf626f1caf5 GIT binary patch literal 65899 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

    WNr*MUao_4 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 literal 0 HcmV?d00001 diff --git a/images/solution-embedded-wallets.png b/images/solution-embedded-wallets.png new file mode 100644 index 0000000000000000000000000000000000000000..a7c177656e8f6c807ba96031d8572c6a6bb454c6 GIT binary patch literal 64906 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℘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

    wM7UqoP_d0~4P2#zMcUe&tId8-ms-_=$ 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%0D-eoh3x09JE%0 zQsl;W-NDtI=^x1>5B{DnzIa2l*b(6Fet#jn^Z&_@4pwB$rh$u8mKw23%pMV}LS`68 z;z@q{hmW;MC|;>{b%V^Pp~~5LQA6hpJ8Wrl60i4<6-&T+0u!kd#0SlFXuw8rdf%H= zN_euHU!vaHdM`$KyH9_)uSy0f#t@s(ZdUivx%ey`LQHF!RnU24{$zlRKWEdL(cxs^ zg)l1qE#r|{N?IJqQr6)Z|BRHFbV!I``0O%vFl*z#JiZ?bj@mV{`NK{zMzg!=ftj=( zLzHRBJu7C=a~)^B5vcD@laeow8EdxVgj`+*otu@z2o*U|*5-+LoAL^?@G+@S&sZA6 zi$wT+F8Gn&;W~rBzEE38G`K1?sHALSbErp}g;bJO!(m8y47@yel^94I> zvA*N=2Hb+SS+xCgv?z`1c0F?Okm3jruI@WVdMO3AesAg*I&8rOlS}_1 z5!b#v`L3#=WPJNe=&375D4x=PORxGv+hW3KK8++mj0dY-ay|Is5cre{`ay(M%4>KZ z3~6EMI5#n&4)$8@(DL2Qr6=i8sDlk0LTW{Gco+An4iE;jxGO|e;#nL_3%rL0)B_zL z4`Ro5(qy<3vbf4^oD4vkPs^y3Z1pQE$T`Dzc!I^Yt;otlq>ZAs>nd~#^J6zqR5iMp zBZ&}`c-N0mGi-4SN?V5dEUzO3(cFuhxUbR`)e18-DcRXddOSPhdLX}Y)vJ{}@L!d~ zIJ$&%kc*^R-L_HYR(;izb8^4(8Lq&qEnM)=WYdf7N9GTLwASYOKP#k^)OwbV`!rCaCJ(D${b#4@zC0_*PqwjaR`tMB@)w=PxB? zOYzU{_A48aldI4>F`1^_Y>SEG$Qu8sk}g&R5IMxtJ5wjv_H)pl!3?uM9be$erq_8o zWK=05v3lPvlOXs4dfg7L1O+@5&@Y_+<*>SrqIxdqhK%Ek&t1PMfTJdO!A-z%(cW%7 zbYFprS;>Dp&Q3qy{|HMb)7@I=%cL)@&~_!wCcv$dRmpd@O8NBFxX>y6DHy;J@q#6`{>blgXbqZ%;-2o}{~=^7H&Lu*vimAdLiKQGQ)yYkS*jZ!c%8?5Ti z$I)~HphSo_c8M+-1cDS?Hr+d1hd4Sx2JZnkUGqj@`KOI(vYs6)9j&Vn}wU ztjjt+65p5HfI{v*F1p3$W~WT4`JroL+orL#5=!E6PguxeGWaNnC8DsbuV;NMG>ZHS zcL-7O=p0(5E_MXE0VEmU*pvhBC#hf;>vRhQ1dz}C2cxlgx7d_T=9`nSr|aJPPE|(L z6vsr^W?%5PGVj+OL&!UEwD)Uv%Ia->0F*#yLSTJOizV}MfTGI=v;C~|izVa6j|F|# zXkqFgt~2+GmCiFo5vin#5@f@4^lii~2PtA+BG0HCZKI!`{+z6!mI z=P5F})Rt%49o7%SCZ$O7xY6@HgY3i=7Ma924~turq4$9Eycj4LP|vY27ojS)rmhiq zZ?`4I@OihquLF_``7B#Sg(EM9VGVsCEimv=M5l6`E&Lly#sw)^P5`s=J{r^S22LQHlhT>q^vGcJTmKnB9)ls|tFc*5b^+h6$)Pcqn1 zvYtMGCICy3W_Q#sUk!5N>f0>i~l8K{zg0Y}1+juo!-Nh%Sg-n*`z#^yGb zK+=OOQXU!#z6#8j;J^_oiO}MtT{q)f)dbbyr_Z%qufZef-BLi=a8%o(0@=UIO`6me z)rIe$9t*BZQRJ{ufBBBoju?#{L!nUrgI<%jFUB{-RGIqSYLp!gxoNB)gUICGv&t-o zj)YM1KyhR~%PvV7*{-UpvWD=vxI-V5$?VhwTK!JnQ&Vk>eqQC|20eF)QjxE>=uz5i zJ%VRjhp+!rECX(IX8gb^ktK7gW%4mw;*uR2>V|GTHNopq^p)&**MRMbLH zj?ozC)9}a#^xsnQKHc;PeM-^SDzM2dMND9PJF4#C6tz%e6twPhPFb^ZWKypYcbYe# z+ir0)r$zkJ%(1hW_5J2skMYugB>x2)HzFL?N1nyN$|9wtsr|iLpVYkRG?l`2p4wyW zIY>;Hm44!{hJr)fk|;!refKMt(edHTZj;^@p_wENBmHE9wwk0#(0@``sG7<_=EvV> zJT&ae7bSH{g_GO+t7&2KHo5wom7+^2oTNYWq?LYv*0&Q4l&81-$@Fg2yr+0`H7~>7%$7Qb*0PFuJ8G-KFU)SQ(%yrzruQlwRv$te^mR{G&OkOgobxXZAN;J z2->HQqMgWIYVDDB9WSgSoC0Vz6CWbM8EpKPKu$m(_LWn5Z+=#7h>mD$cO=3IZ$-{M zT&vnSjl=sQHS={?)atl(-3kWCNkh+S&e|>0HOKJ^WfsnI!CJi4{>rZ@RKI)4?B$h$ zS(#r+<}S3!1m&nsDeryDD|~V8bvqxqT)#>kO%@6= zH=#`ltXVYZ_G%c6-Pk*5pQLCsb+->2@ND3Y7x_Ncw?hL(>K=%;$PZFN{*!uphuD(p zfK~Gsv2XslO$(gg3@qL%`v#50V%Uob+Ij%rh zj~xN8LIjO|$;fSJRx@@}p?)O^k^R(8QftUwU)dY;Y-rtt8{`(edWQ09;HaVvlP_w- zx)Q9JXsPc6qjhmM|L~8XD}-As&BYm^RVZvD(eN?_HlA)DTYgD^XV4N8)nH-J60c?) z_)`LCP#*6q6H(}Y-)ImwH~>l9@T~SpCNJ%-9JXTsID_vYE-D*38LF*g_c8}F-?7#a znbKmbZNhv6>z#<=|N529X5;3A<`EStp^O+^WvV2UKm+*x%sY{miPg|kG&)iO(fYjY z$f^;{q2wmPCGt`AEtD{bU4b=#&_|tNn5*@=U4aN%muc~Lo%+GhqxQhxKa0GLzo<~L zzyYqI0zNlp1ncXu>_UVK^JiMp0Qnyvj~-Fh=~32k?f1RBt?9OnhRZ)r23N_WXz-R> z{(I%X=L2s5I1Xd6Y~FI^Uh3y&i&BD-H<02!OsC!#^yJc)3Nn$T2@kjOLkFwAM~3$- z@?{{V#*8N^XIqelx0pgXrGoaU2N{vlQf<5K7DPgI@p)PFd>D31kP=T=#5mj?{lvKx zf?TCot*0Vkj7$7Em?{pA0jQ-Kw}!yOyfjp{Z(Nw)n&wsUb`pv;v`ok@8i&%jZREWt zwK)TdC>ri5Rs$DC50!!++95 z|G0ZZG~Ijx_RAIguoySKw&tawpd7A9K6kQHiOH*fhFRLFsa9zcEqzw2(V$l3Dq~!m zo9+B{KJ?p0Sw-7^rvZ&m_naA$8Yb3!C=$Hw6>a!))&E_8id>R20`aH`Z=VRO=LPB# zSj=crvHFN|rF=L$l33!tm5hI1mr~!L=iKKTW!NR2TsoZfWV9kMTK=s@(e}51z)ya1 z5=3V6gw8Q?3*8KQQ@!DD^|sYK{W4J3A1+bIE(;%3xzIle%g0XPQV-%+k1_-Xg`e<5 zquWhD@YfK{z?HewBwf?gg$IeqvC)OcN6^lT?~zP$SrUa?r~>9mvTK_OcQ)jZJ)vNI z=jXqphtnp34Ti8?;CQ@{Q@T|+&EPU-&kuE?al!?-uhQB**x#Y=9Dc!x$oU=!(CBjj zdY-1X-%6!+<0j9g?%EF84B|+vAGf=0Tuf*P6@7qXYVk}tm^SZfN#k$|a|d;itf}`> z7F3HnOyp-10b2!hzMf#1WZVM1D<3~{PvYO>cr@L_xg*Trw37AO7++gzfB8e*@Rh0x zNXaCB_A_C6YMX5(@N)U!vFWe=Pq45?&@Tg-+pXm36)vgHlMZsgO{)jsZLz4X#L}@% z(P9+-^twy?hoKLTuvY$hT^h)^!AM1!?Cu$Pv49^D^1&-(7e#9l%$s*`Gy2coMP$mA z%tAQ?Wc{&FZp+}#Y4>1wB&Fb+)#O~c5L{TU3eN-TUs{z}j5BK6e>kZ`#5$P(VK;4D zb58SITr+Al#`skVVDZDp$Sd0!x(3;qmYUd)$WeCqFZWbQHV#+1oiO>1ou_D3`KU3b z_g!pK-L=uYPhmd`{ELzi;+m1^17vlJ{w#lory|#6fVN6&?-UF33PtS}T$7R0Y+Z-2<0<55&j1->u<1MZpFtl9GKUUVhN>1;lX;swlC=riHR9~i zJbSaKl0FqDP7JPWvJe};I%bR1XA-KHF|xFhPJ>f9&ljYK>Xl5jYZ+Y|ljRJRvVFw_ zXQ-zpEfP0(uDkSlz+GJaK=z0Qmofs)%Bh6+-_IBV|ZmED3?`%)^! zAF3L8e$KQL?b`Fooo;K;WVo7Cfy{Nd`+W0?f<}6h$424k!zaF&7X38kZao&V0}z7* zaw>cew_?szK?6(wSZ8exyAcn&P2Mv?N8o->1; z#~!Al(tI%{S@GkN-q+h7&4E>%Soc5)Qv8QjxM7 zK0y%iR?np2?1)d9Qm(JbWDD{@R(-$JbJkLF>yibfp<#Z8HqoO6a-s-p5!^;CCcf^` zInt_!sVb-Mf`QfZvcX}r%R2QsXp<(>q(LczeIje4+MyQN_9zxykSsD4c?tM;!*}ox zwdhYX@21VZLYqK|OM8&5HhRNIyu4NsD#8(VW;o*)$whZQr4_#%sAk&6KbyO~NQi9U9`s#H{wX5#kpS}}KK(5O(V`o6fF7rB~ z<3Qpk-?EAwOVz(VLjX&&H*!xxA~c$_Obn|By1qNnTp8cXbIuM`N|e!VfxQ*Uhws-| zIz)f|+}>B=aeeC3^F9mIGW^+HpzJ%`=A5!E!OfxKCzidOgl?*NpjS<;5b;>{A_o5n z3u~}n5Wyl^zC0ElIpn7(iOe`!l}-Da6ld@R^US^H%PT-Jpy3(v);ZdlXEA;{FAQ`wVxT-ueXFTd38)S6xw z=_}Gx1Y`6;BTQdL)B7;vue3soFD)P_I?we!npeDbPCBWcbGnhhFNq+o+%AC35|f0>Mzc zfizxqtrE*trZ>U1w21N}jh_rvIGF<1fCXrLn(kOnEaahJNaCLrc4CMwC4G#1>X$BK zl2}9tsxc^cm{5$56$KZvKn9!E*=9f2@M$cW#_LV|jb$I3Wg^6ENOki*QWq_EjkQH% z2hK59maiGvm@a|L#`mdU)E0SzJ&bRDW*?6R@SAt+Okr?-l5j>!PyOkvbKMD(h#o{K z3Ao_9L-Qhix%6^h5A?TGV)&MrWM;xSu=u$_OMz*bg0m8W#WN27M1~oFYw>L;ViT-c z``MFDQOxh#S6)-8;byxyi=tsXuS~q&)mOwfC2ks;(MC;9JNLq4r74Zo4QB(XJHfP#4u-vVXUCGRicQ0N&xhzeJkxuIg0A`~N|ZJqz@aCIIy6c!$B>^3v4Rp?JUbe(6xfrE zdUwFE8on9l;c;T*N{!C8d7G}9mKR+7niujE=J7G#j971}EPLg%Uh)i_dABNFZ7h)^ z(qBvOd1o_UmGn{h+2yy(j&6}^m7w8e*o1FfW`t{>5?VX8 z5|$(g_v_pQ+D_EI;gwljP2uP~!%W?8)_a#r{q5bkl? zfqG7ZKIx1!+q)pFK=j`2>?QuTm50_{(DOECa3c56D0FAW7F9UKv%0<(f zTbmrNPh&->PvjaoB|IUELwHX}w5l%;>vGn~FVI+av-BNzvi$lhS4cZ3N-<;anehx= zXMU;QIU))UTQnw>aj^5uu`zX_M?+sPwNeiv0;V8rX|&;MsJGe(m^`o7EL}9O-YzEV ztHr#u;!m=l3k)u75x^PXU1w>RZ1arapQmW7P4%iNJHPak6XA7lk;Gwr!M+>&Vx_;V z^!JzLfg7)rLiteXsT8cvE+(mjiHZT+ITM!Ax_+MFxlp9ON*;AJMth@PS^Zv~mjCwd zzTZEvDUnyd?zM0H_iJpv9rMYES=zIKcOA#3iO#^vhb~aKc4u~Mbn4mC$l27Ue za08ugi#0kRR7Y-$JP>&`!eg-rmZc(cmSRP+<17sdU=d47sd1>w^f=a#Z}XH==G!pF zwj){~JV!LKx9Z7Jr(Y;1Ebf==+DIBBWAe)%{8k1R^}6X0ffK$DS-Qan2FfMALpg18 zQ$r5iPO>IC$JxS>fnlCax&Zpzfe=0$D{S-(eI~W5eZGIcH^u7~I<-q&10c>Yz8sif z`o(b_rqc=yxRc}!sYWdtDxqLmGb9f&=}ND`6mw-#LewGBq|nNJ7Qs!ENgtiK}!2L~D8&}3ZZ-VYo&q*yv95LsU`w4_|A3Py+U z7XVqk(Uzr0oF$!!Q5inv7`f}$x53W4L;UjT4EhF?XyTG!x0Ax83aZX3PFFp7xZNx@9)+ zyzzW7VqVxYk2>*Xhn;u~+)T1>B$fWoKFOEIB_24APZ+=d4te@7#G zI$7$$KJhDw-1YlgBwIAKN2Ccog0Y~fgXe6ZH@MvJP9S_VIjpV8x;Ng_M!2t>0_(g zc0jEJ^o9HsXMxsA#MFMuTsWlKNyN<+b>sl$L3reBN%rsFDjmf;hKCDIluxrO5I;~g z&eT~}%YeJiHc+&QHk`NsK)eo1S;)`5uqe}=J+k+%hP>h>uX&x!)9$8u<%yqm)`b^K zZ@{j!>ZGErlYfxRniX2N?9)f5<+fkmAX}T7>t*^(n;Blxw}L<8Brt&d`az%w0dedZ z+FI5djTSm|9Sv#qxC)N0ZU9-m*^MMmB-F;Jg!=C+4UrB8D6{kQK%Ci&2)#)4IbFcjq@bM+}}xcJrue1G&w>raatnl)TdmYsCZgpmn0GkCaW zQefS@>-w*uY%-(fSJvxP3T7A~R54e{Z&IbBhX7zqzs`Q?BkQi8~I%Y0Y9Yl;&NruXbs&p$J=O+t0e%MU+7Mw?}BN*)<^IqQw~vWyJ; zq|2CqqhH9$&eKYLYLcM}P?1b_uiW~p`_jYLY*=;l@>Y+p+%xi&W&C}vnrA8;aKFOhijhS-EM9O#`Vh-C8<8|)cwDUjAqZGm83uc0dksXL{PggJ8E>f?AHy++7!u~8r_&Jq1LZER3CJGL z*#{vsBvHdNDrn*}xS#zDQytL_Fz%5;DUpf2BQmsTtuz`3$UgHqBf3M$9&8-gGN}2X z*Mrm-fPIOuk{>WK2sykRU20n&x!22gO7gUep8R~b-sV+EJ#RemsmGl9;&sO#MUZpn z9+7Z-tJXzFrM%=YLDo5W_kD8B#;){~vNSsDow3qR(UA_&R|@6HfFTtOQOH`tVnx@I z=*~T%NU>=}n`8|`+yFUnj$YeKZDc7HVx3@3>Lgoz3g>0nmutZ+LhG1gTG|Y^;pMP_ z0OdxAo3efzGbD`JjFBUN0}tPe4I+v7e4k`R4S~C{tT^;c=?}-GXYpcr;M(iinT0GK z`7X7uke9<4{D5AmZN)NzW&AeGMTJI7W8rAgCMREHJX1J<7sE9oqV9OjM2H>d8nxRA z4PW71)6_WMd(*{aTD83_UsqR93tl%v5k4b|prnNFN~JE=-H~e}@)=>o(PV#cn|Ce) zZhJ}yj+|~zfY9re*G(?U4@$J_ZpkcO$!U}=*VMrvK51K&giRO9B}tW`b&E1e;0svi zRVX$$+E-NHiyn||_q9ZA7)Ctrnj+?d5p!3(@T?1-@AZY0QK~k4S=_x(z#Z6MvMV@eGP@6Xi++TtmewKM@C-G=3#tJe$riw2AYFuFHDHP*H$DAVAvL*<> z#2wwdkjd}B^8jJCNrhSFS2W1j*g|PybVO_*_`!HlAjHVWgT%Z|JuX_`ExfRXdA(>- zU?`mxso2Gmj>37NX49Xz`i={TRS3jpEcipmCynOy3@D!%@T%7NedN+8{3US^B zOFGzE7JK^)nA7vc=H^qG)8uZ@PKZq{<9ean1c!Re@NgH@YYq5QG_uG|vIw||DXf@c zpn77{BD{ztF?vF$)y)YQ`uD2VfM>hDAiR&r#|F4}sp8=gSx)u3fMu5Q{X%w=wfWOw z{WmWU?3$9a){>!R{RFE5{`QvlzlYpxSJ3C{n$W^gJ#J^IVN2L(gTvQ7#wkEn)x*~@hLoJ-n4Llh zO)F*1t7BczOZ2Z%uN)X@$Y7>M5UEXeSC<=@2T^;yYMm&{@5Y*VYR26r3B$Cxz$=a& zbBcxye+F79d!E78GBg_DJZu;x8+=aAvr#rpy@vSC1r43CiOnVoAjF_6D&x4}lKycV zjnC$iF6-AUe*xL1&bH>yaf#_e4%AS9U<~`a6t0IM_L}UQ#XK);t=JE22e4T zSwJ*FZ9HPxDRPmH$>w6CQqPNU z`iRx*&OiE?4RD?^GT}*i-^0?=w_CEyP7=}=w{MkucB?UDLf+&_&Ecw`>OootMw4V+ zBfpKRwJ^{q1PKM+j9-nL4Fnl?4+{YXUGb(!vOwOIp)h$y#?t{OYh&|sAu!ivqk@UF z&6bxq4UtM2A>YrGC1cK1%CUBB=g`5JP}c#JVaq^ZbDPLfc4J&R>UA&@G*_15iau#f zjL5D%Bht*OCrY|}PMx&Slq82LFg|{AR+0H;t2pN4m1i#>at{UMS^J5rfqnpG6G@;^Daat`a`K6)cAed za3UwnfD##$ICBb~G;0rgGou}O=0z`jq0F;mUKsIN8&1Etw6p@6k<5&1y*Rg1W)5Ag zz?F@|+;-!wvS;sv^p||zc$5+_VGngm&4zB|Of(;up5jSqs2%fRiQx?Xv9h_4X zeAXQCJdij5Qgy|e1VVN=wdk?vUs4M%v((S3vTF*96~-Nt@nuM}0WBU41z{urB*xyp zu?%1&EsD;IHETdcGPSXxajP!*;lrig(p+^waqw+-%3jom1K;S0>ft&rUu8=r0!Dsj z#5!!mnr@T*!T4N|AWDAMbsp(e&{V)0CsJOYgSA%V={P$*iE&LiC`;ryx&73pUSL)e zH>x;blz}=lzK?OQEv7MGuxrYc`XcmWp~TfAHs=Z3Yb(z1xe`x zI3sueZnvC%(%Gl3s;ugld6XB=bt7h#=Dd^7KO4VcqP@mU(pyw?^r#cKKqVfLt8dyR zwIJt!BlD;Pd%RxK78BqMx^0y{y0|?0s7>gbfxyEOP z5!E{#>F*tu;ogSyuNahv?jDt*f;QA;Ms|zA=n39ArV+H*_+hot+2Q0RHwvZ)6CR+z z4ZUYRC}bWX;kI zGLMeAZp3Lhn?3aS^`{OqAD+=&vs#m({q*-Hgx~h%B1yt(t4Pk8M)_8f07fRCA1(lNG3q)uOacz{!LG2_ML9(WRSb_Qy=m zLTfke5R18Ajk?A;Pi(-m{FTA0DPgp2wdfuLVk(s-Z6my9NEy5fx+eU zoS4NrF|w5e6?`6$?0_IZO5_`3Q%&wCp@*)JN#!|p$e46S&>?GT6sQAxAcOcGN4ZkS z7wLneo_a}4r4HomF$baRx6raqJXtlyR#=vqxYx$D23?lhDjH_z*e~2+puxf6;yJ^K z)ojKOGSm&vlqZLwVxJb}!w+8vd_$(DG?cFHl&S7s>1Kv`<0tRGS8m^};cY%7lG#o&?3IOgq*SUR zr@elIl}66)2_g%L(}*=ogtisGN#X;W8PYE6%vdxNNk0Lh&>@=3`~%FrQqQDjK_UR+ ziXK~p-&h>z{J}1gBd0o~(HC`r0mRBMPxI-q!SiiUE6O8E%f+Wgi@YyRx(peSgCn11 z)4q>QMKq_yEh}qOVr?6Fj$H}(S%n}bjWVU@vXL?@wQ+1r!c7i_5W0cn;E(&PefxY( z3D-=Gxz1*f7DH;v6>;touA4?DlVh^>_*cnm-uW+5S@TNSG0~7k!4$dYZ6{lVI&s@^ z&htKXPjJQcGmPy8rI9wQJ2mYs^iESq00k$_;VmlCFxV?HYjTJ2 zlJ^S(PE9=#=qkKVLemRfAFxT)f)D`%14)5_m}iX!vn2^kF-U?e2c~7yuIpd*xzJ(F zoZ8^fR)`D$M8St5OoSnzn+DRic|Rtu4N%4ceEkf_1A$e=E}@pyIuF({EjMgY@42SN z1vSX5ED9(1y=O+pr6&^+*+qvH`;7H{;L)21qbaPH5hGNVsheT_yKPbr!C>yya6a*~ zJO_^+I!7a+V4s-K9Th8+kR0iW@hLg~;t$9ZpSMBwjQ^9I@znKFS$3LSwD>j|E~t-h z&nON)&5{*`@-VKId~=Tx5%j~zbw+nt8Zip6`m^B=A^GjTlME1gWSp~2+337Zc9KC84^Wu4N%w;3S<1EMwh@%a}q?(c0>|(+{5bU7MzKSJz!OC^Kh5 zUWdl~NzFNXwFcac4H3?AShba4VAN2%u%TdqagzNOL%|}a(FZI+1y0EWW_=(TmObfW zdKcXCKI$L0ZAP!Y5^Z(pIgTA6!kP;#$4*&0wK}Q|Ma%O1iIQS83Vdsd4=WC=Yw$aC64QBRam;ru4W5B{$Y}vGL7)yLxY2lk zbAyo**bFL*E~suvCYOf)amZY^tA<#uSLL|lFOXG7RpjsA^(y(n=YJ&M{pRas%`t1G zzUFj!>l@a~Og$jIv_;d)^ZR(NqbOl?LoA-sJBIAD$VVg3PQ%-WzM+T?O-~k;c$f^VxDre9?J?Xgpl-v9`j++5XD$lq!MCb`%Vjrp;v}^ zWsbmYR)sI4)CuaS~m;sFrQ|PG$LbZcFwUWX4;re1j0k!1ic54Q2=Pj>8N>) z5Zp7JEkqSo=hlcJXmO0p*vLNog&rC=5BcG2J=-D=6L7CVxXw*wut|nCadBG9W2l~& zLfee0dW~@2K*n+I*5KeXzZB1t*%9B9jZjWK^DMdj>K|$DoRK9f)=6KqL|Xbj2Quqr zz8L_M!h5RV9zjMwh~h8z$QRQYWRWY%6zylQ1bwL%QnP>Vt^U_?nT`cGpWsv z$g9Cw8%4}Wf*Y`2<4#-u9oXauhR4{7DR>w%l<)T;Ya8%$UXM3hb z5Bju;eUD<$j;vjK=z+ctvGJ|+9QK*+w$Rjb5!D~yCvvd#mAG;9kO>O0M4Uc z&_vZ}oZvj;Cb5?^FVk_63ngJMtkrN$T-IZlwn%R@a#_@uLA}HRLx&9x^Z)~)hR0?v ztY@se@wnpVF?nQtdC-UQY<3{Vf%dXtJ|Nu^Vflf0nDj!AAzh--&LBNMd=?fpJWGzu zFB|v?rW64+Y(P+h)Udo-*UwsvG(!DpJ7HZ_s7;k2x@&}nfGQR+9<*a7F_7^FJu-)z zc{Z~Mc{DZ%fN4%WxknPXEO8Bzl( z6oxdWT_@|08IY*aP!HEInxua3K5v|xV9K%{u4sqourH=oiLgBr)F}tV4l$fJ*;gjL zgKL;|n`)AD>FLR_hR|U;Dl0Nj)+y3^qj>_j2gk^wyGb|KmTr)34sFX(I4?q;?pe(| zA-I)e3CiP~Cyhbcd!(_aD<>a&#@RAYjyY|_YnC5+YHy_vbI7Dt*Cju_QJOvdQVdP6 zc=x8g^2lDj)wvu)IIF}8nMSc2S(hQ!a1BaD3=22!MWdXv4s$XR{XcR-gABc9_-hRp0f2R46HNz- z40aa)wz3m=!$_4pDUw3Zgx*?smBdX+!26UvC}y2fs|~g8B6by9tn$TB1wl)O{3kA zrGtma(~exrGp;s;Qag~R#at_-EDim)4X(3%+#&{(vTf=$f{;Kv&RhNtVS2q5p4(u3 z0B$r+jfi3kqY?dd+;oamQNI$GVI7h z_wHp6FQ5|`7r4j(Y63Am$~ZvNLY4~=`7+RFdSe7;R8$I?yJ3-MoeWHi<1-tq^K!5m zh#U^ZL^uXrpt3%W1qyanK)D|4P@*wVoK17KSWI&Y@9bG856U(k%1|hIaMp0d4FzD% z@^FkDL^yMNMkSbLmfYbm@Ek!NNtz1cS@S=HR}n4(Y0i2!8#wECUD?Yv1`*T!TH=q< zNC6}fmB;TfHlKh!!~oE|)CAYjE1kx!S;EBx<)kLrWUpj%u^e^e(X!{je)YIjIp)aK za`c+zGS;0|pt&WRH%>{VWJ(%%Ey815lh}`4UD!8(37Z?6{u`8>#bYIZiWJC%MhY^m z&6fm@(TaP-2G-d)S>~~1jpb!`q`+5a+)9ZQV-QvY*uscO98PF3a11#pdm#7b@SULJ z(hQ&YKtV<&(oK76$8K4>V*T1>%a+XxaBHp_F@-gbSa<9Om~*|EDk=>F*(%Qv1hrV!5#NzOtXvX`)edd3i0j^=sH~WhhI)jwN|qK* z1fdrUn4Dc;DC&rfenR2*LsKK4_96#7e4b+Ir7*w zvi-o_a_WU=$yGP~O7cB7%cdXxP#)XWlrUdpeqB$>+^B>dV|Atq==4f)q0w^>WgCK(M1Y>6YN&{3>9c_-j&8;#C2gvZ~c`5ML*H>meTzun3qrDJ}F>J}$OqgRQ z2?;74jmA(n_FWmVO;Aw5$pjN5s(K&FlFxKx_m*9Xwy(&q9bA00%!6YthtosrR;(L9 z)H9!ta(haVvp)g*gMmeQecJ$#?e^RPk@WOCFFcivjkd->4DBfF|8i?A|zme zNMdor%T2^(hE$KGRh+~f#wRVgqRxbB@cKeJ8wS&y5B&#qOlu@WvM zBTi@yH%S<_w-ZBC3xN$BLkR6TwMi&~Y)w|MR0I!d^iSPn)Z=t?0q$!eG}iB3(Q;PQ zV5%Vu<-6=aN)spE2bA4))tT~T&P4yvpb!0P-=c<`)8ZcRkl{D^I6~o!m|($F(!*wf zOr|2+cHbet`R0%1!|(f%eDw#nO0n`{DQ)_d6dtR|XFq+j^!5qcI%CQVH5o}jMWq|% znX|I=htwdkF*N}8IIbM|yx*aU3J1QYCY{@+u)WaBW;F`25w97SuWMAMpjv-k(~54& z<_UmVH3jZkPSe|GgNsEdMFqy7nTDD?1P!p!VN5Ev1gNKA!zDtmc*e;7M4mJ9g$AojD+eDaHM-T%66?0dxa9cAZ|X@IP|{; zWMo+5WqUXlIh7=GoM3>#V7UM#pTLQ*<)y6uMz>Nz4-o6(EitS{|1s!*9L)kyENBz! zh5lqVX|n_bWA+G0b-57mTC$xy>v4r74)RfyR+NR>*bt{7A+>xKo~d^7CbK+bz-v zSIN8o72)iJ1PX9PRN1sSQ;>593l3=qSYc4~2nZ&&$X>%W;&XjHpQJ<2iw%}DhdD|$ z;R|-oI{a`p<$(Lr)Bd6XEe2Y|wc1LU{#l}Fv2F55EZfTqer8yF$8-SCb z3XQI&&@)-3rZ+5w?uewjBU!uh$a$gkF=vfR^I5-C0y49JENr(ppqPZ&1f-|v9v-Cbw#GRutSz) zOam)};bp#WJ+MiU^M6>1ay8#B>y}o(MDu>1qM`d0r0EZ8VxoMWV@$^M>@bXiZWK1M zG@{`P=M@*|D;LRxOnC!@)^bUM-vI;_>Q(Ck?Zmp6HSg?nbo1%%(1l+jvYZnupJn)7 zIW9zaJn){O1J)9U0DC6XZt9bWxnXL3HIjN0PPgJhx6O>f^4 zd1T@q*>dGg(o+n`swzTFC9{a3x?X7-Dm}SpvyQ{mD5fF%t0UI4VW1^FC+Jgq6tK&h z=k`k0B8X^7OHA1D8WaSu9xp^K$Z5M!SSgmIucVcOt{Q9D$Mh#d(Sba15om&e1K-wF zfHVlCnYM1=Nf0wC$t!ZsA{sz5KX$#(8h5B?-@YS~fuX)tG7pY98%{48ShT*USR`N+ zM;h$Z9+O68NEd?Tv7@_o$bqJBk~_NMM&cpnZz%jDFa!k>0(qF_3#WqmE?f^Jbc7PH zB}e8runRe5hqc#~M0qs8v$M$yS-u+dridVOG^d8h1vWw0m~2=pLhK5MYiF(Lo&CGU zJ>rbvxXn7I39#EB^1!KW!s8v#FffV}=84#pY8u8iVN~!Y(9Y^8#MFRLyFRBjCCkgK5k67i1TLD?Ct^xr_oh_K>&4W)JA0Gp+_7l^MIN>7f+DL^orr- zt8xV`9Vz!Stsq|S<)X9*qwG-=14F@Y%7o+D+C5;ZZp zTM&K)9z5Yx+|P)PaxH#L4SiecCQU})^>C8!p15f_NqCTx`8xq(8c@86qI5Ur!{p@!TT8<%A( z28qhUKwuOweAGs<>5Reiq^4mFuLd$?iTv=Q=~C-!@Nb`m9}UNS6Ob?3FO1@_hBEK}cqlM>UgxwO=%jSOb5+5v7Q1vP71B-Xm-*7_EZn$S2Te z(<(ZYC-MmJ1rAm2#y(3^=rl`x8`Z+msofbF>em{6V~TP>!fq=)D~_x+(hW!)V4Lx? z6B}uRzeP!xxjWEm>Wn2tc90=jp_Z4X@MDkelEa1$TeGTCsmL5Z=AscZ2wgn1e03Zf zRSyM$Y;%{CaR5H26=I^pV$yIHZoxGI#NPvnjyN8WUNli6AHy- zYGNYVAdR%?u`{l7slz6DQ-Jh27m8>snitsct_!ukU1ox1GBRC|6>Iw?pY!NR+hTK& zIk|#tq?EnQs1Yw#lSZhHuCD%IhI6Ch)FgRlk?0Z`Xbn!L;1D^_N-w4WVw&0rjWI+W zC7`_DAdps8uZ(LXM1qa^R*@MRB*(_^LPgfGB*Jo)O}0q+GvJMJbMrhaA?EeHP%>-H zmi5qGhFUgTMl;+zkh);_UAy7Qz_Oy0+KP*0GK?>PNzBB(PQky~<>SnTM1gfh2VK_LrNapx4S3`y3lA-0xaqDUwsPE|F=+m2@ zcPV@_F7d=}E*uyyTGn8UxB(9w zn(g~Vz0%Y!w0xq7D$)S-2B+%r8nsb5>X755Skm%QAx}0H6hTM`K~o2{xeR1uEmc3O zp*d^EN8zRH1Y+9`=n>-2zDqeK6W0e%(E_nCq^1$TP#U~zgq#G<^!sEeaF5g`P;8-( zVR~6N%NFMuV^eHeFSHXu=(0ASvg;~C?_THTMG#W26;R_A#PblzXqtd?2P-TLH1CIc zreCKT2-sEZE%yecGhLJeyS9s;D;QzJ^EvYv=|v-j11%8C;A9MjMqP5U6Xxg|K_q#W z>+l(|YoN#~Qm!{#CPsHirY9dR>**PmIeyGlBkox;w6wRYcGyLWn}*ZfQbxR?b@r%k z@q72Fr^*Cw_*s`7I3(D+5u{OSWhHbMRmD7vd69_YJ>e_iMZxSs*a;mhfLZ`&`n+iZ zDp&v!xGh*UnTDNup^wcJ9ASlK1JvJ|(j%^)Y3BNziADbE*5%hDXrAPn_ zu@I=NGiv^zLglBmMOsTshMuDdO z9(0l+`^KJ695lKA-PFiKfw*3qh2`l4jZ}a z0-II*z_)Gfk!8!WvSitsLuHO1bJB?O`FwG(w=W-2KvE5-t2ei{lRgVaJaa(yj?|<- z6EpPOpA0a6#G*wby$t{_9h^s|M=b^> z=H5vy6mD~bXUK($IxZz^H6NVO4Fsa|DCcyk*_@gL3_@T*2=6AJuWZ=u5mbd zhn}v8_CT*`>KI~CLW4~RTHa~RHvOINIrIeyGZBd!z*<#KsZHtHmBN)pr#XlPT`v@*-b z(+C>O#`fU?O-&84N;J~6p3#6n?I?gRUTDk$&pK(K?12Tzai#2d0eeT0T+LzWef4i> zQg0y4}lwo<^ z3GQYr2h|Tn2p#)Y?m?=6oG?c@Un9ui2pPEq1g?DYt8LbUX;WHF7ocB(#1Ly30Xh#L z3!yP)5u*_U)KaD+ew&^bp9NA!z;s6eH$NmJ%f`AS%&~zoU=u)S%i-XjiQADF3pCpg znN~1HNE7m_5fx3No2llMVyetvB053!4~F4v|D&mxSVdF{V^vK2;hz zCDfGVFk3@iral>fm4PDOk(La%C7A!USmyXKCyltAFD);XdOdWiboAb4YGaZg*0ND( zK%w87kxW(>ybE(v&i(;NC7kMjTN4J>t->Ntnvm#$op%-}Lfx@RdYfnCL}pTsDP z$eUwOIuXip+)2Vtn=A*6H>v6fAO?9ULOAU9Bod&}Urb2@08BPDEl1Rf+2I78A=hb> z(7Y3d`fT8!ZkIIzVB~OLxi#=0I@KM*(Qn5xu~EWHovCk;;g^J)5nS_ zBu1pMVeZE1_StpT;rTMU;q=3dlq)6K_vjGh|{p2KESP0B1qVso>B^CjM&ST`5o+{JQ!Q0DkCN5kpjs(h&B5Y2~BcyDwx z?5ggg7sN3+azOTtOi5oZVH1DoS;+^UG3%Lf7V523wa}ant#nxkuTd^XXuRn9u|{?4 znME#(95)w4t|2~Qi(Z$?kQ&aaaX=r#e7-KGAkWaTs|j8qt&@X`#4-^R1i0ITZn)n{h37QEHbzmo(W`6|>dR8x*;tdTqdndUUu)=txqt53uq}>b|~Sx zPf}=)-BYto|Gr@qkphgk?{&^+Mrm!FYNlNdQIAO&Nl;r)fUUQrGPI~q=J+uujkuW0 z_d-J&kbkY6kxDozGPueuSd2BTO4O>;};zzCOS)*#uQ-MHHPHQwcEHHHO%)|xBIypUf^PN*&Ib!undG4z}Ctv-W7s{tz zeVF{s*Q;{#efP`iN+gppc)zI|N8?f09mTaKWM7?N9_r7tBUs?wF&ZUgR1mP14)lCR zLu2r*GvqD`si!96+i`iMm3Vlr2)#YdiD35@V(OTKy^S0a5xMVJD+a3owyAn7fo^_7TN0f zV+&@NhRz&W?0yi?WRwuF^%GkH>7Y*J5Xz?=KTj4|nivs?^<|Xq+70RJ8(i?j|64~8 zd@0DEgJ?xzPwpo{@yy&8O?1QfGVHOuV*uQ$zS193pl zj990!#U1$8HN#r5pFbD{pyX0!q~P;>YK^80Vx z^bHN_cPul!<#^S^_|No|4D%b@%#ajtc2W`^>_ujKW|AJP`(qpCs)qy#!dO0VJxVKR34Vahc z=|yctXIpH#KRD}Zd=I5=Qg>+~_?AuTr1V8Zkwfmv*zqZQm)b;mBF6-!j22G{B2nWk zJC-m81P4417CyqvS%pO+zXFid95xG&XMx04fL$uL3gz`>r zI>il%IvDEFQM(>wDB9xpp^$unYM42+Z4Ul)X zxqAg;G_iBYA^^(9l2{S5`v@p|$uoffd`|#;zM~*gaWn0ZQ8t+jGW5qp#F(hO)s4Y@ z#^eUjClOh+#l#V^dj6xy5FgKy%9v#si~4xhN#YJ^O*SNPMVJShTzkMFah`9JC=dzE zc>U7g1jedu3P?XZlM5o*Cbd~r)!MY2blQos^|6i8jzTvfL$9@0ae8Gotpb}8Ql$up zxC9LULsDf+>?LlqO|@Z|2>Q$sF#$QpaCd)-KpcJ=ZQW42yr6S>QsUgqiL-@bm)tkHnzv);~1P}AGm zL*NS!7C8Yiu#qLHc}O6l;0B}49JBeg%LNcpp|N9vYdD+Kydbk)Hzg1TfO;j~54l&z z51DIE=^}!+Fxr2H=yPCxg5ccP=stPFbDt}NOHY)EYcG-a{ncCLEuY;eJ>f3NXA4x$ zWNV{tRhaY`dZvPb_hhfIm~b9E37BZeNh=;&7XzZM9PbJx4@Gk;L7fA;6G{`sjzl5s zvxbq`urY+iJ?2?`Q|p9b8y~sBu_@E(kcG*BvD*1{#nN>TNfvaG7NkLDU|zp4ldu*LyxCesP)fE?FWE-*lby_u5DtY^Y`Ru%yqX z)*J)x3lXM--@vr9T2wggv6P7-hXJ+65P`70k=HLa+AC5Ny-u}>8CkJrS^m&N56#OQ zKIWtmTj#B3WIbIN)pkkp14~^z6GJ?p3C$PbsNmN@|1xU(J3 zR&qRLG*Ha)g#F0P`NI@xH#SA(v4 zMYjEA940`d){ER27Z`};@E~F2D1)1kzI2-TD2h`lCn|ab>Hq>x6MPF@!-Qv%5oTkd z-!};u*|1s+P>}WZ2}Uwqb{T>6(V)0JRY7@#Cs$cg_~53PUp zkUI;os)@3OqR~OtJ*uJAG-sPKG;6!zTlhg6BD$9X$9@VuLq}oIMa`LEko~%VN0I?) z_{PBn5Y=S(tP4NzOe~({k1WwmER2Lx6JmN;wkxVZU^9S=hQ9*QV^YgUpzi_s#iD^3 zL0}K`L{5ibtFq7hJf;$7%F+)&x5=5htQqQ;OW*Mg`QkskUA}nfp#1nMk;|{YLxu(` zG=3Nv8C}vn2)q&4OHG=H$h)3%i2g=Da3e(%4U;PlSZa_vj;l4Q#?^EU26X?HKgT4-p!8K{w-bmGY%0(zvo9Iu>WO_*7)7`oQ*@w8B@pt#(cX#nKWKV$HdBUW zo;J&FU6M4gRZqr4>^_^F+0=t>EP6%*BT?@2{6%v7nJ3A8*Zx|v7@~&q7dLQh+Bp+P zOl_mc_)Ve!*u1LjEQ|PV1wUryjC?;~vk1sQIo_+R){b#56k>qdNfc>~Skt!YDVdy{ zTrlGQ)x*;S7K)JoCK3f9ChJ-n$++$z@^eF}cWp3Plp4K|)9n=IEOT~nO4_2Z_0M#V zkyC*fkNRvWnO1L7V=f0xDR#r+dg`rDN0I_;(2B8?Jgf_W`n@!wl*ENi-%X>cbHTmW@z9fJ7lyP}*>{R*K z5ATyj!#yOSfIFO$?2uzOmQg7qiClt#v?Af`D3h>33KDpBz2K1n3|PSt*{pLx)4<$V!~iIkD~SJ@!>fsmXOl>2c)AKv1DRmN}h1h#WJ%0UfH&F zzZ7y=*J&jtHh{)W3e+cD9S|1)_(&!g`nfss)YL{S8pts32JnYAN^G)G(#KjiMFkQo zr**1mjwl9&LSfE|XW*EdMy&Q1X22NIQimGxOiK+`K@B@}A8$=-4pw%fFu`lK{oU+!h!$s1>0>e#BtOs}2V*|uO5LjpEWxn0CkZlezy!kA&5&AYCu;7^p z0jDWafzdV|yca+npqK1#9qup`OgL06b=_Ok(MqkAFlIAF!ZgDaI${}5 zDn#H-yxoLxQHw`ujstEWkArJPzPVk$+2#tA)oemV!bXe0bMvFX3geWBgr1DV5-rKW zSP?1Z{P>_~U|TGl2f&z6$YFqnhz$~Ag8&sHHhq*_ZQhfbW(_@+HL~W2m2%}zej%lS zMP$r%bz?-TLP;U9k#)cZFialhEnot`MsROi5c+d6wbtGlvu2)w7y@giFf;;@9S!X$0qxgC&O9w)&kWIN z65GkrifFK1O0#MhtGOSBq2Z=>$Q+9J@7ei1WM7F%%pp&TT{#BfFv~NsHL>HpC_Td( zWsXLQupG$DxWYA%{(&b&ofSN7&LvKbV~mRE?)`h@eV6{3?2Xq+y6JuL+~+=DF8$E2 z^}9`g@IsHz_PV4hWlV_hA}6Znu{1;F4Cqv+=J}ZmbJlW)_3eU0?wX}6^&pQQ2&M_- zp+tukOpnBiRHoEO5u&m=fNU!pI&Kt7k1c{gy!&*qFY+cB`r^8y#to+rK>=9gpf^Hl zDmRJL28}1ww1Uj;4E3zXl0gzf3dR;UMN*_IK$TP9sH9-j0S_6Ql&4?(9J&9Yo25EB zDW$Mu^RGOUAhJ{e(!UkH6Ve9Oj@fcy<_-2$=$c?qVjIvkg!O=Xj?f$9YP!@iYdK{Q zA?O+C+GZ<81w;xUrDU+Cn2=i`sTCuaaWo0)Y_Xw?tlpC=mPhGDfsXp-5b=|P20S;6e!{S0z z9&(K2Ap65HG>%6f<}=dY@6Bm%JSUA<^ArkEbwSEd&>AH`RiuEr3;P1n2LtgP z4o>9^+-S|au^FVU>Y1VJk7txm5*OMu4AdrD)Kt{)S~req3h}9r(9m*pdQwh1e3d-& zm0yx?f8o{g#YII%TZk?1`wvE)QLQ^r2ro`jZ9*g15pIFZTbWgVTcuYaR6BW z1G_aTgp1|u=U*g0`N6*^j=5N)E~`Gkz!PrpS|`_X;q0VIHn^mwh)Do32}uSqv80$2 z8(UhZucZ(`@L7KbE&`lEsK6PzbpnEmiTU~EU?H6T-#OAGj3^QKTpjMdWLHT(IZ}0Xmc0V}^ zXO?}usoO|eG@gz=uaw&4L@UL#c-`_COQYvni$fZBL(5Jcn&)B2o=sz5xQ%f$NkSqA zFoPa7_K3N-XEes7BSyXH(ikCco8v?V6JNl&0&GH4LhM`Wf!saMakL$oPM}h%b=kPb z8Yc9b9T;!P^WXS(dF0m1W%EP3q^Ds0-wDCWyz2$8GrjR$69vTKffp1Z*e3=YX7!w{ zQy5VO`0`+aHJLJTLsV2cAgJ*qowCMEHKq!oasbv%_pVDK|ES^zoJxJsa?QRC+bRU&OR zZq=*Ecvr*8>R$QShrcY}zWitM+#_$1(d2ab=;d3r4&Hyzqay_6WCx@IK5{b%`WaQS zU#4lO2%n8^iRlxDPFp_iF-73aVYFRB>5+8Hl;=F?O>)CQSUpV@4O8R;w@Fa%p^)=UKN_kDgEH+0}zdLU9uJ09TaZeQIT`kR3z;H%NeD9tWLe zY4&MsQ3dvcFlbBTz&3f-(_gQTJSM;X#lOiR%X%2Pr>r-N(MOTaBqeSt5V&Im!O$UM z1jM0jx@p(aA$oS7YAhi?+oym*Ofakk*%+be3_sNIf@e#S_u}F>{|CpTl^jFEHe|v-Uh52@}>*>9bAK=&600CGUK$2jeIaG&FoJ1u6X39OMSHPHMwY!Y4YBYO5kbzWYCu9bw6QO4dImN*+ykg~(rZFZ zLp^s!Luk-JyWp#HLkd{3s*diG!%us?obaR*zP{GExtEBp?2ajm8N)tDoU-wqnOo$_O)))Ko+YU+QQ(3fv75*an-xSP*v)+s z>L>eba@fCrr@Z;a&z5AxQ)JWCuaXzP_673#58oyet(sIyAzK=~)N0NM=_d#}b(!0l z(Ru`OV3Zj4h6Nb2<zyl*?kB-n-dMguTD(LvZG%i7rgX|@`b;Br+ATmYPLi)Ivap7@5z9MzhR*F+RroP zv8m8)LU~A)#3`GY*g}pC9bJs>Aydwf4A0R&*_;AVL*&+}-LtG-A56z=cLpTx)tId_ z(UdvNo5nFWJ#n)+QERk#lfa@%a%zyf?$vc`GlS!mhsv1dPuM|Q6c@LK^wgDmK&wPw zF>V~nCIwCx47j6biIjr5RVA`L!%B1B781qXVtQ!=dhm?M9Z`Om(Yy^reIb1_WYYyf zCw9TuR7Ca?a|~&QpIuDAl8R+ye7`*XjFaTdr+rj@`K9N}C*S=n`Ow#=<=(B^Wl1ID zx~qH}lAc;foKf#ykBeMB(8WIp_f5D8(}YM##!f`0b)Ui+Io%?=A;0f z0C0H>*E>uefa}NXM{W@{<|GYvF&WLW<)V#BI&D)JQWKd27}cwxG{WUPRX>X4X=i7z zg>?vXWD0Nxj%aZJozOS8tPG_qaD~4|{E3I8u;w}P@;ARwzW=#*%GiG0I(rszgDr6b z?sCfFjPx?}O%dTFtW?v><2zvP71Aby+AR=hPXk%QPiGgqomDM4aVK2kNbh>4RXZnvHW-Xd4H7G0@o!W<=`dX1xL;(^v41YFdFKn{>wohX zvU~fK3=Q`(WX6UF8K$-y{Q|p(hfgTJ7E=t5fFp$U6p0243z1JqCYJt9V~jAdCWtth z9c^po3mgTJMCvAcc$6jbwPxO@_p~5OGzuI&pgGVSKjx$n*ITWzX0w)JG-+>97gVud zrdp`CTWaEi&84Lpi~uF!9lA|oR6>|;gG^b)BSTZQ@O3dP(^{zSLP1Ickci)=cP6)5 zy%s_{pXg`EIZcrRrEr;07O`1PHf;jAFNTd%KprGMYHxKI%7Vp(P;;yuN>4N@@BPU4 z6>w}rc>_CE|N|B|an4Yc z6C?7`_y42(^tuP-oYMEC|J2vY`@VIj6njzHuo`K{seV9Aoit6)J1A{K*_zbqnPD0` zZ*3D5GL9KWNY_Oo^e#@69tb^joFSBu_bkJQf(b&>K5An74EhWF9tf*VgwXnc5`H%T zeaMdyzM`j?I@)4AyTAmpK}0_fZnz25`Hn+{_ReYRU-oj07XrU+iXCVH1dh?zCFA=& zdD?6LMozzAmHhQ(uaU7`6S5eDjyPqgER;I(NzkEMN@Da;5H_;R)gwk!sWnZSL9@;q znPhEh=YljMNt#5|1C64hAZ6&>P7Ld4r&dWoa^`FJj#_&m)byZ7z4GMLUYX;^+{}sF z?WysZ{kpBA@!OYjUqv2yWShv;ZZqRWYh~rqoYcA=K@<+mcC}L6ICT85KQ=WW2x#S~ zVzVG(kZQ;qo3T0~uRzSnh`yUA1j*UZ<#d###WPScLfcy$u-@E?gM(MkBwq|+C8bjH z%3b>viGK5?iUzNi;%%>xb2gkS&;8)7ETI(hdDj-{hLsWB?YJ_MFrP05rUTs*)Ts%T zxPD=1M`OV&w)Dc7&kLj< z<65zW0onE}Soc`-7Gus49)rMuMH=j$f|2R9?vSZfuq{U2TT`#MHI&-yWHwVExk+YZ z{{c1DmCum(fBs*jP~0pZe*0V0aC#-zzl0r2*i^BF z8DqC)v$t>Il~-iQiclQGz~DWgT0t#n&(LX3L*RU**y@{NQzcOQW%D_tV(>efD8wQG z#L@D7(DbNqjk*kP zNvmTG0-{+0d>)GL zxl#n^l&0?7ruQ=?2%q_7mgS9KO2Uw=w6^sliJ=n*3GS?moSYW0Lgh+2$wt5wZ?|S z7E*2nO?_>dNB}%=3t$#YQJm~7Wv5y~p?WaZ^nI7A9lB)ka=B-8uXHDO>m@%`5cC%Ex?^hz07z{BAVU9JiwiVhQVr3b=h=)PGzp}x zIX@*M$v06v-{W+GII#wM3haqB?Q<#v3?w##MebK*DaT4L6v%aXDW~FUJXdd2WuTDA zdp`O@`TReAOg{0{J#zK6OXa)2xm}ho>Lo82-X>;;j>!c<2MgXEVQL$)F#0`j;P^ANVD zR41`1i~;qreag1NShKO_(pqx`U!A?W`rYt(IYoc7M1Kne)<~K}&Mv00lGo5QA*-gL z;H3V&rKP-;r^!VZKTTF1x=7lsZSwuE{e^72dy5P&TPg!3Uu*(W%2BS6F=7b|0{7_B z@-y7HppXKviP^try-B9$X=7M{=#x^3;2j#-dcXUEDZQU1V(Z4k3miSS$j>NJd{3h{ z&5uX5e2BD!ec*cCFkNK%%8Fi(iQ440y$58DA9J?ZdDqCEZH?xHVo`ZTa);DI^-68y zT~a*lB0=NZ;L=4hm`>=;9o7)BOHc^yaLCb`q}`dgGLr9R3$z)22Ck9ai1sA$qnk;Kxzp8-{NS_Slq-IBqg-<2O)_0y zFCY7%0$F{1+(1C{hj1T+?%=g;pt)&2d#UB)$kjn$G~F+uz=4OR4S0QY9-#~rHyH}D z8tr6Js_G1@$tDz^kX-pA12sk6Tn%tR&VJ)BNOSq`zZEaYqe!yfz@q zmz*uF=|`p6+%K7&Zc;e_N}6#J6KGOMz>nKfP7=GekzSXs0(6CCvf_{pvf_y2<v{Q{Cs^qK}H5RhT(YL@9p zh?1j16FqBI$fk)0_D_k-$Q(cBtPxMmOgua?Hlk?dYFWLwPxgDm^4PX*GAvdrUUkG; ztrdrIKwV`nu%6e5;E9-~lV=*niPORAS1$rXVfg6ryc@k=5Y{%OsOYiQzZPQruW(>5o3gp_DZ*=6iZJ z5dj{z->)&}1G8*eODh@2ABLebErt>XzfYu_L!UHSb*&66kvF{cGjjA{nx~J%a{rbc zQai9un)Qa%YIT`uHzeP!>Ny88P+2bhr9LV5F3}KKq`YWIhWjI#Y)(ql+AeqBafRG> z+nq8!-jRxir^}WvH)Rw`>16qPJ%ARL>2BE=8+1Xr?k`+>(Q*^6wr@B>o~clYAQVLW z5P_jANaarYbxU_3l@tWlN6czE6ksr~Nj)+2wE&Pcl0g{^M)W$DxF#^o67Pcn^ttR( z*}e7W$cN`N5gZzSzv5^+4YCv44=!$G#=+f7cbV@`&}ad|*h8 zb&V`NWVxmSgOb%WMlf?W6LJ7r5Kl_lzE7&Hj_g*0|LwLN`rqyPH#NNCQppz=N$)Va zhdNfvo&zl z%GA%crUr`Sy8-BhV1{D&KF81wN+qarvkTePW|Yx5MkJ7vHHU=q`yDfn$~-vctPxK) z8smG$cD2_Zc4{tH3N*Z1Bac4zpl}`NS?5=+ki(Z3XcyF7R8*);jujd5nBT#A#MMFMFT4`Fa`NHgWvY~A#Cqd&Hq>(9s;-p7D zFz|pG_1egr6Am+1G~AovAo7Wky1eP_{~-1KzmzY2{@b#8*%I0N;3nCXJ|r{U>!s6F zxT~m}SWuC24h%PqbZS$YKicp#2^8qc_2^@PZn}Mx$jy=o)nsKCn`}$3IU*ox=Tm&J z&9J`i+EIE5tZ_ans|z7@uoKC;f*(4sa-Pv*Q-WD2XXyr)7+0>>AAx2}QK%k&7QU*)EV?KKG2NVFuB+wZ>Z4w(nXTpcowW7p=b5ADol6x;|~ zvg*(cvUU52BnKWegu3TYIs2qF3S3s%+r!>rGIZ4A#v#Kg)NBC;Rk`~n^a2Rj5W0q} z3u2~G4@)$Q^at#nh>Im}-Z+V^q$DQa;yI0CES!edE4!wh%0PKBU?CP*^u%t|?p5z@irq$AJvd1aWn zgAEp9dN8l$>+IGYk>v;z8 zCj_dmf9qeoR$AjN*|dGrW|;@aTs2}gCOx`i(<6W!Itrj1y>^}4e?WKbNA7peD9VZf z&l(!2HyyiiXE7%mdSa99yKbDQ1#=eXfDcnHzpIp9UuG~t<` z04R*CQ2N$agL<#^HHX|NCNzAHT-%-Ldt^z{2pz?f{lk9Z%4tQ41!g?c-QqY_QZe$f zFCC<3f=Bk*ZPa1TiRi%7+;89bJ~`*)=gIkJA0nUmGk~o@k3o5frKgVOf@OMlPGPPekTr`>keC12pUc<2_?Hw@@5!Y$ z7g%38ofMdcfC38iJ{6nIL^&MJ|F!9mzy-jr%K1$i4JR^+eeWColg7hHjiQQ9{pT;MoICjWNf*f*v`90X@&UqTDE0p#VXaj64i{>!cM^ zIZ4f=jbG5ALT64aRiQ`#1pNGctoAn{bf_qMW$Ai(Wc#KA)oOK0=D{(S!)e(+zW1K# zsv@0w)7Gq9F0K4wa?jOQsSVe8QM&76l;x5F=0Cj z1US)k8cAT?H`pnE+8n4$L`FVjN~PGk}DG$HaPTSnq`~RMo(z97&<7;W|rB zzLm15dQG*<7ISu(HfITYHl{|1z=o~^I%J7O9KRU3Fv>JGj65O(tEC8Yr@Ki0>^+~A zfBNQSvgOfTGSE|?fh2CyAv`Ehbq*M#|BU(htf{-g8wG(VsgohvUylRoo&ojGu)!ox z4;eW?3mkOt&Rgi#LW2p+%0~^n#Hb>oH}6vE1EdUWA|;J@ip=RvJ_#UT2g;m~>tSuY zMhT=g<&wlrzpzvzPxRd;i3kvJA7#F-0iLe!xGoTw&#~<>)Y|yEwTonI?~X@AWKOGG z&K`5xhy(#fxpN5AtldD|t=kavAyvrILoq*Bas;5gDTkT-l%8fUwKOzhtCtS6V#5mIa1 zw;4_y=EEIVuPn}Tys7&fu~iU;NzQWG;QQtIE$ftljVKY6WhYk18Zg*YM36YAc$%8i zdCJ)Mx(Rm1Yx2%_enD>e!&l_?Yp;{a@LFO4AjWvEVFW*Y!6Z|a68Py}mZh&GiQTk@ zh%K5P>*ZPIl_kGUgQ4~{Cs%sh5Rm(4IoCN$AT6c9V28{&d@mab%P|?;GGWXFw!|77 zx}K?+Caml0_2RgSl=@h>Q&4#k&?v<^u+X)HTJnqng&wWnr#3itY{=B2T!#b<5dehm zQFlj7kk77>-a|vV;SRkhcFgJN4>;zs5#!=*dvMGB+X^`if$~k+aLlQ4)xG;9qG+Ca znxV7g^b=P~p)+m^k1w(Xm~ko?SUfe|`#B#M%Y%cc)hCDMaj z6N?sk7YOxG!qD(aj#{@`{`{5il`U7kRsQ;0Z<3Gy(vv?t_=p_R=SdB{%$_w0j3)g& zp8^H+gqsO?Uzi1)qXHGk6*HWJ+YuWD3gd*RJ!u>e32-`FAUWi8(GB|3R!63QL7<<} z=h$co8ylF9(r|_OY@*=^N@zw>gom>UjtBPbmZ!h|t1=TmDBt-V0fvb?p3Xi-*>ZHhYM<#{~wQJ^Y%>-#hr$ReswwXn4{(X z$%2gB`8)S;DyvX~j5`dYxe)XQO~hsE5fw3UJ1?@CxN*P+3G(8TgiNiP=EDdUDe5jp z+@NkWy@$uJ9628r_K4=eultLSOZ?z{^1}C=E)PCdlCS>c8p-!BA!QNlA-oUH1n4W4 zAlwxCcC8WLr{N}Ik~uY^=CKR)Ln5{48HNlHC27gJ3h31k4$o+KiSx)2-!@~zMuUcX zp1Zp$FfwHPr66Gr-Ar;uRMF4aGrC`%eBqnqh_$hN@)PfszC|m=Mu;0h1T zW7}eup=*|G-q<0W5bB$ela4xEP98o{Y6Er2Z+O1^?T5Z2{XIF>N#REzMi64C8;V|@ zt8O|uAB3uCG(Z^GW(mdyp`*+si3zv$s3+zyG1r)Z92Vg=CP*Mk==Z8D!$75^MRu8Q zk~%=Z6DwI^(N}cC!uT`mzzSG`L9@cl%zim+o#yYac#(YjGjEhqp-&CnLQpi*I3;xA*bA_Z!S`FLOHj(DwS=54tS0#r%!_BqJ zaJEAZJ3u;$8UV0kb4KKH>A-+1kIK?|J&Fc~A>4MnaG#*24U*3|iD7Jx9G(Vm&orUP zd&H?3$+ScAp}N`7`(I`caU7Lo{VD5Y>!bHRtTE4|%#&lTdt!NPWY_OEJ@#M%X`Yo! zGBUjCT)F?|8%1{BK%-r9;_>o?Ln@MVBQ6eMBSXN&1F{1`J>-Z}iG_oiP}~9)f*jb3 zJAsq-yPHLpJnFF%n)Qcq7h-LK!hsdTIZk5}&PDp=mLA{|zqbutI z?lAW@0eT9_#k2KNA%KIy*YF)YKQT$4nB!sE?9xH7kBz70=gC+C_t|Dag(QMNHV1$m z(g6GpCk9dlb9aQk`u7Q4lueJV^Q@kuzp2`)O1`j4E`8hE<%^%WR1S=5`KDYnpPpEG zD&U4?;XBGd@UrOIie?9w!{1{PqL(3~Di)It@*TJaZ`UE>Yr+H}(cy%jFMh@uyHyX; z*duBLKnxxkWDuc1f(ZcRlNwtiQ!#F{(I+E-FM>9hUPvpRhQ_MFzg7p?1+>+kyQwQl*%`Ft41TsLB`)9Gw_VDmlu zO4)*BbFn<(#8c(Uo3={yh>LcHj+7^zzCxOHn*rS5MEaCUhnP?Rl?NDgF|G4vq7(z5 zhjR|79wB@Tw-rVXiB(g;G&RYbxM>f5RtEdmOEG#tN*WP7aO*wlT}_lPASJLPm2_M^ z;50@1AitUgx!=j=*_1+$UJs(@mcIvL(+QwYZK@qGhCyGmctvEf7(;?JDWimnUuCZ| zfFNs}u&KYZ!trQe=)o{C z#VmygidxG>p2}`9mYHG>X6vLLsiMMCTbCf13Ht~^M%-JE(n%qsD{!AvZdeWr@V$eQ zzLd*NI0BxMwgnnCXq#FsaHu=-@M3#X7O!5XdwEUny6b^!-1?jI`7n;TZp4&EynoaE zw|64-a{9C3$n|odtpVfMs68X>leHTTlT1=SNG3oyOA>(CEF=h~_XI75Ymk`%(Sbw5 zQyW!^u_o+GWfmLrhQs7SAA{Di%r`-dz@EMd!vOq>YBtmDTkmToSr3S0K~(|u=cIbMT19&wPkdu_3+#pQ1GuKU(3f+_;et)}7jF-IRSJ4Sa-KJwtb_sKju=Da7y|K0o0-9JAt zx?905krUT1k(tU_a@&nJXlV&uVp&;o%2~3a*Ox{c-m2xat9;&c(Dx9Q!ZV@oG|L6p z=I#(V6~-P7wb~RF54qDbTm=~(yESXWZPuIH`iFgx-lBgteWnt*!6C`iK)oSgQ;mzv zUzY}>rt6g2;4dspENYaUVpqcPn2&-t+@iP5p%+&@QxQlt{0qbhFn1Y%l4n8$0NOBP zm<{+|VwzLZWjKy5E&PBp4nSyh-%feyi{B-sq5bkt|M+1U9$v%m2&GUjZP93J=*LBw z$jkGhV`IYrHckd)tkC5`N4+(ngpqI49W;^wP(`3=wqd~u9#knN5F6-}8gYdTane4! z1g}EscGp-GN+_RGBHuaT1j-I05WHuPH$_HP>bxt7JgK!H+Q15*h8(k#$>;V5K&}Av zU+;An6EImvFIjsjX{Q}hGts&TVLd+@kfSbGFAs0I@&5Ug5962*o>(TP#;=gIf2`S+4Ip`e=FTaTOV@n;sKtwa{?J*F#;HBW3}_=*=DX`VSf~ zLf1;zq?*QTs~QHlaXvAJZJSm`30lnPcu;Vyluq$|b0|@9xqCJ`#ZMh`NQj`K!D5`$ z$$(x4YLhsa2|}ZbT(T?;6}`hVU`{Q1dordkPH0n{HT6$VP$&XDKCYKIl5WxZw>baiLsfBVv5AvB0j1 zXm;2z8Z=rM7dh@|N)f9P0F6#v)B;os3MbeM8%ZxC54%?(IocTyb>l2^?2hl!E3_?2 z`p4J1jRT)si$dwE49l{ito-WgU;Wgry?K!jmIt!nMCzhD?f8@A zjsq2$+`OIONm@Ea&U?yc<4u}3CW&Q#r4 ztHq+}ih*QkoJcuQu*<7e0VxC_ct;mZP@wmM9<@+4F~d@l?gWO+V)jumW3!XQJWs~e zL(3kj*9|8tW5Tx@^mCv%7bKZU0a10d9Tv$c>+t-^lS*wQ3Us=#@Ds}O01dVh(@b?z zmaaHgUjD{c%ZL8@b^5%#^yO^$Cuky2&ZImp$RoZX)SyvjxjVAAgTZv1Y{G=Gjf0wYt3 zLy4ROk3|KfdQ#ys$A~1QHh723EuY&(;s&l2*sTPhlZ_bE>29<2KcV=3Vy&43zw|rn z#y7O?Y}wh_pWJ!-?Z0x%ZeHZWIOc;9ldEvcy?0zupBa-@x1FA|VWo_R$H-$FA4Sg* z5zKYxJXKca+fwTqzZeUJWCE)F$2J*(V=M!iK-mQOaZ)G9#gW{pc~#U(p(l-eEOf1i zm{){S6im(Nl0J)D)yaT(-i`%WDL>X$x;isv+^tXTMpk`d)y6M9e2eHM+A z4f(>)#}tXKXJb(+`kIc!vEmxuIplzJ-+^X<5phI#PB2PnPUE|xS2(nQnQe)z1$)MVqZW9| znV1gox9?Eb>!0%TGi*zw93n;evwR*$%5*g%$`8r16HD@|-~RkZG7pb=5l-W%cRCN> za?dSW3K>NsHAH>l>1WC{8)KRI^-si$6^9r;PA+`XnUZPGP%TkNG3c;&l`U=RIXY0V z0MO){ss}(Ogx(-fP{A@0*98?Ap+IjqCLIK>7+dbkXyJ_Z~I z+l(`ANST${0BZl>LStny-MRwKpa7| zlK8ASql*hGA8Vo5otC4HJ3&8nTCTt4rk}gzHg7^{9P`D9ah~xl_ullAYHeB?8d9Hh z>>BCxo+DfDxLth6MCwg_!V?ac71>D{>tfWGbrY4`EaFCDIaMc4s8fyH3X7QerRz~e z*aZSb#J=M;mz#}HF&bb&-QBpqNDzQG6e@?8K%=tE?KS3>zLAMuaj>)``3u(3h~zn^5xBWP&-7 z5_6n9*V*J6MzFyi>=94V9@%HpK9IX}a9cro^nP*+a)aiG+9xP?L8dt3h8M*d@~0tG zh<<7xa=Nrz@#EZ`N?s?>fZ4YhR_K?iOW4;(MX~7%!Z2!Rn8}Cg*4XIZyj^&Ue zPM2^0?opAQ4{|XqI{7Gh#*r1Nwji%IMQ~}x$=#rtfWy@QkmwCYi<*t#v|221VGPj* zD$3CwphlwP#GEw4MFy`hC}RRs%Vi3h?`Bv&fe0T*o_R*T$k0%Ia=JSdT{k8eKsb1Q zkTB4W$N^|x!MMt)_wQG9oT0xT5upZ}jWX7riBVZ|)QjYq zFTOzD`|&sE7hbOCXfuCd5WoO1cwI<`v~V7PROCj(6clx4O;uL}rfvWU=G>&jcQi>G zN8WL>oVaN@v3(8=Cv)8LVG|;3^R@xFLuvv%0Hr$4bEb}Ti+~>5M%`R9Kl#o#L|nEo&yM+Y!d|Ubd+6F*uerMrs)6~_a?v>_%I|hAmA%(oDVb=$ z$RTISInQ{a^tAU=f7r%yMr7(BV?y}}n#-7+SWB`b$QJ|Cz(83DJYr}TW1;5QlbUhN zU?Gtq>2{?zZ)65>-9{}3pdoL=m=KIh&4`JfgH8z;D#vDY;{YQMgHnY_>QLK}i_%01 zK%7ABJGQA3zKOhZ4iZpTJ?CmrwlFubrUMxLSba*Cl-9|c|LiUDxxagj%uIGTYJ3Z>@?_lS>g*{u2r$0AAR!;zG(9xF0V@n!0MtRqr_MWc-Xjqu!$D|? zogc=~xH>eTO1rPv7!kh|xtSpZN60nW`t9$;+q+duKE1Nx z+!N%mN+|WVNrq>ssT^_yi$}U;NRS3{Ebxkm!~t@WfB|46wdsJ<=*B_#O%ArcPHQ(^ zUrQUDDV|ET*_MHzPCy36Wn(}*%IYA`MaT|m+g|k|5eX-O5%jr6Y%n;ORzSGfjpW+v zFmoAQK?Jpu!~sJrpq0+O*d@^E!4I6hn`mI|ZxUEsjm;Fl5j2yk;O!?`JqtgBT&&7}Gl0Ew=@`9%y zFMFreTwQBgmSqUv1mnTxp{<%ZwfDDnPDNy1^d=-eYTtZlRN2i#|{i6Gwt4?=Oa)TC>Ho-)*A z$Bs$-AUA`-W|HPXwTvZHx6q6%)LLd_aC4Z+v1CP&I(qh|b@xDs-PJUOtR-t@M6H=U zQPicfDT5_7La@5Tg_|6Ql3K|K{k%0QL3*0s^|%QZ)?|;*K-bm2y}RWlFZ~A@E|1HX zzVJ~gFF9U~q`;*J>D~f8woQoOJZ4feb8dc=LV-b>c`aN1Sb{-tZ_KhL2^Cfw4qO8V z!eyJDVR=$q6 zor*&GGJNK#^32tVOtBmka1j?cE+l5ym?5H?V~rL7&a{Sh@OIF8M$-TgW`x#xlIatf zh$`eAVS#|gXAO#`Aq}2yg*3**<}q<1V8UnMJrQc7ubH8#?=iGycCi~lvB<-T;BJIx5#kc3g-9drb_&rMIL$} z-vT#1YpA}}`Aw&c zn+n7C(0r?Bq#V;U(dS~mlAe3npP>rpl$Hn)b@*;b8%N2;4H?X>O-_H_68Y{GU%y=6 zwl4Gdn0H8=9$vNCy!F~!uiI42m!;D^AWuH?7`blufNc8t<&tfVVaAKR{m-5vdCeC) zx_~ik97YAu2~bEycV~Dh7#PYM{Xs(-lsYvJ9i^7X(HKeXv+$O6&2Eb)fzc~CV5pO6 zg`p~(FN_d#fFYwh36Jax$BWkS{_Jy2orI4yyyN+7px4jpP{YawdUw167cc$3oB3p9 zP|Xvodu83KC&{0`=GpT1pS(mDWl0LfjD?p9ScxujkWJ8tF)euqw8h-G64q)%f?jw| za*$|Y!t)9F*iCvi7%cKmLNQtBwKeb`z$ZGQ}4L0-)ixkTX3G^XOiCJrpk{*JR*esZ~_<7zh zq3UUi#>=)+wny4jh>l~rp)vs=hiVPtf- zB8-xraAc1RA9j&ke(i&j-uip#7LSu9=RZ-->YtHzyCpq=)eoy_uMGQ>EO(eZlkuH6 z!^txRN#wvBA1X$u&oY}b#udP=o($d#V?sSPE+AL!^QK6RG@794MX}cxMElf?7NIO; zW;sKN`cyfJ4X}Aa!}1ClNhZ+>WV%TMPKmrCG`A5Zfz(!jR)BI=BlZ}crcP9j3Ylo8 z_e}sPN{p;wW9c++4_e#|Qb+%+feK1=+31)#Zk(FWdOe)H08d*6%FG4`OHI)2)a9_V z4klXh05 zr#=4!x%!%)-nMmS_oL#dy)sXa`Dnzv*qe7f`i<*u{ryxq*XtE>BXYqL&zEoBpOuGx zd9{Sq9pWGL1bM+zjuyW$L2t|1hCqnb!=Yp`qZwD0bBzM)CQ7Zw+vm@ajTDjV6_PCk zPhrxlTIQ)@T&*I<%@%;USD> z=`naU1LRC(c1Lw>S?c@F=q55T)sVNn|7&vf^?xr{Tz97|S+rRExXIC<$n`kI5iN}z zTk1LOs+7?H>%3UhiBS=c=8|(DRcs7^0!1GITeb0`>Wo|vdLl2hg;1xu?fQ(;9&O9+Zm$IM=W zH=e6CcbHE@jK1o$s$d9^N9E8ovAQq908G3`$;T;5>+=hIEpu%LE(txNPXY!F;=rTw zt~Y&AYSXvN_rCd$vVQp@{SGP7Z-8;AvlhZGg#tWRccub}E9G?ft&CEMFf>CCoFR1N zBa|nqoX`tW=-%b;%tdF*QJ$5&kkdn=mUFKh(+sc2ri8qhq6BHe&7|YHma+t~Fb{Y@ zN=e=FWgi0YmhNB^z;ufN&kQqQ(@Mvo=BCzx+BpL6qNYUH{I#9sRvb!{g|R?zf(G}- zEx5Zh?k>TCyL*5OgvQ<7-Q6v?JB?f8?mC%yhp8X+0DGNvs%o9RzXF*5eq<=27Mzwt zgV7@gx73O1PG&T{$P}bKIKITov0T}A9$OGP_&!}2Mc`j`R-k^qnr?>9KlOw)+dZG% zx4d<0j6FUJ4mo+PC1e9WA5vNNmN%HwHeRU&_R4OmwK4%|?nz@2x%mAwWQA}EG;S)` zBY6HqY?-k5Ir)yCJrCWmQ&aV0ubtCAr|ZYm31TpG3vigRxFB`Wax${Y`rdvdWZ7@7 zDrOpQ5+Ras{Ms1qRza#_mt8<~F)_@!pYgyncME&J@yEAMNZRlA)0US!=24%wYxdFg zHkZq+$4-a<kX{rEY)g;YTVSP~ew)WHxnv7-_*6oU)?{6I)jdl;hoPn2 zgraQX|1a^fS3B8&*SQIYJ%cf44s(jT0Ti6Uj9@~ftrd#O%e`95C&to(#LRYCEg&>W!JyF6d&WKDkK*vpkm&Q zvbm`#%fkA%0#xyAG5@4mm9(}+lA7asD$rLutaM&|*rt5g8Y_4iE?j?mdK=tyohWF& z8(pXWQIO-iVIW6(L?8K-3t)q(>H0iGaCr7tW|7<4UbEa<-7{~sa%ej%9;PxB((2St zkzaENSnW3=@4621AbBhEI@$v77}h51<3?juZ+Z*F+iu>bYIA-3*xB zipM#f3iUYeHs&wM(xYr)mlSx0j+ti8S?;yTG$Pce0;G;aP?&bC6AW#A>XL#P)vLd? z6G@!V|E!>-&u(rePhfDhV1HtoLmND%e8iTfG9}g2YZCzk9EsnVAyIC1WyZcLEWoTp zis3OFlue*cxh{-Rl*^R4$=uCY0ScIgKH>q4QbqbZ6v6DSWu2OQ>BZx`IiKaer}=8; zGyiD31h9GB(y10ET{1ocHeA}7OV`&48erys2#<~}+ ziLTXWtgsSw2bT1PTJRc`?F)|TR8-jha?RlFH6)%3nLvuV4l*ffKNw}{5HE*-ZiPE< zAXi$mR^zcEZ`;}M)_XFo;#$f*nb45~40qn#Pp4ATEn@c^14eYId4T=dq}OQk`1nOU zy2C8hqMZ>M^K|`^qS=3eKiMtP7lMjHMP@AE zKr4DU3UhoG`nuG`+p3*=e0q^@^p9UrpgUf7Yz^kYf@C-LL|QvA=p?0tC0=&9{@pBp zSa*`n$3`i&yNXdXr;`5gfC2Aa);`N6aQ$)cc5Z_+`rPR+FD-@B*ni*uR?1IVC=2FZ zLFb*Uo~&6m7D+&IZ_VxI=>Q@Gq_LJK6rvn>>cWB+kbVVJ`f7kzhhO!I((EgeIOBGW zidCI(^l>%RP1jK&X@x-053!`wFLKBx580}pgms$@6}3drjG@!`JR?-uF;zT3g7N~% zSj1>}k(@NX=|{`9#W(6gTmt$Zd^xF4E=TfU!l!Ld-fO~~M_k5$TF9A$|2a>bo7ZPx z47xX_i|R&0@#AXQ9w4)Ob&#n(O+JTXzd3PB;HA}eOFspeV5=H+oIFv_eUJx9iP)Nv zJt4rv8ekM5RAF4gl6ATDBXQ-?U40SSO=JN1f|X2AnW(uy@G zo;Qh+YlVN!h|J$(BbnrTm#N$L)Ao5+z$=8fiFBq)bom-9jV3)L3_m4A8T*eph8*(F zQRg|@omU{`|NXEU$0~poZV307qZ|Gh&-d62O)p|0-ENxmG4->gxgr_svRO8J1p7ab z45_lMdC!k-cHQcl9YqnEf2L)~x`E%#Zo~1tP96}a<(=Tq#FC|BvZQai)2I~ z^O_1wv0D*H1-i#n6j)Dc?zT#|H}mLcci$`W?nUa{^b)(6`xpMvFbLY!4(x8#F*sdfxEI^^wf#Y z8U(}$_U_-nUguO$Wrgh=#dlIea4-n!W&Hf})(iXXXd1i!5&;xonb1K3#7Y(nV%C=5 z3~=_ge=&HlI;L^Xzm;bG4&LS^LyAe`16-4{Es;Erk+-gCdxX62CN)PY_3XplPTVdt zy{$d62zw>-YL1KWB{l6L<@^TqBbULlu3ahrxYt=ya zglCTrDaA}S+M0*rq8frZ9dtLULJ-AUYAyV=r8OEU^iuQOL?2MKz4jfQX;;AiGgOr zkOWFw&f&?x?Z4Vw^|yv4L!=+-2_6e7!@ed5+iOGhB=Ut@gr`G&hIf7oDRQ%t#<#y=7D#-F0K=_3xu-yIf<1Zz(8l4u7wCBuwd8=J64 zk?Kfjz3{PofA+wmxNv18q(Fi$v=TRy_snr}%E;;%0rkD!KGI5A{~0%QKg$yZLzpl|%CK?Cog zCc(KM-Eu;Wx5xD=#*{uh#IYZ;N&R_tr?pBDE?oO~ zEze@D2t7uB=_w@RIBYTC89iv|xe*r4tduiQsmQ6(%I2d|lcpyaE+Qd^$0Gr|_M)+; zP$U$}@-iZ`Z6w{wJc~7D>k^hVe3a=`yuES1*f|X{@N|4X7onrrW?&}3@>(Z?N|Wae z86|+GsBTYy5Z(%kH?+?y<}es;o+k)yVwXSoqS|3K_T<_ZKfAy-@69ZXiE#)Q50VB9 zO@4gUlILmf%?^>W6Pf#mU;L~qt{8ft4G}%aWy#@r$naT2fr+m$d8>fa~(_L3)m zYE-f$c^WVpbnQN$7u&i!lY@yoT9P__Z$F%e3_M1mP2tVgE6d_D7MM)EA)~}K;5bFV zH1hWz6&|i!Hwk_`e)#Ct&#-g3#Wn`zG8oabl1CBzA@{9}|pjS*8VCM^C!2 z5ELYv`%EHc#~C^$k9Idm0`~Pce0L^w#n4om%KjVI5I&*gB2R;<+lklatH8f zy4d$+eMvx&Upfu|!~9*nCGcCvA?>46h`MuWMI$K|wG`G5;Or2~ovWp~o5>mZf$3S! zdpimOJ{KKs%9%{y2fpM{%|3n(_m8b7dD|0_g8m5Sf}NMxJV#O4 z^tbwRdDfq*q5_LqQ*Bl}>H>*xzYRFt_c{6h5oRY<5*>sgm~Gu8!0-4)D!W)gr(dj6 zya2TH%#SO7FXBbHc9@uk|Eo@iacfOYn~`X6DEt)z_?S7oPVx83f4X@X53KY2V zt|4}8ni0ZA)JM5D5zXPXUHfw&DOsWHR5$f0;+b12u>QrwP3ylj4W{)PnF-lUCnkO@><{Vqd`!fzq*6|qzVh-9$tU5)?P!sFjn%%GkA5DZ3Tn@=+-L&u zK4urCUJW-H6hmois zYToDFO?qp>jTszOhEyKiY_ z6~=br+Z;6WJgK-gStXDYt)fowZ}rFd92SNVE$jtjO2S|I^`ULZh`wN}!^HPYN5gMz zZFh!V>p1>Ucrng`?5CGNe$po1e5>oWc%j(qGRFDRb#jv{em2UpLx=YJ=tWLu_>wZ@}oNf6#mK8G{*Tn~WykhRN zYSIvXv&616>hOx}K4QLdvIsPaupBS*N2sH>j~yunk>=8xkOB`7P3i>mD?#o@A;@|X zb{eo^Bw6V=oau6)d3Xb6%^Jg3Q@0tcG9|S|v@T1!6RVCt5gmsTrzi5t#u2kN zyCJ-1KQ!WzOt>l^h)zxoTL9(m;g?J+uAxEZG8!ZFTKsh#UO!1Qiey7!_$sDO@s&|7 zMk)7VfAv4A*0&I7_aB+@n1z`LaQZCobgQU%i}75u&~5VYz};dyL`{c5Hna^$SSQ3H zqV9<_bq{2yJy=B|WLQQ)vX>TrL8y|0j+bk5%xYh$hqQHykN=#03{=Jq z8yYeO=WUo5qx2Ee7ynxL8dba;YDbK77XG(B#rfY~9j&EK7{PFi47{^yvaFV@^km8w za}oRb^wOM`Lu_$FR|t6A#Q1?v{i{StOThKrT?MS|IC6W?nvvmICbsJq7%Gy@fDC&i z(0d}BX;l^fga4cU{?SV`-9E2#u-Zgnec_MHpHhFvBANTu6zFp*2#s_nFs2JJ(jTpa zNUG;sZoXn%Bcgo^(#C$xf=$AbK>pDDp>O=GIE7aO+fxdIpk`f>AM_tx3F&#qMzbGF zp0#uspn%`0BxPeaX|)}F2cT`697Ez^-?^vabr~xz?7jf@>na$jyl+OLTw11D0(Ub3 zZoR#;SM0}%X{4IcU7OK7)o21#t2-}AjtTV1^pw&l><~y86>hWRJ8&ZvE8J+p-&sRt zlV~esC@{`v>+{!Sj#4>Kj(#)fCUjr0cKjl?gu^r0mY@HzFg|uOT}pzqIKgY`K%;a@ z_g*tj>TE+@Wi6t`$+O3CSEj>#{lzOt7+hxfTfMK~_d8#4KRI2X8(Pp@Zm z=BHTIfRIC&@B~P&;Szt%=zH|_2|^KOc_!HnI7h9x-8H!C1gC?BMCFsVaRV?X1od~j zS=O|iNX1Rn{Lfr=^$LZOU)Imppc;rOr#n&X*pP(@k$fV+F8em%VJR!|xs#4Q%S=-8 zi=BfiezFr`05jjY1^WcIkk3QS$6g;V-kA61|K9)72frc-EL$fPb-@mpdaPTI6DN1Q zcQ`JmsZHea%KN|1EdJ=2VaX!S7>TrNA0%WRx2wT1w+*Dx#{ZL^_#~29KU3iOTUYmF z-i)ZO4^mE59GkILa8&5N(DQW^g-jUGY55+z0Af^i;f#eQkdMNnT%_omyROimz8ju| z(>!YU%JA)KSqMQpm;RT;>;{_y_7|fho~ysGI8{y~WinYT5|anY2hRESL9K{+rdNWT zX?tc_n^R&-7<{pnl&dMbzZ6SEW7Ml`Lqx@xzVNtYY6)hWCm{|k!!y~89sOq=J7ug{ zYY!E6>%uf~Wl_=^dZSY`oBk>w^mJ;75a*IFb?&8DzsSQ`nN-N;C*pb$C7oJg-)6ij zY;aZ6G48!C^l4l<4HO_Sboe~skIWJDe;HI*!($E*;BoF5m{3FJGoNDj7|(tdI!@&Q z0*Wi<8f*h6&K(lf=?AD_jY$U>^)3H3^e{FnyX}RgT0vBkcilcwEGrSTDn?7i2+)AB zK}bz5+HU)T^?`~fn#D+^O1%XBAdGXcVDnyf!DCVZHhHAg%kh$q6Zt~*5zUZcN!Bon zJyI|6Eh7>{dg0*v?r%u|9P50mRq2L)=w*rggj1FQOdnw^TmAH3iR(Fu3Ki%gSZmk{d_d%*`*E zpY}wm~BumCjXuz6*Ol} zI2*2}!Oz@RTk1Q(gNeC-ui`ANh(U0DaP^}*6;qn4^MUA1Rd0=QP%ml0Wt4acd**8D&`J z(;Ud_v17}NmQcp_EAVV;_&(3PVo8X{FQJSE6}9^MW;Nv6za#t9!28jGT0@7HbkjAm zF)D|Q5S1lSay(_s*&)d0nZx*xGyr?PE=FR*`&t7EUp;uO5-VpIANM~uzGLqKu3V%; zX-PH8ACekz;GZU#R~qJOV42FiME=v!TtU-a_}}EwJ5<^V)Aw&#@hgJNri~w7*p;)e76TamKPLeZVv$lk5?<%+m5b@?>9B^YnKLQJxK# zIhfY%$RiL9HjcD3HH(TinW_eIfh?gXN#>`?McU#n91wXif{#TzCLEFT8*54H-CzD% z?hqod-auBvZnhX&xD-QK^Aeq=OAwJ@Rch-$Tj;QYq$0+npgHUi$o|l!KsBF9lQ*Xk zOpdH#LL#{Z>yAR9IFdC`+w2t2nR zJR(50DQ>LiUb!01KeVE!{dx^uxebahC$J)TW!ZV=o_wh3c$-_EYCF?=ZQHu{?oxcI zF%bvu&a%P|1jke}X_nY=yWOVsWcdWteqQKhEG3)n(>xkdX8b4k!{)ZGesSX5?7S0i z-vd@>?%l*E4~MqOwADn6ABZ5#Z$_aFn~UJjG;A#c?@(#S8Un5CZF2DKw!b9Dad2?2 zz;qxzI(xyheUDmir4R33MF^UTOkRRxi)&%J_`Fs2*{#E3!)7Tq;xLLQ~9mE%eXiuoVoK}`O^daz4)?M zO);IW9ewlXRNrM3DpNQwhJoOUM+O8EvsT*G_4>SQj~p$0Ce!fCtoiM3c1uQXH9JO) zde!ult^OsesNSumwKE9~(Mrj+Wh_a6h zFH0IQIffRe)6i!mEG$~5Q#iuH(rj}|OG1f!i0noCaWd4FBzSF*GISu;XiTon1}@N5 zhe?NFfBz~&g7}AM{_Tc1cnpgZFwM)%1_0mlOmk&J4z<(F#(>Q^RT~XHd4dSi(vpx* zNQu0%H`B*eA8CdLQiWiBU{>%JA)ziN17_bxeagd9jg_61KpXivclXT;Qy)a}Dbvet zi0dXNW`ohxR%l}VSE%nwbvABSlZ2tR9oFoyj^a-6AMC2(F*MOcT^hdv+RfiMg!@p| zLJ^?iJxu%GV#Oupc-=L!TE8`4q^AA8c?m!#6v%hi@Dc11eN{M2AH7B)sog+LZIu~p zHzjsU^VjrubY8SmncgkDmd?(eRDdN-FhQ4(7w1W4F1Xz+~A?s86gXSn$H zEsWf#OQT%kU(UO@5_EfK#FEMMz9b@18BRjWWp;DSnhQZ-bjGmFkIh3~iQz$^SRaYH zoxL^$`gT5O(G{dIQ}5TnVjGi~v-;ByA4bv(KOomOoRqC4Fw!x&TGd=-x>w_z$*yF@ zIxeT>XleT`VVa$#lT*{)^MeGR^ltpl$?iv0g^JXR&wkan4(}Tr;WMXVB8<{N*$7db zHKE33nVWKoa;w|?B#G%kfP1%W{*_c^eC}~t!k}yXhmj&yh5SH84^w&{jC7OC#At<|1nGH9(Hd2lB(jx94}y~ZYogqz zog%echZDpM^rq{Ky)I<9uS9@7jv;|%rXwIBlj}BM*ZYI(ZT*jU2@)`!4D)9RtiM4I z`?=?g4vgTLDnn4OhzfyCn3RRSJBZsZ%->;45KZ7CDVzIn1fFN)Wncv(;d|a+K~+M- zIet$C4{3-60{qf1T;^;n-`hKf4CyV)qz=*&s&CaZIAudCDil_^s)nGeAF34S%C57Zm7fye5rN!u(j9Qke&MZmULqe zLj&v#glEHim?PBZ)$S^;XuEHuzGR$a^nR`0j&ES*Lhoq{Uw^ylnzPbdBBt3dYS;#r zHEQCbuYpdvzlkR1K^YF-GMPJgQY?Z(9&q_*GY81AnvWNko`sDyLXbHR);8$aI2S?)#Cn*x(?8FR~@(B$*h)O0LTVD2MtO22V^STLM@CBnaMrQOxR zXtkB^)w6{$UPh^xEYONq36ZrgF!l4tcx%IhZ-cpko!Udha?Uv+EqrA+2JRKaDuf%r z&gx*cvp1q;4bDQ(8WuEB+aQumPQh@xJM;cyJ+#jQ;3wyS&1~5nzbUvCH2EwFxF@E_ zZ&Vd|B{_?o68gOnx#L0e3qgDTDPimD$f{7ztUMf=IV9%!ee^ycCW#lYygkV~RQQE< z2D=MiMLhProDEUf&t_4vnu;r#{3o|>ZS*PQX`p9wD%{ik)9Jw@!XA-X81k8#{c*m( zMspDtN0xYOP*wkaH(A(f-Cap=mg3x=wOCAakUH@Fdrm$h5G#ii zU|YZvT^cj}#nqwyJ=6ESXNvGYfD2WX|Lmr#t?Kd_B<@4|Zpg@g32X+2cF4(k6oSNY z8@5WsBfUw-QPsigow8O|(=E{P4W3eyX6K$V@~8}HHRY+y7IA`;(j`XK$Zo#y?6h;Y(DN|4EZ;PK^1c?=RmH(a%2?{txOT|p zhA{*p6{~zvD3bk!NMrtr-lnHaGXQOcm`=U;wt95R{TY1xeR=Pk*XL46xXbba{lEa6 zM-{k*1;p$jtfojoIHx;@M1>@q;?-y`I?umrg{EYB#jjeAjo#cMki<(?qyXEE)6dx3 z`l=0I%tsv=htjJoq(Y|ZtPwN+WJ1c4-OeZxHISO80Lp0sxev1^*!)^XO;xa&8sGG} zz3g*{*sV;tn~KBRf_XyKDa$ZFv^_#Cr#4~e!!ZYv)lA6 z!f&X%s-cXv9a7J$T77O2{WNzyXP=!Cu;$MG?;9%Z7deLgILQjLKF5U0`@eF8W;(M3 zCONiPm=>xi`7cFLV%Gqql__{C=F-5H`gGe3kVz1=7-%u9+=anSR%1DVx zp{Y;w1Q@rm5G~yOk{^?9*BbjE>CrAIw;ncC6fTwC62ll^<Hz_mQ$;WV7582F-)Wi{4}FVdWsQ;o_*kB zNDd2F*F9S4RImCsLIBrXyRWXrFblmqUv6%pjXM~2PHXO?t>#fOWpGEJEYjDPtLM3* zK@li-M`kv_XbaYU!o>+4el+w)eBX|$WdAS;q8K&NG7xN{8G24qvbY@)&w*&ib8QE?b_NRbe$X(xo9dLVn}4$ zh4#B{ql(z+Why6l#0a#}slO4jL1$%OyEI)h8}dSdGl+pyme?>;^=ihVL3w_Al+(QY zA9vJy6H!~;uFrWipLSi#uehxeh7Nua)F_ zM%KD2_hJW5y{E(*yz|03ck3WCDZhNTOG;oK_?;MoLA#d{Gsw+I#kR5W!3=4q{Um`k&Ar4f>G53 z$Q(O%W&EU8r&L`cAhRgYBzKe#s?5CNCF*px8tmA$Lb%p<9Hy7=@dW-H0q zBUR1M)BsqpT&Y^FLR1r9^k6ytXgC{3^*YiYcK{no>uqJT6*uXxB$pu9HuXWs&d-Qk zR9VDWu@Ssz7uqmW5p^6MT=D)O1NES9Ew`RQ5fp3ImQGfxTCQ^n?~p_ee*Trd)^MMT z3BKqWjH^7R9)p5s9dnH#Z$m(|-g+zpJ+Qzixo^!iBP&eWBH&>E>Awg-s*nFiM0c0) z!?hpo9ZQd4V=Wcpn}tOD;Ag{kK^m>l@u7;pjjrgZS|_g?SG`0H)|0TaIFPJ8JKlS^ zwuc?=gOCHI@j)@!W;=(32Vbg+3Y_cm_rhgVxdfMh(z3v|6eq*}>;_CtFTH+z)2euE zWecR`@D64X+$qG)t*|chUmIR22_iBlfUgrH|ug?(_M{LpDrRzxY{X60wD#9E2)YjSAk}tL`xM386vZ zg%qxAw8pqN^Z{(LcoBaj!GeAy&R|4Xy08NXAAn zXMj|8)Y-_IA#W6vFlss;Rn~anKj0QG0vE@#k2h6FXYYENNk8x#1sHOoc#21rny@j1 z!D!gxt}&ljE^ZfI>P4`&$H>_;;$D2LyY@^bPDN@UvROS-8b3;|1A=(+u!|v7&NibD z&1oN#KL0uEzGR#2G4hLTnHSA|yp3S?e%&sJ;XQk%zWp6gE%(FE--x1Y@G~G!XM3%; z*mvH(N!eee3Wq!EN4FX?{~qD2XoC_Lw_v?y_buu2n8@Y7$2WWYB$%K2D?D{MV% zK`j}}^n@J&2h2pQ`tTUHX(()tw7+=`Zk(CX-04VR4!?iz;=;a=t$7?c!Vjv8^N@5N zwu@3vxln5m9Vc4XR-JkE_RZ4eY>h>3{fO2CMj{Id1@cif=|`ay*Z(R0r)iYk07 z=cy~Xwr%EN)WqsZ&q+Ur!(~k3`63NZ(#QT2{jgd3bw7+-pXL@R8` zKhPx3#gx7%RWQK4IbuPre^W&L@)5_!D_P#HL>{C!oODb>-PO{@YtwU>e}S zF25fn^-2Peld~@-x~t3DEl^53aI^b1me8`U`~K#Ir~fd~-=*!!_Y-TMzy5WluukrqW{P9qLrrq(z_TN z?Pq$Ttd+_7Telr41iJSi1Zw;1fjw&7@&a0fct3w#cm8Nv;4jx~!{Gr+_j`?OvJ53K z<;Rf|Xq$L1uHD-9Vff4ko(V1)q|P&|K;_euja$$0ViM2g;Y``zmzsC%rp2k)y$vf2Jk6 z+H?4WI+N+nUR&7Fka7^Y))bw!*dD{5Nd9-#)A-k;^yP`ck_)OoZ_V^ECLnfyPR6q* zpg<=6$pNd!>TUPh%VXZLM-sS_CU&X4q;*w_^{y=kha1}dBW11PGdxxoC4`) zuIau`zpL~HD<=EcnV%)-qb-Q2&!<;4x|gc6%ocKpxP?IEDs3oa)?vi(XVEyZHNxG~ zms6cG8g;|O9H%uO+c$u)WIt3L8ksn>W%mlZ%JhmS*EO0~ZEZXEND?~n8_w_ejFO6` zyNI^jPczNAr`k>rOK`j4vM+ZZJEv!5{%MZ=PjkDynDY7m5a+pM<#x6cb9l@D;Z^*{ z!%Z_Rrq@-Qw|2$rRUTcBFS4;&jum_&k`v8#^!#pi*T2jyFEhYW`eAA!oMA=FC|^=) z(ZZ4Pz_*v1B)I%ndeTnpT2wdP^hpXH^;pVYlkV3nTL9a+HAAfVF{jOS&%1pXtZXx= z)Jme`3_Q-_%k*%~`f=$-o269^H)vdP{PNvj1s|EckFHBD{0^!@mXl73QijshWGIqu zJ^po{&+cmB>#Q6=l!S>lu41MlvlM@DkvapApvsE`=k$uw&RN`yus8RX7(6|GsUC4_}}MUsE* z^<$&>8|Iec;@CE_Ih34!SufUCYB$LwGo=~@T-6QZc0cW&-WsKIKVA&^b$NhOzQ#RV zp&Rzd#P<|1t2OHL}TisJsAKm}D!ROR>g+yW5)QgJ?vGT+* z)Wve*qFf$Ml!~kbKCbi`O-uVSga=>}Syb05aysMgRZ+ literal 0 HcmV?d00001 diff --git a/images/solution-verifiable-cloud.png b/images/solution-verifiable-cloud.png new file mode 100644 index 0000000000000000000000000000000000000000..df86a452a3f06c4214038dd296fd15b315804c0e GIT binary patch literal 62284 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


    mo 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 + + + + + + + + diff --git a/images/uc-agentic-wallets-light.svg b/images/uc-agentic-wallets-light.svg new file mode 100644 index 00000000..465060f6 --- /dev/null +++ b/images/uc-agentic-wallets-light.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/images/uc-embedded-business-wallets-dark.svg b/images/uc-embedded-business-wallets-dark.svg new file mode 100644 index 00000000..0a88e01b --- /dev/null +++ b/images/uc-embedded-business-wallets-dark.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/images/uc-embedded-business-wallets-light.svg b/images/uc-embedded-business-wallets-light.svg new file mode 100644 index 00000000..647ef54e --- /dev/null +++ b/images/uc-embedded-business-wallets-light.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/images/uc-embedded-consumer-wallets-dark.svg b/images/uc-embedded-consumer-wallets-dark.svg new file mode 100644 index 00000000..417c3cf2 --- /dev/null +++ b/images/uc-embedded-consumer-wallets-dark.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/images/uc-embedded-consumer-wallets-light.svg b/images/uc-embedded-consumer-wallets-light.svg new file mode 100644 index 00000000..1a85be8d --- /dev/null +++ b/images/uc-embedded-consumer-wallets-light.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/images/uc-embedded-waas-dark.svg b/images/uc-embedded-waas-dark.svg new file mode 100644 index 00000000..63ad1d94 --- /dev/null +++ b/images/uc-embedded-waas-dark.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/images/uc-embedded-waas-light.svg b/images/uc-embedded-waas-light.svg new file mode 100644 index 00000000..016a035f --- /dev/null +++ b/images/uc-embedded-waas-light.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/images/uc-encryption-key-storage-dark.svg b/images/uc-encryption-key-storage-dark.svg new file mode 100644 index 00000000..d5708a35 --- /dev/null +++ b/images/uc-encryption-key-storage-dark.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/images/uc-encryption-key-storage-light.svg b/images/uc-encryption-key-storage-light.svg new file mode 100644 index 00000000..61773682 --- /dev/null +++ b/images/uc-encryption-key-storage-light.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/images/uc-enterprise-disaster-recovery-dark.svg b/images/uc-enterprise-disaster-recovery-dark.svg new file mode 100644 index 00000000..43cfd4f6 --- /dev/null +++ b/images/uc-enterprise-disaster-recovery-dark.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/images/uc-enterprise-disaster-recovery-light.svg b/images/uc-enterprise-disaster-recovery-light.svg new file mode 100644 index 00000000..45d1e082 --- /dev/null +++ b/images/uc-enterprise-disaster-recovery-light.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/images/uc-payment-orchestration-dark.svg b/images/uc-payment-orchestration-dark.svg new file mode 100644 index 00000000..c443810d --- /dev/null +++ b/images/uc-payment-orchestration-dark.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/images/uc-payment-orchestration-light.svg b/images/uc-payment-orchestration-light.svg new file mode 100644 index 00000000..2815fdf2 --- /dev/null +++ b/images/uc-payment-orchestration-light.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/images/uc-smart-contract-management-dark.svg b/images/uc-smart-contract-management-dark.svg new file mode 100644 index 00000000..ce85e2e2 --- /dev/null +++ b/images/uc-smart-contract-management-dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/images/uc-smart-contract-management-light.svg b/images/uc-smart-contract-management-light.svg new file mode 100644 index 00000000..415817f5 --- /dev/null +++ b/images/uc-smart-contract-management-light.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/images/uc-tvc-dark.svg b/images/uc-tvc-dark.svg new file mode 100644 index 00000000..08d2b020 --- /dev/null +++ b/images/uc-tvc-dark.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/images/uc-tvc-light.svg b/images/uc-tvc-light.svg new file mode 100644 index 00000000..d8716e1f --- /dev/null +++ b/images/uc-tvc-light.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/images/whitepaper.png b/images/whitepaper.png new file mode 100644 index 0000000000000000000000000000000000000000..6785b9dc804af9f7d7feb20f38e63751a9d0893c GIT binary patch literal 40724 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 JPDHLkV1jp=t8)MV literal 0 HcmV?d00001 diff --git a/styles.css b/styles.css index f358d17c..c6db8357 100644 --- a/styles.css +++ b/styles.css @@ -1,27 +1,24 @@ /* Custom Dropdown for SMS Price Lookup */ .sms-price-lookup-container { - /* Container needs relative positioning for absolute list */ position: relative; margin-top: 1rem; margin-bottom: 1rem; } .sms-country-trigger { - /* Make button look like a select input */ display: block; width: 100%; padding: 0.5rem 0.75rem; font-size: 1rem; - font-family: inherit; /* Use site's font */ + font-family: inherit; line-height: 1.5; - color: #495057; /* Standard text color */ + color: #495057; background-color: #fff; background-clip: padding-box; - border: 1px solid #ced4da; /* Standard border */ + border: 1px solid #ced4da; border-radius: 0.25rem; text-align: left; cursor: pointer; - /* Add space for a dropdown arrow indicator */ padding-right: 2rem; background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"); background-repeat: no-repeat; @@ -30,19 +27,18 @@ } .sms-country-list { - /* Style the dropdown list */ - display: none; /* Hidden by default */ + display: none; position: absolute; - top: 100%; /* Position below trigger */ + top: 100%; left: 0; width: 100%; - max-height: 200px; /* Fixed height with scroll */ + max-height: 200px; overflow-y: auto; background-color: #fff; border: 1px solid #ced4da; - border-top: none; /* Avoid double border with trigger */ + border-top: none; border-radius: 0 0 0.25rem 0.25rem; - z-index: 1000; /* Ensure it's on top */ + z-index: 1000; box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15); margin: 0; padding: 0; @@ -50,7 +46,6 @@ } .sms-country-item { - /* Style individual country items */ display: block; width: 100%; padding: 0.5rem 0.75rem; @@ -61,21 +56,663 @@ background-color: transparent; border: none; cursor: pointer; - white-space: nowrap; /* Prevent wrapping */ + white-space: nowrap; } .sms-country-item:hover, .sms-country-item:focus { - background-color: #f8f9fa; /* Subtle hover effect */ + background-color: #f8f9fa; color: #16181b; outline: none; } -/* CSS to control visibility based on data-open attribute */ -#hidden-content-simple[data-open="false"] { - display: none; +#hidden-content-simple[data-open="false"] { display: none; } +#hidden-content-simple[data-open="true"] { display: block; } + +/* ============================================================ + ABC Favorit — hero headline only + ============================================================ */ + +@font-face { + font-family: 'ABC Favorit'; + src: url('/fonts/ABCFavorit-Bold.woff2') format('woff2'), + url('/fonts/ABCFavorit-Bold.woff') format('woff'); + font-weight: 700; + font-style: normal; + font-display: swap; +} + +/* ============================================================ + Page wrapper + ============================================================ */ + +.tk-page { + max-width: 1280px; + margin: 0 auto; + padding: 0 2rem 5rem; +} + +/* ============================================================ + Light / dark image switching + ============================================================ */ + +.tk-img-light { display: block; } +.tk-img-dark { display: none; } +.dark .tk-img-light { display: none; } +.dark .tk-img-dark { display: block; } + +/* ============================================================ + Asset placeholders + ============================================================ */ + +.tk-placeholder { + background: #f3f4f6; + border: 2px dashed #d1d5db; + border-radius: 10px; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 4px; + padding: 1.5rem; + text-align: center; + font-size: 0.75rem; + color: #9ca3af; + box-sizing: border-box; +} + +.dark .tk-placeholder { + background: #1f2937; + border-color: #374151; + color: #6b7280; +} + +/* ============================================================ + Section divider + ============================================================ */ + +.section-divider { + border: none; + border-top: 1px solid #e5e7eb; + margin: 3rem 0; +} + +.dark .section-divider { + border-top-color: #374151; +} + +/* ============================================================ + Hero + ============================================================ */ + +.tk-hero { + display: flex; + align-items: center; + gap: 3rem; + padding: 4rem 0 3rem; +} + +.tk-hero-content { + flex: 0 0 52%; +} + +.tk-hero-headline { + font-family: 'ABC Favorit', sans-serif; + font-size: 3rem; + font-weight: 700; + line-height: 1.1; + letter-spacing: -0.02em; + color: #0d0d0e; + margin: 0 0 1.25rem; +} + +.dark .tk-hero-headline { + color: #f9fafb; +} + +.tk-hero-body { + color: #6b7280; + font-size: 1rem; + line-height: 1.75; + margin: 0 0 1.5rem; + max-width: 500px; +} + +.dark .tk-hero-body { + color: #9ca3af; +} + +.tk-search-bar { + display: flex; + align-items: center; + gap: 12px; + border-radius: 10px; + border: 1px solid #e5e7eb; + background: #f9fafb; + padding: 12px 16px; + cursor: pointer; + max-width: 500px; + transition: border-color 0.15s, background 0.15s; +} + +.tk-search-bar:hover { + border-color: #d1d5db; + background: #f3f4f6; +} + +.dark .tk-search-bar { + border-color: #374151; + background: #111827; +} + +.dark .tk-search-bar:hover { + border-color: #4b5563; + background: #1f2937; +} + +.tk-search-kbd { + font-size: 12px; + color: #6b7280; + border: 1px solid #e5e7eb; + border-radius: 4px; + padding: 2px 8px; + background: white; +} + +.dark .tk-search-kbd { + color: #9ca3af; + border-color: #374151; + background: #1f2937; +} + +.tk-hero-illustration { + position: relative; + flex: 1; + display: flex; + align-items: center; + justify-content: center; + overflow: hidden; +} + +.tk-hero-grid { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 130%; + min-width: 400px; + pointer-events: none; + opacity: 0.6; +} + +.tk-hero-img { + position: relative; + width: 100%; + max-width: 520px; + height: auto; +} + +@media (max-width: 768px) { + .tk-hero { + flex-direction: column; + padding: 2.5rem 0 2rem; + gap: 2rem; + } + .tk-hero-content { flex: none; width: 100%; } + .tk-hero-illustration { width: 100%; } + .tk-hero-headline { font-size: 2.25rem; } +} + +/* ============================================================ + Section headings + ============================================================ */ + +.tk-section-heading { + font-size: 1.5rem; + font-weight: 700; + margin: 0 0 1.25rem; + color: #0d0d0e; +} + +.dark .tk-section-heading { color: #f9fafb; } + +/* ============================================================ + Build with Turnkey + ============================================================ */ + +.tk-build { + display: grid; + grid-template-columns: 1fr 1fr 1fr; + gap: 2.5rem; + align-items: start; +} + +.tk-build-heading { + font-size: 1.5rem; + font-weight: 700; + margin: 0 0 0.75rem; + color: #0d0d0e; +} + +.dark .tk-build-heading { color: #f9fafb; } + +.tk-build-body { + color: #6b7280; + font-size: 0.9375rem; + line-height: 1.7; + margin: 0 0 1.25rem; +} + +.dark .tk-build-body { color: #9ca3af; } + +.tk-build-links { + display: flex; + flex-direction: column; + gap: 0.5rem; +} + +.tk-build-link { + color: #4C48FF; + font-weight: 600; + text-decoration: none; + font-size: 0.9375rem; + transition: opacity 0.15s; +} + +.tk-build-link:hover { opacity: 0.75; } + +/* Cube */ +.tk-cube-illustration { + display: flex; + align-items: center; + justify-content: center; +} + +.tk-cube-wrapper { + position: relative; + width: 100%; + max-width: 278px; + margin: 0 auto; +} + +.tk-plane-img { + display: block; + width: 100%; + height: auto; + transition: opacity 0.2s ease; +} + +.tk-plane-img:not(:first-of-type) { + position: absolute; + top: 0; + left: 0; +} + +/* Default: plane A (Solutions layer) visible */ +.tk-plane-img[data-plane="a"] { opacity: 1; } +.tk-plane-img[data-plane="b"] { opacity: 0; } +.tk-plane-img[data-plane="c"] { opacity: 0; } + +/* Cube overlay hover → swap plane */ +.tk-build:has(.tk-plane-overlay-b:hover) .tk-plane-img[data-plane="a"] { opacity: 0; } +.tk-build:has(.tk-plane-overlay-b:hover) .tk-plane-img[data-plane="b"] { opacity: 1; } +.tk-build:has(.tk-plane-overlay-c:hover) .tk-plane-img[data-plane="a"] { opacity: 0; } +.tk-build:has(.tk-plane-overlay-c:hover) .tk-plane-img[data-plane="c"] { opacity: 1; } + +/* Selector row hover → swap plane */ +.tk-build:has(#tk-row-b:hover) .tk-plane-img[data-plane="a"] { opacity: 0; } +.tk-build:has(#tk-row-b:hover) .tk-plane-img[data-plane="b"] { opacity: 1; } +.tk-build:has(#tk-row-c:hover) .tk-plane-img[data-plane="a"] { opacity: 0; } +.tk-build:has(#tk-row-c:hover) .tk-plane-img[data-plane="c"] { opacity: 1; } + +/* Cube overlay hover → highlight selector rows */ +.tk-build:has(.tk-plane-overlay-a:hover) #tk-row-a { background: rgba(76, 72, 255, 0.06); } +.tk-build:has(.tk-plane-overlay-a:hover) #tk-row-a .tk-selector-label { color: #4C48FF; } +.tk-build:has(.tk-plane-overlay-a:hover) #tk-row-a .tk-selector-chevron { color: #4C48FF; } +.tk-build:has(.tk-plane-overlay-a:hover) #tk-row-b, +.tk-build:has(.tk-plane-overlay-a:hover) #tk-row-c { opacity: 0.4; } + +.tk-build:has(.tk-plane-overlay-b:hover) #tk-row-b { background: rgba(76, 72, 255, 0.06); } +.tk-build:has(.tk-plane-overlay-b:hover) #tk-row-b .tk-selector-label { color: #4C48FF; } +.tk-build:has(.tk-plane-overlay-b:hover) #tk-row-b .tk-selector-chevron { color: #4C48FF; } +.tk-build:has(.tk-plane-overlay-b:hover) #tk-row-a, +.tk-build:has(.tk-plane-overlay-b:hover) #tk-row-c { opacity: 0.4; } + +.tk-build:has(.tk-plane-overlay-c:hover) #tk-row-c { background: rgba(76, 72, 255, 0.06); } +.tk-build:has(.tk-plane-overlay-c:hover) #tk-row-c .tk-selector-label { color: #4C48FF; } +.tk-build:has(.tk-plane-overlay-c:hover) #tk-row-c .tk-selector-chevron { color: #4C48FF; } +.tk-build:has(.tk-plane-overlay-c:hover) #tk-row-a, +.tk-build:has(.tk-plane-overlay-c:hover) #tk-row-b { opacity: 0.4; } + +#tk-row-a, #tk-row-b, #tk-row-c { + transition: opacity 0.15s, background 0.15s; +} + +.tk-plane-overlay-a, +.tk-plane-overlay-b, +.tk-plane-overlay-c { + position: absolute; + left: 0; + right: 0; + cursor: pointer; + z-index: 1; +} + +.tk-plane-overlay-a { top: 0; height: 38%; } +.tk-plane-overlay-b { top: 25%; height: 38%; } +.tk-plane-overlay-c { top: 57%; height: 43%; } + +/* Selector card */ +.tk-selector-card { + border: 1px solid #e5e7eb; + border-radius: 12px; + overflow: hidden; +} + +.dark .tk-selector-card { border-color: #374151; } + +.tk-selector-row { + display: flex; + align-items: center; + gap: 12px; + padding: 14px 16px; + text-decoration: none; + color: inherit; + transition: background 0.15s, opacity 0.15s; + border-bottom: 1px solid #e5e7eb; +} + +.tk-selector-row:last-child { border-bottom: none; } +.dark .tk-selector-row { border-bottom-color: #374151; } + +.tk-selector-card:hover .tk-selector-row:not(:hover) { opacity: 0.4; } +.tk-selector-row:hover { background: rgba(76, 72, 255, 0.06); } +.dark .tk-selector-row:hover { background: rgba(76, 72, 255, 0.1); } +.tk-selector-row:hover .tk-selector-label { color: #4C48FF; } +.tk-selector-row:hover .tk-selector-icon { background: rgba(76, 72, 255, 0.1); color: #4C48FF; } + +.tk-selector-icon { + width: 36px; + height: 36px; + border-radius: 8px; + background: #f3f4f6; + display: flex; + align-items: center; + justify-content: center; + flex-shrink: 0; + color: #6b7280; + transition: background 0.15s, color 0.15s; +} + +.dark .tk-selector-icon { background: #1f2937; color: #9ca3af; } + +.tk-selector-text { + flex: 1; + min-width: 0; + display: flex; + flex-direction: column; +} + +.tk-selector-label { + font-weight: 600; + font-size: 0.875rem; + color: #111827; + transition: color 0.15s; +} + +.dark .tk-selector-label { color: #f3f4f6; } + +.tk-selector-desc { + font-size: 0.75rem; + color: #9ca3af; + margin-top: 2px; +} + +.tk-selector-chevron { + margin-left: auto; + flex-shrink: 0; + color: #d1d5db; + transition: color 0.15s; +} + +.tk-selector-row:hover .tk-selector-chevron { color: #4C48FF; } + +@media (max-width: 768px) { + .tk-build { grid-template-columns: 1fr; gap: 1.5rem; } +} + +/* ============================================================ + Solution cards + ============================================================ */ + +.tk-solutions-grid { + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 1rem; +} + +@media (max-width: 768px) { + .tk-solutions-grid { grid-template-columns: 1fr; } +} + +.tk-solution-card { + display: flex; + gap: 1.25rem; + padding: 1.25rem; + border: 1px solid #e5e7eb; + border-radius: 12px; + align-items: flex-start; + transition: border-color 0.15s; +} + +.tk-solution-card:hover { border-color: #a5b4fc; } +.dark .tk-solution-card { border-color: #374151; } +.dark .tk-solution-card:hover { border-color: #6d5fd1; } + +.tk-solution-thumbnail { + flex-shrink: 0; + width: 100px; + height: 100px; +} + +.tk-solution-thumbnail img { + width: 100%; + height: 100%; + object-fit: cover; + border-radius: 8px; + display: block; +} + +.tk-solution-content { flex: 1; min-width: 0; } + +.tk-solution-title { + font-size: 1rem; + font-weight: 700; + margin: 0 0 0.4rem; + color: #0d0d0e; + text-decoration: none; + display: block; + transition: color 0.15s; +} + +.dark .tk-solution-title { color: #f9fafb; } +.tk-solution-title:hover { color: #4C48FF; } +.dark .tk-solution-title:hover { color: #818cf8; } + +.tk-solution-desc { + font-size: 0.875rem; + color: #6b7280; + line-height: 1.6; + margin: 0 0 0.75rem; +} + +.dark .tk-solution-desc { color: #9ca3af; } + +.tk-solution-links { + display: flex; + flex-direction: column; + gap: 2px; +} + +.tk-solution-link { + display: flex; + align-items: center; + gap: 8px; + text-decoration: none; + padding: 3px 0; + transition: color 0.15s; + color: #6b7280; +} + +.tk-solution-link:hover { color: #4C48FF; } +.dark .tk-solution-link { color: #6b7280; } +.dark .tk-solution-link:hover { color: #818cf8; } + +.tk-uc-icon { + width: 36px; + height: 36px; + border-radius: 6px; + flex-shrink: 0; + object-fit: contain; +} + +.tk-solution-link-text { font-size: 0.8125rem; line-height: 1.3; } + +/* ============================================================ + Features section + ============================================================ */ + +.tk-features-grid { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 1rem; +} + +@media (max-width: 768px) { .tk-features-grid { grid-template-columns: 1fr; } } +@media (min-width: 769px) and (max-width: 1024px) { .tk-features-grid { grid-template-columns: repeat(2, 1fr); } } + +.tk-feature-list { + border: 1px solid #e5e7eb; + border-radius: 12px; + overflow: hidden; +} + +.dark .tk-feature-list { border-color: #374151; } + +.tk-feature-heading { + font-size: 0.75rem; + font-weight: 600; + color: #9ca3af; + text-transform: uppercase; + letter-spacing: 0.07em; + padding: 0.875rem 1rem 0.75rem; + border-bottom: 1px solid #e5e7eb; +} + +.dark .tk-feature-heading { color: #6b7280; border-bottom-color: #374151; } + +.tk-feature-row { + display: flex; + align-items: center; + gap: 10px; + padding: 9px 14px; + text-decoration: none; + color: #374151; + font-size: 0.875rem; + border-bottom: 1px solid #f3f4f6; + transition: background 0.12s; +} + +.tk-feature-row:last-child { border-bottom: none; } +.dark .tk-feature-row { color: #d1d5db; border-bottom-color: #1f2937; } +.tk-feature-row:hover { background: #f9fafb; } +.dark .tk-feature-row:hover { background: #111827; } + +.tk-feature-row--highlighted { color: #4C48FF; } +.dark .tk-feature-row--highlighted { color: #818cf8; } + +.tk-feature-row--highlighted .tk-feature-icon-circle { + background: rgba(76, 72, 255, 0.1); + color: #4C48FF; +} + +.dark .tk-feature-row--highlighted .tk-feature-icon-circle { + background: rgba(129, 140, 248, 0.15); + color: #818cf8; +} + +.tk-feature-icon-circle { + width: 28px; + height: 28px; + border-radius: 50%; + background: #f3f4f6; + display: flex; + align-items: center; + justify-content: center; + flex-shrink: 0; + color: #6b7280; +} + +.dark .tk-feature-icon-circle { background: #1f2937; color: #9ca3af; } + +.tk-feature-chevron { margin-left: auto; flex-shrink: 0; color: #4C48FF; } +.dark .tk-feature-chevron { color: #818cf8; } + +/* ============================================================ + Whitepaper CTA + ============================================================ */ + +.tk-whitepaper { + display: flex; + align-items: center; + gap: 2rem; + padding: 1.75rem 2rem; + background: linear-gradient(135deg, #4C48FF 0%, #3730d4 100%); + border-radius: 12px; +} + +.tk-whitepaper-thumb { + width: 80px; + height: 80px; + object-fit: contain; + border-radius: 8px; + flex-shrink: 0; + box-shadow: 0 8px 28px rgba(0, 0, 0, 0.35); +} + +.tk-whitepaper-text { + font-size: 0.875rem; + color: rgba(255, 255, 255, 0.85); + margin: 0 0 0.75rem; + line-height: 1.6; +} + +.tk-whitepaper-link { + color: white; + font-weight: 600; + text-decoration: none; + font-size: 0.9375rem; + transition: opacity 0.15s; +} + +.tk-whitepaper-link:hover { opacity: 0.85; } + +/* ============================================================ + Beta badge + ============================================================ */ + +.tk-badge { + font-size: 0.7rem; + background: #ede9fe; + color: #4C48FF; + border-radius: 4px; + padding: 1px 6px; + margin-left: 6px; + font-weight: 600; + vertical-align: middle; } -#hidden-content-simple[data-open="true"] { - display: block; /* Or inline, inline-block, etc., as needed */ +.dark .tk-badge { + background: rgba(76, 72, 255, 0.2); + color: #818cf8; } diff --git a/welcome.mdx b/welcome.mdx index c6f02400..7a91b7b4 100644 --- a/welcome.mdx +++ b/welcome.mdx @@ -4,160 +4,402 @@ description: "Secure, flexible, and scalable wallet infrastructure" mode: "custom" --- -
    - - - -
    - -

    Secure, flexible, and scalable wallet infrastructure

    - -

    - Turnkey is infrastructure for generating wallets and keys, signing transactions, and controlling who can use them, when, and how. Private keys are secured in hardware-isolated enclaves and never exposed — not even to Turnkey. -

    - -
    { - if (typeof window !== 'undefined') { - document.dispatchEvent(new KeyboardEvent('keydown', { key: 'k', metaKey: true, bubbles: true })); - } - }} - style={{ - display: 'flex', - alignItems: 'center', - gap: '12px', - borderRadius: '8px', - border: '1px solid #e5e7eb', - backgroundColor: '#f9fafb', - padding: '12px 16px', - cursor: 'pointer', - maxWidth: '560px', - margin: '0 auto' - }} -> - - - - Search Turnkey's docs... - ⌘K -
    +
    +{/* ── HERO ─────────────────────────────────────────────────────────────── */} +
    +
    +

    Secure, flexible, and
    scalable wallet infrastructure

    +

    + Turnkey is infrastructure for generating wallets and keys, signing transactions, and controlling who can use them, when, and how. Private keys are secured in hardware-isolated enclaves and never exposed — not even to Turnkey. +

    +
    { + if (typeof window !== 'undefined') { + document.dispatchEvent(new KeyboardEvent('keydown', { key: 'k', metaKey: true, bubbles: true })); + } + }} + > + + + + Search Turnkey's docs... + ⌘K +
    +
    +
    +
    + + +
    + Turnkey hero illustration + Turnkey hero illustration +
    -

    Build with Turnkey

    +{/* ── BUILD WITH TURNKEY ───────────────────────────────────────────────── */} +
    + + -
    +
    + Solutions layer + Solutions layer + SDK layer + SDK layer + API layer + API layer +
    +
    +
    +
    -
    - -
    -
    Solutions
    -
    Pre-built patterns for common use cases
    -
    +
    -
    -

    - Build at whichever level best meets your needs. Start with Solutions for common patterns, go deeper with our SDKs for more control, or reach all the way down to the API for complete flexibility. The full stack is always available. -

    - + +{/* ── SOLUTIONS ────────────────────────────────────────────────────────── */} +

    Explore our solutions

    + +
    + +
    +
    + Embedded Wallets +
    +
    + Embedded Wallets +

    Build wallets directly into your app. Users authenticate with email, passkeys, or social login. You control the experience.

    +
    -
    - -
    +
    +
    + Company Wallets +
    +
    + Company Wallets +

    Automate your onchain operations with wallets, keys and programmable controls purpose built for scale.

    + +
    +
    -

    Explore our solutions

    +
    +
    + Key Management +
    +
    + Key Management +

    Store and manage keys for encryption, signing, and access control. Policy-gated and hardware-isolated.

    + +
    +
    - +
    +
    + Verifiable Cloud +
    +
    + Verifiable Cloud Beta +

    Run verifiable compute in hardware-isolated enclaves. Tamper-evident execution you can prove.

    + +
    +
    - Embedded Wallets} icon="wallet"> - Build wallets directly into your app. Users authenticate with email, passkeys, or social login. You control the experience. +
    - {/* sync-start: embedded-wallets-use-cases */} - 1. [Embedded Consumer Wallets](/embedded-wallets/code-examples/embedded-consumer-wallet) - 2. [Embedded Business Wallets](/products/embedded-business-wallets/overview) - 3. [Embedded Wallet-as-a-Service](/embedded-wallets/embedded-waas) - 4. [Agentic Wallets](/products/embedded-wallets/features/agentic-wallets) - {/* sync-end: embedded-wallets-use-cases */} - +{/* ── FEATURES ─────────────────────────────────────────────────────────── */} +

    Explore our features

    - Company Wallets} icon="building"> - Automate your onchain operations with wallets, keys and programmable controls purpose built for scale. +
    - {/* sync-start: company-wallets-use-cases */} - 1. [Signing Transactions](/company-wallets/code-examples/signing-transactions) - 2. [Smart Contract Management](/company-wallets/code-examples/smart-contract-management) - 3. [Payment Orchestration](/company-wallets/code-examples/payment-orchestration) - 4. [Agentic Wallets](/company-wallets/use-cases/agentic-wallets) - {/* sync-end: company-wallets-use-cases */} - + - + -
    -
    Other solutions
    - -
    - -

    Explore our features

    - - - - - - - - - - - - - - - - - - - - -
    -
    Read our whitepaper for an in-depth look at Turnkey's security model and verifiable key management infrastructure.
    - - Read the Turnkey Whitepaper → - +{/* ── WHITEPAPER CTA ───────────────────────────────────────────────────── */} +
    + Turnkey Whitepaper +
    +

    Read our whitepaper for an in-depth look at Turnkey's security model and verifiable key management infrastructure.

    + + Read the Turnkey Whitepaper → + +
    From 1f097f3bd3fb5d1477e07d9630fd050a72e0de9a Mon Sep 17 00:00:00 2001 From: Lucy Aziz Date: Thu, 14 May 2026 12:24:11 -0400 Subject: [PATCH 059/117] Match Figma v2.2: content, layout, and interaction fixes - Search bar text: Search... - Hero headline: explicit line breaks to match Figma - Build section: SDKs label, corrected API desc, full-stack sentence - Build links: icon + dark text style matching Figma - Selector card: remove outer border, keep row dividers only - Solutions: inline horizontal sub-links (no icons), corrected content - Company Wallets: Payment Orchestration + Smart Contract Management only - Key Management: correct Figma description text - Verifiable Cloud: "Turnkey Verifiable Cloud" title + Figma description - Features: 3 column headers (Manage wallets & keys / Control access / Transact programmatically), correct items per column, Gas Sponsorship and Balances added, Transaction management pre-highlighted in purple - Whitepaper: white card with border, purple link with book icon - Section dividers between all sections - Feature hover: purple highlight Co-Authored-By: Claude Sonnet 4.6 --- styles.css | 153 ++++++++++++++++++------------- welcome.mdx | 260 ++++++++++++++++++---------------------------------- 2 files changed, 181 insertions(+), 232 deletions(-) diff --git a/styles.css b/styles.css index c6db8357..903290f6 100644 --- a/styles.css +++ b/styles.css @@ -153,7 +153,7 @@ } .tk-hero-content { - flex: 0 0 52%; + flex: 0 0 40%; } .tk-hero-headline { @@ -248,7 +248,6 @@ .tk-hero-img { position: relative; width: 100%; - max-width: 520px; height: auto; } @@ -312,14 +311,19 @@ } .tk-build-link { - color: #4C48FF; - font-weight: 600; + display: inline-flex; + align-items: center; + gap: 6px; + color: #374151; + font-weight: 500; text-decoration: none; - font-size: 0.9375rem; - transition: opacity 0.15s; + font-size: 0.875rem; + transition: color 0.15s; } -.tk-build-link:hover { opacity: 0.75; } +.dark .tk-build-link { color: #d1d5db; } +.tk-build-link:hover { color: #4C48FF; } +.dark .tk-build-link:hover { color: #818cf8; } /* Cube */ .tk-cube-illustration { @@ -333,19 +337,17 @@ width: 100%; max-width: 278px; margin: 0 auto; + aspect-ratio: 278 / 256; } .tk-plane-img { - display: block; - width: 100%; - height: auto; - transition: opacity 0.2s ease; -} - -.tk-plane-img:not(:first-of-type) { position: absolute; top: 0; left: 0; + width: 100%; + height: 100%; + object-fit: contain; + transition: opacity 0.2s ease; } /* Default: plane A (Solutions layer) visible */ @@ -402,23 +404,22 @@ .tk-plane-overlay-b { top: 25%; height: 38%; } .tk-plane-overlay-c { top: 57%; height: 43%; } -/* Selector card */ +/* Selector card — no outer border, just dividers between rows */ .tk-selector-card { - border: 1px solid #e5e7eb; - border-radius: 12px; - overflow: hidden; + border: none; + border-radius: 0; + overflow: visible; } -.dark .tk-selector-card { border-color: #374151; } - .tk-selector-row { display: flex; align-items: center; gap: 12px; - padding: 14px 16px; + padding: 12px 14px; text-decoration: none; color: inherit; transition: background 0.15s, opacity 0.15s; + border-radius: 8px; border-bottom: 1px solid #e5e7eb; } @@ -426,7 +427,7 @@ .dark .tk-selector-row { border-bottom-color: #374151; } .tk-selector-card:hover .tk-selector-row:not(:hover) { opacity: 0.4; } -.tk-selector-row:hover { background: rgba(76, 72, 255, 0.06); } +.tk-selector-row:hover { background: rgba(76, 72, 255, 0.06); border-radius: 8px; } .dark .tk-selector-row:hover { background: rgba(76, 72, 255, 0.1); } .tk-selector-row:hover .tk-selector-label { color: #4C48FF; } .tk-selector-row:hover .tk-selector-icon { background: rgba(76, 72, 255, 0.1); color: #4C48FF; } @@ -550,33 +551,24 @@ .tk-solution-links { display: flex; - flex-direction: column; - gap: 2px; + flex-direction: row; + flex-wrap: wrap; + gap: 2px 14px; + align-items: center; } .tk-solution-link { - display: flex; - align-items: center; - gap: 8px; text-decoration: none; - padding: 3px 0; - transition: color 0.15s; - color: #6b7280; -} - -.tk-solution-link:hover { color: #4C48FF; } -.dark .tk-solution-link { color: #6b7280; } -.dark .tk-solution-link:hover { color: #818cf8; } - -.tk-uc-icon { - width: 36px; - height: 36px; - border-radius: 6px; - flex-shrink: 0; - object-fit: contain; + font-size: 0.8125rem; + font-weight: 500; + color: #4C48FF; + transition: opacity 0.15s; + padding: 1px 0; } -.tk-solution-link-text { font-size: 0.8125rem; line-height: 1.3; } +.tk-solution-link:hover { opacity: 0.75; color: #4C48FF; } +.dark .tk-solution-link { color: #818cf8; } +.dark .tk-solution-link:hover { opacity: 0.75; } /* ============================================================ Features section @@ -592,12 +584,22 @@ @media (min-width: 769px) and (max-width: 1024px) { .tk-features-grid { grid-template-columns: repeat(2, 1fr); } } .tk-feature-list { - border: 1px solid #e5e7eb; - border-radius: 12px; - overflow: hidden; + border-radius: 0; + overflow: visible; +} + +.tk-feature-list-heading { + font-size: 0.75rem; + font-weight: 600; + color: #9ca3af; + text-transform: uppercase; + letter-spacing: 0.07em; + padding: 0 0 0.625rem; + margin: 0 0 0.25rem; + border-bottom: 1px solid #e5e7eb; } -.dark .tk-feature-list { border-color: #374151; } +.dark .tk-feature-list-heading { color: #6b7280; border-bottom-color: #374151; } .tk-feature-heading { font-size: 0.75rem; @@ -625,8 +627,22 @@ .tk-feature-row:last-child { border-bottom: none; } .dark .tk-feature-row { color: #d1d5db; border-bottom-color: #1f2937; } -.tk-feature-row:hover { background: #f9fafb; } -.dark .tk-feature-row:hover { background: #111827; } +.tk-feature-row:hover { + background: rgba(76, 72, 255, 0.06); + color: #4C48FF; +} +.tk-feature-row:hover .tk-feature-icon-circle { + background: rgba(76, 72, 255, 0.1); + color: #4C48FF; +} +.dark .tk-feature-row:hover { + background: rgba(76, 72, 255, 0.12); + color: #818cf8; +} +.dark .tk-feature-row:hover .tk-feature-icon-circle { + background: rgba(129, 140, 248, 0.15); + color: #818cf8; +} .tk-feature-row--highlighted { color: #4C48FF; } .dark .tk-feature-row--highlighted { color: #818cf8; } @@ -665,37 +681,50 @@ .tk-whitepaper { display: flex; align-items: center; - gap: 2rem; - padding: 1.75rem 2rem; - background: linear-gradient(135deg, #4C48FF 0%, #3730d4 100%); + gap: 1.5rem; + padding: 1.5rem; + background: white; + border: 1px solid #e5e7eb; border-radius: 12px; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06); +} + +.dark .tk-whitepaper { + background: #111827; + border-color: #374151; + box-shadow: none; } .tk-whitepaper-thumb { - width: 80px; - height: 80px; - object-fit: contain; - border-radius: 8px; + width: 72px; flex-shrink: 0; - box-shadow: 0 8px 28px rgba(0, 0, 0, 0.35); + border-radius: 4px; + box-shadow: 0 4px 16px rgba(0, 0, 0, 0.15); + display: block; } .tk-whitepaper-text { font-size: 0.875rem; - color: rgba(255, 255, 255, 0.85); - margin: 0 0 0.75rem; + color: #6b7280; + margin: 0 0 0.625rem; line-height: 1.6; } +.dark .tk-whitepaper-text { color: #9ca3af; } + .tk-whitepaper-link { - color: white; + display: inline-flex; + align-items: center; + gap: 6px; + color: #4C48FF; font-weight: 600; text-decoration: none; - font-size: 0.9375rem; + font-size: 0.875rem; transition: opacity 0.15s; } -.tk-whitepaper-link:hover { opacity: 0.85; } +.dark .tk-whitepaper-link { color: #818cf8; } +.tk-whitepaper-link:hover { opacity: 0.75; } /* ============================================================ Beta badge diff --git a/welcome.mdx b/welcome.mdx index 7a91b7b4..063e0b5b 100644 --- a/welcome.mdx +++ b/welcome.mdx @@ -8,8 +8,8 @@ mode: "custom" {/* ── HERO ─────────────────────────────────────────────────────────────── */}
    -
    -

    Secure, flexible, and
    scalable wallet infrastructure

    +
    +

    Secure, flexible,
    and scalable
    wallet infrastructure

    Turnkey is infrastructure for generating wallets and keys, signing transactions, and controlling who can use them, when, and how. Private keys are secured in hardware-isolated enclaves and never exposed — not even to Turnkey.

    @@ -24,8 +24,8 @@ mode: "custom" - Search Turnkey's docs... - ⌘K + Search... + ⌘K
    @@ -38,15 +38,29 @@ mode: "custom"
    +
    + {/* ── BUILD WITH TURNKEY ───────────────────────────────────────────────── */}

    Build with Turnkey

    -

    Build at whichever level best meets your needs. Start with Solutions for common patterns, go deeper with our SDKs for more control, or reach all the way down to the API for complete flexibility.

    +

    Build at whichever level best meets your needs. Start with Solutions for common patterns, go deeper with our SDKs for more control, or reach all the way down to the API for complete flexibility. The full stack is always available.

    @@ -84,7 +98,7 @@ mode: "custom" - SDK + SDKs TypeScript, React, React Native, and more @@ -97,7 +111,7 @@ mode: "custom" API - REST API for complete control over every operation + REST API for controlling every operation @@ -105,8 +119,10 @@ mode: "custom"
    +
    + {/* ── SOLUTIONS ────────────────────────────────────────────────────────── */} -

    Explore our solutions

    +

    Explore solutions

    @@ -118,26 +134,10 @@ mode: "custom" Embedded Wallets

    Build wallets directly into your app. Users authenticate with email, passkeys, or social login. You control the experience.

    @@ -150,24 +150,8 @@ mode: "custom" Company Wallets

    Automate your onchain operations with wallets, keys and programmable controls purpose built for scale.

    @@ -178,131 +162,69 @@ mode: "custom"
    Key Management -

    Store and manage keys for encryption, signing, and access control. Policy-gated and hardware-isolated.

    +

    Enterprise-grade security for your most sensitive keys — hardware-backed with programmable access controls.

    - Verifiable Cloud + Turnkey Verifiable Cloud
    - Verifiable Cloud Beta -

    Run verifiable compute in hardware-isolated enclaves. Tamper-evident execution you can prove.

    + Turnkey Verifiable Cloud Beta +

    Run any code in isolated, verifiable secure enclaves powered by Turnkey's trusted infrastructure.

    +
    + {/* ── FEATURES ─────────────────────────────────────────────────────────── */} -

    Explore our features

    +

    Explore features

    {/* ── WHITEPAPER CTA ───────────────────────────────────────────────────── */} +
    +
    Turnkey Whitepaper

    Read our whitepaper for an in-depth look at Turnkey's security model and verifiable key management infrastructure.

    - Read the Turnkey Whitepaper → + + + + + + Read the Turnkey Whitepaper
    From 4e422f9445241598ef2d2cec83220a593302db0c Mon Sep 17 00:00:00 2001 From: Lucy Aziz Date: Thu, 14 May 2026 13:16:03 -0400 Subject: [PATCH 060/117] Layout, color, and interaction polish - Hero: illustration slides behind text on narrow screens (never shrinks vertically) - Solution cards: gray background (#f9fafb), increased row gap - Whitepaper: gray background, centered content - Feature headings: title-case bold to match Figma (no uppercase/tracking) - Transaction management: hover-only purple (remove permanent highlight) - Build links: dark text with icons per Figma style Co-Authored-By: Claude Sonnet 4.6 --- styles.css | 60 +++++++++++++++++++++++++++++++++-------------------- welcome.mdx | 3 +-- 2 files changed, 38 insertions(+), 25 deletions(-) diff --git a/styles.css b/styles.css index 903290f6..b6356f52 100644 --- a/styles.css +++ b/styles.css @@ -253,12 +253,27 @@ @media (max-width: 768px) { .tk-hero { - flex-direction: column; + flex-direction: row; padding: 2.5rem 0 2rem; - gap: 2rem; + gap: 0; + overflow: hidden; + position: relative; + } + .tk-hero-content { + flex: none; + width: 100%; + position: relative; + z-index: 1; + } + .tk-hero-illustration { + position: absolute; + right: -30%; + top: 0; + bottom: 0; + width: 70%; + pointer-events: none; + opacity: 0.25; } - .tk-hero-content { flex: none; width: 100%; } - .tk-hero-illustration { width: 100%; } .tk-hero-headline { font-size: 2.25rem; } } @@ -489,7 +504,8 @@ .tk-solutions-grid { display: grid; grid-template-columns: repeat(2, 1fr); - gap: 1rem; + gap: 1rem 1rem; + row-gap: 1.5rem; } @media (max-width: 768px) { @@ -500,15 +516,16 @@ display: flex; gap: 1.25rem; padding: 1.25rem; - border: 1px solid #e5e7eb; + background: #f9fafb; + border: 1px solid #f3f4f6; border-radius: 12px; align-items: flex-start; - transition: border-color 0.15s; + transition: border-color 0.15s, background 0.15s; } -.tk-solution-card:hover { border-color: #a5b4fc; } -.dark .tk-solution-card { border-color: #374151; } -.dark .tk-solution-card:hover { border-color: #6d5fd1; } +.tk-solution-card:hover { border-color: #e0e0fe; background: #f5f5ff; } +.dark .tk-solution-card { background: #111827; border-color: #1f2937; } +.dark .tk-solution-card:hover { border-color: #4C48FF40; } .tk-solution-thumbnail { flex-shrink: 0; @@ -589,17 +606,15 @@ } .tk-feature-list-heading { - font-size: 0.75rem; + font-size: 0.9375rem; font-weight: 600; - color: #9ca3af; - text-transform: uppercase; - letter-spacing: 0.07em; - padding: 0 0 0.625rem; - margin: 0 0 0.25rem; + color: #111827; + padding: 0 0 0.75rem; + margin: 0 0 0; border-bottom: 1px solid #e5e7eb; } -.dark .tk-feature-list-heading { color: #6b7280; border-bottom-color: #374151; } +.dark .tk-feature-list-heading { color: #f9fafb; border-bottom-color: #374151; } .tk-feature-heading { font-size: 0.75rem; @@ -681,18 +696,17 @@ .tk-whitepaper { display: flex; align-items: center; + justify-content: center; gap: 1.5rem; - padding: 1.5rem; - background: white; - border: 1px solid #e5e7eb; + padding: 2rem; + background: #f9fafb; + border: 1px solid #f3f4f6; border-radius: 12px; - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06); } .dark .tk-whitepaper { background: #111827; - border-color: #374151; - box-shadow: none; + border-color: #1f2937; } .tk-whitepaper-thumb { diff --git a/welcome.mdx b/welcome.mdx index 063e0b5b..81af08f3 100644 --- a/welcome.mdx +++ b/welcome.mdx @@ -264,14 +264,13 @@ mode: "custom" Claim links - + Transaction management - From a50ffb8c34e22e26ac3ff4bbf1fbbfea80897e3c Mon Sep 17 00:00:00 2001 From: Lucy Aziz Date: Thu, 14 May 2026 13:25:41 -0400 Subject: [PATCH 061/117] Hero layout, build links, and illustration behavior fixes - Hero illustration: always absolutely positioned at fixed 580px width, never shrinks vertically, slides behind text as viewport narrows, pointer-events: none prevents Mintlify lightbox behavior - Build links: purple color, tighter icons (circle-arrow + document) - Solutions grid: row-gap increased for breathing room Co-Authored-By: Claude Sonnet 4.6 --- styles.css | 72 ++++++++++++++++++++++++----------------------------- welcome.mdx | 8 +++--- 2 files changed, 36 insertions(+), 44 deletions(-) diff --git a/styles.css b/styles.css index b6356f52..97eb4fba 100644 --- a/styles.css +++ b/styles.css @@ -146,14 +146,19 @@ ============================================================ */ .tk-hero { + position: relative; + overflow: hidden; + padding: 4rem 0 3rem; + min-height: 360px; display: flex; align-items: center; - gap: 3rem; - padding: 4rem 0 3rem; } .tk-hero-content { - flex: 0 0 40%; + width: 46%; + flex-shrink: 0; + position: relative; + z-index: 2; } .tk-hero-headline { @@ -226,12 +231,19 @@ } .tk-hero-illustration { - position: relative; - flex: 1; - display: flex; - align-items: center; - justify-content: center; - overflow: hidden; + position: absolute; + right: -2rem; + top: 50%; + transform: translateY(-50%); + z-index: 1; + pointer-events: none; + user-select: none; +} + +/* Force a fixed pixel width — this locks the height; illustration never shrinks vertically */ +.tk-hero-illustration > * { + pointer-events: none; + cursor: default; } .tk-hero-grid { @@ -240,41 +252,22 @@ left: 50%; transform: translate(-50%, -50%); width: 130%; - min-width: 400px; pointer-events: none; opacity: 0.6; } .tk-hero-img { - position: relative; - width: 100%; + display: block; + width: 580px; /* fixed width locks height at ~290px regardless of viewport */ height: auto; + pointer-events: none; } @media (max-width: 768px) { - .tk-hero { - flex-direction: row; - padding: 2.5rem 0 2rem; - gap: 0; - overflow: hidden; - position: relative; - } - .tk-hero-content { - flex: none; - width: 100%; - position: relative; - z-index: 1; - } - .tk-hero-illustration { - position: absolute; - right: -30%; - top: 0; - bottom: 0; - width: 70%; - pointer-events: none; - opacity: 0.25; - } + .tk-hero { padding: 2.5rem 0 2rem; min-height: 280px; } + .tk-hero-content { width: 90%; } .tk-hero-headline { font-size: 2.25rem; } + /* Illustration stays absolutely positioned — shrinks behind text naturally */ } /* ============================================================ @@ -328,17 +321,16 @@ .tk-build-link { display: inline-flex; align-items: center; - gap: 6px; - color: #374151; + gap: 7px; + color: #4C48FF; font-weight: 500; text-decoration: none; font-size: 0.875rem; - transition: color 0.15s; + transition: opacity 0.15s; } -.dark .tk-build-link { color: #d1d5db; } -.tk-build-link:hover { color: #4C48FF; } -.dark .tk-build-link:hover { color: #818cf8; } +.dark .tk-build-link { color: #818cf8; } +.tk-build-link:hover { opacity: 0.75; } /* Cube */ .tk-cube-illustration { diff --git a/welcome.mdx b/welcome.mdx index 81af08f3..f68e0412 100644 --- a/welcome.mdx +++ b/welcome.mdx @@ -49,15 +49,15 @@ mode: "custom"
    - - + + Learn how Turnkey works - - + + Start building From d7168f5c5fcab26070463ec892b022d097c22cb4 Mon Sep 17 00:00:00 2001 From: Lucy Aziz Date: Thu, 14 May 2026 13:42:10 -0400 Subject: [PATCH 062/117] Build links and feature icons from untitleduico - Build links: ? circle for Learn / arrow-square for Start building - Feature icons: all 11 replaced with untitleduico SVGs (switch-vertical, credit-card, layers-three, clock, key, shield, link, coins-swap, lightning, currency-dollar-circle) Co-Authored-By: Claude Sonnet 4.6 --- welcome.mdx | 66 +++++++++++++++++++++++------------------------------ 1 file changed, 29 insertions(+), 37 deletions(-) diff --git a/welcome.mdx b/welcome.mdx index f68e0412..b753ef52 100644 --- a/welcome.mdx +++ b/welcome.mdx @@ -48,16 +48,17 @@ mode: "custom"

    Build at whichever level best meets your needs. Start with Solutions for common patterns, go deeper with our SDKs for more control, or reach all the way down to the API for complete flexibility. The full stack is always available.

    - - - + + + + Learn how Turnkey works - - - + + + Start building @@ -196,27 +197,24 @@ mode: "custom"
    Manage wallets & keys
    - - + + Import, export - - - - + + Embedded wallet kit - - - + + Account abstraction @@ -227,26 +225,24 @@ mode: "custom"
    Control access
    - - - + + Sessions - - - + + Delegated access - - + + Policy engine @@ -257,44 +253,40 @@ mode: "custom"
    Transact programmatically
    - - - + + Claim links - - + + Transaction management - - - - + + Gas Sponsorship - - + + Fiat onramp - - - + + Balances From 5a53489958a6d53d84a45b872128d33be14baec0 Mon Sep 17 00:00:00 2001 From: Lucy Aziz Date: Thu, 14 May 2026 13:43:59 -0400 Subject: [PATCH 063/117] Fix ? icon: filled purple circle with white question mark; CTAs on one line Co-Authored-By: Claude Sonnet 4.6 --- styles.css | 5 +++-- welcome.mdx | 6 +++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/styles.css b/styles.css index 97eb4fba..ac049002 100644 --- a/styles.css +++ b/styles.css @@ -314,8 +314,9 @@ .tk-build-links { display: flex; - flex-direction: column; - gap: 0.5rem; + flex-direction: row; + gap: 1.5rem; + flex-wrap: wrap; } .tk-build-link { diff --git a/welcome.mdx b/welcome.mdx index b753ef52..e1935446 100644 --- a/welcome.mdx +++ b/welcome.mdx @@ -49,9 +49,9 @@ mode: "custom"
    - - - + + + Learn how Turnkey works From 0a7c0690f5b33ee5d40976384274aa5cae79c1cd Mon Sep 17 00:00:00 2001 From: Lucy Aziz Date: Thu, 14 May 2026 13:44:16 -0400 Subject: [PATCH 064/117] Update SDK description copy Co-Authored-By: Claude Sonnet 4.6 --- welcome.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/welcome.mdx b/welcome.mdx index e1935446..d4a0e312 100644 --- a/welcome.mdx +++ b/welcome.mdx @@ -45,7 +45,7 @@ mode: "custom"

    Build with Turnkey

    -

    Build at whichever level best meets your needs. Start with Solutions for common patterns, go deeper with our SDKs for more control, or reach all the way down to the API for complete flexibility. The full stack is always available.

    +

    Build at whichever level best meets your needs. Start with Solutions for common patterns, use our SDKs for simplified integration paths, or reach all the way down to the API for complete flexibility. The full stack is always available.

    From 3881ad331c37ff99ff649fe8d6785be2c48fb272 Mon Sep 17 00:00:00 2001 From: Lucy Aziz Date: Thu, 14 May 2026 13:46:29 -0400 Subject: [PATCH 065/117] Replace ? SVG with CSS span to bypass Mintlify fill override Co-Authored-By: Claude Sonnet 4.6 --- welcome.mdx | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/welcome.mdx b/welcome.mdx index d4a0e312..44850314 100644 --- a/welcome.mdx +++ b/welcome.mdx @@ -48,11 +48,7 @@ mode: "custom"

    Build at whichever level best meets your needs. Start with Solutions for common patterns, use our SDKs for simplified integration paths, or reach all the way down to the API for complete flexibility. The full stack is always available.

    - - - - - + ? Learn how Turnkey works From d9c93e3bed96e1f784903ee48dcc845ef11a2960 Mon Sep 17 00:00:00 2001 From: Lucy Aziz Date: Thu, 14 May 2026 13:47:56 -0400 Subject: [PATCH 066/117] ? icon: outline circle with stroke-only question mark (no fill) Co-Authored-By: Claude Sonnet 4.6 --- welcome.mdx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/welcome.mdx b/welcome.mdx index 44850314..3d996a17 100644 --- a/welcome.mdx +++ b/welcome.mdx @@ -48,7 +48,11 @@ mode: "custom"

    Build at whichever level best meets your needs. Start with Solutions for common patterns, use our SDKs for simplified integration paths, or reach all the way down to the API for complete flexibility. The full stack is always available.

    - ? + + + + + Learn how Turnkey works From b7c8a4f89c5d469f65c5473270ace0c9e4dfe14b Mon Sep 17 00:00:00 2001 From: Lucy Aziz Date: Thu, 14 May 2026 14:37:47 -0400 Subject: [PATCH 067/117] Feature icons, link fixes, layout and UX polish MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Feature icons: gas pump, import/export arrow direction, tx management swap arrows - Delegated access link → /concepts/policies/delegated-access-overview - Agentic Wallets moved from Embedded Wallets to Company Wallets (3rd link) - Gas sponsorship links to anchor on transaction-management page - Balances links to /concepts/balances - Whitepaper: zoom disabled, thumbnail enlarged to 160px - Hero dark image fix: !important on light/dark switcher CSS - Search bar: ⌘K pushed to right end via flex:1 on placeholder span - Cube wrapper: fixed height 256px (no more aspect-ratio shrink on narrow viewports) Co-Authored-By: Claude Sonnet 4.6 --- styles.css | 13 +++++++------ welcome.mdx | 38 +++++++++++++++++++------------------- 2 files changed, 26 insertions(+), 25 deletions(-) diff --git a/styles.css b/styles.css index ac049002..ab115865 100644 --- a/styles.css +++ b/styles.css @@ -96,10 +96,10 @@ Light / dark image switching ============================================================ */ -.tk-img-light { display: block; } -.tk-img-dark { display: none; } -.dark .tk-img-light { display: none; } -.dark .tk-img-dark { display: block; } +.tk-img-light { display: block !important; } +.tk-img-dark { display: none !important; } +.dark .tk-img-light { display: none !important; } +.dark .tk-img-dark { display: block !important; } /* ============================================================ Asset placeholders @@ -344,8 +344,8 @@ position: relative; width: 100%; max-width: 278px; + height: 256px; margin: 0 auto; - aspect-ratio: 278 / 256; } .tk-plane-img { @@ -703,11 +703,12 @@ } .tk-whitepaper-thumb { - width: 72px; + width: 160px; flex-shrink: 0; border-radius: 4px; box-shadow: 0 4px 16px rgba(0, 0, 0, 0.15); display: block; + pointer-events: none; } .tk-whitepaper-text { diff --git a/welcome.mdx b/welcome.mdx index 3d996a17..b1cece8a 100644 --- a/welcome.mdx +++ b/welcome.mdx @@ -24,7 +24,7 @@ mode: "custom" - Search... + Search... ⌘K
    @@ -48,10 +48,8 @@ mode: "custom"

    Build at whichever level best meets your needs. Start with Solutions for common patterns, use our SDKs for simplified integration paths, or reach all the way down to the API for complete flexibility. The full stack is always available.

    @@ -153,6 +150,7 @@ mode: "custom"
    @@ -198,7 +196,7 @@ mode: "custom" - + Import, export @@ -206,7 +204,7 @@ mode: "custom" - + Embedded wallet kit @@ -214,7 +212,7 @@ mode: "custom" - + Account abstraction @@ -231,10 +229,10 @@ mode: "custom" Sessions - + - + Delegated access @@ -242,7 +240,7 @@ mode: "custom" - + Policy engine @@ -262,15 +260,17 @@ mode: "custom" - + Transaction management - + - - + + + + Gas Sponsorship @@ -278,12 +278,12 @@ mode: "custom" - + Fiat onramp - + @@ -299,7 +299,7 @@ mode: "custom"
    - Turnkey Whitepaper + Turnkey Whitepaper

    Read our whitepaper for an in-depth look at Turnkey's security model and verifiable key management infrastructure.

    From bcd9949e5ee0aceb90d9fe8d2c339d37547133b1 Mon Sep 17 00:00:00 2001 From: Graham Ritter Date: Thu, 14 May 2026 19:28:37 -0400 Subject: [PATCH 068/117] Replace Font Awesome icons with Untitled UI icons across docs Co-Authored-By: Claude Opus 4.6 --- ai/skills.mdx | 23 +-- authentication/overview.mdx | 36 +--- category/security.mdx | 138 ++-------------- .../code-examples/payment-orchestration.mdx | 19 +-- .../smart-contract-management.mdx | 23 +-- .../integration-guide/overview.mdx | 2 +- company-wallets/overview.mdx | 30 ++-- company-wallets/use-cases/agentic-wallets.mdx | 23 +-- concepts/organizations.mdx | 2 +- concepts/overview.mdx | 76 ++------- cookbook/landing.mdx | 129 ++++++++------- .../embedded-consumer-wallet.mdx | 24 ++- embedded-wallets/embedded-waas.mdx | 14 +- embedded-wallets/features/overview.mdx | 74 +++------ .../integration-guide/overview.mdx | 6 +- embedded-wallets/overview.mdx | 30 ++-- getting-started.mdx | 18 +- .../company-wallets-quickstart.mdx | 23 +-- .../embedded-wallet-quickstart.mdx | 26 +-- getting-started/quickstart.mdx | 26 +-- home.mdx | 76 +++------ images/icons/bank-note-01.svg | 5 + images/icons/bank.svg | 5 + images/icons/book-open-01.svg | 3 + images/icons/check-circle.svg | 5 + images/icons/clock.svg | 5 + images/icons/code-02.svg | 5 + images/icons/coins-01.svg | 5 + images/icons/cpu-chip-01.svg | 5 + images/icons/currency-dollar.svg | 5 + images/icons/dataflow-02.svg | 5 + images/icons/download-01.svg | 5 + images/icons/file-code-01.svg | 5 + images/icons/file-code-02.svg | 5 + images/icons/file-shield-02.svg | 5 + images/icons/git-branch-01.svg | 5 + images/icons/globe-01.svg | 5 + images/icons/intersect-circle.svg | 6 + images/icons/line-chart-up-01.svg | 5 + images/icons/link-03.svg | 5 + images/icons/lock-01.svg | 5 + images/icons/log-in-04.svg | 5 + images/icons/phone-01.svg | 5 + images/icons/puzzle-piece-01.svg | 5 + images/icons/refresh-cw-01.svg | 5 + images/icons/rocket-01.svg | 3 + images/icons/route.svg | 5 + images/icons/server-04.svg | 5 + images/icons/switch-horizontal-01.svg | 5 + images/icons/switch-horizontal-02.svg | 5 + images/icons/tablet-01.svg | 5 + images/icons/tool-01.svg | 5 + images/icons/trend-up-01.svg | 5 + images/icons/upload-01.svg | 5 + images/icons/wallet-04.svg | 5 + images/icons/zap.svg | 5 + networks/overview.mdx | 8 +- .../embedded-business-wallets/overview.mdx | 14 +- .../features/agentic-wallets.mdx | 22 +-- .../examples/encryption-key-storage.mdx | 23 +-- .../examples/enterprise-disaster-recovery.mdx | 23 +-- products/key-management/examples/overview.mdx | 26 +-- products/key-management/overview.mdx | 22 +-- sdks/flutter/authentication/overview.mdx | 36 +--- sdks/flutter/index.mdx | 63 +------ sdks/introduction.mdx | 34 ++-- sdks/kotlin/authentication/overview.mdx | 48 +----- sdks/kotlin/overview.mdx | 63 +------ sdks/react-native/authentication/overview.mdx | 38 +---- sdks/react-native/overview.mdx | 63 +------ sdks/react/index.mdx | 122 ++------------ sdks/swift.mdx | 14 +- sdks/swift/authentication/email-sms.mdx | 14 +- sdks/swift/authentication/overview.mdx | 37 +---- sdks/swift/authentication/passkey.mdx | 14 +- sdks/swift/authentication/social-logins.mdx | 14 +- sdks/swift/overview.mdx | 62 +------ sdks/typescript-frontend/index.mdx | 48 +----- sdks/typescript-frontend/legacy.mdx | 30 +--- snippets/feature-card.mdx | 37 +++++ snippets/shared/networks-links.mdx | 156 +++--------------- 81 files changed, 671 insertions(+), 1350 deletions(-) create mode 100644 images/icons/bank-note-01.svg create mode 100644 images/icons/bank.svg create mode 100644 images/icons/book-open-01.svg create mode 100644 images/icons/check-circle.svg create mode 100644 images/icons/clock.svg create mode 100644 images/icons/code-02.svg create mode 100644 images/icons/coins-01.svg create mode 100644 images/icons/cpu-chip-01.svg create mode 100644 images/icons/currency-dollar.svg create mode 100644 images/icons/dataflow-02.svg create mode 100644 images/icons/download-01.svg create mode 100644 images/icons/file-code-01.svg create mode 100644 images/icons/file-code-02.svg create mode 100644 images/icons/file-shield-02.svg create mode 100644 images/icons/git-branch-01.svg create mode 100644 images/icons/globe-01.svg create mode 100644 images/icons/intersect-circle.svg create mode 100644 images/icons/line-chart-up-01.svg create mode 100644 images/icons/link-03.svg create mode 100644 images/icons/lock-01.svg create mode 100644 images/icons/log-in-04.svg create mode 100644 images/icons/phone-01.svg create mode 100644 images/icons/puzzle-piece-01.svg create mode 100644 images/icons/refresh-cw-01.svg create mode 100644 images/icons/rocket-01.svg create mode 100644 images/icons/route.svg create mode 100644 images/icons/server-04.svg create mode 100644 images/icons/switch-horizontal-01.svg create mode 100644 images/icons/switch-horizontal-02.svg create mode 100644 images/icons/tablet-01.svg create mode 100644 images/icons/tool-01.svg create mode 100644 images/icons/trend-up-01.svg create mode 100644 images/icons/upload-01.svg create mode 100644 images/icons/wallet-04.svg create mode 100644 images/icons/zap.svg create mode 100644 snippets/feature-card.mdx diff --git a/ai/skills.mdx b/ai/skills.mdx index 3dfff11a..6e270808 100644 --- a/ai/skills.mdx +++ b/ai/skills.mdx @@ -3,6 +3,9 @@ title: "Agent Skills" description: "Opinionated instructions that tell AI agents how to interact with Turnkey through conversation, not code." --- +import { FeatureCard } from '/snippets/feature-card.mdx' +import { SolutionCard } from '/snippets/solution-card.mdx' + Each agent skill is a `SKILL.md` file with opinionated, step-by-step instructions for a specific Turnkey operation. Instead of an agent reasoning about API docs, parameter formatting, and chain-specific details on its own, skills give it exactly what it needs to execute correctly. They work with Claude Code, Codex, Gemini, and any AI assistant that can read files. Skills are for interacting with Turnkey directly through an AI assistant, not for building the application layer on top of Turnkey. If you're using a coding agent to develop a Turnkey integration, connect it to the [Docs MCP server](/developer-reference/using-llms) instead. @@ -71,17 +74,9 @@ cd turnkey-agent-skills ## Next steps - - - Give AI agents scoped signing authority with policy-enforced access control. - - - Define granular access controls for every signing action in your organization. - - - MCP server, docs context, and other ways to use LLMs with Turnkey. - - - Sign your first transaction with the Turnkey server SDK. - - +
    + + + + +
    diff --git a/authentication/overview.mdx b/authentication/overview.mdx index b262ef42..8ef8398b 100644 --- a/authentication/overview.mdx +++ b/authentication/overview.mdx @@ -3,6 +3,8 @@ title: Overview description: Learn about supported authentication methods for Turnkey, how to add them, and usage details. --- +import { FeatureCard } from '/snippets/feature-card.mdx' + Turnkey's wallet system supports granular controls on who can access wallets and what actions different users can perform. To enforce these controls, Turnkey's API must verify the identity of the party requesting a wallet action, ensuring that only authorized actions are executed by the system. This process is known as **authentication**. @@ -40,30 +42,10 @@ For information about managing authenticated sessions, see our [Sessions](/authe ## Related resources - - - Biometric and hardware-based passwordless authentication using WebAuthn - standard. - - - Passwordless login via one-time codes sent to users' email addresses. - - - User verification through one-time passwords sent via text message. - - - OAuth authentication with popular social providers like Google, Apple, and - Twitter. - - - Manage authenticated user sessions and access tokens in your application. - - +
    + + + + + +
    diff --git a/category/security.mdx b/category/security.mdx index 20ebd37f..2aca9e83 100644 --- a/category/security.mdx +++ b/category/security.mdx @@ -4,6 +4,8 @@ sidebarTitle: Overview description: "Learn how Turnkey achieves innovative, cloud scale, no single point of failure security." --- +import { FeatureCard } from '/snippets/feature-card.mdx' + Turnkey is the first verifiable key management system of its kind, securing millions of wallets and private keys for a wide variety of use cases. Turnkey's security architecture ensures that raw private keys are never exposed to Turnkey, your software, or your team. We provide end-to-end private key generation and access control within secure enclaves, with strong isolation guarantees and @@ -12,125 +14,17 @@ minimizes attack surface and enables reproducible, auditable deployments. From h every layer of Turnkey's architecture is designed to be secure, verifiable, and developer-friendly by default. Our whitepaper covers our holistic security model in-depth, and speaks to our vision for building verifiable key management infrastructure. Learn more about our approach to security here. - - - - Learn about Turnkey's unique security framework - - - - Learn how Turnkey handles private keys - - - - Overview of secure enclaves and how we use them - - - - Learn how we deploy our secure applications - - - - Learn how we ensure an end-to-end audit trail - - - Turnkey's disaster recovery process - - - - Learn about Turnkey's enclave to end-user secure channels - - - - Read about Turnkey's ambitious foundations with the Turnkey Whitepaper - - - - Overview of Turnkey's responsible disclosure program - - - - Which security responsibilities are Turnkey's and which are yours as an integrator. - - - - How Turnkey enclaves cryptographically prove their identity and integrity to a remote verifier. - - - - Cryptographic verification that only authorized code is running in Turnkey's secure enclaves. - - - +
    + + + + + + + + + + + + +
    diff --git a/company-wallets/code-examples/payment-orchestration.mdx b/company-wallets/code-examples/payment-orchestration.mdx index ac5eeb80..216fa27f 100644 --- a/company-wallets/code-examples/payment-orchestration.mdx +++ b/company-wallets/code-examples/payment-orchestration.mdx @@ -4,6 +4,9 @@ description: "Build automated sweep, deposit, and treasury flows with policy-enf mode: wide --- +import { FeatureCard } from '/snippets/feature-card.mdx' +import { SolutionCard } from '/snippets/solution-card.mdx' + Move funds programmatically across deposit, omnibus, and cold wallets with sub-100ms signing and policy-enforced access control at every transaction. For a basic signing walkthrough, start with the [Quickstart](/getting-started/company-wallets-quickstart). This guide covers the key implementation decisions for company wallet payment flows, then walks through a production example end-to-end: creating per-user deposit addresses, sweeping those deposits into an omnibus wallet with gas sponsorship, and gating treasury outflows with multi-party approval. @@ -162,14 +165,8 @@ For token transfers, the policy above parses the ERC-20 `transfer` function sign ## Next steps - - - Eliminate gas costs across thousands of deposit wallets with sponsored transactions. - - - Define granular access controls for every signing action in your organization. - - - Secure contract deployment, interactions, and upgrades with the same RBAC model. - - +
    + + + +
    diff --git a/company-wallets/code-examples/smart-contract-management.mdx b/company-wallets/code-examples/smart-contract-management.mdx index 76636b98..58862bde 100644 --- a/company-wallets/code-examples/smart-contract-management.mdx +++ b/company-wallets/code-examples/smart-contract-management.mdx @@ -4,6 +4,9 @@ description: "Secure the full smart contract lifecycle with policy-enforced depl mode: wide --- +import { FeatureCard } from '/snippets/feature-card.mdx' +import { SolutionCard } from '/snippets/solution-card.mdx' + This guide covers the key implementation decisions for securing smart contract operations, then walks through the contract lifecycle end-to-end: permissioned deployment, function-level interaction policies, and minimizing risk during upgrades. For basic signing, start with the [Quickstart](/getting-started/company-wallets-quickstart). ## Powered by Turnkey @@ -113,17 +116,9 @@ The `0x3659cfe6` selector matches `upgradeTo(address)`. After the upgrade comple ## Next steps - - - Upload ABIs and Solana IDLs for human-readable, argument-level policy control. - - - Define granular access controls for every signing action in your organization. - - - Build deposit wallets, sweep automations, and treasury flows with the same RBAC model. - - - Ready-made policy patterns for ERC-20 transfers, EIP-712 signing, and more. - - +
    + + + + +
    diff --git a/company-wallets/integration-guide/overview.mdx b/company-wallets/integration-guide/overview.mdx index 82ab53ba..749e4ded 100644 --- a/company-wallets/integration-guide/overview.mdx +++ b/company-wallets/integration-guide/overview.mdx @@ -27,7 +27,7 @@ choosing the right SDK for your stack. Pydantic type definitions, an HTTP-client for easy direct requests, and API-key stamper. - + Call the Turnkey REST API directly from any language. diff --git a/company-wallets/overview.mdx b/company-wallets/overview.mdx index fc7a9790..b39d4288 100644 --- a/company-wallets/overview.mdx +++ b/company-wallets/overview.mdx @@ -2,6 +2,8 @@ title: "Overview" --- +import { SolutionCard } from '/snippets/solution-card.mdx'; + ## What are company wallets? Company wallets are custodial wallets owned and operated by your organization. Your team controls the keys and defines who can sign, what they can sign, and under what conditions. **The wallets belong to your business; Turnkey provides the infrastructure to operate them securely at scale.** @@ -60,26 +62,26 @@ See the [Company Wallets Quickstart](/getting-started/company-wallets-quickstart Company wallets serve different needs depending on what you're building. Choose the pattern that matches your operations. - - + - Automate treasury operations, deposit sweeps, and cross-chain payouts with role-based controls at every transaction. - - + - Deploy, interact with, and upgrade smart contracts with RBAC and multi-party approval for high-value operations. - - + - Wallets operated by AI agents and automated systems with policy-scoped signing authority. - - + description="Wallets operated by AI agents and automated systems with policy-scoped signing authority." + /> +
    ## Ready to build? diff --git a/company-wallets/use-cases/agentic-wallets.mdx b/company-wallets/use-cases/agentic-wallets.mdx index 2c12de54..b4bf1db3 100644 --- a/company-wallets/use-cases/agentic-wallets.mdx +++ b/company-wallets/use-cases/agentic-wallets.mdx @@ -3,6 +3,9 @@ title: "Agentic Wallets" description: "Give AI agents scoped signing authority over company wallets with policy-enforced access control, spending caps, and multi-party consensus for high-value actions." --- +import { FeatureCard } from '/snippets/feature-card.mdx' +import { SolutionCard } from '/snippets/solution-card.mdx' + This guide covers the key implementation decisions for giving AI agents secure access to company wallets, then walks through provisioning an agent end-to-end: creating a scoped wallet, assigning a non-root agent user, and defining policies that constrain exactly what the agent can sign. For basic signing, start with the [Quickstart](/getting-started/company-wallets-quickstart). ## Turnkey Agent Skills @@ -225,17 +228,9 @@ SIGN_WITH= ## Next steps - - - Embeddable guides for provisioning, managing, and monitoring agents with Turnkey. - - - Define granular access controls for every signing action in your organization. - - - Upload ABIs for function-level policy control over agent contract interactions. - - - Agents can automate sweep, deposit, and treasury flows with the same RBAC model. - - +
    + + + + +
    diff --git a/concepts/organizations.mdx b/concepts/organizations.mdx index 46d7cbbc..10e6146b 100644 --- a/concepts/organizations.mdx +++ b/concepts/organizations.mdx @@ -45,4 +45,4 @@ Organizations have [resource limits](/concepts/resource-limits) for performance A sub-organization is an isolated organization that has a pointer to a parent organization. The parent organization has **read** access to all sub-organizations, but no **write** access. This means users within the parent organization have no ability to use wallets or alter any resources in the sub-organization. -For more information on sub-organizations and common use cases for this functionality, follow along in the next section . \ No newline at end of file +For more information on sub-organizations and common use cases for this functionality, follow along in the next section. \ No newline at end of file diff --git a/concepts/overview.mdx b/concepts/overview.mdx index bc0777bb..2e1e9b53 100644 --- a/concepts/overview.mdx +++ b/concepts/overview.mdx @@ -3,6 +3,8 @@ title: "Overview" description: "Turnkey is flexible, scalable, and secure wallet infrastructure that can be used for transaction automation (e.g., payments flows, smart contract management), or non-custodial embedded wallets. Turnkey offers low-level primitives that can be combined to accomplish a variety of goals." --- +import { FeatureCard } from ‘/snippets/feature-card.mdx’ + Turnkey’s security and flexibility enables you to build cutting-edge user experiences, whether you’re using our bare-bones API or pre-built UI components. To make the most out of your implementation, we recommend reading through the following Concepts page for a better understanding of how our products work, and how to best utilize all of Turnkey’s features. ### How Turnkey works @@ -88,69 +90,11 @@ Resources used to generate crypto addresses and sign transactions or messages. W Learn more about leveraging Wallets across different crypto ecosystems on our [Ecosystem Support](/networks/overview) page. - - - Understand Turnkey's core features and fundamentals. - - -{" "} - - - Learn about Organizations on Turnkey - - - Learn about sub-organizations on Turnkey - - -{" "} - - - 3 items - - -{" "} - - - Learn about Wallets on Turnkey - - -{" "} - - - Organization resource limits - - - - 5 items - - +
    + + + + + + +
    diff --git a/cookbook/landing.mdx b/cookbook/landing.mdx index 5103867f..79da3495 100644 --- a/cookbook/landing.mdx +++ b/cookbook/landing.mdx @@ -5,72 +5,79 @@ sidebarTitle: "Overview" slug: "cookbook/landing" --- - - - Lend and earn yield through Morpho's vaults, scoping wallet permissions to specific contracts - with Turnkey's policy engine. - - - Supply and borrow assets through Aave's lending markets, with Turnkey's policy engine enforcing - contract-level access controls. - - - Deposit and earn yield on Breeze using Turnkey-powered Solana wallets. - - - Swap tokens on Solana through Jupiter's aggregated liquidity, signing transactions with Turnkey. - - + + + + + - Bridge and swap tokens across chains with Li.Fi, using Turnkey to sign across networks. - - - Swap tokens across chains using 0x's swap platform, with Turnkey handling signing and allowance - management. - - - Discover and manage yield opportunities across 75+ networks, with Turnkey providing - policy-controlled signing. - - + + + - Enable gasless trading with builder attribution on Polymarket, including Safe deployment and - token approvals. - - + - Attribute onchain activity on Base to your app using builder codes, carried in Turnkey-signed - transactions. - - - Bridge and swap tokens across chains with Relay, signed by Turnkey wallets. - - - Onramp USD, mint stablecoins, and send payouts via Brale, using Turnkey's policy engine to - secure signing authority. - - + + + - Sponsor user gas on Tron leveraging Turnkey's key infrastructure with Tron's resource model. - - + description="Sponsor user gas on Tron leveraging Turnkey's key infrastructure with Tron's resource model." + /> +
    diff --git a/embedded-wallets/code-examples/embedded-consumer-wallet.mdx b/embedded-wallets/code-examples/embedded-consumer-wallet.mdx index 2ba617f4..913181bc 100644 --- a/embedded-wallets/code-examples/embedded-consumer-wallet.mdx +++ b/embedded-wallets/code-examples/embedded-consumer-wallet.mdx @@ -3,6 +3,8 @@ title: "Embedded Consumer Wallet" description: "Give every user of your application their own wallet, provisioned automatically at signup." --- +import { FeatureCard } from '/snippets/feature-card.mdx'; + With Turnkey, you can provision a dedicated wallet for every user as part of your application's signup flow, at any scale. Users authenticate with familiar methods like passkeys, email, or social login. They never manage keys or install extensions. ## Powered by Turnkey @@ -46,11 +48,17 @@ Typical requirements and how Turnkey addresses them: ## Next steps - - - Explore the live demo, clone a starter app, or jump straight into building. - - - Step-by-step guides for React, React Native, Flutter, Swift, and Kotlin. - - +
    + + +
    diff --git a/embedded-wallets/embedded-waas.mdx b/embedded-wallets/embedded-waas.mdx index fb0651fb..60459fc1 100644 --- a/embedded-wallets/embedded-waas.mdx +++ b/embedded-wallets/embedded-waas.mdx @@ -4,6 +4,8 @@ sidebarTitle: "Wallet-as-a-Service" description: "Distribute embedded wallets through your developer platform with co-signing authority, billing gates, and compliance controls." --- +import { FeatureCard } from '/snippets/feature-card.mdx' + With Turnkey, you can build a platform that distributes embedded wallets to your own customers. Your platform abstracts Turnkey behind your own SDK, APIs, or UI components. A 2-of-2 root quorum model gives your platform co-signing authority over every transaction, enabling billing gates, compliance checks, and risk controls at the infrastructure layer, while end users remain non-custodial. ## Powered by Turnkey @@ -168,11 +170,7 @@ Integrate the wallet into your onboarding and runtime flows so every downstream ## Next steps - - - Create a Turnkey organization and generate your API keypair. - - - Detailed method documentation for all Turnkey SDKs. - - +
    + + +
    diff --git a/embedded-wallets/features/overview.mdx b/embedded-wallets/features/overview.mdx index af174bf6..6e3299ed 100644 --- a/embedded-wallets/features/overview.mdx +++ b/embedded-wallets/features/overview.mdx @@ -3,59 +3,23 @@ title: "Features" sidebarTitle: "Overview" --- - - - - - - - - +import { FeatureCard } from '/snippets/feature-card.mdx' - - - - - - - - - - - {" "} - - - - - {" "} - - - - - {" "} - - - - - - - - - - - - - - - - - - - - - - - - - - +
    + + + + + + + + + + + + + + + + +
    diff --git a/embedded-wallets/integration-guide/overview.mdx b/embedded-wallets/integration-guide/overview.mdx index a7d5765d..2262cd41 100644 --- a/embedded-wallets/integration-guide/overview.mdx +++ b/embedded-wallets/integration-guide/overview.mdx @@ -27,13 +27,13 @@ and how much you want pre-built for you. React Wallet Kit doesn't apply. - **Dart SDK** — Cross-platform iOS and Android support. + Dart SDK — Cross-platform iOS and Android support. - **Swift SDK** — Native iOS integration. + Swift SDK — Native iOS integration. - **Kotlin SDK** — Native Android integration. + Kotlin SDK — Native Android integration. Call the Turnkey REST API directly from any language. diff --git a/embedded-wallets/overview.mdx b/embedded-wallets/overview.mdx index fd78bd45..dae71474 100644 --- a/embedded-wallets/overview.mdx +++ b/embedded-wallets/overview.mdx @@ -2,6 +2,8 @@ title: "Overview" --- +import { SolutionCard } from '/snippets/solution-card.mdx'; + ## What are embedded wallets? An embedded wallet is a crypto wallet built directly into your application. Instead of asking users to install a browser extension or manage seed phrases, your app handles wallet creation, authentication, and signing behind the scenes. **Users interact with your product; the wallet is infrastructure they never have to think about.** @@ -66,26 +68,26 @@ See the [Integration Guide](/embedded-wallets/integration-guide/overview) to sta Embedded wallets serve different needs depending on who holds the wallet and how it's operated. Choose the pattern that matches what you're building. - - + - One wallet per end user. Users authenticate with passkeys, email, or social login. No seed phrases or browser extensions. - - + - Shared wallets with role-based signing controls for teams, operators, and finance workflows. - - + - White-labeled wallet infrastructure for platforms that resell embedded wallets to their own customers. - - + description="White-labeled wallet infrastructure for platforms that resell embedded wallets to their own customers." + /> +
    ## Ready to build? diff --git a/getting-started.mdx b/getting-started.mdx index 33755280..ecdae349 100644 --- a/getting-started.mdx +++ b/getting-started.mdx @@ -5,16 +5,10 @@ mode: wide sidebarTitle: Overview --- - - - 2 items - +import { FeatureCard } from '/snippets/feature-card.mdx' - - Check out some of our example apps and use cases - - - - A checklist to help you get your app to production! - - +
    + + + +
    diff --git a/getting-started/company-wallets-quickstart.mdx b/getting-started/company-wallets-quickstart.mdx index 244eada1..02b5594e 100644 --- a/getting-started/company-wallets-quickstart.mdx +++ b/getting-started/company-wallets-quickstart.mdx @@ -4,6 +4,9 @@ description: "Get from zero to a signed transaction with Turnkey's Company Walle sidebarTitle: "Quickstart" --- +import { FeatureCard } from '/snippets/feature-card.mdx' +import { SolutionCard } from '/snippets/solution-card.mdx' + ## Prerequisites This guide assumes you've completed the steps to create an account, organization, and API keypair as described in the [account setup](/getting-started/quickstart) section. This guide uses the TypeScript server SDK (`@turnkey/sdk-server`). For other languages, see [Server SDKs](/sdks/introduction). @@ -147,17 +150,9 @@ console.log("Transaction hash:", txHash.hash); ## Next steps - - - Build deposit wallets, sweep automations, and treasury flows with policy-enforced access control. - - - Secure the full contract lifecycle from deployment to upgrades with granular RBAC. - - - Define who can sign what with Turnkey's default-deny policy engine. - - - Explore server SDKs for TypeScript, Go, Ruby, Rust, and Python. - - +
    + + + + +
    diff --git a/getting-started/embedded-wallet-quickstart.mdx b/getting-started/embedded-wallet-quickstart.mdx index 2b4f9e04..11d601c3 100644 --- a/getting-started/embedded-wallet-quickstart.mdx +++ b/getting-started/embedded-wallet-quickstart.mdx @@ -6,6 +6,8 @@ description: sidebarTitle: "Quickstart" --- +import { FeatureCard } from '/snippets/feature-card.mdx' + Turnkey's embedded wallets let you add secure, fully-featured wallet experiences to your app. There are three ways to get started, depending on how hands-on you want to be. @@ -14,17 +16,11 @@ are three ways to get started, depending on how hands-on you want to be. feeds](/developer-reference/using-llms) for contextual help while you integrate. - - - Try a working embedded wallet in your browser. No setup required. - - - Start from a full demo app and make it your own. - - - Follow the integration guide to build from your own codebase. - - +
    + + + +
    --- @@ -35,13 +31,7 @@ The fastest way to see Turnkey embedded wallets in action. Our Wallet Kit. Use it to try out authentication flows, wallet creation, transaction signing, and more, all from your browser with no setup. - - Open wallets.turnkey.com and start exploring. - + ## Clone and customize diff --git a/getting-started/quickstart.mdx b/getting-started/quickstart.mdx index 34249207..e0d0422d 100644 --- a/getting-started/quickstart.mdx +++ b/getting-started/quickstart.mdx @@ -4,6 +4,8 @@ description: "Before diving into the code, let's set up your organization and co sidebarTitle: "Account setup" --- +import { FeatureCard } from '/snippets/feature-card.mdx' + ## Create an account Navigate to the [Turnkey Dashboard](https://app.turnkey.com/dashboard/auth/initial) to create an account and setup your organization: @@ -73,23 +75,7 @@ The API keypair is used to authenticate requests to Turnkey. We'll create one no Now that you've created an organization and API keypair, you're ready to start developing with Turnkey! - - - Build embedded wallets with Turnkey - - - Automate signing with Turnkey - - +
    + + +
    diff --git a/home.mdx b/home.mdx index 42c5d1b7..9c0a02da 100644 --- a/home.mdx +++ b/home.mdx @@ -4,6 +4,8 @@ description: "Turnkey is wallet infrastructure for developers — secure key man sidebarTitle: "About Turnkey" --- +import { FeatureCard } from '/snippets/feature-card.mdx' + Turnkey provides the infrastructure to create and manage wallets, sign transactions, and secure cryptographic keys at scale. Every signing operation happens inside hardware-backed secure enclaves — private keys are never exposed to Turnkey, your application, or your team. ## How Turnkey works @@ -43,59 +45,21 @@ Turnkey operates based on a [shared responsibility model](/security/shared-respo Browse the full set of product capabilities. - - - - - - - - - - - - - - - - - - - - {" "} - - - - - {" "} - - - - - {" "} - - - - - - - - - - - - - - - - - - - - - - - - - - +
    + + + + + + + + + + + + + + + + +
    diff --git a/images/icons/bank-note-01.svg b/images/icons/bank-note-01.svg new file mode 100644 index 00000000..422d85e1 --- /dev/null +++ b/images/icons/bank-note-01.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/images/icons/bank.svg b/images/icons/bank.svg new file mode 100644 index 00000000..eb9d2205 --- /dev/null +++ b/images/icons/bank.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/images/icons/book-open-01.svg b/images/icons/book-open-01.svg new file mode 100644 index 00000000..679534c4 --- /dev/null +++ b/images/icons/book-open-01.svg @@ -0,0 +1,3 @@ + + + diff --git a/images/icons/check-circle.svg b/images/icons/check-circle.svg new file mode 100644 index 00000000..30a69734 --- /dev/null +++ b/images/icons/check-circle.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/images/icons/clock.svg b/images/icons/clock.svg new file mode 100644 index 00000000..4a696d9d --- /dev/null +++ b/images/icons/clock.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/images/icons/code-02.svg b/images/icons/code-02.svg new file mode 100644 index 00000000..022574cb --- /dev/null +++ b/images/icons/code-02.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/images/icons/coins-01.svg b/images/icons/coins-01.svg new file mode 100644 index 00000000..6774349f --- /dev/null +++ b/images/icons/coins-01.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/images/icons/cpu-chip-01.svg b/images/icons/cpu-chip-01.svg new file mode 100644 index 00000000..932b112d --- /dev/null +++ b/images/icons/cpu-chip-01.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/images/icons/currency-dollar.svg b/images/icons/currency-dollar.svg new file mode 100644 index 00000000..e58c2b09 --- /dev/null +++ b/images/icons/currency-dollar.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/images/icons/dataflow-02.svg b/images/icons/dataflow-02.svg new file mode 100644 index 00000000..7e2efe0d --- /dev/null +++ b/images/icons/dataflow-02.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/images/icons/download-01.svg b/images/icons/download-01.svg new file mode 100644 index 00000000..e01a826a --- /dev/null +++ b/images/icons/download-01.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/images/icons/file-code-01.svg b/images/icons/file-code-01.svg new file mode 100644 index 00000000..cf3600b0 --- /dev/null +++ b/images/icons/file-code-01.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/images/icons/file-code-02.svg b/images/icons/file-code-02.svg new file mode 100644 index 00000000..79b3071e --- /dev/null +++ b/images/icons/file-code-02.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/images/icons/file-shield-02.svg b/images/icons/file-shield-02.svg new file mode 100644 index 00000000..c8e271f1 --- /dev/null +++ b/images/icons/file-shield-02.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/images/icons/git-branch-01.svg b/images/icons/git-branch-01.svg new file mode 100644 index 00000000..efd1d4c8 --- /dev/null +++ b/images/icons/git-branch-01.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/images/icons/globe-01.svg b/images/icons/globe-01.svg new file mode 100644 index 00000000..fc75e405 --- /dev/null +++ b/images/icons/globe-01.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/images/icons/intersect-circle.svg b/images/icons/intersect-circle.svg new file mode 100644 index 00000000..27710e2c --- /dev/null +++ b/images/icons/intersect-circle.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/images/icons/line-chart-up-01.svg b/images/icons/line-chart-up-01.svg new file mode 100644 index 00000000..5ef246c0 --- /dev/null +++ b/images/icons/line-chart-up-01.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/images/icons/link-03.svg b/images/icons/link-03.svg new file mode 100644 index 00000000..6271bcfc --- /dev/null +++ b/images/icons/link-03.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/images/icons/lock-01.svg b/images/icons/lock-01.svg new file mode 100644 index 00000000..7795c188 --- /dev/null +++ b/images/icons/lock-01.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/images/icons/log-in-04.svg b/images/icons/log-in-04.svg new file mode 100644 index 00000000..c498c1eb --- /dev/null +++ b/images/icons/log-in-04.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/images/icons/phone-01.svg b/images/icons/phone-01.svg new file mode 100644 index 00000000..1dda6b77 --- /dev/null +++ b/images/icons/phone-01.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/images/icons/puzzle-piece-01.svg b/images/icons/puzzle-piece-01.svg new file mode 100644 index 00000000..3778b40c --- /dev/null +++ b/images/icons/puzzle-piece-01.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/images/icons/refresh-cw-01.svg b/images/icons/refresh-cw-01.svg new file mode 100644 index 00000000..4d06836c --- /dev/null +++ b/images/icons/refresh-cw-01.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/images/icons/rocket-01.svg b/images/icons/rocket-01.svg new file mode 100644 index 00000000..265384a0 --- /dev/null +++ b/images/icons/rocket-01.svg @@ -0,0 +1,3 @@ + + + diff --git a/images/icons/route.svg b/images/icons/route.svg new file mode 100644 index 00000000..019d0b5c --- /dev/null +++ b/images/icons/route.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/images/icons/server-04.svg b/images/icons/server-04.svg new file mode 100644 index 00000000..c9b020b5 --- /dev/null +++ b/images/icons/server-04.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/images/icons/switch-horizontal-01.svg b/images/icons/switch-horizontal-01.svg new file mode 100644 index 00000000..7b29f24f --- /dev/null +++ b/images/icons/switch-horizontal-01.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/images/icons/switch-horizontal-02.svg b/images/icons/switch-horizontal-02.svg new file mode 100644 index 00000000..ccdbd10c --- /dev/null +++ b/images/icons/switch-horizontal-02.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/images/icons/tablet-01.svg b/images/icons/tablet-01.svg new file mode 100644 index 00000000..d16926c5 --- /dev/null +++ b/images/icons/tablet-01.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/images/icons/tool-01.svg b/images/icons/tool-01.svg new file mode 100644 index 00000000..683d724c --- /dev/null +++ b/images/icons/tool-01.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/images/icons/trend-up-01.svg b/images/icons/trend-up-01.svg new file mode 100644 index 00000000..38211507 --- /dev/null +++ b/images/icons/trend-up-01.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/images/icons/upload-01.svg b/images/icons/upload-01.svg new file mode 100644 index 00000000..d7775a4a --- /dev/null +++ b/images/icons/upload-01.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/images/icons/wallet-04.svg b/images/icons/wallet-04.svg new file mode 100644 index 00000000..24c20bc7 --- /dev/null +++ b/images/icons/wallet-04.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/images/icons/zap.svg b/images/icons/zap.svg new file mode 100644 index 00000000..0f2c4112 --- /dev/null +++ b/images/icons/zap.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/networks/overview.mdx b/networks/overview.mdx index 78eef1b1..2e445624 100644 --- a/networks/overview.mdx +++ b/networks/overview.mdx @@ -38,10 +38,10 @@ At our highest level of support, Turnkey offers the ability to parse transaction | Tier | Depth of support | EVM | SVM | BTC | ATOM | TRON | SUI | APT | TON | XRP | SEI | | ------ | :------------------------------- | --------------------------------------------- | --------------------------------------------- | --------------------------------------------- | --------------------------------------------- | --------------------------------------------- | --------------------------------------------- | --------------------------------------------- | --------------------------------------------- | --------------------------------------------- | --------------------------------------------- | -| Tier 1 | Curve-level | | | | | | | | | | | -| Tier 2 | Address derivation | | | | | | | | | | | -| Tier 3 | SDK construction and signing | | | | | | | | | | | -| Tier 4 | Transaction parsing and policies | | | | | | | | | | | +| Tier 1 | Curve-level | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | +| Tier 2 | Address derivation | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | +| Tier 3 | SDK construction and signing | ✓ | ✓ | | | | | | | | | +| Tier 4 | Transaction parsing and policies | ✓ | ✓ | ✓ | | ✓ | | | | | | We are continuously evaluating and adding support for emerging assets and protocols. If there are specific cryptocurrencies you'd like to see us offer deeper support for, please let us know by contacting us at [hello@turnkey.com](mailto:hello@turnkey.com), on [X](https://x.com/turnkeyhq/), or [on Slack](https://join.slack.com/t/clubturnkey/shared_invite/zt-3aemp2g38-zIh4V~3vNpbX5PsSmkKxcQ). diff --git a/products/embedded-business-wallets/overview.mdx b/products/embedded-business-wallets/overview.mdx index a47a619f..493702aa 100644 --- a/products/embedded-business-wallets/overview.mdx +++ b/products/embedded-business-wallets/overview.mdx @@ -3,6 +3,8 @@ title: "Embedded Business Wallets" description: "Shared wallets with role-based signing controls for teams, operators, and finance workflows." --- +import { FeatureCard } from '/snippets/feature-card.mdx' + With Turnkey, your application can provision wallets designed for team usage. Multiple end users operate within a single sub-organization with role-based access control governed by the policy engine. No seed phrases, no browser extensions. ## Architecture at a glance @@ -53,11 +55,7 @@ Typical requirements and how Turnkey addresses them: ## Next steps - - - Explore the live demo, clone a starter app, or jump straight into building. - - - Step-by-step guides for React, React Native, Flutter, Swift, and Kotlin. - - +
    + + +
    diff --git a/products/embedded-wallets/features/agentic-wallets.mdx b/products/embedded-wallets/features/agentic-wallets.mdx index 0ab6b6a9..b54ab1a7 100644 --- a/products/embedded-wallets/features/agentic-wallets.mdx +++ b/products/embedded-wallets/features/agentic-wallets.mdx @@ -4,6 +4,8 @@ sidebarTitle: "Agent Signing" description: "Let embedded wallet users delegate scoped signing authority to AI agents, controlled by granular policies" --- +import { FeatureCard } from '/snippets/feature-card.mdx' + ## What is an agentic wallet? An agentic wallet is a crypto wallet that an AI agent or automated backend can operate programmatically—signing transactions, interacting with smart contracts, and executing onchain strategies without requiring human approval for every action. @@ -196,17 +198,9 @@ For sensitive operations, require multiple approvers: ## Next steps - - - Client-side and server-side setup guides - - - Ready-to-use templates for EVM, Solana, Bitcoin, and Tron - - - Automate construction, gas sponsorship, and broadcasting - - - Decode ABI parameters for granular function-level policies - - +
    + + + + +
    diff --git a/products/key-management/examples/encryption-key-storage.mdx b/products/key-management/examples/encryption-key-storage.mdx index e5a8fd4d..ffefe17c 100644 --- a/products/key-management/examples/encryption-key-storage.mdx +++ b/products/key-management/examples/encryption-key-storage.mdx @@ -3,6 +3,9 @@ title: "Encryption Key Storage" description: "Build recovery flows with risk separation between your infrastructure and Turnkey." --- +import { FeatureCard } from '/snippets/feature-card.mdx' +import { SolutionCard } from '/snippets/solution-card.mdx' + Store and retrieve encryption keys from Turnkey's secure enclave with policy-controlled access. Your infrastructure holds encrypted data and Turnkey holds the encryption key. Neither party alone can access plaintext. For an overview of Turnkey's key management capabilities, see the [Key Management Overview](/products/key-management/overview). ## Powered by Turnkey @@ -127,17 +130,9 @@ A common pattern for applications: encrypt recovery bundles, store them in your ## Next steps - - - How Turnkey protects key material inside hardware-backed enclaves. - - - Define granular access controls and approval requirements for key operations. - - - API documentation for key export flows. - - - Import and recover wallets with quorum approval and a cryptographic audit trail. - - +
    + + + + +
    diff --git a/products/key-management/examples/enterprise-disaster-recovery.mdx b/products/key-management/examples/enterprise-disaster-recovery.mdx index 02cd3971..d344cb77 100644 --- a/products/key-management/examples/enterprise-disaster-recovery.mdx +++ b/products/key-management/examples/enterprise-disaster-recovery.mdx @@ -3,6 +3,9 @@ title: "Enterprise Disaster Recovery" description: "Import and recover wallets with end-to-end encryption, quorum-controlled access, and a cryptographic audit trail." --- +import { FeatureCard } from '/snippets/feature-card.mdx' +import { SolutionCard } from '/snippets/solution-card.mdx' + Back up wallets on Turnkey and recover them when you need to for incident response, provider migration, and redundancy. All key material is encrypted directly to Turnkey's secure enclave using [HPKE](/security/enclave-secure-channels), and every recovery operation is cryptographically stamped. For an overview of Turnkey's key management capabilities, see the [Key Management Overview](/products/key-management/overview). ## Key implementation decisions @@ -85,17 +88,9 @@ Import wallet keys into Turnkey's secure enclave ahead of time. If a key holder ## Next steps - - - Full guide for importing wallets and private keys into Turnkey. - - - Export wallets and keys when needed for migration or backup. - - - Define granular access controls and approval requirements. - - - Store encryption keys with risk separation between your infrastructure and Turnkey. - - +
    + + + + +
    diff --git a/products/key-management/examples/overview.mdx b/products/key-management/examples/overview.mdx index 63edf2db..3569d94f 100644 --- a/products/key-management/examples/overview.mdx +++ b/products/key-management/examples/overview.mdx @@ -4,23 +4,9 @@ sidebarTitle: "Overview" mode: wide --- - - - Use Turnkey as a secure key storage and retrieval service - - - Import and recover wallets in Turnkey’s secure enclaves with controlled access - - +import { SolutionCard } from ‘/snippets/solution-card.mdx’ + +
    + + +
    diff --git a/products/key-management/overview.mdx b/products/key-management/overview.mdx index 4da5cd13..bef55283 100644 --- a/products/key-management/overview.mdx +++ b/products/key-management/overview.mdx @@ -2,6 +2,8 @@ title: "Overview" --- +import { SolutionCard } from '/snippets/solution-card.mdx'; + ## What is key management? Turnkey provides infrastructure to store, recover, and operate on cryptographic keys beyond just wallet use cases. Instead of managing raw key material in your own infrastructure, your application delegates key storage to Turnkey's secure enclaves and controls access through programmable policies. **You define who can use a key and under what conditions; Turnkey ensures the key material is never exposed.** @@ -53,20 +55,20 @@ The [Turnkey Dashboard](https://app.turnkey.com) provides an interface for manag Key management serves different needs depending on how your application uses cryptographic keys. Choose the pattern that matches your requirements. - - + - Store encryption keys in Turnkey's secure enclave and separate risk between your infrastructure and Turnkey. Build user-controlled recovery, distributed trust, and policy-gated decryption. - - + - Import and recover wallets with end-to-end encryption, quorum-controlled access, and a cryptographic audit trail for treasury recovery, provider migration, and failover. - - + description="Import and recover wallets with end-to-end encryption, quorum-controlled access, and a cryptographic audit trail for treasury recovery, provider migration, and failover." + /> +
    ## Ready to build? diff --git a/sdks/flutter/authentication/overview.mdx b/sdks/flutter/authentication/overview.mdx index 15989f21..f20ea06e 100644 --- a/sdks/flutter/authentication/overview.mdx +++ b/sdks/flutter/authentication/overview.mdx @@ -4,6 +4,8 @@ description: "Learn how to set up, log in, or sign up easily in your Flutter app sidebarTitle: "Overview" --- +import { FeatureCard } from '/snippets/feature-card.mdx' + Turnkey's Flutter SDK makes authentication simple. You can call specific login and signup functions (email/SMS OTP, passkeys, or social logins) to build your own UI and auth flow. ## Authentication state @@ -136,32 +138,8 @@ Need to configure default user names, passkey names, wallet creations or anythin Follow the guides below to learn how to set up email and SMS authentication, passkey authentication, and social logins in your Flutter app. - - - Learn how to set up email and SMS authentication in your Flutter app. - - - Learn how to set up passkey authentication in your Flutter app. - - - Discover how to add social logins (Google, Apple, X, Discord) and handle wallet creation and account derivation. - - \ No newline at end of file +
    + + + +
    \ No newline at end of file diff --git a/sdks/flutter/index.mdx b/sdks/flutter/index.mdx index 8816f50b..4c0a1479 100644 --- a/sdks/flutter/index.mdx +++ b/sdks/flutter/index.mdx @@ -4,59 +4,14 @@ description: "Turnkey's Flutter SDK [`(turnkey_sdk_flutter)`](https://pub.dev/pa sidebarTitle: "Overview" --- -Find `turnkey_sdk_flutter` on [pub.dev](https://pub.dev/packages/turnkey_sdk_flutter) or view the source code on [GitHub](https://github.com/tkhq/dart-sdk)! - +import { FeatureCard } from '/snippets/feature-card.mdx' - - - The initial setup guide for integrating Turnkey's Flutter SDK into your app. - - - Learn how to set up authentication that leverages Turnkey's Auth Proxy, enabling fast and secure user authentication in your Flutter app. - - - Discover how to create and manage embedded wallets in your Flutter - application, including wallet creation, account derivation, and more. - - - - Learn how to sign transactions and messages in your Flutter app using - Turnkey's Embedded Wallets. - +Find `turnkey_sdk_flutter` on [pub.dev](https://pub.dev/packages/turnkey_sdk_flutter) or view the source code on [GitHub](https://github.com/tkhq/dart-sdk)! - - Learn how to customize the sub-organization settings in your Flutter app, - including wallet creation options and default usernames for different - authentication methods. - - \ No newline at end of file +
    + + + + + +
    \ No newline at end of file diff --git a/sdks/introduction.mdx b/sdks/introduction.mdx index 2674a2eb..18a4cb9b 100644 --- a/sdks/introduction.mdx +++ b/sdks/introduction.mdx @@ -14,29 +14,29 @@ Turnkey also has several [wrappers for popular web3 libraries](/category/web3-li | | TypeScript | React | React Native | Flutter | iOS | Android | |-------------------------------|-----------------------------------------------|-----------------------------------------------|-----------------------------------------------|-----------------------------------------------|-----------------------------------------------| ----------------------------------------------| | **Authentication** | | | | | | -| Email | | | | | | | -| SMS | | | | | | | -| Passkey | | | | | | | -| Google | | | | | | | -| Facebook | | | | | | | -| Apple | | | | | | | -| Discord | | | | | | | -| X (Twitter) | | | | | | | -| Web3 Wallets | | | | | | +| Email | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | +| SMS | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | +| Passkey | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | +| Google | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | +| Facebook | ✓ | ✓ | ✓ | | | | +| Apple | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | +| Discord | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | +| X (Twitter) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | +| Web3 Wallets | ✓ | ✓ | | | | | **Embedded Wallets** | | | | | | -| Wallet Creation | | | | | | | -| Signing | | | | | | | -| Import | | | | | | | -| Export | | | | | | | +| Wallet Creation | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | +| Signing | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | +| Import | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | +| Export | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | | **Arbitrary Request Signing** | | | | | | -| Stamping | | | | | | | +| Stamping | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ## Server side SDKs | | TypeScript | Go | Ruby | Rust | Python | |---------------------|------------|-----|------|------|--------| -| **Authentication** | | | | | | -| **Wallet Management** | | | | | | -| **Policy Management** | | | | | | +| **Authentication** | ✓ | ✓ | ✓ | ✓ | ✓ | +| **Wallet Management** | ✓ | ✓ | ✓ | | | +| **Policy Management** | ✓ | ✓ | ✓ | | | diff --git a/sdks/kotlin/authentication/overview.mdx b/sdks/kotlin/authentication/overview.mdx index f3de1f63..df6d8ecb 100644 --- a/sdks/kotlin/authentication/overview.mdx +++ b/sdks/kotlin/authentication/overview.mdx @@ -4,6 +4,8 @@ description: "Learn how to set up, log in, or sign up easily in your Android app sidebarTitle: "Overview" --- +import { FeatureCard } from '/snippets/feature-card.mdx' + The Kotlin SDK makes authentication simple. You can call specific login and signup functions to create your own UI components and authentication flow. @@ -22,43 +24,9 @@ You can learn more about customizing the sub-orgs you create in the [Sub-Organiz Follow the guides below to learn how to set up email and SMS authentication, passkey authentication, and social logins in your Android app. - - - Learn how to set up email and SMS authentication in your Android app. - - - Learn how to set up passkey authentication in your Android app. - - - Discover how to create and manage social logins in your Kotlin - application, including wallet creation, account derivation, and more. - - - Learn how to set up the relying party ID (rpId) for passkey authentication in your Android app. - - - \ No newline at end of file +
    + + + + +
    \ No newline at end of file diff --git a/sdks/kotlin/overview.mdx b/sdks/kotlin/overview.mdx index 6ed1354e..e77f8a86 100644 --- a/sdks/kotlin/overview.mdx +++ b/sdks/kotlin/overview.mdx @@ -4,59 +4,14 @@ description: "Turnkey's Kotlin SDK is the easiest way to integrate Turnkey's Emb sidebarTitle: "Overview" --- -Find Turnkey's `kotlin-sdk` on [Maven Central](https://central.sonatype.com/artifact/com.turnkey/sdk-kotlin) or view the source code on [GitHub](https://github.com/tkhq/kotlin-sdk). - - - - The initial setup guide for integrating Turnkey into your Android app. - - - Learn how to set up authentication that leverages Turnkey's Auth Proxy, enabling fast and secure user authentication in your Android app. - - - Discover how to create and manage embedded wallets in your Kotlin - application, including wallet creation, account derivation, and more. - +import { FeatureCard } from '/snippets/feature-card.mdx' - - Learn how to sign transactions and messages in your Android app using - Turnkey's Embedded Wallets. - - - - Learn how to customize the sub-organization settings in your Android app, - including wallet creation options and default usernames for different - authentication methods. - +Find Turnkey's `kotlin-sdk` on [Maven Central](https://central.sonatype.com/artifact/com.turnkey/sdk-kotlin) or view the source code on [GitHub](https://github.com/tkhq/kotlin-sdk). - \ No newline at end of file +
    + + + + + +
    \ No newline at end of file diff --git a/sdks/react-native/authentication/overview.mdx b/sdks/react-native/authentication/overview.mdx index 74e5d8f1..eeeefb23 100644 --- a/sdks/react-native/authentication/overview.mdx +++ b/sdks/react-native/authentication/overview.mdx @@ -4,6 +4,8 @@ description: "Learn how to set up, log in, or sign up easily in your React app u sidebarTitle: "Overview" --- +import { FeatureCard } from '/snippets/feature-card.mdx' + The Embedded Wallet Kit makes authentication simple. You can call specific login and signup functions to create your own UI components and authentication flow. @@ -52,34 +54,8 @@ You can learn more about customizing the sub-orgs you create in the [Sub-Organiz Follow the guides below to learn how to set up email and SMS authentication, passkey authentication, and social logins in your React Native app. - - - Learn how to set up email and SMS authentication in your React Native app. - - - Learn how to set up passkey authentication in your React Native app. - - - Discover how to create and manage social logins in your React Native - application, including wallet creation, account derivation, and more. - - - +
    + + + +
    diff --git a/sdks/react-native/overview.mdx b/sdks/react-native/overview.mdx index e28d6e92..566306eb 100644 --- a/sdks/react-native/overview.mdx +++ b/sdks/react-native/overview.mdx @@ -4,59 +4,14 @@ description: "Turnkey's Embedded Wallet Kit [`(@turnkey/react-native-wallet-kit) sidebarTitle: "Overview" --- -Find `@turnkey/react-native-wallet-kit` on [npm](https://www.npmjs.com/package/@turnkey/react-native-wallet-kit) or view the source code on [GitHub](https://github.com/tkhq/sdk/tree/main/packages/react-native-wallet-kit)! - - - - The initial setup guide for integrating the Embedded Wallet Kit into your React Native app. - - - Learn how to set up authentication that leverages Turnkey's Auth Proxy, enabling fast and secure user authentication in your React Native app. - - - Discover how to create and manage embedded wallets in your React Native - application, including wallet creation, account derivation, and more. - +import { FeatureCard } from '/snippets/feature-card.mdx' - - Learn how to sign transactions and messages in your React Native app using - Turnkey's Embedded Wallets. - - - - Learn how to customize the sub-organization settings in your React Native app, - including wallet creation options and default usernames for different - authentication methods. - +Find `@turnkey/react-native-wallet-kit` on [npm](https://www.npmjs.com/package/@turnkey/react-native-wallet-kit) or view the source code on [GitHub](https://github.com/tkhq/sdk/tree/main/packages/react-native-wallet-kit)! - +
    + + + + + +
    diff --git a/sdks/react/index.mdx b/sdks/react/index.mdx index ac5329c1..b2cb11b7 100644 --- a/sdks/react/index.mdx +++ b/sdks/react/index.mdx @@ -4,115 +4,19 @@ description: "Turnkey's Embedded Wallet Kit [`(@turnkey/react-wallet-kit)`](http sidebarTitle: "Overview" --- +import { FeatureCard } from '/snippets/feature-card.mdx' Find `@turnkey/react-wallet-kit` on [npm](https://www.npmjs.com/package/@turnkey/react-wallet-kit) or view the source code on [GitHub](https://github.com/tkhq/sdk/tree/main/packages/react-wallet-kit)! - - - - The initial setup guide for integrating the Embedded Wallet Kit into your React app. - - - Learn how to set up authentication that leverages Turnkey's Auth Proxy, enabling fast and secure user authentication in your React app. - - - Discover how to create and manage embedded wallets in your React - application, including wallet creation, account derivation, and more. - - - - Learn how to use external wallets alongside your embedded wallets in your - React app using Turnkey's abstractions. - - - - Learn how to sign transactions and messages in your React app using Turnkey's - Embedded Wallets or an external "browser" wallet. - - - - Customize the look and feel of the modals in your React app using the provided - UI components. - - - - Learn how to customize the sub-organization settings in your React app, - including wallet creation options and default usernames for different - authentication methods. - - - - Explore how to make advanced API requests to Turnkey's infrastructure. This - will help you build more complex features and functionalities in your app that - go beyond what is included as helper functions in the SDK. - - - Learn how to set up authentication using your backend and the Embedded Wallet - Kit. - - - Find solutions to common issues and errors you might encounter while using the - Embedded Wallet Kit in your React application. - - - +
    + + + + + + + + + + +
    diff --git a/sdks/swift.mdx b/sdks/swift.mdx index 9916f7b1..9979a3be 100644 --- a/sdks/swift.mdx +++ b/sdks/swift.mdx @@ -4,11 +4,9 @@ sidebarTitle: "iOS" description: "This documentation contains guides for using the [Turnkey Swift SDK](https://github.com/tkhq/swift-sdk)." --- - - - Using the Proxy Middleware from the Turnkey Swift SDK - - - Register Passkey - - +import { FeatureCard } from '/snippets/feature-card.mdx' + +
    + + +
    diff --git a/sdks/swift/authentication/email-sms.mdx b/sdks/swift/authentication/email-sms.mdx index f5d43ad3..7c903533 100644 --- a/sdks/swift/authentication/email-sms.mdx +++ b/sdks/swift/authentication/email-sms.mdx @@ -4,6 +4,8 @@ description: "Set up and implement email and SMS OTP authentication using the Tu sidebarTitle: "Email & SMS" --- +import { FeatureCard } from '/snippets/feature-card.mdx' + ## Overview This guide shows how to implement email or SMS OTP authentication using the Turnkey Swift SDK and the Auth Proxy. @@ -149,14 +151,4 @@ Tip: You can use a library like [PhoneNumberKit](https://github.com/PhoneNumberK ## Next steps - - - Learn how to add passkey login and signup to your app. - - + diff --git a/sdks/swift/authentication/overview.mdx b/sdks/swift/authentication/overview.mdx index 6f7ad034..089b67f6 100644 --- a/sdks/swift/authentication/overview.mdx +++ b/sdks/swift/authentication/overview.mdx @@ -4,6 +4,8 @@ description: "Learn how to set up, log in, or sign up in your Swift app using th sidebarTitle: "Overview" --- +import { FeatureCard } from '/snippets/feature-card.mdx' + ## Choose your authentication path Decide whether you'll use Turnkey's managed Auth Proxy (no backend required) or route auth through your own server. @@ -104,33 +106,8 @@ For more information, see [Sub-organization customization](/sdks/swift/sub-organ Follow the guides below to implement Email/SMS authentication, Passkey authentication, and Social Logins in your Swift app. - - - Learn how to set up email and SMS authentication using the Auth Proxy. - - - Learn how to set up passkey authentication with system UI and secure sessions. - - - Implement OAuth-based logins (Google, Apple, Discord, X) and complete auth via Auth Proxy. - - - +
    + + + +
    diff --git a/sdks/swift/authentication/passkey.mdx b/sdks/swift/authentication/passkey.mdx index 5bb7ce4d..6c6b53ed 100644 --- a/sdks/swift/authentication/passkey.mdx +++ b/sdks/swift/authentication/passkey.mdx @@ -4,6 +4,8 @@ description: "Set up and implement passkey authentication using the Turnkey Swif sidebarTitle: "Passkeys" --- +import { FeatureCard } from '/snippets/feature-card.mdx' + ## Overview This guide shows how to implement passkey authentication in a Swift app using the Turnkey Swift SDK. @@ -123,14 +125,4 @@ try await turnkey.signUpWithPasskey( ## Next steps - - - Set up OAuth-based logins (Google, Apple, Discord, X). - - + diff --git a/sdks/swift/authentication/social-logins.mdx b/sdks/swift/authentication/social-logins.mdx index 6319e97a..82fdea1f 100644 --- a/sdks/swift/authentication/social-logins.mdx +++ b/sdks/swift/authentication/social-logins.mdx @@ -4,6 +4,8 @@ description: "Implement Google, Apple, Discord, and X OAuth using the Turnkey Sw sidebarTitle: "Social logins" --- +import { FeatureCard } from '/snippets/feature-card.mdx' + ## Overview This guide shows how to implement social logins with the Turnkey Swift SDK. @@ -210,14 +212,4 @@ For more information, refer to the [Social Logins](/authentication/social-logins ## Next steps - - - Learn how to sign transactions and messages using wallets and accounts. - - + diff --git a/sdks/swift/overview.mdx b/sdks/swift/overview.mdx index 2fb65f58..439b0ac8 100644 --- a/sdks/swift/overview.mdx +++ b/sdks/swift/overview.mdx @@ -4,58 +4,14 @@ description: "Turnkey Swift SDK makes it simple to integrate Turnkey-powered emb sidebarTitle: "Overview" --- +import { FeatureCard } from '/snippets/feature-card.mdx' + Find the Turnkey Swift SDK on [GitHub](https://github.com/tkhq/swift-sdk). - - - Set up your Swift project with Swift Package Manager, configure the SDK, and - prepare your app for development. - - - Learn how to set up authentication that leverages Turnkey's Auth Proxy, - enabling fast and secure user authentication in your Swift app. - - - Discover how to create and manage embedded wallets in your Swift - application, including wallet creation, account derivation, and more. - - - Learn how to sign transactions and messages in your Swift app using Turnkey - sessions. - - - Learn how to customize the sub-organization settings in your Swift app, - including wallet creation options and default usernames for different - authentication methods. - - +
    + + + + + +
    diff --git a/sdks/typescript-frontend/index.mdx b/sdks/typescript-frontend/index.mdx index bbb2d2d7..6c4473dc 100644 --- a/sdks/typescript-frontend/index.mdx +++ b/sdks/typescript-frontend/index.mdx @@ -10,45 +10,11 @@ description: sidebarTitle: "Overview" --- - - - Learn how to set up `@turnkey/core` in your frontend JavaScript application. This page will guide you through creating a Turnkey organization, configuring authentication, installing the SDK, and initializing the client. - +import { FeatureCard } from '/snippets/feature-card.mdx' - - Learn how to set up log in or sign up using @turnkey/core in your frontend JavaScript application. - - - - Learn how to setup authentication using your backend and `@turnkey/core` - - - - Learn how to make advanced API requests to Turnkey's infrastructure. - - - +
    + + + + +
    diff --git a/sdks/typescript-frontend/legacy.mdx b/sdks/typescript-frontend/legacy.mdx index 92fd79c9..5e40691e 100644 --- a/sdks/typescript-frontend/legacy.mdx +++ b/sdks/typescript-frontend/legacy.mdx @@ -3,6 +3,8 @@ title: "@turnkey/sdk-browser (legacy)" sidebarTitle: "Legacy (@turnkey/sdk-browser)" --- +import { FeatureCard } from '/snippets/feature-card.mdx' + `@turnkey/sdk-browser` is our legacy TypeScript SDK for building embedded wallet experiences in browser applications. This package will soon be discontinued, if you're starting a new project, we recommend using [`@turnkey/core`](/sdks/typescript-frontend/index) instead. If you're using React, please consider using the [`@turnkey/react-wallet-kit`](/sdks/react/getting-started) for a more tailored experience. @@ -303,26 +305,8 @@ const result = await turnkey.serverSign("method", [param1, param2]); ## Examples - - - - - +
    + + + +
    diff --git a/snippets/feature-card.mdx b/snippets/feature-card.mdx new file mode 100644 index 00000000..695ddbb6 --- /dev/null +++ b/snippets/feature-card.mdx @@ -0,0 +1,37 @@ +export const FeatureCard = ({ title, description, icon, href }) => { + return ( +
    +
    + +
    +
    + {title} +
    + {description && ( +
    + {description} +
    + )} +
    +
    +
    + ); +}; diff --git a/snippets/shared/networks-links.mdx b/snippets/shared/networks-links.mdx index bb095883..bdb87f7c 100644 --- a/snippets/shared/networks-links.mdx +++ b/snippets/shared/networks-links.mdx @@ -1,137 +1,19 @@ - - - Overview - - - Ethereum (EVM) - - - Solana (SVM) - - - Bitcoin - - - Spark - - - Movement - - - Cosmos - - - Tron - - - Sui - - - Sei - - - Aptos - - - Tempo - - - Movement - - - IOTA - - - Others - - +import { FeatureCard } from '/snippets/feature-card.mdx' + +
    + + + + + + + + + + + + + + + +
    From 1eaa917e67f09c9594351801a54f9a72ee124722 Mon Sep 17 00:00:00 2001 From: Serge Stashkevich Date: Fri, 15 May 2026 13:30:45 +0300 Subject: [PATCH 069/117] Fix MDX parse errors from curly quotes in imports Smart quotes in import paths and inline styles broke the dev build and rendered /welcome as a blank page. Co-authored-by: Cursor --- concepts/overview.mdx | 2 +- products/key-management/examples/overview.mdx | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/concepts/overview.mdx b/concepts/overview.mdx index 2e1e9b53..efc806d7 100644 --- a/concepts/overview.mdx +++ b/concepts/overview.mdx @@ -3,7 +3,7 @@ title: "Overview" description: "Turnkey is flexible, scalable, and secure wallet infrastructure that can be used for transaction automation (e.g., payments flows, smart contract management), or non-custodial embedded wallets. Turnkey offers low-level primitives that can be combined to accomplish a variety of goals." --- -import { FeatureCard } from ‘/snippets/feature-card.mdx’ +import { FeatureCard } from '/snippets/feature-card.mdx' Turnkey’s security and flexibility enables you to build cutting-edge user experiences, whether you’re using our bare-bones API or pre-built UI components. To make the most out of your implementation, we recommend reading through the following Concepts page for a better understanding of how our products work, and how to best utilize all of Turnkey’s features. diff --git a/products/key-management/examples/overview.mdx b/products/key-management/examples/overview.mdx index 3569d94f..f2824ac4 100644 --- a/products/key-management/examples/overview.mdx +++ b/products/key-management/examples/overview.mdx @@ -4,9 +4,9 @@ sidebarTitle: "Overview" mode: wide --- -import { SolutionCard } from ‘/snippets/solution-card.mdx’ +import { SolutionCard } from '/snippets/solution-card.mdx' -
    +
    From 14f2dc926b047fe2767221f7a7bc591f44cbe38b Mon Sep 17 00:00:00 2001 From: Serge Stashkevich Date: Fri, 15 May 2026 13:33:12 +0300 Subject: [PATCH 070/117] Add design workflow guide for docs revamp contributors Documents branch strategy, local preview with Node 20, and PR process for welcome page design work. Co-authored-by: Cursor --- DESIGN-WORKFLOW.md | 84 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 DESIGN-WORKFLOW.md diff --git a/DESIGN-WORKFLOW.md b/DESIGN-WORKFLOW.md new file mode 100644 index 00000000..d9294359 --- /dev/null +++ b/DESIGN-WORKFLOW.md @@ -0,0 +1,84 @@ +# Docs design workflow + +Guide for contributing design changes to the Turnkey Mintlify docs (welcome page revamp and related UI). + +## Branch strategy + +- Base design work on **`graham/docs-revamp`** (or a short-lived branch from it, e.g. `serge/design-welcome`). +- Open PRs **into `graham/docs-revamp`** until the revamp merges to `main`. +- Sync often to avoid drift from the Mintlify preview: + +```sh +git fetch origin +git merge origin/graham/docs-revamp +``` + +Production deploys from **`main`** (see README). + +## Files to edit + +| Change | Files | +|--------|--------| +| Welcome / landing layout | `welcome.mdx` | +| Welcome / shared UI styles | `styles.css` (`.tk-*` classes) | +| Site-wide color, nav, fonts | `docs.json` | +| Illustrations, icons | `images/` (use `/images/...` paths) | +| Logos / favicon | `logo/`, `favicon.svg` | + +Avoid unless intentional: + +- `generated-docs/`, `api-reference/` (generated — use `make gen` for API reference) +- Duplicating content in `snippets/shared/` (update the snippet once; see README) + +## Local development + +Mintlify CLI requires **Node ≥ 20.17** (`.nvmrc` may list an older version). + +```sh +nvm use 20 +cd docs # directory containing docs.json +mintlify dev +``` + +Preview welcome: http://localhost:3000/welcome + +Before opening a PR: + +```sh +mintlify validate +``` + +### Common pitfall + +Use **straight ASCII quotes** (`'`) in imports and JSX — not curly/smart quotes (`‘` `’`). Smart quotes in `import` paths or `style={{}}` cause MDX parse errors and can blank pages during `mintlify dev`. + +## Shipping to the team + +1. Make focused commits (e.g. hero spacing, nav labels — not one giant “design” commit). +2. Push your branch to `tkhq/docs`. +3. Open a PR **into `graham/docs-revamp`** with: + - What changed (welcome vs sitewide) + - Before/after screenshots (light and dark if relevant) + - Mintlify preview link from the PR checks + - Local test steps: `mintlify dev` → `/welcome` +4. Request review from the revamp owner / docs maintainers. +5. Merge via team process; do not merge to `main` unless agreed. + +## Style conventions + +- Prefer **CSS classes in `styles.css`** over large inline `style={{}}` in `welcome.mdx`. +- Commit image assets in-repo; do not rely only on Mintlify CDN URLs for new art. +- `welcome.mdx` uses `mode: "custom"` for a full-width landing layout (navbar only). + +## Access + +- **GitHub:** write access to `tkhq/docs` allows push + PR without a fork. +- **Mintlify dashboard:** optional (`mintlify login`); not required for local preview. + +## Quick checklist + +- [ ] Branch is up to date with `origin/graham/docs-revamp` +- [ ] `mintlify dev` — `/welcome` looks correct (light + dark) +- [ ] `mintlify validate` passes +- [ ] No smart quotes in imports / JSX +- [ ] PR targets `graham/docs-revamp` with screenshots From 8b2ab82c7d86a01508be66bc326f22dc0a777be3 Mon Sep 17 00:00:00 2001 From: Serge Stashkevich Date: Fri, 15 May 2026 13:35:35 +0300 Subject: [PATCH 071/117] Match hero h1 typography to Figma specs 82px ABC Favorit, weight 400, 95% line-height, -4.1px tracking, #111 text color. Co-authored-by: Cursor --- styles.css | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/styles.css b/styles.css index ab115865..0c69f4af 100644 --- a/styles.css +++ b/styles.css @@ -77,7 +77,7 @@ font-family: 'ABC Favorit'; src: url('/fonts/ABCFavorit-Bold.woff2') format('woff2'), url('/fonts/ABCFavorit-Bold.woff') format('woff'); - font-weight: 700; + font-weight: 400; font-style: normal; font-display: swap; } @@ -162,12 +162,13 @@ } .tk-hero-headline { + color: var(--Black, #111); font-family: 'ABC Favorit', sans-serif; - font-size: 3rem; - font-weight: 700; - line-height: 1.1; - letter-spacing: -0.02em; - color: #0d0d0e; + font-size: 82px; + font-style: normal; + font-weight: 400; + line-height: 95%; + letter-spacing: -4.1px; margin: 0 0 1.25rem; } @@ -266,7 +267,10 @@ @media (max-width: 768px) { .tk-hero { padding: 2.5rem 0 2rem; min-height: 280px; } .tk-hero-content { width: 90%; } - .tk-hero-headline { font-size: 2.25rem; } + .tk-hero-headline { + font-size: 2.25rem; + letter-spacing: -0.05em; + } /* Illustration stays absolutely positioned — shrinks behind text naturally */ } From 67b8afb23be5e6971e4f62ecccefe328dc23618b Mon Sep 17 00:00:00 2001 From: Serge Stashkevich Date: Fri, 15 May 2026 13:36:54 +0300 Subject: [PATCH 072/117] Use ABC Favorit Regular for hero headline Hero h1 was rendering Bold because only the Bold webfont was registered at weight 400. Add Regular.woff2 (from dashboard assets) and split @font-face by weight. Co-authored-by: Cursor --- fonts/ABCFavorit-Regular.woff2 | Bin 0 -> 33892 bytes styles.css | 11 ++++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 fonts/ABCFavorit-Regular.woff2 diff --git a/fonts/ABCFavorit-Regular.woff2 b/fonts/ABCFavorit-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..e475131f1f9ee81eb72ea6847e880e1474ea7a3d GIT binary patch literal 33892 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%0A8zMbT79*-Q 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 IXa)cP0LT$8KL7v# literal 0 HcmV?d00001 diff --git a/styles.css b/styles.css index 0c69f4af..8ce0e3a6 100644 --- a/styles.css +++ b/styles.css @@ -73,11 +73,19 @@ ABC Favorit — hero headline only ============================================================ */ +@font-face { + font-family: 'ABC Favorit'; + src: url('/fonts/ABCFavorit-Regular.woff2') format('woff2'); + font-weight: 400; + font-style: normal; + font-display: swap; +} + @font-face { font-family: 'ABC Favorit'; src: url('/fonts/ABCFavorit-Bold.woff2') format('woff2'), url('/fonts/ABCFavorit-Bold.woff') format('woff'); - font-weight: 400; + font-weight: 700; font-style: normal; font-display: swap; } @@ -169,6 +177,7 @@ font-weight: 400; line-height: 95%; letter-spacing: -4.1px; + font-synthesis: none; margin: 0 0 1.25rem; } From 7010222dd76241fb5283cfc46777e85605b5b0f1 Mon Sep 17 00:00:00 2001 From: Serge Stashkevich Date: Fri, 15 May 2026 13:39:44 +0300 Subject: [PATCH 073/117] Align welcome page width with Mintlify navbar Match tk-page to max-w-8xl (88rem) and lg:px-12 (3rem) so tab nav and hero content share the same left edge. Co-authored-by: Cursor --- styles.css | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/styles.css b/styles.css index 8ce0e3a6..89cd68a8 100644 --- a/styles.css +++ b/styles.css @@ -91,13 +91,21 @@ } /* ============================================================ - Page wrapper + Page wrapper — align with Mintlify nav (max-w-8xl + lg:px-12) ============================================================ */ .tk-page { - max-width: 1280px; + max-width: 88rem; /* matches navbar max-w-8xl */ margin: 0 auto; - padding: 0 2rem 5rem; + padding: 0 3rem 5rem; /* matches nav tabs lg:px-12 */ + box-sizing: border-box; +} + +@media (max-width: 1023px) { + .tk-page { + padding-left: 1rem; /* matches navbar mx-4 below lg */ + padding-right: 1rem; + } } /* ============================================================ From 05ad682f0ebd739be6452a1f03abe510fb5cfaed Mon Sep 17 00:00:00 2001 From: Serge Stashkevich Date: Fri, 15 May 2026 13:43:37 +0300 Subject: [PATCH 074/117] Fix welcome page left gutter on custom layout Reset flex-row-reverse and sidebar reservation so hero content aligns with nav tabs on wide viewports. Co-authored-by: Cursor --- styles.css | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/styles.css b/styles.css index 89cd68a8..f1f5e600 100644 --- a/styles.css +++ b/styles.css @@ -91,9 +91,30 @@ } /* ============================================================ - Page wrapper — align with Mintlify nav (max-w-8xl + lg:px-12) + Custom welcome page — align content with navbar (max-w-8xl + px-12) + Mintlify uses flex-row-reverse for custom mode, which pins the lone + content column to the right; reset layout so .tk-page lines up with nav tabs. ============================================================ */ +html[data-page-mode="custom"] #content-container > .flex.flex-row-reverse { + flex-direction: row; +} + +html[data-page-mode="custom"] #content-area { + width: 100% !important; + max-width: 100% !important; +} + +html[data-page-mode="custom"] #sidebar { + display: none !important; +} + +html[data-page-mode="custom"] #content { + max-width: none; + padding-left: 0; + padding-right: 0; +} + .tk-page { max-width: 88rem; /* matches navbar max-w-8xl */ margin: 0 auto; From 05c301b4fdfa81ce1808e12b2466686e9cf2d40a Mon Sep 17 00:00:00 2001 From: Serge Stashkevich Date: Fri, 15 May 2026 13:45:33 +0300 Subject: [PATCH 075/117] Align welcome content with nav by matching max-w-8xl container Apply 88rem + px-12 on #content-area (same as nav tab row) instead of a nested centered .tk-page box. Co-authored-by: Cursor --- styles.css | 39 +++++++++++++++++++++++++-------------- 1 file changed, 25 insertions(+), 14 deletions(-) diff --git a/styles.css b/styles.css index f1f5e600..0879470d 100644 --- a/styles.css +++ b/styles.css @@ -91,41 +91,52 @@ } /* ============================================================ - Custom welcome page — align content with navbar (max-w-8xl + px-12) - Mintlify uses flex-row-reverse for custom mode, which pins the lone - content column to the right; reset layout so .tk-page lines up with nav tabs. + Welcome page — align with navbar (max-w-8xl + px-12) + Nav tabs: #navbar > .max-w-8xl.mx-auto > .px-12 + Mirror that on #content-area; .tk-page stays full width inside (no second max-width). + Mintlify custom layout uses flex-row-reverse + xl:w-[calc(100%-19rem)] on #content-area. ============================================================ */ +#content-container:has(.tk-page) > .flex.flex-row-reverse, html[data-page-mode="custom"] #content-container > .flex.flex-row-reverse { - flex-direction: row; + flex-direction: row !important; + justify-content: flex-start !important; + gap: 0 !important; } +#content-container:has(.tk-page) #content-area, html[data-page-mode="custom"] #content-area { width: 100% !important; - max-width: 100% !important; + max-width: 88rem !important; /* max-w-8xl */ + margin-inline: auto !important; + padding-inline: 3rem !important; /* px-12 — same inset as nav tabs */ + flex: 1 1 auto !important; } +#content-container:has(.tk-page) #sidebar, html[data-page-mode="custom"] #sidebar { display: none !important; } +#content-container:has(.tk-page) #content, html[data-page-mode="custom"] #content { - max-width: none; - padding-left: 0; - padding-right: 0; + max-width: none !important; + padding-left: 0 !important; + padding-right: 0 !important; } .tk-page { - max-width: 88rem; /* matches navbar max-w-8xl */ - margin: 0 auto; - padding: 0 3rem 5rem; /* matches nav tabs lg:px-12 */ + width: 100%; + max-width: none; + margin: 0; + padding: 0 0 5rem; box-sizing: border-box; } @media (max-width: 1023px) { - .tk-page { - padding-left: 1rem; /* matches navbar mx-4 below lg */ - padding-right: 1rem; + #content-container:has(.tk-page) #content-area, + html[data-page-mode="custom"] #content-area { + padding-inline: 1rem !important; /* navbar mx-4 below lg */ } } From 2a24d5e64828e7f407eebc822f18e58f37823943 Mon Sep 17 00:00:00 2001 From: Serge Stashkevich Date: Fri, 15 May 2026 13:46:42 +0300 Subject: [PATCH 076/117] Simplify welcome layout: max-width on .tk-page only Remove heavy #content-area constraints; keep minimal flex/sidebar fixes and 88rem centered .tk-page to match nav. Co-authored-by: Cursor --- styles.css | 43 ++++++++++++++++--------------------------- 1 file changed, 16 insertions(+), 27 deletions(-) diff --git a/styles.css b/styles.css index 0879470d..3d5ece42 100644 --- a/styles.css +++ b/styles.css @@ -91,52 +91,41 @@ } /* ============================================================ - Welcome page — align with navbar (max-w-8xl + px-12) - Nav tabs: #navbar > .max-w-8xl.mx-auto > .px-12 - Mirror that on #content-area; .tk-page stays full width inside (no second max-width). - Mintlify custom layout uses flex-row-reverse + xl:w-[calc(100%-19rem)] on #content-area. + Welcome page — minimal Mintlify layout fixes + max-width on .tk-page + Nav: .max-w-8xl.mx-auto > .px-12 (tabs). Match via .tk-page only. ============================================================ */ -#content-container:has(.tk-page) > .flex.flex-row-reverse, -html[data-page-mode="custom"] #content-container > .flex.flex-row-reverse { +#content-container:has(.tk-page) > .flex.flex-row-reverse { flex-direction: row !important; - justify-content: flex-start !important; - gap: 0 !important; } -#content-container:has(.tk-page) #content-area, -html[data-page-mode="custom"] #content-area { +#content-container:has(.tk-page) #content-area { width: 100% !important; - max-width: 88rem !important; /* max-w-8xl */ - margin-inline: auto !important; - padding-inline: 3rem !important; /* px-12 — same inset as nav tabs */ - flex: 1 1 auto !important; + max-width: none !important; + padding: 0 !important; + margin: 0 !important; } -#content-container:has(.tk-page) #sidebar, -html[data-page-mode="custom"] #sidebar { +#content-container:has(.tk-page) #sidebar { display: none !important; } -#content-container:has(.tk-page) #content, -html[data-page-mode="custom"] #content { +#content-container:has(.tk-page) #content { max-width: none !important; - padding-left: 0 !important; - padding-right: 0 !important; + padding: 0 !important; } .tk-page { - width: 100%; - max-width: none; - margin: 0; - padding: 0 0 5rem; + max-width: 88rem; /* max-w-8xl — same as navbar */ + margin: 0 auto; + padding: 0 3rem 5rem; /* px-12 — aligns with nav tabs */ box-sizing: border-box; } @media (max-width: 1023px) { - #content-container:has(.tk-page) #content-area, - html[data-page-mode="custom"] #content-area { - padding-inline: 1rem !important; /* navbar mx-4 below lg */ + .tk-page { + padding-left: 1rem; + padding-right: 1rem; } } From c3961caa6bfc828d51b3628237fe8c7cacb239f2 Mon Sep 17 00:00:00 2001 From: Serge Stashkevich Date: Fri, 15 May 2026 13:49:30 +0300 Subject: [PATCH 077/117] Fix narrow welcome layout by overriding Mintlify scroll-mt max-width The scroll-mt wrapper was constraining content below nav tabs; force it full width so .tk-page can use 88rem like the navbar. Co-authored-by: Cursor --- styles.css | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/styles.css b/styles.css index 3d5ece42..f3c9acfe 100644 --- a/styles.css +++ b/styles.css @@ -91,10 +91,18 @@ } /* ============================================================ - Welcome page — minimal Mintlify layout fixes + max-width on .tk-page - Nav: .max-w-8xl.mx-auto > .px-12 (tabs). Match via .tk-page only. + Welcome page — align with navbar max-w-8xl + px-12 + Mintlify wraps main content in .scroll-mt with peer-based max-w-3xl / max-w-8xl; + force that wrapper full width so .tk-page can use the full 88rem column. ============================================================ */ +.scroll-mt-\[var\(--scroll-mt\)\]:has(.tk-page) { + max-width: none !important; + width: 100% !important; + margin-inline: 0 !important; + padding-inline: 0 !important; +} + #content-container:has(.tk-page) > .flex.flex-row-reverse { flex-direction: row !important; } @@ -116,8 +124,9 @@ } .tk-page { - max-width: 88rem; /* max-w-8xl — same as navbar */ - margin: 0 auto; + width: 100%; + max-width: 88rem; /* max-w-8xl — same as #navbar > .max-w-8xl */ + margin-inline: auto; padding: 0 3rem 5rem; /* px-12 — aligns with nav tabs */ box-sizing: border-box; } From 2571ac50655d35918d240ddd0c34422a35fcb49e Mon Sep 17 00:00:00 2001 From: Serge Stashkevich Date: Fri, 15 May 2026 16:56:06 +0300 Subject: [PATCH 078/117] Update welcome page mobile layout and card icon styling. Match Figma responsive design for hero, build section, solutions, features, and whitepaper CTA. Unify FeatureCard icons with solution-style 44px containers and 1px strokes. Co-authored-by: Cursor --- docs.json | 4 +- images/build-cube-connectors.svg | 7 + images/build-cube-stack.svg | 6 + images/hero-dark.svg | 8 +- images/hero-light.svg | 24 +- images/icons/arrow-square-right.svg | 3 + images/icons/bank-note-01.svg | 2 +- images/icons/bank.svg | 2 +- images/icons/book-open-01.svg | 2 +- images/icons/check-circle.svg | 2 +- images/icons/chevron-right.svg | 1 + images/icons/clock.svg | 2 +- images/icons/code-02.svg | 2 +- images/icons/coins-01.svg | 2 +- images/icons/colors.svg | 1 + images/icons/cpu-chip-01.svg | 2 +- images/icons/cube-outline.svg | 3 + images/icons/currency-dollar.svg | 2 +- images/icons/dataflow-02.svg | 2 +- images/icons/download-01.svg | 2 +- images/icons/file-code-01.svg | 2 +- images/icons/file-code-02.svg | 2 +- images/icons/file-shield-02.svg | 2 +- images/icons/fuel.svg | 3 + images/icons/git-branch-01.svg | 2 +- images/icons/globe-01.svg | 2 +- images/icons/home-01.svg | 3 + images/icons/home-02.svg | 3 + images/icons/intersect-circle.svg | 4 +- images/icons/line-chart-up-01.svg | 2 +- images/icons/link-03.svg | 2 +- images/icons/lock-01.svg | 2 +- images/icons/log-in-04.svg | 2 +- images/icons/phone-01.svg | 2 +- images/icons/puzzle-piece-01.svg | 2 +- images/icons/refresh-cw-01.svg | 2 +- images/icons/rocket-01.svg | 2 +- images/icons/route.svg | 2 +- images/icons/server-04.svg | 2 +- images/icons/switch-horizontal-01.svg | 2 +- images/icons/switch-horizontal-02.svg | 2 +- images/icons/tablet-01.svg | 2 +- images/icons/tool-01.svg | 2 +- images/icons/tool-02.svg | 1 + images/icons/trend-up-01.svg | 2 +- images/icons/upload-01.svg | 2 +- images/icons/wallet-04.svg | 2 +- images/icons/wallet-embedded.svg | 3 + images/icons/zap.svg | 2 +- images/whitepaper.png | Bin 40724 -> 514475 bytes snippets/feature-card.mdx | 25 +- snippets/solution-card.mdx | 24 +- styles.css | 1651 ++++++++++++++++++++----- welcome.mdx | 443 ++++--- 54 files changed, 1703 insertions(+), 582 deletions(-) create mode 100644 images/build-cube-connectors.svg create mode 100644 images/build-cube-stack.svg create mode 100644 images/icons/arrow-square-right.svg create mode 100644 images/icons/chevron-right.svg create mode 100644 images/icons/colors.svg create mode 100644 images/icons/cube-outline.svg create mode 100644 images/icons/fuel.svg create mode 100644 images/icons/home-01.svg create mode 100644 images/icons/home-02.svg create mode 100644 images/icons/tool-02.svg create mode 100644 images/icons/wallet-embedded.svg diff --git a/docs.json b/docs.json index 0b871068..cd534766 100644 --- a/docs.json +++ b/docs.json @@ -4,7 +4,7 @@ "name": "Turnkey", "colors": { "primary": "#4C48FF", - "light": "#4C48FF", + "light": "#5B68FF", "dark": "#050a0b" }, "contextual": { @@ -29,7 +29,7 @@ "tabs": [ { "tab": "Home", - "icon": "house", + "icon": "/images/icons/home-02.svg", "groups": [ { "group": "Welcome", diff --git a/images/build-cube-connectors.svg b/images/build-cube-connectors.svg new file mode 100644 index 00000000..bd66f87f --- /dev/null +++ b/images/build-cube-connectors.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/images/build-cube-stack.svg b/images/build-cube-stack.svg new file mode 100644 index 00000000..a3448b9e --- /dev/null +++ b/images/build-cube-stack.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/images/hero-dark.svg b/images/hero-dark.svg index 580a5990..9412d9e6 100644 --- a/images/hero-dark.svg +++ b/images/hero-dark.svg @@ -10,26 +10,26 @@
    - +
    - +
    - +
    - + diff --git a/images/hero-light.svg b/images/hero-light.svg index 1b9e5ef6..9f1e6470 100644 --- a/images/hero-light.svg +++ b/images/hero-light.svg @@ -9,27 +9,27 @@
    -
    - +
    + -
    - +
    +
    -
    - +
    + -
    - +
    + @@ -46,10 +46,10 @@ - - - - + + + + diff --git a/images/icons/arrow-square-right.svg b/images/icons/arrow-square-right.svg new file mode 100644 index 00000000..984e2f0e --- /dev/null +++ b/images/icons/arrow-square-right.svg @@ -0,0 +1,3 @@ + + + diff --git a/images/icons/bank-note-01.svg b/images/icons/bank-note-01.svg index 422d85e1..57183d4a 100644 --- a/images/icons/bank-note-01.svg +++ b/images/icons/bank-note-01.svg @@ -1,5 +1,5 @@ - + diff --git a/images/icons/bank.svg b/images/icons/bank.svg index eb9d2205..891577f1 100644 --- a/images/icons/bank.svg +++ b/images/icons/bank.svg @@ -1,5 +1,5 @@ - + diff --git a/images/icons/book-open-01.svg b/images/icons/book-open-01.svg index 679534c4..9eca906c 100644 --- a/images/icons/book-open-01.svg +++ b/images/icons/book-open-01.svg @@ -1,3 +1,3 @@ - + diff --git a/images/icons/check-circle.svg b/images/icons/check-circle.svg index 30a69734..c27e99be 100644 --- a/images/icons/check-circle.svg +++ b/images/icons/check-circle.svg @@ -1,5 +1,5 @@ - + diff --git a/images/icons/chevron-right.svg b/images/icons/chevron-right.svg new file mode 100644 index 00000000..d26a600e --- /dev/null +++ b/images/icons/chevron-right.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/icons/clock.svg b/images/icons/clock.svg index 4a696d9d..9acddbe3 100644 --- a/images/icons/clock.svg +++ b/images/icons/clock.svg @@ -1,5 +1,5 @@ - + diff --git a/images/icons/code-02.svg b/images/icons/code-02.svg index 022574cb..b7d6b3d3 100644 --- a/images/icons/code-02.svg +++ b/images/icons/code-02.svg @@ -1,5 +1,5 @@ - + diff --git a/images/icons/coins-01.svg b/images/icons/coins-01.svg index 6774349f..c54ee63f 100644 --- a/images/icons/coins-01.svg +++ b/images/icons/coins-01.svg @@ -1,5 +1,5 @@ - + diff --git a/images/icons/colors.svg b/images/icons/colors.svg new file mode 100644 index 00000000..96fe3d38 --- /dev/null +++ b/images/icons/colors.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/icons/cpu-chip-01.svg b/images/icons/cpu-chip-01.svg index 932b112d..24eb3ac9 100644 --- a/images/icons/cpu-chip-01.svg +++ b/images/icons/cpu-chip-01.svg @@ -1,5 +1,5 @@ - + diff --git a/images/icons/cube-outline.svg b/images/icons/cube-outline.svg new file mode 100644 index 00000000..fca14797 --- /dev/null +++ b/images/icons/cube-outline.svg @@ -0,0 +1,3 @@ + + + diff --git a/images/icons/currency-dollar.svg b/images/icons/currency-dollar.svg index e58c2b09..3ece460d 100644 --- a/images/icons/currency-dollar.svg +++ b/images/icons/currency-dollar.svg @@ -1,5 +1,5 @@ - + diff --git a/images/icons/dataflow-02.svg b/images/icons/dataflow-02.svg index 7e2efe0d..29315666 100644 --- a/images/icons/dataflow-02.svg +++ b/images/icons/dataflow-02.svg @@ -1,5 +1,5 @@ - + diff --git a/images/icons/download-01.svg b/images/icons/download-01.svg index e01a826a..04448272 100644 --- a/images/icons/download-01.svg +++ b/images/icons/download-01.svg @@ -1,5 +1,5 @@ - + diff --git a/images/icons/file-code-01.svg b/images/icons/file-code-01.svg index cf3600b0..c45cad93 100644 --- a/images/icons/file-code-01.svg +++ b/images/icons/file-code-01.svg @@ -1,5 +1,5 @@ - + diff --git a/images/icons/file-code-02.svg b/images/icons/file-code-02.svg index 79b3071e..a3e5c6e5 100644 --- a/images/icons/file-code-02.svg +++ b/images/icons/file-code-02.svg @@ -1,5 +1,5 @@ - + diff --git a/images/icons/file-shield-02.svg b/images/icons/file-shield-02.svg index c8e271f1..2dd3222d 100644 --- a/images/icons/file-shield-02.svg +++ b/images/icons/file-shield-02.svg @@ -1,5 +1,5 @@ - + diff --git a/images/icons/fuel.svg b/images/icons/fuel.svg new file mode 100644 index 00000000..ae31e3b8 --- /dev/null +++ b/images/icons/fuel.svg @@ -0,0 +1,3 @@ + + + diff --git a/images/icons/git-branch-01.svg b/images/icons/git-branch-01.svg index efd1d4c8..0ed5a303 100644 --- a/images/icons/git-branch-01.svg +++ b/images/icons/git-branch-01.svg @@ -1,5 +1,5 @@ - + diff --git a/images/icons/globe-01.svg b/images/icons/globe-01.svg index fc75e405..214286ba 100644 --- a/images/icons/globe-01.svg +++ b/images/icons/globe-01.svg @@ -1,5 +1,5 @@ - + diff --git a/images/icons/home-01.svg b/images/icons/home-01.svg new file mode 100644 index 00000000..e85247d2 --- /dev/null +++ b/images/icons/home-01.svg @@ -0,0 +1,3 @@ + + + diff --git a/images/icons/home-02.svg b/images/icons/home-02.svg new file mode 100644 index 00000000..44d4ee51 --- /dev/null +++ b/images/icons/home-02.svg @@ -0,0 +1,3 @@ + + + diff --git a/images/icons/intersect-circle.svg b/images/icons/intersect-circle.svg index 27710e2c..5537815b 100644 --- a/images/icons/intersect-circle.svg +++ b/images/icons/intersect-circle.svg @@ -1,6 +1,6 @@ - - + + diff --git a/images/icons/line-chart-up-01.svg b/images/icons/line-chart-up-01.svg index 5ef246c0..b091dec8 100644 --- a/images/icons/line-chart-up-01.svg +++ b/images/icons/line-chart-up-01.svg @@ -1,5 +1,5 @@ - + diff --git a/images/icons/link-03.svg b/images/icons/link-03.svg index 6271bcfc..621e99cf 100644 --- a/images/icons/link-03.svg +++ b/images/icons/link-03.svg @@ -1,5 +1,5 @@ - + diff --git a/images/icons/lock-01.svg b/images/icons/lock-01.svg index 7795c188..fb6aeef6 100644 --- a/images/icons/lock-01.svg +++ b/images/icons/lock-01.svg @@ -1,5 +1,5 @@ - + diff --git a/images/icons/log-in-04.svg b/images/icons/log-in-04.svg index c498c1eb..f789f44e 100644 --- a/images/icons/log-in-04.svg +++ b/images/icons/log-in-04.svg @@ -1,5 +1,5 @@ - + diff --git a/images/icons/phone-01.svg b/images/icons/phone-01.svg index 1dda6b77..cc1bc3cc 100644 --- a/images/icons/phone-01.svg +++ b/images/icons/phone-01.svg @@ -1,5 +1,5 @@ - + diff --git a/images/icons/puzzle-piece-01.svg b/images/icons/puzzle-piece-01.svg index 3778b40c..6f9eafc2 100644 --- a/images/icons/puzzle-piece-01.svg +++ b/images/icons/puzzle-piece-01.svg @@ -1,5 +1,5 @@ - + diff --git a/images/icons/refresh-cw-01.svg b/images/icons/refresh-cw-01.svg index 4d06836c..d518c617 100644 --- a/images/icons/refresh-cw-01.svg +++ b/images/icons/refresh-cw-01.svg @@ -1,5 +1,5 @@ - + diff --git a/images/icons/rocket-01.svg b/images/icons/rocket-01.svg index 265384a0..54548ce2 100644 --- a/images/icons/rocket-01.svg +++ b/images/icons/rocket-01.svg @@ -1,3 +1,3 @@ - + diff --git a/images/icons/route.svg b/images/icons/route.svg index 019d0b5c..bf70cc88 100644 --- a/images/icons/route.svg +++ b/images/icons/route.svg @@ -1,5 +1,5 @@ - + diff --git a/images/icons/server-04.svg b/images/icons/server-04.svg index c9b020b5..b245f56e 100644 --- a/images/icons/server-04.svg +++ b/images/icons/server-04.svg @@ -1,5 +1,5 @@ - + diff --git a/images/icons/switch-horizontal-01.svg b/images/icons/switch-horizontal-01.svg index 7b29f24f..673cc5d6 100644 --- a/images/icons/switch-horizontal-01.svg +++ b/images/icons/switch-horizontal-01.svg @@ -1,5 +1,5 @@ - + diff --git a/images/icons/switch-horizontal-02.svg b/images/icons/switch-horizontal-02.svg index ccdbd10c..38651770 100644 --- a/images/icons/switch-horizontal-02.svg +++ b/images/icons/switch-horizontal-02.svg @@ -1,5 +1,5 @@ - + diff --git a/images/icons/tablet-01.svg b/images/icons/tablet-01.svg index d16926c5..b52dca40 100644 --- a/images/icons/tablet-01.svg +++ b/images/icons/tablet-01.svg @@ -1,5 +1,5 @@ - + diff --git a/images/icons/tool-01.svg b/images/icons/tool-01.svg index 683d724c..3976a213 100644 --- a/images/icons/tool-01.svg +++ b/images/icons/tool-01.svg @@ -1,5 +1,5 @@ - + diff --git a/images/icons/tool-02.svg b/images/icons/tool-02.svg new file mode 100644 index 00000000..819082b6 --- /dev/null +++ b/images/icons/tool-02.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/icons/trend-up-01.svg b/images/icons/trend-up-01.svg index 38211507..d2707e3d 100644 --- a/images/icons/trend-up-01.svg +++ b/images/icons/trend-up-01.svg @@ -1,5 +1,5 @@ - + diff --git a/images/icons/upload-01.svg b/images/icons/upload-01.svg index d7775a4a..23619832 100644 --- a/images/icons/upload-01.svg +++ b/images/icons/upload-01.svg @@ -1,5 +1,5 @@ - + diff --git a/images/icons/wallet-04.svg b/images/icons/wallet-04.svg index 24c20bc7..ad5146df 100644 --- a/images/icons/wallet-04.svg +++ b/images/icons/wallet-04.svg @@ -1,5 +1,5 @@ - + diff --git a/images/icons/wallet-embedded.svg b/images/icons/wallet-embedded.svg new file mode 100644 index 00000000..b2247522 --- /dev/null +++ b/images/icons/wallet-embedded.svg @@ -0,0 +1,3 @@ + + + diff --git a/images/icons/zap.svg b/images/icons/zap.svg index 0f2c4112..7b963d10 100644 --- a/images/icons/zap.svg +++ b/images/icons/zap.svg @@ -1,5 +1,5 @@ - + diff --git a/images/whitepaper.png b/images/whitepaper.png index 6785b9dc804af9f7d7feb20f38e63751a9d0893c..e0ae74b8caa0e1b68c508c0464709148665c613b 100644 GIT binary patch literal 514475 zcmeFZWmH>Tw>FHswG=2&q-cwm;!c6$Qi{7wMVWe_VO=2)=rt!uS<6CGdX;>y?VmwMg zqZvhe5T^Bb^`)XBngPx%I9V8m_T7nByrdQ}jWmz0S1KdJ2$h%n#-ojQ%80;6Yc+h5 zu!$-2Rd&HDpj|Bj_M(h4lH`R6=trv4T-lFpr=Y4uHmM}sV>z@wfiRg&{7^g6wQ1}h zYDHb4V;J_uN=y+`3|5P+t;I|qHszcNU6xXa5~bMhXfuYujs>KS1X!tZ26U>x$G9pF zs!ckFkk9FmEoxV@EOiAk)apLKr{onG+SJ2etaFov+J$9@Voz(sqI{NZ|EHzhHj zNL_0-xBdk-=>}0HBYk1t=T*|9DkfPAk?xmd_DY`2%s9>;`B^$SXj7zXP2wT3kp>Ja zPE|}#Tst-zgPiu38e#lv5(j8VdB#JyY(7#UHK9Xy*ILZb3K1%`p_4+9h4qYLr2|9R zilsY^Op(K5 zjY~M7gPxRZ^L>$@=Z94aZ1=Yi%C)ZkVrXx)?bX<^ll1XNXIX>V8HOO~4`>o(cvCX? z0I?K;>aaXeOAhTqabS2DTAwT%8D=lK-BDB?g8pf1PuPnic6qDphXFj91K7PAtu0aOt$9{TQXU7dLPl-lw_xp&ejO=J1dFAP!?bAn09Q33+29+;@U=t7jV_ zsdnRbFX;3=&fb%e2VeQaS2U~W5P1b{1+!m1a=;ch6!!twTJ8RFl3l%J<5Tv8;xR28{RtXc2KSHKLdiHuP34@>LPrNX%NNhR!R;$qnlc@k#!FP=)`9^_4tUXOX>NT0kP*E0R}u$9$j}3HHtWp-5n#}@;~F436qiwd=~0x!8JtW*)8&rH2Q~jC6QXp@K2RW{xX8n zuC%4V_D|jx^HYJ}K0J39I>57k^CUBr@YwOvB#7E9On>$K^64#q2u`A2-)cNy>G-c1}C@36E!z8}T)op=m0B)Y%bd4+3*e}!#DYQ^13{209| zS)Pgd%OfSJyeILYUo|<{Tp0Hs(=nSedB-or3HBA(P-z zJT-d2`H_nCBh&Yxyt3@QY=KuiT4GNbif43aOGpJX)6`96xC^1LG+(>DHg|MzNCEgc zbvq~tYyiFj_Fy8V?wYHT>XCMut7F=ZDl;B4JTvYy>NA{T8LsN^!otzh?ZIuqvxKvj zGv72db$0dk0wvE(yL`L04c6gJB7&}uowjOr5BLWj;!;yRoHu&F4dBj9k^z+KRff7K`p@PuJdp*pJ%-zgM zF-5fQj@`z0ao31ztGoMm!Pold(hn<%!-+hI^r!_M&OPfU-Y2#uDx`H4l5m-l)b`DT zD=qiM$Kk$2xW1#Aru|7X%s=D$%jp-u+3JxM*YgF7pz+4pceX2T@h;WSwIb!@rxU+m zI#$ilvy|=E_4Mh3BeuyknpJ^ApN3uxf3=$(ni-Nxn@wR)p-Me`4z`x9TQaaQD64a* z+Nu($d*miMTMa$&<@`v|%Q5KGHc4ID02P8NL!&{oWm!{OvqvrjE>144v*Rvz&V|!@ z(`Hr7GwypHdqUHuwTk=mdo_EU`@ACABnKq-Bh^XvbMbN|6qOZqKQ|vJd9I03ia^B{ zJgr0(L?}cBMI;$qM8#~+O2+J80^NN)N4yu7g8-jKQYxP*Sf};0dR6(}Yu0Htp;l#} zmGD`Z>Z#&2p)>heo^I;a_-wwXh1&<B<(`o{7`4H*`t6*> z565rh)cGRlaQz_h(7R)o*G=*8(c%1pX3z8|^4QsD2Vt>Iu^sm5nvuM-!o$9$Zjo83 zSsfJvhwb19a38P`XwjF1SQ3*VV=9A5>m1h1La znf@EK3GE#D3MD`1n%|Sh0uo-jTi)%@%=;>q;qUz44daVbXb{E{R^WjdEEyihI?%+% zkkW$fZugZ+l^kv49(-6)1VuHIyO2wAUvECNQu9)?9m<`0R#jsS>3+6a(7hiMNX|e8 zW^w#cuH%7jpCX(fx!lmr0_BfxVU{7s3 z!>^TJfCOi@;S?{|>gBb$e#HX50=$ApYRq}8`TH6-EFbRc;0H`xZPQK!zLQuESbiP{ zb^sNr?lGHjhkRR3s1jRMF3{Xa8!G1lmsOX!;%jO@_K%}WYh%4}(a;$w|JFX2Hy7-` z)>_-zrA_A;bM{Loq4;@0{oo^;pVcvrW)o2L-MGj>UkXGi{;U3q{E>Xy{H!GWbwat4qYq$6?MW&V0@a(222bn^B}{ZzM;NR3&I-JA)h^~`Neb?Y-4+bnK!>7v9(Zac1W>7c+Xx`T_hgh-Xz{+AyO_@>oAvb zjYvF5pm#Rs6FqW6a;)b{cSF~i@5|oD^sMzOIP* zH}$GLG+3@$Sgl^2XXn?Ha7Z2Z*j;;M7dy z!u^2@q356v*)ci$fGFCl+Fng#=g~}S32)(%%DAjOP2HRBJy?;hL(W~!U0i7buaJ{7 z&vOb-BW@KI2W=~e%=QEJubcCQo8brPt-=h8Nv+TQ^zSlH5krxAq_NT(Ncn3W#PosZ zMDh`D!_CR{wGBp7HjpzEeR7NqGc>scEt?&)>U!`9Z-)4|OPNE84>?ZAJdWax>8M#=hn zL08shIYOO(%2CI_%RpUC%-YR`$I`~l%9h8^<<0N&ph@_Np_(qXUY3l0F3zr=Vt$fL ze;px)YX9EN%f$HCAzlDUCIfXXMmaYRTSg%sJ{~?MDFQ}DMhOoaJ27qfm;V}$+LB~) z@bY>i#>?yL>&xT&oX5?>p7)uks3|cZbYv;cPO7Q-E_WvS_zXko*UX-Mz2qbv_^Q}n{6dh_IP%rY4 zqr9dLYK>B}-yh5?)Yp^0*QhooldI>`F?}>N88l^iSsg$0y?NXe^2zJoW8Xk@&X2_6 zOi9uDO&=)+v0qhXTPVm^g%J>Fb3dSEw2=E5jhzUP&3hswb5Efv_jcb3JatcDY5{R5 zzRZ%~96x+uM-{$!D)B`q^;?kL#?apBH}i#B4wn~lXy{mEGXJZuu&?)(m>E;FXQM}$ zLeVhr82>k4OZa4DHj4kd8~Xi3jM&(Ccm+!@a|i!-_w)N%PwG!ClX!W^kp>f4#1@>A!DSWfgIIG3&MfzSy4~EP9m- zRR&&;zNa!c4@_(oZ79=Y$ZM$(m}N7qpMGXqKgVOrU*mM{L#gq-<0Av7?btW|D*PG1 zS=Kxy)yFfipr+7*1b0+ccL_AHgWXNPFHKih`RbA=qh;|ziS3AX1ID1=7ay^%eWagw zd#;%HpvXNf#^vqdNU{J)M&6!Vnav%QL4EBDR|bPM@3U*g^gcV|@8QN0y)2Egq*Dm*c&|+_^5kq04+)X!4CYT}Z2P zDVmgHZNir`Z+AO12AA1s2p zWy)mpV35XgCpDP=V);~0J~C)_Sc)gb-)^uly4tZ=eWpm@8eCqCEH+x?H8Ewakk)5Y z7gkQd6tjtnD0akS)T-&2ETrlyNep9n_E6xNrjK)*<+m)A=u(>weC$ayjb=t;u}u25 znVrRDiFpIyqR!h*{6Chw5I7iESV$b&)QS&(5NM?(-UBMCXk9#$8oSSG=|bu_L=VX> zewqRAyd9^j^Vc>vRVND0)7Ku=uNX-^;o|x#jkuJf2j03s!#Xwj{90ROmLr!=z#wza1)-z znQyRJR57MvsJUp)v=~e;w&CNH!BcoXoVYi4RN-iuEFA)hPXy}(EN5l46Si%Z^j}r) zkL<#qJwUk7Y`kis)TkTyv>2@S7#>3q;Y`cPXkcQ%+H@6#EeO)yQX>A?3=NivdE~{F zZ=8YK;7wk6+MCE;7FS)T@UCG>O#P*XDVQ@fac4bLm-u#V-@|{ezN1by7&F|5PN3E} ztiddymO*mMTfIAbhZ*`~(P~xEC+4vK{MMD@!e5d-KaivHc2I?Sg5AqiZ10jw^zP(= z7@yPBN1x9YiBN{Nd=bBW3Qoq9kDJ>wF@&G5;OfNb@00KSDd3%AL=^&EzoaMf{>c(m z<`5bf@bU8UUJ7bTUD>3HdfFWwU%x5L%aix;#7xM=$15i_&O5&5bAJ;TglI3osTG_S zQSTY~z(8qm=9Q|J{*d4(BZvGg=_LM-ekTNCN-Uubf#QvTGrcD_p9)hB1`=W>CgR~; zH}t*tL|PO7RBIM{V7EKNt{5Z1ia54gPR7M!dLTRr>!s%d<~V!-+e{&9DN`>Qz+ z@7)txW=03}k?8`J;dSUgX$j^-q}5Pct(>y+=HW8#wrVRUE139 z9a^#i9Ah3WM7S8-a1V>$V!&g#lJYBXN8krn8uoUB_-*mV_){S9=?48QGsaRqy-9IK z2i@BD4i*hXG84aME?kozx4GfneNnUlZ%P?)couve_{&_HS?S6!!^Wm!UspjsyL4|( zYIKAISseA}toF2tk1e$rOHsHYHGBK}#mtPNDah1*o_e|TMtGmY)j9T<&+h$6!eKV3 zvbEZKrrkfy2^kAIRIdr{R*=mL3?6wKLUtN56oJnp_4}lkiTI1Robv)5@t^F-;fpXQ zN%J7B$GCI}PsR7+zAahuUsD3;P=dw6vUZ6h-n_cT!qP`*vvxsvzFe@|^gG_gdj`2a zss2ny7PQF1>U(wv|hbv+N%P--}7`R$g5Zs-6pn$O<8~yo9y~4Btkwr z*Sv0?YSg~>Bs=xU9~c~}tS2+tK6ogtKfq~(?=rzXzW!w-)%`8-Z%@IcSsZGCG8Ms7 zy<2k5=;G}29tv@L?QSnCPa3)B%dHE}9=2NQHmb8QIxI>~j!e|iQ9&mch3!=T$ah#e zWR#IPI;>2*iusc=)8?Ucnb@PomCU?^2feeegxc6Giw7q01uW~AH=fMMn4)4_>KY8v zlo^#eZuTV1pN2YmY^O|3R_#D*eud~;<6@akPReuQ71Z;znKNJ~IUFIvXg{u>wTqe+ z{nRC?ZzpMCH?N=dzSGQRd(N1$CB*TxBtFNKFi#CLsaRW>QLq6sqOh zRs1)W_;)Ki3=7pu##IVxkTJywkITttqb=;8qE_FTr_$3BM@RXwQ(4Nl3|d!+Z4&JzUfWR7a!9BU&v3JbmDWM^*J2f_s% z^Iad;5_~z=Hd57Xu96cydY3w+9D|kYD3;#eYV0yGikxQNH{_F>2%FJnMOpY@*S@>= z-Z1lQm6}jYv5GkL1~qs&duDTk{D$;B5gzCLVAr9@FhzzL{)uq6e?&p} zkF1s>6usok@(tA=r;N`1DJ{%!T`}vkn?rDNfqJ@1joq-eW5Ot`4#OKCF9dEF@oATq zfXcba#p1`&`*%h;mZj#&`YIFZ<2Jd&*ZFH3lLvvRy$oQzkCV~U zt^Un6Wf{1L8%Sbxs+5K~GFlUqJX=|y!Ae7BQeA1XXVAVMQ4qf|Yigcm#!)fEldwx4 zMZa`++Q3mthUs^dAt~xy28ViKCZ^S^VhS%t%S{4Z_Mhw#5j$a zIHL{&4GO+VOZdKZcialKaOshhc5-x2EW2fWqfy6TuUrd?cDD>}YOg(p^=P&T%>I|A6gD9OATN_lp&9LX@? z2EJnh-=0L@-kw7Eoqj#po^NU3GOky1ZCa=FKcCcJPtcT#+ZawCl*OfEkqo@}irN;< zal4rTRP>)hq;^xErkIdX8S%G!1_!C?FJaqYuE z6Q60@PTRxgU7o|1&9$`;cQv*jqoea(X6rr1mD#bAS2a$scJ7mXyKyKUO4X*>>wZeL z+4pK5<2h71q}0SLxI|44X}GT5UK`r?GQFU`uULKUhL>YKD(dG+mwsYAh+JUSd+6&b zWbn8oliS$nF{NEK90Yw6-3DO;zr;zm)8vUmI-chW0$^^k3D$u&gJbq~(GkU&{*^kM z1-gE_{o_0?4S?oHJ};7L#l=QGUDqvkvn@h0O*pdJ^m#Z#NU#Ftl56`Ry%`DIvwIH+ zv{`5DpVuoN2vJWWD5!M$m8sVHmf7w5X(7q|y>9w`!92eXTlaaks|U@f&49iR6xUoZ zQlyIuMtF1Xq_o#96@>$% zT9@)_rW4b2Q;zZ!vHzplmzP&9D*m3XsX?d8`CQ177tZDj%J6APIOGd3D~+3+hxhBD z6zL;8^38}yjyqcSZNU1;ui*TXT~YukP4HORo`|GjZ<`*HDA*Ty6EeEGmytZMMj;vU zt*ULoL@rSLkUFG{&fTNl8Em{HN_#^OZtEtToHno=+3?-}%C^w$gS5Xqxg8HE#Vz{SfAdkCnykTBQqKkyGhTHh%`3gDLs3X zp2}?{ZEys+NL>(=4LFZY>aC3hBQz@>Lo;LdTLUkaOs0{GIXm_YU{fB-<`6(T+uL9l zaMyEIRq3upjongMDFBllvAG{&I?{sh4mz`IY83&gRrqs+TWSObKPQIyh)5cfNJ??~ znZW8GD9B1q+mI1y8ko4dZfY}iOWn3{^Aa-wd&h2Y>SWkBZ?F=DutW@RB2Bx7{j+r{ zsO1)Cd*(O9GBZXwjc2w}UII+Qo(ex046OJ%cpfVhH(XEjZBX&z37#3}>_zI4+UqDP zvpV{g;O-ZD2aoJw_kSk_>;lXTL~4d;<=U_EUW}igHOrL}xtWNyswO$N`ft(v2)?o&w-A4gAqM}V-Nr9li^6g5y;0T^?FQJJ=m)%+ z4tbRggiTA0nM0I)=Iwy`?MELFcPHu=5|xMZ+Q*oJWxh5 z0Ajp!G%80rIr<`%%cN0@K49x{(@sh0T0y$&iCHWa85b(hM%>*DuJtF_=6)86AInu7 zJnm)S%?i0LZpiFq0L}#>s(R@YMl!?$cWH&3Qw%Pj8P#~-o+pp+o6ia@_^nzjjY`@# zP?CI;46H{!Jz!VPu1A+m?-Q*B$nu@7L?G!$NHxAR^fyx$9XF_ZX;<9gHe)IrMGp z@L9>Qf!6k_uK;x(C_w|GE^56hO;@4yX2;5Hr3KrNi^w6T!HQTU7+m&ZLrQxmcymyI zY_i$K;)T=q-~-@XT6XeH5TRoEWtB?%c+`=xbH+x5U)lG*KpK@w0dLc3d&e!QWiJ|>J)InzT~UN+`V|4dJzP%Y_bX?ft9WFT(*aiC7z!f zWPF%)PWR$yj!q!{BioKqQ9)}dMW?>J}EEI;hvcGM<_aA02C$))MpB5X%oNYk0W9Y84( z=pOLIYb_IOtKlb8nG<6@>$bVea$P8BV&$SwJbRG8*xU1zkjHSV_eb#0i2L6J=s6i3 z^xRst*jnoPzc9Dh_4`~%(UEfTwaCA{59Lzx-=GjR`_dU`wGR}+;rT|r^;VkEp*Jmp z{&u*`rMg+L)F@!yf2Qe!ke7CQ?P%3=qd?_0`{I^5Il)l4Ch>FQL^;B(wvygP>=I#E zFXhH3A`JFGaRWx{l_e(Lx!`7;!V4(lOCJqJCA-z(8d6*}qoVauJQh)b_y}6%^Hnlb^Lkx4!w3vFgHA4Ry*Q+7_0AaBs{* z*G+cymPql;3T0VmfrF~0Yad<<*pz17fHHfjhVVW~iyvgt3%(PRuP~nzg@RzFk&V52 zmcM?SL7l`x-27Uj8o({^85dJXiz}TEH{a^PeSclKJLttIAm*+2jRD^-Y+aYegzNN& zrry2k!$t{S76X`+aSE&_s*h5XC#I=UE2%=zeek7TtVR!F8HxU}o~Cc_m*i}z$aVdD zL8@Ip=l#Cd)p>xd%bSv2X4LDiymOb?6s$gvSq>YeI%}Q^`Px-?S}_cI=0^o!sIq?3 znGnW6RcY-D0on#^c9Bvh2FiN2*fm+mmuEucV8s_rz9diMAp(qBZj_%E8t_Tc?2>E=WTHuEW2EqlCK^hD9&r}VK#(_RXrmFMzG@(e9?ZO4;9Ny zVr4h&Ggz5xRQPvz^q(zaVkLK^ogWu-wLUw(9o!@bsWgAwJ1#i-$djl;q zGz*24;M>{Zu)WlCBv>&=UMF)IR(BJw1;giktEcVKb$53^QgG&(w)mW!!^{H*xeY2i z0<(a!gtR`pQ0_~eve4{cyGRncZm8w3RN!JToVXog)}Zpvb93Z8^Jcp+%VrnUK+^6S zEVB8{a}9M0QYrgo8AAN#i>u8n)m78@fBTZspoUU3 zYLO#xKFE=g(K^A588iHXKAlfolRc!lGD^3mW5;LqKaaO;@mW`^Sq4jvU?c6h3x|+7zX%L2t90A>|x= zWWDR|YcRf1uqOLei(O~9F%NG%Lp#2j)q*O!D7@*ZgvD|a=qW1RU%cLDlULOHPz~$7 zAW^>t%VJWcmxG9`Csi^VYvj4O>=F%_(u1=~A$VBacz7>&SPtD=L$h6^OViGq_0R*& z*msPhb!A6mQgJoSd#+<^I$u~gb3s}VM*K*Qv zvJV3*BJd9%KG*`*j&>y&f!uTSTxxyFa16wHi)Bu`>2g*V*jm}O?*=#?d>*r&z%I7N z#xngdc0K0#K~HvL& zhDvYJaN>U_A!WK28jd0&R=8~J9=`&fMy~J82_d$pCI#*eYwjju-1Ji&fy5ccPmY}0 z=qsH<^spxck;l4=o*ciqD@0w00gD1*{+VC2xfv`s!@k}G4= zYiHf5gGV$pHFvYapjnQp_A{F;MMfsfaMz~h0|tcq`MXmL=`TxA#|8viKt*X6@K*=; z5j=r&>4%4D;HICYe}hkpU1NPq!3M0}4_4|*?F*O$yMg(=Kmf?>B7xlbqq;G>oZUln z0W|w%9p909iz00KyWyB7xH)$+ZtXx0SfK^y$Xs~Vd*nmpN$z{BdEfeT1#z7HD|yJo zIW;_UlAss@U>rf1J^U_&*cB3|S1kS9(gS{h%ycN0b|5RA^f9SCXE}kZSC{jGeyp@H zN4Fi-1lMB^?JKGU5Dnm$Vz>blh$m!n1WN}bZaa?{Xe$ZEg-x`!up2-t`FBdPHt7WV^$0pyg}AvuV{$xuSweOdfs^s-l8y;nL;;j`{j>7j_Sn= zNp2gzDa*(xUFJETS(ka^CKpC@ASxU7gU$BFxOk-DZh4oW3O|`M1Zvm_NY|~dB=DuY zjh=MMWSk@q`Ds^YNX=XB}T2zTDgBRUVVTD-&mtTk!c=l?DQoKyx6Ii`oRk8< zm;N*t-qP>)rn#0Z6W)XN3nv2tOmm;!b1COgEsGkf9|AzW`pc4GgcpqQaq}}eWLfn_ z)P0nBFK}eBk3{9jA!<((spyIKx-bv>5;6pIXhC;HojQd0M&fFvV<^ym9=yRr92Zog zYg&d9_zXZOY?jT#IGU2Ib~C~I(QNZ=V&O`}1rz5(1;QUgt%WQGQA4e6{`JNB`GZou zX}W{d9x6rgJNuAGFueiC5fGKCyU+lRKAkykQ)3@ll;R`X5^cAyf0U~$m0QO@zbDs% z6COypRn>nMr>mS$MHe!|S{{#)yegzw%1z)w@V$$E$yU)^;NYU#8FNTLAg)FNkyCXFh{`FZ3 zgm+-k1~o(}g)8VMLE|jokmpGrO4eONb=pb(4?E zx%3a`>Y0lr+y3W2;79*4tZ9F$A;X$>4Bb7G#ox%>J4@|CKK=t z>xnoDkGxrRE%OZIui)Ls<)v@o=0g}F#kXQ5yv7&;KR6@a1g??ZZ!8%YBOW!2XuH(D_vR%&Y_an6~ zm~`;#X=J1Xw4BXv^{_!VsKwnV!O3#S54}^cv}A2(f*|~HxC42~d?Yc9fRD58{wF~y zg2o*EoZGTQVZ~a-04k$fq zI7wEyx~S38=0n*ojw6$b*@-l|-rPdrs99sp)mi@~xN#Nk4Gzz4Zgpq)|wD`B7+t%_%EmH`bu~uuzNE z)maWdv(m{|rf3u4{OJOvQb{j&yQ12v*SDT`fz|lyyM9v|=Jj!V8c zW#&@AM%!<+6HEk8VCSpX%(*RE9(K5Sv*u3jpBV#-wrBV?pa?d_@p-^?N|n*4pv0lYUnh`Y{+iG6>7p6TR; z>TbmyS=ik^4aku3`ort$wot!Xm_NxM%LzSXjEqwc2ZC_^$e|==)XECA$RDZIh~|Rl z1_vGgr26?I2My5F%Yt z2~*BJx`MzkYWnf4xVFcU^j}5RxhBlTdA%*yxZ*xvH)f zf}HedLSAbX9oJK(>6OxKNWtTdf1dQ1a1ZAWW8>dJrdj55n{5YC*`@&WSNc`GY;3%K z)jBhD8LaBU_}H>@0ZkxqsPvu{AX+FYWSv*nV-*`)`+K@L>iNy{d(Fo<^$u?nvq;3) zRGZDILxwInH(10O4PdL6%Al`JTAX%9(fWcz!S=w>Co}d&qnqH>k3Yk)GDZfHLF?y6+l*RA$r)J3Zx_=Z(@y+89N(&X0q9rvsTW+|>$ z-}u1vwxzUBwT)$ybMd4~18j+v_>XhOn^i{UjcNaB)1Mq5-mll$<>;Mv@Wn+!h{BB@ zQ0C2AUmU+x_lG4by(Zr0&mZ&z+?~VLm)??+wA1?+7KARn!zT}?AV?Q>k2X;_ zI>scGV0>MuaZb;R$|sUY-ySUi5aN2rqtIQq(@jV+37yzw)=CH_;iVi8F*RB11|n!W zAhMgyvM2r1j>v5oWvPenJo6Yk=1nP*E<`)&TY%w{Zmpcu#=%%(orTJCC|mc|^)f0S z=!x>i^$Y)Ea_BsXrtCP<{6beU*=XcY#{%1s(Bkl9;5?@{>NpI)H`evIzT=0X?a6jv z7y;{u1*$B{|B_RaM*8QY|M)Ke1%O^+KSqq+{!ccm36xWfL!|+lOH=N1Gy3&*FkM+W zTHN@I54f{CU^n^g=Wplp13WAi9jjEE^}~LGgTAB7B5ls(IZ)L*k^1(}hsF=f@}^`l zpPTX!&}|~xTW+GTEa$2ZE@Br;*7QL=4iugtre;r7%{h~$1-9(C&9tf?V}zd;CJwxY zW7of`EqPH6IkN96b)YIaOz6_KG6Yi>s5GUCso2T+401xJkQlZmDzsUWbEC zD*0H|XO>+cZt=Iz;XV3(z+U4mJsog!R@CWp)BU?((`g=dH$`tAWLkc^%D6aUsrk|o z@di>%Vr~RCzj#_sH{s)KT;t+1jJZ7d z!|Lj#lzF<;&EhUx-A<;m;BHkF^u;G#PsMZpMVndwrz-K_J9pco8MYbkI8;`%|6Ynn zqY~Gb5Shp!Cs`dhKF_y9`o*$dI~#||whi!k>|;S}tiiL&t;K2Iwve}oEv1$t_Yzc^ z1Q|;p0Q)j^gxeKc_xD`sr-9$vQ9h{MC2b+OQb$S|99t)HK|iJ)^vYY&HPpv6#}FPP z+LbTP^Q9U6J|I537w9E@g5JV(<2K7yesCPN%q&L5xkQ5|Yz{G>w=uk(R_QgM`J?C9 zHTsPM7chdP{@CsPpa>wtXCx>M!$yT*Kf);Qd%66L*Er!?d+vit+;3x<4}U!%lR&|` zHIz>vYUhq405&x>oowaC4oIO2ML}6e4MW4!NB(PZR?7;2!pwjYiQ{f^ghJyY9>!-1 z6qUxR4O#koMkJl$Vl~W)n!Z;j$(q~!y)_H)?wF`m$p+}r?G;47$Vn|d98PxeDVcpY zCVy>$s$okz*Ocn1>{L)B+;T5;uPGaG?^%OrHjK;?(%uFMJziv+IjB`+?65{J!mTC9 zN%z}>uDfz;1^itcT282)-<^Y+GmfDO?PS0+XnYX`R-_j<9!_Yp6ZSB3UA$fE#dVGC z$&?H00@K)wE@IT(?z%hE?E~j%#$JDfHD8P!`l;L=rYMp1=-E+Baq&4OK=rqS0eaJe z9QM=o?!7NjbPdoziY{$UeWad1o0r<<)Kc5h4dlmXSSCfusNfkr@q8hC#v33J8QDAObZ=S*K(p5Ls?c>w#g~#_RX0m~FC~a0S%BcLT_w>_b zymz_!TBB()dM64u9nu&*Alha3FzG!h2ar8UZLgb_rX1l)U}wi35xvN`-(*&$($nh& zDR(c6we3C?Bz)j#+bi2X5F-d?u9PoxdK-5LKV(L!>3$pH^!9kuE^u}cJTilYWj^+? zYohL?Qm|zts;oNWQ>aCCkL2zu++1g1@VUzRTZQ#b03G3iapQ5irrhRi4+$RI&Gk3~ z*(bO)DI(OO_B1x)i5qORs>StrSDzjFYI*WncUd`olSJ$v;|~WsR6>+EXF%-Fy;xzW z3$))Hv{+5zni{tUHT|yt99Y)PreTDm5|tX292WdHt(h zLmBU>9Li8=SGhE9kw31|lpli|(UEy>8BB?`l%0s(2ERuE=i7%(LMw+eUv3sF+|wBHlmULFT9h!m;KEqVb=e zYIRD;;6;U@4{cOg7%zKHZBP2Rb1Gl1RkcXrV43oD>_NsqKG&P)H*2{V3b!~1_Z@C7 zz)>#udZx^*X-)`b$Uo^?lSLf!}NAJ=dkI5Jz>2c~8gRwpDNOC|c60&ST zDOazl-V;=aIzIJnm`~@5OQLrKP zcQSiXg-*qVp&roWCMdrhBLBn86EuiDJ-&Q)bl2C`!~I7a_xZ7mOy#q$S44j-P149@ zS7C+&@6MB*tNYnH-KxE|wH;CZ|HyqU1Ep@Oy|Kx%Z*lzH#P=$@)+Y7MKbt6k7%B{^ zUR=!knxhbPVi}6A5eP(4q}Ov}rQ*38=BlB)tHj>qm*Tis%%!>Vr7z-&oLcc~UFi`0 zKYo*@+sdODW**KKY9ZjZj9hPIBGp9gl`c$|LMJd)5`QYwyh> zPEL^+H)CV=HiJ={y;(&2qyXn?|Fk&~?x63%-#bNo)eIJ0QzzuBJxldJsp|2$_`xv@ zuK?LU7V$T2RSRoYfW2vKzod&3BPg9B9s^L8mgB3C+r5%TdkFgu8871{qICUa=e4cJ z)w>l*37xE^0TufP<1;R>W^&{cpNY%Lfwc6?;gq zruh+XG}X~NZ887=F;|c|qB36h`q8o0nKknmnpUgUFzWXQW{fv^C=PAZZs0=Q07$QM z(x|mPkg)rz0;R|mZ1)yXzLVNdJDbL_RSKok|6=1m*c$*rppUeOd4@7@$R951SIE|R z%r_RMtN0XM`uu{NMq0as^?9n*3SYtFP%1%ru~R7Rvt$IxnJm?Zu`zB*>*bnmvWQ7_ zi~p7AIh3gP&AH8<903_7uA|c&K>7*6Nh)iNb#U0!H+0ri%(~8b%IR%k-+3Y^t+;zGi3kAKiU~Z!$5H=Ybz>I z;as#XN$tf-H17ZydFOT*Qj2sVz#B;y))e#JS!=6Ph^9P2b@0wO{m3l+mHK&mdpV4t zLB`*|=@IbuxZ3a7${%?Lx7`>@<@Y4#cB{xpm802}jDgCtDAU^uS;vV7i+&GgnZN~bs4 zq(!>V=ZjwFZiww|DxwDQnu%AE8n1Y7o<}ZVk*uBc5(d-fq&#RhKRbGbT!mtB)(d#a z94*}YS?%TC1fQJEN?|QL|BR$tRWCv=m#R>M5>8B`DMC(SGe$aJU}MvKeQpn1!N%f# zbonco^;IkcrQN{$cXq~k{pYa}ks|ZPsme)_Fi=`Jg}SH#V!KkUZmr&M94-@w z(rC_m=7iHG6*-=OegeFgIK}TZi|P9=;1dTo75Yr(tL}H$bE1}6a{TK*;+CZ~?z!x% zQYH;z3YXta;+ZaejrLqCa?LrlsD)qlenIIqr@*M7c7>{GiyrW+73ZBh0kBjZCAYYM z;p|NSV65CT{vKJaH_U#{I2&g9{5)VNEu%s4t|7{~OnQcF`hAAcQpD}PzdrskDxxsz zf5y!9$PDKGcwtc(vD;~5Vt!rWBKEBWhDW6UPKx$5J@4+mU!^kD;4nIMr@ks&Q`Hq> zvrN&3sJ5H@1S)y<-$Z;UQ~t)Z=rr|@5g&`Jg((&mZ{re16B2RLwm`}tW%BYf4aI4? z!Ix2t2q;&!eV7ce#tDch2~kbrIxaz8B_A)EH+kfv=y>$i7M&Q=fQq(TUVnHbF)f>Q z&nJ8wDsHu@d{wH{=k_u10QEai{fo?^no#LA?JWH5F)_Y_>K7mps-p2FHqc9Bo|7iO zgje&`t|!%!^(8cV%bZ4@ITV51MsNBUxMl#zPbpy{4X&j{)sURj@#C{2MoXsP3tTL? zB-iT^2KvD9I^CHx5fPnN>_%H`W}$s0KBnFQPmbL4_2{PkAyecQ!=9Ih*hU#F=Jku* z^Q8jSCz~oLUeVrCmUOG#4o#fDmfHDl|m>IW7x2LXY#TXrATi6eX)be7fjNBI|r5&X`oYVed z4c;$mZ}LACXgY}7S{A1zY`^2;Yi~j!>Lhbi)N%&qeo%6zeyY07hWPLO~67?stu%r zRO!M}RGNwj9R!pXdWQg^2q*~XLV8y^p_9--K|rNSCxL__y@cKZb47tnf*Sw~a(8Z}dR#?=0s$g3htAav}-*91pxZ4*eJ!cEjTr}yh-KBAx z3?!i6tHrw3ii?_)_Am;i+4&EE3Ah4GKr-w+Rmomks;Bww_b1Z-CvIk&eLGt%Td`o2 zn!01?pWiTRgxKvu->%qbkS8QkAP9{Ox~*Nd?-jpHq%!7dq^TTN49p_fn8%z~q$}Ij zd|;qf(5#ly{WaDc{+UB%sobF+Ad1duKxoM+%JQk{K7- zpL>5}^K815r)v;z$9m?KNulYQXJ=znzpI@X5qHjO?bS!O&|rr)7^L~jY8(yajKuwL zZ%sE}Uc(Oob43)N8txKLL>@R&OoghzQUDS&#x~nfI2BHLkAuV6~ZE zv|wE$;pQFht%d3Ot(R9L-^7{tjTCZw!c0|Y*!62C!$AGsz~M{-lb7ZA$AFurP2_t3 zSnw=d5KRf+105Z)YQpvXGy?hzJrYD5aj9IZWMM+ATkdL#tcSa>3s&hkl&mwi?<=8N zT5Hg(`nq=hqlmNtKs7kviiZj zs7fpf;0QwkII&7CV}C*KTaYLFPT_Zu{n)gNcw^04z6ZASVx z@WM1pS}Hu#YT>aB;`gl{?E$oB^+e#uSqZ$5QPFok`J?eyg8NGRhm|(n1qpr$bD^O$og0nTF_&S@N72IA<#UI!HLLFyvCG|3F|>G{ z)ze%bAWUUDkcH$!ehJz~Oken4(oiZms+1yoMO!!-43VbaR3)BRFF!d0V=u}O9Lk2} zu7L)#D#Dy|j&@YW*#K zno3WXa*f$GiG6MDJZlm_Q#HAc@ zTWN&da8KZCov|d7Wqmn45Q)ErAAPj{feIoTE6(AmKDe^-aAKd?N(0beS;>9JzyFmjs1Q>jaqP&ZB-O*xLe>15{8Z8BOw8}2-| z(xD{Z)XAyz$B!2}Xs`LKxJ;E$I$Zv7{h|1eiGb4_bI?w^la#wW>6isrzOHtXP}Tjc z?Nkgo2Tw73qgJ>=C8JHXFCZuCoJ^OS%`oU#;LU5Q5$iO=w%AH<|z4 zYYbng_nSv<2#6c?G0%LH)Ez#Z9=g()qc~~>l~Ta{e)B3_k{*foZCt8h5?w!I^@1ui zBgZRT9H4^dJXb^IuC{R{rQ;s+k0vueKUYiIbwBa@kYz3E&3ijx=CCEWODbr3+GTk< zHNdVDlFv}>w?AaQ1M2&RN>>1wkcb;hAbILwervH_8L-X1~`JLR2ApvB)S0=NBiUj1tmnu_;AlG7H)&Jghxpr9P>$q`o1v2 z>e>&i7XLG!#)r?%YZU+*%-bI+L<~h3qDt4_FRteYlan6qBnb&zpt)iqo8?`?zpAm@ zSVV>Q}F)e)NRjK%D7L69!%|m4W$Ckx@%v;NIR|Z=N>KhzH)c-XA|?f>@?lJ!nsJYQ5N7;|43% zA3rYc1E=_{BI!UI^gA&j(U$y;KmJgAmSl&1yE0aL`s6F7g>suvHWfpFfKE*k;u`@GqRCF%`yrVk65E*ROEEYvaYs%c; z#=#x-rsGV0;NXOJrB{ zpyO`HdvCs>pkX3UE0<;R8#N7O&orpCPt_X^m&-*dfllfUI8q&XrL7yU^Nm^UWVHQQ zn82ICeUk*4QsZZpzBhkx%J8Bj?GlOzCkxRVi|Y^eHtTz8>~8MhPM;dAbs(w(KYW!c z>A2y5vk`KcX?<^Ds)vXkdSHpRt&L0o?WMF{*4}wVwGR}&PZv5z!U`*ju}kk(AY$cT z)5}rHFDYV>!q)@H0&(vpO}(@WQ{Cp)^vVXdGwy%-pK^&ZBNN}8=nYkU*lOpuFrRJX zYF$*A1Ooc?X<@?*Uo_~A8EONVIeCZkPooy!3L036I1LaWH+R1GKHW-Z_t1)?QT^d{ z=(e~!jflZLGdCE7NR$l;e0df#D$qYc|3;5t_ES<=5Vk4*>>&c%c4lxMM30i=n9_ z*;M-!w)rnRph-1+ZuT025*4OIZ?vYZea-zuSGlXDAJczUS?Y$al3Nj9;NJo>9c! zqj6od8~T>C3O}=jC&cd3f;8HEU7?W0#sYd`%~n3rqt~|zfHNAGdo?w%@Ladi) zti!x;-9UXa#QPRm%iFmNEDs22rzSkUB5V`W9pLf9%eP|4j2(}z$FTjuTRT6zEnIkN zAu(8{knc@I!bO?n6wlj{I^R3;C4JvR8jKSl-1e-li_uqAt?pb#sLi;SG-z?0y<|(@ zC%Tu%Rnaw@BZH=p zfMNx~hmS^l1g}|P`@8nkw%FFjBU)0sH?-A)u(;Ndu}wqMDI!{SQ9@sSo1R9zyIS$d zSSPx8xzb%jNAJ;fhs9l+A@*vGzBmBmsYFX$q4m^LQJdW8{W^#`QS!d2NOo; zRqL#XuPM|J#0);qqBUW&A%3il1fF~U>iM^d+zb~PDt1Qb^>n!gyDFIsNrc_W@#?;O z9*^2g>Dcz%p&pf07|l5n+2bBBSsb_7N_hKt|u#!!%RP0A!LVlSG5jnTe_N6 z(-M}A6m{o>*Jb1ey)gTau}T@b+6SndNVcv1q$`u8jJ& z#QJVQ^Qg8+cK$=+P8v5ljw4s{d3#3lJ6U(m(ao1?|)1#0c}IZO51BZDEd z7q1+*?}$6#M&U~&ht0X~H(lo*lC*J$^L;t+ZiDpicw6?MQ)ku(XZaY>4tQfGLH!FA zj=rdelK`>G?o%6lrSoGV(cWGUz5;M*Z$ZBf)<|ETT)@+{o$-!w{5AQzM{V3e*cbgl zkzfB<(P_QGdEo=Sq|?Dj=*io%N%8X}+Dcri3hGK^NdG~n$=WBd2#5A+KKY?ky>SW; z+lw%?AIX_rtG(CXFjB|*OGA)BoZzBKQ5qC$!}!RqU71PSm8>r5oddziE@yDQ*G0ET z$FxU2&MIwe{RkvRyzL52DQMhu~!*csz*#>CDwbj_*9{#r3Q{mqNx+N)gq;{Z0IhwD! zkoGV6vj0FjmxFddU4`C<#S-vh32dk!5|+V86E4`-^R`iM?%8LRz1}x%Yc^+u<)v$+ zb)CNK&qNB!MhXw+KQXW99p^hUw3h^7yCkU>{Sbo;>-8yYlGHj`yHf9Nt2aCxnc(6| zTb{lV>OfBR3jJCh@%bxLSb>6tz6f!}G=M9OBzBd*c)-=Ca=_`TKI(RoxWlJY2o{WQ zBt>RdJ)h5#bMbW-*>^US8>z7HmV7}8tc;O`Cg0jpN9VSVR9A`*;9Mxud~2Sxc)k+F z4ESa!IFQv&%@JqO4j4a0N3*B+NW zha;UNm*uOM7`)AkxIHSWyEk_VgF~W_`g7!kww91?aO(DTu5Au&edQ9*;;uvW+7kgZ zy>e^Bnd#D{f{es3+tH`oK)CzFuHz+iq>qHdq%mtxD`I6S*Ix{tdPb(Ph@ zj9t}jxja}s2WNPt@hF|W$6_kcw_!{_tEq2)=F4=-AbH!Jq1k2$!?Eoz>V*B?)D0rW z+%oygk*TkzCo-f<{Kmx*feyQ&H%H^zKW@qu)%$}HHP}u&F$04i)!%#rgZqnnA5H%WJ!xDuuY_nh^B!ZvMf+ zhl^#z(^li#{q4@1s!Ylgw+uol1|}ou(H*3656-8~kS&tG)+MStS1B*)ldYdV!Taeq z#ozNcBmFO&yr=Onag&cKovS|X_r%ToP2BAZv@B$gUp)Lh|8~~tbAOO-ohT&;(Fs-*()aDbxxLf}D*h|jzebNx48%^_#J8u5YP;pHgB&tcwL zpT`YL84*0u?ZS~M)eq-yQPgWwilQz&IrzGAXaF%+-&n^n+Z>WKFz)r;alFsGSDB^> z?bg^lWoK$LOW&glV|~s!I2nT~zondDMV~TrpB1m8SKZB5*XU(3V~Kf=YBC{3@>~b zAq?SO>YELJH*8lq#?<)RsBj0sLTD(SJWWSi4@d0TEz-Ut9qlxl9_+3KhlPL;*e>5N zzBE^eZ0s&qaF8*4Vq?`EdG{S3F^l?6`MW0*xjRbwr^r2Ie3T|=zUI9L?xrU3{r+R5 zS!}~7_K~3PSt-c=y%@2_&r!~do~d3-8%<6*53c29DGkF)zdfP8nz^c*U-2&ghV_^Z z7bI`r66qhqH+m-Wa@j3&w|r;QXlKz(|zL1|&XSR)X9<{!c`n*IiwSJ@^1@ZCo z%nMHv4!&Ug7!L8p-=)bsN@azJ{CajHiKE*PIxx3l2g zmK->kw=mmi{%{o=)R_CjaMaRUA%1;ivq`?(6Oncu`m$gZAM6|oEma&d=(Bv19~;Xj z)!pcrW`S^hKl#lsXdeMjpn=RX6d1_w)VtE(Z#*51+nuCmr45TA>sxz=u26U8hu#uS8Cv(P z-wBSz@=A?ybjMAjjS3azJu+vb-fMYlY77+eAlRDUuQ~K(QV-=_g01;M?cg)#|8`Ls z=I)(1@hP$&W%r-g_s_5)f43-~WG)=jXZWE;#_^1E^RVo>@dnbgy$)zjP4JV5sSBMC9B6b^EQ*HcP zQ2zW&uCIZ_v{hmF{w^`#9Sh0;Dn#O?*2u`L(=tw*T}HxsHJD~S-qoaVQ~7BfFu<#XxU zwj51X=#U9gpmDVbU27G@?VPM|>%VPYKqNB*!;+^t{O>z{ynRuO;OT+3!T$90D=l9R z%@L{Cyq9(fF~pFRs9ipmzVi(q1-OQ{7uA$XmP61zzU1WOSid6hkG&Pmm=3@oEYB7d zkOfMaZ0c1VmI(*GQXI=c=sF!1lj(bXQiT~bU*saceuX(!9$ZOE_v13lwpI^h?_`vv9P}M za4o!3gMDl@!v85&D-ry2#x8?MNlA%5G^CzLkSf^GPYVB9hqcikNxG;B3Unc|({%BF`N81s z^oWoF$d3yj?Ti2Ygn9eNH zVT-!FdqCEkcZH8|{;spEgHT&&E+I>64ui9oOiu_EbZ7>bD4Y+zD$Q8U1-tk+D z^)=sLvO45)BBbRzZW_$8_^me1PrNth4ka~+$=7Xoe?95+ECGIxAcFm99K3*;m(Z#u z(Q7wV5wl+m@o3U$Pm-L%1R-bH#H&1ZkMez+7m|okTHjk>=#M$2Rd7;5`Rx4l|8+da zt9=Vr%bo|r{)c_}%Nd;{zw5Ab2NKu$SnnPBCQx*Kb|bH^nJ$!$62F(~|MYYZ z_S(M$OX(!#0spDJR<@)2bFzKR-OVkE`ZupL4ILe9FzkO;ojB}HzC{~<-9%}1r%jXY zeAgr^J_bPW!3+w8h;fT{vr#%w&VYPI|43hJ;hX5PxNUip5X*jo8~~*1Byq{??+D zN>xSMZNQ-@p`I#t%LfcOGX;YJXh7$a3)~jnjuv(M_O7Wkb1K0+@|Lp6kaAoKjV$+n zDPK*4igWwdIi8%re5A=jsWf;MN4Jb$fkjO-RuWv8NyXdl1TSMDJq%uGn;WchftTk_5JsUpQOg-8Kb< zOd$d#N(FZPeNNwlnM3@Xkma2+Fcy&we~~`*LzPArN6pK#;EQ$GU`}<~W>$I9v078{ z3gJ`tedo8zrNwMYA}2-@Q}JNfN+Qhc0;y_4)7)YcpvfVu8M^7im={Ujs4O4 zjj(xzRQ)w$-1=~Mn&P~erT2k3b8vV1ZsN*f3*5(>TN6P!#baQvx9ek79bwZqUoI%G z-FQzvTN)xkIpLY>COwCN&JbkNIw+8Ns zPE6YSX$f>r9biei`q9GwjwSy5T*|dKfpl?(K2AK#g)Saq&Xr?LV9&;?Wl@#(ysK#} zt-9-Qd;x5UEYPh~@0C&|<1iRj(QH?V!|+bweZo7N=Pi>*goufiDT?%@3o0skX32x@ z0kf&Tk_XO&`etn{`2idAdA%9`lk`hHj_UblJD<;My@0PY$c|nrUXGhAH-%TUFq_D+ zxov)*IL%))%#pOngsqy2#5QZnF6j>GvWjwf_P*i?iPne3d>5>;Wo8e z1s=)ifYy`VK$c^k2LYn{rr{OV>Z2$GZ7pe%nXxj7Z{27oRPlv_@1g-?T!EWKes9dt zz0XdKhjyVMQFmXnoxK~OP&PQ>);>)^-Y5g8qD=HEwv2Q@t8@LqdI{iv8elA~51oXfY) zTb%8VK($MjVzoo_yHQcC__2j zb&G5QT)J*q4%-u#o103*M&wFw4yWG^qE+Qf;V%mMUrE3R6y)S;5_LaOdOa%S znz#0TI8IXWY`*zm?Z?u_2DjZEp_3ISh~ME-;etHcpC2?h#`N_Y-myMzM9oQYy4wnM zJImE`o`Ozh_2X(!5WNKlMwQd|0_ci;cdPjE?3>FfH!X|nyJSo^-!5x=*%iz0P|}Z* zlrHydfnhNgE8rux<(*8&^Zxcb#kJ#kPc;|S%p{7C4mNc3Tk8186tVWTWdSuvh;ZH9 z`!_|e(CEdYddVf!Y$`;m{L7W_7h^laS8XfSS~C!&BgQx|@63Bw1?gO+W7uF=JBx!i zzYiCL+Pg>1A+}<4nk3h}CdWMRg?nC;nY-!@TasAucg@41=1qE{qX~iOD4Z0)9}%7u z)ox=Z02P{W?I#@*U(`~av)DJ^l?!o-d;QwY)cnYY$;f#(&$>uLBk3q{(7M`jP0Vso z&+^P^b|1&#XMGw5LS~6S4Hw84E&xe6-(~ZYJ9SBKyhnwOsxit$x){|d-z{g_<=`hq z%O)+dxzd+2ut4AXO&nDLff}I(CbiA27K7*&D5EFika(Y|2r_qHlgf>A9 z>=WQYDQioKMR7YgxNs)lm~g$g=u$;<L_DH)B?9@*M zfU?5q7+V&C{)yR7pCG@xRHjxn9cz#u39H{4qK6ftpcCOqG=dcm2ZUdPSuLZGO1+wo zi=vqi^FYUF;cC_o9u9=us2_28B63%|(5~@tdt!Jh@*jurjXIN0X`rbnW$pT6*-7!B z-vUC;ON)do2-R-(Cbn*UNh7fx8+DDvilHVcLxk^cOE&^%;}R9Y$~*&_zo3UQ7}ckf zpI@2A#6a_{&H0O}%&KN;7H#x%Tqop+>X6zZ;uL4|IW>VtH8w3fz**ANwV2Q17t&7N zQ`KGY;`=p4KsJ*)8q-cjh)6&)SzLxwB9yEsYF1dw%h8n|I;-t zyx(GBNnfOF$l6pJb8TXMs?(s}M4RG~(*Vgp(%>ukf7#9ZU^g{t4zU>HquD6Ice_tRg>%O23&Ge0W5-r!T0>)*@xY@AWBpnEb;%)SmN*M2lx`~@9 zt;X&mO3v1Qqjqkmksj8P zue^nJ#tK%}58-{vN0Ir5fH^@=`f1~#fuPim+{O#1C`DYp$?1SPV1B)_1XTT%^1yr? zIR?L)t-&lK2tMkPyv*yDj5wL{h~ejPj_rb#;@Ic=OIqE(>9^4!QLUFIK$FbZ`VUiD z(wAxR?%2`xI3dqRv{P*Ea~WAig*ei7)l`%FE&da+MLshZEnk>N-O8>gSRw||-@3L` zJ!JfRcBlU$S)lw@hh(dh#A78#FsW>!LR;$$&pRqH2Vkit-bo{75-ja$@%Tu4 zgNsZ0WU6bZ`rmF)PdSAGP}C)kcZ1XarM@NEeJoFr_bEx~I@F8!9qdBQ?bTLG23lQ# zxR3>kjq-YYB*)x2j=)R@bOUy>UY&PwaOk=9i#=^n$af;&Fi=`?9bjzJ4dfE|k6-H9`11i;^YO6s$b#oCsxS5~>>y3?uIMU5$D{ z!DLu6c~eh}AL3$P?PEat?N0l$Tb%WYPb<#ZHM7#JVAvqv2aXcb(L@wtSB3k>(P=gY zzv^y<44q=*gbla9A$I@aXerGCT%&trdHuh9mp|PvN`^V{0L0;<$pk6ZplIO8zGiP` z_0Y6ge`~1s`^bq;1`hQSOEnu^g(15KAd~=;KMEm@bYxz@-`u#N2V66OfP$jBn@g-g z45$j1E_o^2y06?Q4My> z>ey*C*?Ee7#VE-6I!2Hm#cTrFSbqcER`rYxjU6{*B*(-Z4qi~1f`&Ak#MDPP08GAN zSp$nKKT8%kuW+nnEsj3LX5O?|8ZMc*%j$OK%|8(5e|H&_#DEKG!N&a`EC1J(aYY<= z`rbq~uGDnWJzMdbp_<}A)ajYXpHE?DI9LMlW1vb%#ifNbPG50a4!NrTy#Y_|ThBdK z3#L~*5P`W{;CnJunguJzVs918%i`gL`jXxE;b_bc>zp(W^zK(J{jJ40>3}D8Hz~-E z?RiH^X3q?WR?aeo7u#8Tk=fYg)%f5De$02-oqlh*%;BfpmEEyb-To>C#UOvcaNuGSNLg^?BO z-!e=Z{p>h?NBQgLqm%Q6hOi32xpf4I1yoH@7*=iKbDTE$n{rS}hk+Yj+d5|algF;{ zAKiwGS+_AR-4<9*F?ZWx#}5&STLWU>f$czkY;K7&JU6K8(&L#Ch|}o#lVj$j}_ZOB){;*&K3)#-&q2$La0GbyOlk`7A^7W#I_-TXRK}l$vP@ z^2rwql8z)p5apP=tPX6Nx3>C4Haf&CI|o(&zRcryjDU_D4&HUw`1|AZtK_Z8aC_;6 zFISW7yn!4puU}sQe@20^U?o%dX&id9rC+cTlV8yeC#weGkc+n7o8JO%lAY#oRH|C) zRcr6)T=DzSji6Iu(&d6%u)-Z0=CehdKfi<;c-{01$>s~x@4k@B^bl6;|FpXwMtlU> z(1L@YuXf{gO)$7#njka9c0mza6oIhiE?DNAJ#VB^XHEO(W=VwQuc zMk8&Ce|l}G{>Lps#sA*-|J1oX>A;en@iwCk|NDxS>d6F8(iqsIAkx$Q+KXd`l0qLTmbYHqvJd?I9bbLnXJP!3@WPu)|PViyt zPo2 zS)XN?2@RmcaLkw-2&55W+239^Ff24Ok-fro%;$fhYf4?L^NHg(8Nkuk1aY~wgl8r8yO2d01`NUS(8Wo$KVH@a1F(Y8F;!Dos!_%PGg*WuOmrV;`| zQGg+3(Qe)_`|v`PSGH%J@01ow(szIJ&0xy8sQTULqRQiZ)&SHlF|DZG)pv)0SKN%6 znchy?jwzbjjMkTr!S+gmtjd!r1wa+jBOa2v&OMStY&{M^7T0z}4>cPAdu1?wXR=;` z9aa-!k@7rNM8sG%T(Ch`cM`64!B1xv__e9Zk2ajH)k3B$zp0()nK71vn0p_*;`wG= zUM;mb9a!A3{y=x_w4xOXGp%EM5gL&e!#;rXnoSW|DMp;>Rv_9=D7^7gJtC%&UXVVg zxoX9OJbTlUO9uyHw&Bt4fu4KybkqCNL{kI8;(Y3!)Bb40j{oLJe9?DT#oZe?Rhr^b z;d(!ooW7eI9kLEA4a?{R+IfY|g@R%x1u@cE6yh^{CR44nD}F~$=f+$&NM8M{R7T>;WHU#Q=AodY?o_DtV1oC=0uil@zC3Jl|kk<oIazuB0ur!30G=;Sh9$!snze&QQnl_<^-ATKnu{?K$-YwZ@M|%Z= zO!kc%T_u3q1!`23N>Q`W@VHx7);uK=Xidwc@@^UaOv_0m`gKU&;B=RPw1VPDJ0gWbeH zPJA-q^mUb?y-mYJc#oE*4E!@qDZBVcI{h-OCP;imu z@xuj=MpjloctjH8a;SS-t=``CtZGVAHuyMkJJ*+^)jr~;@L>vMbm3&!@OQppYw=#y=`4cdC`YSzxHLqr%+Cz7cph% zkuu?tRCw1d)6ps?jaj~6@xjPORrqK8hn4NDz1X&$&r?yMfcs1CI1!-H2AXZ<`o8*r z5nX3^)l0mPD~W-nVvlS2POWW^S*9h@?IpW(3m)JGDjp{UM};v`wY|RBXS?EI#&r+<3a#mSWfoCXY+ni!%u@s)R3N4J_m9|sA($m=XNe;v>I`^ zsK+8Ru}KbeA3hij`es%|Y!VxGgb^19jU4LpCy=o*k>S|f?V7HdMW&$14TsA% z;X`tbKyMrQn&e%~Kd&>F>;IJcH%_1NfC(USU2=(sQ=}7q7Zr!{58sA&#MGvj^A~5N z9tn(64*{W zxOQqAYtFLb;l{27trCK%*qx!oU23b^>{YY0tH~3F=;?#%2rRLSm_03;DI8BY-}u>p z_eYO2_PF*ivCCq?&&;uRc!xPyh5lCNv<)PuT-liL`N1pg$<<#2+JKjvEACFXn z838Y)x72srdfJt~6(kR?{Kgqq)Fq^7-SmZ1s6?`r7^`{IPvv`!DnrVEg zc^h;LTD?_UrU)U(i9q-3KxPu_%i_}Z01O7|`D7v5Z%~wPUQ4J5mx|BNKVxK*ml&wP zdypLX!_E%mj{S6(YVmfcgkGh`1qp7ha)+CJ6CHh8^ipH4+UzjP;y-BVZf*9IF*=nG z>dQlaM?wXKVfDTK5Lz>xe5IPT5Y~`3^Evb&H`i{ku1CG_ z^chO~wdk}LYQojmk}r~2lmxqB(?vN(=3gWaJFp>&7T=w*AXc<}M|_|bdN*<9rT;kK zHYSuT3e~=7Y$XX>phVY3ESe)Eza1BOh1E5 za8dPN`sO8n>Jg@PfYn%S%IabfzZ4qejnre@CBrgac#qwBu+N8|1u`EB=u+>hCGe<-Z9(UrCWttcFG1dR`G>X32wyIr3c(L!{Vua)F z^R}LQLl3olnS{a}ewqb8bL^t`g31AP>OIWa9eWhgCo? zpT${yA{;fS`vKAeDmpuKtZfe*;mg&Qp4@(Cs~*>iL$?fkw+0LZdpS;gBAU6Cft-;8 zY8hoFZT&$v;YTQc;f02+LWf|$Srf`^?zlXp%9&E|UJtjbU%(#c>iRoKu_h4*CPL$u zve1=YO;J-I!j^5z_XXL2{Hiqx^Bb@nUG|yK(n+)S9*uqHT}BcS2Ui(f%D2HEF?@D54!Itq8!@X2bBcYmMvzD*WV&49m)+oRJ{6@pJZujBK zY|&TMb?pzkmVhDaZnh~U!vdcOI=XCPF8wr>WfeB^*l~ZE<)H?|kUl&Hzh0qj76Y<{ z7{2cJW8MiKI4>Rn?JOJH_LHMrrv_S~d-Ar`n)9G@Si1?7hTWV})L;JN?=jJD0q(~!2G6~u%YP3+M6OZ-eK7x$I*_#6rbunFN_w{bW7P>67OU*Y z`x?sY^H5Hz#nH&ArWaHW(WhcSJZNd3jSnK_OaS`q~QY)%92_RAayB^$;WXFw+9~R5h}{mwAD-9@qGy;cy?K zkDRQF1YxQTcjcHj?DEs&nJ%$oh)X2E#K-zL*P^R>hWey=Ost<+=Y<)7<`4mpi8v#| zVAZmb`O7SQS)o%-=!gN+eAF6(XfP2z8PgP!)AGRE;NS<(bEz0IT0&bo%(@l~a#zm( z7?)$jQQ+iz*uDVY=#ny-z;u=y>(9JZJmjroY_=(GNnZlFvtGVyF|m7V7D>UNVkJbI z2!A-*Jw(Ik^vwuiz1QC*H}%?aNwm#J^z9V>iQR1VEL zWRq0e_}CX+jf&?)?C#ox0shFneI+rwkFaeaDy=hr^hUDku-gxs`#Z3J#!fk2WbC~6 z63Mb+Fo05(lOtk>w3(35DtR1L#H>`d*k$>Tzb!pC36idcOVqsY)7EHh((W; zEiVe$?iH+hK%M2*qMuTBePFOjOy>Tu%Uts_%bA>Cu^^c+mb~DN;FubFaO+Q}&)!jf0IXWa-b_oyN zGHrTMf|FT%mo(Oo_;iOk#BETo(z*td^hCq4PeU?~rKpqDU2uipsJS^-FMColyq)7> zBeJ2rsFsOm(NF#cRHjZmgj~%amHK5?J2RfZRNVJu4H>&_Ma$dCd@?cu7fD=pXr9kW zfx5+eom9))pXDy??U^c_e2Rh=@tLBwYWfcJ3$(J$Sw)?HXOYQ28BmuSG4r2d3VMfn;_ssXt<(54ZX+l!mT8kY&;<8F;J+;kYbgmD zou9|#R!&oC4uO#^E5KYIWvw(0`|cO;)6Nv> z{G}|n99V9xB8}9yTT*mCyHhrRg#|g*ap@;fqJ?h2-7_FdC_^I1;`6+XF~H?wRg{B% ztX&PH$zRFA`9H<1+Kak6X(P$Bi?YTih@3t>7i8}BNqtt*#y9vTL93U_+M5E11iZM> zibj^rJ;9-`=E-D%ieUjSL2b0gdh5w``vKkSJX&fdnpzWOy^f}X-hz$4rJ&Ta8i1Fu`&GkN|{y6kRzKQ4gtX)&Msle|#;G7WK zH^1WmqBpydF~>gOlc<7-XfZ#MA5zU0cXcyPQd}st@xnRepk!EkGHU^9Yg1A#q-5n7 zyg|2-Fq=vPXsCcrb6)Xi35yIz5a1Ga1+EjW^f-I0U2{-rqFq)jUz*Xmg6pww#)TeXaIA+Bvh!sV|c!Ud%ah^JJ=}9uJ@aG=9O#!l3+-SbD zPgGYPkhJUQXIdLWJ*%x};v8yJlvWoCil~WC^7!-}luByxaW+(xsczdNrhP1b6y{8y zNj}bxUY7URD){itS(SpkcFH#^)usRJVg;C10GOtk__Sv8$`U2EH($G(90(kzV#+K$ zY)m}rLTWb39dl9*Wq+DgFar5uY)oJ4Pkg^k+v5wvy+shJa~#Nj4nnkXUY9AJ|%GwIGPcj&r1Bh{#vy!5u1{M?0N+afG#ZMgEYe@6*~EfrGr?pmDeX` zj!XB?Jx1nL%zF?!^4nIDi1i;|O*1H%Z3lJiCtKo-sl5ssQ+#^wPh_6g5~$2mMtA_p zaXj3bU{)k~wM^woaSa2P&g*1gPMhV6PAPodds9>bVz1qV8X{dFSV=l@`a(XVjzQ7% z!KR!DNJtsDS0*;dD}2bZOsXrC#p$eb7^n*CI4G^|vB+^M_;?;?*fHXtH&qpdYIY}k za^M5sK+w7#isvw^=$I_NQH&m z{MqF}tOGq5QQ$f-UB>j~yfJ@KC2oH)bmL|q69_R8&F8{}jSZ1YFly6Gk-Ipknv&z9 z?)}9~-TOs@vH2IWZ0-zzI+Y@4!}eCOj)8!SAIFp>{*dfjAo^4@#DfGkzg$4-8e= zeO+0Ar#y3Dlj7C<8!ELemRK(UC6g67Mg0wB+8h$hY99PqAM^HuYH+D}zRqjbo6qif zitG>QzY>U;4%)%fx3`uaQ*L&K490R{yc&r{EN-9AcA|Bx-xrz=Jiyu$yuA1dvwZEV zr(-AH^=Y=(6O+s-THap0`^4yIm*w4qfZ){8V{&I`M9iFVqO|CaX*O(bjVG1T*9Cg8 zKdVT(=(ma>4cQQx+a7qskku9iM|JFk`W<6k1!$A)99IR1mVi zQoDmIvFlpo(^K3ZYP7&bZ#yN%}Rt z5E(Lbfz)j3cP_s4f9g?RT+uZDKGK^kFz>;09Na9mS!Ojos0jz*dpR?rS>NtD3v7x4 z%@Di@`Lp_((h%@d+z)R74ywOfm9e{^Bm)L3o3}=uVYRP#G_&QhMnG`V-P#@R@X8Z| zARgRqt&4fnD}y2@*S=E=c=UM+q1wdGVg!4a!Xh$%QBKm{Fdl?Y1wwHsB{(^G8Ymu= z_|pESnJCT+W6mgyS0lwLnU` zy9AWRMK>&wlJ2fMm*02x_U^qr_niBC|3en8cfK>m81os=Glo3$9@pEYgYBQ{1=IGU zItFi(2~SHaW5W!V>4yE(%?C@ub%S_G0OTwjWc!`vXG%U>E zOqOf9{0G-Nb`a`qR1eC{jy4_3+7Fu)$+usRU(K&jEo+P;I21n8SLacs|2Bz+mM86e zc&ccMfyVrHcnUY{Re^=|D9OaVlyp+FWfu^(jp=OCXENy=H;#bD$0dazZxm?JS8;YT z;KxB>?a4~nR4gY=xzn<9izDBi@d~wQ6Bq`*+LXhZM?=m<1_jO0}s06@(Avzi~ zRAsMGH|w45^$(d{0!?9rYnnkRT<@C89vV`80l1&?AbJuvWp%H-FR7fsazprE9Cxhf@SZ-7lzEEw2Ixqk8>HFS%GGt^RP_XI;|WY7##glxBhT3X-NWVckh0SHBMKNg%13%Q(St36uqlX!u&!IFy_b zfO3&}jmM0(XD_G0X2U^ltp({}Z`D*(-Hz5Uj!O$F_l%v`k$b*}M&U5Qk8T1M*;DDX z*1fv^!AU@GJ`8J8*nOYN_vZc`DnYn>WJPY%(UM?-St+Zf^3tutD(+a`elT~JXA1Z<2X)keB&-Urq%YHYg;Dz9hHfASl#Sh_<# zOlNoT6Xd%C^eu75P1bS;>lF99A4-H?2SN?A!N#UCkURt}+L)C~@~A!~a7DCq>@IvF zO5{cx<@jWCw)iVyF>-Xe(@rv@-6$2etoxoYysWek9Z z;B%&nU)+*eE65t}UQKupQq}j>mF&NUB%u1=d2C!;yXu`&cGZ8`r_L<@%JdGNuu%!b zcQ(*q8nEUQW5-7U>bK#g*NL{`|Lp)!*nNMz1(K9m*>w5)2cdK9CqM@?I26Cs>#)7M z3{2Ykknp=cg2J?oGlt})+G5ZI@86GgC>4ML)t6e$kc5LA<%km>FgoyTVC3D4eQh%k zgUGitlY>Oy+Wy)D4hxYj5RTkH@B&CEUh`977!_=J%<)K0vWtJOSmZ6*u-tKjb z!=%y}&Y(v@;MIf4rt-Y;Q;$}iy0v=8>h%$=Bx`!hmzlAu*VVpudAn;~XU)GA@4G*& zmc-}-zls;|?4{kuh6#FBc(oecVmQy~S$|-9V_IC1?fIKb$H8Rz<88ODEIvQeyQPLhMx>jT8u}#+2=m>r?-A!HOytwl(s7xXwwauty59ctr>WbrWiOi zK)8DijeEjv&dw&xkYU%e;Zf$ zy_Lcv| za4G;pq=McE5>2fU=tPhC2OOZZ#%f0nZO^vxX!0u#CWeVD3`>U_?Dbwg^X0KtN=V>d)M`r}zPcJN)|tJp}kff zWq+8D6<}g4diB8z=I*`{dDiqWAzP5=j-ZQIwFHLXzi7(2)`dDt*qD{{re&d=UEVqL zsQ$t2*KH7HoITuufWR=b8s+LWfEeXB0XW&+r~N&@?Uz$2dn=uDO?eT!Ue3`QrVwY< zqlwWbUFV~}37A^WH3R61#w~R~+;k%hc1k|(F~K>nQT?!pXcEc&1Mv1JDb-`PkmM!( zL{z}GYy+?@^ODeI3$_YO&67EThLVRNsN5#Rpuj^b9UMjHnEA7I;j{arY5BM5?Q~qe z5~kV08*Ac<%KHSj-;Yk(R_SCuOI*ynF1mix!=3kA3pR5yFSGLn?KPaLkXNk(m7tkhkY!a>3mzF{|#V5%y9>aa0a@@^9djR2n;0$huaUMKnp7WObHz6?xE?F)<3jA=iuQdWR0 z_e}N5u3op8?Cknon_AkvO?cBnzDv@E`DldctV6mJ>{^LAVw) zG-3^-NIPKXIfQvrSYl}?|G_)o=;x3UDTZ7n;dLvNF!aV~CsZziI*eO|0P5GOlv7tyyln zo3wxKd$56~n{{$IcNABmNg1st1n)m0d~+yC78WB0fe@)fsil z2}el1GA*bm z0dSNgFM*wlmZOIrKMv-F=_pgpN^YLwJ_{D6cpJGiEVCRFvyso~Q~kxsYM5QcfL3$e zhQkndB1*HmZy^t=bfDbqHMEC0be>0B206+lACuXJ{aVd?6S?D?#exFLq}09V)=7WV z*{Nqkzaec6N{OEa+FfAIsw3|!y7yQ_q>mh>IUoQnLC8=%SI-{}ZN0NS>@JP-%1Ff~ z$;b8p?wN>-^OL}zktgrV6=#WYQGJ@lE6w^Jn4ix_Hxr%qz{`!_PuaEN2<; zwq>LFbupSs`jJ@BjhQlc+lN~quisJcPSKfxMPLlDNUjEN;?)X;`lnc(P~j$RkZOeV z4ew6Zjt5~67>aDQ1Y#>TYS$F!vgB^65=`{O@Rng*047HC0JYmXJgc5lC0EtE!`EeO zkY6USWCc%{?7)Mzp`~_zbzxD%@ms<<~LWP8`49w4rm73iV697c{u^>GHnB9DmUzSHZGdeb5n;Rf>)-(k|^H zl$mJ22*of=KD&aX+Y}`(IwofALrV3_$P+e;y${MwEtr^m5A{l|5^mEecW5kKX~;^V zxM=VRlPCTd!goH-#j;(=|j{MxgXzpB2-TEYQ*R6@n5i{L;n4Zk&E9|5&5S74GuB z-SW+5OMj!(*gd4Z%Q26z@$vVF4M>s9Fqn0J&?L}FLPX)J0T8(1dO#E{L_KgYxh$sC zHLJ`YR>+8~4CN?Q)|1X?lsW;TQ=;|K74nuGmYtO?gMn)M=qpk8nYO`1laYl_&p%H`C{%J&26iDY_&e|DImj(i!7S}1D7m<33Px?;LdaJ$EOYnm0ika5k zael(#F6YnQ6HDJzGNy~-GW#xahrdk&z3oMo9?-Z7)@hiwnBm;zuq*FoGw$jL(I|Ux zy~vskrLeZbl7B*;Lh1P@*~!YVlPu@#GE&Zu2l~yxl4}CT{ZfEd+(yl437xeZ3 z;mcb>EKH%t{JqY%a;XkAcsJ9-GsI30(p+ZUZSq;6k+bD)ZcLfaM2aornb<5BWh92~ za@)oUxbN_+tnO)~&Kl#e23yEgWlq}7IZ_RkWG>lRo(H4|dubG&b)iGWJCJ@t2Y-D59mYya2P(yql;7a38%E*&~&|Z_TzUHfVB6H1{B!gW0!! z<9MAoC$amBz@WY|BsvF73q_6|5yw~ziWr?bmrjJeu{z5MBVWk8C+M|E<@)gr)+rCx z1`#(3Je-(8a%1CTtq@A{*bU6KZbw>108Ys~n>)^8ON~C5K7>oRh1^MTBFuipK!YMW zZNMO`M)oT6N%jyf=F0s7y(&4<4^j)Wm1;7Wjh%q-SEt!=vF(Agt-~{KZh9ZN0eK__ z;u5wkbwXqoZzWrqH3#2WpUP7>r&jJ_rFqQoD= z$OK*Thw{{5zAhc+=aCm6EwcQ{UwSzBUKFiTcF+_giO2%I?#HwDe0-HYSFcItsTLUh zjJVHcF)s;i1;Q+7IoJKSLl!jhkiCFKa4KRn>p~`cCP-QXv56;a>byq3z>173%yLb8R$w&$n&nH&x%`AgoW#>|Mm{T{-#EI zuY{(nTyXR(l|SRBBe{)THCAd$3r$J zC};z6V9F-O%S_Rb^~QQBN7;aZHkt6wZddqX?4Ul=$qjT;phH6wK2wm2XCmLy2AXZn zm61Y5e%Fl~)l`XcCY~*WPBuTLq#O^iP@q|61&+ZQy6%UCp$QlUI88p;t zbjXaUx%7dGq^S~4m0Bkmb;tGE5OiubepP<#Wq9T`ZiT9$>Rb_(DfK*4DmKHq&cy)` z$!RQ4b4qq*1U(<6y?iE7r`ccf!`hfB$bCi<@Oik}Ol~NijZ-GgH<_;iO zcaA^(?7Wotd3TWdXf4CL(ctw|40lmAOYaQJZ*P21MQPq$f=RzO={3qc#wC)g6LPiDFc|5Kd?>+_hrWIn zHmZ>CMU3m=p#BG|TX>t2@@LmzODeKi#<$BB@xa4WWzf?-SO>j69f0JljPv@4=v9rY zCx>{IJoY|PcVRd;@rOjoguK-0628Z(qLf&kyk4ftdIwWc(=i_9v_Jmw_5DI;93w%t zSi^XuVX(I2dPQ38)AF@o3ZDpTttyWZMx{!tA)hVpvm^VO)51Ek(C4oSRe4~VY0{&G zJKFI~BSu4d`@!3qyryd(SVgOJiuFbB9Jbwc0L^zX*5`uIfm$W5KV5trH*+>Uyvwqv z$!3yS9fJmnV^L}K^__l_B=K$%hs7g=Cg4jupKmiNtqGl=c-^v~>KEm^jsw(kiI0XY zhwKJ8^Mz=9FLgL#PV3wm6*JyUd37^}jnGh%c%n4Bc`#+Vh-?A6(5^Cxi-TiNlCYjs z%;VXNylnaMtBCN!J|wP%e2|XvQ?T>e80+&-3imr*S?a__x<(MT@eZ3&@v23g0Ho-C zl`nCnAg_}MvViRhiW(xCSTHwGKx%udl|Dbm{NgzePx5A{6JCx2Ho;c z=~sT}6PQ?z)Ynv4C?gbSYP8lH#PnAZMwM@99Ud>eIBu@OE%t>svfXcyGSg&z@%lCG zF!hJ;dY3-uR@_C@nzJmReQBllV6GUwlITkGv-ei6!uthP^Ub*`)~Dzzb_Z)3HD5)a z@uK=a0EQ^4{Vq4|7c>5%YOHHMR;d28!^uI!mLvJJwlc{i`vyaKN)lW)Qy;2zvSY7f zVYcatus|TvIpp}-jaCU9+_BSZi5CX`z0`Jh3?wHhJ*L7B8$=@C6d{Tb*0j_RCSRw=;sTmr@tmdWsG#q|L zA9~zMMMHTsyfLjL@q}M2t2qTM(x~crcaylz? z&l!K_y_21u?|DTG_wcQhN;_E2;JSDobTBuYUZ$_)bBe2Y`J@=2t$}Jf(Dhn0v}a7( z)szd}vC*$FaK}83T_tn6yhnUoe2+7gbF{}3ZycWt&oo2{dLBf0w`f#%1gL8zvE;dG zz4TWIyiT|SA>0xKo)8s`x!%=(TOO_o4@WAL~G!sgsHb$fe6CXb$LFuaq(i@DVCki(P zTAo@SHNVRm=36JrMz2zn^@#{?e@3s5#?l(4ZuZ4rg?0fm59*f+IWpyQj^cG(Jkq|} zOf4RI=i&b9C|>25X`^aEzIw^Wbe8_L!_#V28R`Bkqqo|VoybMVx-Ui!43E7cilDAf!+ zC$XM6J68Po^zEA5cPfsV8AD@y3ai2+IMg|Ms4? z!!7(F*jvWQ%IB3<@+Xe#s>)iKYFHE~fd8PgP|LiMj*SNAGZ zr#3%d3G(|6`T;*I(5i4y4jr46rWdq~T>wm)3B+9raRlaEXWz)(qQ8%Hf&A#f6|(jR z2MZ>0S1b0p7p0k~H>sN~>55W@0fewSUb-wxmK>UKj7=n2f|;AXjC&1-?6INj8wO?1 z`A7*Ppl401&FCmStAg8{w(iX{P7Npr_D|TeDXHcg1{MY`w&<17cod6cLs+DXRujg zV1(3oRm*{u5zUTm!u2^V(01sg3bO_sh#q1Q(gp0Nk8x+q#Rm6;H$OB-Lu>E$yEwOA zR;-npo5B;08OW5L3~OE4TIYs$Ts?%_$_9B2Tj;-!XSi8V_yh1Cxny;J&P-S4U6TlI zI?((g{AI+jkB+s@b@O0+v>~f@l#GC<;{$6t?95E2+;UKSF=@qFZlX(GIQHy#mw%bm zo`NP;@|+uzyyAH=`R-t^@4lGPP)B5CQUhS28qLx`CBa?Z>eR!P#2huL=mzgA0g2X1sxO*Y(V<(SipT$+rou%%;;3cDms<2Bsno=F{Zx(JrZ*Y)JJn9srU)c z`g4NP6=8i5p1el~RFou1z}CK^fF;qaPgY0^#HY>N<|d>z?Mb8>FEz#j1J zCPUj5f&uGT;~f$053?`U6P1xd-lx1PcMIhH_UDz;$*O_LJ0n^SbASMJu)k3}igr&c z0oM6?@np|-t}Q%%!g=KghRY}WUv};~4do|ddv>LDO?v;J-C#PG^$Du|)sc#VwS?qN z2w!CkxU?P^F4ugVa~5+{5>XJ$O1unS8BdoO;{e%^C;{U}W+Nc6SaWVrdoya;VGR## z=yeZAwg6X9OQ=AKrScnbI&xSc7j;!;YY9Ykj`h7<1zP+YdE_*5iMLfR*^IlX^Q069 zsb!58x?=Ai<_!1EB(b+wc1=iR`D-68K@X2bUCKb%otU$@n4#i%WI+28l~PUHK2RH= z=nkzo+#TM!gp1!Gg7n>SOtPgpub7*xvZqr& zOZo9`;YmE1VL?keVQGC5r27<5t3BhE8a%x9TNE+y?!|z}m`dZGRgkK(WnXdH(nJSD zux^R3W_oSVx2g65;Wr)z;T@h~R|;A-+Els18+VFpt})lGv01uAje;U!U8qV8o7Mzd z{aq{mhtenW{n6<7j>U&W$-*9X)>C?ZF3j2}G@3M1z<3=T(x30w& ztum*mw_M@Ho>BsTj&soy7y8UqC01H>Rca;;H@0-tcIv^-k>-m_#(U z*Q&DGhAg;m&O2%}fyy!Tn{m93Cho-+Dw`URL(-Ya-C;GMT{t)N>Z`^gH`f7Jis)+$ zPuNa9^GhLNKr;kfSJaA8)CmP#e0X}B&7bNi+-l;YNKxp z+SzHsO1B*SIRu0N9NKws#{8^9v*3gEg3i<;<^;d7ULRP7wwfN}$@xTK&34U8?!_4G zLRj$meaKC{1ke6Xis0fll9fxmTc>D8LN<)MKEt`Oh@kT9cnJ#eg`dMO-672Y(B0Ws zJo5H;|F&Y<;3KE)wf*%YjMDl9g9vfCapMQTM$K|v@m#d11k&ID-!27!L8B?Rt_2`F zecZ5o&rnrZtV`z(e!Gn=p1xIRK&EYbfTSN8Fuwji3N#7wC3i}vkTQbL%I3Z=!!C7K9f&dbbbu zu$dbkr|=yIJ*(&bn5KJ?)^6zH8!j1KQ~|y7?(v|BB6|D<&2k&NVR6j%HHnB~xgu4YlOjVwPxx3w3>!*Rex; z>(J-;YcV#QusYC3UdU#$vX{VY(i#$ZAq$-z)pZQL9m*mzk>_e_zC`)qM-yBfG6GBN zilqw_Kx^=&;lJS;G^G%Lz3=mLEbX-wr|3-@S!krOEdII$0ntET*#!!!x6q1<5O=Jb zm|&H7I63|P$}o1#UGHxb=o?RLC_lHRoKNdrn<{*Zj)kK0kkzfROklMWE~Krh!BpEMAx!G{&QQ*sL6O zWtnKaLPdWnmKL8V(&WP}a5n9_7*53yc?kD}9e4&p+DFC1_Rd88L@t^aL+=Sn1>KM$ z{dr>qZqpdll$Eqq6unrv^e&n;TN(Ob@zVW?AhFWRrVDuc>vge9VUbH;%1o_CP{(aI z#ICcGf;v|I!K~BL0JFYeHO__-$;LzPY;^Z34I0qBp; zHl&Q&700OcC9N_Bw@9O%6r^2LV?39?5*NsdFAQH|bZ+0qA9^Rf&=vFcU9^sfg6l_N zYKp!hDAvgC@YwItXGhE&>zN=F=u~C?c zCC|j6(#oN~c90eO$s?)DPmVs7Pw*a&nk*;m{TcQ5kLzDIrXNlOt1^+9=ibVyGErmw zDMm2BX#B+0eEfoIG)y&Q$ij`bpW{1+%M?$JcILbFMQ{`H5@DHmm8lQngz@by?dwGN z`3MM^*Eu&^b03t#ojp#+{soJX;$^=M+6nrw;;)&;H^nuj%rcbwrQc!}4b2&9<5Bpu zn=)#BzUka$65s66Bu+)x<>9uz_cR&)5NrD!=X};?OLHOiBJ#k;uMUw}Iz40ILuwZk zWhiy8`d>c)OvX9DAtgx@A(|3DrJ3OEMs}5; zti)9>|C(><{WhGhK7)Sp?^TPs09A&AYuW8C^h2r+y^?ijlR2hsPL5ahp`JyB@5OQZ z?%Ge=Cm)&!V3xTx!a2x^HZtqPG67IA1#9U@o&z7r@?JUyAC%`SBmS2+bl^#VjQj!kS1DfYn8#J}2GdB6*PdGe3DjJ&M zk~XU%(n07b}Q_cJ>`LEI7Rw9}2d#Cp_ggP~SP!*eya)2@g z5MW^4=meED`nvlKl_1;E1^2yV1kNo!nKSn7w*+%~EBw&w{*aWjQ;Gt)bkW$ai*RB+ zulpFXncOr5ZreY0%+kdb)5US1-=A%ma*B$Q9Q&ObFwwtd0d`zPl|!)~Lt99dX4WK_6E z{aex@ACaJtHNrZR!5=u{*3%D|W9DfN=YAYbs_uFtUy2LWhZ~yL1=8>{;u*dW5gE!iQ&vT{D)rU&`-A(QoX#2VY z3Vs(#4;xJDHz@>hr^653cZGrsvOdbEw}qa&-gG$m@|K{~=iFo5ss#feQ;~o!8oajI zpdcoB7{|m|u{sp_;MqGjW~t%B6R*c+xqTW-0~5yqAmwdP~o(aK< zoH0VxZB7)jjc3-P<_}4kp=b{ymv*ozaOQl>^?e~eGs^v5R{O!<2tyQE?cH1q>N_zB zX(~xvR%4V&AR&aac%otXBup*|vU)00T^Z&+BcPvK7<6*)rdbj!@yf0zb;hUOOZJD+ z?jtMg=Zd?>Y0x_(mHUo^Crm#sLq?@q`LgyG-J%Bf*o&nyrAh&1B?7v{Cu9xT6u$Hs zaq~6Ngf($lPf9`?8&QnC?@=k||I~n=jumWLrwPGO*Tt$z0DuBJsK1=k5$*F7zJPY0 zr1YJvjm~Xf$Ss{G5XqsBse3UUgT?SjlSY~fCM{fp2W~8CI4FWKZbFnKU z>>}-1aNCBa$rYiip}n5kCzp&TX+~V5Tx`Aw?$16;f+SzZNjEGtS=Tq>US_R z3IV}kXy3#Z>3y9tA_(|~N;-D^Q3am|ktW2FrS3SgN_Dk%CpT|CjDKTG`_x8%8&^Yfu0QpwDYcgo`ip|& zdT~7wv8$j;YxXLU;F7F43=}JoSCLZ2F#*Xryma9%SeM z`nGoz2U6?(bVen899#AsUeqhQZI0_7M&Z4})+hDb0**cQ%e&&?;X!^%uiSi@%-y7f zPkoM$O+hMHPe9ZHM{n6XYWE%equ?6fz44?;w6a01xtge%Z*F_x+(bq98?hxW`Sjl- zox==nfY&ashd9-yqslpbzyW^&SwX{E#7Qh6kf6L<7C0&6BPP>Sc;30j&vJ%Lzod|4_{Wk;XB>M1Il9s;H zWoNOM9&wrXd`Bc(+T+;<%2Z_7r9GJ`djzaxsqrKiNbw}Wy#B8dL?cGv#6^OQd<0sE z5eQw92_pUY*A(2uV$dj6hnV%V{j9BVScn?79FYWR(ANid*xZUk?s0aR9y{vPO2!xJ zcrUWP`sa%IC7~TLt!0%ptN%75zhzwf{3u8N`PcvcQvhRMs*krulaF`DzQ_Isg2+WQp#XRU!8zq#cpy3ei#RggPvf&cz(lzt*7AkX$e2*xiFitOWG zzZ3a_iXhq~?aY_xG}$zGAPPA?I(PCuf3e>dde=J+hm8d8G7(WpKW4g<@q8fLb@Pk)YH#;d3@LE+DW-P+4L15b zjCk<=vVk4aZ_eOHJa{9<@iWqoe?9n-p8j#E@j$&sS?XOnrL2&i54=ij#@`r#i;tdd z4eA87K4UX{;XdaX&PiO)7um1=HnUaNw{*q|OoQx^qWBR)ARfIbS(0ed|oeA?*OWxOKv$P`k$Hd#b2nx=C;GNILs(`@`nu_qt-O zZ)kJBt@iIb7u8?;>YwM962Ig#oca-u_lXn2IDqQGT`v675MSMiN=uq}9hU@aJ-&Z# z6Uy%>4$7?KHza6H38jAtYl%RRfv5*&e=>6*t6=l8ywh-Itw5u_ErlHjH&<56& zuTdsd^5g5mH&paTO~-1L+Ps}9{I2gpU*Y_=E)hgvC&^(uAG}3=X5)YhlJ-|aI|7JG-bwT|AklGjZ9Vvt5w+-|E9`h@bTa=U}Vl?m5{=8}a z_2GXSy*@zS%OAP@c1VBUFaPhc{A1vhL0~7h^>x1d^uL&rKa5HpT-q41{=nD#-;D1K zkW=}yI+c>p{dP$HKgai5~Q<+NIM z=e#e2^KxbHIl-5qg&AwWhjKWacJ+k)Xn2o?;E-Lq{)|`~uTx`67G`#xhcR=*y&T8V zG>FM>iHZLEMEn(gO16V&XK=f7sShcdBJ$lA^~CV-!HbKVRY7QK1-gtij!PHtFzp>V z-`mp}_J+qjAw(teHLcx+XrQH6 zTp2B59xpXL)Ohha7|;gx6SzIr)N|B|Ah3G3BoZO34J#M?ce}?u!K}-@)ep<7ziXkubcx|m`!f-il?G-?S<1oakyg_N;&|lSo`T< zVO}$Op8OoW`RVo1`eU~l0dsg^O8WNRDqK&q!e;#wbIQMr`nP{dT7odw-22*?F!C_B z`pNgT@v?y_V=O<&ml6WZ1fa}mP#%eeZa;hIq zW;uY~refg7g&=4zIc0dEFTn#!Mu(9*^j3^s6ULAG*AVlcx0~;`z^gOy-n{YqMgKR$ zGR3?#GL$ngml^+n^k=lTKk*3?KJQ^4=u{@Yar^oWleE~t_zxECudm_WxFfKq zCoG7D))0OS>d3~u#=z_H^Eo%l)Z-bhgYHB8QmG>MI2kwKq%9Q!}X*^iDOW(ucH-DFoq`#vHKR^ zGsjVckv&f)Uc*6Y)@SSaMV6Daew730R4}0LaJjn)QlYwn8~WgPXzDS;FdV84^SPYqB6KQdb+x2 zIWAq1{(uz3`*ptj>JV(nRWBCO-`453-E3DPk_sAM{rGCUI#LiO-rxzl2iW+*>5a6* zIlov~6kZY4$3U3T0l=PxPcQLNnxAsb{93z=5|K^ahWXykXm9bGFci^Czb4qLq_>6B zwVh?4Fd#y#6)tq909om4cA4HI#TNjy!rKfApGSaV!0uytweMB$a6F-wOQwE{Waj## zk2>6Ozkv?_+;zWxidaM#?z7u0SCGHQ8^Tv2!VLGgysEPYzU3%oTj8Z=W3iXJZoT%L z#CbM0`%49xDMeM7!fB~G4wMoC+690m`IPXlclqKk@;7%%NGx>8Pd~l=UNlU#=zv$( z@&`ypL{N3db$-oyU{^jtXLwr8iaR`DDWX8nxY)4WroaI)Mnii|koonz&SqWH9JDOl z5=B>MLu9~}s%-qIdY=5r8;N|@0dFOJ}zWaChjNYtw`~vW0 zE1JzN{NOIxy5uK^>+}TFGLp%IB}z2z+nMnhRtaoqXap*5uMryn9~<>Bo@xE~Z2z8R z{WY{ItMLaFmLq#Y%FshGJ@;q#Y$t|HbvdZZTehU{=Vsr;zfm9~!cr}-In@LVP<$QG z=Oeb7hVhdc($ASlQMF&o^W6nl1{-0qkUz*{v>)O#P^xEHY0zqaib%H)BNfzK5#D)| z-q^q9^y3Q_t$L~-jJnDO&IB?`B~V-F!l1&;6&6DgkLsUypSo_Pin6tN5xWlD zV}*}O@U5*HdG7r;o|FoKOlB}miX&aMSJk&L0f9j$JM5R=lS_E%S+5yrw2%!2+>tw0 zr{ZO;NA`2`3n*7_agT5HOFZ)(D*}1yw+!{a9{C346$qpxtC)16LpZ<-xj+X`@yH@T z*5J|ho3@Z5m(4gpr$L{({Vy+Z2(oZdq1Xy8+RN zfV;};>ve>;ftBlQeb%JCe_u2U_Q61Q=P#g6Bp2IErS5OZtyJlz8z`)C1VnuGX8n)a zR|E}rM+%}Q(GnGNmnlg4ggL&$F)>fxAITBm@9p=|a!)lOIMlBe6CqsIngb|_ya*Bm zAfk20g6<1;yzIy$HN@)JrGwYwh7h(PWpiCYExZk0ZwRHzd{~NzN!yJ70HLZ}JA_xQ z6Bpn*_B2A=PnN&*s{EZr-~o)!NPq5MMxTjTz1HY$xmEvz?~mtLDXR_JadUJFG(XQ( zn8+mw>CmYZTFHu^JC7FXC{{?tKAHr*y#l_NUIRN97Z#ATq1RC8Y6WM~OB@AsNJ-J% zVD{_8OblOpD27x2e1`BXfiW;#4`J0sZsH`_QR@7@10GO@OK)OWTb0o`8?7=pO^uz) zPR(cEYoc;g0e83YOK&~DXJrhd8k0Tf82A9)_Sg2%W>Uy@u^z8CSNi;-%}~Vd>(0VJ zzWJbEyJfExJni+~+HiMb$Vr}0{A10GH}X_3r?F6)`-afaqVpcpK>n*1z)42cDR<5l z$3Jg4$veOf(9U(KB40Eh@CJ>4JvtDFwLq(C;@jg=^Z0$f1!EGE(y{Q9p{7xDFEaCx&(E@HyKBg5pY-6O-VM=0IQFCL2= ztc|}ud1Tr=KqZ}F{GLcC2?*L+BaQt1zF$fXte&3=qs;s_V=hIEc_hBz4`U`njQIjI zZB;Ckxx?%9Gh#i`)oq1#xxXyix=E6MZK6UtS2ZW9+5?f*=&rOzXj8tpp8(l39>!m} zGA4pP*hm~uPjto7i-j@VyXsFbGYmJ8O$rjQv79A$ow`25lAabMOa-!9*zCb z`wRpOgjw=Q)XYws8<_KX4W3H*6EOA^zRqM`$6M|Ff8~;`f0XZom!N8;lDalk!*0Ki zx6~W02%-eJ?0C=wHwC)9=X1#y|B(i{cSb}(odh6JDj+=a2XEo@=sO4H5xCY$^*?wv zj}X@LH9zsJq@Qp?G)~V{etS!(!9VaOkX_UR1}K?;o5BU?2HJ55F5CvYo7qsGsKK_K zz2!lOuLn!KX)j&8Y3Bo8hs79v>>1j?4Z265;6Vh4luyYl%c(ig>=t|O^gHGnZr3Mn z19}d{&eF1Q@2YS6VRphn54*RM078Dmi#DAFNe2;XxA zW{rMOJ)J5wet&k53?AHLRNJ~lw z4&0KggZJgZWYOYDqk8Fw)5ENK_e_PfCl0FxRZ@rxxKIex=d8aBO3}M|(=dB*DRjyB zB%~u!>^c#{R>etX!x=(+aZ8o`UaGcZ(0!3s%H^^R1( z=LI z+q~z^^gDlMz+OLD)Woea=7h%MkaETFIj>5A`|JW}<%;V{@cd-8;Q)y99NGl5_IGpM z)aWXeo?A6y{4BGFK?D~sc$q*C-AP|){nl_(6EK&$Lt>%*d|f_vf4XMA$7a?;CFUA=w1Cr|vRE->?Fc&+5`b!i4;kWTf~F`lW{19Tgj}y*#p;Y_{Mr0Hz0`|G|2R zh0iSY<*u)pTXAhn-e2 zv$OZ&g6Lw9G~;yZHQv0TQnN)~O<0Thie~@WR+Gx=2xPTQQ|&6+;Ea!!uJ;1rnKnBv0TGb^4xC8RT(uM@8L#Z0oj8ui2wvESaN}|qf z{F`GZ8gqwAWT=xRV!jjU^B(_yi03uqck_}{0+@pSgS!3mz?jBr!0@! zX5_pV(^&H~Xwp&IwZ=@OSwPC!;`8m8B3@VRtITJO%V}%>GSVU0&?~i0P6e0dy6Q$YoL6gwDqX1g%C4H zx0_EgD`3-Q-W?iHI;nNIe$~ zOZ$V{azh0i-wHa(e$Ng2^4Bj6+s0Ir9m~^v`OWvs`DOQcH!H`{KKZMROTYK~j+Zqt z3h2t>XJXEqhP%GL4LKHjpq_#>Xbth;`l$M(Kxda9km5e@FFgp2*LDhK2fnP!x08qbwW<_XVI$|U3Fz9=&QFz&OCd(Cn|OL zKq`6zEE-VA(`4!$I@+Fc|j_e(*^^nm(#>Yckj)q z8YSI3Y>zY!cY!BnZa4w*UOsH68wj=xYr2G|KdcigbXjm{Vro*Zh2vG*O)H2hb24Bq z$+PgQ>t*lmYmAI1tKqz|ppwaEOkCpPgz8wR_b7MB6c9KLkPTTRY4)-eOn@>W#v#0NIB&(vmQ77Db|r3=zk6A(2?XDou_dKBeZ=ODr1(}q z1#|QCV0{#}yLN+1ylSS&1`D%x|0HY}_FjMV{x0&!?aHe?2H>g%q26KS$PGcuElePk zy1QZX#6pwtTcLSoQf7C&L_rknR~e+m;3-wlFUmuA&HXu>H7zjEnmA)^a)pjk)4LQj zk5@tSi0EYMa=ZD{&1bJA<&uIdgAx^VGrM9_3V#eTYYHdo>OTpxmZhZCv<8wdh=N4M z!}Z* z^i{U!6QXmb#x;qcNX)$**>A9GMm0C2V-?TyE;V`{MF|5}EjsxmKlzNasrY)l;?a&;w$_1*_;G)?*<3)PDt{llKx54{B^WXw$N3E^$>r zb!>1*##5j}>KExXs_(L&xG4%da_%K7(29b}W+;GuruB{j64bbV;c_c=G`AZldm}A- z4^gc>dd-}rX`on|)2`pYH%9?%&xnEmr8y(OronfRkMifiD!-~QbCm9@ozQ5KMmD8!dnL6aN_~yX9Ftc5nIdCedLLu+iT&2lQ%fXl99436(VMefW z$AT{JxC#gto-fd;WIXMRg7m?_tye%aEiCKS6r$LP>tVu(!eCUU^uydoB+?f`7}nHr z35GWP^);7PQ1goAy}dy|q`E1uumKtb#UauUpjd?w2r1Znrg)$i&D6PqXT{|#291h` zGxX6kvQa>;Mpm46tv9Yf{ia>QVGpQa*$pV_K*X}KBeV4Fex0{1-Sx)3 z7VOd~tHHuhwzPLA`>X$ly|)gFa(&x{mr{y?s31tY6p#jyZVM$97`g-ni6NyM1e6$5 zB&1bx=olJCS~`dB?#>xt_B|`U{jT?iYrV(b`#8RT*1wL!^UNLBeck7Ep64}ezpYsX zFg0PPjl@?@>wxOM<(IxQI}@-={iyfp6q!o;eRH_- zM7yYXxhpVDx!#HN{H|;M7#dQlcn@*nj%j{#{^~vZ%UOZ^O>a=RT3mhtmz&j|g>&EB zn1<xtZ{Zb#tZ05HUX2S^YRuE*F~{&$ z*Y(a!!daKkPxVL&;y~H$cBkbFkh*tg$@P1+RG75$Kdoj|yX&&Ti@Ue~ zu$PUt6KU7EUoD>*zAL=F<#pzceKWba+DCN~K~9ar$6Uyxty|#hxAsR;Pz7>$Yvn$w z?@%53B#(y>&r-D3vQp3~VGaf7-|0Sw_cX|gdK{IEnA~eogwH<2MBTkT&?wfD9|KS6 zGE-zz6{+;h9#XA3!%K&85x`u`q3f8Ab4|nInzTDx=-)UvEiV_}Pi{8jwYK;^Li1 zX?}7dQNF#!cz~-bzO6MFvfVb?5LI}X|2XF49J;zW{AF=^$xFm%W?GH0l)&d^g!qW) zv9u32vnC1Lv(TOQ@6_YpTZyK(gI*;cDznef?N5Z9hpO)^C5F#5gwQSXvn&n+*JjzP zSABYIG!@txO%eI|0yhL#CEW&iu0Qv&bbwCJwS8n!qA$0UXff*2_q~de=NBQ7$2X^@ z?jiQZWp;f`HdTaja^bf>2+=Jlj8!Pe{IB22dDK-u?K2oC=zR|xWq<3%hJypmF zdC5HE5;mCHBQSrwKYLw;l~*U;8y#l`|4~lV*$4iLYU=+t+ zG46CFN-NO8^%7WD49h|6`ZnfdqF zE%%wICw3YpPV1UT*zq4w=0K0j?7P3Kew7bO=@=AjMX1-z9WK7G0Cr-Vhrt&M6@dZP zj+>=%^C#BMsl@HO2I@JAbV{ghgSef~h#zn2e$5J|TJaehdg=|tssFT^u!&nYdL0~%KPj6$ z!>yY%U#A~OKio~;!yk|N7P56XcU+i1rdFYt<5j6_H`9We0myfV@QE@X!lZz1Se(!28NV;`GHYPn$=CqlLl`A)k+upL$i+fIyO@+I!jm+|ijgkK>K{q`7r+rG^SEp$dfVA*sM(^2Pb96QsMbD2We1&o+sM?RH!ccl=q6 znNb|LP{@ax#2NhrlX;8(E6F(zF{}7OtN!*biDHXkW^i$={8n`m7mf2>ik3=5{pQs| zr^+qg<~1S5U3J?Exf{V>mzYCsse^E_@0>lkaF(Ft2(z%`>9G0{*gLRw{wlM*=e8TJ zdZ(H&RpGuOzUg6efML84oF2|@8aIb@<-)Q zOJX9g_bC;GFogMOgofcDslVZY+PuGVw<=V=iDK_ z?{u$GS`=S{tf|z#rvO-{tv`u-QM2X_Jd5H!2dZ3Ec$`#jg+hb+)CC0^>iuB3UX zfALT>L-#NOCw&L7)qwqlGB@nWaXkEiwCDjR6~9Yiui#{gbxhbVs8Qw@2&cvFTmd@s z6P&0`1YzbU_9*Kt!lTyzz55a634r@-O-_zZ3c}>Mf6uW$y{H-u{*Z&@0-hpf{hTY- z(O5#!LMv|SHy8RuBr%zQMY6?IhSE=ZZ6jUQvb!~8?<8o2B%bR}Y(9rr9)&DoNKp_B32#p31X&M}Mk zw6ty`>yZ$}FfN5d;YojU`v(q_>gK(Z{#9AK75a!kgLj7YI5QxICYvNRsoX#6z+~1V zV|-!T6*kl^YdBv%hYj%-SDijr!7-#_{46lrou2(|Yc2yg@$>_k?6DQVuX~2C&pVxd zrZXCPKgRPZt7T2Or;rmb4&Be9m@kSl&2UZE^(Wc zEnWB;v?37mqBQK6aKh9bt@Ek%(bx%T-xtB>HT}&X3@(pTF0AehKSX(=QLNCsr^kyYJzMtcW0l=VEB%C}>U4hkznleq z@oofYq{v_Ye0+krff3Txs8Q8Cu2$71LCHq1-_knIANxp(hnDj)m@kmYHT3+p(I$1{ zc219zXYi+F09EHGRt|=L`gAI5Fbbck2A&%(Y=gh)7d{=M_aoJ^w1@W!MDXDs3;rMz zpqOUN!8F-3GQ==U6<@miaQ1yh0nv@XnQL)^7O^-1Kehal!f}n z9rt)35Z`-`8T!Ln`36SgLTzc4J|E-?jRZOkVWyFzm||ENyEAjYE%!RQPiOd?nKib}#Lsf6oj?p6ZIVjPZHb5y|s( zncievP+dYEk2ql;0n16H-?EiAj`rO@Nn**~G5~ya(~e8{%IP<+$IrcIfI|M2BK(V~ zBuTx+XpsWY=wyZ!Dbzlumd%e=tL=tsC~5=9#a>5iG$Y~qH^+lz;C7n?3Rub+4$!9e zH+*|0UD3zDhy7!tDqp_2V+`5kRI=P^8G$Z+duU2=j6n~so#<=rFW2ruyC0}UFZnvG zVi-Jfm#ACmsB_8T#XK44bbv*&4U*P|-)o_BGBIofFmGYL`TE)IzB9QPM9P zt$j?T9gVLIj3OshCoasR$Nn()`Qm@=^r~R>&LFq{C3xJfM>R+`L$bY?Wd9pTO zcI+b)wBPiPDrHfEf5n9;c%tG^tK)e1)@%!Ka4PIj0%j-mf!9dNbSN!GDl~z2$<_Q& z1W&Bpa)U`E4c?=OtQfuBvVQADGnGLr0K=!>DeM5mMz^``;cQ_N!b=Ri_vp=ge^}bV zB9O*K{J_l#iYc<}d4%3uHW}_%!f8pY_m&zkfAIc)Mm0@`U^J8IfWdY5e?tUFEzCfjE^!RtW zlt$PyXJCkzdGzX@WodSmRzC1M&4h}ipHm0klA0je)M0GU-xg=qSd#I4u6Yd~#|b^q zl77mrXg1sQGz&Uh)Lm{h{#4g30-VnB#FT6^eB1*MY~h8@Ry|ywHdGs7TgsvIV;T7F z>pSSGTKrkHLDiCrWmgNnn@U+vB|T9d#pk+d3StJAZvF$U=AtA9v>i+|B6NpTzqb z0j?U%DA)PfvcmHlfGvubMf)VVee~XPoPt>VHuO_EAcVyx7?A#im-3b6J%BA>b*4Oz z?o-P}au;VM2@c}FLhr1_IlcezCb|0#W0cUw?Ft(esobI3OD!{k3@e*)p_Ouxz0Ix$xO^ z!yStQ>+&|I2vHJ(2WFNeHH&uET~qZq%*z~+s|PGoS4{6ksHDo<-1WyBce@Er`}A*B zUqm1|Y6=cfvPsoiLN|JPMT%K>S8R>G-yU$bSw6yHbGQP?u!5f<2}!noaeGl9yvJy; z+!G1x$N69FlQ6rfBP~Z0TPi6zc)~A%Qrw(4`_w*r>wcPX%9Zr6xxy=7EkTBNwF|pz zGkr|c=4DW!JDzvqyoqEFbv&I52b7{f9u-y9E+`XpI-j$N?Cm3|jf~OqWZPs}*rUxc z%z6vn%Vzx53<|lx7=|uab!kkUYAKseiFK#_S#1Tb(2#B3Jhz~sGBlVkqqnBtVe!j{g|K5X?osUw9;l~6^1AqY74nvCxM%9Ea6xte!6QQE)V4+VAb4Ah3H&>@>E^wup zMKVQdu^A`0@4*`c_!p{N*F(Bk89~p;=@F3^k4x7GhcieBf|s{-p;8;Dos$HIAyb-I zBLq7quynQCMP-mG&B|tTc7ZO>oC=Bs<0qKLGeqn=A*-#yMz2U2!jKQ=oWW< zFG;*rQIZh0tU8=C*6oXTU8M*}W{a5}8Z?QcFp2eW!99z?^=NZp?3;`)6p^jEt*IX? z8i2MdK}It(YJ_y>7%|uFTgegPiws2RZFa?^7$Cj)WXD~^5{YU>1 z16q77HbxzC{{H&7B$~lm3N?>%nm8aHyepxom(Y3aIAqgU0(_8V z<6K6Iwh1r34Z-ZBYv&YNw|2=iCgTwa2xkhT1_Q6I_T=an`104gH})@o4dSA99CLSs z^r+JiQ}xf64|z>2TUA^JX6RW(_aH_ieu9|XfA(bq{}NS#kB`rijafB2e@ag(DkAR);&XEGP{H*D0e>yREJjLgw@T1+n6-7MWe zo9EQCvFGS)l7+XY3r{YBRXs=imOXXJA5|#c)A1sJ&cliS{(Y%jwv;mIt5cX_CiXv< zeXqFFwbNRAG4gykf9{;(3&D}uE2nhJd|ECA!W3YFVKnX#3`rc$gaxt`IuhTdi-i+W z44davQDKW^O5;zK0LHXYabvTOWMl2-;sKr?zEr;xopK;*|M3q{EV!`a!TSjU@5V;^Wq{8==w+Lsb!HDXcUBpj~{d; zS%0|P6M@Xt!!B*RrbN$kuJ>?4k}D=^E*LE)M`lYtEQlaVG7%uU0XM~kYmTyouc(Vq z1TTtuJ)uVS_>xfK+%{Z5{)4YWeMjXS{R+qmf|4V3@~14z*Yjj(KlsFj4;jZ;TnQE1 zdYt^+?_^G`F~h9ehPD?s+SasIs_#Z~?)aqGq%pUrmVy9q^3a6C(FNT=JwV&HSlI_aIr&!UI`4F1ZIFUQ+g)cnC-4Pz`KWlnZQJS9 zKrVB3{$93@@KSCqX^?43T+!Z>?s(yn7`zHp;j&f94K*E`dNco`p{PD$g2G0x35jEL zJ?JN?gQ|4836YI6gQvr(hqZjQmdA<$ye7^!GB994OXQ`6{U;EYNKJ>qvfcC0FRGyT z(+&|~-?)LVnkZ_uXpkA#S#{5;bjb`{7qfL87L#pup2>tSTjm~n6EOtGLryGu4H~bo zW91%dgGg!LU#DIqa)U?UVK(5kLaL{SmX(g{QT4Ys7z+G*nut!k=))Ys# zdT6;mPDx=Eb>_6yO16*)8lKVZG?a0i(vJ~eOD_@JQ4cSMiq1uqfQBh-@fO*ZdmSwC zZ}~ceZnlf=kCbheuawEry0_-pFC#b#A4yq9?p){tt&&aZd$fV!=d^!}C7e~~n~#C> z*xs5afT-(WqAO1wy+NbCcPfgaob>XLLR_zETvD=xhU;orR}&Z&kc*7m_QN-hdhT!L zXl^@_kyCM{QcV}p#9QBP=1Ww+nYB5j^~GzCimU<+&zQ=+e<^E8U?x$OR9@k67Ge$R zdhXmwwstXLv9SSh&aR$G9N{o?Qn>P&Y7n*Q0#pyhis}%tc6)<1K-tLI5AZ$;b$vU9 z(lsiVareB@qTz_uoN-axMu`4gG&d^mScpkP{LT&spL`w!DiIt5M}-E;C6!Qfx5)pZCt zZEgzRem?+B)3)11^H#d$)a^Y|ldTO%$zk;3WtKBX35R?BnR z7MF1i5Gy&M$bsMI!Of&MO~V0L-Ub;>j<8gAke{aC9L+I%3&1QQ_56ea2^$J`fsAE0pmnR(#!7i<< zn;izWaEIQE5z0YhD#EMofyUQ{q2rfy2amC zz0vp$?NdWIkIgx7M$+yNLQXp)JI|h-zR4J+WS+AVwCgEHVHZ7&+p9mM(`}&BqKq2Q z*(e3UVUBi*`PgXgR2#@=<*T!BoBdHw&-83~5uy>KA?rBrV>^z{0ux_@6|iTiJT;&D z!Phj+FNy3$eKVS1!egg*$S$3S1u!@#O_gX7&dB=bq!_GOr6g2M0OD~fJjFC?z8vIx zd=t&=*;Ig3lk;j&5W*pP^5!ZV%zVv@!Smooy!%?I6HwV2wbP5kvmGM-I2TJD5nBgf zu~(>{d^@8JML=fHYZ=si381~=n_X45BHur5eLpj5j6nfmmJot>N#r)Jb81Qoyo@^l z&+c)q^6*_qr)asJ{haKysIt^X)VENW9Ff{dJ6KKV^o7SAj;`3MS7^n>)2=XHQjHX3 zWGf~6ec`8FfI4f=0*lK7+?{dAJbQ4ZpmKYy+^FjzC3Mdt#F1+JOm&>H#@t%@nwi@` zUSCed5?sSQguh`(ugxE*1|{Y)zkZymqaw3dKS_pLtd;ib*$hkusBgb2L`RvZKyvK+ zHB;f!V}KLuXXXzf$+qqM#`?NskvXO}WXvT7I@Q~wn4xWD_62e8%ql;l(%qc@AA9ztPuI;`%Wmex0BPSa% z+-{rx^1PN!Z~F~scHOjZHQij7{0mI{?V#q}90QO`z_cwZ5hp3pk&TW3NrP)oUx}dRw|&7; zypm5r!rb6x;JT0WT<9DS@Ef5nHc@6mXqvH+aNQYve`SljNVS*{#Q*W`&KA_g}yIj$X$8UhEzd(a zU+C3t*-|e9iAG(AQ6`wg+`y(w*|__@ZY%1W%%D+b`Iw8%CR606Rc;42(BCKTC;>~$ zkmA~@+Hz)?67&qm#g!C)$O`7qyh4ae-455}_nQizPec|4*$POUZEE$gTAS2kZp&E< zpw~gYO$gDJOh4P(B|`_%;lzmW653N^;J)SlhCc3C+|a%NbBYgk81bZMqevO0AWL z1+ocPR?&!UCYyfSA^oc?SJA4oKE)*0uavJBX+O-!AR-CW18Jbch+T(-_PMS;hK-pX zrN(uS{c>~+bJ}dmS)aoPmqZRG2294?8;6DUtxpbZl!?DZnBQMVN?v<>qrhzF{Z0VM z-hlgl;QbgCx`L4x>Pc*GWYjhX9gj%_>jK%cH7uh)4r{YBI&D2+sXqiAe8mFLGzqRJ zhf%Y|$ShUK7B+lAJwR|EZ^W-P=HxgpARPt_xqHUUxsi4XPC4Og=|yMr&WBj?rON@ zlZz!2J_ENy==vR?#BUfz(z;(14;lyIPO2sNa~z_hF12x}%3HWUWUihh##y;uG-Q^M zKP^k(H0F*yzJ`(Dbe*tSNFyg}RhcK-$Yzxi)0^ zEJE7IcwjSQ;IR@3XQ2v+Bj=OQ9lLfbkL{Qg|L|2;$SJ{O%34@?-nKxh{i$+m1!vDrXUgetQI0e~8C#gS8MxFpD; zs{R^9BSh4|jR@cFVS&zIrg98W7fiL6ufx()qT$`0gvayoc8akMOX;|c)bz!d5(GmX z$NJUP&Bzq6O^4H|$G0G=(-}_N%@=<_j^?6_U^u98a+ezfHI5jV;Or-rh{11VZNj&6 z9g!ZJ#i};h%A&i4J%-EBqV&6&7Fb_a{E}g=@;Y#NqzMN4AMAqX_cJ6#{D^KXa9op~ zGX{ZcADK5+wybvX^}NY)LyTqM!7Jfje6KejQr5p?6&o#?b&gc(FhhV88W(as z(2J>gKki+CRE)?qwlE^#Lx16X`Kwf@tgxFh}J1P)iyZG^#5uXFZM83Q=k>yV!euTr8vZ&YCilZ%(B8b*t z`M4hM!CZB?KWcY9f0@f>hqtjWOVH#w*w?U7F9U(abHC>*?FFVBr=E)gbJ#T&?T>&sx8?aEqhdoKRFtAStpf~bcJ97@PJ?S zwh$XcrQ&cdCMH%C$&HO4({3XXyv72}@-oPNUor4CNbM+gP?(@DRJf>YV+@$bsGOq{ zJaH~^g3jt~J2sDcVqIU$hP#-XUL68^p8&r=!PT=$v}XSyXGfa*sds?RF#zKXW9VLk z^6!6Qm4$DmPF@~-*&kJpS{^Pug23x`fpG+RjZ0~B+eW{BC`fuDm7zE!Oy`(O{mW-? zZ6d~|C?ee?X1S|l5w82NC(NIddb5q7G}dFzHqA{ep@_(7C*-*O%zP%;}SkJ0g#p6;uXJ8h3(L3IHot!w4pi%=N6FjRb$8*I&XN zT{mfZ#DP49rmxi$9kul10Tlm6@tBsNG44X4+s)m?V7pOmKitfj`Tm|hKy~F?#adds z?3c26r-S*fofX?%SE*W8N=kfkyfG3Bm}9noMD2`SYDap? z5a5tec~+jFsb24*m;z?)#Kpx!75rXnO^+1;KCJtjem!@7HQkrt=one9`FU*F3k|I3 z3}|Z-+9oiVRBhJ}EgGDfBp+J^sb7;b^QVwDum?Is119=(ttx9Ahp(`b>$Ba}q>a(H zqrw0o8aXa|X;%ynj3Iv6e?>XVGqWNVi7AqM-Y=U#P};4Z-KUd&XDU~fmj_$zrJV3? zH#Cm@yuRJ2ecq2>gL=nx9E6FM=-no~eUxmT0@YU@X00BTpCddnfYTBj^RABj) zmVO;`N7pr%OybZO^2p((V+;_XHiog%j+CtCZ?}gCh9IgIQ(_*SaHWl3lMR=*tDlt3 zsuUZi+r@nCKJHRFHB*A&GNsGwaP!kLrNqIrhm=)go|KaJ36r^@P-mGt8$X+~?NrzUks@xH5ls zfeNAu{pFik=m%dxbzSF|Gi*tyLc?5>c;~tF3vO-)lL4F3#Dt)H7_&KG6dE4KOeAD` z@Um<%gM3>p@D(F4L6==-O)&I zeqlZ`+=pH<3$~HMob~Hh*XWxi)Lunx^-OJ!4Gi}d~ zH?%E5zaZJVzjd+PcJ8x@?2Q~QzmD+!9tLSAR`G3AA?_AcNfc^!r%tC$%vt_KXV|@X zbPC*LGfU)7?q38Os_uwSnv~=u_GF_v?b)}ftm3i2Bh76!xSCFS*2l9c^GUhRDwB&1 zb{DDMpIFyEnZ;V)pWY1b+ZLYbSTNHjy_t<%EA#6JNZD)Za655povfuLjB{B^zv<~X z*YQdHWH+bgI14L7v88kPxkT{TCiuQGQ(J)Y_xy-GkFo$%QIQi?Vr!!|Pm>r8ZknDv z1{tc?OQQSe<)I)U^5$reZjZQWO9VS7$&-0rl&T8q zH8m)B+D;zpDo~|F;AO_#yJeEptS`LtEFA>JQIPi@?~MvtmTfl3Mvi2jnBn=)e`Ub&8c#-`dwppKy~)*vVVGKAs-fY~Cik7P@HSYu6!O3}32f`&@i7aP&Ef z-Dxd)K+`0C(8;cC8N|Oiyje;5JXeu@8Rhzx2s2@8VIIF1AX;z= zj8{O;`am~Npes>M;zhSKvox$H3R)KoZN_R@l?m z_90_-^)r0o=s4bWsR&Zgc@ViLy2PzeOo?sS=NRv=0;sgz+b^4Li0pZjwXZ?k*=%W$ zHL4DYZTX88Gas*ANVEj`+<@`$s$mmTB!}aVyrSZUZE;=#d_L>!op4D%WjxIh&Na%JrhkFa3NQxfe-CRTq5 zoczw38k?UhF6ml)D-7u9nd6@%aC46KY1p+1O?crMRx`8FhA#7B_mS9o`+hy`1B*=T zc1KC;FgTD50jwUZpiEF|=F^i5IQC*buT0JhF&ChDff3e4fhROTy0EB zgo45cu`WO}IO1i@t2~EA7&R*9&hH+^Q&n*X?tf=LZS3(y%5a%7vNju7SO3S{dBgE- z4{ir+0d7jqy#Wqv_fBuR?7)jKg==vv31ZA~FFw|6C50&t8B_rwk}&RCap2qq{DJy*4HOk* z%R^B5pvI;j+;OAKO;<&c_n~}zHmm+{(&0FFe}to@o4d1iRl`VN|Dj#kScT4#R*n*~ zq6)C{uQjNn^#xqk22G~HSr_^odmw}Q;(v4jt8GHqIR2@L55r%D zl}y&3!2*)N)UXwjvo$g_CS!L*@b#7WH|*tC%9u$5}R3!&?Oz zPFaWBjGm4oAXVg@>C+C1k*k_>EvvgCSJ%Z#9xfR)tkTk7)VNmOA7?vlZJ^u8eZdO! ziW)%|BOhj)3A-I^G>k%WObYl_c&q~eRPvBgw{YpW!QSA+(siXv<|dYQ=amc8vL1Cb zSkju`a&2ute-UxwXvsORCJBDUcJfHa*+bW&O~;*U+LoZ2asOcr@8WzLZD-s5fgkyU zY=K~%qd`;9NRgJ^x&n1gyH2v(H9cbQB!HnWUwe`-kADn#vj_7$1f|YR%RP=9+3Kj> z^^9QOKYqG&G7FD8bbn?Z(;2`1ZWi;k5A#y;KXwFej})@tqS@=>*q`jETq#nZbR5UR zbY9MG@8oQt59hmt36?xC!{ZGci~1gISXqMWqC5&2Izw+35_QGJa_~x9IjSrf&Mvpxv6C7U0nRHx`-lKiofqLi3S9_87J~~oTKSI;^v(NA?)?dc^IEf}?LZ~V9 zleXI>X=XYaDq^)gfG@;}0?2&)q^v?!P5A;UnNuQsQ8#5^!Os@;Pv|?wuOC*;CxmTv zC={f4@}**8B({S<5|QUa6-kY?<>vscmcVM-0_ zo>)x&e2VYsFY&)GriK0>{+izwCH&9m`}@BNTK!I{vrGMnKD>ClVELA{&OGyT- z#@$=i9Cs6?yUY=&=Dkq!#s2&yBKB;<<5%b|No+`2RHD>grViPIJT>iGDA)g^=j{Qa2(Gtw)8=-YpuU)pg+^0V z#K-{v0UKjS%Om4#|Da-LI^JS7vY#SG5z`Nc3&qTRxRR@n2^*>jt=%Q8&Y+|9p%84tT0^ zT7yDjqoO+|f=+TF+T0MOSJ}K*{Gf57+Sh2ka*s_EQQAFYNUw`JGAA@m$TnGjf&b@KR@e**UZeHs_ znD-0eAlx|n{t#dW8&0RL&L_*Uy;{kfmg|0dd{6=kw$}#DPdhzi| zG_5|;4(!~`3A{^nhrbL^;(JC6uKYPNTV+92So&n<>Qu&{* zxhp@ykK2VYD?*se0yYxPoq4!V5J&#wR>1!10%zA;x=3HCfJ0ee*3tTB+cc5d8=#AP zTvR-amf!+!=3hJzMdvug>M&x{hy&$=+Dw1_*?0f^p`FTLi*quWo_@;#GhtA10at%3 z0Wk7(H4*(=mUt(_3R)`!N;oGQMVMt z>OZM8%!Db8eGK5C{Mpz3eDFWc+&>Kzc+;mb;1q>g?wtls{SUtW+p9p?z_Ly`B31mK ze&LjLXm%AO7j12Nr+oD1c>dEzi3&LQ`qOyzX++z9JP&^V>rzm#P7$SpL4U^W|AU`Y zm=1|Fd`U76AF0g^C9e%b)AzZ=UzFj}Rb;_stn| z|I_~dn@4n}fFXr8uTT8b{Qb?(N)!MwYG`ET;otn9fBI-h6%47uAzkeM#nkqK0Im@e zQ~5t#lBc|rR17gV7g>?MSARC<|2$6KLm-(jw=4L^2=Oe}l)r!Q(Fr;@{x$mj&@}@c7Gu_-i8kZ}9lbTKPBg_{&=PH}m*6c>HBS z{2M&}x*+}y9{;~*9^U%+9!HY_2aEFw+O6L}zir;dq_Cm^H)bQ^ zcY2fsk+2BYNz^rSzeeK|?;@d%!gvzJ(8-U>b?t>MQu6W!*`yzux1hfwFfOqEm+AR$6G}$K z;ys?cWa;iW!fX5TyYlLZs<<`azp%cxkAW6Bp#g)91kgJVe!aFZ$Orl{V1*{W>jnY+WvXz!D~v64OXve9g~I+w5t0%-HL9atX= zX%k^nsEbI_B7m)clwXz#&&To^$J#X16akK%D9+7bVI*Be{$s=J3D`VhxcY??j_d>WE331filXq# z*1huadQf1}*&7MC#6X|mc4RYpqT;wp?RhlKu-q4P0Y}2aiNm^BDKE^c>@@Xn^n^+_SQ$rsv8JmR#!&#M0Ara~Guo&%iWf)JtOw#ThC{J!=ew!1 zxyC2^pkG%5DDsald|FdTor#)n3qMSW@jyqpu9ecrAA*4LP$HnIz>!+N!hcQN=X^>Q=s9pwU0r|DjSII_z(qR)b-f@|T{`J#}lOglX`?eWH_JAt6@F6}dWhm6N z>SctU2&w4N#=xs@A zsJAHYS$QJo<3}iTRlZw=@b|xc((S1aqo?Z-JAQp*ptv#K^%_ig^mPwK0|nOcc(*@! z+nK|bEZ>Q=U(ZoDv!a=;{)S&apQ5BVX!E8lXbfB?V9=sb0USwN2>s)xQE%EapmkCr zZBp<{=iMxHuyL-xA3n=8Lt1#<1G}>m9fB-~KlWH&_%bwNyBF*N3%SpTV{0jLM zH^kG)I~@p5>`52a3r|)-yO?u${iMb9retIgXO)vh{$fg=p@`N0FZmG1&-+469BoEWvW)PYbUt{rvTZu5IO@+E*ytv|fhr2ir{ zIZpO)L&IqqT1>&Vjv_gDd4p&bolN%JQaDy{1$gkFRsC{2TI_ISbU(OP0E5kgd zGbg#<&+>}+UFiV&>w&ujJJiKu#@B;OJn zp#v6lZm&)8xMlgh37hiOV(vFmG@*wZwU?&7j`u@TRSvdyRWIkIJ1pD?s7uVq;kxL| zMR1EIMsQ59qq5F0h(cg~e&X|dd`1TKpp%8(xN%0-R1^8D*8P<^K&lv=jbP_*J>3}K zj}wOf0;osHo5=ihkN)CqhTp)?i0e+(s4U0vOsJPVr}A1z#t}uw4Tkv>RbDQ2Qi~Co z_}l`OQ`7eWQAnMrkY5dTG3|^CBP2uHd=)XB-@g#n5@uRUSLf&1r*mA%vuUcQr1Te$@qyxeex|tWbBEF_F0{(km>6W}@ZLg;9t;e?DRWkXvf3-~Byzc@&hJmJ-Q48dD2)~R3XXyKwsaNBy4 ziL55Xo$#o27~lf@x+iz0858y#5Ot|{5HqsofY5umRyYmo0?NMpFBP;&6&$0rl1XMk zl(C*39Dsyrv;6*sf}R=ZeTboVt)nkr*AsXe%_0nBpoTa(H;8G>dd{=qphWsn?NoC0 z?-`6#2pAszn!&#b3yC7$dt_u{znQeDUd{!!q?=2?*at`NotO$dQ?2Vb%!xAwx#w3U zwl^um5CV7w$(9y&cs}}`$M!1&#a2LtHv3f{S-CvNTKtrY(Wz#$v5`5(k{Wnsa;%gM zGRM?Gd^gnYs6#3#<2Nznl%9E}4b}g{x~O=R)0%t$^AK z@IqXt07WQ-vv>qn{Ms=AN;0$C(ync&)`c{=rCx`P!;E)Su&#uU~bhA6_ zqwlu)(4xFez>jSBc>sf+pp41|U@8z}QDH+1@~}KWTM|IHezA(lDhec0-mO?0EpPO# z^{*#ak$-khrYg$ElJXL*h7Hz+jt6M4=TnH^mu^jRrBfRvNBDXOPweA_*ROjNC|fuS zUbq-EHk_fUBc0dbQFqvuFu^)+gNZt;gSNoM^yE zFi$DC`8UJCfA*@fly#2B@zi&)-OVD*M8)ZOGr+J zhZN8L?6Dd;89nBVM_AY3jwW|V7ho*GS%6)OfnMXT+)=*KD>zd${8eSXJ>-&Tp9|Ol z_u(Q@8Pl`GZ*YPj9miFK&HSjNIt3Z+9}Wh7r3LkmSaqWATh!8f2pNN*lm{E^rUA}- zC2sJGC8$1anQV`PK5eUdVUq;iJDKWBM|Mp0G1ztNQcaxmc#o1OCr$zTV-jhb1>TV8 zmwpW>BFcQNbo$E+L7;~3T`l@w?7e4H(^=a$I#Lu-0Y|EI8`42~ZwfX*I!YB(q&Fed zL|_o5iu5iZMLN=Z?@c<=0t5&xp@a?z@6O!!{k${JtIk>HIp@P!$F=w{YsE>~|Glq$ zm0!VAan;zZL?^6@&XSCL*8SNgVg^SJp)ef(!y4igffIh!_;h;WU|z&?_}sUR*_}%< zgo$xV{p~8+9sLeqdn(ZJ^t^(A$&J$op*nPRyu>p3cOx<%txFV=sO>>SmZnodA2?fp zxA9oik3nV9J<0PjvvbaliEII6eVQMs@7SVa^+62ik~es7piel}yl-hn&MJfFgYoo1Jf1!0d2@Dgig zn9cSHkVpaYQ0&6@hW8R(=HBU=r$x+-ujYrG>y?oKRD_GGIaM~PbXWXmYbQgSOtaJM zzF8~0X+~F}v}uq2tE9!Q*xu~r|2JZi)Ie-4n)6#iV&fYzK^^5Ia4(w^H8NC&*Tj2G@f!{#vaPd93~CVRHYUecuU3Wi)&R}MY2rS&2OvcFx^H$n z_E9w^wD7mE7->B1X+70oIp`@W>U*jTU$tI6KstllRcUYgd``t;tnbcT^}oatMlSz& z1%LC3qy+cCJ!QwAv}yvce+7)ABXo@jliO0VC=i`#758Icq6b-od_*nSGNMb>j(tJ+ zn;tKXQ@)WB;2%d{jaT2PI(H zfZ3HKbvz8$_;vIRId69bl+=$5Hvvxp?JQpufp^+9>z||zFWEt$kNhA={^M1Zz2{{Q zm{5;KBprLSqK~{_$5-8U*B)<);^~5Tf}s7oo zIiJzsD#-VaP<1f-(L%$38;ro&I4O)-L#rLHU1pcd3_G@8tHku$KOiL=v7N9kQno5W zmG*OL8RWpHVJBE!i+9&aI%F>y=#1kuSG$UtjSSQ2*S}Ohyd=Wha0zJsRy;(Uo9WrTGok1<D3bf#B@eq;vdE-pdP>i^y`=&Dc}3=U9A6o8EjN1vmxlxop)SN#u2R1- za>wozZgq0DffnMFLem?ntW%4@4WH#FL7J*b0vk>$D?e^H!%Qh3SV3yc4XBH%g}+bf zJN7Z|rE|QhxMGaZ2HL8+XKj}Np^o4j&zOsU|g&P!4dE;<2&-8sBON#xYu+H)m z=HS|ib&9SuKDh5PorOo>ap1yHElPNTk_I-T6iHSX^k$e*5)`8f1rc$RBU%Hr>#r2NEpu2RlsarobFhvjj?I6PK<{D%7mdMs!tqQjg(ZaJy_sAb4FGCV1CTBPb#jsv^tLP2{Hj_!i3=#f17e( zx7!=hgN67pyNL#`!DXC}J5+C!7eYuaFEC4ccw_LCqE(ynWGD{Y7;ilfce&*)>O@h+ z<&s(@UBk;Z4_F)YwRmJ6OmBIV-5oy7tCHLnS(=0{QoX1Sq%Ny#B-~!*BoJ6|TUQWF z0|{(h!G%Z9$;5;i*+du|mXcc>bBlJz5x!iGdZ_VgxZvxU5D5sH!N>1>N7W^(i8Kn} z?;$PGaIkpel0F|5n<2BynC*ysB3-^-J#w0>q-D%O(vi-Dg{9 z5EJZ6v7@ej(=`bEfC5Bw2?st0l+Y-b{Fj|mwbNp(#OEDv4k-ROq{@E02*N_pqoJSl zrDfyJR_~#!HXGkwh1yQxSk3+!J$5`qxz1@ z)tKFhLYRfbc0rQ~5Nj}B-i;pFtop=)U`z5)-%e;--%eO>UUTfexSmcLjW+}8A4yj5 zD_{3IW70rOV`WdK@>8&qGWf|OL&G9}KL>w3BK6PC#@in*+xLngDM!)8nBL7Uf!^qx zBYjN+ue$V=kk#EaIy^f%9*AHUJ|i7l;P%5EGP^$0hfO)P*dr+kYS^@9;~=#M{)llu z@C7*z*NQbHx4$aji_q4OT|5DJ(c+iAo@-%Qy8yT0c}EtI>B;k^v|$M&n~q8+fE~Vr zdotePSU1p!=_cO; zrCysNz$(Fd+fI`Qw?yftK&wZ9h%MaEox2pYVp0g6)+BfI%7J23^GdfCscjvm*X_a8 z*1m*=*E8nq<>O!+Hn$UcHP!QIx1U|>!Wxi7_gK|~XN8#g{RFa7zYS`Zc*CvMAIAa; z&|D@NVXwU?p`#CVWpLc?Zz+1E;#Jwk1d{}3M5Lj}>9NJ<6ar%#T9Ke`xh8sVw`J%;$(}h_?!OqZ?BJK#j|FoF-WWViFi~IT%1OXt1xn;=v zc6j>!<2Ws^u7=|NRHZhnWsj;?J<dTr*b8$1&Sdjm)9{@m>PmutJ$!#Axe9iky2cKYQd^ zphDNuX|4WFH|XC-K_Ik#=robvr_NV3>U?%!B>2uUuf{pW1nBOEaH{)OsHUC07q?6rfX#PQ;YA7aUEJ4~ zR9-HB+3aO3fJ5yOK_ZHE+v6vhsVmk-o;zB{!oCN=D{vWy^39P6Tjst`!g~x{9vr?m zK!Xc?SfdPaMh&t}D{Ij>E;)D+Q@xhPmCJw&e4`!NQ3@V3I zjQ~2WaPf&HRh#QE5Ix8rWBx#p06*x3tc(gxbv*5G8ZoRAEolLxjFu>Ub=$34kD;AJB!c)}lG=yEA1Z(Vmo5vh z&u2;SmU59sHWhAZwSxdDcewWD!7_ux%e72OjY}Ck`x%3Om#$><6o-vf)A)zXL@N6x{5W(!^y(ib<<5 z<+<0C;ds4GhrRyd4~F(BzT{y5h!ooR0qJ2dWj7ROJK_VW$ku1v+&2y3cB_%0<0)GE zvU9ODh@M8ms?O7@q-SI^ENM+s2ELTQfY!I2azfa$2S%5j(`dKB%Z8H=n(hn-JTjD4 z)291key4pwU3Xh`4{o%cYGtO57)AF0kTUiVOhCGFOS2M!Jx)eGo6K%#`tqM4S%+;j zL_7A1t)iTN98!S*S_Fu@diUsma%CH*5NH5^!cDEdqo-L*rB9P+}%`pw!e z;Frk(z)1UjX{f2r8i5JIOCS(aQ&$LziyQRT_$YZ(K0+jeZjKHspCPQMAN1jRA@#TCJax6;SR=L`dsiI#A6pPZdpNtOn+PxpCZWR z1|8h-#>1aTSVVuS4?j&L160_SN*hV}1+@<2z=x!2+oSg>1y|z;%q~sDo+iQwv8Au_ zR?L4`0>|d~ps>vZNYirK07cLlVj$v#p9*iwtYnr;`EEgX2a~9iYmtU7tSz{>)i1t8x_RFqI!oyR(T~V1T#jWt-@%dMv7B)C4a( zSOne4o|`TuCCQ897)*dP5Vut0@eFMP@FPQhoYv>Y*^m(_QFU=J+k%!QV z@Js_$zaSk$*Xt@$3*qem^(DI1K6X{>di>akj8;w6N>;YN?A-fg1q85Y;F5pW#t1uZ zwuxE9tOqk0xF9!7$gU^4jy&ep=9s+YOXHVDVLH7vS&K54QPT+TS1QAEByjCqH<W+kS zpbXx&4!BQTs;UtM4vNgw5vOJFpnhNodJNV*L`j1g+~l^)o*EPTo8XEKDf@OqF_8A+ z(I<|OHU@}3=p@v(pucoUEz@m9B8vgOsMuvH;B!7c*GaJsQx*x5i!vCQb2^w04@}BG zx!EIfVgTaI*3$sJLD$4Yf-H%><-s|ppO>!O_|o;mFz-(aq-Wz?Io>aKvHF7vz=ka~GZFH&;moKid@n<$ zC9i5touTf-A|I&XhbLmuAeT50!(bMz@$3Y=nin3vB&n45sT>a?tg-gS#@ST!@2YB% zV1(_ye!TKZtl`cDQ9yPux}B8Z?60KZg4sVsm|{yx5@{`j@aU21cm^i2wwqhY;6Vx- z`Q3($yCV0W-?BE38`yNzs@G@av&G|47=Q`IgQ-@-&+-Un4WX`TMyKumLfbkhw;}S{ zj~DK@f9sb$#{Q&vFhr~v%s_`saJTU|2H?TLBrI1YWZlrVOG25@+dX6DHKB^=)9T&y zGa?zJ?nh~M(?I`paQl^-6mQbLO%~HWlJd5td7LhIKJCI2&%&-4m*dkfyz6h-6fh8w z-7u3m0hQreA@>E1_%5#&PzeYF@>25IJUS5@{bLq7d}{6X4Cqn2b@z^_K*n- zIK7?Knc1WP-7e3QBSgt)o*0MLWYsOL->hnDqO-{JlH@&IC$8_vbmbJ4(o!4`KQ?Ot z1tFc-T^HcZB)Fa~+Iy-V&t}0hqoRS6AY1thmn^8uSh8Ph61ooNU5Zm;xTurX=@VyF zX@0(P?aSG5%)2kIXAC~4Oih3OVlb^(bMT@&Hqq2XPY*8~#GU;pnp2)Bt}#+3=^$i+D8M7wFwoG11W8fYhV55{5Ip#rsJZ6e_I;76P zCrHr%Viaqnewo5!yAKvTJz;A!DF9f2shGI{RXZ5!w&fWjUKOhIssNg?-xHzJdYaxw zm)^O0G|I@0eMAp3g}*>k0Tg_vG-zRP*rr{N zP%d0r^7_CD+M;aKi2VMk7JRc<4ps8&j%gg|#wvY6npaB2BudCAOy}XI)=j1;Yw<2Qk^l|2nYuG->td>O4Ru+OBoo%Gl^fZ;9yyY$Di(IH0Ag@|a-7~Zle{NK$KZcml!y=nKt z0icA9;`Y6t@%*^@bX*2$a6pFLf-n2LC@>2-hJT9n=%zaDnAT7|<=n>Dk6m4fQ06K8 zo(t=L?ezZ(ozD^u`|LDheKKSZAng%%j#28bM#(<|4vt#Wr^zl;#@UoUE`)D40cVXH}5 zv!%>(Pey?vBH-kfxJ-Moua!T|`Y>9(qMwKaUZoT;I&ndV0(2{7vE}9H?%5J)iFJJ< zoP$se?tFqho&aPPyEY;5YKfxnlZBUZS#_dB`uz_f>75?**46g<9v#RQ zt{b|y5H44Y+g-;4(e;Iz2{6D@01d{8UK6_8$fX^*3ZZpvQ(lv}h-_zQ5px`;v zta8x8Yl6w=gbN`b7g~;{q!{M$?crI=Jw4f-JG!1bv=JOcBUxXE|HS&djA}G>U#~E; zH_8n;j?Eq^DaP(*Wt%)B#V|sSH@SsqkN|TQBWiboMW8hA*+m&Zf=)j9yC@{NT%p!A z_7W8!zDQ&6s(%w*gWjtP@gWy~S$(hrMAnyJLuxy#7Fz2TeedbF9OpmIfNMg=&9=-y zZK?p;G%8W@(FApzz;0Ke3bI4pe<7!cc|)WZqn8R>FSlHG<#wpgOS67N%9B^JJI*bn zyjxM!D=7d43ff_wShv+&oj;Ca;qQ~MnK-3ZWszx0IIyxAV1l{IK4{sK#_abFq@PZu`lQfN1<7 zXyNo^UihvV-M_M@4S?Zm1^jcSijgmJ(iDG6rNWCJLU;gZ1{?kvP!i$qHHAYkaB$fWBmu>EB@Q5k zs@w0&&;7H9|Few_cElsR$YgrzPZ($a^esp<@miND=S-jc!$01&+U-tY3lSudzt>SK#<-DESpQeg%#nUFE+5 z$FIQg!$kjA;P@3deg%%dUZp>(0e)p1f2&!31&&{V<5%GL6*&GD6n+#t|GG@S0>`hw z@hfor^+f#W)cndg{uW$*1&&{VDO*&`{^%Wbgxuc6oEAgiE z!xvpF#tQa(Z1dh`Br!2Lc1yck6)r^f1Fdvjz_H2_=s4Z`No~F3Li~UrBx02Bq}t$! z?rI$q5KzrMbhNOqB;DTtnGiwhB{7abPj*md`B+2+4)Kv`2fUjUIw^VdU;PaI?wh)!R)ObLWZ ztrQMB6Bu4?G~g8vg>vdj(JxmiM-IEbCL=B!)hm$S0jkEW5_`&Gv;a*l3FrzfGIMC4 zzZ3z@p{jD`#x*z$-mBf->f&Gbzz9icRbcVl?YzpZPSL~6RR4;F{E%U7J?_P5(_j~L z1#&JEhc&I)842JV5E5`GFLl_^5KG2u`L~QVKe5bvd{`k=GqMAC7J)`!1GuO{085At zp!@}eh6{h;;O~T4ZTy1`eR&_-crH@2=lL#(O#g zRVY@K2S-XwP?t?dJzO6J6OeUej~$t>rBPMO$hEUioes0qa0d<#bL&9()H1hb_tjBM z0U!^x;3@NQ>YIn1miaAsuJ&|=B2)3mdg_6Uf^Mo($Y%Pu5LViLuVyb8VsoD?ef095 z*f}AKAr}qL8(5~$y6IS3fzDA?jH^UqA<>H=c#j#^^P=xCULSb^+{Q|NDBXWY&;owz zaz+9*9yGt%ELL0$IHHPenvb9EQW|zn6tE=)2JloDjP)@)e{&jLs^}H(&ogL7CV4Ue z9GjsekmcNbMA}bnIt3y``K&+Ug1GwDcS=kDlsfJnA{wAr&AvZZ6>G;DGf&yA%8w%9V(Sf5(J!)9SYbweR3%!N1o1_Q_42E`%M)eg2LKN455F!BSQMxm=C!-KqJ%N07n<7e#~@IM%%6;X>v^*v`#`8>k)f$HK4l0 zS+<}A%G_f#D5e>ew4AXFiD&SLk9<9|t)F`Av{`3vpaKrTA?(E<5JtXV3r%lBj*2*S zFJo(7x|R37t&3A7&xrBtj@h&{ePQI-r~2OxWw!@_*$BX6-A(@6iTv0|;Fn?XVpQML zDc+-#y%6YvKja%EmpSIEtphwkOb8hh!vn6u+t~6_M-5VG6g=MuZwkP_^rg!p!)$C6 z*i%UC0-CW24nF_dc#wnDGQ)1Xg#DASR4K}B$KPSLQ%r|7!_WuFvPHfK)X_K`%R?qL z|NiheuL^gl>zG@z(pHkdk+X^q%LV`nY;qs419PMvaW@uK!W{f^*c36SccgnV$7*z$3h)@3EW~Hnj{+ zDv~UF%kjb0>99TUdnaEZl$|oz&uWd>TFmr*^ddy;BZ4{ItWbcpcr0D1b4Yg-0+|w0 zKGndH(=Rlte+dZmy)5JbJdcd|)eNsB9sy4stph_rDQXkN!zmB9{q8l>-fkm$funKv z|E`m5ym%2v6S$6yhy5Q%^L4$==gM!HqedY|8dUYWs0md*L@ zPG{8RBSt&fH6X7V#(=J*G?Co@=;Obd#Y7=#49IFgbvqCci(8m+`)y|vQHQH}0X}4s zd=4d*RqHinEgL8zk&?N0l2Q5>kXxL2FI&{ICU)@V@l!g67173iWQ->5Uz54DC9@hU zp}XJAHfz?QWznm}L_}}^nbj?E-%CkarlW{|T#MA+D}r~wc;UtFN{&kxAD#|@-(M#z zWxw?D5c+CY4B5PEbaEW;j>pIYU!ld=6f!n&z#vZ|lJsIPKSa528L(HE?v0+P-KN4d zMWo9WkC2g+wydX?Bu%BKc^gxWERE>dyz>N9_&Lk0wAVA?9@vNdH0c2kh_kk8GGBej z9TL5YwVA$8RLOlYI;KwezOLZ^fsLzG1Lp{yxv;~S^R=>|-U1O_@{uIJq1Ar|+$Ku?Y7mV$5%eo}v?mp9zT3}fix zs(BS}H*gPL{@VBfl~e4*qO2jV4Ff+MDT@^;Ik3k;3pTCoEPUgPVfrlk? zzahj3Y3YtC{&8`uh=k+?F}+uej`4lCPu*wrj087}c-XWnD~sp?=P?kORw9d8L_wBi z?3ZFV)Kyo7#nxL~1GA1N2Qv5OLqW!}M5%6Iy)&$L9HN&#>~tS(+x6!bAAkGWcsFj^ zQt&fS2tmw4vGbPJK^HSS_flFVd%}0Fu!uf46qpzmz>KzbmyRSx{k6^k%M|SjK)Ghq zC42M#ZOvqfiSf+0cp$1>xcnlnM6`k;-y&Ded@o4x+)8#~?n)C5CexR{ zekkLfP_k?2j&f2##!L6DIz1T_s7i`S;8kqWcLxmRHY` z>=cHr0O@Fb&XEEw10|qanji>RSW#=HAu>EiYgM)p&yvM+^}fW0WfSQ)-p*2I(WP2X zeSDVa(pL@;UIYI_ral3^b%ED;cbw}tWnXW#JW8(_KvuqSl&!WA2$;K5uACe}D=r}f z4OyQfDjXNvZK}{Kzi0PIknr4Nef%Nz7~EEqJd(_w+ZTzw&%Rb;iT+LfouTMrBuU`( zJr+U&^TnC-A99`5^oNTwjA^Vy(JZ=dJ6vbIjGgq#9)bU^+EmbNIl4*gEp4A@cIRVd z(4EH-+2JlXDY$$`1`tu6rpuo#Bg2XAzW&bNO^Rpq-~G)jUKa8!QC;^=j?iHvm8?*DF#Lq9!|noWhRxP5z({NUj*#cLV2r4J%EQAAg#+c7wSp$HFJb5}U!v02 zs{lt>`w<#^<7q4wn5=orOe%cqY4}Pi0nG(W4Np6q!C=V!iN@QEYHxU7^!(1CrYgz= zbcDa`jOgiX1e-M_x~tUg&z+N#R#Tm@E=ynls@x8MR5|bv5+86WTKlclW>DP;Zh~Jd z{{ao)&8kjLIZ8kxO+%!FdE3+DtQTpIL{bAO%zEP4FNI^Qdf))S&vAiXI6MLJElplm zhAG~(>?5cNbfkw4<)rKFfelua=iWrV@exTI!suijb`s_~UOPL^0INng2S#QWMfNd_ z2NW9ZBji!%&OJYax~d!}EX3>W@}fI>cKn1OmvA&{cUrG>@Hm;NHINB4j+GmS3y%t; zs?=A`qdp%+=yYz-7`;+k%f14i9uM)Fb3&D7Csg`K*=$-Mr{x{l> zpGUBqou_%I{Rpos9;)iXH@i-A;HK>}5}pAW`>5xD zQ|zrJ8u`V?cwjR}{>oXKpb_^`auiK3cWR{t3scF4zSuQo0yuGb)28-eeUCLd&D9hJRb|h~-;2M>k5wIHLJ6Ic3UC7R_8`#Xxv#J=5 z9Qg8_(-l+(pMrsjg1eoJIeZmfR|hh)AUS)*5V}k8h-XeH5qpIFh?6!QiX)%z4$mW{ zOE&_eI+&HIJ+=ugml9s(eDe&E@)oLOZUN?PSK!=qwG zC>0=19T#x%2CDM9xqD!zPNBP+;}_pkY=IbEgt2sMED>(h(A~Q1bc5K4yReKg58R}S z8#D69JtRdzt2luZs8Bf{Qce@xPU!}Tb z7`Rz71Rp+@&&Ulc#uO(B_uc#6Z2+za3$jzBM3yQB{2A9|3BL0;bN)%$#EZDs&ALJ! zaLpjh+@vp!J_~ua+~;*0)Swc}`&$ri|8(O|sH%p`i?TxAem=9~)T{_7$;#oRa~wm) zrmQg$E3JN2n97G$_ni;;O1u{})G<{AE4XTKiHa?8JlUsSl*WXG_Ev~Gp;-ADCXYur zr={dYsde4EIRm$Yu&j~is@Md{gNARClPSIv*+z3ird%^F$KlUc*xnv`bv}HTO=n{_c5AXVJA;%-UZg;S%(;8h;N%qH zJYSFBdZOnd-SS9D_9f#IHLqbe3tG~vWlGG@F}kz{-oS>ZOWOWLjAQ=32M>K=H)d|t zJ-ym25wVGiJwtn2{^7e);#P{@9gR~~@p1yrT@p2>N;*+~S?%`ZLg`Ft^6G#1^-oK2 zK#LEHi^CX*#nvLXbWJ>)UOezilm`7pwZjs1rn5AV+N8?;<8 z11dh39yffXvw1)zQ=NS92S2}a{-yztd75|fe8H3LRv*LtrGGNzB zEwlzokEb_b`y1y-OyP$dEU&9}D_7$iKq#KN)-KYVj%W>XL|p3}Q=Qn_>ZQ;xInFbpMMYs}H{`H$$ zavAaq47Agmf=e`kpZ%xIQj=hDLM+_()&mMCpNLba@yHTRP zF*}k*oWY=7$8n8$w^q5bovC^qlP&cm>d9BmAuhTE>rTE&UHk-G9`#R8!eGfSpGO9> z`~J~ATi>!cSG*djK5iAH?Nj(*otxTpv2*zXzTcC(F6(-JUz1;+;EH zdxi%P%p&?CQJBOkEroN<_S9~(Ginm0zBpnh*^&o4TxJu~YI7*Q)4d#hh83z1>w@%Y zI$TnyQH+}sUSy=ToGGKJ+q?R(k7;TLA-p#yX!r8SMd@{sJq0rp`|fm{Gnc%0T3+@8 zYyu%OTe$-AiN~k2%&&DC^Em$qME9g=_A0;Ut00p)YT*0XLcu7T0qn5Y+k!zR1ni%^4ve-fIUJuk>fjt?q$P1S9TZpQh6)O8HJjHt9 zS`d!SFnjE`tw8(hy~{i|<-W}@2R51xe`Qr5keOjx&=jQJKO1stBk6@?!2OJ|nsMnx z6PqCe8OMwy=O^_?pgrV>gi2+%Uo%6z@wav0FmXW5m*^N>pfFJ>l=eE{>U=D|q@yfB-&wTSM_DRLOs@_k5C?j`-l7oP<5Pz3VQXsPtlw^XHRfgyU)r&bCs z$4~VIoJAump*MwTG9H(Ok27INV>TL-!U`2Jj3a8%>p>S=HH($pGYGB*4lnU8DnXog zQ`^&G6gGk>kbH(u68TOata?;iGPt#~${D_AgB`yMD7v*Cbtru~f(H9Okn>XK8)>7? z_{dMe_ZfXswxZ_~PZGC)AngJ%`v|N+y0tos`R>^j8cf%Nt4fQxN+(}8U$wt)kfU#i zrL`WJHXrQHb*1BW@Y*>$Zs2mk$2j_ABG0OS(HTn6@rz~gA zq^eB%y=)M%Xc54Kq|$jKYAf&>BpVp8p(aq(rmTgef82db|HiO#P{UAEe;ehlMa67i9n?-&Wxi3(Os&X4Dt{&>~{G(#C` z1aM{Bxy(n;xgj~cX~*qnT75U%nv+af(c}_SH5|qya<*enA1W|jfxeAz$_tlN99D}J z6OH%Fw4}!%Zin8O=kxm5qSkx4eMH-LL?s$&MOGqc|Hu30@eeSWm1>SvF6%1)PROJb z2_knbnmi?*x3z6tYK?`VRP<5VV^MkpX-~_&QEu}IQ}%@o6Uc?L^~Arh3N$DW?xgeKLSJi>Cy+a5 zlyhP{WxViPfG8{PBCVvzQk6ao#z(mZUCKS2Kg6~f z26V%bcWl=$+0T;J?A>4tcyC;>YB4{BOIZ{+fspM7xYaR8?w{288DkCdIQOQi<9AHN zP}j{XilW&z<*sCl6w{pe&_|L_76~zr!-md~cDnNNEI>*eR+>9~OxZn~$lDyh-{fQQ zioNripdnVvsGIxj```YLzj}2QmRwnis^`%cHN$@+&}|E5q~CvciR7?qp~0??A#meq z`Fy~swHP{WR_sPE=>{Qd(82{pH#HuW90GoZMw7Ct%wp`+s<9>=^5Hhc^8(vBrB9bi z&h?htBlMZ(&Q~A?0xON~GCVWt^wVWm`9y>$xz0`zC}4$loAs4r^jq!dB(AlWAUbR< zQ)?Yo<4Q$SUHZTpNVlX&XZIwYntba#;WJ0RyCVJc=*Qm%h8{n^yzz8T0POxT?3GT| zzNf4U1<1s6jV)*IVucx~j}Ni5*iK01=uIEUL}B*(n++>hm+2NOw+ZW3>~0wy-p)VyvQPh0vOd z>n0&J{4Fi`$QV|MInscfV==NmWnJ6NXkFqyCbtc_DudaVRoo5C&NTiGH(1{Nt`QYS z9)8XoL9W>I)DLIVrxZxb1Z4>H+X#DsKLU4~;K_Zrd@2UFXoct71d30&GYwNygaqAF zGkL4NMXRM0ah;<0fQVq>rkUx3a#W-3xX@Qj(;KnK8OoAfg-HtXH>;=i!bpj-D|-iu zIm6jL`+RL1>GoX|X!a{4Iq*6uxLI+F$a@5RuBT5%R+d6S z--qrniT8_tz+mf8!G8B~l(?Vl*AO zY8`#X2!Yd&C+`L0F5j}rc`yLWtJ)nm#?eWwi#jyFt>?RS zpVHTWRb_pwKZIw;mDT=hlY-yrgV*+>goLN(S+ogc98;&E63)n57>%W9#rPR|);Gk; zk=jXmwimX@2zB5wvp4sZ=#(4tc^|SrYeu%wI~nG^@184mdA}#07cZXukWjjqP9Rh9 zWP5_5(^T=TsbWYkXCmsgcjaX%3(aYPlg2}j{MGzDTjUNRbE;ws^!@IdXj<>6-F@^F z#dUxG9V4spF}zU0?=HgPZNj4$$I7%a(j0MlsMw@9+e-F!G-7JB;>2Ghz z`z3*#w6gpwTZ+Eef$T(?hvLrF312cOOV$O6RUencf1QM@l6jAz-Cs|-1$qng&`ayR z-i+@M@$a66D!Pco{CO6@7@^$ba1ZMtx8Yam&DY2;fNRrQJ+#g*II0 z-W{GVzmptF_$Z<>Z4e4B5VQkw$t0s#npOAy+k9Bs8g4Elk7aA;Fm;?_Ynjnv$A26m~Y?8jU!z3Eu8{%zHUZ5S6C; zEti=E?XY<7MCwdkQnMJz@3}U1+mO9&IC7wx=7^x-T3vR82Ag(m=dowQz)a{5$}{7R zOS-2YQ;2_WmxFPU*JZgGFdEOdD(exJGib>iFWNb>bJQDD_gi@+P}ktFlNv$W zX?=9X-t>lPKO^C@B4uIwy*||BW1h+FC&a5oV70xS=zK4Qed@Z7-)WG65)uqsn$%#|dW#H?g53~8uxUk)Kvxf7I|P^V+)sZ}}wJtBR2 zIPDy_jUMir+MBpAPCV{cL0{~7M@(qj+3B5GjoV)2rHPV&E$!`THSQ`@av17XJA#E(?fT? zNJDQ!IPDwGkX^oZBDp`q!m({n)i7V;^uO49&!DKbEo$@#NRA>w$)JE_L~>{{Dgq)| zvVed{hHhe$gOWs$AQ>cxCg*AfVqsD~A(vF$vjRGa_HvI$cbeu=@VNtz}APy6V%zu9ryc z>zIEw_{i#*NU`rU{)b*q-NTK}A1`P+!EDJVC7 zwGHdabcADrA6e%)na&)fS6E~I$J9)DJ_2@`0DIXL#qP7}*XqgET1=Zl&ji;UUO~o% z{NFBuKiw~}jb{d&%a)bpDlbnh^gm{}Kix`nJ<(Ebh(%EGDQzi1;e{JAucwt>k3cJ?i}H z$~k2!$jP)dq$?^8(nYl?|HLC@Kec1VwF^}0%7zM0b=nTVDB+gn2lGnXW8Cd^9#5SQ zj31o!OYMwU?YPT5w*sfPiB9UMC)^)?$pgrU&yvC3TO;FMrG)>EQ@Z4 zjl9t0Y`}BcyCZni|Jf+SPer*X-f<;%r|4I2gf3}*lZ{l1`k>9e%U&L07wY(Nevmq% z8=0Oim$dyjKV4m#;h&nDDBO9z;tk2VKK6Bz{Qre~0mNyGtkNIaMH;dk=js_s7B*c%ttlRCwc+R$dnUz#%*Crpt zn)mNSR*r=26SiOcD1l>5pe^s#*CQHV!TGaA8Hn$Kx6+`kEATCbuAX6Rez82__uM=d zZP!t&k;8i+qIu*)74^|(%I;V0kK8hDruwMzab?4`!(_du# z3ZFV&IA{TP;VT2R1N?6-RaKF*f{Mb|&(>$s76hJ}_EMf|qyE*LD|0w^zjANX$kt-8 z0(O{{C9lgF^;<7>@O0ONSLtF`um#>$=*V!ut?0oyVZ6VqzFbR|d9K@|8Tpoplw(~a z*IQ;FOjff1yNyIcM|lHGshJnE{)a^O@6=b70OdZWdYFp=$3J$JpVJZ{>&DtU7V0Ps zlCqO~r^;6J)VNoPCwQYTKCtX@CF<3WvRd>e*S~XQC)ws1|~R zG7PdKFu>W2ups}jyYy)QMQP>*U`o=rJg6m_W(X5wxn$>a@NM59A`zBmup~~o1+lX{vXA@x z#_^OEMuYNdh;Hi0{Pz;AQlQJr0Q?>J6eMd=Jy)A7x21(@lVkeb>1s~`Dm=~#>U-mDbTs4p*hnfq7ID!QbeWmT!uyO^z zDk_`bhK)5)w@^ort7*GOvJ$$@pRcCRik=E^(@v~`IUA3(f9~_NDg|=S6%k_2q_`g; zF`j+DwrWWuarMPm`HFVP-+_YvS0(o+al%yc=??W*xK3Zn@^jS!%fL{Bm-(A{Fy61y zw3z#Mq%oCu*3@&2gF~B?7kCc!6~$gvdy2ezZ3~}Xjw&`=#wDr5RVl6ep~=}i7Qw~s7f;(c5k6avw(EPQ=x4|{kywCVnIf+ zHH3;)S8a~yIQ$M;%_|va)1R-oI@5JgC4SsBf?vLt60pkY*cm1e`7_kSP_>}<+Ad;4Ks+CaCc-_*JB zexV?B1qJ%W_CT5u#BQ#Qf=P@AvfN8YcqMU$0XrwrXpar@dru06Rp+8K*tH!=Iz~cq z4=Txo``*y51trow_v0ezm4==f_}p^Gu&s=|TP|Kb(`*~o(EWCbZ`JoY!2LKuV5f=Z zWFO@$DRmbPOuegcKJ(sfz1<}9kZxTlHZrM`GAYdKU4Y^1(>mqW(v;|nlu-n{30tm? zyEOj>aG6Yi%U~v%{%fb9c@wTK7}42;Z3YN^-zrv`!N{|L^tcvs627`XycKlxc4NGD zZyqN?bU(G70miuS;<3CevDZv_EMD8QU zs$-_f8igCSA`4Jw5P;~fv*>;u{!WHpx34PmgGPfKSw>gos;p=)lJX!?#q#~rQ5t<+ zeb|oVm&=1LPJ5OT%$;fXQQh!)2aVABu!p*`7ccDWd$-0VM5q)6TkcBKQf!xLE5a&Y z+>@b)=zCl{e(432Y;uZ~v@kKd^^H(9!6Cm{#=M%9?_)MC)ZGcf{DGTbT71`G9{Oq} z4g8F5mzsmx`D~uH`<11svSP@0R0!nyNM+6hAkhu(Ll!0oB=|fig$T57J@nVBS*Tw6 z+DweE^C4jy(I>`{UsWutr#hEOUsUaC&Utm?RfchTAkSIpkhU=~mRz%*_xLf>=Bd$; z`@KxzsEVumA81}|G#yZ@1*^4+vGt1D+olBVz3n!vbOcLWujpp^ z2tcJ!D>!dei;osB%I5l@~+{= z92}0*U&}-ppZGwSjBYfz11&CF%XKHqDgm7ZVWz6N%JAxxHLcCpZk6y>cLfwOY%u^# z76hb8_<4HrY$trJPkS!n$bG0!qjE95MJ*?EE`Nx-eL>M~NcWA8O9SFfBq)3dcfw?X z>`rEaxm#L=NLH2|$i}dhO}Wd}154^dZZ~!bogghj4>oZ(l>}0g+yVO~Jmnab(rXq2 z9oGiV6~#a~6ZW~X(89z%JicT#-)=U&nhH&eoRS zHF@~dxWMGe@cvOKl}`n2|I-1&W*MzY$%W+0%hNtlK=LN}I+!qRhb&3Y{dEi?T1oCP ziR0dTJjd3CN#tMf-Ugik(Fq;V%YI3#shH66U{4hCF@~qJ$D0I~KBNw7*x(sK+BP$6 zs;~|H#@$OLayH8q4#`tQY2a(4B8%+8jlRCp*2iEa#%wg3BqKX}=lc#tA}}oYGLY!J zaTy#rQH!zqwORIcc^?jA;*70c(I;{~B0OrbkCD5AqMqDTTcJptVO_Fnyb6~Q^A|mh zw?OD}R&$v(jYM%nn?E%dlW%sh*OeX$(2XK?Ybhe1uvHWlw1h6NaQ9H^uqio(y2)Vi zJHptRrg#`&f#{1mKP_mdEtz09&Z{!A{9tS!rEk#)lu%uF*Fs0&(dG!|c`ek@=ZW(5zr~ zoOl7i9!a+!=PAt9&O$n4nXXUc!43XpRAPUNDg=_R=mX?YuyFY5;t~a}-?;n2)`L;+ zWN}6CPtpFE4)7t5f8wnCVRe4Kx95k(_2y-jQBzJV59(q~1r-_w0X5~>&t4RXSuUJq z{xoTFkp|i^*ce`0qS2|pBtH5oDvb;Ch`i>jyWD8f_q3`c7ihPtRm{kEJpyRrGi{w0 zd|h{Yf>72?*$Jgl#)z6W*1*}=DbM3}Cq@0C;rAAmVQ}DXbmN{Wei-d7+6^7UWBvdu z5K+S7G?+3?MJI<$SW$!ae^Bt9)@pT)mf)wEN=b=0yRyp^M(Si=B&XLY)vp5kz3EP*dkmvN~sf$6vb^Dt`_|+CZ`Q+c&0lUVbs4L*FAH&s|0e{kts%*|Q-o1*zf zU1N`!)a=4`j`H2Y-uJXAk&IZMrt{BLvd#-oaUTx~ZEUP#d0kY)JQStC;Z(}tUOIfQ zq!cOtC1-%>E-d2iS)(*;yf%&6ulPHb7V_kjHh{4Wg$9Iy9o^PWdAfrr4evIi*d~l5 z1TOlMBHZc3d|%#Zs(xg@$0SyK)RiE0wP$D*zCbDXzvjH^lnAOZF zoLNlvkAYZHFMi<6tHtx&nF5cHW;K1zJy0a)qv4_hd9pw3r-bqH7H#0(&CW;V{U(BV zELyox@_i5fH&+&J*&i^#V%&-u$<@{Mm9gNG^{r=Pg(YE2R?MxpQty370@^qGaa*fHj_%#`PWqkcfI#C;#zg|RSq?p3{=6FuqoW(;)zH^X$=4RRJsWHf@71rcj*M%2W?zt$Utu5lz<+zp zlBE;yT&-o=#@~#J^Od#c3WgK#ga$O!?Ox2B+`>FsceGY$SHv%+^t##Cg^Jzof6!RT z93wh5Ku8#IgxWLLr3X~<>Ez45q>XWy{wm`dY-Du0i017iX1OtxoMbdjuw$E71ftyN ztOAds0lEjFsS!tm{*aZ`p3gbj!YWc}6K+FcI9O4#n+AXTe}}8JaL~dTSKj`zI3n9x zpkD1v&|X|9y)1(Z90v1jsr#kn8Wl)E;jNdjJh z=M=yWT|!4|d*Qw9V&HU4u*_K24DMsgQ$`47uOTiTDi8VBsKr;W*Ms77LKA8DawLbw zWI7HgN2v=Blg~fhHpLLHO5>W-AnQd)n1Dl^A_yZ|`Z zqxve!0-4zp-&rQd3n6wUEKnJ1_aRUn7Gq{g7P|p?Or4x=fmAUZ!6TwWnjH($-YZ|2 z>(QlcJm&a9K^j){0AK0_$CZ}*kDsIbGfoW5N<+O&b3P@x-BH%TnY9u>Ib}U(Uqmo! z5qUG*?9A9?=qVsN+bn{c2;Agh{z_4;*0l%*|JKx zDd)R70=5nAN}!`LlXKQvf>c+LE%fFYq8`6&8KlCIv#TZ+DOr{GugApD{+cI&X5k1Q z`V{%|Vk!#zEbW4czl5LwQ$Mq{3}eUPW{HpzM}*IUQXfMEFfd>%$*3E3Y-- z%-i_o{R>9YDs7WIZ@KzFnFfU(_}#|HFNy^l9D2l$r4I={V)K`Iuy+Sn9>blBh4Us) zi&?`-PgaD`N?T-aan~+*RjbNwMvk3ED>yo^tCKP>&90TU%jj#`?SSu|=KJ}GBbvjY zG|metUD+Cn^P8?%?Q5sh-s`GFF1TA{biDgVv~Ga3;|A@ge)*LR%d#6C=Ic!sl@s*1 zCYf0tyqd({31qcORUa&X;+_DfR8d z=thjb+(ysHi;UXnL;^HTh9<4s2ED?$8XE#1AQ)qPY*~Y^-HFH+{OAOHi3p$7SCEdr z|0~4FU<)&i8N~OX-S<85>j%D6&20Gsjbjf|$;gEovL5)Wa&;eH*Jt6O`v(%YYD@X! z_7eXkY2f3a;E8G^L+*EJTmSlA>Rn=^>Z?I{uRBi$iw`&lryc6?Thp19BIf~`NM5Ne zq$F}vahsK6zl33OfXAdf$|Y24_dVs&U|ZgYn;kmB>Daw?v{&Xl4j#8R5)XO^?@JPL z9l!v$<)A)*8XJm`s5RIMqq<9k&o*H7I;jkSag`iwuo{GQ`|F)b7i7@OFem*O3}mWs zvYjQHdBi>oxCy#cvtSgXMCBKPBc>9WA9zi#matOAMVe?PgeF8fJ3 ztPk*E$%ez|94JMcY<9-MJc*AzoS}pYH9+!Q>3VsLbHRS#U!iO|X2O~$_A*yvOL{)+ zm)URfq&eCVpEGjDkM6{y&r!DrOifTErXaV~hf{~#X>u5;vRex-E^VQqc(_)%`Uu~n zq%7{g79aXHt`XFBeGoZZEIG`o$__E&xFBq0A!bf-ZxAOxwno7}G7oOJH6Nfi+chhX ziJm>>wW?Zfq-H4Buz{+32?wS#X?!IN9dE};%XLmrJ z#~>Z!fRCTdD8Ma2+8H7^PNr?d?thT1N2mIqpkbaWYQVuCz)fkPA;P1aBicl?K2~+d zh*SEYonj}&+D}()L~G(-G|QY{xk+9T!#FFCN*>rW9TG7d!1R3kiQPVm-t{o>FU8$p zV4L8K#1N5xN_J`cNVnX0nEJY8o6fa&Je0t;-iy^f}hqe=fXzqB2pL^({taHe=sBkQlgTL8mY8z}7iD<&<*xGcKaN71b z4Ek)FAF{AU4_}(8FPeM>yer(7jd=EyBUOC*o|U=L{bcgn5cu~P`;WM6C*1dZSsks8 zf3rY$aBBNy<-!2Xsku3re094r@FOOEft~vLm^>PTpiyo3FkI`b~!EEqqZ}`r=6UD$)D$%txSq#*w|6O5PpG zhPtS z7CR!6;10t88jkDTI>=zsL*t-_O+lYsrw)PKJrJ8jrqPe* z!EwXOZQU!l*cV31!G!(u)gquBxN9gEN=cVl0vXrUChuaf3Z>?eopIS@S2oJjgajUL z759D(XOKl(KK;D~9grEUlqXZ3Ps{RhCL~b&!c?K94}a3dULG%;#1G5UfsdOUG=h0I zn_xnT+)&I&%e30!Mt_PATXFZ(9jz1(p(Ojz;C>NzF7r2fu{eHDPPXnTc+Ay%ad6h^ zM=nnFCM?r0qp5R#m~owTN;|4tCLPdqG|o(b+RfP3j=zuV7#`JO06i=N$Y<46{uvvo ze#O@w?QQiEJ_ie8OG&qpPgF9bM|!y1s9E_fsFC#iYUpD5onH`$56gR7M?vk$$5UWJ z6tlpr#^kcX!&#uKUvO1&$dhCf-0GJ~m<36OorB2nkR~JvD3Pj~r2U)->pM%@5?woa z`ouOD3OqVZ~LP-N9^F)#~wea)sB`sU0O&qo(H9cVqg8@ zF8^4&o?#ahn%_nZi{FH>Ji<+6z>8c40v|L>51{|RPn>@wf=;WiP95CDX{NoW3xISQ zCUD#qiOh)|Si6_;1y_o?Iz+o(PE!O|s;fs5+cyOWWh8=0_o?XZUNknIK1n`~@$S#t zny*X1T(5D{aQNGDEB5mBs~`TY2i-h{$)&w%%UzQxGT482WF1O>rAmeJ=R~1h;u!B4PE!r9Iz;6(zG3cP%Ea?-l?Fnc_p)2{4U4W?iK(nxai@&7-82cYpZTP zP6dbapzf-vfRVwnoUq5yep}0kh%!8pitknJ`GtkxW;YMRqS+6Nh}A?7z0L$FHcpQ4 zmfN|6CA-{1!|xaZ6!tdNimO;8PS~yJvyOthBI^^m+BWhsp{eg|$5lpuxL=%n143+J zC-vSJ>OdnJ5*?VSN%c(_on+Au8eD2tkw7;kSOvAtT+}Em{aA5(W>MmFG!l70M#*C2(YxN9Yji z6NcclkCKq`zkj4Xy!$#m=T{dXrdz%rTfyXYo|D%<=dB~> zp;`|#8@&u;OqP) zyN~6DZ38zIBao7;J82hl-`asR;LFcN+$Ccu~BzV;hh2?ldgjHiD7EIp>=rzlv8fJ`IM%CEFv1 zqr+flON<2KMw*2E>#_5%E&)Z{WV_?$aHfK*QGcWF$M2%HA3u@$Rs3e<1yG2@V7KiX zQuwyDVQs8oq!mE5fTS+sJ>8zh_->2&#-sLl*qe`uC)EdkkS#w?M!yFT0Ce?-#s7!^ z0A_Q6F(&YX39xf2e*g3(jA`;+5PQ@s#uyePy2|z#O<+Ym?DGv6+GRZ1g6Mi2duyOs zmx)a~&scj~i)1crC=;%vvY~8+namp*Aeld!*;oeUJ3t<_FEAZ~sKQBz-uV0$8=K}a zp$_)v9{R6;sHnh4F%#;%Wcl9m=nrYobHzE(e~JLmixhO)QDc27U7m2Sx;Npjum~P# zlFd;o{j0~`$xzQ-E&~5X<#KhlKbY!luO$Z?x!Ow$yZ5*}e5V3~|6ncxsqt@uiyZdYp|8!aGj{vaFo})_o=?@TSvIt5hbd9!2-)%tVsma8% z^Xt>ubhWN1qz=5x6N8$W)6Spq@5kGYyeI;>(rR)sw~Ba|&L<)>o3=pdYA?Q9EZui+%V6+&EHekSewwf(rj%9xQZLI)`B zjnhK--oDW?s`}H@di3Q1(0cMnbp-x1i35m1al8OL)G?6zR&cRZDvmb-WW>(_qsSN- zjT`{mr(f(X#)8N{7XdZe;@L>H!8E;Y9`Uc9^w zl#7S&fg&;Tkh4Pk;WM+>&lFv<;Amqszw{Hh^Ai(Kd9lgD!w_L7Gr4>JH=I>rI~MPG}`>W)bLsx|TEa zQFb|JJ0^l zt@;1vmt<^AU<-2hODx(S0^T2vs{hyfZma+fh@4MP#r~`N_~%>yza{+dTmQc${O=v` zza{*iko~_X{I9t2zbO2lsQtev{O^S1|EEO4>%;T8@>zJqDU%{_z9Q@NzKdhraCMGU zRlK~6Q0iqXuhdaYgkP9D!^gN{pP7ICSh^f#XBW08#i~SWCobTg81# zU7WRF&etX{%3t4xUi5kVfL~vnQ#;F`s7cQO!NwP?#Wn}`{q7W{m9x#YJJ zfgP9rYDyTBQWTBHm9kA}8KS3b@@4V+9u$bkPZ5+-=U&CZGSFXp!gEZpNgo_*2G~6C zijU>jC*Lp&=t-Fl^L+Lp+yOKF? zftQ`#%=zl*RioM)EM#g=Aa>?ieS3pZw1Ca}9GS=iGb?qF0K*@rx0@9+dI}-!?@Us9 z<;)HR5O9 zHyg?d7dgE;bUq!_6ZagGXz>S(JO3>}G*d(y+-WA(bpUMu1(&0(SiTJwymGSvdS}pk zGwzIha!~m>Z{(MTQrV1)#dx}*6f9@3n~VG2^XGF@_Cg&1v5j4IU1JD){yRhAaA)5e zt%z|CATI5|hl$~Gz2X*BJvga=9BpkvkYMCCnk<3peBHzEqunQV7>pDsH1H~7_mCyQ zFMhgR1JA74n@joWD#ydd{nTeDr6#?htd3vH96MylI_kYp4^!752A-7AF+=B5C*@K! zYHA@>4pqb8-71H5dfn3657|ET+X}ig)^)(LY`>Labm*Pxi&}0z%hDE7XY+X<#@~)t znZKUTwNhAp0Ubk@&79)Uqrt-2p^@}eD@%Q14pH8YuYUqFzSQ4>Lh1{<*FTp8Q79-L z8&-gi;uwO4<`ATm)=LGetn3WjOIE zG)FK~g^3A&$~-e+Di4p?K@P*7snnWtdPv+ogm*?t(C(@#& zi}3XOl$zzSj;V0yK9jHzBuIDz*K(>~%K)E8Yf%E%C&pY*&EZ ze9*%`+m864>Jk3=;oJh6_gL(S14&#H6>!r!=uei|iNF29@S0*}OY*VOU>U7dg0N{Q z?qJz7P^s%U06D3zIIgf62k7hg74?|DoXbpt-@^>vFZAEh&|8lgG6s~kW{d39_ihd- zJLhD2Uvy!UJqa3_9$%D#C(SbD2PM{cEJoO3b1lJY>vNRDMoY73P9kdyrC_44sz~`* zww~d&`XI@Jy1S!6AyF0kPMivn^C`9H0aRY`D=qX+lCX86j_tU~4%I_LX2MsJJGWQh z*}Zs4IFMVh@cBjchybKDpYb+SWigqj>7REIve^9uDy1Chis0}6{2a3xyiS-B9&!E( zD2Thl+fbgw`Z$0u#?0kuM-T8RfE*o1qyI4w$U}$=zeraUV zDk8URqSJ(|)iYYh&6c)m;$v}-@sFZISSL$5AgUinvmv&M($P}%?>&Dt2ey{OHU1rN zEx{qwD)%sVkB--j!a8bG5_c_c;}$CljS?^~rLODc9Bu#I1=>Vgo02GamrFUE>W5Uz4d&?zSJuL; zSMMOK-&tAZ(U@1R&bYFoFC@IAGdRShpVgmb0yaI>zbkG|r^ztWo)ErL3NoxxZ?%UGeFtm-vw46kl086%hL$;WZ`eML=V zPzhE^ksNXgo4$jw$zeGUp2Znd!iG$GGsl43jwKl;*gAM3@>RX?xobX^vQ7!wnJu6Mat3?~gyCi`@IVTo# zM~@Sih6DH?=6rN`+!i(+(6>1#Q#)W=Q&j=jmC9B%%cR(73@m6g?|#-TN9}avx?i+| zrYFVO#q8}36H=;W(-YCj)c?2gv5@u=z!RhB#T68SVAjapov}p z3|W&TMg?PE_#-o>gg%Q1ZSZVLf9`0K{_)uaG5{Qa^1;kM_p`m;zNEGAnzP}Bia8e2 z87n+{@1`NcemkHmfd3kG2XT2E0c_H9C3}<-MYNC}%X77yzPMJTg3c$grc1yNJ(9_h zDHk9^91C$_FOnSqs1wy2OxMX!U^6cn%LT7S`g}dNrG3{YNgL?&KHKYrk|ckt^mOJ; zrXtl;s=P#UM&Ecksq+gQG^B0Pc$tLH!@@YbpC4H#JuC?^y$4cdf{aUcL`s2tv)$!* zLyfOYb^o;L#-*~xS|1xtW#HF^I8t&d?u6S$AgL;PYx9{9MJa|$LS5H{WE_gvZVV&V zSD}p|S4(WmIa`(4(5=3?*c>cVhWUMToBVe=KFm&I;RTqTNrX`E{jn)pC)DN^Ukod-va(O4TJ@ z3fSLQEs=ik2R1gSWIu2tuiAFG$m|bSjdYZ7V=13VOf5$3MkYQ5L~) zdu?4VjFyLhZZhij3inYz7J5S)gGns=^VFNIug?y?9ce@WX^-G{}rX-Ki0Av zKUaq}x_)LRe$VcW8W9KRphAy6khdNoR;i=M_^aeC9BuihozkXUy4e4t1{_KC4$ejUI&5O$jMZ0})^?Zu5|EWp;;c8yrMII?A?XSH5IdBaU)+++@ z`pZ0IPv!v7D%*kEHQS_hUCkC^7G4BoqxXXkkeMfE?U`hT+f|_(u*&%xUI+1@vuZPs z6`1&XoXumLuh-pv17t=iU~BazI%!nTLv&2S#*aiJ5|3{zSyIfj7kH_H%pBNJ-fJ$r zJ`rwL1Y+tC=&Y{#5La#2vfWe54OOiI1F!BR$Sf7z%;jnW2F_Xa@k(5t8?ac=1Qrg|b;g*Kzy48e|dRRkw#FP1FZ;6^q9aBPu|KY>e10i$En1dA-3= zt}})}+(^Qb;)SheZikCUcn8H&EVU(KWjFKiR7$Bn7PgQgb59L3ChNN6C<_&4;m*SG zjJVDQfN6J%zB>yVtdZ+$e-<$#?coCYB*vhn6uSG+B4=LUnblPD@)MRsNaXp^`frnz zvS~jYvMM{RoB3Ox)7j{-QjcDJF8z&M4W*NQzTnjtlo!)O=D&4r^%R{`t*sF~d{0## zP$#?1`HLL{KC_&7_QIhM{@NdCwL45d#M};#>UR`%jeKJ-pLp}O?BnuA+U-xR z-?@3Hmdyo0rVcNckxe9?_uV#*o>X7CLUS~%MS*hoy@UudsJZ<#dYm{u3(ktoi-x6+ z2$NK7e{PNx(G&td-S1-Fg&$*12!aOy+aWiI>>Aaix?CS(K9Uo=HIk()@H2I^SZ!<{ zWQ`RE^dYw&ge9(%^%p6x(cICN#V51MZ!Vl|d*g&PW`+eZ>{}0n{I>#awGO@bNTKBX zxw<~u2_~D*-%J_or2f`Cy}fARy~(h(K*O7rH@*tOrUAc?^BeGW`t`W1C)|pwdP%xQa#^!* zy5-i|)>zll&L)i`6m*`gMVrO(nbKYD29Z`Chi)$g@p;}nb=U zs$;JJ5e{F~!bXb-wTR*2I!PE!57MrqGg^i2u(fTBEg%$1+2)VYSMa*|LB?0QSe}xX z1|2;&l%tZmJlST|&~Y}I5!r5wUaGF@F%2rIEo^OZA+fx(h=0M_n#+df4IE!@r$js} zQQV0aN5FvtI9pVV&nYZ$hDfH6go4QpP0HcA-`ynS@~ayaLLN5+MFuywJ>1B=9~|XH z@|<0~6f3`wjllQoLVsCe+hdQkAT}q2dJWkJ>O4HW2>YhixQ(`ks5C~86?Gs@Z^3Mg znFvsyim$8*&hUQOxl=XL6!SWd^$}t7STSh$S2=L0U*%aqf=S}mTpD&&UaXp(UA|qF z%Si}_HHVyd?PG5@B;5{V^hXsKx#&`@a#_(4m}#uASWuq`_E`W~kr#lBtIi-IFw zxo^vRDU5ooCyrm6^eIF^N@`Az-Ki}CtxNR^%UUkdWAiu{R_dSCg=@N)uYP+o;a+L3 zUi?hZoHG7f#rv05?;(Gu&2AzY&I=_((r;NqSJ0c#xIalH;dB3`(q8M(GSHtH7P5#Vk5V?z30m{`0(w&C>!b8E;3O)>O*)H|mc+JC4Oo=uU zgk;T{hI(NlR|Py7zD}r(3gqWTZ7f4P!7E7b+_K+ijXP!`9A0W!#V9G)GC3!v+uWua~826gOX=wq?!J;|dV~ z1*qu}&Z69;&M*^IzA{vGt43SwO9@yX#Hp>G-;gOBS-&&2u-EExs<@=u7Dx%=OpQ zvkkN-{xdbpKmqE2xS?f}#sspv9~LTYR36n90m>-2ft9@i+t2vbQxd_>Oyc-}S<}xq zQEI`YVS(_GfZw0B(Us~S2V@3_YhFk-mz$GKeqU~RX9)ikq0ZtGR?jBzzoN9*(lNH& zr6Q3O&$8rDplJ~3&$ZBCDzHpL89N?gcA5cTR@#I$qgkA%Poc+VT3DI!JsQsHITUBj zkS_OtX~lx#rN?BtOTJO$i$FUwE9XI(bJJi6tYta$x!$yCUIF8h3PChD^+SOI?--l3 zFJ}~ndZX|M%bi4+lFwazv6NKNagFZKR$3 z)`^Ew3Yc9>SnBLz@-!$LIh&({&v~NhKmN2YODBUh$5%#t9!Z@d5>l6ppE&U~8(>szza%x9InI0_)Ah(-$LQ7@I`Fl{Q*A;{{eb+1~WQ*C1fn(M)^x!vSt$i8J+u4{cFXj?A8H!_6@f+qiM($+pkx8UlUl36)U$ghf6(=bG@{8Q%J0kZUjZ zM9=TN$O953!jxxkt9eWXsP$FVIw?c=0tncp1#{$PMjWFm6Gf|j#oX#49OOKrn>yn$ z@+z+E9snVZvv~mL`}K?8zSrg}LD?>+FNLZ7y0q7-idKJ)0>c?Dt4nkzZS3By>AK-VW}Y7git}Y)9-U`kp3=T+q%p ze(+`qdq(d!3@sR9zOwzyh;61NINF3U)Z@t%b_hlke&~s|ob~nfojPmjO8Dsv>#g1u z2a57cZxucPLhoY6A+>h#hpqXAz+i`qLZCp}$nW{{BQ$q{=3TAYCIqG!{Su;NGbKAF zj<%u+adv#sz$|byZFwY$xrteAZJ^8ldiEC*oUMEQ^@RVP^jE0flk{or_rEht=AHk< zCdxubJNjkq@DC~a-`V?cVEx{FlRdDSt-VxHR?zDmVit4C@IQ3!vq@=nY_M-$6y`na z;?2^BIL%xIGF-JiPWrX>C{wt0X-I%G@NhX=&+gR5W28G)BK`x~cPSTU4Mdrx{YCoq z+ylj-*KC1{=Y~xOiR+___RK*KhXf%=kpS!s0$N$zC&Zd58z>>roGY8_Y*<|7bQCV< z?eK+w1SgX6m`4e+y+95O&^inw(9d>(r@>5;05@!ty&UcQZZw?~`s#c5jkDgfs>^qZ zusHjhehw=@`;FfzTe+&w->(JJUk*EiOh?3qp9^v-lB`skW?3W+0OCw6;w&}D+a@ZM zM)R(d;L=aWt|%`E$@%gLn1&USV5VM|078BM*Ovx|0$bMHZPx3A-@Ql*#ad znp1uWV-66}tZA~II3;J1iUAu_d^sdknioDJKNCY(A|s;6Qj48tb1UsGABpU~7y z?9Ut&I%4=SY*s!^d1)g;Ahze(B^TYBa7dj3DHAw&eu}$1l7tK-^jOA(1PjZfcXYABJ zyzBw0?*qLJowO$K&RAzKI}MbVi5KMMz*}g9AH_kGpNnzyy;UK~o>2Y!!U?R}qE-ax19Bcgy6eX^k z1xcisd?Nx$zfCWr_&PC$#7uu*Ff1SC(`C-dK_j-j!-2J|4mh)6UlPq zXitzhzuPZ`-+@QRiodhxV4`efeYq zcTdGhW$36T#(DsicSU~X#fE|VeLV&`?nqSJ{*fkpdtuGF%DOV_OIE0*k(5(!&c-?J zahNUPa)SV|9&y$f`y4ui|7b%k$E>iAdnC0QDTd}$G_pLre`ToPb9p9QuENC6q1|l0 zf<67DJ=cP3SF;)k5Xi&^X&3(tOm6&+cip-okuz?!`I{*K`hK~wboVufJlUb(iotA( zM+((K-wO58z|Oex-AFhW432aoUY3~LPdJ7R{er93d#HkL#Hp?jbN+5W6DJr0MoZun zDl$*iyfX64{#oZjep@~2y7X~$D3uV}y3tO<6pqIDq36!t$_D1TR$QZq^|2qrib93m z3Qj@R7A)Vcl|iE(?N;?f#E&nOcjV+Yk4d9L@AKi6<`654>Qc)k){OW8`fvx*qPY-{*YlhwaryL1z?sS{ax1S@=sR zHdSsOVwjX%3QQmF5e7RdDq!p zIE`3HE@5n%Uz;i5?>ei?UimK|1cPQzuTNdNt!w2G)Y+dau`E&DQI@5s0%j)%`u1@T z?@g2lUh2~KSU*B$nv`zgT_Aehj^7{=1Yw?Pva*|#| z)QL?6oiHxRCiknFXLdhsnFVg04wmYbDp4eY?$Z;=YrqzYC!OU2U(aE*b{aC69GbNn zFhhdd8uR2%S$!M~+%QoM1$YJ}r)mpL1l%Sph~>2&&<(y?>|U#Qde<9X>*liy#>E`a z++8IUNzozXKI;uWsUP>Hys^LjP>TcH_q-5-fqWsv(w}O5!YfNH$<^Bg^=X4D45rXc zol8&dFvyDpoH6uDjG-;ol;F2Us8cti5=HO2*|OovEXHHe5t7CDU;cGbla9);SRkd< z(@%p^oh2kOd5WjfMTEJr51@%Gl`_&d2#MY z(LRLo@y!W#(m)BR=Cx9){P!^7_1v8e0u+7QebO#mS7okT7tf+I!Zhn7oKq=ri^HSR zsg{{KL@}Az`vm+$?1}#N&sk;4t~t9N=eIjPG=O7&x_!mcyvEs(ze6qB|F!{sIt80`x7BhurK6Q|ru!ajSLXkml`x0n z@IfbfI7jE_s^8OjX`ka<4eC8Tbp=r*Aa)iw&nZ%anO8l`P~VLfusY_6JL&(}!9lyO z$h`?KuYiBz^Iau;7*lLZbgJA|>tl20bRQ$pwwG+O<-G8cut77P@X$X2k|brI9~wlA zNv}wpY>itYORAPgV2W;E3kM-Z^_IC98e1)k6)|xDBK`ChOC9uZ<)z_OINnsu}V)RLGg?c?~5 z)E*Nah2Uaxk?*^K##d&e zqM>k7OtaRmIX_+MR7zhp!=^sNK2b7q$yTg~ZW1lTVGwF*OUYy#s#px-&XmMO%HVZE zY7egDBdQ6+gYL$x!K?FkJhKp71kR^cw>st3F~{z~`T^;mE2B`<`eJ4}uk$8FX;P(l zr%_yN!)`L@*n{>)Ijp$u+d!fwR1alu&O?o@KwXh=>amtj4``{6?s{`Al!&B)4?_F8 zw~9m8Q%`c5b`emAFi@R(f25n0XKC6g;6*DP9pypkPQ=)%f$83zzRkc_D>ZhX$xKq1 zS%WrEH$8`qe7DDD@*pg&4wd47c)9!eecP5#Uvv7%?%h7#H`<20yfSqTIz;ti-=IGC zO>v~lao=Ua=mslizq!PrhFxg!O|I$V zMgku!CkLfXWA!X`+APPe8M?^#c5K=ge5)F7BiOCd)3z_0MAJHH`$jtTEo|SmBV@JT z8q%~+@R;dmaL2iwnyow5caFu27i1kbPKZ|rxt+3n5PM2JOsV}Yp~#Ijm*F83;}B8X zkHDG1e(w9m6PKaW`Q`fBLc`R zUS1}LY>|GA%a#Q#-f^W_Zu|6=bwqng~-c43#Gf`BL}NJptsM3LT6 z0TJn)P((yZC?Yk4BA_VJlq$UoNRt{`h$6j(8hTJlC^3W<0))W#u=ZJN?|qK@jPssx z#`o*}i<$z;xZ-sLJ;0%9c;8dNH$PG5X^ijw=(A17bJbfL_DX#xD><&e62r$Qc2 zJJCEm{pUOW<;^Ew_C&?q3wiifz2oOIFZ*x@*aZ$&o8GN=Pn>m+ycg@h0I`qofBH(4V({T{pW{}yex6WAuXz1{;gBnA zlK+X=!dm{g+;-jj%OP^k7L#bcf-OQO%LzeW9ME$t;eZ17`UdZEA-_#9R;jn{9 zO0f7BdPTj!b+|{@Mr9`Vhx{l@d&gwjoR`?%T6qap1k-Dn~6_bm>U$M{&xkv zdKqS3hc}p7d#E}4h+EhBK!9O`;ljsnVDNd${_518)SaFWB3^<*@!3+ewJ+HA+ZcZ? z6ePLL<)Vg@Zk{d z^ykt_Jx#OszSh;^qt`FiKpsW$#+V{5z?U7%M{5@?+#trDE;LwkGvuJ3l6lZJg9xV@ z4P|_wL<&s7O2~%XbkvCLaT~8PnFy;pHuN`#o+_h2nbsz~#)b~xwrw@kRdVW9*C-<} zTyUN>=F&XNxWlJhf3c&)g!`(0;B+l`{8mJjXT(f&R)+`rF)65D^gIKqsQe(~^1X1# zqE+5^i5=C8CHGz&=}#9$4=d3Q4P##>-cC0iQJ`X~wKijWt2TtUR_oK~$V;`;Dm6@U zFYxA_F)R#RY#kodpMQ+?)eL!ji7eMw(%?zmR4U?xw_CI8hGf6>mPfLKB7)&F&R3|y zu|XD4uuabXJ#uBH-sn~L2u0iatO1^jv_$H$UvF4zrCw)7$3rQ=S`c9bP{wJkN!u1J zyYoU&iOpmsU29uK**AY5h=1Mgj%<_|z1!@6{Of`F``@$2sQtu@-GFpEs@LPE8gu*d z&j{&s&q5-O%}VY#lx8Mt7d;JGuwIT%$^}cKz2c|Wr4iIzH{_4+5!cs&$=M5R87#Aj zctq-5U)ukvxGv-Vl}qv9SG|W@aY2%h*0VwmpXUpmv9aZF8K*cBz?`!5Q9kq-2FNA= zAw#y&Ykcl_T?+j)es8xu^Nn!X9Kng&F5BgGop z`T=1@?J8Das*gpNf#R_QOS9+S&YaL?*8n}tN&h$xpl$5Y$>Hge(2;0rwbXcYMD*}K zachDC=Do83E0ED;3UJfKu=DaI%0fz{i+? zgc!t63zydCVkfH$r=eMaGk_}a_+k*6#-=Zw<@R zVT}VUIxWYrspW93q}apf_&e83k$&Ec9JX{JTygI)y9W9Btj&@50sLUCr0LD^K61}` zi}zP#f2EcZ+Yu@&iXJ~Z4bi{nCo4Di_&eRK>N&1ob#p;bX~1K;gD5FL*N917Ap!%w z#kv{il09p`7XZVu(IE@M|Lo_PV7Kpt@z`8IF}PiEcW=RV=kq``9$P!it6>uV)1!MwQ6@Atr%MHMc7^cYpSf)~v8mOBw+P zP(KmzR0a@+%^+S~7OJ(9^gt1@L(m`{831-Svl`^4Nn`GDQ|35e{J5$&SEC%Uc^2@; zcFWrJ^XiY}oXvT|&XB>i+>2f=%A2pReW4Xo`Hx_PLH)Y=AX?z3($k%fx7`|+l4A|( zC-IsGL_A&&FprlwE>Zq$W3duAVLJf**<-080`QFC%hrCjp-}J?NXJ!jD3;(6gv@!4 z3?w!X9Qt{f=3>mr9qVsA2LX%h+OWB5vo86H$!+Vlg`kGrsUhT@0l8j|=U@NuDe3l@ zZ;Kd!zI1zGwVjGu|E^HTmtSnkuv0WNhfM@*`&~$1BvM6+R6TIM(n7|t!46;a zsu2%%Ru^KnN#FgydCvic=P3b zq9_fTv1YrKix@XIce7^ju8*u--HzPj6i7}n$N?2}tpQ=0o{ORZQxr_b;jJOdJc%Vq zg9ccm0`E5Hk`H>@!Kg2coViwGj^A)v+U06}Zk@m~>pzCS0?6qc$yfj}R;TnGBN?uW zO-2(WFyXORFDV!7T6iZKTUyLT^6bYeV0|)W>llvx8x(K3e3XBVni4(xWXN)`r30Ol z8MJE-1B_7HVqJ(>nc8bIe}!O)_oq&OJKM@H z{6FP1fBw5(#MfTKPxY>+7mBQ_@B5k~AC#it8nIn^uE~G_xl{rI8F_>vJc%rQd^bg% ziV`lZ0JD62S=#kr=TVq-A~9-&)CfL%#4X;q5*Im}30=Qp$|GS=_Vg>evR-EdEmspH zPm<+2*ROWH!b~5FPpWm4rzo2DeggdR&mZ%Sa|1;BEWK;TggUH%7T4?tG`F?-5P_1# zyS!?vN1q`_wV5T*+H14jjoJN{yXy7mB?|pqN+0vH6T5xtY_5wzuL)hUcjXG@N2@S0Eop8M^aTed)nJwrhdHUNME=XJ1QKU^90Bd}Z?uANmP(NGR zO%iX#OZZDH4kQmBQu zuSy8#BstGrA3w>COlJY>6Kvyv1&z)wm#9o%WYiTvW22SEmDlV2o+dU`i78uYT`{!5 zm~3gW`u!}LMyux21KJ`7*zWd^ch;2UK{vk@-qoU}+#Uey=NtytQc)73FdGZaD~j6p zOG$-(*T!?K{q%Gl`w1eKgNiPglTOWowL`L%o^6~%AWR;->-jEcWFegU#(`{Frm_*n za%V=2ta1ACP7ZxE&6zTJ>^}V&_I0&Ir(A`=u2!hXi(mw{+)*rFykhCKBC7z}^I3xW zrPJU3pg8D+a^i4zZ@VUF&LbM&f@b#CUPEe(zMn}f>!jLX14Ypl3MLJXz#4K?ETMeJ z+L}z^+xlJksoO~w zg+kP$ynFE*x<5w|hwU8VS|aHtXh1sd16fXVt`wZ};OGxTumv;;P{0dj9(wc4dIPVq z-FHVfz7uN>+wQA0KaBj5q``eP=+(XL1dQ+*Y%p?CXzp;s~9DN+KLa=O=j=po46*tepsptbbJ-f1TVvYY-JS?m;Pb7K8J@JHDqv0KJif zB#Rf_D_KMfea81zKp@ZJkoIwDcYu0fnc4w6&J3ZBl3mOf+wb$u@DS@sJM>G@mcmBJ zZIwy#V(guR-RK2+7V-LDb<$s=*1gT03aYSb#~XJM!)}WH_aTrRkZm`VVpFhxNLSI= zEOm@`5pLi1NI*ONs^W_iN^G0HxAs{pSkOvzWjsvyXqVIUA)3Nqr+IjD9zG1f6*!bV z2PPdloq~_a#7)9RTV&t73@hW#egfd zt}qtDf-9`~#)ev#m2B*m)N*|qx;NjV;dy@GvP$)MsL!{Kf*!83Vn%PbR~nWxf0pqt zuYpW5gUMJM?e*n`4FKYk+&rE;9MQ>TGX)TE=XVlgF&A$eY@qe$q3HN~W9HGEigH0W z@##kNHo`^B{T)m7OPDm=i?zzk+fS(db6mQiEedY#$lWOxGGSj8G zM%3U6ln{N`9a%B&#jl&1z}gAjh?+ODsQw&Ljc&xMuln8Aa#m{mc%>8i;$3fwF|*ca zWWYi_IxpEOCPvM}@QE7C{R7ykK(dMULA0`wIykRidRoMPie`Zao!Sf6sQyU)&ZB;x z2zMCkt6ix^DhYF-NniF@q9cLiM&jle54|$`9CUZmVFBCCC~RmlH_Yy^po@KQb!z~e z)B!;A=WEWxRp=D@Mxt0)wmU|;=5k2g)I`IYv5rux}JD< zVtG{hiiCCB^)iGb`$TFDPHH+K4vfHcH#=bZT)qcBxvCkcZf9l(QU&MLcCQ9jFR$H- z_8$N)^^;l5*SO;qwPxk<+ENd9h0BGgKo>J>u@~>KSa^*F%tdE}ea=$QpMz?9dw!wb z#UDX+?*sOAZOBI^mUpSK&Z34x*n}k;Cyq_7s}a*{J;LQ*Gz?P%_^Yq*U zZ}Z&#!wu_!`K=Yjuc4UK8o2YNzwhSP+h1wKnjcf;E`Z$O#s-jhRdCv_YHC;l0`5+f zoqrpL=EKsd#cU=`Ff!FO$z zQv)Cx+6EDyN&e<1-u2cx^mH%wvv9>D_2MZwtH`cYa9Z_nvi3J5m@d8HQ zO}8_)G|%4>MOe_rZO44Tmc#43Mxv!Hk~a0XV<>MhOtR3hv}5ShSTJ?WA=$+AE1tcn zu;>EH_>R4;KPY~^@G4CPX~Ep}!A_oFAC?5xU_W=m+cqq>!PZpEq9tLkD$k>#j@_t& zrzVXKu8DP+Pt=sPnY_z${*GilCbMa-*nF@M>0uTi;`E)aLO-U4;L#8C9KYQ()VGy~I(U$fN? zqsk(R^3GW<9(+H>l|)#EDMPyhO_NlfcaZQJtJ9r|nGj5h3?l!lT#EZ81hDBF%~J^9 z&au(3PTz4DaEUVpve%Ts@gw*npzUuL5hww3hqI`=~Pi%ro3R=k{2aK;{Dlt0Tj^r|&e! zU3zl0Pfw=et>7bJ>`af4-Pcm?u*G~>Olkd30*Zm^Gc5}91bkWnqWFL&=WT^-Wj|mp zVJYseE-qMIX9y}dv(5X-PrN2+vv%NnmD#=*Jnoz-q{Jvazq9a`O-b)<4K5Dr@-@qj zm4|aje55=EYC41dux#3c_NUsYvlHn{~FpIvcM zotI>s0fwWz?{b44LrOA)&qUCjjKO8zjp-tT0Z{EGVKL$$s_l(tg%H0;`C`rx&8sZTY-%jhDDQ#r;QC=Q$F`@Gz7Ak&NartSwyNBy~)gIvm zcy+gypt)4xAnNMYFU1Lov0#j<=!l3~{;n9&Q87Dyq_)h!D-hQ9nn@RHYC)xDx~uv} zM8{I%Em{H{gl$#c-yYS?8WBooy=4|xymE4 z%9o*SD~(LyB0x{O`VqI_hp^g+o+8NxgZE!do43wR69vZmpI?aAD1Qp{g9S#0@Om%Z z(5!d>LR?ccRGVadPGkWC`G<7jUSGuEV)f1~-=-v8N2 zF|aZXyDrp!r|#xB>F=I!#XIhL>fbebxd(+PFH+T=_Yr^nci{h*W3ozlH&#Xyul|#f zpBLh|x3N+c<=amsvx8z(%JZa#_FWa$5{wV{)G*i2lGOeE<*7@S^j8?D&iLmO6wQgg@8%k~TR zNcX-}Ob@HVz=2qf<=_!#?LW_tA+O}cR^>`S6(!V>;(Zwzl%aqHf&H(pl^SHP=c5Ro~->4BX2>bSyzbCX6{3Tw?SdDrq`s7}k7O@GGdm4%pClFKP0* zTQEE^BV`7oA&H+&35sbp!u^cbgljclh?dxweF+`AesT0pSo6oxweqSpo7AhiOVxhe zFN8R#qkgqeQ)aPCevVN2a%_LReM%%Yk%{-=SR-r9&{VJ;3IY z^#Qd^j}J7nynyrg{@yqG!pN8HFUmzq^OwY{{Cr%1iN}_c4!7B;zpd;0T13^>=nL8u zR1>0{Z|;`cC9Kg$Yrc@wdE8uy>5PqV#H*!is1BFmd;UPdAp-SWUc);FC-y3>T#NPV z)*EfiaEK{uLs+{VybY<<-19igc*xrT9X7#>$uM+)|EQ#QsIUT^;_I$i%_&Fu9!UPKyz)MG!L$f6>6UQUGP@P zmN`vD8EFU5+Wt8V`TNW4i>EPkTHyd>UdJWwQ`D;~8sXn^K75WU>3b>KTQX+ukjc`i z>3`8FPCt=(v8;2eU!3W}8678d=u=w9aBZivlR^(y_BGWZYG)x7m2zE<68p$kv`n4N z#iIsi@1(oXg=F79|7@mMj#trv4|^%-+VOz=`U7-K5Qu&I$qjnt4uREgn)F?y=-F|7 zTJ86Y=Ue)U6od-#Bj(p6ZgB!Nkh8>{DrS;JSdYV!an>PF5cI~q|JF>Iz|^Ur+ASZ) zLODfoZXFSPS=aUbl}DDz&!{SzT>~B%iF;!D_`Ba0u&jT6WbUaFf6nlxnT@gkR?mAT zUU6fkoWc=PYX~3an%KLXqOZeWWOAO1mSzp7OSz`1#m1&$+a9Q+y1B)|Q5T%-?(CQ) zO5$I)7C5&FqK*^YYwg;iZrY#9WRjr&99x7KV+4wa%iHyv;cN!+=f@-SVQf(D(gn|j zj>)B}JeIxBGfud&E+&CU`25777vLVT=HUEA#wqu4L|qwumzI_V)%e8-czlkD8-Gl# z7wb@qT4}*p>7+@af<~I}7^jnU_}!dW_k)~NPdk8-`5Gqe$tzt4Ve=^-4VcpW=ilb- z31x#_O8s{}_M7(^-3}zLN(hCU)jE6X5h$Xs2(Ko@)-ZXM1(M9dU$5_T&D= zRYk7Dv}it;_)fm|Aq1v**rfM6O1~h5-{L(tV3l#<-M04h2&&Pf$mJ(%qRHIT{V_z@ zx}5V&;p>e&nxAi&MBI*#jv0?qWUM(m<4
    l8Qh{;0{`EGFEcwJ6+ao_AJ`tJC-* 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

    FwsFqMTaHe3xF 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 literal 40724 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 JPDHLkV1jp=t8)MV diff --git a/snippets/feature-card.mdx b/snippets/feature-card.mdx index 695ddbb6..852a3c6a 100644 --- a/snippets/feature-card.mdx +++ b/snippets/feature-card.mdx @@ -5,22 +5,15 @@ export const FeatureCard = ({ title, description, icon, href }) => { className="not-prose font-normal group ring-0 ring-transparent cursor-pointer block rounded-lg border border-zinc-950/10 dark:border-white/10 bg-white dark:bg-transparent p-5 no-underline hover:border-primary/40 transition-colors" >

    - + + +
    {title} diff --git a/snippets/solution-card.mdx b/snippets/solution-card.mdx index 3c56dc8f..48c6920d 100644 --- a/snippets/solution-card.mdx +++ b/snippets/solution-card.mdx @@ -4,19 +4,17 @@ export const SolutionCard = ({ title, description, icon, href }) => { href={href} className="not-prose font-normal group ring-0 ring-transparent cursor-pointer block rounded-lg border border-zinc-950/10 dark:border-white/10 bg-white dark:bg-transparent p-5 no-underline hover:border-primary/40 transition-colors" > -
    -
    - - -
    +
    + +
    {title} diff --git a/styles.css b/styles.css index f3c9acfe..0acb0cc5 100644 --- a/styles.css +++ b/styles.css @@ -90,10 +90,52 @@ font-display: swap; } +/* Home tab — Untitled UI icon via mask (matches feature cards) */ +a.nav-tabs-item[href="/welcome"] > img { + display: none !important; +} + +a.nav-tabs-item[href="/welcome"]::before { + content: ""; + display: block; + width: 1rem; + height: 1rem; + flex-shrink: 0; + background-color: currentColor; + mask-image: url(/images/icons/home-02.svg); + mask-size: contain; + mask-repeat: no-repeat; + mask-position: center; + -webkit-mask-image: url(/images/icons/home-02.svg); + -webkit-mask-size: contain; + -webkit-mask-repeat: no-repeat; + -webkit-mask-position: center; +} + +a.nav-tabs-item[data-active="true"], +a.nav-tabs-item[data-active="true"].text-gray-800 { + color: #4c48ff !important; + text-shadow: none !important; +} + +.dark a.nav-tabs-item[data-active="true"], +.dark a.nav-tabs-item[data-active="true"].dark\:text-gray-200 { + color: #5B68FF !important; + text-shadow: none !important; +} + +a.nav-tabs-item[href="/welcome"][data-active="true"]::before { + background-color: #4c48ff !important; +} + +.dark a.nav-tabs-item[href="/welcome"][data-active="true"]::before { + background-color: #5B68FF !important; +} + /* ============================================================ Welcome page — align with navbar max-w-8xl + px-12 Mintlify wraps main content in .scroll-mt with peer-based max-w-3xl / max-w-8xl; - force that wrapper full width so .tk-page can use the full 88rem column. + force that wrapper full width so .tk-page can use the full 92rem column. ============================================================ */ .scroll-mt-\[var\(--scroll-mt\)\]:has(.tk-page) { @@ -125,16 +167,22 @@ .tk-page { width: 100%; - max-width: 88rem; /* max-w-8xl — same as #navbar > .max-w-8xl */ + max-width: 92rem; margin-inline: auto; padding: 0 3rem 5rem; /* px-12 — aligns with nav tabs */ box-sizing: border-box; } -@media (max-width: 1023px) { +@media (max-width: 1000px) { + .tk-page { + padding-inline: 40px; + } +} + +@media (max-width: 868px) { .tk-page { - padding-left: 1rem; - padding-right: 1rem; + padding-inline: 20px; + padding-bottom: 2.5rem; } } @@ -147,6 +195,10 @@ .dark .tk-img-light { display: none !important; } .dark .tk-img-dark { display: block !important; } +.dark .tk-page { + --tk-surface: #0B0B0F; +} + /* ============================================================ Asset placeholders ============================================================ */ @@ -180,11 +232,11 @@ .section-divider { border: none; border-top: 1px solid #e5e7eb; - margin: 3rem 0; + margin: 0; } .dark .section-divider { - border-top-color: #374151; + border-top-color: rgba(255, 255, 255, 0.06); } /* ============================================================ @@ -194,15 +246,19 @@ .tk-hero { position: relative; overflow: hidden; - padding: 4rem 0 3rem; + padding: 2.5rem 0 3rem; min-height: 360px; display: flex; - align-items: center; + align-items: stretch; + justify-content: flex-start; + gap: 2.5rem; } .tk-hero-content { - width: 46%; - flex-shrink: 0; + flex: 0 1 720px; + max-width: 62%; + min-width: 0; + align-self: flex-start; position: relative; z-index: 2; } @@ -217,6 +273,7 @@ letter-spacing: -4.1px; font-synthesis: none; margin: 0 0 1.25rem; + max-width: 720px; } .dark .tk-hero-headline { @@ -224,24 +281,44 @@ } .tk-hero-body { - color: #6b7280; - font-size: 1rem; - line-height: 1.75; + color: #414146; + font-family: Inter, sans-serif; + font-size: 18px; + font-style: normal; + font-weight: 400; + line-height: 28px; + font-feature-settings: 'ss01' on, 'ss03' on; margin: 0 0 1.5rem; - max-width: 500px; + max-width: 720px; } .dark .tk-hero-body { - color: #9ca3af; + color: #a1a1aa; +} + +/* Shared description / body copy (welcome page, not hero) */ +.tk-build-body, +.tk-whitepaper-text { + color: #414146; + font-family: Inter, sans-serif; + font-size: 16px; + font-style: normal; + font-weight: 400; + line-height: 28px; +} + +.dark .tk-build-body, +.dark .tk-whitepaper-text { + color: #a1a1aa; } .tk-search-bar { display: flex; align-items: center; gap: 12px; - border-radius: 10px; - border: 1px solid #e5e7eb; - background: #f9fafb; + border-radius: 12px; + border: 1px solid var(--Black-20, rgba(0, 0, 0, 0.20)); + background: var(--Black-4, rgba(0, 0, 0, 0.04)); padding: 12px 16px; cursor: pointer; max-width: 500px; @@ -249,45 +326,78 @@ } .tk-search-bar:hover { - border-color: #d1d5db; - background: #f3f4f6; + border-color: rgba(0, 0, 0, 0.28); + background: rgba(0, 0, 0, 0.06); +} + +.tk-search-icon { + flex-shrink: 0; + color: #737277; +} + +.tk-search-placeholder { + flex: 1; + color: #737277; + text-align: left; + font-family: Inter, sans-serif; + font-size: 16px; + font-style: normal; + font-weight: 400; + line-height: 24px; +} + +.dark .tk-search-icon, +.dark .tk-search-placeholder { + color: #a1a1aa; } .dark .tk-search-bar { - border-color: #374151; - background: #111827; + border-color: rgba(255, 255, 255, 0.20); + background: rgba(255, 255, 255, 0.04); } .dark .tk-search-bar:hover { - border-color: #4b5563; - background: #1f2937; + border-color: rgba(255, 255, 255, 0.28); + background: rgba(255, 255, 255, 0.06); } .tk-search-kbd { + color: #737277; + text-align: center; + font-family: "SF Pro", -apple-system, BlinkMacSystemFont, sans-serif; font-size: 12px; - color: #6b7280; - border: 1px solid #e5e7eb; - border-radius: 4px; - padding: 2px 8px; - background: white; + font-style: normal; + font-weight: 590; + line-height: 16px; + border: none; + border-radius: 0; + padding: 0; + background: transparent; } .dark .tk-search-kbd { - color: #9ca3af; - border-color: #374151; - background: #1f2937; + color: #a1a1aa; + background: transparent; } .tk-hero-illustration { - position: absolute; - right: -2rem; - top: 50%; - transform: translateY(-50%); + position: relative; + flex: 0 0 657px; + width: 657px; + min-height: 329px; + display: flex; + align-items: center; + justify-content: flex-start; z-index: 1; pointer-events: none; user-select: none; } +/* Grid is a direct child of .tk-hero — keep it out of flex flow */ +.tk-hero > .tk-hero-grid { + flex: none; +} + /* Force a fixed pixel width — this locks the height; illustration never shrinks vertically */ .tk-hero-illustration > * { pointer-events: none; @@ -296,29 +406,218 @@ .tk-hero-grid { position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - width: 130%; + top: 0; + right: 0; + width: 640px; + height: 512px; + z-index: 0; pointer-events: none; - opacity: 0.6; +} + +.tk-hero-grid img { + display: block; + width: 640px; + height: 512px; } .tk-hero-img { + position: relative; display: block; - width: 580px; /* fixed width locks height at ~290px regardless of viewport */ + width: 657px; height: auto; + flex-shrink: 0; pointer-events: none; } -@media (max-width: 768px) { - .tk-hero { padding: 2.5rem 0 2rem; min-height: 280px; } - .tk-hero-content { width: 90%; } +/* Hero tablet — Figma 169:4781 (869–1440px): copy left, graphic right, crop at viewport */ +@media (max-width: 1440px) and (min-width: 869px) { + .tk-hero { + position: relative; + flex-direction: row; + align-items: flex-start; + justify-content: flex-start; + gap: 1rem; + width: 100vw; + max-width: 100vw; + margin-left: calc(50% - 50vw); + padding: 2.3125rem 0 2.5rem 3rem; + min-height: auto; + overflow: hidden; + box-sizing: border-box; + } + + .tk-hero-grid { + top: -3.3125rem; + right: 0; + left: auto; + width: 640px; + height: 512px; + } + + .tk-hero-grid img { + width: 640px; + height: 512px; + max-height: none; + object-fit: none; + } + + .tk-hero-content { + display: flex; + flex-direction: column; + gap: 24px; + flex: 0 0 612px; + max-width: 612px; + width: 612px; + align-self: flex-start; + position: relative; + z-index: 2; + isolation: isolate; + } + + .tk-hero-content::before { + content: ""; + position: absolute; + z-index: -1; + top: 0; + right: 0; + bottom: 0; + left: 0; + width: 100%; + pointer-events: none; + background: linear-gradient( + 90deg, + #ffffff 0%, + #ffffff 75%, + rgba(255, 255, 255, 0) 100% + ); + } + + .dark .tk-hero-content::before { + background: linear-gradient( + 90deg, + var(--tk-surface, #0B0B0F) 0%, + var(--tk-surface, #0B0B0F) 75%, + rgba(11, 11, 15, 0) 100% + ); + } + + .tk-hero-headline { + font-size: 74px; + letter-spacing: -3.7px; + line-height: 0.95; + margin: 0; + max-width: none; + } + + .tk-hero-body { + margin: 0; + max-width: none; + } + + .tk-search-bar { + max-width: 437px; + } + + .tk-hero-illustration { + position: absolute; + top: 2.3125rem; + right: 0; + display: block; + flex: none; + width: 657px; + min-width: 657px; + min-height: 328px; + margin: 0; + overflow: visible; + z-index: 1; + } + + .tk-hero-img { + display: block; + width: 657px; + max-width: none; + height: auto; + } +} + +@media (max-width: 1190px) and (min-width: 869px) { + .tk-hero-illustration { + right: -100px; + } +} + +@media (max-width: 1000px) and (min-width: 869px) { + .tk-hero { + padding-left: 40px; + } +} + +/* Tablet — Figma Responsive frame (1000px) */ +@media (max-width: 1000px) { + .tk-solutions-grid { + gap: 0; + } + + .tk-whitepaper-inner { + align-items: flex-start; + } +} + + +/* Mobile — Figma Responsive 169:4327 (≤868px) */ +@media (max-width: 868px) { + .tk-hero { + flex-direction: column; + gap: 0; + padding: 2.25rem 0 2.5rem; + min-height: auto; + overflow: visible; + } + + .tk-hero-grid { + display: none; + } + + .tk-hero-illustration { + display: none; + } + + .tk-hero-content { + display: flex; + flex-direction: column; + gap: 24px; + flex: 1 1 auto; + max-width: 100%; + width: 100%; + isolation: auto; + } + + .tk-hero-content::before { + display: none; + } + .tk-hero-headline { - font-size: 2.25rem; - letter-spacing: -0.05em; + font-size: 44px; + letter-spacing: -2.2px; + line-height: 0.95; + margin: 0; + } + + .tk-hero-body { + margin: 0; + } + + .tk-search-bar { + max-width: none; + width: 100%; + } + + .tk-build, + .tk-solutions-section, + .tk-features-section, + .tk-whitepaper-section { + margin: 2.5rem 0; } - /* Illustration stays absolutely positioned — shrinks behind text naturally */ } /* ============================================================ @@ -326,10 +625,13 @@ ============================================================ */ .tk-section-heading { - font-size: 1.5rem; + font-family: Inter, sans-serif; + font-size: 30px; font-weight: 700; + letter-spacing: -0.75px; + line-height: 1.2; margin: 0 0 1.25rem; - color: #0d0d0e; + color: #1a191e; } .dark .tk-section-heading { color: #f9fafb; } @@ -338,35 +640,122 @@ Build with Turnkey ============================================================ */ +/* Build with Turnkey — shared */ .tk-build { display: grid; - grid-template-columns: 1fr 1fr 1fr; - gap: 2.5rem; + grid-template-columns: 1fr; + gap: 28px; align-items: start; + margin: 52px 0; +} + +.tk-build-intro { + display: contents; +} + +.tk-build-copy { + display: flex; + flex-direction: column; + gap: 28px; + grid-column: 1; + grid-row: 1; +} + +.tk-build-visual { + display: flex; + flex-direction: row; + align-items: center; + justify-content: flex-start; + gap: 40px; + grid-column: 1; + grid-row: 2; + width: 100%; + justify-self: start; +} + +.tk-build-links { + grid-column: 1; + grid-row: 3; +} + +.tk-build-selectors { + flex: 1; + min-width: 0; + max-width: none; + justify-content: flex-start; +} + +.tk-selector-list { + width: 100%; + max-width: 100%; +} + +/* Desktop (wide only) — intro | cube + selectors */ +@media (min-width: 1281px) { + .tk-build { + grid-template-columns: minmax(0, 1fr) auto; + gap: 40px; + align-items: center; + } + + .tk-build-intro { + display: flex; + flex-direction: column; + gap: 28px; + min-width: 0; + } + + .tk-build-copy { + grid-column: auto; + grid-row: auto; + } + + .tk-build-visual { + grid-column: auto; + grid-row: auto; + flex-shrink: 0; + width: auto; + justify-self: auto; + } + + .tk-build-links { + grid-column: auto; + grid-row: auto; + } + + .tk-build-selectors { + flex: none; + min-width: auto; + max-width: 100%; + justify-content: flex-start; + } + + .tk-selector-list { + width: max-content; + max-width: 100%; + } } .tk-build-heading { - font-size: 1.5rem; + font-family: Inter, sans-serif; + font-size: 30px; font-weight: 700; - margin: 0 0 0.75rem; - color: #0d0d0e; + letter-spacing: -0.75px; + line-height: normal; + margin: 0; + color: #1a191e; } .dark .tk-build-heading { color: #f9fafb; } .tk-build-body { - color: #6b7280; - font-size: 0.9375rem; - line-height: 1.7; - margin: 0 0 1.25rem; + margin: 0; } -.dark .tk-build-body { color: #9ca3af; } - .tk-build-links { display: flex; flex-direction: row; - gap: 1.5rem; + gap: 40px; flex-wrap: wrap; } @@ -381,22 +770,26 @@ transition: opacity 0.15s; } -.dark .tk-build-link { color: #818cf8; } +.tk-build-link-icon { + flex-shrink: 0; +} + +.dark .tk-build-link { color: #5B68FF; } .tk-build-link:hover { opacity: 0.75; } /* Cube */ -.tk-cube-illustration { - display: flex; - align-items: center; - justify-content: center; +.tk-build-cube { + width: 277px; + flex-shrink: 0; } .tk-cube-wrapper { position: relative; - width: 100%; - max-width: 278px; + width: 277px; height: 256px; - margin: 0 auto; + margin: 0; + pointer-events: none; + user-select: none; } .tk-plane-img { @@ -406,401 +799,1069 @@ width: 100%; height: 100%; object-fit: contain; - transition: opacity 0.2s ease; + opacity: 0; + visibility: hidden; + transition: none; + pointer-events: none; + cursor: default; +} + +/* Selected row → swap plane (instant, no crossfade) */ +.tk-build[data-selected="a"] .tk-plane-img[data-plane="a"], +.tk-build[data-selected="b"] .tk-plane-img[data-plane="b"], +.tk-build[data-selected="c"] .tk-plane-img[data-plane="c"] { + opacity: 1; + visibility: visible; } -/* Default: plane A (Solutions layer) visible */ -.tk-plane-img[data-plane="a"] { opacity: 1; } -.tk-plane-img[data-plane="b"] { opacity: 0; } -.tk-plane-img[data-plane="c"] { opacity: 0; } - -/* Cube overlay hover → swap plane */ -.tk-build:has(.tk-plane-overlay-b:hover) .tk-plane-img[data-plane="a"] { opacity: 0; } -.tk-build:has(.tk-plane-overlay-b:hover) .tk-plane-img[data-plane="b"] { opacity: 1; } -.tk-build:has(.tk-plane-overlay-c:hover) .tk-plane-img[data-plane="a"] { opacity: 0; } -.tk-build:has(.tk-plane-overlay-c:hover) .tk-plane-img[data-plane="c"] { opacity: 1; } - -/* Selector row hover → swap plane */ -.tk-build:has(#tk-row-b:hover) .tk-plane-img[data-plane="a"] { opacity: 0; } -.tk-build:has(#tk-row-b:hover) .tk-plane-img[data-plane="b"] { opacity: 1; } -.tk-build:has(#tk-row-c:hover) .tk-plane-img[data-plane="a"] { opacity: 0; } -.tk-build:has(#tk-row-c:hover) .tk-plane-img[data-plane="c"] { opacity: 1; } - -/* Cube overlay hover → highlight selector rows */ -.tk-build:has(.tk-plane-overlay-a:hover) #tk-row-a { background: rgba(76, 72, 255, 0.06); } -.tk-build:has(.tk-plane-overlay-a:hover) #tk-row-a .tk-selector-label { color: #4C48FF; } -.tk-build:has(.tk-plane-overlay-a:hover) #tk-row-a .tk-selector-chevron { color: #4C48FF; } -.tk-build:has(.tk-plane-overlay-a:hover) #tk-row-b, -.tk-build:has(.tk-plane-overlay-a:hover) #tk-row-c { opacity: 0.4; } - -.tk-build:has(.tk-plane-overlay-b:hover) #tk-row-b { background: rgba(76, 72, 255, 0.06); } -.tk-build:has(.tk-plane-overlay-b:hover) #tk-row-b .tk-selector-label { color: #4C48FF; } -.tk-build:has(.tk-plane-overlay-b:hover) #tk-row-b .tk-selector-chevron { color: #4C48FF; } -.tk-build:has(.tk-plane-overlay-b:hover) #tk-row-a, -.tk-build:has(.tk-plane-overlay-b:hover) #tk-row-c { opacity: 0.4; } - -.tk-build:has(.tk-plane-overlay-c:hover) #tk-row-c { background: rgba(76, 72, 255, 0.06); } -.tk-build:has(.tk-plane-overlay-c:hover) #tk-row-c .tk-selector-label { color: #4C48FF; } -.tk-build:has(.tk-plane-overlay-c:hover) #tk-row-c .tk-selector-chevron { color: #4C48FF; } -.tk-build:has(.tk-plane-overlay-c:hover) #tk-row-a, -.tk-build:has(.tk-plane-overlay-c:hover) #tk-row-b { opacity: 0.4; } - -#tk-row-a, #tk-row-b, #tk-row-c { - transition: opacity 0.15s, background 0.15s; -} - -.tk-plane-overlay-a, -.tk-plane-overlay-b, -.tk-plane-overlay-c { +/* Selectors panel — Figma 169:4751 */ +.tk-build-selectors { + display: flex; + flex-direction: row; + align-items: center; + gap: 16px; + width: max-content; + max-width: 100%; + flex-shrink: 0; + overflow: visible; +} + +.tk-build-connectors { + flex-shrink: 0; + display: flex; + flex-direction: column; + gap: 8px; + width: 40px; + margin-left: -24px; + pointer-events: none; +} + +.tk-connector-line { + position: relative; + display: block; + width: 40px; + height: 40px; + flex-shrink: 0; +} + +.tk-connector-line::after { + content: ""; position: absolute; left: 0; right: 0; - cursor: pointer; - z-index: 1; + top: 50%; + height: 1px; + background: rgba(0, 0, 0, 0.2); + transform: translateY(-50%); + transition: background 0.15s; } -.tk-plane-overlay-a { top: 0; height: 38%; } -.tk-plane-overlay-b { top: 25%; height: 38%; } -.tk-plane-overlay-c { top: 57%; height: 43%; } +.dark .tk-connector-line::after { + background: rgba(255, 255, 255, 0.2); +} -/* Selector card — no outer border, just dividers between rows */ -.tk-selector-card { - border: none; - border-radius: 0; - overflow: visible; +.tk-build[data-selected="a"] .tk-connector-line--a::after, +.tk-build[data-selected="b"] .tk-connector-line--b::after, +.tk-build[data-selected="c"] .tk-connector-line--c::after { + background: #4C48FF; +} + +.dark .tk-build[data-selected="a"] .tk-connector-line--a::after, +.dark .tk-build[data-selected="b"] .tk-connector-line--b::after, +.dark .tk-build[data-selected="c"] .tk-connector-line--c::after { + background: #5B68FF; +} + +.tk-selector-list { + position: relative; + flex-shrink: 0; + display: grid; + grid-template-columns: 1fr; + gap: 8px; + width: max-content; + max-width: 100%; } .tk-selector-row { + position: relative; display: flex; align-items: center; gap: 12px; - padding: 12px 14px; + box-sizing: border-box; + width: 100%; + min-height: 40px; + padding: 8px 36px 8px 8px; + white-space: nowrap; text-decoration: none; color: inherit; - transition: background 0.15s, opacity 0.15s; border-radius: 8px; - border-bottom: 1px solid #e5e7eb; + border: none; + transition: background 0.15s, color 0.15s; } -.tk-selector-row:last-child { border-bottom: none; } -.dark .tk-selector-row { border-bottom-color: #374151; } +.tk-build[data-selected="a"] #tk-row-a, +.tk-build[data-selected="b"] #tk-row-b, +.tk-build[data-selected="c"] #tk-row-c { + background: rgba(76, 72, 255, 0.12); +} -.tk-selector-card:hover .tk-selector-row:not(:hover) { opacity: 0.4; } -.tk-selector-row:hover { background: rgba(76, 72, 255, 0.06); border-radius: 8px; } -.dark .tk-selector-row:hover { background: rgba(76, 72, 255, 0.1); } -.tk-selector-row:hover .tk-selector-label { color: #4C48FF; } -.tk-selector-row:hover .tk-selector-icon { background: rgba(76, 72, 255, 0.1); color: #4C48FF; } +.dark .tk-build[data-selected="a"] #tk-row-a, +.dark .tk-build[data-selected="b"] #tk-row-b, +.dark .tk-build[data-selected="c"] #tk-row-c { + background: rgba(91, 104, 255, 0.12); +} .tk-selector-icon { - width: 36px; - height: 36px; - border-radius: 8px; - background: #f3f4f6; + width: 24px; + height: 24px; display: flex; align-items: center; justify-content: center; flex-shrink: 0; - color: #6b7280; - transition: background 0.15s, color 0.15s; + color: #28282c; + opacity: 0.5; + background: none; + border-radius: 0; + transition: color 0.15s, opacity 0.15s; } -.dark .tk-selector-icon { background: #1f2937; color: #9ca3af; } +.tk-selector-icon svg { + width: 24px; + height: 24px; +} -.tk-selector-text { - flex: 1; - min-width: 0; - display: flex; - flex-direction: column; +.tk-selector-icon svg path, +.tk-selector-icon svg g path { + stroke-width: 1.5; } +.dark .tk-selector-icon { color: #d1d5db; } + .tk-selector-label { + font-family: Inter, sans-serif; + font-size: 14px; font-weight: 600; - font-size: 0.875rem; - color: #111827; + line-height: normal; + color: #28282c; + flex-shrink: 0; transition: color 0.15s; } .dark .tk-selector-label { color: #f3f4f6; } -.tk-selector-desc { - font-size: 0.75rem; - color: #9ca3af; - margin-top: 2px; +.tk-build[data-selected="a"] #tk-row-a .tk-selector-label, +.tk-build[data-selected="b"] #tk-row-b .tk-selector-label, +.tk-build[data-selected="c"] #tk-row-c .tk-selector-label { + color: #4C48FF; } -.tk-selector-chevron { - margin-left: auto; - flex-shrink: 0; - color: #d1d5db; - transition: color 0.15s; +.dark .tk-build[data-selected="a"] #tk-row-a .tk-selector-label, +.dark .tk-build[data-selected="b"] #tk-row-b .tk-selector-label, +.dark .tk-build[data-selected="c"] #tk-row-c .tk-selector-label { + color: #5B68FF; } -.tk-selector-row:hover .tk-selector-chevron { color: #4C48FF; } - -@media (max-width: 768px) { - .tk-build { grid-template-columns: 1fr; gap: 1.5rem; } +.tk-build[data-selected="a"] #tk-row-a .tk-selector-icon, +.tk-build[data-selected="b"] #tk-row-b .tk-selector-icon, +.tk-build[data-selected="c"] #tk-row-c .tk-selector-icon { + opacity: 1; + color: #4C48FF; +} + +.dark .tk-build[data-selected="a"] #tk-row-a .tk-selector-icon, +.dark .tk-build[data-selected="b"] #tk-row-b .tk-selector-icon, +.dark .tk-build[data-selected="c"] #tk-row-c .tk-selector-icon { + color: #5B68FF; +} + +.tk-selector-desc { + font-family: Inter, sans-serif; + font-size: 14px; + font-weight: 400; + line-height: 1.48; + color: #505454; + flex-shrink: 1; + min-width: 0; +} + +.dark .tk-selector-desc { color: #9ca3af; } + +.tk-selector-chevron { + position: absolute; + right: 8px; + top: 50%; + display: flex; + align-items: center; + justify-content: center; + width: 20px; + height: 20px; + transform: translateY(-50%); + opacity: 0; + color: #4C48FF; + pointer-events: none; + transition: opacity 0.2s ease; +} + +.dark .tk-selector-chevron { + color: #5B68FF; +} + +.tk-selector-chevron svg { + width: 20px; + height: 20px; +} + +.tk-selector-chevron svg path { + stroke-width: 1.5; +} + +.tk-build[data-selected="a"] #tk-row-a .tk-selector-chevron, +.tk-build[data-selected="b"] #tk-row-b .tk-selector-chevron, +.tk-build[data-selected="c"] #tk-row-c .tk-selector-chevron, +.tk-selector-row:hover .tk-selector-chevron { + opacity: 1; +} + +@media (max-width: 868px) { + .tk-build { + grid-template-columns: 1fr; + align-items: start; + gap: 28px; + } + + .tk-build-intro { + display: contents; + } + + .tk-build-copy { + grid-column: 1 / -1; + grid-row: 1; + } + + .tk-build-links { + grid-column: 1 / -1; + grid-row: 2; + gap: 40px; + } + + .tk-build-visual { + grid-column: 1 / -1; + grid-row: 3; + flex-direction: column; + gap: 20px; + width: 100%; + align-items: center; + padding-top: 8px; + } + + .tk-build-cube { + width: 100%; + max-width: 195px; + margin: 0 auto; + } + + .tk-cube-wrapper { + width: 195px; + height: 180px; + margin: 0 auto; + } + + .tk-build-selectors { + width: 100%; + max-width: 100%; + justify-content: stretch; + } + + .tk-build-connectors { + display: none; + } + + .tk-selector-list { + width: 100%; + max-width: 100%; + gap: 0; + } + + .tk-selector-row { + display: grid; + grid-template-columns: 24px minmax(0, 1fr) 20px; + grid-template-rows: auto auto; + column-gap: 12px; + row-gap: 0; + align-items: center; + width: 100%; + max-width: 100%; + min-height: 54px; + padding: 8px; + white-space: normal; + background: transparent !important; + border-radius: 0; + } + + .tk-selector-row + .tk-selector-row { + border-top: 1px solid rgba(0, 0, 0, 0.12); + margin-top: 4px; + } + + .dark .tk-selector-row + .tk-selector-row { + border-top-color: rgba(255, 255, 255, 0.06); + } + + .tk-selector-icon { + grid-column: 1; + grid-row: 1 / 3; + align-self: center; + opacity: 1; + color: #4C48FF; + } + + .dark .tk-selector-icon { + color: #5B68FF; + } + + .tk-selector-label { + grid-column: 2; + grid-row: 1; + font-weight: 500; + color: #4C48FF; + } + + .dark .tk-selector-label { + color: #5B68FF; + } + + .tk-selector-desc { + grid-column: 2; + grid-row: 2; + white-space: normal; + overflow: visible; + text-overflow: unset; + } + + .tk-selector-chevron { + grid-column: 3; + grid-row: 1 / 3; + position: static; + transform: none; + opacity: 1; + } } /* ============================================================ Solution cards ============================================================ */ -.tk-solutions-grid { - display: grid; - grid-template-columns: repeat(2, 1fr); - gap: 1rem 1rem; - row-gap: 1.5rem; +.tk-solutions-section { + display: flex; + flex-direction: column; + gap: 28px; + margin: 52px 0; } -@media (max-width: 768px) { - .tk-solutions-grid { grid-template-columns: 1fr; } +.tk-solutions-section .tk-solution-card { + display: grid !important; } -.tk-solution-card { +.tk-solutions-section .tk-section-heading { + margin: 0; +} + +.tk-solutions-grid { display: flex; - gap: 1.25rem; - padding: 1.25rem; - background: #f9fafb; - border: 1px solid #f3f4f6; - border-radius: 12px; - align-items: flex-start; - transition: border-color 0.15s, background 0.15s; + flex-direction: column; + gap: 24px; + width: 100%; +} + +.tk-solution-card { + display: grid; + grid-template-columns: 120px minmax(0, 1fr); + grid-template-areas: + "thumb title" + "thumb desc" + "thumb links"; + column-gap: 40px; + row-gap: 8px; + align-items: start; + box-sizing: border-box; + width: 100%; + padding: 20px 48px; + background: rgba(0, 0, 0, 0.02); + border: 1px solid rgba(13, 12, 17, 0.1); + border-radius: 16px; } -.tk-solution-card:hover { border-color: #e0e0fe; background: #f5f5ff; } -.dark .tk-solution-card { background: #111827; border-color: #1f2937; } -.dark .tk-solution-card:hover { border-color: #4C48FF40; } +@media (min-width: 1001px) { + .dark .tk-solution-card { + background: rgba(255, 255, 255, 0.02); + border-color: rgba(255, 255, 255, 0.12); + } +} .tk-solution-thumbnail { + grid-area: thumb; + width: 120px; + height: 120px; flex-shrink: 0; - width: 100px; - height: 100px; } .tk-solution-thumbnail img { + display: block; width: 100%; height: 100%; - object-fit: cover; - border-radius: 8px; - display: block; + object-fit: contain; +} + +.tk-solution-card > .tk-solution-title, +.tk-solution-card > .tk-solution-title-row { + grid-area: title; + min-width: 0; } -.tk-solution-content { flex: 1; min-width: 0; } +.tk-solution-title-row { + display: inline-flex; + align-items: center; + gap: 12px; + flex-wrap: nowrap; + width: fit-content; + max-width: 100%; +} + +.tk-solution-title-row .tk-solution-title { + grid-area: unset; + width: auto; + max-width: none; +} + +.tk-solution-title-long { + display: inline; +} + +.tk-solution-title-short { + display: none; +} .tk-solution-title { - font-size: 1rem; - font-weight: 700; - margin: 0 0 0.4rem; - color: #0d0d0e; + font-family: Inter, sans-serif; + font-size: 24px; + font-weight: 600; + letter-spacing: -0.6px; + line-height: 32px; + margin: 0; + color: #111827; text-decoration: none; - display: block; - transition: color 0.15s; } .dark .tk-solution-title { color: #f9fafb; } -.tk-solution-title:hover { color: #4C48FF; } -.dark .tk-solution-title:hover { color: #818cf8; } .tk-solution-desc { - font-size: 0.875rem; - color: #6b7280; - line-height: 1.6; - margin: 0 0 0.75rem; + grid-area: desc; + margin: 0; + font-family: Inter, sans-serif; + font-size: 14px; + font-weight: 400; + line-height: 1.48; + color: #414146; + min-width: 0; } -.dark .tk-solution-desc { color: #9ca3af; } +.dark .tk-solution-desc { color: #a1a1aa; } .tk-solution-links { + grid-area: links; display: flex; - flex-direction: row; flex-wrap: wrap; - gap: 2px 14px; - align-items: center; + gap: 16px 28px; + align-items: flex-start; + min-width: 0; } .tk-solution-link { text-decoration: none; - font-size: 0.8125rem; + font-family: Inter, sans-serif; + font-size: 14px; font-weight: 500; color: #4C48FF; transition: opacity 0.15s; - padding: 1px 0; + white-space: nowrap; +} + +/* Solutions list — Figma 169:4651 (≤1000px) */ +@media (max-width: 1000px) { + .tk-solution-title-long { + display: none; + } + + .tk-solution-title-short { + display: inline; + } +} + +@media (max-width: 1000px) and (min-width: 869px) { + .tk-solutions-grid { + gap: 0; + } + + .tk-solution-card { + grid-template-columns: 220px minmax(0, 1fr) 100px; + grid-template-areas: + "title desc thumb" + "title links thumb"; + column-gap: 20px; + row-gap: 20px; + padding: 0; + background: transparent; + border: none; + border-radius: 0; + } + + .dark .tk-solution-card { + background: transparent; + border-color: transparent; + } + + .tk-solution-card + .tk-solution-card { + border-top: 1px solid rgba(0, 0, 0, 0.12); + margin-top: 24px; + padding-top: 24px; + } + + .dark .tk-solution-card + .tk-solution-card { + border-top-color: rgba(255, 255, 255, 0.06); + } + + .tk-solution-thumbnail { + width: 100px; + height: 100px; + margin-left: 20px; + align-self: start; + } + + .tk-solution-card > .tk-solution-title, + .tk-solution-card > .tk-solution-title-row { + font-size: 20px; + line-height: normal; + width: 220px; + max-width: 220px; + } + + .tk-solution-title-row { + width: fit-content; + max-width: 220px; + } + + .tk-solution-title-row .tk-solution-title { + font-size: 20px; + line-height: normal; + } + + .tk-solution-links { + flex-direction: column; + gap: 16px; + align-items: flex-start; + } + + .tk-solution-link { + white-space: nowrap; + } +} + +@media (max-width: 868px) { + .tk-solution-title-long { + display: inline; + } + + .tk-solution-title-short { + display: none; + } + + .tk-solutions-grid { + gap: 0; + } + + .tk-solution-card { + grid-template-columns: minmax(0, 1fr) 100px; + grid-template-areas: + "title thumb" + "desc desc" + "links links"; + column-gap: 40px; + row-gap: 20px; + padding: 0; + background: transparent; + border: none; + border-radius: 0; + } + + .dark .tk-solution-card { + background: transparent; + border-color: transparent; + } + + .tk-solution-card + .tk-solution-card { + border-top: 1px solid rgba(0, 0, 0, 0.12); + margin-top: 24px; + padding-top: 24px; + } + + .dark .tk-solution-card + .tk-solution-card { + border-top-color: rgba(255, 255, 255, 0.06); + } + + .tk-solution-thumbnail { + grid-area: thumb; + width: 100px; + height: 100px; + margin-left: 0; + justify-self: end; + align-self: start; + } + + .tk-solution-card > .tk-solution-title, + .tk-solution-card > .tk-solution-title-row { + font-size: 20px; + line-height: normal; + width: auto; + max-width: none; + } + + .tk-solution-title-row { + max-width: none; + flex-wrap: wrap; + } + + .tk-solution-links { + flex-direction: column; + gap: 12px; + align-items: flex-start; + } + + .tk-solution-link { + white-space: normal; + } } .tk-solution-link:hover { opacity: 0.75; color: #4C48FF; } -.dark .tk-solution-link { color: #818cf8; } +.dark .tk-solution-link { color: #5B68FF; } .dark .tk-solution-link:hover { opacity: 0.75; } /* ============================================================ Features section ============================================================ */ +.tk-features-section { + display: flex; + flex-direction: column; + gap: 28px; + margin: 52px 0; +} + +.tk-features-section .tk-section-heading { + margin: 0; +} + .tk-features-grid { display: grid; grid-template-columns: repeat(3, 1fr); - gap: 1rem; + gap: 40px; + width: 100%; } -@media (max-width: 768px) { .tk-features-grid { grid-template-columns: 1fr; } } -@media (min-width: 769px) and (max-width: 1024px) { .tk-features-grid { grid-template-columns: repeat(2, 1fr); } } - -.tk-feature-list { - border-radius: 0; - overflow: visible; +.tk-feature-column { + display: flex; + flex-direction: column; + gap: 12px; + min-width: 0; } -.tk-feature-list-heading { - font-size: 0.9375rem; +.tk-feature-column-heading { + font-family: Inter, sans-serif; + font-size: 18px; font-weight: 600; + line-height: 32px; color: #111827; - padding: 0 0 0.75rem; - margin: 0 0 0; - border-bottom: 1px solid #e5e7eb; + margin: 0; } -.dark .tk-feature-list-heading { color: #f9fafb; border-bottom-color: #374151; } +.dark .tk-feature-column-heading { + color: #f9fafb; +} -.tk-feature-heading { - font-size: 0.75rem; - font-weight: 600; - color: #9ca3af; - text-transform: uppercase; - letter-spacing: 0.07em; - padding: 0.875rem 1rem 0.75rem; - border-bottom: 1px solid #e5e7eb; +.tk-feature-items { + display: flex; + flex-direction: column; + gap: 8px; + width: 100%; } -.dark .tk-feature-heading { color: #6b7280; border-bottom-color: #374151; } +.tk-feature-divider { + border: none; + height: 1px; + margin: 0; + background: rgba(0, 0, 0, 0.12); +} + +.dark .tk-feature-divider { + background: rgba(255, 255, 255, 0.06); +} .tk-feature-row { display: flex; align-items: center; - gap: 10px; - padding: 9px 14px; + gap: 12px; + padding: 4px 0; text-decoration: none; - color: #374151; - font-size: 0.875rem; - border-bottom: 1px solid #f3f4f6; - transition: background 0.12s; + color: #000000; + font-family: Inter, sans-serif; + font-size: 16px; + font-weight: 500; + line-height: normal; + transition: color 0.12s ease; } -.tk-feature-row:last-child { border-bottom: none; } -.dark .tk-feature-row { color: #d1d5db; border-bottom-color: #1f2937; } -.tk-feature-row:hover { - background: rgba(76, 72, 255, 0.06); - color: #4C48FF; +.dark .tk-feature-row { + color: #f3f4f6; } -.tk-feature-row:hover .tk-feature-icon-circle { - background: rgba(76, 72, 255, 0.1); + +.tk-feature-row:hover, +.tk-feature-row:focus-visible { color: #4C48FF; } -.dark .tk-feature-row:hover { - background: rgba(76, 72, 255, 0.12); - color: #818cf8; + +.dark .tk-feature-row:hover, +.dark .tk-feature-row:focus-visible { + color: #5B68FF; } -.dark .tk-feature-row:hover .tk-feature-icon-circle { - background: rgba(129, 140, 248, 0.15); - color: #818cf8; + +.tk-feature-icon-circle { + display: flex; + align-items: center; + justify-content: center; + flex-shrink: 0; + padding: 6px; + border-radius: 9999px; + background: rgba(0, 0, 0, 0.04); + border: 1px solid rgba(0, 0, 0, 0.12); + color: #000000; + transition: background 0.12s ease, border-color 0.12s ease, color 0.12s ease; } -.tk-feature-row--highlighted { color: #4C48FF; } -.dark .tk-feature-row--highlighted { color: #818cf8; } +.dark .tk-feature-icon-circle { + background: rgba(255, 255, 255, 0.04); + border-color: rgba(255, 255, 255, 0.12); + color: #f3f4f6; +} -.tk-feature-row--highlighted .tk-feature-icon-circle { - background: rgba(76, 72, 255, 0.1); +.tk-feature-row:hover .tk-feature-icon-circle, +.tk-feature-row:focus-visible .tk-feature-icon-circle { + background: #f1f3ff; + border-color: #c9ceff; color: #4C48FF; } -.dark .tk-feature-row--highlighted .tk-feature-icon-circle { - background: rgba(129, 140, 248, 0.15); - color: #818cf8; +.dark .tk-feature-row:hover .tk-feature-icon-circle, +.dark .tk-feature-row:focus-visible .tk-feature-icon-circle { + background: rgba(91, 104, 255, 0.15); + border-color: rgba(91, 104, 255, 0.35); + color: #5B68FF; } -.tk-feature-icon-circle { - width: 28px; - height: 28px; - border-radius: 50%; - background: #f3f4f6; - display: flex; - align-items: center; - justify-content: center; +.tk-feature-icon-circle svg, +.tk-feature-icon-circle .tk-feature-icon-img { + width: 20px; + height: 20px; + display: block; flex-shrink: 0; - color: #6b7280; + opacity: 0.5; + transition: opacity 0.12s ease; +} + +.tk-feature-row:hover .tk-feature-icon-circle svg, +.tk-feature-row:focus-visible .tk-feature-icon-circle svg, +.tk-feature-row:hover .tk-feature-icon-circle .tk-feature-icon-img, +.tk-feature-row:focus-visible .tk-feature-icon-circle .tk-feature-icon-img { + opacity: 1; +} + +.tk-feature-icon-img { + background-color: currentColor; + mask-repeat: no-repeat; + mask-position: center; + mask-size: contain; + -webkit-mask-repeat: no-repeat; + -webkit-mask-position: center; + -webkit-mask-size: contain; +} + +.tk-feature-icon-img--wallet-embedded { + mask-image: url('/images/icons/wallet-embedded.svg'); + -webkit-mask-image: url('/images/icons/wallet-embedded.svg'); } -.dark .tk-feature-icon-circle { background: #1f2937; color: #9ca3af; } +.tk-feature-icon-img--fuel { + mask-image: url('/images/icons/fuel.svg'); + -webkit-mask-image: url('/images/icons/fuel.svg'); +} -.tk-feature-chevron { margin-left: auto; flex-shrink: 0; color: #4C48FF; } -.dark .tk-feature-chevron { color: #818cf8; } +.tk-feature-icon-circle svg path, +.tk-feature-icon-circle svg g path, +.tk-feature-icon-circle svg line, +.tk-feature-icon-circle svg circle, +.tk-feature-icon-circle svg rect { + stroke-width: 1.5px; + vector-effect: non-scaling-stroke; +} + +.tk-feature-label { + flex: 1; + min-width: 0; +} + +.tk-feature-row::after { + content: ''; + width: 20px; + height: 20px; + flex-shrink: 0; + opacity: 0; + transition: opacity 0.12s ease; + background-color: #4C48FF; + mask-image: url('/images/icons/chevron-right.svg'); + mask-repeat: no-repeat; + mask-position: center; + mask-size: contain; + -webkit-mask-image: url('/images/icons/chevron-right.svg'); + -webkit-mask-repeat: no-repeat; + -webkit-mask-position: center; + -webkit-mask-size: contain; +} + +.dark .tk-feature-row::after { + background-color: #5B68FF; +} + +.tk-feature-row:hover::after, +.tk-feature-row:focus-visible::after { + opacity: 1; +} + +@media (max-width: 868px) { + .tk-features-grid { + grid-template-columns: 1fr; + gap: 40px; + } + + .tk-feature-row--chevron::after { + opacity: 1; + } +} /* ============================================================ Whitepaper CTA ============================================================ */ +.tk-whitepaper-section { + margin: 52px 0; +} + .tk-whitepaper { + position: relative; display: flex; - align-items: center; + align-items: flex-start; justify-content: center; - gap: 1.5rem; - padding: 2rem; - background: #f9fafb; - border: 1px solid #f3f4f6; - border-radius: 12px; + padding: 0; + background: rgba(0, 0, 0, 0.02); + border: 1px solid rgba(13, 12, 17, 0.1); + border-radius: 16px; + overflow: hidden; } .dark .tk-whitepaper { - background: #111827; - border-color: #1f2937; + background: rgba(255, 255, 255, 0.02); + border-color: rgba(255, 255, 255, 0.1); } -.tk-whitepaper-thumb { - width: 160px; +.tk-whitepaper-inner { + display: flex; + gap: 40px; + align-items: flex-start; + width: 100%; + max-width: 100%; + box-sizing: border-box; + padding: 20px 48px 20px 209px; + min-height: 132px; +} + +.tk-whitepaper-thumb-wrap { + position: absolute; + left: 48px; + bottom: 0; + width: 121px; + height: 132px; flex-shrink: 0; - border-radius: 4px; - box-shadow: 0 4px 16px rgba(0, 0, 0, 0.15); + overflow: hidden; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); +} + +.tk-whitepaper-thumb { + position: absolute; + top: 0; + left: -46.26%; + height: 100%; + width: 192.52%; + max-width: none; display: block; pointer-events: none; } -.tk-whitepaper-text { - font-size: 0.875rem; - color: #6b7280; - margin: 0 0 0.625rem; - line-height: 1.6; +.tk-whitepaper-content { + display: flex; + flex-direction: column; + gap: 12px; + align-items: flex-start; + align-self: flex-start; + padding-top: 12px; + padding-bottom: 20px; + min-width: 0; } -.dark .tk-whitepaper-text { color: #9ca3af; } +.tk-whitepaper-text { + margin: 0; + max-width: 476px; +} .tk-whitepaper-link { display: inline-flex; align-items: center; - gap: 6px; + gap: 8px; color: #4C48FF; - font-weight: 600; + font-family: Inter, sans-serif; + font-size: 14px; + font-weight: 500; + line-height: normal; text-decoration: none; - font-size: 0.875rem; transition: opacity 0.15s; + white-space: nowrap; +} + +.tk-whitepaper-link-icon { + display: flex; + flex-shrink: 0; + width: 20px; + height: 20px; + color: #4C48FF; } -.dark .tk-whitepaper-link { color: #818cf8; } -.tk-whitepaper-link:hover { opacity: 0.75; } +.tk-whitepaper-link-icon svg { + width: 20px; + height: 20px; + display: block; +} + +.tk-whitepaper-link-icon svg path { + stroke-width: 1.5px; + vector-effect: non-scaling-stroke; +} + +.dark .tk-whitepaper-link, +.dark .tk-whitepaper-link-icon { + color: #5B68FF; +} + +.tk-whitepaper-link:hover { + opacity: 0.75; +} + +@media (max-width: 868px) { + .tk-whitepaper-thumb-wrap { + left: 24px; + } + + .tk-whitepaper-inner { + flex-direction: column; + align-items: flex-start; + gap: 0; + padding: 20px 24px 132px; + } + + .tk-whitepaper-content { + padding-top: 12px; + padding-bottom: 0; + margin-bottom: 24px; + align-items: flex-start; + align-self: stretch; + text-align: left; + width: 100%; + } + + .tk-whitepaper-text { + max-width: none; + } +} /* ============================================================ Beta badge ============================================================ */ .tk-badge { - font-size: 0.7rem; + font-family: Inter, sans-serif; + font-size: 10px; + font-weight: 500; + line-height: normal; background: #ede9fe; color: #4C48FF; border-radius: 4px; - padding: 1px 6px; - margin-left: 6px; - font-weight: 600; - vertical-align: middle; + padding: 2px 6px; + flex-shrink: 0; } .dark .tk-badge { - background: rgba(76, 72, 255, 0.2); - color: #818cf8; + background: rgba(91, 104, 255, 0.2); + color: #5B68FF; +} + +/* ============================================================ + Feature & Solution cards (Next steps, etc.) + ============================================================ */ + +.tk-card-icon-wrap { + display: flex; + align-items: center; + justify-content: center; + flex-shrink: 0; + width: 44px; + height: 44px; + border-radius: 9999px; + border: 1px solid rgba(0, 0, 0, 0.16); + background: #ffffff; + box-sizing: border-box; +} + +.dark .tk-card-icon-wrap { + background: transparent; + border-color: rgba(255, 255, 255, 0.16); +} + +.tk-card-icon { + display: block; + flex-shrink: 0; + width: 24px; + height: 25px; + background-color: #505454; + mask-size: contain; + mask-repeat: no-repeat; + mask-position: center; + -webkit-mask-size: contain; + -webkit-mask-repeat: no-repeat; + -webkit-mask-position: center; +} + +.dark .tk-card-icon { + background-color: #505454; +} + +.tk-card-icon-img { + display: block; + flex-shrink: 0; + width: 44px; + height: 44px; } diff --git a/welcome.mdx b/welcome.mdx index b1cece8a..8f057fa2 100644 --- a/welcome.mdx +++ b/welcome.mdx @@ -4,12 +4,16 @@ description: "Secure, flexible, and scalable wallet infrastructure" mode: "custom" --- -
    +
    {/* ── HERO ─────────────────────────────────────────────────────────────── */}
    +
    + + +
    -

    Secure, flexible,
    and scalable
    wallet infrastructure

    +

    Secure, flexible,
    and scalable wallet infrastructure

    Turnkey is infrastructure for generating wallets and keys, signing transactions, and controlling who can use them, when, and how. Private keys are secured in hardware-isolated enclaves and never exposed — not even to Turnkey.

    @@ -21,18 +25,14 @@ mode: "custom" } }} > - + - Search... + Search... ⌘K
    -
    - - -
    Turnkey hero illustration Turnkey hero illustration
    @@ -41,11 +41,13 @@ mode: "custom"
    {/* ── BUILD WITH TURNKEY ───────────────────────────────────────────────── */} -
    +
    -
    -

    Build with Turnkey

    -

    Build at whichever level best meets your needs. Start with Solutions for common patterns, use our SDKs for simplified integration paths, or reach all the way down to the API for complete flexibility. The full stack is always available.

    +
    -
    - Solutions layer - Solutions layer - SDK layer - SDK layer - API layer - API layer -
    -
    -
    +
    +
    +
    + Solutions layer + Solutions layer + SDK layer + SDK layer + API layer + API layer +
    -
    - - - - - - - - +
    @@ -121,195 +136,215 @@ mode: "custom"
    {/* ── SOLUTIONS ────────────────────────────────────────────────────────── */} +

    Explore solutions

    - Embedded Wallets + Embedded Wallets
    -
    - Embedded Wallets -

    Build wallets directly into your app. Users authenticate with email, passkeys, or social login. You control the experience.

    - + Embedded Wallets +

    Build wallets directly into your app. Users authenticate with email, passkeys, or social login. You control the experience.

    +
    - Company Wallets + Company Wallets
    -
    - Company Wallets -

    Automate your onchain operations with wallets, keys and programmable controls purpose built for scale.

    - + Company Wallets +

    Automate your onchain operations with wallets, keys and programmable controls purpose built for scale.

    +
    - Key Management + Key Management
    -
    - Key Management -

    Enterprise-grade security for your most sensitive keys — hardware-backed with programmable access controls.

    - + Key Management +

    Enterprise-grade security for your most sensitive keys — hardware-backed with programmable access controls.

    +
    - Turnkey Verifiable Cloud + Turnkey Verifiable Cloud
    -
    - Turnkey Verifiable Cloud Beta -

    Run any code in isolated, verifiable secure enclaves powered by Turnkey's trusted infrastructure.

    - + +

    Run any code in isolated, verifiable secure enclaves powered by Turnkey's trusted infrastructure.

    +
    +
    +
    {/* ── FEATURES ─────────────────────────────────────────────────────────── */} -

    Explore features

    +
    +

    Explore our features

    -
    +
    - + - + - + +
    {/* ── WHITEPAPER CTA ───────────────────────────────────────────────────── */}
    -
    - Turnkey Whitepaper -
    -

    Read our whitepaper for an in-depth look at Turnkey's security model and verifiable key management infrastructure.

    - - - - - - - Read the Turnkey Whitepaper - +
    +
    +
    +
    + Turnkey Whitepaper +
    +
    +

    Read our whitepaper for an in-depth look at Turnkey's security model and verifiable key management infrastructure.

    + + + Read the Turnkey Whitepaper + +
    +
    From ea9f4ece8f9a6722bd00bcc5f1cfa180b875f4dc Mon Sep 17 00:00:00 2001 From: Serge Stashkevich Date: Fri, 15 May 2026 17:00:09 +0300 Subject: [PATCH 079/117] Set nav home icon stroke width to 1.5px. Co-authored-by: Cursor --- images/icons/home-02.svg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/images/icons/home-02.svg b/images/icons/home-02.svg index 44d4ee51..b47921d8 100644 --- a/images/icons/home-02.svg +++ b/images/icons/home-02.svg @@ -1,3 +1,3 @@ - + From 7483d892fc3865a0622e9ffd424b4dddf527af2c Mon Sep 17 00:00:00 2001 From: Serge Stashkevich Date: Fri, 15 May 2026 17:01:08 +0300 Subject: [PATCH 080/117] Fix nav home icon stroke to render at 1.5px at 16px size. The tab icon uses a CSS mask at 1rem, so SVG stroke must be 2.25 in a 24px viewBox. Co-authored-by: Cursor --- images/icons/home-02.svg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/images/icons/home-02.svg b/images/icons/home-02.svg index b47921d8..8234136d 100644 --- a/images/icons/home-02.svg +++ b/images/icons/home-02.svg @@ -1,3 +1,3 @@ - + From cd2a3519a79d1e856172fcd6d433666f236be341 Mon Sep 17 00:00:00 2001 From: Serge Stashkevich Date: Fri, 15 May 2026 17:06:01 +0300 Subject: [PATCH 081/117] Make next-steps card icons white in dark mode. Also set .nvmrc to Node 20 for Mintlify local dev. Co-authored-by: Cursor --- .nvmrc | 2 +- styles.css | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.nvmrc b/.nvmrc index 87ec8842..ccc4c6c7 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -18.18.2 +20.20.2 diff --git a/styles.css b/styles.css index 0acb0cc5..83e1d196 100644 --- a/styles.css +++ b/styles.css @@ -1856,7 +1856,7 @@ a.nav-tabs-item[href="/welcome"][data-active="true"]::before { } .dark .tk-card-icon { - background-color: #505454; + background-color: #ffffff; } .tk-card-icon-img { From 5db15b8c6e915da15c1b515dc3c77f317835b686 Mon Sep 17 00:00:00 2001 From: Serge Stashkevich Date: Fri, 15 May 2026 17:23:30 +0300 Subject: [PATCH 082/117] Add chain logos to network support cards and polish layout. Use web3icons branded SVGs, Untitled cryptocurrency-02 for Other, centered card rows, and white dark-mode treatment for black-fill logos. Co-authored-by: Cursor --- images/icons/cryptocurrency-02.svg | 3 +++ images/networks/aptos.svg | 3 +++ images/networks/bitcoin.svg | 3 +++ images/networks/cosmos.svg | 3 +++ images/networks/ethereum.svg | 10 ++++++++++ images/networks/hyperliquid.svg | 3 +++ images/networks/iota.svg | 3 +++ images/networks/movement.svg | 3 +++ images/networks/sei.svg | 9 +++++++++ images/networks/solana.svg | 19 +++++++++++++++++++ images/networks/spark.svg | 3 +++ images/networks/sui.svg | 3 +++ images/networks/tempo.svg | 3 +++ images/networks/tron.svg | 3 +++ snippets/feature-card.mdx | 26 +++++++++++++++++--------- snippets/shared/networks-links.mdx | 30 +++++++++++++++--------------- styles.css | 24 ++++++++++++++++++++++++ 17 files changed, 127 insertions(+), 24 deletions(-) create mode 100644 images/icons/cryptocurrency-02.svg create mode 100644 images/networks/aptos.svg create mode 100644 images/networks/bitcoin.svg create mode 100644 images/networks/cosmos.svg create mode 100644 images/networks/ethereum.svg create mode 100644 images/networks/hyperliquid.svg create mode 100644 images/networks/iota.svg create mode 100644 images/networks/movement.svg create mode 100644 images/networks/sei.svg create mode 100644 images/networks/solana.svg create mode 100644 images/networks/spark.svg create mode 100644 images/networks/sui.svg create mode 100644 images/networks/tempo.svg create mode 100644 images/networks/tron.svg diff --git a/images/icons/cryptocurrency-02.svg b/images/icons/cryptocurrency-02.svg new file mode 100644 index 00000000..ec0c8b9f --- /dev/null +++ b/images/icons/cryptocurrency-02.svg @@ -0,0 +1,3 @@ + + + diff --git a/images/networks/aptos.svg b/images/networks/aptos.svg new file mode 100644 index 00000000..ac53b51c --- /dev/null +++ b/images/networks/aptos.svg @@ -0,0 +1,3 @@ + + + diff --git a/images/networks/bitcoin.svg b/images/networks/bitcoin.svg new file mode 100644 index 00000000..85aaf723 --- /dev/null +++ b/images/networks/bitcoin.svg @@ -0,0 +1,3 @@ + + + diff --git a/images/networks/cosmos.svg b/images/networks/cosmos.svg new file mode 100644 index 00000000..15093555 --- /dev/null +++ b/images/networks/cosmos.svg @@ -0,0 +1,3 @@ + + + diff --git a/images/networks/ethereum.svg b/images/networks/ethereum.svg new file mode 100644 index 00000000..b7c64963 --- /dev/null +++ b/images/networks/ethereum.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/images/networks/hyperliquid.svg b/images/networks/hyperliquid.svg new file mode 100644 index 00000000..16bf0e31 --- /dev/null +++ b/images/networks/hyperliquid.svg @@ -0,0 +1,3 @@ + + + diff --git a/images/networks/iota.svg b/images/networks/iota.svg new file mode 100644 index 00000000..76ed432b --- /dev/null +++ b/images/networks/iota.svg @@ -0,0 +1,3 @@ + + + diff --git a/images/networks/movement.svg b/images/networks/movement.svg new file mode 100644 index 00000000..f6e20c60 --- /dev/null +++ b/images/networks/movement.svg @@ -0,0 +1,3 @@ + + + diff --git a/images/networks/sei.svg b/images/networks/sei.svg new file mode 100644 index 00000000..cd5737d9 --- /dev/null +++ b/images/networks/sei.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/images/networks/solana.svg b/images/networks/solana.svg new file mode 100644 index 00000000..81a126e8 --- /dev/null +++ b/images/networks/solana.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/images/networks/spark.svg b/images/networks/spark.svg new file mode 100644 index 00000000..9902e043 --- /dev/null +++ b/images/networks/spark.svg @@ -0,0 +1,3 @@ + + + diff --git a/images/networks/sui.svg b/images/networks/sui.svg new file mode 100644 index 00000000..59151891 --- /dev/null +++ b/images/networks/sui.svg @@ -0,0 +1,3 @@ + + + diff --git a/images/networks/tempo.svg b/images/networks/tempo.svg new file mode 100644 index 00000000..ac1637b9 --- /dev/null +++ b/images/networks/tempo.svg @@ -0,0 +1,3 @@ + + + diff --git a/images/networks/tron.svg b/images/networks/tron.svg new file mode 100644 index 00000000..9004a02a --- /dev/null +++ b/images/networks/tron.svg @@ -0,0 +1,3 @@ + + + diff --git a/snippets/feature-card.mdx b/snippets/feature-card.mdx index 852a3c6a..c05867ee 100644 --- a/snippets/feature-card.mdx +++ b/snippets/feature-card.mdx @@ -1,18 +1,26 @@ -export const FeatureCard = ({ title, description, icon, href }) => { +export const FeatureCard = ({ title, description, icon, logo, href }) => { return ( -
    +
    - + {logo ? ( + + ) : ( + + )}
    diff --git a/snippets/shared/networks-links.mdx b/snippets/shared/networks-links.mdx index bdb87f7c..b340dfd8 100644 --- a/snippets/shared/networks-links.mdx +++ b/snippets/shared/networks-links.mdx @@ -1,19 +1,19 @@ import { FeatureCard } from '/snippets/feature-card.mdx' -
    +
    - - - - - - - - - - - - - - + + + + + + + + + + + + + +
    diff --git a/styles.css b/styles.css index 83e1d196..9b3f2aa4 100644 --- a/styles.css +++ b/styles.css @@ -1859,6 +1859,30 @@ a.nav-tabs-item[href="/welcome"][data-active="true"]::before { background-color: #ffffff; } +.tk-card-row { + display: flex; + align-items: flex-start; + gap: 16px; +} + +.tk-network-cards .tk-card-row { + align-items: center; +} + +.tk-card-network-logo { + display: block; + width: 24px; + height: 24px; + object-fit: contain; +} + +.dark .tk-network-cards .tk-card-network-logo[src$="cosmos.svg"], +.dark .tk-network-cards .tk-card-network-logo[src$="aptos.svg"], +.dark .tk-network-cards .tk-card-network-logo[src$="tempo.svg"], +.dark .tk-network-cards .tk-card-network-logo[src$="iota.svg"] { + filter: brightness(0) invert(1); +} + .tk-card-icon-img { display: block; flex-shrink: 0; From 2b4638a400e4b863dc4e4b5e1034f74b3ffca8b7 Mon Sep 17 00:00:00 2001 From: Serge Stashkevich Date: Fri, 15 May 2026 17:27:26 +0300 Subject: [PATCH 083/117] Fix network support cards not rendering on Mintlify preview. Export NetworkLinks as a self-contained component instead of nesting FeatureCard imports, which caused an empty grid on deploy. Co-authored-by: Cursor --- networks/overview.mdx | 2 +- .../features/multi-chain-support.mdx | 2 +- .../features/multi-chain-support.mdx | 4 +- snippets/shared/networks-links.mdx | 71 ++++++++++++++----- 4 files changed, 57 insertions(+), 22 deletions(-) diff --git a/networks/overview.mdx b/networks/overview.mdx index 2e445624..01356094 100644 --- a/networks/overview.mdx +++ b/networks/overview.mdx @@ -4,7 +4,7 @@ description: "Turnkey operates at the **cryptographic curve** level rather than mode: "wide" --- -import NetworkLinks from "/snippets/shared/networks-links.mdx"; +import { NetworkLinks } from "/snippets/shared/networks-links.mdx"; ## Multichain support at Turnkey diff --git a/products/company-wallets/features/multi-chain-support.mdx b/products/company-wallets/features/multi-chain-support.mdx index be961da0..d67e55ad 100644 --- a/products/company-wallets/features/multi-chain-support.mdx +++ b/products/company-wallets/features/multi-chain-support.mdx @@ -3,7 +3,7 @@ title: "Multichain support" description: "Overview of our multichain network support." --- -import NetworkLinks from "/snippets/shared/networks-links.mdx"; +import { NetworkLinks } from "/snippets/shared/networks-links.mdx"; Turnkey delivers robust multichain support that enables seamless integration across a variety of cryptocurrency ecosystems. Leveraging secure cryptographic fundamentals and advanced transaction solutions, our platform simplifies managing digital assets across multiple networks. diff --git a/products/embedded-wallets/features/multi-chain-support.mdx b/products/embedded-wallets/features/multi-chain-support.mdx index 1b2c79de..d67e55ad 100644 --- a/products/embedded-wallets/features/multi-chain-support.mdx +++ b/products/embedded-wallets/features/multi-chain-support.mdx @@ -3,10 +3,10 @@ title: "Multichain support" description: "Overview of our multichain network support." --- -import NetworkLinks from "/snippets/shared/networks-links.mdx"; +import { NetworkLinks } from "/snippets/shared/networks-links.mdx"; Turnkey delivers robust multichain support that enables seamless integration across a variety of cryptocurrency ecosystems. Leveraging secure cryptographic fundamentals and advanced transaction solutions, our platform simplifies managing digital assets across multiple networks. Explore more about each network: -ss + diff --git a/snippets/shared/networks-links.mdx b/snippets/shared/networks-links.mdx index b340dfd8..aea77883 100644 --- a/snippets/shared/networks-links.mdx +++ b/snippets/shared/networks-links.mdx @@ -1,19 +1,54 @@ -import { FeatureCard } from '/snippets/feature-card.mdx' +export const NetworkCard = ({ title, icon, logo, href }) => ( +
    +
    + + {logo ? ( + + ) : ( + + )} + +
    +
    + {title} +
    +
    +
    +
    +); -
    - - - - - - - - - - - - - - - -
    +export const NetworkLinks = () => ( +
    + + + + + + + + + + + + + + + +
    +); From 372674b1b70d0853653b780044b58b12a1e46fef Mon Sep 17 00:00:00 2001 From: Graham Ritter Date: Fri, 15 May 2026 10:41:17 -0400 Subject: [PATCH 084/117] icons for companies / languages updated --- api-overview.mdx | 30 ++--- authentication/backend-setup.mdx | 13 +- authentication/email.mdx | 115 +++++++----------- category/advanced.mdx | 33 ++--- category/code-examples-1.mdx | 14 +-- category/code-examples.mdx | 102 +++------------- category/web3-libraries.mdx | 36 ++---- .../integration-guide/overview.mdx | 12 +- developer-reference/api-overview/stamps.mdx | 26 ++-- .../code-examples/create-sub-org-passkey.mdx | 6 +- .../code-examples/wallet-auth.mdx | 18 +-- .../integration-guide/overview.mdx | 18 +-- .../embedded-wallet-quickstart.mdx | 10 +- 13 files changed, 139 insertions(+), 294 deletions(-) diff --git a/api-overview.mdx b/api-overview.mdx index cd5c6d86..b2170210 100644 --- a/api-overview.mdx +++ b/api-overview.mdx @@ -4,24 +4,12 @@ mode: wide sidebarTitle: Overview --- - - - Getting started with the Turnkey API - - - - Creating your first signed request - - - - Fetching data from Turnkey - - - - Secure execution with Turnkey - - - - Enumerating all errors received using the Turnkey API - - +import { FeatureCard } from '/snippets/feature-card.mdx' + +
    + + + + + +
    diff --git a/authentication/backend-setup.mdx b/authentication/backend-setup.mdx index 6df9e1b6..b00aec7f 100644 --- a/authentication/backend-setup.mdx +++ b/authentication/backend-setup.mdx @@ -3,6 +3,8 @@ title: "Backend authentication" description: "Guide for integrating Turnkey authentication into your backend, covering session JWT creation, validation, and enforcing user access controls." --- +import { FeatureCard } from '/snippets/feature-card.mdx' + ## Introduction This guide shows you how to use Turnkey as the foundation for your own backend authentication system. You’ll learn how to issue, send, and validate session JWTs, and enforce access controls in your backend. @@ -332,11 +334,6 @@ To validate the session JWT: ## Advanced topics - - Learn about advanced patterns like multi-signature setups requiring approvals - from both the user and the backend. - +
    + +
    diff --git a/authentication/email.mdx b/authentication/email.mdx index e7789371..8031f604 100644 --- a/authentication/email.mdx +++ b/authentication/email.mdx @@ -199,88 +199,63 @@ const response = await client.emailAuth({ **Effective December 16, 2025** - + Beginning December 16, 2025, all email-based OTP and recovery activities will require the `appName` parameter. Existing SDK versions will continue working, but upgrading without setting an `appName` will break email-based flows. - - - **Affected:** Anyone using Auth Proxy without `appName` set - - **Action:** Set `appName` under [email configuration](https://app.turnkey.com/dashboard/walletKit) - - - **Affected:** Users calling `init_otp_auth`, `init_otp`, `email_recovery`, or `email_auth` without `appName` - - **Action:**
    - • For `email_recovery` or `email_auth`: include `appName` in your request
    - • For `init_otp` or `init_otp_auth`: update your API call to match the new input structure when upgrading to the latest server-SDK -
    -
    + **Auth Proxy users** — Set `appName` under [email configuration](https://app.turnkey.com/dashboard/walletKit) in the dashboard. + + **Server SDK users** — If you call `init_otp_auth`, `init_otp`, `email_recovery`, or `email_auth` without `appName`: + - For `email_recovery` or `email_auth`: include `appName` in your request + - For `init_otp` or `init_otp_auth`: update your API call to match the new input structure when upgrading to the latest server SDK +
    - - Both methods use the same parameter structure. Here's an example with `emailAuth`: - - ```js - await client.emailAuth({ - parameters: { - email: "user@example.com", - targetPublicKey: "", - emailCustomization: { - appName: "Your App Name" // this is now required - } - } - }); - ``` - - - - Both methods use the same parameter structure. Here's an example with `initOtp`: - - ```js - await client.initOtp({ - parameters: { - otpType: "OTP_TYPE_EMAIL", - contact: "user@example.com", - appName: "Your App Name", // this is now required - emailCustomization: { - // other optional customization - } - } - }); - ``` - - - - If you manage email flows with policies, update to the new activity types: +**`emailAuth` and `emailRecovery`** — both methods use the same parameter structure: + +```js +await client.emailAuth({ + parameters: { + email: "user@example.com", + targetPublicKey: "", + emailCustomization: { + appName: "Your App Name" // this is now required + } + } +}); +``` - **EMAIL_AUTH**
    - Old: `ACTIVITY_TYPE_EMAIL_AUTH`, `ACTIVITY_TYPE_EMAIL_AUTH_V2`
    - New: `ACTIVITY_TYPE_EMAIL_AUTH_V3` +**`initOtp` and `initOtpAuth`** — both methods use the same parameter structure: - **INIT_OTP_AUTH**
    - Old: `ACTIVITY_TYPE_INIT_OTP_AUTH`, `ACTIVITY_TYPE_INIT_OTP_AUTH_V2`
    - New: `ACTIVITY_TYPE_INIT_OTP_AUTH_V3` +```js +await client.initOtp({ + parameters: { + otpType: "OTP_TYPE_EMAIL", + contact: "user@example.com", + appName: "Your App Name", // this is now required + emailCustomization: { + // other optional customization + } + } +}); +``` - **INIT_OTP** (contact verification & signup)
    - Old: `ACTIVITY_TYPE_INIT_OTP`, `ACTIVITY_TYPE_INIT_OTP_V2`
    - New: `ACTIVITY_TYPE_INIT_OTP_V3` + - **VERIFY_OTP**
    - Old: `ACTIVITY_TYPE_VERIFY_OTP`
    - New: `ACTIVITY_TYPE_VERIFY_OTP_V2` + - **OTP_LOGIN**
    - Old: `ACTIVITY_TYPE_OTP_LOGIN`
    - New: `ACTIVITY_TYPE_OTP_LOGIN_V2` +If you manage email flows with policies, update to the new activity types: - **INIT_USER_EMAIL_RECOVERY**
    - Old: `ACTIVITY_TYPE_INIT_USER_EMAIL_RECOVERY`
    - New: `ACTIVITY_TYPE_INIT_USER_EMAIL_RECOVERY_V2` -
    +| **Flow** | **Old activity type** | **New activity type** | +| :--- | :--- | :--- | +| Email auth | `ACTIVITY_TYPE_EMAIL_AUTH`, `ACTIVITY_TYPE_EMAIL_AUTH_V2` | `ACTIVITY_TYPE_EMAIL_AUTH_V3` | +| Init OTP auth | `ACTIVITY_TYPE_INIT_OTP_AUTH`, `ACTIVITY_TYPE_INIT_OTP_AUTH_V2` | `ACTIVITY_TYPE_INIT_OTP_AUTH_V3` | +| Init OTP (signup) | `ACTIVITY_TYPE_INIT_OTP`, `ACTIVITY_TYPE_INIT_OTP_V2` | `ACTIVITY_TYPE_INIT_OTP_V3` | +| Verify OTP | `ACTIVITY_TYPE_VERIFY_OTP` | `ACTIVITY_TYPE_VERIFY_OTP_V2` | +| OTP login | `ACTIVITY_TYPE_OTP_LOGIN` | `ACTIVITY_TYPE_OTP_LOGIN_V2` | +| Email recovery | `ACTIVITY_TYPE_INIT_USER_EMAIL_RECOVERY` | `ACTIVITY_TYPE_INIT_USER_EMAIL_RECOVERY_V2` | - + ### Email templates diff --git a/category/advanced.mdx b/category/advanced.mdx index de697b7c..8a5afdfd 100644 --- a/category/advanced.mdx +++ b/category/advanced.mdx @@ -4,27 +4,14 @@ description: "Use Turnkey's low-level http libraries directly" sidebarTitle: "Overview" --- - - - Detailed guide on installing and initializing the TurnkeyClient - - - Guide on using the ApiKeyStamper - +import { FeatureCard } from '/snippets/feature-card.mdx' - - Guide on using the WalletStamper - - - Guide on using the WebauthnStamper - - - Guide on using the IframeStamper - - - Guide on using the IndexedDbStamper - - - Sign transactions and messages in the browser using the iframe stamper, without exposing private keys to your app. - - +
    + + + + + + + +
    diff --git a/category/code-examples-1.mdx b/category/code-examples-1.mdx index ded9250a..76cfc27b 100644 --- a/category/code-examples-1.mdx +++ b/category/code-examples-1.mdx @@ -4,11 +4,9 @@ sidebarTitle: "Overview" mode: wide --- - - - Smart contract management - - - Payment orchestration - - +import { SolutionCard } from '/snippets/solution-card.mdx' + +
    + + +
    diff --git a/category/code-examples.mdx b/category/code-examples.mdx index 0376b796..b141a340 100644 --- a/category/code-examples.mdx +++ b/category/code-examples.mdx @@ -4,87 +4,23 @@ sidebarTitle: "Overview" mode: wide --- - - - Embedded Consumer Wallet - +import { FeatureCard } from '/snippets/feature-card.mdx' +import { SolutionCard } from '/snippets/solution-card.mdx' - - Embedded Business Wallet - - - - Embedded Wallet-as-a-Service - - - - Create a sub-org with a passkey user - - - - Authenticate a user with a passkey credential - - - - Create a user passkey session - - - - Create a user with email only - - - Authenticate a user with email - - - Add an additional passkey - - - Authenticate a user with an Ethereum wallet - - - Signing transactions - - - Sending sponsored transactions - - - Import wallet or private key - - - Export wallet or private key - - - Social linking - - - +
    + + + + + + + + + + + + + + + +
    diff --git a/category/web3-libraries.mdx b/category/web3-libraries.mdx index 4c8110fd..1c1b1790 100644 --- a/category/web3-libraries.mdx +++ b/category/web3-libraries.mdx @@ -5,30 +5,14 @@ mode: wide sidebarTitle: "Overview" --- - - - Ethers wrapper - +import { FeatureCard } from '/snippets/feature-card.mdx' - - Viem wrapper - - - - CosmJS wrapper - - - - EIP 1193 provider - - - - Solana Web3 wrapper - - - SDK for implementing gasless transactions using EIP-7702 and your own paymaster. - - - Deploy smart contracts from Turnkey wallets using Foundry's native Turnkey support. - - +
    + + + + + + + +
    diff --git a/company-wallets/integration-guide/overview.mdx b/company-wallets/integration-guide/overview.mdx index 749e4ded..0e1c13c0 100644 --- a/company-wallets/integration-guide/overview.mdx +++ b/company-wallets/integration-guide/overview.mdx @@ -12,22 +12,22 @@ choosing the right SDK for your stack. ## Choose your SDK - + Our most complete SDK. Recommended if your backend can run Node.js. - + Native Go SDK. - + turnkey_client gem for Ruby and Rails projects. - + Native Rust SDK. - + Pydantic type definitions, an HTTP-client for easy direct requests, and API-key stamper. - + Call the Turnkey REST API directly from any language. diff --git a/developer-reference/api-overview/stamps.mdx b/developer-reference/api-overview/stamps.mdx index 3d0480cc..ea4021ee 100644 --- a/developer-reference/api-overview/stamps.mdx +++ b/developer-reference/api-overview/stamps.mdx @@ -74,23 +74,15 @@ To create a valid, Webauthn authenticator stamped request follow these steps: Our [JS SDK](https://github.com/tkhq/sdk) and [CLI](https://github.com/tkhq/tkcli) abstract request stamping for you. If you choose to use an independent client, you will need to implement this yourself. For reference, check out our implementations: - - - - - - - - - - - - - - - - - + + + + + + + + + Our CLI has a `--no-post` option to generate stamps without sending anything over the network. This is a useful tool should you have trouble with debugging stamping-related logic. A sample command might look something like: diff --git a/embedded-wallets/code-examples/create-sub-org-passkey.mdx b/embedded-wallets/code-examples/create-sub-org-passkey.mdx index 319d8b6e..a8080ef5 100644 --- a/embedded-wallets/code-examples/create-sub-org-passkey.mdx +++ b/embedded-wallets/code-examples/create-sub-org-passkey.mdx @@ -529,7 +529,7 @@ const createSubOrganizationResponse = await createSubOrganization( A few mini examples where sub-orgs are created with passkeys, see the following: - - - + + + diff --git a/embedded-wallets/code-examples/wallet-auth.mdx b/embedded-wallets/code-examples/wallet-auth.mdx index f1f289c2..0e72d638 100644 --- a/embedded-wallets/code-examples/wallet-auth.mdx +++ b/embedded-wallets/code-examples/wallet-auth.mdx @@ -934,19 +934,7 @@ export default function WalletAuth() { You can find examples of how to implement the above functionality using the indexedDbClient and more in the following repositories: - - - + + + diff --git a/embedded-wallets/integration-guide/overview.mdx b/embedded-wallets/integration-guide/overview.mdx index 2262cd41..e3dd410a 100644 --- a/embedded-wallets/integration-guide/overview.mdx +++ b/embedded-wallets/integration-guide/overview.mdx @@ -15,27 +15,27 @@ Turnkey provides SDKs at different levels of abstraction. The right choice depen and how much you want pre-built for you. - + Pre-built UI components, hook-based API, and no backend required. Recommended for React and Next.js apps. - + The mobile counterpart to the React wallet kit, optimized for mobile-native flows. - + The underlying TypeScript SDK. Best for Angular, Vue, Svelte, or any web framework where the React Wallet Kit doesn't apply. - + Dart SDK — Cross-platform iOS and Android support. - + Swift SDK — Native iOS integration. - + Kotlin SDK — Native Android integration. - + Call the Turnkey REST API directly from any language. @@ -69,14 +69,14 @@ configure your allowed origins and auth methods, and your frontend can call `https://authproxy.turnkey.com` directly — no server needed on your end. - +
    • You want to ship without standing up a backend
    • You're using the React or React Native Wallet Kit (they're designed around it)
    • Your auth flows are OTP, OAuth, and new-user signup
    - +
    • You already run a backend and want to keep signing logic there
    • You need flows the Auth Proxy doesn't cover
    • diff --git a/getting-started/embedded-wallet-quickstart.mdx b/getting-started/embedded-wallet-quickstart.mdx index 11d601c3..5f7850fe 100644 --- a/getting-started/embedded-wallet-quickstart.mdx +++ b/getting-started/embedded-wallet-quickstart.mdx @@ -110,19 +110,19 @@ wallet UI components, a hook-based API, and requires no backend setup. For React Native, Flutter, Swift, or Kotlin, choose the guide for your platform: - + Pre-built components with minimal configuration. - + JavaScript packages for React Native. - + Dart SDK for Flutter apps. - + Native iOS integration. - + Native Android integration. From 1d00202a19de020a2077b2dddb2ca51753d0864f Mon Sep 17 00:00:00 2001 From: Graham Ritter Date: Fri, 15 May 2026 10:49:51 -0400 Subject: [PATCH 085/117] Fix NetworkLinks rendering by nesting NetworkCard definition Mintlify's MDX processing doesn't resolve cross-references between separately exported components in the same snippet file. Moving NetworkCard inside NetworkLinks makes the component self-contained. Co-Authored-By: Claude Opus 4.6 --- snippets/shared/networks-links.mdx | 104 +++++++++++++++-------------- 1 file changed, 53 insertions(+), 51 deletions(-) diff --git a/snippets/shared/networks-links.mdx b/snippets/shared/networks-links.mdx index aea77883..41ac7a80 100644 --- a/snippets/shared/networks-links.mdx +++ b/snippets/shared/networks-links.mdx @@ -1,54 +1,56 @@ -export const NetworkCard = ({ title, icon, logo, href }) => ( - -
      - - {logo ? ( - - ) : ( - - )} - -
      - - -); + + ); -export const NetworkLinks = () => ( -
      - - - - - - - - - - - - - - - -
      -); + return ( +
      + + + + + + + + + + + + + + + +
      + ); +}; From 30244b1bf22446fc5966d6b64dc2cf33a39b878c Mon Sep 17 00:00:00 2001 From: Graham Ritter Date: Fri, 15 May 2026 10:56:17 -0400 Subject: [PATCH 086/117] minor change to chains page --- snippets/shared/networks-links.mdx | 1 - 1 file changed, 1 deletion(-) diff --git a/snippets/shared/networks-links.mdx b/snippets/shared/networks-links.mdx index 41ac7a80..1c2624fe 100644 --- a/snippets/shared/networks-links.mdx +++ b/snippets/shared/networks-links.mdx @@ -36,7 +36,6 @@ export const NetworkLinks = () => { className="tk-network-cards" style={{ display: 'grid', gridTemplateColumns: 'repeat(2, 1fr)', gap: '12px' }} > - From 649cb2f09b40c4b80f822c6d80e448ed04907a49 Mon Sep 17 00:00:00 2001 From: Serge Stashkevich Date: Fri, 15 May 2026 18:07:15 +0300 Subject: [PATCH 087/117] Center Build with Turnkey panes on desktop without extra left padding. Left-align intro copy with page content and center the cube and selector panes in the remaining column; add tablet centering for the visual row. Co-authored-by: Cursor --- styles.css | 57 ++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 42 insertions(+), 15 deletions(-) diff --git a/styles.css b/styles.css index 9b3f2aa4..ef6f4e78 100644 --- a/styles.css +++ b/styles.css @@ -690,10 +690,23 @@ a.nav-tabs-item[href="/welcome"][data-active="true"]::before { max-width: 100%; } -/* Desktop (wide only) — intro | cube + selectors */ +/* Tablet / small desktop — center cube + selectors row */ +@media (min-width: 869px) and (max-width: 1280px) { + .tk-build-visual { + justify-content: center; + justify-self: center; + width: fit-content; + max-width: 100%; + margin-inline: auto; + } +} + +/* Desktop — intro flush left; panes centered in remaining space */ @media (min-width: 1281px) { .tk-build { - grid-template-columns: minmax(0, 1fr) auto; + display: grid; + grid-template-columns: minmax(0, 420px) 1fr; + width: 100%; gap: 40px; align-items: center; } @@ -706,27 +719,33 @@ a.nav-tabs-item[href="/welcome"][data-active="true"]::before { } .tk-build-copy { - grid-column: auto; - grid-row: auto; + grid-column: unset; + grid-row: unset; + max-width: none; } - .tk-build-visual { - grid-column: auto; - grid-row: auto; - flex-shrink: 0; - width: auto; - justify-self: auto; + .tk-build-links { + grid-column: unset; + grid-row: unset; } - .tk-build-links { - grid-column: auto; - grid-row: auto; + .tk-build-visual { + display: flex; + flex-direction: row; + align-items: center; + justify-content: center; + gap: 40px; + width: 100%; + min-width: 0; + grid-column: unset; + grid-row: unset; + justify-self: stretch; } .tk-build-selectors { - flex: none; + flex: 0 0 auto; min-width: auto; - max-width: 100%; + max-width: none; justify-content: flex-start; } @@ -1889,3 +1908,11 @@ a.nav-tabs-item[href="/welcome"][data-active="true"]::before { width: 44px; height: 44px; } + +/* Networks overview — wide tier table should scroll horizontally without breaking layout */ +#content [data-table-wrapper="true"] { + width: 100% !important; + max-width: 100% !important; + margin-inline: 0 !important; + contain: none !important; +} From 9cf2d0209f22de39cb319e79a9f86a77df1bbf9b Mon Sep 17 00:00:00 2001 From: Serge Stashkevich Date: Fri, 15 May 2026 18:23:53 +0300 Subject: [PATCH 088/117] Fix mobile solution card spacing and thumbnail position. Stack title, description, and links vertically so the thumbnail no longer forces extra headline gap; offset icons 12px from the top on mobile. Co-authored-by: Cursor --- styles.css | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/styles.css b/styles.css index ef6f4e78..06df103f 100644 --- a/styles.css +++ b/styles.css @@ -1399,14 +1399,15 @@ a.nav-tabs-item[href="/welcome"][data-active="true"]::before { } .tk-solution-card { - grid-template-columns: minmax(0, 1fr) 100px; + position: relative; + grid-template-columns: minmax(0, 1fr); grid-template-areas: - "title thumb" - "desc desc" - "links links"; - column-gap: 40px; - row-gap: 20px; - padding: 0; + "title" + "desc" + "links"; + column-gap: 0; + row-gap: 8px; + padding: 0 116px 0 0; /* reserve space for thumbnail top-right */ background: transparent; border: none; border-radius: 0; @@ -1428,12 +1429,13 @@ a.nav-tabs-item[href="/welcome"][data-active="true"]::before { } .tk-solution-thumbnail { - grid-area: thumb; + position: absolute; + top: 12px; + right: 0; width: 100px; height: 100px; - margin-left: 0; - justify-self: end; - align-self: start; + margin: 0; + grid-area: unset; } .tk-solution-card > .tk-solution-title, @@ -1442,17 +1444,24 @@ a.nav-tabs-item[href="/welcome"][data-active="true"]::before { line-height: normal; width: auto; max-width: none; + padding-right: 0; } .tk-solution-title-row { max-width: none; flex-wrap: wrap; + padding-right: 0; + } + + .tk-solution-desc { + margin-top: 0; } .tk-solution-links { flex-direction: column; gap: 12px; align-items: flex-start; + margin-top: 12px; /* 8px row-gap + 12px ≈ prior 20px desc→links */ } .tk-solution-link { From b71be7947fade45da263712d9fb7ed0a8d9963de Mon Sep 17 00:00:00 2001 From: Serge Stashkevich Date: Fri, 15 May 2026 18:36:53 +0300 Subject: [PATCH 089/117] Restore hero illustration and add spinning tick-ring animation. Mintlify strips object tags, so hero images use img with a client enhancer that inlines SVG for SMIL animation. Co-authored-by: Cursor --- components/HeroIllustration.jsx | 31 +++++++++++++++++++++++++++++++ images/hero-dark.svg | 5 ++++- images/hero-light.svg | 5 ++++- styles.css | 9 ++++++++- welcome.mdx | 7 +++++-- 5 files changed, 52 insertions(+), 5 deletions(-) create mode 100644 components/HeroIllustration.jsx diff --git a/components/HeroIllustration.jsx b/components/HeroIllustration.jsx new file mode 100644 index 00000000..c4ac2a64 --- /dev/null +++ b/components/HeroIllustration.jsx @@ -0,0 +1,31 @@ +'use client'; + +import { useEffect } from 'react'; + +/** Replaces hero tags with inline SVG so SMIL tick-ring animations run. */ +export function HeroIllustrationEnhancer() { + useEffect(() => { + const imgs = document.querySelectorAll('img[data-hero-inline-src]'); + + imgs.forEach((img) => { + const src = img.getAttribute('data-hero-inline-src'); + if (!src) return; + + fetch(src) + .then((res) => res.text()) + .then((markup) => { + const el = document.createElement('div'); + el.className = img.className; + el.setAttribute('role', 'img'); + el.setAttribute('aria-label', img.getAttribute('alt') || 'Turnkey hero illustration'); + el.innerHTML = markup; + img.replaceWith(el); + }) + .catch(() => { + /* Keep the fallback on fetch failure */ + }); + }); + }, []); + + return null; +} diff --git a/images/hero-dark.svg b/images/hero-dark.svg index 9412d9e6..3fe35d95 100644 --- a/images/hero-dark.svg +++ b/images/hero-dark.svg @@ -6,7 +6,10 @@
      - + + + +
      diff --git a/images/hero-light.svg b/images/hero-light.svg index 9f1e6470..8da97a18 100644 --- a/images/hero-light.svg +++ b/images/hero-light.svg @@ -6,7 +6,10 @@
      - + + + +
      diff --git a/styles.css b/styles.css index 06df103f..a805ed1a 100644 --- a/styles.css +++ b/styles.css @@ -424,9 +424,16 @@ a.nav-tabs-item[href="/welcome"][data-active="true"]::before { position: relative; display: block; width: 657px; - height: auto; + height: 329px; flex-shrink: 0; pointer-events: none; + border: none; +} + +.tk-hero-img svg { + display: block; + width: 657px; + height: 329px; } /* Hero tablet — Figma 169:4781 (869–1440px): copy left, graphic right, crop at viewport */ diff --git a/welcome.mdx b/welcome.mdx index 8f057fa2..7ae916e8 100644 --- a/welcome.mdx +++ b/welcome.mdx @@ -4,6 +4,8 @@ description: "Secure, flexible, and scalable wallet infrastructure" mode: "custom" --- +import { HeroIllustrationEnhancer } from '/components/HeroIllustration.jsx' +
      {/* ── HERO ─────────────────────────────────────────────────────────────── */} @@ -33,8 +35,9 @@ mode: "custom"
      - Turnkey hero illustration - Turnkey hero illustration + Turnkey hero illustration + Turnkey hero illustration +
      From e11c86ed7ecfa54db750e47ad42016470b7e864e Mon Sep 17 00:00:00 2001 From: Serge Stashkevich Date: Fri, 15 May 2026 18:39:33 +0300 Subject: [PATCH 090/117] Fix hero animation on Mintlify preview by using snippet script. Mintlify renders imported use client components as visible source; replace with an MDX snippet that injects a vanilla script. Co-authored-by: Cursor --- components/HeroIllustration.jsx | 31 ------------------------------- snippets/hero-illustration.mdx | 32 ++++++++++++++++++++++++++++++++ welcome.mdx | 4 ++-- 3 files changed, 34 insertions(+), 33 deletions(-) delete mode 100644 components/HeroIllustration.jsx create mode 100644 snippets/hero-illustration.mdx diff --git a/components/HeroIllustration.jsx b/components/HeroIllustration.jsx deleted file mode 100644 index c4ac2a64..00000000 --- a/components/HeroIllustration.jsx +++ /dev/null @@ -1,31 +0,0 @@ -'use client'; - -import { useEffect } from 'react'; - -/** Replaces hero tags with inline SVG so SMIL tick-ring animations run. */ -export function HeroIllustrationEnhancer() { - useEffect(() => { - const imgs = document.querySelectorAll('img[data-hero-inline-src]'); - - imgs.forEach((img) => { - const src = img.getAttribute('data-hero-inline-src'); - if (!src) return; - - fetch(src) - .then((res) => res.text()) - .then((markup) => { - const el = document.createElement('div'); - el.className = img.className; - el.setAttribute('role', 'img'); - el.setAttribute('aria-label', img.getAttribute('alt') || 'Turnkey hero illustration'); - el.innerHTML = markup; - img.replaceWith(el); - }) - .catch(() => { - /* Keep the fallback on fetch failure */ - }); - }); - }, []); - - return null; -} diff --git a/snippets/hero-illustration.mdx b/snippets/hero-illustration.mdx new file mode 100644 index 00000000..a38b10b5 --- /dev/null +++ b/snippets/hero-illustration.mdx @@ -0,0 +1,32 @@ +export const HeroIllustrationScript = () => ( +