@orangecheck/legal 0.7.30 → 0.7.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +3 -3
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/constants.ts","../src/registry.ts","../src/content/clauses.ts","../src/content/protocol.ts","../src/content/me.ts","../src/content/vault.ts","../src/content/index.ts","../src/build.ts","../src/markup.tsx","../src/components.tsx","../src/security.tsx"],"names":["terms","privacy","COMMERCIAL_NOTE","jsx","React","jsxs"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * @orangecheck/legal — family-wide constants.\n *\n * These resolve `[[TOKEN]]` placeholders in authored content. Changing a value\n * here updates every generated document on every site at the next package\n * version bump — that is the whole point of the engine.\n */\n\n/**\n * The entity of record.\n *\n * ── PENDING INCORPORATION ──────────────────────────────────────────────────\n * No formal entity is registered yet. Until one is, documents operate under\n * the bare name \"OrangeCheck\" and the Delaware-law / AAA-arbitration clauses\n * are written as forward-looking (see the dispute-resolution clause).\n *\n * When the entity is formed, change ONLY the two values below — e.g.\n * LEGAL_ENTITY = 'OrangeCheck, Inc.'\n * LEGAL_ENTITY_LONG = 'OrangeCheck, Inc., a Delaware corporation'\n * — rebuild, and publish. Every Terms/Privacy page family-wide updates.\n */\nexport const LEGAL_ENTITY = 'OrangeCheck';\n\n/** How the documents write the brand, unless a site writes it its own way (`SiteContext.brand`). */\nexport const BRAND = 'OrangeCheck';\nexport const LEGAL_ENTITY_LONG = 'OrangeCheck (OCHK), an unincorporated project';\n\n/** True while no formal entity exists — gates a forward-looking note. */\nexport const ENTITY_PENDING = true;\n\nexport const CONTACT_GENERAL = 'contact@ochk.io';\nexport const CONTACT_SECURITY = 'security@ochk.io';\nexport const CONTACT_PRIVACY = 'contact@ochk.io';\n\n/** Governing-law surface, referenced by the shared dispute-resolution clause. */\nexport const GOVERNING_LAW_STATE = 'Delaware, United States';\nexport const ARBITRATION_SEAT = 'Wilmington, Delaware, United States';\n\n/** Token table applied by `buildDoc`. Site-specific tokens are merged on top. */\nexport const GLOBAL_TOKENS: Record<string, string> = {\n BRAND,\n ENTITY: LEGAL_ENTITY,\n ENTITY_LONG: LEGAL_ENTITY_LONG,\n // For the clauses set in capitals, so the name does not break their case.\n ENTITY_UPPER: LEGAL_ENTITY.toUpperCase(),\n CONTACT: CONTACT_GENERAL,\n SECURITY_CONTACT: CONTACT_SECURITY,\n PRIVACY_CONTACT: CONTACT_PRIVACY,\n GOVERNING_LAW: GOVERNING_LAW_STATE,\n ARBITRATION_SEAT,\n};\n","/**\n * @orangecheck/legal — site registry.\n *\n * Maps each self-hosting site to its legal profile and token context. The\n * twelve `PROTOCOL_LINKED_SITES` deliberately do NOT host their own pages —\n * their footers link to ochk.io, and the protocol document on ochk.io is\n * authored to govern the whole non-custodial family. Three sites self-host:\n * ochk.io, which hosts that document, and the two commercial products,\n * ochk.app and vault, because each describes money flows the protocol\n * document cannot truthfully cover.\n */\n\nimport type { SiteContext } from './types';\nimport { CONTACT_GENERAL, CONTACT_SECURITY } from './constants';\n\nexport const LEGAL_SITES: Record<string, SiteContext> = {\n www: {\n slug: 'www',\n profile: 'protocol',\n host: 'ochk.io',\n product: 'OrangeCheck',\n productShort: 'OrangeCheck',\n contact: CONTACT_GENERAL,\n securityContact: CONTACT_SECURITY,\n selfHosted: true,\n },\n me: {\n slug: 'me',\n profile: 'me',\n host: 'ochk.app',\n product: 'ochk.app',\n productShort: 'ochk.app',\n contact: CONTACT_GENERAL,\n securityContact: CONTACT_SECURITY,\n selfHosted: true,\n // ochk.app writes its brand lowercase, as its own pages do (lead ruling, 2026-11-03).\n brand: 'orangecheck',\n },\n vault: {\n slug: 'vault',\n profile: 'vault',\n host: 'vault.ochk.io',\n product: 'OC Vault',\n productShort: 'Vault',\n contact: CONTACT_GENERAL,\n securityContact: CONTACT_SECURITY,\n selfHosted: true,\n },\n};\n\n/** Sites that share the protocol document hosted on ochk.io (no own pages). */\nexport const PROTOCOL_LINKED_SITES = [\n 'attest',\n 'lock',\n 'vote',\n 'stamp',\n 'agent',\n 'pledge',\n 'docs',\n 'analytics',\n 'chat',\n 'cosign',\n 'btc',\n 'globe',\n] as const;\n\nexport function getSiteContext(slug: string): SiteContext {\n const ctx = LEGAL_SITES[slug];\n if (!ctx) {\n throw new Error(\n `@orangecheck/legal: unknown site \"${slug}\". ` +\n `Known self-hosting sites: ${Object.keys(LEGAL_SITES).join(', ')}.`,\n );\n }\n return ctx;\n}\n\n/**\n * Resolve the footer href for a legal document on a given site.\n *\n * Self-hosting sites get a local path (`/terms`); every other site points at\n * the canonical protocol document on ochk.io. One helper, so no site ever\n * hand-rolls a legal link again.\n */\nexport function legalHref(siteSlug: string, kind: 'terms' | 'privacy' | 'security'): string {\n const ctx = LEGAL_SITES[siteSlug];\n if (ctx?.selfHosted) return `/${kind}`;\n return `https://ochk.io/${kind}`;\n}\n","/**\n * @orangecheck/legal — shared core clause library.\n *\n * Sections here are byte-identical across every profile once tokens resolve.\n * Profiles import them by name and arrange them around profile-specific\n * sections. Anything that genuinely differs per product (overview, fees,\n * data collection, money movement) is NOT here — it lives in the profile file.\n */\n\nimport type { Section } from '../types';\n\n/* ─────────────────────────── TERMS ─────────────────────────── */\n\nexport const eligibility: Section = {\n id: 'eligibility',\n heading: 'eligibility',\n blocks: [\n {\n kind: 'bullets',\n items: [\n 'You must be at least 13 (or the age of digital consent in your jurisdiction)',\n 'You must have the legal capacity to enter into a binding contract',\n 'You must not be prohibited from using the Service under applicable law',\n 'You must comply with all applicable laws and regulations',\n ],\n },\n ],\n};\n\nexport const acceptableUse: Section = {\n id: 'acceptable-use',\n heading: 'acceptable use',\n hint: 'permitted · prohibited',\n blocks: [\n { kind: 'subhead', text: 'prohibited — illegal' },\n {\n kind: 'bullets',\n items: [\n 'Any unlawful purpose',\n 'Violating any applicable laws or regulations',\n 'Fraud, money laundering, or financial crimes',\n 'Infringing intellectual property rights',\n ],\n },\n { kind: 'subhead', text: 'prohibited — harmful' },\n {\n kind: 'bullets',\n items: [\n 'Harass, threaten, or harm others',\n 'Impersonate any person or entity',\n 'Misrepresent your identity or affiliation',\n 'Assert control of a Bitcoin address, identity, or handle you do not control',\n ],\n },\n { kind: 'subhead', text: 'prohibited — technical abuse' },\n {\n kind: 'bullets',\n items: [\n 'Interfere with or disrupt the Service or its servers',\n 'Attempt unauthorized access to any account, system, or data',\n 'Automated scraping or harvesting without permission',\n 'Introduce viruses, malware, or malicious code',\n 'Circumvent security features or rate limits',\n ],\n },\n {\n kind: 'para',\n text: 'We reserve the right to investigate and act against anyone who violates these prohibitions — including terminating access and reporting to law enforcement.',\n },\n ],\n};\n\nexport const intellectualProperty: Section = {\n id: 'intellectual-property',\n heading: 'intellectual property',\n blocks: [\n { kind: 'subhead', text: \"[[ENTITY]]'s rights\" },\n {\n kind: 'para',\n text: 'The Service and its content (excluding user-generated content) are protected by copyright, trademark, patent, and other IP laws — including the [[BRAND]] name, logos, branding, site design, software, code, algorithms, and documentation.',\n },\n { kind: 'subhead', text: 'your license' },\n {\n kind: 'para',\n text: 'You receive a limited, non-exclusive, non-transferable, revocable license to access and use the Service subject to these Terms. You may not sell, sublicense, or use the Service to build a competing product.',\n },\n { kind: 'subhead', text: 'your content' },\n {\n kind: 'para',\n text: 'You retain ownership of content you submit (feedback, support requests, integration material). You grant us a worldwide, non-exclusive, royalty-free license to operate and improve the Service using that content. You are responsible for your content.',\n },\n { kind: 'subhead', text: 'open source' },\n {\n kind: 'para',\n text: '[[BRAND]] protocol specifications and the `@orangecheck/*` packages are released under open-source licenses (MIT unless stated otherwise). Those portions are governed by their own license terms; these Terms govern the hosted service.',\n },\n ],\n};\n\nexport const limitationOfLiability: Section = {\n id: 'liability',\n heading: 'limitation of liability',\n hint: 'maximum legal cap',\n blocks: [\n {\n kind: 'callout',\n emphatic: true,\n text: 'TO THE FULLEST EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT SHALL [[ENTITY_UPPER]], ITS AFFILIATES, OFFICERS, DIRECTORS, EMPLOYEES, AGENTS, LICENSORS, CONTRIBUTORS, OR SUPPLIERS BE LIABLE FOR ANY DAMAGES ARISING OUT OF OR RELATED TO THE SERVICE, THESE TERMS, OR YOUR USE OR INABILITY TO USE THE SERVICE — WHETHER BASED ON CONTRACT, TORT (INCLUDING NEGLIGENCE), STATUTE, INDEMNITY, OR ANY OTHER LEGAL THEORY — EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.',\n },\n { kind: 'subhead', text: 'excluded damages' },\n {\n kind: 'para',\n text: 'This exclusion covers, without limitation: **direct**, indirect, incidental, special, consequential, exemplary, punitive, reliance, and cover damages; and **loss of Bitcoin, sats, cryptocurrency, tokens, assets, funds, private keys, seed phrases, passwords, data, profits, revenue, goodwill, reputation, business opportunity, anticipated savings, or use**.',\n },\n { kind: 'subhead', text: 'hard cap' },\n {\n kind: 'para',\n text: 'If, notwithstanding the above, a court of competent jurisdiction finds [[ENTITY]] liable to you, our **aggregate liability for all claims arising out of or related to the Service or these Terms is capped at the greater of (a) US$100 or (b) the total amount you actually paid [[ENTITY]] in the twelve (12) months immediately preceding the event giving rise to the claim**.',\n },\n { kind: 'subhead', text: 'essential purpose · jurisdictional floor' },\n {\n kind: 'para',\n text: 'These limitations form an essential basis of the bargain and apply even if a limited remedy fails of its essential purpose. Some jurisdictions do not allow certain exclusions; there, the limitations apply to the maximum extent permitted by law and the remainder of these Terms stays in full force.',\n },\n ],\n};\n\nexport const indemnification: Section = {\n id: 'indemnification',\n heading: 'indemnification',\n blocks: [\n {\n kind: 'para',\n text: \"You agree to indemnify, defend, and hold harmless [[ENTITY]] and its affiliates from any claims, liabilities, damages, losses, costs, and expenses (including reasonable attorneys' fees) arising from:\",\n },\n {\n kind: 'bullets',\n items: [\n 'Your use or misuse of the Service',\n 'Your violation of these Terms',\n 'Your violation of any law or regulation',\n 'Your violation of any third-party rights',\n 'Content you submit or share',\n 'Your negligence or willful misconduct',\n ],\n },\n ],\n};\n\nexport const termination: Section = {\n id: 'termination',\n heading: 'termination',\n blocks: [\n {\n kind: 'para',\n text: '**Your right:** stop using the Service at any time. **Our right:** suspend or terminate access with or without cause or notice — including if you violate these Terms, pose a security or legal risk, or we discontinue the Service.',\n },\n { kind: 'subhead', text: 'effect of termination' },\n {\n kind: 'bullets',\n items: [\n 'Your right to use the Service immediately ceases',\n 'We may delete your account and operational data (subject to legal requirements)',\n 'Content already published to public networks (Bitcoin, Nostr) cannot be deleted by [[ENTITY]]',\n 'Surviving sections: intellectual property, disclaimers, liability, indemnification, governing law, dispute resolution',\n ],\n },\n ],\n};\n\nexport const changesToTerms: Section = {\n id: 'changes',\n heading: 'changes',\n blocks: [\n { kind: 'subhead', text: 'to the service' },\n {\n kind: 'para',\n text: 'We may modify, suspend, or discontinue the Service at any time, with or without notice. We are not liable for any modification, suspension, or discontinuation.',\n },\n { kind: 'subhead', text: 'to these terms' },\n {\n kind: 'bullets',\n items: [\n 'We will update the \"last updated\" date',\n 'For material changes, we will provide notice on the website (and by email where we hold one)',\n 'Changes become effective when posted',\n 'Continued use after changes constitutes acceptance',\n ],\n },\n ],\n};\n\nexport const disputeResolution: Section = {\n id: 'disputes',\n heading: 'dispute resolution',\n hint: 'informal → arbitration',\n blocks: [\n { kind: 'subhead', text: 'informal resolution' },\n {\n kind: 'para',\n text: 'Before filing a claim, contact us at [[CONTACT]] to attempt to resolve the dispute informally.',\n },\n { kind: 'subhead', text: 'arbitration · class-action waiver · jury waiver' },\n {\n kind: 'callout',\n emphatic: true,\n text: 'DISPUTES ARISING OUT OF OR RELATED TO THESE TERMS OR THE SERVICE SHALL BE RESOLVED BY FINAL AND BINDING INDIVIDUAL ARBITRATION, EXCEPT AS SPECIFIED BELOW. YOU AND [[ENTITY_UPPER]] EXPRESSLY WAIVE THE RIGHT TO A TRIAL BY JURY AND THE RIGHT TO PARTICIPATE IN ANY CLASS, COLLECTIVE, CONSOLIDATED, MASS, OR REPRESENTATIVE ACTION. ARBITRATION IS ON AN INDIVIDUAL BASIS ONLY.',\n },\n {\n kind: 'bullets',\n items: [\n 'Administered by the American Arbitration Association under its then-current Commercial or Consumer Arbitration Rules (whichever applies)',\n 'Seat of arbitration: [[ARBITRATION_SEAT]] — or, at either party’s election, conducted remotely by video',\n 'Single neutral arbitrator; decision final and binding, enforceable in any court of competent jurisdiction',\n 'The arbitrator — not any court — decides threshold questions of arbitrability, including the validity and scope of this clause',\n ],\n },\n { kind: 'subhead', text: 'exceptions to arbitration' },\n {\n kind: 'bullets',\n items: [\n 'Small-claims court actions (if eligible and filed individually)',\n 'Injunctive or equitable relief to protect intellectual property or confidential information',\n 'Any claim that cannot lawfully be arbitrated under applicable law',\n ],\n },\n { kind: 'subhead', text: 'one-year limit to bring claims' },\n {\n kind: 'para',\n text: 'To the fullest extent permitted by law, any claim arising out of or relating to the Service or these Terms must be commenced **within one (1) year** after it accrues, or it is permanently barred.',\n },\n { kind: 'subhead', text: 'opt-out of arbitration' },\n {\n kind: 'para',\n text: 'You may opt out by sending written notice to [[CONTACT]] within 30 days of first using the Service, including your name, the date you first used the Service, and a clear statement that you wish to opt out. Opting out does not affect the class-action or jury-trial waivers.',\n },\n { kind: 'subhead', text: 'governing law' },\n {\n kind: 'para',\n text: 'These Terms are governed by the laws of the State of [[GOVERNING_LAW]], without regard to conflict-of-law principles, and, where applicable, the U.S. Federal Arbitration Act (9 U.S.C. §§ 1–16). For users in the EEA, UK, or Switzerland, mandatory consumer-protection laws of your country of residence may apply and nothing here overrides those rights.',\n },\n { kind: 'subhead', text: 'entity of record' },\n {\n kind: 'callout',\n text: 'At the date of this document, the party of record is [[ENTITY_LONG]]. References to \"[[ENTITY]]\" mean that party and the operators acting on its behalf; upon formation of a formal legal entity, that entity becomes the party of record and these Terms — including the arbitration and governing-law provisions — bind it as successor without further notice.',\n },\n ],\n};\n\nexport const miscellaneous: Section = {\n id: 'miscellaneous',\n heading: 'miscellaneous',\n blocks: [\n {\n kind: 'bullets',\n items: [\n {\n k: 'entire agreement',\n v: 'these terms + the privacy policy are the entire agreement and supersede any prior agreement on the same subject',\n },\n {\n k: 'severability',\n v: 'if a provision is invalid or unenforceable it is severed and the remainder stays in full force',\n },\n {\n k: 'waiver',\n v: 'failure to enforce a provision is not a waiver of the right to enforce it later',\n },\n {\n k: 'assignment',\n v: 'you may not assign these terms without our consent; we may assign freely in a merger, acquisition, or sale of assets',\n },\n {\n k: 'no agency',\n v: 'nothing here creates a partnership, joint venture, employment, agency, or fiduciary relationship',\n },\n {\n k: 'force majeure',\n v: 'we are not liable for delays or failures caused by events beyond our reasonable control — including network failures, Nostr relay outages, Bitcoin network conditions, government action, or natural disaster',\n },\n {\n k: 'notices',\n v: 'to you via email, the Service, or the website; to us at [[CONTACT]]',\n },\n {\n k: 'electronic acceptance',\n v: 'your use of the Service is electronic acceptance of these terms under applicable e-signature laws',\n },\n ],\n },\n { kind: 'subhead', text: 'sanctions, export controls, and prohibited jurisdictions' },\n {\n kind: 'para',\n text: 'You represent and warrant that you are not, and are not acting on behalf of, any person or entity that is:',\n },\n {\n kind: 'bullets',\n items: [\n 'Located in, organized under the laws of, or ordinarily resident in any country or territory subject to comprehensive U.S., U.N., E.U., or U.K. sanctions',\n \"Identified on the U.S. Treasury OFAC Specially Designated Nationals list, Consolidated Sanctions List, or any other U.S. government restricted-party list\",\n 'Identified on any U.K. HMT, E.U., U.N., or other applicable consolidated sanctions list',\n 'Otherwise subject to a sanctions, export-control, or anti-terrorism restriction that would prohibit your use of the Service',\n ],\n },\n {\n kind: 'para',\n text: 'You agree to comply with all applicable export-control laws, including the U.S. Export Administration Regulations. A breach of this section is a material breach of these Terms.',\n },\n ],\n};\n\n/* ─────────────────────────── PRIVACY ─────────────────────────── */\n\nexport const privacyRights: Section = {\n id: 'your-rights',\n heading: 'your rights',\n hint: 'access · correction · deletion',\n blocks: [\n {\n kind: 'bullets',\n items: [\n {\n k: 'access & portability',\n v: 'request a copy of your personal information in a machine-readable format',\n },\n {\n k: 'correction',\n v: 'request correction of inaccurate or incomplete information',\n },\n {\n k: 'deletion',\n v: 'request deletion of personal information we hold (data published to public networks cannot be deleted by us — see retention)',\n },\n {\n k: 'objection',\n v: 'object to or restrict processing in certain circumstances',\n },\n {\n k: 'withdraw consent',\n v: 'withdraw consent where consent is the legal basis for processing',\n },\n ],\n },\n { kind: 'para', text: 'To exercise any right, email [[PRIVACY_CONTACT]]. We respond within 30 days.' },\n ],\n};\n\nexport const privacyRegional: Section = {\n id: 'regional-rights',\n heading: 'regional rights',\n hint: 'ccpa · gdpr · uk · other',\n blocks: [\n { kind: 'subhead', text: 'california (ccpa / cpra)' },\n {\n kind: 'bullets',\n items: [\n 'Right to know the categories of personal information collected',\n 'Right to delete and to correct your personal information',\n 'Right to opt out of sale or sharing — we do not sell or share personal information',\n 'Right to limit use of sensitive personal information — we do not collect sensitive PI as defined by the CPRA',\n 'Right to non-discrimination for exercising your rights',\n ],\n },\n { kind: 'subhead', text: 'europe (gdpr) & united kingdom (uk gdpr)' },\n {\n kind: 'bullets',\n items: [\n {\n k: 'legal basis',\n v: 'consent, contract performance, legitimate interests (security, abuse prevention, service improvement), and legal obligations',\n },\n {\n k: 'your rights',\n v: 'access, rectification, erasure, restriction, portability, objection, and withdrawal of consent',\n },\n {\n k: 'supervisory authority',\n v: 'right to lodge a complaint with your local EU/EEA data-protection authority, or the UK ICO',\n },\n {\n k: 'eu/uk representative',\n v: 'if and when required, we will designate an Article 27 representative and publish the details here',\n },\n ],\n },\n { kind: 'subhead', text: 'other jurisdictions' },\n {\n kind: 'para',\n text: 'If you reside in a jurisdiction with a comprehensive privacy law — including Brazil (LGPD), Canada (PIPEDA / Law 25), Australia, Japan (APPI), South Korea (PIPA), Switzerland (FADP), or any U.S. state privacy law — you have the equivalent rights of access, correction, deletion, portability, and objection. Email [[PRIVACY_CONTACT]] and we will honour applicable rights under the law of your residence.',\n },\n ],\n};\n\nexport const privacyChildren: Section = {\n id: 'childrens-privacy',\n heading: \"children's privacy\",\n blocks: [\n {\n kind: 'para',\n text: '[[PRODUCT]] is not intended for children under 13 (or the applicable age of digital consent in your jurisdiction). We do not knowingly collect personal information from children. If you believe we have, email [[PRIVACY_CONTACT]] immediately and we will delete it.',\n },\n ],\n};\n\nexport const privacyTransfers: Section = {\n id: 'international-transfers',\n heading: 'international transfers',\n blocks: [\n {\n kind: 'para',\n text: '[[ENTITY]] is operated from the United States. If you access [[PRODUCT]] from elsewhere, your information may be transferred to, stored, and processed in the US or other countries where our service providers operate. For users in the EEA, UK, or Switzerland, we rely on appropriate safeguards for international transfers.',\n },\n ],\n};\n\nexport const privacyChanges: Section = {\n id: 'policy-changes',\n heading: 'changes to this policy',\n blocks: [\n {\n kind: 'bullets',\n items: [\n 'We will update the \"last updated\" date above',\n 'For material changes, we will provide prominent notice on the website',\n 'Continued use after changes constitutes acceptance',\n ],\n },\n ],\n};\n\n/* Security disclosure content lives in the standalone `<SecurityDisclosure>`\n * component (src/security.tsx), not in the document engine. */\n","/**\n * @orangecheck/legal — `protocol` profile.\n *\n * The non-custodial family: the ochk.io umbrella, the six verb sites\n * (attest, lock, vote, stamp, agent, pledge), the docs at ochk.io/docs, and\n * analytics.ochk.io. Free, no money movement, no custody. This is a refresh\n * of the long-standing ochk.io documents — narrowed so it no longer purports\n * to govern the commercial products, which now carry their own Terms.\n */\n\nimport type { DocSpec } from '../types';\nimport {\n acceptableUse,\n changesToTerms,\n disputeResolution,\n eligibility,\n indemnification,\n intellectualProperty,\n limitationOfLiability,\n miscellaneous,\n privacyChanges,\n privacyChildren,\n privacyRegional,\n privacyRights,\n privacyTransfers,\n} from './clauses';\n\nconst COMMERCIAL_SCOPE_NOTE =\n 'These Terms govern the **non-custodial** OrangeCheck family: [ochk.io](https://ochk.io), including its documentation at [ochk.io/docs](https://ochk.io/docs); the verb sites — OC Attest, OC Lock, OC Vote, OC Stamp, OC Agent, OC Pledge; and [chat.ochk.io](https://chat.ochk.io), [cosign.ochk.io](https://cosign.ochk.io), [btc.ochk.io](https://btc.ochk.io) and [globe.ochk.io](https://globe.ochk.io). The commercial products **ochk.app** and **vault.ochk.io** each publish their own Terms; these Terms do not govern your use of those products.';\n\nconst terms: DocSpec = {\n kind: 'terms',\n eyebrow: 'terms',\n title: 'Terms of service',\n description:\n 'These Terms govern your access to and use of the OrangeCheck website, protocol reference sites, and documentation. By using OrangeCheck, you agree to be bound by these Terms.',\n metaTitle: 'Terms of Service — OrangeCheck',\n metaDescription:\n 'The terms and conditions for using OrangeCheck. Non-custodial service provided as-is. You are responsible for your wallet and private keys.',\n effective: '2025-09-30',\n updated: '2026-10-29',\n preamble: [\n {\n kind: 'callout',\n emphatic: true,\n text: 'By accessing or using OrangeCheck, you agree to be bound by these Terms. If you do not agree, do not use the Service. These Terms contain a binding-arbitration, class-action, and jury-trial waiver, important limitations on liability, and specific acknowledgements about the public, permanent, and irrevocable nature of anything you publish.',\n },\n { kind: 'callout', text: COMMERCIAL_SCOPE_NOTE },\n ],\n sections: [\n {\n id: 'overview',\n heading: 'overview',\n hint: 'what orangecheck does / does not',\n blocks: [\n { kind: 'subhead', text: 'what orangecheck does' },\n {\n kind: 'para',\n text: 'OrangeCheck is a family of **non-custodial** protocols and reference tools that let you create cryptographic proof-of-stake artifacts using Bitcoin message signatures (BIP-322), bind self-asserted handles to them, optionally publish them to decentralized Nostr relays, and discover and verify artifacts created by others.',\n },\n {\n kind: 'para',\n text: 'OrangeCheck also runs **chat.ochk.io**, an end-to-end-encrypted messenger; **cosign.ochk.io**, where builders post projects and others join or back them, with any payment going directly from one person to another; **btc.ochk.io**, a read-only Bitcoin market desk; and **globe.ochk.io**, a read-only view of the Bitcoin network.',\n },\n { kind: 'subhead', text: 'what orangecheck does not' },\n {\n kind: 'bullets',\n items: [\n 'Take custody of your Bitcoin, private keys, or wallet credentials',\n 'Broadcast Bitcoin transactions on your behalf',\n 'Provide financial, investment, or legal advice',\n 'Guarantee the accuracy of blockchain data from third-party sources',\n ],\n },\n { kind: 'subhead', text: 'non-custodial nature' },\n {\n kind: 'para',\n text: '**You are solely responsible for** your wallet, keys, device security, and what you sign. We cannot recover lost keys, reverse signatures, or access your funds.',\n },\n ],\n },\n {\n id: 'publication-risks',\n heading: 'publication risks · your acknowledgement',\n hint: 'public, permanent, irrevocable',\n blocks: [\n {\n kind: 'callout',\n emphatic: true,\n text: 'AN ORANGECHECK ENVELOPE IS A SIGNED, PUBLIC ARTIFACT THAT PERMANENTLY LINKS A BITCOIN ADDRESS TO EVERY HANDLE YOU ASSERT. BY CREATING OR PUBLISHING ONE, YOU EXPRESSLY ACCEPT THE RISKS BELOW. WE ARE NOT RESPONSIBLE FOR THE CONSEQUENCES OF YOUR DECISION TO PUBLISH.',\n },\n { kind: 'subhead', text: 'specific risks you accept' },\n {\n kind: 'bullets',\n items: [\n {\n k: 'deanonymization',\n v: 'an envelope binds your address to your handles; chain analysis can then link your other addresses, counterparties, and spending patterns. you cannot un-bind once published.',\n },\n {\n k: 'wealth advertisement',\n v: 'public sat values combined with real-name handles may make you a target for phishing, theft, or coercion. we recommend pseudonymous handles and modest bonds. your personal safety is your responsibility.',\n },\n {\n k: 'irrevocability',\n v: 'envelopes published to Nostr relays are replicated across independent operators. OrangeCheck cannot delete, edit, or revoke Nostr events.',\n },\n {\n k: 'handle spoofing',\n v: 'identity bindings are self-asserted; any user can claim any string. relying parties must verify ownership out-of-band.',\n },\n ],\n },\n ],\n },\n eligibility,\n {\n id: 'account',\n heading: 'account & sign-in',\n hint: 'sign-in optional',\n blocks: [\n {\n kind: 'para',\n text: 'Most of the Service works without registration. Optional sign-in proves one of: a Bitcoin address (a BIP-322 signature), an email inbox (a one-time code), or a Google or GitHub account. No password is ever created. A session is a server-side row plus an `HttpOnly; Secure; SameSite=None` cookie on `.ochk.io`, revoked when you sign out or the cookie expires.',\n },\n {\n kind: 'para',\n text: 'If you use sign-in, you are responsible for the security of the device and wallet you sign with. Anyone with your keys can open a session in your name.',\n },\n ],\n },\n acceptableUse,\n intellectualProperty,\n {\n id: 'third-parties',\n heading: 'third parties',\n hint: 'blockchain · nostr · wallets · relying parties',\n blocks: [\n {\n kind: 'bullets',\n items: [\n {\n k: 'blockchain data',\n v: 'verification relies on third-party APIs (mempool.space, Esplora, or your own node). we do not guarantee accuracy or availability.',\n },\n {\n k: 'opentimestamps calendars',\n v: \"when you claim an OC Chat @handle, your browser sends the claim's fingerprint (a SHA-256 hash) to the OpenTimestamps calendars at alice.btc.calendar.opentimestamps.org, bob.btc.calendar.opentimestamps.org and finney.calendar.eternitywall.com, and reads your address's coins and block headers from mempool.space; each of these sees your IP address and when you asked.\",\n },\n {\n k: 'payments between people',\n v: \"postage on chat.ochk.io, and backing, zaps and bounties on cosign.ochk.io, are Lightning payments you make directly to the other person's wallet. OrangeCheck never holds them, cannot reverse them, and is not a party to them.\",\n },\n {\n k: 'nostr network',\n v: 'decentralized relays operated by third parties. published data is replicated outside our control and may persist indefinitely.',\n },\n {\n k: 'wallet software',\n v: 'browser, mobile, desktop, and hardware wallets are third-party software we do not audit or endorse. a malicious wallet could sign something other than what is displayed.',\n },\n {\n k: 'relying parties',\n v: 'platforms, relays, and integrators independently decide whether to trust any OrangeCheck artifact. OrangeCheck is not a party to, and accepts no liability for, those decisions.',\n },\n {\n k: 'api / sdk consumers',\n v: 'calling a hosted endpoint or using an `@orangecheck/*` package is use of the Service and subject to these Terms; the packages are separately MIT-licensed.',\n },\n ],\n },\n ],\n },\n {\n id: 'fees',\n heading: 'fees',\n hint: 'free',\n blocks: [\n {\n kind: 'para',\n text: 'The protocol sites, the documentation, cosign.ochk.io, btc.ochk.io and globe.ochk.io are free to use, and so is chat.ochk.io. chat.ochk.io also lists an optional paid plan, Personal: when its checkout is open, you pay the price shown before you pay, in advance, for a fixed period, and it does not renew on its own. You are responsible for Bitcoin network fees on any transactions you initiate and for your own ISP and wallet-provider costs. Other paid functionality, if introduced, will be announced with advance notice; the commercial products **ochk.app** and **vault.ochk.io** carry their own pricing and Terms.',\n },\n ],\n },\n {\n id: 'disclaimers',\n heading: 'disclaimers & warranties',\n hint: 'as-is · no warranty of any kind',\n blocks: [\n {\n kind: 'callout',\n emphatic: true,\n text: 'THE SERVICE IS PROVIDED \"AS IS\" AND \"AS AVAILABLE\", WITH ALL FAULTS AND WITHOUT WARRANTY OF ANY KIND. TO THE MAXIMUM EXTENT PERMITTED BY LAW, ORANGECHECK DISCLAIMS ALL WARRANTIES, EXPRESS, IMPLIED, AND STATUTORY — INCLUDING MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE, NON-INFRINGEMENT, AND ACCURACY.',\n },\n { kind: 'subhead', text: 'not financial, legal, or compliance advice' },\n {\n kind: 'para',\n text: \"Nothing OrangeCheck provides — artifacts, metrics, scores, identity bindings, btc.ochk.io's market data, charts and written market commentary (some of it written by an AI model), or other output — is financial, investment, legal, tax, KYC, AML, sanctions, or regulatory-compliance advice. Obtain independent professional advice before relying on the Service for any decision.\",\n },\n { kind: 'subhead', text: 'regulatory status · not a money services business' },\n {\n kind: 'para',\n text: 'The protocol sites do not transmit, transfer, exchange, convert, issue, redeem, or custody any virtual currency, fiat currency, security, or other asset. They sign and verify cryptographic messages; they do not move value. Accordingly, with respect to the protocol sites, OrangeCheck does not hold itself out as a Money Services Business or money transmitter under the U.S. Bank Secrecy Act, a Virtual Asset Service Provider under the FATF Recommendations, a Crypto-Asset Service Provider under the EU MiCA Regulation, a broker-dealer, a payment or e-money institution, a bank, or a regulated identity provider.',\n },\n { kind: 'subhead', text: 'use at your own risk' },\n {\n kind: 'para',\n text: 'YOU ASSUME ALL RISK from your use of the Service. Verify anything load-bearing independently. Features labelled \"beta\", \"experimental\", or \"preview\" carry even fewer guarantees and may change or be removed at any time.',\n },\n ],\n },\n limitationOfLiability,\n indemnification,\n {\n id: 'termination',\n heading: 'termination',\n blocks: [\n {\n kind: 'para',\n text: '**Your right:** stop using the Service at any time. **Our right:** suspend or terminate access with or without cause or notice. On termination, your right to use the Service ceases; artifacts you created may remain publicly accessible and data published to Nostr cannot be deleted by OrangeCheck. The intellectual-property, disclaimer, liability, indemnification, governing-law, and dispute provisions survive.',\n },\n ],\n },\n changesToTerms,\n disputeResolution,\n miscellaneous,\n ],\n summary:\n 'summary: non-custodial service provided as-is. you are responsible for your wallet and private keys. disputes resolved via binding arbitration. commercial products have their own terms.',\n};\n\nconst privacy: DocSpec = {\n kind: 'privacy',\n eyebrow: 'privacy',\n title: 'Privacy policy',\n description:\n 'How OrangeCheck handles data and privacy across the non-custodial protocol family. Non-custodial by design, minimal collection, no account required.',\n metaTitle: 'Privacy Policy — OrangeCheck',\n metaDescription:\n 'How OrangeCheck handles data and privacy. Non-custodial by design, minimal data collection, no account required, privacy-preserving analytics only.',\n effective: '2025-09-30',\n updated: '2026-11-06',\n preamble: [\n {\n kind: 'callout',\n text: \"**What changed, 8 to 31 October 2026.** We corrected this policy where it did not say what is kept or who sees it. Newest first; the [changelog](https://github.com/orangecheck/oc-packages/blob/main/legal/CHANGELOG.md) lists every change.\",\n },\n {\n kind: 'bullets',\n items: [\n { k: \"31 October\", v: \"the owner consoles, analytics.ochk.io and vault.ochk.io's, show every email address masked, refuse an email as a search or action subject, and show a whole address only after a written reason is recorded.\" },\n { k: \"29 October\", v: \"an account also keeps its Google or GitHub id, the roster id that links accounts signed in from one browser, the site you signed up through, a coin that backs it (its address, outpoint and amount, and the message you signed), and OC Chat device vouches and revocations, which are also published to Nostr relays. relay.ochk.io keeps each record with a pseudonym of the sender's IP address, replaced each UTC day, and never the address itself. Our operators' first-sign-in email names only your did:oc and the kind of sign-in. The policy says what chat, cosign, btc and globe keep, who completes a deletion, and what stays.\" },\n { k: \"26 October\", v: \"a session row keeps no IP address, and the sign-in log keeps it for 90 days. relay.ochk.io is named, and our host's connection logs for it hold your IP address and connection times for 7 days. Claiming an OC Chat handle sends its fingerprint to three OpenTimestamps calendars and reads mempool.space, and each sees your IP address.\" },\n { k: \"8 and 9 October\", v: \"the email is stored, encrypted. Each session and the sign-in log keep the full user-agent. Our operators get an email when a new account first signs in.\" },\n ],\n },\n {\n kind: 'callout',\n text: 'This policy covers the **non-custodial** OrangeCheck family — [ochk.io](https://ochk.io), including its documentation at [ochk.io/docs](https://ochk.io/docs), the six verb sites, and [chat.ochk.io](https://chat.ochk.io), [cosign.ochk.io](https://cosign.ochk.io), [btc.ochk.io](https://btc.ochk.io) and [globe.ochk.io](https://globe.ochk.io). The commercial products ochk.app and vault.ochk.io publish their own privacy policies covering the additional data their products handle.',\n },\n ],\n sections: [\n {\n id: 'principles',\n heading: 'our principles',\n hint: 'non-custodial, minimal, transparent',\n blocks: [\n {\n kind: 'bullets',\n items: [\n {\n k: 'non-custodial',\n v: 'we never take custody of your Bitcoin or keys; cryptographic operations happen in your wallet or browser',\n },\n {\n k: 'minimal collection',\n v: 'only what is necessary to provide the Service; no user profiles, no cross-web tracking',\n },\n {\n k: 'optional account',\n v: 'most of the Service needs no sign-in; optional sign-in uses a Bitcoin signature, an email code, or Google/GitHub — never a password',\n },\n {\n k: 'transparency',\n v: 'plain-language policy; ask us anything at [[PRIVACY_CONTACT]]',\n },\n ],\n },\n ],\n },\n {\n id: 'what-we-dont-do',\n heading: \"what we don't do\",\n blocks: [\n {\n kind: 'bullets',\n items: [\n 'No custody of funds and no access to private keys',\n 'No account required for the core service',\n 'No selling or renting of personal information, ever',\n 'No targeted advertising and no cross-site tracking',\n 'No third-party analytics trackers — privacy-preserving analytics only',\n ],\n },\n ],\n },\n {\n id: 'information-we-collect',\n heading: 'information we collect',\n hint: 'scoped, minimal',\n blocks: [\n { kind: 'subhead', text: 'information you provide' },\n {\n kind: 'para',\n text: '**Bitcoin addresses and signatures** are processed client-side to generate a cryptographic proof; this data is public by design. **Identity bindings** you add are included in the signed message and are public. **Messages you send us** — through the contact form or by email — reach our inbox through our email provider (Resend) and are kept only as long as we need them to reply.',\n },\n { kind: 'subhead', text: 'if you sign in' },\n {\n kind: 'bullets',\n items: [\n {\n k: 'account',\n v: 'an opaque `did:oc` identifier, an optional display name and Nostr npub, and when the account was created and last signed in',\n },\n {\n k: 'how you sign in',\n v: 'a Bitcoin address you prove with a signature (stored as is — it is public on-chain anyway); or, for an email code, Google or GitHub, the verified email address — encrypted at rest, plus a one-way hash of it so we can find your account. For Google or GitHub we also store that provider\\'s id for your account, unencrypted, so a changed email still reaches the same account',\n },\n {\n k: 'passkeys',\n v: 'for each passkey you register: its public key, a label, the transports it reported, and when it was added and last used',\n },\n {\n k: 'each session',\n v: 'a hash of the session token, the full user-agent string of the device that opened it, and timestamps',\n },\n {\n k: 'sign-in log',\n v: 'each sign-in and each identity you link or remove, with the IP address and user-agent at the time — kept for security; the IP address is cleared after 90 days',\n },\n {\n k: 'accounts in one browser',\n v: 'sessions opened in the same browser share a roster id, so we can tell which of your accounts were signed in from it; and which of our sites you first signed up through',\n },\n {\n k: 'a coin backing your account',\n v: \"if you back your account with a coin: its address, outpoint and amount, the backing message you signed, and when we last found it unspent, or saw it released or spent. We read the coin from mempool.space. Earlier backings stay with your account. Sites you sign in to get only amount and age floors and a number that differs from site to site (all *.ochk.io sites share one), never the coin\",\n },\n {\n k: 'OC Chat devices',\n v: \"for each chat.ochk.io device we vouch for: its device and Nostr public keys, when we vouched, and the sign-in that asked; for a device you revoke, the signed revocation, which we also publish to Nostr relays\",\n },\n {\n k: 'btc.ochk.io alerts',\n v: 'the market thresholds you save on btc.ochk.io (up to 25), stored with your account',\n },\n {\n k: 'when you first sign in',\n v: 'OrangeCheck’s operators get an email, sent through our email provider (Resend), naming your `did:oc` and the kind of sign-in you used (a Bitcoin wallet, an email code, Google or GitHub). Notices sent up to and including 29 October 2026 (UTC) also named the identity itself: your Bitcoin address or your email address',\n },\n { k: 'never', v: 'a password, a private key, or a seed phrase' },\n ],\n },\n { kind: 'subhead', text: 'who at OrangeCheck can see it' },\n {\n kind: 'para',\n text: \"OrangeCheck's operators can see your account in owner-only consoles: analytics.ochk.io and, for a vault account, vault.ochk.io's. Their account lists show each email address masked: the first character of the part before the @ when that part has three or more characters, and none of it otherwise. Their account searches and actions refuse an email address: an account is found by email only through a lookup. Revealing one address, or looking up one account, asks for a written reason, which is recorded before your email address is shown. A lookup's record has its details about you cleared after 90 days; the reason stays.\",\n },\n { kind: 'subhead', text: 'automatically collected' },\n {\n kind: 'bullets',\n items: [\n { k: 'ip address', v: 'security, rate limiting, service delivery' },\n { k: 'browser/device', v: 'compatibility and UX optimization' },\n { k: 'pages visited', v: 'aggregate, to improve the Service' },\n ],\n },\n { kind: 'subhead', text: 'sent from your browser to others' },\n {\n kind: 'bullets',\n items: [\n {\n k: 'an OC Chat @handle claim',\n v: \"your browser sends the claim's fingerprint (a SHA-256 hash) to the OpenTimestamps calendars at alice.btc.calendar.opentimestamps.org, bob.btc.calendar.opentimestamps.org and finney.calendar.eternitywall.com, and reads your address's coins and block headers from mempool.space; each of these sees your IP address and when you asked. We send them nothing about you ourselves.\",\n },\n {\n k: 'relay.ochk.io',\n v: \"the Nostr relay we run (strfry on Fly.io, in Frankfurt). Your browser connects to it to read and publish signed records; our sites also publish the same records to public relays run by others (see the Terms). It keeps each record it accepts until the same key replaces it with a newer version or the record's own expiry passes: records are public, copied each day to a public archive on GitHub (where earlier versions stay), and otherwise deleted only after a lawful takedown request, which does not remove the copies elsewhere. Each record is stored with a pseudonym of the IP address it came from, made with a key that is kept only in memory and replaced each UTC day, so the relay can limit how much one source writes; your IP address itself is never stored, and the pseudonym is never served or archived. Our hosting provider (Fly.io) carries each connection to it and handles your IP address to do so, for its own short retention window; we keep no separate copy. Our host's connection logs for the relay can hold your IP address and connection times; they are kept for 7 days.\",\n },\n ],\n },\n { kind: 'subhead', text: 'cookies & analytics' },\n {\n kind: 'bullets',\n items: [\n {\n k: 'oc_session',\n v: 'your sign-in, set by ochk.io for every `*.ochk.io` site: HttpOnly; Secure; SameSite=None; Domain=.ochk.io; 30 days',\n },\n {\n k: 'oc_oauth_state',\n v: 'only during a Google or GitHub sign-in: HttpOnly; SameSite=Lax; 10 minutes; deleted when the sign-in completes',\n },\n {\n k: 'oc_theme · oc_skin · oc_motion · oc_logo',\n v: 'your light/dark, appearance, reduced-motion and logo choices (Domain=.ochk.io); not used to identify you. `oc_logo` is set only when you open a page with `?logo=` in its address, and is kept for a year; `?logo=classic` deletes it',\n },\n ],\n },\n {\n kind: 'para',\n text: 'A browser tab may also keep its own copy of a sign-in token in session storage, cleared when the tab closes. We use [Plausible Analytics](https://plausible.io/privacy) — cookie-free, no personal data, aggregate statistics only — alongside our own first-party, cookieless analytics (oc insights): no cookies, no cross-site identity, your IP address is hashed and immediately discarded (never stored), and Do-Not-Track / Global Privacy Control signals are honored. No advertising or tracking cookies.',\n },\n ],\n },\n {\n id: 'chat-cosign-btc-globe',\n heading: 'chat, cosign, btc and globe',\n hint: 'what each of these sites keeps',\n blocks: [\n { kind: 'subhead', text: 'chat.ochk.io' },\n {\n kind: 'bullets',\n items: [\n {\n k: 'messages',\n v: 'end-to-end encrypted. Our server holds a message only as ciphertext, under a per-conversation id that names neither person, until the recipient picks it up: for up to 14 days, or 365 days on the Personal plan. A delivered message is deleted 24 hours after the recipient confirms it. We cannot read message content',\n },\n {\n k: 'on your device',\n v: 'your messages, contacts and settings are kept in your browser. Lock this device with a passphrase to encrypt your device key and messages there',\n },\n {\n k: 'sending limits',\n v: 'a count of messages sent per hour, under a keyed id made from your account, dropped after a day. chat.ochk.io stores no IP address',\n },\n {\n k: 'the Personal plan',\n v: 'if you buy it: your account id, the plan, when you paid and until when, the amount and the invoice id. The invoice our payment processor (BTCPay) holds says what was sold, not who bought it',\n },\n {\n k: 'published to Nostr',\n v: 'your device records, public channel posts (which are not encrypted), and a directory listing if you choose to be listed are public and stay on the relays. Direct messages travel encrypted',\n },\n {\n k: 'sent from your browser',\n v: 'chain data from mempool.space and blockstream.info, the drand network for messages that open at a future block, the OpenTimestamps calendars named above for a handle claim, and the Nostr relays you use; each sees your IP address',\n },\n {\n k: 'analytics',\n v: 'none',\n },\n {\n k: 'deletion',\n v: 'deleting your account deletes chat.ochk.io\\'s other records of you; Personal plan payment records stay for accounting under a keyed id, not your account id. Messages waiting for pickup expire on their own, and what is on Nostr relays stays',\n },\n ],\n },\n { kind: 'subhead', text: 'cosign.ochk.io' },\n {\n kind: 'bullets',\n items: [\n {\n k: 'what you post',\n v: 'your profile, projects, updates, cosigns and vouches are public on cosign.ochk.io',\n },\n {\n k: 'messages',\n v: \"**not end-to-end encrypted.** They are stored on our servers, and OrangeCheck's operators can read them\",\n },\n {\n k: 'reports and notifications',\n v: 'a report you file keeps you as its reporter, the subject and your reason. Notifications are shown in the app only; a read one is deleted after 30 days and any after 90',\n },\n {\n k: 'payments between people',\n v: 'we record each Lightning payment for display (amount, time, status and the receiving Lightning address); the money goes directly between people and cosign never holds it',\n },\n {\n k: 'abuse limits',\n v: 'counts of writes per account, per IP address and per network, under keyed ids, dropped after 2 days; and your account\\'s counts for the last ten minutes, kept with your account. No IP address is stored',\n },\n {\n k: 'deletion',\n v: 'deleting your account deletes your profile, projects and the rest, except that your messages in conversations with other people, the reports you filed, and payment records stay, with your account taken off them',\n },\n ],\n },\n { kind: 'subhead', text: 'btc.ochk.io' },\n {\n kind: 'para',\n text: 'btc.ochk.io keeps only the alert thresholds you save, with your account, and deletes them when your account is deleted. Its planner and paper desk stay in your browser. Its market commentary is written each hour by an AI model provider (Anthropic) from market data and the web searches it runs; nothing about you is sent.',\n },\n { kind: 'subhead', text: 'globe.ochk.io' },\n {\n kind: 'para',\n text: 'globe.ochk.io stores nothing about you. Your browser fetches live network data directly from mempool.space, which sees your IP address.',\n },\n {\n kind: 'para',\n text: 'cosign.ochk.io, btc.ochk.io and globe.ochk.io use the cookie-free analytics described below.',\n },\n ],\n },\n {\n id: 'how-we-use',\n heading: 'how we use information',\n blocks: [\n {\n kind: 'bullets',\n items: [\n 'Generate and verify cryptographic proofs and serve verification pages',\n 'Detect and prevent abuse, spam, and denial-of-service attacks',\n 'Fix bugs, optimize performance, and improve the Service',\n 'Provide technical support',\n ],\n },\n ],\n },\n {\n id: 'retention',\n heading: 'data retention',\n hint: 'scheduled and on-write deletion · permanent public artifacts',\n blocks: [\n {\n kind: 'bullets',\n items: [\n {\n k: 'public artifacts',\n v: 'permanent and publicly shareable; data published to Nostr cannot be deleted by OrangeCheck',\n },\n {\n k: 'request logs',\n v: 'held by our hosting provider (Vercel) for its own short retention window; we keep no separate copy',\n },\n {\n k: 'relay.ochk.io connections',\n v: 'handled by our hosting provider (Fly.io) for its own short retention window; its connection logs for the relay can hold your IP address and connection times for 7 days, and we keep no separate copy',\n },\n {\n k: 'sessions',\n v: 'deleted when you sign out; a session that expires after 30 days is deleted the next time anyone signs in',\n },\n {\n k: 'IP addresses in the sign-in log',\n v: 'cleared after 90 days; the entries themselves stay until your account is deleted',\n },\n {\n k: 'email sign-in codes',\n v: 'the code itself is never stored and expires after 10 minutes; the record that lets it be used once is deleted when it is spent, or with the next code anyone asks for after it expires; per-address and per-network send counts, kept as keyed hashes, are dropped after a day',\n },\n {\n k: 'account, sign-in identities, passkeys, sign-in log, coin backings, OC Chat device records and btc.ochk.io alerts',\n v: 'deleted when your account-deletion request completes. File one in [your account on ochk.app](https://ochk.app/me/account), or ask at [[PRIVACY_CONTACT]]. A person completes the request, and we aim to do that within 48 hours. Nothing is erased while a blocker remains: sats you are owed or payouts still pending on ochk.app, live guardian-operator duties, developer projects or an OC Connect app you own, or a vault team you own that still has other members. What stays: the email our operators received when you first signed in, which names your `did:oc` and the kind of sign-in you used, and, if it was sent up to and including 29 October 2026 (UTC), the identity itself; a revocation already published to Nostr relays, and anything else you published there or anchored to Bitcoin; a marker under a hash of your account id that refuses your old sessions until they would have expired, about 30 days; and, if a site made an account for you, a hashed record of it, so that site is told the account was deleted instead of making a new one',\n },\n {\n k: 'support emails',\n v: 'retained as long as necessary; deleted on request',\n },\n ],\n },\n ],\n },\n {\n id: 'data-security',\n heading: 'data security',\n hint: 'reasonable safeguards · no warranty',\n blocks: [\n {\n kind: 'bullets',\n items: [\n 'HTTPS encryption for all data in transit',\n 'Secure hosting with regular security updates',\n 'Rate limiting and abuse monitoring',\n ],\n },\n {\n kind: 'para',\n text: 'No method of transmission or storage is 100% secure. We use reasonable measures but **do not warrant the security of your data and are not liable for unauthorized access, loss, or theft** — see the [Terms of Service](/terms). If we become aware of a breach of personal data we hold, we will notify affected users and any competent supervisory authority as required by applicable law, including the 72-hour window under Article 33 of the UK & EU GDPR.',\n },\n ],\n },\n privacyRights,\n privacyTransfers,\n privacyRegional,\n privacyChildren,\n privacyChanges,\n ],\n summary:\n 'summary: minimal data, privacy-preserving analytics, never custody of funds, user control of information.',\n};\n\nexport const protocolProfile = { terms, privacy };\n","/**\n * @orangecheck/legal — `me` profile.\n *\n * ochk.app (its API at me.ochk.io): a consumer Bitcoin-backed identity that will pay users in sats.\n * orangecheck holds what users earn during bring-up, no KYC. This is\n * the only profile where value flows TO the user, so the money, custody, and\n * regulated-activity sections are rendered as counsel-review stubs per the\n * \"structure + stubs\" directive — the surrounding contract is complete.\n */\n\nimport type { DocSpec } from '../types';\nimport {\n acceptableUse,\n changesToTerms,\n disputeResolution,\n eligibility,\n indemnification,\n intellectualProperty,\n limitationOfLiability,\n miscellaneous,\n privacyChanges,\n privacyChildren,\n privacyRegional,\n privacyRights,\n privacyTransfers,\n} from './clauses';\n\nconst COMMERCIAL_NOTE =\n '**ochk.app is a commercial product operated by orangecheck.** It is distinct from the non-custodial orangecheck protocol sites; the Terms at [ochk.io/terms](https://ochk.io/terms) do not govern ochk.app. These Terms do. Its API is served at me.ochk.io, from the same accounts and records: these Terms govern the Service at either address, and “ochk.app” in them means both.';\n\nconst terms: DocSpec = {\n kind: 'terms',\n eyebrow: 'terms',\n title: 'Terms of service',\n description:\n 'The terms governing your use of ochk.app and its API at me.ochk.io — a Bitcoin-backed identity that will pay you in sats. orangecheck holds what you earn during bring-up and will pay it to a Lightning wallet you choose. No KYC.',\n metaTitle: 'Terms of Service — ochk.app',\n metaDescription:\n 'Terms of service for ochk.app: a Bitcoin-backed identity that will pay users in sats. orangecheck holds what users earn during bring-up and will pay it to a Lightning wallet they choose. No KYC.',\n effective: '2026-05-15',\n updated: '2026-11-03',\n preamble: [\n {\n kind: 'callout',\n emphatic: true,\n text: 'By accessing or using ochk.app or its API at me.ochk.io, you agree to be bound by these Terms. If you do not agree, do not use the Service. These Terms contain a binding-arbitration, class-action, and jury-trial waiver and important limitations on liability.',\n },\n { kind: 'callout', text: COMMERCIAL_NOTE },\n ],\n sections: [\n {\n id: 'overview',\n heading: 'overview',\n hint: 'what ochk.app is',\n blocks: [\n {\n kind: 'para',\n text: 'ochk.app is an identity you use to sign in across participating sites (\"integrators\"). When an integrator records a billable event for an action you authorize, a share of the fee will flow back to you in sats. Your identity works across the orangecheck family. Every paid event on your account has a receipt, signed by us, and anyone holding one and the public key we publish can check its signature offline, without asking us; a receipt sent to Bitcoin for a timestamp also checks against Bitcoin once it is anchored. If you back your account, it is tied to bitcoin you hold, and that bitcoin stays in your wallet.',\n },\n {\n kind: 'para',\n text: 'ochk.app is **not a bank, exchange, broker, or wallet provider.** It is an identity and reputation service with an attached cashback mechanism. **During bring-up orangecheck operates every role in that mechanism, including custody of the balance it will pay you.** That is a stage, not the design — see the custody section below for what holds today.',\n },\n ],\n },\n {\n id: 'accounts',\n heading: 'accounts & identity',\n hint: 'four ways to sign in',\n blocks: [\n {\n kind: 'para',\n text: 'You may create an identity four ways: with **email** (a one-time code), **Google**, **GitHub**, or **a Bitcoin wallet** (you sign with BIP-322 — full self-custody of your signing key). With email, Google or GitHub you hold no key of your own, so orangecheck holds your signing key. However you sign in, during bring-up orangecheck holds the cashback you accrue; see custody below. Each way produces a stable, opaque `did:oc` identifier. No password is ever stored.',\n },\n {\n kind: 'para',\n text: 'You are responsible for the security of the wallet, device, email account, or recovery mnemonic associated with your identity. Anyone with your keys or recovery factor can act as you. orangecheck cannot recover an account, reverse a sign-in, or restore a lost key or mnemonic.',\n },\n ],\n },\n eligibility,\n {\n id: 'earning',\n heading: 'earning sats',\n hint: 'cashback on billable events',\n blocks: [\n {\n kind: 'stub',\n text: 'The economics of earning sats on ochk.app — how billable events generate cashback, the fee split between you, the integrating site, federation operators, and orangecheck, the timing of credits, and the conditions under which earnings may be withheld, delayed, clawed back, or reversed (including for suspected abuse or wash-trading) — are being finalized for publication before general availability. Until then, earning behavior is governed by the published abuse limits in the section below and the descriptions on [how it works](/how) and [the earn page](/earn). This section will be completed following review by counsel.',\n },\n ],\n },\n {\n id: 'custody',\n heading: 'custody & payouts',\n hint: 'orangecheck-held during bring-up · paid out to a wallet you choose',\n blocks: [\n {\n kind: 'para',\n text: 'Custody depends on how you sign in, and the honest answer differs today from the design.\\n\\n**If you sign in with BIP-322, you hold your own keys.** They never leave your device. orangecheck verifies signatures and relays envelopes; it cannot move the funds in your wallet. That is true now and does not change.\\n\\n**What you earn is a different matter.** Cashback you accrue is a balance orangecheck owes you until it is paid out to the destination you bind. During bring-up orangecheck holds those sats for every user, however they sign in.\\n\\n**If you sign in with email, Google or GitHub, orangecheck currently holds the key that will pay you.** The design is a Fedimint federation: independent guardians hold the bitcoin under a threshold scheme, and orangecheck’s executor holds your claim on it, as ecash, until it is paid out to a Lightning wallet you choose. That federation does not exist yet: there are no independent guardians today, and during bring-up the signing key for the paying rail is operated by orangecheck. So during this period orangecheck is a custodian, of the signing keys of people who sign in with email, Google or GitHub and of every user’s accrued cashback, and the party that will move the money once payouts open.\\n\\nWe state that plainly rather than describing the destination as though it were the present. **The live status of the paying rail — which posture is in force, what bounds it, and what has actually settled — is published on [the custody page](/custody) and machine-readable at `/api/federations`.** Those surfaces are computed from the system rather than written by hand, so they cannot drift from this document the way a fixed sentence would.',\n },\n {\n kind: 'stub',\n text: 'The complete custody disclosure — the federation threshold model and its failure modes, what each guardian can and cannot do, the durability of your balance if a federation or orangecheck ceases operations, and the allocation of risk between you, the federation, and orangecheck — is being finalized for publication before general availability. The honest current-state engineering account is published on the [security page](/security). This section will be completed following review by counsel.',\n },\n ],\n },\n {\n id: 'fees-payouts',\n heading: 'fees, payouts & taxes',\n blocks: [\n {\n kind: 'stub',\n text: 'Platform fees, payout mechanics and minimums, supported payout rails, currency-conversion handling, and the allocation of tax-reporting and tax-payment responsibility for sats you receive are being finalized for publication before general availability. You are advised that cashback received may be taxable income in your jurisdiction and that you are responsible for your own tax compliance. This section will be completed following review by counsel.',\n },\n { kind: 'subhead', text: 'when a payout is held' },\n {\n kind: 'para',\n text: 'We hold a payout, and do not send it, when an earlier attempt to send it may already have gone through; while payouts are paused by a halt, a federation migration or a payout ceiling, or are not yet open to you; while the node that pays cannot cover everything owed, or its fee limit is unknown; for 24 hours after you change your payout destination; when your payout destination is no longer valid; or when our records disagree about what is owed. A paused or limited payout goes out on its own once the pause, ceiling, shortfall or 24 hours have passed; setting a new destination clears a destination hold; and a disagreement clears when we correct the record. A payout whose earlier attempt may have gone through is never retried on its own: we check the payment node, then either mark it paid with the payment\\'s proof or release it to be sent again. A hold does not cancel what you are owed.',\n },\n ],\n },\n {\n id: 'no-kyc',\n heading: 'no kyc, no pii',\n blocks: [\n {\n kind: 'para',\n text: 'ochk.app **does not perform Know-Your-Customer checks** and does not require your legal name, government ID, or physical address to sign in, use apps or get paid. Sybil resistance is achieved through protocol composition — BIP-322 sat-bond attestation, paid-action history, and integrator-defined gates — not identity verification. You must not use ochk.app to evade a KYC, AML, or sanctions obligation that applies to you elsewhere.',\n },\n ],\n },\n {\n id: 'abuse-limits',\n heading: 'abuse, sybil resistance & rate limits',\n blocks: [\n {\n kind: 'para',\n text: 'ochk.app publishes its abuse limits openly so legitimate users can see they are well below them. The canonical, current values are on the [security page](/security). Activity that exceeds a review threshold may be held for human review; activity assessed as sybil farming, wash-trading, or collusion between an integrator and a user may have earnings withheld or reversed and the identity suspended.',\n },\n {\n kind: 'bullets',\n items: [\n 'Do not operate multiple identities to multiply new-account bonuses',\n 'Do not collude with an integrating site to manufacture billable events',\n 'Do not script or automate actions to inflate earnings',\n 'Do not misrepresent a real user action as authorized when it was not',\n ],\n },\n ],\n },\n acceptableUse,\n {\n id: 'integrators',\n heading: 'integrators & relying parties',\n blocks: [\n {\n kind: 'para',\n text: 'Sites that integrate ochk.app through its API at me.ochk.io get their own subject id for the events they report, and your Bitcoin address, email or attestation tier only if you grant that scope. Signing in gives every site the same orangecheck id (did:oc), so sites that compare ids can tell it is you. Integrators independently decide whether and how to trust your identity, including whether to admit, gate, or reject you. orangecheck is not a party to, and accepts no liability for, an integrator’s decisions or an integrator’s own terms, pricing, or conduct.',\n },\n ],\n },\n intellectualProperty,\n {\n id: 'disclaimers',\n heading: 'disclaimers & warranties',\n hint: 'as-is · regulatory status',\n blocks: [\n {\n kind: 'callout',\n emphatic: true,\n text: 'THE SERVICE IS PROVIDED \"AS IS\" AND \"AS AVAILABLE\", WITH ALL FAULTS AND WITHOUT WARRANTY OF ANY KIND. TO THE MAXIMUM EXTENT PERMITTED BY LAW, ORANGECHECK DISCLAIMS ALL WARRANTIES, EXPRESS, IMPLIED, AND STATUTORY — INCLUDING MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE, NON-INFRINGEMENT, AND ACCURACY.',\n },\n {\n kind: 'para',\n text: 'Nothing ochk.app provides is financial, investment, legal, or tax advice. ochk.app does not guarantee any level of earnings; cashback depends on integrator activity outside orangecheck’s control.',\n },\n { kind: 'subhead', text: 'regulatory status' },\n {\n kind: 'stub',\n text: 'ochk.app is designed so that independent Fedimint federations hold the bitcoin behind the cashback, while orangecheck’s executor holds each person’s claim on it and pays it out. **Those federations do not exist yet. During bring-up orangecheck itself custodies the cashback every user earns, and will be the one that transmits it**, because it is operating every role in the system in order to prove it works before third parties take any of them. Self-custody (BIP-322) users keep their own keys, which orangecheck never holds; the cashback they accrue is held by orangecheck until it is paid out, as it is for every user. The full regulatory analysis of both the bring-up posture and the designed end state — including orangecheck’s position under the U.S. Bank Secrecy Act money-transmission rules, the FATF Recommendations, the EU MiCA Regulation, and applicable U.S. state money-transmitter regimes, and the corresponding licensing posture — is being prepared and will be published before general availability. This section will be completed following review by counsel.',\n },\n ],\n },\n limitationOfLiability,\n indemnification,\n {\n id: 'termination',\n heading: 'termination',\n blocks: [\n {\n kind: 'para',\n text: '**Your right:** stop using ochk.app at any time; you may delete your identity in [your settings](/me/settings). **Our right:** suspend or terminate access with or without cause, including for abuse or legal risk. Deleting your identity does not settle a balance orangecheck owes you. If your balance is above zero, bind a payout destination and instruct a cash-out before you delete, or contact us. Hashes anchored to Bitcoin and commitments published to Nostr are immutable and cannot be deleted by orangecheck; neither names you. The disclaimer, liability, indemnification, governing-law, and dispute provisions survive.',\n },\n ],\n },\n changesToTerms,\n disputeResolution,\n miscellaneous,\n ],\n summary:\n 'summary: an identity that will pay you in sats. if you sign in with your own bitcoin wallet, you keep your keys; if you sign in with email, google or github, orangecheck holds the key that will pay you. either way, during bring-up orangecheck holds what you have earned until it is paid out. money, custody, fee, and regulatory terms are being finalized — see the marked sections.',\n};\n\nconst privacy: DocSpec = {\n kind: 'privacy',\n eyebrow: 'privacy',\n title: 'Privacy policy',\n description:\n 'How ochk.app and its API at me.ochk.io handle your data: no KYC, no PII required, and a documented, falsifiable account of every record orangecheck stores.',\n metaTitle: 'Privacy Policy — ochk.app',\n metaDescription:\n 'ochk.app privacy policy. No KYC, no PII required, and a full account of what orangecheck stores.',\n effective: '2026-05-15',\n updated: '2026-11-06',\n preamble: [\n {\n kind: 'callout',\n text: \"**What changed, 8 to 31 October 2026.** We corrected this policy where it did not say what is kept or who sees it. Newest first; the [changelog](https://github.com/orangecheck/oc-packages/blob/main/legal/CHANGELOG.md) lists every change.\",\n },\n {\n kind: 'bullets',\n items: [\n { k: \"29 October\", v: \"the contact form sends your email address, an optional name, the topic and your message to our inbox through our email provider (Resend).\" },\n { k: \"27 and 28 October\", v: \"a guardian application holds the questionnaire's answers, and the charter publishes its handle, name, jurisdiction, contact channel and fingerprint. The policy says which records a deletion keeps, and that cached copies expire within a day.\" },\n { k: \"26 October\", v: \"a session record keeps no IP address, and the sign-in log keeps it for 90 days.\" },\n { k: \"25 October\", v: \"me.ochk.io records which sites you sign in to or share data with, and when. No site sees that record.\" },\n { k: \"24 October\", v: \"signing in gives every site the same did:oc.\" },\n { k: \"23 October\", v: \"an account a site makes for you through orangecheck Connect keeps a hash of the site's id for you, a keyed hash of your email if the site sent one, when it was made, whether you agreed to earn, and what it earned.\" },\n { k: \"19 October\", v: \"ochk.app is the Service, and me.ochk.io is its API.\" },\n { k: \"15 October\", v: \"ochk.app's own cookies are listed: __Host-oc_session, and __Host-oc_oauth for at most ten minutes during a Google or GitHub sign-in.\" },\n { k: \"8 October\", v: \"a session record keeps your user-agent, and an email is personal data.\" },\n ],\n },\n {\n kind: 'callout',\n text: 'This policy covers the Service at both of its addresses, ochk.app and its API at me.ochk.io: one account, one store of records, one operator; “ochk.app” below means both. Its product is identity that will pay you; its privacy posture is what makes it distinct from Sign in with Google. For a side-by-side comparison you can falsify, see [the privacy comparison](/privacy-compare).',\n },\n ],\n sections: [\n {\n id: 'at-a-glance',\n heading: 'at a glance',\n hint: 'no kyc · no pii · what sites get',\n blocks: [\n {\n kind: 'bullets',\n items: [\n {\n k: 'no kyc',\n v: 'ochk.app never collects your legal name, government ID, or physical address from people who sign in, use apps or get paid',\n },\n {\n k: 'little pii at signup',\n v: 'a Bitcoin signature needs no personal data; an email code, Google or GitHub sign-in stores your email address, encrypted',\n },\n {\n k: 'what sites get',\n v: 'each site gets its own subject id for events, but signing in gives every site the same orangecheck id (did:oc), so sites that compare ids can tell it is you',\n },\n {\n k: 'no advertising',\n v: 'no third-party ad identity, no behavioural ad targeting, no data sale — ever',\n },\n {\n k: 'deletable',\n v: 'you can delete your account in your settings: your sign-in closes and your data is erased, except the few records named under identity & account deletion',\n },\n ],\n },\n ],\n },\n {\n id: 'what-oc-stores',\n heading: 'what orangecheck stores',\n hint: 'metadata only · none enables fund movement',\n blocks: [\n {\n kind: 'para',\n text: 'The list below is what an auditor would find in orangecheck’s production infrastructure. Every item is metadata; none of it lets orangecheck sign on your behalf.',\n },\n {\n kind: 'bullets',\n items: [\n {\n k: 'account row',\n v: 'opaque did_oc, optional display name and Nostr npub, timestamps. The underlying email is encrypted at rest; a BIP-322 address is stored plaintext (it is already public on-chain). No password hash, no private key, no mnemonic.',\n },\n {\n k: 'session record',\n v: 'a hash of the session token, the account id, the user-agent of the device that opened it, and timestamps. The token itself lives only in your browser.',\n },\n {\n k: 'sign-in log',\n v: 'each sign-in and each identity you link or remove, with the IP address and user-agent at the time, kept for security; the IP address is cleared after 90 days.',\n },\n {\n k: 'event envelopes',\n v: 'per billable event: a content-addressed, signed record of what was authorized, by whom, and the fee breakdown. Used to route cashback.',\n },\n {\n k: 'custody-state envelopes',\n v: 'a record of each change in how your account is custodied, kept on your own identity timeline. None is made while the system is in testing.',\n },\n {\n k: 'site sign-ins',\n v: 'which live sites you signed in to or shared data with through orangecheck, and when. A site can name you as the person who earned for an event only once this record exists. No site sees it, and it is erased with your account or with that site\\'s project.',\n },\n {\n k: 'guardian applications',\n v: 'an application to run a guardian, made through ochk.app or by email to apply@ochk.io, holds your answers to the operator questionnaire, which asks, among other things, for a public handle, the name of the person or organisation that will run the guardian, its jurisdiction, a public contact channel, a key fingerprint and two references. Through ochk.app it can also hold an optional handle and email address that only the reviewer sees, for the decision. The questionnaire’s handle, name, jurisdiction, contact channel and fingerprint are published in the federation charter, because guardians are named trust anchors. Nothing is checked against an ID, and nothing else is published.',\n },\n {\n k: 'messages you send us',\n v: 'the contact form at ochk.app/contact sends your email address, an optional name, the topic you pick and your message to our inbox through our email provider (Resend). They are kept only as long as we need them to reply',\n },\n {\n k: 'public anchors',\n v: 'an OpenTimestamps proof over each envelope’s hash, and a salted commitment to each envelope on Nostr. Public by design, and neither names you, the site or the amount. The envelope itself is served only to whoever holds its id. Drop manifests, which name no one, are published in full.',\n },\n ],\n },\n ],\n },\n {\n id: 'scoped-identity',\n heading: 'what sites get, and scopes',\n blocks: [\n {\n kind: 'para',\n text: 'Each site gets its own subject id for events: a **scoped subject**, derived from your account and that site’s project key, so the site recognizes you when you return. But signing in gives every site the same orangecheck id (did:oc), so sites that compare ids can tell it is you. An integrator only ever receives your master Bitcoin address, email, or attestation tier if you **explicitly grant that scope** for that site — each scope is opt-in, per-site, and revocable at any time from your account.',\n },\n {\n kind: 'para',\n text: 'Integrators never receive your event history with other sites, your wallet balance, your site sign-ins, or any cross-integrator data, regardless of scopes granted.',\n },\n ],\n },\n {\n id: 'cross-site-graph',\n heading: 'the cross-site events graph',\n hint: 'honest current state',\n blocks: [\n {\n kind: 'para',\n text: 'orangecheck’s billing engine necessarily knows which user earned which cashback across integrating sites — that join is how the right wallet is credited. Today that linkage exists in plain storage on me.ochk.io infrastructure; orangecheck commits, as a **policy** matter enforced by access controls and audit logging, not to build cross-site behavioural profiles. A per-integrator blinded-identifier design that removes the linkage architecturally is active research and not yet shipped. We disclose this honestly rather than overclaim.',\n },\n ],\n },\n {\n id: 'cookies',\n heading: 'cookies',\n blocks: [\n {\n kind: 'para',\n text: 'On ochk.app, up to three cookies of its own, set for ochk.app alone. `__Host-oc_session` — a sign-in token bound to ochk.app (HttpOnly, Secure, SameSite=Lax); it cannot sign you in anywhere else. `__Host-oc_oauth` — kept for at most ten minutes while you sign in with Google or GitHub, then deleted. `oc_logo` — which of our two logos you chose, set only when you open a page with `?logo=` in its address and kept for a year; `?logo=classic` deletes it. Your light/dark choice stays in your browser’s local storage, not a cookie. Page analytics use orangecheck’s own counter at insights.ochk.io: no cookie; a visit is counted by a hash salted daily, the salt is deleted after 48 hours, and your IP address and browser string are never stored.',\n },\n {\n kind: 'para',\n text: 'On me.ochk.io, five cookies. `oc_session` — the Ed25519-signed session token issued by ochk.io (HttpOnly, Secure, SameSite=None, Domain=.ochk.io). `oc_theme`, `oc_skin`, `oc_motion` and `oc_logo` — your dark/light, appearance, reduced-motion and logo preferences (Domain=.ochk.io), not auth-bearing. No tracking cookies, no advertising IDs, no third-party pixels. Page analytics use [Plausible](https://plausible.io/privacy) — cookie-free, no PII, aggregate only.',\n },\n ],\n },\n {\n id: 'how-we-use',\n heading: 'how we use information',\n blocks: [\n {\n kind: 'bullets',\n items: [\n 'Route cashback to the correct identity and wallet',\n 'Detect and prevent sybil farming, wash-trading, and abuse',\n 'Operate sign-in and verification across the orangecheck family',\n 'Fix bugs, improve the Service, and respond to support requests',\n ],\n },\n ],\n },\n {\n id: 'retention',\n heading: 'data retention',\n blocks: [\n {\n kind: 'bullets',\n items: [\n {\n k: 'event & rebind envelopes',\n v: 'retained as the canonical earnings and custody-state record; their hashes on Bitcoin and commitments on Nostr are immutable',\n },\n {\n k: 'request logs',\n v: 'held by our hosting provider (Vercel) for its own short retention window; we keep no separate copy',\n },\n {\n k: 'session records',\n v: 'retained until the session is revoked or expires',\n },\n {\n k: 'IP addresses in the sign-in log',\n v: 'cleared after 90 days; the entries themselves stay until your account is deleted',\n },\n {\n k: 'account row',\n v: 'deleted, with your sign-in identities, passkeys, sessions and sign-in log, when your account-deletion request completes; anchored and published data cannot be deleted by anyone',\n },\n ],\n },\n ],\n },\n {\n id: 'data-security',\n heading: 'data security',\n blocks: [\n {\n kind: 'para',\n text: 'HTTPS in transit; emails encrypted at rest; access to production data is allowlisted and audit-logged. No method of storage is perfectly secure — we use reasonable measures but do not warrant security; see the [Terms of Service](/terms). If we become aware of a breach of personal data we hold, we will notify affected users and any competent supervisory authority as required by applicable law.',\n },\n ],\n },\n privacyRights,\n {\n id: 'deletion',\n heading: 'identity & account deletion',\n blocks: [\n {\n kind: 'para',\n text: 'In [your settings](/me/settings) you can delete your account. A person completes the request, and we aim to do that within 48 hours: an alert tells us when one has waited a day. Completing it closes your sign-in, so signing in again starts a new account, and erases your data on ochk.io, me.ochk.io, vault, chat and cosign, except a few records. Payment records keep their amounts and times for accounting, and our audit log and your deletion request stay, without the reason you gave. We keep a record that your account was deleted, out of public view, so sessions you already had stop working and the deletion can be shown. Each keeps your account only as a keyed id, or not at all, so the record by itself doesn\\'t say whose account it was. On cosign, your messages in conversations with other people and the reports you filed stay, with your account taken off them. Backups roll off within 30 days, and copies cached by our CDN expire within a day. Deleting does not pay out sats orangecheck holds for you: settle a non-zero balance first. If you run a guardian, you can delete only once your operator key holds no seat or hosted guardian, has finished any exit, created no federation that still exists, and is owed nothing. Charter signatures, incidents and amendment proposals the key signed stay public under the key, with what you wrote in them; exit records and machine reports stay visible to that federation\\'s guardians and to us. Hashes anchored to Bitcoin and records published to Nostr cannot be deleted by anyone. me.ochk.io\\'s own anchors name no one, but attestations, polls, pledges, stamps and a chat listing you published carry your Bitcoin address.',\n },\n ],\n },\n {\n id: 'site-made-accounts',\n heading: 'an account a site made for you',\n blocks: [\n {\n kind: 'para',\n text: 'A site that signs you in its own way can use orangecheck Connect to make an orangecheck account for you. For that account orangecheck keeps a hash of the id the site gave you, never the id; a keyed hash of your email address if the site sent one, never the address; when the account was made; whether the site said you agreed to earn with it; and what it earned, if the site pays. It keeps no sign-in times, because the account has no sign-in of its own. Until you agree, through the site or by claiming it, the account is for sign-in only and earns nothing.',\n },\n {\n kind: 'para',\n text: 'You can claim it on ochk.app with a link the site gives you, or with an email address the site verified and you hold. It then becomes part of your own account, and deleting your account deletes it. The site can delete it too, for example when you close your account with that site, unless it holds earnings: those stay yours until you claim them. After a deletion orangecheck keeps only a hash of the id the site gave you, with the site\\'s app id, so the site cannot quietly make the account again; it can only when you agree again.',\n },\n ],\n },\n privacyTransfers,\n privacyRegional,\n privacyChildren,\n privacyChanges,\n ],\n summary:\n 'summary: no kyc, no pii required, and a documented account of every record orangecheck stores.',\n};\n\nexport const meProfile = { terms, privacy };\n","/**\n * @orangecheck/legal — `vault` profile.\n *\n * vault.ochk.io: an end-to-end-encrypted secrets vault sold as paid SaaS.\n * Client-side AES-256-GCM; OrangeCheck stores opaque ciphertext only and\n * cannot read vault contents. Payment is inbound-only Bitcoin ON-CHAIN — no\n * fund custody — so the stubs cover pricing and refund\n * durability rather than money movement.\n */\n\nimport type { DocSpec } from '../types';\nimport {\n acceptableUse,\n changesToTerms,\n disputeResolution,\n eligibility,\n indemnification,\n intellectualProperty,\n limitationOfLiability,\n miscellaneous,\n privacyChanges,\n privacyChildren,\n privacyRegional,\n privacyRights,\n privacyTransfers,\n} from './clauses';\n\nconst COMMERCIAL_NOTE =\n '**OC Vault is a commercial product operated by OrangeCheck**, available at vault.ochk.io. It is distinct from the non-custodial OrangeCheck protocol sites; the Terms at [ochk.io/terms](https://ochk.io/terms) do not govern OC Vault. These Terms do.';\n\nconst terms: DocSpec = {\n kind: 'terms',\n eyebrow: 'terms',\n title: 'Terms of service',\n description:\n 'The terms governing your use of OC Vault — an end-to-end-encrypted secrets vault. Client-side encryption; OrangeCheck stores ciphertext only and cannot read your data.',\n metaTitle: 'Terms of Service — OC Vault',\n metaDescription:\n 'Terms of service for OC Vault (vault.ochk.io): an end-to-end-encrypted secrets vault. Client-side encryption, on-chain Bitcoin payment, no fund custody.',\n effective: '2026-05-15',\n updated: '2026-10-08',\n preamble: [\n {\n kind: 'callout',\n emphatic: true,\n text: 'By accessing or using OC Vault, you agree to be bound by these Terms. If you do not agree, do not use the Service. These Terms contain a binding-arbitration, class-action, and jury-trial waiver and important limitations on liability.',\n },\n { kind: 'callout', text: COMMERCIAL_NOTE },\n ],\n sections: [\n {\n id: 'overview',\n heading: 'overview',\n hint: 'what oc vault is',\n blocks: [\n {\n kind: 'para',\n text: 'OC Vault stores passwords, one-time-password seeds, API keys, notes, and small files. Every item is **encrypted client-side** in your browser under a vault key that only your passphrase or recovery code unlocks; we store that key only in sealed form. When you sync to the cloud, OrangeCheck stores an opaque encrypted blob — **OrangeCheck cannot read your vault contents, item names, or item types.**',\n },\n {\n kind: 'para',\n text: 'OC Vault is built on the OC Lock protocol. It is **not** a custodial service for funds and does not take possession of any cryptocurrency.',\n },\n ],\n },\n {\n id: 'accounts',\n heading: 'accounts',\n blocks: [\n {\n kind: 'para',\n text: 'You sign in with your OrangeCheck account: a Bitcoin address you prove via BIP-322, an email one-time code, or Google/GitHub. Your entries are encrypted under a vault key that your vault passphrase (or recovery code) unlocks; signing in does not decrypt anything. You are responsible for keeping that passphrase and recovery code safe.',\n },\n ],\n },\n {\n id: 'plans-billing',\n heading: 'plans, payment & billing',\n hint: 'on-chain · inbound only',\n blocks: [\n {\n kind: 'para',\n text: 'OC Vault offers a free tier and paid tiers purchased with Bitcoin **on-chain**. OrangeCheck **receives** payment and never sends funds to users; OC Vault holds no custodial balance for you. Every paid tier is a **prepaid period** that expires and does not auto-renew — there is no perpetual or \"lifetime\" tier, and none is sold. The current tiers, their prices and their period lengths are published at [vault.ochk.io/pricing](https://vault.ochk.io/pricing), which is the authoritative price list; prices are not restated here so that this document cannot contradict it. All paid tiers are subject to the **service limits** below.',\n },\n {\n kind: 'stub',\n text: 'The full commercial terms for paid tiers — billing cycle and renewal behavior, the refund and cancellation policy, proration, and the consequences of non-renewal for stored data — are being finalized for publication. This section will be completed following review by counsel.',\n },\n ],\n },\n {\n id: 'service-limits',\n heading: 'service limits',\n hint: 'storage · per-entry size · bandwidth',\n blocks: [\n {\n kind: 'para',\n text: 'Every tier is subject to the following service limits. They are deliberately set well above the needs of a personal password vault but bound the storage and bandwidth a single account may consume on the shared infrastructure. The limits are **enforced in code**; exceeding them returns an HTTP 507 (storage) or 429 (rate) response.',\n },\n { kind: 'subhead', text: 'storage' },\n {\n kind: 'bullets',\n items: [\n {\n k: 'entries per personal vault',\n v: 'up to **5,000** entries (envelope ids). A brand-new entry counts against this ceiling; replacing an existing entry does not.',\n },\n {\n k: 'entries per team vault',\n v: 'up to **5,000** entries, shared across team members.',\n },\n {\n k: 'per-entry size',\n v: 'each entry\\'s ciphertext is capped at **1.25 MB** (≈ 1 MB of plaintext payload — sufficient for any password, TOTP seed, API key, note, or small file).',\n },\n {\n k: 'total ciphertext per personal vault',\n v: 'up to **≈ 1 GiB** (1,073,741,824 bytes) of ciphertext per identity. Typical real-world vaults are well under 50 MB.',\n },\n {\n k: 'total ciphertext per team vault',\n v: 'up to **≈ 2 GiB** of ciphertext per team.',\n },\n ],\n },\n { kind: 'subhead', text: 'bandwidth & request rate' },\n {\n kind: 'para',\n text: 'The API is rate-limited per IP address as a fair-use measure. Current ceilings: up to **1,000 blob reads / writes per minute**, **120 manifest listings per minute**, and **30 escrow-key writes per minute**. Exceeding a limit returns HTTP 429; legitimate clients retry with backoff. There is no per-month bandwidth cap; the delta-sync protocol makes a steady-state sync fetch only the change manifest, so day-to-day bandwidth use is negligible.',\n },\n { kind: 'subhead', text: 'adjustments' },\n {\n kind: 'para',\n text: 'OrangeCheck may adjust these limits with reasonable advance notice — for example, to defend the service against abuse, to keep pace with infrastructure costs, or to lift a ceiling that is constraining legitimate use. We will not lower a limit below a number that would reduce **existing** data already stored under a paid tier without offering an export and a reasonable migration window.',\n },\n ],\n },\n {\n id: 'continuity',\n heading: 'continuity & export',\n blocks: [\n {\n kind: 'para',\n text: 'The encrypted backup (settings → encrypted backup) is free on every tier. It writes one file holding your vault key and every entry, sealed under a passphrase you choose (scrypt, then AES-256-GCM), so it restores on any device and stays decryptable with standard, open primitives if OC Vault is discontinued. The plain export holds entries without the key and is readable only where your vault key already is.',\n },\n {\n kind: 'stub',\n text: 'The wind-down notice period and the continuity commitments OrangeCheck offers if the Service is discontinued are being finalized for publication. This section will be completed following review by counsel.',\n },\n ],\n },\n {\n id: 'your-data',\n heading: 'your data & encryption',\n hint: 'you hold the only key',\n blocks: [\n {\n kind: 'callout',\n emphatic: true,\n text: 'ORANGECHECK CANNOT READ, RECOVER, OR RESET YOUR VAULT. IF YOU LOSE YOUR VAULT KEY AND ALL RECOVERY FACTORS, YOUR ENCRYPTED DATA IS PERMANENTLY UNRECOVERABLE — BY YOU AND BY US. THIS IS THE INTENDED SECURITY PROPERTY, NOT A DEFECT.',\n },\n {\n kind: 'para',\n text: 'You are solely responsible for safeguarding your vault key and any recovery material, for the lawfulness of what you store, and for maintaining your own independent backups of anything critical.',\n },\n ],\n },\n acceptableUse,\n intellectualProperty,\n {\n id: 'third-parties',\n heading: 'third parties',\n blocks: [\n {\n kind: 'bullets',\n items: [\n {\n k: 'payment processing',\n v: 'Bitcoin payments are processed via a self-hosted BTCPay Server; we do not guarantee the availability of the Bitcoin network or of any payment processor',\n },\n {\n k: 'storage / hosting',\n v: 'encrypted blobs are stored with third-party infrastructure providers; they receive ciphertext only',\n },\n ],\n },\n ],\n },\n {\n id: 'disclaimers',\n heading: 'disclaimers & warranties',\n hint: 'as-is · no warranty',\n blocks: [\n {\n kind: 'callout',\n emphatic: true,\n text: 'THE SERVICE IS PROVIDED \"AS IS\" AND \"AS AVAILABLE\", WITH ALL FAULTS AND WITHOUT WARRANTY OF ANY KIND. TO THE MAXIMUM EXTENT PERMITTED BY LAW, ORANGECHECK DISCLAIMS ALL WARRANTIES, EXPRESS, IMPLIED, AND STATUTORY — INCLUDING MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND ACCURACY — AND DOES NOT WARRANT THAT THE SERVICE WILL BE UNINTERRUPTED OR THAT STORED DATA WILL BE FREE FROM LOSS.',\n },\n {\n kind: 'para',\n text: 'Maintain your own backups of anything critical. The encryption design that prevents OrangeCheck from reading your data also prevents OrangeCheck from recovering it.',\n },\n ],\n },\n limitationOfLiability,\n indemnification,\n eligibility,\n changesToTerms,\n disputeResolution,\n miscellaneous,\n ],\n summary:\n 'summary: end-to-end encrypted; orangecheck stores ciphertext only and cannot recover your vault. pricing and refund terms are being finalized — see the marked sections.',\n};\n\nconst privacy: DocSpec = {\n kind: 'privacy',\n eyebrow: 'privacy',\n title: 'Privacy policy',\n description:\n 'How OC Vault handles data. End-to-end encrypted by design — OrangeCheck stores opaque ciphertext and cannot read your vault, item names, or item types.',\n metaTitle: 'Privacy Policy — OC Vault',\n metaDescription:\n 'OC Vault privacy policy. End-to-end encrypted; OrangeCheck stores ciphertext only and cannot read your vault contents.',\n effective: '2026-05-15',\n updated: '2026-11-06',\n preamble: [\n {\n kind: 'callout',\n text: \"**What changed, 8 to 31 October 2026.** We corrected this policy where it did not say what is kept or who sees it. Newest first; the [changelog](https://github.com/orangecheck/oc-packages/blob/main/legal/CHANGELOG.md) lists every change.\",\n },\n {\n kind: 'bullets',\n items: [\n { k: \"31 October\", v: \"an emailed team invite keeps the invitee's address on the invite and shows it to the team's managers, the email goes through our email provider (Resend), and its link carries the team key only sealed under a one-time code.\" },\n { k: \"29 October\", v: \"the browser extension is described. Deleting your account removes the sealed vault key and the rest of your vault data, keeps payment records under a keyed id, and is refused while you own a team that still has other members.\" },\n { k: \"8 October\", v: \"your vault is filed under your did:oc, and the vault key is stored on our server, sealed under your passphrase and your recovery code.\" },\n ],\n },\n ],\n sections: [\n {\n id: 'principles',\n heading: 'our principles',\n hint: 'zero-knowledge by design',\n blocks: [\n {\n kind: 'para',\n text: 'OC Vault is designed so that OrangeCheck cannot read your data. Encryption and decryption happen in your browser. What OrangeCheck stores is an opaque, double-encrypted blob with no readable item names, types, or contents.',\n },\n ],\n },\n {\n id: 'what-we-collect',\n heading: 'information we collect',\n blocks: [\n {\n kind: 'bullets',\n items: [\n {\n k: 'account id',\n v: 'the opaque did:oc of the OrangeCheck account you sign in with; your vault is filed under it',\n },\n {\n k: 'sealed vault key',\n v: 'your vault key, encrypted under your passphrase and under your recovery code, so a new device can unlock; OrangeCheck cannot open it without one of them',\n },\n {\n k: 'team email (optional)',\n v: 'if you choose to show teammates an email address in a team vault, that address',\n },\n {\n k: 'emailed team invite',\n v: \"if a team manager emails you an invite: your email address, which is kept on the invite and shown to the team's managers, and sent with the invite link through our email provider (Resend). The link carries the team key only sealed under a one-time code the manager gives you themselves; OrangeCheck never sees the code or the key. The invite is deleted when a manager revokes it, with the team, or when the account that sent or claimed it is deleted\",\n },\n {\n k: 'payment records',\n v: 'for paid tiers: the BTCPay invoice id, sats paid, tier, and entitlement expiry. No card number, no billing address',\n },\n {\n k: 'encrypted blobs',\n v: 'opaque ciphertext filed under your account id — OrangeCheck cannot decrypt it',\n },\n {\n k: 'per-item metadata',\n v: 'one row per stored item, carrying its opaque envelope id and a last-updated timestamp. That means we CAN see how many items you store and when each last changed — the count is what enforces the per-account item ceiling in the service limits, and the timestamp is what lets a second device know which items to re-sync. We cannot see what any item is: not its contents, not its name, not its type. This entry previously appeared on the \"what we cannot see\" list, which was wrong.',\n },\n {\n k: 'access tokens',\n v: 'for developer / CLI / CI access: an SHA-256 hash of each token, an optional label, the granted scope (read or read-write), creation / last-used / optional expiry timestamps. We never store the token itself — only its hash.',\n },\n {\n k: 'technical data',\n v: 'IP address and request metadata, for security and rate limiting',\n },\n ],\n },\n ],\n },\n {\n id: 'what-we-cannot-see',\n heading: 'what we cannot see',\n blocks: [\n {\n kind: 'bullets',\n items: [\n 'The contents of any vault item',\n 'The names, titles, or types of your items',\n 'Your vault key in usable form, your passphrase, or your recovery code — we hold the key only sealed under them',\n 'Your access tokens (only the SHA-256 hash is stored)',\n ],\n },\n ],\n },\n {\n id: 'surfaces',\n heading: 'vault surfaces (web, extension, CLI, SDK)',\n hint: 'same vault, same zero-knowledge guarantee',\n blocks: [\n {\n kind: 'para',\n text: 'The same encrypted vault is reachable from the web app, the browser extension, and the CLI and SDK. The zero-knowledge guarantee — that OrangeCheck only ever holds ciphertext — applies to all of them.',\n },\n { kind: 'subhead', text: 'browser extension (not in a store yet)' },\n {\n kind: 'para',\n text: 'The OC Vault browser extension is built for Chrome and Firefox but is not yet in either browser\\'s store; its source is public at [github.com/orangecheck/oc-vault-extension](https://github.com/orangecheck/oc-vault-extension), and you can build and load it yourself. It fetches the same encrypted blobs the web app does, may cache them **as ciphertext** in extension storage, and decrypts in its service worker only after you unlock it. The vault key lives in memory and a RAM-only `storage.session` slot and is never written to disk in the clear; if you turn on passkey unlock, it is also stored sealed to your passkey. The content script that offers autofill receives only **one entry\\'s username and password at fill time**; it never receives the vault key or the entry index. The extension talks only to vault.ochk.io, and to ochk.io for sign-in: no analytics, no telemetry, no remote code.',\n },\n { kind: 'subhead', text: 'developer platform — access tokens, CLI, SDK, GitHub Action' },\n {\n kind: 'para',\n text: 'For headless access (`oc-vault` CLI, the `@orangecheck/vault-core` SDK, CI / GitHub Actions), you may mint **access tokens** at [vault.ochk.io/vault/developer](https://vault.ochk.io/vault/developer). A token authorizes **transport only** — it lets the caller fetch your encrypted blobs and the passphrase-wrapped escrow, and (for tokens minted with a write scope) write new ciphertext. **A token carries no key material:** a leaked token yields only ciphertext, the same thing the server already holds. The passphrase still performs decryption in your local process and is never transmitted. We store only the SHA-256 hash of each token; tokens can be revoked at any time from the same page.',\n },\n ],\n },\n {\n id: 'cookies',\n heading: 'cookies & analytics',\n blocks: [\n {\n kind: 'para',\n text: 'No cookies of vault.ochk.io\\'s own. The family sign-in cookie `oc_session` (set by ochk.io: HttpOnly; Secure; SameSite=None; Domain=.ochk.io; 30 days) and the appearance cookies `oc_theme`, `oc_skin`, `oc_motion` and `oc_logo` (your logo choice, set only when you open a page with `?logo=` in its address) apply here. Your vault data lives in your browser\\'s IndexedDB, under your account. Page analytics use [Plausible](https://plausible.io/privacy) — cookie-free, no PII, aggregate only. No advertising or tracking cookies.',\n },\n ],\n },\n {\n id: 'retention',\n heading: 'data retention',\n blocks: [\n {\n kind: 'bullets',\n items: [\n {\n k: 'encrypted blobs',\n v: 'kept while your account is active; you can delete the whole cloud copy at any time from settings',\n },\n {\n k: 'sealed vault key',\n v: 'kept so a new device can unlock; deleting the cloud copy does not remove it, and deleting your account does',\n },\n {\n k: 'payment records',\n v: 'retained as required for accounting and entitlement verification; when your account is deleted they stay under a keyed id, not your account id',\n },\n {\n k: 'deleting your account',\n v: 'removes your encrypted blobs, devices and grants, sealed vault key, access tokens, one-time shares, the teams you own alone, and your seats and invites in other teams. It is refused while you own a team that still has other members',\n },\n {\n k: 'request logs',\n v: 'held by our hosting provider (Vercel) for its own short retention window; rate-limit counters keyed by IP expire with their window',\n },\n ],\n },\n ],\n },\n {\n id: 'data-security',\n heading: 'data security',\n blocks: [\n {\n kind: 'para',\n text: 'Client-side AES-256-GCM encryption, HTTPS in transit, and a server that only ever holds ciphertext. No method of storage is perfectly secure — we use reasonable measures but do not warrant security; see the [Terms of Service](/terms). Because of the encryption design, a compromise of OrangeCheck infrastructure exposes ciphertext, not your secrets.',\n },\n ],\n },\n privacyRights,\n privacyTransfers,\n privacyRegional,\n privacyChildren,\n privacyChanges,\n ],\n summary:\n 'summary: end-to-end encrypted; orangecheck stores ciphertext only and cannot read your vault contents.',\n};\n\nexport const vaultProfile = { terms, privacy };\n","/** @orangecheck/legal — profile registry consumed by `buildDoc`. */\n\nimport type { DocKind, DocSpec, LegalProfile } from '../types';\nimport { protocolProfile } from './protocol';\nimport { meProfile } from './me';\nimport { vaultProfile } from './vault';\n\nexport const PROFILES: Record<LegalProfile, Record<DocKind, DocSpec>> = {\n protocol: protocolProfile,\n me: meProfile,\n vault: vaultProfile,\n};\n","/**\n * @orangecheck/legal — document builder.\n *\n * `buildDoc(site, kind)` is the single entry point a site page calls. It picks\n * the profile spec, interpolates `[[TOKEN]]` placeholders from global + site\n * context, numbers the sections, and returns a fully resolved `LegalDoc`. Pure\n * and synchronous, so it can run at module scope in a page file.\n */\n\nimport type { Block, BulletItem, DocKind, DocSpec, LegalDoc, Section } from './types';\nimport { BRAND, ENTITY_PENDING, GLOBAL_TOKENS, LEGAL_ENTITY, LEGAL_ENTITY_LONG } from './constants';\nimport { getSiteContext } from './registry';\nimport { PROFILES } from './content';\n\nconst TOKEN_RE = /\\[\\[([A-Z_]+)\\]\\]/g;\n\nfunction fill(text: string, tokens: Record<string, string>): string {\n return text.replace(TOKEN_RE, (match, key: string) => tokens[key] ?? match);\n}\n\nfunction fillBullet(item: BulletItem, tokens: Record<string, string>): BulletItem {\n if (typeof item === 'string') return fill(item, tokens);\n return { k: fill(item.k, tokens), v: fill(item.v, tokens) };\n}\n\nfunction fillBlock(block: Block, tokens: Record<string, string>): Block {\n switch (block.kind) {\n case 'para':\n case 'subhead':\n case 'stub':\n return { ...block, text: fill(block.text, tokens) };\n case 'callout':\n return { ...block, text: fill(block.text, tokens) };\n case 'bullets':\n return { ...block, items: block.items.map((i) => fillBullet(i, tokens)) };\n }\n}\n\nfunction fillSection(section: Section, tokens: Record<string, string>, index: number): Section {\n return {\n ...section,\n num: String(index + 1).padStart(2, '0'),\n heading: fill(section.heading, tokens),\n hint: section.hint ? fill(section.hint, tokens) : undefined,\n blocks: section.blocks.map((b) => fillBlock(b, tokens)),\n };\n}\n\nfunction fillSpec(spec: DocSpec, tokens: Record<string, string>): DocSpec {\n return {\n ...spec,\n eyebrow: fill(spec.eyebrow, tokens),\n title: fill(spec.title, tokens),\n description: fill(spec.description, tokens),\n metaTitle: fill(spec.metaTitle, tokens),\n metaDescription: fill(spec.metaDescription, tokens),\n preamble: spec.preamble?.map((b) => fillBlock(b, tokens)),\n sections: spec.sections.map((s, i) => fillSection(s, tokens, i)),\n summary: spec.summary ? fill(spec.summary, tokens) : undefined,\n };\n}\n\n/** Build a fully resolved legal document for one site. */\nexport function buildDoc(siteSlug: string, kind: DocKind): LegalDoc {\n const ctx = getSiteContext(siteSlug);\n const spec = PROFILES[ctx.profile][kind];\n const brand = ctx.brand ?? BRAND;\n const entity = ENTITY_PENDING && ctx.brand ? ctx.brand : LEGAL_ENTITY;\n const tokens: Record<string, string> = {\n ...GLOBAL_TOKENS,\n BRAND: brand,\n ENTITY: entity,\n ENTITY_LONG: LEGAL_ENTITY_LONG.replace(LEGAL_ENTITY, entity),\n ENTITY_UPPER: entity.toUpperCase(),\n PRODUCT: ctx.product,\n PRODUCT_SHORT: ctx.productShort,\n HOST: ctx.host,\n CONTACT: ctx.contact,\n SECURITY_CONTACT: ctx.securityContact,\n };\n return {\n ...fillSpec(spec, tokens),\n site: ctx.slug,\n profile: ctx.profile,\n };\n}\n","/**\n * @orangecheck/legal — minimal inline markup.\n *\n * Authored legal strings stay plain text but may use a tiny, well-bounded\n * markup so emphasis and links survive the data model:\n * **bold** → emphasised foreground text\n * `code` → monospace\n * [label](https://…) → external anchor (new tab)\n * [label](mailto:…) → mail anchor\n * [label](/path) → internal anchor\n *\n * Links are plain `<a>` elements — legal pages are not perf-sensitive, and\n * avoiding `next/link` keeps this package free of a Next peer dependency.\n */\n\nimport React from 'react';\n\nconst INLINE_RE = /(\\*\\*[^*]+\\*\\*|`[^`]+`|\\[[^\\]]+\\]\\([^)]+\\))/g;\nconst LINK_RE = /^\\[([^\\]]+)\\]\\(([^)]+)\\)$/;\n\nexport function renderInline(text: string): React.ReactNode {\n const parts = text.split(INLINE_RE);\n return parts.map((part, i) => {\n if (!part) return null;\n\n if (part.startsWith('**') && part.endsWith('**')) {\n return (\n <strong key={i} className=\"text-foreground font-semibold\">\n {part.slice(2, -2)}\n </strong>\n );\n }\n\n if (part.startsWith('`') && part.endsWith('`')) {\n return (\n <code key={i} className=\"font-mono text-[0.95em]\">\n {part.slice(1, -1)}\n </code>\n );\n }\n\n const link = LINK_RE.exec(part);\n if (link) {\n const label = link[1] ?? '';\n const href = link[2] ?? '';\n const external = /^https?:\\/\\//.test(href);\n return (\n <a\n key={i}\n href={href}\n className=\"text-primary underline\"\n {...(external ? { target: '_blank', rel: 'noopener noreferrer' } : {})}\n >\n {label}\n </a>\n );\n }\n\n return <React.Fragment key={i}>{part}</React.Fragment>;\n });\n}\n","/**\n * @orangecheck/legal — render components.\n *\n * `<LegalDocument>` turns a resolved `LegalDoc` into a page body. It renders\n * its own header, the effective/updated bar, every section, and the trailing\n * summary — so a consuming site page only supplies `<Seo>` and a container.\n * Styling uses the family's shared design tokens (`primary`, `muted-foreground`,\n * `card`, `border`, `warning`, `font-display`, `font-mono`), so the same\n * component renders natively on every .ochk.io site.\n */\n\nimport type { Block, BulletItem, LegalDoc, Section } from './types';\nimport { renderInline } from './markup';\n\nfunction Para({ text }: { text: string }) {\n return <p className=\"text-muted-foreground\">{renderInline(text)}</p>;\n}\n\nfunction SubHead({ text }: { text: string }) {\n return (\n <h3 className=\"font-display text-primary mt-6 mb-2 text-xs font-bold tracking-widest uppercase\">\n {renderInline(text)}\n </h3>\n );\n}\n\nfunction Bullets({ items }: { items: BulletItem[] }) {\n return (\n <ul className=\"divide-y border font-mono text-xs\">\n {items.map((item, i) => {\n if (typeof item === 'string') {\n return (\n <li key={i} className=\"flex items-start gap-3 px-4 py-2.5\">\n <span className=\"text-primary mt-0.5 flex-shrink-0\">{'>>'}</span>\n <span className=\"text-muted-foreground\">{renderInline(item)}</span>\n </li>\n );\n }\n return (\n <li key={i} className=\"flex flex-wrap items-start gap-x-4 gap-y-1 px-4 py-2.5\">\n <span className=\"text-primary w-40 flex-shrink-0 font-bold tracking-widest uppercase\">\n {item.k}\n </span>\n <span className=\"text-muted-foreground flex-1\">{renderInline(item.v)}</span>\n </li>\n );\n })}\n </ul>\n );\n}\n\nfunction Callout({ text, emphatic }: { text: string; emphatic?: boolean }) {\n return (\n <div className=\"border-primary/30 bg-primary/[0.03] border px-4 py-3 font-mono text-xs leading-relaxed\">\n <span className=\"text-primary mr-2\">{emphatic ? '!! ' : '§ '}</span>\n <span className={emphatic ? 'text-foreground font-medium' : 'text-foreground'}>\n {renderInline(text)}\n </span>\n </div>\n );\n}\n\n/**\n * A section the family has not finalised. Rendered as an unmissable,\n * warning-toned notice — honest to users (these surfaces are pre-GA) and\n * impossible for whoever finalises the money/custody/SLA terms to overlook.\n */\nfunction Stub({ text }: { text: string }) {\n return (\n <div className=\"border-warning/40 bg-warning/[0.05] border px-4 py-3.5 font-mono text-xs leading-relaxed\">\n <div className=\"text-warning mb-1.5 font-bold tracking-widest uppercase\">\n {'§ pending · counsel review'}\n </div>\n <p className=\"text-muted-foreground\">{renderInline(text)}</p>\n </div>\n );\n}\n\nfunction BlockView({ block }: { block: Block }) {\n switch (block.kind) {\n case 'para':\n return <Para text={block.text} />;\n case 'subhead':\n return <SubHead text={block.text} />;\n case 'bullets':\n return <Bullets items={block.items} />;\n case 'callout':\n return <Callout text={block.text} emphatic={block.emphatic} />;\n case 'stub':\n return <Stub text={block.text} />;\n }\n}\n\nfunction SectionView({ section }: { section: Section }) {\n return (\n <section className=\"border-t py-10\">\n <div className=\"mb-6 flex flex-wrap items-baseline gap-x-3 gap-y-1\">\n <span className=\"font-display text-primary text-sm font-bold tabular-nums\">\n [{section.num}]\n </span>\n <span className=\"font-display text-lg font-bold tracking-wider uppercase\">\n {section.heading}\n </span>\n {section.hint && (\n <span className=\"text-muted-foreground font-mono text-[11px]\">\n {'// '}\n {section.hint}\n </span>\n )}\n </div>\n <div className=\"max-w-3xl space-y-4 font-mono text-sm leading-relaxed\">\n {section.blocks.map((b, i) => (\n <BlockView key={i} block={b} />\n ))}\n </div>\n </section>\n );\n}\n\nexport interface LegalDocumentProps {\n doc: LegalDoc;\n}\n\n/** Renders a complete legal document body (header → sections → summary). */\nexport function LegalDocument({ doc }: LegalDocumentProps) {\n return (\n <article>\n <header className=\"pt-2 pb-4\">\n <div className=\"font-display text-primary mb-3 text-xs font-bold tracking-widest uppercase\">\n {'§ '}\n {doc.eyebrow}\n </div>\n <h1 className=\"font-display text-3xl font-bold tracking-tight sm:text-4xl\">\n {doc.title}\n </h1>\n <p className=\"text-muted-foreground mt-4 max-w-3xl text-sm leading-relaxed\">\n {renderInline(doc.description)}\n </p>\n </header>\n\n <div className=\"flex flex-wrap gap-x-6 gap-y-1 border-b pb-4 font-mono text-[11px]\">\n <span>\n <span className=\"text-muted-foreground tracking-widest uppercase\">\n effective:{' '}\n </span>\n <span className=\"text-foreground tabular-nums\">{doc.effective}</span>\n </span>\n <span>\n <span className=\"text-muted-foreground tracking-widest uppercase\">\n last updated:{' '}\n </span>\n <span className=\"text-foreground tabular-nums\">{doc.updated}</span>\n </span>\n </div>\n\n {doc.preamble && doc.preamble.length > 0 && (\n <div className=\"mt-6 space-y-3\">\n {doc.preamble.map((b, i) => (\n <BlockView key={i} block={b} />\n ))}\n </div>\n )}\n\n <div className=\"mt-2\">\n {doc.sections.map((s) => (\n <SectionView key={s.id} section={s} />\n ))}\n </div>\n\n {doc.summary && (\n <p className=\"text-muted-foreground mt-10 border-t pt-6 font-mono text-[11px]\">\n {'// '}\n {doc.summary}\n </p>\n )}\n </article>\n );\n}\n","/**\n * @orangecheck/legal — shared security-disclosure block.\n *\n * Security pages stay bespoke per product (each describes a different custody\n * and data posture), but the *vulnerability-disclosure mechanics* should be\n * identical family-wide. Drop `<SecurityDisclosure>` into any bespoke\n * `/security` page to get a consistent \"how to report / what to expect\" block.\n */\n\nexport interface SecurityDisclosureProps {\n /** Security contact mailbox. */\n securityContact?: string;\n /** Heading shown above the block. Pass `null` to omit. */\n heading?: string | null;\n}\n\nexport function SecurityDisclosure({\n securityContact = 'security@ochk.io',\n heading = 'responsible disclosure',\n}: SecurityDisclosureProps) {\n return (\n <div className=\"font-mono text-sm leading-relaxed\">\n {heading && (\n <h2 className=\"font-display text-foreground mb-4 text-lg font-bold tracking-wider uppercase\">\n {heading}\n </h2>\n )}\n\n <div className=\"border-primary/30 bg-primary/[0.03] mb-4 border px-4 py-3 text-xs leading-relaxed\">\n <span className=\"text-primary mr-2\">{'!! '}</span>\n <span className=\"text-foreground\">\n Don't open public GitHub issues for exploitable bugs. Public disclosure\n before a fix ships puts everyone using the protocol at risk.\n </span>\n </div>\n\n <p className=\"text-muted-foreground mb-4\">\n Email{' '}\n <a\n href={`mailto:${securityContact}`}\n className=\"text-primary underline decoration-dotted underline-offset-3\"\n >\n {securityContact}\n </a>\n , or open a private GitHub security advisory on the most relevant{' '}\n <code className=\"text-[0.95em]\">orangecheck/*</code> repository.\n </p>\n\n <ul className=\"divide-y border text-xs\">\n {(\n [\n ['reply', 'we aim to reply to every report within 30 days'],\n ['fix', \"we can't promise a time to a fix yet\"],\n [\n 'coordinated disclosure',\n 'we credit you (unless you prefer anonymity) and publish an advisory once the fix ships',\n ],\n [\n 'bounty',\n 'no paid bounty program yet — the ecosystem is young; we are grateful for responsible disclosure',\n ],\n ] as const\n ).map(([k, v]) => (\n <li key={k} className=\"flex flex-wrap items-start gap-x-4 gap-y-1 px-4 py-2.5\">\n <span className=\"text-primary w-44 flex-shrink-0 font-bold tracking-widest uppercase\">\n {k}\n </span>\n <span className=\"text-muted-foreground flex-1\">{v}</span>\n </li>\n ))}\n </ul>\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/constants.ts","../src/registry.ts","../src/content/clauses.ts","../src/content/protocol.ts","../src/content/me.ts","../src/content/vault.ts","../src/content/index.ts","../src/build.ts","../src/markup.tsx","../src/components.tsx","../src/security.tsx"],"names":["terms","privacy","COMMERCIAL_NOTE","jsx","React","jsxs"],"mappings":";;;;;;;;;;AAqBO,IAAM,YAAA,GAAe;AAGrB,IAAM,KAAA,GAAQ,aAAA;AACd,IAAM,iBAAA,GAAoB;AAG1B,IAAM,cAAA,GAAiB;AAEvB,IAAM,eAAA,GAAkB;AACxB,IAAM,gBAAA,GAAmB;AACzB,IAAM,eAAA,GAAkB;AAGxB,IAAM,mBAAA,GAAsB,yBAAA;AAC5B,IAAM,gBAAA,GAAmB,qCAAA;AAGzB,IAAM,aAAA,GAAwC;AAAA,EACjD,KAAA;AAAA,EACA,MAAA,EAAQ,YAAA;AAAA,EACR,WAAA,EAAa,iBAAA;AAAA;AAAA,EAEb,YAAA,EAAc,aAAa,WAAA,EAAY;AAAA,EACvC,OAAA,EAAS,eAAA;AAAA,EACT,gBAAA,EAAkB,gBAAA;AAAA,EAClB,eAAA,EAAiB,eAAA;AAAA,EACjB,aAAA,EAAe,mBAAA;AAAA,EACf;AACJ,CAAA;;;ACnCO,IAAM,WAAA,GAA2C;AAAA,EACpD,GAAA,EAAK;AAAA,IACD,IAAA,EAAM,KAAA;AAAA,IACN,OAAA,EAAS,UAAA;AAAA,IACT,IAAA,EAAM,SAAA;AAAA,IACN,OAAA,EAAS,aAAA;AAAA,IACT,YAAA,EAAc,aAAA;AAAA,IACd,OAAA,EAAS,eAAA;AAAA,IACT,eAAA,EAAiB,gBAAA;AAAA,IACjB,UAAA,EAAY;AAAA,GAChB;AAAA,EACA,EAAA,EAAI;AAAA,IACA,IAAA,EAAM,IAAA;AAAA,IACN,OAAA,EAAS,IAAA;AAAA,IACT,IAAA,EAAM,UAAA;AAAA,IACN,OAAA,EAAS,UAAA;AAAA,IACT,YAAA,EAAc,UAAA;AAAA,IACd,OAAA,EAAS,eAAA;AAAA,IACT,eAAA,EAAiB,gBAAA;AAAA,IACjB,UAAA,EAAY,IAAA;AAAA;AAAA,IAEZ,KAAA,EAAO;AAAA,GACX;AAAA,EACA,KAAA,EAAO;AAAA,IACH,IAAA,EAAM,OAAA;AAAA,IACN,OAAA,EAAS,OAAA;AAAA,IACT,IAAA,EAAM,eAAA;AAAA,IACN,OAAA,EAAS,UAAA;AAAA,IACT,YAAA,EAAc,OAAA;AAAA,IACd,OAAA,EAAS,eAAA;AAAA,IACT,eAAA,EAAiB,gBAAA;AAAA,IACjB,UAAA,EAAY;AAAA;AAEpB;AAGO,IAAM,qBAAA,GAAwB;AAAA,EACjC,QAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,WAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA;AACJ;AAEO,SAAS,eAAe,IAAA,EAA2B;AACtD,EAAA,MAAM,GAAA,GAAM,YAAY,IAAI,CAAA;AAC5B,EAAA,IAAI,CAAC,GAAA,EAAK;AACN,IAAA,MAAM,IAAI,KAAA;AAAA,MACN,CAAA,kCAAA,EAAqC,IAAI,CAAA,6BAAA,EACR,MAAA,CAAO,KAAK,WAAW,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA;AAAA,KACxE;AAAA,EACJ;AACA,EAAA,OAAO,GAAA;AACX;AASO,SAAS,SAAA,CAAU,UAAkB,IAAA,EAAgD;AACxF,EAAA,MAAM,GAAA,GAAM,YAAY,QAAQ,CAAA;AAChC,EAAA,IAAI,GAAA,EAAK,UAAA,EAAY,OAAO,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA;AACpC,EAAA,OAAO,mBAAmB,IAAI,CAAA,CAAA;AAClC;;;AC3EO,IAAM,WAAA,GAAuB;AAAA,EAChC,EAAA,EAAI,aAAA;AAAA,EACJ,OAAA,EAAS,aAAA;AAAA,EACT,MAAA,EAAQ;AAAA,IACJ;AAAA,MACI,IAAA,EAAM,SAAA;AAAA,MACN,KAAA,EAAO;AAAA,QACH,8EAAA;AAAA,QACA,mEAAA;AAAA,QACA,wEAAA;AAAA,QACA;AAAA;AACJ;AACJ;AAER,CAAA;AAEO,IAAM,aAAA,GAAyB;AAAA,EAClC,EAAA,EAAI,gBAAA;AAAA,EACJ,OAAA,EAAS,gBAAA;AAAA,EACT,IAAA,EAAM,2BAAA;AAAA,EACN,MAAA,EAAQ;AAAA,IACJ,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,2BAAA,EAAuB;AAAA,IAChD;AAAA,MACI,IAAA,EAAM,SAAA;AAAA,MACN,KAAA,EAAO;AAAA,QACH,sBAAA;AAAA,QACA,8CAAA;AAAA,QACA,8CAAA;AAAA,QACA;AAAA;AACJ,KACJ;AAAA,IACA,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,2BAAA,EAAuB;AAAA,IAChD;AAAA,MACI,IAAA,EAAM,SAAA;AAAA,MACN,KAAA,EAAO;AAAA,QACH,kCAAA;AAAA,QACA,kCAAA;AAAA,QACA,2CAAA;AAAA,QACA;AAAA;AACJ,KACJ;AAAA,IACA,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,mCAAA,EAA+B;AAAA,IACxD;AAAA,MACI,IAAA,EAAM,SAAA;AAAA,MACN,KAAA,EAAO;AAAA,QACH,sDAAA;AAAA,QACA,6DAAA;AAAA,QACA,qDAAA;AAAA,QACA,+CAAA;AAAA,QACA;AAAA;AACJ,KACJ;AAAA,IACA;AAAA,MACI,IAAA,EAAM,MAAA;AAAA,MACN,IAAA,EAAM;AAAA;AACV;AAER,CAAA;AAEO,IAAM,oBAAA,GAAgC;AAAA,EACzC,EAAA,EAAI,uBAAA;AAAA,EACJ,OAAA,EAAS,uBAAA;AAAA,EACT,MAAA,EAAQ;AAAA,IACJ,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,qBAAA,EAAsB;AAAA,IAC/C;AAAA,MACI,IAAA,EAAM,MAAA;AAAA,MACN,IAAA,EAAM;AAAA,KACV;AAAA,IACA,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,cAAA,EAAe;AAAA,IACxC;AAAA,MACI,IAAA,EAAM,MAAA;AAAA,MACN,IAAA,EAAM;AAAA,KACV;AAAA,IACA,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,cAAA,EAAe;AAAA,IACxC;AAAA,MACI,IAAA,EAAM,MAAA;AAAA,MACN,IAAA,EAAM;AAAA,KACV;AAAA,IACA,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,aAAA,EAAc;AAAA,IACvC;AAAA,MACI,IAAA,EAAM,MAAA;AAAA,MACN,IAAA,EAAM;AAAA;AACV;AAER,CAAA;AAEO,IAAM,qBAAA,GAAiC;AAAA,EAC1C,EAAA,EAAI,WAAA;AAAA,EACJ,OAAA,EAAS,yBAAA;AAAA,EACT,IAAA,EAAM,mBAAA;AAAA,EACN,MAAA,EAAQ;AAAA,IACJ;AAAA,MACI,IAAA,EAAM,SAAA;AAAA,MACN,QAAA,EAAU,IAAA;AAAA,MACV,IAAA,EAAM;AAAA,KACV;AAAA,IACA,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,kBAAA,EAAmB;AAAA,IAC5C;AAAA,MACI,IAAA,EAAM,MAAA;AAAA,MACN,IAAA,EAAM;AAAA,KACV;AAAA,IACA,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,UAAA,EAAW;AAAA,IACpC;AAAA,MACI,IAAA,EAAM,MAAA;AAAA,MACN,IAAA,EAAM;AAAA,KACV;AAAA,IACA,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,6CAAA,EAA2C;AAAA,IACpE;AAAA,MACI,IAAA,EAAM,MAAA;AAAA,MACN,IAAA,EAAM;AAAA;AACV;AAER,CAAA;AAEO,IAAM,eAAA,GAA2B;AAAA,EACpC,EAAA,EAAI,iBAAA;AAAA,EACJ,OAAA,EAAS,iBAAA;AAAA,EACT,MAAA,EAAQ;AAAA,IACJ;AAAA,MACI,IAAA,EAAM,MAAA;AAAA,MACN,IAAA,EAAM;AAAA,KACV;AAAA,IACA;AAAA,MACI,IAAA,EAAM,SAAA;AAAA,MACN,KAAA,EAAO;AAAA,QACH,mCAAA;AAAA,QACA,+BAAA;AAAA,QACA,yCAAA;AAAA,QACA,0CAAA;AAAA,QACA,6BAAA;AAAA,QACA;AAAA;AACJ;AACJ;AAER,CAAA;AAuBO,IAAM,cAAA,GAA0B;AAAA,EACnC,EAAA,EAAI,SAAA;AAAA,EACJ,OAAA,EAAS,SAAA;AAAA,EACT,MAAA,EAAQ;AAAA,IACJ,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,gBAAA,EAAiB;AAAA,IAC1C;AAAA,MACI,IAAA,EAAM,MAAA;AAAA,MACN,IAAA,EAAM;AAAA,KACV;AAAA,IACA,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,gBAAA,EAAiB;AAAA,IAC1C;AAAA,MACI,IAAA,EAAM,SAAA;AAAA,MACN,KAAA,EAAO;AAAA,QACH,wCAAA;AAAA,QACA,8FAAA;AAAA,QACA,sCAAA;AAAA,QACA;AAAA;AACJ;AACJ;AAER,CAAA;AAEO,IAAM,iBAAA,GAA6B;AAAA,EACtC,EAAA,EAAI,UAAA;AAAA,EACJ,OAAA,EAAS,oBAAA;AAAA,EACT,IAAA,EAAM,6BAAA;AAAA,EACN,MAAA,EAAQ;AAAA,IACJ,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,qBAAA,EAAsB;AAAA,IAC/C;AAAA,MACI,IAAA,EAAM,MAAA;AAAA,MACN,IAAA,EAAM;AAAA,KACV;AAAA,IACA,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,uDAAA,EAAkD;AAAA,IAC3E;AAAA,MACI,IAAA,EAAM,SAAA;AAAA,MACN,QAAA,EAAU,IAAA;AAAA,MACV,IAAA,EAAM;AAAA,KACV;AAAA,IACA;AAAA,MACI,IAAA,EAAM,SAAA;AAAA,MACN,KAAA,EAAO;AAAA,QACH,0IAAA;AAAA,QACA,mHAAA;AAAA,QACA,2GAAA;AAAA,QACA;AAAA;AACJ,KACJ;AAAA,IACA,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,2BAAA,EAA4B;AAAA,IACrD;AAAA,MACI,IAAA,EAAM,SAAA;AAAA,MACN,KAAA,EAAO;AAAA,QACH,iEAAA;AAAA,QACA,6FAAA;AAAA,QACA;AAAA;AACJ,KACJ;AAAA,IACA,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,gCAAA,EAAiC;AAAA,IAC1D;AAAA,MACI,IAAA,EAAM,MAAA;AAAA,MACN,IAAA,EAAM;AAAA,KACV;AAAA,IACA,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,wBAAA,EAAyB;AAAA,IAClD;AAAA,MACI,IAAA,EAAM,MAAA;AAAA,MACN,IAAA,EAAM;AAAA,KACV;AAAA,IACA,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,eAAA,EAAgB;AAAA,IACzC;AAAA,MACI,IAAA,EAAM,MAAA;AAAA,MACN,IAAA,EAAM;AAAA,KACV;AAAA,IACA,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,kBAAA,EAAmB;AAAA,IAC5C;AAAA,MACI,IAAA,EAAM,SAAA;AAAA,MACN,IAAA,EAAM;AAAA;AACV;AAER,CAAA;AAEO,IAAM,aAAA,GAAyB;AAAA,EAClC,EAAA,EAAI,eAAA;AAAA,EACJ,OAAA,EAAS,eAAA;AAAA,EACT,MAAA,EAAQ;AAAA,IACJ;AAAA,MACI,IAAA,EAAM,SAAA;AAAA,MACN,KAAA,EAAO;AAAA,QACH;AAAA,UACI,CAAA,EAAG,kBAAA;AAAA,UACH,CAAA,EAAG;AAAA,SACP;AAAA,QACA;AAAA,UACI,CAAA,EAAG,cAAA;AAAA,UACH,CAAA,EAAG;AAAA,SACP;AAAA,QACA;AAAA,UACI,CAAA,EAAG,QAAA;AAAA,UACH,CAAA,EAAG;AAAA,SACP;AAAA,QACA;AAAA,UACI,CAAA,EAAG,YAAA;AAAA,UACH,CAAA,EAAG;AAAA,SACP;AAAA,QACA;AAAA,UACI,CAAA,EAAG,WAAA;AAAA,UACH,CAAA,EAAG;AAAA,SACP;AAAA,QACA;AAAA,UACI,CAAA,EAAG,eAAA;AAAA,UACH,CAAA,EAAG;AAAA,SACP;AAAA,QACA;AAAA,UACI,CAAA,EAAG,SAAA;AAAA,UACH,CAAA,EAAG;AAAA,SACP;AAAA,QACA;AAAA,UACI,CAAA,EAAG,uBAAA;AAAA,UACH,CAAA,EAAG;AAAA;AACP;AACJ,KACJ;AAAA,IACA,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,0DAAA,EAA2D;AAAA,IACpF;AAAA,MACI,IAAA,EAAM,MAAA;AAAA,MACN,IAAA,EAAM;AAAA,KACV;AAAA,IACA;AAAA,MACI,IAAA,EAAM,SAAA;AAAA,MACN,KAAA,EAAO;AAAA,QACH,0JAAA;AAAA,QACA,2JAAA;AAAA,QACA,yFAAA;AAAA,QACA;AAAA;AACJ,KACJ;AAAA,IACA;AAAA,MACI,IAAA,EAAM,MAAA;AAAA,MACN,IAAA,EAAM;AAAA;AACV;AAER,CAAA;AAIO,IAAM,aAAA,GAAyB;AAAA,EAClC,EAAA,EAAI,aAAA;AAAA,EACJ,OAAA,EAAS,aAAA;AAAA,EACT,IAAA,EAAM,sCAAA;AAAA,EACN,MAAA,EAAQ;AAAA,IACJ;AAAA,MACI,IAAA,EAAM,SAAA;AAAA,MACN,KAAA,EAAO;AAAA,QACH;AAAA,UACI,CAAA,EAAG,sBAAA;AAAA,UACH,CAAA,EAAG;AAAA,SACP;AAAA,QACA;AAAA,UACI,CAAA,EAAG,YAAA;AAAA,UACH,CAAA,EAAG;AAAA,SACP;AAAA,QACA;AAAA,UACI,CAAA,EAAG,UAAA;AAAA,UACH,CAAA,EAAG;AAAA,SACP;AAAA,QACA;AAAA,UACI,CAAA,EAAG,WAAA;AAAA,UACH,CAAA,EAAG;AAAA,SACP;AAAA,QACA;AAAA,UACI,CAAA,EAAG,kBAAA;AAAA,UACH,CAAA,EAAG;AAAA;AACP;AACJ,KACJ;AAAA,IACA,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,8EAAA;AAA+E;AAE7G,CAAA;AAEO,IAAM,eAAA,GAA2B;AAAA,EACpC,EAAA,EAAI,iBAAA;AAAA,EACJ,OAAA,EAAS,iBAAA;AAAA,EACT,IAAA,EAAM,mCAAA;AAAA,EACN,MAAA,EAAQ;AAAA,IACJ,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,0BAAA,EAA2B;AAAA,IACpD;AAAA,MACI,IAAA,EAAM,SAAA;AAAA,MACN,KAAA,EAAO;AAAA,QACH,gEAAA;AAAA,QACA,0DAAA;AAAA,QACA,yFAAA;AAAA,QACA,mHAAA;AAAA,QACA;AAAA;AACJ,KACJ;AAAA,IACA,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,0CAAA,EAA2C;AAAA,IACpE;AAAA,MACI,IAAA,EAAM,SAAA;AAAA,MACN,KAAA,EAAO;AAAA,QACH;AAAA,UACI,CAAA,EAAG,aAAA;AAAA,UACH,CAAA,EAAG;AAAA,SACP;AAAA,QACA;AAAA,UACI,CAAA,EAAG,aAAA;AAAA,UACH,CAAA,EAAG;AAAA,SACP;AAAA,QACA;AAAA,UACI,CAAA,EAAG,uBAAA;AAAA,UACH,CAAA,EAAG;AAAA,SACP;AAAA,QACA;AAAA,UACI,CAAA,EAAG,sBAAA;AAAA,UACH,CAAA,EAAG;AAAA;AACP;AACJ,KACJ;AAAA,IACA,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,qBAAA,EAAsB;AAAA,IAC/C;AAAA,MACI,IAAA,EAAM,MAAA;AAAA,MACN,IAAA,EAAM;AAAA;AACV;AAER,CAAA;AAEO,IAAM,eAAA,GAA2B;AAAA,EACpC,EAAA,EAAI,mBAAA;AAAA,EACJ,OAAA,EAAS,oBAAA;AAAA,EACT,MAAA,EAAQ;AAAA,IACJ;AAAA,MACI,IAAA,EAAM,MAAA;AAAA,MACN,IAAA,EAAM;AAAA;AACV;AAER,CAAA;AAEO,IAAM,gBAAA,GAA4B;AAAA,EACrC,EAAA,EAAI,yBAAA;AAAA,EACJ,OAAA,EAAS,yBAAA;AAAA,EACT,MAAA,EAAQ;AAAA,IACJ;AAAA,MACI,IAAA,EAAM,MAAA;AAAA,MACN,IAAA,EAAM;AAAA;AACV;AAER,CAAA;AAEO,IAAM,cAAA,GAA0B;AAAA,EACnC,EAAA,EAAI,gBAAA;AAAA,EACJ,OAAA,EAAS,wBAAA;AAAA,EACT,MAAA,EAAQ;AAAA,IACJ;AAAA,MACI,IAAA,EAAM,SAAA;AAAA,MACN,KAAA,EAAO;AAAA,QACH,8CAAA;AAAA,QACA,uEAAA;AAAA,QACA;AAAA;AACJ;AACJ;AAER,CAAA;;;ACjZA,IAAM,qBAAA,GACF,miBAAA;AAEJ,IAAM,KAAA,GAAiB;AAAA,EACnB,IAAA,EAAM,OAAA;AAAA,EACN,OAAA,EAAS,OAAA;AAAA,EACT,KAAA,EAAO,kBAAA;AAAA,EACP,WAAA,EACI,gLAAA;AAAA,EACJ,SAAA,EAAW,qCAAA;AAAA,EACX,eAAA,EACI,6IAAA;AAAA,EACJ,SAAA,EAAW,YAAA;AAAA,EACX,OAAA,EAAS,YAAA;AAAA,EACT,QAAA,EAAU;AAAA,IACN;AAAA,MACI,IAAA,EAAM,SAAA;AAAA,MACN,QAAA,EAAU,IAAA;AAAA,MACV,IAAA,EAAM;AAAA,KACV;AAAA,IACA,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,qBAAA;AAAsB,GACnD;AAAA,EACA,QAAA,EAAU;AAAA,IACN;AAAA,MACI,EAAA,EAAI,UAAA;AAAA,MACJ,OAAA,EAAS,UAAA;AAAA,MACT,IAAA,EAAM,kCAAA;AAAA,MACN,MAAA,EAAQ;AAAA,QACJ,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,uBAAA,EAAwB;AAAA,QACjD;AAAA,UACI,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA,SACV;AAAA,QACA;AAAA,UACI,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA,SACV;AAAA,QACA,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,2BAAA,EAA4B;AAAA,QACrD;AAAA,UACI,IAAA,EAAM,SAAA;AAAA,UACN,KAAA,EAAO;AAAA,YACH,mEAAA;AAAA,YACA,+CAAA;AAAA,YACA,gDAAA;AAAA,YACA;AAAA;AACJ,SACJ;AAAA,QACA,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,sBAAA,EAAuB;AAAA,QAChD;AAAA,UACI,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA;AACV;AACJ,KACJ;AAAA,IACA;AAAA,MACI,EAAA,EAAI,mBAAA;AAAA,MACJ,OAAA,EAAS,6CAAA;AAAA,MACT,IAAA,EAAM,gCAAA;AAAA,MACN,MAAA,EAAQ;AAAA,QACJ;AAAA,UACI,IAAA,EAAM,SAAA;AAAA,UACN,QAAA,EAAU,IAAA;AAAA,UACV,IAAA,EAAM;AAAA,SACV;AAAA,QACA,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,2BAAA,EAA4B;AAAA,QACrD;AAAA,UACI,IAAA,EAAM,SAAA;AAAA,UACN,KAAA,EAAO;AAAA,YACH;AAAA,cACI,CAAA,EAAG,iBAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,sBAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,gBAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,iBAAA;AAAA,cACH,CAAA,EAAG;AAAA;AACP;AACJ;AACJ;AACJ,KACJ;AAAA,IACA,WAAA;AAAA,IACA;AAAA,MACI,EAAA,EAAI,SAAA;AAAA,MACJ,OAAA,EAAS,mBAAA;AAAA,MACT,IAAA,EAAM,kBAAA;AAAA,MACN,MAAA,EAAQ;AAAA,QACJ;AAAA,UACI,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA,SACV;AAAA,QACA;AAAA,UACI,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA;AACV;AACJ,KACJ;AAAA,IACA,aAAA;AAAA,IACA,oBAAA;AAAA,IACA;AAAA,MACI,EAAA,EAAI,eAAA;AAAA,MACJ,OAAA,EAAS,eAAA;AAAA,MACT,IAAA,EAAM,yDAAA;AAAA,MACN,MAAA,EAAQ;AAAA,QACJ;AAAA,UACI,IAAA,EAAM,SAAA;AAAA,UACN,KAAA,EAAO;AAAA,YACH;AAAA,cACI,CAAA,EAAG,iBAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,0BAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,yBAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,eAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,iBAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,iBAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,qBAAA;AAAA,cACH,CAAA,EAAG;AAAA;AACP;AACJ;AACJ;AACJ,KACJ;AAAA,IACA;AAAA,MACI,EAAA,EAAI,MAAA;AAAA,MACJ,OAAA,EAAS,MAAA;AAAA,MACT,IAAA,EAAM,MAAA;AAAA,MACN,MAAA,EAAQ;AAAA,QACJ;AAAA,UACI,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA;AACV;AACJ,KACJ;AAAA,IACA;AAAA,MACI,EAAA,EAAI,aAAA;AAAA,MACJ,OAAA,EAAS,0BAAA;AAAA,MACT,IAAA,EAAM,oCAAA;AAAA,MACN,MAAA,EAAQ;AAAA,QACJ;AAAA,UACI,IAAA,EAAM,SAAA;AAAA,UACN,QAAA,EAAU,IAAA;AAAA,UACV,IAAA,EAAM;AAAA,SACV;AAAA,QACA,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,4CAAA,EAA6C;AAAA,QACtE;AAAA,UACI,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA,SACV;AAAA,QACA,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,sDAAA,EAAoD;AAAA,QAC7E;AAAA,UACI,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA,SACV;AAAA,QACA,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,sBAAA,EAAuB;AAAA,QAChD;AAAA,UACI,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA;AACV;AACJ,KACJ;AAAA,IACA,qBAAA;AAAA,IACA,eAAA;AAAA,IACA;AAAA,MACI,EAAA,EAAI,aAAA;AAAA,MACJ,OAAA,EAAS,aAAA;AAAA,MACT,MAAA,EAAQ;AAAA,QACJ;AAAA,UACI,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA;AACV;AACJ,KACJ;AAAA,IACA,cAAA;AAAA,IACA,iBAAA;AAAA,IACA;AAAA,GACJ;AAAA,EACA,OAAA,EACI;AACR,CAAA;AAEA,IAAM,OAAA,GAAmB;AAAA,EACrB,IAAA,EAAM,SAAA;AAAA,EACN,OAAA,EAAS,SAAA;AAAA,EACT,KAAA,EAAO,gBAAA;AAAA,EACP,WAAA,EACI,sJAAA;AAAA,EACJ,SAAA,EAAW,mCAAA;AAAA,EACX,eAAA,EACI,qJAAA;AAAA,EACJ,SAAA,EAAW,YAAA;AAAA,EACX,OAAA,EAAS,YAAA;AAAA,EACT,QAAA,EAAU;AAAA,IACN;AAAA,MACI,IAAA,EAAM,SAAA;AAAA,MACN,IAAA,EAAM;AAAA,KACV;AAAA,IACA;AAAA,MACI,IAAA,EAAM,SAAA;AAAA,MACN,KAAA,EAAO;AAAA,QACH,EAAE,CAAA,EAAG,YAAA,EAAc,CAAA,EAAG,8MAAA,EAA+M;AAAA,QACrO,EAAE,CAAA,EAAG,YAAA,EAAc,CAAA,EAAG,+mBAAA,EAAgnB;AAAA,QACtoB,EAAE,CAAA,EAAG,YAAA,EAAc,CAAA,EAAG,6UAAA,EAA8U;AAAA,QACpW,EAAE,CAAA,EAAG,iBAAA,EAAmB,CAAA,EAAG,0JAAA;AAA2J;AAC1L,KACJ;AAAA,IACA;AAAA,MACI,IAAA,EAAM,SAAA;AAAA,MACN,IAAA,EAAM;AAAA;AACV,GACJ;AAAA,EACA,QAAA,EAAU;AAAA,IACN;AAAA,MACI,EAAA,EAAI,YAAA;AAAA,MACJ,OAAA,EAAS,gBAAA;AAAA,MACT,IAAA,EAAM,qCAAA;AAAA,MACN,MAAA,EAAQ;AAAA,QACJ;AAAA,UACI,IAAA,EAAM,SAAA;AAAA,UACN,KAAA,EAAO;AAAA,YACH;AAAA,cACI,CAAA,EAAG,eAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,oBAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,kBAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,cAAA;AAAA,cACH,CAAA,EAAG;AAAA;AACP;AACJ;AACJ;AACJ,KACJ;AAAA,IACA;AAAA,MACI,EAAA,EAAI,iBAAA;AAAA,MACJ,OAAA,EAAS,kBAAA;AAAA,MACT,MAAA,EAAQ;AAAA,QACJ;AAAA,UACI,IAAA,EAAM,SAAA;AAAA,UACN,KAAA,EAAO;AAAA,YACH,mDAAA;AAAA,YACA,0CAAA;AAAA,YACA,qDAAA;AAAA,YACA,oDAAA;AAAA,YACA;AAAA;AACJ;AACJ;AACJ,KACJ;AAAA,IACA;AAAA,MACI,EAAA,EAAI,wBAAA;AAAA,MACJ,OAAA,EAAS,wBAAA;AAAA,MACT,IAAA,EAAM,iBAAA;AAAA,MACN,MAAA,EAAQ;AAAA,QACJ,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,yBAAA,EAA0B;AAAA,QACnD;AAAA,UACI,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA,SACV;AAAA,QACA,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,gBAAA,EAAiB;AAAA,QAC1C;AAAA,UACI,IAAA,EAAM,SAAA;AAAA,UACN,KAAA,EAAO;AAAA,YACH;AAAA,cACI,CAAA,EAAG,SAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,iBAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,UAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,cAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,aAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,yBAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,6BAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,iBAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,oBAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,wBAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA,EAAE,CAAA,EAAG,OAAA,EAAS,CAAA,EAAG,6CAAA;AAA8C;AACnE,SACJ;AAAA,QACA,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,+BAAA,EAAgC;AAAA,QACzD;AAAA,UACI,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA,SACV;AAAA,QACA,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,yBAAA,EAA0B;AAAA,QACnD;AAAA,UACI,IAAA,EAAM,SAAA;AAAA,UACN,KAAA,EAAO;AAAA,YACH,EAAE,CAAA,EAAG,YAAA,EAAc,CAAA,EAAG,2CAAA,EAA4C;AAAA,YAClE,EAAE,CAAA,EAAG,gBAAA,EAAkB,CAAA,EAAG,mCAAA,EAAoC;AAAA,YAC9D,EAAE,CAAA,EAAG,eAAA,EAAiB,CAAA,EAAG,mCAAA;AAAoC;AACjE,SACJ;AAAA,QACA,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,kCAAA,EAAmC;AAAA,QAC5D;AAAA,UACI,IAAA,EAAM,SAAA;AAAA,UACN,KAAA,EAAO;AAAA,YACH;AAAA,cACI,CAAA,EAAG,0BAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,eAAA;AAAA,cACH,CAAA,EAAG;AAAA;AACP;AACJ,SACJ;AAAA,QACA,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,qBAAA,EAAsB;AAAA,QAC/C;AAAA,UACI,IAAA,EAAM,SAAA;AAAA,UACN,KAAA,EAAO;AAAA,YACH;AAAA,cACI,CAAA,EAAG,YAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,gBAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,mDAAA;AAAA,cACH,CAAA,EAAG;AAAA;AACP;AACJ,SACJ;AAAA,QACA;AAAA,UACI,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA;AACV;AACJ,KACJ;AAAA,IACA;AAAA,MACI,EAAA,EAAI,uBAAA;AAAA,MACJ,OAAA,EAAS,6BAAA;AAAA,MACT,IAAA,EAAM,gCAAA;AAAA,MACN,MAAA,EAAQ;AAAA,QACJ,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,cAAA,EAAe;AAAA,QACxC;AAAA,UACI,IAAA,EAAM,SAAA;AAAA,UACN,KAAA,EAAO;AAAA,YACH;AAAA,cACI,CAAA,EAAG,UAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,gBAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,gBAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,mBAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,oBAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,wBAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,WAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,UAAA;AAAA,cACH,CAAA,EAAG;AAAA;AACP;AACJ,SACJ;AAAA,QACA,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,gBAAA,EAAiB;AAAA,QAC1C;AAAA,UACI,IAAA,EAAM,SAAA;AAAA,UACN,KAAA,EAAO;AAAA,YACH;AAAA,cACI,CAAA,EAAG,eAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,UAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,2BAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,yBAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,cAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,UAAA;AAAA,cACH,CAAA,EAAG;AAAA;AACP;AACJ,SACJ;AAAA,QACA,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,aAAA,EAAc;AAAA,QACvC;AAAA,UACI,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA,SACV;AAAA,QACA,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,eAAA,EAAgB;AAAA,QACzC;AAAA,UACI,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA,SACV;AAAA,QACA;AAAA,UACI,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA;AACV;AACJ,KACJ;AAAA,IACA;AAAA,MACI,EAAA,EAAI,YAAA;AAAA,MACJ,OAAA,EAAS,wBAAA;AAAA,MACT,MAAA,EAAQ;AAAA,QACJ;AAAA,UACI,IAAA,EAAM,SAAA;AAAA,UACN,KAAA,EAAO;AAAA,YACH,uEAAA;AAAA,YACA,+DAAA;AAAA,YACA,yDAAA;AAAA,YACA;AAAA;AACJ;AACJ;AACJ,KACJ;AAAA,IACA;AAAA,MACI,EAAA,EAAI,WAAA;AAAA,MACJ,OAAA,EAAS,gBAAA;AAAA,MACT,IAAA,EAAM,iEAAA;AAAA,MACN,MAAA,EAAQ;AAAA,QACJ;AAAA,UACI,IAAA,EAAM,SAAA;AAAA,UACN,KAAA,EAAO;AAAA,YACH;AAAA,cACI,CAAA,EAAG,kBAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,cAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,2BAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,UAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,iCAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,qBAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,kHAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,gBAAA;AAAA,cACH,CAAA,EAAG;AAAA;AACP;AACJ;AACJ;AACJ,KACJ;AAAA,IACA;AAAA,MACI,EAAA,EAAI,eAAA;AAAA,MACJ,OAAA,EAAS,eAAA;AAAA,MACT,IAAA,EAAM,wCAAA;AAAA,MACN,MAAA,EAAQ;AAAA,QACJ;AAAA,UACI,IAAA,EAAM,SAAA;AAAA,UACN,KAAA,EAAO;AAAA,YACH,0CAAA;AAAA,YACA,8CAAA;AAAA,YACA;AAAA;AACJ,SACJ;AAAA,QACA;AAAA,UACI,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA;AACV;AACJ,KACJ;AAAA,IACA,aAAA;AAAA,IACA,gBAAA;AAAA,IACA,eAAA;AAAA,IACA,eAAA;AAAA,IACA;AAAA,GACJ;AAAA,EACA,OAAA,EACI;AACR,CAAA;AAEO,IAAM,eAAA,GAAkB,EAAE,KAAA,EAAO,OAAA,EAAQ;;;ACrjBhD,IAAM,eAAA,GACF,iYAAA;AAEJ,IAAMA,MAAAA,GAAiB;AAAA,EACnB,IAAA,EAAM,OAAA;AAAA,EACN,OAAA,EAAS,OAAA;AAAA,EACT,KAAA,EAAO,kBAAA;AAAA,EACP,WAAA,EACI,0OAAA;AAAA,EACJ,SAAA,EAAW,kCAAA;AAAA,EACX,eAAA,EACI,oMAAA;AAAA,EACJ,SAAA,EAAW,YAAA;AAAA,EACX,OAAA,EAAS,YAAA;AAAA,EACT,QAAA,EAAU;AAAA,IACN;AAAA,MACI,IAAA,EAAM,SAAA;AAAA,MACN,QAAA,EAAU,IAAA;AAAA,MACV,IAAA,EAAM;AAAA,KACV;AAAA,IACA,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,eAAA;AAAgB,GAC7C;AAAA,EACA,QAAA,EAAU;AAAA,IACN;AAAA,MACI,EAAA,EAAI,UAAA;AAAA,MACJ,OAAA,EAAS,UAAA;AAAA,MACT,IAAA,EAAM,kBAAA;AAAA,MACN,MAAA,EAAQ;AAAA,QACJ;AAAA,UACI,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA,SACV;AAAA,QACA;AAAA,UACI,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA;AACV;AACJ,KACJ;AAAA,IACA;AAAA,MACI,EAAA,EAAI,UAAA;AAAA,MACJ,OAAA,EAAS,qBAAA;AAAA,MACT,IAAA,EAAM,sBAAA;AAAA,MACN,MAAA,EAAQ;AAAA,QACJ;AAAA,UACI,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA,SACV;AAAA,QACA;AAAA,UACI,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA;AACV;AACJ,KACJ;AAAA,IACA,WAAA;AAAA,IACA;AAAA,MACI,EAAA,EAAI,SAAA;AAAA,MACJ,OAAA,EAAS,cAAA;AAAA,MACT,IAAA,EAAM,6BAAA;AAAA,MACN,MAAA,EAAQ;AAAA,QACJ;AAAA,UACI,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA;AACV;AACJ,KACJ;AAAA,IACA;AAAA,MACI,EAAA,EAAI,SAAA;AAAA,MACJ,OAAA,EAAS,mBAAA;AAAA,MACT,IAAA,EAAM,uEAAA;AAAA,MACN,MAAA,EAAQ;AAAA,QACJ;AAAA,UACI,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA,SACV;AAAA,QACA;AAAA,UACI,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA;AACV;AACJ,KACJ;AAAA,IACA;AAAA,MACI,EAAA,EAAI,cAAA;AAAA,MACJ,OAAA,EAAS,uBAAA;AAAA,MACT,MAAA,EAAQ;AAAA,QACJ;AAAA,UACI,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA,SACV;AAAA,QACA,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,uBAAA,EAAwB;AAAA,QACjD;AAAA,UACI,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA;AACV;AACJ,KACJ;AAAA,IACA;AAAA,MACI,EAAA,EAAI,QAAA;AAAA,MACJ,OAAA,EAAS,gBAAA;AAAA,MACT,MAAA,EAAQ;AAAA,QACJ;AAAA,UACI,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA;AACV;AACJ,KACJ;AAAA,IACA;AAAA,MACI,EAAA,EAAI,cAAA;AAAA,MACJ,OAAA,EAAS,uCAAA;AAAA,MACT,MAAA,EAAQ;AAAA,QACJ;AAAA,UACI,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA,SACV;AAAA,QACA;AAAA,UACI,IAAA,EAAM,SAAA;AAAA,UACN,KAAA,EAAO;AAAA,YACH,oEAAA;AAAA,YACA,wEAAA;AAAA,YACA,uDAAA;AAAA,YACA;AAAA;AACJ;AACJ;AACJ,KACJ;AAAA,IACA,aAAA;AAAA,IACA;AAAA,MACI,EAAA,EAAI,aAAA;AAAA,MACJ,OAAA,EAAS,+BAAA;AAAA,MACT,MAAA,EAAQ;AAAA,QACJ;AAAA,UACI,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA;AACV;AACJ,KACJ;AAAA,IACA,oBAAA;AAAA,IACA;AAAA,MACI,EAAA,EAAI,aAAA;AAAA,MACJ,OAAA,EAAS,0BAAA;AAAA,MACT,IAAA,EAAM,8BAAA;AAAA,MACN,MAAA,EAAQ;AAAA,QACJ;AAAA,UACI,IAAA,EAAM,SAAA;AAAA,UACN,QAAA,EAAU,IAAA;AAAA,UACV,IAAA,EAAM;AAAA,SACV;AAAA,QACA;AAAA,UACI,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA,SACV;AAAA,QACA,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,mBAAA,EAAoB;AAAA,QAC7C;AAAA,UACI,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA;AACV;AACJ,KACJ;AAAA,IACA,qBAAA;AAAA,IACA,eAAA;AAAA,IACA;AAAA,MACI,EAAA,EAAI,aAAA;AAAA,MACJ,OAAA,EAAS,aAAA;AAAA,MACT,MAAA,EAAQ;AAAA,QACJ;AAAA,UACI,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA;AACV;AACJ,KACJ;AAAA,IACA,cAAA;AAAA,IACA,iBAAA;AAAA,IACA;AAAA,GACJ;AAAA,EACA,OAAA,EACI;AACR,CAAA;AAEA,IAAMC,QAAAA,GAAmB;AAAA,EACrB,IAAA,EAAM,SAAA;AAAA,EACN,OAAA,EAAS,SAAA;AAAA,EACT,KAAA,EAAO,gBAAA;AAAA,EACP,WAAA,EACI,6JAAA;AAAA,EACJ,SAAA,EAAW,gCAAA;AAAA,EACX,eAAA,EACI,kGAAA;AAAA,EACJ,SAAA,EAAW,YAAA;AAAA,EACX,OAAA,EAAS,YAAA;AAAA,EACT,QAAA,EAAU;AAAA,IACN;AAAA,MACI,IAAA,EAAM,SAAA;AAAA,MACN,IAAA,EAAM;AAAA,KACV;AAAA,IACA;AAAA,MACI,IAAA,EAAM,SAAA;AAAA,MACN,KAAA,EAAO;AAAA,QACH,EAAE,CAAA,EAAG,YAAA,EAAc,CAAA,EAAG,2IAAA,EAA4I;AAAA,QAClK,EAAE,CAAA,EAAG,mBAAA,EAAqB,CAAA,EAAG,kPAAA,EAAmP;AAAA,QAChR,EAAE,CAAA,EAAG,YAAA,EAAc,CAAA,EAAG,iFAAA,EAAkF;AAAA,QACxG,EAAE,CAAA,EAAG,YAAA,EAAc,CAAA,EAAG,uGAAA,EAAwG;AAAA,QAC9H,EAAE,CAAA,EAAG,YAAA,EAAc,CAAA,EAAG,8CAAA,EAA+C;AAAA,QACrE,EAAE,CAAA,EAAG,YAAA,EAAc,CAAA,EAAG,uNAAA,EAAwN;AAAA,QAC9O,EAAE,CAAA,EAAG,YAAA,EAAc,CAAA,EAAG,qDAAA,EAAsD;AAAA,QAC5E,EAAE,CAAA,EAAG,YAAA,EAAc,CAAA,EAAG,sIAAA,EAAuI;AAAA,QAC7J,EAAE,CAAA,EAAG,WAAA,EAAa,CAAA,EAAG,wEAAA;AAAyE;AAClG,KACJ;AAAA,IACA;AAAA,MACI,IAAA,EAAM,SAAA;AAAA,MACN,IAAA,EAAM;AAAA;AACV,GACJ;AAAA,EACA,QAAA,EAAU;AAAA,IACN;AAAA,MACI,EAAA,EAAI,aAAA;AAAA,MACJ,OAAA,EAAS,aAAA;AAAA,MACT,IAAA,EAAM,wCAAA;AAAA,MACN,MAAA,EAAQ;AAAA,QACJ;AAAA,UACI,IAAA,EAAM,SAAA;AAAA,UACN,KAAA,EAAO;AAAA,YACH;AAAA,cACI,CAAA,EAAG,QAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,sBAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,gBAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,gBAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,WAAA;AAAA,cACH,CAAA,EAAG;AAAA;AACP;AACJ;AACJ;AACJ,KACJ;AAAA,IACA;AAAA,MACI,EAAA,EAAI,gBAAA;AAAA,MACJ,OAAA,EAAS,yBAAA;AAAA,MACT,IAAA,EAAM,+CAAA;AAAA,MACN,MAAA,EAAQ;AAAA,QACJ;AAAA,UACI,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA,SACV;AAAA,QACA;AAAA,UACI,IAAA,EAAM,SAAA;AAAA,UACN,KAAA,EAAO;AAAA,YACH;AAAA,cACI,CAAA,EAAG,aAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,gBAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,aAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,iBAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,yBAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,eAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,uBAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,sBAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,gBAAA;AAAA,cACH,CAAA,EAAG;AAAA;AACP;AACJ;AACJ;AACJ,KACJ;AAAA,IACA;AAAA,MACI,EAAA,EAAI,iBAAA;AAAA,MACJ,OAAA,EAAS,4BAAA;AAAA,MACT,MAAA,EAAQ;AAAA,QACJ;AAAA,UACI,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA,SACV;AAAA,QACA;AAAA,UACI,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA;AACV;AACJ,KACJ;AAAA,IACA;AAAA,MACI,EAAA,EAAI,kBAAA;AAAA,MACJ,OAAA,EAAS,6BAAA;AAAA,MACT,IAAA,EAAM,sBAAA;AAAA,MACN,MAAA,EAAQ;AAAA,QACJ;AAAA,UACI,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA;AACV;AACJ,KACJ;AAAA,IACA;AAAA,MACI,EAAA,EAAI,SAAA;AAAA,MACJ,OAAA,EAAS,SAAA;AAAA,MACT,MAAA,EAAQ;AAAA,QACJ;AAAA,UACI,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA,SACV;AAAA,QACA;AAAA,UACI,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA;AACV;AACJ,KACJ;AAAA,IACA;AAAA,MACI,EAAA,EAAI,YAAA;AAAA,MACJ,OAAA,EAAS,wBAAA;AAAA,MACT,MAAA,EAAQ;AAAA,QACJ;AAAA,UACI,IAAA,EAAM,SAAA;AAAA,UACN,KAAA,EAAO;AAAA,YACH,mDAAA;AAAA,YACA,2DAAA;AAAA,YACA,gEAAA;AAAA,YACA;AAAA;AACJ;AACJ;AACJ,KACJ;AAAA,IACA;AAAA,MACI,EAAA,EAAI,WAAA;AAAA,MACJ,OAAA,EAAS,gBAAA;AAAA,MACT,MAAA,EAAQ;AAAA,QACJ;AAAA,UACI,IAAA,EAAM,SAAA;AAAA,UACN,KAAA,EAAO;AAAA,YACH;AAAA,cACI,CAAA,EAAG,0BAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,cAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,iBAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,iCAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,aAAA;AAAA,cACH,CAAA,EAAG;AAAA;AACP;AACJ;AACJ;AACJ,KACJ;AAAA,IACA;AAAA,MACI,EAAA,EAAI,eAAA;AAAA,MACJ,OAAA,EAAS,eAAA;AAAA,MACT,MAAA,EAAQ;AAAA,QACJ;AAAA,UACI,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA;AACV;AACJ,KACJ;AAAA,IACA,aAAA;AAAA,IACA;AAAA,MACI,EAAA,EAAI,UAAA;AAAA,MACJ,OAAA,EAAS,6BAAA;AAAA,MACT,MAAA,EAAQ;AAAA,QACJ;AAAA,UACI,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA;AACV;AACJ,KACJ;AAAA,IACA;AAAA,MACI,EAAA,EAAI,oBAAA;AAAA,MACJ,OAAA,EAAS,gCAAA;AAAA,MACT,MAAA,EAAQ;AAAA,QACJ;AAAA,UACI,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA,SACV;AAAA,QACA;AAAA,UACI,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA;AACV;AACJ,KACJ;AAAA,IACA,gBAAA;AAAA,IACA,eAAA;AAAA,IACA,eAAA;AAAA,IACA;AAAA,GACJ;AAAA,EACA,OAAA,EACI;AACR,CAAA;AAEO,IAAM,SAAA,GAAY,EAAE,KAAA,EAAAD,MAAAA,EAAO,SAAAC,QAAAA,EAAQ;;;AC1a1C,IAAMC,gBAAAA,GACF,yPAAA;AAEJ,IAAMF,MAAAA,GAAiB;AAAA,EACnB,IAAA,EAAM,OAAA;AAAA,EACN,OAAA,EAAS,OAAA;AAAA,EACT,KAAA,EAAO,kBAAA;AAAA,EACP,WAAA,EACI,8KAAA;AAAA,EACJ,SAAA,EAAW,kCAAA;AAAA,EACX,eAAA,EACI,0JAAA;AAAA,EACJ,SAAA,EAAW,YAAA;AAAA,EACX,OAAA,EAAS,YAAA;AAAA,EACT,QAAA,EAAU;AAAA,IACN;AAAA,MACI,IAAA,EAAM,SAAA;AAAA,MACN,QAAA,EAAU,IAAA;AAAA,MACV,IAAA,EAAM;AAAA,KACV;AAAA,IACA,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAME,gBAAAA;AAAgB,GAC7C;AAAA,EACA,QAAA,EAAU;AAAA,IACN;AAAA,MACI,EAAA,EAAI,UAAA;AAAA,MACJ,OAAA,EAAS,UAAA;AAAA,MACT,IAAA,EAAM,kBAAA;AAAA,MACN,MAAA,EAAQ;AAAA,QACJ;AAAA,UACI,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA,SACV;AAAA,QACA;AAAA,UACI,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA;AACV;AACJ,KACJ;AAAA,IACA;AAAA,MACI,EAAA,EAAI,UAAA;AAAA,MACJ,OAAA,EAAS,UAAA;AAAA,MACT,MAAA,EAAQ;AAAA,QACJ;AAAA,UACI,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA;AACV;AACJ,KACJ;AAAA,IACA;AAAA,MACI,EAAA,EAAI,eAAA;AAAA,MACJ,OAAA,EAAS,0BAAA;AAAA,MACT,IAAA,EAAM,4BAAA;AAAA,MACN,MAAA,EAAQ;AAAA,QACJ;AAAA,UACI,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA,SACV;AAAA,QACA;AAAA,UACI,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA;AACV;AACJ,KACJ;AAAA,IACA;AAAA,MACI,EAAA,EAAI,gBAAA;AAAA,MACJ,OAAA,EAAS,gBAAA;AAAA,MACT,IAAA,EAAM,4CAAA;AAAA,MACN,MAAA,EAAQ;AAAA,QACJ;AAAA,UACI,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA,SACV;AAAA,QACA,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,SAAA,EAAU;AAAA,QACnC;AAAA,UACI,IAAA,EAAM,SAAA;AAAA,UACN,KAAA,EAAO;AAAA,YACH;AAAA,cACI,CAAA,EAAG,4BAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,wBAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,gBAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,qCAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,iCAAA;AAAA,cACH,CAAA,EAAG;AAAA;AACP;AACJ,SACJ;AAAA,QACA,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,0BAAA,EAA2B;AAAA,QACpD;AAAA,UACI,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA,SACV;AAAA,QACA,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,aAAA,EAAc;AAAA,QACvC;AAAA,UACI,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA;AACV;AACJ,KACJ;AAAA,IACA;AAAA,MACI,EAAA,EAAI,YAAA;AAAA,MACJ,OAAA,EAAS,qBAAA;AAAA,MACT,MAAA,EAAQ;AAAA,QACJ;AAAA,UACI,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA,SACV;AAAA,QACA;AAAA,UACI,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA;AACV;AACJ,KACJ;AAAA,IACA;AAAA,MACI,EAAA,EAAI,WAAA;AAAA,MACJ,OAAA,EAAS,wBAAA;AAAA,MACT,IAAA,EAAM,uBAAA;AAAA,MACN,MAAA,EAAQ;AAAA,QACJ;AAAA,UACI,IAAA,EAAM,SAAA;AAAA,UACN,QAAA,EAAU,IAAA;AAAA,UACV,IAAA,EAAM;AAAA,SACV;AAAA,QACA;AAAA,UACI,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA;AACV;AACJ,KACJ;AAAA,IACA,aAAA;AAAA,IACA,oBAAA;AAAA,IACA;AAAA,MACI,EAAA,EAAI,eAAA;AAAA,MACJ,OAAA,EAAS,eAAA;AAAA,MACT,MAAA,EAAQ;AAAA,QACJ;AAAA,UACI,IAAA,EAAM,SAAA;AAAA,UACN,KAAA,EAAO;AAAA,YACH;AAAA,cACI,CAAA,EAAG,oBAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,mBAAA;AAAA,cACH,CAAA,EAAG;AAAA;AACP;AACJ;AACJ;AACJ,KACJ;AAAA,IACA;AAAA,MACI,EAAA,EAAI,aAAA;AAAA,MACJ,OAAA,EAAS,0BAAA;AAAA,MACT,IAAA,EAAM,wBAAA;AAAA,MACN,MAAA,EAAQ;AAAA,QACJ;AAAA,UACI,IAAA,EAAM,SAAA;AAAA,UACN,QAAA,EAAU,IAAA;AAAA,UACV,IAAA,EAAM;AAAA,SACV;AAAA,QACA;AAAA,UACI,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA;AACV;AACJ,KACJ;AAAA,IACA,qBAAA;AAAA,IACA,eAAA;AAAA,IACA,WAAA;AAAA,IACA,cAAA;AAAA,IACA,iBAAA;AAAA,IACA;AAAA,GACJ;AAAA,EACA,OAAA,EACI;AACR,CAAA;AAEA,IAAMD,QAAAA,GAAmB;AAAA,EACrB,IAAA,EAAM,SAAA;AAAA,EACN,OAAA,EAAS,SAAA;AAAA,EACT,KAAA,EAAO,gBAAA;AAAA,EACP,WAAA,EACI,8JAAA;AAAA,EACJ,SAAA,EAAW,gCAAA;AAAA,EACX,eAAA,EACI,wHAAA;AAAA,EACJ,SAAA,EAAW,YAAA;AAAA,EACX,OAAA,EAAS,YAAA;AAAA,EACT,QAAA,EAAU;AAAA,IACN;AAAA,MACI,IAAA,EAAM,SAAA;AAAA,MACN,IAAA,EAAM;AAAA,KACV;AAAA,IACA;AAAA,MACI,IAAA,EAAM,SAAA;AAAA,MACN,KAAA,EAAO;AAAA,QACH,EAAE,CAAA,EAAG,YAAA,EAAc,CAAA,EAAG,gOAAA,EAAiO;AAAA,QACvP,EAAE,CAAA,EAAG,YAAA,EAAc,CAAA,EAAG,mOAAA,EAAoO;AAAA,QAC1P,EAAE,CAAA,EAAG,WAAA,EAAa,CAAA,EAAG,wIAAA;AAAyI;AAClK;AACJ,GACJ;AAAA,EACA,QAAA,EAAU;AAAA,IACN;AAAA,MACI,EAAA,EAAI,YAAA;AAAA,MACJ,OAAA,EAAS,gBAAA;AAAA,MACT,IAAA,EAAM,0BAAA;AAAA,MACN,MAAA,EAAQ;AAAA,QACJ;AAAA,UACI,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA;AACV;AACJ,KACJ;AAAA,IACA;AAAA,MACI,EAAA,EAAI,iBAAA;AAAA,MACJ,OAAA,EAAS,wBAAA;AAAA,MACT,MAAA,EAAQ;AAAA,QACJ;AAAA,UACI,IAAA,EAAM,SAAA;AAAA,UACN,KAAA,EAAO;AAAA,YACH;AAAA,cACI,CAAA,EAAG,YAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,kBAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,uBAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,qBAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,iBAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,iBAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,mBAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,eAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,gBAAA;AAAA,cACH,CAAA,EAAG;AAAA;AACP;AACJ;AACJ;AACJ,KACJ;AAAA,IACA;AAAA,MACI,EAAA,EAAI,oBAAA;AAAA,MACJ,OAAA,EAAS,oBAAA;AAAA,MACT,MAAA,EAAQ;AAAA,QACJ;AAAA,UACI,IAAA,EAAM,SAAA;AAAA,UACN,KAAA,EAAO;AAAA,YACH,gCAAA;AAAA,YACA,2CAAA;AAAA,YACA,qHAAA;AAAA,YACA;AAAA;AACJ;AACJ;AACJ,KACJ;AAAA,IACA;AAAA,MACI,EAAA,EAAI,UAAA;AAAA,MACJ,OAAA,EAAS,2CAAA;AAAA,MACT,IAAA,EAAM,2CAAA;AAAA,MACN,MAAA,EAAQ;AAAA,QACJ;AAAA,UACI,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA,SACV;AAAA,QACA,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,wCAAA,EAAyC;AAAA,QAClE;AAAA,UACI,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA,SACV;AAAA,QACA,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,kEAAA,EAA8D;AAAA,QACvF;AAAA,UACI,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA;AACV;AACJ,KACJ;AAAA,IACA;AAAA,MACI,EAAA,EAAI,SAAA;AAAA,MACJ,OAAA,EAAS,qBAAA;AAAA,MACT,MAAA,EAAQ;AAAA,QACJ;AAAA,UACI,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA;AACV;AACJ,KACJ;AAAA,IACA;AAAA,MACI,EAAA,EAAI,WAAA;AAAA,MACJ,OAAA,EAAS,gBAAA;AAAA,MACT,MAAA,EAAQ;AAAA,QACJ;AAAA,UACI,IAAA,EAAM,SAAA;AAAA,UACN,KAAA,EAAO;AAAA,YACH;AAAA,cACI,CAAA,EAAG,iBAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,kBAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,iBAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,uBAAA;AAAA,cACH,CAAA,EAAG;AAAA,aACP;AAAA,YACA;AAAA,cACI,CAAA,EAAG,cAAA;AAAA,cACH,CAAA,EAAG;AAAA;AACP;AACJ;AACJ;AACJ,KACJ;AAAA,IACA;AAAA,MACI,EAAA,EAAI,eAAA;AAAA,MACJ,OAAA,EAAS,eAAA;AAAA,MACT,MAAA,EAAQ;AAAA,QACJ;AAAA,UACI,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA;AACV;AACJ,KACJ;AAAA,IACA,aAAA;AAAA,IACA,gBAAA;AAAA,IACA,eAAA;AAAA,IACA,eAAA;AAAA,IACA;AAAA,GACJ;AAAA,EACA,OAAA,EACI;AACR,CAAA;AAEO,IAAM,YAAA,GAAe,EAAE,KAAA,EAAAD,MAAAA,EAAO,SAAAC,QAAAA,EAAQ;;;ACrYtC,IAAM,QAAA,GAA2D;AAAA,EACpE,QAAA,EAAU,eAAA;AAAA,EACV,EAAA,EAAI,SAAA;AAAA,EACJ,KAAA,EAAO;AACX,CAAA;;;ACGA,IAAM,QAAA,GAAW,oBAAA;AAEjB,SAAS,IAAA,CAAK,MAAc,MAAA,EAAwC;AAChE,EAAA,OAAO,IAAA,CAAK,QAAQ,QAAA,EAAU,CAAC,OAAO,GAAA,KAAgB,MAAA,CAAO,GAAG,CAAA,IAAK,KAAK,CAAA;AAC9E;AAEA,SAAS,UAAA,CAAW,MAAkB,MAAA,EAA4C;AAC9E,EAAA,IAAI,OAAO,IAAA,KAAS,QAAA,EAAU,OAAO,IAAA,CAAK,MAAM,MAAM,CAAA;AACtD,EAAA,OAAO,EAAE,CAAA,EAAG,IAAA,CAAK,IAAA,CAAK,CAAA,EAAG,MAAM,CAAA,EAAG,CAAA,EAAG,IAAA,CAAK,IAAA,CAAK,CAAA,EAAG,MAAM,CAAA,EAAE;AAC9D;AAEA,SAAS,SAAA,CAAU,OAAc,MAAA,EAAuC;AACpE,EAAA,QAAQ,MAAM,IAAA;AAAM,IAChB,KAAK,MAAA;AAAA,IACL,KAAK,SAAA;AAAA,IACL,KAAK,MAAA;AACD,MAAA,OAAO,EAAE,GAAG,KAAA,EAAO,IAAA,EAAM,KAAK,KAAA,CAAM,IAAA,EAAM,MAAM,CAAA,EAAE;AAAA,IACtD,KAAK,SAAA;AACD,MAAA,OAAO,EAAE,GAAG,KAAA,EAAO,IAAA,EAAM,KAAK,KAAA,CAAM,IAAA,EAAM,MAAM,CAAA,EAAE;AAAA,IACtD,KAAK,SAAA;AACD,MAAA,OAAO,EAAE,GAAG,KAAA,EAAO,KAAA,EAAO,KAAA,CAAM,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,UAAA,CAAW,CAAA,EAAG,MAAM,CAAC,CAAA,EAAE;AAAA;AAEpF;AAEA,SAAS,WAAA,CAAY,OAAA,EAAkB,MAAA,EAAgC,KAAA,EAAwB;AAC3F,EAAA,OAAO;AAAA,IACH,GAAG,OAAA;AAAA,IACH,KAAK,MAAA,CAAO,KAAA,GAAQ,CAAC,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AAAA,IACtC,OAAA,EAAS,IAAA,CAAK,OAAA,CAAQ,OAAA,EAAS,MAAM,CAAA;AAAA,IACrC,MAAM,OAAA,CAAQ,IAAA,GAAO,KAAK,OAAA,CAAQ,IAAA,EAAM,MAAM,CAAA,GAAI,MAAA;AAAA,IAClD,MAAA,EAAQ,QAAQ,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,KAAM,SAAA,CAAU,CAAA,EAAG,MAAM,CAAC;AAAA,GAC1D;AACJ;AAEA,SAAS,QAAA,CAAS,MAAe,MAAA,EAAyC;AACtE,EAAA,OAAO;AAAA,IACH,GAAG,IAAA;AAAA,IACH,OAAA,EAAS,IAAA,CAAK,IAAA,CAAK,OAAA,EAAS,MAAM,CAAA;AAAA,IAClC,KAAA,EAAO,IAAA,CAAK,IAAA,CAAK,KAAA,EAAO,MAAM,CAAA;AAAA,IAC9B,WAAA,EAAa,IAAA,CAAK,IAAA,CAAK,WAAA,EAAa,MAAM,CAAA;AAAA,IAC1C,SAAA,EAAW,IAAA,CAAK,IAAA,CAAK,SAAA,EAAW,MAAM,CAAA;AAAA,IACtC,eAAA,EAAiB,IAAA,CAAK,IAAA,CAAK,eAAA,EAAiB,MAAM,CAAA;AAAA,IAClD,QAAA,EAAU,KAAK,QAAA,EAAU,GAAA,CAAI,CAAC,CAAA,KAAM,SAAA,CAAU,CAAA,EAAG,MAAM,CAAC,CAAA;AAAA,IACxD,QAAA,EAAU,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,KAAM,WAAA,CAAY,CAAA,EAAG,MAAA,EAAQ,CAAC,CAAC,CAAA;AAAA,IAC/D,SAAS,IAAA,CAAK,OAAA,GAAU,KAAK,IAAA,CAAK,OAAA,EAAS,MAAM,CAAA,GAAI;AAAA,GACzD;AACJ;AAGO,SAAS,QAAA,CAAS,UAAkB,IAAA,EAAyB;AAChE,EAAA,MAAM,GAAA,GAAM,eAAe,QAAQ,CAAA;AACnC,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,GAAA,CAAI,OAAO,EAAE,IAAI,CAAA;AACvC,EAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,IAAS,KAAA;AAC3B,EAAA,MAAM,MAAA,GAA2B,GAAA,CAAI,KAAA,GAAQ,IAAI,KAAA,GAAQ,YAAA;AACzD,EAAA,MAAM,MAAA,GAAiC;AAAA,IACnC,GAAG,aAAA;AAAA,IACH,KAAA,EAAO,KAAA;AAAA,IACP,MAAA,EAAQ,MAAA;AAAA,IACR,WAAA,EAAa,iBAAA,CAAkB,OAAA,CAAQ,YAAA,EAAc,MAAM,CAAA;AAAA,IAC3D,YAAA,EAAc,OAAO,WAAA,EAAY;AAAA,IACjC,SAAS,GAAA,CAAI,OAAA;AAAA,IACb,eAAe,GAAA,CAAI,YAAA;AAAA,IACnB,MAAM,GAAA,CAAI,IAAA;AAAA,IACV,SAAS,GAAA,CAAI,OAAA;AAAA,IACb,kBAAkB,GAAA,CAAI;AAAA,GAC1B;AACA,EAAA,OAAO;AAAA,IACH,GAAG,QAAA,CAAS,IAAA,EAAM,MAAM,CAAA;AAAA,IACxB,MAAM,GAAA,CAAI,IAAA;AAAA,IACV,SAAS,GAAA,CAAI;AAAA,GACjB;AACJ;ACpEA,IAAM,SAAA,GAAY,8CAAA;AAClB,IAAM,OAAA,GAAU,2BAAA;AAET,SAAS,aAAa,IAAA,EAA+B;AACxD,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,SAAS,CAAA;AAClC,EAAA,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,CAAA,KAAM;AAC1B,IAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAElB,IAAA,IAAI,KAAK,UAAA,CAAW,IAAI,KAAK,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA,EAAG;AAC9C,MAAA,uBACIE,cAAA,CAAC,YAAe,SAAA,EAAU,+BAAA,EACrB,eAAK,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,EAAA,EADR,CAEb,CAAA;AAAA,IAER;AAEA,IAAA,IAAI,KAAK,UAAA,CAAW,GAAG,KAAK,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,EAAG;AAC5C,MAAA,uBACIA,cAAA,CAAC,UAAa,SAAA,EAAU,yBAAA,EACnB,eAAK,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,EAAA,EADV,CAEX,CAAA;AAAA,IAER;AAEA,IAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA;AAC9B,IAAA,IAAI,IAAA,EAAM;AACN,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,CAAC,CAAA,IAAK,EAAA;AACzB,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,CAAC,CAAA,IAAK,EAAA;AACxB,MAAA,MAAM,QAAA,GAAW,cAAA,CAAe,IAAA,CAAK,IAAI,CAAA;AACzC,MAAA,uBACIA,cAAA;AAAA,QAAC,GAAA;AAAA,QAAA;AAAA,UAEG,IAAA;AAAA,UACA,SAAA,EAAU,wBAAA;AAAA,UACT,GAAI,WAAW,EAAE,MAAA,EAAQ,UAAU,GAAA,EAAK,qBAAA,KAA0B,EAAC;AAAA,UAEnE,QAAA,EAAA;AAAA,SAAA;AAAA,QALI;AAAA,OAMT;AAAA,IAER;AAEA,IAAA,uBAAOA,cAAA,CAACC,sBAAA,CAAM,QAAA,EAAN,EAAwB,kBAAJ,CAAS,CAAA;AAAA,EACzC,CAAC,CAAA;AACL;AC9CA,SAAS,IAAA,CAAK,EAAE,IAAA,EAAK,EAAqB;AACtC,EAAA,uBAAOD,cAAAA,CAAC,GAAA,EAAA,EAAE,WAAU,uBAAA,EAAyB,QAAA,EAAA,YAAA,CAAa,IAAI,CAAA,EAAE,CAAA;AACpE;AAEA,SAAS,OAAA,CAAQ,EAAE,IAAA,EAAK,EAAqB;AACzC,EAAA,uBACIA,cAAAA,CAAC,IAAA,EAAA,EAAG,WAAU,iFAAA,EACT,QAAA,EAAA,YAAA,CAAa,IAAI,CAAA,EACtB,CAAA;AAER;AAEA,SAAS,OAAA,CAAQ,EAAE,KAAA,EAAM,EAA4B;AACjD,EAAA,uBACIA,eAAC,IAAA,EAAA,EAAG,SAAA,EAAU,qCACT,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,CAAA,KAAM;AACpB,IAAA,IAAI,OAAO,SAAS,QAAA,EAAU;AAC1B,MAAA,uBACIE,eAAA,CAAC,IAAA,EAAA,EAAW,SAAA,EAAU,oCAAA,EAClB,QAAA,EAAA;AAAA,wBAAAF,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mCAAA,EAAqC,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,wBAC1DA,cAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,uBAAA,EAAyB,QAAA,EAAA,YAAA,CAAa,IAAI,CAAA,EAAE;AAAA,OAAA,EAAA,EAFvD,CAGT,CAAA;AAAA,IAER;AACA,IAAA,uBACIE,eAAA,CAAC,IAAA,EAAA,EAAW,SAAA,EAAU,wDAAA,EAClB,QAAA,EAAA;AAAA,sBAAAF,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qEAAA,EACX,eAAK,CAAA,EACV,CAAA;AAAA,sBACAA,eAAC,MAAA,EAAA,EAAK,SAAA,EAAU,gCAAgC,QAAA,EAAA,YAAA,CAAa,IAAA,CAAK,CAAC,CAAA,EAAE;AAAA,KAAA,EAAA,EAJhE,CAKT,CAAA;AAAA,EAER,CAAC,CAAA,EACL,CAAA;AAER;AAEA,SAAS,OAAA,CAAQ,EAAE,IAAA,EAAM,QAAA,EAAS,EAAyC;AACvE,EAAA,uBACIE,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wFAAA,EACX,QAAA,EAAA;AAAA,oBAAAF,eAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mBAAA,EAAqB,QAAA,EAAA,QAAA,GAAW,QAAQ,OAAA,EAAK,CAAA;AAAA,oBAC7DA,eAAC,MAAA,EAAA,EAAK,SAAA,EAAW,WAAW,6BAAA,GAAgC,iBAAA,EACvD,QAAA,EAAA,YAAA,CAAa,IAAI,CAAA,EACtB;AAAA,GAAA,EACJ,CAAA;AAER;AAOA,SAAS,IAAA,CAAK,EAAE,IAAA,EAAK,EAAqB;AACtC,EAAA,uBACIE,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0FAAA,EACX,QAAA,EAAA;AAAA,oBAAAF,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yDAAA,EACV,QAAA,EAAA,kCAAA,EACL,CAAA;AAAA,oBACAA,cAAAA,CAAC,GAAA,EAAA,EAAE,WAAU,uBAAA,EAAyB,QAAA,EAAA,YAAA,CAAa,IAAI,CAAA,EAAE;AAAA,GAAA,EAC7D,CAAA;AAER;AAEA,SAAS,SAAA,CAAU,EAAE,KAAA,EAAM,EAAqB;AAC5C,EAAA,QAAQ,MAAM,IAAA;AAAM,IAChB,KAAK,MAAA;AACD,MAAA,uBAAOA,cAAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAM,MAAM,IAAA,EAAM,CAAA;AAAA,IACnC,KAAK,SAAA;AACD,MAAA,uBAAOA,cAAAA,CAAC,OAAA,EAAA,EAAQ,IAAA,EAAM,MAAM,IAAA,EAAM,CAAA;AAAA,IACtC,KAAK,SAAA;AACD,MAAA,uBAAOA,cAAAA,CAAC,OAAA,EAAA,EAAQ,KAAA,EAAO,MAAM,KAAA,EAAO,CAAA;AAAA,IACxC,KAAK,SAAA;AACD,MAAA,uBAAOA,eAAC,OAAA,EAAA,EAAQ,IAAA,EAAM,MAAM,IAAA,EAAM,QAAA,EAAU,MAAM,QAAA,EAAU,CAAA;AAAA,IAChE,KAAK,MAAA;AACD,MAAA,uBAAOA,cAAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAM,MAAM,IAAA,EAAM,CAAA;AAAA;AAE3C;AAEA,SAAS,WAAA,CAAY,EAAE,OAAA,EAAQ,EAAyB;AACpD,EAAA,uBACIE,eAAA,CAAC,SAAA,EAAA,EAAQ,SAAA,EAAU,gBAAA,EACf,QAAA,EAAA;AAAA,oBAAAA,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,oDAAA,EACX,QAAA,EAAA;AAAA,sBAAAA,eAAA,CAAC,MAAA,EAAA,EAAK,WAAU,0DAAA,EAA2D,QAAA,EAAA;AAAA,QAAA,GAAA;AAAA,QACrE,OAAA,CAAQ,GAAA;AAAA,QAAI;AAAA,OAAA,EAClB,CAAA;AAAA,sBACAF,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yDAAA,EACX,kBAAQ,OAAA,EACb,CAAA;AAAA,MACC,OAAA,CAAQ,IAAA,oBACLE,eAAA,CAAC,MAAA,EAAA,EAAK,WAAU,6CAAA,EACX,QAAA,EAAA;AAAA,QAAA,KAAA;AAAA,QACA,OAAA,CAAQ;AAAA,OAAA,EACb;AAAA,KAAA,EAER,CAAA;AAAA,oBACAF,cAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,uDAAA,EACV,QAAA,EAAA,OAAA,CAAQ,OAAO,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,qBACpBA,cAAAA,CAAC,SAAA,EAAA,EAAkB,OAAO,CAAA,EAAA,EAAV,CAAa,CAChC,CAAA,EACL;AAAA,GAAA,EACJ,CAAA;AAER;AAOO,SAAS,aAAA,CAAc,EAAE,GAAA,EAAI,EAAuB;AACvD,EAAA,uCACK,SAAA,EAAA,EACG,QAAA,EAAA;AAAA,oBAAAE,eAAA,CAAC,QAAA,EAAA,EAAO,WAAU,WAAA,EACd,QAAA,EAAA;AAAA,sBAAAA,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,4EAAA,EACV,QAAA,EAAA;AAAA,QAAA,OAAA;AAAA,QACA,GAAA,CAAI;AAAA,OAAA,EACT,CAAA;AAAA,sBACAF,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,4DAAA,EACT,cAAI,KAAA,EACT,CAAA;AAAA,sBACAA,eAAC,GAAA,EAAA,EAAE,SAAA,EAAU,gEACR,QAAA,EAAA,YAAA,CAAa,GAAA,CAAI,WAAW,CAAA,EACjC;AAAA,KAAA,EACJ,CAAA;AAAA,oBAEAE,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oEAAA,EACX,QAAA,EAAA;AAAA,sBAAAA,eAAA,CAAC,MAAA,EAAA,EACG,QAAA,EAAA;AAAA,wBAAAA,eAAA,CAAC,MAAA,EAAA,EAAK,WAAU,iDAAA,EAAkD,QAAA,EAAA;AAAA,UAAA,YAAA;AAAA,UACnD;AAAA,SAAA,EACf,CAAA;AAAA,wBACAF,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,8BAAA,EAAgC,cAAI,SAAA,EAAU;AAAA,OAAA,EAClE,CAAA;AAAA,sCACC,MAAA,EAAA,EACG,QAAA,EAAA;AAAA,wBAAAE,eAAA,CAAC,MAAA,EAAA,EAAK,WAAU,iDAAA,EAAkD,QAAA,EAAA;AAAA,UAAA,eAAA;AAAA,UAChD;AAAA,SAAA,EAClB,CAAA;AAAA,wBACAF,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,8BAAA,EAAgC,cAAI,OAAA,EAAQ;AAAA,OAAA,EAChE;AAAA,KAAA,EACJ,CAAA;AAAA,IAEC,GAAA,CAAI,QAAA,IAAY,GAAA,CAAI,QAAA,CAAS,MAAA,GAAS,qBACnCA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACV,QAAA,EAAA,GAAA,CAAI,SAAS,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,qBAClBA,cAAAA,CAAC,aAAkB,KAAA,EAAO,CAAA,EAAA,EAAV,CAAa,CAChC,CAAA,EACL,CAAA;AAAA,oBAGJA,cAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,MAAA,EACV,QAAA,EAAA,GAAA,CAAI,SAAS,GAAA,CAAI,CAAC,CAAA,qBACfA,eAAC,WAAA,EAAA,EAAuB,OAAA,EAAS,KAAf,CAAA,CAAE,EAAgB,CACvC,CAAA,EACL,CAAA;AAAA,IAEC,GAAA,CAAI,OAAA,oBACDE,eAAA,CAAC,GAAA,EAAA,EAAE,WAAU,iEAAA,EACR,QAAA,EAAA;AAAA,MAAA,KAAA;AAAA,MACA,GAAA,CAAI;AAAA,KAAA,EACT;AAAA,GAAA,EAER,CAAA;AAER;ACjKO,SAAS,kBAAA,CAAmB;AAAA,EAC/B,eAAA,GAAkB,kBAAA;AAAA,EAClB,OAAA,GAAU;AACd,CAAA,EAA4B;AACxB,EAAA,uBACIA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EACV,QAAA,EAAA;AAAA,IAAA,OAAA,oBACGF,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,gFACT,QAAA,EAAA,OAAA,EACL,CAAA;AAAA,oBAGJE,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mFAAA,EACX,QAAA,EAAA;AAAA,sBAAAF,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mBAAA,EAAqB,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,sBAC3CA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mBAAkB,QAAA,EAAA,sIAAA,EAGlC;AAAA,KAAA,EACJ,CAAA;AAAA,oBAEAE,eAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,4BAAA,EAA6B,QAAA,EAAA;AAAA,MAAA,OAAA;AAAA,MAChC,GAAA;AAAA,sBACNF,cAAAA;AAAA,QAAC,GAAA;AAAA,QAAA;AAAA,UACG,IAAA,EAAM,UAAU,eAAe,CAAA,CAAA;AAAA,UAC/B,SAAA,EAAU,6DAAA;AAAA,UAET,QAAA,EAAA;AAAA;AAAA,OACL;AAAA,MAAI,mEAAA;AAAA,MAC8D,GAAA;AAAA,sBAClEA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iBAAgB,QAAA,EAAA,eAAA,EAAa,CAAA;AAAA,MAAO;AAAA,KAAA,EACxD,CAAA;AAAA,oBAEAA,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,yBAAA,EAEN,QAAA,EAAA;AAAA,MACI,CAAC,SAAS,gDAAgD,CAAA;AAAA,MAC1D,CAAC,OAAO,sCAAsC,CAAA;AAAA,MAC9C;AAAA,QACI,wBAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACA;AAAA,QACI,QAAA;AAAA,QACA;AAAA;AACJ,KACJ,CACF,GAAA,CAAI,CAAC,CAAC,CAAA,EAAG,CAAC,CAAA,qBACRE,eAAAA,CAAC,IAAA,EAAA,EAAW,SAAA,EAAU,wDAAA,EAClB,QAAA,EAAA;AAAA,sBAAAF,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qEAAA,EACX,QAAA,EAAA,CAAA,EACL,CAAA;AAAA,sBACAA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,gCAAgC,QAAA,EAAA,CAAA,EAAE;AAAA,KAAA,EAAA,EAJ7C,CAKT,CACH,CAAA,EACL;AAAA,GAAA,EACJ,CAAA;AAER","file":"index.js","sourcesContent":["/**\n * @orangecheck/legal — family-wide constants.\n *\n * These resolve `[[TOKEN]]` placeholders in authored content. Changing a value\n * here updates every generated document on every site at the next package\n * version bump — that is the whole point of the engine.\n */\n\n/**\n * The entity of record.\n *\n * ── PENDING INCORPORATION ──────────────────────────────────────────────────\n * No formal entity is registered yet. Until one is, documents operate under\n * the bare name \"OrangeCheck\" and the Delaware-law / AAA-arbitration clauses\n * are written as forward-looking (see the dispute-resolution clause).\n *\n * When the entity is formed, change ONLY the two values below — e.g.\n * LEGAL_ENTITY = 'OrangeCheck, Inc.'\n * LEGAL_ENTITY_LONG = 'OrangeCheck, Inc., a Delaware corporation'\n * — rebuild, and publish. Every Terms/Privacy page family-wide updates.\n */\nexport const LEGAL_ENTITY = 'OrangeCheck';\n\n/** How the documents write the brand, unless a site writes it its own way (`SiteContext.brand`). */\nexport const BRAND = 'OrangeCheck';\nexport const LEGAL_ENTITY_LONG = 'OrangeCheck (OCHK), an unincorporated project';\n\n/** True while no formal entity exists — gates a forward-looking note. */\nexport const ENTITY_PENDING = true;\n\nexport const CONTACT_GENERAL = 'contact@ochk.io';\nexport const CONTACT_SECURITY = 'security@ochk.io';\nexport const CONTACT_PRIVACY = 'contact@ochk.io';\n\n/** Governing-law surface, referenced by the shared dispute-resolution clause. */\nexport const GOVERNING_LAW_STATE = 'Delaware, United States';\nexport const ARBITRATION_SEAT = 'Wilmington, Delaware, United States';\n\n/** Token table applied by `buildDoc`. Site-specific tokens are merged on top. */\nexport const GLOBAL_TOKENS: Record<string, string> = {\n BRAND,\n ENTITY: LEGAL_ENTITY,\n ENTITY_LONG: LEGAL_ENTITY_LONG,\n // For the clauses set in capitals, so the name does not break their case.\n ENTITY_UPPER: LEGAL_ENTITY.toUpperCase(),\n CONTACT: CONTACT_GENERAL,\n SECURITY_CONTACT: CONTACT_SECURITY,\n PRIVACY_CONTACT: CONTACT_PRIVACY,\n GOVERNING_LAW: GOVERNING_LAW_STATE,\n ARBITRATION_SEAT,\n};\n","/**\n * @orangecheck/legal — site registry.\n *\n * Maps each self-hosting site to its legal profile and token context. The\n * twelve `PROTOCOL_LINKED_SITES` deliberately do NOT host their own pages —\n * their footers link to ochk.io, and the protocol document on ochk.io is\n * authored to govern the whole non-custodial family. Three sites self-host:\n * ochk.io, which hosts that document, and the two commercial products,\n * ochk.app and vault, because each describes money flows the protocol\n * document cannot truthfully cover.\n */\n\nimport type { SiteContext } from './types';\nimport { CONTACT_GENERAL, CONTACT_SECURITY } from './constants';\n\nexport const LEGAL_SITES: Record<string, SiteContext> = {\n www: {\n slug: 'www',\n profile: 'protocol',\n host: 'ochk.io',\n product: 'OrangeCheck',\n productShort: 'OrangeCheck',\n contact: CONTACT_GENERAL,\n securityContact: CONTACT_SECURITY,\n selfHosted: true,\n },\n me: {\n slug: 'me',\n profile: 'me',\n host: 'ochk.app',\n product: 'ochk.app',\n productShort: 'ochk.app',\n contact: CONTACT_GENERAL,\n securityContact: CONTACT_SECURITY,\n selfHosted: true,\n // ochk.app writes its brand lowercase, as its own pages do (lead ruling, 2026-11-03).\n brand: 'orangecheck',\n },\n vault: {\n slug: 'vault',\n profile: 'vault',\n host: 'vault.ochk.io',\n product: 'OC Vault',\n productShort: 'Vault',\n contact: CONTACT_GENERAL,\n securityContact: CONTACT_SECURITY,\n selfHosted: true,\n },\n};\n\n/** Sites that share the protocol document hosted on ochk.io (no own pages). */\nexport const PROTOCOL_LINKED_SITES = [\n 'attest',\n 'lock',\n 'vote',\n 'stamp',\n 'agent',\n 'pledge',\n 'docs',\n 'analytics',\n 'chat',\n 'cosign',\n 'btc',\n 'globe',\n] as const;\n\nexport function getSiteContext(slug: string): SiteContext {\n const ctx = LEGAL_SITES[slug];\n if (!ctx) {\n throw new Error(\n `@orangecheck/legal: unknown site \"${slug}\". ` +\n `Known self-hosting sites: ${Object.keys(LEGAL_SITES).join(', ')}.`,\n );\n }\n return ctx;\n}\n\n/**\n * Resolve the footer href for a legal document on a given site.\n *\n * Self-hosting sites get a local path (`/terms`); every other site points at\n * the canonical protocol document on ochk.io. One helper, so no site ever\n * hand-rolls a legal link again.\n */\nexport function legalHref(siteSlug: string, kind: 'terms' | 'privacy' | 'security'): string {\n const ctx = LEGAL_SITES[siteSlug];\n if (ctx?.selfHosted) return `/${kind}`;\n return `https://ochk.io/${kind}`;\n}\n","/**\n * @orangecheck/legal — shared core clause library.\n *\n * Sections here are byte-identical across every profile once tokens resolve.\n * Profiles import them by name and arrange them around profile-specific\n * sections. Anything that genuinely differs per product (overview, fees,\n * data collection, money movement) is NOT here — it lives in the profile file.\n */\n\nimport type { Section } from '../types';\n\n/* ─────────────────────────── TERMS ─────────────────────────── */\n\nexport const eligibility: Section = {\n id: 'eligibility',\n heading: 'eligibility',\n blocks: [\n {\n kind: 'bullets',\n items: [\n 'You must be at least 13 (or the age of digital consent in your jurisdiction)',\n 'You must have the legal capacity to enter into a binding contract',\n 'You must not be prohibited from using the Service under applicable law',\n 'You must comply with all applicable laws and regulations',\n ],\n },\n ],\n};\n\nexport const acceptableUse: Section = {\n id: 'acceptable-use',\n heading: 'acceptable use',\n hint: 'permitted · prohibited',\n blocks: [\n { kind: 'subhead', text: 'prohibited — illegal' },\n {\n kind: 'bullets',\n items: [\n 'Any unlawful purpose',\n 'Violating any applicable laws or regulations',\n 'Fraud, money laundering, or financial crimes',\n 'Infringing intellectual property rights',\n ],\n },\n { kind: 'subhead', text: 'prohibited — harmful' },\n {\n kind: 'bullets',\n items: [\n 'Harass, threaten, or harm others',\n 'Impersonate any person or entity',\n 'Misrepresent your identity or affiliation',\n 'Assert control of a Bitcoin address, identity, or handle you do not control',\n ],\n },\n { kind: 'subhead', text: 'prohibited — technical abuse' },\n {\n kind: 'bullets',\n items: [\n 'Interfere with or disrupt the Service or its servers',\n 'Attempt unauthorized access to any account, system, or data',\n 'Automated scraping or harvesting without permission',\n 'Introduce viruses, malware, or malicious code',\n 'Circumvent security features or rate limits',\n ],\n },\n {\n kind: 'para',\n text: 'We reserve the right to investigate and act against anyone who violates these prohibitions — including terminating access and reporting to law enforcement.',\n },\n ],\n};\n\nexport const intellectualProperty: Section = {\n id: 'intellectual-property',\n heading: 'intellectual property',\n blocks: [\n { kind: 'subhead', text: \"[[ENTITY]]'s rights\" },\n {\n kind: 'para',\n text: 'The Service and its content (excluding user-generated content) are protected by copyright, trademark, patent, and other IP laws — including the [[BRAND]] name, logos, branding, site design, software, code, algorithms, and documentation.',\n },\n { kind: 'subhead', text: 'your license' },\n {\n kind: 'para',\n text: 'You receive a limited, non-exclusive, non-transferable, revocable license to access and use the Service subject to these Terms. You may not sell, sublicense, or use the Service to build a competing product.',\n },\n { kind: 'subhead', text: 'your content' },\n {\n kind: 'para',\n text: 'You retain ownership of content you submit (feedback, support requests, integration material). You grant us a worldwide, non-exclusive, royalty-free license to operate and improve the Service using that content. You are responsible for your content.',\n },\n { kind: 'subhead', text: 'open source' },\n {\n kind: 'para',\n text: '[[BRAND]] protocol specifications and the `@orangecheck/*` packages are released under open-source licenses (MIT unless stated otherwise). Those portions are governed by their own license terms; these Terms govern the hosted service.',\n },\n ],\n};\n\nexport const limitationOfLiability: Section = {\n id: 'liability',\n heading: 'limitation of liability',\n hint: 'maximum legal cap',\n blocks: [\n {\n kind: 'callout',\n emphatic: true,\n text: 'TO THE FULLEST EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT SHALL [[ENTITY_UPPER]], ITS AFFILIATES, OFFICERS, DIRECTORS, EMPLOYEES, AGENTS, LICENSORS, CONTRIBUTORS, OR SUPPLIERS BE LIABLE FOR ANY DAMAGES ARISING OUT OF OR RELATED TO THE SERVICE, THESE TERMS, OR YOUR USE OR INABILITY TO USE THE SERVICE — WHETHER BASED ON CONTRACT, TORT (INCLUDING NEGLIGENCE), STATUTE, INDEMNITY, OR ANY OTHER LEGAL THEORY — EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.',\n },\n { kind: 'subhead', text: 'excluded damages' },\n {\n kind: 'para',\n text: 'This exclusion covers, without limitation: **direct**, indirect, incidental, special, consequential, exemplary, punitive, reliance, and cover damages; and **loss of Bitcoin, sats, cryptocurrency, tokens, assets, funds, private keys, seed phrases, passwords, data, profits, revenue, goodwill, reputation, business opportunity, anticipated savings, or use**.',\n },\n { kind: 'subhead', text: 'hard cap' },\n {\n kind: 'para',\n text: 'If, notwithstanding the above, a court of competent jurisdiction finds [[ENTITY]] liable to you, our **aggregate liability for all claims arising out of or related to the Service or these Terms is capped at the greater of (a) US$100 or (b) the total amount you actually paid [[ENTITY]] in the twelve (12) months immediately preceding the event giving rise to the claim**.',\n },\n { kind: 'subhead', text: 'essential purpose · jurisdictional floor' },\n {\n kind: 'para',\n text: 'These limitations form an essential basis of the bargain and apply even if a limited remedy fails of its essential purpose. Some jurisdictions do not allow certain exclusions; there, the limitations apply to the maximum extent permitted by law and the remainder of these Terms stays in full force.',\n },\n ],\n};\n\nexport const indemnification: Section = {\n id: 'indemnification',\n heading: 'indemnification',\n blocks: [\n {\n kind: 'para',\n text: \"You agree to indemnify, defend, and hold harmless [[ENTITY]] and its affiliates from any claims, liabilities, damages, losses, costs, and expenses (including reasonable attorneys' fees) arising from:\",\n },\n {\n kind: 'bullets',\n items: [\n 'Your use or misuse of the Service',\n 'Your violation of these Terms',\n 'Your violation of any law or regulation',\n 'Your violation of any third-party rights',\n 'Content you submit or share',\n 'Your negligence or willful misconduct',\n ],\n },\n ],\n};\n\nexport const termination: Section = {\n id: 'termination',\n heading: 'termination',\n blocks: [\n {\n kind: 'para',\n text: '**Your right:** stop using the Service at any time. **Our right:** suspend or terminate access with or without cause or notice — including if you violate these Terms, pose a security or legal risk, or we discontinue the Service.',\n },\n { kind: 'subhead', text: 'effect of termination' },\n {\n kind: 'bullets',\n items: [\n 'Your right to use the Service immediately ceases',\n 'We may delete your account and operational data (subject to legal requirements)',\n 'Content already published to public networks (Bitcoin, Nostr) cannot be deleted by [[ENTITY]]',\n 'Surviving sections: intellectual property, disclaimers, liability, indemnification, governing law, dispute resolution',\n ],\n },\n ],\n};\n\nexport const changesToTerms: Section = {\n id: 'changes',\n heading: 'changes',\n blocks: [\n { kind: 'subhead', text: 'to the service' },\n {\n kind: 'para',\n text: 'We may modify, suspend, or discontinue the Service at any time, with or without notice. We are not liable for any modification, suspension, or discontinuation.',\n },\n { kind: 'subhead', text: 'to these terms' },\n {\n kind: 'bullets',\n items: [\n 'We will update the \"last updated\" date',\n 'For material changes, we will provide notice on the website (and by email where we hold one)',\n 'Changes become effective when posted',\n 'Continued use after changes constitutes acceptance',\n ],\n },\n ],\n};\n\nexport const disputeResolution: Section = {\n id: 'disputes',\n heading: 'dispute resolution',\n hint: 'informal → arbitration',\n blocks: [\n { kind: 'subhead', text: 'informal resolution' },\n {\n kind: 'para',\n text: 'Before filing a claim, contact us at [[CONTACT]] to attempt to resolve the dispute informally.',\n },\n { kind: 'subhead', text: 'arbitration · class-action waiver · jury waiver' },\n {\n kind: 'callout',\n emphatic: true,\n text: 'DISPUTES ARISING OUT OF OR RELATED TO THESE TERMS OR THE SERVICE SHALL BE RESOLVED BY FINAL AND BINDING INDIVIDUAL ARBITRATION, EXCEPT AS SPECIFIED BELOW. YOU AND [[ENTITY_UPPER]] EXPRESSLY WAIVE THE RIGHT TO A TRIAL BY JURY AND THE RIGHT TO PARTICIPATE IN ANY CLASS, COLLECTIVE, CONSOLIDATED, MASS, OR REPRESENTATIVE ACTION. ARBITRATION IS ON AN INDIVIDUAL BASIS ONLY.',\n },\n {\n kind: 'bullets',\n items: [\n 'Administered by the American Arbitration Association under its then-current Commercial or Consumer Arbitration Rules (whichever applies)',\n 'Seat of arbitration: [[ARBITRATION_SEAT]] — or, at either party’s election, conducted remotely by video',\n 'Single neutral arbitrator; decision final and binding, enforceable in any court of competent jurisdiction',\n 'The arbitrator — not any court — decides threshold questions of arbitrability, including the validity and scope of this clause',\n ],\n },\n { kind: 'subhead', text: 'exceptions to arbitration' },\n {\n kind: 'bullets',\n items: [\n 'Small-claims court actions (if eligible and filed individually)',\n 'Injunctive or equitable relief to protect intellectual property or confidential information',\n 'Any claim that cannot lawfully be arbitrated under applicable law',\n ],\n },\n { kind: 'subhead', text: 'one-year limit to bring claims' },\n {\n kind: 'para',\n text: 'To the fullest extent permitted by law, any claim arising out of or relating to the Service or these Terms must be commenced **within one (1) year** after it accrues, or it is permanently barred.',\n },\n { kind: 'subhead', text: 'opt-out of arbitration' },\n {\n kind: 'para',\n text: 'You may opt out by sending written notice to [[CONTACT]] within 30 days of first using the Service, including your name, the date you first used the Service, and a clear statement that you wish to opt out. Opting out does not affect the class-action or jury-trial waivers.',\n },\n { kind: 'subhead', text: 'governing law' },\n {\n kind: 'para',\n text: 'These Terms are governed by the laws of the State of [[GOVERNING_LAW]], without regard to conflict-of-law principles, and, where applicable, the U.S. Federal Arbitration Act (9 U.S.C. §§ 1–16). For users in the EEA, UK, or Switzerland, mandatory consumer-protection laws of your country of residence may apply and nothing here overrides those rights.',\n },\n { kind: 'subhead', text: 'entity of record' },\n {\n kind: 'callout',\n text: 'At the date of this document, the party of record is [[ENTITY_LONG]]. References to \"[[ENTITY]]\" mean that party and the operators acting on its behalf; upon formation of a formal legal entity, that entity becomes the party of record and these Terms — including the arbitration and governing-law provisions — bind it as successor without further notice.',\n },\n ],\n};\n\nexport const miscellaneous: Section = {\n id: 'miscellaneous',\n heading: 'miscellaneous',\n blocks: [\n {\n kind: 'bullets',\n items: [\n {\n k: 'entire agreement',\n v: 'these terms + the privacy policy are the entire agreement and supersede any prior agreement on the same subject',\n },\n {\n k: 'severability',\n v: 'if a provision is invalid or unenforceable it is severed and the remainder stays in full force',\n },\n {\n k: 'waiver',\n v: 'failure to enforce a provision is not a waiver of the right to enforce it later',\n },\n {\n k: 'assignment',\n v: 'you may not assign these terms without our consent; we may assign freely in a merger, acquisition, or sale of assets',\n },\n {\n k: 'no agency',\n v: 'nothing here creates a partnership, joint venture, employment, agency, or fiduciary relationship',\n },\n {\n k: 'force majeure',\n v: 'we are not liable for delays or failures caused by events beyond our reasonable control — including network failures, Nostr relay outages, Bitcoin network conditions, government action, or natural disaster',\n },\n {\n k: 'notices',\n v: 'to you via email, the Service, or the website; to us at [[CONTACT]]',\n },\n {\n k: 'electronic acceptance',\n v: 'your use of the Service is electronic acceptance of these terms under applicable e-signature laws',\n },\n ],\n },\n { kind: 'subhead', text: 'sanctions, export controls, and prohibited jurisdictions' },\n {\n kind: 'para',\n text: 'You represent and warrant that you are not, and are not acting on behalf of, any person or entity that is:',\n },\n {\n kind: 'bullets',\n items: [\n 'Located in, organized under the laws of, or ordinarily resident in any country or territory subject to comprehensive U.S., U.N., E.U., or U.K. sanctions',\n \"Identified on the U.S. Treasury OFAC Specially Designated Nationals list, Consolidated Sanctions List, or any other U.S. government restricted-party list\",\n 'Identified on any U.K. HMT, E.U., U.N., or other applicable consolidated sanctions list',\n 'Otherwise subject to a sanctions, export-control, or anti-terrorism restriction that would prohibit your use of the Service',\n ],\n },\n {\n kind: 'para',\n text: 'You agree to comply with all applicable export-control laws, including the U.S. Export Administration Regulations. A breach of this section is a material breach of these Terms.',\n },\n ],\n};\n\n/* ─────────────────────────── PRIVACY ─────────────────────────── */\n\nexport const privacyRights: Section = {\n id: 'your-rights',\n heading: 'your rights',\n hint: 'access · correction · deletion',\n blocks: [\n {\n kind: 'bullets',\n items: [\n {\n k: 'access & portability',\n v: 'request a copy of your personal information in a machine-readable format',\n },\n {\n k: 'correction',\n v: 'request correction of inaccurate or incomplete information',\n },\n {\n k: 'deletion',\n v: 'request deletion of personal information we hold (data published to public networks cannot be deleted by us — see retention)',\n },\n {\n k: 'objection',\n v: 'object to or restrict processing in certain circumstances',\n },\n {\n k: 'withdraw consent',\n v: 'withdraw consent where consent is the legal basis for processing',\n },\n ],\n },\n { kind: 'para', text: 'To exercise any right, email [[PRIVACY_CONTACT]]. We respond within 30 days.' },\n ],\n};\n\nexport const privacyRegional: Section = {\n id: 'regional-rights',\n heading: 'regional rights',\n hint: 'ccpa · gdpr · uk · other',\n blocks: [\n { kind: 'subhead', text: 'california (ccpa / cpra)' },\n {\n kind: 'bullets',\n items: [\n 'Right to know the categories of personal information collected',\n 'Right to delete and to correct your personal information',\n 'Right to opt out of sale or sharing — we do not sell or share personal information',\n 'Right to limit use of sensitive personal information — we do not collect sensitive PI as defined by the CPRA',\n 'Right to non-discrimination for exercising your rights',\n ],\n },\n { kind: 'subhead', text: 'europe (gdpr) & united kingdom (uk gdpr)' },\n {\n kind: 'bullets',\n items: [\n {\n k: 'legal basis',\n v: 'consent, contract performance, legitimate interests (security, abuse prevention, service improvement), and legal obligations',\n },\n {\n k: 'your rights',\n v: 'access, rectification, erasure, restriction, portability, objection, and withdrawal of consent',\n },\n {\n k: 'supervisory authority',\n v: 'right to lodge a complaint with your local EU/EEA data-protection authority, or the UK ICO',\n },\n {\n k: 'eu/uk representative',\n v: 'if and when required, we will designate an Article 27 representative and publish the details here',\n },\n ],\n },\n { kind: 'subhead', text: 'other jurisdictions' },\n {\n kind: 'para',\n text: 'If you reside in a jurisdiction with a comprehensive privacy law — including Brazil (LGPD), Canada (PIPEDA / Law 25), Australia, Japan (APPI), South Korea (PIPA), Switzerland (FADP), or any U.S. state privacy law — you have the equivalent rights of access, correction, deletion, portability, and objection. Email [[PRIVACY_CONTACT]] and we will honour applicable rights under the law of your residence.',\n },\n ],\n};\n\nexport const privacyChildren: Section = {\n id: 'childrens-privacy',\n heading: \"children's privacy\",\n blocks: [\n {\n kind: 'para',\n text: '[[PRODUCT]] is not intended for children under 13 (or the applicable age of digital consent in your jurisdiction). We do not knowingly collect personal information from children. If you believe we have, email [[PRIVACY_CONTACT]] immediately and we will delete it.',\n },\n ],\n};\n\nexport const privacyTransfers: Section = {\n id: 'international-transfers',\n heading: 'international transfers',\n blocks: [\n {\n kind: 'para',\n text: '[[ENTITY]] is operated from the United States. If you access [[PRODUCT]] from elsewhere, your information may be transferred to, stored, and processed in the US or other countries where our service providers operate. For users in the EEA, UK, or Switzerland, we rely on appropriate safeguards for international transfers.',\n },\n ],\n};\n\nexport const privacyChanges: Section = {\n id: 'policy-changes',\n heading: 'changes to this policy',\n blocks: [\n {\n kind: 'bullets',\n items: [\n 'We will update the \"last updated\" date above',\n 'For material changes, we will provide prominent notice on the website',\n 'Continued use after changes constitutes acceptance',\n ],\n },\n ],\n};\n\n/* Security disclosure content lives in the standalone `<SecurityDisclosure>`\n * component (src/security.tsx), not in the document engine. */\n","/**\n * @orangecheck/legal — `protocol` profile.\n *\n * The non-custodial family: the ochk.io umbrella, the six verb sites\n * (attest, lock, vote, stamp, agent, pledge), the docs at ochk.io/docs, and\n * analytics.ochk.io. Free, no money movement, no custody. This is a refresh\n * of the long-standing ochk.io documents — narrowed so it no longer purports\n * to govern the commercial products, which now carry their own Terms.\n */\n\nimport type { DocSpec } from '../types';\nimport {\n acceptableUse,\n changesToTerms,\n disputeResolution,\n eligibility,\n indemnification,\n intellectualProperty,\n limitationOfLiability,\n miscellaneous,\n privacyChanges,\n privacyChildren,\n privacyRegional,\n privacyRights,\n privacyTransfers,\n} from './clauses';\n\nconst COMMERCIAL_SCOPE_NOTE =\n 'These Terms govern the **non-custodial** OrangeCheck family: [ochk.io](https://ochk.io), including its documentation at [ochk.io/docs](https://ochk.io/docs); the verb sites — OC Attest, OC Lock, OC Vote, OC Stamp, OC Agent, OC Pledge; and [chat.ochk.io](https://chat.ochk.io), [cosign.ochk.io](https://cosign.ochk.io), [btc.ochk.io](https://btc.ochk.io) and [globe.ochk.io](https://globe.ochk.io). The commercial products **ochk.app** and **vault.ochk.io** each publish their own Terms; these Terms do not govern your use of those products.';\n\nconst terms: DocSpec = {\n kind: 'terms',\n eyebrow: 'terms',\n title: 'Terms of service',\n description:\n 'These Terms govern your access to and use of the OrangeCheck website, protocol reference sites, and documentation. By using OrangeCheck, you agree to be bound by these Terms.',\n metaTitle: 'Terms of Service — OrangeCheck',\n metaDescription:\n 'The terms and conditions for using OrangeCheck. Non-custodial service provided as-is. You are responsible for your wallet and private keys.',\n effective: '2025-09-30',\n updated: '2026-10-29',\n preamble: [\n {\n kind: 'callout',\n emphatic: true,\n text: 'By accessing or using OrangeCheck, you agree to be bound by these Terms. If you do not agree, do not use the Service. These Terms contain a binding-arbitration, class-action, and jury-trial waiver, important limitations on liability, and specific acknowledgements about the public, permanent, and irrevocable nature of anything you publish.',\n },\n { kind: 'callout', text: COMMERCIAL_SCOPE_NOTE },\n ],\n sections: [\n {\n id: 'overview',\n heading: 'overview',\n hint: 'what orangecheck does / does not',\n blocks: [\n { kind: 'subhead', text: 'what orangecheck does' },\n {\n kind: 'para',\n text: 'OrangeCheck is a family of **non-custodial** protocols and reference tools that let you create cryptographic proof-of-stake artifacts using Bitcoin message signatures (BIP-322), bind self-asserted handles to them, optionally publish them to decentralized Nostr relays, and discover and verify artifacts created by others.',\n },\n {\n kind: 'para',\n text: 'OrangeCheck also runs **chat.ochk.io**, an end-to-end-encrypted messenger; **cosign.ochk.io**, where builders post projects and others join or back them, with any payment going directly from one person to another; **btc.ochk.io**, a read-only Bitcoin market desk; and **globe.ochk.io**, a read-only view of the Bitcoin network.',\n },\n { kind: 'subhead', text: 'what orangecheck does not' },\n {\n kind: 'bullets',\n items: [\n 'Take custody of your Bitcoin, private keys, or wallet credentials',\n 'Broadcast Bitcoin transactions on your behalf',\n 'Provide financial, investment, or legal advice',\n 'Guarantee the accuracy of blockchain data from third-party sources',\n ],\n },\n { kind: 'subhead', text: 'non-custodial nature' },\n {\n kind: 'para',\n text: '**You are solely responsible for** your wallet, keys, device security, and what you sign. We cannot recover lost keys, reverse signatures, or access your funds.',\n },\n ],\n },\n {\n id: 'publication-risks',\n heading: 'publication risks · your acknowledgement',\n hint: 'public, permanent, irrevocable',\n blocks: [\n {\n kind: 'callout',\n emphatic: true,\n text: 'AN ORANGECHECK ENVELOPE IS A SIGNED, PUBLIC ARTIFACT THAT PERMANENTLY LINKS A BITCOIN ADDRESS TO EVERY HANDLE YOU ASSERT. BY CREATING OR PUBLISHING ONE, YOU EXPRESSLY ACCEPT THE RISKS BELOW. WE ARE NOT RESPONSIBLE FOR THE CONSEQUENCES OF YOUR DECISION TO PUBLISH.',\n },\n { kind: 'subhead', text: 'specific risks you accept' },\n {\n kind: 'bullets',\n items: [\n {\n k: 'deanonymization',\n v: 'an envelope binds your address to your handles; chain analysis can then link your other addresses, counterparties, and spending patterns. you cannot un-bind once published.',\n },\n {\n k: 'wealth advertisement',\n v: 'public sat values combined with real-name handles may make you a target for phishing, theft, or coercion. we recommend pseudonymous handles and modest bonds. your personal safety is your responsibility.',\n },\n {\n k: 'irrevocability',\n v: 'envelopes published to Nostr relays are replicated across independent operators. OrangeCheck cannot delete, edit, or revoke Nostr events.',\n },\n {\n k: 'handle spoofing',\n v: 'identity bindings are self-asserted; any user can claim any string. relying parties must verify ownership out-of-band.',\n },\n ],\n },\n ],\n },\n eligibility,\n {\n id: 'account',\n heading: 'account & sign-in',\n hint: 'sign-in optional',\n blocks: [\n {\n kind: 'para',\n text: 'Most of the Service works without registration. Optional sign-in proves one of: a Bitcoin address (a BIP-322 signature), an email inbox (a one-time code), or a Google or GitHub account. No password is ever created. A session is a server-side row plus an `HttpOnly; Secure; SameSite=None` cookie on `.ochk.io`, revoked when you sign out or the cookie expires.',\n },\n {\n kind: 'para',\n text: 'If you use sign-in, you are responsible for the security of the device and wallet you sign with. Anyone with your keys can open a session in your name.',\n },\n ],\n },\n acceptableUse,\n intellectualProperty,\n {\n id: 'third-parties',\n heading: 'third parties',\n hint: 'blockchain · nostr · wallets · relying parties',\n blocks: [\n {\n kind: 'bullets',\n items: [\n {\n k: 'blockchain data',\n v: 'verification relies on third-party APIs (mempool.space, Esplora, or your own node). we do not guarantee accuracy or availability.',\n },\n {\n k: 'opentimestamps calendars',\n v: \"when you claim an OC Chat @handle, your browser sends the claim's fingerprint (a SHA-256 hash) to the OpenTimestamps calendars at alice.btc.calendar.opentimestamps.org, bob.btc.calendar.opentimestamps.org and finney.calendar.eternitywall.com, and reads your address's coins and block headers from mempool.space; each of these sees your IP address and when you asked.\",\n },\n {\n k: 'payments between people',\n v: \"postage on chat.ochk.io, and backing, zaps and bounties on cosign.ochk.io, are Lightning payments you make directly to the other person's wallet. OrangeCheck never holds them, cannot reverse them, and is not a party to them.\",\n },\n {\n k: 'nostr network',\n v: 'decentralized relays operated by third parties. published data is replicated outside our control and may persist indefinitely.',\n },\n {\n k: 'wallet software',\n v: 'browser, mobile, desktop, and hardware wallets are third-party software we do not audit or endorse. a malicious wallet could sign something other than what is displayed.',\n },\n {\n k: 'relying parties',\n v: 'platforms, relays, and integrators independently decide whether to trust any OrangeCheck artifact. OrangeCheck is not a party to, and accepts no liability for, those decisions.',\n },\n {\n k: 'api / sdk consumers',\n v: 'calling a hosted endpoint or using an `@orangecheck/*` package is use of the Service and subject to these Terms; the packages are separately MIT-licensed.',\n },\n ],\n },\n ],\n },\n {\n id: 'fees',\n heading: 'fees',\n hint: 'free',\n blocks: [\n {\n kind: 'para',\n text: 'The protocol sites, the documentation, cosign.ochk.io, btc.ochk.io and globe.ochk.io are free to use, and so is chat.ochk.io. chat.ochk.io also lists an optional paid plan, Personal: when its checkout is open, you pay the price shown before you pay, in advance, for a fixed period, and it does not renew on its own. You are responsible for Bitcoin network fees on any transactions you initiate and for your own ISP and wallet-provider costs. Other paid functionality, if introduced, will be announced with advance notice; the commercial products **ochk.app** and **vault.ochk.io** carry their own pricing and Terms.',\n },\n ],\n },\n {\n id: 'disclaimers',\n heading: 'disclaimers & warranties',\n hint: 'as-is · no warranty of any kind',\n blocks: [\n {\n kind: 'callout',\n emphatic: true,\n text: 'THE SERVICE IS PROVIDED \"AS IS\" AND \"AS AVAILABLE\", WITH ALL FAULTS AND WITHOUT WARRANTY OF ANY KIND. TO THE MAXIMUM EXTENT PERMITTED BY LAW, ORANGECHECK DISCLAIMS ALL WARRANTIES, EXPRESS, IMPLIED, AND STATUTORY — INCLUDING MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE, NON-INFRINGEMENT, AND ACCURACY.',\n },\n { kind: 'subhead', text: 'not financial, legal, or compliance advice' },\n {\n kind: 'para',\n text: \"Nothing OrangeCheck provides — artifacts, metrics, scores, identity bindings, btc.ochk.io's market data, charts and written market commentary (some of it written by an AI model), or other output — is financial, investment, legal, tax, KYC, AML, sanctions, or regulatory-compliance advice. Obtain independent professional advice before relying on the Service for any decision.\",\n },\n { kind: 'subhead', text: 'regulatory status · not a money services business' },\n {\n kind: 'para',\n text: 'The protocol sites do not transmit, transfer, exchange, convert, issue, redeem, or custody any virtual currency, fiat currency, security, or other asset. They sign and verify cryptographic messages; they do not move value. Accordingly, with respect to the protocol sites, OrangeCheck does not hold itself out as a Money Services Business or money transmitter under the U.S. Bank Secrecy Act, a Virtual Asset Service Provider under the FATF Recommendations, a Crypto-Asset Service Provider under the EU MiCA Regulation, a broker-dealer, a payment or e-money institution, a bank, or a regulated identity provider.',\n },\n { kind: 'subhead', text: 'use at your own risk' },\n {\n kind: 'para',\n text: 'YOU ASSUME ALL RISK from your use of the Service. Verify anything load-bearing independently. Features labelled \"beta\", \"experimental\", or \"preview\" carry even fewer guarantees and may change or be removed at any time.',\n },\n ],\n },\n limitationOfLiability,\n indemnification,\n {\n id: 'termination',\n heading: 'termination',\n blocks: [\n {\n kind: 'para',\n text: '**Your right:** stop using the Service at any time. **Our right:** suspend or terminate access with or without cause or notice. On termination, your right to use the Service ceases; artifacts you created may remain publicly accessible and data published to Nostr cannot be deleted by OrangeCheck. The intellectual-property, disclaimer, liability, indemnification, governing-law, and dispute provisions survive.',\n },\n ],\n },\n changesToTerms,\n disputeResolution,\n miscellaneous,\n ],\n summary:\n 'summary: non-custodial service provided as-is. you are responsible for your wallet and private keys. disputes resolved via binding arbitration. commercial products have their own terms.',\n};\n\nconst privacy: DocSpec = {\n kind: 'privacy',\n eyebrow: 'privacy',\n title: 'Privacy policy',\n description:\n 'How OrangeCheck handles data and privacy across the non-custodial protocol family. Non-custodial by design, minimal collection, no account required.',\n metaTitle: 'Privacy Policy — OrangeCheck',\n metaDescription:\n 'How OrangeCheck handles data and privacy. Non-custodial by design, minimal data collection, no account required, privacy-preserving analytics only.',\n effective: '2025-09-30',\n updated: '2026-11-06',\n preamble: [\n {\n kind: 'callout',\n text: \"**What changed, 8 to 31 October 2026.** We corrected this policy where it did not say what is kept or who sees it. Newest first; the [changelog](https://github.com/orangecheck/oc-packages/blob/main/legal/CHANGELOG.md) lists every change.\",\n },\n {\n kind: 'bullets',\n items: [\n { k: \"31 October\", v: \"the owner consoles, analytics.ochk.io and vault.ochk.io's, show every email address masked, refuse an email as a search or action subject, and show a whole address only after a written reason is recorded.\" },\n { k: \"29 October\", v: \"an account also keeps its Google or GitHub id, the roster id that links accounts signed in from one browser, the site you signed up through, a coin that backs it (its address, outpoint and amount, and the message you signed), and OC Chat device vouches and revocations, which are also published to Nostr relays. relay.ochk.io keeps each record with a pseudonym of the sender's IP address, replaced each UTC day, and never the address itself. Our operators' first-sign-in email names only your did:oc and the kind of sign-in. The policy says what chat, cosign, btc and globe keep, who completes a deletion, and what stays.\" },\n { k: \"26 October\", v: \"a session row keeps no IP address, and the sign-in log keeps it for 90 days. relay.ochk.io is named, and our host's connection logs for it hold your IP address and connection times for 7 days. Claiming an OC Chat handle sends its fingerprint to three OpenTimestamps calendars and reads mempool.space, and each sees your IP address.\" },\n { k: \"8 and 9 October\", v: \"the email is stored, encrypted. Each session and the sign-in log keep the full user-agent. Our operators get an email when a new account first signs in.\" },\n ],\n },\n {\n kind: 'callout',\n text: 'This policy covers the **non-custodial** OrangeCheck family — [ochk.io](https://ochk.io), including its documentation at [ochk.io/docs](https://ochk.io/docs), the six verb sites, and [chat.ochk.io](https://chat.ochk.io), [cosign.ochk.io](https://cosign.ochk.io), [btc.ochk.io](https://btc.ochk.io) and [globe.ochk.io](https://globe.ochk.io). The commercial products ochk.app and vault.ochk.io publish their own privacy policies covering the additional data their products handle.',\n },\n ],\n sections: [\n {\n id: 'principles',\n heading: 'our principles',\n hint: 'non-custodial, minimal, transparent',\n blocks: [\n {\n kind: 'bullets',\n items: [\n {\n k: 'non-custodial',\n v: 'we never take custody of your Bitcoin or keys; cryptographic operations happen in your wallet or browser',\n },\n {\n k: 'minimal collection',\n v: 'only what is necessary to provide the Service; no user profiles, no cross-web tracking',\n },\n {\n k: 'optional account',\n v: 'most of the Service needs no sign-in; optional sign-in uses a Bitcoin signature, an email code, or Google/GitHub — never a password',\n },\n {\n k: 'transparency',\n v: 'plain-language policy; ask us anything at [[PRIVACY_CONTACT]]',\n },\n ],\n },\n ],\n },\n {\n id: 'what-we-dont-do',\n heading: \"what we don't do\",\n blocks: [\n {\n kind: 'bullets',\n items: [\n 'No custody of funds and no access to private keys',\n 'No account required for the core service',\n 'No selling or renting of personal information, ever',\n 'No targeted advertising and no cross-site tracking',\n 'No third-party analytics trackers — privacy-preserving analytics only',\n ],\n },\n ],\n },\n {\n id: 'information-we-collect',\n heading: 'information we collect',\n hint: 'scoped, minimal',\n blocks: [\n { kind: 'subhead', text: 'information you provide' },\n {\n kind: 'para',\n text: '**Bitcoin addresses and signatures** are processed client-side to generate a cryptographic proof; this data is public by design. **Identity bindings** you add are included in the signed message and are public. **Messages you send us** — through the contact form or by email — reach our inbox through our email provider (Resend) and are kept only as long as we need them to reply.',\n },\n { kind: 'subhead', text: 'if you sign in' },\n {\n kind: 'bullets',\n items: [\n {\n k: 'account',\n v: 'an opaque `did:oc` identifier, an optional display name and Nostr npub, and when the account was created and last signed in',\n },\n {\n k: 'how you sign in',\n v: 'a Bitcoin address you prove with a signature (stored as is — it is public on-chain anyway); or, for an email code, Google or GitHub, the verified email address — encrypted at rest, plus a one-way hash of it so we can find your account. For Google or GitHub we also store that provider\\'s id for your account, unencrypted, so a changed email still reaches the same account',\n },\n {\n k: 'passkeys',\n v: 'for each passkey you register: its public key, a label, the transports it reported, and when it was added and last used',\n },\n {\n k: 'each session',\n v: 'a hash of the session token, the full user-agent string of the device that opened it, and timestamps',\n },\n {\n k: 'sign-in log',\n v: 'each sign-in and each identity you link or remove, with the IP address and user-agent at the time — kept for security; the IP address is cleared after 90 days',\n },\n {\n k: 'accounts in one browser',\n v: 'sessions opened in the same browser share a roster id, so we can tell which of your accounts were signed in from it; and which of our sites you first signed up through',\n },\n {\n k: 'a coin backing your account',\n v: \"if you back your account with a coin: its address, outpoint and amount, the backing message you signed, and when we last found it unspent, or saw it released or spent. We read the coin from mempool.space. Earlier backings stay with your account. Sites you sign in to get only amount and age floors and a number that differs from site to site (all *.ochk.io sites share one), never the coin\",\n },\n {\n k: 'OC Chat devices',\n v: \"for each chat.ochk.io device we vouch for: its device and Nostr public keys, when we vouched, and the sign-in that asked; for a device you revoke, the signed revocation, which we also publish to Nostr relays\",\n },\n {\n k: 'btc.ochk.io alerts',\n v: 'the market thresholds you save on btc.ochk.io (up to 25), stored with your account',\n },\n {\n k: 'when you first sign in',\n v: 'OrangeCheck’s operators get an email, sent through our email provider (Resend), naming your `did:oc` and the kind of sign-in you used (a Bitcoin wallet, an email code, Google or GitHub). Notices sent up to and including 29 October 2026 (UTC) also named the identity itself: your Bitcoin address or your email address',\n },\n { k: 'never', v: 'a password, a private key, or a seed phrase' },\n ],\n },\n { kind: 'subhead', text: 'who at OrangeCheck can see it' },\n {\n kind: 'para',\n text: \"OrangeCheck's operators can see your account in owner-only consoles: analytics.ochk.io and, for a vault account, vault.ochk.io's. Their account lists show each email address masked: the first character of the part before the @ when that part has three or more characters, and none of it otherwise. Their account searches and actions refuse an email address: an account is found by email only through a lookup. Revealing one address, or looking up one account, asks for a written reason, which is recorded before your email address is shown. A lookup's record has its details about you cleared after 90 days; the reason stays.\",\n },\n { kind: 'subhead', text: 'automatically collected' },\n {\n kind: 'bullets',\n items: [\n { k: 'ip address', v: 'security, rate limiting, service delivery' },\n { k: 'browser/device', v: 'compatibility and UX optimization' },\n { k: 'pages visited', v: 'aggregate, to improve the Service' },\n ],\n },\n { kind: 'subhead', text: 'sent from your browser to others' },\n {\n kind: 'bullets',\n items: [\n {\n k: 'an OC Chat @handle claim',\n v: \"your browser sends the claim's fingerprint (a SHA-256 hash) to the OpenTimestamps calendars at alice.btc.calendar.opentimestamps.org, bob.btc.calendar.opentimestamps.org and finney.calendar.eternitywall.com, and reads your address's coins and block headers from mempool.space; each of these sees your IP address and when you asked. We send them nothing about you ourselves.\",\n },\n {\n k: 'relay.ochk.io',\n v: \"the Nostr relay we run (strfry on Fly.io, in Frankfurt). Your browser connects to it to read and publish signed records; our sites also publish the same records to public relays run by others (see the Terms). It keeps each record it accepts until the same key replaces it with a newer version or the record's own expiry passes: records are public, copied each day to a public archive on GitHub (where earlier versions stay), and otherwise deleted only after a lawful takedown request, which does not remove the copies elsewhere. Each record is stored with a pseudonym of the IP address it came from, made with a key that is kept only in memory and replaced each UTC day, so the relay can limit how much one source writes; your IP address itself is never stored, and the pseudonym is never served or archived. Our hosting provider (Fly.io) carries each connection to it and handles your IP address to do so, for its own short retention window; we keep no separate copy. Our host's connection logs for the relay can hold your IP address and connection times; they are kept for 7 days.\",\n },\n ],\n },\n { kind: 'subhead', text: 'cookies & analytics' },\n {\n kind: 'bullets',\n items: [\n {\n k: 'oc_session',\n v: 'your sign-in, set by ochk.io for every `*.ochk.io` site: HttpOnly; Secure; SameSite=None; Domain=.ochk.io; 30 days',\n },\n {\n k: 'oc_oauth_state',\n v: 'only during a Google or GitHub sign-in: HttpOnly; SameSite=Lax; 10 minutes; deleted when the sign-in completes',\n },\n {\n k: 'oc_theme · oc_skin · oc_motion · oc_logo',\n v: 'your light/dark, appearance, reduced-motion and logo choices (Domain=.ochk.io); not used to identify you. `oc_logo` is set only when you open a page with `?logo=` in its address, and is kept for a year; `?logo=classic` deletes it',\n },\n ],\n },\n {\n kind: 'para',\n text: 'A browser tab may also keep its own copy of a sign-in token in session storage, cleared when the tab closes. We use [Plausible Analytics](https://plausible.io/privacy) — cookie-free, no personal data, aggregate statistics only — alongside our own first-party, cookieless analytics (oc insights): no cookies, no cross-site identity, your IP address is hashed and immediately discarded (never stored), and Do-Not-Track / Global Privacy Control signals are honored. No advertising or tracking cookies.',\n },\n ],\n },\n {\n id: 'chat-cosign-btc-globe',\n heading: 'chat, cosign, btc and globe',\n hint: 'what each of these sites keeps',\n blocks: [\n { kind: 'subhead', text: 'chat.ochk.io' },\n {\n kind: 'bullets',\n items: [\n {\n k: 'messages',\n v: 'end-to-end encrypted. Our server holds a message only as ciphertext, under a per-conversation id that names neither person, until the recipient picks it up: for up to 14 days, or 365 days on the Personal plan. A delivered message is deleted 24 hours after the recipient confirms it. We cannot read message content',\n },\n {\n k: 'on your device',\n v: 'your messages, contacts and settings are kept in your browser. Lock this device with a passphrase to encrypt your device key and messages there',\n },\n {\n k: 'sending limits',\n v: 'a count of messages sent per hour, under a keyed id made from your account, dropped after a day. chat.ochk.io stores no IP address',\n },\n {\n k: 'the Personal plan',\n v: 'if you buy it: your account id, the plan, when you paid and until when, the amount and the invoice id. The invoice our payment processor (BTCPay) holds says what was sold, not who bought it',\n },\n {\n k: 'published to Nostr',\n v: 'your device records, public channel posts (which are not encrypted), and a directory listing if you choose to be listed are public and stay on the relays. Direct messages travel encrypted',\n },\n {\n k: 'sent from your browser',\n v: 'chain data from mempool.space and blockstream.info, the drand network for messages that open at a future block, the OpenTimestamps calendars named above for a handle claim, and the Nostr relays you use; each sees your IP address',\n },\n {\n k: 'analytics',\n v: 'none',\n },\n {\n k: 'deletion',\n v: 'deleting your account deletes chat.ochk.io\\'s other records of you; Personal plan payment records stay for accounting under a keyed id, not your account id. Messages waiting for pickup expire on their own, and what is on Nostr relays stays',\n },\n ],\n },\n { kind: 'subhead', text: 'cosign.ochk.io' },\n {\n kind: 'bullets',\n items: [\n {\n k: 'what you post',\n v: 'your profile, projects, updates, cosigns and vouches are public on cosign.ochk.io',\n },\n {\n k: 'messages',\n v: \"**not end-to-end encrypted.** They are stored on our servers, and OrangeCheck's operators can read them\",\n },\n {\n k: 'reports and notifications',\n v: 'a report you file keeps you as its reporter, the subject and your reason. Notifications are shown in the app only; a read one is deleted after 30 days and any after 90',\n },\n {\n k: 'payments between people',\n v: 'we record each Lightning payment for display (amount, time, status and the receiving Lightning address); the money goes directly between people and cosign never holds it',\n },\n {\n k: 'abuse limits',\n v: 'counts of writes per account, per IP address and per network, under keyed ids, dropped after 2 days; and your account\\'s counts for the last ten minutes, kept with your account. No IP address is stored',\n },\n {\n k: 'deletion',\n v: 'deleting your account deletes your profile, projects and the rest, except that your messages in conversations with other people, the reports you filed, and payment records stay, with your account taken off them',\n },\n ],\n },\n { kind: 'subhead', text: 'btc.ochk.io' },\n {\n kind: 'para',\n text: 'btc.ochk.io keeps only the alert thresholds you save, with your account, and deletes them when your account is deleted. Its planner and paper desk stay in your browser. Its market commentary is written each hour by an AI model provider (Anthropic) from market data and the web searches it runs; nothing about you is sent.',\n },\n { kind: 'subhead', text: 'globe.ochk.io' },\n {\n kind: 'para',\n text: 'globe.ochk.io stores nothing about you. Your browser fetches live network data directly from mempool.space, which sees your IP address.',\n },\n {\n kind: 'para',\n text: 'cosign.ochk.io, btc.ochk.io and globe.ochk.io use the cookie-free analytics described below.',\n },\n ],\n },\n {\n id: 'how-we-use',\n heading: 'how we use information',\n blocks: [\n {\n kind: 'bullets',\n items: [\n 'Generate and verify cryptographic proofs and serve verification pages',\n 'Detect and prevent abuse, spam, and denial-of-service attacks',\n 'Fix bugs, optimize performance, and improve the Service',\n 'Provide technical support',\n ],\n },\n ],\n },\n {\n id: 'retention',\n heading: 'data retention',\n hint: 'scheduled and on-write deletion · permanent public artifacts',\n blocks: [\n {\n kind: 'bullets',\n items: [\n {\n k: 'public artifacts',\n v: 'permanent and publicly shareable; data published to Nostr cannot be deleted by OrangeCheck',\n },\n {\n k: 'request logs',\n v: 'held by our hosting provider (Vercel) for its own short retention window; we keep no separate copy',\n },\n {\n k: 'relay.ochk.io connections',\n v: 'handled by our hosting provider (Fly.io) for its own short retention window; its connection logs for the relay can hold your IP address and connection times for 7 days, and we keep no separate copy',\n },\n {\n k: 'sessions',\n v: 'deleted when you sign out; a session that expires after 30 days is deleted the next time anyone signs in',\n },\n {\n k: 'IP addresses in the sign-in log',\n v: 'cleared after 90 days; the entries themselves stay until your account is deleted',\n },\n {\n k: 'email sign-in codes',\n v: 'the code itself is never stored and expires after 10 minutes; the record that lets it be used once is deleted when it is spent, or with the next code anyone asks for after it expires; per-address and per-network send counts, kept as keyed hashes, are dropped after a day',\n },\n {\n k: 'account, sign-in identities, passkeys, sign-in log, coin backings, OC Chat device records and btc.ochk.io alerts',\n v: 'deleted when your account-deletion request completes. File one in [your account on ochk.app](https://ochk.app/me/account), or ask at [[PRIVACY_CONTACT]]. A person completes the request, and we aim to do that within 48 hours. Nothing is erased while a blocker remains: sats you are owed or payouts still pending on ochk.app, live guardian-operator duties, developer projects or an OC Connect app you own, or a vault team you own that still has other members. What stays: the email our operators received when you first signed in, which names your `did:oc` and the kind of sign-in you used, and, if it was sent up to and including 29 October 2026 (UTC), the identity itself; a revocation already published to Nostr relays, and anything else you published there or anchored to Bitcoin; a marker under a hash of your account id that refuses your old sessions until they would have expired, about 30 days; and, if a site made an account for you, a hashed record of it, so that site is told the account was deleted instead of making a new one',\n },\n {\n k: 'support emails',\n v: 'retained as long as necessary; deleted on request',\n },\n ],\n },\n ],\n },\n {\n id: 'data-security',\n heading: 'data security',\n hint: 'reasonable safeguards · no warranty',\n blocks: [\n {\n kind: 'bullets',\n items: [\n 'HTTPS encryption for all data in transit',\n 'Secure hosting with regular security updates',\n 'Rate limiting and abuse monitoring',\n ],\n },\n {\n kind: 'para',\n text: 'No method of transmission or storage is 100% secure. We use reasonable measures but **do not warrant the security of your data and are not liable for unauthorized access, loss, or theft** — see the [Terms of Service](/terms). If we become aware of a breach of personal data we hold, we will notify affected users and any competent supervisory authority as required by applicable law, including the 72-hour window under Article 33 of the UK & EU GDPR.',\n },\n ],\n },\n privacyRights,\n privacyTransfers,\n privacyRegional,\n privacyChildren,\n privacyChanges,\n ],\n summary:\n 'summary: minimal data, privacy-preserving analytics, never custody of funds, user control of information.',\n};\n\nexport const protocolProfile = { terms, privacy };\n","/**\n * @orangecheck/legal — `me` profile.\n *\n * ochk.app (its API at me.ochk.io): a consumer Bitcoin-backed identity that will pay users in sats.\n * orangecheck holds what users earn during bring-up, no KYC. This is\n * the only profile where value flows TO the user, so the money, custody, and\n * regulated-activity sections are rendered as counsel-review stubs per the\n * \"structure + stubs\" directive — the surrounding contract is complete.\n */\n\nimport type { DocSpec } from '../types';\nimport {\n acceptableUse,\n changesToTerms,\n disputeResolution,\n eligibility,\n indemnification,\n intellectualProperty,\n limitationOfLiability,\n miscellaneous,\n privacyChanges,\n privacyChildren,\n privacyRegional,\n privacyRights,\n privacyTransfers,\n} from './clauses';\n\nconst COMMERCIAL_NOTE =\n '**ochk.app is a commercial product operated by orangecheck.** It is distinct from the non-custodial orangecheck protocol sites; the Terms at [ochk.io/terms](https://ochk.io/terms) do not govern ochk.app. These Terms do. Its API is served at me.ochk.io, from the same accounts and records: these Terms govern the Service at either address, and “ochk.app” in them means both.';\n\nconst terms: DocSpec = {\n kind: 'terms',\n eyebrow: 'terms',\n title: 'Terms of service',\n description:\n 'The terms governing your use of ochk.app and its API at me.ochk.io — a Bitcoin-backed identity that will pay you in sats. orangecheck holds what you earn during bring-up and will pay it to a Lightning wallet you choose. No KYC.',\n metaTitle: 'Terms of Service — ochk.app',\n metaDescription:\n 'Terms of service for ochk.app: a Bitcoin-backed identity that will pay users in sats. orangecheck holds what users earn during bring-up and will pay it to a Lightning wallet they choose. No KYC.',\n effective: '2026-05-15',\n updated: '2026-11-03',\n preamble: [\n {\n kind: 'callout',\n emphatic: true,\n text: 'By accessing or using ochk.app or its API at me.ochk.io, you agree to be bound by these Terms. If you do not agree, do not use the Service. These Terms contain a binding-arbitration, class-action, and jury-trial waiver and important limitations on liability.',\n },\n { kind: 'callout', text: COMMERCIAL_NOTE },\n ],\n sections: [\n {\n id: 'overview',\n heading: 'overview',\n hint: 'what ochk.app is',\n blocks: [\n {\n kind: 'para',\n text: 'ochk.app is an identity you use to sign in across participating sites (\"integrators\"). When an integrator records a billable event for an action you authorize, a share of the fee will flow back to you in sats. Your identity works across the orangecheck family. Every paid event on your account has a receipt, signed by us, and anyone holding one and the public key we publish can check its signature offline, without asking us; a receipt sent to Bitcoin for a timestamp also checks against Bitcoin once it is anchored. If you back your account, it is tied to bitcoin you hold, and that bitcoin stays in your wallet.',\n },\n {\n kind: 'para',\n text: 'ochk.app is **not a bank, exchange, broker, or wallet provider.** It is an identity and reputation service with an attached cashback mechanism. **During bring-up orangecheck operates every role in that mechanism, including custody of the balance it will pay you.** That is a stage, not the design — see the custody section below for what holds today.',\n },\n ],\n },\n {\n id: 'accounts',\n heading: 'accounts & identity',\n hint: 'four ways to sign in',\n blocks: [\n {\n kind: 'para',\n text: 'You may create an identity four ways: with **email** (a one-time code), **Google**, **GitHub**, or **a Bitcoin wallet** (you sign with BIP-322 — full self-custody of your signing key). With email, Google or GitHub you hold no key of your own, so orangecheck holds your signing key. However you sign in, during bring-up orangecheck holds the cashback you accrue; see custody below. Each way produces a stable, opaque `did:oc` identifier. No password is ever stored.',\n },\n {\n kind: 'para',\n text: 'You are responsible for the security of the wallet, device, email account, or recovery mnemonic associated with your identity. Anyone with your keys or recovery factor can act as you. orangecheck cannot recover an account, reverse a sign-in, or restore a lost key or mnemonic.',\n },\n ],\n },\n eligibility,\n {\n id: 'earning',\n heading: 'earning sats',\n hint: 'cashback on billable events',\n blocks: [\n {\n kind: 'stub',\n text: 'The economics of earning sats on ochk.app — how billable events generate cashback, the fee split between you, the integrating site, federation operators, and orangecheck, the timing of credits, and the conditions under which earnings may be withheld, delayed, clawed back, or reversed (including for suspected abuse or wash-trading) — are being finalized for publication before general availability. Until then, earning behavior is governed by the published abuse limits in the section below and the descriptions on [how it works](/how) and [the earn page](/earn). This section will be completed following review by counsel.',\n },\n ],\n },\n {\n id: 'custody',\n heading: 'custody & payouts',\n hint: 'orangecheck-held during bring-up · paid out to a wallet you choose',\n blocks: [\n {\n kind: 'para',\n text: 'Custody depends on how you sign in, and the honest answer differs today from the design.\\n\\n**If you sign in with BIP-322, you hold your own keys.** They never leave your device. orangecheck verifies signatures and relays envelopes; it cannot move the funds in your wallet. That is true now and does not change.\\n\\n**What you earn is a different matter.** Cashback you accrue is a balance orangecheck owes you until it is paid out to the destination you bind. During bring-up orangecheck holds those sats for every user, however they sign in.\\n\\n**If you sign in with email, Google or GitHub, orangecheck currently holds the key that will pay you.** The design is a Fedimint federation: independent guardians hold the bitcoin under a threshold scheme, and orangecheck’s executor holds your claim on it, as ecash, until it is paid out to a Lightning wallet you choose. That federation does not exist yet: there are no independent guardians today, and during bring-up the signing key for the paying rail is operated by orangecheck. So during this period orangecheck is a custodian, of the signing keys of people who sign in with email, Google or GitHub and of every user’s accrued cashback, and the party that will move the money once payouts open.\\n\\nWe state that plainly rather than describing the destination as though it were the present. **The live status of the paying rail — which posture is in force, what bounds it, and what has actually settled — is published on [the custody page](/custody) and machine-readable at `/api/federations`.** Those surfaces are computed from the system rather than written by hand, so they cannot drift from this document the way a fixed sentence would.',\n },\n {\n kind: 'stub',\n text: 'The complete custody disclosure — the federation threshold model and its failure modes, what each guardian can and cannot do, the durability of your balance if a federation or orangecheck ceases operations, and the allocation of risk between you, the federation, and orangecheck — is being finalized for publication before general availability. The honest current-state engineering account is published on the [security page](/security). This section will be completed following review by counsel.',\n },\n ],\n },\n {\n id: 'fees-payouts',\n heading: 'fees, payouts & taxes',\n blocks: [\n {\n kind: 'stub',\n text: 'Platform fees, payout mechanics and minimums, supported payout rails, currency-conversion handling, and the allocation of tax-reporting and tax-payment responsibility for sats you receive are being finalized for publication before general availability. You are advised that cashback received may be taxable income in your jurisdiction and that you are responsible for your own tax compliance. This section will be completed following review by counsel.',\n },\n { kind: 'subhead', text: 'when a payout is held' },\n {\n kind: 'para',\n text: 'We hold a payout, and do not send it, when an earlier attempt to send it may already have gone through; while payouts are paused by a halt, a federation migration or a payout ceiling, or are not yet open to you; while the node that pays cannot cover everything owed, or its fee limit is unknown; for 24 hours after you change your payout destination; when your payout destination is no longer valid; or when our records disagree about what is owed. A paused or limited payout goes out on its own once the pause, ceiling, shortfall or 24 hours have passed; setting a new destination clears a destination hold; and a disagreement clears when we correct the record. A payout whose earlier attempt may have gone through is never retried on its own: we check the payment node, then either mark it paid with the payment\\'s proof or release it to be sent again. A hold does not cancel what you are owed.',\n },\n ],\n },\n {\n id: 'no-kyc',\n heading: 'no kyc, no pii',\n blocks: [\n {\n kind: 'para',\n text: 'ochk.app **does not perform Know-Your-Customer checks** and does not require your legal name, government ID, or physical address to sign in, use apps or get paid. Sybil resistance is achieved through protocol composition — BIP-322 sat-bond attestation, paid-action history, and integrator-defined gates — not identity verification. You must not use ochk.app to evade a KYC, AML, or sanctions obligation that applies to you elsewhere.',\n },\n ],\n },\n {\n id: 'abuse-limits',\n heading: 'abuse, sybil resistance & rate limits',\n blocks: [\n {\n kind: 'para',\n text: 'ochk.app publishes its abuse limits openly so legitimate users can see they are well below them. The canonical, current values are on the [security page](/security). Activity that exceeds a review threshold may be held for human review; activity assessed as sybil farming, wash-trading, or collusion between an integrator and a user may have earnings withheld or reversed and the identity suspended.',\n },\n {\n kind: 'bullets',\n items: [\n 'Do not operate multiple identities to multiply new-account bonuses',\n 'Do not collude with an integrating site to manufacture billable events',\n 'Do not script or automate actions to inflate earnings',\n 'Do not misrepresent a real user action as authorized when it was not',\n ],\n },\n ],\n },\n acceptableUse,\n {\n id: 'integrators',\n heading: 'integrators & relying parties',\n blocks: [\n {\n kind: 'para',\n text: 'Sites that integrate ochk.app through its API at me.ochk.io get their own subject id for the events they report, and your Bitcoin address, email or attestation tier only if you grant that scope. Signing in gives every site the same orangecheck id (did:oc), so sites that compare ids can tell it is you. Integrators independently decide whether and how to trust your identity, including whether to admit, gate, or reject you. orangecheck is not a party to, and accepts no liability for, an integrator’s decisions or an integrator’s own terms, pricing, or conduct.',\n },\n ],\n },\n intellectualProperty,\n {\n id: 'disclaimers',\n heading: 'disclaimers & warranties',\n hint: 'as-is · regulatory status',\n blocks: [\n {\n kind: 'callout',\n emphatic: true,\n text: 'THE SERVICE IS PROVIDED \"AS IS\" AND \"AS AVAILABLE\", WITH ALL FAULTS AND WITHOUT WARRANTY OF ANY KIND. TO THE MAXIMUM EXTENT PERMITTED BY LAW, ORANGECHECK DISCLAIMS ALL WARRANTIES, EXPRESS, IMPLIED, AND STATUTORY — INCLUDING MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE, NON-INFRINGEMENT, AND ACCURACY.',\n },\n {\n kind: 'para',\n text: 'Nothing ochk.app provides is financial, investment, legal, or tax advice. ochk.app does not guarantee any level of earnings; cashback depends on integrator activity outside orangecheck’s control.',\n },\n { kind: 'subhead', text: 'regulatory status' },\n {\n kind: 'stub',\n text: 'ochk.app is designed so that independent Fedimint federations hold the bitcoin behind the cashback, while orangecheck’s executor holds each person’s claim on it and pays it out. **Those federations do not exist yet. During bring-up orangecheck itself custodies the cashback every user earns, and will be the one that transmits it**, because it is operating every role in the system in order to prove it works before third parties take any of them. Self-custody (BIP-322) users keep their own keys, which orangecheck never holds; the cashback they accrue is held by orangecheck until it is paid out, as it is for every user. The full regulatory analysis of both the bring-up posture and the designed end state — including orangecheck’s position under the U.S. Bank Secrecy Act money-transmission rules, the FATF Recommendations, the EU MiCA Regulation, and applicable U.S. state money-transmitter regimes, and the corresponding licensing posture — is being prepared and will be published before general availability. This section will be completed following review by counsel.',\n },\n ],\n },\n limitationOfLiability,\n indemnification,\n {\n id: 'termination',\n heading: 'termination',\n blocks: [\n {\n kind: 'para',\n text: '**Your right:** stop using ochk.app at any time; you may delete your identity in [your settings](/me/account#delete). **Our right:** suspend or terminate access with or without cause, including for abuse or legal risk. Deleting your identity does not settle a balance orangecheck owes you. If your balance is above zero, bind a payout destination and instruct a cash-out before you delete, or contact us. Hashes anchored to Bitcoin and commitments published to Nostr are immutable and cannot be deleted by orangecheck; neither names you. The disclaimer, liability, indemnification, governing-law, and dispute provisions survive.',\n },\n ],\n },\n changesToTerms,\n disputeResolution,\n miscellaneous,\n ],\n summary:\n 'summary: an identity that will pay you in sats. if you sign in with your own bitcoin wallet, you keep your keys; if you sign in with email, google or github, orangecheck holds the key that will pay you. either way, during bring-up orangecheck holds what you have earned until it is paid out. money, custody, fee, and regulatory terms are being finalized — see the marked sections.',\n};\n\nconst privacy: DocSpec = {\n kind: 'privacy',\n eyebrow: 'privacy',\n title: 'Privacy policy',\n description:\n 'How ochk.app and its API at me.ochk.io handle your data: no KYC, no PII required, and a documented, falsifiable account of every record orangecheck stores.',\n metaTitle: 'Privacy Policy — ochk.app',\n metaDescription:\n 'ochk.app privacy policy. No KYC, no PII required, and a full account of what orangecheck stores.',\n effective: '2026-05-15',\n updated: '2026-11-06',\n preamble: [\n {\n kind: 'callout',\n text: \"**What changed, 8 to 31 October 2026.** We corrected this policy where it did not say what is kept or who sees it. Newest first; the [changelog](https://github.com/orangecheck/oc-packages/blob/main/legal/CHANGELOG.md) lists every change.\",\n },\n {\n kind: 'bullets',\n items: [\n { k: \"29 October\", v: \"the contact form sends your email address, an optional name, the topic and your message to our inbox through our email provider (Resend).\" },\n { k: \"27 and 28 October\", v: \"a guardian application holds the questionnaire's answers, and the charter publishes its handle, name, jurisdiction, contact channel and fingerprint. The policy says which records a deletion keeps, and that cached copies expire within a day.\" },\n { k: \"26 October\", v: \"a session record keeps no IP address, and the sign-in log keeps it for 90 days.\" },\n { k: \"25 October\", v: \"me.ochk.io records which sites you sign in to or share data with, and when. No site sees that record.\" },\n { k: \"24 October\", v: \"signing in gives every site the same did:oc.\" },\n { k: \"23 October\", v: \"an account a site makes for you through orangecheck Connect keeps a hash of the site's id for you, a keyed hash of your email if the site sent one, when it was made, whether you agreed to earn, and what it earned.\" },\n { k: \"19 October\", v: \"ochk.app is the Service, and me.ochk.io is its API.\" },\n { k: \"15 October\", v: \"ochk.app's own cookies are listed: __Host-oc_session, and __Host-oc_oauth for at most ten minutes during a Google or GitHub sign-in.\" },\n { k: \"8 October\", v: \"a session record keeps your user-agent, and an email is personal data.\" },\n ],\n },\n {\n kind: 'callout',\n text: 'This policy covers the Service at both of its addresses, ochk.app and its API at me.ochk.io: one account, one store of records, one operator; “ochk.app” below means both. Its product is identity that will pay you; its privacy posture is what makes it distinct from Sign in with Google. For a side-by-side comparison you can falsify, see [the privacy comparison](/trust#privacy).',\n },\n ],\n sections: [\n {\n id: 'at-a-glance',\n heading: 'at a glance',\n hint: 'no kyc · no pii · what sites get',\n blocks: [\n {\n kind: 'bullets',\n items: [\n {\n k: 'no kyc',\n v: 'ochk.app never collects your legal name, government ID, or physical address from people who sign in, use apps or get paid',\n },\n {\n k: 'little pii at signup',\n v: 'a Bitcoin signature needs no personal data; an email code, Google or GitHub sign-in stores your email address, encrypted',\n },\n {\n k: 'what sites get',\n v: 'each site gets its own subject id for events, but signing in gives every site the same orangecheck id (did:oc), so sites that compare ids can tell it is you',\n },\n {\n k: 'no advertising',\n v: 'no third-party ad identity, no behavioural ad targeting, no data sale — ever',\n },\n {\n k: 'deletable',\n v: 'you can delete your account in your settings: your sign-in closes and your data is erased, except the few records named under identity & account deletion',\n },\n ],\n },\n ],\n },\n {\n id: 'what-oc-stores',\n heading: 'what orangecheck stores',\n hint: 'metadata only · none enables fund movement',\n blocks: [\n {\n kind: 'para',\n text: 'The list below is what an auditor would find in orangecheck’s production infrastructure. Every item is metadata; none of it lets orangecheck sign on your behalf.',\n },\n {\n kind: 'bullets',\n items: [\n {\n k: 'account row',\n v: 'opaque did_oc, optional display name and Nostr npub, timestamps. The underlying email is encrypted at rest; a BIP-322 address is stored plaintext (it is already public on-chain). No password hash, no private key, no mnemonic.',\n },\n {\n k: 'session record',\n v: 'a hash of the session token, the account id, the user-agent of the device that opened it, and timestamps. The token itself lives only in your browser.',\n },\n {\n k: 'sign-in log',\n v: 'each sign-in and each identity you link or remove, with the IP address and user-agent at the time, kept for security; the IP address is cleared after 90 days.',\n },\n {\n k: 'event envelopes',\n v: 'per billable event: a content-addressed, signed record of what was authorized, by whom, and the fee breakdown. Used to route cashback.',\n },\n {\n k: 'custody-state envelopes',\n v: 'a record of each change in how your account is custodied, kept on your own identity timeline. None is made while the system is in testing.',\n },\n {\n k: 'site sign-ins',\n v: 'which live sites you signed in to or shared data with through orangecheck, and when. A site can name you as the person who earned for an event only once this record exists. No site sees it, and it is erased with your account or with that site\\'s project.',\n },\n {\n k: 'guardian applications',\n v: 'an application to run a guardian, made through ochk.app or by email to apply@ochk.io, holds your answers to the operator questionnaire, which asks, among other things, for a public handle, the name of the person or organisation that will run the guardian, its jurisdiction, a public contact channel, a key fingerprint and two references. Through ochk.app it can also hold an optional handle and email address that only the reviewer sees, for the decision. The questionnaire’s handle, name, jurisdiction, contact channel and fingerprint are published in the federation charter, because guardians are named trust anchors. Nothing is checked against an ID, and nothing else is published.',\n },\n {\n k: 'messages you send us',\n v: 'the contact form at ochk.app/contact sends your email address, an optional name, the topic you pick and your message to our inbox through our email provider (Resend). They are kept only as long as we need them to reply',\n },\n {\n k: 'public anchors',\n v: 'an OpenTimestamps proof over each envelope’s hash, and a salted commitment to each envelope on Nostr. Public by design, and neither names you, the site or the amount. The envelope itself is served only to whoever holds its id. Drop manifests, which name no one, are published in full.',\n },\n ],\n },\n ],\n },\n {\n id: 'scoped-identity',\n heading: 'what sites get, and scopes',\n blocks: [\n {\n kind: 'para',\n text: 'Each site gets its own subject id for events: a **scoped subject**, derived from your account and that site’s project key, so the site recognizes you when you return. But signing in gives every site the same orangecheck id (did:oc), so sites that compare ids can tell it is you. An integrator only ever receives your master Bitcoin address, email, or attestation tier if you **explicitly grant that scope** for that site — each scope is opt-in, per-site, and revocable at any time from your account.',\n },\n {\n kind: 'para',\n text: 'Integrators never receive your event history with other sites, your wallet balance, your site sign-ins, or any cross-integrator data, regardless of scopes granted.',\n },\n ],\n },\n {\n id: 'cross-site-graph',\n heading: 'the cross-site events graph',\n hint: 'honest current state',\n blocks: [\n {\n kind: 'para',\n text: 'orangecheck’s billing engine necessarily knows which user earned which cashback across integrating sites — that join is how the right wallet is credited. Today that linkage exists in plain storage on me.ochk.io infrastructure; orangecheck commits, as a **policy** matter enforced by access controls and audit logging, not to build cross-site behavioural profiles. A per-integrator blinded-identifier design that removes the linkage architecturally is active research and not yet shipped. We disclose this honestly rather than overclaim.',\n },\n ],\n },\n {\n id: 'cookies',\n heading: 'cookies',\n blocks: [\n {\n kind: 'para',\n text: 'On ochk.app, up to three cookies of its own, set for ochk.app alone. `__Host-oc_session` — a sign-in token bound to ochk.app (HttpOnly, Secure, SameSite=Lax); it cannot sign you in anywhere else. `__Host-oc_oauth` — kept for at most ten minutes while you sign in with Google or GitHub, then deleted. `oc_logo` — which of our two logos you chose, set only when you open a page with `?logo=` in its address and kept for a year; `?logo=classic` deletes it. Your light/dark choice stays in your browser’s local storage, not a cookie. Page analytics use orangecheck’s own counter at insights.ochk.io: no cookie; a visit is counted by a hash salted daily, the salt is deleted after 48 hours, and your IP address and browser string are never stored.',\n },\n {\n kind: 'para',\n text: 'On me.ochk.io, five cookies. `oc_session` — the Ed25519-signed session token issued by ochk.io (HttpOnly, Secure, SameSite=None, Domain=.ochk.io). `oc_theme`, `oc_skin`, `oc_motion` and `oc_logo` — your dark/light, appearance, reduced-motion and logo preferences (Domain=.ochk.io), not auth-bearing. No tracking cookies, no advertising IDs, no third-party pixels. Page analytics use [Plausible](https://plausible.io/privacy) — cookie-free, no PII, aggregate only.',\n },\n ],\n },\n {\n id: 'how-we-use',\n heading: 'how we use information',\n blocks: [\n {\n kind: 'bullets',\n items: [\n 'Route cashback to the correct identity and wallet',\n 'Detect and prevent sybil farming, wash-trading, and abuse',\n 'Operate sign-in and verification across the orangecheck family',\n 'Fix bugs, improve the Service, and respond to support requests',\n ],\n },\n ],\n },\n {\n id: 'retention',\n heading: 'data retention',\n blocks: [\n {\n kind: 'bullets',\n items: [\n {\n k: 'event & rebind envelopes',\n v: 'retained as the canonical earnings and custody-state record; their hashes on Bitcoin and commitments on Nostr are immutable',\n },\n {\n k: 'request logs',\n v: 'held by our hosting provider (Vercel) for its own short retention window; we keep no separate copy',\n },\n {\n k: 'session records',\n v: 'retained until the session is revoked or expires',\n },\n {\n k: 'IP addresses in the sign-in log',\n v: 'cleared after 90 days; the entries themselves stay until your account is deleted',\n },\n {\n k: 'account row',\n v: 'deleted, with your sign-in identities, passkeys, sessions and sign-in log, when your account-deletion request completes; anchored and published data cannot be deleted by anyone',\n },\n ],\n },\n ],\n },\n {\n id: 'data-security',\n heading: 'data security',\n blocks: [\n {\n kind: 'para',\n text: 'HTTPS in transit; emails encrypted at rest; access to production data is allowlisted and audit-logged. No method of storage is perfectly secure — we use reasonable measures but do not warrant security; see the [Terms of Service](/terms). If we become aware of a breach of personal data we hold, we will notify affected users and any competent supervisory authority as required by applicable law.',\n },\n ],\n },\n privacyRights,\n {\n id: 'deletion',\n heading: 'identity & account deletion',\n blocks: [\n {\n kind: 'para',\n text: 'In [your settings](/me/account#delete) you can delete your account. A person completes the request, and we aim to do that within 48 hours: an alert tells us when one has waited a day. Completing it closes your sign-in, so signing in again starts a new account, and erases your data on ochk.io, me.ochk.io, vault, chat and cosign, except a few records. Payment records keep their amounts and times for accounting, and our audit log and your deletion request stay, without the reason you gave. We keep a record that your account was deleted, out of public view, so sessions you already had stop working and the deletion can be shown. Each keeps your account only as a keyed id, or not at all, so the record by itself doesn\\'t say whose account it was. On cosign, your messages in conversations with other people and the reports you filed stay, with your account taken off them. Backups roll off within 30 days, and copies cached by our CDN expire within a day. Deleting does not pay out sats orangecheck holds for you: settle a non-zero balance first. If you run a guardian, you can delete only once your operator key holds no seat or hosted guardian, has finished any exit, created no federation that still exists, and is owed nothing. Charter signatures, incidents and amendment proposals the key signed stay public under the key, with what you wrote in them; exit records and machine reports stay visible to that federation\\'s guardians and to us. Hashes anchored to Bitcoin and records published to Nostr cannot be deleted by anyone. me.ochk.io\\'s own anchors name no one, but attestations, polls, pledges, stamps and a chat listing you published carry your Bitcoin address.',\n },\n ],\n },\n {\n id: 'site-made-accounts',\n heading: 'an account a site made for you',\n blocks: [\n {\n kind: 'para',\n text: 'A site that signs you in its own way can use orangecheck Connect to make an orangecheck account for you. For that account orangecheck keeps a hash of the id the site gave you, never the id; a keyed hash of your email address if the site sent one, never the address; when the account was made; whether the site said you agreed to earn with it; and what it earned, if the site pays. It keeps no sign-in times, because the account has no sign-in of its own. Until you agree, through the site or by claiming it, the account is for sign-in only and earns nothing.',\n },\n {\n kind: 'para',\n text: 'You can claim it on ochk.app with a link the site gives you, or with an email address the site verified and you hold. It then becomes part of your own account, and deleting your account deletes it. The site can delete it too, for example when you close your account with that site, unless it holds earnings: those stay yours until you claim them. After a deletion orangecheck keeps only a hash of the id the site gave you, with the site\\'s app id, so the site cannot quietly make the account again; it can only when you agree again.',\n },\n ],\n },\n privacyTransfers,\n privacyRegional,\n privacyChildren,\n privacyChanges,\n ],\n summary:\n 'summary: no kyc, no pii required, and a documented account of every record orangecheck stores.',\n};\n\nexport const meProfile = { terms, privacy };\n","/**\n * @orangecheck/legal — `vault` profile.\n *\n * vault.ochk.io: an end-to-end-encrypted secrets vault sold as paid SaaS.\n * Client-side AES-256-GCM; OrangeCheck stores opaque ciphertext only and\n * cannot read vault contents. Payment is inbound-only Bitcoin ON-CHAIN — no\n * fund custody — so the stubs cover pricing and refund\n * durability rather than money movement.\n */\n\nimport type { DocSpec } from '../types';\nimport {\n acceptableUse,\n changesToTerms,\n disputeResolution,\n eligibility,\n indemnification,\n intellectualProperty,\n limitationOfLiability,\n miscellaneous,\n privacyChanges,\n privacyChildren,\n privacyRegional,\n privacyRights,\n privacyTransfers,\n} from './clauses';\n\nconst COMMERCIAL_NOTE =\n '**OC Vault is a commercial product operated by OrangeCheck**, available at vault.ochk.io. It is distinct from the non-custodial OrangeCheck protocol sites; the Terms at [ochk.io/terms](https://ochk.io/terms) do not govern OC Vault. These Terms do.';\n\nconst terms: DocSpec = {\n kind: 'terms',\n eyebrow: 'terms',\n title: 'Terms of service',\n description:\n 'The terms governing your use of OC Vault — an end-to-end-encrypted secrets vault. Client-side encryption; OrangeCheck stores ciphertext only and cannot read your data.',\n metaTitle: 'Terms of Service — OC Vault',\n metaDescription:\n 'Terms of service for OC Vault (vault.ochk.io): an end-to-end-encrypted secrets vault. Client-side encryption, on-chain Bitcoin payment, no fund custody.',\n effective: '2026-05-15',\n updated: '2026-10-08',\n preamble: [\n {\n kind: 'callout',\n emphatic: true,\n text: 'By accessing or using OC Vault, you agree to be bound by these Terms. If you do not agree, do not use the Service. These Terms contain a binding-arbitration, class-action, and jury-trial waiver and important limitations on liability.',\n },\n { kind: 'callout', text: COMMERCIAL_NOTE },\n ],\n sections: [\n {\n id: 'overview',\n heading: 'overview',\n hint: 'what oc vault is',\n blocks: [\n {\n kind: 'para',\n text: 'OC Vault stores passwords, one-time-password seeds, API keys, notes, and small files. Every item is **encrypted client-side** in your browser under a vault key that only your passphrase or recovery code unlocks; we store that key only in sealed form. When you sync to the cloud, OrangeCheck stores an opaque encrypted blob — **OrangeCheck cannot read your vault contents, item names, or item types.**',\n },\n {\n kind: 'para',\n text: 'OC Vault is built on the OC Lock protocol. It is **not** a custodial service for funds and does not take possession of any cryptocurrency.',\n },\n ],\n },\n {\n id: 'accounts',\n heading: 'accounts',\n blocks: [\n {\n kind: 'para',\n text: 'You sign in with your OrangeCheck account: a Bitcoin address you prove via BIP-322, an email one-time code, or Google/GitHub. Your entries are encrypted under a vault key that your vault passphrase (or recovery code) unlocks; signing in does not decrypt anything. You are responsible for keeping that passphrase and recovery code safe.',\n },\n ],\n },\n {\n id: 'plans-billing',\n heading: 'plans, payment & billing',\n hint: 'on-chain · inbound only',\n blocks: [\n {\n kind: 'para',\n text: 'OC Vault offers a free tier and paid tiers purchased with Bitcoin **on-chain**. OrangeCheck **receives** payment and never sends funds to users; OC Vault holds no custodial balance for you. Every paid tier is a **prepaid period** that expires and does not auto-renew — there is no perpetual or \"lifetime\" tier, and none is sold. The current tiers, their prices and their period lengths are published at [vault.ochk.io/pricing](https://vault.ochk.io/pricing), which is the authoritative price list; prices are not restated here so that this document cannot contradict it. All paid tiers are subject to the **service limits** below.',\n },\n {\n kind: 'stub',\n text: 'The full commercial terms for paid tiers — billing cycle and renewal behavior, the refund and cancellation policy, proration, and the consequences of non-renewal for stored data — are being finalized for publication. This section will be completed following review by counsel.',\n },\n ],\n },\n {\n id: 'service-limits',\n heading: 'service limits',\n hint: 'storage · per-entry size · bandwidth',\n blocks: [\n {\n kind: 'para',\n text: 'Every tier is subject to the following service limits. They are deliberately set well above the needs of a personal password vault but bound the storage and bandwidth a single account may consume on the shared infrastructure. The limits are **enforced in code**; exceeding them returns an HTTP 507 (storage) or 429 (rate) response.',\n },\n { kind: 'subhead', text: 'storage' },\n {\n kind: 'bullets',\n items: [\n {\n k: 'entries per personal vault',\n v: 'up to **5,000** entries (envelope ids). A brand-new entry counts against this ceiling; replacing an existing entry does not.',\n },\n {\n k: 'entries per team vault',\n v: 'up to **5,000** entries, shared across team members.',\n },\n {\n k: 'per-entry size',\n v: 'each entry\\'s ciphertext is capped at **1.25 MB** (≈ 1 MB of plaintext payload — sufficient for any password, TOTP seed, API key, note, or small file).',\n },\n {\n k: 'total ciphertext per personal vault',\n v: 'up to **≈ 1 GiB** (1,073,741,824 bytes) of ciphertext per identity. Typical real-world vaults are well under 50 MB.',\n },\n {\n k: 'total ciphertext per team vault',\n v: 'up to **≈ 2 GiB** of ciphertext per team.',\n },\n ],\n },\n { kind: 'subhead', text: 'bandwidth & request rate' },\n {\n kind: 'para',\n text: 'The API is rate-limited per IP address as a fair-use measure. Current ceilings: up to **1,000 blob reads / writes per minute**, **120 manifest listings per minute**, and **30 escrow-key writes per minute**. Exceeding a limit returns HTTP 429; legitimate clients retry with backoff. There is no per-month bandwidth cap; the delta-sync protocol makes a steady-state sync fetch only the change manifest, so day-to-day bandwidth use is negligible.',\n },\n { kind: 'subhead', text: 'adjustments' },\n {\n kind: 'para',\n text: 'OrangeCheck may adjust these limits with reasonable advance notice — for example, to defend the service against abuse, to keep pace with infrastructure costs, or to lift a ceiling that is constraining legitimate use. We will not lower a limit below a number that would reduce **existing** data already stored under a paid tier without offering an export and a reasonable migration window.',\n },\n ],\n },\n {\n id: 'continuity',\n heading: 'continuity & export',\n blocks: [\n {\n kind: 'para',\n text: 'The encrypted backup (settings → encrypted backup) is free on every tier. It writes one file holding your vault key and every entry, sealed under a passphrase you choose (scrypt, then AES-256-GCM), so it restores on any device and stays decryptable with standard, open primitives if OC Vault is discontinued. The plain export holds entries without the key and is readable only where your vault key already is.',\n },\n {\n kind: 'stub',\n text: 'The wind-down notice period and the continuity commitments OrangeCheck offers if the Service is discontinued are being finalized for publication. This section will be completed following review by counsel.',\n },\n ],\n },\n {\n id: 'your-data',\n heading: 'your data & encryption',\n hint: 'you hold the only key',\n blocks: [\n {\n kind: 'callout',\n emphatic: true,\n text: 'ORANGECHECK CANNOT READ, RECOVER, OR RESET YOUR VAULT. IF YOU LOSE YOUR VAULT KEY AND ALL RECOVERY FACTORS, YOUR ENCRYPTED DATA IS PERMANENTLY UNRECOVERABLE — BY YOU AND BY US. THIS IS THE INTENDED SECURITY PROPERTY, NOT A DEFECT.',\n },\n {\n kind: 'para',\n text: 'You are solely responsible for safeguarding your vault key and any recovery material, for the lawfulness of what you store, and for maintaining your own independent backups of anything critical.',\n },\n ],\n },\n acceptableUse,\n intellectualProperty,\n {\n id: 'third-parties',\n heading: 'third parties',\n blocks: [\n {\n kind: 'bullets',\n items: [\n {\n k: 'payment processing',\n v: 'Bitcoin payments are processed via a self-hosted BTCPay Server; we do not guarantee the availability of the Bitcoin network or of any payment processor',\n },\n {\n k: 'storage / hosting',\n v: 'encrypted blobs are stored with third-party infrastructure providers; they receive ciphertext only',\n },\n ],\n },\n ],\n },\n {\n id: 'disclaimers',\n heading: 'disclaimers & warranties',\n hint: 'as-is · no warranty',\n blocks: [\n {\n kind: 'callout',\n emphatic: true,\n text: 'THE SERVICE IS PROVIDED \"AS IS\" AND \"AS AVAILABLE\", WITH ALL FAULTS AND WITHOUT WARRANTY OF ANY KIND. TO THE MAXIMUM EXTENT PERMITTED BY LAW, ORANGECHECK DISCLAIMS ALL WARRANTIES, EXPRESS, IMPLIED, AND STATUTORY — INCLUDING MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND ACCURACY — AND DOES NOT WARRANT THAT THE SERVICE WILL BE UNINTERRUPTED OR THAT STORED DATA WILL BE FREE FROM LOSS.',\n },\n {\n kind: 'para',\n text: 'Maintain your own backups of anything critical. The encryption design that prevents OrangeCheck from reading your data also prevents OrangeCheck from recovering it.',\n },\n ],\n },\n limitationOfLiability,\n indemnification,\n eligibility,\n changesToTerms,\n disputeResolution,\n miscellaneous,\n ],\n summary:\n 'summary: end-to-end encrypted; orangecheck stores ciphertext only and cannot recover your vault. pricing and refund terms are being finalized — see the marked sections.',\n};\n\nconst privacy: DocSpec = {\n kind: 'privacy',\n eyebrow: 'privacy',\n title: 'Privacy policy',\n description:\n 'How OC Vault handles data. End-to-end encrypted by design — OrangeCheck stores opaque ciphertext and cannot read your vault, item names, or item types.',\n metaTitle: 'Privacy Policy — OC Vault',\n metaDescription:\n 'OC Vault privacy policy. End-to-end encrypted; OrangeCheck stores ciphertext only and cannot read your vault contents.',\n effective: '2026-05-15',\n updated: '2026-11-06',\n preamble: [\n {\n kind: 'callout',\n text: \"**What changed, 8 to 31 October 2026.** We corrected this policy where it did not say what is kept or who sees it. Newest first; the [changelog](https://github.com/orangecheck/oc-packages/blob/main/legal/CHANGELOG.md) lists every change.\",\n },\n {\n kind: 'bullets',\n items: [\n { k: \"31 October\", v: \"an emailed team invite keeps the invitee's address on the invite and shows it to the team's managers, the email goes through our email provider (Resend), and its link carries the team key only sealed under a one-time code.\" },\n { k: \"29 October\", v: \"the browser extension is described. Deleting your account removes the sealed vault key and the rest of your vault data, keeps payment records under a keyed id, and is refused while you own a team that still has other members.\" },\n { k: \"8 October\", v: \"your vault is filed under your did:oc, and the vault key is stored on our server, sealed under your passphrase and your recovery code.\" },\n ],\n },\n ],\n sections: [\n {\n id: 'principles',\n heading: 'our principles',\n hint: 'zero-knowledge by design',\n blocks: [\n {\n kind: 'para',\n text: 'OC Vault is designed so that OrangeCheck cannot read your data. Encryption and decryption happen in your browser. What OrangeCheck stores is an opaque, double-encrypted blob with no readable item names, types, or contents.',\n },\n ],\n },\n {\n id: 'what-we-collect',\n heading: 'information we collect',\n blocks: [\n {\n kind: 'bullets',\n items: [\n {\n k: 'account id',\n v: 'the opaque did:oc of the OrangeCheck account you sign in with; your vault is filed under it',\n },\n {\n k: 'sealed vault key',\n v: 'your vault key, encrypted under your passphrase and under your recovery code, so a new device can unlock; OrangeCheck cannot open it without one of them',\n },\n {\n k: 'team email (optional)',\n v: 'if you choose to show teammates an email address in a team vault, that address',\n },\n {\n k: 'emailed team invite',\n v: \"if a team manager emails you an invite: your email address, which is kept on the invite and shown to the team's managers, and sent with the invite link through our email provider (Resend). The link carries the team key only sealed under a one-time code the manager gives you themselves; OrangeCheck never sees the code or the key. The invite is deleted when a manager revokes it, with the team, or when the account that sent or claimed it is deleted\",\n },\n {\n k: 'payment records',\n v: 'for paid tiers: the BTCPay invoice id, sats paid, tier, and entitlement expiry. No card number, no billing address',\n },\n {\n k: 'encrypted blobs',\n v: 'opaque ciphertext filed under your account id — OrangeCheck cannot decrypt it',\n },\n {\n k: 'per-item metadata',\n v: 'one row per stored item, carrying its opaque envelope id and a last-updated timestamp. That means we CAN see how many items you store and when each last changed — the count is what enforces the per-account item ceiling in the service limits, and the timestamp is what lets a second device know which items to re-sync. We cannot see what any item is: not its contents, not its name, not its type. This entry previously appeared on the \"what we cannot see\" list, which was wrong.',\n },\n {\n k: 'access tokens',\n v: 'for developer / CLI / CI access: an SHA-256 hash of each token, an optional label, the granted scope (read or read-write), creation / last-used / optional expiry timestamps. We never store the token itself — only its hash.',\n },\n {\n k: 'technical data',\n v: 'IP address and request metadata, for security and rate limiting',\n },\n ],\n },\n ],\n },\n {\n id: 'what-we-cannot-see',\n heading: 'what we cannot see',\n blocks: [\n {\n kind: 'bullets',\n items: [\n 'The contents of any vault item',\n 'The names, titles, or types of your items',\n 'Your vault key in usable form, your passphrase, or your recovery code — we hold the key only sealed under them',\n 'Your access tokens (only the SHA-256 hash is stored)',\n ],\n },\n ],\n },\n {\n id: 'surfaces',\n heading: 'vault surfaces (web, extension, CLI, SDK)',\n hint: 'same vault, same zero-knowledge guarantee',\n blocks: [\n {\n kind: 'para',\n text: 'The same encrypted vault is reachable from the web app, the browser extension, and the CLI and SDK. The zero-knowledge guarantee — that OrangeCheck only ever holds ciphertext — applies to all of them.',\n },\n { kind: 'subhead', text: 'browser extension (not in a store yet)' },\n {\n kind: 'para',\n text: 'The OC Vault browser extension is built for Chrome and Firefox but is not yet in either browser\\'s store; its source is public at [github.com/orangecheck/oc-vault-extension](https://github.com/orangecheck/oc-vault-extension), and you can build and load it yourself. It fetches the same encrypted blobs the web app does, may cache them **as ciphertext** in extension storage, and decrypts in its service worker only after you unlock it. The vault key lives in memory and a RAM-only `storage.session` slot and is never written to disk in the clear; if you turn on passkey unlock, it is also stored sealed to your passkey. The content script that offers autofill receives only **one entry\\'s username and password at fill time**; it never receives the vault key or the entry index. The extension talks only to vault.ochk.io, and to ochk.io for sign-in: no analytics, no telemetry, no remote code.',\n },\n { kind: 'subhead', text: 'developer platform — access tokens, CLI, SDK, GitHub Action' },\n {\n kind: 'para',\n text: 'For headless access (`oc-vault` CLI, the `@orangecheck/vault-core` SDK, CI / GitHub Actions), you may mint **access tokens** at [vault.ochk.io/vault/developer](https://vault.ochk.io/vault/developer). A token authorizes **transport only** — it lets the caller fetch your encrypted blobs and the passphrase-wrapped escrow, and (for tokens minted with a write scope) write new ciphertext. **A token carries no key material:** a leaked token yields only ciphertext, the same thing the server already holds. The passphrase still performs decryption in your local process and is never transmitted. We store only the SHA-256 hash of each token; tokens can be revoked at any time from the same page.',\n },\n ],\n },\n {\n id: 'cookies',\n heading: 'cookies & analytics',\n blocks: [\n {\n kind: 'para',\n text: 'No cookies of vault.ochk.io\\'s own. The family sign-in cookie `oc_session` (set by ochk.io: HttpOnly; Secure; SameSite=None; Domain=.ochk.io; 30 days) and the appearance cookies `oc_theme`, `oc_skin`, `oc_motion` and `oc_logo` (your logo choice, set only when you open a page with `?logo=` in its address) apply here. Your vault data lives in your browser\\'s IndexedDB, under your account. Page analytics use [Plausible](https://plausible.io/privacy) — cookie-free, no PII, aggregate only. No advertising or tracking cookies.',\n },\n ],\n },\n {\n id: 'retention',\n heading: 'data retention',\n blocks: [\n {\n kind: 'bullets',\n items: [\n {\n k: 'encrypted blobs',\n v: 'kept while your account is active; you can delete the whole cloud copy at any time from settings',\n },\n {\n k: 'sealed vault key',\n v: 'kept so a new device can unlock; deleting the cloud copy does not remove it, and deleting your account does',\n },\n {\n k: 'payment records',\n v: 'retained as required for accounting and entitlement verification; when your account is deleted they stay under a keyed id, not your account id',\n },\n {\n k: 'deleting your account',\n v: 'removes your encrypted blobs, devices and grants, sealed vault key, access tokens, one-time shares, the teams you own alone, and your seats and invites in other teams. It is refused while you own a team that still has other members',\n },\n {\n k: 'request logs',\n v: 'held by our hosting provider (Vercel) for its own short retention window; rate-limit counters keyed by IP expire with their window',\n },\n ],\n },\n ],\n },\n {\n id: 'data-security',\n heading: 'data security',\n blocks: [\n {\n kind: 'para',\n text: 'Client-side AES-256-GCM encryption, HTTPS in transit, and a server that only ever holds ciphertext. No method of storage is perfectly secure — we use reasonable measures but do not warrant security; see the [Terms of Service](/terms). Because of the encryption design, a compromise of OrangeCheck infrastructure exposes ciphertext, not your secrets.',\n },\n ],\n },\n privacyRights,\n privacyTransfers,\n privacyRegional,\n privacyChildren,\n privacyChanges,\n ],\n summary:\n 'summary: end-to-end encrypted; orangecheck stores ciphertext only and cannot read your vault contents.',\n};\n\nexport const vaultProfile = { terms, privacy };\n","/** @orangecheck/legal — profile registry consumed by `buildDoc`. */\n\nimport type { DocKind, DocSpec, LegalProfile } from '../types';\nimport { protocolProfile } from './protocol';\nimport { meProfile } from './me';\nimport { vaultProfile } from './vault';\n\nexport const PROFILES: Record<LegalProfile, Record<DocKind, DocSpec>> = {\n protocol: protocolProfile,\n me: meProfile,\n vault: vaultProfile,\n};\n","/**\n * @orangecheck/legal — document builder.\n *\n * `buildDoc(site, kind)` is the single entry point a site page calls. It picks\n * the profile spec, interpolates `[[TOKEN]]` placeholders from global + site\n * context, numbers the sections, and returns a fully resolved `LegalDoc`. Pure\n * and synchronous, so it can run at module scope in a page file.\n */\n\nimport type { Block, BulletItem, DocKind, DocSpec, LegalDoc, Section } from './types';\nimport { BRAND, ENTITY_PENDING, GLOBAL_TOKENS, LEGAL_ENTITY, LEGAL_ENTITY_LONG } from './constants';\nimport { getSiteContext } from './registry';\nimport { PROFILES } from './content';\n\nconst TOKEN_RE = /\\[\\[([A-Z_]+)\\]\\]/g;\n\nfunction fill(text: string, tokens: Record<string, string>): string {\n return text.replace(TOKEN_RE, (match, key: string) => tokens[key] ?? match);\n}\n\nfunction fillBullet(item: BulletItem, tokens: Record<string, string>): BulletItem {\n if (typeof item === 'string') return fill(item, tokens);\n return { k: fill(item.k, tokens), v: fill(item.v, tokens) };\n}\n\nfunction fillBlock(block: Block, tokens: Record<string, string>): Block {\n switch (block.kind) {\n case 'para':\n case 'subhead':\n case 'stub':\n return { ...block, text: fill(block.text, tokens) };\n case 'callout':\n return { ...block, text: fill(block.text, tokens) };\n case 'bullets':\n return { ...block, items: block.items.map((i) => fillBullet(i, tokens)) };\n }\n}\n\nfunction fillSection(section: Section, tokens: Record<string, string>, index: number): Section {\n return {\n ...section,\n num: String(index + 1).padStart(2, '0'),\n heading: fill(section.heading, tokens),\n hint: section.hint ? fill(section.hint, tokens) : undefined,\n blocks: section.blocks.map((b) => fillBlock(b, tokens)),\n };\n}\n\nfunction fillSpec(spec: DocSpec, tokens: Record<string, string>): DocSpec {\n return {\n ...spec,\n eyebrow: fill(spec.eyebrow, tokens),\n title: fill(spec.title, tokens),\n description: fill(spec.description, tokens),\n metaTitle: fill(spec.metaTitle, tokens),\n metaDescription: fill(spec.metaDescription, tokens),\n preamble: spec.preamble?.map((b) => fillBlock(b, tokens)),\n sections: spec.sections.map((s, i) => fillSection(s, tokens, i)),\n summary: spec.summary ? fill(spec.summary, tokens) : undefined,\n };\n}\n\n/** Build a fully resolved legal document for one site. */\nexport function buildDoc(siteSlug: string, kind: DocKind): LegalDoc {\n const ctx = getSiteContext(siteSlug);\n const spec = PROFILES[ctx.profile][kind];\n const brand = ctx.brand ?? BRAND;\n const entity = ENTITY_PENDING && ctx.brand ? ctx.brand : LEGAL_ENTITY;\n const tokens: Record<string, string> = {\n ...GLOBAL_TOKENS,\n BRAND: brand,\n ENTITY: entity,\n ENTITY_LONG: LEGAL_ENTITY_LONG.replace(LEGAL_ENTITY, entity),\n ENTITY_UPPER: entity.toUpperCase(),\n PRODUCT: ctx.product,\n PRODUCT_SHORT: ctx.productShort,\n HOST: ctx.host,\n CONTACT: ctx.contact,\n SECURITY_CONTACT: ctx.securityContact,\n };\n return {\n ...fillSpec(spec, tokens),\n site: ctx.slug,\n profile: ctx.profile,\n };\n}\n","/**\n * @orangecheck/legal — minimal inline markup.\n *\n * Authored legal strings stay plain text but may use a tiny, well-bounded\n * markup so emphasis and links survive the data model:\n * **bold** → emphasised foreground text\n * `code` → monospace\n * [label](https://…) → external anchor (new tab)\n * [label](mailto:…) → mail anchor\n * [label](/path) → internal anchor\n *\n * Links are plain `<a>` elements — legal pages are not perf-sensitive, and\n * avoiding `next/link` keeps this package free of a Next peer dependency.\n */\n\nimport React from 'react';\n\nconst INLINE_RE = /(\\*\\*[^*]+\\*\\*|`[^`]+`|\\[[^\\]]+\\]\\([^)]+\\))/g;\nconst LINK_RE = /^\\[([^\\]]+)\\]\\(([^)]+)\\)$/;\n\nexport function renderInline(text: string): React.ReactNode {\n const parts = text.split(INLINE_RE);\n return parts.map((part, i) => {\n if (!part) return null;\n\n if (part.startsWith('**') && part.endsWith('**')) {\n return (\n <strong key={i} className=\"text-foreground font-semibold\">\n {part.slice(2, -2)}\n </strong>\n );\n }\n\n if (part.startsWith('`') && part.endsWith('`')) {\n return (\n <code key={i} className=\"font-mono text-[0.95em]\">\n {part.slice(1, -1)}\n </code>\n );\n }\n\n const link = LINK_RE.exec(part);\n if (link) {\n const label = link[1] ?? '';\n const href = link[2] ?? '';\n const external = /^https?:\\/\\//.test(href);\n return (\n <a\n key={i}\n href={href}\n className=\"text-primary underline\"\n {...(external ? { target: '_blank', rel: 'noopener noreferrer' } : {})}\n >\n {label}\n </a>\n );\n }\n\n return <React.Fragment key={i}>{part}</React.Fragment>;\n });\n}\n","/**\n * @orangecheck/legal — render components.\n *\n * `<LegalDocument>` turns a resolved `LegalDoc` into a page body. It renders\n * its own header, the effective/updated bar, every section, and the trailing\n * summary — so a consuming site page only supplies `<Seo>` and a container.\n * Styling uses the family's shared design tokens (`primary`, `muted-foreground`,\n * `card`, `border`, `warning`, `font-display`, `font-mono`), so the same\n * component renders natively on every .ochk.io site.\n */\n\nimport type { Block, BulletItem, LegalDoc, Section } from './types';\nimport { renderInline } from './markup';\n\nfunction Para({ text }: { text: string }) {\n return <p className=\"text-muted-foreground\">{renderInline(text)}</p>;\n}\n\nfunction SubHead({ text }: { text: string }) {\n return (\n <h3 className=\"font-display text-primary mt-6 mb-2 text-xs font-bold tracking-widest uppercase\">\n {renderInline(text)}\n </h3>\n );\n}\n\nfunction Bullets({ items }: { items: BulletItem[] }) {\n return (\n <ul className=\"divide-y border font-mono text-xs\">\n {items.map((item, i) => {\n if (typeof item === 'string') {\n return (\n <li key={i} className=\"flex items-start gap-3 px-4 py-2.5\">\n <span className=\"text-primary mt-0.5 flex-shrink-0\">{'>>'}</span>\n <span className=\"text-muted-foreground\">{renderInline(item)}</span>\n </li>\n );\n }\n return (\n <li key={i} className=\"flex flex-wrap items-start gap-x-4 gap-y-1 px-4 py-2.5\">\n <span className=\"text-primary w-40 flex-shrink-0 font-bold tracking-widest uppercase\">\n {item.k}\n </span>\n <span className=\"text-muted-foreground flex-1\">{renderInline(item.v)}</span>\n </li>\n );\n })}\n </ul>\n );\n}\n\nfunction Callout({ text, emphatic }: { text: string; emphatic?: boolean }) {\n return (\n <div className=\"border-primary/30 bg-primary/[0.03] border px-4 py-3 font-mono text-xs leading-relaxed\">\n <span className=\"text-primary mr-2\">{emphatic ? '!! ' : '§ '}</span>\n <span className={emphatic ? 'text-foreground font-medium' : 'text-foreground'}>\n {renderInline(text)}\n </span>\n </div>\n );\n}\n\n/**\n * A section the family has not finalised. Rendered as an unmissable,\n * warning-toned notice — honest to users (these surfaces are pre-GA) and\n * impossible for whoever finalises the money/custody/SLA terms to overlook.\n */\nfunction Stub({ text }: { text: string }) {\n return (\n <div className=\"border-warning/40 bg-warning/[0.05] border px-4 py-3.5 font-mono text-xs leading-relaxed\">\n <div className=\"text-warning mb-1.5 font-bold tracking-widest uppercase\">\n {'§ pending · counsel review'}\n </div>\n <p className=\"text-muted-foreground\">{renderInline(text)}</p>\n </div>\n );\n}\n\nfunction BlockView({ block }: { block: Block }) {\n switch (block.kind) {\n case 'para':\n return <Para text={block.text} />;\n case 'subhead':\n return <SubHead text={block.text} />;\n case 'bullets':\n return <Bullets items={block.items} />;\n case 'callout':\n return <Callout text={block.text} emphatic={block.emphatic} />;\n case 'stub':\n return <Stub text={block.text} />;\n }\n}\n\nfunction SectionView({ section }: { section: Section }) {\n return (\n <section className=\"border-t py-10\">\n <div className=\"mb-6 flex flex-wrap items-baseline gap-x-3 gap-y-1\">\n <span className=\"font-display text-primary text-sm font-bold tabular-nums\">\n [{section.num}]\n </span>\n <span className=\"font-display text-lg font-bold tracking-wider uppercase\">\n {section.heading}\n </span>\n {section.hint && (\n <span className=\"text-muted-foreground font-mono text-[11px]\">\n {'// '}\n {section.hint}\n </span>\n )}\n </div>\n <div className=\"max-w-3xl space-y-4 font-mono text-sm leading-relaxed\">\n {section.blocks.map((b, i) => (\n <BlockView key={i} block={b} />\n ))}\n </div>\n </section>\n );\n}\n\nexport interface LegalDocumentProps {\n doc: LegalDoc;\n}\n\n/** Renders a complete legal document body (header → sections → summary). */\nexport function LegalDocument({ doc }: LegalDocumentProps) {\n return (\n <article>\n <header className=\"pt-2 pb-4\">\n <div className=\"font-display text-primary mb-3 text-xs font-bold tracking-widest uppercase\">\n {'§ '}\n {doc.eyebrow}\n </div>\n <h1 className=\"font-display text-3xl font-bold tracking-tight sm:text-4xl\">\n {doc.title}\n </h1>\n <p className=\"text-muted-foreground mt-4 max-w-3xl text-sm leading-relaxed\">\n {renderInline(doc.description)}\n </p>\n </header>\n\n <div className=\"flex flex-wrap gap-x-6 gap-y-1 border-b pb-4 font-mono text-[11px]\">\n <span>\n <span className=\"text-muted-foreground tracking-widest uppercase\">\n effective:{' '}\n </span>\n <span className=\"text-foreground tabular-nums\">{doc.effective}</span>\n </span>\n <span>\n <span className=\"text-muted-foreground tracking-widest uppercase\">\n last updated:{' '}\n </span>\n <span className=\"text-foreground tabular-nums\">{doc.updated}</span>\n </span>\n </div>\n\n {doc.preamble && doc.preamble.length > 0 && (\n <div className=\"mt-6 space-y-3\">\n {doc.preamble.map((b, i) => (\n <BlockView key={i} block={b} />\n ))}\n </div>\n )}\n\n <div className=\"mt-2\">\n {doc.sections.map((s) => (\n <SectionView key={s.id} section={s} />\n ))}\n </div>\n\n {doc.summary && (\n <p className=\"text-muted-foreground mt-10 border-t pt-6 font-mono text-[11px]\">\n {'// '}\n {doc.summary}\n </p>\n )}\n </article>\n );\n}\n","/**\n * @orangecheck/legal — shared security-disclosure block.\n *\n * Security pages stay bespoke per product (each describes a different custody\n * and data posture), but the *vulnerability-disclosure mechanics* should be\n * identical family-wide. Drop `<SecurityDisclosure>` into any bespoke\n * `/security` page to get a consistent \"how to report / what to expect\" block.\n */\n\nexport interface SecurityDisclosureProps {\n /** Security contact mailbox. */\n securityContact?: string;\n /** Heading shown above the block. Pass `null` to omit. */\n heading?: string | null;\n}\n\nexport function SecurityDisclosure({\n securityContact = 'security@ochk.io',\n heading = 'responsible disclosure',\n}: SecurityDisclosureProps) {\n return (\n <div className=\"font-mono text-sm leading-relaxed\">\n {heading && (\n <h2 className=\"font-display text-foreground mb-4 text-lg font-bold tracking-wider uppercase\">\n {heading}\n </h2>\n )}\n\n <div className=\"border-primary/30 bg-primary/[0.03] mb-4 border px-4 py-3 text-xs leading-relaxed\">\n <span className=\"text-primary mr-2\">{'!! '}</span>\n <span className=\"text-foreground\">\n Don't open public GitHub issues for exploitable bugs. Public disclosure\n before a fix ships puts everyone using the protocol at risk.\n </span>\n </div>\n\n <p className=\"text-muted-foreground mb-4\">\n Email{' '}\n <a\n href={`mailto:${securityContact}`}\n className=\"text-primary underline decoration-dotted underline-offset-3\"\n >\n {securityContact}\n </a>\n , or open a private GitHub security advisory on the most relevant{' '}\n <code className=\"text-[0.95em]\">orangecheck/*</code> repository.\n </p>\n\n <ul className=\"divide-y border text-xs\">\n {(\n [\n ['reply', 'we aim to reply to every report within 30 days'],\n ['fix', \"we can't promise a time to a fix yet\"],\n [\n 'coordinated disclosure',\n 'we credit you (unless you prefer anonymity) and publish an advisory once the fix ships',\n ],\n [\n 'bounty',\n 'no paid bounty program yet — the ecosystem is young; we are grateful for responsible disclosure',\n ],\n ] as const\n ).map(([k, v]) => (\n <li key={k} className=\"flex flex-wrap items-start gap-x-4 gap-y-1 px-4 py-2.5\">\n <span className=\"text-primary w-44 flex-shrink-0 font-bold tracking-widest uppercase\">\n {k}\n </span>\n <span className=\"text-muted-foreground flex-1\">{v}</span>\n </li>\n ))}\n </ul>\n </div>\n );\n}\n"]}
|