@oracle-agent/oracle 0.2.0 → 0.2.2
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/SETUP.md +13 -0
- package/package.json +12 -4
- package/protocols/templates/safe-erc20/SECURITY.md +16 -0
- package/protocols/templates/safe-erc20/foundry.toml +12 -0
- package/protocols/templates/safe-erc20/remappings.txt +2 -0
- package/protocols/templates/safe-erc20/src/SafeERC20.sol +53 -0
- package/protocols/templates/safe-erc20/test/SafeERC20.t.sol +72 -0
- package/public/oracle-splash/index.html +648 -598
- package/public/oracle-splash/mesh-graph.png +0 -0
- package/public/oracle-splash/mesh-graph.svg +216 -0
- package/scripts/protocol-template-gate.mjs +15 -0
- package/skills/oracle-protocol-builder/SKILL.md +45 -24
- package/src/data/catalog.mjs +9 -0
- package/src/data/desk-data.mjs +8 -0
- package/src/data/providers/poly-clob.mjs +18 -195
- package/src/protocol-templates/gate.mjs +179 -0
- package/src/protocol-templates/prepare-deploy.mjs +81 -0
|
@@ -12,49 +12,49 @@
|
|
|
12
12
|
<link href="https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,300;0,400;0,500;1,300;1,400;1,500&family=Outfit:wght@300;400;500&family=IBM+Plex+Mono:wght@400;500&display=swap" rel="stylesheet" />
|
|
13
13
|
<style>
|
|
14
14
|
:root{
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
15
|
+
--bg:#0B1018;
|
|
16
|
+
--panel:#111925;
|
|
17
|
+
--panel-2:#152031;
|
|
18
|
+
--blue:#7CC4FF;
|
|
19
|
+
--blue2:#A7D8FF;
|
|
20
|
+
--blue-dim:#3a6f99;
|
|
21
|
+
--ink:#E8F1FA;
|
|
22
|
+
--cool:#9BB6D1;
|
|
23
|
+
--mute:#5B738F;
|
|
24
|
+
--line:rgba(124,196,255,.14);
|
|
25
|
+
--line-2:rgba(124,196,255,.24);
|
|
26
|
+
--evm:#7CC4FF;
|
|
27
|
+
--hl:#50D2C1;
|
|
28
|
+
--rh:#d7ff4d;
|
|
29
|
+
--sol:#9945FF;
|
|
30
|
+
--poly:#3B82F6;
|
|
31
|
+
--stable:#F0B90B;
|
|
32
|
+
--display:"Cormorant Garamond",Georgia,"Times New Roman",serif;
|
|
33
|
+
--sans:"Outfit",system-ui,sans-serif;
|
|
34
|
+
--mono:"IBM Plex Mono",ui-monospace,monospace;
|
|
35
|
+
--ease:cubic-bezier(.16,1,.3,1);
|
|
36
|
+
--pad:clamp(18px,4vw,48px);
|
|
37
|
+
--max:1100px;
|
|
38
38
|
}
|
|
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
|
-
|
|
43
|
-
|
|
42
|
+
min-height:100dvh;background:var(--bg);color:var(--ink);
|
|
43
|
+
font-family:var(--sans);font-weight:300;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
48
|
|
|
49
49
|
.grain{
|
|
50
|
-
|
|
51
|
-
|
|
50
|
+
position:fixed;inset:-40%;z-index:40;pointer-events:none;opacity:.04;mix-blend-mode:soft-light;
|
|
51
|
+
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
52
|
}
|
|
53
53
|
|
|
54
54
|
.loader{
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
55
|
+
position:fixed;inset:0;z-index:50;background:var(--bg);
|
|
56
|
+
display:grid;place-items:center;
|
|
57
|
+
transition:opacity .7s var(--ease),visibility .7s;
|
|
58
58
|
}
|
|
59
59
|
.loader.out{opacity:0;visibility:hidden;pointer-events:none}
|
|
60
60
|
.loader-inner{display:flex;flex-direction:column;align-items:center;gap:18px}
|
|
@@ -67,50 +67,50 @@ button{font:inherit;color:inherit;background:none;border:0;cursor:pointer}
|
|
|
67
67
|
@keyframes pulse{0%{transform:scale(.85);opacity:.55}70%{transform:scale(1.35);opacity:0}100%{transform:scale(1.35);opacity:0}}
|
|
68
68
|
|
|
69
69
|
.nav{
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
70
|
+
position:fixed;top:0;left:0;right:0;z-index:30;
|
|
71
|
+
display:grid;
|
|
72
|
+
grid-template-columns:1fr auto 1fr;
|
|
73
|
+
align-items:center;gap:16px;
|
|
74
|
+
padding:16px var(--pad);
|
|
75
|
+
background:rgba(11,16,24,.82);
|
|
76
|
+
backdrop-filter:blur(14px);
|
|
77
|
+
border-bottom:1px solid var(--line);
|
|
78
78
|
}
|
|
79
79
|
.brand{
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
80
|
+
display:flex;align-items:center;gap:12px;
|
|
81
|
+
font-family:var(--display);font-size:24px;font-weight:400;letter-spacing:.02em;
|
|
82
|
+
text-transform:none;justify-self:start;
|
|
83
83
|
}
|
|
84
84
|
.brand .orb{width:8px;height:8px;border-radius:50%;background:var(--blue);box-shadow:0 0 14px rgba(124,196,255,.85)}
|
|
85
85
|
.nav-mid{
|
|
86
|
-
|
|
87
|
-
|
|
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
88
|
}
|
|
89
89
|
.nav-mid b{color:var(--blue2);font-weight:500}
|
|
90
90
|
.nav-mid a.hermes{
|
|
91
|
-
|
|
92
|
-
|
|
91
|
+
color:var(--blue);font-weight:600;border-bottom:1px solid transparent;
|
|
92
|
+
transition:border-color .25s,color .25s;
|
|
93
93
|
}
|
|
94
94
|
.nav-mid a.hermes:hover{border-bottom-color:var(--blue);color:var(--ink)}
|
|
95
95
|
.nav-links{
|
|
96
|
-
|
|
97
|
-
|
|
96
|
+
display:flex;align-items:center;gap:18px;justify-self:end;
|
|
97
|
+
font-family:var(--mono);font-size:10px;letter-spacing:.18em;text-transform:uppercase;color:var(--cool);
|
|
98
98
|
}
|
|
99
99
|
.nav-links a{opacity:.78;transition:opacity .25s,color .25s}
|
|
100
100
|
.nav-links a:hover{opacity:1;color:var(--blue2)}
|
|
101
101
|
.nav-cta{
|
|
102
|
-
|
|
103
|
-
|
|
102
|
+
border:1px solid rgba(124,196,255,.28);border-radius:999px;padding:10px 16px;color:var(--ink);
|
|
103
|
+
transition:border-color .3s,color .3s,box-shadow .3s;
|
|
104
104
|
}
|
|
105
105
|
.nav-cta:hover{border-color:var(--blue);color:var(--blue2);box-shadow:0 0 0 1px rgba(124,196,255,.12)}
|
|
106
106
|
|
|
107
107
|
/* fixed soft field behind content */
|
|
108
108
|
#gl{position:fixed;inset:0;width:100%;height:100%;z-index:0;display:block;opacity:.9}
|
|
109
109
|
.veil{
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
110
|
+
position:fixed;inset:0;z-index:1;pointer-events:none;
|
|
111
|
+
background:
|
|
112
|
+
radial-gradient(60% 50% at 50% 28%, rgba(124,196,255,.08), transparent 58%),
|
|
113
|
+
linear-gradient(180deg, rgba(11,16,24,.2), var(--bg) 88%);
|
|
114
114
|
}
|
|
115
115
|
main{position:relative;z-index:2;padding-top:84px}
|
|
116
116
|
|
|
@@ -118,130 +118,136 @@ main{position:relative;z-index:2;padding-top:84px}
|
|
|
118
118
|
.hero,.hero-core,.title-powered,.scroll-cue,.eyebrow,.lede,.actions,.btn,.meta-row{display:none!important}
|
|
119
119
|
|
|
120
120
|
.section{
|
|
121
|
-
|
|
122
|
-
|
|
121
|
+
position:relative;z-index:2;max-width:var(--max);margin:0 auto;
|
|
122
|
+
padding:clamp(28px,5vh,48px) var(--pad) 0;
|
|
123
123
|
}
|
|
124
124
|
.section:first-of-type{padding-top:clamp(18px,3vh,28px)}
|
|
125
125
|
.section-label{
|
|
126
|
-
|
|
126
|
+
font-family:var(--mono);font-size:10px;letter-spacing:.34em;text-transform:uppercase;color:var(--blue);margin-bottom:14px;
|
|
127
127
|
}
|
|
128
128
|
.veil{
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
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
133
|
}
|
|
134
134
|
.hero-core{
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
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
138
|
}
|
|
139
139
|
.eyebrow{
|
|
140
|
-
|
|
141
|
-
|
|
140
|
+
font-family:var(--mono);font-size:11px;letter-spacing:.46em;text-transform:uppercase;color:var(--blue);
|
|
141
|
+
display:inline-flex;align-items:center;gap:12px;
|
|
142
142
|
}
|
|
143
143
|
.eyebrow::before,.eyebrow::after{content:"";width:28px;height:1px;background:var(--blue-dim)}
|
|
144
144
|
h1{
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
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
148
|
}
|
|
149
149
|
h1 em{
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
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
153
|
}
|
|
154
154
|
.title-powered{
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
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
158
|
}
|
|
159
159
|
.title-powered .mark{
|
|
160
|
-
|
|
161
|
-
|
|
160
|
+
width:6px;height:6px;border-radius:50%;background:var(--blue);
|
|
161
|
+
box-shadow:0 0 10px rgba(124,196,255,.7);
|
|
162
162
|
}
|
|
163
163
|
.title-powered a{
|
|
164
|
-
|
|
165
|
-
|
|
164
|
+
color:var(--blue);font-weight:500;border-bottom:1px solid transparent;
|
|
165
|
+
transition:border-color .25s,color .25s;letter-spacing:.2em;
|
|
166
166
|
}
|
|
167
167
|
.title-powered a:hover{border-bottom-color:var(--blue);color:var(--ink)}
|
|
168
168
|
.lede{max-width:34ch;font-size:clamp(15px,1.7vw,18px);line-height:1.65;color:var(--cool);font-weight:300}
|
|
169
169
|
.actions{display:flex;flex-wrap:wrap;gap:12px;justify-content:center;margin-top:6px}
|
|
170
170
|
.btn{
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
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
174
|
}
|
|
175
175
|
.btn-primary{background:var(--blue);color:#061018;font-weight:500}
|
|
176
176
|
.btn-primary:hover{transform:translateY(-2px);box-shadow:0 14px 36px rgba(124,196,255,.28)}
|
|
177
177
|
.btn-ghost{border:1px solid var(--line);color:var(--cool)}
|
|
178
178
|
.btn-ghost:hover{border-color:var(--blue-dim);color:var(--blue2)}
|
|
179
179
|
.meta-row{
|
|
180
|
-
|
|
181
|
-
|
|
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
182
|
}
|
|
183
183
|
.meta-row span{display:inline-flex;align-items:center;gap:8px}
|
|
184
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
185
|
.scroll-cue{
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
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
189
|
}
|
|
190
190
|
.scroll-cue .line{width:1px;height:42px;background:linear-gradient(var(--blue),transparent)}
|
|
191
191
|
|
|
192
192
|
.section{
|
|
193
|
-
|
|
194
|
-
|
|
193
|
+
position:relative;z-index:2;max-width:var(--max);margin:0 auto;
|
|
194
|
+
padding:clamp(72px,12vh,130px) var(--pad) 0;
|
|
195
195
|
}
|
|
196
196
|
.section-label{
|
|
197
|
-
|
|
197
|
+
font-family:var(--mono);font-size:10px;letter-spacing:.34em;text-transform:uppercase;color:var(--blue);margin-bottom:14px;
|
|
198
198
|
}
|
|
199
199
|
.section-title{
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
200
|
+
font-family:var(--display);font-weight:400;
|
|
201
|
+
font-size:clamp(34px,5vw,54px);line-height:1.06;letter-spacing:-.01em;
|
|
202
|
+
max-width:16ch;margin-bottom:12px;
|
|
203
203
|
}
|
|
204
204
|
.section-title em{font-style:italic;color:var(--blue2)}
|
|
205
205
|
.section-lede{max-width:50ch;color:var(--cool);font-size:15px;line-height:1.65;margin-bottom:clamp(28px,4vw,44px)}
|
|
206
206
|
|
|
207
207
|
/* orchestration graph */
|
|
208
208
|
.graph-shell{
|
|
209
|
-
|
|
210
|
-
|
|
209
|
+
border:1px solid var(--line);border-radius:20px;overflow:hidden;
|
|
210
|
+
background:linear-gradient(180deg, rgba(124,196,255,.04), transparent 42%), var(--panel);
|
|
211
211
|
}
|
|
212
212
|
.graph-top{
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
213
|
+
display:flex;flex-wrap:wrap;justify-content:space-between;gap:10px;
|
|
214
|
+
padding:14px 18px;border-bottom:1px solid var(--line);
|
|
215
|
+
font-family:var(--mono);font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:var(--mute);
|
|
216
216
|
}
|
|
217
217
|
.graph-top b{color:var(--blue);font-weight:500}
|
|
218
218
|
.graph-canvas{padding:clamp(28px,4vw,40px) clamp(14px,2.5vw,24px) clamp(22px,3vw,30px);overflow:auto}
|
|
219
|
-
.orch{width:min(
|
|
219
|
+
.orch{width:min(1100px,100%);margin:0 auto;min-width:720px}
|
|
220
220
|
.row{display:flex;justify-content:center;gap:14px;align-items:stretch}
|
|
221
221
|
.row.profiles{
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
222
|
+
display:grid;
|
|
223
|
+
grid-template-columns:repeat(2,minmax(0,1fr));
|
|
224
|
+
gap:10px;width:100%;
|
|
225
|
+
}
|
|
226
|
+
@media (min-width:900px){
|
|
227
|
+
.row.profiles{grid-template-columns:repeat(3,minmax(0,1fr))}
|
|
228
|
+
}
|
|
229
|
+
@media (min-width:1180px){
|
|
230
|
+
.row.profiles{grid-template-columns:repeat(4,minmax(0,1fr))}
|
|
225
231
|
}
|
|
226
232
|
.route-strip{
|
|
227
|
-
|
|
228
|
-
|
|
233
|
+
display:grid;grid-template-columns:repeat(2,minmax(0,1fr));
|
|
234
|
+
gap:1px;background:var(--line);border-top:1px solid var(--line);
|
|
229
235
|
}
|
|
230
236
|
@media (min-width:1100px){
|
|
231
|
-
|
|
237
|
+
.route-strip{grid-template-columns:repeat(3,minmax(0,1fr))}
|
|
232
238
|
}
|
|
233
239
|
.node{
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
240
|
+
border:1px solid var(--line-2);border-radius:14px;background:rgba(11,16,24,.72);
|
|
241
|
+
padding:14px 12px;text-align:center;
|
|
242
|
+
transition:border-color .3s,transform .3s var(--ease),box-shadow .3s;
|
|
237
243
|
}
|
|
238
244
|
.node:hover{transform:translateY(-2px);box-shadow:0 12px 30px rgba(0,0,0,.28)}
|
|
239
245
|
.node.hub{
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
246
|
+
width:min(280px,100%);
|
|
247
|
+
border-color:rgba(124,196,255,.5);
|
|
248
|
+
background:linear-gradient(180deg, rgba(124,196,255,.12), rgba(11,16,24,.88));
|
|
249
|
+
box-shadow:0 0 0 1px rgba(124,196,255,.08), 0 16px 40px rgba(0,0,0,.3);
|
|
250
|
+
padding:18px 16px;
|
|
245
251
|
}
|
|
246
252
|
.node .tag{font-family:var(--mono);font-size:9px;letter-spacing:.2em;text-transform:uppercase;color:var(--mute);margin-bottom:8px}
|
|
247
253
|
.node.hub .tag{color:var(--blue)}
|
|
@@ -251,14 +257,14 @@ h1 em{
|
|
|
251
257
|
.node.route{min-height:132px;display:flex;flex-direction:column;justify-content:flex-start;text-align:left;padding:14px}
|
|
252
258
|
.node.route .name{font-size:18px;margin-bottom:8px}
|
|
253
259
|
.node.route .chains{
|
|
254
|
-
|
|
255
|
-
|
|
260
|
+
margin-top:auto;padding-top:10px;
|
|
261
|
+
font-family:var(--mono);font-size:10px;letter-spacing:.04em;line-height:1.55;
|
|
256
262
|
}
|
|
257
263
|
.node.add{
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
264
|
+
border-style:dashed;border-color:rgba(124,196,255,.28);
|
|
265
|
+
background:rgba(11,16,24,.35);
|
|
266
|
+
min-height:132px;display:flex;flex-direction:column;justify-content:center;align-items:flex-start;
|
|
267
|
+
text-align:left;padding:14px;
|
|
262
268
|
}
|
|
263
269
|
.node.add .name{font-size:18px;color:var(--blue2)}
|
|
264
270
|
.node.add .sub{color:var(--mute)}
|
|
@@ -309,14 +315,29 @@ h1 em{
|
|
|
309
315
|
.route-card.p-stable{box-shadow:inset 3px 0 0 var(--stable)}
|
|
310
316
|
.route-card.p-add{box-shadow:inset 3px 0 0 rgba(124,196,255,.45);opacity:.92}
|
|
311
317
|
|
|
318
|
+
.node.p-btc{border-color:rgba(247,147,26,.55);background:linear-gradient(180deg, rgba(247,147,26,.14), rgba(11,16,24,.88))}
|
|
319
|
+
.node.p-btc .tag,.node.p-btc .name{color:#fbbf24}
|
|
320
|
+
.node.p-btc .chains{color:rgba(251,191,36,.92)}
|
|
321
|
+
.node.p-btc:hover{border-color:#f7931a;box-shadow:0 12px 30px rgba(247,147,26,.14)}
|
|
322
|
+
.route-card.p-btc .where{color:#fbbf24}
|
|
323
|
+
.route-card.p-btc{box-shadow:inset 3px 0 0 #f7931a}
|
|
324
|
+
|
|
325
|
+
.node.p-evm{border-color:rgba(98,126,234,.5);background:linear-gradient(180deg, rgba(98,126,234,.14), rgba(11,16,24,.88))}
|
|
326
|
+
.node.p-evm .tag,.node.p-evm .name{color:#a5b4fc}
|
|
327
|
+
.node.p-evm .chains{color:rgba(165,180,252,.92)}
|
|
328
|
+
.node.p-evm:hover{border-color:#627eea;box-shadow:0 12px 30px rgba(98,126,234,.14)}
|
|
329
|
+
.route-card.p-evm .where{color:#a5b4fc}
|
|
330
|
+
.route-card.p-evm{box-shadow:inset 3px 0 0 #627eea}
|
|
331
|
+
|
|
332
|
+
|
|
312
333
|
.moat-grid{
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
334
|
+
display:grid;grid-template-columns:repeat(2,minmax(0,1fr));
|
|
335
|
+
gap:1px;background:var(--line);border:1px solid var(--line);border-radius:18px;overflow:hidden;
|
|
336
|
+
margin-top:22px;
|
|
316
337
|
}
|
|
317
338
|
.moat-card{
|
|
318
|
-
|
|
319
|
-
|
|
339
|
+
background:var(--bg);padding:clamp(20px,3vw,28px);min-height:140px;
|
|
340
|
+
display:flex;flex-direction:column;gap:10px;
|
|
320
341
|
}
|
|
321
342
|
.moat-card:hover{background:var(--panel-2)}
|
|
322
343
|
.moat-card .n{font-family:var(--mono);font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--blue)}
|
|
@@ -324,16 +345,16 @@ h1 em{
|
|
|
324
345
|
.moat-card p{color:var(--cool);font-size:14px;line-height:1.55;max-width:40ch}
|
|
325
346
|
@media (max-width:860px){.moat-grid{grid-template-columns:1fr}}
|
|
326
347
|
.posture-chip{
|
|
327
|
-
|
|
328
|
-
|
|
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);
|
|
329
350
|
}
|
|
330
351
|
.evolve-rail{
|
|
331
|
-
|
|
332
|
-
|
|
352
|
+
display:flex;flex-wrap:wrap;gap:8px;justify-content:center;
|
|
353
|
+
padding:14px 16px 4px;
|
|
333
354
|
}
|
|
334
355
|
.evolve-pill{
|
|
335
|
-
|
|
336
|
-
|
|
356
|
+
font-family:var(--mono);font-size:10px;letter-spacing:.14em;text-transform:uppercase;
|
|
357
|
+
border:1px solid var(--line);border-radius:999px;padding:8px 12px;color:var(--cool);
|
|
337
358
|
}
|
|
338
359
|
.evolve-pill.on{border-color:rgba(124,196,255,.35);color:var(--blue2)}
|
|
339
360
|
|
|
@@ -356,8 +377,8 @@ h1 em{
|
|
|
356
377
|
|
|
357
378
|
/* route detail cards */
|
|
358
379
|
.route-card{
|
|
359
|
-
|
|
360
|
-
|
|
380
|
+
background:var(--bg);padding:22px 20px;min-height:150px;
|
|
381
|
+
display:flex;flex-direction:column;gap:10px;transition:background .35s;
|
|
361
382
|
}
|
|
362
383
|
.route-card:hover{background:var(--panel-2)}
|
|
363
384
|
.route-card h3{font-family:var(--display);font-weight:400;font-size:26px}
|
|
@@ -365,91 +386,91 @@ h1 em{
|
|
|
365
386
|
.route-card p{color:var(--cool);font-size:13.5px;line-height:1.55}
|
|
366
387
|
.route-card .chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:auto}
|
|
367
388
|
.chip-s{
|
|
368
|
-
|
|
369
|
-
|
|
389
|
+
font-family:var(--mono);font-size:9px;letter-spacing:.1em;text-transform:uppercase;
|
|
390
|
+
border:1px solid var(--line);border-radius:999px;padding:5px 8px;color:var(--cool);
|
|
370
391
|
}
|
|
371
392
|
.route-card .why{
|
|
372
|
-
|
|
373
|
-
|
|
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);
|
|
374
395
|
}
|
|
375
396
|
.why-band{
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
397
|
+
border-top:1px solid var(--line);
|
|
398
|
+
padding:22px 24px 24px;
|
|
399
|
+
background:rgba(11,16,24,.55);
|
|
379
400
|
}
|
|
380
401
|
.why-band p{
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
402
|
+
max-width:62ch;margin:0 auto;text-align:center;
|
|
403
|
+
font-family:var(--display);font-style:italic;font-weight:400;
|
|
404
|
+
font-size:clamp(18px,2.2vw,24px);line-height:1.4;color:var(--blue2);
|
|
384
405
|
}
|
|
385
406
|
.why-band span{
|
|
386
|
-
|
|
387
|
-
|
|
407
|
+
display:block;margin-top:10px;
|
|
408
|
+
font-family:var(--mono);font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:var(--mute);font-style:normal;
|
|
388
409
|
}
|
|
389
410
|
|
|
390
411
|
/* chains */
|
|
391
412
|
.chain-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}
|
|
392
413
|
.chain{
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
414
|
+
border:1px solid var(--line);border-radius:14px;padding:16px;
|
|
415
|
+
background:linear-gradient(180deg, rgba(124,196,255,.035), transparent 55%), var(--panel);
|
|
416
|
+
min-height:100px;display:flex;flex-direction:column;justify-content:space-between;gap:12px;
|
|
417
|
+
transition:border-color .3s,transform .3s var(--ease);
|
|
397
418
|
}
|
|
398
419
|
.chain:hover{border-color:rgba(124,196,255,.35);transform:translateY(-2px)}
|
|
399
420
|
.chain-top{display:flex;justify-content:space-between;gap:8px}
|
|
400
421
|
.chain .nm{font-family:var(--display);font-size:20px}
|
|
401
422
|
.chain .id{font-family:var(--mono);font-size:11px;color:var(--blue)}
|
|
402
423
|
.chain .meta{
|
|
403
|
-
|
|
404
|
-
|
|
424
|
+
display:flex;justify-content:space-between;gap:8px;
|
|
425
|
+
font-family:var(--mono);font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:var(--mute);
|
|
405
426
|
}
|
|
406
427
|
.badge{border:1px solid var(--line);border-radius:999px;padding:4px 8px;color:var(--cool)}
|
|
407
428
|
.badge.live{border-color:rgba(124,196,255,.35);color:var(--blue)}
|
|
408
429
|
|
|
409
430
|
.venues{margin-top:14px;border:1px solid var(--line);border-radius:14px;overflow:hidden;background:rgba(17,25,37,.85)}
|
|
410
431
|
.venues-head{
|
|
411
|
-
|
|
412
|
-
|
|
432
|
+
padding:11px 14px;border-bottom:1px solid var(--line);
|
|
433
|
+
font-family:var(--mono);font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--mute);
|
|
413
434
|
}
|
|
414
435
|
.marquee{overflow:hidden;white-space:nowrap;mask-image:linear-gradient(90deg,transparent,#000 6%,#000 94%,transparent)}
|
|
415
436
|
.track{display:inline-flex;gap:24px;padding:13px 0;animation:scroll 42s linear infinite;will-change:transform}
|
|
416
437
|
.chip{
|
|
417
|
-
|
|
418
|
-
|
|
438
|
+
display:inline-flex;align-items:center;gap:8px;
|
|
439
|
+
font-family:var(--mono);font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--cool);
|
|
419
440
|
}
|
|
420
441
|
.chip::before{content:"";width:5px;height:5px;border-radius:50%;background:var(--blue);opacity:.75}
|
|
421
442
|
@keyframes scroll{from{transform:translateX(0)}to{transform:translateX(-50%)}}
|
|
422
443
|
|
|
423
444
|
.wallet-grid{
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
445
|
+
display:grid;grid-template-columns:repeat(3,minmax(0,1fr));
|
|
446
|
+
gap:1px;background:var(--line);border:1px solid var(--line);border-radius:18px;overflow:hidden;
|
|
447
|
+
margin-top:8px;
|
|
427
448
|
}
|
|
428
449
|
.wallet-card{
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
450
|
+
background:var(--bg);padding:clamp(22px,3vw,30px);
|
|
451
|
+
display:flex;flex-direction:column;gap:12px;min-height:170px;
|
|
452
|
+
transition:background .35s;
|
|
432
453
|
}
|
|
433
454
|
.wallet-card:hover{background:var(--panel-2)}
|
|
434
455
|
.wallet-card .n{
|
|
435
|
-
|
|
456
|
+
font-family:var(--mono);font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--blue);
|
|
436
457
|
}
|
|
437
458
|
.wallet-card h3{
|
|
438
|
-
|
|
459
|
+
font-family:var(--display);font-weight:400;font-size:clamp(22px,2.4vw,28px);letter-spacing:-.01em;
|
|
439
460
|
}
|
|
440
461
|
.wallet-card p{color:var(--cool);font-size:14px;line-height:1.55;max-width:32ch}
|
|
441
462
|
@media (max-width:860px){
|
|
442
|
-
|
|
463
|
+
.wallet-grid{grid-template-columns:1fr}
|
|
443
464
|
}
|
|
444
465
|
|
|
445
466
|
footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);padding:32px var(--pad) 40px}
|
|
446
467
|
.foot-row{
|
|
447
|
-
|
|
448
|
-
|
|
468
|
+
max-width:var(--max);margin:0 auto 14px;
|
|
469
|
+
display:flex;flex-wrap:wrap;gap:14px 24px;justify-content:space-between;align-items:center;
|
|
449
470
|
}
|
|
450
471
|
.powered{
|
|
451
|
-
|
|
452
|
-
|
|
472
|
+
display:inline-flex;align-items:center;gap:10px;
|
|
473
|
+
font-family:var(--mono);font-size:11px;letter-spacing:.2em;text-transform:uppercase;color:var(--mute);
|
|
453
474
|
}
|
|
454
475
|
.powered .mark{width:7px;height:7px;border-radius:50%;background:var(--blue);box-shadow:0 0 12px rgba(124,196,255,.7)}
|
|
455
476
|
.powered a{color:var(--blue);font-weight:600;border-bottom:1px solid transparent;transition:border-color .25s,color .25s}
|
|
@@ -457,33 +478,33 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
|
|
|
457
478
|
.foot-links{display:flex;gap:18px;font-family:var(--mono);font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:var(--mute)}
|
|
458
479
|
.foot-links a:hover{color:var(--blue)}
|
|
459
480
|
.foot-meta{
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
481
|
+
max-width:var(--max);margin:0 auto;
|
|
482
|
+
display:flex;flex-wrap:wrap;gap:12px 22px;justify-content:space-between;
|
|
483
|
+
font-family:var(--mono);font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:var(--mute);
|
|
463
484
|
}
|
|
464
485
|
|
|
465
486
|
.js .rv{opacity:0;transform:translateY(16px)}
|
|
466
487
|
.js .rv.in{opacity:1;transform:none;transition:opacity 1s var(--ease),transform 1s var(--ease)}
|
|
467
488
|
|
|
468
489
|
@media (max-width:960px){
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
490
|
+
.nav{grid-template-columns:1fr auto}
|
|
491
|
+
.nav-mid{display:none}
|
|
492
|
+
.nav-links .hide-sm{display:none}
|
|
493
|
+
.route-strip{grid-template-columns:1fr}
|
|
494
|
+
.chain-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
|
|
495
|
+
.orch{min-width:680px}
|
|
496
|
+
.row.profiles{grid-template-columns:repeat(2,minmax(0,1fr))}
|
|
476
497
|
}
|
|
477
498
|
@media (max-width:560px){
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
499
|
+
.chain-grid{grid-template-columns:1fr}
|
|
500
|
+
.row.profiles{grid-template-columns:1fr}
|
|
501
|
+
h1{font-size:clamp(68px,18vw,96px)}
|
|
481
502
|
}
|
|
482
503
|
@media (prefers-reduced-motion:reduce){
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
504
|
+
html{scroll-behavior:auto}
|
|
505
|
+
.js .rv{opacity:1;transform:none}
|
|
506
|
+
.loader-mark i,.track{animation:none}
|
|
507
|
+
.node:hover,.chain:hover{transform:none}
|
|
487
508
|
}
|
|
488
509
|
</style>
|
|
489
510
|
</head>
|
|
@@ -491,440 +512,469 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
|
|
|
491
512
|
<div class="grain" aria-hidden="true"></div>
|
|
492
513
|
|
|
493
514
|
<div class="loader" id="loader" aria-hidden="true">
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
515
|
+
<div class="loader-inner">
|
|
516
|
+
<div class="loader-mark" aria-hidden="true"><i></i><b></b></div>
|
|
517
|
+
<div class="loader-word">oracle</div>
|
|
518
|
+
<div class="loader-bar"><span id="loader-fill"></span></div>
|
|
519
|
+
</div>
|
|
499
520
|
</div>
|
|
500
521
|
|
|
501
522
|
<header class="nav">
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
523
|
+
<a class="brand" href="#top"><span class="orb" aria-hidden="true"></span>oracle</a>
|
|
524
|
+
<div class="nav-mid" aria-label="Status">
|
|
525
|
+
<span>for <b>users</b></span>
|
|
526
|
+
<span>full crypto pack // protocol builder</span>
|
|
527
|
+
<span class="posture-chip">disarmed by default</span>
|
|
528
|
+
<span>powered by <a class="hermes" href="https://hermes-agent.nousresearch.com" target="_blank" rel="noopener noreferrer">Hermes</a></span>
|
|
529
|
+
</div>
|
|
530
|
+
<nav class="nav-links" aria-label="Primary">
|
|
531
|
+
<a class="hide-sm" href="#orchestration">How it works</a>
|
|
532
|
+
<a class="hide-sm" href="#wallets">Wallets</a>
|
|
533
|
+
<a class="hide-sm" href="#chains">Chains</a>
|
|
534
|
+
<a class="nav-cta" href="/oracle-console/">Open console</a>
|
|
535
|
+
</nav>
|
|
515
536
|
</header>
|
|
516
537
|
|
|
517
538
|
<main id="top">
|
|
518
|
-
|
|
519
|
-
|
|
539
|
+
<canvas id="gl" aria-hidden="true"></canvas>
|
|
540
|
+
<div class="veil" aria-hidden="true"></div>
|
|
520
541
|
|
|
521
542
|
<section class="section" id="orchestration">
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
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
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
543
|
+
<p class="section-label rv">How it works</p>
|
|
544
|
+
<h2 class="section-title rv">Multi-profile. <em>Customizable.</em></h2>
|
|
545
|
+
<p class="section-lede rv">Not one bot. A mesh: Input / Command hits the oracle control plane, then fans out across venue profiles, multi-chain EVM, Bitcoin, and a protocol builder - with prepare-only custody.</p>
|
|
546
|
+
|
|
547
|
+
<div class="graph-shell rv">
|
|
548
|
+
<div class="graph-top">
|
|
549
|
+
<span>for <b>users</b></span>
|
|
550
|
+
<span>multi-profile // protocol builder // multi-chain</span>
|
|
551
|
+
<span>powered by Hermes</span>
|
|
552
|
+
</div>
|
|
553
|
+
|
|
554
|
+
<div class="evolve-rail">
|
|
555
|
+
<span class="evolve-pill on">full crypto pack</span>
|
|
556
|
+
<span class="evolve-pill on">customizable</span>
|
|
557
|
+
<span class="evolve-pill on">protocol builder</span>
|
|
558
|
+
<span class="evolve-pill on">more chains</span>
|
|
559
|
+
<span class="evolve-pill on"><a href="https://hermes-agent.nousresearch.com" target="_blank" rel="noopener noreferrer" style="color:inherit">powered by Hermes</a></span>
|
|
560
|
+
</div>
|
|
561
|
+
|
|
562
|
+
<div class="graph-canvas">
|
|
563
|
+
<div class="orch" aria-label="Oracle multi-profile graph">
|
|
564
|
+
<div class="row">
|
|
565
|
+
<div class="node" style="width:220px">
|
|
566
|
+
<div class="tag">you</div>
|
|
567
|
+
<div class="name">Input / Command</div>
|
|
568
|
+
<div class="sub">what you type or ask</div>
|
|
569
|
+
</div>
|
|
570
|
+
</div>
|
|
571
|
+
|
|
572
|
+
<div class="wires" aria-hidden="true">
|
|
573
|
+
<svg viewBox="0 0 100 36" preserveAspectRatio="none">
|
|
574
|
+
<path d="M50 2 V34"/><circle cx="50" cy="2" r="1.4"/><circle cx="50" cy="34" r="1.4"/>
|
|
575
|
+
</svg>
|
|
576
|
+
</div>
|
|
577
|
+
|
|
578
|
+
<div class="row">
|
|
579
|
+
<div class="node hub">
|
|
580
|
+
<div class="tag">control plane</div>
|
|
581
|
+
<div class="name">oracle</div>
|
|
582
|
+
<div class="sub">route · bound · evolve</div>
|
|
583
|
+
</div>
|
|
584
|
+
</div>
|
|
585
|
+
|
|
586
|
+
<div class="wires multi" aria-hidden="true">
|
|
587
|
+
<svg viewBox="0 0 100 44" preserveAspectRatio="none">
|
|
588
|
+
<path d="M50 2 V12"/>
|
|
589
|
+
<path class="w-poly" d="M12.5 42 V20 H50 V12"/>
|
|
590
|
+
<path class="w-hl" d="M37.5 42 V20 H50 V12"/>
|
|
591
|
+
<path class="w-rh" d="M62.5 42 V20 H50 V12"/>
|
|
592
|
+
<path class="w-sol" d="M87.5 42 V20 H50 V12"/>
|
|
593
|
+
<circle cx="50" cy="2" r="1.3"/>
|
|
594
|
+
<circle class="c-poly" cx="12.5" cy="42" r="1.3"/>
|
|
595
|
+
<circle class="c-hl" cx="37.5" cy="42" r="1.3"/>
|
|
596
|
+
<circle class="c-rh" cx="62.5" cy="42" r="1.3"/>
|
|
597
|
+
<circle class="c-sol" cx="87.5" cy="42" r="1.3"/>
|
|
598
|
+
</svg>
|
|
599
|
+
</div>
|
|
600
|
+
|
|
601
|
+
<div class="row profiles" id="profile-grid">
|
|
602
|
+
<div class="node route p-poly">
|
|
603
|
+
<div class="tag">profile</div>
|
|
604
|
+
<div class="name">polymarket agent</div>
|
|
605
|
+
<div class="sub">events · arb · markets</div>
|
|
606
|
+
<div class="chains">Polymarket</div>
|
|
607
|
+
</div>
|
|
608
|
+
<div class="node route p-hl">
|
|
609
|
+
<div class="tag">profile</div>
|
|
610
|
+
<div class="name">hyperliquid agent</div>
|
|
611
|
+
<div class="sub">perps · hip-3/4 · ta</div>
|
|
612
|
+
<div class="chains">Hyperliquid · HyperEVM 999</div>
|
|
613
|
+
</div>
|
|
614
|
+
<div class="node route p-rh">
|
|
615
|
+
<div class="tag">profile</div>
|
|
616
|
+
<div class="name">robinhood agent</div>
|
|
617
|
+
<div class="sub">markets · nfts · names</div>
|
|
618
|
+
<div class="chains">Robinhood Chain 4663</div>
|
|
619
|
+
</div>
|
|
620
|
+
<div class="node route p-sol">
|
|
621
|
+
<div class="tag">profile</div>
|
|
622
|
+
<div class="name">solana agent</div>
|
|
623
|
+
<div class="sub">jup · nfts · dexs</div>
|
|
624
|
+
<div class="chains">Solana mainnet</div>
|
|
625
|
+
</div>
|
|
626
|
+
<div class="node route p-btc">
|
|
627
|
+
<div class="tag">profile</div>
|
|
628
|
+
<div class="name">bitcoin agent</div>
|
|
629
|
+
<div class="sub">ord · runes · research</div>
|
|
630
|
+
<div class="chains">Bitcoin · inscriptions</div>
|
|
631
|
+
</div>
|
|
632
|
+
<div class="node route p-evm">
|
|
633
|
+
<div class="tag">profile</div>
|
|
634
|
+
<div class="name">evm / bridge agent</div>
|
|
635
|
+
<div class="sub">swaps · bridges · defi</div>
|
|
636
|
+
<div class="chains">ETH · Base · Arb · OP · BNB · Polygon · Avax</div>
|
|
637
|
+
</div>
|
|
638
|
+
<div class="node route p-stable">
|
|
639
|
+
<div class="tag">profile</div>
|
|
640
|
+
<div class="name">stable agent</div>
|
|
641
|
+
<div class="sub">launches · venue ops</div>
|
|
642
|
+
<div class="chains">Stable 988</div>
|
|
643
|
+
</div>
|
|
644
|
+
<div class="node route p-build">
|
|
645
|
+
<div class="tag">builder</div>
|
|
646
|
+
<div class="name">protocol builder</div>
|
|
647
|
+
<div class="sub">scaffold · security · deploy prep</div>
|
|
648
|
+
<div class="chains">any EVM · user-signed deploys</div>
|
|
649
|
+
</div>
|
|
650
|
+
<div class="node add">
|
|
651
|
+
<div class="tag">open slot</div>
|
|
652
|
+
<div class="name">+ add agent</div>
|
|
653
|
+
<div class="sub">new chain · new venue · your rules</div>
|
|
654
|
+
<div class="chains" style="margin-top:12px;font-family:var(--mono);font-size:10px;color:var(--blue2)">full crypto pack · powered by Hermes</div>
|
|
655
|
+
</div>
|
|
656
|
+
</div> </div>
|
|
657
|
+
</div>
|
|
658
|
+
</div>
|
|
659
|
+
|
|
660
|
+
<div class="route-strip">
|
|
661
|
+
<article class="route-card p-poly">
|
|
662
|
+
<div class="where">polymarket agent →</div>
|
|
663
|
+
<h3>Polymarket</h3>
|
|
664
|
+
<p>Event markets, sports, arb paths, and prediction flow under bounds you set.</p>
|
|
665
|
+
<div class="chips">
|
|
666
|
+
<span class="chip-s">events</span>
|
|
667
|
+
<span class="chip-s">arb</span>
|
|
668
|
+
<span class="chip-s">Polymarket</span>
|
|
669
|
+
</div>
|
|
670
|
+
</article>
|
|
671
|
+
<article class="route-card p-hl">
|
|
672
|
+
<div class="where">hyperliquid agent →</div>
|
|
673
|
+
<h3>Hyperliquid</h3>
|
|
674
|
+
<p>Native perps, HIP-3/4, TA, event risk, and HyperEVM when you need HL’s EVM surface.</p>
|
|
675
|
+
<div class="chips">
|
|
676
|
+
<span class="chip-s">perps</span>
|
|
677
|
+
<span class="chip-s">HIP-3/4</span>
|
|
678
|
+
<span class="chip-s">HyperEVM</span>
|
|
679
|
+
</div>
|
|
680
|
+
</article>
|
|
681
|
+
<article class="route-card p-rh">
|
|
682
|
+
<div class="where">robinhood agent →</div>
|
|
683
|
+
<h3>Robinhood</h3>
|
|
684
|
+
<p>RH Chain markets, NFTs, names, and chain-local execution on 4663.</p>
|
|
685
|
+
<div class="chips">
|
|
686
|
+
<span class="chip-s">markets</span>
|
|
687
|
+
<span class="chip-s">NFTs</span>
|
|
688
|
+
<span class="chip-s">4663</span>
|
|
689
|
+
</div>
|
|
690
|
+
</article>
|
|
691
|
+
<article class="route-card p-sol">
|
|
692
|
+
<div class="where">solana agent →</div>
|
|
693
|
+
<h3>Solana</h3>
|
|
694
|
+
<p>Swaps, research, Jupiter routes, and wallet-signed execution as the lane activates.</p>
|
|
695
|
+
<div class="chips">
|
|
696
|
+
<span class="chip-s">Jupiter</span>
|
|
697
|
+
<span class="chip-s">swaps</span>
|
|
698
|
+
<span class="chip-s">research</span>
|
|
699
|
+
</div>
|
|
700
|
+
</article>
|
|
701
|
+
<article class="route-card p-btc">
|
|
702
|
+
<div class="where">bitcoin agent →</div>
|
|
703
|
+
<h3>Bitcoin</h3>
|
|
704
|
+
<p>Ordinals, runes, and BTC research. Prepare inscriptions; you control signing.</p>
|
|
705
|
+
<div class="chips">
|
|
706
|
+
<span class="chip-s">ordinals</span>
|
|
707
|
+
<span class="chip-s">runes</span>
|
|
708
|
+
<span class="chip-s">BTC</span>
|
|
709
|
+
</div>
|
|
710
|
+
</article>
|
|
711
|
+
<article class="route-card p-evm">
|
|
712
|
+
<div class="where">evm / bridge agent →</div>
|
|
713
|
+
<h3>Multi-chain EVM</h3>
|
|
714
|
+
<p>DEX routes, LiFi/Relay bridges, and DeFi across ETH and L2s - always prepare-only until you sign.</p>
|
|
715
|
+
<div class="chips">
|
|
716
|
+
<span class="chip-s">ETH</span>
|
|
717
|
+
<span class="chip-s">Base · Arb</span>
|
|
718
|
+
<span class="chip-s">bridges</span>
|
|
719
|
+
</div>
|
|
720
|
+
</article>
|
|
721
|
+
<article class="route-card p-stable">
|
|
722
|
+
<div class="where">stable agent →</div>
|
|
723
|
+
<h3>Stable</h3>
|
|
724
|
+
<p>Stable mainnet launches and venue ops on chain 988.</p>
|
|
725
|
+
<div class="chips">
|
|
726
|
+
<span class="chip-s">launches</span>
|
|
727
|
+
<span class="chip-s">Stable 988</span>
|
|
728
|
+
</div>
|
|
729
|
+
</article>
|
|
730
|
+
<article class="route-card p-build">
|
|
731
|
+
<div class="where">protocol builder →</div>
|
|
732
|
+
<h3>Build protocols</h3>
|
|
733
|
+
<p>Scaffold contracts, run security gates (Foundry + static checks), prepare unsigned deploys. You still sign every deploy.</p>
|
|
734
|
+
<div class="chips">
|
|
735
|
+
<span class="chip-s">scaffold</span>
|
|
736
|
+
<span class="chip-s">security gate</span>
|
|
737
|
+
<span class="chip-s">unsigned deploy</span>
|
|
738
|
+
</div>
|
|
739
|
+
</article>
|
|
740
|
+
<article class="route-card p-add">
|
|
741
|
+
<div class="where">+ add agent →</div>
|
|
742
|
+
<h3>Next chain</h3>
|
|
743
|
+
<p>Drop in another profile for a new chain or venue. Same custody model - your wallet, your limits, your revoke.</p>
|
|
744
|
+
<div class="chips">
|
|
745
|
+
<span class="chip-s">custom profile</span>
|
|
746
|
+
<span class="chip-s">more chains</span>
|
|
747
|
+
<span class="chip-s">powered by Hermes</span>
|
|
748
|
+
</div>
|
|
749
|
+
</article>
|
|
750
|
+
</div>
|
|
751
|
+
|
|
752
|
+
<div class="why-band">
|
|
753
|
+
<p>The model proposes. Policy bounds. You own signatures. Multi-profile desks - not one omniscient chatbot. Input / Command, vaults, perps, bridges, and protocol scaffolds - not just swaps. Disarmed by default.</p>
|
|
754
|
+
<span>powered by Hermes · claims without receipts don't count</span>
|
|
755
|
+
</div>
|
|
756
|
+
</div>
|
|
757
|
+
|
|
758
|
+
<div class="moat-grid rv" style="margin-top:28px">
|
|
759
|
+
<article class="moat-card">
|
|
760
|
+
<div class="n">bound grants</div>
|
|
761
|
+
<h3>Wallet with temporary agent permission</h3>
|
|
762
|
+
<p>Max value, chain, venue, destinations, and TTL. Outside the grant = hard refuse - not an agent with a free wallet.</p>
|
|
763
|
+
</article>
|
|
764
|
+
<article class="moat-card">
|
|
765
|
+
<div class="n">receipts</div>
|
|
766
|
+
<h3>Claims without receipts don't count</h3>
|
|
767
|
+
<p>Money claims end in tx hash, receipt status, balance delta, and allowance state. No “looks filled.”</p>
|
|
768
|
+
</article>
|
|
769
|
+
<article class="moat-card">
|
|
770
|
+
<div class="n">custody</div>
|
|
771
|
+
<h3>Self-custodial by default</h3>
|
|
772
|
+
<p>You sign with your wallet. Agentic dust is optional, capped, and never your main capital as the always-on signer.</p>
|
|
773
|
+
</article>
|
|
774
|
+
<article class="moat-card">
|
|
775
|
+
<div class="n">intent desk + build</div>
|
|
776
|
+
<h3>Trade and build protocols</h3>
|
|
777
|
+
<p>Orders, vaults, perps, bridges - and protocol scaffold/deploy prep. Full crypto skills included. You sign.</p>
|
|
778
|
+
</article>
|
|
779
|
+
<article class="moat-card">
|
|
780
|
+
<div class="n">simulation</div>
|
|
781
|
+
<h3>Show the work before you sign</h3>
|
|
782
|
+
<p>minOut, impact, spender, and decoded calldata before approval. Export unsigned artifacts for hardware wallets.</p>
|
|
783
|
+
</article>
|
|
784
|
+
<article class="moat-card">
|
|
785
|
+
<div class="n">allowlists</div>
|
|
786
|
+
<h3>Where money may land</h3>
|
|
787
|
+
<p>Destination allowlists stop silent router drift. New contracts stay blocked until you add them.</p>
|
|
788
|
+
</article>
|
|
789
|
+
</div>
|
|
790
|
+
</section>
|
|
741
791
|
|
|
742
792
|
<section class="section" id="wallets">
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
793
|
+
<p class="section-label rv">Wallets</p>
|
|
794
|
+
<h2 class="section-title rv">Your wallets. <em>Your limits.</em></h2>
|
|
795
|
+
<p class="section-lede rv">Use one wallet everywhere, or separate wallets per chain. Permissions are per wallet - change them, tighten them, or revoke them anytime.</p>
|
|
796
|
+
|
|
797
|
+
<div class="wallet-grid rv">
|
|
798
|
+
<article class="wallet-card">
|
|
799
|
+
<div class="n">setup</div>
|
|
800
|
+
<h3>Single or multi</h3>
|
|
801
|
+
<p>One wallet across chains, or a dedicated wallet per chain. Same desk either way.</p>
|
|
802
|
+
</article>
|
|
803
|
+
<article class="wallet-card">
|
|
804
|
+
<div class="n">control</div>
|
|
805
|
+
<h3>Limit per wallet</h3>
|
|
806
|
+
<p>Caps, allowed actions, and scopes sit on each wallet - not a global free pass.</p>
|
|
807
|
+
</article>
|
|
808
|
+
<article class="wallet-card">
|
|
809
|
+
<div class="n">lifecycle</div>
|
|
810
|
+
<h3>Change · revoke</h3>
|
|
811
|
+
<p>Edit permissions when risk changes. Revoke a wallet’s access without killing the whole account.</p>
|
|
812
|
+
</article>
|
|
813
|
+
</div>
|
|
814
|
+
</section>
|
|
765
815
|
|
|
766
816
|
<section class="section" id="chains">
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
817
|
+
<p class="section-label rv">Chains</p>
|
|
818
|
+
<h2 class="section-title rv">Where you can <em>operate.</em></h2>
|
|
819
|
+
<p class="section-lede rv">Live coverage grows with the profile mesh. Each chain maps to an agent - and new agents can join.</p>
|
|
820
|
+
<div class="chain-grid" id="chain-grid"></div>
|
|
821
|
+
<div class="venues rv">
|
|
822
|
+
<div class="venues-head">protocols // venues</div>
|
|
823
|
+
<div class="marquee" aria-hidden="true"><div class="track" id="proto-track"></div></div>
|
|
824
|
+
</div>
|
|
825
|
+
</section>
|
|
826
|
+
|
|
827
|
+
<section class="section" id="custody" style="padding-top:clamp(48px,8vh,80px)">
|
|
828
|
+
<div class="strip-inner rv" style="border:1px solid var(--line);border-radius:16px;padding:22px 24px;display:flex;flex-wrap:wrap;gap:18px 28px;align-items:center;justify-content:space-between;background:linear-gradient(180deg, rgba(124,196,255,.05), transparent)">
|
|
829
|
+
<div class="strip-left">
|
|
830
|
+
<strong style="font-family:var(--display);font-weight:400;font-size:26px;display:block;margin-bottom:6px">You keep custody.</strong>
|
|
831
|
+
<span style="font-family:var(--mono);font-size:10px;letter-spacing:.18em;text-transform:uppercase;color:var(--mute)">oracle never holds your keys</span>
|
|
832
|
+
</div>
|
|
833
|
+
<div class="strip-right" style="display:flex;flex-wrap:wrap;gap:10px">
|
|
834
|
+
<span class="pill on" style="font-family:var(--mono);font-size:10px;letter-spacing:.16em;text-transform:uppercase;border:1px solid rgba(124,196,255,.35);border-radius:999px;padding:9px 12px;color:var(--blue)">Multi-wallet</span>
|
|
835
|
+
<span class="pill on" style="font-family:var(--mono);font-size:10px;letter-spacing:.16em;text-transform:uppercase;border:1px solid rgba(124,196,255,.35);border-radius:999px;padding:9px 12px;color:var(--blue)">Per-wallet limits</span>
|
|
836
|
+
<span class="pill" style="font-family:var(--mono);font-size:10px;letter-spacing:.16em;text-transform:uppercase;border:1px solid var(--line);border-radius:999px;padding:9px 12px;color:var(--cool)">Revoke anytime</span>
|
|
837
|
+
</div>
|
|
838
|
+
</div>
|
|
839
|
+
</section>
|
|
790
840
|
</main>
|
|
791
841
|
|
|
792
842
|
<footer>
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
843
|
+
<div class="foot-row">
|
|
844
|
+
<div class="powered">
|
|
845
|
+
<span class="mark" aria-hidden="true"></span>
|
|
846
|
+
powered by
|
|
847
|
+
<a href="https://hermes-agent.nousresearch.com" target="_blank" rel="noopener noreferrer">Hermes</a>
|
|
848
|
+
</div>
|
|
849
|
+
<div class="foot-links">
|
|
850
|
+
<a href="/oracle-console/">Console</a>
|
|
851
|
+
<a href="https://hermes-agent.nousresearch.com/docs" target="_blank" rel="noopener noreferrer">Docs</a>
|
|
852
|
+
</div>
|
|
853
|
+
</div>
|
|
854
|
+
<div class="foot-meta">
|
|
855
|
+
<span>oracle · for users</span>
|
|
856
|
+
<span>full crypto pack · protocol builder · powered by Hermes</span>
|
|
857
|
+
<span>you sign // no house custody</span>
|
|
858
|
+
</div>
|
|
809
859
|
</footer>
|
|
810
860
|
|
|
811
861
|
<script>
|
|
812
862
|
(function () {
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
863
|
+
"use strict";
|
|
864
|
+
document.documentElement.classList.add("js");
|
|
865
|
+
|
|
866
|
+
var CHAINS = [
|
|
867
|
+
{ name: "Ethereum", id: "1", note: "open / add agent", badge: "live" },
|
|
868
|
+
{ name: "Base", id: "8453", note: "open / add agent", badge: "live" },
|
|
869
|
+
{ name: "Arbitrum", id: "42161", note: "open / add agent", badge: "live" },
|
|
870
|
+
{ name: "Optimism", id: "10", note: "open / add agent", badge: "live" },
|
|
871
|
+
{ name: "Polygon", id: "137", note: "open / add agent", badge: "live" },
|
|
872
|
+
{ name: "BNB Chain", id: "56", note: "open / add agent", badge: "live" },
|
|
873
|
+
{ name: "Avalanche", id: "43114", note: "open / add agent", badge: "live" },
|
|
874
|
+
{ name: "HyperEVM", id: "999", note: "hyperliquid agent", badge: "live" },
|
|
875
|
+
{ name: "Abstract", id: "2741", note: "open / add agent", badge: "live" },
|
|
876
|
+
{ name: "Stable", id: "988", note: "stable agent", badge: "live" },
|
|
877
|
+
{ name: "Robinhood", id: "4663", note: "robinhood agent", badge: "live" },
|
|
878
|
+
{ name: "Solana", id: " - ", note: "solana agent", badge: "live" }
|
|
879
|
+
];
|
|
880
|
+
var PROTOS = [
|
|
881
|
+
"uniswap-v3","aerodrome","velodrome","pancakeswap","quickswap",
|
|
882
|
+
"lfj","hyperswap","curve","balancer","pendle","morpho","gmx-v2",
|
|
883
|
+
"lifi","relay","paraswap","odos","cow","jupiter","across","stargate"
|
|
884
|
+
];
|
|
885
|
+
|
|
886
|
+
document.getElementById("chain-grid").innerHTML = CHAINS.map(function (c) {
|
|
887
|
+
var cls = c.badge === "live" ? "badge live" : "badge";
|
|
888
|
+
var label = c.badge === "live" ? "live" : "read";
|
|
889
|
+
return '<article class="chain rv"><div class="chain-top"><div class="nm">' + c.name + '</div><div class="id">' + c.id + '</div></div><div class="meta"><span>' + c.note + '</span><span class="' + cls + '">' + label + '</span></div></article>';
|
|
890
|
+
}).join("");
|
|
891
|
+
|
|
892
|
+
var seq = PROTOS.concat(PROTOS);
|
|
893
|
+
document.getElementById("proto-track").innerHTML = seq.map(function (x) {
|
|
894
|
+
return '<span class="chip">' + x + '</span>';
|
|
895
|
+
}).join("");
|
|
896
|
+
|
|
897
|
+
var loader = document.getElementById("loader");
|
|
898
|
+
var fill = document.getElementById("loader-fill");
|
|
899
|
+
requestAnimationFrame(function () { fill.style.width = "100%"; });
|
|
900
|
+
window.addEventListener("load", function () {
|
|
901
|
+
setTimeout(function () { loader.classList.add("out"); }, 650);
|
|
902
|
+
});
|
|
903
|
+
|
|
904
|
+
var reduced = window.matchMedia("(prefers-reduced-motion: reduce)").matches;
|
|
905
|
+
var coarse = window.matchMedia("(pointer: coarse)").matches;
|
|
906
|
+
var nodes = Array.prototype.slice.call(document.querySelectorAll(".rv"));
|
|
907
|
+
if (reduced || !("IntersectionObserver" in window)) {
|
|
908
|
+
nodes.forEach(function (n) { n.classList.add("in"); });
|
|
909
|
+
} else {
|
|
910
|
+
var io = new IntersectionObserver(function (entries) {
|
|
911
|
+
entries.forEach(function (e) {
|
|
912
|
+
if (e.isIntersecting) { e.target.classList.add("in"); io.unobserve(e.target); }
|
|
913
|
+
});
|
|
914
|
+
}, { threshold: 0.1, rootMargin: "0px 0px -6% 0px" });
|
|
915
|
+
nodes.forEach(function (n) { io.observe(n); });
|
|
916
|
+
}
|
|
917
|
+
|
|
918
|
+
var canvas = document.getElementById("gl");
|
|
919
|
+
if (!canvas || reduced || coarse) return;
|
|
920
|
+
var gl = canvas.getContext("webgl", { antialias:false, alpha:false, depth:false, stencil:false, premultipliedAlpha:false });
|
|
921
|
+
if (!gl) return;
|
|
922
|
+
|
|
923
|
+
var vs = "attribute vec2 p;void main(){gl_Position=vec4(p,0.,1.);}";
|
|
924
|
+
var fs = [
|
|
925
|
+
"precision highp float;",
|
|
926
|
+
"uniform vec2 r; uniform float t;",
|
|
927
|
+
"float hash(vec2 p){return fract(sin(dot(p,vec2(127.1,311.7)))*43758.5453);}",
|
|
928
|
+
"float noise(vec2 p){vec2 i=floor(p),f=fract(p);float a=hash(i),b=hash(i+vec2(1.,0.)),c=hash(i+vec2(0.,1.)),d=hash(i+vec2(1.,1.));vec2 u=f*f*(3.-2.*f);return mix(a,b,u.x)+(c-a)*u.y*(1.-u.x)+(d-b)*u.x*u.y;}",
|
|
929
|
+
"void main(){",
|
|
930
|
+
" vec2 uv=(gl_FragCoord.xy-.5*r)/min(r.x,r.y);",
|
|
931
|
+
" vec2 p=uv*1.15; float tt=t*.08;",
|
|
932
|
+
" float n=noise(p*2.2+vec2(tt*.6,-tt*.4)); n+=.5*noise(p*4.6-vec2(tt,tt*.7)); n*=.55;",
|
|
933
|
+
" vec2 g=abs(fract(p*6.5)-.5); float grid=smoothstep(.06,0.,min(g.x,g.y));",
|
|
934
|
+
" float d=length(p); float rings=0.;",
|
|
935
|
+
" for(float i=0.;i<4.;i++){float ph=fract(tt*.35+i*.21);float rad=.08+ph*1.15;rings+=exp(-pow((d-rad)*28.,2.))*(1.-ph);}",
|
|
936
|
+
" float nodes=0.;",
|
|
937
|
+
" for(float i=0.;i<12.;i++){float a=i*2.399963;vec2 o=vec2(cos(a+tt*.2),sin(a-tt*.15))*(.18+.05*sin(tt+i));nodes+=exp(-dot(p-o,p-o)*420.);}",
|
|
938
|
+
" vec3 bg=vec3(0.043,0.063,0.094);",
|
|
939
|
+
" vec3 blue=vec3(0.486,0.769,1.0);",
|
|
940
|
+
" vec3 cool=vec3(0.655,0.847,1.0);",
|
|
941
|
+
" vec3 col=bg;",
|
|
942
|
+
" col+=blue*(n*.2); col+=blue*grid*.05;",
|
|
943
|
+
" col+=mix(blue,cool,.35)*rings*.22; col+=blue*nodes*.5;",
|
|
944
|
+
" col+=blue*exp(-d*d*1.8)*.08;",
|
|
945
|
+
" float vig=pow(max(1.-dot(uv*.72,uv*.72),0.),1.55);",
|
|
946
|
+
" col*=vig; gl_FragColor=vec4(col,1.);",
|
|
947
|
+
"}"
|
|
948
|
+
].join("\n");
|
|
949
|
+
|
|
950
|
+
function compile(type, src){var s=gl.createShader(type);gl.shaderSource(s,src);gl.compileShader(s);return s;}
|
|
951
|
+
var prog=gl.createProgram();
|
|
952
|
+
gl.attachShader(prog,compile(gl.VERTEX_SHADER,vs));
|
|
953
|
+
gl.attachShader(prog,compile(gl.FRAGMENT_SHADER,fs));
|
|
954
|
+
gl.linkProgram(prog);gl.useProgram(prog);
|
|
955
|
+
var buf=gl.createBuffer();gl.bindBuffer(gl.ARRAY_BUFFER,buf);
|
|
956
|
+
gl.bufferData(gl.ARRAY_BUFFER,new Float32Array([-1,-1,3,-1,-1,3]),gl.STATIC_DRAW);
|
|
957
|
+
var loc=gl.getAttribLocation(prog,"p");gl.enableVertexAttribArray(loc);gl.vertexAttribPointer(loc,2,gl.FLOAT,false,0,0);
|
|
958
|
+
var uR=gl.getUniformLocation(prog,"r"), uT=gl.getUniformLocation(prog,"t");
|
|
959
|
+
var running=true;
|
|
960
|
+
function resize(){
|
|
961
|
+
var dpr=Math.min(window.devicePixelRatio||1,1.5);
|
|
962
|
+
var w=Math.floor(canvas.clientWidth*dpr), h=Math.floor(canvas.clientHeight*dpr);
|
|
963
|
+
if(canvas.width!==w||canvas.height!==h){canvas.width=w;canvas.height=h;gl.viewport(0,0,w,h);}
|
|
964
|
+
}
|
|
965
|
+
function frame(now){
|
|
966
|
+
if(!running) return;
|
|
967
|
+
resize();
|
|
968
|
+
gl.uniform2f(uR,canvas.width,canvas.height);
|
|
969
|
+
gl.uniform1f(uT,now*0.001);
|
|
970
|
+
gl.drawArrays(gl.TRIANGLES,0,3);
|
|
971
|
+
requestAnimationFrame(frame);
|
|
972
|
+
}
|
|
973
|
+
function fit(){canvas.style.width="100%";canvas.style.height="100%";resize();}
|
|
974
|
+
fit();
|
|
975
|
+
window.addEventListener("resize",fit,{passive:true});
|
|
976
|
+
document.addEventListener("visibilitychange",function(){running=document.visibilityState==="visible";if(running)requestAnimationFrame(frame);});
|
|
977
|
+
requestAnimationFrame(frame);
|
|
928
978
|
})();
|
|
929
979
|
</script>
|
|
930
980
|
</body>
|