x402-trust-layer 5.1.0

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.
Files changed (293) hide show
  1. package/CHANGELOG.md +55 -0
  2. package/DEPLOY.md +53 -0
  3. package/Dockerfile +30 -0
  4. package/LICENSE +21 -0
  5. package/README.md +294 -0
  6. package/dist/agents/a2a-payment.d.ts +37 -0
  7. package/dist/agents/a2a-payment.js +105 -0
  8. package/dist/agents/agent-escrow.d.ts +30 -0
  9. package/dist/agents/agent-escrow.js +23 -0
  10. package/dist/agents/agent-verify.d.ts +15 -0
  11. package/dist/agents/agent-verify.js +112 -0
  12. package/dist/agents/api-router.d.ts +32 -0
  13. package/dist/agents/api-router.js +228 -0
  14. package/dist/agents/attestation-registry.d.ts +35 -0
  15. package/dist/agents/attestation-registry.js +76 -0
  16. package/dist/agents/audition-coach.d.ts +45 -0
  17. package/dist/agents/audition-coach.js +257 -0
  18. package/dist/agents/bedrock-bridge.d.ts +3 -0
  19. package/dist/agents/bedrock-bridge.js +60 -0
  20. package/dist/agents/budget-allocator.d.ts +24 -0
  21. package/dist/agents/budget-allocator.js +31 -0
  22. package/dist/agents/compliance-ledger.d.ts +66 -0
  23. package/dist/agents/compliance-ledger.js +80 -0
  24. package/dist/agents/dispute-resolver.d.ts +62 -0
  25. package/dist/agents/dispute-resolver.js +124 -0
  26. package/dist/agents/evidence-locker.d.ts +30 -0
  27. package/dist/agents/evidence-locker.js +47 -0
  28. package/dist/agents/facilitator-failover.d.ts +15 -0
  29. package/dist/agents/facilitator-failover.js +18 -0
  30. package/dist/agents/identity-gate.d.ts +20 -0
  31. package/dist/agents/identity-gate.js +79 -0
  32. package/dist/agents/mandate-compiler.d.ts +51 -0
  33. package/dist/agents/mandate-compiler.js +73 -0
  34. package/dist/agents/mandate-diff.d.ts +41 -0
  35. package/dist/agents/mandate-diff.js +170 -0
  36. package/dist/agents/market-buy-advisor.d.ts +65 -0
  37. package/dist/agents/market-buy-advisor.js +234 -0
  38. package/dist/agents/merchant-trust.d.ts +38 -0
  39. package/dist/agents/merchant-trust.js +171 -0
  40. package/dist/agents/mpp-session-broker.d.ts +27 -0
  41. package/dist/agents/mpp-session-broker.js +29 -0
  42. package/dist/agents/mpp-session-v2.d.ts +76 -0
  43. package/dist/agents/mpp-session-v2.js +269 -0
  44. package/dist/agents/payment-intent-compiler.d.ts +21 -0
  45. package/dist/agents/payment-intent-compiler.js +45 -0
  46. package/dist/agents/pipeline-execute.d.ts +40 -0
  47. package/dist/agents/pipeline-execute.js +100 -0
  48. package/dist/agents/pipeline-trust-v2.d.ts +31 -0
  49. package/dist/agents/pipeline-trust-v2.js +111 -0
  50. package/dist/agents/pre-x402-guard.d.ts +35 -0
  51. package/dist/agents/pre-x402-guard.js +84 -0
  52. package/dist/agents/quality-escrow-semantic.d.ts +88 -0
  53. package/dist/agents/quality-escrow-semantic.js +137 -0
  54. package/dist/agents/quality-escrow.d.ts +65 -0
  55. package/dist/agents/quality-escrow.js +104 -0
  56. package/dist/agents/quality-monitor.d.ts +32 -0
  57. package/dist/agents/quality-monitor.js +77 -0
  58. package/dist/agents/rail-optimizer.d.ts +33 -0
  59. package/dist/agents/rail-optimizer.js +133 -0
  60. package/dist/agents/receipt-auditor.d.ts +14 -0
  61. package/dist/agents/receipt-auditor.js +145 -0
  62. package/dist/agents/refund-arbiter.d.ts +24 -0
  63. package/dist/agents/refund-arbiter.js +70 -0
  64. package/dist/agents/research-brief.d.ts +14 -0
  65. package/dist/agents/research-brief.js +66 -0
  66. package/dist/agents/risk-gate.d.ts +11 -0
  67. package/dist/agents/risk-gate.js +78 -0
  68. package/dist/agents/settlement-graph.d.ts +16 -0
  69. package/dist/agents/settlement-graph.js +38 -0
  70. package/dist/agents/spend-governor.d.ts +2 -0
  71. package/dist/agents/spend-governor.js +70 -0
  72. package/dist/agents/trust-network.d.ts +138 -0
  73. package/dist/agents/trust-network.js +244 -0
  74. package/dist/agents/x402-proxy.d.ts +32 -0
  75. package/dist/agents/x402-proxy.js +90 -0
  76. package/dist/client/demo-alchemy-live.d.ts +1 -0
  77. package/dist/client/demo-alchemy-live.js +226 -0
  78. package/dist/client/demo-tail.d.ts +1 -0
  79. package/dist/client/demo-tail.js +100 -0
  80. package/dist/client/demo.d.ts +1 -0
  81. package/dist/client/demo.js +293 -0
  82. package/dist/config.d.ts +94 -0
  83. package/dist/config.js +223 -0
  84. package/dist/index.d.ts +1 -0
  85. package/dist/index.js +389 -0
  86. package/dist/lib/agent-response.d.ts +14 -0
  87. package/dist/lib/agent-response.js +13 -0
  88. package/dist/lib/agentic-gateways.d.ts +5 -0
  89. package/dist/lib/agentic-gateways.js +15 -0
  90. package/dist/lib/agentic-probes.d.ts +10 -0
  91. package/dist/lib/agentic-probes.js +49 -0
  92. package/dist/lib/alchemy-x402-fetch.d.ts +16 -0
  93. package/dist/lib/alchemy-x402-fetch.js +95 -0
  94. package/dist/lib/apply-verifier-body.d.ts +7 -0
  95. package/dist/lib/apply-verifier-body.js +179 -0
  96. package/dist/lib/attestation.d.ts +30 -0
  97. package/dist/lib/attestation.js +107 -0
  98. package/dist/lib/bazaar-extension.d.ts +15 -0
  99. package/dist/lib/bazaar-extension.js +265 -0
  100. package/dist/lib/bazaar.d.ts +100 -0
  101. package/dist/lib/bazaar.js +341 -0
  102. package/dist/lib/certified-sellers.d.ts +41 -0
  103. package/dist/lib/certified-sellers.js +129 -0
  104. package/dist/lib/chains.d.ts +20 -0
  105. package/dist/lib/chains.js +78 -0
  106. package/dist/lib/db-persistence.d.ts +7 -0
  107. package/dist/lib/db-persistence.js +65 -0
  108. package/dist/lib/db.d.ts +5 -0
  109. package/dist/lib/db.js +113 -0
  110. package/dist/lib/discovery-page.d.ts +2 -0
  111. package/dist/lib/discovery-page.js +71 -0
  112. package/dist/lib/ecosystem-telemetry.d.ts +20 -0
  113. package/dist/lib/ecosystem-telemetry.js +80 -0
  114. package/dist/lib/erc8004/agent-card.d.ts +34 -0
  115. package/dist/lib/erc8004/agent-card.js +151 -0
  116. package/dist/lib/erc8004/cache.d.ts +3 -0
  117. package/dist/lib/erc8004/cache.js +17 -0
  118. package/dist/lib/erc8004/constants.d.ts +22 -0
  119. package/dist/lib/erc8004/constants.js +35 -0
  120. package/dist/lib/erc8004/registry.d.ts +19 -0
  121. package/dist/lib/erc8004/registry.js +171 -0
  122. package/dist/lib/erc8004/resolve-agent.d.ts +7 -0
  123. package/dist/lib/erc8004/resolve-agent.js +70 -0
  124. package/dist/lib/erc8004/trust-score.d.ts +33 -0
  125. package/dist/lib/erc8004/trust-score.js +136 -0
  126. package/dist/lib/escrow-ledger.d.ts +14 -0
  127. package/dist/lib/escrow-ledger.js +54 -0
  128. package/dist/lib/escrow-unified.d.ts +15 -0
  129. package/dist/lib/escrow-unified.js +28 -0
  130. package/dist/lib/facilitator-extra.d.ts +13 -0
  131. package/dist/lib/facilitator-extra.js +52 -0
  132. package/dist/lib/facilitators.d.ts +20 -0
  133. package/dist/lib/facilitators.js +89 -0
  134. package/dist/lib/host-policy.d.ts +4 -0
  135. package/dist/lib/host-policy.js +20 -0
  136. package/dist/lib/idempotency.d.ts +4 -0
  137. package/dist/lib/idempotency.js +120 -0
  138. package/dist/lib/ledger.d.ts +2 -0
  139. package/dist/lib/ledger.js +17 -0
  140. package/dist/lib/logger.d.ts +6 -0
  141. package/dist/lib/logger.js +24 -0
  142. package/dist/lib/mandate-vc.d.ts +20 -0
  143. package/dist/lib/mandate-vc.js +25 -0
  144. package/dist/lib/mandate.d.ts +44 -0
  145. package/dist/lib/mandate.js +190 -0
  146. package/dist/lib/marketplace.d.ts +7 -0
  147. package/dist/lib/marketplace.js +127 -0
  148. package/dist/lib/migrations.d.ts +2 -0
  149. package/dist/lib/migrations.js +130 -0
  150. package/dist/lib/nonce-store.d.ts +6 -0
  151. package/dist/lib/nonce-store.js +109 -0
  152. package/dist/lib/openapi-agentcash.d.ts +5 -0
  153. package/dist/lib/openapi-agentcash.js +288 -0
  154. package/dist/lib/openapi-meta.d.ts +5 -0
  155. package/dist/lib/openapi-meta.js +235 -0
  156. package/dist/lib/otel.d.ts +2 -0
  157. package/dist/lib/otel.js +25 -0
  158. package/dist/lib/paid-resource-url.d.ts +6 -0
  159. package/dist/lib/paid-resource-url.js +47 -0
  160. package/dist/lib/parse-with-verifier-fallback.d.ts +3 -0
  161. package/dist/lib/parse-with-verifier-fallback.js +13 -0
  162. package/dist/lib/payment-request-context.d.ts +10 -0
  163. package/dist/lib/payment-request-context.js +5 -0
  164. package/dist/lib/payment-response.d.ts +13 -0
  165. package/dist/lib/payment-response.js +39 -0
  166. package/dist/lib/payto-guard.d.ts +10 -0
  167. package/dist/lib/payto-guard.js +20 -0
  168. package/dist/lib/probe.d.ts +29 -0
  169. package/dist/lib/probe.js +157 -0
  170. package/dist/lib/problem-detail.d.ts +10 -0
  171. package/dist/lib/problem-detail.js +14 -0
  172. package/dist/lib/rate-limit.d.ts +12 -0
  173. package/dist/lib/rate-limit.js +126 -0
  174. package/dist/lib/replay-middleware.d.ts +3 -0
  175. package/dist/lib/replay-middleware.js +27 -0
  176. package/dist/lib/response-guard.d.ts +5 -0
  177. package/dist/lib/response-guard.js +40 -0
  178. package/dist/lib/safe-fetch.d.ts +5 -0
  179. package/dist/lib/safe-fetch.js +19 -0
  180. package/dist/lib/security.d.ts +13 -0
  181. package/dist/lib/security.js +61 -0
  182. package/dist/lib/semantic-judge.d.ts +14 -0
  183. package/dist/lib/semantic-judge.js +107 -0
  184. package/dist/lib/semantic-judge.test.d.ts +1 -0
  185. package/dist/lib/semantic-judge.test.js +11 -0
  186. package/dist/lib/ssrf.d.ts +10 -0
  187. package/dist/lib/ssrf.js +130 -0
  188. package/dist/lib/ssrf.test.d.ts +1 -0
  189. package/dist/lib/ssrf.test.js +16 -0
  190. package/dist/lib/suite-catalog.d.ts +83 -0
  191. package/dist/lib/suite-catalog.js +131 -0
  192. package/dist/lib/telemetry.d.ts +5 -0
  193. package/dist/lib/telemetry.js +37 -0
  194. package/dist/lib/verifier-fast-path.d.ts +10 -0
  195. package/dist/lib/verifier-fast-path.js +44 -0
  196. package/dist/lib/verifier-probe-protocol.d.ts +7 -0
  197. package/dist/lib/verifier-probe-protocol.js +115 -0
  198. package/dist/lib/verify-examples.d.ts +2 -0
  199. package/dist/lib/verify-examples.js +438 -0
  200. package/dist/lib/version.d.ts +2 -0
  201. package/dist/lib/version.js +2 -0
  202. package/dist/lib/webhook-auth.d.ts +3 -0
  203. package/dist/lib/webhook-auth.js +34 -0
  204. package/dist/lib/webhook-routes.d.ts +2 -0
  205. package/dist/lib/webhook-routes.js +112 -0
  206. package/dist/lib/webhooks.d.ts +23 -0
  207. package/dist/lib/webhooks.js +123 -0
  208. package/dist/lib/webhooks.test.d.ts +1 -0
  209. package/dist/lib/webhooks.test.js +16 -0
  210. package/dist/lib/x402-client-options.d.ts +28 -0
  211. package/dist/lib/x402-client-options.js +138 -0
  212. package/dist/lib/x402-headers.d.ts +10 -0
  213. package/dist/lib/x402-headers.js +27 -0
  214. package/dist/lib/x402-paid.d.ts +5 -0
  215. package/dist/lib/x402-paid.js +252 -0
  216. package/dist/lib/x402-payment-replay.d.ts +22 -0
  217. package/dist/lib/x402-payment-replay.js +57 -0
  218. package/dist/lib/x402gle-host-verify.d.ts +3 -0
  219. package/dist/lib/x402gle-host-verify.js +27 -0
  220. package/dist/protocol/agent-passport.d.ts +34 -0
  221. package/dist/protocol/agent-passport.js +44 -0
  222. package/dist/protocol/compliance-v2.d.ts +21 -0
  223. package/dist/protocol/compliance-v2.js +19 -0
  224. package/dist/protocol/credit-bureau.d.ts +18 -0
  225. package/dist/protocol/credit-bureau.js +44 -0
  226. package/dist/protocol/crypto.d.ts +6 -0
  227. package/dist/protocol/crypto.js +41 -0
  228. package/dist/protocol/escrow-fsm.d.ts +33 -0
  229. package/dist/protocol/escrow-fsm.js +99 -0
  230. package/dist/protocol/fraud-engine.d.ts +28 -0
  231. package/dist/protocol/fraud-engine.js +77 -0
  232. package/dist/protocol/observability.d.ts +14 -0
  233. package/dist/protocol/observability.js +21 -0
  234. package/dist/protocol/pipeline-full-trust.d.ts +40 -0
  235. package/dist/protocol/pipeline-full-trust.js +96 -0
  236. package/dist/protocol/proof-of-execution.d.ts +36 -0
  237. package/dist/protocol/proof-of-execution.js +48 -0
  238. package/dist/protocol/reasoning-audit.d.ts +27 -0
  239. package/dist/protocol/reasoning-audit.js +51 -0
  240. package/dist/protocol/replay-guard.d.ts +28 -0
  241. package/dist/protocol/replay-guard.js +76 -0
  242. package/dist/protocol/replay-guard.test.d.ts +1 -0
  243. package/dist/protocol/replay-guard.test.js +10 -0
  244. package/dist/protocol/security-audit.d.ts +18 -0
  245. package/dist/protocol/security-audit.js +45 -0
  246. package/dist/protocol/store.d.ts +5 -0
  247. package/dist/protocol/store.js +59 -0
  248. package/dist/protocol/threat-catalog.d.ts +13 -0
  249. package/dist/protocol/threat-catalog.js +75 -0
  250. package/dist/protocol/trust-oracle.d.ts +23 -0
  251. package/dist/protocol/trust-oracle.js +30 -0
  252. package/dist/protocol/trust-score-v2.d.ts +33 -0
  253. package/dist/protocol/trust-score-v2.js +78 -0
  254. package/dist/protocol/zk-proofs.d.ts +24 -0
  255. package/dist/protocol/zk-proofs.js +32 -0
  256. package/dist/routes/a2a-agent-card.d.ts +3 -0
  257. package/dist/routes/a2a-agent-card.js +28 -0
  258. package/dist/routes/catalog.d.ts +5 -0
  259. package/dist/routes/catalog.js +47 -0
  260. package/dist/routes/register-all.d.ts +3 -0
  261. package/dist/routes/register-all.js +1240 -0
  262. package/dist/routes/schemas.d.ts +83 -0
  263. package/dist/routes/schemas.js +38 -0
  264. package/dist/routes/shared.d.ts +16 -0
  265. package/dist/routes/shared.js +27 -0
  266. package/dist/routes-protocol.d.ts +10 -0
  267. package/dist/routes-protocol.js +322 -0
  268. package/dist/routes.d.ts +2 -0
  269. package/dist/routes.js +2 -0
  270. package/dist/types.d.ts +66 -0
  271. package/dist/types.js +1 -0
  272. package/openapi.json +7940 -0
  273. package/package.json +124 -0
  274. package/public/.well-known/ai-plugin.json +12 -0
  275. package/public/assets/aegis-logo-blue.png +0 -0
  276. package/public/assets/aegis-logo-gold.png +0 -0
  277. package/public/assets/aegis-logo-green.png +0 -0
  278. package/public/assets/aegis-logo-purple.png +0 -0
  279. package/public/assets/aegis-logo-red.png +0 -0
  280. package/public/assets/aegis-logo-white.png +0 -0
  281. package/public/assets/aegis-logo.png +0 -0
  282. package/public/assets/x402-trustlayer-logo.png +0 -0
  283. package/public/assets/x402-trustlayer-logo.svg +5 -0
  284. package/public/data/agents.json +1528 -0
  285. package/public/index.html +198 -0
  286. package/public/landing.css +342 -0
  287. package/public/landing.js +405 -0
  288. package/public/llms-full.txt +582 -0
  289. package/public/llms.txt +132 -0
  290. package/public/skill.md +135 -0
  291. package/railway.toml +9 -0
  292. package/scripts/docker-entrypoint.sh +7 -0
  293. package/scripts/patch-facilitator-timeout.mjs +61 -0
