SolarumAsteridion commited on
Commit
7c6653c
·
verified ·
1 Parent(s): 69c0dff

Update index.html

Browse files
Files changed (1) hide show
  1. index.html +402 -356
index.html CHANGED
@@ -4,50 +4,73 @@
4
  <meta charset="UTF-8">
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
  <title>Neon Exam Countdown</title>
7
- <link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;600;700;800&family=Orbitron:wght@400;600;700;900&display=swap" rel="stylesheet">
8
  <style>
9
  * { margin: 0; padding: 0; box-sizing: border-box; }
10
 
 
 
 
 
 
 
 
 
 
11
  body {
12
- font-family: 'Inter', sans-serif;
13
- background: #000000;
14
  min-height: 100vh;
15
  color: #fff;
16
  overflow-x: hidden;
17
- position: relative;
18
  }
19
 
20
- /* Animated Background */
21
- .animated-bg {
 
22
  position: fixed;
23
  top: 0;
24
  left: 0;
25
  width: 100%;
26
  height: 100%;
 
 
 
 
 
 
27
  z-index: 0;
28
- background: radial-gradient(ellipse at top, #1a0a2e 0%, #0a0a0f 50%, #000000 100%);
29
  }
30
 
31
- .animated-bg::before {
 
 
 
 
 
 
 
32
  content: '';
33
- position: absolute;
34
- width: 200%;
35
- height: 200%;
36
- top: -50%;
37
- left: -50%;
38
- background:
39
- radial-gradient(circle at 20% 50%, rgba(0, 212, 255, 0.15) 0%, transparent 50%),
40
- radial-gradient(circle at 80% 80%, rgba(255, 0, 128, 0.15) 0%, transparent 50%),
41
- radial-gradient(circle at 40% 20%, rgba(0, 255, 136, 0.1) 0%, transparent 50%);
42
- animation: bgRotate 20s linear infinite;
 
43
  }
44
 
45
- @keyframes bgRotate {
46
- 0% { transform: rotate(0deg); }
47
- 100% { transform: rotate(360deg); }
48
  }
49
 
50
- /* Enhanced Particles */
51
  .particles {
52
  position: fixed;
53
  top: 0;
@@ -56,114 +79,134 @@
56
  height: 100%;
57
  overflow: hidden;
58
  z-index: 1;
59
- pointer-events: none;
60
  }
61
 
62
  .particle {
63
  position: absolute;
64
  border-radius: 50%;
65
- animation: float linear infinite;
66
- filter: blur(1px);
67
- }
68
-
69
- .particle:nth-child(3n) {
70
- background: radial-gradient(circle, rgba(0, 212, 255, 0.8) 0%, transparent 70%);
71
- box-shadow: 0 0 10px rgba(0, 212, 255, 0.5);
72
  }
73
 
74
- .particle:nth-child(3n+1) {
75
- background: radial-gradient(circle, rgba(255, 0, 128, 0.8) 0%, transparent 70%);
76
- box-shadow: 0 0 10px rgba(255, 0, 128, 0.5);
 
 
 
77
  }
78
 
79
- .particle:nth-child(3n+2) {
80
- background: radial-gradient(circle, rgba(0, 255, 136, 0.8) 0%, transparent 70%);
81
- box-shadow: 0 0 10px rgba(0, 255, 136, 0.5);
 
 
 
82
  }
83
 
84
- @keyframes float {
85
  from {
86
  transform: translateY(100vh) translateX(0) scale(0);
87
  opacity: 0;
88
  }
89
  10% {
90
  opacity: 1;
91
- transform: translateY(90vh) translateX(20px) scale(1);
92
  }
93
  90% {
94
  opacity: 1;
 
95
  }
96
  to {
97
- transform: translateY(-10vh) translateX(100px) scale(0);
98
  opacity: 0;
99
  }
100
  }
101
 
 
 
 
 
 
102
  .container {
103
  max-width: 1400px;
104
  margin: 0 auto;
105
- padding: 3rem 2rem;
106
  position: relative;
107
  z-index: 2;
108
  }
109
 
110
- /* Enhanced Header */
111
  .header {
112
  display: flex;
113
  justify-content: space-between;
114
  align-items: center;
115
- margin-bottom: 4rem;
116
- padding: 2rem;
117
- background: rgba(255, 255, 255, 0.03);
118
- backdrop-filter: blur(20px);
119
- border-radius: 25px;
120
- border: 1px solid rgba(255, 255, 255, 0.1);
121
  position: relative;
122
- overflow: hidden;
123
  }
124
 
125
- .header::before {
126
  content: '';
127
  position: absolute;
128
- top: 0;
129
- left: -100%;
 
130
  width: 100%;
131
- height: 100%;
132
- background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.1), transparent);
133
- animation: shimmer 3s infinite;
 
 
 
 
 
134
  }
135
 
136
- @keyframes shimmer {
137
- 0% { left: -100%; }
138
- 100% { left: 100%; }
139
  }
140
 
