RemiFabre commited on
Commit
7c3d0d5
·
1 Parent(s): 61f606d

Add beautiful landing page with demo video

Browse files
.gitattributes ADDED
@@ -0,0 +1 @@
 
 
1
+ *.mp4 filter=lfs diff=lfs merge=lfs -text
chess_emotions_app/assets/chess_cut.mp4 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:34b5584dc4a97e2b579ea190efb774baf9565cfdfafd86d015a30aab32f713ff
3
+ size 13479093
index.html CHANGED
@@ -1,40 +1,526 @@
1
- <!doctype html>
2
- <html>
3
-
4
  <head>
5
- <meta charset="utf-8" />
6
- <meta name="viewport" content="width=device-width" />
7
- <title> Chess Emotions App </title>
8
- <link rel="stylesheet" href="style.css" />
9
- </head>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11
  <body>
12
- <div class="hero">
13
- <div class="hero-content">
14
- <div class="app-icon">🤖⚡</div>
15
- <h1> Chess Emotions App </h1>
16
- <p class="tagline">Enter your tagline here</p>
17
- </div>
18
- </div>
19
-
20
- <div class="container">
21
- <div class="main-card">
22
- <div class="app-preview">
23
- <div class="preview-image">
24
- <div class="camera-feed">🛠️</div>
25
- </div>
26
- </div>
27
- </div>
28
- </div>
29
-
30
- <div class="footer">
31
- <p>
32
- 🤖 Chess Emotions App •
33
- <a href="https://github.com/pollen-robotics" target="_blank">Pollen Robotics</a> •
34
- <a href="https://huggingface.co/spaces/pollen-robotics/reachy-mini-landing-page#apps" target="_blank">Browse More
35
- Apps</a>
36
- </p>
37
- </div>
38
- </body>
39
 
40
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
 
3
  <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>Chess Emotions - Play chess while Reachy Mini reacts!</title>
