@oracle-agent/oracle 0.11.0 → 0.13.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 (487) hide show
  1. package/LICENSE +115 -201
  2. package/README.md +13 -516
  3. package/bin/oracle.mjs +19 -27
  4. package/package.json +15 -98
  5. package/CONTRIBUTING.md +0 -98
  6. package/SECURITY.md +0 -89
  7. package/SETUP.md +0 -381
  8. package/artifacts/inscription/oracle-was-here-preview.png +0 -0
  9. package/artifacts/inscription/oracle-was-here.svg +0 -1
  10. package/artifacts/specialist-packs/oracle-full-crypto.json +0 -295
  11. package/bin/desk-server.mjs +0 -440
  12. package/bin/oracle-data-mcp.mjs +0 -1019
  13. package/bin/oracle-init.mjs +0 -496
  14. package/bin/oracle-public-server.mjs +0 -36
  15. package/bin/oracle-route.mjs +0 -254
  16. package/bin/oracle-scan.mjs +0 -192
  17. package/bin/oracle-upgrade.mjs +0 -42
  18. package/docs/adding-a-chain.md +0 -229
  19. package/docs/architecture.md +0 -138
  20. package/docs/cli.md +0 -47
  21. package/docs/connectors.md +0 -13
  22. package/docs/oracle-pack-standard.md +0 -29
  23. package/docs/profiles.md +0 -151
  24. package/docs/public-surface.md +0 -133
  25. package/examples/add-a-chain.mjs +0 -65
  26. package/examples/oracle-pack-template.mjs +0 -38
  27. package/examples/research-a-token.mjs +0 -70
  28. package/plugins/oracle-owner-gate/__init__.py +0 -227
  29. package/plugins/oracle-owner-gate/plugin.yaml +0 -9
  30. package/profiles/_template/SOUL.md +0 -54
  31. package/profiles/_template/profile.json +0 -22
  32. package/profiles/bitcoin-agent/SOUL.md +0 -31
  33. package/profiles/bitcoin-agent/profile.json +0 -32
  34. package/profiles/hyperliquid-agent/SOUL.md +0 -34
  35. package/profiles/hyperliquid-agent/profile.json +0 -37
  36. package/profiles/oracle/SOUL.md +0 -107
  37. package/profiles/oracle/profile.json +0 -39
  38. package/profiles/polymarket-agent/SOUL.md +0 -35
  39. package/profiles/polymarket-agent/profile.json +0 -34
  40. package/profiles/profile.schema.json +0 -90
  41. package/profiles/protocol-builder/SOUL.md +0 -57
  42. package/profiles/protocol-builder/profile.json +0 -39
  43. package/profiles/robinhood-agent/SOUL.md +0 -53
  44. package/profiles/robinhood-agent/profile.json +0 -40
  45. package/profiles/solana-agent/SOUL.md +0 -37
  46. package/profiles/solana-agent/profile.json +0 -37
  47. package/profiles/stable-agent/SOUL.md +0 -43
  48. package/profiles/stable-agent/profile.json +0 -37
  49. package/protocols/templates/safe-erc20/SECURITY.md +0 -16
  50. package/protocols/templates/safe-erc20/foundry.toml +0 -12
  51. package/protocols/templates/safe-erc20/remappings.txt +0 -2
  52. package/protocols/templates/safe-erc20/src/SafeERC20.sol +0 -53
  53. package/protocols/templates/safe-erc20/test/SafeERC20.t.sol +0 -72
  54. package/public/agent-connect/app.js +0 -84
  55. package/public/agent-connect/index.html +0 -83
  56. package/public/agent-connect/styles.css +0 -70
  57. package/public/index.html +0 -12
  58. package/public/oracle-console/app.js +0 -272
  59. package/public/oracle-console/bitcoin-wallets.js +0 -206
  60. package/public/oracle-console/index.html +0 -91
  61. package/public/oracle-console/styles.css +0 -239
  62. package/public/oracle-splash/assets/cli-chain-hyperliquid.jpg +0 -0
  63. package/public/oracle-splash/assets/hero/orb.avif +0 -0
  64. package/public/oracle-splash/assets/hero/orb.webm +0 -0
  65. package/public/oracle-splash/assets/llms/claude.svg +0 -1
  66. package/public/oracle-splash/assets/llms/codex-icon.svg +0 -1
  67. package/public/oracle-splash/assets/llms/codex.svg +0 -1
  68. package/public/oracle-splash/assets/llms/cursor-icon.svg +0 -12
  69. package/public/oracle-splash/assets/llms/cursor.svg +0 -17
  70. package/public/oracle-splash/assets/llms/deepseek.svg +0 -1
  71. package/public/oracle-splash/assets/llms/gemini-icon.svg +0 -1
  72. package/public/oracle-splash/assets/llms/gemini.svg +0 -1
  73. package/public/oracle-splash/assets/llms/grok.svg +0 -8
  74. package/public/oracle-splash/assets/llms/hermes.png +0 -0
  75. package/public/oracle-splash/assets/llms/kimi-icon.svg +0 -1
  76. package/public/oracle-splash/assets/llms/kimi.svg +0 -1
  77. package/public/oracle-splash/assets/llms/manus.svg +0 -18
  78. package/public/oracle-splash/assets/llms/openclaw.svg +0 -22
  79. package/public/oracle-splash/assets/llms/perplexity.svg +0 -1
  80. package/public/oracle-splash/assets/llms/qwen.svg +0 -1
  81. package/public/oracle-splash/assets/llms/windsurf.svg +0 -1
  82. package/public/oracle-splash/assets/protocols/abcdex.png +0 -0
  83. package/public/oracle-splash/assets/protocols/across.png +0 -0
  84. package/public/oracle-splash/assets/protocols/aerodrome.png +0 -0
  85. package/public/oracle-splash/assets/protocols/balancer.png +0 -0
  86. package/public/oracle-splash/assets/protocols/cowswap.png +0 -0
  87. package/public/oracle-splash/assets/protocols/curve.png +0 -0
  88. package/public/oracle-splash/assets/protocols/dreamcash.png +0 -0
  89. package/public/oracle-splash/assets/protocols/felix.png +0 -0
  90. package/public/oracle-splash/assets/protocols/gmx.png +0 -0
  91. package/public/oracle-splash/assets/protocols/hyena.png +0 -0
  92. package/public/oracle-splash/assets/protocols/hyperbeat.png +0 -0
  93. package/public/oracle-splash/assets/protocols/hyperliquid.png +0 -0
  94. package/public/oracle-splash/assets/protocols/hyperswap.png +0 -0
  95. package/public/oracle-splash/assets/protocols/jupiter.png +0 -0
  96. package/public/oracle-splash/assets/protocols/kinetiq.png +0 -0
  97. package/public/oracle-splash/assets/protocols/lfj.png +0 -0
  98. package/public/oracle-splash/assets/protocols/lifi.png +0 -0
  99. package/public/oracle-splash/assets/protocols/magic-eden.png +0 -0
  100. package/public/oracle-splash/assets/protocols/morpho.png +0 -0
  101. package/public/oracle-splash/assets/protocols/odos.png +0 -0
  102. package/public/oracle-splash/assets/protocols/oneinch.png +0 -0
  103. package/public/oracle-splash/assets/protocols/opensea.png +0 -0
  104. package/public/oracle-splash/assets/protocols/pancakeswap.png +0 -0
  105. package/public/oracle-splash/assets/protocols/paragon.png +0 -0
  106. package/public/oracle-splash/assets/protocols/paraswap.png +0 -0
  107. package/public/oracle-splash/assets/protocols/pendle.png +0 -0
  108. package/public/oracle-splash/assets/protocols/polymarket.png +0 -0
  109. package/public/oracle-splash/assets/protocols/quickswap.png +0 -0
  110. package/public/oracle-splash/assets/protocols/relay.png +0 -0
  111. package/public/oracle-splash/assets/protocols/stargate.png +0 -0
  112. package/public/oracle-splash/assets/protocols/tradexyz.png +0 -0
  113. package/public/oracle-splash/assets/protocols/uniswap.png +0 -0
  114. package/public/oracle-splash/assets/protocols/velodrome.png +0 -0
  115. package/public/oracle-splash/assets/protocols/ventuals.png +0 -0
  116. package/public/oracle-splash/assets/wordmarks/across-icon.webp +0 -0
  117. package/public/oracle-splash/assets/wordmarks/across.svg +0 -4
  118. package/public/oracle-splash/assets/wordmarks/aerodrome.svg +0 -23
  119. package/public/oracle-splash/assets/wordmarks/balancer.svg +0 -3
  120. package/public/oracle-splash/assets/wordmarks/cowswap.svg +0 -1
  121. package/public/oracle-splash/assets/wordmarks/curve.png +0 -0
  122. package/public/oracle-splash/assets/wordmarks/gmx.svg +0 -13
  123. package/public/oracle-splash/assets/wordmarks/hop-icon.webp +0 -0
  124. package/public/oracle-splash/assets/wordmarks/hyena.svg +0 -7
  125. package/public/oracle-splash/assets/wordmarks/hyperliquid.svg +0 -21
  126. package/public/oracle-splash/assets/wordmarks/hyperswap.svg +0 -13
  127. package/public/oracle-splash/assets/wordmarks/jupiter.svg +0 -35
  128. package/public/oracle-splash/assets/wordmarks/kinetiq.svg +0 -1
  129. package/public/oracle-splash/assets/wordmarks/lfj.webp +0 -0
  130. package/public/oracle-splash/assets/wordmarks/lifi.png +0 -0
  131. package/public/oracle-splash/assets/wordmarks/magic-eden.svg +0 -1
  132. package/public/oracle-splash/assets/wordmarks/markets.svg +0 -1
  133. package/public/oracle-splash/assets/wordmarks/morpho.svg +0 -1
  134. package/public/oracle-splash/assets/wordmarks/odos.svg +0 -3
  135. package/public/oracle-splash/assets/wordmarks/oneinch-icon.webp +0 -0
  136. package/public/oracle-splash/assets/wordmarks/oneinch.svg +0 -6
  137. package/public/oracle-splash/assets/wordmarks/opensea-icon.svg +0 -17
  138. package/public/oracle-splash/assets/wordmarks/opensea.svg +0 -1
  139. package/public/oracle-splash/assets/wordmarks/outcome.svg +0 -16
  140. package/public/oracle-splash/assets/wordmarks/pancakeswap.svg +0 -18
  141. package/public/oracle-splash/assets/wordmarks/paragon.svg +0 -9
  142. package/public/oracle-splash/assets/wordmarks/paraswap.svg +0 -16
  143. package/public/oracle-splash/assets/wordmarks/pendle.png +0 -0
  144. package/public/oracle-splash/assets/wordmarks/polymarket.png +0 -0
  145. package/public/oracle-splash/assets/wordmarks/quickswap.png +0 -0
  146. package/public/oracle-splash/assets/wordmarks/relay.svg +0 -8
  147. package/public/oracle-splash/assets/wordmarks/satflow-icon.png +0 -0
  148. package/public/oracle-splash/assets/wordmarks/stargate-icon.webp +0 -0
  149. package/public/oracle-splash/assets/wordmarks/stargate.svg +0 -15
  150. package/public/oracle-splash/assets/wordmarks/uniswap.svg +0 -18
  151. package/public/oracle-splash/assets/wordmarks/velodrome.svg +0 -84
  152. package/public/oracle-splash/assets/wordmarks/xyz.svg +0 -12
  153. package/public/oracle-splash/assets/wordmarks/zerox-icon.webp +0 -0
  154. package/public/oracle-splash/brand/aave.webp +0 -0
  155. package/public/oracle-splash/brand/aavev2.webp +0 -0
  156. package/public/oracle-splash/brand/aborean.webp +0 -0
  157. package/public/oracle-splash/brand/across.webp +0 -0
  158. package/public/oracle-splash/brand/aerodrome.webp +0 -0
  159. package/public/oracle-splash/brand/afi.webp +0 -0
  160. package/public/oracle-splash/brand/arcus.webp +0 -0
  161. package/public/oracle-splash/brand/aster.webp +0 -0
  162. package/public/oracle-splash/brand/avant.webp +0 -0
  163. package/public/oracle-splash/brand/balancer.webp +0 -0
  164. package/public/oracle-splash/brand/beefy.webp +0 -0
  165. package/public/oracle-splash/brand/benqi.webp +0 -0
  166. package/public/oracle-splash/brand/bestinslot.ico +0 -0
  167. package/public/oracle-splash/brand/bitfi.webp +0 -0
  168. package/public/oracle-splash/brand/bonkswap.webp +0 -0
  169. package/public/oracle-splash/brand/bouncebit.webp +0 -0
  170. package/public/oracle-splash/brand/camelot.webp +0 -0
  171. package/public/oracle-splash/brand/compound.webp +0 -0
  172. package/public/oracle-splash/brand/concrete.webp +0 -0
  173. package/public/oracle-splash/brand/cow.webp +0 -0
  174. package/public/oracle-splash/brand/curve.webp +0 -0
  175. package/public/oracle-splash/brand/derive.webp +0 -0
  176. package/public/oracle-splash/brand/dolomite.webp +0 -0
  177. package/public/oracle-splash/brand/eigenlayer.webp +0 -0
  178. package/public/oracle-splash/brand/ekubo.webp +0 -0
  179. package/public/oracle-splash/brand/ethena.webp +0 -0
  180. package/public/oracle-splash/brand/etherfi.webp +0 -0
  181. package/public/oracle-splash/brand/etherfiborrow.webp +0 -0
  182. package/public/oracle-splash/brand/felix.webp +0 -0
  183. package/public/oracle-splash/brand/fluid.webp +0 -0
  184. package/public/oracle-splash/brand/fluxbeam.webp +0 -0
  185. package/public/oracle-splash/brand/folks.webp +0 -0
  186. package/public/oracle-splash/brand/fortyacres.webp +0 -0
  187. package/public/oracle-splash/brand/gainsnetwork.webp +0 -0
  188. package/public/oracle-splash/brand/gassss.webp +0 -0
  189. package/public/oracle-splash/brand/gmx.webp +0 -0
  190. package/public/oracle-splash/brand/harmonix.webp +0 -0
  191. package/public/oracle-splash/brand/hlorderbook.webp +0 -0
  192. package/public/oracle-splash/brand/hlp.webp +0 -0
  193. package/public/oracle-splash/brand/hop.webp +0 -0
  194. package/public/oracle-splash/brand/hyperbeat.webp +0 -0
  195. package/public/oracle-splash/brand/hyperlend.webp +0 -0
  196. package/public/oracle-splash/brand/hyperliquid.webp +0 -0
  197. package/public/oracle-splash/brand/hyperliquidhpl.webp +0 -0
  198. package/public/oracle-splash/brand/hyperliquidspot.webp +0 -0
  199. package/public/oracle-splash/brand/hyperswap.webp +0 -0
  200. package/public/oracle-splash/brand/hypha.webp +0 -0
  201. package/public/oracle-splash/brand/joedex.webp +0 -0
  202. package/public/oracle-splash/brand/jupiter.webp +0 -0
  203. package/public/oracle-splash/brand/kelp.webp +0 -0
  204. package/public/oracle-splash/brand/kinetiq.webp +0 -0
  205. package/public/oracle-splash/brand/kmhype.webp +0 -0
  206. package/public/oracle-splash/brand/kona.webp +0 -0
  207. package/public/oracle-splash/brand/konalend.webp +0 -0
  208. package/public/oracle-splash/brand/lfj.webp +0 -0
  209. package/public/oracle-splash/brand/lido.webp +0 -0
  210. package/public/oracle-splash/brand/lifi.webp +0 -0
  211. package/public/oracle-splash/brand/lighter.webp +0 -0
  212. package/public/oracle-splash/brand/lista.webp +0 -0
  213. package/public/oracle-splash/brand/loopedhype.webp +0 -0
  214. package/public/oracle-splash/brand/lorenzo.webp +0 -0
  215. package/public/oracle-splash/brand/magic-eden.webp +0 -0
  216. package/public/oracle-splash/brand/magiceden.webp +0 -0
  217. package/public/oracle-splash/brand/mempool.png +0 -0
  218. package/public/oracle-splash/brand/meteora.webp +0 -0
  219. package/public/oracle-splash/brand/morpho.webp +0 -0
  220. package/public/oracle-splash/brand/myriad.webp +0 -0
  221. package/public/oracle-splash/brand/noxa.webp +0 -0
  222. package/public/oracle-splash/brand/odos.webp +0 -0
  223. package/public/oracle-splash/brand/oneinch.webp +0 -0
  224. package/public/oracle-splash/brand/openbook.webp +0 -0
  225. package/public/oracle-splash/brand/opensea.webp +0 -0
  226. package/public/oracle-splash/brand/orca.webp +0 -0
  227. package/public/oracle-splash/brand/ordinals.png +0 -0
  228. package/public/oracle-splash/brand/ostium.webp +0 -0
  229. package/public/oracle-splash/brand/pancakeswap.webp +0 -0
  230. package/public/oracle-splash/brand/pendle.webp +0 -0
  231. package/public/oracle-splash/brand/perena.webp +0 -0
  232. package/public/oracle-splash/brand/pharaoh.webp +0 -0
  233. package/public/oracle-splash/brand/phoenix.webp +0 -0
  234. package/public/oracle-splash/brand/polymarket.webp +0 -0
  235. package/public/oracle-splash/brand/polynomial.webp +0 -0
  236. package/public/oracle-splash/brand/projectx.webp +0 -0
  237. package/public/oracle-splash/brand/pumpfun.webp +0 -0
  238. package/public/oracle-splash/brand/quickswap.webp +0 -0
  239. package/public/oracle-splash/brand/rain.webp +0 -0
  240. package/public/oracle-splash/brand/raydium.webp +0 -0
  241. package/public/oracle-splash/brand/relay.webp +0 -0
  242. package/public/oracle-splash/brand/rocketpool.webp +0 -0
  243. package/public/oracle-splash/brand/saber.webp +0 -0
  244. package/public/oracle-splash/brand/sakuraswap.webp +0 -0
  245. package/public/oracle-splash/brand/sanctum.webp +0 -0
  246. package/public/oracle-splash/brand/satflow.png +0 -0
  247. package/public/oracle-splash/brand/sierra.webp +0 -0
  248. package/public/oracle-splash/brand/sky.webp +0 -0
  249. package/public/oracle-splash/brand/solv.webp +0 -0
  250. package/public/oracle-splash/brand/spark.webp +0 -0
  251. package/public/oracle-splash/brand/sparksavings.webp +0 -0
  252. package/public/oracle-splash/brand/sphere.webp +0 -0
  253. package/public/oracle-splash/brand/ssv.webp +0 -0
  254. package/public/oracle-splash/brand/stabble.webp +0 -0
  255. package/public/oracle-splash/brand/stableswap.webp +0 -0
  256. package/public/oracle-splash/brand/stakewise.webp +0 -0
  257. package/public/oracle-splash/brand/stargate.webp +0 -0
  258. package/public/oracle-splash/brand/sthype.webp +0 -0
  259. package/public/oracle-splash/brand/sushiswap.webp +0 -0
  260. package/public/oracle-splash/brand/unisat.png +0 -0
  261. package/public/oracle-splash/brand/uniswap.webp +0 -0
  262. package/public/oracle-splash/brand/uniswapv2.webp +0 -0
  263. package/public/oracle-splash/brand/uniswapv4.webp +0 -0
  264. package/public/oracle-splash/brand/unit.webp +0 -0
  265. package/public/oracle-splash/brand/velodrome.webp +0 -0
  266. package/public/oracle-splash/brand/velora.webp +0 -0
  267. package/public/oracle-splash/brand/venus.webp +0 -0
  268. package/public/oracle-splash/brand/wbeth.webp +0 -0
  269. package/public/oracle-splash/brand/xsy.webp +0 -0
  270. package/public/oracle-splash/brand/yieldyak.webp +0 -0
  271. package/public/oracle-splash/brand/zerobase.webp +0 -0
  272. package/public/oracle-splash/brand/zerox.webp +0 -0
  273. package/public/oracle-splash/favicon.ico +0 -0
  274. package/public/oracle-splash/favicon.svg +0 -6
  275. package/public/oracle-splash/index.html +0 -1558
  276. package/public/oracle-splash/mesh-graph.png +0 -0
  277. package/public/oracle-splash/mesh-graph.svg +0 -216
  278. package/scripts/adversarial-bench.mjs +0 -114
  279. package/scripts/build-inscription.py +0 -230
  280. package/scripts/check-doc-drift.mjs +0 -123
  281. package/scripts/check-test-count.mjs +0 -105
  282. package/scripts/e2e-hl-markets.mjs +0 -21
  283. package/scripts/e2e-hl-perps.mjs +0 -48
  284. package/scripts/e2e-hypercore-staking.mjs +0 -128
  285. package/scripts/e2e-solana-bitcoin.mjs +0 -183
  286. package/scripts/protocol-template-gate.mjs +0 -15
  287. package/scripts/public-api-scan.mjs +0 -23
  288. package/scripts/secret-scan.mjs +0 -181
  289. package/scripts/verify-v3-venues.mjs +0 -192
  290. package/skills/balance/SKILL.md +0 -176
  291. package/skills/oracle-action-semantics/SKILL.md +0 -40
  292. package/skills/oracle-best-execution/SKILL.md +0 -127
  293. package/skills/oracle-bitcoin/SKILL.md +0 -53
  294. package/skills/oracle-chain-graphs-telegram-cards/SKILL.md +0 -59
  295. package/skills/oracle-chat/SKILL.md +0 -61
  296. package/skills/oracle-chat/chain.SKILL.md +0 -31
  297. package/skills/oracle-chat/setup.SKILL.md +0 -37
  298. package/skills/oracle-circuit-breaker/SKILL.md +0 -51
  299. package/skills/oracle-contract-research/SKILL.md +0 -55
  300. package/skills/oracle-desk/SKILL.md +0 -58
  301. package/skills/oracle-dex-launch/SKILL.md +0 -38
  302. package/skills/oracle-grants/SKILL.md +0 -69
  303. package/skills/oracle-hypercore-staking/SKILL.md +0 -57
  304. package/skills/oracle-hyperliquid/SKILL.md +0 -56
  305. package/skills/oracle-meme-token-sniper/SKILL.md +0 -73
  306. package/skills/oracle-multichain-nft-launch/SKILL.md +0 -338
  307. package/skills/oracle-multichain-token-launch/SKILL.md +0 -300
  308. package/skills/oracle-nft-gacha-launch/SKILL.md +0 -48
  309. package/skills/oracle-nft-mint-gas-war/SKILL.md +0 -63
  310. package/skills/oracle-polymarket/SKILL.md +0 -60
  311. package/skills/oracle-protocol-builder/SKILL.md +0 -59
  312. package/skills/oracle-protocol-security/SKILL.md +0 -60
  313. package/skills/oracle-public-product/SKILL.md +0 -44
  314. package/skills/oracle-receipts/SKILL.md +0 -52
  315. package/skills/oracle-rfq-tokenized-assets/SKILL.md +0 -69
  316. package/skills/oracle-smart-wallet-scanner/SKILL.md +0 -49
  317. package/skills/oracle-solana/SKILL.md +0 -65
  318. package/skills/oracle-solana-nft/SKILL.md +0 -54
  319. package/skills/oracle-token-research/SKILL.md +0 -67
  320. package/skins/oracle.yaml +0 -56
  321. package/src/action-receipts.mjs +0 -265
  322. package/src/action-semantics.mjs +0 -62
  323. package/src/address-book.mjs +0 -208
  324. package/src/agent-auth.mjs +0 -206
  325. package/src/approval-guard.mjs +0 -282
  326. package/src/attestation-secret.mjs +0 -88
  327. package/src/audit-log.mjs +0 -196
  328. package/src/auth/oauth.mjs +0 -672
  329. package/src/auto-slippage.mjs +0 -378
  330. package/src/capability-posture.mjs +0 -125
  331. package/src/chains.mjs +0 -62
  332. package/src/cli/chain-catalog.mjs +0 -215
  333. package/src/cli/chain-state.mjs +0 -74
  334. package/src/cli/commands/auth.mjs +0 -193
  335. package/src/cli/commands/bootstrap.mjs +0 -87
  336. package/src/cli/commands/chain.mjs +0 -143
  337. package/src/cli/commands/chat.mjs +0 -434
  338. package/src/cli/commands/credential.mjs +0 -9
  339. package/src/cli/commands/data-mcp.mjs +0 -18
  340. package/src/cli/commands/data.mjs +0 -75
  341. package/src/cli/commands/doctor.mjs +0 -136
  342. package/src/cli/commands/help.mjs +0 -7
  343. package/src/cli/commands/init.mjs +0 -27
  344. package/src/cli/commands/mcp.mjs +0 -142
  345. package/src/cli/commands/model.mjs +0 -99
  346. package/src/cli/commands/prepare.mjs +0 -12
  347. package/src/cli/commands/public.mjs +0 -20
  348. package/src/cli/commands/route.mjs +0 -12
  349. package/src/cli/commands/runner.mjs +0 -9
  350. package/src/cli/commands/scan.mjs +0 -12
  351. package/src/cli/commands/setup.mjs +0 -275
  352. package/src/cli/commands/sign.mjs +0 -21
  353. package/src/cli/commands/signer.mjs +0 -9
  354. package/src/cli/commands/upgrade.mjs +0 -12
  355. package/src/cli/commands/vault.mjs +0 -9
  356. package/src/cli/commands/version.mjs +0 -22
  357. package/src/cli/first-run.mjs +0 -23
  358. package/src/cli/kernel.mjs +0 -239
  359. package/src/cli/mcp-targets/chatgpt.mjs +0 -51
  360. package/src/cli/mcp-targets/claude-code.mjs +0 -39
  361. package/src/cli/mcp-targets/claude-desktop.mjs +0 -24
  362. package/src/cli/mcp-targets/codex.mjs +0 -41
  363. package/src/cli/mcp-targets/shared.mjs +0 -61
  364. package/src/cli/messaging-platforms.mjs +0 -209
  365. package/src/cli/model-config.mjs +0 -70
  366. package/src/cli/operator-dispatch.mjs +0 -258
  367. package/src/cli/oracle-harness.py +0 -415
  368. package/src/cli/paths.mjs +0 -83
  369. package/src/cli/runtime.mjs +0 -351
  370. package/src/cli/setup-state.mjs +0 -168
  371. package/src/cli/spawn-child.mjs +0 -43
  372. package/src/data/catalog.mjs +0 -585
  373. package/src/data/desk-data.mjs +0 -695
  374. package/src/data/http.mjs +0 -253
  375. package/src/data/provider-endpoint.mjs +0 -94
  376. package/src/data/providers/aerodrome.mjs +0 -245
  377. package/src/data/providers/balancer.mjs +0 -209
  378. package/src/data/providers/bitcoin-esplora.mjs +0 -216
  379. package/src/data/providers/bitcoin-meta.mjs +0 -378
  380. package/src/data/providers/blockscout.mjs +0 -14
  381. package/src/data/providers/bridges.mjs +0 -242
  382. package/src/data/providers/cowswap.mjs +0 -415
  383. package/src/data/providers/curve.mjs +0 -201
  384. package/src/data/providers/defillama.mjs +0 -88
  385. package/src/data/providers/dexscreener.mjs +0 -43
  386. package/src/data/providers/evm-rpc.mjs +0 -225
  387. package/src/data/providers/geckoterminal.mjs +0 -34
  388. package/src/data/providers/gmx.mjs +0 -496
  389. package/src/data/providers/hl-assets.mjs +0 -165
  390. package/src/data/providers/hl-info.mjs +0 -108
  391. package/src/data/providers/hl-markets.mjs +0 -210
  392. package/src/data/providers/hl-outcome.mjs +0 -61
  393. package/src/data/providers/hl-perps.mjs +0 -387
  394. package/src/data/providers/hl-staking.mjs +0 -353
  395. package/src/data/providers/hl-ws.mjs +0 -119
  396. package/src/data/providers/hyperevm-dex.mjs +0 -49
  397. package/src/data/providers/jupiter-venues.mjs +0 -119
  398. package/src/data/providers/jupiter.mjs +0 -315
  399. package/src/data/providers/lifi.mjs +0 -151
  400. package/src/data/providers/magiceden-sol.mjs +0 -406
  401. package/src/data/providers/morpho.mjs +0 -177
  402. package/src/data/providers/nft-gallery.mjs +0 -163
  403. package/src/data/providers/nft-portfolio.mjs +0 -494
  404. package/src/data/providers/odos.mjs +0 -156
  405. package/src/data/providers/oneinch.mjs +0 -174
  406. package/src/data/providers/opensea-multichain.mjs +0 -136
  407. package/src/data/providers/opensea-nft.mjs +0 -371
  408. package/src/data/providers/paraswap.mjs +0 -118
  409. package/src/data/providers/pendle.mjs +0 -188
  410. package/src/data/providers/poly-clob.mjs +0 -283
  411. package/src/data/providers/poly-public.mjs +0 -96
  412. package/src/data/providers/poly-ws.mjs +0 -103
  413. package/src/data/providers/portfolio-history.mjs +0 -394
  414. package/src/data/providers/portfolio.mjs +0 -594
  415. package/src/data/providers/rfq.mjs +0 -15
  416. package/src/data/providers/rh-agent.mjs +0 -59
  417. package/src/data/providers/satflow.mjs +0 -341
  418. package/src/data/providers/signed-material-guard.mjs +0 -108
  419. package/src/data/providers/solana-rpc.mjs +0 -197
  420. package/src/data/providers/uniswap-v3.mjs +0 -349
  421. package/src/data/providers/uniswap-v4.mjs +0 -414
  422. package/src/data/providers/zerox.mjs +0 -167
  423. package/src/data/public-api-scan.mjs +0 -61
  424. package/src/data/quote-placeholder.mjs +0 -31
  425. package/src/exact-integer.mjs +0 -72
  426. package/src/exec-policy.mjs +0 -455
  427. package/src/flags.mjs +0 -15
  428. package/src/fresh-window.mjs +0 -76
  429. package/src/gmx-attestation.mjs +0 -176
  430. package/src/index.mjs +0 -100
  431. package/src/nft-gas-war-guard.mjs +0 -139
  432. package/src/onboarding/agent-keys.mjs +0 -161
  433. package/src/onboarding/harness-configs.mjs +0 -102
  434. package/src/onboarding/index.mjs +0 -18
  435. package/src/onboarding/tiers.mjs +0 -139
  436. package/src/oracle-env.mjs +0 -47
  437. package/src/portfolio-risk.mjs +0 -170
  438. package/src/prepare-envelope.mjs +0 -204
  439. package/src/profile-upgrade.mjs +0 -277
  440. package/src/protocol-execution.mjs +0 -84
  441. package/src/protocol-templates/gate.mjs +0 -179
  442. package/src/protocol-templates/prepare-deploy.mjs +0 -81
  443. package/src/public-api/buzz-integration.mjs +0 -256
  444. package/src/public-api/connect-agent.mjs +0 -416
  445. package/src/public-api/grants.mjs +0 -142
  446. package/src/public-api/http.mjs +0 -389
  447. package/src/public-control/aa-adapter.mjs +0 -402
  448. package/src/public-control/build-registry.mjs +0 -227
  449. package/src/public-control/bundler-client.mjs +0 -357
  450. package/src/public-control/grant-indexer.mjs +0 -296
  451. package/src/public-control/policy-render.mjs +0 -69
  452. package/src/public-control/policy-schema.mjs +0 -318
  453. package/src/public-control/runtime-config.mjs +0 -275
  454. package/src/public-control/session-key-model.mjs +0 -374
  455. package/src/public-control/session-orchestrator.mjs +0 -412
  456. package/src/rfq/intent.mjs +0 -180
  457. package/src/rfq/sources.mjs +0 -181
  458. package/src/route-attestation.mjs +0 -132
  459. package/src/router/best-execution.mjs +0 -326
  460. package/src/router/index.mjs +0 -226
  461. package/src/router/prepare-bridge.mjs +0 -289
  462. package/src/router/prepare-route.mjs +0 -398
  463. package/src/router/proposal.mjs +0 -311
  464. package/src/router/risk-classifier.mjs +0 -119
  465. package/src/router/route-sources.mjs +0 -364
  466. package/src/scanner/chains.config.mjs +0 -430
  467. package/src/scanner/contract.mjs +0 -270
  468. package/src/scanner/evm-scanner.mjs +0 -394
  469. package/src/scanner/index.mjs +0 -9
  470. package/src/scanner/v2-venue.mjs +0 -335
  471. package/src/scanner/v3-venue.mjs +0 -290
  472. package/src/scopes.mjs +0 -44
  473. package/src/sell-simulation.mjs +0 -167
  474. package/src/signals/engine.mjs +0 -146
  475. package/src/signals/index.mjs +0 -1
  476. package/src/token-transfer-guard.mjs +0 -188
  477. package/src/tui/app.mjs +0 -438
  478. package/src/tui/backend.mjs +0 -145
  479. package/src/tui/format.mjs +0 -272
  480. package/src/tui/gateway-client.mjs +0 -177
  481. package/src/tui/input.mjs +0 -501
  482. package/src/tui/renderer.mjs +0 -443
  483. package/src/tui/standalone-client.mjs +0 -666
  484. package/src/tui/theme.mjs +0 -81
  485. package/src/vault-attestation.mjs +0 -146
  486. package/src/venues.mjs +0 -206
  487. package/src/watch-preferences.mjs +0 -85
