Anupriya commited on
Commit
cdc8731
·
1 Parent(s): 5a912a4

button component added

Browse files
src/app/chat/chat.component.css CHANGED
@@ -52,7 +52,7 @@
52
  overflow-y: auto;
53
  resize: none;
54
  padding: 8px;
55
- font-size: 1rem;
56
  line-height: 1.2;
57
  border: 1px solid rgb(93, 145, 195);
58
  border-radius: 8px;
@@ -454,7 +454,6 @@
454
  gap: 10px;
455
  align-items: center;
456
  margin-right: 15px;
457
-
458
  }
459
 
460
  /* Disabled state for toggle buttons */
@@ -517,7 +516,6 @@
517
  gap: 18px;
518
  align-items: center;
519
  margin-right: 15px;
520
-
521
  }
522
 
523
  .toggle-btn.modern {
@@ -709,26 +707,11 @@
709
  padding: 1vw;
710
  z-index: 2001;
711
  overflow: visible; /* Allow button to overflow outside modal */
712
- border: 10px solid #009688; /* Four-side border */
713
  box-sizing: border-box;
714
  }
715
 
716
- .close-icon {
717
- position: absolute;
718
- top: 1vw;
719
- right: 1vw;
720
- background: none;
721
- border: none;
722
- font-size: 2vw;
723
- color: #2b6296;
724
- cursor: pointer;
725
- z-index: 2010;
726
- transition: color 0.2s;
727
- }
728
 
729
- .user-guide-close-icon:hover {
730
- color: #009688;
731
- }
732
 
733
  /* Overlay for closing on outside click */
734
  .user-guide-overlay {
@@ -793,51 +776,6 @@
793
 
794
 
795
 
796
- /* Close button styles */
797
- .user-guide-close-icon {
798
- display: block;
799
- position: absolute;
800
- top: 1vw;
801
- right: 1vw;
802
- background: none;
803
- border: none;
804
- font-size: 2vw;
805
- color: #2b6296;
806
- cursor: pointer;
807
- z-index: 2010;
808
- transition: color 0.2s;
809
- }
810
-
811
- .user-guide-close-icon:hover {
812
- color: #009688;
813
- }
814
-
815
- .user-guide-close-icon {
816
- font-size: 6vw;
817
- top: 2vw;
818
- right: 2vw;
819
- }
820
-
821
-
822
-
823
- /* Close button styles */
824
- .user-guide-close-icon {
825
- display: block;
826
- position: absolute;
827
- top: 1vw;
828
- right: 1vw;
829
- background: none;
830
- border: none;
831
- font-size: 2vw;
832
- color: #2b6296;
833
- cursor: pointer;
834
- z-index: 2010;
835
- transition: color 0.2s;
836
- }
837
-
838
- .user-guide-close-icon:hover {
839
- color: #009688;
840
- }
841
 
842
  /* Overlay for closing on outside click */
843
  .user-guide-overlay {
@@ -860,40 +798,15 @@
860
  width: 6vw;
861
  height: 6vw;
862
  }
863
-
864
- .user-guide-close-icon {
865
- font-size: 6vw;
866
- top: 2vw;
867
- right: 2vw;
868
- }
869
  }
870
 
871
 
872
  .user-guide-close-icon {
873
- position: absolute;
874
  top: -22px; /* Move above modal, adjust as needed */
875
  right: -22px; /* Move to the right outside modal, adjust as needed */
876
- background: #009688; /* Match border color */
877
- border: none;
878
- width: 44px;
879
- height: 44px;
880
- border-radius: 50%;
881
- display: flex;
882
- align-items: center;
883
- justify-content: center;
884
- font-size: 2vw;
885
- color: black;
886
- cursor: pointer;
887
- z-index: 2010;
888
- box-shadow: 0 2px 8px rgba(93,145,195,0.18);
889
- transition: background 0.2s, color 0.2s;
890
- ;
891
  }
892
 
893
- .user-guide-close-icon:hover {
894
- background: white;
895
- color: black;
896
- }
897
 
898
 
899
  @keyframes fadeInScale {
 
52
  overflow-y: auto;
53
  resize: none;
54
  padding: 8px;
55
+ font-size: 1vw;
56
  line-height: 1.2;
57
  border: 1px solid rgb(93, 145, 195);
58
  border-radius: 8px;
 
454
  gap: 10px;
455
  align-items: center;
456
  margin-right: 15px;
 
457
  }
458
 
459
  /* Disabled state for toggle buttons */
 
516
  gap: 18px;
517
  align-items: center;
518
  margin-right: 15px;
 
519
  }
520
 
521
  .toggle-btn.modern {
 
707
  padding: 1vw;
708
  z-index: 2001;
709
  overflow: visible; /* Allow button to overflow outside modal */
710
+ border: 10px solid var(--main-accent-color); /* Four-side border */
711
  box-sizing: border-box;
712
  }
713
 
 
 
 
 
 
 
 
 
 
 
 
 
714
 
 
 
 
715
 
716
  /* Overlay for closing on outside click */
717
  .user-guide-overlay {
 
776
 
777
 
778
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
779
 
780
  /* Overlay for closing on outside click */
781
  .user-guide-overlay {
 
798
  width: 6vw;
799
  height: 6vw;
800
  }
 
 
 
 
 
 
801
  }
802
 
803
 
804
  .user-guide-close-icon {
 
805
  top: -22px; /* Move above modal, adjust as needed */
806
  right: -22px; /* Move to the right outside modal, adjust as needed */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
807
  }
808
 
809
+
 
 
 
810
 
811
 