7
+ <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
8
+ <style>
9
+ *, *::before, *::after {
10
+ box-sizing: border-box;
11
+ margin: 0;
12
+ padding: 0;
13
+ }
14
+
15
+ :root {
16
+ --background: #F6F6F8;
17
+ --foreground: #333333;
18
+ --card: hsl(0 0% 100%);
19
+ --card-foreground: hsl(240 10% 3.9%);
20
+ --primary: #FF9900;
21
+ --primary-foreground: hsl(0 0% 100%);
22
+ --muted: #E8E8EB;
23
+ --muted-foreground: #878789;
24
+ --border: #E0E0E0;
25
+ }
26
+
27
+ body {
28
+ font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
29
+ background-color: var(--background);
30
+ color: var(--foreground);
31
+ line-height: 1.6;
32
+ min-height: 100vh;
33
+ }
34
+
35
+ .container {
36
+ max-width: 90rem;
37
+ margin: 0 auto;
38
+ padding: 0 1.5rem;
39
+ }
40
+
41
+ /* Hero Section */
42
+ .hero {
43
+ padding: 4rem 0;
44
+ }
45
+
46
+ .hero-grid {
47
+ display: grid;
48
+ grid-template-columns: 1fr;
49
+ gap: 3rem;
50
+ align-items: center;
51
+ }
52
+
53
+ @media (min-width: 768px) {
54
+ .hero-grid {
55
+ grid-template-columns: 3fr 1fr;
56
+ }
57
+ }
58
+
59
+ .hero video {
60
+ width: 100%;
61
+ max-width: 1400px;
62
+ border-radius: 0.5rem;
63
+ box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
64
+ }
65
+
66
+ .hero-content {
67
+ text-align: left;
68
+ }
69
+
70
+ .hero-title-wrapper {
71
+ display: flex;
72
+ align-items: center;
73
+ justify-content: center;
74
+ gap: 1rem;
75
+ margin-bottom: 1.5rem;
76
+ }
77
+
78
+ .hero-emoji {
79
+ font-size: 3.75rem;
80
+ }
81
+
82
+ .hero-title {
83
+ font-size: 3rem;
84
+ font-weight: 700;
85
+ color: var(--foreground);
86
+ }
87
+
88
+ .tags {
89
+ display: flex;
90
+ flex-wrap: wrap;
91
+ justify-content: center;
92
+ gap: 0.5rem;
93
+ margin-bottom: 1.5rem;
94
+ }
95
+
96
+ .tag {
97
+ display: inline-flex;
98
+ align-items: center;
99
+ padding: 0.25rem 0.75rem;
100
+ font-size: 0.75rem;
101
+ font-weight: 500;
102
+ border-radius: 9999px;
103
+ background-color: rgba(255, 153, 0, 0.15);
104
+ color: var(--primary);
105
+ }
106
+
107
+ .hero-description {
108
+ font-size: 1.125rem;
109
+ color: var(--muted-foreground);
110
+ max-width: 600px;
111
+ margin: 0 auto;
112
+ }
113
+
114
+ .hero-description strong {
115
+ color: var(--foreground);
116
+ }
117
+
118
+ /* Technical Section */
119
+ .technical {
120
+ padding: 4rem 0;
121
+ background-color: var(--card);
122
+ }
123
+
124
+ .technical-grid {
125
+ display: grid;
126
+ grid-template-columns: 1fr;
127
+ gap: 4rem;
128
+ align-items: flex-start;
129
+ }
130
+
131
+ @media (min-width: 768px) {
132
+ .technical-grid {
133
+ grid-template-columns: 1fr 1fr;
134
+ }
135
+ }
136
+
137
+ .technical h2 {
138
+ font-size: 1.5rem;
139
+ font-weight: 700;
140
+ color: var(--foreground);
141
+ margin-bottom: 1rem;
142
+ margin-top: 2rem;
143
+ }
144
+
145
+ .steps {
146
+ list-style: none;
147
+ display: flex;
148
+ flex-direction: column;
149
+ gap: 1rem;
150
+ }
151
+
152
+ .step {
153
+ display: flex;
154
+ align-items: flex-start;
155
+ gap: 1rem;
156
+ color: var(--muted-foreground);
157
+ }
158
+
159
+ .step-number {
160
+ display: flex;
161
+ align-items: center;
162
+ justify-content: center;
163
+ min-width: 1.75rem;
164
+ height: 1.75rem;
165
+ border-radius: 9999px;
166
+ background-color: var(--primary);
167
+ color: white;
168
+ font-size: 0.875rem;
169
+ font-weight: 600;
170
+ }
171
+
172
+ .step-content {
173
+ display: flex;
174
+ flex-direction: column;
175
+ gap: 0.25rem;
176
+ }
177
+
178
+ .step-title {
179
+ font-size: 0.875rem;
180
+ font-weight: 600;
181
+ color: var(--foreground);
182
+ }
183
+
184
+ .step-body {
185
+ font-size: 0.875rem;
186
+ color: var(--muted-foreground);
187
+ }
188
+
189
+ .step-body a {
190
+ color: var(--muted-foreground);
191
+ text-decoration: underline;
192
+ transition: color 0.2s;
193
+ }
194
+
195
+ .step-body a:hover {
196
+ color: var(--primary);
197
+ }
198
+
199
+ /* Emotion Table */
200
+ .emotion-section {
201
+ margin-top: 2rem;
202
+ }
203
+
204
+ .emotion-table {
205
+ width: 100%;
206
+ border-collapse: collapse;
207
+ font-size: 0.875rem;
208
+ margin-top: 1rem;
209
+ }
210
 
