@oracle-agent/oracle 0.4.2 → 0.6.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 (129) hide show
  1. package/README.md +76 -18
  2. package/SETUP.md +13 -0
  3. package/bin/oracle-data-mcp.mjs +1 -1
  4. package/bin/oracle.mjs +33 -0
  5. package/docs/cli.md +47 -0
  6. package/docs/connectors.md +13 -0
  7. package/package.json +6 -2
  8. package/profiles/oracle/SOUL.md +10 -4
  9. package/profiles/robinhood-agent/SOUL.md +5 -3
  10. package/protocols/templates/safe-erc20/README.md +9 -0
  11. package/public/agent-connect/app.js +16 -13
  12. package/public/oracle-splash/assets/hero/orb.avif +0 -0
  13. package/public/oracle-splash/assets/hero/orb.webm +0 -0
  14. package/public/oracle-splash/assets/llms/claude.svg +1 -0
  15. package/public/oracle-splash/assets/llms/codex.svg +1 -0
  16. package/public/oracle-splash/assets/llms/cursor.svg +17 -0
  17. package/public/oracle-splash/assets/llms/deepseek.svg +1 -0
  18. package/public/oracle-splash/assets/llms/gemini.svg +1 -0
  19. package/public/oracle-splash/assets/llms/grok.svg +8 -0
  20. package/public/oracle-splash/assets/llms/hermes.png +0 -0
  21. package/public/oracle-splash/assets/llms/kimi.svg +1 -0
  22. package/public/oracle-splash/assets/llms/manus.svg +18 -0
  23. package/public/oracle-splash/assets/llms/openclaw.svg +22 -0
  24. package/public/oracle-splash/assets/llms/perplexity.svg +1 -0
  25. package/public/oracle-splash/assets/llms/qwen.svg +1 -0
  26. package/public/oracle-splash/assets/llms/windsurf.svg +1 -0
  27. package/public/oracle-splash/assets/protocols/abcdex.png +0 -0
  28. package/public/oracle-splash/assets/protocols/across.png +0 -0
  29. package/public/oracle-splash/assets/protocols/aerodrome.png +0 -0
  30. package/public/oracle-splash/assets/protocols/balancer.png +0 -0
  31. package/public/oracle-splash/assets/protocols/cowswap.png +0 -0
  32. package/public/oracle-splash/assets/protocols/curve.png +0 -0
  33. package/public/oracle-splash/assets/protocols/dreamcash.png +0 -0
  34. package/public/oracle-splash/assets/protocols/felix.png +0 -0
  35. package/public/oracle-splash/assets/protocols/gmx.png +0 -0
  36. package/public/oracle-splash/assets/protocols/hyena.png +0 -0
  37. package/public/oracle-splash/assets/protocols/hyperbeat.png +0 -0
  38. package/public/oracle-splash/assets/protocols/hyperliquid.png +0 -0
  39. package/public/oracle-splash/assets/protocols/hyperswap.png +0 -0
  40. package/public/oracle-splash/assets/protocols/jupiter.png +0 -0
  41. package/public/oracle-splash/assets/protocols/kinetiq.png +0 -0
  42. package/public/oracle-splash/assets/protocols/lfj.png +0 -0
  43. package/public/oracle-splash/assets/protocols/lifi.png +0 -0
  44. package/public/oracle-splash/assets/protocols/magic-eden.png +0 -0
  45. package/public/oracle-splash/assets/protocols/morpho.png +0 -0
  46. package/public/oracle-splash/assets/protocols/odos.png +0 -0
  47. package/public/oracle-splash/assets/protocols/oneinch.png +0 -0
  48. package/public/oracle-splash/assets/protocols/opensea.png +0 -0
  49. package/public/oracle-splash/assets/protocols/pancakeswap.png +0 -0
  50. package/public/oracle-splash/assets/protocols/paragon.png +0 -0
  51. package/public/oracle-splash/assets/protocols/paraswap.png +0 -0
  52. package/public/oracle-splash/assets/protocols/pendle.png +0 -0
  53. package/public/oracle-splash/assets/protocols/polymarket.png +0 -0
  54. package/public/oracle-splash/assets/protocols/quickswap.png +0 -0
  55. package/public/oracle-splash/assets/protocols/relay.png +0 -0
  56. package/public/oracle-splash/assets/protocols/stargate.png +0 -0
  57. package/public/oracle-splash/assets/protocols/tradexyz.png +0 -0
  58. package/public/oracle-splash/assets/protocols/uniswap.png +0 -0
  59. package/public/oracle-splash/assets/protocols/velodrome.png +0 -0
  60. package/public/oracle-splash/assets/protocols/ventuals.png +0 -0
  61. package/public/oracle-splash/assets/wordmarks/across.svg +4 -0
  62. package/public/oracle-splash/assets/wordmarks/aerodrome.svg +23 -0
  63. package/public/oracle-splash/assets/wordmarks/balancer.svg +3 -0
  64. package/public/oracle-splash/assets/wordmarks/cowswap.svg +1 -0
  65. package/public/oracle-splash/assets/wordmarks/gmx.svg +13 -0
  66. package/public/oracle-splash/assets/wordmarks/hyena.svg +7 -0
  67. package/public/oracle-splash/assets/wordmarks/hyperliquid.svg +21 -0
  68. package/public/oracle-splash/assets/wordmarks/hyperswap.svg +13 -0
  69. package/public/oracle-splash/assets/wordmarks/jupiter.svg +35 -0
  70. package/public/oracle-splash/assets/wordmarks/lifi.png +0 -0
  71. package/public/oracle-splash/assets/wordmarks/magic-eden.svg +1 -0
  72. package/public/oracle-splash/assets/wordmarks/morpho.svg +1 -0
  73. package/public/oracle-splash/assets/wordmarks/odos.svg +3 -0
  74. package/public/oracle-splash/assets/wordmarks/oneinch.svg +6 -0
  75. package/public/oracle-splash/assets/wordmarks/opensea.svg +1 -0
  76. package/public/oracle-splash/assets/wordmarks/outcome.svg +16 -0
  77. package/public/oracle-splash/assets/wordmarks/pancakeswap.svg +18 -0
  78. package/public/oracle-splash/assets/wordmarks/paraswap.svg +16 -0
  79. package/public/oracle-splash/assets/wordmarks/pendle.png +0 -0
  80. package/public/oracle-splash/assets/wordmarks/polymarket.png +0 -0
  81. package/public/oracle-splash/assets/wordmarks/quickswap.png +0 -0
  82. package/public/oracle-splash/assets/wordmarks/relay.svg +8 -0
  83. package/public/oracle-splash/assets/wordmarks/stargate.svg +15 -0
  84. package/public/oracle-splash/assets/wordmarks/uniswap.svg +18 -0
  85. package/public/oracle-splash/assets/wordmarks/velodrome.svg +84 -0
  86. package/public/oracle-splash/assets/wordmarks/xyz.svg +12 -0
  87. package/public/oracle-splash/index.html +784 -498
  88. package/scripts/check-doc-drift.mjs +111 -0
  89. package/skills/oracle-chat/SKILL.md +61 -0
  90. package/skills/oracle-chat/chain.SKILL.md +31 -0
  91. package/skills/oracle-chat/setup.SKILL.md +37 -0
  92. package/skins/oracle.yaml +52 -0
  93. package/src/cli/chain-catalog.mjs +215 -0
  94. package/src/cli/chain-state.mjs +74 -0
  95. package/src/cli/commands/chain.mjs +143 -0
  96. package/src/cli/commands/chat.mjs +268 -0
  97. package/src/cli/commands/credential.mjs +9 -0
  98. package/src/cli/commands/data-mcp.mjs +18 -0
  99. package/src/cli/commands/data.mjs +73 -0
  100. package/src/cli/commands/doctor.mjs +131 -0
  101. package/src/cli/commands/help.mjs +7 -0
  102. package/src/cli/commands/init.mjs +27 -0
  103. package/src/cli/commands/mcp.mjs +142 -0
  104. package/src/cli/commands/model.mjs +37 -0
  105. package/src/cli/commands/prepare.mjs +12 -0
  106. package/src/cli/commands/public.mjs +20 -0
  107. package/src/cli/commands/route.mjs +12 -0
  108. package/src/cli/commands/runner.mjs +9 -0
  109. package/src/cli/commands/scan.mjs +12 -0
  110. package/src/cli/commands/setup.mjs +283 -0
  111. package/src/cli/commands/sign.mjs +21 -0
  112. package/src/cli/commands/signer.mjs +9 -0
  113. package/src/cli/commands/upgrade.mjs +12 -0
  114. package/src/cli/commands/vault.mjs +9 -0
  115. package/src/cli/commands/version.mjs +22 -0
  116. package/src/cli/first-run.mjs +23 -0
  117. package/src/cli/kernel.mjs +237 -0
  118. package/src/cli/mcp-targets/chatgpt.mjs +51 -0
  119. package/src/cli/mcp-targets/claude-code.mjs +39 -0
  120. package/src/cli/mcp-targets/claude-desktop.mjs +24 -0
  121. package/src/cli/mcp-targets/codex.mjs +41 -0
  122. package/src/cli/mcp-targets/shared.mjs +61 -0
  123. package/src/cli/messaging-platforms.mjs +209 -0
  124. package/src/cli/operator-dispatch.mjs +258 -0
  125. package/src/cli/oracle-harness.py +148 -0
  126. package/src/cli/paths.mjs +83 -0
  127. package/src/cli/setup-state.mjs +168 -0
  128. package/src/cli/spawn-child.mjs +43 -0
  129. package/src/public-api/connect-agent.mjs +29 -10
@@ -4,12 +4,12 @@
4
4
  <meta charset="UTF-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <title>ORACLE</title>
7
- <meta name="description" content="Oracle multichain agent control. Routes across EVM + Solana. Self-custody. Powered by Hermes." />
7
+ <meta name="description" content="Oracle multichain agent control. Prepare-only public plane. Self-custody. Powered by Hermes." />
8
8
  <meta name="theme-color" content="#0B1018" />
9
9
  <meta name="robots" content="noindex,nofollow" />
10
10
  <link rel="preconnect" href="https://fonts.googleapis.com" />
11
11
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
12
- <link href="https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,300;0,400;0,500;1,300;1,400;1,500&family=Outfit:wght@300;400;500&family=IBM+Plex+Mono:wght@400;500&display=swap" rel="stylesheet" />
12
+ <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" />
13
13
  <style>