141
  h1 {
142
- font-family: 'Orbitron', sans-serif;
143
  font-size: 3.5rem;
144
  font-weight: 900;
145
- background: linear-gradient(135deg, #00D4FF 0%, #FF0080 25%, #7928FF 50%, #00FF88 75%, #00D4FF 100%);
146
- background-size: 300% 100%;
 
 
 
 
 
 
 
147
  -webkit-background-clip: text;
148
  -webkit-text-fill-color: transparent;
149
  background-clip: text;
150
- animation: gradientShift 5s ease infinite;
151
- filter: drop-shadow(0 0 30px rgba(0, 212, 255, 0.5));
152
- position: relative;
153
  }
154
 
155
- @keyframes gradientShift {
156
- 0%, 100% { background-position: 0% 50%; }
157
  50% { background-position: 100% 50%; }
 
158
  }
159
 
 
160
  .settings-btn {
161
  width: 60px;
162
  height: 60px;
163
- background: linear-gradient(135deg, rgba(0, 212, 255, 0.2) 0%, rgba(255, 0, 128, 0.2) 100%);
164
- backdrop-filter: blur(10px);
165
- border: 2px solid rgba(0, 212, 255, 0.5);
166
- border-radius: 18px;
 
 
 
 
 
167
  display: flex;
168
  align-items: center;
169
  justify-content: center;
@@ -178,247 +221,187 @@
178
  position: absolute;
179
  top: 50%;
180
  left: 50%;
181
- width: 0;
182
- height: 0;
183
- background: radial-gradient(circle, rgba(0, 212, 255, 0.4) 0%, transparent 70%);
184
- border-radius: 50%;
185
- transform: translate(-50%, -50%);
186
- transition: width 0.6s, height 0.6s;
187
  }
188
 
189
- .settings-btn:hover::before {
190
- width: 200px;
191
- height: 200px;
 
 
 
192
  }
193
 
194
- .settings-btn:hover {
195
- background: linear-gradient(135deg, rgba(0, 212, 255, 0.4) 0%, rgba(255, 0, 128, 0.4) 100%);
196
- border-color: #00D4FF;
197
- box-shadow: 0 0 40px rgba(0, 212, 255, 0.8), 0 0 80px rgba(255, 0, 128, 0.4);
198
- transform: scale(1.15) rotate(90deg);
199
  }
200
 
201
  .settings-btn svg {
202
  width: 28px;
203
  height: 28px;
204
- fill: #00D4FF;
205
- filter: drop-shadow(0 0 5px rgba(0, 212, 255, 0.8));
206
- position: relative;
207
- z-index: 1;
 
 
 
208
  }
209
 
210
- /* Enhanced Grid */
211
  .exams-grid {
212
  display: grid;
213
  grid-template-columns: repeat(auto-fill, minmax(350px, 1fr));
214
- gap: 2.5rem;
 
215
  }
216
 
217
- /* Enhanced Exam Card */
218
  .exam-card {
219
- background: rgba(255, 255, 255, 0.03);
220
- backdrop-filter: blur(30px);
221
- border: 1px solid rgba(255, 255, 255, 0.1);
222
- border-radius: 30px;
 
 
 
 
 
 
 
223
  padding: 2.5rem;
224
  text-align: center;
225
  transition: all 0.5s cubic-bezier(0.175, 0.885, 0.32, 1.275);
226
  position: relative;
227
  overflow: hidden;
228
- box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);
 
229
  }
230
 
231
  .exam-card::before {
232
- content: '';
233
- position: absolute;
234
- top: 0;
235
- left: 0;
236
- width: 100%;
237
- height: 100%;
238
- background: linear-gradient(135deg, rgba(0, 212, 255, 0.1) 0%, rgba(255, 0, 128, 0.1) 100%);
239
- opacity: 0;
240
- transition: opacity 0.5s;
241
- }
242
-
243
- .exam-card:hover::before {
244
- opacity: 1;
245
- }
246
-
247
- .exam-card::after {
248
  content: '';
249
  position: absolute;
250
  top: -50%;
251
  left: -50%;
252
  width: 200%;
253
  height: 200%;
254
- background: conic-gradient(
255
- transparent,
256
- rgba(0, 212, 255, 0.3),
257
- transparent 30%
258
- );
259
- animation: rotate 4s linear infinite;
260
- opacity: 0;
261
- }
262
-
263
- .exam-card:hover::after {
264
- opacity: 1;
265
  }
266
 
267
- @keyframes rotate {
268
- 100% { transform: rotate(360deg); }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
269
  }
270
 
271
- .exam-card-inner {
272
- position: relative;
273
- z-index: 1;
274
- background: rgba(10, 10, 15, 0.8);
275
- border-radius: 25px;
276
- padding: 2rem;
277
  }
278
 
279
  .exam-card:hover {
280
- transform: translateY(-10px) scale(1.02);
281
- border-color: rgba(0, 212, 255, 0.5);
282
- box-shadow:
283
- 0 20px 60px rgba(0, 212, 255, 0.4),
284
- 0 0 100px rgba(255, 0, 128, 0.2),
285
- inset 0 0 50px rgba(0, 212, 255, 0.1);
286
- }
287
-
288
- .exam-card.urgent {
289
- border-color: rgba(255, 0, 128, 0.5);
290
- }
291
-
292
- .exam-card.urgent:hover {
293
  box-shadow:
294
- 0 20px 60px rgba(255, 0, 128, 0.4),
295
- 0 0 100px rgba(255, 0, 128, 0.3);
 
 
 
 
296
  }
297
 