211
+ .emotion-table th,
212
+ .emotion-table td {
213
+ padding: 0.75rem;
214
+ text-align: left;
215
+ border-bottom: 1px solid var(--border);
216
+ }
217
+
218
+ .emotion-table th {
219
+ font-weight: 600;
220
+ color: var(--foreground);
221
+ background-color: var(--muted);
222
+ }
223
+
224
+ .emotion-table td {
225
+ color: var(--muted-foreground);
226
+ }
227
+
228
+ .emotion-table tr:hover td {
229
+ background-color: rgba(255, 153, 0, 0.05);
230
+ }
231
+
232
+ /* Footer */
233
+ footer {
234
+ background-color: var(--background);
235
+ border-top: 1px solid var(--border);
236
+ padding: 3rem 0;
237
+ }
238
+
239
+ .footer-grid {
240
+ display: grid;
241
+ grid-template-columns: 1fr;
242
+ gap: 2rem;
243
+ margin-bottom: 2rem;
244
+ }
245
+
246
+ @media (min-width: 768px) {
247
+ .footer-grid {
248
+ grid-template-columns: repeat(3, 1fr);
249
+ }
250
+ }
251
+
252
+ .footer-section h4 {
253
+ font-size: 0.875rem;
254
+ font-weight: 600;
255
+ color: var(--foreground);
256
+ margin-bottom: 0.75rem;
257
+ }
258
+
259
+ .footer-section ul {
260
+ list-style: none;
261
+ display: flex;
262
+ flex-direction: column;
263
+ gap: 0.5rem;
264
+ }
265
+
266
+ .footer-section a {
267
+ font-size: 0.875rem;
268
+ color: var(--muted-foreground);
269
+ text-decoration: none;
270
+ transition: color 0.2s;
271
+ }
272
+
273
+ .footer-section a:hover {
274
+ color: var(--primary);
275
+ }
276
+
277
+ .social-links {
278
+ display: flex;
279
+ gap: 0.75rem;
280
+ }
281
+
282
+ .social-link {
283
+ display: flex;
284
+ align-items: center;
285
+ justify-content: center;
286
+ width: 2.25rem;
287
+ height: 2.25rem;
288
+ border-radius: 9999px;
289
+ background-color: var(--muted);
290
+ color: var(--muted-foreground);
291
+ transition: all 0.2s;
292
+ }
293
+
294
+ .social-link:hover {
295
+ background-color: var(--primary);
296
+ color: white;
297
+ }
298
+
299
+ .social-link svg {
300
+ width: 1.25rem;
301
+ height: 1.25rem;
302
+ }
303
+
304
+ .footer-credit {
305
+ font-size: 0.875rem;
306
+ color: var(--muted-foreground);
307
+ text-align: center;
308
+ padding-top: 1.5rem;
309
+ border-top: 1px solid var(--border);
310
+ }
311
+
312
+ .footer-credit a {
313
+ color: var(--foreground);
314
+ font-weight: 600;
315
+ text-decoration: none;
316
+ transition: color 0.2s;
317
+ }
318
+
319
+ .footer-credit a:hover {
320
+ color: var(--primary);
321
+ }
322
+ </style>
323
+ </head>
324
  <body>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
325
 