@@ -1,1558 +0,0 @@
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.0" />
6
- <title>ORACLE</title>
7
- <link rel="icon" href="/favicon.svg" type="image/svg+xml">
8
- <link rel="shortcut icon" href="/favicon.ico">
9
- <meta name="description" content="ORACLE is a self-custodial agent control plane for wallets, markets, and protocol routes.">
10
- <meta name="theme-color" content="#0B1018" />
11
- <meta name="robots" content="noindex,nofollow" />
12
- <link rel="preconnect" href="https://fonts.googleapis.com" />
13
- <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
14
- <link href="https://fonts.googleapis.com/css2?family=Archivo+Black&family=Cormorant+Garamond:ital,wght@0,300;0,400;0,500;1,300;1,400;1,500&family=DM+Sans:wght@500;700&family=IBM+Plex+Mono:wght@400;500&family=Inter:wght@500;650;750;850&family=UnifrakturCook:wght@700&family=Manrope:wght@600;800&family=Outfit:wght@300;400;500;700&family=Sora:wght@500;700&family=Space+Grotesk:wght@500;700&display=swap" rel="stylesheet" />
15
- <style>
16
- :root{
17
- --bg:#0B1018;
18
- --panel:#111925;
19
- --panel-2:#152031;
20
- --blue:#7CC4FF;
21
- --blue2:#A7D8FF;
22
- --blue-dim:#3a6f99;
23
- --ink:#F4F9FE;
24
- --cool:#C9DAEC;
25
- --mute:#9FB8D2;
26
- --line:rgba(124,196,255,.14);
27
- --line-2:rgba(124,196,255,.24);
28
- --evm:#7CC4FF;
29
- --hl:#50D2C1;
30
- --rh:#d7ff4d;
31
- --sol:#9945FF;
32
- --poly:#3B82F6;
33
- --stable:#F0B90B;
34
- --display:"Cormorant Garamond",Georgia,"Times New Roman",serif;
35
- --sans:"Outfit",system-ui,sans-serif;
36
- --mono:"IBM Plex Mono",ui-monospace,monospace;
37
- --ease:cubic-bezier(.16,1,.3,1);
38
- --pad:clamp(18px,4vw,48px);
39
- --max:1100px;
40
- }
41
- *{box-sizing:border-box;margin:0;padding:0}
42
- html{scroll-behavior:smooth;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility}
43
- body{
44
- min-height:100dvh;background:var(--bg);color:var(--ink);position:relative;isolation:isolate;
45
- font-family:var(--sans);font-weight:400;overflow-x:hidden;
46
- }
47
- ::selection{background:var(--blue);color:#061018}
48
- a{color:inherit;text-decoration:none}
49
- button{font:inherit;color:inherit;background:none;border:0;cursor:pointer}
50
- img{display:inline-block}
51
-
52
- .grain{
53
- position:fixed;inset:-40%;z-index:40;pointer-events:none;opacity:.04;mix-blend-mode:soft-light;
54
- background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='220' height='220'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='2' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 .55 0'/></filter><rect width='100%25' height='100%25' filter='url(%23n)'/></svg>");
55
- }
56
-
57
- /* ── orbital oracle mark ───────────────────────────── */
58
- .orbital{position:relative;display:inline-block}
59
- .orbital svg{display:block;overflow:visible;width:100%;height:100%}
60
- .orbital .ring{transform-origin:50% 50%;fill:none;stroke:var(--blue);stroke-width:2;opacity:.55}
61
- .orbital .ring ellipse{vector-effect:non-scaling-stroke}
62
- .orbital .r1{animation:orb-spin 13s linear infinite}
63
- .orbital .r2{animation:orb-spin 21s linear infinite reverse;opacity:.4}
64
- .orbital .r3{animation:orb-spin 32s linear infinite;opacity:.28}
65
- .orbital .tickring{transform-origin:50% 50%;fill:none;stroke:rgba(124,196,255,.35);stroke-width:1.4;stroke-dasharray:2 7;animation:orb-spin 46s linear infinite reverse}
66
- .orbital .core{fill:var(--blue);animation:core-pulse 3.2s var(--ease) infinite}
67
- .orbital .halo{fill:none;stroke:rgba(124,196,255,.22);stroke-width:5;filter:blur(3px)}
68
- @keyframes orb-spin{to{transform:rotate(360deg)}}
69
- @keyframes core-pulse{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.6;transform:scale(1.06)}}
70
- @keyframes core-billboard{from{transform:rotateY(0deg) rotateX(-18deg) rotateZ(8deg)}to{transform:rotateY(-360deg) rotateX(-18deg) rotateZ(8deg)}}
71
- @keyframes orbit-travel{from{transform:rotateX(76deg) rotateZ(0deg) translateX(clamp(170px,23vw,280px))}to{transform:rotateX(76deg) rotateZ(360deg) translateX(clamp(170px,23vw,280px))}}
72
-
73
- .loader{
74
- position:fixed;inset:0;z-index:50;background:var(--bg);
75
- display:grid;place-items:center;
76
- transition:opacity .7s var(--ease),visibility .7s;
77
- }
78
- .loader.out{opacity:0;visibility:hidden;pointer-events:none}
79
- .loader-inner{display:flex;flex-direction:column;align-items:center;gap:18px}
80
- .loader-mark{width:64px;height:64px;filter:drop-shadow(0 0 18px rgba(124,196,255,.4))}
81
- .loader-word{font-family:var(--display);font-size:18px;letter-spacing:.08em;text-transform:none;color:var(--cool);font-style:italic}
82
- .loader-bar{width:120px;height:1px;background:rgba(124,196,255,.15);overflow:hidden}
83
- .loader-bar span{display:block;height:100%;width:0;background:var(--blue);transition:width 1.1s var(--ease)}
84
-
85
- .progress{
86
- position:fixed;top:0;left:0;right:0;height:2px;z-index:35;pointer-events:none;
87
- background:linear-gradient(90deg,var(--blue),var(--blue2));
88
- transform-origin:0 50%;transform:scaleX(0);
89
- box-shadow:0 0 12px rgba(124,196,255,.5);
90
- }
91
-
92
- .nav{
93
- position:fixed;top:0;left:0;right:0;z-index:30;
94
- display:grid;
95
- grid-template-columns:1fr auto;
96
- align-items:center;gap:16px;
97
- padding:14px var(--pad);
98
- background:rgba(11,16,24,.82);
99
- border-bottom:1px solid var(--line);
100
- }
101
- .brand{
102
- display:flex;align-items:center;gap:12px;
103
- font-family:var(--display);font-size:24px;font-weight:400;letter-spacing:.02em;
104
- text-transform:none;justify-self:start;
105
- }
106
- .brand .orbital{width:26px;height:26px;filter:drop-shadow(0 0 10px rgba(124,196,255,.6))}
107
- .nav-links{
108
- display:flex;align-items:center;gap:18px;justify-self:end;
109
- font-family:var(--mono);font-size:10px;letter-spacing:.18em;text-transform:uppercase;color:var(--cool);
110
- }
111
- .nav-links a{opacity:.78;transition:opacity .25s,color .25s}
112
- .nav-links a:hover{opacity:1;color:var(--blue2)}
113
- .nav-chip{
114
- font-family:var(--mono);font-size:9px;letter-spacing:.16em;text-transform:uppercase;
115
- border:1px solid rgba(124,196,255,.3);border-radius:999px;padding:7px 11px;color:var(--blue2);opacity:.95;
116
- }
117
- .nav-cta{
118
- border:1px solid rgba(124,196,255,.28);border-radius:999px;padding:10px 16px;color:var(--ink);
119
- transition:border-color .3s,color .3s,box-shadow .3s;
120
- }
121
- .nav-cta:hover{border-color:var(--blue);color:var(--blue2);box-shadow:0 0 0 1px rgba(124,196,255,.12)}
122
-
123
- /* fixed soft field behind content */
124
- #gl{position:fixed;inset:0;width:100%;height:100%;z-index:-1;display:block;opacity:.4;pointer-events:none}
125
- .veil{
126
- position:fixed;inset:0;z-index:1;pointer-events:none;
127
- background:
128
- radial-gradient(60% 50% at 50% 28%, rgba(124,196,255,.10), transparent 58%),
129
- linear-gradient(180deg, rgba(11,16,24,.12), rgba(11,16,24,.42));
130
- }
131
- main{position:relative;z-index:2;padding-top:84px}
132
-
133
-
134
- /* homepage */
135
- .home{
136
- min-height:calc(100dvh - 84px);
137
- display:grid;place-items:center;
138
- padding:clamp(20px,4vh,44px) var(--pad) clamp(56px,9vh,96px);
139
- position:relative;overflow:hidden;text-align:center;
140
- }
141
- .home::after{
142
- content:"";position:absolute;left:50%;bottom:22px;width:1px;height:74px;
143
- background:linear-gradient(180deg, rgba(124,196,255,.65), transparent);
144
- transform-origin:50% 0;animation:drop-line 2.8s var(--ease) infinite;
145
- }
146
- .home-inner{max-width:min(920px,100%);width:100%;margin:0 auto;position:relative}
147
- .hero-primary{min-width:0;display:flex;flex-direction:column;align-items:center}
148
- .home-kicker{
149
- font-family:var(--mono);font-size:10px;letter-spacing:.34em;text-transform:uppercase;color:var(--blue);
150
- margin-bottom:6px;position:relative;z-index:3;
151
- }
152
- .hero-stage{position:relative;width:100%;display:grid;place-items:center;min-height:clamp(360px,52vh,560px)}
153
- .hero-art{position:absolute;inset:0;display:grid;place-items:center;z-index:0;pointer-events:none}
154
- #orb-vid{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:min(74vw,620px);aspect-ratio:1;object-fit:contain;opacity:0;transition:opacity 1.4s var(--ease);mix-blend-mode:screen}
155
- #orb-vid.ready{opacity:.62}
156
- .blender-orb .hero-orb{display:none}
157
- .hero-orb{
158
- width:clamp(380px,50vw,640px);aspect-ratio:1;position:relative;transform-style:preserve-3d;
159
- animation:orb-slew 22s linear infinite;
160
- }
161
- .hero-orb .lat{position:absolute;inset:0;border-radius:50%;border:1.2px solid rgba(124,196,255,.42);transform-style:preserve-3d;box-shadow:0 0 26px rgba(124,196,255,.1), inset 0 0 34px rgba(124,196,255,.07)}
162
- .hero-orb .lat.l1{transform:rotateY(0deg);border-color:rgba(167,216,255,.62)}
163
- .hero-orb .lat.l2{transform:rotateY(45deg)}
164
- .hero-orb .lat.l3{transform:rotateY(90deg);border-color:rgba(167,216,255,.58)}
165
- .hero-orb .lat.l4{transform:rotateY(135deg)}
166
- .hero-orb .par{position:absolute;left:50%;top:50%;border-radius:50%;border:1px solid rgba(124,196,255,.3);transform-style:preserve-3d;box-shadow:inset 0 0 24px rgba(124,196,255,.06)}
167
- .hero-orb .par.p1{width:96%;height:96%;transform:translate(-50%,-50%) rotateX(90deg)}
168
- .hero-orb .par.p2{width:78%;height:78%;transform:translate(-50%,-50%) rotateX(90deg) translateZ(calc(clamp(380px,50vw,640px) * .31))}
169
- .hero-orb .par.p3{width:78%;height:78%;transform:translate(-50%,-50%) rotateX(90deg) translateZ(calc(clamp(380px,50vw,640px) * -.31))}
170
- .hero-orb .eq{position:absolute;inset:-4%;border-radius:50%;border:1.8px solid rgba(190,228,255,.82);transform:rotateX(76deg);box-shadow:0 0 44px rgba(124,196,255,.4), inset 0 0 30px rgba(167,216,255,.14)}
171
- .hero-orb .core-glow{
172
- position:absolute;inset:38%;border-radius:50%;
173
- transform:rotateZ(8deg) rotateX(-18deg);
174
- animation:core-billboard 22s linear infinite;
175
- background:
176
- radial-gradient(circle at 36% 30%, rgba(255,255,255,.95) 0%, rgba(214,238,255,.8) 12%, rgba(140,204,255,.55) 32%, rgba(74,150,214,.34) 56%, rgba(28,74,124,.22) 78%, rgba(14,34,62,.12) 100%);
177
- box-shadow:
178
- inset -12px -15px 34px rgba(6,16,32,.5),
179
- inset 8px 10px 26px rgba(210,238,255,.2),
180
- 0 0 60px rgba(124,196,255,.5),
181
- 0 0 140px rgba(124,196,255,.2);
182
- }
183
- .hero-orb .core-glow::before{
184
- content:"";position:absolute;left:22%;top:16%;width:26%;height:20%;border-radius:50%;
185
- background:radial-gradient(ellipse at 50% 50%, rgba(255,255,255,.9), rgba(255,255,255,.28) 44%, transparent 74%);
186
- transform:rotate(-24deg);
187
- }
188
- .hero-orb .core-glow::after{
189
- content:"";position:absolute;inset:-6%;border-radius:50%;pointer-events:none;
190
- background:radial-gradient(circle at 50% 50%, rgba(124,196,255,.3) 0%, rgba(124,196,255,.09) 46%, transparent 68%);
191
- animation:core-pulse 3.4s var(--ease) infinite;
192
- }
193
- .hero-orb .orbit-dot{position:absolute;width:9px;height:9px;border-radius:50%;background:radial-gradient(circle at 38% 34%, #fff, var(--blue2) 55%, rgba(124,196,255,.5));box-shadow:0 0 22px rgba(167,216,255,.95), 0 0 44px rgba(124,196,255,.4);left:calc(50% - 4.5px);top:calc(50% - 4.5px);transform-style:preserve-3d;animation:orbit-travel 14s linear infinite}
194
- .home-title{
195
- position:relative;z-index:2;
196
- font-family:var(--display);font-weight:300;font-size:clamp(72px,10vw,150px);line-height:.9;letter-spacing:-.045em;
197
- text-transform:uppercase;color:var(--ink);
198
- text-shadow:0 2px 30px rgba(0,0,0,.6);
199
- }
200
- .home-title em{font-style:italic;color:var(--blue2)}
201
- .hero-lockup{position:relative;z-index:2;display:flex;flex-direction:column;align-items:center}
202
- .hero-byline{margin-top:12px;font-family:var(--mono);font-size:10px;font-weight:500;letter-spacing:.28em;text-transform:uppercase;color:var(--blue2);position:relative;z-index:3}
203
- .hero-byline:hover{color:var(--ink)}
204
- .home-copy{position:relative;z-index:3;display:flex;flex-direction:column;align-items:center}
205
- .home-copy p:not(.home-kicker){max-width:56ch;color:#aac0d6;font-size:16px;line-height:1.7;margin:18px 0 0;text-shadow:0 1px 20px rgba(0,0,0,.65)}
206
- .home-actions{display:flex;flex-wrap:wrap;gap:14px;margin-top:26px;align-items:center;justify-content:center}
207
- .enter-cta{
208
- display:inline-flex;align-items:center;gap:12px;border:1px solid rgba(124,196,255,.45);border-radius:999px;
209
- padding:14px 22px;color:var(--ink);font-family:var(--mono);font-size:10px;letter-spacing:.18em;text-transform:uppercase;
210
- background:linear-gradient(180deg, rgba(124,196,255,.12), rgba(124,196,255,.035));
211
- box-shadow:0 0 0 1px rgba(124,196,255,.08),0 20px 46px rgba(0,0,0,.3);
212
- transition:transform .35s var(--ease),border-color .35s,box-shadow .35s;
213
- }
214
- .enter-cta::after{content:"↓";font-size:13px;color:var(--blue)}
215
- .enter-cta:hover{transform:translateY(-2px);border-color:var(--blue);box-shadow:0 0 0 1px rgba(124,196,255,.18),0 24px 58px rgba(0,0,0,.36)}
216
- .hero-note{font-family:var(--mono);font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:var(--mute)}
217
- @keyframes orb-slew{0%{transform:rotateX(18deg) rotateZ(-8deg) rotateY(0deg)}100%{transform:rotateX(18deg) rotateZ(-8deg) rotateY(360deg)}}
218
- @keyframes home-breathe{0%,100%{opacity:.65;transform:scale(1)}50%{opacity:1;transform:scale(1.07)}}
219
- @keyframes drop-line{0%,100%{opacity:.25;transform:translateX(-50%) scaleY(.45)}50%{opacity:1;transform:translateX(-50%) scaleY(1)}}
220
-
221
-
222
- .section{
223
- position:relative;z-index:2;max-width:var(--max);margin:0 auto;
224
- padding:clamp(56px,10vh,110px) var(--pad) 0;
225
- }
226
- .section:first-of-type{padding-top:clamp(18px,3vh,28px)}
227
- .section-label{
228
- font-family:var(--mono);font-size:10px;letter-spacing:.34em;text-transform:uppercase;color:var(--blue);margin-bottom:14px;
229
- display:inline-flex;align-items:center;gap:12px;
230
- }
231
- .section-title{
232
- font-family:var(--display);font-weight:400;
233
- font-size:clamp(34px,5vw,54px);line-height:1.06;letter-spacing:-.01em;
234
- max-width:18ch;margin-bottom:12px;
235
- }
236
- .section-title em{font-style:italic;color:var(--blue2)}
237
- .section-lede{max-width:52ch;color:#C9DAEC;font-size:16px;line-height:1.7;margin-bottom:clamp(28px,4vw,44px)}
238
-
239
- /* orchestration graph */
240
- .graph-shell{
241
- border:1px solid var(--line);border-radius:20px;overflow:hidden;
242
- background:linear-gradient(180deg, rgba(124,196,255,.04), transparent 42%), var(--panel);
243
- }
244
- .graph-top{
245
- display:flex;flex-wrap:wrap;justify-content:center;gap:10px;
246
- padding:14px 18px;border-bottom:1px solid var(--line);
247
- font-family:var(--mono);font-size:10.5px;letter-spacing:.16em;text-transform:uppercase;color:#9FB8D2;
248
- }
249
- .graph-top b{color:var(--blue);font-weight:500}
250
- .graph-canvas{padding:clamp(28px,4vw,40px) clamp(14px,2.5vw,24px) clamp(22px,3vw,30px);overflow:auto}
251
- .orch{width:min(1100px,100%);margin:0 auto;min-width:720px}
252
- .row{display:flex;justify-content:center;gap:14px;align-items:stretch}
253
- .row.profiles{
254
- display:grid;
255
- grid-template-columns:repeat(2,minmax(0,1fr));
256
- gap:10px;width:100%;
257
- }
258
- @media (min-width:900px){
259
- .row.profiles{grid-template-columns:repeat(3,minmax(0,1fr))}
260
- }
261
- @media (min-width:1180px){
262
- .row.profiles{grid-template-columns:repeat(4,minmax(0,1fr))}
263
- }
264
- .route-strip{
265
- display:grid;grid-template-columns:repeat(2,minmax(0,1fr));
266
- gap:1px;background:var(--line);border-top:1px solid var(--line);
267
- }
268
- @media (min-width:1100px){
269
- .route-strip{grid-template-columns:repeat(3,minmax(0,1fr))}
270
- }
271
- .node{
272
- border:1px solid rgba(124,196,255,.42);border-radius:14px;background:rgba(21,32,49,.92);
273
- padding:14px 12px;text-align:center;
274
- transition:border-color .4s var(--ease),transform .4s var(--ease),box-shadow .4s var(--ease);
275
- }
276
- .node:hover{transform:translate3d(0,-3px,0);box-shadow:0 14px 34px rgba(0,0,0,.32)}
277
- .node.hub{
278
- width:min(300px,100%);
279
- border-color:rgba(124,196,255,.5);
280
- background:linear-gradient(180deg, rgba(124,196,255,.12), rgba(11,16,24,.88));
281
- box-shadow:0 0 0 1px rgba(124,196,255,.08), 0 16px 40px rgba(0,0,0,.3);
282
- padding:18px 16px 20px;
283
- display:flex;flex-direction:column;align-items:center;
284
- }
285
- .node.hub .orbital{width:74px;height:74px;margin:2px 0 10px;filter:drop-shadow(0 0 20px rgba(124,196,255,.35))}
286
- .node .tag{font-family:var(--mono);font-size:10px;letter-spacing:.18em;text-transform:uppercase;color:#9FB8D2;margin-bottom:8px}
287
- .node.hub .tag{color:var(--blue)}
288
- .node .name{font-family:var(--display);font-size:22px;font-weight:500;color:#DCEAF6;line-height:1;letter-spacing:.01em;margin-bottom:6px}
289
- .node.hub .name{font-size:34px;font-weight:400;font-style:italic}
290
- .node .sub{font-family:var(--mono);font-size:11px;letter-spacing:.05em;color:#C9DAEC;line-height:1.5}
291
- .node.route{min-height:138px;display:flex;flex-direction:column;justify-content:flex-start;text-align:left;padding:14px}
292
- .node.route .name{font-size:18px;margin-bottom:8px}
293
- .node.route .chains{
294
- margin-top:auto;padding-top:10px;
295
- font-family:var(--mono);font-size:10px;letter-spacing:.04em;line-height:1.7;
296
- display:flex;flex-wrap:wrap;gap:4px 10px;align-items:center;
297
- }
298
- .ch{display:inline-flex;align-items:center;gap:5px;white-space:nowrap}
299
- .ch img{width:13px;height:13px;border-radius:50%;object-fit:cover;background:rgba(255,255,255,.06)}
300
- .node.add{
301
- border-style:dashed;border-color:rgba(124,196,255,.28);
302
- background:rgba(11,16,24,.35);
303
- min-height:138px;display:flex;flex-direction:column;justify-content:center;align-items:flex-start;
304
- text-align:left;padding:14px;
305
- }
306
- .node.add .name{font-size:18px;color:var(--blue2)}
307
- .node.add .sub{color:var(--mute)}
308
- .node.add:hover{border-color:rgba(124,196,255,.55);background:rgba(124,196,255,.06)}
309
-
310
- .builder-row{margin-top:0;display:flex;justify-content:center}
311
- .node.builder-sink{width:min(430px,100%);text-align:center;align-items:center;min-height:162px;position:relative}
312
- .node.builder-sink .name{font-size:26px}
313
- .node.builder-sink .chains{justify-content:center}
314
- .wires.funnel{height:62px}
315
- .wires.funnel path{stroke:rgba(255,176,137,.48)}
316
- .wires.funnel path:nth-child(2n){stroke:rgba(124,196,255,.32)}
317
- .wires.funnel circle{fill:#ffb089}
318
-
319
-
320
- /* protocol colors */
321
- .node.p-hl{border-color:rgba(80,210,193,.45);background:linear-gradient(180deg, rgba(80,210,193,.14), rgba(11,16,24,.88))}
322
- .node.p-hl .tag,.node.p-hl .name{color:var(--hl)}
323
- .node.p-hl .chains{color:rgba(80,210,193,.9)}
324
- .node.p-hl:hover{border-color:var(--hl);box-shadow:0 12px 30px rgba(80,210,193,.12)}
325
-
326
- .node.p-rh{border-color:rgba(215,255,77,.55);background:linear-gradient(180deg, rgba(215,255,77,.14), rgba(11,16,24,.88))}
327
- .node.p-rh .tag,.node.p-rh .name{color:var(--rh)}
328
- .node.p-rh .chains{color:rgba(215,255,77,.92)}
329
- .node.p-rh:hover{border-color:var(--rh);box-shadow:0 12px 30px rgba(215,255,77,.16)}
330
-
331
- .node.p-sol{border-color:rgba(153,69,255,.5);background:linear-gradient(180deg, rgba(153,69,255,.14), rgba(11,16,24,.88))}
332
- .node.p-sol .tag,.node.p-sol .name{color:#c4a0ff}
333
- .node.p-sol .chains{color:rgba(196,160,255,.9)}
334
- .node.p-sol:hover{border-color:var(--sol);box-shadow:0 12px 30px rgba(153,69,255,.14)}
335
-
336
- .node.p-poly{border-color:rgba(59,130,246,.5);background:linear-gradient(180deg, rgba(59,130,246,.14), rgba(11,16,24,.88))}
337
- .node.p-poly .tag,.node.p-poly .name{color:#93c5fd}
338
- .node.p-poly .chains{color:rgba(147,197,253,.9)}
339
- .node.p-poly:hover{border-color:var(--poly);box-shadow:0 12px 30px rgba(59,130,246,.14)}
340
-
341
- .node.p-stable{border-color:rgba(240,185,11,.5);background:linear-gradient(180deg, rgba(240,185,11,.12), rgba(11,16,24,.88))}
342
- .node.p-build{border-color:rgba(255,140,90,.55);background:linear-gradient(180deg, rgba(255,140,90,.14), rgba(11,16,24,.88))}
343
- .node.p-build .tag,.node.p-build .name{color:#ffb089}
344
- .node.p-build .chains{color:rgba(255,176,137,.92)}
345
- .node.p-build:hover{border-color:#ff8c5a;box-shadow:0 12px 30px rgba(255,140,90,.14)}
346
- .route-card.p-build .where{color:#ffb089}
347
- .route-card.p-build{box-shadow:inset 3px 0 0 #ff8c5a}
348
- .node.p-stable .tag,.node.p-stable .name{color:#fcd34d}
349
- .node.p-stable .chains{color:rgba(252,211,77,.9)}
350
- .node.p-stable:hover{border-color:var(--stable);box-shadow:0 12px 30px rgba(240,185,11,.12)}
351
-
352
- .route-card.p-hl .where{color:var(--hl)}
353
- .route-card.p-rh .where{color:var(--rh)}
354
- .route-card.p-sol .where{color:#c4a0ff}
355
- .route-card.p-poly .where{color:#93c5fd}
356
- .route-card.p-stable .where{color:#fcd34d}
357
- .route-card.p-add .where{color:var(--blue2)}
358
- .route-card.p-hl{box-shadow:inset 3px 0 0 var(--hl)}
359
- .route-card.p-rh{box-shadow:inset 3px 0 0 var(--rh)}
360
- .route-card.p-sol{box-shadow:inset 3px 0 0 var(--sol)}
361
- .route-card.p-poly{box-shadow:inset 3px 0 0 var(--poly)}
362
- .route-card.p-stable{box-shadow:inset 3px 0 0 var(--stable)}
363
- .route-card.p-add{box-shadow:inset 3px 0 0 rgba(124,196,255,.45);opacity:.92}
364
-
365
- .node.p-btc{border-color:rgba(247,147,26,.55);background:linear-gradient(180deg, rgba(247,147,26,.14), rgba(11,16,24,.88))}
366
- .node.p-btc .tag,.node.p-btc .name{color:#fbbf24}
367
- .node.p-btc .chains{color:rgba(251,191,36,.92)}
368
- .node.p-btc:hover{border-color:#f7931a;box-shadow:0 12px 30px rgba(247,147,26,.14)}
369
- .route-card.p-btc .where{color:#fbbf24}
370
- .route-card.p-btc{box-shadow:inset 3px 0 0 #f7931a}
371
-
372
- .node.p-evm{border-color:rgba(98,126,234,.5);background:linear-gradient(180deg, rgba(98,126,234,.14), rgba(11,16,24,.88))}
373
- .node.p-evm .tag,.node.p-evm .name{color:#a5b4fc}
374
- .node.p-evm .chains{color:rgba(165,180,252,.92)}
375
- .node.p-evm:hover{border-color:#627eea;box-shadow:0 12px 30px rgba(98,126,234,.14)}
376
- .route-card.p-evm .where{color:#a5b4fc}
377
- .route-card.p-evm{box-shadow:inset 3px 0 0 #627eea}
378
-
379
-
380
- .moat-grid{
381
- display:grid;grid-template-columns:repeat(2,minmax(0,1fr));
382
- gap:1px;background:var(--line);border:1px solid var(--line);border-radius:18px;overflow:hidden;
383
- margin-top:22px;
384
- }
385
- .moat-card{
386
- background:rgba(17,25,37,.94);padding:clamp(20px,3vw,28px);min-height:140px;
387
- display:flex;flex-direction:column;gap:10px;
388
- transition:background .35s;
389
- }
390
- .moat-card:hover{background:var(--panel-2)}
391
- .moat-card .n{font-family:var(--mono);font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--blue)}
392
- .moat-card h3{font-family:var(--display);font-weight:400;font-size:clamp(20px,2.2vw,26px)}
393
- .moat-card p{color:#C9DAEC;font-size:15px;line-height:1.55;max-width:44ch}
394
- @media (max-width:860px){.moat-grid{grid-template-columns:1fr}}
395
-
396
- .strategy-surface{
397
- margin-top:clamp(30px,5vw,52px);border:1px solid var(--line);border-radius:20px;overflow:hidden;
398
- background:linear-gradient(145deg,rgba(124,196,255,.07),rgba(17,25,37,.92) 40%,rgba(11,16,24,.98));
399
- }
400
- .strategy-head{display:flex;align-items:end;justify-content:space-between;gap:20px;padding:clamp(22px,3vw,34px);border-bottom:1px solid var(--line)}
401
- .strategy-kicker{font-family:var(--mono);font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--blue)}
402
- .strategy-head h3{font-family:var(--display);font-weight:400;font-size:clamp(28px,4vw,42px);line-height:1.05;margin-top:8px}
403
- .strategy-head p{max-width:50ch;color:#C9DAEC;font-size:14px;line-height:1.6}
404
- .strategy-grid{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:1px;background:var(--line)}
405
- .strategy-card{min-height:205px;padding:clamp(20px,2.6vw,28px);background:rgba(11,16,24,.96);display:flex;flex-direction:column;gap:11px}
406
- .strategy-card .mode{font-family:var(--mono);font-size:9px;letter-spacing:.16em;text-transform:uppercase;color:var(--blue2)}
407
- .strategy-card h4{font-family:var(--display);font-weight:400;font-size:clamp(23px,2.5vw,30px)}
408
- .strategy-card p{color:#C9DAEC;font-size:14px;line-height:1.6}
409
- .strategy-posture{padding:14px clamp(20px,3vw,34px);border-top:1px solid var(--line);font-family:var(--mono);font-size:9px;line-height:1.6;letter-spacing:.11em;text-transform:uppercase;color:var(--mute)}
410
- .strategy-posture b{color:var(--blue2);font-weight:500}
411
- @media (max-width:1180px){.strategy-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}
412
- @media (max-width:980px){.strategy-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.strategy-head{align-items:start;flex-direction:column}}
413
- @media (max-width:620px){.strategy-grid{grid-template-columns:1fr}.strategy-card{min-height:0}}
414
-
415
- /* actual Oracle CLI */
416
- .convert-grid{display:grid;grid-template-columns:1fr;gap:clamp(18px,3vw,28px);align-items:stretch;margin-top:8px}
417
- .convert-copy{display:flex;flex-direction:column;gap:14px;text-align:left;max-width:780px}
418
- .convert-copy h3{font-family:var(--display);font-weight:400;font-size:clamp(26px,3vw,34px);line-height:1.1}
419
- .convert-copy p{color:#C9DAEC;font-size:15px;line-height:1.65;max-width:54ch}
420
- .convert-pills{display:flex;flex-wrap:wrap;gap:8px;margin-top:4px}
421
- .convert-pills span{font-family:var(--mono);font-size:10px;letter-spacing:.14em;text-transform:uppercase;border:1px solid rgba(124,196,255,.28);border-radius:999px;padding:8px 12px;color:var(--blue2)}
422
- .platform-beta{display:inline-flex;align-items:center;gap:10px;width:max-content;max-width:100%;font-family:var(--mono);font-size:11px;letter-spacing:.08em;color:var(--cool)}
423
- .platform-beta b{font-size:9px;letter-spacing:.16em;text-transform:uppercase;color:#071018;background:var(--blue2);border-radius:999px;padding:5px 8px}
424
- .cli-frame{border:1px solid var(--line);border-radius:16px;overflow:hidden;background:#0d1420;box-shadow:0 24px 60px rgba(0,0,0,.35)}
425
- .cli-frame img{display:block;width:100%;height:auto}
426
- .cli-cap{font-family:var(--mono);font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:var(--mute);margin-top:10px;text-align:left}
427
- .cli-code{margin-top:14px;padding:14px 16px;border-radius:12px;border:1px solid var(--line);background:rgba(17,25,37,.9);font-family:var(--mono);font-size:12px;line-height:1.55;color:var(--cool);overflow-x:auto;text-align:left}
428
- .cli-code b{color:var(--blue2);font-weight:500}
429
-
430
- .evolve-rail{
431
- display:flex;flex-wrap:wrap;gap:8px;justify-content:center;
432
- padding:14px 16px 4px;
433
- }
434
- .evolve-pill{
435
- font-family:var(--mono);font-size:10px;letter-spacing:.14em;text-transform:uppercase;
436
- border:1px solid var(--line);border-radius:999px;padding:8px 12px;color:var(--cool);
437
- }
438
- .evolve-pill.on{border-color:rgba(124,196,255,.35);color:var(--blue2)}
439
-
440
- .wires{height:40px;position:relative}
441
- .wires svg{width:100%;height:100%;display:block;overflow:visible}
442
- .wires path{
443
- fill:none;stroke:rgba(124,196,255,.58);stroke-width:1.5;stroke-linecap:round;
444
- stroke-dasharray:1;stroke-dashoffset:1;
445
- transition:stroke-dashoffset 1.3s var(--ease);
446
- }
447
- .wires.in path{stroke-dashoffset:0}
448
- .wires path.w-2{transition-delay:.12s}
449
- .wires path.w-3{transition-delay:.2s}
450
- .wires path.w-4{transition-delay:.28s}
451
- .wires path.w-5{transition-delay:.36s}
452
- .wires circle{fill:var(--blue);opacity:0;transition:opacity .5s var(--ease) .7s}
453
- .wires.in circle{opacity:1}
454
- .wires.multi path.w-poly{stroke:rgba(59,130,246,.55)}
455
- .wires.multi path.w-hl{stroke:rgba(80,210,193,.55)}
456
- .wires.multi path.w-rh{stroke:rgba(215,255,77,.6)}
457
- .wires.multi path.w-sol{stroke:rgba(153,69,255,.55)}
458
- .wires.multi circle.c-poly{fill:var(--poly)}
459
- .wires.multi circle.c-hl{fill:var(--hl)}
460
- .wires.multi circle.c-rh{fill:var(--rh)}
461
- .wires.multi circle.c-sol{fill:var(--sol)}
462
-
463
- /* route detail cards */
464
- .route-card{background:rgba(17,25,37,.94);
465
- background:var(--bg);padding:22px 20px;min-height:150px;
466
- display:flex;flex-direction:column;gap:10px;transition:background .35s;
467
- }
468
- .route-card:hover{background:var(--panel-2)}
469
- .route-card h3{font-family:var(--display);font-weight:400;font-size:26px;display:flex;align-items:center;gap:10px}
470
- .route-card h3 img{width:20px;height:20px;border-radius:50%;object-fit:cover;background:rgba(255,255,255,.06)}
471
- .route-card .where{font-family:var(--mono);font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:var(--blue)}
472
- .route-card p{color:#C9DAEC;font-size:15px;line-height:1.55}
473
- .route-card .chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:auto}
474
- .route-card.p-add{grid-column:1/-1;align-items:center;text-align:center;justify-content:center;gap:14px;padding:30px 22px}
475
- .route-card.p-add .chips{justify-content:center;margin-top:4px}
476
- .route-card.p-add p{max-width:46ch}
477
- .chip-s{
478
- font-family:var(--mono);font-size:9px;letter-spacing:.1em;text-transform:uppercase;
479
- border:1px solid var(--line);border-radius:999px;padding:5px 8px;color:var(--cool);
480
- }
481
- .why-band{
482
- border-top:1px solid var(--line);
483
- padding:22px 24px 24px;
484
- background:rgba(11,16,24,.55);
485
- }
486
- .why-band p{
487
- max-width:62ch;margin:0 auto;text-align:center;
488
- font-family:var(--display);font-style:italic;font-weight:400;
489
- font-size:clamp(18px,2.2vw,24px);line-height:1.4;color:var(--blue2);
490
- }
491
- .why-band span{
492
- display:block;margin-top:10px;
493
- font-family:var(--mono);font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:var(--mute);font-style:normal;
494
- }
495
-
496
- /* chains */
497
- .chain-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}
498
- .hl-surface{margin-top:34px;border:1px solid var(--line);border-radius:14px;padding:20px;background:rgba(124,196,255,.02)}
499
- .hl-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin-top:16px}
500
- .hl-grid article{border:1px solid rgba(124,196,255,.22);border-radius:10px;padding:16px 17px;background:rgba(17,25,37,.92)}
501
- .hl-grid h3{font-family:var(--display);font-size:15px;font-weight:500;color:var(--ink);margin:0 0 6px}
502
- .hl-grid p{font-size:14px;line-height:1.6;color:#C9DAEC;margin:0}
503
- .hl-note{margin:16px 0 0;font-family:var(--mono);font-size:10.5px;letter-spacing:.04em;color:var(--cool);opacity:.62}
504
- .hip3{margin-top:20px;padding-top:18px;border-top:1px solid var(--line)}
505
- .hl-note code{font-family:var(--mono);color:var(--blue2);opacity:.9}
506
- @media(max-width:900px){.hl-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
507
- @media(max-width:620px){.hl-grid{grid-template-columns:1fr}}
508
- .chain{
509
- border:1px solid var(--line);border-radius:14px;padding:16px;
510
- background:linear-gradient(180deg, rgba(124,196,255,.06), transparent 55%), rgba(17,25,37,.94);
511
- min-height:100px;display:flex;flex-direction:column;justify-content:space-between;gap:12px;
512
- transition:border-color .4s var(--ease),transform .4s var(--ease),box-shadow .4s var(--ease);
513
- }
514
- .chain:hover{border-color:rgba(124,196,255,.45);transform:translate3d(0,-3px,0)}
515
- .chain-top{display:flex;justify-content:space-between;gap:8px;align-items:flex-start}
516
- .chain .nm{font-family:var(--display);font-size:20px;display:flex;align-items:center;gap:8px}
517
- .chain .nm img{width:18px;height:18px;border-radius:50%;object-fit:cover;background:rgba(255,255,255,.06)}
518
- .chain .id{font-family:var(--mono);font-size:11px;color:var(--blue);white-space:nowrap;padding-top:4px}
519
- .chain .meta{
520
- display:flex;justify-content:space-between;gap:8px;
521
- font-family:var(--mono);font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:var(--mute);
522
- }
523
- .badge{border:1px solid var(--line);border-radius:999px;padding:4px 8px;color:var(--cool)}
524
- .badge.live{border-color:rgba(124,196,255,.35);color:var(--blue)}
525
-
526
- .venues{margin-top:14px;border:1px solid var(--line);border-radius:14px;overflow:hidden;background:rgba(17,25,37,.85)}
527
- .venues{background:rgba(17,25,37,.86);border:1px solid rgba(124,196,255,.16);border-radius:16px;overflow:hidden;margin-bottom:14px}
528
- .venues-head{
529
- padding:11px 14px;border-bottom:1px solid var(--line);
530
- font-family:var(--mono);font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--mute);
531
- display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap;
532
- }
533
- .venues-head b{color:var(--blue);font-weight:500}
534
- .marquee{overflow:hidden;white-space:nowrap;mask-image:linear-gradient(90deg,transparent,#000 6%,#000 94%,transparent);-webkit-mask-image:linear-gradient(90deg,transparent,#000 6%,#000 94%,transparent)}
535
- .marquee:hover .track{animation-play-state:paused}
536
- .marquee + .marquee{border-top:1px solid rgba(124,196,255,.08)}
537
- .track{display:inline-flex;gap:26px;padding:12px 0;animation:scroll var(--marquee-duration,240s) linear infinite;will-change:transform;transform:translate3d(0,0,0);backface-visibility:hidden;perspective:1000px}
538
- .marquee.rev .track{animation-direction:reverse}
539
- a.chip{text-decoration:none;color:inherit}
540
- .chip{
541
- display:inline-flex;align-items:center;gap:10px;
542
- font-size:15px;letter-spacing:-.015em;text-transform:none;color:var(--proto-color,var(--cool));
543
- padding:8px 13px;border:1px solid rgba(124,196,255,.1);border-radius:999px;background:rgba(11,16,24,.38);
544
- box-shadow:inset 0 0 0 1px rgba(255,255,255,.025);
545
- transition:border-color .35s var(--ease),background .35s var(--ease),transform .35s var(--ease);
546
- }
547
- a.chip:hover{border-color:rgba(124,196,255,.3);background:rgba(21,32,49,.6);transform:translate3d(0,-2px,0)}
548
- .chip img{width:18px;height:18px;border-radius:50%;object-fit:cover;background:rgba(255,255,255,.06)}
549
- .chip.wm-chip{padding:11px 18px}
550
- .chip img.wm{width:auto;height:27px;max-width:180px;border-radius:0;object-fit:contain;background:none;opacity:1}
551
- .chip img.wm.tall{height:28px;max-width:32px}
552
- .chip img.wm.mono{filter:brightness(0) invert(1)}
553
-
554
- .chip .wordmark{font-family:var(--proto-font,var(--sans));font-weight:var(--proto-weight,750);font-style:var(--proto-style,normal);text-transform:var(--proto-transform,none);letter-spacing:var(--proto-track,-.025em);line-height:1.2}
555
- .proto-uniswap{--proto-font:"Inter",var(--sans);--proto-color:#ff4dcb;--proto-weight:850}
556
- .proto-hyperliquid{--proto-font:var(--display);--proto-style:italic;--proto-color:#50d2c1;--proto-weight:500;--proto-track:.01em}
557
- .proto-polymarket{--proto-font:"Manrope",var(--sans);--proto-color:#7aa7ff;--proto-weight:800;--proto-track:-.035em}
558
- .proto-aerodrome,.proto-velodrome{--proto-font:"Space Grotesk",var(--sans);--proto-color:#f2f7ff;--proto-weight:700;--proto-transform:lowercase}
559
- .proto-pancakeswap{--proto-font:"DM Sans",var(--sans);--proto-color:#d1884f;--proto-weight:700}
560
- .proto-quickswap{--proto-font:"Archivo Black",var(--sans);--proto-color:#35a7ff;--proto-weight:800;--proto-transform:uppercase;--proto-track:.005em}
561
- .proto-lfj{--proto-font:"Sora",var(--sans);--proto-color:#ff6357;--proto-weight:700;--proto-transform:uppercase;--proto-track:.05em}
562
- .proto-hyperswap{--proto-font:"Space Grotesk",var(--sans);--proto-color:#69f0d8;--proto-weight:700}
563
- .proto-curve{--proto-font:"Times New Roman",serif;--proto-color:#f7f3dd;--proto-weight:700;--proto-track:.01em}
564
- .proto-balancer{--proto-font:"Inter",var(--sans);--proto-color:#f6f6f6;--proto-weight:850;--proto-track:-.055em}
565
- .proto-pendle{--proto-font:"Sora",var(--sans);--proto-color:#a7f3d0;--proto-weight:700}
566
- .proto-morpho{--proto-font:"Manrope",var(--sans);--proto-color:#75b9ff;--proto-weight:800;--proto-track:-.04em}
567
- .proto-gmx{--proto-font:"Archivo Black",var(--sans);--proto-color:#41d3ff;--proto-weight:800;--proto-transform:uppercase;--proto-track:.04em}
568
- .proto-lifi{--proto-font:"Inter",var(--sans);--proto-color:#d8b4fe;--proto-weight:850;--proto-transform:uppercase;--proto-track:.02em}
569
- .proto-relay{--proto-font:"Space Grotesk",var(--sans);--proto-color:#f2f7ff;--proto-weight:700;--proto-transform:lowercase}
570
- .proto-paraswap{--proto-font:"Manrope",var(--sans);--proto-color:#ff9a76;--proto-weight:800}
571
- .proto-odos{--proto-font:"Sora",var(--sans);--proto-color:#f0f9ff;--proto-weight:700;--proto-transform:lowercase}
572
- .proto-cow{--proto-font:"DM Sans",var(--sans);--proto-color:#fcd34d;--proto-weight:700}
573
- .proto-oneinch{--proto-font:"Inter",var(--sans);--proto-color:#9ec5ff;--proto-weight:850;--proto-track:-.045em}
574
- .proto-jupiter{--proto-font:"Space Grotesk",var(--sans);--proto-color:#f6a5ff;--proto-weight:700}
575
- .proto-across{--proto-font:"Manrope",var(--sans);--proto-color:#ff6b9b;--proto-weight:800}
576
- .proto-stargate{--proto-font:"Sora",var(--sans);--proto-color:#9ddcff;--proto-weight:700}
577
- .proto-magic-eden{--proto-font:"Archivo Black",var(--sans);--proto-color:#dfc7ff;--proto-weight:800;--proto-track:.01em}
578
- @keyframes scroll{from{transform:translate3d(0,0,0)}to{transform:translate3d(-50%,0,0)}}
579
-
580
-
581
- footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);padding:32px var(--pad) 40px;position:relative;z-index:2}
582
- .labs-link{font-family:"UnifrakturCook","Old English Text MT","Lucida Blackletter",serif;font-size:16px;letter-spacing:.04em;text-transform:none;color:var(--blue2)}
583
- .labs-link:hover{color:var(--ink)}
584
- .foot-row{
585
- max-width:var(--max);margin:0 auto 14px;
586
- display:flex;flex-wrap:wrap;gap:14px 24px;justify-content:space-between;align-items:center;
587
- }
588
- .powered{
589
- display:inline-flex;align-items:center;gap:10px;
590
- font-family:var(--mono);font-size:11px;letter-spacing:.2em;text-transform:uppercase;color:var(--mute);
591
- }
592
- .powered .mark{width:7px;height:7px;border-radius:50%;background:var(--blue);box-shadow:0 0 12px rgba(124,196,255,.7)}
593
- .powered a{color:var(--blue);font-weight:600;border-bottom:1px solid transparent;transition:border-color .25s,color .25s}
594
- .powered a:hover{border-bottom-color:var(--blue);color:var(--ink)}
595
- .foot-links{display:flex;gap:18px;font-family:var(--mono);font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:var(--mute)}
596
- .foot-links a:hover{color:var(--blue)}
597
- .foot-meta{
598
- max-width:var(--max);margin:0 auto;
599
- display:flex;flex-wrap:wrap;gap:12px 22px;justify-content:space-between;
600
- font-family:var(--mono);font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:var(--mute);
601
- }
602
-
603
- .js .rv{opacity:0;transform:translate3d(0,22px,0);will-change:opacity,transform}
604
- .js .rv.in{opacity:1;transform:translate3d(0,0,0);transition:opacity 1.05s var(--ease),transform 1.05s var(--ease)}
605
- .js .rv.done{transform:none;will-change:auto}
606
-
607
- @media (max-width:960px){
608
- .home-inner{max-width:760px}
609
- .hero-stage{min-height:clamp(300px,44vh,460px)}.home-title{font-size:clamp(80px,20vw,150px)}
610
- .nav-chip{display:none}
611
- .nav-links .hide-sm{display:none}
612
- .route-strip{grid-template-columns:1fr}
613
- .chain-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
614
- .row.profiles{grid-template-columns:repeat(2,minmax(0,1fr))}
615
- }
616
- @media (max-width:720px){
617
- :root{--pad:clamp(16px,5vw,24px)}
618
- main{padding-top:68px}
619
- .nav{padding:12px var(--pad)}
620
- .brand{font-size:22px}
621
- .brand .orbital{width:24px;height:24px}
622
- .home{min-height:auto;padding-top:22px;padding-bottom:58px}
623
- .home::after{bottom:8px;height:48px}
624
- .hero-stage{min-height:240px}
625
- #orb-vid,.hero-orb{width:min(78vw,300px)}
626
- .hero-orb .orbit-dot{animation-name:orbit-travel-mobile}
627
- @keyframes orbit-travel-mobile{from{transform:rotateX(76deg) rotateZ(0deg) translateX(min(30vw,128px))}to{transform:rotateX(76deg) rotateZ(360deg) translateX(min(30vw,128px))}}
628
- .home-title{font-size:clamp(64px,19vw,82px);letter-spacing:-.05em}
629
- .hero-byline{margin-top:8px;font-size:9px;letter-spacing:.2em}
630
- .home-kicker{font-size:9px;letter-spacing:.22em}
631
- .home-copy p:not(.home-kicker){max-width:34ch;font-size:15px;line-height:1.58;margin-top:14px}
632
- .home-actions{width:100%;margin-top:22px}
633
- .enter-cta{width:100%;max-width:280px;min-height:48px;justify-content:center;padding:13px 18px}
634
- .section{padding:clamp(44px,8vh,72px) var(--pad) 0}
635
- .section-label{letter-spacing:.22em}
636
- .section-title{font-size:clamp(30px,11vw,42px);max-width:12ch}
637
- .section-lede{font-size:15px;line-height:1.6;margin-bottom:24px}
638
- .graph-top{justify-content:flex-start;padding:12px;font-size:9px;line-height:1.55;letter-spacing:.12em}
639
- .evolve-rail{justify-content:flex-start;flex-wrap:nowrap;overflow-x:auto;padding:12px;-webkit-overflow-scrolling:touch}
640
- .evolve-pill{white-space:nowrap;flex:0 0 auto}
641
- .graph-canvas{overflow:visible;padding:22px 12px 24px}
642
- .orch{width:100%;min-width:0}
643
- .row{gap:10px}
644
- .row>.node[style]{width:100%!important;max-width:260px}
645
- .node.hub{width:100%;max-width:260px}
646
- .row.profiles{grid-template-columns:1fr}
647
- .node.route,.node.add,.node.builder-sink{min-height:auto}
648
- .node.route .chains{line-height:1.55}
649
- .wires{height:34px;overflow:hidden}
650
- .wires.funnel{height:42px}
651
- .builder-row{margin-top:4px}
652
- .route-card{min-height:auto;padding:20px 16px;background:rgba(17,25,37,.94)}
653
- .route-card h3{font-size:23px;line-height:1.05;flex-wrap:wrap}
654
- .why-band{padding:20px 16px 22px}
655
- .hl-surface{padding:16px}
656
- .chain .id{white-space:normal;text-align:right}
657
- .venues-head{font-size:9px;letter-spacing:.12em;line-height:1.5}
658
- .marquee{overflow-x:auto;overflow-y:hidden;mask-image:none;-webkit-mask-image:none;scrollbar-width:none;overscroll-behavior-inline:contain;-webkit-overflow-scrolling:touch}
659
- .marquee::-webkit-scrollbar{display:none}
660
- .marquee .track,.marquee.rev .track{min-width:max-content;animation:none;transform:none;will-change:auto}
661
- .track{gap:16px}
662
- .chip{font-size:14px;padding:8px 11px}
663
- .chip.wm-chip{padding:10px 14px}
664
- .chip img.wm{height:24px;max-width:132px}
665
- footer{padding:28px var(--pad) 34px}
666
- .foot-row,.foot-meta{justify-content:center;text-align:center}
667
- .foot-links{flex-wrap:wrap;justify-content:center;gap:12px 16px}
668
- }
669
- @media (max-width:560px){
670
- .chain-grid{grid-template-columns:1fr}
671
- }
672
- @media (max-width:380px){
673
- .home-title{font-size:62px}
674
- .hero-stage{min-height:220px}
675
- .section-title{font-size:30px}
676
- }
677
- @media (prefers-reduced-motion:reduce){
678
- html{scroll-behavior:auto}
679
- .js .rv{opacity:1;transform:none;filter:none}
680
- .track,.orbital .ring,.orbital .tickring,.orbital .core,.hero-orb,.hero-art::before,.home::after{animation:none}
681
- .wires path{stroke-dasharray:none;stroke-dashoffset:0}
682
- .wires circle{opacity:1}
683
- .node:hover,.chain:hover{transform:none}
684
- }
685
- </style>
686
- </head>
687
- <body>
688
- <div class="grain" aria-hidden="true"></div>
689
- <div class="progress" id="progress" aria-hidden="true"></div>
690
-
691
- <div class="loader" id="loader" aria-hidden="true">
692
- <div class="loader-inner">
693
- <div class="loader-mark orbital" aria-hidden="true">
694
- <svg viewBox="0 0 100 100">
695
- <g class="ring r1"><ellipse cx="50" cy="50" rx="44" ry="15"/></g>
696
- <g class="ring r2"><ellipse cx="50" cy="50" rx="44" ry="15" transform="rotate(62 50 50)"/></g>
697
- <g class="ring r3"><ellipse cx="50" cy="50" rx="44" ry="15" transform="rotate(124 50 50)"/></g>
698
- <circle class="tickring" cx="50" cy="50" r="30"/>
699
- <circle class="halo" cx="50" cy="50" r="9"/>
700
- <circle class="core" cx="50" cy="50" r="6.5"/>
701
- </svg>
702
- </div>
703
- <div class="loader-word">oracle</div>
704
- <div class="loader-bar"><span id="loader-fill"></span></div>
705
- </div>
706
- </div>
707
-
708
- <header class="nav">
709
- <a class="brand" href="#top">
710
- <span class="orbital" aria-hidden="true">
711
- <svg viewBox="0 0 100 100">
712
- <g class="ring r1"><ellipse cx="50" cy="50" rx="45" ry="17"/></g>
713
- <g class="ring r2"><ellipse cx="50" cy="50" rx="45" ry="17" transform="rotate(64 50 50)"/></g>
714
- <circle class="halo" cx="50" cy="50" r="13"/>
715
- <circle class="core" cx="50" cy="50" r="11"/>
716
- </svg>
717
- </span>
718
- oracle</a>
719
- <nav class="nav-links" aria-label="Primary">
720
- <a class="hide-sm" href="#cli">CLI</a>
721
- <a class="hide-sm" href="#orchestration">Profiles</a>
722
- <a class="hide-sm" href="#strategies">Strategies</a>
723
- <a class="hide-sm" href="#chains">Chains</a>
724
- </nav>
725
- </header>
726
-
727
- <main id="top">
728
- <canvas id="gl" aria-hidden="true"></canvas>
729
- <div class="veil" aria-hidden="true"></div>
730
-
731
- <section class="home" id="home">
732
- <div class="home-inner">
733
- <div class="hero-primary">
734
- <div class="hero-stage">
735
- <div class="hero-art" aria-hidden="true">
736
- <video id="orb-vid" muted loop playsinline preload="none" hidden>
737
- <source src="assets/hero/orb.webm" type="video/webm">
738
- </video>
739
- <div class="hero-orb" id="hero-orb">
740
- <span class="lat l1"></span><span class="lat l2"></span><span class="lat l3"></span><span class="lat l4"></span>
741
- <span class="par p1"></span><span class="par p2"></span><span class="par p3"></span>
742
- <span class="eq"></span>
743
- <span class="core-glow"></span>
744
- <span class="orbit-dot"></span>
745
- </div>
746
- </div>
747
- <div class="hero-lockup" id="hero-title">
748
- <h1 class="home-title">OR<em>ACLE</em></h1>
749
- </div>
750
- </div>
751
- <div class="home-copy">
752
- <p class="home-kicker">self-custody agent control</p>
753
- <p>One control plane for Hyperliquid, Polymarket, EVM, Bitcoin, Solana, Stable, Robinhood Chain, and new protocol builds. Cross-chain research, trade, protocol interactions, NFT listing and buying. The all-in-one crypto agent. The future is agentic.</p>
754
- <div class="home-actions">
755
- <a class="enter-cta" href="#cli">See the CLI</a>
756
- <a class="enter-cta" href="#orchestration" style="margin-left:10px;opacity:.85">See profiles</a>
757
- </div>
758
- </div>
759
- </div>
760
- </div>
761
- </section>
762
-
763
- <section class="section cli-section" id="cli">
764
- <p class="section-label rv">Oracle CLI</p>
765
- <h2 class="section-title rv">One surface. <em>Every chain.</em></h2>
766
- <p class="section-lede rv">The real Oracle shell, isolated from desktop chrome. Pin the active surface with <code style="color:var(--blue2)">/chain hyperliquid</code>, switch models with <code style="color:var(--blue2)">/model</code>, then ask naturally.</p>
767
- <div class="convert-grid rv">
768
- <div>
769
- <figure class="cli-frame">
770
- <img src="assets/cli-chain-hyperliquid.jpg?v=cli-visible" alt="Oracle CLI selecting Hyperliquid with the /chain hyperliquid command" width="1600" height="900" loading="eager" fetchpriority="high" />
771
- </figure>
772
- <p class="cli-cap">actual oracle shell // /chain hyperliquid</p>
773
- </div>
774
- <div class="convert-copy">
775
- <h3>The actual Oracle CLI</h3>
776
- <p>The active chain follows each read, quote, prepare, and bounded execution path.</p>
777
- <div class="convert-pills">
778
- <span>HyperCore + HyperEVM</span>
779
- <span>multichain routing</span>
780
- <span>self-custody</span>
781
- </div>
782
- <p class="platform-beta"><b>Beta</b> Linux, Windows, and macOS apps are in beta.</p>
783
- <div class="cli-code">
784
- <div><b>oracle ›</b> /chain hyperliquid</div>
785
- <div><b>oracle ›</b> /chain show</div>
786
- <div><b>oracle ›</b> what can you do on hyperliquid?</div>
787
- </div>
788
- </div>
789
- </div>
790
- </section>
791
-
792
- <section class="section" id="orchestration">
793
- <p class="section-label rv">Profiles</p>
794
- <h2 class="section-title rv">Multi-profile. <em>Customizable.</em></h2>
795
- <p class="section-lede rv">Input / Command hits the Oracle control plane, then routes across venue profiles, multi-chain EVM, Bitcoin, Solana, and the protocol builder. Any MCP harness can drive a single agent.</p>
796
-
797
- <div class="graph-shell rv">
798
- <div class="graph-top">
799
- <span>multi-profile // protocol builder // multi-chain</span>
800
- </div>
801
-
802
- <div class="evolve-rail">
803
- <span class="evolve-pill on">customizable</span>
804
- <span class="evolve-pill on">protocol builder</span>
805
- <span class="evolve-pill on">more chains</span>
806
- </div>
807
-
808
- <div class="graph-canvas">
809
- <div class="orch" aria-label="Oracle multi-profile graph">
810
- <div class="row">
811
- <div class="node" style="width:220px">
812
- <div class="tag">you</div>
813
- <div class="name">Input / Command</div>
814
- <div class="sub">what you type or ask</div>
815
- </div>
816
- </div>
817
-
818
- <div class="wires" aria-hidden="true">
819
- <svg viewBox="0 0 100 36" preserveAspectRatio="none">
820
- <path d="M50 2 V34" pathLength="1"/><circle cx="50" cy="2" r="1.4"/><circle cx="50" cy="34" r="1.4"/>
821
- </svg>
822
- </div>
823
-
824
- <div class="row">
825
- <div class="node hub">
826
- <div class="tag">control plane</div>
827
- <div class="orbital" aria-hidden="true">
828
- <svg viewBox="0 0 100 100">
829
- <g class="ring r1"><ellipse cx="50" cy="50" rx="46" ry="16"/></g>
830
- <g class="ring r2"><ellipse cx="50" cy="50" rx="46" ry="16" transform="rotate(60 50 50)"/></g>
831
- <g class="ring r3"><ellipse cx="50" cy="50" rx="46" ry="16" transform="rotate(120 50 50)"/></g>
832
- <circle class="tickring" cx="50" cy="50" r="32"/>
833
- <circle class="halo" cx="50" cy="50" r="10"/>
834
- <circle class="core" cx="50" cy="50" r="7.5"/>
835
- </svg>
836
- </div>
837
- <div class="name">oracle</div>
838
- <div class="sub">route · bound · evolve</div>
839
- </div>
840
- </div>
841
-
842
- <div class="wires multi" aria-hidden="true">
843
- <svg viewBox="0 0 100 44" preserveAspectRatio="none">
844
- <path d="M50 2 V12" pathLength="1"/>
845
- <path class="w-poly w-2" d="M12.5 42 V20 H50 V12" pathLength="1"/>
846
- <path class="w-hl w-3" d="M37.5 42 V20 H50 V12" pathLength="1"/>
847
- <path class="w-rh w-4" d="M62.5 42 V20 H50 V12" pathLength="1"/>
848
- <path class="w-sol w-5" d="M87.5 42 V20 H50 V12" pathLength="1"/>
849
- <circle cx="50" cy="2" r="1.3"/>
850
- <circle class="c-poly" cx="12.5" cy="42" r="1.3"/>
851
- <circle class="c-hl" cx="37.5" cy="42" r="1.3"/>
852
- <circle class="c-rh" cx="62.5" cy="42" r="1.3"/>
853
- <circle class="c-sol" cx="87.5" cy="42" r="1.3"/>
854
- </svg>
855
- </div>
856
-
857
- <div class="row profiles" id="profile-grid">
858
- <div class="node route p-poly">
859
- <div class="tag">profile</div>
860
- <div class="name">polymarket agent</div>
861
- <div class="sub">events · arb · markets</div>
862
- <div class="chains"><span class="ch">Polymarket <img src="https://icons.llamao.fi/icons/protocols/polymarket?w=24&h=24" alt="" loading="lazy"></span></div>
863
- </div>
864
- <div class="node route p-hl">
865
- <div class="tag">profile</div>
866
- <div class="name">hyperliquid agent</div>
867
- <div class="sub">perps · hip-3/4 · ta</div>
868
- <div class="chains"><span class="ch">Hyperliquid <img src="https://icons.llamao.fi/icons/protocols/hyperliquid?w=24&h=24" alt="" loading="lazy"></span><span class="ch">Hyperliquid 999 <img src="https://icons.llamao.fi/icons/chains/rsz_hyperliquid?w=24&h=24" alt="" loading="lazy"></span></div>
869
- </div>
870
- <div class="node route p-rh">
871
- <div class="tag">profile</div>
872
- <div class="name">robinhood agent</div>
873
- <div class="sub">markets · memecoins · nfts</div>
874
- <div class="chains"><span class="ch">Robinhood Chain <img src="https://icons.llamao.fi/icons/chains/rsz_robinhood?w=24&h=24" alt="" loading="lazy"></span></div>
875
- </div>
876
- <div class="node route p-sol">
877
- <div class="tag">profile</div>
878
- <div class="name">solana agent</div>
879
- <div class="sub">jup · nfts · dexs</div>
880
- <div class="chains"><span class="ch">Solana <img src="https://icons.llamao.fi/icons/chains/rsz_solana?w=24&h=24" alt="" loading="lazy"></span></div>
881
- </div>
882
- <div class="node route p-btc">
883
- <div class="tag">profile</div>
884
- <div class="name">bitcoin agent</div>
885
- <div class="sub">ord · runes · research</div>
886
- <div class="chains"><span class="ch">Bitcoin <img src="https://icons.llamao.fi/icons/chains/rsz_bitcoin?w=24&h=24" alt="" loading="lazy"></span><span class="ch">inscriptions</span></div>
887
- </div>
888
- <div class="node route p-evm">
889
- <div class="tag">profile</div>
890
- <div class="name">evm / bridge agent</div>
891
- <div class="sub">swaps · bridges · defi</div>
892
- <div class="chains"><span class="ch">ETH <img src="https://icons.llamao.fi/icons/chains/rsz_ethereum?w=24&h=24" alt="" loading="lazy"></span><span class="ch">Base <img src="https://icons.llamao.fi/icons/chains/rsz_base?w=24&h=24" alt="" loading="lazy"></span><span class="ch">Arb <img src="https://icons.llamao.fi/icons/chains/rsz_arbitrum?w=24&h=24" alt="" loading="lazy"></span><span class="ch">OP <img src="https://icons.llamao.fi/icons/chains/rsz_optimism?w=24&h=24" alt="" loading="lazy"></span><span class="ch">BNB <img src="https://icons.llamao.fi/icons/chains/rsz_binance?w=24&h=24" alt="" loading="lazy"></span><span class="ch">Avax <img src="https://icons.llamao.fi/icons/chains/rsz_avalanche?w=24&h=24" alt="" loading="lazy"></span></div>
893
- </div>
894
- <div class="node route p-stable">
895
- <div class="tag">profile</div>
896
- <div class="name">stable agent</div>
897
- <div class="sub">launches · memecoins</div>
898
- <div class="chains"><span class="ch">Stable <img src="https://icons.llamao.fi/icons/chains/rsz_stable?w=24&h=24" alt="" loading="lazy"></span></div>
899
- </div>
900
- </div>
901
-
902
- <div class="wires funnel" aria-hidden="true">
903
- <svg viewBox="0 0 100 62" preserveAspectRatio="none">
904
- <path class="w-1" d="M6 2 C6 30 50 22 50 60" pathLength="1"/>
905
- <path class="w-2" d="M19 2 C19 28 50 26 50 60" pathLength="1"/>
906
- <path class="w-3" d="M32 2 C32 34 50 34 50 60" pathLength="1"/>
907
- <path class="w-4" d="M45 2 C45 38 50 42 50 60" pathLength="1"/>
908
- <path class="w-5" d="M55 2 C55 38 50 42 50 60" pathLength="1"/>
909
- <path class="w-3" d="M68 2 C68 34 50 34 50 60" pathLength="1"/>
910
- <path class="w-2" d="M81 2 C81 28 50 26 50 60" pathLength="1"/>
911
- <path class="w-1" d="M94 2 C94 30 50 22 50 60" pathLength="1"/>
912
- <circle cx="50" cy="60" r="1.8"/>
913
- </svg>
914
- </div>
915
-
916
- <div class="row builder-row">
917
- <div class="node route p-build builder-sink">
918
- <div class="tag">bottom layer</div>
919
- <div class="name">protocol builder</div>
920
- <div class="sub">every profile can funnel into new contracts, scripts, checks, deploy prep, and chain-specific scaffolds.</div>
921
- <div class="chains"><span class="ch">any EVM · pinned factories · user-signed deploys</span></div>
922
- </div>
923
- </div>
924
- </div>
925
- </div>
926
-
927
- <div class="route-strip">
928
- <article class="route-card p-poly">
929
- <div class="where">polymarket agent →</div>
930
- <h3>Polymarket <img src="https://icons.llamao.fi/icons/protocols/polymarket?w=40&h=40" alt="Polymarket" loading="lazy"></h3>
931
- <p>Event markets, sports, arb paths, and prediction flow under bounds you set. CLOB prepare shipped in the public plane.</p>
932
- <div class="chips">
933
- <span class="chip-s">events</span>
934
- <span class="chip-s">arb</span>
935
- <span class="chip-s">clob prepare</span>
936
- </div>
937
- </article>
938
- <article class="route-card p-hl">
939
- <div class="where">hyperliquid agent →</div>
940
- <h3>Hyperliquid <img src="https://icons.llamao.fi/icons/protocols/hyperliquid?w=40&h=40" alt="Hyperliquid" loading="lazy"></h3>
941
- <p>Native perps, HIP-3/4 asset resolve, TA, event risk, and Hyperliquid when you need HL's EVM surface.</p>
942
- <div class="chips">
943
- <span class="chip-s">perps</span>
944
- <span class="chip-s">HIP-3/4</span>
945
- <span class="chip-s">Hyperliquid</span>
946
- </div>
947
- </article>
948
- <article class="route-card p-rh">
949
- <div class="where">robinhood agent →</div>
950
- <h3>Robinhood <img src="https://icons.llamao.fi/icons/chains/rsz_robinhood?w=40&h=40" alt="Robinhood Chain" loading="lazy"></h3>
951
- <p>RH Chain markets, memecoins, NFTs, names, token scans, and chain-local routing.</p>
952
- <div class="chips">
953
- <span class="chip-s">markets</span>
954
- <span class="chip-s">memecoins</span>
955
- <span class="chip-s">NFTs</span>
956
- <span class="chip-s">rh chain</span>
957
- </div>
958
- </article>
959
- <article class="route-card p-sol">
960
- <div class="where">solana agent →</div>
961
- <h3>Solana <img src="https://icons.llamao.fi/icons/chains/rsz_solana?w=40&h=40" alt="Solana" loading="lazy"></h3>
962
- <p>Swaps, research, Jupiter routes. The bounded lane decodes every instruction and bans delegation ops outright.</p>
963
- <div class="chips">
964
- <span class="chip-s">Jupiter</span>
965
- <span class="chip-s">swaps</span>
966
- <span class="chip-s">decoded ix</span>
967
- </div>
968
- </article>
969
- <article class="route-card p-btc">
970
- <div class="where">bitcoin agent →</div>
971
- <h3>Bitcoin <img src="https://icons.llamao.fi/icons/chains/rsz_bitcoin?w=40&h=40" alt="Bitcoin" loading="lazy"></h3>
972
- <p>Ordinals, runes, and BTC research. Every PSBT input carries proven provenance, so fees are computed, not asserted.</p>
973
- <div class="chips">
974
- <span class="chip-s">ordinals</span>
975
- <span class="chip-s">runes</span>
976
- <span class="chip-s">psbt proof</span>
977
- </div>
978
- </article>
979
- <article class="route-card p-evm">
980
- <div class="where">evm / bridge agent →</div>
981
- <h3>Multi-chain EVM <img src="https://icons.llamao.fi/icons/chains/rsz_ethereum?w=40&h=40" alt="Ethereum" loading="lazy"></h3>
982
- <p>DEX routes, LI.FI and Relay bridges, DeFi across ETH and L2s. Bounded evm-swap and evm-bridge lanes.</p>
983
- <div class="chips">
984
- <span class="chip-s">evm-swap</span>
985
- <span class="chip-s">evm-bridge</span>
986
- <span class="chip-s">best route</span>
987
- </div>
988
- </article>
989
- <article class="route-card p-nft">
990
- <div class="where">nft agent →</div>
991
- <h3>Cross-chain NFTs <img src="assets/protocols/opensea.png" alt="OpenSea" loading="lazy"></h3>
992
- <p>List across 22 EVM chains and Solana via OpenSea. Buy and list Ordinals through Satflow with proven PSBT provenance. Solana listings via Magic Eden. Floors, holdings and PnL are read first, then prepared for your signature.</p>
993
- <div class="chips">
994
- <span class="chip-s">list</span>
995
- <span class="chip-s">buy</span>
996
- <span class="chip-s">floor · pnl</span>
997
- </div>
998
- </article>
999
- <article class="route-card p-stable">
1000
- <div class="where">stable agent →</div>
1001
- <h3>Stable <img src="https://icons.llamao.fi/icons/chains/rsz_stable?w=40&h=40" alt="Stable" loading="lazy"></h3>
1002
- <p>Stable mainnet launch radar, memecoins, USDT0 gas, and venue ops, scanned straight from the chain's own logs.</p>
1003
- <div class="chips">
1004
- <span class="chip-s">launches</span>
1005
- <span class="chip-s">memecoins</span>
1006
- <span class="chip-s">USDT0 gas</span>
1007
- <span class="chip-s">Stable</span>
1008
- </div>
1009
- </article>
1010
- <article class="route-card p-build">
1011
- <div class="where">protocol builder →</div>
1012
- <h3>Build protocols</h3>
1013
- <p>Scaffold contracts, run security gates (Foundry + static checks), prepare unsigned deploys through pinned factories. You still sign every deploy.</p>
1014
- <div class="chips">
1015
- <span class="chip-s">scaffold</span>
1016
- <span class="chip-s">security gate</span>
1017
- <span class="chip-s">unsigned deploy</span>
1018
- </div>
1019
- </article>
1020
- </div>
1021
-
1022
- <div class="why-band">
1023
- <p>The model proposes. Policy bounds. You own signatures. Multi-profile desks route each request to the right surface. Vaults, perps, bridges, and protocol scaffolds, not just swaps. Empty allowlists refuse everything until you configure them.</p>
1024
- </div>
1025
- </div>
1026
-
1027
- <div class="moat-grid rv" style="margin-top:28px">
1028
- <article class="moat-card">
1029
- <div class="n">bound grants</div>
1030
- <h3>Wallet with temporary agent permission</h3>
1031
- <p>Max value, chain, venue, destinations, and TTL. Outside the grant = hard refuse, not an agent with a free wallet.</p>
1032
- </article>
1033
- <article class="moat-card">
1034
- <div class="n">bounded surfaces</div>
1035
- <h3>Six lanes, each with its own decoder</h3>
1036
- <p>hl, poly, evm-swap, evm-bridge, btc, sol. Each decodes its own envelope, proves every value-moving field, and refuses while its allowlists are empty.</p>
1037
- </article>
1038
- <article class="moat-card">
1039
- <div class="n">receipts</div>
1040
- <h3>Every action ends in a receipt</h3>
1041
- <p>Prepared actions ship as stamped, hash-bound envelopes. Money claims end in tx hash, receipt status, balance delta, and allowance state. No “looks filled.”</p>
1042
- </article>
1043
- <article class="moat-card">
1044
- <div class="n">simulation</div>
1045
- <h3>Show the work before you sign</h3>
1046
- <p>minOut, impact, spender, and decoded calldata before approval. Export unsigned artifacts for hardware wallets.</p>
1047
- </article>
1048
- <article class="moat-card">
1049
- <div class="n">allowlists</div>
1050
- <h3>Where money may land</h3>
1051
- <p>Destination allowlists stop silent router drift. New contracts stay blocked until you add them.</p>
1052
- </article>
1053
- <article class="moat-card">
1054
- <div class="n">fail closed</div>
1055
- <h3>Unconfigured means refused</h3>
1056
- <p>A fresh install signs nothing. Every lane refuses while its allowlists are empty, so nothing moves until you set the bounds.</p>
1057
- </article>
1058
- </div>
1059
-
1060
- <div class="strategy-surface rv" id="strategies" aria-labelledby="strategies-title">
1061
- <div class="strategy-head">
1062
- <div>
1063
- <div class="strategy-kicker">Agentic strategies</div>
1064
- <h3 id="strategies-title">Move liquidity. Bound the risk.</h3>
1065
- </div>
1066
- <p>Oracle reads the position, models the route and costs, then prepares only the steps the selected lane can actually support.</p>
1067
- </div>
1068
- <div class="strategy-grid">
1069
- <article class="strategy-card">
1070
- <div class="mode">read · model · prepare</div>
1071
- <h4>LP rebalancing</h4>
1072
- <p>Read concentrated-liquidity positions, model new ranges and fee drag, then prepare collect, swap and redeploy steps on supported venues. You sign each step.</p>
1073
- </article>
1074
- <article class="strategy-card">
1075
- <div class="mode">monitor · shadow · simulate</div>
1076
- <h4>MEV</h4>
1077
- <p>Monitor cross-venue divergence and simulate net edge after gas, slippage and lender costs. Public mode is shadow analysis, not autonomous execution.</p>
1078
- </article>
1079
- <article class="strategy-card">
1080
- <div class="mode">simulate · policy-check</div>
1081
- <h4>Flash loans</h4>
1082
- <p>Build bounded atomic loan routes and test premium, calldata, gas and minimum-profit gates. Public live execution remains disabled.</p>
1083
- </article>
1084
- <article class="strategy-card">
1085
- <div class="mode">read · quote · prepare</div>
1086
- <h4>Staking</h4>
1087
- <p>Compare validators, staking vaults, rewards and unlock periods, then prepare supported stake, withdraw and delegate actions for your signature.</p>
1088
- </article>
1089
- <article class="strategy-card">
1090
- <div class="mode">discover · compare · prepare</div>
1091
- <h4>Yield</h4>
1092
- <p>Rank lending, staking, vault and LP opportunities by net APY after fees, liquidity, lockups and smart-contract risk, then prepare supported deposits or migrations for your signature.</p>
1093
- </article>
1094
- </div>
1095
- <div class="strategy-posture"><b>Public posture:</b> research, simulation and unsigned preparation. MEV and flash-loan broadcast stays off; supported staking, LP and yield actions require the user wallet to sign.</div>
1096
- </div>
1097
- </section>
1098
-
1099
- <section class="section" id="chains">
1100
- <p class="section-label rv">Chains</p>
1101
- <h2 class="section-title rv">Where you can <em>operate.</em></h2>
1102
- <p class="section-lede rv">Live coverage grows with the profile mesh. Each chain maps to an agent, and new agents can join.</p>
1103
- <div class="chain-grid" id="chain-grid"></div>
1104
- <div class="hl-surface rv">
1105
- <div class="venues-head"><span>hyperliquid // what oracle actually does</span></div>
1106
- <div class="hl-grid">
1107
- <article><h3>Perps</h3><p>Asset info, order + bracket prepare, cancel, leverage and isolated-margin updates. Tick and lot sizing enforced to 5 sig figs.</p></article>
1108
- <article><h3>Spot &amp; markets</h3><p>Spot meta, mids, L2 book, candles, market and coin datapoints, leaderboards.</p></article>
1109
- <article><h3>Staking</h3><p>Validator summaries, delegations, rewards and history. Stake deposit, withdraw and delegate prepare with a 7-day unstaking queue.</p></article>
1110
- <article><h3>Outcome markets</h3><p>HIP-4 outcome listing plus order and cancel prepare.</p></article>
1111
- <article><h3>Account state</h3><p>Clearinghouse state, open orders, user fills, positions.</p></article>
1112
- <article><h3>HyperEVM</h3><p>Token search and metadata on Hyperliquid, routed with the EVM lane.</p></article>
1113
- </div>
1114
- </div>
1115
- <div class="venues rv">
1116
- <div class="venues-head"><span>protocols // venues</span></div>
1117
- <div class="marquee"><div class="track" id="proto-track-a"></div></div>
1118
- <div class="marquee rev"><div class="track" id="proto-track-b"></div></div>
1119
- </div>
1120
- <div class="venues rv">
1121
- <div class="venues-head"><span>models // harnesses</span><span><b>bring your own model</b> · oracle is the control plane</span></div>
1122
- <div class="marquee"><div class="track" id="llm-track"></div></div>
1123
- </div>
1124
- </section>
1125
-
1126
- <section class="section" id="custody" style="padding-top:clamp(48px,8vh,80px)">
1127
- <div class="strip-inner rv" style="border:1px solid var(--line);border-radius:16px;padding:22px 24px;display:flex;flex-wrap:wrap;gap:18px 28px;align-items:center;justify-content:space-between;background:linear-gradient(180deg, rgba(124,196,255,.05), transparent)">
1128
- <div class="strip-left">
1129
- <strong style="font-family:var(--display);font-weight:400;font-size:26px;display:block;margin-bottom:6px">You keep custody.</strong>
1130
- <span style="font-family:var(--mono);font-size:10px;letter-spacing:.18em;text-transform:uppercase;color:var(--mute)">oracle never holds your keys</span>
1131
- </div>
1132
- <div class="strip-right" style="display:flex;flex-wrap:wrap;gap:10px">
1133
- <span class="pill on" style="font-family:var(--mono);font-size:10px;letter-spacing:.16em;text-transform:uppercase;border:1px solid rgba(124,196,255,.35);border-radius:999px;padding:9px 12px;color:var(--blue)">Multi-wallet</span>
1134
- <span class="pill on" style="font-family:var(--mono);font-size:10px;letter-spacing:.16em;text-transform:uppercase;border:1px solid rgba(124,196,255,.35);border-radius:999px;padding:9px 12px;color:var(--blue)">Per-wallet limits</span>
1135
- <span class="pill" style="font-family:var(--mono);font-size:10px;letter-spacing:.16em;text-transform:uppercase;border:1px solid var(--line);border-radius:999px;padding:9px 12px;color:var(--cool)">Revoke anytime</span>
1136
- </div>
1137
- </div>
1138
- </section>
1139
- </main>
1140
-
1141
- <footer>
1142
- <div class="foot-row">
1143
- <div class="powered">
1144
- powered by
1145
- <a href="https://hermes-agent.nousresearch.com" target="_blank" rel="noopener noreferrer">Hermes</a>
1146
- </div>
1147
- <div class="foot-links">
1148
- <a href="/oracle-console/">Console</a>
1149
- <a href="https://hermes-agent.nousresearch.com/docs" target="_blank" rel="noopener noreferrer">Docs</a>
1150
- </div>
1151
- </div>
1152
- <div class="foot-meta">
1153
- <span>oracle · <a class="labs-link" href="https://demi.la">locals only labs</a></span>
1154
- <span>self custodial // the future is agentic</span>
1155
- </div>
1156
- </footer>
1157
-
1158
- <script>
1159
- (function () {
1160
- "use strict";
1161
- document.documentElement.classList.add("js");
1162
-
1163
- var ICON = "https://icons.llamao.fi/icons/";
1164
- var CHAINS = [
1165
- { name: "Ethereum", id: "1", logo: "chains/rsz_ethereum", note: "evm / bridge agent", badge: "live" },
1166
- { name: "Base", id: "8453", logo: "chains/rsz_base", note: "evm / bridge agent", badge: "live" },
1167
- { name: "Arbitrum", id: "42161", logo: "chains/rsz_arbitrum", note: "evm / bridge agent", badge: "live" },
1168
- { name: "Optimism", id: "10", logo: "chains/rsz_optimism", note: "evm / bridge agent", badge: "live" },
1169
- { name: "BNB Chain", id: "56", logo: "chains/rsz_binance", note: "evm / bridge agent", badge: "live" },
1170
- { name: "Avalanche", id: "43114", logo: "chains/rsz_avalanche", note: "evm / bridge agent", badge: "live" },
1171
- { name: "Hyperliquid", id: "999", logo: "chains/rsz_hyperliquid", note: "hyperliquid agent", badge: "live" },
1172
- { name: "Abstract", id: "2741", logo: "chains/rsz_abstract", note: "open / add agent", badge: "live" },
1173
- { name: "Stable", id: "988", logo: "chains/rsz_stable", note: "stable agent", badge: "live" },
1174
- { name: "Robinhood", id: "4663", logo: "chains/rsz_robinhood", note: "robinhood agent", badge: "live" },
1175
- { name: "Solana", id: "SOL", logo: "chains/rsz_solana", note: "solana agent", badge: "live" },
1176
- { name: "Bitcoin", id: "BTC", logo: "chains/rsz_bitcoin", note: "bitcoin agent", badge: "live" }
1177
- ];
1178
- document.getElementById("chain-grid").innerHTML = CHAINS.map(function (c) {
1179
- var cls = c.badge === "live" ? "badge live" : "badge";
1180
- var label = c.badge === "live" ? "live" : "read";
1181
- return '<article class="chain rv"><div class="chain-top"><div class="nm">' + c.name +
1182
- ' <img src="' + ICON + c.logo + '?w=36&h=36" alt="' + c.name + ' logo" loading="lazy"></div></div><div class="meta"><span>' + c.note + '</span><span class="' + cls + '">' + label + '</span></div></article>';
1183
- }).join("");
1184
-
1185
- var WM = "assets/wordmarks/";
1186
- var BRAND = "brand/";
1187
- var PROTOS_A = [
1188
- { n: "Uniswap V3", wm: "uniswap.svg", cap: "read + quote + prepare + policy", u: "https://app.uniswap.org/" },
1189
- { n: "Aerodrome Slipstream", wm: "aerodrome.svg", cap: "read + quote + prepare", u: "https://aerodrome.finance/" },
1190
- { n: "Pancake V3", wm: "pancakeswap.svg", cap: "read + quote", u: "https://pancakeswap.finance/swap" },
1191
- { n: "LFJ Liquidity Book", img: "lfj", cap: "read + quote", u: "https://lfj.gg/avalanche/trade" },
1192
- { n: "Curve RouterNG", img: "curve", cap: "read + quote + prepare + policy", u: "https://curve.finance" },
1193
- { n: "Pendle Router", img: "pendle", cap: "read + quote + prepare + policy", u: "https://pendle.finance/" },
1194
- { n: "Morpho vaults", wm: "morpho.svg", cap: "read + deposit prepare", u: "https://app.morpho.org/" },
1195
- { n: "Lido stETH", img: "lido", cap: "read + stake prepare + policy", u: "https://lido.fi/" },
1196
- { n: "Kinetiq kHYPE", wm: "kinetiq.svg", tall: 1, cap: "read + quote + stake prepare + policy", u: "https://kinetiq.xyz/stake" },
1197
- { n: "Project X", img: "projectx", cap: "read", u: "https://www.prjx.com" },
1198
- { n: "Uniswap V4", img: "uniswapv4", cap: "read + quote", u: "https://app.uniswap.org/" },
1199
- { n: "Aborean CL", img: "aborean", cap: "read + quote", u: "https://aborean.finance/" },
1200
- { n: "Aborean AMM", img: "aborean", cap: "read + quote", u: "https://aborean.finance/" },
1201
- { n: "Stable Swap V3", img: "stableswap", cap: "read + quote", u: "https://swap.stable.xyz/" },
1202
- { n: "Stable Swap V2", img: "stableswap", cap: "read + quote", u: "https://swap.stable.xyz/" },
1203
- { n: "Compound V3", img: "compound", cap: "read + quote", u: "https://www.compound.xyz/" },
1204
- { n: "Aerodrome V1", img: "aerodrome", cap: "read + quote", u: "https://aerodrome.finance/" },
1205
- { n: "Ethena sUSDe", img: "ethena", cap: "read + quote", u: "https://app.ethena.fi/" },
1206
- { n: "Lido wstETH", img: "lido", cap: "read + quote", u: "https://lido.fi/" },
1207
- { n: "Benqi sAVAX", img: "benqi", cap: "read + quote", u: "https://app.benqi.fi/savax" },
1208
- { n: "EigenLayer", img: "eigenlayer", cap: "read + quote", u: "https://www.eigencloud.xyz/eigenlayer" },
1209
- { n: "SSV Network", img: "ssv", cap: "read", u: "https://ssv.network/" },
1210
- { n: "Fluid Lending", img: "fluid", cap: "read + quote", u: "https://www.fluid.io/" },
1211
- { n: "Rain", img: "rain", cap: "read + quote", u: "https://www.rain.one/" },
1212
- { n: "Derive V2", img: "derive", cap: "read", u: "https://app.derive.xyz" },
1213
- { n: "PancakeSwap AMM", img: "pancakeswap", cap: "read + quote", u: "https://pancakeswap.finance/" },
1214
- { n: "Lista Lending", img: "lista", cap: "read + quote", u: "https://lista.org/lending" },
1215
- { n: "Lista CDP", img: "lista", cap: "read", u: "https://lista.org/" },
1216
- { n: "Benqi Lending", img: "benqi", cap: "read", u: "https://benqi.fi" },
1217
- { n: "Pharaoh V3", img: "pharaoh", cap: "read + quote", u: "https://www.phar.gg/" },
1218
- { n: "Polymarket", img: "polymarket", cap: "read", u: "https://polymarket.com/" },
1219
- { n: "XSY", img: "xsy", cap: "read", u: "https://xsy.fi" },
1220
- { n: "Balancer V2", wm: "balancer.svg", cap: "read + quote", u: "https://balancer.fi/" },
1221
- { n: "Harmonix", img: "harmonix", cap: "read + quote", u: "https://app.harmonix.fi/" },
1222
- { n: "Hyperliquid HLP", wm: "hyperliquid.svg", cap: "read", u: "https://app.hyperliquid.xyz" },
1223
- { n: "stHYPE + wstHYPE", img: "sthype", cap: "read + quote", u: "https://app.valantis.xyz" },
1224
- { n: "Arcus Perps", img: "arcus", cap: "read", u: "https://arcus.xyz/" },
1225
- { n: "NOXA Fun", img: "noxa", cap: "read + quote", u: "https://fun.noxa.eth.limo/" },
1226
- { n: "Kona V2", img: "kona", cap: "read + quote", u: "https://kona.surf/" },
1227
- { n: "Kona Stableswap", img: "kona", cap: "read + quote", u: "https://kona.surf/" },
1228
- { n: "NOXA DEX V2", img: "noxa", cap: "read", u: "https://fun.noxa.eth.limo/" },
1229
- { n: "AFI Protocol", img: "afi", cap: "read + quote", u: "https://afiprotocol.xyz/" },
1230
- { n: "Kelp", img: "kelp", cap: "read + quote", u: "https://kelpdao.xyz/" },
1231
- { n: "Dolomite", img: "dolomite", cap: "read", u: "https://dolomite.io" },
1232
- { n: "Camelot V3", img: "camelot", cap: "read + quote", u: "https://camelot.exchange/" },
1233
- { n: "Beefy", img: "beefy", cap: "read + quote", u: "https://beefy.com" },
1234
- { n: "BounceBit", img: "bouncebit", cap: "read", u: "https://bouncebit.io/" },
1235
- { n: "BitFi", img: "bitfi", cap: "read", u: "https://www.bitfi.one/" },
1236
- { n: "Hypha", img: "hypha", cap: "read + quote", u: "https://www.hypha.sh/" },
1237
- { n: "40 Acres", img: "fortyacres", cap: "read + quote", u: "https://www.40acres.finance/" },
1238
- { n: "Hyperbeat", img: "hyperbeat", cap: "read + quote", u: "https://app.hyperbeat.org/" },
1239
- { n: "GMX V2", wm: "gmx.svg", cap: "read + order attestation", u: "https://gmx.io/" },
1240
- { n: "Relay", wm: "relay.svg", cap: "route source", u: "https://relay.link/" },
1241
- { n: "Odos", wm: "odos.svg", cap: "read + route source", u: "https://app.odos.xyz" },
1242
- { n: "Jupiter", wm: "jupiter.svg", cap: "solana route source", u: "https://jup.ag/" },
1243
- { n: "Stargate", wm: "stargate.svg", cap: "read + bridge route", u: "https://stargate.finance/" }
1244
- ];
1245
- var PROTOS_B = [
1246
- { n: "Uniswap V3 LP", img: "uniswap", cap: "preview + mint/collect prepare", u: "https://app.uniswap.org/" },
1247
- { n: "Velodrome V2", wm: "velodrome.svg", cap: "read + quote", u: "https://velodrome.finance/" },
1248
- { n: "QuickSwap", img: "quickswap", cap: "read + quote", u: "https://quickswap.exchange/" },
1249
- { n: "HyperSwap V3", wm: "hyperswap.svg", cap: "read + quote", u: "https://app.hyperswap.exchange/" },
1250
- { n: "Balancer V3", img: "balancer", cap: "read + quote + prepare + policy", u: "https://balancer.fi/" },
1251
- { n: "Aave V3", img: "aave", cap: "read + supply/withdraw prepare + policy", u: "https://aave.com/" },
1252
- { n: "Morpho Blue", img: "morpho", cap: "read", u: "https://app.morpho.org" },
1253
- { n: "Concrete", img: "concrete", cap: "read + quote", u: "https://app.concrete.xyz" },
1254
- { n: "HyperLend", img: "hyperlend", cap: "read + supply/withdraw prepare + policy", u: "https://app.hyperlend.finance/" },
1255
- { n: "Kinetiq Earn", img: "kinetiq", cap: "read + quote", u: "https://kinetiq.xyz/stake-hype#kinetiq-earn" },
1256
- { n: "Kona Lend", img: "konalend", cap: "read + supply/withdraw prepare + policy", u: "https://app.kona.surf/lending" },
1257
- { n: "Uniswap V2", img: "uniswapv2", cap: "read + quote", u: "https://app.uniswap.org/" },
1258
- { n: "SakuraSwap AMM", img: "sakuraswap", cap: "read + quote", u: "https://sakuraswap.com/" },
1259
- { n: "SakuraSwap CLMM", img: "sakuraswap", cap: "read + quote", u: "https://sakuraswap.com/" },
1260
- { n: "Curve DEX", img: "curve", cap: "read + quote", u: "https://curve.finance" },
1261
- { n: "Aave V2", img: "aavev2", cap: "read + quote", u: "https://aave.com" },
1262
- { n: "Velodrome Slipstream", img: "velodrome", cap: "read + quote", u: "https://velodrome.finance/" },
1263
- { n: "Sky sUSDS", img: "sky", cap: "read + quote", u: "https://app.sky.money/" },
1264
- { n: "ether.fi weETH", img: "etherfi", cap: "read + quote", u: "https://www.ether.fi/" },
1265
- { n: "SparkLend", img: "spark", cap: "read + supply/withdraw prepare + policy", u: "https://spark.finance/" },
1266
- { n: "Binance wBETH", img: "wbeth", cap: "read + quote", u: "https://www.binance.com/en/wbeth" },
1267
- { n: "Spark Savings", img: "sparksavings", cap: "read + quote", u: "https://spark.finance/" },
1268
- { n: "Fluid DEX", img: "fluid", cap: "read + quote", u: "https://www.fluid.io/" },
1269
- { n: "ZEROBASE", img: "zerobase", cap: "read", u: "https://app.zerobase.pro/" },
1270
- { n: "EtherFi Cash", img: "etherfiborrow", cap: "read", u: "https://www.ether.fi/cash" },
1271
- { n: "Venus", img: "venus", cap: "read + quote", u: "https://app.venus.io/" },
1272
- { n: "Lista slisBNB", img: "lista", cap: "read + quote", u: "https://lista.org/" },
1273
- { n: "Solv", img: "solv", cap: "read + quote", u: "https://solv.finance/" },
1274
- { n: "Avant avUSD", img: "avant", cap: "read + quote", u: "https://app.avantprotocol.com/" },
1275
- { n: "Yield Yak", img: "yieldyak", cap: "read + quote", u: "https://yieldyak.com/" },
1276
- { n: "SushiSwap", img: "sushiswap", cap: "read + quote", u: "https://sushi.com/" },
1277
- { n: "Sphere", img: "sphere", cap: "read", u: "https://sphere.finance/" },
1278
- { n: "Felix", img: "felix", cap: "read + quote", u: "https://www.usefelix.xyz/" },
1279
- { n: "Unit", img: "unit", cap: "read", u: "https://hyperunit.xyz/" },
1280
- { n: "Hyperliquid Spot", img: "hyperliquidspot", cap: "read + quote", u: "https://app.hyperliquid.xyz/" },
1281
- { n: "Kinetiq kmHYPE", img: "kmhype", cap: "read + quote", u: "https://markets.xyz" },
1282
- { n: "Lighter Robinhood", img: "lighter", cap: "read", u: "https://robinhoodchain.lighter.xyz/trade/LIT" },
1283
- { n: "Ekubo", img: "ekubo", cap: "read", u: "https://ekubo.org/" },
1284
- { n: "Myriad Markets", img: "myriad", cap: "read + quote", u: "https://myriad.markets/markets" },
1285
- { n: "GASSSS", img: "gassss", cap: "read + quote", u: "https://gassss.xyz" },
1286
- { n: "Rocket Pool", img: "rocketpool", cap: "read + quote", u: "https://rocketpool.net" },
1287
- { n: "StakeWise V2", img: "stakewise", cap: "read + quote", u: "https://stakewise.io/" },
1288
- { n: "Ostium", img: "ostium", cap: "read + quote", u: "https://www.ostium.io/" },
1289
- { n: "Gains Network", img: "gainsnetwork", cap: "read + quote", u: "https://gains.trade/" },
1290
- { n: "Aster asBNB", img: "aster", cap: "read + quote", u: "https://www.asterdex.com/en/earn" },
1291
- { n: "Lorenzo", img: "lorenzo", cap: "read", u: "https://www.lorenzo-protocol.xyz/" },
1292
- { n: "Trader Joe", img: "joedex", cap: "read + quote", u: "https://lfj.gg/avalanche" },
1293
- { n: "Folks Finance", img: "folks", cap: "read", u: "https://folks.finance/" },
1294
- { n: "Velodrome V1", img: "velodrome", cap: "read + quote", u: "https://velodrome.finance/" },
1295
- { n: "Looped Hype", img: "loopedhype", cap: "read + quote", u: "https://www.loopingcollective.org/" },
1296
- { n: "LI.FI", img: "lifi", cap: "read + route source", u: "https://li.fi/" },
1297
- { n: "Velora", img: "velora", cap: "read + route source", u: "https://app.velora.xyz" },
1298
- { n: "CoW Swap", wm: "cowswap.svg", cap: "read + route source", u: "https://cow.fi/" },
1299
- { n: "Across", wm: "across.svg", cap: "read + bridge route", u: "https://across.to" }
1300
- ];
1301
-
1302
- // Equalize optical weight: constant target area, clamped, then width-capped.
1303
- function normalizeMark(img) {
1304
- var ar = img.naturalWidth / img.naturalHeight;
1305
- if (!isFinite(ar) || ar <= 0) return;
1306
- var h = Math.sqrt(2600 / ar);
1307
- h = Math.max(22, Math.min(34, h));
1308
- if (h * ar > 170) h = 170 / ar;
1309
- img.style.height = h.toFixed(1) + "px";
1310
- }
1311
- function wireMarks(root) {
1312
- root.querySelectorAll("img.wm").forEach(function (img) {
1313
- if (img.complete) {
1314
- if (!img.classList.contains("tall") && img.naturalWidth) normalizeMark(img);
1315
- return;
1316
- }
1317
- img.addEventListener("load", function () {
1318
- if (!img.classList.contains("tall")) normalizeMark(img);
1319
- syncMarqueeVelocity();
1320
- }, { once: true });
1321
- });
1322
- }
1323
-
1324
- var MARQUEE_PX_PER_SECOND = 20;
1325
- var marqueeResizeTimer = 0;
1326
- function syncMarqueeVelocity() {
1327
- document.querySelectorAll(".track").forEach(function (track) {
1328
- var distance = track.scrollWidth / 2;
1329
- if (distance > 0) {
1330
- track.style.setProperty("--marquee-duration", Math.max(30, distance / MARQUEE_PX_PER_SECOND).toFixed(2) + "s");
1331
- }
1332
- });
1333
- }
1334
-
1335
- function protocolName(name) {
1336
- var label = name.replace(/\s+(?:DEX\s+)?V\d+(?:\s+LP)?\b/gi, "").trim();
1337
- var aliases = [
1338
- [/^Aerodrome\b/i, "Aerodrome"],
1339
- [/^Pancake(?:Swap)?\b/i, "PancakeSwap"],
1340
- [/^LFJ\b/i, "LFJ"],
1341
- [/^Curve\b/i, "Curve"],
1342
- [/^Pendle\b/i, "Pendle"],
1343
- [/^Morpho\b/i, "Morpho"],
1344
- [/^Lido\b/i, "Lido"],
1345
- [/^Kinetiq\b/i, "Kinetiq"],
1346
- [/^Aborean\b/i, "Aborean"],
1347
- [/^Stable Swap\b/i, "Stable"],
1348
- [/^Ethena\b/i, "Ethena"],
1349
- [/^Benqi\b/i, "Benqi"],
1350
- [/^Fluid\b/i, "Fluid"],
1351
- [/^Lista\b/i, "Lista"],
1352
- [/^Hyperliquid\b/i, "Hyperliquid"],
1353
- [/^Arcus\b/i, "Arcus"],
1354
- [/^NOXA\b/i, "NOXA"],
1355
- [/^Kona\b/i, "Kona"],
1356
- [/^Velodrome\b/i, "Velodrome"],
1357
- [/^SakuraSwap\b/i, "SakuraSwap"],
1358
- [/^Spark(?:Lend|\b)/i, "Spark"],
1359
- [/^(?:ether\.fi|EtherFi)\b/i, "EtherFi"],
1360
- [/^Sky\b/i, "Sky"],
1361
- [/^Binance\b/i, "Binance"],
1362
- [/^Avant\b/i, "Avant"],
1363
- [/^Aster\b/i, "Aster"],
1364
- [/^Lighter\b/i, "Lighter"],
1365
- [/^stHYPE \+ wstHYPE$/i, "Valantis"]
1366
- ];
1367
- for (var i = 0; i < aliases.length; i++) {
1368
- if (aliases[i][0].test(label)) return aliases[i][1];
1369
- }
1370
- return label;
1371
- }
1372
- function uniqueProtocols(list, seen) {
1373
- return list.filter(function (x) {
1374
- var label = protocolName(x.n);
1375
- if (seen[label]) return false;
1376
- seen[label] = true;
1377
- return true;
1378
- });
1379
- }
1380
- function chipRow(list) {
1381
- var seq = list.concat(list);
1382
- return seq.map(function (x) {
1383
- var label = protocolName(x.n);
1384
- var body = x.img
1385
- ? '<img class="wm tall" src="' + BRAND + x.img + '.webp" alt="' + label + '" decoding="async">' +
1386
- '<span class="wordmark">' + label + '</span>'
1387
- : x.wm
1388
- ? '<img class="' + (x.tall ? 'wm tall' : 'wm') + (x.mono ? ' mono' : '') + '" src="' + WM + x.wm + '" alt="' + label + '" decoding="async">' +
1389
- (x.tall ? '<span class="wordmark">' + label + '</span>' : '')
1390
- : '<span class="wordmark">' + label + '</span>';
1391
- return '<a class="chip wm-chip" href="' + x.u + '" target="_blank" rel="noopener noreferrer" aria-label="' + label + '">' + body + '</a>';
1392
- }).join("");
1393
- }
1394
- var visibleProtocols = Object.create(null);
1395
- document.getElementById("proto-track-a").innerHTML = chipRow(uniqueProtocols(PROTOS_A, visibleProtocols));
1396
- document.getElementById("proto-track-b").innerHTML = chipRow(uniqueProtocols(PROTOS_B, visibleProtocols));
1397
-
1398
- var LM = "assets/llms/";
1399
- var LLMS = [
1400
- { n: "Hermes Agent", wm: "hermes.png", tall: 1, u: "https://hermes.nousresearch.com" },
1401
- { n: "Claude", wm: "claude.svg", u: "https://claude.ai" },
1402
- { n: "Grok", wm: "grok.svg", u: "https://grok.com" },
1403
- { n: "Codex", wm: "codex-icon.svg", tall: 1, u: "https://openai.com/codex" },
1404
- { n: "Gemini", wm: "gemini-icon.svg", tall: 1, u: "https://gemini.google.com" },
1405
- { n: "OpenClaw", wm: "openclaw.svg", tall: 1, u: "https://openclaw.ai" },
1406
- { n: "Perplexity", wm: "perplexity.svg", u: "https://perplexity.ai" },
1407
- { n: "Manus", wm: "manus.svg", u: "https://manus.im" },
1408
- { n: "Cursor", wm: "cursor-icon.svg", tall: 1, u: "https://cursor.com" },
1409
- { n: "Windsurf", wm: "windsurf.svg", u: "https://windsurf.com" },
1410
- { n: "DeepSeek", wm: "deepseek.svg", u: "https://deepseek.com" },
1411
- { n: "Qwen", wm: "qwen.svg", tall: 1, u: "https://chat.qwen.ai" },
1412
- { n: "Kimi", wm: "kimi-icon.svg", tall: 1, u: "https://kimi.com" }
1413
- ];
1414
- document.getElementById("llm-track").innerHTML = LLMS.concat(LLMS).map(function (x) {
1415
- var cls = x.tall ? "wm tall" : "wm";
1416
- return '<a class="chip wm-chip" href="' + x.u + '" target="_blank" rel="noopener noreferrer" aria-label="' + x.n + '"><img class="' + cls + '" src="' + LM + x.wm + '" alt="' + x.n + '" decoding="async">' + (x.tall ? '<span class="wordmark">' + x.n + '</span>' : '') + '</a>';
1417
- }).join("");
1418
-
1419
- wireMarks(document.getElementById("proto-track-a"));
1420
- wireMarks(document.getElementById("proto-track-b"));
1421
- wireMarks(document.getElementById("llm-track"));
1422
- syncMarqueeVelocity();
1423
- if (document.fonts && document.fonts.ready) document.fonts.ready.then(syncMarqueeVelocity);
1424
- window.addEventListener("load", syncMarqueeVelocity);
1425
- window.addEventListener("resize", function () {
1426
- clearTimeout(marqueeResizeTimer);
1427
- marqueeResizeTimer = setTimeout(syncMarqueeVelocity, 120);
1428
- });
1429
-
1430
- var loader = document.getElementById("loader");
1431
- var fill = document.getElementById("loader-fill");
1432
- requestAnimationFrame(function () { fill.style.width = "100%"; });
1433
- window.addEventListener("load", function () {
1434
- setTimeout(function () { loader.classList.add("out"); }, 650);
1435
- });
1436
-
1437
- var reduced = window.matchMedia("(prefers-reduced-motion: reduce)").matches;
1438
- var coarse = window.matchMedia("(pointer: coarse)").matches;
1439
-
1440
- var progress = document.getElementById("progress");
1441
- var ticking = false;
1442
- function onScroll() {
1443
- if (ticking) return;
1444
- ticking = true;
1445
- requestAnimationFrame(function () {
1446
- var h = document.documentElement;
1447
- var max = h.scrollHeight - h.clientHeight;
1448
- progress.style.transform = "scaleX(" + (max > 0 ? h.scrollTop / max : 0) + ")";
1449
- ticking = false;
1450
- });
1451
- }
1452
- window.addEventListener("scroll", onScroll, { passive: true });
1453
- onScroll();
1454
-
1455
- var heroOrb = document.getElementById("hero-orb");
1456
- var heroTitle = document.getElementById("hero-title");
1457
- if (heroOrb && heroTitle && !reduced) {
1458
- var px = false;
1459
- window.addEventListener("scroll", function () {
1460
- if (px) return;
1461
- px = true;
1462
- requestAnimationFrame(function () {
1463
- var y = window.scrollY;
1464
- var lim = window.innerHeight * .8;
1465
- var f = Math.min(y / lim, 1);
1466
- var art = heroOrb.parentElement;
1467
- art.style.opacity = String(1 - f);
1468
- art.style.visibility = f >= 1 ? "hidden" : "visible";
1469
- art.style.transform = "translateY(" + (Math.min(y, lim) * .28) + "px)";
1470
- heroTitle.style.transform = "translateY(" + (Math.min(y, lim) * .16) + "px)";
1471
- heroTitle.style.opacity = String(1 - f * .8);
1472
- px = false;
1473
- });
1474
- }, { passive: true });
1475
- }
1476
-
1477
- // Hero is the original CSS orb.
1478
-
1479
- var nodes = Array.prototype.slice.call(document.querySelectorAll(".rv, .wires"));
1480
- if (reduced || !("IntersectionObserver" in window)) {
1481
- nodes.forEach(function (n) { n.classList.add("in"); n.classList.add("done"); });
1482
- } else {
1483
- var io = new IntersectionObserver(function (entries) {
1484
- entries.forEach(function (e) {
1485
- if (e.isIntersecting) {
1486
- e.target.classList.add("in");
1487
- (function (el) { setTimeout(function () { el.classList.add("done"); }, 1100); })(e.target);
1488
- io.unobserve(e.target);
1489
- }
1490
- });
1491
- }, { threshold: 0.1, rootMargin: "0px 0px -6% 0px" });
1492
- nodes.forEach(function (n) { io.observe(n); });
1493
- }
1494
-
1495
- var canvas = document.getElementById("gl");
1496
- if (!canvas || reduced || coarse) return;
1497
- var gl = canvas.getContext("webgl", { antialias:false, alpha:false, depth:false, stencil:false, premultipliedAlpha:false });
1498
- if (!gl) return;
1499
-
1500
- var vs = "attribute vec2 p;void main(){gl_Position=vec4(p,0.,1.);}";
1501
- var fs = [
1502
- "precision highp float;",
1503
- "uniform vec2 r; uniform float t;",
1504
- "float hash(vec2 p){return fract(sin(dot(p,vec2(127.1,311.7)))*43758.5453);}",
1505
- "float noise(vec2 p){vec2 i=floor(p),f=fract(p);float a=hash(i),b=hash(i+vec2(1.,0.)),c=hash(i+vec2(0.,1.)),d=hash(i+vec2(1.,1.));vec2 u=f*f*(3.-2.*f);return mix(a,b,u.x)+(c-a)*u.y*(1.-u.x)+(d-b)*u.x*u.y;}",
1506
- "void main(){",
1507
- " vec2 uv=(gl_FragCoord.xy-.5*r)/min(r.x,r.y);",
1508
- " vec2 p=uv*1.15; float tt=t*.08;",
1509
- " float n=noise(p*2.2+vec2(tt*.6,-tt*.4)); n+=.5*noise(p*4.6-vec2(tt,tt*.7)); n*=.55;",
1510
- " vec2 g=abs(fract(p*6.5)-.5); float grid=smoothstep(.06,0.,min(g.x,g.y));",
1511
- " float d=length(p); float rings=0.;",
1512
- " for(float i=0.;i<4.;i++){float ph=fract(tt*.35+i*.21);float rad=.08+ph*1.15;rings+=exp(-pow((d-rad)*28.,2.))*(1.-ph);}",
1513
- " float nodes=0.;",
1514
- " for(float i=0.;i<12.;i++){float a=i*2.399963;vec2 o=vec2(cos(a+tt*.2),sin(a-tt*.15))*(.18+.05*sin(tt+i));nodes+=exp(-dot(p-o,p-o)*420.);}",
1515
- " vec3 bg=vec3(0.043,0.063,0.094);",
1516
- " vec3 blue=vec3(0.486,0.769,1.0);",
1517
- " vec3 cool=vec3(0.655,0.847,1.0);",
1518
- " vec3 col=bg;",
1519
- " col+=blue*(n*.2); col+=blue*grid*.05;",
1520
- " col+=mix(blue,cool,.35)*rings*.22; col+=blue*nodes*.5;",
1521
- " col+=blue*exp(-d*d*1.8)*.08;",
1522
- " float vig=pow(max(1.-dot(uv*.72,uv*.72),0.),1.55);",
1523
- " col*=vig; gl_FragColor=vec4(col,1.);",
1524
- "}"
1525
- ].join("\n");
1526
-
1527
- function compile(type, src){var s=gl.createShader(type);gl.shaderSource(s,src);gl.compileShader(s);return s;}
1528
- var prog=gl.createProgram();
1529
- gl.attachShader(prog,compile(gl.VERTEX_SHADER,vs));
1530
- gl.attachShader(prog,compile(gl.FRAGMENT_SHADER,fs));
1531
- gl.linkProgram(prog);gl.useProgram(prog);
1532
- var buf=gl.createBuffer();gl.bindBuffer(gl.ARRAY_BUFFER,buf);
1533
- gl.bufferData(gl.ARRAY_BUFFER,new Float32Array([-1,-1,3,-1,-1,3]),gl.STATIC_DRAW);
1534
- var loc=gl.getAttribLocation(prog,"p");gl.enableVertexAttribArray(loc);gl.vertexAttribPointer(loc,2,gl.FLOAT,false,0,0);
1535
- var uR=gl.getUniformLocation(prog,"r"), uT=gl.getUniformLocation(prog,"t");
1536
- var running=true;
1537
- function resize(){
1538
- var dpr=Math.min(window.devicePixelRatio||1,1.5);
1539
- var w=Math.floor(canvas.clientWidth*dpr), h=Math.floor(canvas.clientHeight*dpr);
1540
- if(canvas.width!==w||canvas.height!==h){canvas.width=w;canvas.height=h;gl.viewport(0,0,w,h);}
1541
- }
1542
- function frame(now){
1543
- if(!running) return;
1544
- resize();
1545
- gl.uniform2f(uR,canvas.width,canvas.height);
1546
- gl.uniform1f(uT,now*0.001);
1547
- gl.drawArrays(gl.TRIANGLES,0,3);
1548
- requestAnimationFrame(frame);
1549
- }
1550
- function fit(){canvas.style.width="100%";canvas.style.height="100%";resize();}
1551
- fit();
1552
- window.addEventListener("resize",fit,{passive:true});
1553
- document.addEventListener("visibilitychange",function(){running=document.visibilityState==="visible";if(running)requestAnimationFrame(frame);});
1554
- requestAnimationFrame(frame);
1555
- })();
1556
- </script>
1557
- </body>
1558
- </html>