@agent-link/server 0.1.301 → 0.1.303

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (24) hide show
  1. package/package.json +1 -1
  2. package/web/dist/assets/{cssMode-DShmsgnw.js → cssMode-B2_6v8T2.js} +1 -1
  3. package/web/dist/assets/{editor.main-SfwoHVBK.js → editor.main-B1R1-qE_.js} +3 -3
  4. package/web/dist/assets/{freemarker2-B50cR5GF.js → freemarker2-BRK22ENa.js} +1 -1
  5. package/web/dist/assets/{handlebars-BLU-r-LI.js → handlebars-y7VxB2QG.js} +1 -1
  6. package/web/dist/assets/{html-D_klb9JD.js → html-hlbXyl1x.js} +1 -1
  7. package/web/dist/assets/{htmlMode-B1R4_ngP.js → htmlMode-DsqcDJBH.js} +1 -1
  8. package/web/dist/assets/{index-CfnrRZ27.js → index-CEzkBFyn.js} +3 -3
  9. package/web/dist/assets/index-YCkWMfr6.css +1 -0
  10. package/web/dist/assets/{javascript-BBx34Gdt.js → javascript-BhXmVVca.js} +1 -1
  11. package/web/dist/assets/{jsonMode-BcCYJi_k.js → jsonMode-Dscf1Dd1.js} +1 -1
  12. package/web/dist/assets/{liquid-gbJorFx-.js → liquid-C3IzT1ID.js} +1 -1
  13. package/web/dist/assets/{lspLanguageFeatures-B2QT-AiC.js → lspLanguageFeatures-BswCNpbz.js} +1 -1
  14. package/web/dist/assets/{mdx-Di31qSLb.js → mdx-DQ74j0JV.js} +1 -1
  15. package/web/dist/assets/{python-DgN5WuzI.js → python-B8Kb7lFj.js} +1 -1
  16. package/web/dist/assets/{razor-Anv0b3Mv.js → razor-C9hdZV_v.js} +1 -1
  17. package/web/dist/assets/{tsMode-P5far3I8.js → tsMode-CXnT3dOx.js} +1 -1
  18. package/web/dist/assets/{typescript-Bk9m4K7o.js → typescript-BxMmoCYy.js} +1 -1
  19. package/web/dist/assets/{xml-CwNLPrx7.js → xml-DD8lgIZd.js} +1 -1
  20. package/web/dist/assets/{yaml-ukSUrrCC.js → yaml-pbmxEf4r.js} +1 -1
  21. package/web/dist/index.html +2 -2
  22. package/web/dist/landing.html +245 -848
  23. package/web/dist/landing.zh.html +258 -859
  24. package/web/dist/assets/index-XUHYl06d.css +0 -1
@@ -40,32 +40,19 @@
40
40
  }
41
41
  </script>
42
42
  <style>
43
- @import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800;900&family=JetBrains+Mono:wght@400;500&display=swap');
43
+ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap');
44
44
 
45
45
  * { margin: 0; padding: 0; box-sizing: border-box; }
46
46
 
47
- html {
48
- overflow-x: hidden;
49
- overscroll-behavior-x: none;
50
- }
51
-
52
47
  :root {
53
- --bg: #06080f;
54
- --surface: rgba(255,255,255,0.03);
55
- --surface-hover: rgba(255,255,255,0.06);
56
- --border: rgba(255,255,255,0.06);
57
- --border-hover: rgba(255,255,255,0.12);
58
- --text: #eaeaea;
59
- --text-dim: rgba(255,255,255,0.45);
60
- --text-mid: rgba(255,255,255,0.65);
61
- --accent: #3b82f6;
62
- --accent-soft: rgba(59,130,246,0.15);
63
- --accent-glow: rgba(59,130,246,0.4);
64
- --rose: #f43f5e;
65
- --amber: #f59e0b;
66
- --cyan: #22d3ee;
67
- --green: #34d399;
68
- --blue: #60a5fa;
48
+ --bg: #ffffff;
49
+ --surface: #f7f8fa;
50
+ --border: #e5e7eb;
51
+ --text: #1a1a1a;
52
+ --text-secondary: #6b7280;
53
+ --accent: #2563eb;
54
+ --accent-light: #eff4ff;
55
+ --code-bg: #1e293b;
69
56
  }
70
57
 
71
58
  body {
@@ -73,88 +60,7 @@
73
60
  background: var(--bg);
74
61
  color: var(--text);
75
62
  line-height: 1.6;
76
- min-height: 100vh;
77
- overflow-x: hidden;
78
- overscroll-behavior-x: none;
79
- position: relative;
80
- width: 100%;
81
- }
82
-
83
- /* ── Ambient Background ── */
84
- .ambient {
85
- position: fixed;
86
- top: 0;
87
- left: 0;
88
- width: 100%;
89
- height: 100%;
90
- pointer-events: none;
91
- z-index: 0;
92
- overflow: hidden;
93
- contain: strict;
94
- will-change: transform;
95
- }
96
-
97
- .ambient-orb {
98
- position: absolute;
99
- border-radius: 50%;
100
- filter: blur(120px);
101
- opacity: 0.35;
102
- animation: float 20s ease-in-out infinite;
103
- will-change: transform;
104
- contain: layout style;
105
- }
106
-
107
- .ambient-orb:nth-child(1) {
108
- width: 600px; height: 600px;
109
- background: radial-gradient(circle, var(--accent) 0%, transparent 70%);
110
- top: -10%; left: -5%;
111
- animation-delay: 0s;
112
- animation-duration: 25s;
113
- }
114
-
115
- .ambient-orb:nth-child(2) {
116
- width: 500px; height: 500px;
117
- background: radial-gradient(circle, var(--rose) 0%, transparent 70%);
118
- top: 20%; right: -10%;
119
- animation-delay: -8s;
120
- animation-duration: 22s;
121
- }
122
-
123
- .ambient-orb:nth-child(3) {
124
- width: 400px; height: 400px;
125
- background: radial-gradient(circle, var(--cyan) 0%, transparent 70%);
126
- bottom: 10%; left: 20%;
127
- animation-delay: -15s;
128
- animation-duration: 28s;
129
- }
130
-
131
- @keyframes float {
132
- 0%, 100% { transform: translate(0, 0) scale(1); }
133
- 25% { transform: translate(30px, -40px) scale(1.05); }
134
- 50% { transform: translate(-20px, 20px) scale(0.95); }
135
- 75% { transform: translate(40px, 10px) scale(1.02); }
136
- }
137
-
138
- /* ── Grain overlay ── */
139
- .grain {
140
- position: fixed;
141
- top: 0; left: 0;
142
- width: 100%; height: 100%;
143
- pointer-events: none;
144
- z-index: 1;
145
- opacity: 0.025;
146
- background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)'/%3E%3C/svg%3E");
147
- background-repeat: repeat;
148
- background-size: 256px 256px;
149
- will-change: transform;
150
- contain: strict;
151
- }
152
-
153
- /* ── Content wrapper ── */
154
- .content {
155
- position: relative;
156
- z-index: 2;
157
- overflow-x: hidden;
63
+ -webkit-font-smoothing: antialiased;
158
64
  }
159
65
 
160
66
  /* ── Nav ── */
@@ -162,253 +68,162 @@
162
68
  display: flex;
163
69
  align-items: center;
164
70
  justify-content: space-between;
165
- padding: 1.5rem 2.5rem;
166
- max-width: 1200px;
71
+ padding: 1.25rem 2rem;
72
+ max-width: 1080px;
167
73
  margin: 0 auto;
168
74
  }
169
75
 
170
76
  .logo {
171
- font-size: 1.2rem;
172
- font-weight: 700;
173
- letter-spacing: -0.03em;
174
77
  display: flex;
175
78
  align-items: center;
176
79
  gap: 0.5rem;
80
+ font-size: 1.1rem;
81
+ font-weight: 700;
82
+ color: var(--text);
83
+ letter-spacing: -0.02em;
177
84
  }
