wajahatalikhan commited on
Commit
8a8cbaf
·
verified ·
1 Parent(s): 75d3b88

Upload folder using huggingface_hub

Browse files
Files changed (1) hide show
  1. index.html +1073 -19
index.html CHANGED
@@ -1,19 +1,1073 @@
1
- <!doctype html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta name="viewport" content="width=device-width" />
6
- <title>My static Space</title>
7
- <link rel="stylesheet" href="style.css" />
8
- </head>
9
- <body>
10
- <div class="card">
11
- <h1>Welcome to your static Space!</h1>
12
- <p>You can modify this app directly by editing <i>index.html</i> in the Files and versions tab.</p>
13
- <p>
14
- Also don't forget to check the
15
- <a href="https://huggingface.co/docs/hub/spaces" target="_blank">Spaces documentation</a>.
16
- </p>
17
- </div>
18
- </body>
19
- </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>Clone Evolution - The Consumption Game</title>
7
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
8
+ <style>
9
+ * {
10
+ margin: 0;
11
+ padding: 0;
12
+ box-sizing: border-box;
13
+ }
14
+
15
+ :root {
16
+ --primary-color: #6c5ce7;
17
+ --secondary-color: #a29bfe;
18
+ --accent-color: #00cec9;
19
+ --danger-color: #ff7675;
20
+ --success-color: #00b894;
21
+ --dark-bg: #0a0a1a;
22
+ --card-bg: rgba(255, 255, 255, 0.05);
23
+ }
24
+
25
+ body {
26
+ font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
27
+ background: var(--dark-bg);
28
+ min-height: 100vh;
29
+ color: white;
30
+ overflow-x: hidden;
31
+ }
32
+
33
+ header {
34
+ background: linear-gradient(135deg, var(--primary-color), var(--secondary-color));
35
+ padding: 1rem 2rem;
36
+ display: flex;
37
+ justify-content: space-between;
38
+ align-items: center;
39
+ flex-wrap: wrap;
40
+ gap: 1rem;
41
+ box-shadow: 0 4px 20px rgba(108, 92, 231, 0.3);
42
+ }
43
+
44
+ .logo {
45
+ display: flex;
46
+ align-items: center;
47
+ gap: 0.5rem;
48
+ font-size: 1.5rem;
49
+ font-weight: bold;
50
+ }
51
+
52
+ .logo i {
53
+ animation: pulse 2s infinite;
54
+ }
55
+
56
+ @keyframes pulse {
57
+ 0%, 100% { transform: scale(1); }
58
+ 50% { transform: scale(1.2); }
59
+ }
60
+
61
+ .built-with {
62
+ font-size: 0.9rem;
63
+ opacity: 0.9;
64
+ }
65
+
66
+ .built-with a {
67
+ color: white;
68
+ text-decoration: none;
69
+ font-weight: bold;
70
+ transition: all 0.3s;
71
+ }
72
+
73
+ .built-with a:hover {
74
+ text-shadow: 0 0 10px white;
75
+ }
76
+
77
+ .stats-bar {
78
+ display: flex;
79
+ gap: 2rem;
80
+ padding: 1rem 2rem;
81
+ background: var(--card-bg);
82
+ backdrop-filter: blur(10px);
83
+ flex-wrap: wrap;
84
+ justify-content: center;
85
+ }
86
+
87
+ .stat {
88
+ display: flex;
89
+ flex-direction: column;
90
+ align-items: center;
91
+ min-width: 100px;
92
+ }
93
+
94
+ .stat-label {
95
+ font-size: 0.8rem;
96
+ opacity: 0.7;
97
+ text-transform: uppercase;
98
+ }
99
+
100
+ .stat-value {
101
+ font-size: 1.5rem;
102
+ font-weight: bold;
103
+ color: var(--accent-color);
104
+ }
105
+
106
+ .game-container {
107
+ display: grid;
108
+ grid-template-columns: 1fr 2fr 1fr;
109
+ gap: 1rem;
110
+ padding: 1rem;
111
+ max-width: 1600px;
112
+ margin: 0 auto;
113
+ }
114
+
115
+ @media (max-width: 1200px) {
116
+ .game-container {
117
+ grid-template-columns: 1fr 1fr;
118
+ }
119
+ }
120
+
121
+ @media (max-width: 768px) {
122
+ .game-container {
123
+ grid-template-columns: 1fr;
124
+ }
125
+ }
126
+
127
+ .panel {
128
+ background: var(--card-bg);
129
+ border-radius: 15px;
130
+ padding: 1.5rem;
131
+ backdrop-filter: blur(10px);
132
+ border: 1px solid rgba(255, 255, 255, 0.1);
133
+ }
134
+
135
+ .panel-title {
136
+ font-size: 1.2rem;
137
+ margin-bottom: 1rem;
138
+ display: flex;
139
+ align-items: center;
140
+ gap: 0.5rem;
141
+ color: var(--secondary-color);
142
+ }
143
+
144
+ .game-arena {
145
+ min-height: 500px;
146
+ position: relative;
147
+ background: linear-gradient(180deg, #1a1a2e 0%, #16213e 100%);
148
+ border-radius: 15px;
149
+ overflow: hidden;
150
+ }
151
+
152
+ .arena-floor {
153
+ position: absolute;
154
+ bottom: 0;
155
+ width: 100%;
156
+ height: 100px;
157
+ background: linear-gradient(180deg, #2d3436 0%, #1a1a2e 100%);
158
+ }
159
+
160
+ .player {
161
+ position: absolute;
162
+ bottom: 100px;
163
+ left: 50%;
164
+ transform: translateX(-50%);
165
+ width: 60px;
166
+ height: 80px;
167
+ background: linear-gradient(180deg, var(--primary-color), var(--secondary-color));
168
+ border-radius: 30px 30px 20px 20px;
169
+ display: flex;
170
+ flex-direction: column;
171
+ align-items: center;
172
+ justify-content: center;
173
+ box-shadow: 0 0 30px var(--primary-color);
174
+ transition: all 0.3s;
175
+ z-index: 10;
176
+ }
177
+
178
+ .player.evolved-1 {
179
+ box-shadow: 0 0 40px var(--accent-color);
180
+ background: linear-gradient(180deg, var(--accent-color), #00b894);
181
+ }
182
+
183
+ .player.evolved-2 {
184
+ box-shadow: 0 0 50px #fd79a8;
185
+ background: linear-gradient(180deg, #fd79a8, #e84393);
186
+ }
187
+
188
+ .player.evolved-3 {
189
+ box-shadow: 0 0 60px #ffeaa7;
190
+ background: linear-gradient(180deg, #ffeaa7, #fdcb6e);
191
+ }
192
+
193
+ .player-face {
194
+ width: 40px;
195
+ height: 25px;
196
+ background: rgba(255, 255, 255, 0.9);
197
+ border-radius: 50%;
198
+ display: flex;
199
+ justify-content: center;
200
+ align-items: center;
201
+ gap: 8px;
202
+ }
203
+
204
+ .eye {
205
+ width: 8px;
206
+ height: 8px;
207
+ background: #2d3436;
208
+ border-radius: 50%;
209
+ animation: blink 3s infinite;
210
+ }
211
+
212
+ @keyframes blink {
213
+ 0%, 90%, 100% { transform: scaleY(1); }
214
+ 95% { transform: scaleY(0.1); }
215
+ }
216
+
217
+ .clone {
218
+ position: absolute;
219
+ bottom: 100px;
220
+ width: 40px;
221
+ height: 55px;
222
+ border-radius: 20px 20px 15px 15px;
223
+ display: flex;
224
+ flex-direction: column;
225
+ align-items: center;
226
+ justify-content: center;
227
+ opacity: 0.8;
228
+ transition: all 0.5s;
229
+ animation: cloneSpawn 0.5s ease-out;
230
+ }
231
+
232
+ @keyframes cloneSpawn {
233
+ 0% { transform: scale(0); opacity: 0; }
234
+ 50% { transform: scale(1.2); }
235
+ 100% { transform: scale(1); opacity: 0.8; }
236
+ }
237
+
238
+ .clone-face {
239
+ width: 25px;
240
+ height: 15px;
241
+ background: rgba(255, 255, 255, 0.9);
242
+ border-radius: 50%;
243
+ display: flex;
244
+ justify-content: center;
245
+ align-items: center;
246
+ gap: 5px;
247
+ }
248
+
249
+ .clone .eye {
250
+ width: 5px;
251
+ height: 5px;
252
+ }
253
+
254
+ .consumable {
255
+ position: absolute;
256
+ cursor: pointer;
257
+ transition: all 0.3s;
258
+ animation: float 2s ease-in-out infinite;
259
+ z-index: 5;
260
+ }
261
+
262
+ .consumable:hover {
263
+ transform: scale(1.2);
264
+ filter: brightness(1.3);
265
+ }
266
+
267
+ @keyframes float {
268
+ 0%, 100% { transform: translateY(0); }
269
+ 50% { transform: translateY(-10px); }
270
+ }
271
+
272
+ .consumable-icon {
273
+ font-size: 2rem;
274
+ filter: drop-shadow(0 0 10px currentColor);
275
+ }
276
+
277
+ .items-grid {
278
+ display: grid;
279
+ grid-template-columns: repeat(2, 1fr);
280
+ gap: 0.5rem;
281
+ }
282
+
283
+ .item-card {
284
+ background: rgba(255, 255, 255, 0.05);
285
+ border-radius: 10px;
286
+ padding: 0.8rem;
287
+ text-align: center;
288
+ cursor: pointer;
289
+ transition: all 0.3s;
290
+ border: 2px solid transparent;
291
+ }
292
+
293
+ .item-card:hover {
294
+ background: rgba(255, 255, 255, 0.1);
295
+ border-color: var(--accent-color);
296
+ transform: translateY(-3px);
297
+ }
298
+
299
+ .item-card.locked {
300
+ opacity: 0.5;
301
+ cursor: not-allowed;
302
+ }
303
+
304
+ .item-icon {
305
+ font-size: 2rem;
306
+ margin-bottom: 0.5rem;
307
+ }
308
+
309
+ .item-name {
310
+ font-size: 0.8rem;
311
+ margin-bottom: 0.3rem;
312
+ }
313
+
314
+ .item-effect {
315
+ font-size: 0.7rem;
316
+ opacity: 0.7;
317
+ }
318
+
319
+ .item-cost {
320
+ font-size: 0.8rem;
321
+ color: var(--accent-color);
322
+ margin-top: 0.3rem;
323
+ }
324
+
325
+ .evolution-track {
326
+ display: flex;
327
+ flex-direction: column;
328
+ gap: 1rem;
329
+ }
330
+
331
+ .evolution-stage {
332
+ display: flex;
333
+ align-items: center;
334
+ gap: 1rem;
335
+ padding: 1rem;
336
+ background: rgba(255, 255, 255, 0.03);
337
+ border-radius: 10px;
338
+ border-left: 4px solid var(--primary-color);
339
+ transition: all 0.3s;
340
+ }
341
+
342
+ .evolution-stage.active {
343
+ border-left-color: var(--success-color);
344
+ background: rgba(0, 184, 148, 0.1);
345
+ }
346
+
347
+ .evolution-stage.locked {
348
+ opacity: 0.5;
349
+ }
350
+
351
+ .evolution-icon {
352
+ font-size: 2rem;
353
+ }
354
+
355
+ .evolution-info h4 {
356
+ margin-bottom: 0.3rem;
357
+ }
358
+
359
+ .evolution-info p {
360
+ font-size: 0.8rem;
361
+ opacity: 0.7;
362
+ }
363
+
364
+ .progress-bar {
365
+ width: 100%;
366
+ height: 8px;
367
+ background: rgba(255, 255, 255, 0.1);
368
+ border-radius: 4px;
369
+ overflow: hidden;
370
+ margin-top: 0.5rem;
371
+ }
372
+
373
+ .progress-fill {
374
+ height: 100%;
375
+ background: linear-gradient(90deg, var(--primary-color), var(--accent-color));
376
+ transition: width 0.5s;
377
+ border-radius: 4px;
378
+ }
379
+
380
+ .abilities-list {
381
+ display: flex;
382
+ flex-direction: column;
383
+ gap: 0.5rem;
384
+ }
385
+
386
+ .ability {
387
+ display: flex;
388
+ align-items: center;
389
+ gap: 0.5rem;
390
+ padding: 0.8rem;
391
+ background: rgba(255, 255, 255, 0.03);
392
+ border-radius: 8px;
393
+ cursor: pointer;
394
+ transition: all 0.3s;
395
+ }
396
+
397
+ .ability:hover:not(.locked) {
398
+ background: rgba(255, 255, 255, 0.1);
399
+ }
400
+
401
+ .ability.locked {
402
+ opacity: 0.5;
403
+ cursor: not-allowed;
404
+ }
405
+
406
+ .ability-icon {
407
+ font-size: 1.5rem;
408
+ }
409
+
410
+ .ability-info {
411
+ flex: 1;
412
+ }
413
+
414
+ .ability-name {
415
+ font-size: 0.9rem;
416
+ font-weight: bold;
417
+ }
418
+
419
+ .ability-desc {
420
+ font-size: 0.7rem;
421
+ opacity: 0.7;
422
+ }
423
+
424
+ .ability-cooldown {
425
+ font-size: 0.8rem;
426
+ color: var(--danger-color);
427
+ }
428
+
429
+ .controls {
430
+ position: fixed;
431
+ bottom: 1rem;
432
+ left: 50%;
433
+ transform: translateX(-50%);
434
+ display: flex;
435
+ gap: 1rem;
436
+ background: var(--card-bg);
437
+ padding: 1rem;
438
+ border-radius: 50px;
439
+ backdrop-filter: blur(10px);
440
+ }
441
+
442
+ .control-btn {
443
+ width: 50px;
444
+ height: 50px;
445
+ border-radius: 50%;
446
+ border: none;
447
+ background: var(--primary-color);
448
+ color: white;
449
+ font-size: 1.2rem;
450
+ cursor: pointer;
451
+ transition: all 0.3s;
452
+ }
453
+
454
+ .control-btn:hover {
455
+ transform: scale(1.1);
456
+ box-shadow: 0 0 20px var(--primary-color);
457
+ }
458
+
459
+ .control-btn:active {
460
+ transform: scale(0.95);
461
+ }
462
+
463
+ .notification {
464
+ position: fixed;
465
+ top: 100px;
466
+ left: 50%;
467
+ transform: translateX(-50%);
468
+ background: var(--success-color);
469
+ color: white;
470
+ padding: 1rem 2rem;
471
+ border-radius: 10px;
472
+ font-weight: bold;
473
+ opacity: 0;
474
+ transition: all 0.5s;
475
+ z-index: 100;
476
+ }
477
+
478
+ .notification.show {
479
+ opacity: 1;
480
+ animation: slideDown 0.5s ease-out;
481
+ }
482
+
483
+ @keyframes slideDown {
484
+ 0% { transform: translateX(-50%) translateY(-20px); }
485
+ 100% { transform: translateX(-50%) translateY(0); }
486
+ }
487
+
488
+ .clone-counter {
489
+ position: absolute;
490
+ top: 10px;
491
+ right: 10px;
492
+ background: var(--primary-color);
493
+ padding: 0.5rem 1rem;
494
+ border-radius: 20px;
495
+ font-weight: bold;
496
+ display: flex;
497
+ align-items: center;
498
+ gap: 0.5rem;
499
+ }
500
+
501
+ .enemy {
502
+ position: absolute;
503
+ width: 50px;
504
+ height: 60px;
505
+ background: linear-gradient(180deg, #e74c3c, #c0392b);
506
+ border-radius: 10px;
507
+ display: flex;
508
+ flex-direction: column;
509
+ align-items: center;
510
+ justify-content: center;
511
+ box-shadow: 0 0 20px rgba(231, 76, 60, 0.5);
512
+ animation: enemyMove 3s ease-in-out infinite;
513
+ }
514
+
515
+ @keyframes enemyMove {
516
+ 0%, 100% { transform: translateX(0); }
517
+ 50% { transform: translateX(20px); }
518
+ }
519
+
520
+ .enemy-face {
521
+ width: 30px;
522
+ height: 20px;
523
+ background: rgba(255, 255, 255, 0.9);
524
+ border-radius: 50%;
525
+ display: flex;
526
+ justify-content: center;
527
+ align-items: center;
528
+ gap: 5px;
529
+ }
530
+
531
+ .enemy .eye {
532
+ background: #c0392b;
533
+ }
534
+
535
+ .hp-bar {
536
+ width: 40px;
537
+ height: 5px;
538
+ background: rgba(0, 0, 0, 0.3);
539
+ border-radius: 3px;
540
+ margin-top: 5px;
541
+ overflow: hidden;
542
+ }
543
+
544
+ .hp-fill {
545
+ height: 100%;
546
+ background: #2ecc71;
547
+ transition: width 0.3s;
548
+ }
549
+
550
+ .score-popup {
551
+ position: absolute;
552
+ color: #ffd700;
553
+ font-weight: bold;
554
+ font-size: 1.2rem;
555
+ pointer-events: none;
556
+ animation: scoreFloat 1s ease-out forwards;
557
+ }
558
+
559
+ @keyframes scoreFloat {
560
+ 0% { opacity: 1; transform: translateY(0); }
561
+ 100% { opacity: 0; transform: translateY(-50px); }
562
+ }
563
+
564
+ .modal {
565
+ position: fixed;
566
+ top: 0;
567
+ left: 0;
568
+ width: 100%;
569
+ height: 100%;
570
+ background: rgba(0, 0, 0, 0.8);
571
+ display: flex;
572
+ justify-content: center;
573
+ align-items: center;
574
+ z-index: 1000;
575
+ opacity: 0;
576
+ visibility: hidden;
577
+ transition: all 0.3s;
578
+ }
579
+
580
+ .modal.show {
581
+ opacity: 1;
582
+ visibility: visible;
583
+ }
584
+
585
+ .modal-content {
586
+ background: var(--dark-bg);
587
+ padding: 2rem;
588
+ border-radius: 20px;
589
+ max-width: 500px;
590
+ width: 90%;
591
+ text-align: center;
592
+ border: 2px solid var(--primary-color);
593
+ animation: modalPop 0.3s ease-out;
594
+ }
595
+
596
+ @keyframes modalPop {
597
+ 0% { transform: scale(0.8); }
598
+ 100% { transform: scale(1); }
599
+ }
600
+
601
+ .modal h2 {
602
+ margin-bottom: 1rem;
603
+ color: var(--accent-color);
604
+ }
605
+
606
+ .modal p {
607
+ margin-bottom: 1.5rem;
608
+ opacity: 0.8;
609
+ }
610
+
611
+ .modal-btn {
612
+ padding: 1rem 2rem;
613
+ border: none;
614
+ border-radius: 10px;
615
+ background: var(--primary-color);
616
+ color: white;
617
+ font-size: 1rem;
618
+ cursor: pointer;
619
+ transition: all 0.3s;
620
+ }
621
+
622
+ .modal-btn:hover {
623
+ transform: scale(1.05);
624
+ box-shadow: 0 0 20px var(--primary-color);
625
+ }
626
+
627
+ .tutorial-tip {
628
+ position: absolute;
629
+ background: var(--accent-color);
630
+ color: white;
631
+ padding: 0.5rem 1rem;
632
+ border-radius: 10px;
633
+ font-size: 0.8rem;
634
+ z-index: 50;
635
+ animation: bounce 1s infinite;
636
+ }
637
+
638
+ @keyframes bounce {
639
+ 0%, 100% { transform: translateY(0); }
640
+ 50% { transform: translateY(-5px); }
641
+ }
642
+
643
+ .xp-bar-container {
644
+ width: 100%;
645
+ margin-top: 1rem;
646
+ }
647
+
648
+ .xp-label {
649
+ display: flex;
650
+ justify-content: space-between;
651
+ font-size: 0.8rem;
652
+ margin-bottom: 0.3rem;
653
+ }
654
+
655
+ .special-effect {
656
+ position: absolute;
657
+ pointer-events: none;
658
+ z-index: 20;
659
+ }
660
+
661
+ .particle {
662
+ position: absolute;
663
+ width: 10px;
664
+ height: 10px;
665
+ border-radius: 50%;
666
+ animation: particleExplode 1s ease-out forwards;
667
+ }
668
+
669
+ @keyframes particleExplode {
670
+ 0% { transform: translate(0, 0) scale(1); opacity: 1; }
671
+ 100% { transform: translate(var(--tx), var(--ty)) scale(0); opacity: 0; }
672
+ }
673
+ </style>
674
+ </head>
675
+ <body>
676
+ <header>
677
+ <div class="logo">
678
+ <i class="fas fa-dna"></i>
679
+ Clone Evolution
680
+ </div>
681
+ <div class="built-with">
682
+ Built with <a href="https://huggingface.co/spaces/akhaliq/anycoder" target="_blank">anycoder</a>
683
+ </div>
684
+ </header>
685
+
686
+ <div class="stats-bar">
687
+ <div class="stat">
688
+ <span class="stat-label">Level</span>
689
+ <span class="stat-value" id="level">1</span>
690
+ </div>
691
+ <div class="stat">
692
+ <span class="stat-label">Score</span>
693
+ <span class="stat-value" id="score">0</span>
694
+ </div>
695
+ <div class="stat">
696
+ <span class="stat-label">Clones</span>
697
+ <span class="stat-value" id="cloneCount">0</span>
698
+ </div>
699
+ <div class="stat">
700
+ <span class="stat-label">Energy</span>
701
+ <span class="stat-value" id="energy">100</span>
702
+ </div>
703
+ <div class="stat">
704
+ <span class="stat-label">Evolution</span>
705
+ <span class="stat-value" id="evolutionStage">Base</span>
706
+ </div>
707
+ </div>
708
+
709
+ <div class="game-container">
710
+ <div class="panel">
711
+ <h3 class="panel-title"><i class="fas fa-flask"></i> Consumables</h3>
712
+ <div class="items-grid" id="consumablesGrid">
713
+ <!-- Items will be generated here -->
714
+ </div>
715
+ </div>
716
+
717
+ <div class="panel game-arena" id="gameArena">
718
+ <div class="clone-counter">
719
+ <i class="fas fa-users"></i>
720
+ <span id="arenaCloneCount">0</span>
721
+ </div>
722
+ <div class="arena-floor"></div>
723
+ <div class="player" id="player">
724
+ <div class="player-face">
725
+ <div class="eye"></div>
726
+ <div class="eye"></div>
727
+ </div>
728
+ </div>
729
+ <!-- Consumables and enemies will spawn here -->
730
+ </div>
731
+
732
+ <div class="panel">
733
+ <h3 class="panel-title"><i class="fas fa-chart-line"></i> Evolution Track</h3>
734
+ <div class="evolution-track" id="evolutionTrack">
735
+ <!-- Evolution stages will be generated here -->
736
+ </div>
737
+
738
+ <div class="xp-bar-container">
739
+ <div class="xp-label">
740
+ <span>XP</span>
741
+ <span id="xpText">0 / 100</span>
742
+ </div>
743
+ <div class="progress-bar">
744
+ <div class="progress-fill" id="xpBar" style="width: 0%"></div>
745
+ </div>
746
+ </div>
747
+
748
+ <h3 class="panel-title" style="margin-top: 1.5rem;"><i class="fas fa-bolt"></i> Abilities</h3>
749
+ <div class="abilities-list" id="abilitiesList">
750
+ <!-- Abilities will be generated here -->
751
+ </div>
752
+ </div>
753
+ </div>
754
+
755
+ <div class="controls">
756
+ <button class="control-btn" id="moveLeft" title="Move Left">
757
+ <i class="fas fa-arrow-left"></i>
758
+ </button>
759
+ <button class="control-btn" id="spawnClone" title="Spawn Clone (Cost: 20 Energy)">
760
+ <i class="fas fa-plus"></i>
761
+ </button>
762
+ <button class="control-btn" id="attack" title="Attack">
763
+ <i class="fas fa-fist-raised"></i>
764
+ </button>
765
+ <button class="control-btn" id="moveRight" title="Move Right">
766
+ <i class="fas fa-arrow-right"></i>
767
+ </button>
768
+ </div>
769
+
770
+ <div class="notification" id="notification"></div>
771
+
772
+ <div class="modal" id="welcomeModal">
773
+ <div class="modal-content">
774
+ <h2><i class="fas fa-dna"></i> Welcome to Clone Evolution!</h2>
775
+ <p>You are a unique being with the power to create clones by consuming special items. Collect consumables to gain energy, spawn clones, defeat enemies, and evolve into more powerful forms!</p>
776
+ <ul style="text-align: left; margin-bottom: 1.5rem; opacity: 0.8;">
777
+ <li>🍎 Collect consumables for energy & clone power</li>
778
+ <li>👥 Spawn clones to help you fight</li>
779
+ <li>⚔️ Defeat enemies to gain XP</li>
780
+ <li>🧬 Evolve to unlock new abilities</li>
781
+ </ul>
782
+ <button class="modal-btn" onclick="startGame()">Start Game</button>
783
+ </div>
784
+ </div>
785
+
786
+ <div class="modal" id="evolutionModal">
787
+ <div class="modal-content">
788
+ <h2 id="evolutionTitle"><i class="fas fa-star"></i> Evolution!</h2>
789
+ <p id="evolutionDesc">You have evolved into a new form!</p>
790
+ <button class="modal-btn" onclick="closeEvolutionModal()">Continue</button>
791
+ </div>
792
+ </div>
793
+
794
+ <script>
795
+ // Game State
796
+ const gameState = {
797
+ level: 1,
798
+ score: 0,
799
+ clones: [],
800
+ energy: 100,
801
+ maxEnergy: 100,
802
+ xp: 0,
803
+ xpToNext: 100,
804
+ evolutionStage: 0,
805
+ playerPosition: 50,
806
+ enemies: [],
807
+ consumables: [],
808
+ abilities: [],
809
+ unlockedAbilities: [0],
810
+ cooldowns: {},
811
+ gameStarted: false
812
+ };
813
+
814
+ // Consumables Data
815
+ const consumablesData = [
816
+ { id: 1, name: 'Energy Orb', icon: '🔮', color: '#a29bfe', energy: 20, clonePower: 1, cost: 0 },
817
+ { id: 2, name: 'Power Crystal', icon: '💎', color: '#00cec9', energy: 30, clonePower: 2, cost: 50 },
818
+ { id: 3, name: 'Soul Essence', icon: '👻', color: '#fd79a8', energy: 40, clonePower: 3, cost: 100 },
819
+ { id: 4, name: 'Dragon Heart', icon: '🔥', color: '#e17055', energy: 50, clonePower: 4, cost: 200 },
820
+ { id: 5, name: 'Star Fragment', icon: '⭐', color: '#ffeaa7', energy: 60, clonePower: 5, cost: 350 },
821
+ { id: 6, name: 'Void Shard', icon: '🌑', color: '#636e72', energy: 80, clonePower: 7, cost: 500 }
822
+ ];
823
+
824
+ // Evolution Stages
825
+ const evolutionStages = [
826
+ { name: 'Base Form', icon: '🧬', requirement: 0, bonus: 'Start your journey', class: '' },
827
+ { name: 'Enhanced', icon: '💫', requirement: 100, bonus: '+25% Clone Power', class: 'evolved-1' },
828
+ { name: 'Ascended', icon: '🌟', requirement: 300, bonus: '+50% Clone Power, Heal Ability', class: 'evolved-2' },
829
+ { name: 'Transcendent', icon: '👑', requirement: 600, bonus: '+100% Clone Power, All Abilities', class: 'evolved-3' }
830
+ ];
831
+
832
+ // Abilities
833
+ const abilitiesData = [
834
+ { id: 0, name: 'Clone Rush', icon: '⚡', desc: 'All clones attack at once', cooldown: 10, unlockLevel: 1 },
835
+ { id: 1, name: 'Energy Shield', icon: '🛡️', desc: 'Protect from damage', cooldown: 15, unlockLevel: 2 },
836
+ { id: 2, name: 'Clone Fusion', icon: '🔄', desc: 'Merge 2 clones into 1 powerful clone', cooldown: 20, unlockLevel: 3 },
837
+ { id: 3, name: 'Mass Production', icon: '🏭', desc: 'Spawn 3 clones at once', cooldown: 25, unlockLevel: 4 }
838
+ ];
839
+
840
+ // DOM Elements
841
+ const player = document.getElementById('player');
842
+ const gameArena = document.getElementById('gameArena');
843
+ const notification = document.getElementById('notification');
844
+
845
+ // Initialize Game
846
+ function initGame() {
847
+ renderConsumables();
848
+ renderEvolutionTrack();
849
+ renderAbilities();
850
+ document.getElementById('welcomeModal').classList.add('show');
851
+ }
852
+
853
+ function startGame() {
854
+ document.getElementById('welcomeModal').classList.remove('show');
855
+ gameState.gameStarted = true;
856
+ spawnConsumables();
857
+ spawnEnemy();
858
+ gameLoop();
859
+ }
860
+
861
+ function renderConsumables() {
862
+ const grid = document.getElementById('consumablesGrid');
863
+ grid.innerHTML = consumablesData.map(item => `
864
+ <div class="item-card ${gameState.score < item.cost ? 'locked' : ''}"
865
+ onclick="buyConsumable(${item.id})"
866
+ data-id="${item.id}">
867
+ <div class="item-icon">${item.icon}</div>
868
+ <div class="item-name">${item.name}</div>
869
+ <div class="item-effect">+${item.energy} Energy, +${item.clonePower} Clone Power</div>
870
+ <div class="item-cost">${item.cost === 0 ? 'Free' : item.cost + ' pts'}</div>
871
+ </div>
872
+ `).join('');
873
+ }
874
+
875
+ function renderEvolutionTrack() {
876
+ const track = document.getElementById('evolutionTrack');
877
+ track.innerHTML = evolutionStages.map((stage, index) => `
878
+ <div class="evolution-stage ${index === gameState.evolutionStage ? 'active' : ''} ${index > gameState.evolutionStage ? 'locked' : ''}">
879
+ <div class="evolution-icon">${stage.icon}</div>
880
+ <div class="evolution-info">
881
+ <h4>${stage.name}</h4>
882
+ <p>${stage.bonus}</p>
883
+ <p style="color: var(--accent-color);">Requires: ${stage.requirement} XP</p>
884
+ </div>
885
+ </div>
886
+ `).join('');
887
+ }
888
+
889
+ function renderAbilities() {
890
+ const list = document.getElementById('abilitiesList');
891
+ list.innerHTML = abilitiesData.map(ability => {
892
+ const unlocked = gameState.level >= ability.unlockLevel;
893
+ const onCooldown = gameState.cooldowns[ability.id] > 0;
894
+ return `
895
+ <div class="ability ${!unlocked ? 'locked' : ''}"
896
+ onclick="useAbility(${ability.id})"
897
+ data-id="${ability.id}">
898
+ <div class="ability-icon">${ability.icon}</div>
899
+ <div class="ability-info">
900
+ <div class="ability-name">${ability.name}</div>
901
+ <div class="ability-desc">${ability.desc}</div>
902
+ </div>
903
+ <div class="ability-cooldown">
904
+ ${onCooldown ? gameState.cooldowns[ability.id] + 's' : (unlocked ? 'Ready' : 'Lvl ' + ability.unlockLevel)}
905
+ </div>
906
+ </div>
907
+ `;
908
+ }).join('');
909
+ }
910
+
911
+ function buyConsumable(id) {
912
+ const item = consumablesData.find(c => c.id === id);
913
+ if (gameState.score >= item.cost) {
914
+ gameState.score -= item.cost;
915
+ gameState.energy = Math.min(gameState.maxEnergy, gameState.energy + item.energy);
916
+ showNotification(`Consumed ${item.name}! +${item.energy} Energy`);
917
+
918
+ // Spawn consumable in arena
919
+ spawnConsumableInArena(item);
920
+ updateStats();
921
+ renderConsumables();
922
+ } else {
923
+ showNotification('Not enough points!', 'error');
924
+ }
925
+ }
926
+
927
+ function spawnConsumableInArena(item) {
928
+ const consumable = document.createElement('div');
929
+ consumable.className = 'consumable';
930
+ consumable.style.left = Math.random() * 80 + 10 + '%';
931
+ consumable.style.top = Math.random() * 50 + 20 + '%';
932
+ consumable.style.color = item.color;
933
+ consumable.innerHTML = `<span class="consumable-icon">${item.icon}</span>`;
934
+ consumable.dataset.id = item.id;
935
+ consumable.dataset.power = item.clonePower;
936
+
937
+ consumable.onclick = () => collectConsumable(consumable, item);
938
+
939
+ gameArena.appendChild(consumable);
940
+ gameState.consumables.push(consumable);
941
+ }
942
+
943
+ function spawnConsumables() {
944
+ const randomItems = consumablesData.filter(i => i.cost === 0);
945
+ for (let i = 0; i < 3; i++) {
946
+ const item = randomItems[Math.floor(Math.random() * randomItems.length)];
947
+ spawnConsumableInArena(item);
948
+ }
949
+ }
950
+
951
+ function collectConsumable(element, item) {
952
+ gameState.energy = Math.min(gameState.maxEnergy, gameState.energy + item.energy);
953
+ gameState.score += 10;
954
+ gameState.xp += 5;
955
+
956
+ createParticles(element.offsetLeft, element.offsetTop, item.color);
957
+ showScorePopup(element.offsetLeft, element.offsetTop, '+10');
958
+
959
+ element.remove();
960
+ gameState.consumables = gameState.consumables.filter(c => c !== element);
961
+
962
+ checkEvolution();
963
+ updateStats();
964
+
965
+ // Respawn after delay
966
+ setTimeout(() => {
967
+ if (gameState.gameStarted) {
968
+ const randomItem = consumablesData[Math.floor(Math.random() * consumablesData.length)];
969
+ spawnConsumableInArena(randomItem);
970
+ }
971
+ }, 3000);
972
+ }
973
+
974
+ function spawnClone() {
975
+ if (gameState.energy >= 20) {
976
+ gameState.energy -= 20;
977
+
978
+ const evolutionMultiplier = 1 + (gameState.evolutionStage * 0.25);
979
+ const clonePower = Math.floor(10 * evolutionMultiplier);
980
+
981
+ const clone = document.createElement('div');
982
+ clone.className = 'clone';
983
+
984
+ const colors = ['#6c5ce7', '#00cec9', '#fd79a8', '#ffeaa7', '#00b894'];
985
+ const color = colors[gameState.clones.length % colors.length];
986
+ clone.style.background = `linear-gradient(180deg, ${color}, ${adjustColor(color, -30)})`;
987
+ clone.style.boxShadow = `0 0 15px ${color}`;
988
+
989
+ const offset = (gameState.clones.length - Math.floor(gameState.clones.length / 2)) * 50;
990
+ clone.style.left = `calc(50% + ${offset}px)`;
991
+ clone.style.transform = 'translateX(-50%)';
992
+
993
+ clone.innerHTML = `
994
+ <div class="clone-face">
995
+ <div class="eye"></div>
996
+ <div class="eye"></div>
997
+ </div>
998
+ `;
999
+
1000
+ clone.dataset.power = clonePower;
1001
+ clone.dataset.hp = 50;
1002
+
1003
+ gameArena.appendChild(clone);
1004
+ gameState.clones.push(clone);
1005
+
1006
+ showNotification(`Clone spawned! Power: ${clonePower}`);
1007
+ updateStats();
1008
+ } else {
1009
+ showNotification('Not enough energy!', 'error');
1010
+ }
1011
+ }
1012
+
1013
+ function spawnEnemy() {
1014
+ const enemy = document.createElement('div');
1015
+ enemy.className = 'enemy';
1016
+ enemy.style.left = Math.random() > 0.5 ? '10%' : '80%';
1017
+ enemy.style.bottom = '100px';
1018
+
1019
+ const hp = 50 + (gameState.level * 20);
1020
+ enemy.dataset.hp = hp;
1021
+ enemy.dataset.maxHp = hp;
1022
+
1023
+ enemy.innerHTML = `
1024
+ <div class="enemy-face">
1025
+ <div class="eye"></div>
1026
+ <div class="eye"></div>
1027
+ </div>
1028
+ <div class="hp-bar">
1029
+ <div class="hp-fill" style="width: 100%"></div>
1030
+ </div>
1031
+ `;
1032
+
1033
+ gameArena.appendChild(enemy);
1034
+ gameState.enemies.push(enemy);
1035
+ }
1036
+
1037
+ function attack() {
1038
+ if (gameState.enemies.length === 0) return;
1039
+
1040
+ const totalPower = gameState.clones.reduce((sum, clone) => {
1041
+ return sum + parseInt(clone.dataset.power || 10);
1042
+ }, 10); // Base player power
1043
+
1044
+ gameState.enemies.forEach(enemy => {
1045
+ const currentHp = parseInt(enemy.dataset.hp);
1046
+ const newHp = currentHp - totalPower;
1047
+ enemy.dataset.hp = newHp;
1048
+
1049
+ const maxHp = parseInt(enemy.dataset.maxHp);
1050
+ const hpPercent = Math.max(0, (newHp / maxHp) * 100);
1051
+ enemy.querySelector('.hp-fill').style.width = hpPercent + '%';
1052
+
1053
+ // Visual feedback
1054
+ enemy.style.animation = 'none';
1055
+ enemy.offsetHeight;
1056
+ enemy.style.animation = 'enemyMove 3s ease-in-out infinite';
1057
+
1058
+ if (newHp <= 0) {
1059
+ defeatEnemy(enemy);
1060
+ }
1061
+ });
1062
+
1063
+ // Clone attack animation
1064
+ gameState.clones.forEach(clone => {
1065
+ clone.style.transform = 'translateX(-50%) scale(1.2)';
1066
+ setTimeout(() => {
1067
+ clone.style.transform = 'translateX(-50%) scale(1)';
1068
+ }, 200);
1069
+ });
1070
+ }
1071
+
1072
+ function defeatEnemy(enemy) {
1073
+ const points = 50 + (gameState.