298
- .exam-icon {
299
- width: 80px;
300
- height: 80px;
301
- margin: 0 auto 1.5rem;
302
- background: linear-gradient(135deg, #00D4FF 0%, #FF0080 100%);
303
- border-radius: 20px;
304
- display: flex;
305
- align-items: center;
306
- justify-content: center;
307
- font-size: 2.5rem;
308
- animation: pulse 2s ease-in-out infinite;
309
- box-shadow: 0 10px 30px rgba(0, 212, 255, 0.4);
310
- }
311
-
312
- @keyframes pulse {
313
- 0%, 100% { transform: scale(1); }
314
- 50% { transform: scale(1.05); }
315
  }
316
 
317
  .exam-name {
318
- font-family: 'Orbitron', sans-serif;
319
  font-size: 1.8rem;
320
  font-weight: 700;
321
  margin-bottom: 1.5rem;
322
- color: #fff;
323
- text-shadow: 0 0 20px rgba(0, 212, 255, 0.5);
324
- letter-spacing: 1px;
325
- }
326
-
327
- /* Detailed Countdown */
328
- .countdown-wrapper {
329
- display: grid;
330
- grid-template-columns: repeat(4, 1fr);
331
- gap: 1rem;
332
- margin: 2rem 0;
333
- }
334
-
335
- .countdown-item {
336
- background: rgba(255, 255, 255, 0.05);
337
- border-radius: 15px;
338
- padding: 1rem 0.5rem;
339
- border: 1px solid rgba(255, 255, 255, 0.1);
340
- transition: all 0.3s;
341
- }
342
-
343
- .countdown-item:hover {
344
- background: rgba(255, 255, 255, 0.08);
345
- transform: translateY(-3px);
346
- }
347
-
348
- .countdown-number {
349
- font-family: 'Orbitron', sans-serif;
350
- font-size: 2.5rem;
351
- font-weight: 900;
352
- background: linear-gradient(135deg, #00D4FF 0%, #00FF88 100%);
353
  -webkit-background-clip: text;
354
  -webkit-text-fill-color: transparent;
355
  background-clip: text;
356
- text-shadow: 0 0 30px rgba(0, 212, 255, 0.8);
357
- line-height: 1;
358
- margin-bottom: 0.5rem;
359
  }
360
 
361
- .exam-card.urgent .countdown-number {
362
- background: linear-gradient(135deg, #FF0080 0%, #FF6B35 100%);
 
 
 
 
 
 
363
  -webkit-background-clip: text;
364
  -webkit-text-fill-color: transparent;
365
  background-clip: text;
 
 
 
 
 
 
366
  }
367
 
368
- .countdown-label {
369
- font-size: 0.75rem;
370
- color: rgba(255, 255, 255, 0.6);
371
- text-transform: uppercase;
372
- letter-spacing: 1px;
373
- font-weight: 600;
374
- }
375
-
376
- /* Progress Bar */
377
- .progress-container {
378
- width: 100%;
379
- height: 8px;
380
- background: rgba(255, 255, 255, 0.1);
381
- border-radius: 10px;
382
- overflow: hidden;
383
- margin: 1.5rem 0;
384
- position: relative;
385
- }
386
-
387
- .progress-bar {
388
- height: 100%;
389
- background: linear-gradient(90deg, #00D4FF 0%, #FF0080 50%, #00FF88 100%);
390
- background-size: 200% 100%;
391
- border-radius: 10px;
392
- transition: width 1s ease;
393
- animation: progressShimmer 2s linear infinite;
394
- box-shadow: 0 0 20px rgba(0, 212, 255, 0.6);
395
  }
396
 
397
- @keyframes progressShimmer {
398
- 0% { background-position: 0% 50%; }
399
- 100% { background-position: 200% 50%; }
 
 
 
400
  }
401
 
402
  .exam-date {
403
- font-size: 1rem;
404
- color: rgba(255, 255, 255, 0.6);
405
  margin-top: 1.5rem;
406
- padding: 0.8rem;
407
- background: rgba(255, 255, 255, 0.05);
408
- border-radius: 10px;
409
- border: 1px solid rgba(255, 255, 255, 0.1);
410
- font-weight: 600;
411
  }
412
 
 
413
  .delete-btn {
414
  position: absolute;
415
  top: 1.5rem;
416
  right: 1.5rem;
417
- width: 40px;
418
- height: 40px;
419
- background: rgba(255, 0, 80, 0.2);
420
- backdrop-filter: blur(10px);
421
- border: 1px solid rgba(255, 0, 80, 0.5);
 
422
  border-radius: 12px;
423
  display: flex;
424
  align-items: center;
@@ -426,26 +409,23 @@
426
  cursor: pointer;
427
  transition: all 0.3s ease;
428
  opacity: 0;
429
- z-index: 10;
430
  }
431
 
432
  .exam-card:hover .delete-btn {
433
- opacity: 1;
 
434
  }
435
 
436
  .delete-btn:hover {
437
- background: rgba(255, 0, 80, 0.6);
 
 
438
  transform: scale(1.2) rotate(90deg);
439
- box-shadow: 0 0 20px rgba(255, 0, 80, 0.8);
440
  }
441
 
442
- .delete-btn svg {
443
- width: 20px;
444
- height: 20px;
445
- fill: #fff;
446
- }
447
-
448
- /* Enhanced Modal */
449
  .modal {
450
  display: none;
451
  position: fixed;
@@ -459,10 +439,10 @@
459
  align-items: center;
460
  justify-content: center;
461
  padding: 2rem;
462
- animation: fadeIn 0.3s ease;
463
  }
464
 
465
- @keyframes fadeIn {
466
  from { opacity: 0; }
467
  to { opacity: 1; }
468
  }
@@ -472,17 +452,22 @@
472
  }
473
 
474
  .modal-content {
475
- background: linear-gradient(135deg, rgba(20, 20, 30, 0.95) 0%, rgba(10, 10, 20, 0.95) 100%);
476
- backdrop-filter: blur(30px);
477
- border: 2px solid rgba(0, 212, 255, 0.3);
 
 
 
 
 
478
  border-radius: 30px;
479
  padding: 3rem;
480
  width: 100%;
481
  max-width: 500px;
482
  box-shadow:
483
- 0 30px 60px rgba(0, 0, 0, 0.8),
484
- 0 0 100px rgba(0, 212, 255, 0.3),
485
- inset 0 0 50px rgba(0, 212, 255, 0.05);
486
  animation: modalSlideIn 0.5s cubic-bezier(0.175, 0.885, 0.32, 1.275);
487
  position: relative;
488
  overflow: hidden;
@@ -495,23 +480,20 @@
495
  left: -50%;
496
  width: 200%;
497
  height: 200%;
498
- background: conic-gradient(
499
- transparent,
500
- rgba(0, 212, 255, 0.1),
501
- transparent 30%
502
- );
503
- animation: rotate 4s linear infinite;
504
  }
505
 
506
  @keyframes modalSlideIn {
507
- from {
508
- transform: translateY(-100px);
509
- opacity: 0;
510
- }
511
- to {
512
- transform: translateY(0);
513
- opacity: 1;
514
- }
515
  }
516
 
517
  .modal-header {
@@ -524,20 +506,21 @@
524
  }
525
 
526
  .modal-title {
527
- font-family: 'Orbitron', sans-serif;
528
  font-size: 2rem;
529
  font-weight: 700;
530
- background: linear-gradient(135deg, #00D4FF 0%, #FF0080 100%);
531
  -webkit-background-clip: text;
532
  -webkit-text-fill-color: transparent;
533
  background-clip: text;
 
 
534
  }
535
 
536
  .close-btn {
537
  width: 40px;
538
  height: 40px;
539
- background: rgba(255, 0, 80, 0.2);
540
- border: 1px solid rgba(255, 0, 80, 0.5);
541
  border-radius: 12px;
542
  cursor: pointer;
543
  display: flex;
@@ -548,170 +531,233 @@
548
 
549
  .close-btn:hover {
550
  transform: rotate(90deg) scale(1.1);
551
- background: rgba(255, 0, 80, 0.4);
552
- box-shadow: 0 0 20px rgba(255, 0, 80, 0.6);
553
- }
554
-
555
- /* Enhanced Form */
556
- #addExamForm {
557
- position: relative;
558
- z-index: 1;
559
  }
560
 
 
561
  .form-group {
562
  margin-bottom: 2rem;
563
  position: relative;
 
564
  }
565
 
566
  .form-group label {
567
  display: block;
568
- margin-bottom: 0.8rem;
569
- font-weight: 600;
570
- color: rgba(255, 255, 255, 0.8);
571
  font-size: 0.95rem;
 
572
  text-transform: uppercase;
573
- letter-spacing: 1px;
 
574
  }
575
 
576
  .form-group input {
577
  width: 100%;
578
- padding: 1.2rem 1.5rem;
579
- background: rgba(255, 255, 255, 0.05);
580
- border: 2px solid rgba(255, 255, 255, 0.1);
581
- border-radius: 15px;
582
  color: #fff;
583
  font-size: 1.1rem;
584
- font-family: 'Inter', sans-serif;
585
  transition: all 0.3s ease;
586
- backdrop-filter: blur(10px);
587
  }
588
 
589
  .form-group input:focus {
590
  outline: none;
591
- border-color: #00D4FF;
592
- background: rgba(255, 255, 255, 0.08);
593
  box-shadow:
594
- 0 0 0 4px rgba(0, 212, 255, 0.1),
595
- 0 0 30px rgba(0, 212, 255, 0.3);
596
- transform: translateY(-2px);
597
  }
598
 
599
  .form-group input::placeholder {
600
  color: rgba(255, 255, 255, 0.3);
601
  }
602
 
 
603
  .add-btn {
604
  width: 100%;
605
- padding: 1.3rem;
606
- background: linear-gradient(135deg, #00D4FF 0%, #FF0080 50%, #00FF88 100%);
607
- background-size: 200% 100%;
608
  border: none;
609
- border-radius: 15px;
610
  color: #fff;
611
- font-size: 1.1rem;
612
  font-weight: 700;
613
  cursor: pointer;
614
- transition: all 0.4s ease;
615
  text-transform: uppercase;
616
  letter-spacing: 2px;
617
- font-family: 'Orbitron', sans-serif;
618
  position: relative;
619
  overflow: hidden;
620
- box-shadow: 0 10px 30px rgba(0, 212, 255, 0.4);
621
  }
622
 
623
  .add-btn::before {
624
  content: '';
625
  position: absolute;
626
- top: 0;
627
- left: -100%;
628
- width: 100%;
629
- height: 100%;
630
- background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.3), transparent);
631
- transition: left 0.5s;
632
- }
633
-
634
- .add-btn:hover::before {
635
- left: 100%;
636
  }
637
 
638
  .add-btn:hover {
639
- transform: translateY(-3px);
640
  box-shadow:
641
- 0 15px 40px rgba(0, 212, 255, 0.6),
642
- 0 0 60px rgba(255, 0, 128, 0.4);
643
- background-position: 100% 0;
644
  }
645
 
646
- .add-btn:active {
647
- transform: translateY(-1px);
 
648
  }
649
 
650
- /* Empty State */
651
  .empty-state {
652
  text-align: center;
653
  padding: 6rem 2rem;
654
- background: rgba(255, 255, 255, 0.03);
655
- backdrop-filter: blur(20px);
656
- border-radius: 30px;
657
- border: 2px dashed rgba(255, 255, 255, 0.2);
658
  }
659
 
660
- .empty-state-icon {
661
- font-size: 5rem;
 
 
662
  margin-bottom: 2rem;
663
- animation: float-icon 3s ease-in-out infinite;
664
  }
665
 
666
- @keyframes float-icon {
667
- 0%, 100% { transform: translateY(0px); }
668
  50% { transform: translateY(-20px); }
669
  }
670
 
671
  .empty-state p {
672
- font-size: 1.3rem;
673
- color: rgba(255, 255, 255, 0.5);
674
- line-height: 1.8;
 
 
 
 
 
 
 
 
 
 
 
 
675
  }
676
 
677
  /* Responsive */
678
  @media (max-width: 768px) {
679
- h1 { font-size: 2.5rem; }
 
680
  .exams-grid { grid-template-columns: 1fr; }
681
- .countdown-wrapper { grid-template-columns: repeat(2, 1fr); }
682
- .countdown-number { font-size: 2rem; }
683
- .header { padding: 1.5rem; }
684
- }
685
-
686
- /* Color Input */
687
- input[type="color"] {
688
- width: 100%;
689
- height: 60px;
690
- border: none;
691
- border-radius: 15px;
692
- cursor: pointer;
693
  }
694
  </style>
695
  </head>
696
  <body>
 
 
 
 
 
 
 
 
 
697
  <div class="particles" id="particles"></div>
 
698
  <div class="container">
699
- <div class="header"><h1>Exam Countdown</h1><div class="settings-btn" id="openModalBtn"><svg viewBox="0 0 24 24"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm5 11h-4v4h-2v-4H7v-2h4V7h2v4h4v2z"/></svg></div></div>
 
 
 
 
 
 
 
 
700
  <div class="exams-grid" id="examsGrid"></div>
701
- <div class="empty-state" id="emptyState" style="display: none;"><p>No exams scheduled yet. Click the + button to add your first exam!</p></div>
 
 
 
702
  </div>
 
703
  <div class="modal" id="modal">
704
  <div class="modal-content">
705
- <div class="modal-header"><h2 class="modal-title">Add New Exam</h2><button class="close-btn" id="closeModalBtn"><svg width="24" height="24" viewBox="0 0 24 24" fill="#fff"><path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg></button></div>
 
 
 
 
 
 
 
 
706
  <form id="addExamForm">
707
- <div class="form-group"><label for="examName">Exam Name</label><input type="text" id="examName" required placeholder="e.g., Physics Final"></div>
708
- <div class="form-group"><label for="examDate">Exam Date</label><input type="date" id="examDate" required></div>
 
 
 
 
 
 
709
  <button type="submit" class="add-btn">Add Exam</button>
710
  </form>
711
  </div>
712
  </div>
713
 
714
  <script>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
715
  // Create particles
716
  const particlesContainer = document.getElementById('particles');
717
  for (let i = 0; i < 50; i++) {
 
4
  <meta charset="UTF-8">
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
  <title>Neon Exam Countdown</title>
7
+ <link href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@300;400;500;600;700&family=Orbitron:wght@400;500;600;700;800;900&display=swap" rel="stylesheet">
8
  <style>
9
  * { margin: 0; padding: 0; box-sizing: border-box; }
10
 
11
+ :root {
12
+ --neon-pink: #FF006E;
13
+ --neon-blue: #00D9FF;
14
+ --neon-purple: #8B39FF;
15
+ --neon-green: #39FF14;
16
+ --neon-yellow: #FFFF00;
17
+ --dark-bg: #0A0A0F;
18
+ }
19
+
20
  body {
21
+ font-family: 'Space Grotesk', sans-serif;
22
+ background: var(--dark-bg);
23
  min-height: 100vh;
24
  color: #fff;
25
  overflow-x: hidden;
26
+ position: relative;
27
  }
28
 
29
+ /* Animated gradient background */
30
+ body::before {
31
+ content: '';
32
  position: fixed;
33
  top: 0;
34
  left: 0;
35
  width: 100%;
36
  height: 100%;
37
+ background:
38
+ radial-gradient(circle at 20% 80%, rgba(255, 0, 110, 0.1) 0%, transparent 50%),
39
+ radial-gradient(circle at 80% 20%, rgba(0, 217, 255, 0.1) 0%, transparent 50%),
40
+ radial-gradient(circle at 40% 40%, rgba(139, 57, 255, 0.1) 0%, transparent 50%),
41
+ radial-gradient(circle at 90% 70%, rgba(57, 255, 20, 0.05) 0%, transparent 50%);
42
+ animation: gradientShift 15s ease infinite;
43
  z-index: 0;
 
44
  }
45
 
46
+ @keyframes gradientShift {
47
+ 0%, 100% { transform: rotate(0deg) scale(1); }
48
+ 33% { transform: rotate(120deg) scale(1.1); }
49
+ 66% { transform: rotate(240deg) scale(1.05); }
50
+ }
51
+
52
+ /* Grid background */
53
+ body::after {
54
  content: '';
55
+ position: fixed;
56
+ top: 0;
57
+ left: 0;
58
+ width: 100%;
59
+ height: 100%;
60
+ background-image:
61
+ linear-gradient(rgba(0, 217, 255, 0.03) 1px, transparent 1px),
62
+ linear-gradient(90deg, rgba(0, 217, 255, 0.03) 1px, transparent 1px);
63
+ background-size: 50px 50px;
64
+ animation: gridMove 10s linear infinite;
65
+ z-index: 0;
66
  }
67
 
68
+ @keyframes gridMove {
69
+ 0% { transform: translate(0, 0); }
70
+ 100% { transform: translate(50px, 50px); }
71
  }
72
 
73
+ /* Enhanced particles */
74
  .particles {
75
  position: fixed;
76
  top: 0;
 
79
  height: 100%;
80
  overflow: hidden;
81
  z-index: 1;
 
82
  }
83
 
84
  .particle {
85
  position: absolute;
86
  border-radius: 50%;
87
+ pointer-events: none;
 
 
 
 
 
 
88
  }
89
 
90
+ .particle.orb {
91
+ width: 6px;
92
+ height: 6px;
93
+ background: radial-gradient(circle, var(--neon-blue) 0%, transparent 70%);
94
+ box-shadow: 0 0 10px var(--neon-blue), 0 0 20px var(--neon-blue);
95
+ animation: floatOrb 20s infinite linear;
96
  }
97
 
98
+ .particle.star {
99
+ width: 2px;
100
+ height: 2px;
101
+ background: white;
102
+ box-shadow: 0 0 6px white;
103
+ animation: twinkle 3s infinite;
104
  }
105
 
106
+ @keyframes floatOrb {
107
  from {
108
  transform: translateY(100vh) translateX(0) scale(0);
109
  opacity: 0;
110
  }
111
  10% {
112
  opacity: 1;
113
+ transform: translateY(90vh) translateX(10px) scale(1);
114
  }
115
  90% {
116
  opacity: 1;
117
+ transform: translateY(10vh) translateX(-10px) scale(1);
118
  }
119
  to {
120
+ transform: translateY(-100vh) translateX(100px) scale(0);
121
  opacity: 0;
122
  }
123
  }
124
 
125
+ @keyframes twinkle {
126
+ 0%, 100% { opacity: 0; transform: scale(0.5); }
127
+ 50% { opacity: 1; transform: scale(1); }
128
+ }
129
+
130
  .container {
131
  max-width: 1400px;
132
  margin: 0 auto;
133
+ padding: 2rem;
134
  position: relative;
135
  z-index: 2;
136
  }
137
 
138
+ /* Enhanced header */
139
  .header {
140
  display: flex;
141
  justify-content: space-between;
142
  align-items: center;
143
+ margin-bottom: 4rem;
144
+ padding: 2rem 0;
 
 
 
 
145
  position: relative;
 
146
  }
147
 
148
+ .header::after {
149
  content: '';
150
  position: absolute;
151
+ bottom: 0;
152
+ left: 50%;
153
+ transform: translateX(-50%);
154
  width: 100%;
155
+ height: 1px;
156
+ background: linear-gradient(90deg,
157
+ transparent,
158
+ var(--neon-blue) 20%,
159
+ var(--neon-pink) 50%,
160
+ var(--neon-purple) 80%,
161
+ transparent);
162
+ animation: lineGlow 3s ease-in-out infinite;
163
  }
164
 
165
+ @keyframes lineGlow {
166
+ 0%, 100% { opacity: 0.3; }
167
+ 50% { opacity: 1; }
168
  }
169
 
170
  h1 {
171
+ font-family: 'Orbitron', monospace;
172
  font-size: 3.5rem;
173
  font-weight: 900;
174
+ text-transform: uppercase;
175
+ letter-spacing: 3px;
176
+ background: linear-gradient(135deg,
177
+ var(--neon-blue) 0%,
178
+ var(--neon-pink) 25%,
179
+ var(--neon-purple) 50%,
180
+ var(--neon-green) 75%,
181
+ var(--neon-blue) 100%);
182
+ background-size: 300% 300%;
183
  -webkit-background-clip: text;
184
  -webkit-text-fill-color: transparent;
185
  background-clip: text;
186
+ animation: gradientFlow 4s ease infinite;
187
+ filter: drop-shadow(0 0 30px rgba(0, 217, 255, 0.5))
188
+ drop-shadow(0 0 60px rgba(255, 0, 110, 0.3));
189
  }
190
 
191
+ @keyframes gradientFlow {
192
+ 0% { background-position: 0% 50%; }
193
  50% { background-position: 100% 50%; }
194
+ 100% { background-position: 0% 50%; }
195
  }
196
 
197
+ /* Enhanced settings button */
198
  .settings-btn {
199
  width: 60px;
200
  height: 60px;
201
+ background: linear-gradient(135deg,
202
+ rgba(0, 217, 255, 0.1) 0%,
203
+ rgba(255, 0, 110, 0.1) 100%);
204
+ backdrop-filter: blur(20px);
205
+ border: 2px solid transparent;
206
+ background-origin: border-box;
207
+ background-clip: padding-box, border-box;
208
+ border-image: linear-gradient(135deg, var(--neon-blue), var(--neon-pink)) 1;
209
+ border-radius: 16px;
210
  display: flex;
211
  align-items: center;
212
  justify-content: center;
 
221
  position: absolute;
222
  top: 50%;
223
  left: 50%;
224
+ width: 100%;
225
+ height: 100%;
226
+ background: radial-gradient(circle, var(--neon-blue) 0%, transparent 70%);
227
+ transform: translate(-50%, -50%) scale(0);
228
+ transition: transform 0.5s ease;
229
+ z-index: -1;
230
  }
231
 
232
+ .settings-btn:hover {
233
+ transform: scale(1.1) rotate(90deg);
234
+ box-shadow:
235
+ 0 0 30px rgba(0, 217, 255, 0.6),
236
+ 0 0 60px rgba(255, 0, 110, 0.4),
237
+ inset 0 0 20px rgba(0, 217, 255, 0.2);
238
  }
239
 
240
+ .settings-btn:hover::before {
241
+ transform: translate(-50%, -50%) scale(2);
 
 
 
242
  }
243
 
244
  .settings-btn svg {
245
  width: 28px;
246
  height: 28px;
247
+ fill: url(#iconGradient);
248
+ filter: drop-shadow(0 0 10px var(--neon-blue));
249
+ transition: transform 0.4s ease;
250
+ }
251
+
252
+ .settings-btn:hover svg {
253
+ transform: rotate(-90deg);
254
  }
255
 
256
+ /* Enhanced exam grid */
257
  .exams-grid {
258
  display: grid;
259
  grid-template-columns: repeat(auto-fill, minmax(350px, 1fr));
260
+ gap: 2.5rem;
261
+ padding: 2rem 0;
262
  }
263
 
264
+ /* Ultra enhanced exam cards */
265
  .exam-card {
266
+ background: linear-gradient(135deg,
267
+ rgba(0, 217, 255, 0.05) 0%,
268
+ rgba(255, 0, 110, 0.05) 100%);
269
+ backdrop-filter: blur(40px) saturate(150%);
270
+ border: 1px solid transparent;
271
+ background-origin: border-box;
272
+ background-clip: padding-box, border-box;
273
+ border-image: linear-gradient(135deg,
274
+ rgba(0, 217, 255, 0.3),
275
+ rgba(255, 0, 110, 0.3)) 1;
276
+ border-radius: 24px;
277
  padding: 2.5rem;
278
  text-align: center;
279
  transition: all 0.5s cubic-bezier(0.175, 0.885, 0.32, 1.275);
280
  position: relative;
281
  overflow: hidden;
282
+ transform-style: preserve-3d;
283
+ perspective: 1000px;
284
  }
285
 
286
  .exam-card::before {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
287
  content: '';
288
  position: absolute;
289
  top: -50%;
290
  left: -50%;
291
  width: 200%;
292
  height: 200%;
293
+ background: radial-gradient(circle,
294
+ rgba(0, 217, 255, 0.1) 0%,
295
+ transparent 40%);
296
+ animation: cardPulse 4s ease-in-out infinite;
297
+ pointer-events: none;
 
 
 
 
 
 
298
  }
299
 
300
+ .exam-card::after {
301
+ content: '';
302
+ position: absolute;
303
+ top: 0;
304
+ left: 0;
305
+ right: 0;
306
+ bottom: 0;
307
+ background: linear-gradient(105deg,
308
+ transparent 40%,
309
+ rgba(255, 255, 255, 0.05) 45%,
310
+ rgba(255, 255, 255, 0.1) 50%,
311
+ rgba(255, 255, 255, 0.05) 55%,
312
+ transparent 60%);
313
+ transform: translateX(-100%);
314
+ transition: transform 0.6s;
315
+ pointer-events: none;
316
  }
317
 
318
+ @keyframes cardPulse {
319
+ 0%, 100% { transform: scale(1) rotate(0deg); opacity: 0.5; }
320
+ 50% { transform: scale(1.2) rotate(180deg); opacity: 0.8; }
 
 
 
321
  }
322
 
323
  .exam-card:hover {
324
+ transform: translateY(-10px) rotateX(5deg) scale(1.02);
 
 
 
 
 
 
 
 
 
 
 
 
325
  box-shadow:
326
+ 0 20px 40px rgba(0, 217, 255, 0.3),
327
+ 0 40px 80px rgba(255, 0, 110, 0.2),
328
+ inset 0 0 30px rgba(0, 217, 255, 0.1);
329
+ border-image: linear-gradient(135deg,
330
+ var(--neon-blue),
331
+ var(--neon-pink)) 1;
332
  }
333
 
334
+ .exam-card:hover::after {
335
+ transform: translateX(100%);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
336
  }
337
 
338
  .exam-name {
 
339
  font-size: 1.8rem;
340
  font-weight: 700;
341
  margin-bottom: 1.5rem;
342
+ background: linear-gradient(135deg, #fff 0%, #00D9FF 100%);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
343
  -webkit-background-clip: text;
344
  -webkit-text-fill-color: transparent;
345
  background-clip: text;
346
+ text-transform: uppercase;
347
+ letter-spacing: 2px;
348
+ filter: drop-shadow(0 2px 10px rgba(0, 217, 255, 0.5));
349
  }
350
 
351
+ .countdown {
352
+ font-family: 'Orbitron', monospace;
353
+ font-size: 4rem;
354
+ font-weight: 900;
355
+ background: linear-gradient(135deg,
356
+ var(--neon-blue) 0%,
357
+ var(--neon-pink) 50%,
358
+ var(--neon-purple) 100%);
359
  -webkit-background-clip: text;
360
  -webkit-text-fill-color: transparent;
361
  background-clip: text;
362
+ text-shadow:
363
+ 0 0 40px currentColor,
364
+ 0 0 80px currentColor;
365
+ margin-bottom: 0.5rem;
366
+ animation: countdownPulse 2s ease-in-out infinite;
367
+ letter-spacing: 3px;
368
  }
369
 
370
+ @keyframes countdownPulse {
371
+ 0%, 100% { transform: scale(1); filter: brightness(1); }
372
+ 50% { transform: scale(1.05); filter: brightness(1.2); }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
373
  }
374
 
375
+ .countdown-label {
376
+ font-size: 1.1rem;
377
+ color: rgba(255, 255, 255, 0.9);
378
+ text-transform: uppercase;
379
+ letter-spacing: 4px;
380
+ font-weight: 300;
381
  }
382
 
383
  .exam-date {
384
+ font-size: 0.95rem;
385
+ color: rgba(0, 217, 255, 0.7);
386
  margin-top: 1.5rem;
387
+ padding: 0.5rem 1rem;
388
+ background: rgba(0, 217, 255, 0.1);
389
+ border-radius: 20px;
390
+ display: inline-block;
391
+ border: 1px solid rgba(0, 217, 255, 0.3);
392
  }
393
 
394
+ /* Enhanced delete button */
395
  .delete-btn {
396
  position: absolute;
397
  top: 1.5rem;
398
  right: 1.5rem;
399
+ width: 36px;
400
+ height: 36px;
401
+ background: linear-gradient(135deg,
402
+ rgba(255, 0, 110, 0.2) 0%,
403
+ rgba(255, 0, 0, 0.2) 100%);
404
+ border: 2px solid rgba(255, 0, 110, 0.5);
405
  border-radius: 12px;
406
  display: flex;
407
  align-items: center;
 
409
  cursor: pointer;
410
  transition: all 0.3s ease;
411
  opacity: 0;
412
+ transform: scale(0.8);
413
  }
414
 
415
  .exam-card:hover .delete-btn {
416
+ opacity: 1;
417
+ transform: scale(1);
418
  }
419
 
420
  .delete-btn:hover {
421
+ background: linear-gradient(135deg,
422
+ rgba(255, 0, 110, 0.4) 0%,
423
+ rgba(255, 0, 0, 0.4) 100%);
424
  transform: scale(1.2) rotate(90deg);
425
+ box-shadow: 0 0 20px rgba(255, 0, 110, 0.6);
426
  }
427
 
428
+ /* Enhanced modal */
 
 
 
 
 
 
429
  .modal {
430
  display: none;
431
  position: fixed;
 
439
  align-items: center;
440
  justify-content: center;
441
  padding: 2rem;
442
+ animation: modalFadeIn 0.3s ease;
443
  }
444
 
445
+ @keyframes modalFadeIn {
446
  from { opacity: 0; }
447
  to { opacity: 1; }
448
  }
 
452
  }
453
 
454
  .modal-content {
455
+ background: linear-gradient(135deg,
456
+ rgba(20, 20, 30, 0.98) 0%,
457
+ rgba(30, 20, 40, 0.98) 100%);
458
+ backdrop-filter: blur(40px) saturate(150%);
459
+ border: 2px solid transparent;
460
+ background-origin: border-box;
461
+ background-clip: padding-box, border-box;
462
+ border-image: linear-gradient(135deg, var(--neon-blue), var(--neon-pink)) 1;
463
  border-radius: 30px;
464
  padding: 3rem;
465
  width: 100%;
466
  max-width: 500px;
467
  box-shadow:
468
+ 0 30px 60px rgba(0, 0, 0, 0.5),
469
+ 0 0 100px rgba(0, 217, 255, 0.2),
470
+ inset 0 0 30px rgba(0, 217, 255, 0.05);
471
  animation: modalSlideIn 0.5s cubic-bezier(0.175, 0.885, 0.32, 1.275);
472
  position: relative;
473
  overflow: hidden;
 
480
  left: -50%;
481
  width: 200%;
482
  height: 200%;
483
+ background: radial-gradient(circle,
484
+ rgba(0, 217, 255, 0.1) 0%,
485
+ transparent 40%);
486
+ animation: modalGlow 4s ease-in-out infinite;
 
 
487
  }
488
 
489
  @keyframes modalSlideIn {
490
+ from { transform: translateY(-50px) scale(0.9); opacity: 0; }
491
+ to { transform: translateY(0) scale(1); opacity: 1; }
492
+ }
493
+
494
+ @keyframes modalGlow {
495
+ 0%, 100% { transform: rotate(0deg); }
496
+ 50% { transform: rotate(180deg); }
 
497
  }
498
 
499
  .modal-header {
 
506
  }
507
 
508
  .modal-title {
 
509
  font-size: 2rem;
510
  font-weight: 700;
511
+ background: linear-gradient(135deg, var(--neon-blue) 0%, var(--neon-pink) 100%);
512
  -webkit-background-clip: text;
513
  -webkit-text-fill-color: transparent;
514
  background-clip: text;
515
+ text-transform: uppercase;
516
+ letter-spacing: 2px;
517
  }
518
 
519
  .close-btn {
520
  width: 40px;
521
  height: 40px;
522
+ background: rgba(255, 0, 110, 0.1);
523
+ border: 2px solid rgba(255, 0, 110, 0.3);
524
  border-radius: 12px;
525
  cursor: pointer;
526
  display: flex;
 
531
 
532
  .close-btn:hover {
533
  transform: rotate(90deg) scale(1.1);
534
+ background: rgba(255, 0, 110, 0.2);
535
+ box-shadow: 0 0 20px rgba(255, 0, 110, 0.5);
 
 
 
 
 
 
536
  }
537
 
538
+ /* Enhanced form */
539
  .form-group {
540
  margin-bottom: 2rem;
541
  position: relative;
542
+ z-index: 1;
543
  }
544
 
545
  .form-group label {
546
  display: block;
547
+ margin-bottom: 0.75rem;
 
 
548
  font-size: 0.95rem;
549
+ color: var(--neon-blue);
550
  text-transform: uppercase;
551
+ letter-spacing: 2px;
552
+ font-weight: 500;
553
  }
554
 
555
  .form-group input {
556
  width: 100%;
557
+ padding: 1.2rem;
558
+ background: rgba(0, 217, 255, 0.05);
559
+ border: 2px solid rgba(0, 217, 255, 0.2);
560
+ border-radius: 12px;
561
  color: #fff;
562
  font-size: 1.1rem;
 
563
  transition: all 0.3s ease;
564
+ font-family: 'Space Grotesk', sans-serif;
565
  }
566
 
567
  .form-group input:focus {
568
  outline: none;
569
+ border-color: var(--neon-blue);
570
+ background: rgba(0, 217, 255, 0.1);
571
  box-shadow:
572
+ 0 0 20px rgba(0, 217, 255, 0.3),
573
+ inset 0 0 10px rgba(0, 217, 255, 0.1);
 
574
  }
575
 
576
  .form-group input::placeholder {
577
  color: rgba(255, 255, 255, 0.3);
578
  }
579
 
580
+ /* Enhanced add button */
581
  .add-btn {
582
  width: 100%;
583
+ padding: 1.5rem;
584
+ background: linear-gradient(135deg, var(--neon-blue) 0%, var(--neon-pink) 100%);
 
585
  border: none;
586
+ border-radius: 16px;
587
  color: #fff;
588
+ font-size: 1.2rem;
589
  font-weight: 700;
590
  cursor: pointer;
591
+ transition: all 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275);
592
  text-transform: uppercase;
593
  letter-spacing: 2px;
 
594
  position: relative;
595
  overflow: hidden;
596
+ z-index: 1;
597
  }
598
 
599
  .add-btn::before {
600
  content: '';
601
  position: absolute;
602
+ top: 50%;
603
+ left: 50%;
604
+ width: 0;
605
+ height: 0;
606
+ background: radial-gradient(circle,
607
+ rgba(255, 255, 255, 0.3) 0%,
608
+ transparent 70%);
609
+ transform: translate(-50%, -50%);
610
+ transition: width 0.6s, height 0.6s;
 
611
  }
612
 
613
  .add-btn:hover {
614
+ transform: translateY(-3px) scale(1.02);
615
  box-shadow:
616
+ 0 10px 30px rgba(0, 217, 255, 0.5),
617
+ 0 20px 60px rgba(255, 0, 110, 0.3);
 
618
  }
619
 
620
+ .add-btn:hover::before {
621
+ width: 300px;
622
+ height: 300px;
623
  }
624
 
625
+ /* Enhanced empty state */
626
  .empty-state {
627
  text-align: center;
628
  padding: 6rem 2rem;
629
+ position: relative;
 
 
 
630
  }
631
 
632
+ .empty-state::before {
633
+ content: '📚';
634
+ font-size: 6rem;
635
+ display: block;
636
  margin-bottom: 2rem;
637
+ animation: bounce 2s ease-in-out infinite;
638
  }
639
 
640
+ @keyframes bounce {
641
+ 0%, 100% { transform: translateY(0); }
642
  50% { transform: translateY(-20px); }
643
  }
644
 
645
  .empty-state p {
646
+ font-size: 1.4rem;
647
+ background: linear-gradient(135deg,
648
+ rgba(255, 255, 255, 0.8) 0%,
649
+ rgba(0, 217, 255, 0.8) 100%);
650
+ -webkit-background-clip: text;
651
+ -webkit-text-fill-color: transparent;
652
+ background-clip: text;
653
+ margin-bottom: 2rem;
654
+ font-weight: 500;
655
+ }
656
+
657
+ /* Loading animation */
658
+ @keyframes shimmer {
659
+ 0% { background-position: -1000px 0; }
660
+ 100% { background-position: 1000px 0; }
661
  }
662
 
663
  /* Responsive */
664
  @media (max-width: 768px) {
665
+ h1 { font-size: 2rem; }
666
+ .countdown { font-size: 3rem; }
667
  .exams-grid { grid-template-columns: 1fr; }
 
 
 
 
 
 
 
 
 
 
 
 
668
  }
669
  </style>
670
  </head>
671
  <body>
672
+ <svg width="0" height="0">
673
+ <defs>
674
+ <linearGradient id="iconGradient" x1="0%" y1="0%" x2="100%" y2="100%">
675
+ <stop offset="0%" style="stop-color:#00D9FF;stop-opacity:1" />
676
+ <stop offset="100%" style="stop-color:#FF006E;stop-opacity:1" />
677
+ </linearGradient>
678
+ </defs>
679
+ </svg>
680
+
681
  <div class="particles" id="particles"></div>
682
+
683
  <div class="container">
684
+ <div class="header">
685
+ <h1>Exam Countdown</h1>
686
+ <div class="settings-btn" id="openModalBtn">
687
+ <svg viewBox="0 0 24 24">
688
+ <path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm5 11h-4v4h-2v-4H7v-2h4V7h2v4h4v2z"/>
689
+ </svg>
690
+ </div>
691
+ </div>
692
+
693
  <div class="exams-grid" id="examsGrid"></div>
694
+
695
+ <div class="empty-state" id="emptyState" style="display: none;">
696
+ <p>No exams scheduled yet. Click the + button to add your first exam!</p>
697
+ </div>
698
  </div>
699
+
700
  <div class="modal" id="modal">
701
  <div class="modal-content">
702
+ <div class="modal-header">
703
+ <h2 class="modal-title">Add New Exam</h2>
704
+ <button class="close-btn" id="closeModalBtn">
705
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="#FF006E">
706
+ <path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/>
707
+ </svg>
708
+ </button>
709
+ </div>
710
+
711
  <form id="addExamForm">
712
+ <div class="form-group">
713
+ <label for="examName">Exam Name</label>
714
+ <input type="text" id="examName" required placeholder="e.g., Physics Final">
715
+ </div>
716
+ <div class="form-group">
717
+ <label for="examDate">Exam Date</label>
718
+ <input type="date" id="examDate" required>
719
+ </div>
720
  <button type="submit" class="add-btn">Add Exam</button>
721
  </form>
722
  </div>
723
  </div>
724
 
725
  <script>
726
+ // Enhanced particle system
727
+ function createParticles() {
728
+ const particlesContainer = document.getElementById('particles');
729
+
730
+ // Create orbs
731
+ for (let i = 0; i < 15; i++) {
732
+ const particle = document.createElement('div');
733
+ particle.classList.add('particle', 'orb');
734
+ particle.style.left = Math.random() * 100 + '%';
735
+ particle.style.animationDelay = Math.random() * 20 + 's';
736
+ particle.style.animationDuration = (15 + Math.random() * 10) + 's';
737
+
738
+ // Random colors for orbs
739
+ const colors = ['#00D9FF', '#FF006E', '#8B39FF', '#39FF14'];
740
+ const color = colors[Math.floor(Math.random() * colors.length)];
741
+ particle.style.background = `radial-gradient(circle, ${color} 0%, transparent 70%)`;
742
+ particle.style.boxShadow = `0 0 10px ${color}, 0 0 20px ${color}`;
743
+
744
+ particlesContainer.appendChild(particle);
745
+ }
746
+
747
+ // Create stars
748
+ for (let i = 0; i < 30; i++) {
749
+ const star = document.createElement('div');
750
+ star.classList.add('particle', 'star');
751
+ star.style.left = Math.random() * 100 + '%';
752
+ star.style.top = Math.random() * 100 + '%';
753
+ star.style.animationDelay = Math.random() * 3 + 's';
754
+ particlesContainer.appendChild(star);
755
+ }
756
+ }
757
+
758
+ // Initialize particles
759
+ createParticles();
760
+
761
  // Create particles
762
  const particlesContainer = document.getElementById('particles');
763
  for (let i = 0; i < 50; i++) {