178
85
 
179
- .logo-mark {
180
- width: 28px; height: 28px;
181
- border-radius: 8px;
182
- box-shadow: 0 0 20px var(--accent-glow);
183
- }
184
-
185
- .logo-text span {
186
- background: linear-gradient(135deg, var(--accent), var(--rose));
187
- -webkit-background-clip: text;
188
- -webkit-text-fill-color: transparent;
189
- background-clip: text;
190
- }
86
+ .logo img { width: 26px; height: 26px; border-radius: 6px; }
191
87
 
192
88
  .nav-links {
193
89
  display: flex;
194
90
  align-items: center;
195
- gap: 2rem;
91
+ gap: 1.5rem;
196
92
  }
197
93
 
198
94
  .nav-links a {
199
- color: var(--text-dim);
95
+ color: var(--text-secondary);
200
96
  text-decoration: none;
201
- font-size: 0.85rem;
97
+ font-size: 0.875rem;
202
98
  font-weight: 500;
203
- transition: color 0.3s;
204
- letter-spacing: 0.02em;
205
99
  }
206
100
 
207
101
  .nav-links a:hover { color: var(--text); }
208
102
 
209
103
  .nav-gh {
210
- display: flex;
104
+ display: inline-flex;
211
105
  align-items: center;
212
- gap: 0.4rem;
213
- background: var(--surface);
106
+ gap: 0.35rem;
214
107
  border: 1px solid var(--border);
215
108
  border-radius: 8px;
216
- padding: 0.45rem 0.85rem;
217
- transition: all 0.3s;
218
- }
219
-
220
- .nav-gh:hover {
221
- background: var(--surface-hover);
222
- border-color: var(--border-hover);
109
+ padding: 0.4rem 0.75rem;
223
110
  }
224
111
 
225
112
  .nav-gh svg { width: 16px; height: 16px; fill: currentColor; }
226
113
 
227
114
  .nav-lang {
228
- font-size: 0.8rem;
229
- color: var(--text-dim);
230
- padding: 0.35rem 0.7rem;
231
115
  border: 1px solid var(--border);
232
116
  border-radius: 6px;
233
- transition: all 0.3s;
234
- }
235
-
236
- .nav-lang:hover {
237
- color: var(--text);
238
- border-color: var(--border-hover);
117
+ padding: 0.3rem 0.6rem;
118
+ font-size: 0.8rem;
239
119
  }
240
120
 
241
121
  /* ── Hero ── */
242
122
  .hero {
243
123
  text-align: center;
244
- padding: 5rem 2rem 4rem;
245
- max-width: 900px;
124
+ padding: 5rem 2rem 3rem;
125
+ max-width: 720px;
246
126
  margin: 0 auto;
247
- position: relative;
248
127
  }
249
128
 
250
129
  .hero-badge {
251
130
  display: inline-flex;
252
131
  align-items: center;
253
132
  gap: 0.5rem;
254
- background: var(--accent-soft);
255
- border: 1px solid rgba(59,130,246,0.2);
133
+ background: var(--accent-light);
134
+ border: 1px solid #dbeafe;
256
135
  border-radius: 100px;
257
- padding: 0.4rem 1rem 0.4rem 0.5rem;
136
+ padding: 0.35rem 1rem;
258
137
  font-size: 0.8rem;
259
138
  color: var(--accent);
260
139
  font-weight: 500;
261
- margin-bottom: 2.5rem;
262
- letter-spacing: 0.01em;
263
- animation: fadeInUp 0.8s ease-out;
140
+ margin-bottom: 2rem;
264
141
  }
265
142
 
266
143
  .hero-badge-dot {
267
- width: 8px; height: 8px;
144
+ width: 7px; height: 7px;
268
145
  border-radius: 50%;
269
- background: var(--green);
270
- box-shadow: 0 0 8px var(--green);
271
- animation: pulse 2s ease-in-out infinite;
272
- }
273
-
274
- @keyframes pulse {
275
- 0%, 100% { opacity: 1; transform: scale(1); }
276
- 50% { opacity: 0.6; transform: scale(0.85); }
146
+ background: #22c55e;
277
147
  }
278
148
 
279
149
  .hero h1 {
280
- font-size: clamp(2.8rem, 6vw, 4.5rem);
281
- font-weight: 800;
282
- letter-spacing: -0.04em;
283
- line-height: 1.08;
284
- margin-bottom: 1.75rem;
285
- animation: fadeInUp 0.8s ease-out 0.1s both;
286
- }
287
-
288
- .hero h1 .line {
289
- display: block;
150
+ font-size: clamp(2.4rem, 5vw, 3.5rem);
151
+ font-weight: 700;
152
+ letter-spacing: -0.03em;
153
+ line-height: 1.15;
154
+ margin-bottom: 1.5rem;
155
+ color: var(--text);
290
156
  }
291
157
 