@@ -0,0 +1,198 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8"/>
5
+ <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover"/>
6
+ <title>x402 Trust Layer — Agent trust intelligence as a service</title>
7
+ <meta name="description" content="58 enterprise x402 APIs — guard, attest, comply, Agent Trust Protocol v4. Pay-per-call USDC on Base, Solana, Polygon. x402trustlayer.xyz"/>
8
+ <link rel="canonical" href="https://x402trustlayer.xyz/"/>
9
+ <link rel="icon" type="image/svg+xml" href="/assets/x402-trustlayer-logo.svg"/>
10
+ <link rel="preconnect" href="https://fonts.googleapis.com"/>
11
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin/>
12
+ <link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;600&family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet"/>
13
+ <link rel="stylesheet" href="/landing.css?v=4"/>
14
+ </head>
15
+ <body>
16
+ <div class="grid-bg"></div>
17
+ <div class="glow"></div>
18
+
19
+ <header class="nav" id="site-nav">
20
+ <div class="nav-shell">
21
+ <a class="brand" href="/">
22
+ <img src="/assets/x402-trustlayer-logo.svg" alt="x402 Trust Layer"/>
23
+ <span class="brand-text">x402<span class="dim">trustlayer</span></span>
24
+ </a>
25
+ <nav class="nav-menu" id="nav-menu" aria-label="Main navigation">
26
+ <a href="#about">About</a>
27
+ <a href="#why">Why</a>
28
+ <a href="#agents">58 APIs</a>
29
+ <a href="/skill.md">Skill</a>
30
+ <a href="/llms.txt">llms.txt</a>
31
+ <a href="#how">How</a>
32
+ <a href="/openapi.json">OpenAPI</a>
33
+ <a class="btn solid nav-cta" href="/health">Live</a>
34
+ </nav>
35
+ </div>
36
+ </header>
37
+
38
+ <section class="hero">
39
+ <div class="wrap hero-inner">
40
+ <p class="hero-badge mono"><span class="live-dot"></span> <span id="hero-badge-text">58 Live Endpoints · Base · Solana · Polygon</span></p>
41
+ <h1>Agent trust intelligence<br/><span class="grad">as a service</span></h1>
42
+ <p class="hero-lead">Guard, attest, comply and audit every x402 payment — before the money moves. No API keys. No signup. USDC is the only gate.</p>
43
+ <div class="hero-actions">
44
+ <a class="btn solid" href="#agents">Browse 58 APIs →</a>
45
+ <a class="btn ghost" href="/openapi.json">OpenAPI spec</a>
46
+ <a class="btn ghost" href="https://github.com/mimranchohan/x402-trust-layer" target="_blank" rel="noopener">GitHub</a>
47
+ </div>
48
+ <div class="hero-terminal">
49
+ <div class="term-chrome">
50
+ <span class="dot r"></span><span class="dot y"></span><span class="dot g"></span>
51
+ <span class="term-title mono">trust-terminal — x402trustlayer.xyz</span>
52
+ <span class="term-live mono">LIVE</span>
53
+ </div>
54
+ <div class="term-body mono" id="hero-terminal"></div>
55
+ </div>
56
+ <a class="scroll-hint" href="#stats">Scroll ↓</a>
57
+ </div>
58
+ </section>
59
+
60
+ <section class="stats" id="stats">
61
+ <div class="wrap stats-grid">
62
+ <div class="stat"><div class="stat-n" data-count="58" id="s-endpoints">58</div><div class="stat-l">ENDPOINTS</div></div>
63
+ <div class="stat"><div class="stat-n" data-count="100" id="s-verified">100%</div><div class="stat-l">% VERIFIED</div></div>
64
+ <div class="stat"><div class="stat-n" data-count="3" id="s-chains">3</div><div class="stat-l">NETWORKS</div></div>
65
+ <div class="stat"><div class="stat-n mono" id="s-cheapest">$0.02</div><div class="stat-l">CHEAPEST CALL</div></div>
66
+ </div>
67
+ </section>
68
+
69
+ <section class="pad" id="about">
70
+ <div class="wrap split">
71
+ <div>
72
+ <p class="kicker">What is x402 Trust Layer</p>
73
+ <h2>Raw payments are risky.<br/>Trust is everything.</h2>
74
+ </div>
75
+ <div class="prose">
76
+ <p>x402 Trust Layer is the control plane between AI agents and the open x402 marketplace. Every call decides <em>whether</em> to pay, <em>whom</em> to trust, <em>which rail</em> to use, and <em>what to do</em> when something goes wrong.</p>
77
+ <p>Built for agent fleets that handle real money — finance teams that need audit trails, developers wiring OpenDexter, and sellers who want verified attestations before accepting payment.</p>
78
+ <div class="tag-row">
79
+ <span class="tag mono">x402 + MPP</span>
80
+ <span class="tag mono">Base · Solana · Polygon</span>
81
+ <span class="tag mono">Dexter facilitator</span>
82
+ <span class="tag mono">OpenDexter MCP</span>
83
+ </div>
84
+ </div>
85
+ </div>
86
+ </section>
87
+
88
+ <section class="pad dim" id="why">
89
+ <div class="wrap">
90
+ <p class="kicker">Why x402 Trust Layer</p>
91
+ <h2>Built for the agentic web</h2>
92
+ <div class="features" id="features-grid">
93
+ <div class="feat"><div class="feat-ic">◎</div><h3>4-Layer Architecture</h3><p>Guard → Attestation → Compliance → Settlement Ops. Compose individually or bundle in one preflight.</p></div>
94
+ <div class="feat"><div class="feat-ic">⬡</div><h3>Pay-Per-Call via x402</h3><p>No API keys, no subscriptions. USDC micropayments on Base and Solana through Dexter.</p></div>
95
+ <div class="feat"><div class="feat-ic">⚡</div><h3>Discovery-ready</h3><p>58 paid routes in OpenAPI, <code>/.well-known/x402</code>, and <code>llms.txt</code> — run <code>npm run ci</code> before deploy.</p></div>
96
+ <div class="feat"><div class="feat-ic">⊡</div><h3>Multichain Native</h3><p>Base + Solana out of the box. Automatic facilitator failover when one rail degrades.</p></div>
97
+ <div class="feat"><div class="feat-ic">◇</div><h3>Tier-1 Enterprise</h3><p>KYM merchant trust, AP2 mandates, Visa dispute codes, SOC2 ledgers — nobody else ships these.</p></div>
98
+ <div class="feat"><div class="feat-ic">⟐</div><h3>Structured Trust Signals</h3><p>Every response: confidence, checks_passed, security grade, buyer guidance — not raw booleans.</p></div>
99
+ </div>
100
+ </div>
101
+ </section>
102
+
103
+ <section class="pad" id="agents">
104
+ <div class="wrap">
105
+ <div class="section-head-row">
106
+ <div>
107
+ <p class="kicker">// x402 API</p>
108
+ <h2>58 APIs. Pay-per-call.<br/>No keys required.</h2>
109
+ <p class="section-desc">Standard HTTP + x402 protocol. Get 402, sign USDC, retry — receive trust signals, compliance records, and settlement proof.</p>
110
+ </div>
111
+ <div class="toolbar">
112
+ <input type="search" id="api-search" class="search mono" placeholder="Search agents…"/>
113
+ <div class="view-toggle">
114
+ <button type="button" class="vt active" data-view="terminal">Terminal</button>
115
+ <button type="button" class="vt" data-view="cards">Cards</button>
116
+ </div>
117
+ </div>
118
+ </div>
119
+ <div class="tier-nav" id="tier-nav"></div>
120
+
121
+ <div class="terminal-panel" id="view-terminal">
122
+ <div class="term-chrome">
123
+ <span class="dot r"></span><span class="dot y"></span><span class="dot g"></span>
124
+ <span class="term-title mono">x402-api — <span id="api-count">58</span> routes</span>
125
+ </div>
126
+ <div class="term-list mono" id="terminal-list"></div>
127
+ </div>
128
+
129
+ <div class="api-grid hidden" id="view-cards"></div>
130
+ <div class="agent-detail-panel hidden" id="agent-detail">
131
+ <div class="detail-dialog">
132
+ <button type="button" class="detail-close" id="detail-close" aria-label="Close">×</button>
133
+ <div id="detail-content"></div>
134
+ </div>
135
+ </div>
136
+ </div>
137
+ </section>
138
+
139
+ <section class="pad dim" id="how">
140
+ <div class="wrap">
141
+ <p class="kicker">How it works</p>
142
+ <h2>Request. Pay. Get trust signals.</h2>
143
+ <div class="steps">
144
+ <div class="step active"><div class="step-n mono">01</div><h3>Call</h3><p>Hit any endpoint — no signup, no API key. Standard HTTP POST or GET.</p><pre class="step-code mono">POST /api/guard/pre-x402</pre></div>
145
+ <div class="step"><div class="step-n mono">02</div><h3>Pay</h3><p>Receive HTTP 402 + payment challenge. Sign USDC micropayment via Dexter facilitator.</p><pre class="step-code mono">402 → sign → X-Payment header</pre></div>
146
+ <div class="step"><div class="step-n mono">03</div><h3>Receive</h3><p>Retry with proof. Get structured trust output — grade, confidence, next steps.</p><pre class="step-code mono">200 · allowed: true · grade: A</pre></div>
147
+ </div>
148
+ <div class="flow-terminal mono">
149
+ <span class="flow-line">Request</span> → <span class="flow-line">x402 challenge</span> → <span class="flow-line">Sign + retry</span> → <span class="flow-ok">200 · trust signal ready</span>
150
+ </div>
151
+ </div>
152
+ </section>
153
+
154
+ <section class="pad">
155
+ <div class="wrap split">
156
+ <div>
157
+ <p class="kicker">Dual payment rail</p>
158
+ <h2>x402 + MPP sessions</h2>
159
+ <ul class="check-list">
160
+ <li>✓ x402: Base + Solana via Dexter (gas sponsored)</li>
161
+ <li>✓ MPP: batch sessions at <code>/api/mpp/session</code></li>
162
+ <li>✓ Production Docker on Railway — persistent SQLite at <code>/app/data</code></li>
163
+ <li>✓ OpenAPI 3.1 + <code>/.well-known/x402</code> discovery</li>
164
+ <li>✓ OpenDexter MCP compatible</li>
165
+ </ul>
166
+ </div>
167
+ <div class="layers-stack" id="layers-grid"></div>
168
+ </div>
169
+ </section>
170
+
171
+ <section class="pad cta-section">
172
+ <div class="wrap cta-inner">
173
+ <h2>Agent payments.<br/>Trust-first.</h2>
174
+ <p>No signup. No API key. Just pay per call with USDC.<br/>Base · Solana — pick your rail.</p>
175
+ <div class="hero-actions hero-actions-center">
176
+ <a class="btn solid" href="#agents">Explore all 58 APIs</a>
177
+ <a class="btn ghost" href="/discovery">Discovery manifest</a>
178
+ </div>
179
+ </div>
180
+ </section>
181
+
182
+ <footer class="footer">
183
+ <div class="wrap foot-in">
184
+ <a class="brand" href="/"><img src="/assets/x402-trustlayer-logo.svg" alt=""/><span class="brand-text">x402<span class="dim">trustlayer</span></span></a>
185
+ <nav class="foot-links mono">
186
+ <a href="https://x402trustlayer.xyz">x402trustlayer.xyz</a>
187
+ <a href="/openapi.json">OpenAPI</a>
188
+ <a href="/health">Status</a>
189
+ <a href="https://x402gle.com/servers/x402trustlayer.xyz" target="_blank" rel="noopener">x402gle</a>
190
+ <a href="https://github.com/mimranchohan/x402-trust-layer" target="_blank" rel="noopener">GitHub</a>
191
+ </nav>
192
+ </div>
193
+ <p class="wrap foot-note mono">x402 Trust Layer · 58 paid APIs · Guard · Attest · Comply · Protocol v4 · <a href="https://www.npmjs.com/package/x402-trust-layer">npm</a> · © 2026</p>
194
+ </footer>
195
+
196
+ <script src="/landing.js?v=6"></script>
197
+ </body>
198
+ </html>
@@ -0,0 +1,342 @@
1
+ :root{
2
+ --bg:#050608;--bg2:#0a0d12;--panel:#0d1117;--panel2:#111820;
3
+ --line:#1a2332;--line2:#243044;
4
+ --txt:#e6edf3;--muted:#8b949e;--dim:#484f58;
5
+ --accent:#16C7C0;--accent2:#3dd9d2;--accent-d:rgba(22,199,192,.1);--accent-b:rgba(22,199,192,.35);
6
+ --green:#3fb950;
7
+ --max:1140px;
8
+ --page-pad:clamp(12px,3.5vw,24px);
9
+ --section-pad:clamp(40px,7vw,80px);
10
+ --nav-h:64px;
11
+ }
12
+ *,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
13
+ html{
14
+ scroll-behavior:smooth;
15
+ -webkit-text-size-adjust:100%;
16
+ width:100%;
17
+ overflow-x:clip;
18
+ }
19
+ body{
20
+ font-family:Inter,system-ui,sans-serif;
21
+ background:var(--bg);
22
+ color:var(--txt);
23
+ line-height:1.6;
24
+ -webkit-font-smoothing:antialiased;
25
+ overflow-x:clip;
26
+ min-width:0;
27
+ width:100%;
28
+ }
29
+ img,svg{max-width:100%;height:auto;display:block}
30
+ .mono{font-family:"IBM Plex Mono",ui-monospace,monospace}
31
+ a{color:inherit;text-decoration:none}
32
+ .wrap{
33
+ max-width:var(--max);
34
+ margin:0 auto;
35
+ padding:0 var(--page-pad);
36
+ width:100%;
37
+ }
38
+
39
+ .grid-bg{position:fixed;inset:0;pointer-events:none;z-index:0;
40
+ background-image:linear-gradient(rgba(255,255,255,.025) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.025) 1px,transparent 1px);
41
+ background-size:64px 64px;mask-image:radial-gradient(ellipse 80% 60% at 50% 0%,#000 20%,transparent 70%)}
42
+ .glow{position:fixed;inset:0;pointer-events:none;z-index:0;
43
+ background:radial-gradient(800px 500px at 70% -10%,rgba(22,199,192,.12),transparent 60%)}
44
+
45
+ /* nav — logo left, menu right */
46
+ .nav{
47
+ position:sticky;top:0;left:0;right:0;z-index:200;
48
+ background:rgba(5,6,8,.92);backdrop-filter:blur(16px);
49
+ border-bottom:1px solid var(--line);width:100%;
50
+ padding:0 var(--page-pad);
51
+ }
52
+ .nav-shell{
53
+ display:flex;align-items:center;justify-content:space-between;
54
+ gap:12px;height:var(--nav-h);width:100%;max-width:100%;
55
+ }
56
+ .brand{display:flex;align-items:center;gap:10px;font-weight:600;flex-shrink:0;min-width:0}
57
+ .brand img{height:32px;width:32px;flex-shrink:0}
58
+ .brand-text{font-size:clamp(13px,2.5vw,15px);letter-spacing:-.3px;white-space:nowrap}
59
+ .brand-text .dim{color:var(--dim);font-weight:400}
60
+ .nav-menu{
61
+ display:flex;align-items:center;justify-content:flex-end;
62
+ gap:clamp(10px,1.8vw,24px);flex-shrink:1;min-width:0;
63
+ font-size:clamp(11px,1.4vw,13px);color:var(--muted);
64
+ margin-left:auto;
65
+ }
66
+ .nav-menu a{white-space:nowrap;flex-shrink:0}
67
+ .nav-menu a:hover{color:var(--accent)}
68
+ .nav-menu .nav-cta{
69
+ flex-shrink:0;padding:7px 14px;font-size:clamp(11px,1.4vw,13px);
70
+ }
71
+
72
+ .btn{
73
+ display:inline-flex;align-items:center;justify-content:center;
74
+ padding:8px 16px;border-radius:8px;font-size:13px;font-weight:600;
75
+ border:1px solid var(--accent-b);background:var(--accent-d);color:var(--accent);
76
+ transition:.15s;cursor:pointer;font-family:inherit;max-width:100%;
77
+ }
78
+ .btn:hover{background:rgba(22,199,192,.2)}
79
+ .btn.solid{background:var(--accent);color:#041816;border-color:var(--accent)}
80
+ .btn.ghost{background:transparent;border-color:var(--line);color:var(--txt)}
81
+
82
+ section{position:relative;z-index:1;width:100%;max-width:100%}
83
+
84
+ /* hero */
85
+ .hero{padding:var(--section-pad) 0 clamp(28px,5vw,40px);text-align:center;width:100%}
86
+ .hero-inner{width:100%;max-width:100%}
87
+ .hero-badge{
88
+ display:inline-flex;align-items:center;gap:8px;max-width:100%;
89
+ font-size:11px;color:var(--muted);border:1px solid var(--line);
90
+ padding:5px 14px;border-radius:999px;margin-bottom:clamp(16px,4vw,28px);
91
+ }
92
+ .live-dot{width:6px;height:6px;border-radius:50%;background:var(--green);box-shadow:0 0 8px var(--green);animation:pulse 2s infinite;flex-shrink:0}
93
+ @keyframes pulse{0%,100%{opacity:1}50%{opacity:.4}}
94
+ .hero h1{
95
+ font-size:clamp(28px,7vw,64px);font-weight:700;line-height:1.08;
96
+ letter-spacing:clamp(-1px,-0.5vw,-2px);word-wrap:break-word;overflow-wrap:break-word;
97
+ }
98
+ .hero h1 .grad{background:linear-gradient(135deg,var(--accent),var(--accent2));-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}
99
+ .hero-lead{
100
+ margin:clamp(14px,3vw,20px) auto 0;max-width:min(540px,100%);
101
+ font-size:clamp(15px,2.5vw,17px);color:var(--muted);padding:0 4px;
102
+ }
103
+ .hero-actions{display:flex;flex-wrap:wrap;gap:10px;justify-content:center;margin-top:clamp(20px,4vw,28px);width:100%}
104
+ .hero-actions-center{margin-top:clamp(16px,3vw,24px)}
105
+ .hero-terminal{
106
+ margin-top:clamp(28px,5vw,48px);text-align:left;
107
+ border:1px solid var(--line);border-radius:12px;overflow:hidden;
108
+ background:var(--panel);max-width:min(680px,100%);width:100%;
109
+ margin-left:auto;margin-right:auto;
110
+ }
111
+ .term-chrome{display:flex;align-items:center;gap:8px;padding:10px 14px;background:var(--panel2);border-bottom:1px solid var(--line);min-width:0}
112
+ .term-chrome .dot{width:10px;height:10px;border-radius:50%;flex-shrink:0}
113
+ .term-chrome .r{background:#ff5f57}.term-chrome .y{background:#febc2e}.term-chrome .g{background:#28c840}
114
+ .term-title{flex:1;font-size:10px;color:var(--dim);margin-left:4px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
115
+ .term-live{font-size:10px;color:var(--green);letter-spacing:1px;flex-shrink:0}
116
+ .term-body,.term-list{padding:clamp(12px,3vw,16px);font-size:clamp(10px,2vw,12px);line-height:1.9;color:var(--muted)}
117
+ .term-body{max-height:220px;overflow:hidden}
118
+ .term-line{display:flex;justify-content:space-between;gap:12px;align-items:flex-start}
119
+ .term-line .path{color:var(--accent);min-width:0;word-break:break-all;overflow-wrap:anywhere;flex:1}
120
+ .term-line .price{color:var(--txt);flex-shrink:0}
121
+ .cursor-blink{color:var(--accent);animation:blink 1s step-end infinite}
122
+ @keyframes blink{50%{opacity:0}}
123
+ .scroll-hint{display:inline-block;margin-top:clamp(20px,4vw,32px);font-size:12px;color:var(--dim);animation:float 2s ease-in-out infinite}
124
+ @keyframes float{0%,100%{transform:translateY(0)}50%{transform:translateY(6px)}}
125
+
126
+ /* stats */
127
+ .stats{padding:clamp(32px,5vw,48px) 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line);background:var(--bg2);width:100%}
128
+ .stats-grid{
129
+ display:grid;grid-template-columns:repeat(4,minmax(0,1fr));
130
+ gap:1px;background:var(--line);border:1px solid var(--line);border-radius:12px;overflow:hidden;width:100%;
131
+ }
132
+ .stat{padding:clamp(16px,3vw,20px);text-align:center;background:var(--bg2)}
133
+ .stat-n{font-size:clamp(24px,5vw,40px);font-weight:700;letter-spacing:-1px;color:var(--txt)}
134
+ .stat-l{font-size:10px;color:var(--dim);letter-spacing:1.5px;margin-top:6px}
135
+
136
+ /* sections */
137
+ .pad{padding:var(--section-pad) 0;width:100%}
138
+ .pad.dim{background:var(--bg2);border-top:1px solid var(--line);border-bottom:1px solid var(--line)}
139
+ .kicker{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:1.5px;color:var(--accent);margin-bottom:12px}
140
+ h2{font-size:clamp(22px,5vw,42px);font-weight:700;letter-spacing:-1px;line-height:1.12;word-wrap:break-word;overflow-wrap:break-word}
141
+ .split{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:clamp(24px,5vw,48px);align-items:start;width:100%}
142
+ .prose{color:var(--muted);font-size:clamp(14px,2vw,15px);display:flex;flex-direction:column;gap:16px;min-width:0}
143
+ .prose em{color:var(--txt);font-style:normal}
144
+ .tag-row{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px}
145
+ .tag{font-size:11px;padding:4px 10px;border:1px solid var(--line);border-radius:6px;color:var(--muted)}
146
+
147
+ /* features */
148
+ .features{
149
+ display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,260px),1fr));
150
+ gap:12px;margin-top:clamp(24px,4vw,40px);width:100%;
151
+ }
152
+ .feat{background:var(--panel);padding:clamp(18px,3vw,28px);border:1px solid var(--line);border-radius:12px;min-width:0}
153
+ .feat-ic{font-size:22px;color:var(--accent);margin-bottom:12px}
154
+ .feat h3{font-size:15px;font-weight:600;margin-bottom:8px}
155
+ .feat p{font-size:13px;color:var(--muted);line-height:1.55}
156
+
157
+ /* agents section */
158
+ #agents{overflow:hidden}
159
+ .section-head-row{display:flex;flex-wrap:wrap;justify-content:space-between;gap:20px;margin-bottom:24px;align-items:flex-end;width:100%}
160
+ .section-head-row > div:first-child{flex:1;min-width:min(100%,280px)}
161
+ .section-desc{color:var(--muted);font-size:14px;margin-top:12px;max-width:100%}
162
+ .toolbar{display:flex;flex-wrap:wrap;gap:10px;align-items:center;width:100%;max-width:100%;flex:1;min-width:min(100%,260px)}
163
+ .search{
164
+ padding:8px 14px;border-radius:8px;border:1px solid var(--line);
165
+ background:var(--panel);color:var(--txt);font-size:12px;
166
+ width:100%;min-width:0;flex:1 1 160px;outline:none;max-width:100%;
167
+ }
168
+ .search:focus{border-color:var(--accent-b)}
169
+ .view-toggle{display:flex;border:1px solid var(--line);border-radius:8px;overflow:hidden;flex-shrink:0}
170
+ .vt{padding:7px 14px;font-size:11px;background:var(--panel);color:var(--muted);border:none;cursor:pointer;font-family:"IBM Plex Mono",monospace;white-space:nowrap}
171
+ .vt.active{background:var(--accent-d);color:var(--accent)}
172
+ .tier-nav{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:16px;width:100%}
173
+ .tier-pill{padding:5px 12px;border-radius:999px;border:1px solid var(--line);background:transparent;color:var(--muted);font-size:11px;cursor:pointer;font-family:"IBM Plex Mono",monospace;transition:.15s;max-width:100%}
174
+ .tier-pill:hover,.tier-pill.active{border-color:var(--accent-b);color:var(--accent);background:var(--accent-d)}
175
+
176
+ .terminal-panel{border:1px solid var(--line);border-radius:12px;overflow:hidden;background:var(--panel);width:100%;max-width:100%}
177
+ .term-list{max-height:none;padding:0;overflow-x:hidden;width:100%}
178
+ .term-row{
179
+ display:grid;grid-template-columns:minmax(40px,72px) minmax(0,1fr) auto;
180
+ gap:8px 12px;padding:12px clamp(12px,3vw,16px);
181
+ border-bottom:1px solid var(--line);cursor:pointer;transition:.12s;align-items:start;width:100%;
182
+ }
183
+ .term-row:hover{background:rgba(22,199,192,.04)}
184
+ .term-row:last-child{border-bottom:none}
185
+ .term-row > div:nth-child(2){min-width:0}
186
+ .term-row .method{font-size:10px;color:var(--dim);padding-top:2px}
187
+ .term-row .path-main{color:var(--accent);font-size:clamp(10px,2vw,12px);word-break:break-all;overflow-wrap:anywhere}
188
+ .term-row .path-name{color:var(--txt);font-size:11px;margin-top:2px;word-break:break-word}
189
+ .term-row .price-tag{color:var(--txt);font-size:12px;font-weight:600;white-space:nowrap;align-self:start}
190
+ .term-row .tier-tag{font-size:9px;color:var(--dim);text-transform:uppercase;letter-spacing:.5px;margin-top:4px;line-height:1.4;word-break:break-word}
191
+
192
+ .hidden{display:none!important}
193
+
194
+ /* cards view */
195
+ .api-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,260px),1fr));gap:12px;width:100%}
196
+ .api-card{border:1px solid var(--line);border-radius:10px;background:var(--panel);padding:clamp(16px,3vw,20px);cursor:pointer;transition:.15s;min-width:0}
197
+ .api-card:hover{border-color:var(--accent-b)}
198
+ .api-card-head{display:flex;justify-content:space-between;align-items:flex-start;gap:8px;margin-bottom:8px;flex-wrap:wrap}
199
+ .api-tier{font-size:9px;text-transform:uppercase;letter-spacing:.6px;padding:3px 8px;border-radius:4px;background:var(--accent-d);color:var(--accent);border:1px solid var(--accent-b)}
200
+ .api-price{font-family:"IBM Plex Mono",monospace;font-size:13px;font-weight:600;flex-shrink:0}
201
+ .api-name{font-size:clamp(15px,3vw,16px);font-weight:600;margin-bottom:4px;word-break:break-word}
202
+ .api-route{font-size:11px;color:var(--dim);margin-bottom:10px;word-break:break-all}
203
+ .api-summary{font-size:13px;color:var(--muted);line-height:1.5}
204
+
205
+ /* detail panel */
206
+ .agent-detail-panel{
207
+ position:fixed;inset:0;z-index:200;background:rgba(0,0,0,.75);backdrop-filter:blur(8px);
208
+ display:flex;align-items:flex-start;justify-content:center;
209
+ padding:max(12px,env(safe-area-inset-top)) var(--page-pad) max(12px,env(safe-area-inset-bottom));
210
+ overflow-y:auto;-webkit-overflow-scrolling:touch;
211
+ }
212
+ .agent-detail-panel.hidden{display:none!important}
213
+ .detail-dialog{position:relative;width:100%;max-width:640px;margin:auto 0}
214
+ .detail-close{
215
+ position:sticky;top:0;float:right;z-index:2;margin:0 0 -36px;
216
+ background:var(--panel2);border:1px solid var(--line);color:var(--txt);
217
+ font-size:22px;width:36px;height:36px;border-radius:8px;cursor:pointer;
218
+ display:flex;align-items:center;justify-content:center;
219
+ }
220
+ .detail-close:hover{border-color:var(--accent-b);color:var(--accent)}
221
+ #detail-content{
222
+ background:var(--panel);border:1px solid var(--line);border-radius:16px;
223
+ padding:clamp(20px,4vw,32px);padding-top:48px;width:100%;
224
+ max-height:none;overflow:visible;
225
+ }
226
+ .detail-head{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:20px}
227
+ .detail-head h3{font-size:clamp(18px,4vw,22px);letter-spacing:-.5px;word-break:break-word;flex:1;min-width:0}
228
+ .detail-price{font-family:"IBM Plex Mono",monospace;font-size:18px;color:var(--accent);font-weight:600;flex-shrink:0}
229
+ .detail-route{font-size:12px;color:var(--dim);margin:8px 0 16px;word-break:break-all}
230
+ .detail-block{margin-bottom:18px;min-width:0}
231
+ .detail-block h4{font-size:10px;text-transform:uppercase;letter-spacing:1px;color:var(--dim);margin-bottom:8px}
232
+ .detail-block p{font-size:14px;color:var(--muted);line-height:1.55;word-break:break-word}
233
+ .chips{display:flex;flex-wrap:wrap;gap:5px}
234
+ .chip{font-family:"IBM Plex Mono",monospace;font-size:10px;padding:3px 8px;border:1px solid var(--line);border-radius:4px;color:var(--muted);background:var(--bg);word-break:break-word;max-width:100%}
235
+ .code-block{
236
+ font-family:"IBM Plex Mono",monospace;font-size:clamp(10px,2vw,11px);
237
+ background:var(--bg);border:1px solid var(--line);border-radius:8px;
238
+ padding:12px;overflow-x:auto;color:#cbd5e1;white-space:pre-wrap;word-break:break-all;margin-top:8px;max-width:100%;
239
+ }
240
+
241
+ /* how it works */
242
+ .steps{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,240px),1fr));gap:16px;margin-top:clamp(24px,4vw,40px);width:100%}
243
+ .step{border:1px solid var(--line);border-radius:12px;padding:clamp(18px,3vw,24px);background:var(--panel);min-width:0}
244
+ .step-n{font-size:11px;color:var(--accent);margin-bottom:12px}
245
+ .step h3{font-size:16px;margin-bottom:8px}
246
+ .step p{font-size:13px;color:var(--muted);margin-bottom:12px}
247
+ .step-code{
248
+ font-size:clamp(10px,2vw,11px);color:var(--accent);background:var(--bg);
249
+ padding:10px;border-radius:6px;border:1px solid var(--line);
250
+ overflow-x:auto;white-space:pre-wrap;word-break:break-all;max-width:100%;
251
+ }
252
+ .flow-terminal{
253
+ margin-top:clamp(20px,4vw,32px);padding:clamp(12px,3vw,16px) clamp(14px,3vw,20px);
254
+ border:1px solid var(--line);border-radius:10px;background:var(--panel);
255
+ font-size:clamp(10px,2.5vw,12px);text-align:center;color:var(--dim);
256
+ line-height:1.7;word-break:break-word;width:100%;
257
+ }
258
+ .flow-ok{color:var(--green)}
259
+
260
+ .check-list{list-style:none;display:flex;flex-direction:column;gap:10px;margin-top:20px;font-size:clamp(13px,2vw,14px);color:var(--muted)}
261
+ .check-list li{word-break:break-word}
262
+ .check-list code{font-family:"IBM Plex Mono",monospace;font-size:11px;color:var(--accent);word-break:break-all}
263
+
264
+ .layers-stack{display:flex;flex-direction:column;gap:10px;width:100%;min-width:0}
265
+ .layer-card{border:1px solid var(--line);border-radius:10px;padding:clamp(14px,3vw,18px) clamp(16px,3vw,20px);background:var(--panel)}
266
+ .layer-num{font-family:"IBM Plex Mono",monospace;font-size:11px;color:var(--accent)}
267
+ .layer-card h3{font-size:15px;margin-top:6px;font-weight:600}
268
+ .layer-card p{font-size:13px;color:var(--muted);margin-top:4px}
269
+
270
+ .cta-section{text-align:center;border-top:1px solid var(--line);width:100%}
271
+ .cta-inner{width:100%;max-width:100%}
272
+ .cta-inner h2{font-size:clamp(26px,5vw,48px)}
273
+ .cta-inner p{color:var(--muted);margin-top:16px;font-size:clamp(14px,2.5vw,16px);padding:0 4px}
274
+
275
+ .footer{border-top:1px solid var(--line);padding:clamp(28px,5vw,40px) 0 clamp(24px,4vw,32px);background:var(--bg2);width:100%}
276
+ .foot-in{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:20px;width:100%}
277
+ .foot-links{display:flex;flex-wrap:wrap;gap:clamp(12px,3vw,20px);font-size:12px;color:var(--muted)}
278
+ .foot-links a:hover{color:var(--accent)}
279
+ .foot-note{font-size:11px;color:var(--dim);margin-top:20px;line-height:1.6;word-break:break-word}
280
+
281
+ /* ── Responsive breakpoints ── */
282
+
283
+ /* Tablet */
284
+ @media(max-width:1024px){
285
+ .split{grid-template-columns:1fr}
286
+ .stats-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
287
+ }
288
+
289
+ /* Mobile — same horizontal bar, fixed at top */
290
+ @media(max-width:768px){
291
+ .nav{position:fixed;top:0;left:0;right:0}
292
+ body{padding-top:var(--nav-h)}
293
+ .nav-menu{
294
+ overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;
295
+ scrollbar-width:none;justify-content:flex-end;
296
+ gap:10px;padding-left:8px;
297
+ }
298
+ .nav-menu::-webkit-scrollbar{display:none}
299
+ .nav-menu .nav-cta{padding:6px 10px}
300
+ .brand-text .dim{display:none}
301
+
302
+ .section-head-row{flex-direction:column;align-items:stretch}
303
+ .toolbar{flex-direction:column;align-items:stretch}
304
+ .view-toggle{width:100%}
305
+ .vt{flex:1;text-align:center}
306
+ .term-row{
307
+ grid-template-columns:minmax(36px,48px) minmax(0,1fr);
308
+ grid-template-areas:"method price" "path path" "tier tier";
309
+ }
310
+ .term-row .method{grid-area:method}
311
+ .term-row .price-tag{grid-area:price;justify-self:end}
312
+ .term-row > div:nth-child(2){grid-area:path}
313
+ .term-row .tier-tag{grid-area:tier}
314
+ .term-body{max-height:180px}
315
+ .foot-in{flex-direction:column;align-items:flex-start}
316
+ .foot-links{flex-direction:column;gap:12px}
317
+ }
318
+
319
+ @media(max-width:480px){
320
+ :root{--nav-h:56px}
321
+ .nav-shell{height:var(--nav-h)}
322
+ .nav-menu{gap:8px;font-size:10px}
323
+ .nav-menu .nav-cta{padding:5px 8px;font-size:10px}
324
+ .stats-grid{grid-template-columns:1fr 1fr}
325
+ .hero-actions{flex-direction:column;align-items:stretch}
326
+ .hero-actions .btn{width:100%}
327
+ .hero-actions-center{align-items:center}
328
+ .hero-actions-center .btn{width:auto;min-width:min(100%,240px)}
329
+ .tier-pill{font-size:10px;padding:4px 10px}
330
+ .brand-text .dim{display:none}
331
+ }
332
+
333
+ @media(max-width:360px){
334
+ .stats-grid{grid-template-columns:1fr}
335
+ .hero h1{font-size:26px}
336
+ .stat-n{font-size:22px}
337
+ }
338
+
339
+ /* Large screens — comfortable reading width */
340
+ @media(min-width:1400px){
341
+ :root{--max:1200px}
342
+ }