14
14
  :root{
15
15
  --bg:#0B1018;
@@ -19,8 +19,8 @@
19
19
  --blue2:#A7D8FF;
20
20
  --blue-dim:#3a6f99;
21
21
  --ink:#E8F1FA;
22
- --cool:#9BB6D1;
23
- --mute:#5B738F;
22
+ --cool:#B7CCE0;
23
+ --mute:#89A3BE;
24
24
  --line:rgba(124,196,255,.14);
25
25
  --line-2:rgba(124,196,255,.24);
26
26
  --evm:#7CC4FF;
@@ -39,18 +39,33 @@
39
39
  *{box-sizing:border-box;margin:0;padding:0}
40
40
  html{scroll-behavior:smooth;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
41
41
  body{
42
- min-height:100dvh;background:var(--bg);color:var(--ink);
43
- font-family:var(--sans);font-weight:300;overflow-x:hidden;
42
+ min-height:100dvh;background:var(--bg);color:var(--ink);position:relative;isolation:isolate;
43
+ font-family:var(--sans);font-weight:350;overflow-x:hidden;
44
44
  }
45
45
  ::selection{background:var(--blue);color:#061018}
46
46
  a{color:inherit;text-decoration:none}
47
47
  button{font:inherit;color:inherit;background:none;border:0;cursor:pointer}
48
+ img{display:inline-block}
48
49
 
49
50
  .grain{
50
51
  position:fixed;inset:-40%;z-index:40;pointer-events:none;opacity:.04;mix-blend-mode:soft-light;
51
52
  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>");
52
53
  }
53
54
 
55
+ /* ── orbital oracle mark ───────────────────────────── */
56
+ .orbital{position:relative;display:inline-block}
57
+ .orbital svg{display:block;overflow:visible;width:100%;height:100%}
58
+ .orbital .ring{transform-origin:50% 50%;fill:none;stroke:var(--blue);stroke-width:2;opacity:.55}
59
+ .orbital .ring ellipse{vector-effect:non-scaling-stroke}
60
+ .orbital .r1{animation:orb-spin 13s linear infinite}
61
+ .orbital .r2{animation:orb-spin 21s linear infinite reverse;opacity:.4}
62
+ .orbital .r3{animation:orb-spin 32s linear infinite;opacity:.28}
63
+ .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}
64
+ .orbital .core{fill:var(--blue);animation:core-pulse 3.2s var(--ease) infinite}
65
+ .orbital .halo{fill:none;stroke:rgba(124,196,255,.22);stroke-width:5;filter:blur(3px)}
66
+ @keyframes orb-spin{to{transform:rotate(360deg)}}
67
+ @keyframes core-pulse{0%,100%{opacity:1}50%{opacity:.55}}
68
+
54
69
  .loader{
55
70
  position:fixed;inset:0;z-index:50;background:var(--bg);
56
71
  display:grid;place-items:center;
@@ -58,22 +73,25 @@ button{font:inherit;color:inherit;background:none;border:0;cursor:pointer}
58
73
  }
59
74
  .loader.out{opacity:0;visibility:hidden;pointer-events:none}
60
75
  .loader-inner{display:flex;flex-direction:column;align-items:center;gap:18px}
61
- .loader-mark{width:42px;height:42px;position:relative}
62
- .loader-mark i{position:absolute;inset:0;border:1px solid var(--blue);border-radius:50%;animation:pulse 1.4s var(--ease) infinite;opacity:.35}
63
- .loader-mark b{position:absolute;inset:12px;border-radius:50%;background:var(--blue);box-shadow:0 0 24px rgba(124,196,255,.5)}
76
+ .loader-mark{width:64px;height:64px;filter:drop-shadow(0 0 18px rgba(124,196,255,.4))}
64
77
  .loader-word{font-family:var(--display);font-size:18px;letter-spacing:.08em;text-transform:none;color:var(--cool);font-style:italic}
65
78
  .loader-bar{width:120px;height:1px;background:rgba(124,196,255,.15);overflow:hidden}
66
79
  .loader-bar span{display:block;height:100%;width:0;background:var(--blue);transition:width 1.1s var(--ease)}
67
- @keyframes pulse{0%{transform:scale(.85);opacity:.55}70%{transform:scale(1.35);opacity:0}100%{transform:scale(1.35);opacity:0}}
80
+
81
+ .progress{
82
+ position:fixed;top:0;left:0;right:0;height:2px;z-index:35;pointer-events:none;
83
+ background:linear-gradient(90deg,var(--blue),var(--blue2));
84
+ transform-origin:0 50%;transform:scaleX(0);
85
+ box-shadow:0 0 12px rgba(124,196,255,.5);
86
+ }
68
87
 
69
88
  .nav{
70
89
  position:fixed;top:0;left:0;right:0;z-index:30;
71
90
  display:grid;
72
- grid-template-columns:1fr auto 1fr;
91
+ grid-template-columns:1fr auto;
73
92
  align-items:center;gap:16px;
74
- padding:16px var(--pad);
93
+ padding:14px var(--pad);
75
94
  background:rgba(11,16,24,.82);
76
- backdrop-filter:blur(14px);
77
95
  border-bottom:1px solid var(--line);
78
96
  }
79
97
  .brand{
@@ -81,23 +99,17 @@ button{font:inherit;color:inherit;background:none;border:0;cursor:pointer}
81
99
  font-family:var(--display);font-size:24px;font-weight:400;letter-spacing:.02em;
82
100
  text-transform:none;justify-self:start;
83
101
  }
84
- .brand .orb{width:8px;height:8px;border-radius:50%;background:var(--blue);box-shadow:0 0 14px rgba(124,196,255,.85)}
85
- .nav-mid{
86
- display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:10px 18px;
87
- font-family:var(--mono);font-size:9px;letter-spacing:.18em;text-transform:uppercase;color:var(--mute);
88
- }
89
- .nav-mid b{color:var(--blue2);font-weight:500}
90
- .nav-mid a.hermes{
91
- color:var(--blue);font-weight:600;border-bottom:1px solid transparent;
92
- transition:border-color .25s,color .25s;
93
- }
94
- .nav-mid a.hermes:hover{border-bottom-color:var(--blue);color:var(--ink)}
102
+ .brand .orbital{width:26px;height:26px;filter:drop-shadow(0 0 10px rgba(124,196,255,.6))}
95
103
  .nav-links{
96
104
  display:flex;align-items:center;gap:18px;justify-self:end;
97
105
  font-family:var(--mono);font-size:10px;letter-spacing:.18em;text-transform:uppercase;color:var(--cool);
98
106
  }
99
107
  .nav-links a{opacity:.78;transition:opacity .25s,color .25s}
100
108
  .nav-links a:hover{opacity:1;color:var(--blue2)}
109
+ .nav-chip{
110
+ font-family:var(--mono);font-size:9px;letter-spacing:.16em;text-transform:uppercase;
111
+ border:1px solid rgba(124,196,255,.3);border-radius:999px;padding:7px 11px;color:var(--blue2);opacity:.95;
112
+ }
101
113
  .nav-cta{
102
114
  border:1px solid rgba(124,196,255,.28);border-radius:999px;padding:10px 16px;color:var(--ink);
103
115
  transition:border-color .3s,color .3s,box-shadow .3s;
@@ -105,17 +117,86 @@ button{font:inherit;color:inherit;background:none;border:0;cursor:pointer}
105
117
  .nav-cta:hover{border-color:var(--blue);color:var(--blue2);box-shadow:0 0 0 1px rgba(124,196,255,.12)}
106
118
 
107
119
  /* fixed soft field behind content */
108
- #gl{position:fixed;inset:0;width:100%;height:100%;z-index:0;display:block;opacity:.9}
120
+ #gl{position:fixed;inset:0;width:100%;height:100%;z-index:-1;display:block;opacity:.75;pointer-events:none}
109
121
  .veil{
110
122
  position:fixed;inset:0;z-index:1;pointer-events:none;
111
123
  background:
112
- radial-gradient(60% 50% at 50% 28%, rgba(124,196,255,.08), transparent 58%),
113
- linear-gradient(180deg, rgba(11,16,24,.2), var(--bg) 88%);
124
+ radial-gradient(60% 50% at 50% 28%, rgba(124,196,255,.10), transparent 58%),
125
+ linear-gradient(180deg, rgba(11,16,24,.12), rgba(11,16,24,.42));
114
126
  }
115
127
  main{position:relative;z-index:2;padding-top:84px}
116
128
 
117
- /* kill old hero */
118
- .hero,.hero-core,.title-powered,.scroll-cue,.eyebrow,.lede,.actions,.btn,.meta-row{display:none!important}
129
+
130
+ /* homepage */
131
+ .home{
132
+ min-height:calc(100dvh - 84px);
133
+ display:grid;place-items:center;
134
+ padding:clamp(20px,4vh,44px) var(--pad) clamp(56px,9vh,96px);
135
+ position:relative;overflow:hidden;text-align:center;
136
+ }
137
+ .home::after{
138
+ content:"";position:absolute;left:50%;bottom:22px;width:1px;height:74px;
139
+ background:linear-gradient(180deg, rgba(124,196,255,.65), transparent);
140
+ transform-origin:50% 0;animation:drop-line 2.8s var(--ease) infinite;
141
+ }
142
+ .home-inner{max-width:min(1100px,100%);width:100%;margin:0 auto;position:relative;display:flex;flex-direction:column;align-items:center}
143
+ .home-kicker{
144
+ font-family:var(--mono);font-size:10px;letter-spacing:.34em;text-transform:uppercase;color:var(--blue);
145
+ margin-bottom:6px;position:relative;z-index:3;
146
+ }
147
+ .hero-stage{position:relative;width:100%;display:grid;place-items:center;min-height:clamp(360px,52vh,560px)}
148
+ .hero-art{position:absolute;inset:0;display:grid;place-items:center;z-index:0;pointer-events:none}
149
+ #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}
150
+ #orb-vid.ready{opacity:.5}
151
+ .blender-orb .hero-orb{display:none}
152
+ .hero-orb{
153
+ width:clamp(380px,50vw,640px);aspect-ratio:1;position:relative;transform-style:preserve-3d;
154
+ animation:orb-slew 22s linear infinite;
155
+ }
156
+ .hero-orb .lat{position:absolute;inset:0;border-radius:50%;border:1.4px solid rgba(124,196,255,.5);transform-style:preserve-3d;box-shadow:0 0 26px rgba(124,196,255,.12)}
157
+ .hero-orb .lat.l1{transform:rotateY(0deg)}
158
+ .hero-orb .lat.l2{transform:rotateY(45deg)}
159
+ .hero-orb .lat.l3{transform:rotateY(90deg)}
160
+ .hero-orb .lat.l4{transform:rotateY(135deg)}
161
+ .hero-orb .par{position:absolute;left:50%;top:50%;border-radius:50%;border:1.2px solid rgba(124,196,255,.38);transform-style:preserve-3d}
162
+ .hero-orb .par.p1{width:96%;height:96%;transform:translate(-50%,-50%) rotateX(90deg)}
163
+ .hero-orb .par.p2{width:78%;height:78%;transform:translate(-50%,-50%) rotateX(90deg) translateZ(calc(clamp(380px,50vw,640px) * .31))}
164
+ .hero-orb .par.p3{width:78%;height:78%;transform:translate(-50%,-50%) rotateX(90deg) translateZ(calc(clamp(380px,50vw,640px) * -.31))}
165
+ .hero-orb .eq{position:absolute;inset:-4%;border-radius:50%;border:2px solid rgba(167,216,255,.75);transform:rotateX(76deg);box-shadow:0 0 40px rgba(124,196,255,.35)}
166
+ .hero-orb .core-glow{
167
+ position:absolute;inset:33%;border-radius:50%;
168
+ background:radial-gradient(circle at 40% 36%, rgba(232,241,250,.9), rgba(124,196,255,.65) 34%, rgba(124,196,255,.12) 68%, transparent);
169
+ box-shadow:0 0 46px rgba(124,196,255,.45), 0 0 110px rgba(124,196,255,.18);
170
+ animation:core-pulse 3.4s var(--ease) infinite;
171
+ }
172
+ .hero-orb .orbit-dot{position:absolute;width:10px;height:10px;border-radius:50%;background:var(--blue2);box-shadow:0 0 20px rgba(167,216,255,.9);left:calc(50% - 5px);top:calc(50% - 5px);transform:rotateX(76deg) translateX(clamp(170px,23vw,280px));animation:none}
173
+ .home-title{
174
+ position:relative;z-index:2;
175
+ font-family:var(--display);font-weight:300;font-size:clamp(96px,17vw,230px);line-height:.9;letter-spacing:-.045em;
176
+ text-transform:uppercase;color:var(--ink);
177
+ text-shadow:0 2px 30px rgba(0,0,0,.6);
178
+ }
179
+ .home-title em{font-style:italic;color:var(--blue2)}
180
+ .hero-lockup{position:relative;z-index:2;display:flex;flex-direction:column;align-items:center}
181
+ .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}
182
+ .hero-byline:hover{color:var(--ink)}
183
+ .home-copy{position:relative;z-index:3;display:flex;flex-direction:column;align-items:center}
184
+ .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)}
185
+ .home-actions{display:flex;flex-wrap:wrap;gap:14px;margin-top:26px;align-items:center;justify-content:center}
186
+ .enter-cta{
187
+ display:inline-flex;align-items:center;gap:12px;border:1px solid rgba(124,196,255,.45);border-radius:999px;
188
+ padding:14px 22px;color:var(--ink);font-family:var(--mono);font-size:10px;letter-spacing:.18em;text-transform:uppercase;
189
+ background:linear-gradient(180deg, rgba(124,196,255,.12), rgba(124,196,255,.035));
190
+ box-shadow:0 0 0 1px rgba(124,196,255,.08),0 20px 46px rgba(0,0,0,.3);
191
+ transition:transform .35s var(--ease),border-color .35s,box-shadow .35s;
192
+ }
193
+ .enter-cta::after{content:"↓";font-size:13px;color:var(--blue)}
194
+ .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)}
195
+ .hero-note{font-family:var(--mono);font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:var(--mute)}
196
+ @keyframes orb-slew{0%{transform:rotateX(18deg) rotateZ(-8deg) rotateY(0deg)}100%{transform:rotateX(18deg) rotateZ(-8deg) rotateY(360deg)}}
197
+ @keyframes home-breathe{0%,100%{opacity:.65;transform:scale(1)}50%{opacity:1;transform:scale(1.07)}}
198
+ @keyframes drop-line{0%,100%{opacity:.25;transform:translateX(-50%) scaleY(.45)}50%{opacity:1;transform:translateX(-50%) scaleY(1)}}}
199
+
119
200
 