292
158
  .hero h1 em {
293
159
  font-style: normal;
294
- position: relative;
295
- background: linear-gradient(135deg, var(--accent), #60a5fa, var(--rose));
296
- background-size: 200% 200%;
297
- -webkit-background-clip: text;
298
- -webkit-text-fill-color: transparent;
299
- background-clip: text;
300
- animation: shimmer 6s ease-in-out infinite;
301
- }
302
-
303
- @keyframes shimmer {
304
- 0%, 100% { background-position: 0% 50%; }
305
- 50% { background-position: 100% 50%; }
306
- }
307
-
308
- .hero-sub {
309
- font-size: 1.2rem;
310
- color: var(--text-mid);
311
- max-width: 600px;
312
- margin: 0 auto 3rem;
313
- font-weight: 400;
314
- line-height: 1.7;
315
- animation: fadeInUp 0.8s ease-out 0.2s both;
316
- }
317
-
318
- .hero-sub strong {
319
- color: var(--text);
320
- font-weight: 500;
321
- }
322
-
323
- @keyframes fadeInUp {
324
- from { opacity: 0; transform: translateY(20px); }
325
- to { opacity: 1; transform: translateY(0); }
160
+ color: var(--accent);
326
161
  }
327
162
 
328
- /* ── CTA Group ── */
163
+ /* ── CTA ── */
329
164
  .cta-group {
330
165
  display: flex;
331
166
  align-items: center;
332
167
  justify-content: center;
333
- gap: 1rem;
334
- margin-bottom: 1.5rem;
335
- animation: fadeInUp 0.8s ease-out 0.3s both;
168
+ gap: 0.75rem;
169
+ margin-bottom: 2rem;
336
170
  }
337
171
 
338
172
  .cta-primary {
339
173
  display: inline-flex;
340
174
  align-items: center;
341
- gap: 0.5rem;
342
- background: linear-gradient(135deg, var(--accent), #60a5fa);
175
+ gap: 0.4rem;
176
+ background: var(--accent);
343
177
  color: #fff;
344
178
  font-weight: 600;
345
- font-size: 0.95rem;
346
- padding: 0.8rem 1.75rem;
347
- border-radius: 12px;
348
- text-decoration: none;
349
- transition: all 0.3s;
350
- box-shadow: 0 0 30px rgba(59,130,246,0.3), 0 4px 15px rgba(0,0,0,0.3);
179
+ font-size: 0.9rem;
180
+ padding: 0.7rem 1.5rem;
181
+ border-radius: 10px;
351
182
  border: none;
352
183
  cursor: pointer;
353
184
  font-family: inherit;
354
185
  }
355
186
 
356
- .cta-primary:hover {
357
- transform: translateY(-2px);
358
- box-shadow: 0 0 40px rgba(59,130,246,0.45), 0 8px 25px rgba(0,0,0,0.4);
359
- }
187
+ .cta-primary:hover { background: #1d4ed8; }
360
188
 
361
189
  .cta-secondary {
362
190
  display: inline-flex;
363
191
  align-items: center;
364
- gap: 0.5rem;
365
- background: var(--surface);
192
+ gap: 0.4rem;
193
+ background: var(--bg);
366
194
  border: 1px solid var(--border);
367
195
  color: var(--text);
368
196
  font-weight: 500;
369
- font-size: 0.95rem;
370
- padding: 0.8rem 1.75rem;
371
- border-radius: 12px;
197
+ font-size: 0.9rem;
198
+ padding: 0.7rem 1.5rem;
199
+ border-radius: 10px;
372
200
  text-decoration: none;
373
- transition: all 0.3s;
374
201
  cursor: pointer;
375
202
  font-family: inherit;
376
203
  }
377
204
 
378
- .cta-secondary:hover {
379
- background: var(--surface-hover);
380
- border-color: var(--border-hover);
381
- transform: translateY(-2px);
382
- }
383
-
384
- .cta-secondary svg { width: 18px; height: 18px; fill: currentColor; }
205
+ .cta-secondary:hover { background: var(--surface); }
206
+ .cta-secondary svg { width: 16px; height: 16px; fill: currentColor; }
385
207
 
386
- /* ── Terminal Install ── */
208
+ /* ── Terminal ── */
387
209
  .terminal {
388
- max-width: 520px;
210
+ max-width: 500px;
389
211
  margin: 0 auto;
390
- background: rgba(10,10,20,0.92);
391
- border: 1px solid var(--border);
392
- border-radius: 14px;
212
+ background: var(--code-bg);
213
+ border-radius: 12px;
393
214
  overflow: hidden;
394
- animation: fadeInUp 0.8s ease-out 0.4s both;
395
- box-shadow: 0 20px 60px rgba(0,0,0,0.4);
215
+ box-shadow: 0 4px 24px rgba(0,0,0,0.08);
396
216
  }
397
217
 
398
218
  .terminal-bar {
399
219
  display: flex;
400
220
  align-items: center;
401
221
  gap: 6px;
402
- padding: 0.75rem 1rem;
403
- background: rgba(255,255,255,0.03);
404
- border-bottom: 1px solid var(--border);
405
- }
406
-
407
- .terminal-dot {
408
- width: 10px; height: 10px;
409
- border-radius: 50%;
222
+ padding: 0.7rem 1rem;
223
+ background: rgba(255,255,255,0.06);
410
224
  }
411
225
 
226
+ .terminal-dot { width: 10px; height: 10px; border-radius: 50%; }
412
227
  .terminal-dot:nth-child(1) { background: #ff5f57; }
413
228
  .terminal-dot:nth-child(2) { background: #ffbd2e; }
414
229
  .terminal-dot:nth-child(3) { background: #28c840; }
@@ -416,17 +231,17 @@
416
231
  .terminal-title {
417
232
  flex: 1;
418
233
  text-align: center;
419
- font-size: 0.72rem;
420
- color: var(--text-dim);
234
+ font-size: 0.7rem;
235
+ color: rgba(255,255,255,0.4);
421
236
  font-weight: 500;
422
- letter-spacing: 0.03em;
423
237
  }
424
238
 
425
239
  .terminal-body {
426
- padding: 1.25rem 1.5rem;
427
- font-family: 'JetBrains Mono', 'SF Mono', 'Fira Code', monospace;
428
- font-size: 0.85rem;
240
+ padding: 1rem 1.25rem;
241
+ font-family: 'JetBrains Mono', monospace;
242
+ font-size: 0.82rem;
429
243
  line-height: 1.8;
244
+ color: #e2e8f0;
430
245
  }
431
246
 
432
247
  .terminal-line {
@@ -434,35 +249,31 @@
434
249
  align-items: center;
435
250
  gap: 0.5rem;
436
251
  cursor: pointer;
437
- padding: 0.15rem 0.35rem;
438
- margin: 0 -0.35rem;
439
- border-radius: 6px;
440
- transition: background 0.2s;
252
+ padding: 0.1rem 0.3rem;
253
+ margin: 0 -0.3rem;
254
+ border-radius: 4px;
441
255
  }
442
256
 
443
- .terminal-line:hover { background: rgba(255,255,255,0.04); }
257
+ .terminal-line:hover { background: rgba(255,255,255,0.05); }
444
258
 
445
- .terminal-prompt { color: var(--accent); user-select: none; }
446
- .terminal-cmd { color: var(--green); }
259
+ .terminal-prompt { color: #60a5fa; user-select: none; }
260
+ .terminal-cmd { color: #86efac; }
447
261
 
448
262
  .terminal-output {
449
- color: var(--text-dim);
450
- font-size: 0.8rem;
451
- padding-left: 1.1rem;
452
- margin-top: 0.15rem;
263
+ color: rgba(255,255,255,0.45);
264
+ font-size: 0.78rem;
265
+ padding-left: 1rem;
266
+ margin-top: 0.1rem;
453
267
  }
454
268
 
455
- .terminal-output a {
456
- color: var(--cyan);
457
- text-decoration: none;
458
- }
269
+ .terminal-output a { color: #67e8f9; text-decoration: none; }
459
270
 
460
271
  .terminal-copy-toast {
461
272
  position: fixed;
462
273
  bottom: 2rem;
463
274
  left: 50%;
464
275
  transform: translateX(-50%) translateY(20px);
465
- background: var(--accent);
276
+ background: var(--text);
466
277
  color: #fff;
467
278
  padding: 0.5rem 1.25rem;
468
279
  border-radius: 8px;
@@ -482,119 +293,36 @@
482
293
 
483
294
  /* ── Showcase ── */
484
295
  .showcase {
485
- max-width: 1000px;
486
- margin: 6rem auto 0;
296
+ max-width: 960px;
297
+ margin: 4rem auto 0;
487
298
  padding: 0 2rem;
488
- position: relative;
489
299
  display: grid;
490
300
  grid-template-columns: 5fr 2fr;
491
301
  align-items: end;
492
- gap: 2rem;
493
- animation: fadeInUp 1s ease-out 0.6s both;
494
- overflow: hidden;
495
- }
496
-
497
- .showcase::before {
498
- content: '';
499
- position: absolute;
500
- top: 50%;
501
- left: 50%;
502
- transform: translate(-50%, -50%);
503
- width: 100%;
504
- height: 100%;
505
- background:
506
- radial-gradient(ellipse at 35% 50%, rgba(59,130,246,0.12) 0%, transparent 55%),
507
- radial-gradient(ellipse at 65% 50%, rgba(245,158,11,0.08) 0%, transparent 55%);
508
- pointer-events: none;
509
- z-index: 0;
510
- filter: blur(60px);
511
- will-change: transform;
512
- }
513
-
514
- /* Subtle connecting line between devices */
515
- .showcase::after {
516
- content: '';
517
- position: absolute;
518
- top: 50%;
519
- left: 50%;
520
- transform: translate(-50%, -50%);
521
- width: 1px;
522
- height: 35%;
523
- background: linear-gradient(180deg, transparent, rgba(59,130,246,0.2), rgba(245,158,11,0.2), transparent);
524
- pointer-events: none;
525
- z-index: 0;
526
- }
527
-
528
- .device {
529
- position: relative;
530
- transition: transform 0.5s cubic-bezier(0.25, 0.46, 0.45, 0.94);
531
- }
532
-
533
- .device:hover {
534
- transform: translateY(-8px);
535
- }
536
-
537
- .device img, .device picture { display: block; width: 100%; height: auto; }
538
-
539
- .device-ipad {
540
- width: 100%;
541
- z-index: 1;
542
- transform: rotate(-1deg);
543
- }
544
-
545
- .device-ipad:hover {
546
- transform: rotate(-1deg) translateY(-8px);
547
- }
548
-
549
- .device-ipad img {
550
- border-radius: 0;
551
- box-shadow: none;
302
+ gap: 1.5rem;
552
303
  }
553
304
 
554
- .device-iphone {
555
- width: 90%;
556
- z-index: 2;
557
- justify-self: center;
558
- align-self: center;
559
- transform: rotate(2deg);
560
- }
305
+ .device img { display: block; width: 100%; height: auto; }
561
306
 
562
- .device-iphone:hover {
563
- transform: rotate(2deg) translateY(-8px);
564
- }
307
+ .device-ipad { z-index: 1; }
565
308
 
566
- .device-iphone img {
567
- border-radius: 12%;
568
- box-shadow:
569
- 0 45px 100px rgba(0,0,0,0.55),
570
- 0 15px 50px rgba(0,0,0,0.35),
571
- 0 0 80px rgba(245,158,11,0.08);
572
- }
573
-
574
- /* ── iPad Carousel ── */
575
309
  .ipad-carousel {
576
310
  position: relative;
577
311
  width: 100%;
578
312
  overflow: hidden;
579
313
  border-radius: 4.2%;
580
- box-shadow:
581
- 0 40px 100px rgba(0,0,0,0.5),
582
- 0 15px 50px rgba(0,0,0,0.3),
583
- 0 0 80px rgba(59,130,246,0.08);
314
+ box-shadow: 0 8px 40px rgba(0,0,0,0.1);
315
+ border: 1px solid var(--border);
584
316
  }
585
317
 
586
- .carousel-track {
587
- position: relative;
588
- width: 100%;
589
- }
318
+ .carousel-track { position: relative; width: 100%; }
590
319
 
591
320
  .carousel-slide {
592
321
  position: absolute;
593
- top: 0;
594
- left: 0;
322
+ top: 0; left: 0;
595
323
  width: 100%;
596
324
  opacity: 0;
597
- transition: opacity 0.6s ease;
325
+ transition: opacity 0.5s ease;
598
326
  pointer-events: none;
599
327
  }
600
328
 
@@ -604,469 +332,223 @@
604
332
  pointer-events: auto;
605
333
  }
606
334
 
607
- .carousel-slide img {
608
- display: block;
609
- width: 100%;
610
- height: auto;
611
- border-radius: 0;
612
- box-shadow: none;
613
- }
335
+ .carousel-slide img { display: block; width: 100%; height: auto; }
614
336
 
615
337
  .carousel-dots {
616
338
  position: absolute;
617
- bottom: 12px;
339
+ bottom: 10px;
618
340
  left: 50%;
619
341
  transform: translateX(-50%);
620
342
  display: flex;
621
- gap: 8px;
343
+ gap: 6px;
622
344
  z-index: 5;
623
345
  }
624
346
 
625
347
  .carousel-dot {
626
- width: 8px;
627
- height: 8px;
348
+ width: 7px; height: 7px;
628
349
  border-radius: 50%;
629
350
  border: none;
630
- background: rgba(255,255,255,0.4);
351
+ background: rgba(255,255,255,0.45);
631
352
  cursor: pointer;
632
353
  padding: 0;
633
- transition: background 0.3s ease, transform 0.3s ease;
634
354
  }
635
355
 
636
- .carousel-dot.active {
637
- background: rgba(255,255,255,0.9);
638
- transform: scale(1.2);
639
- }
640
-
641
- .carousel-dot:hover {
642
- background: rgba(255,255,255,0.7);
643
- }
356
+ .carousel-dot.active { background: rgba(255,255,255,0.9); }
644
357
 
645
358
  .carousel-label {
646
359
  position: absolute;
647
- top: 16px;
648
- left: 16px;
360
+ top: 12px; left: 12px;
649
361
  display: flex;
650
362
  flex-direction: column;
651
- gap: 2px;
652
- background: rgba(0,0,0,0.75);
653
- padding: 8px 14px;
654
- border-radius: 10px;
363
+ gap: 1px;
364
+ background: rgba(0,0,0,0.65);
365
+ padding: 6px 12px;
366
+ border-radius: 8px;
655
367
  z-index: 4;
656
368
  pointer-events: none;
657
369
  }
658
370
 
659
- .carousel-label-title {
660
- font-size: 0.95rem;
661
- font-weight: 700;
662
- color: #fff;
663
- letter-spacing: 0.02em;
371
+ .carousel-label-title { font-size: 0.85rem; font-weight: 700; color: #fff; }
372
+ .carousel-label-desc { font-size: 0.65rem; color: rgba(255,255,255,0.7); }
373
+
374
+ .device-iphone {
375
+ width: 90%;
376
+ z-index: 2;
377
+ justify-self: center;
378
+ align-self: center;
664
379
  }
665
380
 
666
- .carousel-label-desc {
667
- font-size: 0.72rem;
668
- color: rgba(255,255,255,0.75);
669
- font-weight: 400;
381
+ .device-iphone img {
382
+ border-radius: 12%;
383
+ box-shadow: 0 8px 40px rgba(0,0,0,0.12);
670
384
  }
671
385
 
672
386
  /* ── Divider ── */
673
- .section-divider {
674
- max-width: 200px;
675
- margin: 6rem auto;
387
+ .divider {
388
+ max-width: 80px;
389
+ margin: 5rem auto;
676
390
  height: 1px;
677
- background: linear-gradient(90deg, transparent, var(--border-hover), transparent);
391
+ background: var(--border);
678
392
  }
679
393
 
680
- /* ── Bento Grid ── */
681
- .bento {
682
- max-width: 1000px;
683
- margin: 6rem auto;
394
+ /* ── Features ── */
395
+ .features {
396
+ max-width: 960px;
397
+ margin: 0 auto;
684
398
  padding: 0 2rem;
685
399
  display: grid;
686
400
  grid-template-columns: repeat(3, 1fr);
687
- grid-auto-rows: minmax(200px, auto);
688
- gap: 1rem;
401
+ gap: 1.5rem;
689
402
  }
690
403
 
691
- .bento-card {
404
+ .feature-card {
692
405
  background: var(--surface);
693
406
  border: 1px solid var(--border);
694
- border-radius: 20px;
695
- padding: 2rem;
696
- position: relative;
697
- overflow: hidden;
698
- transition: all 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94);
699
- display: flex;
700
- flex-direction: column;
701
- justify-content: flex-end;
702
- }
703
-
704
- .bento-card:hover {
705
- border-color: var(--border-hover);
706
- background: var(--surface-hover);
707
- transform: translateY(-4px);
708
- box-shadow: 0 20px 60px rgba(0,0,0,0.3);
407
+ border-radius: 14px;
408
+ padding: 1.75rem;
709
409
  }
710
410
 
711
- .bento-card.wide { grid-column: span 2; }
712
- .bento-card.tall { grid-row: span 2; }
713
-
714
- .bento-visual {
715
- flex: 1;
716
- display: flex;
717
- align-items: center;
718
- justify-content: center;
719
- margin-bottom: 1.5rem;
720
- position: relative;
721
- }
411
+ .feature-card.wide { grid-column: span 2; }
722
412
 
723
- .bento-icon {
724
- width: 56px; height: 56px;
725
- border-radius: 16px;
413
+ .feature-icon {
414
+ width: 40px; height: 40px;
415
+ border-radius: 10px;
726
416
  display: flex;
727
417
  align-items: center;
728
418
  justify-content: center;
729
- font-size: 1.5rem;
419
+ margin-bottom: 1rem;
420
+ background: var(--accent-light);
421
+ color: var(--accent);
730
422
  }
731
423
 
732
- .bento-icon.purple { background: linear-gradient(135deg, rgba(59,130,246,0.2), rgba(59,130,246,0.05)); color: var(--accent); }
733
- .bento-icon.rose { background: linear-gradient(135deg, rgba(244,63,94,0.2), rgba(244,63,94,0.05)); color: var(--rose); }
734
- .bento-icon.cyan { background: linear-gradient(135deg, rgba(34,211,238,0.2), rgba(34,211,238,0.05)); color: var(--cyan); }
735
- .bento-icon.green { background: linear-gradient(135deg, rgba(52,211,153,0.2), rgba(52,211,153,0.05)); color: var(--green); }
736
- .bento-icon.amber { background: linear-gradient(135deg, rgba(245,158,11,0.2), rgba(245,158,11,0.05)); color: var(--amber); }
737
- .bento-icon.blue { background: linear-gradient(135deg, rgba(96,165,250,0.2), rgba(96,165,250,0.05)); color: var(--blue); }
424
+ .feature-icon svg { width: 20px; height: 20px; stroke: currentColor; fill: none; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
738
425
 
739
- /* Mode toggle visual */
740
- .mode-toggle {
741
- display: flex;
742
- gap: 0;
743
- background: rgba(255,255,255,0.04);
744
- border: 1px solid var(--border);
745
- border-radius: 12px;
746
- overflow: hidden;
747
- }
426
+ .feature-icon.green { background: #f0fdf4; color: #16a34a; }
427
+ .feature-icon.cyan { background: #ecfeff; color: #0891b2; }
428
+ .feature-icon.amber { background: #fffbeb; color: #d97706; }
748
429
 
749
- .mode-toggle-item {
750
- flex: 1;
751
- text-align: center;
752
- padding: 0.7rem 1rem;
753
- position: relative;
754
- transition: all 0.3s;
430
+ .feature-card h3 {
431
+ font-size: 0.95rem;
432
+ font-weight: 600;
433
+ margin-bottom: 0.3rem;
755
434
  }
756
435
 
757
- .mode-toggle-item:not(:last-child) {
758
- border-right: 1px solid var(--border);
436
+ .feature-card p {
437
+ font-size: 0.85rem;
438
+ color: var(--text-secondary);
439
+ line-height: 1.55;
759
440
  }
760
441
 
761
- .mode-toggle-item.active {
762
- background: rgba(59,130,246,0.12);
442
+ /* Mode visual for wide card */
443
+ .mode-pills {
444
+ display: flex;
445
+ gap: 0.5rem;
446
+ margin-bottom: 1rem;
763
447
  }
764
448
 
765
- .mode-toggle-item .mode-icon {
766
- width: 32px; height: 32px;
767
- margin: 0 auto 0.4rem;
768
- border-radius: 8px;
449
+ .mode-pill {
769
450
  display: flex;
770
451
  align-items: center;
771
- justify-content: center;
772
- }
773
-
774
- .mode-toggle-item .mode-icon svg { width: 18px; height: 18px; }
775
-
776
- .mode-toggle-item .mode-icon.chat-icon { background: rgba(59,130,246,0.15); color: var(--accent); }
777
- .mode-toggle-item .mode-icon.team-icon { background: rgba(96,165,250,0.15); color: var(--blue); }
778
- .mode-toggle-item .mode-icon.loop-icon { background: rgba(52,211,153,0.15); color: var(--green); }
779
-
780
- .mode-toggle-item .mode-name {
781
- font-size: 0.8rem;
782
- font-weight: 600;
783
- margin-bottom: 0.2rem;
452
+ gap: 0.35rem;
453
+ padding: 0.4rem 0.75rem;
454
+ border-radius: 8px;
455
+ font-size: 0.78rem;
456
+ font-weight: 500;
457
+ background: #fff;
458
+ border: 1px solid var(--border);
784
459
  color: var(--text);
785
460
  }
786
461
 
787
- .mode-toggle-item .mode-desc {
788
- font-size: 0.68rem;
789
- color: var(--text-dim);
790
- line-height: 1.4;
791
- }
462
+ .mode-pill svg { width: 14px; height: 14px; stroke: currentColor; fill: none; stroke-width: 2; }
463
+ .mode-pill.active { background: var(--accent-light); border-color: #bfdbfe; color: var(--accent); }
792
464
 
793
- /* Encryption visual */
465
+ /* Encrypt visual */
794
466
  .encrypt-visual {
795
467
  display: flex;
796
468
  align-items: center;
797
- gap: 0.75rem;
469
+ gap: 0.5rem;
798
470
  font-family: 'JetBrains Mono', monospace;
799
471
  font-size: 0.72rem;
800
- color: var(--text-dim);
472
+ color: var(--text-secondary);
473
+ margin-bottom: 1rem;
801
474
  }
802
475
 
803
476
  .encrypt-block {
804
- padding: 0.4rem 0.7rem;
805
- border-radius: 8px;
806
- background: rgba(255,255,255,0.04);
807
- border: 1px solid var(--border);
808
- white-space: nowrap;
809
- }
810
-
811
- .encrypt-arrow { color: var(--accent); font-size: 1rem; }
812
-
813
- .encrypt-block.locked {
814
- color: var(--green);
815
- border-color: rgba(52,211,153,0.2);
816
- background: rgba(52,211,153,0.05);
817
- }
818
-
819
- /* Device flow visual */
820
- .device-flow {
821
- display: flex;
822
- align-items: center;
823
- gap: 1rem;
824
- }
825
-
826
- .device-pill {
827
- display: flex;
828
- align-items: center;
829
- gap: 0.4rem;
830
- padding: 0.5rem 0.8rem;
831
- border-radius: 10px;
832
- background: rgba(255,255,255,0.04);
833
- border: 1px solid var(--border);
834
- font-size: 0.75rem;
835
- color: var(--text-mid);
836
- }
837
-
838
- .device-pill svg { width: 14px; height: 14px; fill: currentColor; opacity: 0.6; }
839
-
840
- .flow-line {
841
- flex: 1;
842
- height: 1px;
843
- background: linear-gradient(90deg, var(--border-hover), transparent);
844
- position: relative;
845
- }
846
-
847
- .flow-line::after {
848
- content: '';
849
- position: absolute;
850
- right: 0; top: -2px;
851
- width: 5px; height: 5px;
852
- border-radius: 50%;
853
- background: var(--accent);
854
- box-shadow: 0 0 8px var(--accent-glow);
855
- animation: flowPulse 2s ease-in-out infinite;
856
- }
857
-
858
- @keyframes flowPulse {
859
- 0%, 100% { opacity: 0.4; }
860
- 50% { opacity: 1; }
861
- }
862
-
863
- .bento-card h3 {
864
- font-size: 1.05rem;
865
- font-weight: 600;
866
- margin-bottom: 0.4rem;
867
- letter-spacing: -0.01em;
868
- }
869
-
870
- .bento-card p {
871
- font-size: 0.85rem;
872
- color: var(--text-dim);
873
- line-height: 1.55;
874
- }
875
-
876
- /* ── How It Works ── */
877
- .workflow {
878
- max-width: 700px;
879
- margin: 0 auto 6rem;
880
- padding: 0 2rem;
881
- }
882
-
883
- .workflow-label {
884
- font-size: 0.7rem;
885
- font-weight: 600;
886
- letter-spacing: 0.15em;
887
- text-transform: uppercase;
888
- color: var(--accent);
889
- text-align: center;
890
- margin-bottom: 1.5rem;
891
- }
892
-
893
- .workflow h2 {
894
- font-size: clamp(1.6rem, 3.5vw, 2.2rem);
895
- font-weight: 700;
896
- text-align: center;
897
- letter-spacing: -0.03em;
898
- margin-bottom: 3rem;
899
- }
900
-
901
- .workflow-steps {
902
- position: relative;
903
- display: flex;
904
- flex-direction: column;
905
- gap: 0;
906
- }
907
-
908
- .workflow-steps::before {
909
- content: '';
910
- position: absolute;
911
- left: 23px;
912
- top: 48px;
913
- bottom: 48px;
914
- width: 1px;
915
- background: linear-gradient(180deg, var(--accent), var(--cyan), var(--green));
916
- opacity: 0.3;
917
- }
918
-
919
- .workflow-step {
920
- display: flex;
921
- align-items: flex-start;
922
- gap: 1.5rem;
923
- padding: 1.5rem 0;
924
- position: relative;
925
- }
926
-
927
- .step-marker {
928
- width: 48px; height: 48px;
929
- border-radius: 14px;
930
- display: flex;
931
- align-items: center;
932
- justify-content: center;
933
- flex-shrink: 0;
934
- font-size: 1.1rem;
935
- background: var(--surface);
477
+ padding: 0.3rem 0.6rem;
478
+ border-radius: 6px;
479
+ background: #fff;
936
480
  border: 1px solid var(--border);
937
- position: relative;
938
- z-index: 1;
939
- }
940
-
941
- .workflow-step:nth-child(1) .step-marker { border-color: rgba(59,130,246,0.3); }
942
- .workflow-step:nth-child(2) .step-marker { border-color: rgba(34,211,238,0.3); }
943
- .workflow-step:nth-child(3) .step-marker { border-color: rgba(52,211,153,0.3); }
944
-
945
- .step-content h3 {
946
- font-size: 1rem;
947
- font-weight: 600;
948
- margin-bottom: 0.35rem;
949
- letter-spacing: -0.01em;
950
481
  }
951
482
 
952
- .step-content p {
953
- font-size: 0.88rem;
954
- color: var(--text-dim);
955
- line-height: 1.6;
956
- }
957
-
958
- .step-content code {
959
- font-family: 'JetBrains Mono', monospace;
960
- font-size: 0.8rem;
961
- color: var(--green);
962
- background: rgba(52,211,153,0.08);
963
- padding: 0.15rem 0.45rem;
964
- border-radius: 5px;
965
- border: 1px solid rgba(52,211,153,0.12);
966
- }
483
+ .encrypt-arrow { color: var(--accent); }
484
+ .encrypt-block.locked { color: #16a34a; border-color: #bbf7d0; background: #f0fdf4; }
967
485
 
968
486
  /* ── Footer ── */
969
487
  footer {
970
488
  text-align: center;
971
489
  padding: 3rem 2rem;
972
- color: var(--text-dim);
490
+ color: var(--text-secondary);
973
491
  font-size: 0.8rem;
974
- position: relative;
975
- }
976
-
977
- footer::before {
978
- content: '';
979
- display: block;
980
- max-width: 200px;
981
- margin: 0 auto 2rem;
982
- height: 1px;
983
- background: linear-gradient(90deg, transparent, var(--border-hover), transparent);
492
+ border-top: 1px solid var(--border);
493
+ margin-top: 5rem;
984
494
  }
985
495
 
986
- footer a {
987
- color: var(--text-mid);
988
- text-decoration: none;
989
- transition: color 0.3s;
990
- }
991
-
992
- footer a:hover { color: var(--text); }
993
-
994
496
  .footer-links {
995
497
  display: flex;
996
498
  align-items: center;
997
499
  justify-content: center;
998
500
  gap: 1.5rem;
999
- margin-bottom: 1rem;
501
+ margin-bottom: 0.75rem;
1000
502
  }
1001
503
 
1002
- .footer-brand {
1003
- font-weight: 600;
1004
- letter-spacing: -0.02em;
504
+ .footer-brand { font-weight: 600; color: var(--text); }
505
+
506
+ footer a {
507
+ color: var(--text-secondary);
508
+ text-decoration: none;
1005
509
  }
1006
510
 
511
+ footer a:hover { color: var(--text); }
512
+
1007
513
  /* ── Responsive ── */
1008
514
  @media (max-width: 768px) {
1009
- .bento {
1010
- grid-template-columns: 1fr;
1011
- }
1012
- .bento-card.wide { grid-column: span 1; }
1013
- .bento-card.tall { grid-row: span 1; }
1014
- .hero { padding: 5rem 1.5rem 3rem; }
515
+ .features { grid-template-columns: 1fr; }
516
+ .feature-card.wide { grid-column: span 1; }
517
+ .hero { padding: 4rem 1.5rem 2rem; }
1015
518
  .cta-group { flex-direction: column; }
1016
- .nav-links { gap: 1rem; }
519
+ .nav-links { gap: 0.75rem; }
1017
520
  .nav-links a:not(.nav-gh):not(.nav-lang) { display: none; }
1018
- .encrypt-visual { flex-wrap: wrap; justify-content: center; gap: 0.5rem; }
521
+ .encrypt-visual { flex-wrap: wrap; justify-content: flex-start; gap: 0.4rem; }
1019
522
  .encrypt-visual .encrypt-arrow { display: none; }
1020
- .encrypt-block { font-size: 0.65rem; }
1021
- .device-flow { flex-wrap: wrap; justify-content: center; gap: 0.6rem; }
1022
- .device-flow .flow-line { display: none; }
1023
- .device-pill { font-size: 0.7rem; }
523
+ .mode-pills { flex-wrap: wrap; }
1024
524
  }
1025
525
 
1026
526
  @media (max-width: 640px) {
1027
527
  nav { padding: 1rem 1.25rem; }
1028
528
  .showcase {
1029
- margin-top: 3rem;
1030
529
  display: flex;
1031
530
  justify-content: center;
1032
531
  align-items: flex-end;
1033
532
  gap: 0;
533
+ margin-top: 3rem;
1034
534
  }
1035
- .showcase::after { display: none; }
1036
- .device-ipad {
1037
- width: 78%;
1038
- transform: rotate(0deg);
1039
- flex-shrink: 0;
1040
- }
1041
- .device-ipad:hover { transform: translateY(-8px); }
535
+ .device-ipad { width: 78%; flex-shrink: 0; }
1042
536
  .device-iphone {
1043
537
  width: 28%;
1044
- transform: rotate(0deg) translateY(5%);
538
+ transform: translateY(5%);
1045
539
  margin-left: -12%;
1046
540
  flex-shrink: 0;
1047
- justify-self: auto;
1048
- align-self: auto;
1049
541
  }
1050
- .device-iphone:hover { transform: translateY(-3%); }
1051
- .carousel-dots { bottom: 8px; gap: 6px; }
542
+ .carousel-dots { bottom: 6px; gap: 5px; }
1052
543
  .carousel-dot { width: 6px; height: 6px; }
1053
- .carousel-label { top: 8px; left: 8px; padding: 5px 10px; border-radius: 8px; }
1054
- .carousel-label-title { font-size: 0.8rem; }
1055
- .carousel-label-desc { font-size: 0.62rem; }
1056
- .terminal { margin: 0 1rem; max-width: calc(100vw - 2rem); }
1057
- .terminal-body { padding: 1rem; font-size: 0.75rem; overflow-x: auto; }
1058
- .terminal-line { gap: 0.4rem; white-space: nowrap; }
1059
- .terminal-output { font-size: 0.7rem; padding-left: 0.9rem; }
1060
- .section-divider { margin: 4rem auto; }
1061
- .bento { padding: 0 1rem; margin: 4rem auto; }
1062
- .bento-card { padding: 1.5rem; border-radius: 16px; overflow: visible; }
1063
- .encrypt-visual { gap: 0.4rem; }
1064
- .encrypt-block { padding: 0.3rem 0.5rem; font-size: 0.6rem; }
1065
- .device-flow { gap: 0.5rem; }
1066
- .device-pill { padding: 0.4rem 0.6rem; font-size: 0.65rem; }
1067
- .workflow-step { gap: 1rem; }
1068
- .step-marker { width: 40px; height: 40px; border-radius: 12px; font-size: 1rem; }
1069
- .workflow-steps::before { left: 19px; }
544
+ .carousel-label { top: 8px; left: 8px; padding: 4px 8px; }
545
+ .carousel-label-title { font-size: 0.75rem; }
546
+ .carousel-label-desc { font-size: 0.58rem; }
547
+ .terminal { margin: 0 1rem; }
548
+ .terminal-body { padding: 0.75rem 1rem; font-size: 0.75rem; overflow-x: auto; }
549
+ .features { padding: 0 1rem; }
550
+ .feature-card { padding: 1.25rem; }
551
+ .divider { margin: 3.5rem auto; }
1070
552
  }
1071
553
 
1072
554
  .sr-only {
@@ -1082,26 +564,14 @@
1082
564
  </head>
1083
565
  <body>
1084
566
 
1085
- <!-- Ambient background -->
1086
- <div class="ambient" aria-hidden="true">
1087
- <div class="ambient-orb"></div>
1088
- <div class="ambient-orb"></div>
1089
- <div class="ambient-orb"></div>
1090
- </div>
1091
- <div class="grain" aria-hidden="true"></div>
1092
-
1093
- <div class="content">
1094
-
1095
- <!-- Nav -->
1096
567
  <header>
1097
568
  <nav>
1098
569
  <div class="logo">
1099
- <img class="logo-mark" src="/favicon.svg" alt="AgenticWorker">
1100
- <div class="logo-text">Agentic<span>Worker</span></div>
570
+ <img src="/favicon.svg" alt="AgenticWorker">
571
+ <span>AgenticWorker</span>
1101
572
  </div>
1102
573
  <div class="nav-links">
1103
574
  <a href="#features">Features</a>
1104
- <a href="#how-it-works">How It Works</a>
1105
575
  <a href="/zh" class="nav-lang">中文</a>
1106
576
  <a href="https://github.com/kailunshi_microsoft/AgenticWorker" target="_blank" rel="noopener" class="nav-gh">
1107
577
  <svg viewBox="0 0 16 16" aria-hidden="true"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"/></svg>
@@ -1119,18 +589,10 @@
1119
589
  <div class="hero-badge-dot"></div>
1120
590
  Open Source &middot; End-to-End Encrypted
1121
591
  </div>
1122
- <h1>
1123
- <span class="line">Control Claude Code.</span>
1124
- <span class="line"><em>From anywhere.</em></span>
1125
- </h1>
1126
- <p class="hero-sub">
1127
- Start Claude Code on your machine. Walk away.
1128
- <strong>Chat, launch agent teams, or schedule tasks</strong> &mdash;
1129
- from your phone, tablet, or any browser. End-to-end encrypted, zero config.
1130
- </p>
592
+ <h1>Remote Control<br><em>for Claude Code.</em></h1>
1131
593
  <div class="cta-group">
1132
594
  <button class="cta-primary" onclick="copyInstall()">
1133
- <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="4 17 10 11 4 5"></polyline><line x1="12" y1="19" x2="20" y2="19"></line></svg>
595
+ <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="4 17 10 11 4 5"></polyline><line x1="12" y1="19" x2="20" y2="19"></line></svg>
1134
596
  Quick Install
1135
597
  </button>
1136
598
  <a href="https://github.com/kailunshi_microsoft/AgenticWorker" target="_blank" rel="noopener" class="cta-secondary">
@@ -1139,7 +601,6 @@
1139
601
  </a>
1140
602
  </div>
1141
603
 
1142
- <!-- Terminal -->
1143
604
  <div class="terminal">
1144
605
  <div class="terminal-bar">
1145
606
  <div class="terminal-dot"></div>
@@ -1202,154 +663,94 @@
1202
663
  </div>
1203
664
  </section>
1204
665
 
1205
- <div class="section-divider"></div>
666
+ <div class="divider"></div>
1206
667
 
1207
- <!-- Bento Features -->
1208
- <section class="bento" id="features">
668
+ <!-- Features -->
669
+ <section class="features" id="features">
1209
670
  <h2 class="sr-only">Features</h2>
1210
671
 
1211
- <!-- Row 1: Chat | Team | Loop (wide) + Any Device -->
1212
- <div class="bento-card wide">
1213
- <div class="bento-visual">
1214
- <div class="mode-toggle">
1215
- <div class="mode-toggle-item active">
1216
- <div class="mode-icon chat-icon">
1217
- <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"></path></svg>
1218
- </div>
1219
- <div class="mode-name">Chat</div>
1220
- <div class="mode-desc">Interactive coding sessions</div>
1221
- </div>
1222
- <div class="mode-toggle-item">
1223
- <div class="mode-icon team-icon">
1224
- <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"></path><circle cx="9" cy="7" r="4"></circle><path d="M23 21v-2a4 4 0 0 0-3-3.87"></path><path d="M16 3.13a4 4 0 0 1 0 7.75"></path></svg>
1225
- </div>
1226
- <div class="mode-name">Team</div>
1227
- <div class="mode-desc">Parallel sub-agents</div>
1228
- </div>
1229
- <div class="mode-toggle-item">
1230
- <div class="mode-icon loop-icon">
1231
- <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="23 4 23 10 17 10"></polyline><polyline points="1 20 1 14 7 14"></polyline><path d="M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15"></path></svg>
1232
- </div>
1233
- <div class="mode-name">Loop</div>
1234
- <div class="mode-desc">Scheduled cron tasks</div>
1235
- </div>
1236
- </div>
672
+ <div class="feature-card wide">
673
+ <div class="mode-pills">
674
+ <span class="mode-pill active">
675
+ <svg viewBox="0 0 24 24"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"></path></svg>
676
+ Chat
677
+ </span>
678
+ <span class="mode-pill">
679
+ <svg viewBox="0 0 24 24"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"></path><circle cx="9" cy="7" r="4"></circle><path d="M23 21v-2a4 4 0 0 0-3-3.87"></path><path d="M16 3.13a4 4 0 0 1 0 7.75"></path></svg>
680
+ Team
681
+ </span>
682
+ <span class="mode-pill">
683
+ <svg viewBox="0 0 24 24"><polyline points="23 4 23 10 17 10"></polyline><polyline points="1 20 1 14 7 14"></polyline><path d="M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15"></path></svg>
684
+ Loop
685
+ </span>
1237
686
  </div>
1238
687
  <h3>Three Modes, One Interface</h3>
1239
688
  <p>Chat with Claude interactively, spawn agent teams for complex tasks, or schedule recurring Loop jobs with cron &mdash; all from the same browser tab.</p>
1240
689
  </div>
1241
690
 
1242
- <div class="bento-card">
1243
- <div class="bento-visual">
1244
- <div class="bento-icon cyan">
1245
- <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="5" y="2" width="14" height="20" rx="2" ry="2"></rect><line x1="12" y1="18" x2="12.01" y2="18"></line></svg>
1246
- </div>
691
+ <div class="feature-card">
692
+ <div class="feature-icon cyan">
693
+ <svg viewBox="0 0 24 24"><rect x="5" y="2" width="14" height="20" rx="2" ry="2"></rect><line x1="12" y1="18" x2="12.01" y2="18"></line></svg>
1247
694
  </div>
1248
695
  <h3>Any Device</h3>
1249
696
  <p>Phone, tablet, laptop &mdash; any browser becomes your Claude Code terminal.</p>
1250
697
  </div>
1251
698
 
1252
- <!-- Row 2: E2E Encryption (wide) + Self-Hostable -->
1253
- <div class="bento-card wide">
1254
- <div class="bento-visual">
1255
- <div class="encrypt-visual">
1256
- <div class="encrypt-block">hello world</div>
1257
- <div class="encrypt-arrow">&rarr;</div>
1258
- <div class="encrypt-block locked">x9f#k2$mQ...</div>
1259
- <div class="encrypt-arrow">&rarr;</div>
1260
- <div class="encrypt-block">hello world</div>
1261
- </div>
699
+ <div class="feature-card wide">
700
+ <div class="encrypt-visual">
701
+ <div class="encrypt-block">hello world</div>
702
+ <div class="encrypt-arrow">&rarr;</div>
703
+ <div class="encrypt-block locked">x9f#k2$mQ...</div>
704
+ <div class="encrypt-arrow">&rarr;</div>
705
+ <div class="encrypt-block">hello world</div>
1262
706
  </div>
1263
707
  <h3>End-to-End Encrypted</h3>
1264
- <p>XSalsa20-Poly1305 encryption. The relay server is a blind forwarder &mdash; it never sees your code, your prompts, or your data.</p>
708
+ <p>XSalsa20-Poly1305 encryption. The relay server is a blind forwarder &mdash; it never sees your code, prompts, or data.</p>
1265
709
  </div>
1266
710
 
1267
- <div class="bento-card">
1268
- <div class="bento-visual">
1269
- <div class="bento-icon green">
1270
- <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="2" width="20" height="8" rx="2" ry="2"></rect><rect x="2" y="14" width="20" height="8" rx="2" ry="2"></rect><line x1="6" y1="6" x2="6.01" y2="6"></line><line x1="6" y1="18" x2="6.01" y2="18"></line></svg>
1271
- </div>
711
+ <div class="feature-card">
712
+ <div class="feature-icon green">
713
+ <svg viewBox="0 0 24 24"><rect x="2" y="2" width="20" height="8" rx="2" ry="2"></rect><rect x="2" y="14" width="20" height="8" rx="2" ry="2"></rect><line x1="6" y1="6" x2="6.01" y2="6"></line><line x1="6" y1="18" x2="6.01" y2="18"></line></svg>
1272
714
  </div>
1273
715
  <h3>Self-Hostable</h3>
1274
716
  <p>Run your own relay server. Your infrastructure, your rules, your data.</p>
1275
717
  </div>
1276
718
 
1277
- <!-- Row 3: Multi-Agent Teams + Multi Session + Zero Config -->
1278
- <div class="bento-card">
1279
- <div class="bento-visual">
1280
- <div class="bento-icon blue">
1281
- <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"></path><circle cx="9" cy="7" r="4"></circle><path d="M23 21v-2a4 4 0 0 0-3-3.87"></path><path d="M16 3.13a4 4 0 0 1 0 7.75"></path></svg>
1282
- </div>
719
+ <div class="feature-card">
720
+ <div class="feature-icon">
721
+ <svg viewBox="0 0 24 24"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"></path><circle cx="9" cy="7" r="4"></circle><path d="M23 21v-2a4 4 0 0 0-3-3.87"></path><path d="M16 3.13a4 4 0 0 1 0 7.75"></path></svg>
1283
722
  </div>
1284
723
  <h3>Multi-Agent Teams</h3>
1285
724
  <p>Spawn parallel Claude subagents to tackle complex tasks. Live kanban board, activity feed, and team history.</p>
1286
725
  </div>
1287
726
 
1288
- <div class="bento-card">
1289
- <div class="bento-visual">
1290
- <div class="bento-icon blue">
1291
- <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="3" width="8" height="8" rx="1.5"></rect><rect x="14" y="3" width="8" height="8" rx="1.5"></rect><rect x="2" y="13" width="8" height="8" rx="1.5"></rect><rect x="14" y="13" width="8" height="8" rx="1.5"></rect></svg>
1292
- </div>
727
+ <div class="feature-card">
728
+ <div class="feature-icon">
729
+ <svg viewBox="0 0 24 24"><rect x="2" y="3" width="8" height="8" rx="1.5"></rect><rect x="14" y="3" width="8" height="8" rx="1.5"></rect><rect x="2" y="13" width="8" height="8" rx="1.5"></rect><rect x="14" y="13" width="8" height="8" rx="1.5"></rect></svg>
1293
730
  </div>
1294
731
  <h3>Multi Session</h3>
1295
732
  <p>Run multiple conversations in parallel. Switch between tasks without losing context.</p>
1296
733
  </div>
1297
734
 
1298
- <div class="bento-card">
1299
- <div class="bento-visual">
1300
- <div class="bento-icon purple">
1301
- <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"></polygon></svg>
1302
- </div>
735
+ <div class="feature-card">
736
+ <div class="feature-icon amber">
737
+ <svg viewBox="0 0 24 24"><polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"></polygon></svg>
1303
738
  </div>
1304
739
  <h3>Zero Config</h3>
1305
740
  <p>No accounts. No registration. Install, start, open &mdash; done.</p>
1306
741
  </div>
1307
742
  </section>
1308
743
 
1309
- <div class="section-divider"></div>
1310
-
1311
- <!-- How It Works -->
1312
- <section class="workflow" id="how-it-works">
1313
- <div class="workflow-label">How It Works</div>
1314
- <h2>Three steps. That's it.</h2>
1315
- <div class="workflow-steps">
1316
- <div class="workflow-step">
1317
- <div class="step-marker">01</div>
1318
- <div class="step-content">
1319
- <h3>Start the agent</h3>
1320
- <p>Run <code>agentlink-client start -D</code> in your project directory. It prints a unique session URL.</p>
1321
- </div>
1322
- </div>
1323
- <div class="workflow-step">
1324
- <div class="step-marker">02</div>
1325
- <div class="step-content">
1326
- <h3>Open the URL, anywhere</h3>
1327
- <p>Phone, tablet, a friend's laptop &mdash; any browser works. Traffic is end-to-end encrypted automatically; the relay never sees your data.</p>
1328
- </div>
1329
- </div>
1330
- <div class="workflow-step">
1331
- <div class="step-marker">03</div>
1332
- <div class="step-content">
1333
- <h3>Chat, collaborate, automate</h3>
1334
- <p>Run interactive sessions, spawn agent teams for complex tasks, or set up scheduled Loop jobs &mdash; all from the same URL, with full history preserved.</p>
1335
- </div>
1336
- </div>
1337
- </div>
1338
- </section>
1339
-
1340
744
  </main>
1341
745
 
1342
746
  <footer>
1343
747
  <div class="footer-links">
1344
748
  <span class="footer-brand">AgenticWorker</span>
1345
749
  <a href="https://github.com/kailunshi_microsoft/AgenticWorker" rel="noopener">GitHub</a>
750
+ <a href="https://www.linkedin.com/in/shikailun/" rel="noopener">LinkedIn</a>
1346
751
  </div>
1347
- <p>Open source. Free forever. Built for developers who ship from anywhere.</p>
1348
752
  </footer>
1349
753
 
1350
- </div>
1351
-
1352
- <!-- Toast for copy -->
1353
754
  <div class="terminal-copy-toast" id="copyToast">Copied to clipboard</div>
1354
755
 
1355
756
  <script>
@@ -1401,13 +802,11 @@ function showToast() {
1401
802
  });
1402
803
  });
1403
804
 
1404
- // Touch/swipe support
1405
805
  const track = document.querySelector('.ipad-carousel');
1406
- let startX = 0, startY = 0, dragging = false;
806
+ let startX = 0, dragging = false;
1407
807
 
1408
808
  track.addEventListener('touchstart', e => {
1409
809
  startX = e.touches[0].clientX;
1410
- startY = e.touches[0].clientY;
1411
810
  dragging = true;
1412
811
  }, { passive: true });
1413
812
 
@@ -1415,14 +814,12 @@ function showToast() {
1415
814
  if (!dragging) return;
1416
815
  dragging = false;
1417
816
  const dx = e.changedTouches[0].clientX - startX;
1418
- const dy = e.changedTouches[0].clientY - startY;
1419
- if (Math.abs(dx) > 50 && Math.abs(dx) > Math.abs(dy)) {
817
+ if (Math.abs(dx) > 50) {
1420
818
  goTo(dx < 0 ? current + 1 : current - 1);
1421
819
  resetAuto();
1422
820
  }
1423
821
  }, { passive: true });
1424
822
 
1425
- // Mouse drag support for desktop
1426
823
  track.addEventListener('mousedown', e => {
1427
824
  startX = e.clientX;
1428
825
  dragging = true;