326
+ <!-- Hero Section -->
327
+ <section class="hero">
328
+ <div class="container">
329
+ <div class="hero-grid">
330
+ <div>
331
+ <video autoplay loop muted playsinline>
332
+ <source src="chess_emotions_app/assets/chess_cut.mp4" type="video/mp4" />
333
+ </video>
334
+ </div>
335
+
336
+ <div class="hero-content">
337
+ <div class="hero-title-wrapper">
338
+ <span class="hero-emoji">♟️</span>
339
+ <h1 class="hero-title">Chess Emotions</h1>
340
+ </div>
341
+
342
+ <div class="tags">
343
+ <span class="tag">chess</span>
344
+ <span class="tag">emotions</span>
345
+ <span class="tag">games</span>
346
+ <span class="tag">Stockfish</span>
347
+ </div>
348
+
349
+ <p class="hero-description">
350
+ <strong>Play chess against Stockfish while Reachy Mini reacts!</strong><br />
351
+ Here's the twist: Reachy is rooting for Stockfish. Make a brilliant move and watch Reachy get nervous. Blunder your queen? Reachy celebrates!
352
+ </p>
353
+ </div>
354
+ </div>
355
+ </div>
356
+ </section>
357
+
358
+ <!-- Technical Section -->
359
+ <section class="technical">
360
+ <div class="container">
361
+ <div class="technical-grid">
362
+ <div>
363
+ <h2>How it works</h2>
364
+ <ol class="steps">
365
+ <li class="step">
366
+ <span class="step-number">1</span>
367
+ <div class="step-content">
368
+ <div class="step-title">Connect Reachy Mini & launch the app</div>
369
+ <div class="step-body">
370
+ Connect to your Reachy Mini, navigate to the "Applications" tab, find "Chess Emotions" and click "Launch" (make sure you already have the <a href="https://hf.co/reachy-mini/#download" target="_blank" rel="noreferrer">dashboard</a> installed).
371
+ </div>
372
+ </div>
373
+ </li>
374
+ <li class="step">
375
+ <span class="step-number">2</span>
376
+ <div class="step-content">
377
+ <div class="step-title">Set the difficulty</div>
378
+ <div class="step-body">Use the ELO slider (800-2800) to adjust Stockfish's strength. Lower ELO means easier games, but Reachy might get bored winning too easily!</div>
379
+ </div>
380
+ </li>
381
+ <li class="step">
382
+ <span class="step-number">3</span>
383
+ <div class="step-content">
384
+ <div class="step-title">Play chess</div>
385
+ <div class="step-body">Drag and drop pieces on the board to make your moves. The evaluation bar shows who's winning. Stockfish responds automatically after each of your moves.</div>
386
+ </div>
387
+ </li>
388
+ <li class="step">
389
+ <span class="step-number">4</span>
390
+ <div class="step-content">
391
+ <div class="step-title">Watch Reachy react</div>
392
+ <div class="step-body">After every move, Reachy evaluates the position and reacts with emotions. Good moves make Reachy worried, blunders make Reachy dance with joy!</div>
393
+ </div>
394
+ </li>
395
+ </ol>
396
+
397
+ <div class="emotion-section">
398
+ <h2>Emotion mapping</h2>
399
+ <table class="emotion-table">
400
+ <thead>
401
+ <tr>
402
+ <th>Your move</th>
403
+ <th>Reachy's reaction</th>
404
+ </tr>
405
+ </thead>
406
+ <tbody>
407
+ <tr>
408
+ <td>Brilliant! (+200cp)</td>
409
+ <td>Scared, anxious</td>
410
+ </tr>
411
+ <tr>
412
+ <td>Good move (+50-200cp)</td>
413
+ <td>Uncomfortable, worried</td>
414
+ </tr>
415
+ <tr>
416
+ <td>Neutral move</td>
417
+ <td>Attentive, watching</td>
418
+ </tr>
419
+ <tr>
420
+ <td>Mistake (-50-200cp)</td>
421
+ <td>Cheerful, hopeful</td>
422
+ </tr>
423
+ <tr>
424
+ <td>Blunder! (-200cp)</td>
425
+ <td>Laughing, dancing!</td>
426
+ </tr>
427
+ <tr>
428
+ <td>You win</td>
429
+ <td>Rage, fury</td>
430
+ </tr>
431
+ <tr>
432
+ <td>Stockfish wins</td>
433
+ <td>Proud celebration!</td>
434
+ </tr>
435
+ </tbody>
436
+ </table>
437
+ </div>
438
+ </div>
439
+
440
+ <div>
441
+ <h2>Features</h2>
442
+ <ol class="steps">
443
+ <li class="step">
444
+ <span class="step-number">1</span>
445
+ <div class="step-content">
446
+ <div class="step-title">Stockfish 16 in your browser</div>
447
+ <div class="step-body">Full chess engine running as WebAssembly - no server needed. Adjustable ELO from beginner to grandmaster level.</div>
448
+ </div>
449
+ </li>
450
+ <li class="step">
451
+ <span class="step-number">2</span>
452
+ <div class="step-content">
453
+ <div class="step-title">Real-time evaluation</div>
454
+ <div class="step-body">Visual evaluation bar shows the position advantage in centipawns. Watch it swing as the game progresses!</div>
455
+ </div>
456
+ </li>
457
+ <li class="step">
458
+ <span class="step-number">3</span>
459
+ <div class="step-content">
460
+ <div class="step-title">Expressive reactions</div>
461
+ <div class="step-body">Reachy uses the emotions library to react with over 20 different expressions, complete with sounds and movements.</div>
462
+ </div>
463
+ </li>
464
+ <li class="step">
465
+ <span class="step-number">4</span>
466
+ <div class="step-content">
467
+ <div class="step-title">Pure browser experience</div>
468
+ <div class="step-body">Chess logic runs entirely in your browser. Reachy's emotions are triggered via REST API calls to the daemon.</div>
469
+ </div>
470
+ </li>
471
+ </ol>
472
+ </div>
473
+ </div>
474
+ </div>
475
+ </section>
476
+
477
+ <!-- Footer -->
478
+ <footer>
479
+ <div class="container">
480
+ <div class="footer-grid">
481
+ <div class="footer-section">
482
+ <h4>Resources</h4>
483
+ <ul>
484
+ <li><a href="https://github.com/pollen-robotics/reachy_mini" target="_blank" rel="noopener noreferrer">Read the Documentation</a></li>
485
+ <li><a href="https://github.com/pollen-robotics/reachy_mini/blob/develop/docs/troubleshooting.md" target="_blank" rel="noopener noreferrer">Troubleshooting & FAQ</a></li>
486
+ </ul>
487
+ </div>
488
+
489
+ <div class="footer-section">
490
+ <h4>Reachy Mini Apps</h4>
491
+ <ul>
492
+ <li><a href="https://hf.co/reachy-mini/#apps" target="_blank" rel="noopener noreferrer">Browse other apps</a></li>
493
+ <li><a href="https://huggingface.co/blog/pollen-robotics/make-and-publish-your-reachy-mini-apps" target="_blank" rel="noopener noreferrer">Make and publish your own app</a></li>
494
+ </ul>
495
+ </div>
496
+
497
+ <div class="footer-section">
498
+ <h4>Follow us</h4>
499
+ <div class="social-links">
500
+ <a href="https://discord.gg/2bAhWfXme9" target="_blank" rel="noopener noreferrer" aria-label="Discord" class="social-link">
501
+ <svg viewBox="0 0 24 24" fill="currentColor"><path d="M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0 12.64 12.64 0 0 0-.617-1.25.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057 19.9 19.9 0 0 0 5.993 3.03.078.078 0 0 0 .084-.028 14.09 14.09 0 0 0 1.226-1.994.076.076 0 0 0-.041-.106 13.107 13.107 0 0 1-1.872-.892.077.077 0 0 1-.008-.128 10.2 10.2 0 0 0 .372-.292.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127 12.299 12.299 0 0 1-1.873.892.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028 19.839 19.839 0 0 0 6.002-3.03.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.956-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.955-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.946 2.418-2.157 2.418z"/></svg>
502
+ </a>
503
+ <a href="https://www.linkedin.com/company/pollen-robotics" target="_blank" rel="noopener noreferrer" aria-label="LinkedIn" class="social-link">
504
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z"/><rect width="4" height="12" x="2" y="9"/><circle cx="4" cy="4" r="2"/></svg>
505
+ </a>
506
+ <a href="https://www.youtube.com/c/pollenrobotics" target="_blank" rel="noopener noreferrer" aria-label="YouTube" class="social-link">
507
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M2.5 17a24.12 24.12 0 0 1 0-10 2 2 0 0 1 1.4-1.4 49.56 49.56 0 0 1 16.2 0A2 2 0 0 1 21.5 7a24.12 24.12 0 0 1 0 10 2 2 0 0 1-1.4 1.4 49.55 49.55 0 0 1-16.2 0A2 2 0 0 1 2.5 17"/><path d="m10 15 5-3-5-3z"/></svg>
508
+ </a>
509
+ <a href="https://github.com/pollen-robotics" target="_blank" rel="noopener noreferrer" aria-label="GitHub" class="social-link">
510
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M15 22v-4a4.8 4.8 0 0 0-1-3.5c3 0 6-2 6-5.5.08-1.25-.27-2.48-1-3.5.28-1.15.28-2.35 0-3.5 0 0-1 0-3 1.5-2.64-.5-5.36-.5-8 0C6 2 5 2 5 2c-.3 1.15-.3 2.35 0 3.5A5.403 5.403 0 0 0 4 9c0 3.5 3 5.5 6 5.5-.39.49-.68 1.05-.85 1.65-.17.6-.22 1.23-.15 1.85v4"/><path d="M9 18c-4.51 2-5-2-7-2"/></svg>
511
+ </a>
512
+ <a href="https://x.com/pollenrobotics" target="_blank" rel="noopener noreferrer" aria-label="X" class="social-link">
513
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M22 4s-.7 2.1-2 3.4c1.6 10-9.4 17.3-18 11.6 2.2.1 4.4-.6 6-2C3 15.5.5 9.6 3 5c2.2 2.6 5.6 4.1 9 4-.9-4.2 4-6.6 7-3.8 1.1 0 3-1.2 3-1.2z"/></svg>
514
+ </a>
515
+ </div>
516
+ </div>
517
+ </div>
518
+
519
+ <div class="footer-credit">
520
+ Proudly brought by <a href="https://www.pollen-robotics.com/" target="_blank" rel="noopener noreferrer">Pollen Robotics</a> x <a href="https://huggingface.co" target="_blank" rel="noopener noreferrer">Hugging Face</a>
521
+ </div>
522
+ </div>
523
+ </footer>
524
+
525
+ </body>
526
+ </html>