120
201
  .section{
121
202
  position:relative;z-index:2;max-width:var(--max);margin:0 auto;
@@ -124,85 +205,15 @@ main{position:relative;z-index:2;padding-top:84px}
124
205
  .section:first-of-type{padding-top:clamp(18px,3vh,28px)}
125
206
  .section-label{
126
207
  font-family:var(--mono);font-size:10px;letter-spacing:.34em;text-transform:uppercase;color:var(--blue);margin-bottom:14px;
127
- }
128
- .veil{
129
- position:absolute;inset:0;z-index:1;pointer-events:none;
130
- background:
131
- radial-gradient(70% 55% at 50% 42%, transparent 0%, rgba(11,16,24,.3) 48%, var(--bg) 82%),
132
- linear-gradient(180deg, rgba(11,16,24,.28) 0%, transparent 24%, transparent 70%, var(--bg) 100%);
133
- }
134
- .hero-core{
135
- position:relative;z-index:2;width:min(920px,100%);
136
- display:flex;flex-direction:column;align-items:center;text-align:center;
137
- gap:clamp(18px,3vw,28px);
138
- }
139
- .eyebrow{
140
- font-family:var(--mono);font-size:11px;letter-spacing:.46em;text-transform:uppercase;color:var(--blue);
141
208
  display:inline-flex;align-items:center;gap:12px;
142
209
  }
143
- .eyebrow::before,.eyebrow::after{content:"";width:28px;height:1px;background:var(--blue-dim)}
144
- h1{
145
- font-family:var(--display);font-weight:300;
146
- font-size:clamp(78px,17vw,176px);line-height:.86;letter-spacing:.01em;
147
- text-transform:none;
148
- }
149
- h1 em{
150
- font-style:italic;font-weight:400;
151
- background:linear-gradient(110deg, var(--blue2) 8%, var(--blue) 48%, #cfe9ff 100%);
152
- -webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;
153
- }
154
- .title-powered{
155
- display:inline-flex;align-items:center;gap:10px;
156
- margin-top:-6px;
157
- font-family:var(--mono);font-size:11px;letter-spacing:.28em;text-transform:uppercase;color:var(--mute);
158
- }
159
- .title-powered .mark{
160
- width:6px;height:6px;border-radius:50%;background:var(--blue);
161
- box-shadow:0 0 10px rgba(124,196,255,.7);
162
- }
163
- .title-powered a{
164
- color:var(--blue);font-weight:500;border-bottom:1px solid transparent;
165
- transition:border-color .25s,color .25s;letter-spacing:.2em;
166
- }
167
- .title-powered a:hover{border-bottom-color:var(--blue);color:var(--ink)}
168
- .lede{max-width:34ch;font-size:clamp(15px,1.7vw,18px);line-height:1.65;color:var(--cool);font-weight:300}
169
- .actions{display:flex;flex-wrap:wrap;gap:12px;justify-content:center;margin-top:6px}
170
- .btn{
171
- font-family:var(--mono);font-size:11px;letter-spacing:.2em;text-transform:uppercase;
172
- border-radius:999px;padding:15px 26px;
173
- transition:transform .3s var(--ease),box-shadow .35s,background .3s,border-color .3s,color .3s;
174
- }
175
- .btn-primary{background:var(--blue);color:#061018;font-weight:500}
176
- .btn-primary:hover{transform:translateY(-2px);box-shadow:0 14px 36px rgba(124,196,255,.28)}
177
- .btn-ghost{border:1px solid var(--line);color:var(--cool)}
178
- .btn-ghost:hover{border-color:var(--blue-dim);color:var(--blue2)}
179
- .meta-row{
180
- margin-top:10px;display:flex;flex-wrap:wrap;gap:18px;justify-content:center;
181
- font-family:var(--mono);font-size:10px;letter-spacing:.18em;text-transform:uppercase;color:var(--mute);
182
- }
183
- .meta-row span{display:inline-flex;align-items:center;gap:8px}
184
- .meta-row i{width:5px;height:5px;border-radius:50%;background:var(--blue);opacity:.75;box-shadow:0 0 8px rgba(124,196,255,.6)}
185
- .scroll-cue{
186
- position:absolute;left:50%;bottom:28px;transform:translateX(-50%);z-index:2;
187
- display:flex;flex-direction:column;align-items:center;gap:10px;
188
- font-family:var(--mono);font-size:9px;letter-spacing:.32em;text-transform:uppercase;color:var(--mute);
189
- }
190
- .scroll-cue .line{width:1px;height:42px;background:linear-gradient(var(--blue),transparent)}
191
-
192
- .section{
193
- position:relative;z-index:2;max-width:var(--max);margin:0 auto;
194
- padding:clamp(72px,12vh,130px) var(--pad) 0;
195
- }
196
- .section-label{
197
- font-family:var(--mono);font-size:10px;letter-spacing:.34em;text-transform:uppercase;color:var(--blue);margin-bottom:14px;
198
- }
199
210
  .section-title{
200
211
  font-family:var(--display);font-weight:400;
201
212
  font-size:clamp(34px,5vw,54px);line-height:1.06;letter-spacing:-.01em;
202
- max-width:16ch;margin-bottom:12px;
213
+ max-width:18ch;margin-bottom:12px;
203
214
  }
204
215
  .section-title em{font-style:italic;color:var(--blue2)}
205
- .section-lede{max-width:50ch;color:var(--cool);font-size:15px;line-height:1.65;margin-bottom:clamp(28px,4vw,44px)}
216
+ .section-lede{max-width:52ch;color:#B7CCE0;font-size:16px;line-height:1.7;margin-bottom:clamp(28px,4vw,44px)}
206
217
 
207
218
  /* orchestration graph */
208
219
  .graph-shell{
@@ -210,9 +221,9 @@ h1 em{
210
221
  background:linear-gradient(180deg, rgba(124,196,255,.04), transparent 42%), var(--panel);
211
222
  }
212
223
  .graph-top{
213
- display:flex;flex-wrap:wrap;justify-content:space-between;gap:10px;
224
+ display:flex;flex-wrap:wrap;justify-content:center;gap:10px;
214
225
  padding:14px 18px;border-bottom:1px solid var(--line);
215
- font-family:var(--mono);font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:var(--mute);
226
+ font-family:var(--mono);font-size:10.5px;letter-spacing:.16em;text-transform:uppercase;color:#88A6C2;
216
227
  }
217
228
  .graph-top b{color:var(--blue);font-weight:500}
218
229
  .graph-canvas{padding:clamp(28px,4vw,40px) clamp(14px,2.5vw,24px) clamp(22px,3vw,30px);overflow:auto}
@@ -237,39 +248,54 @@ h1 em{
237
248
  .route-strip{grid-template-columns:repeat(3,minmax(0,1fr))}
238
249
  }
239
250
  .node{
240
- border:1px solid var(--line-2);border-radius:14px;background:rgba(11,16,24,.72);
251
+ border:1px solid rgba(124,196,255,.42);border-radius:14px;background:rgba(21,32,49,.92);
241
252
  padding:14px 12px;text-align:center;
242
253
  transition:border-color .3s,transform .3s var(--ease),box-shadow .3s;
243
254
  }
244
255
  .node:hover{transform:translateY(-2px);box-shadow:0 12px 30px rgba(0,0,0,.28)}
245
256
  .node.hub{
246
- width:min(280px,100%);
257
+ width:min(300px,100%);
247
258
  border-color:rgba(124,196,255,.5);
248
259
  background:linear-gradient(180deg, rgba(124,196,255,.12), rgba(11,16,24,.88));
249
260
  box-shadow:0 0 0 1px rgba(124,196,255,.08), 0 16px 40px rgba(0,0,0,.3);
250
- padding:18px 16px;
261
+ padding:18px 16px 20px;
262
+ display:flex;flex-direction:column;align-items:center;
251
263
  }
252
- .node .tag{font-family:var(--mono);font-size:9px;letter-spacing:.2em;text-transform:uppercase;color:var(--mute);margin-bottom:8px}
264
+ .node.hub .orbital{width:74px;height:74px;margin:2px 0 10px;filter:drop-shadow(0 0 20px rgba(124,196,255,.35))}
265
+ .node .tag{font-family:var(--mono);font-size:10px;letter-spacing:.18em;text-transform:uppercase;color:#88A6C2;margin-bottom:8px}
253
266
  .node.hub .tag{color:var(--blue)}
254
- .node .name{font-family:var(--display);font-size:22px;line-height:1;letter-spacing:.01em;margin-bottom:6px}
255
- .node.hub .name{font-size:34px;font-weight:400}
256
- .node .sub{font-family:var(--mono);font-size:10px;letter-spacing:.06em;color:var(--cool);line-height:1.45}
257
- .node.route{min-height:132px;display:flex;flex-direction:column;justify-content:flex-start;text-align:left;padding:14px}
267
+ .node .name{font-family:var(--display);font-size:22px;font-weight:500;color:#DCEAF6;line-height:1;letter-spacing:.01em;margin-bottom:6px}
268
+ .node.hub .name{font-size:34px;font-weight:400;font-style:italic}
269
+ .node .sub{font-family:var(--mono);font-size:11px;letter-spacing:.05em;color:#AAC4DC;line-height:1.5}
270
+ .node.route{min-height:138px;display:flex;flex-direction:column;justify-content:flex-start;text-align:left;padding:14px}
258
271
  .node.route .name{font-size:18px;margin-bottom:8px}
259
272
  .node.route .chains{
260
273
  margin-top:auto;padding-top:10px;
261
- font-family:var(--mono);font-size:10px;letter-spacing:.04em;line-height:1.55;
274
+ font-family:var(--mono);font-size:10px;letter-spacing:.04em;line-height:1.7;
275
+ display:flex;flex-wrap:wrap;gap:4px 10px;align-items:center;
262
276
  }
277
+ .ch{display:inline-flex;align-items:center;gap:5px;white-space:nowrap}
278
+ .ch img{width:13px;height:13px;border-radius:50%;object-fit:cover;background:rgba(255,255,255,.06)}
263
279
  .node.add{
264
280
  border-style:dashed;border-color:rgba(124,196,255,.28);
265
281
  background:rgba(11,16,24,.35);
266
- min-height:132px;display:flex;flex-direction:column;justify-content:center;align-items:flex-start;
282
+ min-height:138px;display:flex;flex-direction:column;justify-content:center;align-items:flex-start;
267
283
  text-align:left;padding:14px;
268
284
  }
269
285
  .node.add .name{font-size:18px;color:var(--blue2)}
270
286
  .node.add .sub{color:var(--mute)}
271
287
  .node.add:hover{border-color:rgba(124,196,255,.55);background:rgba(124,196,255,.06)}
272
288
 
289
+ .builder-row{margin-top:0;display:flex;justify-content:center}
290
+ .node.builder-sink{width:min(430px,100%);text-align:center;align-items:center;min-height:162px;position:relative}
291
+ .node.builder-sink .name{font-size:26px}
292
+ .node.builder-sink .chains{justify-content:center}
293
+ .wires.funnel{height:62px}
294
+ .wires.funnel path{stroke:rgba(255,176,137,.48)}
295
+ .wires.funnel path:nth-child(2n){stroke:rgba(124,196,255,.32)}
296
+ .wires.funnel circle{fill:#ffb089}
297
+
298
+
273
299
  /* protocol colors */
274
300
  .node.p-hl{border-color:rgba(80,210,193,.45);background:linear-gradient(180deg, rgba(80,210,193,.14), rgba(11,16,24,.88))}
275
301
  .node.p-hl .tag,.node.p-hl .name{color:var(--hl)}
@@ -338,16 +364,13 @@ h1 em{
338
364
  .moat-card{
339
365
  background:var(--bg);padding:clamp(20px,3vw,28px);min-height:140px;
340
366
  display:flex;flex-direction:column;gap:10px;
367
+ transition:background .35s;
341
368
  }
342
369
  .moat-card:hover{background:var(--panel-2)}
343
370
  .moat-card .n{font-family:var(--mono);font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--blue)}
344
371
  .moat-card h3{font-family:var(--display);font-weight:400;font-size:clamp(20px,2.2vw,26px)}
345
- .moat-card p{color:var(--cool);font-size:14px;line-height:1.55;max-width:40ch}
372
+ .moat-card p{color:#B7CCE0;font-size:15px;line-height:1.55;max-width:44ch}
346
373
  @media (max-width:860px){.moat-grid{grid-template-columns:1fr}}
347
- .posture-chip{
348
- font-family:var(--mono);font-size:9px;letter-spacing:.16em;text-transform:uppercase;
349
- border:1px solid rgba(124,196,255,.35);border-radius:999px;padding:6px 10px;color:var(--blue2);
350
- }
351
374
  .evolve-rail{
352
375
  display:flex;flex-wrap:wrap;gap:8px;justify-content:center;
353
376
  padding:14px 16px 4px;
@@ -360,20 +383,26 @@ h1 em{
360
383
 
361
384
  .wires{height:40px;position:relative}
362
385
  .wires svg{width:100%;height:100%;display:block;overflow:visible}
363
- .wires path{fill:none;stroke:rgba(124,196,255,.35);stroke-width:1.25;stroke-linecap:round}
364
- .wires circle{fill:var(--blue)}
386
+ .wires path{
387
+ fill:none;stroke:rgba(124,196,255,.58);stroke-width:1.5;stroke-linecap:round;
388
+ stroke-dasharray:1;stroke-dashoffset:1;
389
+ transition:stroke-dashoffset 1.3s var(--ease);
390
+ }
391
+ .wires.in path{stroke-dashoffset:0}
392
+ .wires path.w-2{transition-delay:.12s}
393
+ .wires path.w-3{transition-delay:.2s}
394
+ .wires path.w-4{transition-delay:.28s}
395
+ .wires path.w-5{transition-delay:.36s}
396
+ .wires circle{fill:var(--blue);opacity:0;transition:opacity .5s var(--ease) .7s}
397
+ .wires.in circle{opacity:1}
365
398
  .wires.multi path.w-poly{stroke:rgba(59,130,246,.55)}
366
399
  .wires.multi path.w-hl{stroke:rgba(80,210,193,.55)}
367
400
  .wires.multi path.w-rh{stroke:rgba(215,255,77,.6)}
368
401
  .wires.multi path.w-sol{stroke:rgba(153,69,255,.55)}
369
- .wires.multi path.w-stable{stroke:rgba(240,185,11,.55)}
370
- .wires.multi path.w-add{stroke:rgba(124,196,255,.35);stroke-dasharray:3 3}
371
402
  .wires.multi circle.c-poly{fill:var(--poly)}
372
403
  .wires.multi circle.c-hl{fill:var(--hl)}
373
404
  .wires.multi circle.c-rh{fill:var(--rh)}
374
405
  .wires.multi circle.c-sol{fill:var(--sol)}
375
- .wires.multi circle.c-stable{fill:var(--stable)}
376
- .wires.multi circle.c-add{fill:var(--blue2)}
377
406
 
378
407
  /* route detail cards */
379
408
  .route-card{
@@ -381,18 +410,18 @@ h1 em{
381
410
  display:flex;flex-direction:column;gap:10px;transition:background .35s;
382
411
  }
383
412
  .route-card:hover{background:var(--panel-2)}
384
- .route-card h3{font-family:var(--display);font-weight:400;font-size:26px}
413
+ .route-card h3{font-family:var(--display);font-weight:400;font-size:26px;display:flex;align-items:center;gap:10px}
414
+ .route-card h3 img{width:20px;height:20px;border-radius:50%;object-fit:cover;background:rgba(255,255,255,.06)}
385
415
  .route-card .where{font-family:var(--mono);font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:var(--blue)}
386
- .route-card p{color:var(--cool);font-size:13.5px;line-height:1.55}
416
+ .route-card p{color:#B7CCE0;font-size:15px;line-height:1.55}
387
417
  .route-card .chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:auto}
418
+ .route-card.p-add{grid-column:1/-1;align-items:center;text-align:center;justify-content:center;gap:14px;padding:30px 22px}
419
+ .route-card.p-add .chips{justify-content:center;margin-top:4px}
420
+ .route-card.p-add p{max-width:46ch}
388
421
  .chip-s{
389
422
  font-family:var(--mono);font-size:9px;letter-spacing:.1em;text-transform:uppercase;
390
423
  border:1px solid var(--line);border-radius:999px;padding:5px 8px;color:var(--cool);
391
424
  }
392
- .route-card .why{
393
- margin-top:4px;padding-top:12px;border-top:1px solid var(--line);
394
- font-family:var(--display);font-style:italic;font-size:17px;line-height:1.45;color:var(--blue2);
395
- }
396
425
  .why-band{
397
426
  border-top:1px solid var(--line);
398
427
  padding:22px 24px 24px;
@@ -410,6 +439,16 @@ h1 em{
410
439
 
411
440
  /* chains */
412
441
  .chain-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}
442
+ .hl-surface{margin-top:34px;border:1px solid var(--line);border-radius:14px;padding:20px;background:rgba(124,196,255,.02)}
443
+ .hl-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin-top:16px}
444
+ .hl-grid article{border:1px solid var(--line);border-radius:10px;padding:14px 15px;background:rgba(255,255,255,.012)}
445
+ .hl-grid h3{font-family:var(--display);font-size:15px;font-weight:500;color:var(--ink);margin:0 0 6px}
446
+ .hl-grid p{font-size:14px;line-height:1.6;color:#B7CCE0;margin:0}
447
+ .hl-note{margin:16px 0 0;font-family:var(--mono);font-size:10.5px;letter-spacing:.04em;color:var(--cool);opacity:.62}
448
+ .hip3{margin-top:20px;padding-top:18px;border-top:1px solid var(--line)}
449
+ .hl-note code{font-family:var(--mono);color:var(--blue2);opacity:.9}
450
+ @media(max-width:900px){.hl-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
451
+ @media(max-width:620px){.hl-grid{grid-template-columns:1fr}}
413
452
  .chain{
414
453
  border:1px solid var(--line);border-radius:14px;padding:16px;
415
454
  background:linear-gradient(180deg, rgba(124,196,255,.035), transparent 55%), var(--panel);
@@ -417,9 +456,10 @@ h1 em{
417
456
  transition:border-color .3s,transform .3s var(--ease);
418
457
  }
419
458
  .chain:hover{border-color:rgba(124,196,255,.35);transform:translateY(-2px)}
420
- .chain-top{display:flex;justify-content:space-between;gap:8px}
421
- .chain .nm{font-family:var(--display);font-size:20px}
422
- .chain .id{font-family:var(--mono);font-size:11px;color:var(--blue)}
459
+ .chain-top{display:flex;justify-content:space-between;gap:8px;align-items:flex-start}
460
+ .chain .nm{font-family:var(--display);font-size:20px;display:flex;align-items:center;gap:8px}
461
+ .chain .nm img{width:18px;height:18px;border-radius:50%;object-fit:cover;background:rgba(255,255,255,.06)}
462
+ .chain .id{font-family:var(--mono);font-size:11px;color:var(--blue);white-space:nowrap;padding-top:4px}
423
463
  .chain .meta{
424
464
  display:flex;justify-content:space-between;gap:8px;
425
465
  font-family:var(--mono);font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:var(--mute);
@@ -431,14 +471,48 @@ h1 em{
431
471
  .venues-head{
432
472
  padding:11px 14px;border-bottom:1px solid var(--line);
433
473
  font-family:var(--mono);font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--mute);
474
+ display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap;
434
475
  }
476
+ .venues-head b{color:var(--blue);font-weight:500}
435
477
  .marquee{overflow:hidden;white-space:nowrap;mask-image:linear-gradient(90deg,transparent,#000 6%,#000 94%,transparent)}
436
- .track{display:inline-flex;gap:24px;padding:13px 0;animation:scroll 42s linear infinite;will-change:transform}
478
+ .marquee + .marquee{border-top:1px solid rgba(124,196,255,.08)}
479
+ .track{display:inline-flex;gap:26px;padding:12px 0;animation:scroll 48s linear infinite;will-change:transform}
480
+ .marquee.rev .track{animation-direction:reverse;animation-duration:56s}
437
481
  .chip{
438
- display:inline-flex;align-items:center;gap:8px;
439
- font-family:var(--mono);font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--cool);
440
- }
441
- .chip::before{content:"";width:5px;height:5px;border-radius:50%;background:var(--blue);opacity:.75}
482
+ display:inline-flex;align-items:center;gap:10px;
483
+ font-size:15px;letter-spacing:-.015em;text-transform:none;color:var(--proto-color,var(--cool));
484
+ padding:8px 13px;border:1px solid rgba(124,196,255,.1);border-radius:999px;background:rgba(11,16,24,.38);
485
+ box-shadow:inset 0 0 0 1px rgba(255,255,255,.025);
486
+ }
487
+ .chip img{width:18px;height:18px;border-radius:50%;object-fit:cover;background:rgba(255,255,255,.06)}
488
+ .chip.wm-chip{padding:10px 16px}
489
+ .chip img.wm{width:auto;height:20px;max-width:150px;border-radius:0;object-fit:contain;background:none;opacity:.92}
490
+ .chip img.wm.tall{height:22px;max-width:26px}
491
+
492
+ .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}
493
+ .proto-uniswap{--proto-font:"Inter",var(--sans);--proto-color:#ff4dcb;--proto-weight:850}
494
+ .proto-hyperliquid{--proto-font:var(--display);--proto-style:italic;--proto-color:#50d2c1;--proto-weight:500;--proto-track:.01em}
495
+ .proto-polymarket{--proto-font:"Manrope",var(--sans);--proto-color:#7aa7ff;--proto-weight:800;--proto-track:-.035em}
496
+ .proto-aerodrome,.proto-velodrome{--proto-font:"Space Grotesk",var(--sans);--proto-color:#f2f7ff;--proto-weight:700;--proto-transform:lowercase}
497
+ .proto-pancakeswap{--proto-font:"DM Sans",var(--sans);--proto-color:#d1884f;--proto-weight:700}
498
+ .proto-quickswap{--proto-font:"Archivo Black",var(--sans);--proto-color:#35a7ff;--proto-weight:800;--proto-transform:uppercase;--proto-track:.005em}
499
+ .proto-lfj{--proto-font:"Sora",var(--sans);--proto-color:#ff6357;--proto-weight:700;--proto-transform:uppercase;--proto-track:.05em}
500
+ .proto-hyperswap{--proto-font:"Space Grotesk",var(--sans);--proto-color:#69f0d8;--proto-weight:700}
501
+ .proto-curve{--proto-font:"Times New Roman",serif;--proto-color:#f7f3dd;--proto-weight:700;--proto-track:.01em}
502
+ .proto-balancer{--proto-font:"Inter",var(--sans);--proto-color:#f6f6f6;--proto-weight:850;--proto-track:-.055em}
503
+ .proto-pendle{--proto-font:"Sora",var(--sans);--proto-color:#a7f3d0;--proto-weight:700}
504
+ .proto-morpho{--proto-font:"Manrope",var(--sans);--proto-color:#75b9ff;--proto-weight:800;--proto-track:-.04em}
505
+ .proto-gmx{--proto-font:"Archivo Black",var(--sans);--proto-color:#41d3ff;--proto-weight:800;--proto-transform:uppercase;--proto-track:.04em}
506
+ .proto-lifi{--proto-font:"Inter",var(--sans);--proto-color:#d8b4fe;--proto-weight:850;--proto-transform:uppercase;--proto-track:.02em}
507
+ .proto-relay{--proto-font:"Space Grotesk",var(--sans);--proto-color:#f2f7ff;--proto-weight:700;--proto-transform:lowercase}
508
+ .proto-paraswap{--proto-font:"Manrope",var(--sans);--proto-color:#ff9a76;--proto-weight:800}
509
+ .proto-odos{--proto-font:"Sora",var(--sans);--proto-color:#f0f9ff;--proto-weight:700;--proto-transform:lowercase}
510
+ .proto-cow{--proto-font:"DM Sans",var(--sans);--proto-color:#fcd34d;--proto-weight:700}
511
+ .proto-oneinch{--proto-font:"Inter",var(--sans);--proto-color:#9ec5ff;--proto-weight:850;--proto-track:-.045em}
512
+ .proto-jupiter{--proto-font:"Space Grotesk",var(--sans);--proto-color:#f6a5ff;--proto-weight:700}
513
+ .proto-across{--proto-font:"Manrope",var(--sans);--proto-color:#ff6b9b;--proto-weight:800}
514
+ .proto-stargate{--proto-font:"Sora",var(--sans);--proto-color:#9ddcff;--proto-weight:700}
515
+ .proto-magic-eden{--proto-font:"Archivo Black",var(--sans);--proto-color:#dfc7ff;--proto-weight:800;--proto-track:.01em}
442
516
  @keyframes scroll{from{transform:translateX(0)}to{transform:translateX(-50%)}}
443
517
 
444
518
  .wallet-grid{
@@ -463,7 +537,9 @@ h1 em{
463
537
  .wallet-grid{grid-template-columns:1fr}
464
538
  }
465
539
 
466
- footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);padding:32px var(--pad) 40px}
540
+ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);padding:32px var(--pad) 40px;position:relative;z-index:2}
541
+ .labs-link{font-family:"UnifrakturCook","Old English Text MT","Lucida Blackletter",serif;font-size:16px;letter-spacing:.04em;text-transform:none;color:var(--blue2)}
542
+ .labs-link:hover{color:var(--ink)}
467
543
  .foot-row{
468
544
  max-width:var(--max);margin:0 auto 14px;
469
545
  display:flex;flex-wrap:wrap;gap:14px 24px;justify-content:space-between;align-items:center;
@@ -483,12 +559,13 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
483
559
  font-family:var(--mono);font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:var(--mute);
484
560
  }
485
561
 
486
- .js .rv{opacity:0;transform:translateY(16px)}
487
- .js .rv.in{opacity:1;transform:none;transition:opacity 1s var(--ease),transform 1s var(--ease)}
562
+ .js .rv{opacity:0;transform:translateY(18px)}
563
+ .js .rv.in{opacity:1;transform:none;transition:opacity .9s var(--ease),transform .9s var(--ease)}
564
+ .js .rv.done{transform:none;will-change:auto}
488
565
 
489
566
  @media (max-width:960px){
490
- .nav{grid-template-columns:1fr auto}
491
- .nav-mid{display:none}
567
+ .hero-stage{min-height:clamp(300px,44vh,460px)}.home-title{font-size:clamp(80px,20vw,150px)}
568
+ .nav-chip{display:none}
492
569
  .nav-links .hide-sm{display:none}
493
570
  .route-strip{grid-template-columns:1fr}
494
571
  .chain-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
@@ -496,42 +573,56 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
496
573
  .row.profiles{grid-template-columns:repeat(2,minmax(0,1fr))}
497
574
  }
498
575
  @media (max-width:560px){
576
+ .home{min-height:auto;padding-top:36px}.hero-stage{min-height:280px}.hero-orb{width:min(84vw,340px)}
499
577
  .chain-grid{grid-template-columns:1fr}
500
578
  .row.profiles{grid-template-columns:1fr}
501
- h1{font-size:clamp(68px,18vw,96px)}
502
579
  }
503
580
  @media (prefers-reduced-motion:reduce){
504
581
  html{scroll-behavior:auto}
505
- .js .rv{opacity:1;transform:none}
506
- .loader-mark i,.track{animation:none}
582
+ .js .rv{opacity:1;transform:none;filter:none}
583
+ .track,.orbital .ring,.orbital .tickring,.orbital .core,.hero-orb,.hero-art::before,.home::after{animation:none}
584
+ .wires path{stroke-dasharray:none;stroke-dashoffset:0}
585
+ .wires circle{opacity:1}
507
586
  .node:hover,.chain:hover{transform:none}
508
587
  }
509
588
  </style>
510
589
  </head>
511
590
  <body>
512
591
  <div class="grain" aria-hidden="true"></div>
592
+ <div class="progress" id="progress" aria-hidden="true"></div>
513
593
 
514
594
  <div class="loader" id="loader" aria-hidden="true">
515
595
  <div class="loader-inner">
516
- <div class="loader-mark" aria-hidden="true"><i></i><b></b></div>
517
- <div class="loader-word">oracle</div>
518
- <div class="loader-bar"><span id="loader-fill"></span></div>
596
+ <div class="loader-mark orbital" aria-hidden="true">
597
+ <svg viewBox="0 0 100 100">
598
+ <g class="ring r1"><ellipse cx="50" cy="50" rx="44" ry="15"/></g>
599
+ <g class="ring r2"><ellipse cx="50" cy="50" rx="44" ry="15" transform="rotate(62 50 50)"/></g>
600
+ <g class="ring r3"><ellipse cx="50" cy="50" rx="44" ry="15" transform="rotate(124 50 50)"/></g>
601
+ <circle class="tickring" cx="50" cy="50" r="30"/>
602
+ <circle class="halo" cx="50" cy="50" r="9"/>
603
+ <circle class="core" cx="50" cy="50" r="6.5"/>
604
+ </svg>
605
+ </div>
606
+ <div class="loader-word">oracle</div>
607
+ <div class="loader-bar"><span id="loader-fill"></span></div>
519
608
  </div>
520
609
  </div>
521
610
 
522
611
  <header class="nav">
523
- <a class="brand" href="#top"><span class="orb" aria-hidden="true"></span>oracle</a>
524
- <div class="nav-mid" aria-label="Status">
525
- <span>for <b>users</b></span>
526
- <span>full crypto pack // protocol builder</span>
527
- <span class="posture-chip">disarmed by default</span>
528
- <span>powered by <a class="hermes" href="https://hermes-agent.nousresearch.com" target="_blank" rel="noopener noreferrer">Hermes</a></span>
529
- </div>
612
+ <a class="brand" href="#top">
613
+ <span class="orbital" aria-hidden="true">
614
+ <svg viewBox="0 0 100 100">
615
+ <g class="ring r1"><ellipse cx="50" cy="50" rx="45" ry="17"/></g>
616
+ <g class="ring r2"><ellipse cx="50" cy="50" rx="45" ry="17" transform="rotate(64 50 50)"/></g>
617
+ <circle class="halo" cx="50" cy="50" r="13"/>
618
+ <circle class="core" cx="50" cy="50" r="11"/>
619
+ </svg>
620
+ </span>
621
+ oracle</a>
530
622
  <nav class="nav-links" aria-label="Primary">
531
- <a class="hide-sm" href="#orchestration">How it works</a>
532
- <a class="hide-sm" href="#wallets">Wallets</a>
533
- <a class="hide-sm" href="#chains">Chains</a>
534
- <a class="nav-cta" href="/oracle-console/">Open console</a>
623
+ <a class="hide-sm" href="#orchestration">How it works</a>
624
+ <a class="hide-sm" href="#wallets">Wallets</a>
625
+ <a class="hide-sm" href="#chains">Chains</a>
535
626
  </nav>
536
627
  </header>
537
628
 
@@ -539,322 +630,399 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
539
630
  <canvas id="gl" aria-hidden="true"></canvas>
540
631
  <div class="veil" aria-hidden="true"></div>
541
632
 
633
+ <section class="home" id="home">
634
+ <div class="home-inner">
635
+ <div class="hero-stage">
636
+ <div class="hero-art" aria-hidden="true">
637
+ <video id="orb-vid" autoplay muted loop playsinline preload="metadata" poster="assets/hero/orb.avif">
638
+ <source src="assets/hero/orb.webm" type="video/webm">
639
+ </video>
640
+ <div class="hero-orb" id="hero-orb">
641
+ <span class="lat l1"></span><span class="lat l2"></span><span class="lat l3"></span><span class="lat l4"></span>
642
+ <span class="par p1"></span><span class="par p2"></span><span class="par p3"></span>
643
+ <span class="eq"></span>
644
+ <span class="core-glow"></span>
645
+ <span class="orbit-dot"></span>
646
+ </div>
647
+ </div>
648
+ <div class="hero-lockup" id="hero-title">
649
+ <h1 class="home-title">OR<em>ACLE</em></h1>
650
+ <a class="hero-byline" href="https://x.com/demi_hl" target="_blank" rel="noopener noreferrer">BY DEMI</a>
651
+ </div>
652
+ </div>
653
+ <div class="home-copy">
654
+ <p class="home-kicker">self-custody agent control</p>
655
+ <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>
656
+ <div class="home-actions">
657
+ <a class="enter-cta" href="#orchestration">Enter oracle</a>
658
+ </div>
659
+ </div>
660
+ </div>
661
+ </section>
662
+
542
663
  <section class="section" id="orchestration">
543
664
  <p class="section-label rv">How it works</p>
544
665
  <h2 class="section-title rv">Multi-profile. <em>Customizable.</em></h2>
545
- <p class="section-lede rv">Not one bot. A mesh: Input / Command hits the oracle control plane, then fans out across venue profiles, multi-chain EVM, Bitcoin, and a protocol builder - with prepare-only custody.</p>
666
+ <p class="section-lede rv">Not one bot. A mesh with profile routing via Hermes: Input / Command hits the oracle control plane, then fans out across venue profiles, multi-chain EVM, Bitcoin, Solana, and a protocol builder. Any MCP harness can drive a single agent. The public plane is prepare-only. Your wallet signs.</p>
546
667
 
547
668
  <div class="graph-shell rv">
548
- <div class="graph-top">
549
- <span>for <b>users</b></span>
550
- <span>multi-profile // protocol builder // multi-chain</span>
551
- <span>powered by Hermes</span>
552
- </div>
669
+ <div class="graph-top">
670
+ <span>multi-profile // protocol builder // multi-chain</span>
671
+ </div>
553
672
 
554
- <div class="evolve-rail">
555
- <span class="evolve-pill on">full crypto pack</span>
556
- <span class="evolve-pill on">customizable</span>
557
- <span class="evolve-pill on">protocol builder</span>
558
- <span class="evolve-pill on">more chains</span>
559
- <span class="evolve-pill on"><a href="https://hermes-agent.nousresearch.com" target="_blank" rel="noopener noreferrer" style="color:inherit">powered by Hermes</a></span>
560
- </div>
673
+ <div class="evolve-rail">
674
+ <span class="evolve-pill on">customizable</span>
675
+ <span class="evolve-pill on">protocol builder</span>
676
+ <span class="evolve-pill on">more chains</span>
677
+ </div>
561
678
 
562
- <div class="graph-canvas">
563
- <div class="orch" aria-label="Oracle multi-profile graph">
564
- <div class="row">
565
- <div class="node" style="width:220px">
566
- <div class="tag">you</div>
567
- <div class="name">Input / Command</div>
568
- <div class="sub">what you type or ask</div>
569
- </div>
570
- </div>
679
+ <div class="graph-canvas">
680
+ <div class="orch" aria-label="Oracle multi-profile graph">
681
+ <div class="row">
682
+ <div class="node" style="width:220px">
683
+ <div class="tag">you</div>
684
+ <div class="name">Input / Command</div>
685
+ <div class="sub">what you type or ask</div>
686
+ </div>
687
+ </div>
571
688
 
572
- <div class="wires" aria-hidden="true">
573
- <svg viewBox="0 0 100 36" preserveAspectRatio="none">
574
- <path d="M50 2 V34"/><circle cx="50" cy="2" r="1.4"/><circle cx="50" cy="34" r="1.4"/>
575
- </svg>
576
- </div>
689
+ <div class="wires" aria-hidden="true">
690
+ <svg viewBox="0 0 100 36" preserveAspectRatio="none">
691
+ <path d="M50 2 V34" pathLength="1"/><circle cx="50" cy="2" r="1.4"/><circle cx="50" cy="34" r="1.4"/>
692
+ </svg>
693
+ </div>
577
694
 
578
- <div class="row">
579
- <div class="node hub">
580
- <div class="tag">control plane</div>
581
- <div class="name">oracle</div>
582
- <div class="sub">route · bound · evolve</div>
583
- </div>
584
- </div>
695
+ <div class="row">
696
+ <div class="node hub">
697
+ <div class="tag">control plane</div>
698
+ <div class="orbital" aria-hidden="true">
699
+ <svg viewBox="0 0 100 100">
700
+ <g class="ring r1"><ellipse cx="50" cy="50" rx="46" ry="16"/></g>
701
+ <g class="ring r2"><ellipse cx="50" cy="50" rx="46" ry="16" transform="rotate(60 50 50)"/></g>
702
+ <g class="ring r3"><ellipse cx="50" cy="50" rx="46" ry="16" transform="rotate(120 50 50)"/></g>
703
+ <circle class="tickring" cx="50" cy="50" r="32"/>
704
+ <circle class="halo" cx="50" cy="50" r="10"/>
705
+ <circle class="core" cx="50" cy="50" r="7.5"/>
706
+ </svg>
707
+ </div>
708
+ <div class="name">oracle</div>
709
+ <div class="sub">route · bound · evolve</div>
710
+ </div>
711
+ </div>
585
712
 
586
- <div class="wires multi" aria-hidden="true">
587
- <svg viewBox="0 0 100 44" preserveAspectRatio="none">
588
- <path d="M50 2 V12"/>
589
- <path class="w-poly" d="M12.5 42 V20 H50 V12"/>
590
- <path class="w-hl" d="M37.5 42 V20 H50 V12"/>
591
- <path class="w-rh" d="M62.5 42 V20 H50 V12"/>
592
- <path class="w-sol" d="M87.5 42 V20 H50 V12"/>
593
- <circle cx="50" cy="2" r="1.3"/>
594
- <circle class="c-poly" cx="12.5" cy="42" r="1.3"/>
595
- <circle class="c-hl" cx="37.5" cy="42" r="1.3"/>
596
- <circle class="c-rh" cx="62.5" cy="42" r="1.3"/>
597
- <circle class="c-sol" cx="87.5" cy="42" r="1.3"/>
598
- </svg>
599
- </div>
713
+ <div class="wires multi" aria-hidden="true">
714
+ <svg viewBox="0 0 100 44" preserveAspectRatio="none">
715
+ <path d="M50 2 V12" pathLength="1"/>
716
+ <path class="w-poly w-2" d="M12.5 42 V20 H50 V12" pathLength="1"/>
717
+ <path class="w-hl w-3" d="M37.5 42 V20 H50 V12" pathLength="1"/>
718
+ <path class="w-rh w-4" d="M62.5 42 V20 H50 V12" pathLength="1"/>
719
+ <path class="w-sol w-5" d="M87.5 42 V20 H50 V12" pathLength="1"/>
720
+ <circle cx="50" cy="2" r="1.3"/>
721
+ <circle class="c-poly" cx="12.5" cy="42" r="1.3"/>
722
+ <circle class="c-hl" cx="37.5" cy="42" r="1.3"/>
723
+ <circle class="c-rh" cx="62.5" cy="42" r="1.3"/>
724
+ <circle class="c-sol" cx="87.5" cy="42" r="1.3"/>
725
+ </svg>
726
+ </div>
600
727
 
601
- <div class="row profiles" id="profile-grid">
602
- <div class="node route p-poly">
603
- <div class="tag">profile</div>
604
- <div class="name">polymarket agent</div>
605
- <div class="sub">events · arb · markets</div>
606
- <div class="chains">Polymarket</div>
607
- </div>
608
- <div class="node route p-hl">
609
- <div class="tag">profile</div>
610
- <div class="name">hyperliquid agent</div>
611
- <div class="sub">perps · hip-3/4 · ta</div>
612
- <div class="chains">Hyperliquid · HyperEVM 999</div>
613
- </div>
614
- <div class="node route p-rh">
615
- <div class="tag">profile</div>
616
- <div class="name">robinhood agent</div>
617
- <div class="sub">markets · nfts · names</div>
618
- <div class="chains">Robinhood Chain 4663</div>
619
- </div>
620
- <div class="node route p-sol">
621
- <div class="tag">profile</div>
622
- <div class="name">solana agent</div>
623
- <div class="sub">jup · nfts · dexs</div>
624
- <div class="chains">Solana mainnet</div>
625
- </div>
626
- <div class="node route p-btc">
627
- <div class="tag">profile</div>
628
- <div class="name">bitcoin agent</div>
629
- <div class="sub">ord · runes · research</div>
630
- <div class="chains">Bitcoin · inscriptions</div>
631
- </div>
632
- <div class="node route p-evm">
633
- <div class="tag">profile</div>
634
- <div class="name">evm / bridge agent</div>
635
- <div class="sub">swaps · bridges · defi</div>
636
- <div class="chains">ETH · Base · Arb · OP · BNB · Polygon · Avax</div>
637
- </div>
638
- <div class="node route p-stable">
639
- <div class="tag">profile</div>
640
- <div class="name">stable agent</div>
641
- <div class="sub">launches · venue ops</div>
642
- <div class="chains">Stable 988</div>
643
- </div>
644
- <div class="node route p-build">
645
- <div class="tag">builder</div>
646
- <div class="name">protocol builder</div>
647
- <div class="sub">scaffold · security · deploy prep</div>
648
- <div class="chains">any EVM · user-signed deploys</div>
649
- </div>
650
- <div class="node add">
651
- <div class="tag">open slot</div>
652
- <div class="name">+ add agent</div>
653
- <div class="sub">new chain · new venue · your rules</div>
654
- <div class="chains" style="margin-top:12px;font-family:var(--mono);font-size:10px;color:var(--blue2)">full crypto pack · powered by Hermes</div>
655
- </div>
656
- </div> </div>
657
- </div>
658
- </div>
728
+ <div class="row profiles" id="profile-grid">
729
+ <div class="node route p-poly">
730
+ <div class="tag">profile</div>
731
+ <div class="name">polymarket agent</div>
732
+ <div class="sub">events · arb · markets</div>
733
+ <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>
734
+ </div>
735
+ <div class="node route p-hl">
736
+ <div class="tag">profile</div>
737
+ <div class="name">hyperliquid agent</div>
738
+ <div class="sub">perps · hip-3/4 · ta</div>
739
+ <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>
740
+ </div>
741
+ <div class="node route p-rh">
742
+ <div class="tag">profile</div>
743
+ <div class="name">robinhood agent</div>
744
+ <div class="sub">markets · nfts · names</div>
745
+ <div class="chains"><span class="ch">Robinhood Chain 4663 <img src="https://icons.llamao.fi/icons/chains/rsz_robinhood?w=24&h=24" alt="" loading="lazy"></span></div>
746
+ </div>
747
+ <div class="node route p-sol">
748
+ <div class="tag">profile</div>
749
+ <div class="name">solana agent</div>
750
+ <div class="sub">jup · nfts · dexs</div>
751
+ <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>
752
+ </div>
753
+ <div class="node route p-btc">
754
+ <div class="tag">profile</div>
755
+ <div class="name">bitcoin agent</div>
756
+ <div class="sub">ord · runes · research</div>
757
+ <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>
758
+ </div>
759
+ <div class="node route p-evm">
760
+ <div class="tag">profile</div>
761
+ <div class="name">evm / bridge agent</div>
762
+ <div class="sub">swaps · bridges · defi</div>
763
+ <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">Polygon <img src="https://icons.llamao.fi/icons/chains/rsz_polygon?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>
764
+ </div>
765
+ <div class="node route p-stable">
766
+ <div class="tag">profile</div>
767
+ <div class="name">stable agent</div>
768
+ <div class="sub">launches · venue ops</div>
769
+ <div class="chains"><span class="ch">Stable 988 <img src="https://icons.llamao.fi/icons/chains/rsz_stable?w=24&h=24" alt="" loading="lazy"></span></div>
770
+ </div>
771
+ <div class="node add">
772
+ <div class="tag">open slot</div>
773
+ <div class="name">+ add agent</div>
774
+ <div class="sub">new chain · new venue · your rules</div>
775
+ <div class="chains" style="margin-top:12px;font-family:var(--mono);font-size:10px;color:var(--blue2)">sits beside stable · same custody</div>
776
+ </div>
777
+ </div>
659
778
 
660
- <div class="route-strip">
661
- <article class="route-card p-poly">
662
- <div class="where">polymarket agent →</div>
663
- <h3>Polymarket</h3>
664
- <p>Event markets, sports, arb paths, and prediction flow under bounds you set.</p>
665
- <div class="chips">
666
- <span class="chip-s">events</span>
667
- <span class="chip-s">arb</span>
668
- <span class="chip-s">Polymarket</span>
669
- </div>
670
- </article>
671
- <article class="route-card p-hl">
672
- <div class="where">hyperliquid agent →</div>
673
- <h3>Hyperliquid</h3>
674
- <p>Native perps, HIP-3/4, TA, event risk, and HyperEVM when you need HL’s EVM surface.</p>
675
- <div class="chips">
676
- <span class="chip-s">perps</span>
677
- <span class="chip-s">HIP-3/4</span>
678
- <span class="chip-s">HyperEVM</span>
679
- </div>
680
- </article>
681
- <article class="route-card p-rh">
682
- <div class="where">robinhood agent →</div>
683
- <h3>Robinhood</h3>
684
- <p>RH Chain markets, NFTs, names, and chain-local execution on 4663.</p>
685
- <div class="chips">
686
- <span class="chip-s">markets</span>
687
- <span class="chip-s">NFTs</span>
688
- <span class="chip-s">4663</span>
689
- </div>
690
- </article>
691
- <article class="route-card p-sol">
692
- <div class="where">solana agent →</div>
693
- <h3>Solana</h3>
694
- <p>Swaps, research, Jupiter routes, and wallet-signed execution as the lane activates.</p>
695
- <div class="chips">
696
- <span class="chip-s">Jupiter</span>
697
- <span class="chip-s">swaps</span>
698
- <span class="chip-s">research</span>
699
- </div>
700
- </article>
701
- <article class="route-card p-btc">
702
- <div class="where">bitcoin agent →</div>
703
- <h3>Bitcoin</h3>
704
- <p>Ordinals, runes, and BTC research. Prepare inscriptions; you control signing.</p>
705
- <div class="chips">
706
- <span class="chip-s">ordinals</span>
707
- <span class="chip-s">runes</span>
708
- <span class="chip-s">BTC</span>
709
- </div>
710
- </article>
711
- <article class="route-card p-evm">
712
- <div class="where">evm / bridge agent →</div>
713
- <h3>Multi-chain EVM</h3>
714
- <p>DEX routes, LiFi/Relay bridges, and DeFi across ETH and L2s - always prepare-only until you sign.</p>
715
- <div class="chips">
716
- <span class="chip-s">ETH</span>
717
- <span class="chip-s">Base · Arb</span>
718
- <span class="chip-s">bridges</span>
719
- </div>
720
- </article>
721
- <article class="route-card p-stable">
722
- <div class="where">stable agent →</div>
723
- <h3>Stable</h3>
724
- <p>Stable mainnet launches and venue ops on chain 988.</p>
725
- <div class="chips">
726
- <span class="chip-s">launches</span>
727
- <span class="chip-s">Stable 988</span>
728
- </div>
729
- </article>
730
- <article class="route-card p-build">
731
- <div class="where">protocol builder →</div>
732
- <h3>Build protocols</h3>
733
- <p>Scaffold contracts, run security gates (Foundry + static checks), prepare unsigned deploys. You still sign every deploy.</p>
734
- <div class="chips">
735
- <span class="chip-s">scaffold</span>
736
- <span class="chip-s">security gate</span>
737
- <span class="chip-s">unsigned deploy</span>
738
- </div>
739
- </article>
740
- <article class="route-card p-add">
741
- <div class="where">+ add agent →</div>
742
- <h3>Next chain</h3>
743
- <p>Drop in another profile for a new chain or venue. Same custody model - your wallet, your limits, your revoke.</p>
744
- <div class="chips">
745
- <span class="chip-s">custom profile</span>
746
- <span class="chip-s">more chains</span>
747
- <span class="chip-s">powered by Hermes</span>
748
- </div>
749
- </article>
750
- </div>
779
+ <div class="wires funnel" aria-hidden="true">
780
+ <svg viewBox="0 0 100 62" preserveAspectRatio="none">
781
+ <path class="w-1" d="M6 2 C6 30 50 22 50 60" pathLength="1"/>
782
+ <path class="w-2" d="M19 2 C19 28 50 26 50 60" pathLength="1"/>
783
+ <path class="w-3" d="M32 2 C32 34 50 34 50 60" pathLength="1"/>
784
+ <path class="w-4" d="M45 2 C45 38 50 42 50 60" pathLength="1"/>
785
+ <path class="w-5" d="M55 2 C55 38 50 42 50 60" pathLength="1"/>
786
+ <path class="w-3" d="M68 2 C68 34 50 34 50 60" pathLength="1"/>
787
+ <path class="w-2" d="M81 2 C81 28 50 26 50 60" pathLength="1"/>
788
+ <path class="w-1" d="M94 2 C94 30 50 22 50 60" pathLength="1"/>
789
+ <circle cx="50" cy="60" r="1.8"/>
790
+ </svg>
791
+ </div>
751
792
 
752
- <div class="why-band">
753
- <p>The model proposes. Policy bounds. You own signatures. Multi-profile desks - not one omniscient chatbot. Input / Command, vaults, perps, bridges, and protocol scaffolds - not just swaps. Disarmed by default.</p>
754
- <span>powered by Hermes · claims without receipts don't count</span>
755
- </div>
793
+ <div class="row builder-row">
794
+ <div class="node route p-build builder-sink">
795
+ <div class="tag">bottom layer</div>
796
+ <div class="name">protocol builder</div>
797
+ <div class="sub">every profile can funnel into new contracts, scripts, checks, deploy prep, and chain-specific scaffolds.</div>
798
+ <div class="chains"><span class="ch">any EVM · pinned factories · user-signed deploys</span></div>
799
+ </div>
800
+ </div>
801
+ </div>
802
+ </div>
803
+
804
+ <div class="route-strip">
805
+ <article class="route-card p-poly">
806
+ <div class="where">polymarket agent →</div>
807
+ <h3>Polymarket <img src="https://icons.llamao.fi/icons/protocols/polymarket?w=40&h=40" alt="Polymarket" loading="lazy"></h3>
808
+ <p>Event markets, sports, arb paths, and prediction flow under bounds you set. CLOB prepare shipped in the public plane.</p>
809
+ <div class="chips">
810
+ <span class="chip-s">events</span>
811
+ <span class="chip-s">arb</span>
812
+ <span class="chip-s">clob prepare</span>
813
+ </div>
814
+ </article>
815
+ <article class="route-card p-hl">
816
+ <div class="where">hyperliquid agent →</div>
817
+ <h3>Hyperliquid <img src="https://icons.llamao.fi/icons/protocols/hyperliquid?w=40&h=40" alt="Hyperliquid" loading="lazy"></h3>
818
+ <p>Native perps, HIP-3/4 asset resolve, TA, event risk, and Hyperliquid when you need HL's EVM surface.</p>
819
+ <div class="chips">
820
+ <span class="chip-s">perps</span>
821
+ <span class="chip-s">HIP-3/4</span>
822
+ <span class="chip-s">Hyperliquid</span>
823
+ </div>
824
+ </article>
825
+ <article class="route-card p-rh">
826
+ <div class="where">robinhood agent →</div>
827
+ <h3>Robinhood <img src="https://icons.llamao.fi/icons/chains/rsz_robinhood?w=40&h=40" alt="Robinhood Chain" loading="lazy"></h3>
828
+ <p>RH Chain markets, NFTs, names, token scans, and chain-local routing on 4663.</p>
829
+ <div class="chips">
830
+ <span class="chip-s">markets</span>
831
+ <span class="chip-s">NFTs</span>
832
+ <span class="chip-s">4663</span>
833
+ </div>
834
+ </article>
835
+ <article class="route-card p-sol">
836
+ <div class="where">solana agent →</div>
837
+ <h3>Solana <img src="https://icons.llamao.fi/icons/chains/rsz_solana?w=40&h=40" alt="Solana" loading="lazy"></h3>
838
+ <p>Swaps, research, Jupiter routes. The bounded lane decodes every instruction and bans delegation ops outright.</p>
839
+ <div class="chips">
840
+ <span class="chip-s">Jupiter</span>
841
+ <span class="chip-s">swaps</span>
842
+ <span class="chip-s">decoded ix</span>
843
+ </div>
844
+ </article>
845
+ <article class="route-card p-btc">
846
+ <div class="where">bitcoin agent →</div>
847
+ <h3>Bitcoin <img src="https://icons.llamao.fi/icons/chains/rsz_bitcoin?w=40&h=40" alt="Bitcoin" loading="lazy"></h3>
848
+ <p>Ordinals, runes, and BTC research. Every PSBT input carries proven provenance, so fees are computed, not asserted.</p>
849
+ <div class="chips">
850
+ <span class="chip-s">ordinals</span>
851
+ <span class="chip-s">runes</span>
852
+ <span class="chip-s">psbt proof</span>
853
+ </div>
854
+ </article>
855
+ <article class="route-card p-evm">
856
+ <div class="where">evm / bridge agent →</div>
857
+ <h3>Multi-chain EVM <img src="https://icons.llamao.fi/icons/chains/rsz_ethereum?w=40&h=40" alt="Ethereum" loading="lazy"></h3>
858
+ <p>DEX routes, LI.FI and Relay bridges, DeFi across ETH and L2s. Bounded evm-swap and evm-bridge lanes, prepare-only until you sign.</p>
859
+ <div class="chips">
860
+ <span class="chip-s">evm-swap</span>
861
+ <span class="chip-s">evm-bridge</span>
862
+ <span class="chip-s">best route</span>
863
+ </div>
864
+ </article>
865
+ <article class="route-card p-nft">
866
+ <div class="where">nft agent →</div>
867
+ <h3>Cross-chain NFTs <img src="assets/protocols/opensea.png" alt="OpenSea" loading="lazy"></h3>
868
+ <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>
869
+ <div class="chips">
870
+ <span class="chip-s">list</span>
871
+ <span class="chip-s">buy</span>
872
+ <span class="chip-s">floor · pnl</span>
873
+ </div>
874
+ </article>
875
+ <article class="route-card p-stable">
876
+ <div class="where">stable agent →</div>
877
+ <h3>Stable <img src="https://icons.llamao.fi/icons/chains/rsz_stable?w=40&h=40" alt="Stable" loading="lazy"></h3>
878
+ <p>Stable mainnet launch radar and venue ops on chain 988, scanned straight from the chain's own logs.</p>
879
+ <div class="chips">
880
+ <span class="chip-s">launches</span>
881
+ <span class="chip-s">Stable 988</span>
882
+ </div>
883
+ </article>
884
+ <article class="route-card p-build">
885
+ <div class="where">protocol builder →</div>
886
+ <h3>Build protocols</h3>
887
+ <p>Scaffold contracts, run security gates (Foundry + static checks), prepare unsigned deploys through pinned factories. You still sign every deploy.</p>
888
+ <div class="chips">
889
+ <span class="chip-s">scaffold</span>
890
+ <span class="chip-s">security gate</span>
891
+ <span class="chip-s">unsigned deploy</span>
892
+ </div>
893
+ </article>
894
+ <article class="route-card p-add">
895
+ <div class="where">+ add agent →</div>
896
+ <h3>Next chain</h3>
897
+ <p>Drop in another profile for a new chain or venue. Same custody model, your wallet, your limits, your revoke.</p>
898
+ <div class="chips">
899
+ <span class="chip-s">custom profile</span>
900
+ <span class="chip-s">more chains</span>
901
+ <span class="chip-s">same custody</span>
902
+ </div>
903
+ </article>
904
+ </div>
905
+
906
+ <div class="why-band">
907
+ <p>The model proposes. Policy bounds. You own signatures. Multi-profile desks, not one omniscient chatbot. Vaults, perps, bridges, and protocol scaffolds, not just swaps. Empty allowlists refuse everything until you configure them.</p>
908
+ <span>claims without receipts don't count</span>
909
+ </div>
756
910
  </div>
757
911
 
758
912
  <div class="moat-grid rv" style="margin-top:28px">
759
- <article class="moat-card">
760
- <div class="n">bound grants</div>
761
- <h3>Wallet with temporary agent permission</h3>
762
- <p>Max value, chain, venue, destinations, and TTL. Outside the grant = hard refuse - not an agent with a free wallet.</p>
763
- </article>
764
- <article class="moat-card">
765
- <div class="n">receipts</div>
766
- <h3>Claims without receipts don't count</h3>
767
- <p>Money claims end in tx hash, receipt status, balance delta, and allowance state. No “looks filled.”</p>
768
- </article>
769
- <article class="moat-card">
770
- <div class="n">custody</div>
771
- <h3>Self-custodial by default</h3>
772
- <p>You sign with your wallet. Agentic dust is optional, capped, and never your main capital as the always-on signer.</p>
773
- </article>
774
- <article class="moat-card">
775
- <div class="n">intent desk + build</div>
776
- <h3>Trade and build protocols</h3>
777
- <p>Orders, vaults, perps, bridges - and protocol scaffold/deploy prep. Full crypto skills included. You sign.</p>
778
- </article>
779
- <article class="moat-card">
780
- <div class="n">simulation</div>
781
- <h3>Show the work before you sign</h3>
782
- <p>minOut, impact, spender, and decoded calldata before approval. Export unsigned artifacts for hardware wallets.</p>
783
- </article>
784
- <article class="moat-card">
785
- <div class="n">allowlists</div>
786
- <h3>Where money may land</h3>
787
- <p>Destination allowlists stop silent router drift. New contracts stay blocked until you add them.</p>
788
- </article>
913
+ <article class="moat-card">
914
+ <div class="n">bound grants</div>
915
+ <h3>Wallet with temporary agent permission</h3>
916
+ <p>Max value, chain, venue, destinations, and TTL. Outside the grant = hard refuse, not an agent with a free wallet.</p>
917
+ </article>
918
+ <article class="moat-card">
919
+ <div class="n">bounded surfaces</div>
920
+ <h3>Six lanes, each with its own decoder</h3>
921
+ <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>
922
+ </article>
923
+ <article class="moat-card">
924
+ <div class="n">receipts</div>
925
+ <h3>Claims without receipts don't count</h3>
926
+ <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>
927
+ </article>
928
+ <article class="moat-card">
929
+ <div class="n">simulation</div>
930
+ <h3>Show the work before you sign</h3>
931
+ <p>minOut, impact, spender, and decoded calldata before approval. Export unsigned artifacts for hardware wallets.</p>
932
+ </article>
933
+ <article class="moat-card">
934
+ <div class="n">allowlists</div>
935
+ <h3>Where money may land</h3>
936
+ <p>Destination allowlists stop silent router drift. New contracts stay blocked until you add them.</p>
937
+ </article>
938
+ <article class="moat-card">
939
+ <div class="n">fail closed</div>
940
+ <h3>Unconfigured means refused</h3>
941
+ <p>A fresh install signs nothing. Every lane refuses while its allowlists are empty, so nothing moves until you set the bounds.</p>
942
+ </article>
789
943
  </div>
790
944
  </section>
791
945
 
792
946
  <section class="section" id="wallets">
793
947
  <p class="section-label rv">Wallets</p>
794
948
  <h2 class="section-title rv">Your wallets. <em>Your limits.</em></h2>
795
- <p class="section-lede rv">Use one wallet everywhere, or separate wallets per chain. Permissions are per wallet - change them, tighten them, or revoke them anytime.</p>
949
+ <p class="section-lede rv">Use one wallet everywhere, or separate wallets per chain. Permissions are per wallet. Change them, tighten them, or revoke them anytime.</p>
796
950
 
797
951
  <div class="wallet-grid rv">
798
- <article class="wallet-card">
799
- <div class="n">setup</div>
800
- <h3>Single or multi</h3>
801
- <p>One wallet across chains, or a dedicated wallet per chain. Same desk either way.</p>
802
- </article>
803
- <article class="wallet-card">
804
- <div class="n">control</div>
805
- <h3>Limit per wallet</h3>
806
- <p>Caps, allowed actions, and scopes sit on each wallet - not a global free pass.</p>
807
- </article>
808
- <article class="wallet-card">
809
- <div class="n">lifecycle</div>
810
- <h3>Change · revoke</h3>
811
- <p>Edit permissions when risk changes. Revoke a wallets access without killing the whole account.</p>
812
- </article>
952
+ <article class="wallet-card">
953
+ <div class="n">setup</div>
954
+ <h3>Single or multi</h3>
955
+ <p>One wallet across chains, or a dedicated wallet per chain. Same desk either way.</p>
956
+ </article>
957
+ <article class="wallet-card">
958
+ <div class="n">control</div>
959
+ <h3>Limit per wallet</h3>
960
+ <p>Caps, allowed actions, and scopes sit on each wallet, not a global free pass.</p>
961
+ </article>
962
+ <article class="wallet-card">
963
+ <div class="n">lifecycle</div>
964
+ <h3>Change · revoke</h3>
965
+ <p>Edit permissions when risk changes. Revoke a wallet's access without killing the whole account.</p>
966
+ </article>
813
967
  </div>
814
968
  </section>
815
969
 
816
970
  <section class="section" id="chains">
817
971
  <p class="section-label rv">Chains</p>
818
972
  <h2 class="section-title rv">Where you can <em>operate.</em></h2>
819
- <p class="section-lede rv">Live coverage grows with the profile mesh. Each chain maps to an agent - and new agents can join.</p>
973
+ <p class="section-lede rv">Live coverage grows with the profile mesh. Each chain maps to an agent, and new agents can join.</p>
820
974
  <div class="chain-grid" id="chain-grid"></div>
975
+ <div class="hl-surface rv">
976
+ <div class="venues-head"><span>hyperliquid // what oracle actually does</span><span><b>prepare-only</b> · your wallet signs</span></div>
977
+ <div class="hl-grid">
978
+ <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>
979
+ <article><h3>Spot &amp; markets</h3><p>Spot meta, mids, L2 book, candles, market and coin datapoints, leaderboards.</p></article>
980
+ <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>
981
+ <article><h3>Outcome markets</h3><p>HIP-4 outcome listing plus order and cancel prepare.</p></article>
982
+ <article><h3>Account state</h3><p>Clearinghouse state, open orders, user fills, positions.</p></article>
983
+ <article><h3>HyperEVM 999</h3><p>Token search and metadata on chain 999, routed with the EVM lane.</p></article>
984
+ </div>
985
+ </div>
821
986
  <div class="venues rv">
822
- <div class="venues-head">protocols // venues</div>
823
- <div class="marquee" aria-hidden="true"><div class="track" id="proto-track"></div></div>
987
+ <div class="venues-head"><span>protocols // venues</span><span><b>routed by name</b> · quotes ranked · prepare-only</span></div>
988
+ <div class="marquee" aria-hidden="true"><div class="track" id="proto-track-a"></div></div>
989
+ <div class="marquee rev" aria-hidden="true"><div class="track" id="proto-track-b"></div></div>
990
+ </div>
991
+ <div class="venues rv">
992
+ <div class="venues-head"><span>models // harnesses</span><span><b>bring your own model</b> · oracle is the control plane</span></div>
993
+ <div class="marquee" aria-hidden="true"><div class="track" id="llm-track"></div></div>
824
994
  </div>
825
995
  </section>
826
996
 
827
997
  <section class="section" id="custody" style="padding-top:clamp(48px,8vh,80px)">
828
- <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)">
829
- <div class="strip-left">
830
- <strong style="font-family:var(--display);font-weight:400;font-size:26px;display:block;margin-bottom:6px">You keep custody.</strong>
831
- <span style="font-family:var(--mono);font-size:10px;letter-spacing:.18em;text-transform:uppercase;color:var(--mute)">oracle never holds your keys</span>
832
- </div>
833
- <div class="strip-right" style="display:flex;flex-wrap:wrap;gap:10px">
834
- <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>
835
- <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>
836
- <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>
837
- </div>
838
- </div>
998
+ <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)">
999
+ <div class="strip-left">
1000
+ <strong style="font-family:var(--display);font-weight:400;font-size:26px;display:block;margin-bottom:6px">You keep custody.</strong>
1001
+ <span style="font-family:var(--mono);font-size:10px;letter-spacing:.18em;text-transform:uppercase;color:var(--mute)">oracle never holds your keys</span>
1002
+ </div>
1003
+ <div class="strip-right" style="display:flex;flex-wrap:wrap;gap:10px">
1004
+ <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>
1005
+ <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>
1006
+ <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>
1007
+ </div>
1008
+ </div>
839
1009
  </section>
840
1010
  </main>
841
1011
 
842
1012
  <footer>
843
1013
  <div class="foot-row">
844
- <div class="powered">
845
- <span class="mark" aria-hidden="true"></span>
846
- powered by
847
- <a href="https://hermes-agent.nousresearch.com" target="_blank" rel="noopener noreferrer">Hermes</a>
848
- </div>
849
- <div class="foot-links">
850
- <a href="/oracle-console/">Console</a>
851
- <a href="https://hermes-agent.nousresearch.com/docs" target="_blank" rel="noopener noreferrer">Docs</a>
852
- </div>
1014
+ <div class="powered">
1015
+ powered by
1016
+ <a href="https://hermes-agent.nousresearch.com" target="_blank" rel="noopener noreferrer">Hermes</a>
1017
+ </div>
1018
+ <div class="foot-links">
1019
+ <a href="/oracle-console/">Console</a>
1020
+ <a href="https://hermes-agent.nousresearch.com/docs" target="_blank" rel="noopener noreferrer">Docs</a>
1021
+ </div>
853
1022
  </div>
854
1023
  <div class="foot-meta">
855
- <span>oracle · for users</span>
856
- <span>full crypto pack · protocol builder · powered by Hermes</span>
857
- <span>you sign // no house custody</span>
1024
+ <span>oracle · <a class="labs-link" href="https://demi.la">locals only labs</a></span>
1025
+ <span>you sign // no house custody</span>
858
1026
  </div>
859
1027
  </footer>
860
1028
 
@@ -863,56 +1031,174 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
863
1031
  "use strict";
864
1032
  document.documentElement.classList.add("js");
865
1033
 
1034
+ var ICON = "https://icons.llamao.fi/icons/";
866
1035
  var CHAINS = [
867
- { name: "Ethereum", id: "1", note: "open / add agent", badge: "live" },
868
- { name: "Base", id: "8453", note: "open / add agent", badge: "live" },
869
- { name: "Arbitrum", id: "42161", note: "open / add agent", badge: "live" },
870
- { name: "Optimism", id: "10", note: "open / add agent", badge: "live" },
871
- { name: "Polygon", id: "137", note: "open / add agent", badge: "live" },
872
- { name: "BNB Chain", id: "56", note: "open / add agent", badge: "live" },
873
- { name: "Avalanche", id: "43114", note: "open / add agent", badge: "live" },
874
- { name: "HyperEVM", id: "999", note: "hyperliquid agent", badge: "live" },
875
- { name: "Abstract", id: "2741", note: "open / add agent", badge: "live" },
876
- { name: "Stable", id: "988", note: "stable agent", badge: "live" },
877
- { name: "Robinhood", id: "4663", note: "robinhood agent", badge: "live" },
878
- { name: "Solana", id: " - ", note: "solana agent", badge: "live" }
879
- ];
880
- var PROTOS = [
881
- "uniswap-v3","aerodrome","velodrome","pancakeswap","quickswap",
882
- "lfj","hyperswap","curve","balancer","pendle","morpho","gmx-v2",
883
- "lifi","relay","paraswap","odos","cow","jupiter","across","stargate"
1036
+ { name: "Ethereum", id: "1", logo: "chains/rsz_ethereum", note: "evm / bridge agent", badge: "live" },
1037
+ { name: "Base", id: "8453", logo: "chains/rsz_base", note: "evm / bridge agent", badge: "live" },
1038
+ { name: "Arbitrum", id: "42161", logo: "chains/rsz_arbitrum", note: "evm / bridge agent", badge: "live" },
1039
+ { name: "Optimism", id: "10", logo: "chains/rsz_optimism", note: "evm / bridge agent", badge: "live" },
1040
+ { name: "Polygon", id: "137", logo: "chains/rsz_polygon", note: "evm / bridge agent", badge: "live" },
1041
+ { name: "BNB Chain", id: "56", logo: "chains/rsz_binance", note: "evm / bridge agent", badge: "live" },
1042
+ { name: "Avalanche", id: "43114", logo: "chains/rsz_avalanche", note: "evm / bridge agent", badge: "live" },
1043
+ { name: "Hyperliquid", id: "999", logo: "chains/rsz_hyperliquid", note: "hyperliquid agent", badge: "live" },
1044
+ { name: "Abstract", id: "2741", logo: "chains/rsz_abstract", note: "open / add agent", badge: "live" },
1045
+ { name: "Stable", id: "988", logo: "chains/rsz_stable", note: "stable agent", badge: "live" },
1046
+ { name: "Robinhood", id: "4663", logo: "chains/rsz_robinhood", note: "robinhood agent", badge: "live" },
1047
+ { name: "Solana", id: "SOL", logo: "chains/rsz_solana", note: "solana agent", badge: "live" },
1048
+ { name: "Bitcoin", id: "BTC", logo: "chains/rsz_bitcoin", note: "bitcoin agent", badge: "live" }
884
1049
  ];
885
-
886
1050
  document.getElementById("chain-grid").innerHTML = CHAINS.map(function (c) {
887
- var cls = c.badge === "live" ? "badge live" : "badge";
888
- var label = c.badge === "live" ? "live" : "read";
889
- return '<article class="chain rv"><div class="chain-top"><div class="nm">' + c.name + '</div><div class="id">' + c.id + '</div></div><div class="meta"><span>' + c.note + '</span><span class="' + cls + '">' + label + '</span></div></article>';
1051
+ var cls = c.badge === "live" ? "badge live" : "badge";
1052
+ var label = c.badge === "live" ? "live" : "read";
1053
+ return '<article class="chain rv"><div class="chain-top"><div class="nm">' + c.name +
1054
+ ' <img src="' + ICON + c.logo + '?w=36&h=36" alt="' + c.name + ' logo" loading="lazy"></div><div class="id">' + c.id +
1055
+ '</div></div><div class="meta"><span>' + c.note + '</span><span class="' + cls + '">' + label + '</span></div></article>';
890
1056
  }).join("");
891
1057
 
892
- var seq = PROTOS.concat(PROTOS);
893
- document.getElementById("proto-track").innerHTML = seq.map(function (x) {
894
- return '<span class="chip">' + x + '</span>';
1058
+ var WM = "assets/wordmarks/";
1059
+ var PROTOS_A = [
1060
+ { n: "Hyperliquid", wm: "hyperliquid.svg" },
1061
+ { n: "Outcome", wm: "outcome.svg" },
1062
+ { n: "XYZ", wm: "xyz.svg" },
1063
+ { n: "Markets By Kinetiq", txt: 1 },
1064
+ { n: "HyENA", wm: "hyena.svg" },
1065
+ { n: "Paragon", txt: 1 },
1066
+ { n: "HyperSwap", wm: "hyperswap.svg" },
1067
+ { n: "Uniswap", wm: "uniswap.svg" },
1068
+ { n: "Polymarket", wm: "polymarket.png" },
1069
+ { n: "Aerodrome", wm: "aerodrome.svg" },
1070
+ { n: "Velodrome", wm: "velodrome.svg" },
1071
+ { n: "PancakeSwap", wm: "pancakeswap.svg" },
1072
+ { n: "QuickSwap", wm: "quickswap.png" },
1073
+ { n: "LFJ", txt: 1 },
1074
+ { n: "Curve", txt: 1 },
1075
+ { n: "Balancer", wm: "balancer.svg" },
1076
+ { n: "Pendle", wm: "pendle.png" }
1077
+ ];
1078
+ var PROTOS_B = [
1079
+ { n: "Morpho", wm: "morpho.svg" },
1080
+ { n: "GMX", wm: "gmx.svg" },
1081
+ { n: "LI.FI", wm: "lifi.png" },
1082
+ { n: "Relay", wm: "relay.svg" },
1083
+ { n: "Velora", wm: "paraswap.svg" },
1084
+ { n: "Odos", wm: "odos.svg" },
1085
+ { n: "CoW Swap", wm: "cowswap.svg" },
1086
+ { n: "1inch", wm: "oneinch.svg" },
1087
+ { n: "Jupiter", wm: "jupiter.svg" },
1088
+ { n: "OpenSea", wm: "opensea.svg" },
1089
+ { n: "Across", wm: "across.svg" },
1090
+ { n: "Stargate", wm: "stargate.svg" },
1091
+ { n: "Magic Eden", wm: "magic-eden.svg" }
1092
+ ];
1093
+
1094
+ function chipRow(list) {
1095
+ var seq = list.concat(list);
1096
+ return seq.map(function (x) {
1097
+ if (x.wm) {
1098
+ return '<span class="chip wm-chip"><img class="wm" src="' + WM + x.wm + '" alt="' + x.n + '" decoding="async"></span>';
1099
+ }
1100
+ return '<span class="chip wm-chip"><span class="wordmark">' + x.n + '</span></span>';
1101
+ }).join("");
1102
+ }
1103
+ document.getElementById("proto-track-a").innerHTML = chipRow(PROTOS_A);
1104
+ document.getElementById("proto-track-b").innerHTML = chipRow(PROTOS_B);
1105
+
1106
+ var LM = "assets/llms/";
1107
+ var LLMS = [
1108
+ { n: "Hermes Agent", wm: "hermes.png", tall: 1 },
1109
+ { n: "Claude", wm: "claude.svg" },
1110
+ { n: "Grok", wm: "grok.svg" },
1111
+ { n: "Codex", wm: "codex.svg" },
1112
+ { n: "Gemini", wm: "gemini.svg" },
1113
+ { n: "OpenClaw", wm: "openclaw.svg", tall: 1 },
1114
+ { n: "Perplexity", wm: "perplexity.svg" },
1115
+ { n: "Manus", wm: "manus.svg" },
1116
+ { n: "Cursor", wm: "cursor.svg" },
1117
+ { n: "Windsurf", wm: "windsurf.svg" },
1118
+ { n: "DeepSeek", wm: "deepseek.svg" },
1119
+ { n: "Qwen", wm: "qwen.svg", tall: 1 },
1120
+ { n: "Kimi", wm: "kimi.svg" }
1121
+ ];
1122
+ document.getElementById("llm-track").innerHTML = LLMS.concat(LLMS).map(function (x) {
1123
+ var cls = x.tall ? "wm tall" : "wm";
1124
+ return '<span class="chip wm-chip"><img class="' + cls + '" src="' + LM + x.wm + '" alt="' + x.n + '" decoding="async">' + (x.tall ? '<span class="wordmark">' + x.n + '</span>' : '') + '</span>';
895
1125
  }).join("");
896
1126
 
897
1127
  var loader = document.getElementById("loader");
898
1128
  var fill = document.getElementById("loader-fill");
899
1129
  requestAnimationFrame(function () { fill.style.width = "100%"; });
900
1130
  window.addEventListener("load", function () {
901
- setTimeout(function () { loader.classList.add("out"); }, 650);
1131
+ setTimeout(function () { loader.classList.add("out"); }, 650);
902
1132
  });
903
1133
 
904
1134
  var reduced = window.matchMedia("(prefers-reduced-motion: reduce)").matches;
905
1135
  var coarse = window.matchMedia("(pointer: coarse)").matches;
906
- var nodes = Array.prototype.slice.call(document.querySelectorAll(".rv"));
1136
+
1137
+ var progress = document.getElementById("progress");
1138
+ var ticking = false;
1139
+ function onScroll() {
1140
+ if (ticking) return;
1141
+ ticking = true;
1142
+ requestAnimationFrame(function () {
1143
+ var h = document.documentElement;
1144
+ var max = h.scrollHeight - h.clientHeight;
1145
+ progress.style.transform = "scaleX(" + (max > 0 ? h.scrollTop / max : 0) + ")";
1146
+ ticking = false;
1147
+ });
1148
+ }
1149
+ window.addEventListener("scroll", onScroll, { passive: true });
1150
+ onScroll();
1151
+
1152
+ var heroOrb = document.getElementById("hero-orb");
1153
+ var heroTitle = document.getElementById("hero-title");
1154
+ if (heroOrb && heroTitle && !reduced) {
1155
+ var px = false;
1156
+ window.addEventListener("scroll", function () {
1157
+ if (px) return;
1158
+ px = true;
1159
+ requestAnimationFrame(function () {
1160
+ var y = window.scrollY;
1161
+ var lim = window.innerHeight * .8;
1162
+ var f = Math.min(y / lim, 1);
1163
+ var art = heroOrb.parentElement;
1164
+ art.style.opacity = String(1 - f);
1165
+ art.style.visibility = f >= 1 ? "hidden" : "visible";
1166
+ art.style.transform = "translateY(" + (Math.min(y, lim) * .28) + "px)";
1167
+ heroTitle.style.transform = "translateY(" + (Math.min(y, lim) * .16) + "px)";
1168
+ heroTitle.style.opacity = String(1 - f * .8);
1169
+ px = false;
1170
+ });
1171
+ }, { passive: true });
1172
+ }
1173
+
1174
+ (function () {
1175
+ var v = document.getElementById("orb-vid");
1176
+ if (!v) return;
1177
+ var art = document.querySelector(".hero-art");
1178
+ function ready() { art.classList.add("blender-orb"); v.classList.add("ready"); }
1179
+ if (v.readyState >= 2) ready();
1180
+ v.addEventListener("loadeddata", ready, { once: true });
1181
+ if (reduced) { v.removeAttribute("autoplay"); v.pause(); ready(); return; }
1182
+ document.addEventListener("visibilitychange", function () {
1183
+ if (document.visibilityState === "visible") { var q = v.play(); if (q && q.catch) q.catch(function () {}); }
1184
+ else v.pause();
1185
+ });
1186
+ })();
1187
+
1188
+ var nodes = Array.prototype.slice.call(document.querySelectorAll(".rv, .wires"));
907
1189
  if (reduced || !("IntersectionObserver" in window)) {
908
- nodes.forEach(function (n) { n.classList.add("in"); });
1190
+ nodes.forEach(function (n) { n.classList.add("in"); n.classList.add("done"); });
909
1191
  } else {
910
- var io = new IntersectionObserver(function (entries) {
911
- entries.forEach(function (e) {
912
- if (e.isIntersecting) { e.target.classList.add("in"); io.unobserve(e.target); }
913
- });
914
- }, { threshold: 0.1, rootMargin: "0px 0px -6% 0px" });
915
- nodes.forEach(function (n) { io.observe(n); });
1192
+ var io = new IntersectionObserver(function (entries) {
1193
+ entries.forEach(function (e) {
1194
+ if (e.isIntersecting) {
1195
+ e.target.classList.add("in");
1196
+ (function (el) { setTimeout(function () { el.classList.add("done"); }, 1100); })(e.target);
1197
+ io.unobserve(e.target);
1198
+ }
1199
+ });
1200
+ }, { threshold: 0.1, rootMargin: "0px 0px -6% 0px" });
1201
+ nodes.forEach(function (n) { io.observe(n); });
916
1202
  }
917
1203
 
918
1204
  var canvas = document.getElementById("gl");
@@ -922,29 +1208,29 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
922
1208
 
923
1209
  var vs = "attribute vec2 p;void main(){gl_Position=vec4(p,0.,1.);}";
924
1210
  var fs = [
925
- "precision highp float;",
926
- "uniform vec2 r; uniform float t;",
927
- "float hash(vec2 p){return fract(sin(dot(p,vec2(127.1,311.7)))*43758.5453);}",
928
- "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;}",
929
- "void main(){",
930
- " vec2 uv=(gl_FragCoord.xy-.5*r)/min(r.x,r.y);",
931
- " vec2 p=uv*1.15; float tt=t*.08;",
932
- " float n=noise(p*2.2+vec2(tt*.6,-tt*.4)); n+=.5*noise(p*4.6-vec2(tt,tt*.7)); n*=.55;",
933
- " vec2 g=abs(fract(p*6.5)-.5); float grid=smoothstep(.06,0.,min(g.x,g.y));",
934
- " float d=length(p); float rings=0.;",
935
- " 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);}",
936
- " float nodes=0.;",
937
- " 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.);}",
938
- " vec3 bg=vec3(0.043,0.063,0.094);",
939
- " vec3 blue=vec3(0.486,0.769,1.0);",
940
- " vec3 cool=vec3(0.655,0.847,1.0);",
941
- " vec3 col=bg;",
942
- " col+=blue*(n*.2); col+=blue*grid*.05;",
943
- " col+=mix(blue,cool,.35)*rings*.22; col+=blue*nodes*.5;",
944
- " col+=blue*exp(-d*d*1.8)*.08;",
945
- " float vig=pow(max(1.-dot(uv*.72,uv*.72),0.),1.55);",
946
- " col*=vig; gl_FragColor=vec4(col,1.);",
947
- "}"
1211
+ "precision highp float;",
1212
+ "uniform vec2 r; uniform float t;",
1213
+ "float hash(vec2 p){return fract(sin(dot(p,vec2(127.1,311.7)))*43758.5453);}",
1214
+ "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;}",
1215
+ "void main(){",
1216
+ " vec2 uv=(gl_FragCoord.xy-.5*r)/min(r.x,r.y);",
1217
+ " vec2 p=uv*1.15; float tt=t*.08;",
1218
+ " float n=noise(p*2.2+vec2(tt*.6,-tt*.4)); n+=.5*noise(p*4.6-vec2(tt,tt*.7)); n*=.55;",
1219
+ " vec2 g=abs(fract(p*6.5)-.5); float grid=smoothstep(.06,0.,min(g.x,g.y));",
1220
+ " float d=length(p); float rings=0.;",
1221
+ " 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);}",
1222
+ " float nodes=0.;",
1223
+ " 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.);}",
1224
+ " vec3 bg=vec3(0.043,0.063,0.094);",
1225
+ " vec3 blue=vec3(0.486,0.769,1.0);",
1226
+ " vec3 cool=vec3(0.655,0.847,1.0);",
1227
+ " vec3 col=bg;",
1228
+ " col+=blue*(n*.2); col+=blue*grid*.05;",
1229
+ " col+=mix(blue,cool,.35)*rings*.22; col+=blue*nodes*.5;",
1230
+ " col+=blue*exp(-d*d*1.8)*.08;",
1231
+ " float vig=pow(max(1.-dot(uv*.72,uv*.72),0.),1.55);",
1232
+ " col*=vig; gl_FragColor=vec4(col,1.);",
1233
+ "}"
948
1234
  ].join("\n");
949
1235
 
950
1236
  function compile(type, src){var s=gl.createShader(type);gl.shaderSource(s,src);gl.compileShader(s);return s;}
@@ -958,17 +1244,17 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
958
1244
  var uR=gl.getUniformLocation(prog,"r"), uT=gl.getUniformLocation(prog,"t");
959
1245
  var running=true;
960
1246
  function resize(){
961
- var dpr=Math.min(window.devicePixelRatio||1,1.5);
962
- var w=Math.floor(canvas.clientWidth*dpr), h=Math.floor(canvas.clientHeight*dpr);
963
- if(canvas.width!==w||canvas.height!==h){canvas.width=w;canvas.height=h;gl.viewport(0,0,w,h);}
1247
+ var dpr=Math.min(window.devicePixelRatio||1,1.5);
1248
+ var w=Math.floor(canvas.clientWidth*dpr), h=Math.floor(canvas.clientHeight*dpr);
1249
+ if(canvas.width!==w||canvas.height!==h){canvas.width=w;canvas.height=h;gl.viewport(0,0,w,h);}
964
1250
  }
965
1251
  function frame(now){
966
- if(!running) return;
967
- resize();
968
- gl.uniform2f(uR,canvas.width,canvas.height);
969
- gl.uniform1f(uT,now*0.001);
970
- gl.drawArrays(gl.TRIANGLES,0,3);
971
- requestAnimationFrame(frame);
1252
+ if(!running) return;
1253
+ resize();
1254
+ gl.uniform2f(uR,canvas.width,canvas.height);
1255
+ gl.uniform1f(uT,now*0.001);
1256
+ gl.drawArrays(gl.TRIANGLES,0,3);
1257
+ requestAnimationFrame(frame);
972
1258
  }
973
1259
  function fit(){canvas.style.width="100%";canvas.style.height="100%";resize();}
974
1260
  fit();