@4mica/cli 0.2.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/LICENSE +21 -0
- package/README.md +59 -0
- package/dist/index.js +628 -0
- package/dist/index.js.map +1 -0
- package/package.json +68 -0
- package/snapshot.json +100 -0
- package/templates/agent-buyer-node/.env.example +16 -0
- package/templates/agent-buyer-node/README.md +26 -0
- package/templates/agent-buyer-node/_gitignore +6 -0
- package/templates/agent-buyer-node/package.json +19 -0
- package/templates/agent-buyer-node/src/brain.ts +133 -0
- package/templates/agent-buyer-node/src/critic.ts +195 -0
- package/templates/agent-buyer-node/src/pay.ts +54 -0
- package/templates/agent-buyer-node/tsconfig.json +21 -0
- package/templates/agent-seller-express/.env.example +16 -0
- package/templates/agent-seller-express/README.md +26 -0
- package/templates/agent-seller-express/_gitignore +6 -0
- package/templates/agent-seller-express/package.json +22 -0
- package/templates/agent-seller-express/src/brain.ts +121 -0
- package/templates/agent-seller-express/src/comedian.ts +153 -0
- package/templates/agent-seller-express/tsconfig.json +21 -0
- package/templates/buyer-express/.env.example +12 -0
- package/templates/buyer-express/README.md +26 -0
- package/templates/buyer-express/_gitignore +6 -0
- package/templates/buyer-express/package.json +18 -0
- package/templates/buyer-express/src/buyer.ts +82 -0
- package/templates/buyer-express/tsconfig.json +21 -0
- package/templates/buyer-hono/.env.example +12 -0
- package/templates/buyer-hono/README.md +26 -0
- package/templates/buyer-hono/_gitignore +6 -0
- package/templates/buyer-hono/package.json +18 -0
- package/templates/buyer-hono/src/buyer.ts +82 -0
- package/templates/buyer-hono/tsconfig.json +21 -0
- package/templates/buyer-next/.env.example +12 -0
- package/templates/buyer-next/README.md +26 -0
- package/templates/buyer-next/_gitignore +6 -0
- package/templates/buyer-next/package.json +18 -0
- package/templates/buyer-next/src/buyer.ts +82 -0
- package/templates/buyer-next/tsconfig.json +21 -0
- package/templates/seller-express/.env.example +12 -0
- package/templates/seller-express/README.md +26 -0
- package/templates/seller-express/_gitignore +6 -0
- package/templates/seller-express/package.json +22 -0
- package/templates/seller-express/src/server.ts +64 -0
- package/templates/seller-express/tsconfig.json +21 -0
- package/templates/seller-hono/.env.example +12 -0
- package/templates/seller-hono/README.md +26 -0
- package/templates/seller-hono/_gitignore +6 -0
- package/templates/seller-hono/package.json +22 -0
- package/templates/seller-hono/src/server.ts +69 -0
- package/templates/seller-hono/tsconfig.json +21 -0
- package/templates/seller-next/.env.example +12 -0
- package/templates/seller-next/README.md +26 -0
- package/templates/seller-next/_gitignore +6 -0
- package/templates/seller-next/app/api/protected/route.ts +27 -0
- package/templates/seller-next/app/api/session/route.ts +8 -0
- package/templates/seller-next/app/globals.css +556 -0
- package/templates/seller-next/app/icon.svg +5 -0
- package/templates/seller-next/app/layout.tsx +22 -0
- package/templates/seller-next/app/page.tsx +189 -0
- package/templates/seller-next/next.config.mjs +3 -0
- package/templates/seller-next/package.json +25 -0
- package/templates/seller-next/public/logo-light.svg +19 -0
- package/templates/seller-next/public/logo.svg +19 -0
- package/templates/seller-next/scripts/serve.mjs +46 -0
- package/templates/seller-next/tsconfig.json +30 -0
|
@@ -0,0 +1,556 @@
|
|
|
1
|
+
:root {
|
|
2
|
+
--bg: #000000;
|
|
3
|
+
--surface: rgba(255, 255, 255, 0.03);
|
|
4
|
+
--surface-solid: #0c0c0e;
|
|
5
|
+
--border: rgba(255, 255, 255, 0.09);
|
|
6
|
+
--border-strong: rgba(255, 255, 255, 0.16);
|
|
7
|
+
|
|
8
|
+
--ink: #ededed;
|
|
9
|
+
--ink-body: #a6a6a6;
|
|
10
|
+
--ink-muted: #7a7a7a;
|
|
11
|
+
--ink-subtle: #5a5a5a;
|
|
12
|
+
|
|
13
|
+
--brand: #7bcbff;
|
|
14
|
+
--brand-blue: #3caef5;
|
|
15
|
+
--brand-teal: #48c9b0;
|
|
16
|
+
--brand-green: #18e299;
|
|
17
|
+
|
|
18
|
+
--grad: linear-gradient(110deg, #5493c5, #18e299);
|
|
19
|
+
--grad-soft: linear-gradient(110deg, #7bcbff, #59d4bb);
|
|
20
|
+
|
|
21
|
+
--radius: 16px;
|
|
22
|
+
--font-sans:
|
|
23
|
+
ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Helvetica,
|
|
24
|
+
Arial, sans-serif;
|
|
25
|
+
--font-mono:
|
|
26
|
+
ui-monospace, "SF Mono", SFMono-Regular, Menlo, Monaco, Consolas,
|
|
27
|
+
"Liberation Mono", monospace;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
* {
|
|
31
|
+
box-sizing: border-box;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
html,
|
|
35
|
+
body {
|
|
36
|
+
margin: 0;
|
|
37
|
+
padding: 0;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
body {
|
|
41
|
+
min-height: 100vh;
|
|
42
|
+
background-color: var(--bg);
|
|
43
|
+
color: var(--ink);
|
|
44
|
+
font-family: var(--font-sans);
|
|
45
|
+
-webkit-font-smoothing: antialiased;
|
|
46
|
+
text-rendering: optimizeLegibility;
|
|
47
|
+
overflow-x: hidden;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/* ── Ambient background ──────────────────────────────────────────────── */
|
|
51
|
+
|
|
52
|
+
.backdrop {
|
|
53
|
+
position: fixed;
|
|
54
|
+
inset: 0;
|
|
55
|
+
z-index: 0;
|
|
56
|
+
pointer-events: none;
|
|
57
|
+
overflow: hidden;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.backdrop::before {
|
|
61
|
+
content: "";
|
|
62
|
+
position: absolute;
|
|
63
|
+
inset: -2px;
|
|
64
|
+
background-image:
|
|
65
|
+
linear-gradient(rgba(255, 255, 255, 0.025) 1px, transparent 1px),
|
|
66
|
+
linear-gradient(90deg, rgba(255, 255, 255, 0.025) 1px, transparent 1px);
|
|
67
|
+
background-size: 46px 46px;
|
|
68
|
+
mask-image: radial-gradient(circle at 50% 38%, #000 0%, transparent 72%);
|
|
69
|
+
animation: grid-pan 28s linear infinite;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
.orb {
|
|
73
|
+
position: absolute;
|
|
74
|
+
border-radius: 50%;
|
|
75
|
+
filter: blur(90px);
|
|
76
|
+
opacity: 0.55;
|
|
77
|
+
will-change: transform;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.orb-a {
|
|
81
|
+
width: 520px;
|
|
82
|
+
height: 520px;
|
|
83
|
+
top: -140px;
|
|
84
|
+
left: 50%;
|
|
85
|
+
margin-left: -420px;
|
|
86
|
+
background: radial-gradient(circle, rgba(24, 226, 153, 0.5), transparent 65%);
|
|
87
|
+
animation: drift-a 18s ease-in-out infinite;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
.orb-b {
|
|
91
|
+
width: 460px;
|
|
92
|
+
height: 460px;
|
|
93
|
+
top: -80px;
|
|
94
|
+
left: 50%;
|
|
95
|
+
margin-left: 40px;
|
|
96
|
+
background: radial-gradient(
|
|
97
|
+
circle,
|
|
98
|
+
rgba(60, 174, 245, 0.45),
|
|
99
|
+
transparent 65%
|
|
100
|
+
);
|
|
101
|
+
animation: drift-b 22s ease-in-out infinite;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/* ── Layout ──────────────────────────────────────────────────────────── */
|
|
105
|
+
|
|
106
|
+
.page {
|
|
107
|
+
position: relative;
|
|
108
|
+
z-index: 1;
|
|
109
|
+
min-height: 100vh;
|
|
110
|
+
display: flex;
|
|
111
|
+
flex-direction: column;
|
|
112
|
+
align-items: center;
|
|
113
|
+
justify-content: center;
|
|
114
|
+
padding: 72px 24px;
|
|
115
|
+
gap: 30px;
|
|
116
|
+
text-align: center;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
.hero {
|
|
120
|
+
display: flex;
|
|
121
|
+
flex-direction: column;
|
|
122
|
+
align-items: center;
|
|
123
|
+
gap: 22px;
|
|
124
|
+
max-width: 560px;
|
|
125
|
+
width: 100%;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/* ── Logo ────────────────────────────────────────────────────────────── */
|
|
129
|
+
|
|
130
|
+
.logo-wrap {
|
|
131
|
+
position: relative;
|
|
132
|
+
width: 108px;
|
|
133
|
+
height: 108px;
|
|
134
|
+
display: grid;
|
|
135
|
+
place-items: center;
|
|
136
|
+
animation: float 6s ease-in-out infinite;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
.logo-wrap::after {
|
|
140
|
+
content: "";
|
|
141
|
+
position: absolute;
|
|
142
|
+
inset: 8px;
|
|
143
|
+
border-radius: 50%;
|
|
144
|
+
background: radial-gradient(
|
|
145
|
+
circle,
|
|
146
|
+
rgba(24, 226, 153, 0.35),
|
|
147
|
+
transparent 70%
|
|
148
|
+
);
|
|
149
|
+
filter: blur(14px);
|
|
150
|
+
animation: glow 4.5s ease-in-out infinite;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
.logo {
|
|
154
|
+
position: relative;
|
|
155
|
+
width: 100%;
|
|
156
|
+
height: 100%;
|
|
157
|
+
object-fit: contain;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/* ── Text ────────────────────────────────────────────────────────────── */
|
|
161
|
+
|
|
162
|
+
.badge {
|
|
163
|
+
display: inline-flex;
|
|
164
|
+
align-items: center;
|
|
165
|
+
gap: 8px;
|
|
166
|
+
padding: 6px 14px;
|
|
167
|
+
font-family: var(--font-mono);
|
|
168
|
+
font-size: 12.5px;
|
|
169
|
+
letter-spacing: 0.02em;
|
|
170
|
+
color: var(--ink-body);
|
|
171
|
+
background: var(--surface);
|
|
172
|
+
border: 1px solid var(--border);
|
|
173
|
+
border-radius: 999px;
|
|
174
|
+
backdrop-filter: blur(8px);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
.badge .dot {
|
|
178
|
+
width: 7px;
|
|
179
|
+
height: 7px;
|
|
180
|
+
border-radius: 50%;
|
|
181
|
+
background: var(--brand-green);
|
|
182
|
+
box-shadow: 0 0 0 0 rgba(24, 226, 153, 0.6);
|
|
183
|
+
animation: pulse 2s ease-out infinite;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
.title {
|
|
187
|
+
margin: 0;
|
|
188
|
+
font-size: clamp(2.6rem, 8vw, 4rem);
|
|
189
|
+
line-height: 1.02;
|
|
190
|
+
font-weight: 700;
|
|
191
|
+
letter-spacing: -0.03em;
|
|
192
|
+
background: var(--grad-soft);
|
|
193
|
+
background-size: 200% auto;
|
|
194
|
+
-webkit-background-clip: text;
|
|
195
|
+
background-clip: text;
|
|
196
|
+
color: transparent;
|
|
197
|
+
animation: shimmer 6s linear infinite;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
.subtitle {
|
|
201
|
+
margin: 0;
|
|
202
|
+
max-width: 460px;
|
|
203
|
+
font-size: 1.05rem;
|
|
204
|
+
line-height: 1.6;
|
|
205
|
+
color: var(--ink-body);
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
.subtitle code {
|
|
209
|
+
font-family: var(--font-mono);
|
|
210
|
+
font-size: 0.9em;
|
|
211
|
+
color: var(--brand);
|
|
212
|
+
background: rgba(123, 203, 255, 0.1);
|
|
213
|
+
padding: 2px 6px;
|
|
214
|
+
border-radius: 6px;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
/* ── Actions ─────────────────────────────────────────────────────────── */
|
|
218
|
+
|
|
219
|
+
.actions {
|
|
220
|
+
display: flex;
|
|
221
|
+
flex-wrap: wrap;
|
|
222
|
+
gap: 12px;
|
|
223
|
+
justify-content: center;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
.btn {
|
|
227
|
+
appearance: none;
|
|
228
|
+
cursor: pointer;
|
|
229
|
+
font: inherit;
|
|
230
|
+
font-size: 0.95rem;
|
|
231
|
+
font-weight: 600;
|
|
232
|
+
padding: 12px 22px;
|
|
233
|
+
border-radius: 12px;
|
|
234
|
+
border: 1px solid transparent;
|
|
235
|
+
transition:
|
|
236
|
+
transform 0.15s ease,
|
|
237
|
+
box-shadow 0.2s ease,
|
|
238
|
+
background 0.2s ease,
|
|
239
|
+
border-color 0.2s ease;
|
|
240
|
+
text-decoration: none;
|
|
241
|
+
display: inline-flex;
|
|
242
|
+
align-items: center;
|
|
243
|
+
gap: 8px;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
.btn:active {
|
|
247
|
+
transform: translateY(1px) scale(0.99);
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
.btn-primary {
|
|
251
|
+
color: #04120c;
|
|
252
|
+
background: var(--grad);
|
|
253
|
+
box-shadow:
|
|
254
|
+
0 8px 24px -8px rgba(24, 226, 153, 0.5),
|
|
255
|
+
inset 0 1px 0 rgba(255, 255, 255, 0.25);
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
.btn-primary:hover {
|
|
259
|
+
transform: translateY(-2px);
|
|
260
|
+
box-shadow:
|
|
261
|
+
0 14px 32px -8px rgba(24, 226, 153, 0.6),
|
|
262
|
+
inset 0 1px 0 rgba(255, 255, 255, 0.3);
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
.btn-primary[disabled] {
|
|
266
|
+
opacity: 0.65;
|
|
267
|
+
cursor: progress;
|
|
268
|
+
transform: none;
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
.btn-ghost {
|
|
272
|
+
color: var(--ink);
|
|
273
|
+
background: var(--surface);
|
|
274
|
+
border-color: var(--border);
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
.btn-ghost:hover {
|
|
278
|
+
border-color: var(--border-strong);
|
|
279
|
+
background: rgba(255, 255, 255, 0.06);
|
|
280
|
+
transform: translateY(-2px);
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
/* ── Result panel ────────────────────────────────────────────────────── */
|
|
284
|
+
|
|
285
|
+
.panel {
|
|
286
|
+
width: 100%;
|
|
287
|
+
text-align: left;
|
|
288
|
+
background: var(--surface-solid);
|
|
289
|
+
border: 1px solid var(--border);
|
|
290
|
+
border-radius: var(--radius);
|
|
291
|
+
overflow: hidden;
|
|
292
|
+
animation: rise 0.45s cubic-bezier(0.22, 1, 0.36, 1) both;
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
.panel-head {
|
|
296
|
+
display: flex;
|
|
297
|
+
align-items: center;
|
|
298
|
+
gap: 10px;
|
|
299
|
+
padding: 12px 16px;
|
|
300
|
+
border-bottom: 1px solid var(--border);
|
|
301
|
+
font-family: var(--font-mono);
|
|
302
|
+
font-size: 13px;
|
|
303
|
+
color: var(--ink-body);
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
.status-pill {
|
|
307
|
+
margin-left: auto;
|
|
308
|
+
font-weight: 700;
|
|
309
|
+
padding: 3px 10px;
|
|
310
|
+
border-radius: 999px;
|
|
311
|
+
font-size: 12px;
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
.status-402 {
|
|
315
|
+
color: #ffd27a;
|
|
316
|
+
background: rgba(255, 178, 60, 0.14);
|
|
317
|
+
border: 1px solid rgba(255, 178, 60, 0.3);
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
.status-200 {
|
|
321
|
+
color: var(--brand-green);
|
|
322
|
+
background: rgba(24, 226, 153, 0.14);
|
|
323
|
+
border: 1px solid rgba(24, 226, 153, 0.3);
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
.status-err {
|
|
327
|
+
color: #ff8a8a;
|
|
328
|
+
background: rgba(255, 90, 90, 0.14);
|
|
329
|
+
border: 1px solid rgba(255, 90, 90, 0.3);
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
.dot-red,
|
|
333
|
+
.dot-amber,
|
|
334
|
+
.dot-green {
|
|
335
|
+
width: 11px;
|
|
336
|
+
height: 11px;
|
|
337
|
+
border-radius: 50%;
|
|
338
|
+
display: inline-block;
|
|
339
|
+
}
|
|
340
|
+
.dot-red {
|
|
341
|
+
background: #ff5f57;
|
|
342
|
+
}
|
|
343
|
+
.dot-amber {
|
|
344
|
+
background: #febc2e;
|
|
345
|
+
}
|
|
346
|
+
.dot-green {
|
|
347
|
+
background: #28c840;
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
.panel pre {
|
|
351
|
+
margin: 0;
|
|
352
|
+
padding: 16px;
|
|
353
|
+
font-family: var(--font-mono);
|
|
354
|
+
font-size: 12.5px;
|
|
355
|
+
line-height: 1.6;
|
|
356
|
+
color: var(--ink);
|
|
357
|
+
overflow-x: auto;
|
|
358
|
+
max-height: 320px;
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
.hint {
|
|
362
|
+
margin: 10px 0 0;
|
|
363
|
+
font-size: 13px;
|
|
364
|
+
color: var(--ink-muted);
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
.hint b {
|
|
368
|
+
color: var(--brand-green);
|
|
369
|
+
font-weight: 600;
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
/* ── Code snippet ────────────────────────────────────────────────────── */
|
|
373
|
+
|
|
374
|
+
.code {
|
|
375
|
+
width: 100%;
|
|
376
|
+
display: flex;
|
|
377
|
+
align-items: center;
|
|
378
|
+
justify-content: space-between;
|
|
379
|
+
gap: 12px;
|
|
380
|
+
padding: 12px 16px;
|
|
381
|
+
background: var(--surface-solid);
|
|
382
|
+
border: 1px solid var(--border);
|
|
383
|
+
border-radius: 12px;
|
|
384
|
+
font-family: var(--font-mono);
|
|
385
|
+
font-size: 13px;
|
|
386
|
+
color: var(--ink-body);
|
|
387
|
+
text-align: left;
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
.code span {
|
|
391
|
+
overflow-x: auto;
|
|
392
|
+
white-space: nowrap;
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
.code .prompt {
|
|
396
|
+
color: var(--brand-green);
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
.copy {
|
|
400
|
+
flex-shrink: 0;
|
|
401
|
+
cursor: pointer;
|
|
402
|
+
font: inherit;
|
|
403
|
+
font-size: 12px;
|
|
404
|
+
color: var(--ink-muted);
|
|
405
|
+
background: transparent;
|
|
406
|
+
border: 1px solid var(--border);
|
|
407
|
+
border-radius: 8px;
|
|
408
|
+
padding: 5px 10px;
|
|
409
|
+
transition:
|
|
410
|
+
color 0.2s,
|
|
411
|
+
border-color 0.2s;
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
.copy:hover {
|
|
415
|
+
color: var(--ink);
|
|
416
|
+
border-color: var(--border-strong);
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
/* ── Footer ──────────────────────────────────────────────────────────── */
|
|
420
|
+
|
|
421
|
+
.foot {
|
|
422
|
+
display: flex;
|
|
423
|
+
gap: 8px;
|
|
424
|
+
align-items: center;
|
|
425
|
+
font-size: 13px;
|
|
426
|
+
color: var(--ink-subtle);
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
.foot a {
|
|
430
|
+
color: var(--ink-muted);
|
|
431
|
+
text-decoration: none;
|
|
432
|
+
transition: color 0.2s;
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
.foot a:hover {
|
|
436
|
+
color: var(--brand);
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
/* ── Entrance stagger ────────────────────────────────────────────────── */
|
|
440
|
+
|
|
441
|
+
.reveal {
|
|
442
|
+
opacity: 0;
|
|
443
|
+
animation: rise 0.7s cubic-bezier(0.22, 1, 0.36, 1) forwards;
|
|
444
|
+
}
|
|
445
|
+
.d1 {
|
|
446
|
+
animation-delay: 0.05s;
|
|
447
|
+
}
|
|
448
|
+
.d2 {
|
|
449
|
+
animation-delay: 0.15s;
|
|
450
|
+
}
|
|
451
|
+
.d3 {
|
|
452
|
+
animation-delay: 0.25s;
|
|
453
|
+
}
|
|
454
|
+
.d4 {
|
|
455
|
+
animation-delay: 0.35s;
|
|
456
|
+
}
|
|
457
|
+
.d5 {
|
|
458
|
+
animation-delay: 0.45s;
|
|
459
|
+
}
|
|
460
|
+
.d6 {
|
|
461
|
+
animation-delay: 0.55s;
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
/* ── Keyframes ───────────────────────────────────────────────────────── */
|
|
465
|
+
|
|
466
|
+
@keyframes rise {
|
|
467
|
+
from {
|
|
468
|
+
opacity: 0;
|
|
469
|
+
transform: translateY(18px);
|
|
470
|
+
}
|
|
471
|
+
to {
|
|
472
|
+
opacity: 1;
|
|
473
|
+
transform: translateY(0);
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
@keyframes float {
|
|
478
|
+
0%,
|
|
479
|
+
100% {
|
|
480
|
+
transform: translateY(0);
|
|
481
|
+
}
|
|
482
|
+
50% {
|
|
483
|
+
transform: translateY(-10px);
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
@keyframes glow {
|
|
488
|
+
0%,
|
|
489
|
+
100% {
|
|
490
|
+
opacity: 0.55;
|
|
491
|
+
transform: scale(1);
|
|
492
|
+
}
|
|
493
|
+
50% {
|
|
494
|
+
opacity: 1;
|
|
495
|
+
transform: scale(1.12);
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
@keyframes shimmer {
|
|
500
|
+
to {
|
|
501
|
+
background-position: 200% center;
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
@keyframes pulse {
|
|
506
|
+
0% {
|
|
507
|
+
box-shadow: 0 0 0 0 rgba(24, 226, 153, 0.55);
|
|
508
|
+
}
|
|
509
|
+
70% {
|
|
510
|
+
box-shadow: 0 0 0 8px rgba(24, 226, 153, 0);
|
|
511
|
+
}
|
|
512
|
+
100% {
|
|
513
|
+
box-shadow: 0 0 0 0 rgba(24, 226, 153, 0);
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
@keyframes grid-pan {
|
|
518
|
+
from {
|
|
519
|
+
background-position: 0 0;
|
|
520
|
+
}
|
|
521
|
+
to {
|
|
522
|
+
background-position: 46px 46px;
|
|
523
|
+
}
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
@keyframes drift-a {
|
|
527
|
+
0%,
|
|
528
|
+
100% {
|
|
529
|
+
transform: translate(0, 0) scale(1);
|
|
530
|
+
}
|
|
531
|
+
50% {
|
|
532
|
+
transform: translate(-40px, 30px) scale(1.08);
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
@keyframes drift-b {
|
|
537
|
+
0%,
|
|
538
|
+
100% {
|
|
539
|
+
transform: translate(0, 0) scale(1);
|
|
540
|
+
}
|
|
541
|
+
50% {
|
|
542
|
+
transform: translate(50px, 20px) scale(1.12);
|
|
543
|
+
}
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
@media (prefers-reduced-motion: reduce) {
|
|
547
|
+
*,
|
|
548
|
+
*::before,
|
|
549
|
+
*::after {
|
|
550
|
+
animation: none !important;
|
|
551
|
+
transition: none !important;
|
|
552
|
+
}
|
|
553
|
+
.reveal {
|
|
554
|
+
opacity: 1;
|
|
555
|
+
}
|
|
556
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
<svg width="502" height="502" viewBox="0 0 502 502" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path d="M501.402 185.33V29.9622C501.402 13.2897 487.876 0 471.453 0H316.156C291.763 0 267.611 4.83243 245.15 14.0144C222.689 23.438 202.16 36.9695 185.012 54.3668L183.804 55.575C161.101 78.5299 144.92 107.042 136.708 138.454C151.441 134.588 166.656 132.655 181.871 132.413C222.447 131.93 262.298 144.978 294.661 169.383C323.885 191.13 346.104 221.092 358.18 255.645C370.739 290.681 372.188 328.859 362.769 364.862C393.925 356.647 422.666 340.457 445.611 317.744L446.818 316.536C463.966 299.38 477.732 278.841 487.151 256.37C496.571 233.898 501.16 209.735 501.16 185.33H501.402Z" fill="#18E299"/>
|
|
3
|
+
<path d="M132.071 182.706C132.312 135.044 151.32 89.3068 184.764 55.1246L55.5569 184.391C55.0756 184.873 54.5942 185.113 54.113 185.595C22.5932 216.888 3.58552 258.774 0.457596 303.066C-2.42971 344.47 8.39746 385.392 31.4959 419.575C33.6992 422.835 39.6774 423.907 43.0459 420.778L122.206 341.822C146.989 317.028 154.689 280.198 142.899 247.219C135.44 226.758 131.831 204.852 132.071 182.706Z" fill="#0C8C5E"/>
|
|
4
|
+
<path d="M446.067 316.547C421.284 340.86 390.245 357.71 356.56 365.172C322.634 372.635 287.506 370.468 254.783 358.914C254.783 358.914 254.542 358.914 254.301 358.914C221.338 347.118 184.525 354.821 159.742 379.375L80.5808 458.331C77.2123 461.701 77.6935 467.238 81.7838 469.885C115.95 492.754 156.855 503.827 198.24 500.938C242.512 497.809 284.137 478.792 315.656 447.258L316.859 446.054L446.067 316.788V316.547Z" fill="#0C8C5E"/>
|
|
5
|
+
</svg>
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
import "./globals.css";
|
|
3
|
+
|
|
4
|
+
export const metadata = {
|
|
5
|
+
title: "4Mica × x402 — Next.js paywall",
|
|
6
|
+
description:
|
|
7
|
+
"A Next.js App Router route protected by @4mica/sdk-next. Pay per request with x402.",
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
export default function RootLayout({ children }: { children: ReactNode }) {
|
|
11
|
+
return (
|
|
12
|
+
<html lang="en">
|
|
13
|
+
<body>
|
|
14
|
+
<div className="backdrop" aria-hidden="true">
|
|
15
|
+
<div className="orb orb-a" />
|
|
16
|
+
<div className="orb orb-b" />
|
|
17
|
+
</div>
|
|
18
|
+
{children}
|
|
19
|
+
</body>
|
|
20
|
+
</html>
|
|
21
|
+
);
|
|
22
|
+
}
|