matthewspring commited on
Commit
e997b3f
Β·
verified Β·
1 Parent(s): 99fdfda

Upload folder using huggingface_hub

Browse files
Files changed (1) hide show
  1. index.html +518 -253
index.html CHANGED
@@ -1,268 +1,533 @@
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>Oops! My Fault</title>
7
- <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
8
- <style>
9
- :root {
10
- --primary: #ff6b6b;
11
- --secondary: #4ecdc4;
12
- --dark: #292f36;
13
- --light: #f7fff7;
14
- --accent: #ff9f1c;
15
- }
16
-
17
- * {
18
- margin: 0;
19
- padding: 0;
20
- box-sizing: border-box;
21
- font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
22
- }
23
-
24
- body {
25
- background: linear-gradient(135deg, var(--light), #e2f3f8);
26
- min-height: 100vh;
27
- display: flex;
28
- flex-direction: column;
29
- align-items: center;
30
- justify-content: center;
31
- padding: 2rem;
32
- color: var(--dark);
33
- }
34
-
35
- header {
36
- position: absolute;
37
- top: 1rem;
38
- left: 1rem;
39
- }
40
-
41
- header a {
42
- color: var(--dark);
43
- text-decoration: none;
44
- font-size: 0.9rem;
45
- opacity: 0.7;
46
- transition: opacity 0.3s;
47
- }
48
-
49
- header a:hover {
50
- opacity: 1;
51
- }
52
-
53
- .container {
54
- background-color: white;
55
- border-radius: 1.5rem;
56
- box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
57
- padding: 3rem;
58
- max-width: 600px;
59
- width: 100%;
60
- text-align: center;
61
- position: relative;
62
- overflow: hidden;
63
- }
64
-
65
- h1 {
66
- color: var(--primary);
67
- margin-bottom: 1.5rem;
68
- font-size: 2.5rem;
69
- }
70
-
71
- p {
72
- font-size: 1.1rem;
73
- line-height: 1.6;
74
- margin-bottom: 2rem;
75
- color: var(--dark);
76
- }
77
-
78
- .emoji {
79
- font-size: 4rem;
80
- margin-bottom: 1.5rem;
81
- animation: bounce 2s infinite;
82
- }
83
-
84
- .buttons {
85
- display: flex;
86
- gap: 1rem;
87
- justify-content: center;
88
- flex-wrap: wrap;
89
- }
90
-
91
- button {
92
- padding: 0.8rem 1.5rem;
93
- border: none;
94
- border-radius: 50px;
95
- font-size: 1rem;
96
- font-weight: 600;
97
- cursor: pointer;
98
- transition: all 0.3s ease;
99
- }
100
-
101
- .primary-btn {
102
- background-color: var(--primary);
103
- color: white;
104
- }
105
-
106
- .primary-btn:hover {
107
- background-color: #ff5252;
108
- transform: translateY(-2px);
109
- }
110
-
111
- .secondary-btn {
112
- background-color: var(--secondary);
113
- color: white;
114
- }
115
-
116
- .secondary-btn:hover {
117
- background-color: #3dbeb6;
118
- transform: translateY(-2px);
119
- }
120
-
121
- .confetti {
122
- position: absolute;
123
- width: 10px;
124
- height: 10px;
125
- background-color: var(--accent);
126
- opacity: 0;
127
- }
128
-
129
- @keyframes bounce {
130
- 0%, 100% {
131
- transform: translateY(0);
132
- }
133
- 50% {
134
- transform: translateY(-20px);
135
- }
136
- }
137
-
138
- .hidden {
139
- display: none;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
140
  }
 
 
 
 
141
 
142
- .message-box {
143
- background-color: rgba(255, 255, 255, 0.9);
144
- padding: 2rem;
145
- border-radius: 1rem;
146
- margin-top: 2rem;
147
- animation: fadeIn 0.5s;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
148
  }
 
 
 
 
 
149
 
150
- @keyframes fadeIn {
151
- from { opacity: 0; transform: translateY(20px); }
152
- to { opacity: 1; transform: translateY(0); }
 
 
 
 
 
 
 
 
 
 
 
 
 
153
  }
154
 
155
- @media (max-width: 600px) {
156
- .container {
157
- padding: 2rem 1.5rem;
158
- }
159
-
160
- h1 {
161
- font-size: 2rem;
162
- }
163
-
164
- .emoji {
165
- font-size: 3rem;
166
- }
 
167
  }
168
- </style>
169
- </head>
170
- <body>
171
- <header>
172
- <a href="https://huggingface.co/spaces/akhaliq/anycoder" target="_blank">Built with anycoder</a>
173
- </header>
174
-
175
- <div class="container">
176
- <div class="emoji">πŸ˜…</div>
177
- <h1>Oops! My Fault</h1>
178
- <p>Looks like something went wrong, but don't worry! Feel free to attempt again or try something different.</p>
179
-
180
- <div class="buttons">
181
- <button class="primary-btn" id="tryAgainBtn">Try Again</button>
182
- <button class="secondary-btn" id="somethingElseBtn">Do Something Else</button>
183
- </div>
184
-
185
- <div id="tryAgainMessage" class="message-box hidden">
186
- <h2>You're Persistent! πŸŽ‰</h2>
187
- <p>That's the spirit! Trying again often leads to success. Here's a virtual high-five! βœ‹</p>
188
- <div class="emoji">πŸ‘</div>
189
- </div>
190
 
191
- <div id="somethingElseMessage" class="message-box hidden">
192
- <h2>Great Choice! 🌟</h2>
193
- <p>Sometimes a fresh approach is exactly what you need. What would you like to try next?</p>
194
- <div class="emoji">πŸ€”</div>
195
- </div>
196
- </div>
197
-
198
- <script>
199
- const tryAgainBtn = document.getElementById('tryAgainBtn');
200
- const somethingElseBtn = document.getElementById('somethingElseBtn');
201
- const tryAgainMessage = document.getElementById('tryAgainMessage');
202
- const somethingElseMessage = document.getElementById('somethingElseMessage');
203
-
204
- tryAgainBtn.addEventListener('click', () => {
205
- tryAgainMessage.classList.remove('hidden');
206
- somethingElseMessage.classList.add('hidden');
207
- createConfetti();
208
- });
209
 
210
- somethingElseBtn.addEventListener('click', () => {
211
- somethingElseMessage.classList.remove('hidden');
212
- tryAgainMessage.classList.add('hidden');
213
- });
214
 
215
- function createConfetti() {
216
- const container = document.querySelector('.container');
217
-
218
- for (let i = 0; i < 50; i++) {
219
- const confetti = document.createElement('div');
220
- confetti.classList.add('confetti');
221
-
222
- // Random properties
223
- const size = Math.random() * 10 + 5;
224
- const color = `hsl(${Math.random() * 360}, 100%, 50%)`;
225
- const left = Math.random() * 100;
226
- const animationDuration = Math.random() * 3 + 2;
227
-
228
- confetti.style.width = `${size}px`;
229
- confetti.style.height = `${size}px`;
230
- confetti.style.backgroundColor = color;
231
- confetti.style.left = `${left}%`;
232
- confetti.style.top = '-10px';
233
- confetti.style.position = 'absolute';
234
- confetti.style.borderRadius = '50%';
235
- confetti.style.opacity = '1';
236
-
237
- // Animation
238
- confetti.style.animation = `fall ${animationDuration}s linear forwards`;
239
-
240
- // Keyframes
241
- const keyframes = `
242
- @keyframes fall {
243
- to {
244
- transform: translateY(calc(100vh + 20px)) rotate(${Math.random() * 360}deg);
245
- opacity: 0;
246
- }
247
- }
248
- `;
249
-
250
- // Add style if not already present
251
- if (!document.getElementById('confettiAnimation')) {
252
- const style = document.createElement('style');
253
- style.id = 'confettiAnimation';
254
- style.innerHTML = keyframes;
255
- document.head.appendChild(style);
256
- }
257
-
258
- container.appendChild(confetti);
259
-
260
- // Remove confetti after animation
261
- setTimeout(() => {
262
- confetti.remove();
263
- }, animationDuration * 1000);
264
- }
265
- }
266
- </script>
267
  </body>
 
268
  </html>
 
1
  <!DOCTYPE html>
2
  <html lang="en">
3
+
4
  <head>
5
+ <meta charset="UTF-8">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
+ <title>Artistic Oops!</title>
8
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
9
+ <style>
10
+ :root {
11
+ --primary: #ff6b6b;
12
+ --secondary: #4ecdc4;
13
+ --dark: #292f36;
14
+ --light: #f7fff7;
15
+ --accent: #ff9f1c;
16
+ --purple: #9b5de5;
17
+ --pink: #f15bb5;
18
+ --yellow: #fee440;
19
+ }
20
+
21
+ * {
22
+ margin: 0;
23
+ padding: 0;
24
+ box-sizing: border-box;
25
+ font-family: 'Comic Neue', cursive, 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
26
+ }
27
+
28
+ @import url('https://fonts.googleapis.com/css2?family=Comic+Neue:wght@400;700&display=swap');
29
+
30
+ body {
31
+ background: linear-gradient(135deg, #f5f7fa 0%, #e4e8f0 100%);
32
+ min-height: 100vh;
33
+ display: flex;
34
+ flex-direction: column;
35
+ align-items: center;
36
+ justify-content: center;
37
+ padding: 2rem;
38
+ color: var(--dark);
39
+ overflow-x: hidden;
40
+ }
41
+
42
+ header {
43
+ position: absolute;
44
+ top: 1rem;
45
+ left: 1rem;
46
+ z-index: 100;
47
+ }
48
+
49
+ header a {
50
+ color: var(--dark);
51
+ text-decoration: none;
52
+ font-size: 0.9rem;
53
+ opacity: 0.7;
54
+ transition: all 0.3s;
55
+ background: rgba(255, 255, 255, 0.7);
56
+ padding: 0.3rem 0.6rem;
57
+ border-radius: 20px;
58
+ backdrop-filter: blur(5px);
59
+ }
60
+
61
+ header a:hover {
62
+ opacity: 1;
63
+ transform: scale(1.05);
64
+ }
65
+
66
+ .container {
67
+ background-color: white;
68
+ border-radius: 1.5rem;
69
+ box-shadow: 0 15px 35px rgba(0, 0, 0, 0.1);
70
+ padding: 3rem;
71
+ max-width: 600px;
72
+ width: 100%;
73
+ text-align: center;
74
+ position: relative;
75
+ overflow: hidden;
76
+ border: 1px solid rgba(255, 255, 255, 0.3);
77
+ backdrop-filter: blur(10px);
78
+ z-index: 10;
79
+ }
80
+
81
+ .container::before {
82
+ content: '';
83
+ position: absolute;
84
+ top: -50%;
85
+ left: -50%;
86
+ width: 200%;
87
+ height: 200%;
88
+ background: radial-gradient(circle, rgba(255, 107, 107, 0.1) 0%, rgba(78, 205, 196, 0.1) 100%);
89
+ z-index: -1;
90
+ animation: rotate 20s linear infinite;
91
+ }
92
+
93
+ h1 {
94
+ color: var(--primary);
95
+ margin-bottom: 1.5rem;
96
+ font-size: 2.5rem;
97
+ text-shadow: 2px 2px 0px rgba(0, 0, 0, 0.1);
98
+ position: relative;
99
+ display: inline-block;
100
+ }
101
+
102
+ h1::after {
103
+ content: '';
104
+ position: absolute;
105
+ bottom: -5px;
106
+ left: 0;
107
+ width: 100%;
108
+ height: 3px;
109
+ background: linear-gradient(90deg, var(--primary), var(--secondary));
110
+ border-radius: 3px;
111
+ }
112
+
113
+ p {
114
+ font-size: 1.1rem;
115
+ line-height: 1.6;
116
+ margin-bottom: 2rem;
117
+ color: var(--dark);
118
+ }
119
+
120
+ .emoji {
121
+ font-size: 4rem;
122
+ margin-bottom: 1.5rem;
123
+ animation: bounce 2s infinite, rotateEmoji 5s infinite;
124
+ display: inline-block;
125
+ text-shadow: 3px 3px 0 rgba(0, 0, 0, 0.1);
126
+ }
127
+
128
+ .buttons {
129
+ display: flex;
130
+ gap: 1rem;
131
+ justify-content: center;
132
+ flex-wrap: wrap;
133
+ margin-top: 2rem;
134
+ }
135
+
136
+ button {
137
+ padding: 0.8rem 1.5rem;
138
+ border: none;
139
+ border-radius: 50px;
140
+ font-size: 1rem;
141
+ font-weight: 600;
142
+ cursor: pointer;
143
+ transition: all 0.3s ease;
144
+ position: relative;
145
+ overflow: hidden;
146
+ box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
147
+ }
148
+
149
+ button::after {
150
+ content: '';
151
+ position: absolute;
152
+ top: -50%;
153
+ left: -50%;
154
+ width: 200%;
155
+ height: 200%;
156
+ background: rgba(255, 255, 255, 0.2);
157
+ transform: rotate(30deg);
158
+ transition: all 0.3s;
159
+ }
160
+
161
+ button:hover::after {
162
+ left: 100%;
163
+ }
164
+
165
+ .primary-btn {
166
+ background: linear-gradient(45deg, var(--primary), var(--pink));
167
+ color: white;
168
+ }
169
+
170
+ .primary-btn:hover {
171
+ transform: translateY(-3px) scale(1.05);
172
+ box-shadow: 0 7px 14px rgba(255, 107, 107, 0.3);
173
+ }
174
+
175
+ .secondary-btn {
176
+ background: linear-gradient(45deg, var(--secondary), var(--purple));
177
+ color: white;
178
+ }
179
+
180
+ .secondary-btn:hover {
181
+ transform: translateY(-3px) scale(1.05);
182
+ box-shadow: 0 7px 14px rgba(78, 205, 196, 0.3);
183
+ }
184
+
185
+ .confetti {
186
+ position: absolute;
187
+ width: 10px;
188
+ height: 10px;
189
+ background-color: var(--accent);
190
+ opacity: 0;
191
+ z-index: 5;
192
+ }
193
+
194
+ .floating-shapes {
195
+ position: absolute;
196
+ width: 100%;
197
+ height: 100%;
198
+ top: 0;
199
+ left: 0;
200
+ pointer-events: none;
201
+ z-index: -1;
202
+ overflow: hidden;
203
+ }
204
+
205
+ .shape {
206
+ position: absolute;
207
+ opacity: 0.6;
208
+ border-radius: 50%;
209
+ filter: blur(1px);
210
+ animation: float 15s infinite linear;
211
+ }
212
+
213
+ @keyframes bounce {
214
+
215
+ 0%,
216
+ 100% {
217
+ transform: translateY(0) rotate(0deg);
218
+ }
219
+
220
+ 50% {
221
+ transform: translateY(-20px) rotate(5deg);
222
+ }
223
+ }
224
+
225
+ @keyframes rotateEmoji {
226
+ 0% {
227
+ transform: rotate(0deg);
228
+ }
229
+ 25% {
230
+ transform: rotate(5deg);
231
+ }
232
+ 50% {
233
+ transform: rotate(0deg);
234
+ }
235
+ 75% {
236
+ transform: rotate(-5deg);
237
+ }
238
+ 100% {
239
+ transform: rotate(0deg);
240
+ }
241
+ }
242
+
243
+ @keyframes rotate {
244
+ from {
245
+ transform: rotate(0deg);
246
+ }
247
+ to {
248
+ transform: rotate(360deg);
249
+ }
250
+ }
251
+
252
+ @keyframes float {
253
+ 0% {
254
+ transform: translateY(0) rotate(0deg);
255
+ }
256
+ 100% {
257
+ transform: translateY(-100vh) rotate(360deg);
258
+ }
259
+ }
260
+
261
+ .hidden {
262
+ display: none;
263
+ }
264
+
265
+ .message-box {
266
+ background-color: rgba(255, 255, 255, 0.95);
267
+ padding: 2rem;
268
+ border-radius: 1rem;
269
+ margin-top: 2rem;
270
+ animation: fadeIn 0.5s;
271
+ border: 1px solid rgba(0, 0, 0, 0.05);
272
+ box-shadow: 0 5px 15px rgba(0, 0, 0, 0.05);
273
+ position: relative;
274
+ overflow: hidden;
275
+ }
276
+
277
+ .message-box::before {
278
+ content: '';
279
+ position: absolute;
280
+ top: 0;
281
+ left: 0;
282
+ width: 5px;
283
+ height: 100%;
284
+ background: linear-gradient(to bottom, var(--primary), var(--secondary));
285
+ }
286
+
287
+ @keyframes fadeIn {
288
+ from {
289
+ opacity: 0;
290
+ transform: translateY(20px) scale(0.95);
291
+ }
292
+ to {
293
+ opacity: 1;
294
+ transform: translateY(0) scale(1);
295
+ }
296
+ }
297
+
298
+ .artistic-border {
299
+ position: absolute;
300
+ top: 0;
301
+ left: 0;
302
+ width: 100%;
303
+ height: 100%;
304
+ pointer-events: none;
305
+ z-index: -1;
306
+ }
307
+
308
+ .border-element {
309
+ position: absolute;
310
+ background: var(--accent);
311
+ opacity: 0.3;
312
+ border-radius: 50%;
313
+ }
314
+
315
+ @media (max-width: 600px) {
316
+ .container {
317
+ padding: 2rem 1.5rem;
318
+ }
319
+
320
+ h1 {
321
+ font-size: 2rem;
322
+ }
323
+
324
+ .emoji {
325
+ font-size: 3rem;
326
+ }
327
+
328
+ .buttons {
329
+ flex-direction: column;
330
+ }
331
+
332
+ button {
333
+ width: 100%;
334
+ }
335
+ }
336
+ </style>
337
+ </head>
338
+
339
+ <body>
340
+ <div class="floating-shapes" id="floatingShapes"></div>
341
+
342
+ <header>
343
+ <a href="https://huggingface.co/spaces/akhaliq/anycoder" target="_blank">Built with anycoder</a>
344
+ </header>
345
+
346
+ <div class="container">
347
+ <div class="emoji">🎨</div>
348
+ <h1>Creative Oops!</h1>
349
+ <p>Every mistake is just a happy accident waiting to become something beautiful. Let's turn this oops into art!</p>
350
+
351
+ <div class="buttons">
352
+ <button class="primary-btn" id="tryAgainBtn">Paint Again</button>
353
+ <button class="secondary-btn" id="somethingElseBtn">Try New Canvas</button>
354
+ </div>
355
+
356
+ <div id="tryAgainMessage" class="message-box hidden">
357
+ <h2>Artistic Persistence! πŸ–ŒοΈ</h2>
358
+ <p>The masters didn't create masterpieces on their first try either. Keep going - your next stroke might be perfect!</p>
359
+ <div class="emoji">✨</div>
360
+ </div>
361
+
362
+ <div id="somethingElseMessage" class="message-box hidden">
363
+ <h2>Fresh Perspective! 🌈</h2>
364
+ <p>Sometimes the most beautiful art comes from unexpected directions. What creative path will you explore next?</p>
365
+ <div class="emoji">🧠</div>
366
+ </div>
367
+ </div>
368
+
369
+ <script>
370
+ document.addEventListener('DOMContentLoaded', function() {
371
+ const tryAgainBtn = document.getElementById('tryAgainBtn');
372
+ const somethingElseBtn = document.getElementById('somethingElseBtn');
373
+ const tryAgainMessage = document.getElementById('tryAgainMessage');
374
+ const somethingElseMessage = document.getElementById('somethingElseMessage');
375
+ const floatingShapes = document.getElementById('floatingShapes');
376
+
377
+ // Create floating background shapes
378
+ createFloatingShapes(15);
379
+
380
+ tryAgainBtn.addEventListener('click', () => {
381
+ tryAgainMessage.classList.remove('hidden');
382
+ somethingElseMessage.classList.add('hidden');
383
+ createConfetti();
384
+ createPaintSplatters();
385
+ });
386
+
387
+ somethingElseBtn.addEventListener('click', () => {
388
+ somethingElseMessage.classList.remove('hidden');
389
+ tryAgainMessage.classList.add('hidden');
390
+ createColorBurst();
391
+ });
392
+
393
+ function createFloatingShapes(count) {
394
+ for (let i = 0; i < count; i++) {
395
+ const shape = document.createElement('div');
396
+ shape.classList.add('shape');
397
+
398
+ const size = Math.random() * 100 + 50;
399
+ const colors = ['var(--primary)', 'var(--secondary)', 'var(--accent)', 'var(--purple)', 'var(--pink)'];
400
+ const color = colors[Math.floor(Math.random() * colors.length)];
401
+
402
+ shape.style.width = `${size}px`;
403
+ shape.style.height = `${size}px`;
404
+ shape.style.backgroundColor = color;
405
+ shape.style.left = `${Math.random() * 100}%`;
406
+ shape.style.top = `${Math.random() * 100 + 100}%`;
407
+ shape.style.animationDuration = `${Math.random() * 20 + 10}s`;
408
+ shape.style.animationDelay = `${Math.random() * 5}s`;
409
+
410
+ floatingShapes.appendChild(shape);
411
  }
412
+ }
413
+
414
+ function createConfetti() {
415
+ const container = document.querySelector('.container');
416
 
417
+ for (let i = 0; i < 100; i++) {
418
+ const confetti = document.createElement('div');
419
+ confetti.classList.add('confetti');
420
+
421
+ // Random properties
422
+ const size = Math.random() * 12 + 3;
423
+ const color = `hsl(${Math.random() * 360}, 100%, 70%)`;
424
+ const left = Math.random() * 100;
425
+ const animationDuration = Math.random() * 3 + 2;
426
+
427
+ confetti.style.width = `${size}px`;
428
+ confetti.style.height = `${size}px`;
429
+ confetti.style.backgroundColor = color;
430
+ confetti.style.left = `${left}%`;
431
+ confetti.style.top = '-10px';
432
+ confetti.style.position = 'absolute';
433
+ confetti.style.borderRadius = Math.random() > 0.5 ? '50%' : '0';
434
+ confetti.style.opacity = '1';
435
+
436
+ // Animation
437
+ confetti.style.animation = `fall ${animationDuration}s linear forwards`;
438
+
439
+ // Keyframes
440
+ const keyframes = `
441
+ @keyframes fall {
442
+ to {
443
+ transform: translateY(calc(100vh + 20px)) rotate(${Math.random() * 360}deg);
444
+ opacity: 0;
445
+ }
446
+ }
447
+ `;
448
+
449
+ // Add style if not already present
450
+ if (!document.getElementById('confettiAnimation')) {
451
+ const style = document.createElement('style');
452
+ style.id = 'confettiAnimation';
453
+ style.innerHTML = keyframes;
454
+ document.head.appendChild(style);
455
+ }
456
+
457
+ container.appendChild(confetti);
458
+
459
+ // Remove confetti after animation
460
+ setTimeout(() => {
461
+ confetti.remove();
462
+ }, animationDuration * 1000);
463
  }
464
+ }
465
+
466
+ function createPaintSplatters() {
467
+ const container = document.querySelector('.container');
468
+ const splatters = ['🎨', 'πŸ–ŒοΈ', 'πŸ§‘β€πŸŽ¨', 'πŸ‘©β€πŸŽ¨', 'πŸ–ΌοΈ', '🌈'];
469
 
470
+ for (let i = 0; i < 15; i++) {
471
+ const splatter = document.createElement('div');
472
+ splatter.textContent = splatters[Math.floor(Math.random() * splatters.length)];
473
+ splatter.style.position = 'absolute';
474
+ splatter.style.fontSize = `${Math.random() * 20 + 10}px`;
475
+ splatter.style.left = `${Math.random() * 80 + 10}%`;
476
+ splatter.style.top = `${Math.random() * 80 + 10}%`;
477
+ splatter.style.opacity = '0.7';
478
+ splatter.style.transform = `rotate(${Math.random() * 360}deg) scale(${Math.random() * 0.5 + 0.5})`;
479
+ splatter.style.animation = `fadeOut 2s ${i * 0.1}s forwards`;
480
+
481
+ container.appendChild(splatter);
482
+
483
+ setTimeout(() => {
484
+ splatter.remove();
485
+ }, 2000 + i * 100);
486
  }
487
 
488
+ // Add fadeOut animation if not present
489
+ if (!document.getElementById('fadeOutAnimation')) {
490
+ const style = document.createElement('style');
491
+ style.id = 'fadeOutAnimation';
492
+ style.innerHTML = `
493
+ @keyframes fadeOut {
494
+ to {
495
+ opacity: 0;
496
+ transform: translateY(20px) rotate(360deg) scale(0);
497
+ }
498
+ }
499
+ `;
500
+ document.head.appendChild(style);
501
  }
502
+ }
503
+
504
+ function createColorBurst() {
505
+ const container = document.querySelector('.container');
506
+ const burst = document.createElement('div');
507
+ burst.style.position = 'absolute';
508
+ burst.style.width = '0';
509
+ burst.style.height = '0';
510
+ burst.style.left = '50%';
511
+ burst.style.top = '50%';
512
+ burst.style.borderRadius = '50%';
513
+ burst.style.transform = 'translate(-50%, -50%)';
514
+ burst.style.boxShadow = '0 0 0 0 rgba(255, 107, 107, 0.7)';
515
+ burst.style.transition = 'box-shadow 1s ease-out';
 
 
 
 
 
 
 
 
516
 
517
+ container.appendChild(burst);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
518
 
519
+ // Trigger the burst
520
+ setTimeout(() => {
521
+ burst.style.boxShadow = '0 0 0 200px rgba(255, 107, 107, 0)';
522
+ }, 10);
523
 
524
+ // Remove after animation
525
+ setTimeout(() => {
526
+ burst.remove();
527
+ }, 1100);
528
+ }
529
+ });
530
+ </script>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
531
  </body>
532
+
533
  </html>