812
  @keyframes fadeInScale {
src/app/generate-questions/generate-questions.component.css CHANGED
@@ -1,8 +1,3 @@
1
- /* General Styling */
2
- /*@import url('https://fonts.googleapis.com/css2?family=Roboto:wght@500;700&family=Open+Sans:wght@600&display=swap');*/
3
-
4
-
5
-
6
  body {
7
  font-family: 'Roboto', sans-serif;
8
  background: linear-gradient(to bottom, #f8f9fa, #e0e6ed);
@@ -11,13 +6,6 @@ body {
11
  margin: 0;
12
  }
13
 
14
-
15
-
16
-
17
-
18
-
19
-
20
- /* Header Section Styling */
21
  .header-section {
22
  display: flex;
23
  align-items: end;
@@ -28,36 +16,6 @@ body {
28
  justify-content: space-between;
29
  }
30
 
31
-
32
- /* Buttons Styling */
33
- .btn-generate,
34
- .reset-btn {
35
- padding: 1vw 2vw;
36
- font-size: 1.6rem;
37
- border: none;
38
- border-radius: 0.5vw;
39
- cursor: pointer;
40
- background-color: #5c67f2;
41
- color: white;
42
- font-family: "Open Sans", sans-serif;
43
- font-weight: bold;
44
- transition: all 0.3s ease;
45
- }
46
-
47
-
48
-
49
- .btn-generate:disabled,
50
- .reset-btn:disabled {
51
- background-color: #cccccc;
52
- color: #666666;
53
- cursor: not-allowed;
54
- }
55
-
56
-
57
- /*================================*/
58
-
59
-
60
- /* Error Popup Styling */
61
  .error-popup {
62
  position: fixed;
63
  top: 0;
@@ -79,6 +37,7 @@ body {
79
  text-align: center;
80
  max-width: 40vw;
81
  width: 80%;
 
82
  }
83
 
84
  .error-popup-content p {
@@ -87,63 +46,26 @@ body {
87
  margin-bottom: 1vw;
88
  }
89
 
90
- .close-popup-btn {
91
- padding: 0.8vw 1.5vw;
92
- font-size: 1.2vw;
93
- background-color: #007bff;
94
- color: #fff;
95
- border: none;
96
- border-radius: 0.5vw;
97
- cursor: pointer;
98
- transition: all 0.3s ease;
99
- }
100
-
101
- .close-popup-btn:hover {
102
- background-color: #0056b3;
103
- }
104
-
105
-
106
-
107
-
108
-
109
-
110
-
111
-
112
- /* Full-Screen Chat Container */
113
  .app-container {
114
  display: flex;
115
  flex-direction: column;
116
- height: 100vh; /* Full viewport height */
117
- width: 100%; /* Full viewport width */
118
- /*background: linear-gradient(to bottom right, #fefefe, #f3f4f6);*/ /* Soft white-gray gradient */
119
  font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
120
  background-color: rgb(35 34 32 / 43%);
121
  }
122
 
123
-
124
-
125
-
126
-
127
-
128
-
129
-
130
- /* Use the `src` of the hidden image */
131
- .app-container::before {
132
- content: "";
133
- position: fixed;
134
- top: 0;
135
- left: 0;
136
- width: 100%;
137
- height: 100%;
138
- background-image: attr(data-bg); /* This doesn't work in CSS alone */
139
- background-size: cover;
140
- background-position: center;
141
- z-index: -1; /* Push behind other content */
142
- }
143
-
144
-
145
-
146
-
147
 
148
  .input-box {
149
  padding: 15px;
@@ -154,12 +76,10 @@ body {
154
  box-shadow: 0 0.2vw 0.5vw rgba(0, 0, 0, 0.1);
155
  }
156
 
157
-
158
  .input-box:focus-visible {
159
  outline: 2px solid #5d5959;
160
  }
161
 
162
-
163
  .full-content {
164
  display: flex;
165
  padding: 10px;
@@ -167,9 +87,8 @@ body {
167
  margin-top: 1vw;
168
  }
169
 
170
- /* Questions Section */
171
  .questions-container {
172
- position: relative; /* important for centering inside this box */
173
  max-height: 100%;
174
  overflow: hidden;
175
  margin: 1vw;
@@ -177,18 +96,15 @@ body {
177
  background-color: #f9f9f9;
178
  border-radius: 8px;
179
  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
180
- /* background: #9cd2d529;*/
181
  background: #e3f2fd;
182
  padding: 1vw 1vw 1vw 2vw;
183
  width: 100%;
184
  box-shadow: 0 .4vw 1vw rgba(0, 0, 0, .1);
185
- border: 9px solid #009688;
186
  }
187
 
188
-
189
  .quesHintbtn {
190
  display: flex;
191
- /* align-content: flex-end; */
192
  justify-content: space-between;
193
  }
194
 
@@ -207,52 +123,41 @@ body {
207
 
208
  .answer-input {
209
  margin-left: 5px;
210
- width: auto; /* Adjust as needed */
211
  max-width: 100%;
212
  padding: 5px;
213
  border: 1px solid #ccc;
214
  border-radius: 4px;
215
  }
216
 
217
-
218
- .btn-submit:disabled {
219
- background-color: #ccc;
220
- cursor: not-allowed;
221
- }
222
-
223
  .section-title {
224
  font-size: 2.5rem;
225
  color: #4ca1af;
226
  font-family: 'Open Sans', sans-serif;
227
  }
228
 
229
-
230
  .questions-list {
231
  list-style: none;
232
  padding: 0;
233
  margin: 1.4vw;
234
  }
235
 
236
-
237
-
238
  .question-wrapper {
239
  display: flex;
240
  flex-direction: column;
241
  gap: 10px;
242
  }
243
 
244
-
245
  .question-text {
246
  font-size: 1.3vw;
247
  font-family: 'Roboto', sans-serif;
248
  line-height: 1.5;
249
  }
250
 
251
-
252
  .answer-input {
253
  width: 100%;
254
  max-width: 203px;
255
- border: 1px solid #999; /* Darker shade for the border */
256
  border-radius: 8px;
257
  font-family: "Roboto", sans-serif;
258
  font-size: 1.6rem;
@@ -273,7 +178,7 @@ body {
273
  }
274
 
275
  .answer-input:focus {
276
- border-color: #5c67f2; /* Keep focus effect */
277
  outline: none;
278
  }
279
 
@@ -283,8 +188,6 @@ body {
283
  font-style: italic;
284
  }
285
 
286
-
287
- /* Submit Button */
288
  .submit-container {
289
  position: relative;
290
  right: 6vw;
@@ -292,36 +195,6 @@ body {
292
  justify-content: flex-end;
293
  }
294
 
295
- .btn-submit {
296
- padding: 15px 30px;
297
- font-size: 1.6rem;
298
- font-family: "Open Sans", sans-serif;
299
- color: white;
300
- border: none;
301
- border-radius: 8px;
302
- cursor: pointer;
303
- transition: all 0.3s ease;
304
- font-weight: bold;
305
- /* background: #52a8b4;*/
306
-
307
- background: #297782;
308
- }
309
-
310
- .btn-submit:disabled {
311
- background-color: #ccc;
312
- cursor: not-allowed;
313
- }
314
-
315
- .btn-submit:hover:not(:disabled) {
316
- transform: scale(1.05);
317
- }
318
-
319
-
320
-
321
-
322
-
323
-
324
- /* Fade-in animation */
325
  @keyframes fadeIn {
326
  from {
327
  opacity: 0;
@@ -333,16 +206,14 @@ body {
333
  }
334
 
335
  .warning-label {
336
- color: red; /* Make the text red */
337
- text-align: center; /* Center the text horizontally */
338
- font-size: 1.5em; /* Adjust font size for readability */
339
- margin-top: 10px; /* Add spacing from the input box above */
340
- display: block; /* Ensure the text is displayed as a block element */
341
- width: 100%; /* Center the text within the container */
342
  }
343
 
344
-
345
-
346
  .congratulation-message {
347
  text-align: center;
348
  margin: 50px auto;
@@ -359,10 +230,9 @@ body {
359
  position: relative;
360
  z-index: 1;
361
  box-shadow: 0 .4vw 1vw rgba(0, 0, 0, .1);
362
- border: 9px solid #009688;
363
  }
364
 
365
-
366
  .congratulation-message h2 {
367
  color: #4ca1af;
368
  margin-bottom: 15px;
@@ -385,73 +255,12 @@ body {
385
  }
386
  }
387
 
388
-
389
  .congratulation-message p {
390
  color: #333;
391
  margin-bottom: 20px;
392
  font-size: 1.8vw;
393
  }
394
 
395
- .congratulation-message button {
396
- padding: 20px 40px;
397
- font-size: 1.7em;
398
- background: #006780;
399
- color: white;
400
- border: none;
401
- border-radius: 10px;
402
- cursor: pointer;
403
- margin-top: 20px;
404
- transition: all 0.3s ease;
405
- font-family: 'Open Sans', sans-serif;
406
- font-weight: bold;
407
- }
408
-
409
- .congratulation-message button:hover {
410
- background-color: #006780;
411
- transform: scale(1.03);
412
- }
413
-
414
-
415
-
416
-
417
-
418
- .hint-toggle-btn {
419
- background-color: #5c67f2;
420
- color: white;
421
- padding: 12px 18px;
422
- font-size: 1.5rem;
423
- border: none;
424
- border-radius: 50%;
425
- cursor: pointer;
426
- transition: all 0.3s ease;
427
- display: flex;
428
- justify-content: center;
429
- align-items: center;
430
- width: 50px;
431
- height: 50px;
432
- }
433
-
434
- .hint-toggle-btn:hover {
435
- background-color: #3c4ec5;
436
- transform: scale(1.1);
437
- }
438
-
439
- .hint-toggle-btn:focus {
440
- outline: none;
441
- box-shadow: 0 0 8px rgba(0, 0, 255, 0.6);
442
- }
443
-
444
- .hint-toggle-btn::before {
445
- content: "i";
446
- font-weight: bold;
447
- font-size: 2rem;
448
- color: white;
449
- }
450
-
451
-
452
-
453
-
454
-
455
  .side-menu {
456
  position: fixed;
457
  top: 0;
@@ -471,7 +280,6 @@ body {
471
  right: 0;
472
  }
473
 
474
-
475
  .side-menu-header {
476
  display: flex;
477
  justify-content: space-between;
@@ -509,9 +317,6 @@ body {
509
  text-align: justify;
510
  }
511
 
512
-
513
-
514
-
515
  @keyframes glow {
516
  0% {
517
  box-shadow: 0 0 10px #ff5c5c;
@@ -526,18 +331,17 @@ body {
526
  }
527
  }
528
 
529
- /* For screen resolutions near 1366px width */
530
  @media (max-width: 1366px) {
531
  body {
532
- font-size: 1.4rem; /* Adjust font size */
533
  }
534
 
535
  .header-section {
536
- padding: 8px 15px; /* Adjust padding for smaller height */
537
  }
538
 
539
  .logo-container {
540
- width: 10vw; /* Adjust logo width */
541
  }
542
 
543
  .back-button {
@@ -547,37 +351,31 @@ body {
547
  }
548
 
549
  .input-box {
550
- width: 250px; /* Smaller input width */
551
  font-size: 1.4rem;
552
  }
553
 
554
  .btn-generate, .reset-btn {
555
- padding: 10px 20px; /* Adjust button size */
556
- font-size: 1.4rem; /* Smaller font size */
557
  }
558
 
559
  .current-level {
560
- font-size: 1rem; /* Smaller font size */
561
  padding: 8px 10px;
562
  margin: 15px 15px 0;
563
  }
564
 
565
  .question-text {
566
- font-size: 1rem; /* Reduce question text size */
567
  }
568
 
569
  .answer-input {
570
- width: 80%; /* Adjust width for text inputs */
571
  font-size: 1.4rem;
572
  padding: 5px;
573
  }
574
 
575
- .btn-submit {
576
- padding: 12px 25px; /* Adjust size */
577
- font-size: 1.4rem; /* Adjust font size */
578
- }
579
-
580
-
581
  .side-menu {
582
  width: 40%;
583
  }
@@ -588,30 +386,28 @@ body {
588
  height: 45vh;
589
  }
590
 
591
-
592
  .congratulation-message h2 {
593
  color: #4ca1af;
594
  margin-bottom: 15px;
595
- font-size: 2.5vw; /* Responsive font size relative to the viewport width */
596
- white-space: nowrap; /* Prevent text from wrapping */
597
- overflow: hidden; /* Hide overflow text */
598
- text-overflow: ellipsis; /* Add ellipsis if text is too long */
599
- text-align: center; /* Center the text */
600
  }
601
 
602
  @media (max-width: 768px) {
603
  .congratulation-message h2 {
604
- font-size: 2vw; /* Larger font size for smaller screens */
605
  }
606
  }
607
 
608
  @media (max-width: 480px) {
609
  .congratulation-message h2 {
610
- font-size: 3vw; /* Even larger font size for very small screens */
611
  }
612
  }
613
 
614
-
615
  .congratulation-message p {
616
  font-size: 1.4rem;
617
  }
@@ -622,25 +418,18 @@ body {
622
  }
623
  }
624
 
625
-
626
  h3 {
627
  font-weight: bold;
628
  }
629
 
630
-
631
-
632
- /* Make only the text inside the topic input appear gray */
633
  .topic-input[readonly] {
634
- color: #999 !important; /* Light gray text */
635
- opacity: 1 !important; /* Ensure text opacity remains */
636
- background-color: white !important; /* Keep background normal */
637
- border: 1px solid #ccc !important; /* Keep a subtle border */
638
- cursor: not-allowed; /* Show disabled cursor */
639
  }
640
 
641
-
642
-
643
- /* Zoom-in and zoom-out animation for hint button */
644
  @keyframes hint-zoom {
645
  0% {
646
  transform: scale(1);
@@ -649,43 +438,18 @@ h3 {
649
  50% {
650
  transform: scale(1.2);
651
  }
652
- /* Slightly zoom in */
653
  100% {
654
  transform: scale(1);
655
  }
656
  }
657
 
658
- .hint-toggle-btn {
659
- background-color: #5c67f2;
660
- color: white;
661
- padding: 12px 18px;
662
- font-size: 1.5rem;
663
- border: none;
664
- border-radius: 50%;
665
- cursor: pointer;
666
- transition: all 0.3s ease;
667
- display: flex;
668
- justify-content: center;
669
- align-items: center;
670
- width: 50px;
671
- height: 50px;
672
- }
673
-
674
- /* Apply zoom-in effect when hints are available */
675
- .hint-toggle-btn.blink {
676
- animation: hint-zoom 1s infinite alternate;
677
- }
678
-
679
-
680
- /*
681
- 🐝 Flying Honeybee Loader */
682
  .loading-overlay {
683
  position: fixed;
684
  top: 0;
685
  left: 0;
686
  width: 100%;
687
  height: 100%;
688
- /* background: rgba(0, 0, 0, 0.6);*/
689
  display: flex;
690
  flex-direction: column;
691
  justify-content: center;
@@ -696,12 +460,10 @@ h3 {
696
  overflow: hidden;
697
  }
698
 
699
-
700
-
701
  .loader {
702
- font-size: 15px; /* Font size */
703
- width: 1.5em; /* Width of the loader */
704
- height: 1.5em; /* Height of the loader */
705
  border-radius: 50%;
706
  position: relative;
707
  text-indent: -9999em;
@@ -743,25 +505,9 @@ h3 {
743
  }
744
  }
745
 
746
-
747
- /* Fix Generate and Reset button alignment */
748
- .input-section {
749
- display: flex;
750
- flex-wrap: wrap;
751
- align-items: center;
752
- justify-content: center;
753
- gap: 10px; /* ✅ Ensure proper spacing */
754
- position: relative;
755
- }
756
-
757
-
758
-
759
-
760
-
761
- /* Ensure the dropdown is positioned exactly below the input field */
762
  .suggestions-container {
763
  position: absolute;
764
- top: 100%; /* ✅ Attach dropdown directly below input field */
765
  left: 0;
766
  width: 100%;
767
  max-width: 400px;
@@ -770,14 +516,13 @@ h3 {
770
  border-radius: 8px;
771
  z-index: 10;
772
  overflow: hidden;
773
- margin-top: 0px; /* ✅ Remove extra gap */
774
  }
775
 
776
- /* Dropdown Items */
777
  .suggestions-list {
778
  display: flex;
779
  flex-direction: column;
780
- padding: 0px; /* ✅ Remove extra padding */
781
  }
782
 
783
  .suggestion-item {
@@ -786,11 +531,11 @@ h3 {
786
  color: #333;
787
  cursor: pointer;
788
  transition: background 0.3s ease;
789
- border-bottom: 1px solid #ddd; /* ✅ Separator between items */
790
  }
791
 
792
  .suggestion-item:last-child {
793
- border-bottom: none; /* ✅ Remove bottom border from last item */
794
  }
795
 
796
  .suggestion-item:hover {
@@ -798,89 +543,60 @@ h3 {
798
  font-weight: bold;
799
  }
800
 
801
- /* Ensure input field and buttons are in a single row */
 
 
 
 
 
 
802
  .input-section {
803
  display: flex;
 
804
  align-items: center;
805
- justify-content: flex-start;
 
 
806
  }
807
 
808
- /* Ensure buttons are next to input field */
809
  .button-group {
810
  display: flex;
811
- gap: 0.5vw; /* ✅ Reduce spacing between buttons */
812
  flex: 1;
813
- justify-content: flex-start; /* ✅ Aligns buttons next to input field */
814
- }
815
-
816
- /* Make buttons the same height as the input field */
817
- .btn-generate, .reset-btn {
818
- height: 3.6vw; /* ✅ Match input field height */
819
- padding: 12px 20px;
820
- font-size: 1.3vw;
821
- font-weight: bold;
822
- border: none;
823
- border-radius: 8px;
824
- cursor: pointer;
825
- transition: all 0.3s ease-in-out;
826
- white-space: nowrap; /* ✅ Prevent buttons from wrapping */
827
- }
828
-
829
- /* Button Colors */
830
- .btn-generate {
831
- background-color: #006780;
832
- color: white;
833
- }
834
-
835
- .reset-btn {
836
- background-color: #006780;
837
- color: white;
838
  }
839
 
840
- /* Hover Effects */
841
- .btn-generate:hover, .reset-btn:hover {
842
- transform: scale(1.05);
843
- opacity: 0.9;
844
- }
845
-
846
  .correct-answer {
847
- color: green !important; /* Correct answer should be green */
848
  }
849
 
850
  .wrong-answer {
851
- color: red !important; /* Wrong answer should be red */
852
  }
853
 
854
  .default {
855
- color: black !important; /* Default color (black) when user is typing */
856
  }
857
 
858
  .answer-input:focus {
859
- outline: none; /* Optional: You can remove outline for a clean effect */
860
  }
861
 
862
  .wrong-answer-removed {
863
- background-color: white; /* Reset the background to white after 2 seconds */
864
- color: #333; /* Reset the text color */
865
- border: 1px solid #ccc; /* Reset the border */
866
- transition: background-color 2s ease-out; /* Smooth transition */
867
  }
868
 
869
-
870
-
871
- /*progress bar css start here*/
872
-
873
- /* --- New Progress Bar Style --- */
874
-
875
  .difficulty-container {
876
  position: relative;
877
  width: 100%;
878
  max-width: 600px;
879
- /*margin: 20px auto;*/
880
  height: 20px;
881
  background: #e0e0e0;
882
  border-radius: 50px;
883
- /*overflow: hidden;*/
884
  box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.2);
885
  }
886
 
@@ -904,7 +620,6 @@ h3 {
904
  transform: translateY(-50%);
905
  display: flex;
906
  justify-content: space-between;
907
- /* z-index: 2;*/
908
  padding: 0 8px;
909
  }
910
 
@@ -923,7 +638,6 @@ h3 {
923
  transform: scale(1.3);
924
  }
925
 
926
- /* Tooltip above active dot */
927
  .level-tooltip {
928
  position: absolute;
929
  bottom: 150%;
@@ -937,11 +651,9 @@ h3 {
937
  border-radius: 6px;
938
  white-space: nowrap;
939
  box-shadow: 0px 2px 6px rgba(0, 0, 0, 0.2);
940
- /* z-index: 5;*/
941
  opacity: 1;
942
  }
943
 
944
- /* Tooltip arrow */
945
  .level-tooltip::after {
946
  content: '';
947
  position: absolute;
@@ -953,7 +665,6 @@ h3 {
953
  border-color: #4ca1af transparent transparent transparent;
954
  }
955
 
956
- /* Responsive adjustment (optional) */
957
  @media (max-width: 480px) {
958
  .level-tooltip {
959
  font-size: 0.65rem;
@@ -965,9 +676,6 @@ h3 {
965
  }
966
  }
967
 
968
-
969
- /*hint button css start here */
970
- /* Anchor the i button on the right side of the screen (adjust as you like) */
971
  .hint-anchor {
972
  position: fixed;
973
  top: 15.6vw;
@@ -975,7 +683,6 @@ h3 {
975
  z-index: 1101;
976
  }
977
 
978
- /* i button design (compact circular) */
979
  .hint-toggle-btn {
980
  width: 56px;
981
  height: 56px;
@@ -1003,7 +710,6 @@ h3 {
1003
  outline-offset: 3px;
1004
  }
1005
 
1006
- /* Popover: opens to the LEFT of the i button */
1007
  .hint-popover {
1008
  position: absolute;
1009
  top: 11vw;
@@ -1015,11 +721,10 @@ h3 {
1015
  border-radius: 12px;
1016
  padding: 16px 20px;
1017
  box-shadow: 0 12px 32px rgba(0, 0, 0, .25);
1018
- animation: _ngcontent-ng-c2774789824_hint-slide-in .18s ease;
1019
- border: 4px solid #009688;
1020
  }
1021
 
1022
- /* Arrow pointing at the button */
1023
  .hint-popover::before {
1024
  content: "";
1025
  position: absolute;
@@ -1032,37 +737,11 @@ h3 {
1032
  box-shadow: 2px -2px 8px rgba(0,0,0,.08);
1033
  }
1034
 
1035
- /* Round close (X) inside the popover */
1036
- .hint-close {
1037
- position: absolute;
1038
  top: 8px;
1039
  right: 10px;
1040
- width: 40px;
1041
- height: 40px;
1042
- border: 0;
1043
- border-radius: 50%;
1044
- background: #eeeeee;
1045
- color: red;
1046
- font-size: 2vw;
1047
- line-height: 0.9;
1048
- display: grid;
1049
- place-items: center;
1050
- cursor: pointer;
1051
- transition: background .15s ease, transform .15s ease;
1052
- font-weight: 900;
1053
  }
1054
 
1055
- .hint-close:hover {
1056
- background: #e0e0e0;
1057
- transform: scale(1.04);
1058
- }
1059
-
1060
- .hint-close:focus-visible {
1061
- outline: 3px solid rgba(0,103,128,.35);
1062
- outline-offset: 2px;
1063
- }
1064
-
1065
- /* List spacing */
1066
  .hint-title {
1067
  margin: 0 0 8px;
1068
  font-size: 18px;
@@ -1077,15 +756,13 @@ h3 {
1077
  margin-bottom: .5rem;
1078
  }
1079
 
1080
- /* Transparent backdrop that closes on click */
1081
  .hint-backdrop {
1082
  position: fixed;
1083
  inset: 0;
1084
- background: transparent; /* no dim; only captures outside clicks */
1085
  z-index: 1100;
1086
  }
1087
 
1088
- /* Entrance animation */
1089
  @keyframes hint-slide-in {
1090
  from {
1091
  transform: translateY(-50%) translateX(8px);
@@ -1098,7 +775,6 @@ h3 {
1098
  }
1099
  }
1100
 
1101
- /* Mobile: show popover above the button for better fit */
1102
  @media (max-width: 640px) {
1103
  .hint-anchor {
1104
  right: 12px;
@@ -1122,8 +798,6 @@ h3 {
1122
  }
1123
  }
1124
 
1125
-
1126
- /* Circular countdown */
1127
  .ring {
1128
  position: relative;
1129
  width: 220px;
@@ -1137,25 +811,22 @@ h3 {
1137
  display: block;
1138
  }
1139
 
1140
- /* static track */
1141
  .ring-track {
1142
  fill: none;
1143
- stroke: rgba(15, 23, 42, 0.18); /* slate-900 @ 18% */
1144
  stroke-width: 16;
1145
  }
1146
 
1147
- /* animated arc */
1148
  .ring-progress {
1149
  fill: none;
1150
- stroke: #006780; /* accent */
1151
  stroke-width: 16;
1152
  stroke-linecap: round;
1153
- transform: rotate(-90deg); /* start at 12 o’clock */
1154
  transform-origin: 50% 50%;
1155
- transition: stroke-dashoffset 0.1s linear; /* smooth update */
1156
  }
1157
 
1158
- /* big number in the center */
1159
  .ring-number {
1160
  position: absolute;
1161
  inset: 0;
@@ -1166,9 +837,8 @@ h3 {
1166
  color: #0f172a;
1167
  }
1168
 
1169
-
1170
  .global-countdown-overlay {
1171
- position: absolute; /* not fixed */
1172
  inset: 0;
1173
  display: grid;
1174
  place-items: center;
@@ -1177,8 +847,6 @@ h3 {
1177
  z-index: 20;
1178
  }
1179
 
1180
-
1181
- /* Keep overlay centered and always on top */
1182
  :host ::ng-deep .global-countdown-overlay {
1183
  position: fixed;
1184
  inset: 0;
@@ -1186,10 +854,9 @@ h3 {
1186
  place-items: center;
1187
  background: transparent;
1188
  pointer-events: none;
1189
- z-index: 2000; /* higher to avoid being covered */
1190
  }
1191
 
1192
- /* Frosted card so text never blends with page content */
1193
  :host ::ng-deep .overlay-card {
1194
  background: rgba(255,255,255,0.98);
1195
  backdrop-filter: blur(2px);
@@ -1202,7 +869,6 @@ h3 {
1202
  pointer-events: none;
1203
  }
1204
 
1205
- /* Ensure the ring forms a stacking context for the disk/number */
1206
  :host ::ng-deep .ring {
1207
  position: relative;
1208
  width: 220px;
@@ -1210,48 +876,43 @@ h3 {
1210
  margin: 0 auto 8px;
1211
  }
1212
 
1213
- /* Place the SVG above the disk, below the number */
1214
  :host ::ng-deep .ring-svg {
1215
  position: relative;
1216
  z-index: 2;
1217
  }
1218
 
1219
- /* ADD a white center disk behind the number (no HTML changes) */
1220
  :host ::ng-deep .ring::before {
1221
  content: "";
1222
  position: absolute;
1223
  inset: 0;
1224
  margin: auto;
1225
- width: 120px; /* adjust if you scale the ring */
1226
  height: 120px;
1227
  border-radius: 50%;
1228
  background: #ffffff;
1229
  border: 1px solid rgba(15,23,42,.08);
1230
  box-shadow: inset 0 0 0 4px rgba(255,255,255,.9), 0 2px 10px rgba(0,0,0,.08);
1231
- z-index: 1; /* under number, over background */
1232
  }
1233
 
1234
- /* Stronger, crisper number; always readable */
1235
  :host ::ng-deep .ring-number {
1236
  position: absolute;
1237
  inset: 0;
1238
  display: grid;
1239
  place-items: center;
1240
- z-index: 3; /* above everything in the ring */
1241
  font-weight: 900;
1242
- font-size: 64px; /* bump if you increased ring size */
1243
  line-height: 1;
1244
- color: #0b1220; /* deep slate */
1245
  text-shadow: 0 0 2px #fff, 0 0 8px rgba(255,255,255,.85), 0 2px 8px rgba(0,0,0,.35);
1246
  }
1247
 
1248
- /* Keep the ring thicker for visibility (optional) */
1249
  :host ::ng-deep .ring-track,
1250
  :host ::ng-deep .ring-progress {
1251
- stroke-width: 18px; /* increase if needed */
1252
  }
1253
 
1254
- /* Caption pill with high contrast */
1255
  :host ::ng-deep .caption-pill {
1256
  display: inline-block;
1257
  margin-top: 10px;
 
 
 
 
 
 
1
  body {
2
  font-family: 'Roboto', sans-serif;
3
  background: linear-gradient(to bottom, #f8f9fa, #e0e6ed);
 
6
  margin: 0;
7
  }
8
 
 
 
 
 
 
 
 
9
  .header-section {
10
  display: flex;
11
  align-items: end;
 
16
  justify-content: space-between;
17
  }
18
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19
  .error-popup {
20
  position: fixed;
21
  top: 0;
 
37
  text-align: center;
38
  max-width: 40vw;
39
  width: 80%;
40
+ border: 10px solid var(--main-accent-color);
41
  }
42
 
43
  .error-popup-content p {
 
46
  margin-bottom: 1vw;
47
  }
48
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
49
  .app-container {
50
  display: flex;
51
  flex-direction: column;
52
+ height: 100vh;
53
+ width: 100%;
 
54
  font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
55
  background-color: rgb(35 34 32 / 43%);
56
  }
57
 
58
+ .app-container::before {
59
+ content: "";
60
+ position: fixed;
61
+ top: 0;
62
+ left: 0;
63
+ width: 100%;
64
+ height: 100%;
65
+ background-size: cover;
66
+ background-position: center;
67
+ z-index: -1;
68
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
69
 
70
  .input-box {
71
  padding: 15px;
 
76
  box-shadow: 0 0.2vw 0.5vw rgba(0, 0, 0, 0.1);
77
  }
78
 
 
79
  .input-box:focus-visible {
80
  outline: 2px solid #5d5959;
81
  }
82
 
 
83
  .full-content {
84
  display: flex;
85
  padding: 10px;
 
87
  margin-top: 1vw;
88
  }
89
 
 
90
  .questions-container {
91
+ position: relative;
92
  max-height: 100%;
93
  overflow: hidden;
94
  margin: 1vw;
 
96
  background-color: #f9f9f9;
97
  border-radius: 8px;
98
  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
 
99
  background: #e3f2fd;
100
  padding: 1vw 1vw 1vw 2vw;
101
  width: 100%;
102
  box-shadow: 0 .4vw 1vw rgba(0, 0, 0, .1);
103
+ border: 9px solid var(--main-accent-color);
104
  }
105
 
 
106
  .quesHintbtn {
107
  display: flex;
 
108
  justify-content: space-between;
109
  }
110
 
 
123
 
124
  .answer-input {
125
  margin-left: 5px;
126
+ width: auto;
127
  max-width: 100%;
128
  padding: 5px;
129
  border: 1px solid #ccc;
130
  border-radius: 4px;
131
  }
132
 
 
 
 
 
 
 
133
  .section-title {
134
  font-size: 2.5rem;
135
  color: #4ca1af;
136
  font-family: 'Open Sans', sans-serif;
137
  }
138
 
 
139
  .questions-list {
140
  list-style: none;
141
  padding: 0;
142
  margin: 1.4vw;
143
  }
144
 
 
 
145
  .question-wrapper {
146
  display: flex;
147
  flex-direction: column;
148
  gap: 10px;
149
  }
150
 
 
151
  .question-text {
152
  font-size: 1.3vw;
153
  font-family: 'Roboto', sans-serif;
154
  line-height: 1.5;
155
  }
156
 
 
157
  .answer-input {
158
  width: 100%;
159
  max-width: 203px;
160
+ border: 1px solid #999;
161
  border-radius: 8px;
162
  font-family: "Roboto", sans-serif;
163
  font-size: 1.6rem;
 
178
  }
179
 
180
  .answer-input:focus {
181
+ border-color: #5c67f2;
182
  outline: none;
183
  }
184
 
 
188
  font-style: italic;
189
  }
190
 
 
 
191
  .submit-container {
192
  position: relative;
193
  right: 6vw;
 
195
  justify-content: flex-end;
196
  }
197
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
198
  @keyframes fadeIn {
199
  from {
200
  opacity: 0;
 
206
  }
207
 
208
  .warning-label {
209
+ color: red;
210
+ text-align: center;
211
+ font-size: 1.5em;
212
+ margin-top: 10px;
213
+ display: block;
214
+ width: 100%;
215
  }
216
 
 
 
217
  .congratulation-message {
218
  text-align: center;
219
  margin: 50px auto;
 
230
  position: relative;
231
  z-index: 1;
232
  box-shadow: 0 .4vw 1vw rgba(0, 0, 0, .1);
233
+ border: 9px solid var(--main-accent-color);
234
  }
235
 
 
236
  .congratulation-message h2 {
237
  color: #4ca1af;
238
  margin-bottom: 15px;
 
255
  }
256
  }
257
 
 
258
  .congratulation-message p {
259
  color: #333;
260
  margin-bottom: 20px;
261
  font-size: 1.8vw;
262
  }
263
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
264
  .side-menu {
265
  position: fixed;
266
  top: 0;
 
280
  right: 0;
281
  }
282
 
 
283
  .side-menu-header {
284
  display: flex;
285
  justify-content: space-between;
 
317
  text-align: justify;
318
  }
319
 
 
 
 
320
  @keyframes glow {
321
  0% {
322
  box-shadow: 0 0 10px #ff5c5c;
 
331
  }
332
  }
333
 
 
334
  @media (max-width: 1366px) {
335
  body {
336
+ font-size: 1.4rem;
337
  }
338
 
339
  .header-section {
340
+ padding: 8px 15px;
341
  }
342
 
343
  .logo-container {
344
+ width: 10vw;
345
  }
346
 
347
  .back-button {
 
351
  }
352
 
353
  .input-box {
354
+ width: 250px;
355
  font-size: 1.4rem;
356
  }
357
 
358
  .btn-generate, .reset-btn {
359
+ padding: 10px 20px;
360
+ font-size: 1.4rem;
361
  }
362
 
363
  .current-level {
364
+ font-size: 1rem;
365
  padding: 8px 10px;
366
  margin: 15px 15px 0;
367
  }
368
 
369
  .question-text {
370
+ font-size: 1rem;
371
  }
372
 
373
  .answer-input {
374
+ width: 80%;
375
  font-size: 1.4rem;
376
  padding: 5px;
377
  }
378
 
 
 
 
 
 
 
379
  .side-menu {
380
  width: 40%;
381
  }
 
386
  height: 45vh;
387
  }
388
 
 
389
  .congratulation-message h2 {
390
  color: #4ca1af;
391
  margin-bottom: 15px;
392
+ font-size: 2.5vw;
393
+ white-space: nowrap;
394
+ overflow: hidden;
395
+ text-overflow: ellipsis;
396
+ text-align: center;
397
  }
398
 
399
  @media (max-width: 768px) {
400
  .congratulation-message h2 {
401
+ font-size: 2vw;
402
  }
403
  }
404
 
405
  @media (max-width: 480px) {
406
  .congratulation-message h2 {
407
+ font-size: 3vw;
408
  }
409
  }
410
 
 
411
  .congratulation-message p {
412
  font-size: 1.4rem;
413
  }
 
418
  }
419
  }
420
 
 
421
  h3 {
422
  font-weight: bold;
423
  }
424
 
 
 
 
425
  .topic-input[readonly] {
426
+ color: #999 !important;
427
+ opacity: 1 !important;
428
+ background-color: white !important;
429
+ border: 1px solid #ccc !important;
430
+ cursor: not-allowed;
431
  }
432
 
 
 
 
433
  @keyframes hint-zoom {
434
  0% {
435
  transform: scale(1);
 
438
  50% {
439
  transform: scale(1.2);
440
  }
441
+
442
  100% {
443
  transform: scale(1);
444
  }
445
  }
446
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
447
  .loading-overlay {
448
  position: fixed;
449
  top: 0;
450
  left: 0;
451
  width: 100%;
452
  height: 100%;
 
453
  display: flex;
454
  flex-direction: column;
455
  justify-content: center;
 
460
  overflow: hidden;
461
  }
462
 
 
 
463
  .loader {
464
+ font-size: 15px;
465
+ width: 1.5em;
466
+ height: 1.5em;
467
  border-radius: 50%;
468
  position: relative;
469
  text-indent: -9999em;
 
505
  }
506
  }
507
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
508
  .suggestions-container {
509
  position: absolute;
510
+ top: 100%;
511
  left: 0;
512
  width: 100%;
513
  max-width: 400px;
 
516
  border-radius: 8px;
517
  z-index: 10;
518
  overflow: hidden;
519
+ margin-top: 0px;
520
  }
521
 
 
522
  .suggestions-list {
523
  display: flex;
524
  flex-direction: column;
525
+ padding: 0px;
526
  }
527
 
528
  .suggestion-item {
 
531
  color: #333;
532
  cursor: pointer;
533
  transition: background 0.3s ease;
534
+ border-bottom: 1px solid #ddd;
535
  }
536
 
537
  .suggestion-item:last-child {
538
+ border-bottom: none;
539
  }
540
 
541
  .suggestion-item:hover {
 
543
  font-weight: bold;
544
  }
545
 
546
+ .answer-slot {
547
+ display: inline-block;
548
+ margin: 0 0.25vw;
549
+ vertical-align: middle;
550
+ }
551
+
552
+
553
  .input-section {
554
  display: flex;
555
+ flex-wrap: wrap;
556
  align-items: center;
557
+ justify-content: center;
558
+ gap: 10px;
559
+ position: relative;
560
  }
561
 
562
+
563
  .button-group {
564
  display: flex;
565
+ gap: 0.5vw;
566
  flex: 1;
567
+ justify-content: flex-start;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
568
  }
569
 
 
 
 
 
 
 
570
  .correct-answer {
571
+ color: green !important;
572
  }
573
 
574
  .wrong-answer {
575
+ color: red !important;
576
  }
577
 
578
  .default {
579
+ color: black !important;
580
  }
581
 
582
  .answer-input:focus {
583
+ outline: none;
584
  }
585
 
586
  .wrong-answer-removed {
587
+ background-color: white;
588
+ color: #333;
589
+ border: 1px solid #ccc;
590
+ transition: background-color 2s ease-out;
591
  }
592
 
 
 
 
 
 
 
593
  .difficulty-container {
594
  position: relative;
595
  width: 100%;
596
  max-width: 600px;
 
597
  height: 20px;
598
  background: #e0e0e0;
599
  border-radius: 50px;
 
600
  box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.2);
601
  }
602
 
 
620
  transform: translateY(-50%);
621
  display: flex;
622
  justify-content: space-between;
 
623
  padding: 0 8px;
624
  }
625
 
 
638
  transform: scale(1.3);
639
  }
640
 
 
641
  .level-tooltip {
642
  position: absolute;
643
  bottom: 150%;
 
651
  border-radius: 6px;
652
  white-space: nowrap;
653
  box-shadow: 0px 2px 6px rgba(0, 0, 0, 0.2);
 
654
  opacity: 1;
655
  }
656
 
 
657
  .level-tooltip::after {
658
  content: '';
659
  position: absolute;
 
665
  border-color: #4ca1af transparent transparent transparent;
666
  }
667
 
 
668
  @media (max-width: 480px) {
669
  .level-tooltip {
670
  font-size: 0.65rem;
 
676
  }
677
  }
678
 
 
 
 
679
  .hint-anchor {
680
  position: fixed;
681
  top: 15.6vw;
 
683
  z-index: 1101;
684
  }
685
 
 
686
  .hint-toggle-btn {
687
  width: 56px;
688
  height: 56px;
 
710
  outline-offset: 3px;
711
  }
712
 
 
713
  .hint-popover {
714
  position: absolute;
715
  top: 11vw;
 
721
  border-radius: 12px;
722
  padding: 16px 20px;
723
  box-shadow: 0 12px 32px rgba(0, 0, 0, .25);
724
+ border: 10px solid var(--main-accent-color);
725
+ overflow-y: auto;
726
  }
727
 
 
728
  .hint-popover::before {
729
  content: "";
730
  position: absolute;
 
737
  box-shadow: 2px -2px 8px rgba(0,0,0,.08);
738
  }
739
 
740
+ .user-guide-close-icon {
 
 
741
  top: 8px;
742
  right: 10px;
 
 
 
 
 
 
 
 
 
 
 
 
 
743
  }
744
 
 
 
 
 
 
 
 
 
 
 
 
745
  .hint-title {
746
  margin: 0 0 8px;
747
  font-size: 18px;
 
756
  margin-bottom: .5rem;
757
  }
758
 
 
759
  .hint-backdrop {
760
  position: fixed;
761
  inset: 0;
762
+ background: transparent;
763
  z-index: 1100;
764
  }
765
 
 
766
  @keyframes hint-slide-in {
767
  from {
768
  transform: translateY(-50%) translateX(8px);
 
775
  }
776
  }
777
 
 
778
  @media (max-width: 640px) {
779
  .hint-anchor {
780
  right: 12px;
 
798
  }
799
  }
800
 
 
 
801
  .ring {
802
  position: relative;
803
  width: 220px;
 
811
  display: block;
812
  }
813
 
 
814
  .ring-track {
815
  fill: none;
816
+ stroke: rgba(15, 23, 42, 0.18);
817
  stroke-width: 16;
818
  }
819
 
 
820
  .ring-progress {
821
  fill: none;
822
+ stroke: #006780;
823
  stroke-width: 16;
824
  stroke-linecap: round;
825
+ transform: rotate(-90deg);
826
  transform-origin: 50% 50%;
827
+ transition: stroke-dashoffset 0.1s linear;
828
  }
829
 
 
830
  .ring-number {
831
  position: absolute;
832
  inset: 0;
 
837
  color: #0f172a;
838
  }
839
 
 
840
  .global-countdown-overlay {
841
+ position: absolute;
842
  inset: 0;
843
  display: grid;
844
  place-items: center;
 
847
  z-index: 20;
848
  }
849
 
 
 
850
  :host ::ng-deep .global-countdown-overlay {
851
  position: fixed;
852
  inset: 0;
 
854
  place-items: center;
855
  background: transparent;
856
  pointer-events: none;
857
+ z-index: 2000;
858
  }
859
 
 
860
  :host ::ng-deep .overlay-card {
861
  background: rgba(255,255,255,0.98);
862
  backdrop-filter: blur(2px);
 
869
  pointer-events: none;
870
  }
871
 
 
872
  :host ::ng-deep .ring {
873
  position: relative;
874
  width: 220px;
 
876
  margin: 0 auto 8px;
877
  }
878
 
 
879
  :host ::ng-deep .ring-svg {
880
  position: relative;
881
  z-index: 2;
882
  }
883
 
 
884
  :host ::ng-deep .ring::before {
885
  content: "";
886
  position: absolute;
887
  inset: 0;
888
  margin: auto;
889
+ width: 120px;
890
  height: 120px;
891
  border-radius: 50%;
892
  background: #ffffff;
893
  border: 1px solid rgba(15,23,42,.08);
894
  box-shadow: inset 0 0 0 4px rgba(255,255,255,.9), 0 2px 10px rgba(0,0,0,.08);
895
+ z-index: 1;
896
  }
897
 
 
898
  :host ::ng-deep .ring-number {
899
  position: absolute;
900
  inset: 0;
901
  display: grid;
902
  place-items: center;
903
+ z-index: 3;
904
  font-weight: 900;
905
+ font-size: 64px;
906
  line-height: 1;
907
+ color: #0b1220;
908
  text-shadow: 0 0 2px #fff, 0 0 8px rgba(255,255,255,.85), 0 2px 8px rgba(0,0,0,.35);
909
  }
910
 
 
911
  :host ::ng-deep .ring-track,
912
  :host ::ng-deep .ring-progress {
913
+ stroke-width: 18px;
914
  }
915
 
 
916
  :host ::ng-deep .caption-pill {
917
  display: inline-block;
918
  margin-top: 10px;
src/app/generate-questions/generate-questions.component.html CHANGED
@@ -1,30 +1,25 @@
1
  <div class="app-container">
2
-
3
  <div *ngIf="isLoading" class="loading-overlay">
4
  <span class="loader"></span>
5
  </div>
6
 
7
-
8
  <app-header [title]="'Grammar Questions'"></app-header>
9
 
10
-
11
  <img src="assets/images/grammar-bg.png" alt="Chat Background" class="grammar-bg" />
12
 
13
  <div class="header-section">
14
  <div class="input-section">
15
  <!-- Input Field & Suggestions -->
16
  <div class="input-wrapper">
17
- <input [(ngModel)]="topic" (input)="onTopicChange()"
18
- [readonly]="isTopicLocked" placeholder="Enter a Topic..."
 
 
19
  class="input-box topic-input"
20
  (focus)="showSuggestions = true"
21
- onclick="showSuggestions = true"
22
  (blur)="hideSuggestions()" />
23
 
24
-
25
-
26
-
27
-
28
  <!-- Suggestions Dropdown -->
29
  <div *ngIf="showSuggestions && !isDropdownDisabled" class="suggestions-container">
30
  <div class="suggestions-list">
@@ -37,21 +32,11 @@
37
  </div>
38
  </div>
39
 
40
-
41
-
42
- <button [disabled]="isGenerateDisabled" (click)="generateQuestions()" class="btn-generate">🚀 Generate</button>
43
- <!--<button [disabled]="isResetDisabled" (click)="resetTopic()" class="reset-btn">Reset</button>-->
44
- <button [disabled]="!topic || isResetDisabled" (click)="resetTopic()" class="reset-btn">Reset</button>
45
-
46
-
47
-
48
-
49
-
50
-
51
  </div>
52
 
53
-
54
- <!-- Difficulty Indicator (Remains on Right) -->
55
  <div *ngIf="isQuestionsGenerated" class="difficulty-container">
56
  <div class="progress-bar-fill" [style.width]="getProgressWidth()"></div>
57
  <div class="level-dots">
@@ -65,20 +50,17 @@
65
  </div>
66
  </div>
67
 
68
-
69
-
70
-
71
  <div *ngIf="error" class="error-popup">
72
  <div class="error-popup-content">
73
  <p>{{ error }}</p>
74
- <button class="close-popup-btn" (click)="closeErrorPopup()">Close</button>
75
  </div>
76
  </div>
77
  </div>
78
 
79
  <!-- Main Content Section -->
80
  <div *ngIf="!isAllLevelsCompleted" class="full-content">
81
- <div class="questions-container" *ngIf="questions.length > 0 && !isAllLevelsCompleted">
82
  <div class="quesHintbtn">
83
  <h2 class="section-title">📝 Questions</h2>
84
  </div>
@@ -87,63 +69,63 @@
87
  <li *ngFor="let question of questions" class="question-item">
88
  <div class="question-wrapper">
89
  <div class="question-text-wrapper">
 
 
90
  <span class="question-text" *ngFor="let part of question.parts; let i = index">
91
  {{ part }}
92
- <span class="answer-slot">
93
- <input *ngIf="i < question.parts.length - 1"
94
- [(ngModel)]="userAnswers[question.index]"
 
95
  [readonly]="isValidationInProgress || readonlyAnswers[question.index]"
96
  placeholder=""
97
  class="answer-input"
98
  pattern="[A-Za-z]*"
99
- (input)="onInput($event, question.index)"
100
  [ngClass]="{
101
- 'correct-answer': !isLoading && isChecked && userAnswers[question.index] === questionsWithAnswers[question.index].correctAnswer,
102
- 'wrong-answer': !isLoading && isChecked && userAnswers[question.index] !== questionsWithAnswers[question.index].correctAnswer
103
- }"
104
- (input)="onAnswerChange(question.index)" />
105
-
106
-
107
- <div *ngIf="showGlobalCountdown" class="global-countdown-overlay" role="status" aria-live="assertive">
108
- <div class="overlay-card">
109
- <div class="ring">
110
- <svg class="ring-svg" viewBox="0 0 220 220" aria-hidden="true">
111
- <circle class="ring-track" cx="110" cy="110" r="90"></circle>
112
- <circle class="ring-progress"
113
- cx="110" cy="110" r="90"
114
- [attr.stroke-dasharray]="ringCircumference"
115
- [attr.stroke-dashoffset]="ringDashoffset"></circle>
116
- </svg>
117
- <div class="ring-number">{{ globalCountdown }}</div>
118
- </div>
119
- <div class="caption-pill">{{ overlayCaption }} {{ globalCountdown }}s</div>
120
- </div>
121
- </div>
122
-
123
-
124
  </span>
125
 
126
-
127
  </span>
128
  </div>
129
  </div>
130
  </li>
131
  </ul>
132
 
 
133
  <ng-container *ngIf="isFirstAttemptDone && hints?.length">
134
  <div class="hint-anchor" (click)="$event.stopPropagation()">
135
- <button type="button" class="hint-toggle-btn" aria-haspopup="dialog" [attr.aria-expanded]="isHintMenuVisible ? 'true' : 'false'" aria-controls="hintsPanel" (click)="toggleHintMenu()">
 
 
 
 
 
136
  </button>
137
 
138
- <section *ngIf="isHintMenuVisible" id="hintsPanel" class="hint-popover" role="dialog" aria-modal="true" aria-label="Hints" (click)="$event.stopPropagation()">
139
- <button type="button" class="hint-close" aria-label="Close hints" (click)="closeHints()">
 
 
 
 
 
 
 
 
 
 
140
  ×
141
  </button>
142
 
143
  <h3 class="hint-title">Hints</h3>
 
144
  <ul class="hint-list" role="list">
145
  <ng-container *ngFor="let hint of hints; let i = index">
146
- <li *ngIf="hint && hint.trim() !== '' && userAnswers[i] !== questionsWithAnswers[i]?.correctAnswer" class="hint-item">
 
147
  <strong>Hint for Question {{ i + 1 }}:</strong> {{ hint }}
148
  </li>
149
  </ng-container>
@@ -156,19 +138,43 @@
156
  </div>
157
  </div>
158
 
159
- <div class="submit-container" *ngIf="isQuestionsGenerated && !isAllLevelsCompleted">
160
- <button [disabled]="!areAllAnswersFilled() || isChecked"
161
- (click)="checkAllAnswers()"
162
- class="btn-submit">
 
163
  Validate Answers
164
- </button>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
165
  </div>
166
 
167
- <!-- Congratulatory Message -->
168
  <div *ngIf="isAllLevelsCompleted" class="congratulation-message">
169
  <h2>🎉 Congratulations! You have completed all levels! 🎉</h2>
170
  <p>Ready to start over and improve even more?</p>
171
- <button (click)="stopConfettiAndReset()">Start Over</button>
172
  </div>
173
-
174
  </div>
 
1
  <div class="app-container">
 
2
  <div *ngIf="isLoading" class="loading-overlay">
3
  <span class="loader"></span>
4
  </div>
5
 
 
6
  <app-header [title]="'Grammar Questions'"></app-header>
7
 
 
8
  <img src="assets/images/grammar-bg.png" alt="Chat Background" class="grammar-bg" />
9
 
10
  <div class="header-section">
11
  <div class="input-section">
12
  <!-- Input Field & Suggestions -->
13
  <div class="input-wrapper">
14
+ <input [(ngModel)]="topic"
15
+ (input)="onTopicChange()"
16
+ [readonly]="isTopicLocked"
17
+ placeholder="Enter a Topic..."
18
  class="input-box topic-input"
19
  (focus)="showSuggestions = true"
20
+ (click)="showSuggestions = true"
21
  (blur)="hideSuggestions()" />
22
 
 
 
 
 
23
  <!-- Suggestions Dropdown -->
24
  <div *ngIf="showSuggestions && !isDropdownDisabled" class="suggestions-container">
25
  <div class="suggestions-list">
 
32
  </div>
33
  </div>
34
 
35
+ <app-button [disabled]="isGenerateDisabled" (click)="generateQuestions()">🚀 Generate</app-button>
36
+ <app-button [disabled]="!topic || isResetDisabled" (click)="resetTopic()">Reset</app-button>
 
 
 
 
 
 
 
 
 
37
  </div>
38
 
39
+ <!-- Difficulty Indicator -->
 
40
  <div *ngIf="isQuestionsGenerated" class="difficulty-container">
41
  <div class="progress-bar-fill" [style.width]="getProgressWidth()"></div>
42
  <div class="level-dots">
 
50
  </div>
51
  </div>
52
 
 
 
 
53
  <div *ngIf="error" class="error-popup">
54
  <div class="error-popup-content">
55
  <p>{{ error }}</p>
56
+ <app-button class="close-popup-btn" (click)="closeErrorPopup()">Close</app-button>
57
  </div>
58
  </div>
59
  </div>
60
 
61
  <!-- Main Content Section -->
62
  <div *ngIf="!isAllLevelsCompleted" class="full-content">
63
+ <div class="questions-container" *ngIf="questions.length > 0">
64
  <div class="quesHintbtn">
65
  <h2 class="section-title">📝 Questions</h2>
66
  </div>
 
69
  <li *ngFor="let question of questions" class="question-item">
70
  <div class="question-wrapper">
71
  <div class="question-text-wrapper">
72
+
73
+ <!-- Sentence + Answer Box -->
74
  <span class="question-text" *ngFor="let part of question.parts; let i = index">
75
  {{ part }}
76
+
77
+ <!-- Inline answer slot -->
78
+ <span class="answer-slot" *ngIf="i < question.parts.length - 1">
79
+ <input [(ngModel)]="userAnswers[question.index]"
80
  [readonly]="isValidationInProgress || readonlyAnswers[question.index]"
81
  placeholder=""
82
  class="answer-input"
83
  pattern="[A-Za-z]*"
84
+ (input)="onInput($event, question.index); onAnswerChange(question.index)"
85
  [ngClass]="{
86
+ 'correct-answer': !isLoading && isChecked && userAnswers[question.index] === questionsWithAnswers[question.index].correctAnswer,
87
+ 'wrong-answer': !isLoading && isChecked && userAnswers[question.index] !== questionsWithAnswers[question.index].correctAnswer
88
+ }" />
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
89
  </span>
90
 
 
91
  </span>
92
  </div>
93
  </div>
94
  </li>
95
  </ul>
96
 
97
+ <!-- Hints Section -->
98
  <ng-container *ngIf="isFirstAttemptDone && hints?.length">
99
  <div class="hint-anchor" (click)="$event.stopPropagation()">
100
+ <button type="button" class="hint-toggle-btn"
101
+ aria-haspopup="dialog"
102
+ [attr.aria-expanded]="isHintMenuVisible ? 'true' : 'false'"
103
+ aria-controls="hintsPanel"
104
+ (click)="toggleHintMenu()">
105
+ 💡
106
  </button>
107
 
108
+ <section *ngIf="isHintMenuVisible"
109
+ id="hintsPanel"
110
+ class="hint-popover"
111
+ role="dialog"
112
+ aria-modal="true"
113
+ aria-label="Hints"
114
+ (click)="$event.stopPropagation()">
115
+
116
+ <button type="button"
117
+ class="user-guide-close-icon"
118
+ aria-label="Close hints"
119
+ (click)="closeHints()">
120
  ×
121
  </button>
122
 
123
  <h3 class="hint-title">Hints</h3>
124
+
125
  <ul class="hint-list" role="list">
126
  <ng-container *ngFor="let hint of hints; let i = index">
127
+ <li *ngIf="hint && hint.trim() !== '' && userAnswers[i] !== questionsWithAnswers[i]?.correctAnswer"
128
+ class="hint-item">
129
  <strong>Hint for Question {{ i + 1 }}:</strong> {{ hint }}
130
  </li>
131
  </ng-container>
 
138
  </div>
139
  </div>
140
 
141
+ <!-- Validate Button -->
142
+ <div class="submit-container"
143
+ *ngIf="isQuestionsGenerated && !isAllLevelsCompleted">
144
+ <app-button [disabled]="!areAllAnswersFilled() || isChecked"
145
+ (click)="checkAllAnswers()">
146
  Validate Answers
147
+ </app-button>
148
+ </div>
149
+
150
+ <!-- Global Countdown Overlay (ONLY ONCE) -->
151
+ <div *ngIf="showGlobalCountdown"
152
+ class="global-countdown-overlay"
153
+ role="status"
154
+ aria-live="assertive">
155
+
156
+ <div class="overlay-card">
157
+ <div class="ring">
158
+ <svg class="ring-svg" viewBox="0 0 220 220" aria-hidden="true">
159
+ <circle class="ring-track" cx="110" cy="110" r="90"></circle>
160
+ <circle class="ring-progress"
161
+ cx="110" cy="110" r="90"
162
+ [attr.stroke-dasharray]="ringCircumference"
163
+ [attr.stroke-dashoffset]="ringDashoffset"></circle>
164
+ </svg>
165
+ <div class="ring-number">{{ globalCountdown }}</div>
166
+ </div>
167
+
168
+ <div class="caption-pill">
169
+ {{ overlayCaption }} {{ globalCountdown }}s
170
+ </div>
171
+ </div>
172
  </div>
173
 
174
+ <!-- Completion Message -->
175
  <div *ngIf="isAllLevelsCompleted" class="congratulation-message">
176
  <h2>🎉 Congratulations! You have completed all levels! 🎉</h2>
177
  <p>Ready to start over and improve even more?</p>
178
+ <app-button (click)="stopConfettiAndReset()">Start Over</app-button>
179
  </div>
 
180
  </div>
src/app/generate-questions/generate-questions.component.ts CHANGED
@@ -5,7 +5,8 @@ import { GenerateQuestionsService } from './generate-questions.service';
5
  import { Router } from '@angular/router';
6
  import confetti from 'canvas-confetti';
7
  import { ChangeDetectorRef } from '@angular/core';
8
- import { HeaderComponent } from '../shared/header/header.component'; // Import HeaderComponent
 
9
 
10
 
11
  interface QuestionWithAnswer {
@@ -21,7 +22,7 @@ interface Question {
21
  @Component({
22
  selector: 'app-generate-questions',
23
  standalone: true,
24
- imports: [FormsModule, CommonModule, HeaderComponent], // Add HeaderComponent here
25
  templateUrl: './generate-questions.component.html',
26
  styleUrls: ['./generate-questions.component.css']
27
  })
@@ -217,7 +218,7 @@ export class GenerateQuestionsComponent {
217
  this.validated = false;
218
  this.currentDifficulty = "basic";
219
  this.error = "";
220
- this.isGenerateDisabled = false;
221
  this.isResetDisabled = true;
222
  this.showSuggestions = false;
223
  this.showLevelTooltip = false;
@@ -557,7 +558,7 @@ export class GenerateQuestionsComponent {
557
  hideSuggestions(): void {
558
  setTimeout(() => {
559
  this.showSuggestions = false;
560
- }, 200);
561
  }
562
 
563
  processHints(hints: string[]) {
 
5
  import { Router } from '@angular/router';
6
  import confetti from 'canvas-confetti';
7
  import { ChangeDetectorRef } from '@angular/core';
8
+ import { HeaderComponent } from '../shared/header/header.component';
9
+ import { ButtonComponent } from '../shared/button/button.component';
10
 
11
 
12
  interface QuestionWithAnswer {
 
22
  @Component({
23
  selector: 'app-generate-questions',
24
  standalone: true,
25
+ imports: [FormsModule, CommonModule, HeaderComponent, ButtonComponent],
26
  templateUrl: './generate-questions.component.html',
27
  styleUrls: ['./generate-questions.component.css']
28
  })
 
218
  this.validated = false;
219
  this.currentDifficulty = "basic";
220
  this.error = "";
221
+ this.isGenerateDisabled = true;
222
  this.isResetDisabled = true;
223
  this.showSuggestions = false;
224
  this.showLevelTooltip = false;
 
558
  hideSuggestions(): void {
559
  setTimeout(() => {
560
  this.showSuggestions = false;
561
+ }, 150);
562
  }
563
 
564
  processHints(hints: string[]) {
src/app/shared/button/button.component.css ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ button {
2
+ background-color: #006780;
3
+ color: white;
4
+ border: none;
5
+ padding: 15px 32px;
6
+ font-size: 1.3vw;
7
+ border-radius: 0.5vw;
8
+ cursor: pointer;
9
+ transition: background-color 0.3s, transform 0.3s;
10
+ font-weight: bold;
11
+ }
12
+
13
+ button:disabled {
14
+ background: #bdbdbd;
15
+ cursor: not-allowed;
16
+ }
17
+
18
+ button:hover:not(:disabled) {
19
+ background-color: #18788f;
20
+ transform: scale(1.05);
21
+ }
22
+
23
+
src/app/shared/button/button.component.ts ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { Component, Input } from '@angular/core';
2
+ import { NgClass } from '@angular/common';
3
+
4
+ @Component({
5
+ selector: 'app-button',
6
+ standalone: true,
7
+ imports: [NgClass],
8
+ template: `
9
+ <button [type]="type" [ngClass]="class" [disabled]="disabled">
10
+ <ng-content></ng-content>
11
+ </button>
12
+ `,
13
+ styleUrls: ['./button.component.css']
14
+ })
15
+ export class ButtonComponent {
16
+ @Input() type: 'button' | 'submit' | 'reset' = 'button';
17
+ @Input() class = '';
18
+ @Input() disabled = false;
19
+ }
src/styles.css CHANGED
@@ -7,6 +7,11 @@
7
  @import '@angular/material/prebuilt-themes/indigo-pink.css';
8
 
9
  /* -------------------- Custom Fonts -------------------- */
 
 
 
 
 
10
  @font-face {
11
  font-family: 'Super Cartoon';
12
  src: url('assets/font/Super Cartoon.ttf') format('truetype');
@@ -92,6 +97,7 @@ body {
92
  overflow-x: hidden;
93
  }
94
 
 
95
 
96
  .imgbgcontainter {
97
  background-image: url(/assets/images/grammar-bg.png);
@@ -117,38 +123,53 @@ body {
117
 
118
 
119
 
120
- .logo {
121
- display: flex;
122
- align-items: center;
123
- gap: 1vw;
124
  }
125
 
 
 
 
126
 
127
- .brand-link {
 
 
 
 
 
 
 
128
  display: flex;
129
  align-items: center;
130
- gap: 0.6vw;
131
- text-decoration: none;
 
 
 
 
 
132
  }
133
 
134
- .product-name {
135
- color: #fff;
136
- font-size: 2vw;
137
- letter-spacing: 0.5px;
138
-
139
- font-family: Amonk_Outline;
140
- line-height: 1;
141
- }
142
-
143
- .brand-link:hover .product-name {
144
- opacity: 0.9;
145
- }
146
 
147
- .mat-mdc-dialog-surface.mdc-dialog__surface {
148
- border-radius: 1vw !important;
149
- }
 
 
150
 
151
- .cdk-global-scrollblock {
152
- overflow: hidden;
153
- }
154
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
  @import '@angular/material/prebuilt-themes/indigo-pink.css';
8
 
9
  /* -------------------- Custom Fonts -------------------- */
10
+
11
+ :root {
12
+ --main-accent-color: #009688;
13
+ }
14
+
15
  @font-face {
16
  font-family: 'Super Cartoon';
17
  src: url('assets/font/Super Cartoon.ttf') format('truetype');
 
97
  overflow-x: hidden;
98
  }
99
 
100
+ /*background image for all the component */
101
 
102
  .imgbgcontainter {
103
  background-image: url(/assets/images/grammar-bg.png);
 
123
 
124
 
125
 
126
+ .mat-mdc-dialog-surface.mdc-dialog__surface {
127
+ border-radius: 1vw !important;
 
 
128
  }
129
 
130
+ .cdk-global-scrollblock {
131
+ overflow: hidden;
132
+ }
133
 
134
+ /*overall close icon button color change on hover in user guide modal*/
135
+ .user-guide-close-icon {
136
+ position: absolute;
137
+ background: #009688;
138
+ border: none;
139
+ width: 44px;
140
+ height: 44px;
141
+ border-radius: 50%;
142
  display: flex;
143
  align-items: center;
144
+ justify-content: center;
145
+ font-size: 2vw;
146
+ color: black;
147
+ cursor: pointer;
148
+ z-index: 2010;
149
+ box-shadow: 0 2px 8px rgba(93, 145, 195, 0.18);
150
+ transition: background 0.2s, color 0.2s;
151
  }
152
 
 
 
 
 
 
 
 
 
 
 
 
 
153
 
154
+ .user-guide-close-icon:hover {
155
+ background: white;
156
+ color: black;
157
+ border: 3px solid #009688;
158
+ }
159
 
 
 
 
160
 
161
+ /*back arrow button*/
162
+ .back-btn {
163
+ position: absolute;
164
+ top: 1vw;
165
+ left: 1vw;
166
+ transform: translateY(-50%);
167
+ cursor: pointer;
168
+ padding: 0 1rem;
169
+ transition: transform 0.3s;
170
+ width: 4.5vw;
171
+ }
172
+
173
+ .back-btn:hover {
174
+ transform: translateY(-50%) scale(1.1);
175
+ }