@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.
- package/README.md +76 -18
- package/SETUP.md +13 -0
- package/bin/oracle-data-mcp.mjs +1 -1
- package/bin/oracle.mjs +33 -0
- package/docs/cli.md +47 -0
- package/docs/connectors.md +13 -0
- package/package.json +6 -2
- package/profiles/oracle/SOUL.md +10 -4
- package/profiles/robinhood-agent/SOUL.md +5 -3
- package/protocols/templates/safe-erc20/README.md +9 -0
- package/public/agent-connect/app.js +16 -13
- package/public/oracle-splash/assets/hero/orb.avif +0 -0
- package/public/oracle-splash/assets/hero/orb.webm +0 -0
- package/public/oracle-splash/assets/llms/claude.svg +1 -0
- package/public/oracle-splash/assets/llms/codex.svg +1 -0
- package/public/oracle-splash/assets/llms/cursor.svg +17 -0
- package/public/oracle-splash/assets/llms/deepseek.svg +1 -0
- package/public/oracle-splash/assets/llms/gemini.svg +1 -0
- package/public/oracle-splash/assets/llms/grok.svg +8 -0
- package/public/oracle-splash/assets/llms/hermes.png +0 -0
- package/public/oracle-splash/assets/llms/kimi.svg +1 -0
- package/public/oracle-splash/assets/llms/manus.svg +18 -0
- package/public/oracle-splash/assets/llms/openclaw.svg +22 -0
- package/public/oracle-splash/assets/llms/perplexity.svg +1 -0
- package/public/oracle-splash/assets/llms/qwen.svg +1 -0
- package/public/oracle-splash/assets/llms/windsurf.svg +1 -0
- package/public/oracle-splash/assets/protocols/abcdex.png +0 -0
- package/public/oracle-splash/assets/protocols/across.png +0 -0
- package/public/oracle-splash/assets/protocols/aerodrome.png +0 -0
- package/public/oracle-splash/assets/protocols/balancer.png +0 -0
- package/public/oracle-splash/assets/protocols/cowswap.png +0 -0
- package/public/oracle-splash/assets/protocols/curve.png +0 -0
- package/public/oracle-splash/assets/protocols/dreamcash.png +0 -0
- package/public/oracle-splash/assets/protocols/felix.png +0 -0
- package/public/oracle-splash/assets/protocols/gmx.png +0 -0
- package/public/oracle-splash/assets/protocols/hyena.png +0 -0
- package/public/oracle-splash/assets/protocols/hyperbeat.png +0 -0
- package/public/oracle-splash/assets/protocols/hyperliquid.png +0 -0
- package/public/oracle-splash/assets/protocols/hyperswap.png +0 -0
- package/public/oracle-splash/assets/protocols/jupiter.png +0 -0
- package/public/oracle-splash/assets/protocols/kinetiq.png +0 -0
- package/public/oracle-splash/assets/protocols/lfj.png +0 -0
- package/public/oracle-splash/assets/protocols/lifi.png +0 -0
- package/public/oracle-splash/assets/protocols/magic-eden.png +0 -0
- package/public/oracle-splash/assets/protocols/morpho.png +0 -0
- package/public/oracle-splash/assets/protocols/odos.png +0 -0
- package/public/oracle-splash/assets/protocols/oneinch.png +0 -0
- package/public/oracle-splash/assets/protocols/opensea.png +0 -0
- package/public/oracle-splash/assets/protocols/pancakeswap.png +0 -0
- package/public/oracle-splash/assets/protocols/paragon.png +0 -0
- package/public/oracle-splash/assets/protocols/paraswap.png +0 -0
- package/public/oracle-splash/assets/protocols/pendle.png +0 -0
- package/public/oracle-splash/assets/protocols/polymarket.png +0 -0
- package/public/oracle-splash/assets/protocols/quickswap.png +0 -0
- package/public/oracle-splash/assets/protocols/relay.png +0 -0
- package/public/oracle-splash/assets/protocols/stargate.png +0 -0
- package/public/oracle-splash/assets/protocols/tradexyz.png +0 -0
- package/public/oracle-splash/assets/protocols/uniswap.png +0 -0
- package/public/oracle-splash/assets/protocols/velodrome.png +0 -0
- package/public/oracle-splash/assets/protocols/ventuals.png +0 -0
- package/public/oracle-splash/assets/wordmarks/across.svg +4 -0
- package/public/oracle-splash/assets/wordmarks/aerodrome.svg +23 -0
- package/public/oracle-splash/assets/wordmarks/balancer.svg +3 -0
- package/public/oracle-splash/assets/wordmarks/cowswap.svg +1 -0
- package/public/oracle-splash/assets/wordmarks/gmx.svg +13 -0
- package/public/oracle-splash/assets/wordmarks/hyena.svg +7 -0
- package/public/oracle-splash/assets/wordmarks/hyperliquid.svg +21 -0
- package/public/oracle-splash/assets/wordmarks/hyperswap.svg +13 -0
- package/public/oracle-splash/assets/wordmarks/jupiter.svg +35 -0
- package/public/oracle-splash/assets/wordmarks/lifi.png +0 -0
- package/public/oracle-splash/assets/wordmarks/magic-eden.svg +1 -0
- package/public/oracle-splash/assets/wordmarks/morpho.svg +1 -0
- package/public/oracle-splash/assets/wordmarks/odos.svg +3 -0
- package/public/oracle-splash/assets/wordmarks/oneinch.svg +6 -0
- package/public/oracle-splash/assets/wordmarks/opensea.svg +1 -0
- package/public/oracle-splash/assets/wordmarks/outcome.svg +16 -0
- package/public/oracle-splash/assets/wordmarks/pancakeswap.svg +18 -0
- package/public/oracle-splash/assets/wordmarks/paraswap.svg +16 -0
- package/public/oracle-splash/assets/wordmarks/pendle.png +0 -0
- package/public/oracle-splash/assets/wordmarks/polymarket.png +0 -0
- package/public/oracle-splash/assets/wordmarks/quickswap.png +0 -0
- package/public/oracle-splash/assets/wordmarks/relay.svg +8 -0
- package/public/oracle-splash/assets/wordmarks/stargate.svg +15 -0
- package/public/oracle-splash/assets/wordmarks/uniswap.svg +18 -0
- package/public/oracle-splash/assets/wordmarks/velodrome.svg +84 -0
- package/public/oracle-splash/assets/wordmarks/xyz.svg +12 -0
- package/public/oracle-splash/index.html +784 -498
- package/scripts/check-doc-drift.mjs +111 -0
- package/skills/oracle-chat/SKILL.md +61 -0
- package/skills/oracle-chat/chain.SKILL.md +31 -0
- package/skills/oracle-chat/setup.SKILL.md +37 -0
- package/skins/oracle.yaml +52 -0
- package/src/cli/chain-catalog.mjs +215 -0
- package/src/cli/chain-state.mjs +74 -0
- package/src/cli/commands/chain.mjs +143 -0
- package/src/cli/commands/chat.mjs +268 -0
- package/src/cli/commands/credential.mjs +9 -0
- package/src/cli/commands/data-mcp.mjs +18 -0
- package/src/cli/commands/data.mjs +73 -0
- package/src/cli/commands/doctor.mjs +131 -0
- package/src/cli/commands/help.mjs +7 -0
- package/src/cli/commands/init.mjs +27 -0
- package/src/cli/commands/mcp.mjs +142 -0
- package/src/cli/commands/model.mjs +37 -0
- package/src/cli/commands/prepare.mjs +12 -0
- package/src/cli/commands/public.mjs +20 -0
- package/src/cli/commands/route.mjs +12 -0
- package/src/cli/commands/runner.mjs +9 -0
- package/src/cli/commands/scan.mjs +12 -0
- package/src/cli/commands/setup.mjs +283 -0
- package/src/cli/commands/sign.mjs +21 -0
- package/src/cli/commands/signer.mjs +9 -0
- package/src/cli/commands/upgrade.mjs +12 -0
- package/src/cli/commands/vault.mjs +9 -0
- package/src/cli/commands/version.mjs +22 -0
- package/src/cli/first-run.mjs +23 -0
- package/src/cli/kernel.mjs +237 -0
- package/src/cli/mcp-targets/chatgpt.mjs +51 -0
- package/src/cli/mcp-targets/claude-code.mjs +39 -0
- package/src/cli/mcp-targets/claude-desktop.mjs +24 -0
- package/src/cli/mcp-targets/codex.mjs +41 -0
- package/src/cli/mcp-targets/shared.mjs +61 -0
- package/src/cli/messaging-platforms.mjs +209 -0
- package/src/cli/operator-dispatch.mjs +258 -0
- package/src/cli/oracle-harness.py +148 -0
- package/src/cli/paths.mjs +83 -0
- package/src/cli/setup-state.mjs +168 -0
- package/src/cli/spawn-child.mjs +43 -0
- 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.
|
|
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=
|
|
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:#
|
|
23
|
-
--mute:#
|
|
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:
|
|
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:
|
|
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
|
-
|
|
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
|
|
91
|
+
grid-template-columns:1fr auto;
|
|
73
92
|
align-items:center;gap:16px;
|
|
74
|
-
padding:
|
|
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 .
|
|
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
|
|
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
|
-
|
|
113
|
-
|
|
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
|
-
|
|
118
|
-
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
|
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(
|
|
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 .
|
|
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:
|
|
257
|
-
.node.route{min-height:
|
|
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.
|
|
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:
|
|
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
|
|
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{
|
|
364
|
-
|
|
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
|
|
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 .
|
|
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
|
-
.
|
|
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:
|
|
439
|
-
font-
|
|
440
|
-
|
|
441
|
-
|
|
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(
|
|
487
|
-
.js .rv.in{opacity:1;transform:none;transition:opacity
|
|
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
|
-
.
|
|
491
|
-
.nav-
|
|
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
|
-
.
|
|
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
|
-
|
|
517
|
-
|
|
518
|
-
|
|
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"
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
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
|
-
|
|
532
|
-
|
|
533
|
-
|
|
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
|
|
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
|
-
|
|
549
|
-
|
|
550
|
-
|
|
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
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
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
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
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
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
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
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
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
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
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
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
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
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
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
|
-
|
|
753
|
-
|
|
754
|
-
|
|
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
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
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
|
|
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
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
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
|
|
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 & 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
|
-
|
|
823
|
-
|
|
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
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
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
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
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
|
-
|
|
856
|
-
|
|
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
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
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
|
-
|
|
888
|
-
|
|
889
|
-
|
|
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
|
|
893
|
-
|
|
894
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1190
|
+
nodes.forEach(function (n) { n.classList.add("in"); n.classList.add("done"); });
|
|
909
1191
|
} else {
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
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
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
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
|
-
|
|
962
|
-
|
|
963
|
-
|
|
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
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
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();
|