Anupriya commited on
Commit
6f70a09
·
1 Parent(s): 50fc34c

Added Logo text and CSS

Browse files
src/app/chat/chat.component.css CHANGED
@@ -33,6 +33,10 @@ h1 {
33
  font-size: 3vw;
34
  color: white;
35
  font-family: Super Cartoon;
 
 
 
 
36
  }
37
 
38
  @font-face {
@@ -85,156 +89,6 @@ h1 {
85
  flex-shrink: 0; /* Prevent shrinking */
86
  }
87
 
88
- /* Wrapper for Message and Profile Picture */
89
- /*.message-wrapper {
90
- display: flex;
91
- align-items: flex-start;
92
- gap: 1vw;*/ /* Space between profile picture and message */
93
- /*margin-bottom: 1.5vw;
94
- }
95
-
96
- .message-wrapper.user {
97
- flex-direction: row-reverse;*/ /* User messages on the right */
98
- /*text-align: right;
99
- }*/
100
-
101
- /* Profile Picture Styling */
102
- /*.profile-pic {
103
- flex-shrink: 0;
104
- width: 4vw;*/ /* Responsive profile picture size */
105
- /*height: 4vw;
106
- border-radius: 50%;
107
- overflow: hidden;
108
- background-color: #ddd;*/ /* Fallback color */
109
- /*}
110
-
111
- .profile-pic img {
112
- width: 100%;
113
- height: 100%;
114
- object-fit: cover;*/ /* Ensure image fits nicely */
115
- /*}*/
116
-
117
- /* Message Styles */
118
- /*.message {
119
- max-width: 50vw;*/ /* Adjust message width for smaller screens */
120
- /*padding: 1vw 2vw;
121
- border-radius: 2vw;
122
- font-size: 1.2vw;
123
- line-height: 1.5;
124
- box-shadow: 0 0.3vw 0.8vw rgba(0, 0, 0, 0.1);
125
- animation: fadeIn 0.5s ease;
126
- }
127
-
128
- .message-content {
129
- text-align: justify;
130
- }*/
131
-
132
- /* User and AI Message Colors */
133
- /*.user .message {
134
- align-self: flex-end;
135
- background: #2b6296;
136
- color: white;
137
- }
138
-
139
- .ai .message {
140
- align-self: flex-start;*/
141
- /* background: #a855f7;*/
142
- /* background: #404d95f7;*/
143
- /*background: #2b6296;
144
- color: white;
145
- }*/
146
-
147
- /* Timestamp Styling */
148
- /*.message-timestamp {
149
- font-size: 1vw;
150
- color: rgba(255, 255, 255, 0.8);
151
- margin-top: 0.5vw;
152
- display: block;
153
- text-align: right;
154
- }*/
155
-
156
- /*.typing-indicator {
157
- font-style: italic;
158
- color: #888;
159
- font-size: 1.2vw;
160
- text-align: left;
161
- margin: 1vw 0;
162
- display: flex;
163
- align-items: center;
164
- }*/
165
-
166
- /*.typing-indicator::after {
167
- content: "⠿";
168
- display: inline-block;
169
- font-size: 1.5vw;
170
- color: #888;
171
- animation: typing-animation 1s infinite;
172
- }
173
-
174
- @keyframes typing-animation {
175
- 0% {
176
- opacity: 0.2;
177
- }
178
-
179
- 50% {
180
- opacity: 1;
181
- }
182
-
183
- 100% {
184
- opacity: 0.2;
185
- }
186
- }*/
187
-
188
-
189
-
190
- /* General Flexbox Adjustments */
191
- /*.chat-box {
192
- padding: 2vw;
193
- display: flex;
194
- flex: 1;
195
- flex-direction: column;
196
- gap: 1vw;*/ /* Adjust spacing between messages */
197
- /*background-color: #f9fafb;*/ /* Light background */
198
- /*overflow-y: auto;
199
- height: 80vh;*/ /* Maintain height of the chat box */
200
- /*}*/
201
-
202
-
203
- /*.chat-box {
204
- display: flex;
205
- flex-direction: column;
206
- gap: 1vw;
207
- overflow-y: auto;
208
- height: calc(100vh - 120px);
209
- padding: 2vw;*/
210
- /*background-color: rgb(35 34 32 / 45%);*/
211
- /* background-color: rgb(35 34 32 / 23%);*/
212
- /*background-color: rgb(35 34 32 / 43%);
213
- }*/
214
-
215
- /*.chat-box {
216
- display: flex;
217
- flex-direction: column;
218
- gap: 1vw;
219
- overflow-y: auto;*/ /* ✅ Enables scrolling */
220
- /*height: calc(100vh - 120px);
221
- padding: 2vw;
222
- background-color: rgba(35, 34, 32, 0.43);
223
- scroll-behavior: smooth;*/ /* ✅ Smooth scrolling */
224
- /*}*/
225
-
226
-
227
-
228
- /*.chat-box {
229
- display: flex;
230
- flex-direction: column;
231
- overflow-y: auto;*/ /* ✅ Enables scrolling */
232
- /*height: calc(100vh - 120px);
233
- padding: 2vw;
234
- background-color: rgba(35, 34, 32, 0.43);
235
- scroll-behavior: smooth;*/ /* ✅ Smooth scrolling */
236
- /*}*/
237
-
238
 
239
  .chat-box {
240
  display: flex;
@@ -250,28 +104,6 @@ h1 {
250
 
251
 
252
 
253
- /*.chat-box {
254
- display: flex;
255
- flex-direction: column;
256
- overflow-y: auto;
257
- height: calc(100vh - 180px);*/ /* Adjust height to create space */
258
- /*padding: 2vw;
259
- background-color: rgba(35, 34, 32, 0.43);
260
- scroll-behavior: smooth;
261
- flex-grow: 1;
262
- overflow-y: auto;
263
- padding-bottom: 90px;*/ /* ✅ Creates gap between chat and input field */
264
- /*}*/
265
-
266
-
267
-
268
- /*
269
- .message-wrapper {
270
- display: flex;
271
- align-items: flex-start;
272
- margin-bottom: 1.5vw;
273
- }
274
- */
275
 
276
 
277
 
@@ -293,25 +125,6 @@ h1 {
293
 
294
 
295
 
296
- /*.input-box textarea {
297
- flex: 1;
298
- height: auto;*/ /* Automatically adjust height */
299
- /*max-height: 80px;*/ /* Limit the maximum height */
300
- /*overflow-y: auto;*/ /* Allow scrolling if needed */
301
- /*resize: none;*/ /* Disable manual resizing */
302
- /*padding: 8px;*/ /* Adjust padding for proper alignment */
303
- /*font-size: 1rem;*/ /* Font size for input text */
304
- /*line-height: 1.2;*/ /* Adjust line height for vertical centering */
305
- /* border: 1px solid rgba(255, 255, 255, 0.13);*/
306
- /*border: 1px solid rgb(93 145 195);
307
- border-radius: 8px;*/ /* Smaller border radius */
308
- /*background: rgba(255, 255, 255, 0.04);
309
- color: white;
310
- outline: none;
311
- transition: border-color 0.3s ease, box-shadow 0.3s ease;
312
- width: 100%;
313
- box-sizing: border-box;
314
- }*/
315
 
316
  .input-box textarea {
317
  flex: 1;
@@ -355,15 +168,7 @@ h1 {
355
 
356
 
357
 
358
- /*.input-box button {
359
- font-size: 1rem;*/ /* Smaller font size */
360
- /*padding: 6px 12px;*/ /* Smaller button padding */
361
- /*border-radius: 8px;*/ /* Match text area border radius */
362
- /*background: #a855f7;
363
- color: white;
364
- cursor: pointer;
365
- transition: all 0.3s ease;
366
- }*/
367
 
368
  .input-box button {
369
  width: 55px; /* Fixed button size */
@@ -574,21 +379,7 @@ h1 {
574
  }
575
  }
576
 
577
- /* Centered Error Message */
578
- /*.error-box {
579
- position: fixed;
580
- top: 60%;
581
- left: 50%;
582
- transform: translate(-50%, -50%);
583
- background: rgba(255, 0, 0, 0.8);
584
- color: white;
585
- padding: 12px 20px;
586
- border-radius: 8px;
587
- font-size: 14px;
588
- text-align: center;
589
- z-index: 1000;
590
- animation: fadeIn 0.3s ease-in-out;
591
- }*/
592
 
593
  .error-text {
594
  color: black;
@@ -732,37 +523,6 @@ h1 {
732
 
733
 
734
 
735
- /*
736
- Oviya - Hardcoded*/
737
- /*.hardcoded-questions {
738
- position: absolute;
739
- background: white;
740
- border: 1px solid #ccc;
741
- border-radius: 5px;
742
- padding: 10px;
743
- width: 90%;
744
- max-width: 400px;
745
- box-shadow: 0px 4px 6px rgba(0, 0, 0, 0.1);
746
- margin-top: 5px;
747
- z-index: 1000;
748
- }
749
-
750
- .hardcoded-questions ul {
751
- list-style: none;
752
- padding: 0;
753
- margin: 0;
754
- }
755
-
756
- .hardcoded-questions li {
757
- padding: 8px;
758
- cursor: pointer;
759
- transition: background 0.3s;
760
- }
761
-
762
- .hardcoded-questions li:hover {
763
- background: #f0f0f0;
764
- }*/
765
-
766
 
767
  /* Container for hardcoded questions - Aligned left above the text field */
768
  .hardcoded-questions-container {
@@ -814,17 +574,6 @@ Oviya - Hardcoded*/
814
  }
815
 
816
 
817
- /*.paragraph-block {
818
- background: #2b6296;
819
- color: white;
820
- padding: 1vw;
821
- border-radius: 1vw;
822
- margin-bottom: 0.3vw;*/ /* Reduce space between paragraphs */
823
- /*box-shadow: 0 0.3vw 0.8vw rgba(0, 0, 0, 0.1);
824
- line-height: 1.5;
825
- max-width: 48vw;
826
- }*/
827
-
828
 
829
 
830
  /* Message wrapper for each chat bubble */
@@ -861,17 +610,6 @@ Oviya - Hardcoded*/
861
  object-fit: cover;
862
  }
863
 
864
- /* Individual Message Styling */
865
- /*.message {
866
- max-width: 50vw;
867
- padding: 1vw 2vw;
868
- border-radius: 2vw;
869
- font-size: 1.2vw;
870
- line-height: 1.5;
871
- box-shadow: 0 0.3vw 0.8vw rgba(0, 0, 0, 0.1);
872
- background: #2b6296;
873
- color: white;
874
- }*/
875
 
876
  /* Separate paragraph blocks */
877
  .ai .message {
 
33
  font-size: 3vw;
34
  color: white;
35
  font-family: Super Cartoon;
36
+ position: absolute;
37
+ top: 50%;
38
+ left: 50%;
39
+ transform: translate(-50%, -50%);
40
  }
41
 
42
  @font-face {
 
89
  flex-shrink: 0; /* Prevent shrinking */
90
  }
91
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
92
 
93
  .chat-box {
94
  display: flex;
 
104
 
105
 
106
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
107
 
108
 
109
 
 
125
 
126
 
127
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
128
 
129
  .input-box textarea {
130
  flex: 1;
 
168
 
169
 
170
 
171
+
 
 
 
 
 
 
 
 
172
 
173
  .input-box button {
174
  width: 55px; /* Fixed button size */
 
379
  }
380
  }
381
 
382
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
383
 
384
  .error-text {
385
  color: black;
 
523
 
524
 
525
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
526
 
527
  /* Container for hardcoded questions - Aligned left above the text field */
528
  .hardcoded-questions-container {
 
574
  }
575
 
576
 
 
 
 
 
 
 
 
 
 
 
 
577
 
578
 
579
  /* Message wrapper for each chat bubble */
 
610
  object-fit: cover;
611
  }
612
 
 
 
 
 
 
 
 
 
 
 
 
613
 
614
  /* Separate paragraph blocks */
615
  .ai .message {
src/app/chat/chat.component.html CHANGED
@@ -4,9 +4,10 @@
4
  <div class="chat-container">
5
  <div class="header-container">
6
  <div class="logo">
7
- <a (click)="goToHome()" routerLink="/home">
8
  <img src="assets/images/pykara-logo.png" alt="Pykara Logo" />
9
  </a>
 
10
  </div>
11
  <div class="header-title">
12
  <h1>Grammar Chat</h1>
 
4
  <div class="chat-container">
5
  <div class="header-container">
6
  <div class="logo">
7
+ <a (click)="goToHome()" routerLink="/home" class="brand-link">
8
  <img src="assets/images/pykara-logo.png" alt="Pykara Logo" />
9
  </a>
10
+ <span class="product-name">Py-Learn</span>
11
  </div>
12
  <div class="header-title">
13
  <h1>Grammar Chat</h1>
src/app/findword/findword.component.css CHANGED
@@ -30,15 +30,17 @@ body {
30
  }
31
 
32
 
33
- .header-title {
34
- font-size: 2.6vw;
35
- font-family: Super Cartoon;
36
- color: #009688;
37
  font-size: 3vw;
38
  color: #fff;
39
  margin: 0;
 
 
 
 
40
  }
41
 
 
42
  .home-btn img {
43
  width: 5vw;
44
  }
@@ -1053,8 +1055,8 @@ h2 {
1053
 
1054
 
1055
  .close-btn1 {
1056
- background-color: #ffffff;
1057
- color: #0097a7;
1058
  border: none;
1059
  padding: 0.4vw 0.9vw;
1060
  border-radius: 50%;
@@ -1065,10 +1067,19 @@ h2 {
1065
  right: -3.5vw;
1066
  position: absolute;
1067
  height: 3vw;
1068
- font-size: 1vw;
1069
  font-weight: bold;
1070
  }
1071
 
 
 
 
 
 
 
 
 
 
1072
 
1073
  /* Clean, static image at the left side (no blur, no animation) */
1074
  .left-illustration {
 
30
  }
31
 
32
 
33
+ .header-title h1 {
 
 
 
34
  font-size: 3vw;
35
  color: #fff;
36
  margin: 0;
37
+ position: absolute;
38
+ top: 50%;
39
+ left: 50%;
40
+ transform: translate(-50%, -50%);
41
  }
42
 
43
+
44
  .home-btn img {
45
  width: 5vw;
46
  }
 
1055
 
1056
 
1057
  .close-btn1 {
1058
+ background-color: #009688;
1059
+ color: black;
1060
  border: none;
1061
  padding: 0.4vw 0.9vw;
1062
  border-radius: 50%;
 
1067
  right: -3.5vw;
1068
  position: absolute;
1069
  height: 3vw;
1070
+ font-size: 1.3vw;
1071
  font-weight: bold;
1072
  }
1073
 
1074
+ .close-btn1:hover {
1075
+ transform: scale(1.06);
1076
+ box-shadow: 0 6px 14px rgba(0,0,0,.22);
1077
+ background: #f7fafc;
1078
+ }
1079
+
1080
+ .close-btn1:active {
1081
+ transform: scale(0.98);
1082
+ }
1083
 
1084
  /* Clean, static image at the left side (no blur, no animation) */
1085
  .left-illustration {
src/app/findword/findword.component.html CHANGED
@@ -1,9 +1,10 @@
1
  <div class="full-container">
2
  <div class="header-container">
3
  <div class="logo">
4
- <a (click)="goToHome()" routerLink="/home">
5
  <img src="assets/images/pykara-logo.png" alt="Pykara Logo" />
6
  </a>
 
7
  </div>
8
  <div class="header-title">
9
  <h1>Find the Word</h1>
 
1
  <div class="full-container">
2
  <div class="header-container">
3
  <div class="logo">
4
+ <a (click)="goToHome()" routerLink="/home" class="brand-link">
5
  <img src="assets/images/pykara-logo.png" alt="Pykara Logo" />
6
  </a>
7
+ <span class="product-name">Py-Learn</span>
8
  </div>
9
  <div class="header-title">
10
  <h1>Find the Word</h1>
src/app/generate-questions/generate-questions.component.css CHANGED
@@ -45,6 +45,10 @@ body {
45
  font-size: 3vw;
46
  color: #fff;
47
  margin: 0;
 
 
 
 
48
  }
49
 
50
  .home-btn img {
 
45
  font-size: 3vw;
46
  color: #fff;
47
  margin: 0;
48
+ position: absolute;
49
+ top: 50%;
50
+ left: 50%;
51
+ transform: translate(-50%, -50%);
52
  }
53
 
54
  .home-btn img {
src/app/generate-questions/generate-questions.component.html CHANGED
@@ -8,9 +8,10 @@
8
  <div class="header-container">
9
  <!-- Logo Section -->
10
  <div class="logo">
11
- <a (click)="goToHome()" routerLink="/home">
12
  <img src="assets/images/pykara-logo.png" alt="Pykara Logo" />
13
  </a>
 
14
  </div>
15
 
16
  <!-- Title Section -->
 
8
  <div class="header-container">
9
  <!-- Logo Section -->
10
  <div class="logo">
11
+ <a (click)="goToHome()" routerLink="/home" class="brand-link">
12
  <img src="assets/images/pykara-logo.png" alt="Pykara Logo" />
13
  </a>
14
+ <span class="product-name">Py-Learn</span>
15
  </div>
16
 
17
  <!-- Title Section -->
src/app/listen/listen.component.css CHANGED
@@ -41,6 +41,10 @@ body, html {
41
  font-size: 3vw;
42
  color: #fff;
43
  margin: 0;
 
 
 
 
44
  }
45
 
46
  .home-btn img {
@@ -71,77 +75,6 @@ img {
71
 
72
 
73
 
74
- /* Main Container Layout */
75
- /*.main-container {
76
- display: flex;
77
- justify-content: space-between;
78
- align-items: flex-start;
79
- padding: 4vw;
80
- gap: 2vw;
81
- background-color: #fff;
82
- border: 10px solid #009688;*/ /* ✅ Add this line for border */
83
- /*border-radius: 1vw;
84
- box-shadow: 0 0.4vw 0.8vw rgba(0, 0, 0, 0.5);
85
- margin: 2vw auto;
86
- max-width: 90%;*/
87
- /* ✅ Inside shadow */
88
- /*box-shadow: inset 0 0 10px rgba(0, 150, 136, 0.5),*/ /* inner glow */
89
- /*0 0.4vw 0.8vw rgba(0, 0, 0, 0.2);*/ /* existing outer shadow */
90
- /*}
91
-
92
- .left-content {
93
- flex: 1;
94
- max-width: 40%;
95
- text-align: left;
96
- }
97
-
98
- .left-content h2 {
99
- font-size: 2.5vw;
100
- font-weight: bold;
101
- color: #006780;
102
- margin-bottom: 20px;
103
- }
104
-
105
- .left-content p {
106
- font-size: 1.4vw;
107
- margin-bottom: 2vw;
108
- text-align: justify;
109
- }
110
-
111
-
112
- .video-upload-container {
113
- display: flex;
114
- flex-direction: column;
115
- align-items: center;
116
- max-width: 50%;
117
- }
118
-
119
- .video-preview-container {
120
- margin-bottom: 1.5vw;
121
- }
122
-
123
-
124
-
125
- .video-preview-container video {
126
- width: 50vw;
127
- max-height: 40vh;
128
- border-radius: 0.5vw;
129
- box-shadow: 0 0.4vw 0.8vw rgba(0, 0, 0, 0.2);
130
- transition: all 0.5s ease-in-out;
131
- margin-top: 2vw;
132
- }
133
-
134
- .video-upload-input {
135
- display: none;
136
- }
137
-
138
- .video-placeholder {
139
- width: 92%;
140
- max-width: 36vw;
141
- border-radius: 1vw;
142
- box-shadow: 0 0.4vw 0.8vw rgba(0, 0, 0, 0.2);
143
- object-fit: contain;
144
- }*/
145
 
146
  /* Listen Card Style */
147
  .listen-card1 {
 
41
  font-size: 3vw;
42
  color: #fff;
43
  margin: 0;
44
+ position: absolute;
45
+ top: 50%;
46
+ left: 50%;
47
+ transform: translate(-50%, -50%);
48
  }
49
 
50
  .home-btn img {
 
75
 
76
 
77
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
78
 
79
  /* Listen Card Style */
80
  .listen-card1 {
src/app/listen/listen.component.html CHANGED
@@ -6,9 +6,10 @@
6
  <!-- Header Section -->
7
  <div class="header-container">
8
  <div class="logo">
9
- <a (click)="goToHome()" routerLink="/home">
10
  <img src="assets/images/pykara-logo.png" alt="Pykara Logo" />
11
  </a>
 
12
  </div>
13
  <div class="header-title">
14
  <h1>Listen</h1>
@@ -23,73 +24,6 @@
23
  <!-- Background image (optional) -->
24
  <img src="assets/images/listen.png" alt="Chat Background" class="grammar-bg" />
25
 
26
- <!-- Main Container Layout -->
27
- <!--<div class="main-container " *ngIf="questions.length === 0">-->
28
- <!-- Left Section: Exercise Description -->
29
- <!--<div class="left-content">
30
- <h2>Welcome to the Listening Exercise</h2>
31
- <p>
32
- This listening exercise helps students improve their English listening skills.
33
- Please upload your video and watch it fully. After the video is completed, the <strong>Generate Questions</strong> button will be enabled.
34
- Answer questions to practice and strengthen understanding and memory.
35
- </p>
36
-
37
- <button class="generate-btn"
38
- [disabled]="!isGenerateEnabled"
39
- (click)="generateQuestions()">
40
- Generate Questions
41
- </button>
42
- </div>-->
43
- <!-- Right Section: Video or Image + Upload -->
44
- <!--<div class="video-upload-container">-->
45
- <!-- Show placeholder image until video is uploaded -->
46
- <!--<div class="video-preview-container" *ngIf="!videoUrl">
47
- <img src="assets/images/listen/listen3.png"
48
- alt="Upload a video"
49
- class="video-placeholder" />
50
- </div>-->
51
- <!-- Show video player after upload -->
52
- <!--<div class="video-preview-container" *ngIf="videoUrl">
53
- <video id="videoPreview"
54
- controls
55
- (ended)="onVideoEnded()"
56
- controlsList="nodownload"
57
- (error)="onVideoError()">
58
- <source [src]="videoUrl" [type]="getVideoMimeType(videoUrl)" />
59
- Your browser does not support the video tag.
60
- </video>
61
- </div>-->
62
- <!-- Upload Button below image/video -->
63
- <!--<input #uploadInput
64
- type="file"
65
- accept="video/mp4"
66
- (change)="onFileSelected($event)"
67
- class="video-upload-input" />
68
-
69
- <div class="button-group">
70
- <button *ngIf="videoUrl"
71
- class="upload-btn"
72
- (click)="toggleVideoPlayPause()">
73
- {{ isVideoPlaying ? 'Pause' : 'Play' }}
74
- </button>
75
-
76
- <button class="replace-btn"
77
- (click)="stopVideoIfPlaying(); uploadInput.click()"
78
- [disabled]="isReplaceDisabled">
79
- {{ uploadSuccess ? 'Replace Video' : 'Upload Video' }}
80
- </button>
81
-
82
- <button *ngIf="videoUrl && isReplaceDisabled"
83
- class="reset-btn"
84
- (click)="goToListen()">
85
- Reset
86
- </button>
87
-
88
- </div>
89
-
90
-
91
- </div>
92
- </div>-->
93
  <!-- Card Layout for Listen Exercise -->
94
  <div class="listen-card1" *ngIf="questions.length === 0">
95
  <!-- Left Section: Description -->
@@ -163,13 +97,6 @@
163
 
164
 
165
 
166
-
167
-
168
-
169
-
170
-
171
-
172
-
173
  <div *ngIf="questions.length > 0" class="question-navigation">
174
 
175
  <div class="question-block">
@@ -214,10 +141,6 @@
214
  ◀ Previous
215
  </button>
216
 
217
- <!--<div *ngIf="validated">
218
- <span *ngIf="selectedAnswers[currentQuestionIndex] === 'correct'" class="correct-label">✅ Correct!</span>
219
- <span *ngIf="selectedAnswers[currentQuestionIndex] === 'incorrect'" class="incorrect-label">❌ Incorrect!</span>
220
- </div>-->
221
  <!-- Right Side Buttons -->
222
  <div class="right-buttons">
223
  <!-- Submit (before validation) -->
 
6
  <!-- Header Section -->
7
  <div class="header-container">
8
  <div class="logo">
9
+ <a (click)="goToHome()" routerLink="/home" class="brand-link">
10
  <img src="assets/images/pykara-logo.png" alt="Pykara Logo" />
11
  </a>
12
+ <span class="product-name">Py-Learn</span>
13
  </div>
14
  <div class="header-title">
15
  <h1>Listen</h1>
 
24
  <!-- Background image (optional) -->
25
  <img src="assets/images/listen.png" alt="Chat Background" class="grammar-bg" />
26
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
27
  <!-- Card Layout for Listen Exercise -->
28
  <div class="listen-card1" *ngIf="questions.length === 0">
29
  <!-- Left Section: Description -->
 
97
 
98
 
99
 
 
 
 
 
 
 
 
100
  <div *ngIf="questions.length > 0" class="question-navigation">
101
 
102
  <div class="question-block">
 
141
  ◀ Previous
142
  </button>
143
 
 
 
 
 
144
  <!-- Right Side Buttons -->
145
  <div class="right-buttons">
146
  <!-- Submit (before validation) -->
src/app/reading/reading.component.css CHANGED
@@ -37,7 +37,11 @@
37
  .header-title h1 {
38
  font-size: 3vw;
39
  color: #fff;
40
- margin: 0
 
 
 
 
41
  }
42
 
43
  .home-btn img {
@@ -63,7 +67,7 @@
63
 
64
  .main-container {
65
  width: 85%;
66
- margin: 7vh auto;
67
  border: 9px solid #009688;
68
  border-radius: 1.5vw;
69
  background: #fff;
@@ -72,11 +76,7 @@
72
  height: 76vh
73
  }
74
 
75
- /* ===== Outer card tighter on sides ===== */
76
- /*.main-container {
77
- width: 94%;*/ /* was 85% */
78
- /*padding: 1.5vw;*/ /* slightly tighter */
79
- /*}*/
80
 
81
  /* ===== Intro split (match reference, minimal side margins) ===== */
82
  .intro-section.split {
@@ -325,17 +325,6 @@
325
  :root {
326
  --passage-font: 21px;
327
  }
328
- /* used by A−/A+ */
329
-
330
- /* ---- Reading card ---- */
331
- /*.reading-card {
332
- width: 100%;
333
- border-radius: 18px;
334
- padding: 16px 16px 14px;
335
- background: linear-gradient(#ffffff, #ffffff) padding-box, linear-gradient(135deg, #0aa19a, #6fd0cd) border-box;*/ /* teal gradient stroke */
336
- /*border: 1px solid transparent;
337
- box-shadow: 0 14px 32px rgba(0,0,0,.08);
338
- }*/
339
 
340
  /* Header */
341
  .reading-head {
@@ -416,19 +405,6 @@
416
  color: black;
417
  }
418
 
419
- /* .icon-btn1:active {
420
- transform: translateY(1px);
421
- }
422
-
423
- .icon-btn1.active {
424
- border-color: #95d0c9;
425
- background: #eefaf8;
426
- }
427
-
428
- .icon-btn1.danger {
429
- color: #b1241a;
430
- }
431
- */
432
  /* Meta chips */
433
  .reading-meta {
434
  display: flex;
@@ -819,28 +795,7 @@
819
  .reset-btn:hover {
820
  box-shadow: 0 12px 24px rgba(229,72,59,.25);
821
  }
822
- /*
823
- .popup-overlay {
824
- position: fixed;
825
- top: 0;
826
- left: 0;
827
- width: 100%;
828
- height: 100%;
829
- background: rgba(0,0,0,.5);
830
- display: flex;
831
- justify-content: center;
832
- align-items: center
833
- }
834
 
835
- .popup-content {
836
- background: #fff;
837
- padding: 2vw;
838
- border-radius: 1vw;
839
- box-shadow: 0 .5vw 1.5vw rgba(0,0,0,.1);
840
- width: 40%;
841
- text-align: center
842
- }
843
- */
844
 
845
 
846
  /* Loader Overlay */
@@ -902,69 +857,7 @@
902
  }
903
 
904
 
905
- /* reusable icon button base */
906
- /*.icon-btn {
907
- width: var(--icon-btn, 36px);
908
- height: var(--icon-btn, 36px);
909
- display: grid;
910
- place-items: center;
911
- border-radius: 10px;
912
- border: 1px solid #cfe2e0;
913
- background: #fff;
914
- color: #006780;*/ /* text color if any */
915
- /*cursor: pointer;
916
- transition: box-shadow .15s, transform .05s, background .15s, border-color .15s;
917
- }*/
918
-
919
- /* back button specifics */
920
- /*.icon-btn.back .icon-img {
921
- width: var(--icon-size, 18px);
922
- height: var(--icon-size, 18px);
923
- object-fit: contain;
924
- display: block;
925
- transition: transform .12s, opacity .12s;
926
- }*/
927
-
928
- /* states */
929
- /*.icon-btn.back:hover {
930
- background: #f7fcfb;
931
- box-shadow: 0 8px 18px rgba(0,0,0,.08);
932
- border-color: #b9d6d3;
933
- }
934
-
935
- .icon-btn.back:hover .icon-img {
936
- transform: translateX(-1px);*/ /* subtle nudge left */
937
- /*}
938
 
939
- .icon-btn.back:active {
940
- transform: translateY(1px);
941
- }
942
-
943
- .icon-btn.back:disabled {
944
- opacity: .5;
945
- pointer-events: none;
946
- }*/
947
-
948
- /* optional: bigger/smaller controls via CSS variables */
949
- /*:root {
950
- --icon-btn: 36px;*/ /* button size */
951
- /*--icon-size: 18px;*/ /* arrow size */
952
- /*}*/
953
-
954
- /* If you need a dark-on-teal variant inside colored headers: */
955
- /*.header-on-teal .icon-btn.back {
956
- background: #007e74;
957
- border-color: #00756c;
958
- }
959
-
960
- .header-on-teal .icon-btn.back:hover {
961
- background: #0a8a80;
962
- }
963
-
964
- .header-on-teal .icon-btn.back .icon-img {
965
- filter: brightness(0) invert(1);*/ /* make white */
966
- /*}*/
967
- /* Overlay */
968
  .popup-overlay {
969
  position: fixed;
970
  top: 0;
 
37
  .header-title h1 {
38
  font-size: 3vw;
39
  color: #fff;
40
+ margin: 0;
41
+ position: absolute;
42
+ top: 50%;
43
+ left: 50%;
44
+ transform: translate(-50%, -50%);
45
  }
46
 
47
  .home-btn img {
 
67
 
68
  .main-container {
69
  width: 85%;
70
+ margin: 5vh auto;
71
  border: 9px solid #009688;
72
  border-radius: 1.5vw;
73
  background: #fff;
 
76
  height: 76vh
77
  }
78
 
79
+
 
 
 
 
80
 
81
  /* ===== Intro split (match reference, minimal side margins) ===== */
82
  .intro-section.split {
 
325
  :root {
326
  --passage-font: 21px;
327
  }
 
 
 
 
 
 
 
 
 
 
 
328
 
329
  /* Header */
330
  .reading-head {
 
405
  color: black;
406
  }
407
 
 
 
 
 
 
 
 
 
 
 
 
 
 
408
  /* Meta chips */
409
  .reading-meta {
410
  display: flex;
 
795
  .reset-btn:hover {
796
  box-shadow: 0 12px 24px rgba(229,72,59,.25);
797
  }
 
 
 
 
 
 
 
 
 
 
 
 
798
 
 
 
 
 
 
 
 
 
 
799
 
800
 
801
  /* Loader Overlay */
 
857
  }
858
 
859
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
860
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
861
  .popup-overlay {
862
  position: fixed;
863
  top: 0;
src/app/reading/reading.component.html CHANGED
@@ -2,9 +2,10 @@
2
  <!-- Header -->
3
  <div class="header-container">
4
  <div class="logo">
5
- <a (click)="goToHome()" routerLink="/home">
6
  <img src="assets/images/pykara-logo.png" alt="Pykara Logo" />
7
  </a>
 
8
  </div>
9
 
10
  <div class="header-title">
@@ -278,24 +279,18 @@
278
 
279
 
280
 
281
- <!-- Congratulations overlay must be OUTSIDE the main-container -->
282
- <div class="congrats-overlay"
283
- *ngIf="showCongrats"
284
- aria-live="polite"
285
- aria-modal="true"
286
- role="dialog">
287
  <div class="congrats-card">
288
  <div class="score-badge" aria-label="Your score">
289
- Your Score:
290
- <span class="score">{{ scoreCorrect }}</span>
291
- <span class="sep">/</span>
292
- <span class="total">{{ scoreTotal }}</span>
293
  </div>
294
-
295
- <h2>🎉 Congratulations 🎉</h2>
296
- <p>You have completed all questions.</p>
297
 
298
  <button class="start-over-btn" (click)="startOver()">Start Over</button>
299
  </div>
300
-
301
  </div>
 
 
 
2
  <!-- Header -->
3
  <div class="header-container">
4
  <div class="logo">
5
+ <a (click)="goToHome()" routerLink="/home" class="brand-link">
6
  <img src="assets/images/pykara-logo.png" alt="Pykara Logo" />
7
  </a>
8
+ <span class="product-name">Py-Learn</span>
9
  </div>
10
 
11
  <div class="header-title">
 
279
 
280
 
281
 
282
+
283
+ <!-- Congratulations overlay -->
284
+ <div class="congrats-overlay" *ngIf="showCongrats" aria-live="polite" aria-modal="true" role="dialog">
 
 
 
285
  <div class="congrats-card">
286
  <div class="score-badge" aria-label="Your score">
287
+ Your Score: <span class="score">{{ scoreCorrect }}</span> / <span class="total">{{ scoreTotal }}</span>
 
 
 
288
  </div>
289
+ <h2>{{ congratsTitle }}</h2> <!-- Display the dynamic title -->
290
+ <p>{{ congratsMessage }}</p> <!-- Display the dynamic message -->
 
291
 
292
  <button class="start-over-btn" (click)="startOver()">Start Over</button>
293
  </div>
 
294
  </div>
295
+
296
+ </div>
src/app/reading/reading.component.ts CHANGED
@@ -476,10 +476,14 @@ export class ReadingComponent {
476
  // add inside the component class
477
  showCongrats = false;
478
  scoreCorrect = 0;
479
- scoreTotal = 0;
480
  private confettiInterval: any = null;
481
 
482
- /** After validate is clicked, if this was the last question, show score + confetti after a short hold. */
 
 
 
 
483
  scheduleCongratsIfLast(): void {
484
  // must be last question AND already marked as checked
485
  const isLast = this.currentQuestionIndex === this.questions.length - 1;
@@ -491,11 +495,26 @@ export class ReadingComponent {
491
  const { correct, total } = this.computeScore();
492
  this.scoreCorrect = correct;
493
  this.scoreTotal = total;
 
 
 
 
 
 
 
 
 
 
494
  this.showCongrats = true;
495
- this.triggerConfetti();
496
  }, 800);
497
  }
498
 
 
 
 
 
 
499
  /** Compute score without altering validation code. */
500
  private computeScore(): { correct: number; total: number } {
501
  let correct = 0;
 
476
  // add inside the component class
477
  showCongrats = false;
478
  scoreCorrect = 0;
479
+
480
  private confettiInterval: any = null;
481
 
482
+ // scoreCorrect: number = 0; // Correct answers
483
+ scoreTotal: number = 3; // Total number of questions
484
+ congratsTitle: string = '';
485
+ congratsMessage: string = '';
486
+
487
  scheduleCongratsIfLast(): void {
488
  // must be last question AND already marked as checked
489
  const isLast = this.currentQuestionIndex === this.questions.length - 1;
 
495
  const { correct, total } = this.computeScore();
496
  this.scoreCorrect = correct;
497
  this.scoreTotal = total;
498
+
499
+ // Determine message based on score
500
+ if (this.scoreCorrect === this.scoreTotal) {
501
+ this.showCongratsMessage("🎉 Congratulations 🎉", "You have completed all questions with a perfect score!");
502
+ } else if (this.scoreCorrect > 0) {
503
+ this.showCongratsMessage("Good Job!", "You did well, but there is room for improvement.");
504
+ } else {
505
+ this.showCongratsMessage("Keep Trying!", "Don't give up, try again!");
506
+ }
507
+
508
  this.showCongrats = true;
509
+ this.triggerConfetti(); // Assuming this is a method that triggers confetti animation.
510
  }, 800);
511
  }
512
 
513
+ // Helper function to show the appropriate congratulatory message
514
+ showCongratsMessage(title: string, message: string) {
515
+ this.congratsTitle = title;
516
+ this.congratsMessage = message;
517
+ }
518
  /** Compute score without altering validation code. */
519
  private computeScore(): { correct: number; total: number } {
520
  let correct = 0;
src/app/vocabulary-builder/vocabulary-builder.component.css CHANGED
@@ -1 +1 @@
1
-
2
  margin-top: 1rem;
3
  padding: 1rem;
4
  background-color: #f0f4f8;
5
  border-radius: 8px;
6
  border: 1px solid #cdd5df;
7
  display: flex;
8
  justify-content: space-between;
9
  align-items: center;
10
  padding: 0vw 2vw;
11
  background-color: #009688;
12
  box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.2); /* Soft shadow */
13
  width: 100%;
14
  position: sticky;
15
  top: 0;
16
  max-width: 5vw;
17
  height: auto;
18
  background: #fff;
19
  border-radius: 1vw;
20
  margin: 0.5vw;
21
  text-align: center;
22
  flex: 1;
23
  .header-title h1 {
24
  font-size: 3vw;
25
  color: #fff;
26
  margin: 0;
27
  }
28
  width: 5vw;
29
  .home-btn img:hover {
30
  transform: scale(1.1);
31
  }
32
  background-image: url(/assets/images/grammar-bg.png);
33
  background-size: auto;
34
  background-position: center;
35
  background-attachment: fixed;
36
  width: 100%;
37
  height: 100%;
38
  position: absolute;
39
  top: 10%;
40
  left: 0;
41
  width: 100%;
42
  height: auto;
43
  max-height: calc(100vh - 100px);
44
  object-fit: fill;
45
  z-index: -1;
46
  opacity: 0.2;
47
  background: rgba(255, 255, 255, 0.9);
48
  width: 80vw;
49
  position: absolute;
50
  top: 50%;
51
  left: 50%;
52
  transform: translate(-50%, -50%);
53
  height: 66vh;
54
  display: flex;
55
  justify-content: space-between;
56
  align-items: flex-start;
57
  padding: 4vw;
58
  gap: 2vw;
59
  background-color: #fff;
60
  border: 10px solid #009688;
61
  border-radius: 1vw;
62
  box-shadow: 0 0.4vw 0.8vw rgba(0, 0, 0, 0.6);
63
  margin: 2vw auto;
64
  max-width: 90%;
65
  display: flex;
66
  align-items: center;
67
  gap: 4vw;
68
  width: 50%;
69
  font-size: 2.5vw;
70
  font-weight: 800;
71
  color: #006780;
72
  margin-bottom: 20px;
73
  width: 100%;
74
  height: auto;
75
  border-radius: 10px;
76
  width: 66%;
77
  .description-container p {
78
  font-size: 1.4vw;
79
  margin-bottom: 30px;
80
  text-align: justify;
81
  }
82
  position: relative;
83
  border-radius: 0.5vw;
84
  font-size: 1.5vw;
85
  transition: background-color 0.3s;
86
  width: auto;
87
  font-weight: bold;
88
  background-color: #006780;
89
  border: none;
90
  color: white;
91
  padding: 15px 32px;
92
  text-align: center;
93
  text-decoration: none;
94
  display: inline-flex;
95
  align-items: center;
96
  justify-content: center;
97
  position: relative;
98
  min-width: 5vw;
99
  height: 2.9vw;
100
  margin-top: 1.5vw;
101
  .submit-button:hover {
102
  background-color: #bdc3c7;
103
  box-shadow: 0 12px 16px 0 rgba(0,0,0,0.24),0 17px 50px 0 rgba(0,0,0,0.19);
104
  }
105
  .submit-button:disabled {
106
  background-color: #ccc;
107
  cursor: not-allowed;
108
  }
109
  background: rgba(255, 255, 255, 0.9);
110
  padding: 2vw;
111
  border-radius: 1vw;
112
  box-shadow: 0 0.4vw 0.8vw rgba(0, 0, 0, 0.6);
113
  width: 80vw;
114
  position: absolute;
115
  top: 54%;
116
  left: 50%;
117
  transform: translate(-50%, -50%);
118
  height: 70vh;
119
  border: 10px solid #009688;
120
  background-color: #fff;
121
  .card2 .content-container {
122
  display: flex;
123
  justify-content: space-around;
124
  align-items: center;
125
  height: 100%;
126
  }
127
  max-width: 100%;
128
  height: auto;
129
 
130
  display: flex;
131
  flex-direction: column;
132
  align-items: center;
133
  justify-content: center;
134
  text-align: center;
135
  width: 50%;
136
  .word-container h2 {
137
  font-size: 2.5rem;
138
  font-weight: bold;
139
  color: #333;
140
  margin-top: 2.7vw;
141
  }
142
  width: 45%;
143
  text-align: center;
144
  padding: 20px;
145
  background: rgba(255, 255, 255, 0.7);
146
  border-radius: 10px;
147
  box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.2);
148
  margin-right: 4vw;
149
  font-size: 1.2vw;
150
  margin-bottom: 20px;
151
  font-weight: 700;
152
  display: flex;
153
  flex-direction: column;
154
  align-items: center;
155
  background-color: #ccc;
156
  color: white;
157
  padding: 12px 24px;
158
  border-radius: 5px;
159
  cursor: pointer;
160
  font-size: 1.2rem;
161
  margin: 10px;
162
  width: 80%;
163
  transition: background-color 0.3s ease;
164
  background-color: #ffffff;
165
  color: #333;
166
  border: 2px solid #000000;
167
  font-size: 1.1vw;
168
  border-radius: 3vw;
169
  transition: all 0.3s ease;
170
  font-weight: 600;
171
  display: flex;
172
  align-items: center;
173
  justify-content: center;
174
  box-shadow: -1px 1vw 0.5vw rgb(0 0 0 / 13%);
175
  height: 100%;
176
  text-align: center;
177
  white-space: normal;
178
  word-break: break-word;
179
  width: 21vw;
180
  .option-btn.selected {
181
  background-color: #e1f5fe !important;
182
  border-color: #0277bd !important;
183
  color: #01579b !important;
184
  font-weight: 600;
185
  }
186
  .option-btn:hover {
187
  background-color: #e1f5fe !important;
188
  border-color: #0277bd !important;
189
  color: #01579b !important;
190
  font-weight: 600;
191
  }
192
  .option-btn.disabled {
193
  cursor: not-allowed !important;
194
  pointer-events: none !important;
195
  }
196
  .option-btn.correct {
197
  background-color: #4caf506e !important;
198
  border-color: #388E3C !important;
199
  color: black;
200
  font-weight: bold;
201
  }
202
  .option-btn.incorrect {
203
  background-color: #f443367d !important;
204
  border-color: #C62828 !important;
205
  color: black;
206
  font-weight: bold;
207
  }
208
  background: rgba(255, 255, 255, 0.9);
209
  padding: 2vw;
210
  border-radius: 1vw;
211
  box-shadow: 0 0.4vw 0.8vw rgba(0, 0, 0, 0.6);
212
  width: 80vw;
213
  position: absolute;
214
  top: 55%;
215
  left: 50%;
216
  transform: translate(-50%, -50%);
217
  height: 70vh;
218
  display: flex;
219
  flex-direction: column;
220
  align-items: center;
221
  overflow-y: auto;
222
  border: 10px solid #009688;
223
  background-color: #fff;
224
  list-style-type: disc;
225
  padding: 0 5vw;
226
  color: #000000;
227
  overflow-y: auto;
228
  height: 18vw;
229
  font-size: 1.5vw;
230
  margin-bottom: 30px;
231
  text-align: justify;
232
  .feedback-list1 li {
233
  margin-bottom: 10px;
234
  line-height: 1.5;
235
  display: list-item;
236
  }
237
  list-style-type: none !important;
238
  text-align: justify;
239
  height: 20vw;
240
  overflow-y: auto;
241
  padding: 0 3vw;
242
  margin-bottom: 2vw;
243
  font-size: 1.5vw;
244
  .feedback-list li {
245
  margin-bottom: 1vw;
246
  font-weight: 500;
247
  }
248
  color: green;
249
  color: red;
250
  0% {
251
  transform: translate(-50%, -50%) rotate(0deg);
252
  }
253
  100% {
254
  transform: translate(-50%, -50%) rotate(360deg);
255
  }
256
  background: white;
257
  padding: 1vw;
258
  border-radius: 1vw;
259
  box-shadow: 0 0.4vw 0.8vw rgba(0, 0, 0, 0.6);
260
  width: 80vw;
261
  position: absolute;
262
  top: 55%;
263
  left: 50%;
264
  transform: translate(-50%, -50%);
265
  height: 73vh;
266
  max-height: 80vh;
267
  display: flex;
268
  flex-direction: column;
269
  justify-content: space-between;
270
  align-items: center;
271
  text-align: center;
272
  overflow-y: auto;
273
  border: 10px solid #009688;
274
 
275
  resize: none
276
  font-size: 1.8vw;
277
  text-align: center;
278
  margin-bottom: 20px;
279
  color: #006780;
280
  font-weight: 600;
281
  display: flex;
282
  flex-direction: column;
283
  align-items: center;
284
  width: 100%;
285
  display: flex;
286
  justify-content: space-between;
287
  align-items: center;
288
  width: 80%;
289
  max-width: 600px;
290
  margin-bottom: 20px;
291
  .card4 .sentence-input-group label {
292
  font-weight: bold;
293
  text-align: left;
294
  width: 30%;
295
  font-size: 1.7vw;
296
  }
297
  .card4 .sentence-input-group .input-group {
298
  width: 60%;
299
  }
300
  .card4 .sentence-input-group textarea {
301
  width: 138%;
302
  height: 100%;
303
  font-size: 1.4rem;
304
  border: 2px solid #006780;
305
  font-family: Arial, sans-serif;
306
  border-radius: 8px;
307
  padding: 0.4vw;
308
  }
309
  .card4 .sentence-input-group textarea:focus {
310
  outline: none;
311
  border: 1px solid #007bff;
312
  }
313
  background: rgba(255, 255, 255, 0.9);
314
  width: 80vw;
315
  position: absolute;
316
  top: 55%;
317
  left: 50%;
318
  transform: translate(-50%, -50%);
319
  height: 73vh;
320
  max-height: 80vh;
321
  padding: 20px;
322
  display: flex;
323
  flex-direction: column;
324
  justify-content: space-between;
325
  align-items: center;
326
  text-align: center;
327
  overflow-y: auto;
328
  box-shadow: 0 0.4vw 0.8vw rgba(0, 0, 0, 0.6);
329
  background-color: #fff;
330
  border: 10px solid #009688;
331
  border-radius: 1vw;
332
  .card5 .feedback-text {
333
  font-size: 1.8vw;
334
  font-weight: 600;
335
  color: #333;
336
  margin-top: 1vw;
337
  word-wrap: break-word;
338
  max-height: 400px;
339
  overflow-y: auto;
340
  padding-left: 20px;
341
  padding-right: 20px;
342
  text-align: justify;
343
  margin-bottom: 1vw;
344
  }
345
  position: absolute;
346
  top: 1vw;
347
  left: 2vw;
348
  color: #007bff;
349
  font-size: 24px;
350
  width: 5vw;
351
  cursor: pointer;
352
  transition: transform 0.2s ease-in-out;
353
  .back-icon:hover {
354
  transform: scale(1.1);
355
  color: #0056b3;
356
  }
357
  .back-icon img {
358
  width: 30px;
359
  height: auto;
360
  cursor: pointer;
361
  }
362
  position: fixed;
363
  top: 0;
364
  left: 0;
365
  width: 100%;
366
  height: 100%;
367
 
368
  display: flex;
369
  justify-content: center;
370
  align-items: center;
371
  z-index: 1000;
372
  font-size: 15px;
373
  width: 1.5em;
374
  height: 1.5em;
375
  border-radius: 50%;
376
  position: relative;
377
  text-indent: -9999em;
378
  animation: mulShdSpin 1.1s infinite ease;
379
  transform: translateZ(0);
380
  0%, 100% {
381
  box-shadow: 0em -3em 0em 0em #808080, 2.2em -2.2em 0 0em rgba(128, 128, 128, 0.2), 3em 0em 0 0em rgba(128, 128, 128, 0.2), 2.2em 2.2em 0 0em rgba(128, 128, 128, 0.2), 0em 3em 0 0em rgba(128, 128, 128, 0.2), -2.2em 2.2em 0 0em rgba(128, 128, 128, 0.2), -3em 0em 0 0em rgba(128, 128, 128, 0.5), -2.2em -2.2em 0 0em rgba(128, 128, 128, 0.7);
382
  }
383
  12.5% {
384
  box-shadow: 0em -3em 0em 0em rgba(128, 128, 128, 0.7), 2.2em -2.2em 0 0em #808080, 3em 0em 0 0em rgba(128, 128, 128, 0.2), 2.2em 2.2em 0 0em rgba(128, 128, 128, 0.2), 0em 3em 0 0em rgba(128, 128, 128, 0.2), -2.2em 2.2em 0 0em rgba(128, 128, 128, 0.2), -3em 0em 0 0em rgba(128, 128, 128, 0.2), -2.2em -2.2em 0 0em rgba(128, 128, 128, 0.5);
385
  }
386
  25% {
387
  box-shadow: 0em -3em 0em 0em rgba(128, 128, 128, 0.5), 2.2em -2.2em 0 0em rgba(128, 128, 128, 0.7), 3em 0em 0 0em #808080, 2.2em 2.2em 0 0em rgba(128, 128, 128, 0.2), 0em 3em 0 0em rgba(128, 128, 128, 0.2), -2.2em 2.2em 0 0em rgba(128, 128, 128, 0.2), -3em 0em 0 0em rgba(128, 128, 128, 0.2), -2.2em -2.2em 0 0em rgba(128, 128, 128, 0.2);
388
  }
389
  37.5% {
390
  box-shadow: 0em -3em 0em 0em rgba(128, 128, 128, 0.2), 2.2em -2.2em 0 0em rgba(128, 128, 128, 0.5), 3em 0em 0 0em rgba(128, 128, 128, 0.7), 2.2em 2.2em 0 0em #808080, 0em 3em 0 0em rgba(128, 128, 128, 0.2), -2.2em 2.2em 0 0em rgba(128, 128, 128, 0.2), -3em 0em 0 0em rgba(128, 128, 128, 0.2), -2.2em -2.2em 0 0em rgba(128, 128, 128, 0.2);
391
  }
392
  50% {
393
  box-shadow: 0em -3em 0em 0em rgba(128, 128, 128, 0.2), 2.2em -2.2em 0 0em rgba(128, 128, 128, 0.2), 3em 0em 0 0em rgba(128, 128, 128, 0.5), 2.2em 2.2em 0 0em rgba(128, 128, 128, 0.7), 0em 3em 0 0em #808080, -2.2em 2.2em 0 0em rgba(128, 128, 128, 0.2), -3em 0em 0 0em rgba(128, 128, 128, 0.2), -2.2em -2.2em 0 0em rgba(128, 128, 128, 0.2);
394
  }
395
  62.5% {
396
  box-shadow: 0em -3em 0em 0em rgba(128, 128, 128, 0.2), 2.2em -2.2em 0 0em rgba(128, 128, 128, 0.2), 3em 0em 0 0em rgba(128, 128, 128, 0.2), 2.2em 2.2em 0 0em rgba(128, 128, 128, 0.5), 0em 3em 0 0em rgba(128, 128, 128, 0.7), -2.2em 2.2em 0 0em #808080, -3em 0em 0 0em rgba(128, 128, 128, 0.2), -2.2em -2.2em 0 0em rgba(128, 128, 128, 0.2);
397
  }
398
  75% {
399
  box-shadow: 0em -3em 0em 0em rgba(128, 128, 128, 0.2), 2.2em -2.2em 0 0em rgba(128, 128, 128, 0.2), 3em 0em 0 0em rgba(128, 128, 128, 0.2), 2.2em 2.2em 0 0em rgba(128, 128, 128, 0.2), 0em 3em 0 0em rgba(128, 128, 128, 0.5), -2.2em 2.2em 0 0em rgba(128, 128, 128, 0.7), -3em 0em 0 0em #808080, -2.2em -2.2em 0 0em rgba(128, 128, 128, 0.2);
400
  }
401
  87.5% {
402
  box-shadow: 0em -3em 0em 0em rgba(128, 128, 128, 0.2), 2.2em -2.2em 0 0em rgba(128, 128, 128, 0.2), 3em 0em 0 0em rgba(128, 128, 128, 0.2), 2.2em 2.2em 0 0em rgba(128, 128, 128, 0.2), 0em 3em 0 0em rgba(128, 128, 128, 0.2), -2.2em 2.2em 0 0em rgba(128, 128, 128, 0.5), -3em 0em 0 0em rgba(128, 128, 128, 0.7), -2.2em -2.2em 0 0em #808080;
403
  }
 
404
  margin-top: 1rem;
405
  padding: 1rem;
406
  background-color: #f0f4f8;
407
  border-radius: 8px;
408
  border: 1px solid #cdd5df;
409
  display: flex;
410
  justify-content: space-between;
411
  align-items: center;
412
  padding: 0vw 2vw;
413
  background-color: #009688;
414
  box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.2); /* Soft shadow */
415
  width: 100%;
416
  position: sticky;
417
  top: 0;
418
  max-width: 5vw;
419
  height: auto;
420
  background: #fff;
421
  border-radius: 1vw;
422
  margin: 0.5vw;
423
  text-align: center;
424
  flex: 1;
425
  .header-title h1 {
426
  font-size: 3vw;
427
  color: #fff;
428
  margin: 0;
429
  position: absolute;
430
  top: 50%;
431
  left: 50%;
432
  transform: translate(-50%, -50%);
433
  }
434
  width: 5vw;
435
  .home-btn img:hover {
436
  transform: scale(1.1);
437
  }
438
  background-image: url(/assets/images/grammar-bg.png);
439
  background-size: auto;
440
  background-position: center;
441
  background-attachment: fixed;
442
  width: 100%;
443
  height: 100%;
444
  position: absolute;
445
  top: 10%;
446
  left: 0;
447
  width: 100%;
448
  height: auto;
449
  max-height: calc(100vh - 100px);
450
  object-fit: fill;
451
  z-index: -1;
452
  opacity: 0.2;
453
  background: rgba(255, 255, 255, 0.9);
454
  width: 80vw;
455
  position: absolute;
456
  top: 50%;
457
  left: 50%;
458
  transform: translate(-50%, -50%);
459
  height: 66vh;
460
  display: flex;
461
  justify-content: space-between;
462
  align-items: flex-start;
463
  padding: 4vw;
464
  gap: 2vw;
465
  background-color: #fff;
466
  border: 10px solid #009688;
467
  border-radius: 1vw;
468
  box-shadow: 0 0.4vw 0.8vw rgba(0, 0, 0, 0.6);
469
  margin: 2vw auto;
470
  max-width: 90%;
471
  display: flex;
472
  align-items: center;
473
  gap: 4vw;
474
  width: 50%;
475
  font-size: 2.5vw;
476
  font-weight: 800;
477
  color: #006780;
478
  margin-bottom: 20px;
479
  text-align: center;
480
  width: 100%;
481
  height: auto;
482
  border-radius: 10px;
483
  width: 66%;
484
  .description-container p {
485
  font-size: 1.4vw;
486
  margin-bottom: 30px;
487
  text-align: justify;
488
  }
489
  position: relative;
490
  border-radius: 0.5vw;
491
  font-size: 1.5vw;
492
  transition: background-color 0.3s;
493
  width: auto;
494
  font-weight: bold;
495
  background-color: #006780;
496
  border: none;
497
  color: white;
498
  padding: 15px 32px;
499
  text-align: center;
500
  text-decoration: none;
501
  display: inline-flex;
502
  align-items: center;
503
  justify-content: center;
504
  position: relative;
505
  min-width: 5vw;
506
  height: 2.9vw;
507
  margin-top: 1.5vw;
508
  .validate-button:hover {
509
  background-color: #bdc3c7;
510
  box-shadow: 0 12px 16px 0 rgba(0,0,0,0.24),0 17px 50px 0 rgba(0,0,0,0.19);
511
  }
512
  .validate-button:disabled {
513
  background-color: #ccc;
514
  cursor: not-allowed;
515
  }
516
  position: absolute;
517
  border-radius: 0.5vw;
518
  font-size: 1.5vw;
519
  transition: background-color 0.3s;
520
  font-weight: bold;
521
  background-color: #006780;
522
  border: none;
523
  color: white;
524
  left: 50%;
525
  text-decoration: none;
526
  transform: translateX(-50%);
527
  padding: 0.5vw;
528
  .submit-button:hover {
529
  background-color: #bdc3c7;
530
  box-shadow: 0 12px 16px 0 rgba(0,0,0,0.24),0 17px 50px 0 rgba(0,0,0,0.19);
531
  }
532
  .submit-button:disabled {
533
  background-color: #ccc;
534
  cursor: not-allowed;
535
  }
536
  background: rgba(255, 255, 255, 0.9);
537
  padding: 2vw;
538
  border-radius: 1vw;
539
  box-shadow: 0 0.4vw 0.8vw rgba(0, 0, 0, 0.6);
540
  width: 80vw;
541
  position: absolute;
542
  top: 54%;
543
  left: 50%;
544
  transform: translate(-50%, -50%);
545
  height: 70vh;
546
  border: 10px solid #009688;
547
  background-color: #fff;
548
  .card2 .content-container {
549
  display: flex;
550
  justify-content: space-around;
551
  align-items: center;
552
  height: 100%;
553
  }
554
  max-width: 100%;
555
  height: auto;
556
  display: flex;
557
  flex-direction: column;
558
  align-items: center;
559
  justify-content: center;
560
  text-align: center;
561
  width: 50%;
562
  .word-container h2 {
563
  font-size: 2.5rem;
564
  font-weight: bold;
565
  color: #333;
566
  margin-top: 2.7vw;
567
  }
568
  width: 45%;
569
  text-align: center;
570
  padding: 20px;
571
  background: rgba(255, 255, 255, 0.7);
572
  border-radius: 10px;
573
  box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.2);
574
  margin-right: 4vw;
575
  font-size: 1.2vw;
576
  margin-bottom: 20px;
577
  font-weight: 700;
578
  display: flex;
579
  flex-direction: column;
580
  align-items: center;
581
  background-color: #ccc;
582
  color: white;
583
  padding: 12px 24px;
584
  border-radius: 5px;
585
  cursor: pointer;
586
  font-size: 1.2rem;
587
  margin: 10px;
588
  width: 80%;
589
  transition: background-color 0.3s ease;
590
  background-color: #ffffff;
591
  color: #333;
592
  border: 2px solid #000000;
593
  font-size: 1.1vw;
594
  border-radius: 3vw;
595
  transition: all 0.3s ease;
596
  font-weight: 600;
597
  display: flex;
598
  align-items: center;
599
  justify-content: center;
600
  box-shadow: -1px 1vw 0.5vw rgb(0 0 0 / 13%);
601
  height: 100%;
602
  text-align: center;
603
  white-space: normal;
604
  word-break: break-word;
605
  width: 21vw;
606
  /* Make state classes override :hover */
607
  .option-btn.correct,
608
  .option-btn.incorrect,
609
  .option-btn.selected {
610
  position: relative; /* keeps layout stable */
611
  }
612
  /* Correct = green (state wins even on hover) */
613
  .option-btn.correct,
614
  .option-btn.correct:hover {
615
  background: #e8f7ed; /* soft green */
616
  border-color: #22c55e; /* green-500 */
617
  color: #14532d; /* dark green text */
618
  }
619
  /* Incorrect = red (state wins even on hover) */
620
  .option-btn.incorrect,
621
  .option-btn.incorrect:hover {
622
  background: #fee2e2; /* soft red */
623
  border-color: #ef4444; /* red-500 */
624
  color: #7f1d1d; /* dark red text */
625
  }
626
  /* Selected (pre-validation) = blue (state wins even on hover) */
627
  .option-btn.selected,
628
  .option-btn.selected:hover {
629
  background: #e0f2fe; /* soft blue */
630
  border-color: #3b82f6; /* blue-500 */
631
  color: #0c4a6e; /* dark blue text */
632
  }
633
  /* Default hover only when no state class is present */
634
  .option-btn:not(.selected):not(.correct):not(.incorrect):hover {
635
  background: #f3f4f6; /* light grey hover */
636
  }
637
  /* Optional: disabled look still visible */
638
  .option-btn.disabled,
639
  .option-btn:disabled {
640
  cursor: not-allowed;
641
  filter: grayscale(10%);
642
  }
643
  .option-btn.picked {
644
  outline: 2px dashed rgba(0,0,0,0.25);
645
  outline-offset: 2px;
646
  }
647
  margin-left: 8px;
648
  padding: 2px 8px;
649
  border-radius: 12px;
650
  font-size: 12px;
651
  background: rgba(0,0,0,0.06);
652
  background: rgba(255, 255, 255, 0.9);
653
  padding: 2vw;
654
  border-radius: 1vw;
655
  box-shadow: 0 0.4vw 0.8vw rgba(0, 0, 0, 0.6);
656
  width: 80vw;
657
  position: absolute;
658
  top: 54%;
659
  left: 50%;
660
  transform: translate(-50%, -50%);
661
  height: 70vh;
662
  border: 10px solid #009688;
663
  background-color: #fff;
664
  list-style-type: disc;
665
  padding: 0 5vw;
666
  color: #000000;
667
  overflow-y: auto;
668
  height: 18vw;
669
  font-size: 1.5vw;
670
  margin-bottom: 30px;
671
  text-align: justify;
672
  .feedback-list1 li {
673
  margin-bottom: 10px;
674
  line-height: 1.5;
675
  display: list-item;
676
  }
677
  list-style-type: none !important;
678
  text-align: justify;
679
  height: 20vw;
680
  overflow-y: auto;
681
  padding: 0 3vw;
682
  margin-bottom: 2vw;
683
  font-size: 1.5vw;
684
  .feedback-list li {
685
  margin-bottom: 1vw;
686
  font-weight: 500;
687
  }
688
  color: green;
689
  color: red;
690
  0% {
691
  transform: translate(-50%, -50%) rotate(0deg);
692
  }
693
  100% {
694
  transform: translate(-50%, -50%) rotate(360deg);
695
  }
696
  background: rgba(255, 255, 255, 0.9);
697
  padding: 2vw;
698
  border-radius: 1vw;
699
  box-shadow: 0 0.4vw 0.8vw rgba(0, 0, 0, 0.6);
700
  width: 80vw;
701
  position: absolute;
702
  top: 54%;
703
  left: 50%;
704
  transform: translate(-50%, -50%);
705
  height: 70vh;
706
  border: 10px solid #009688;
707
  background-color: #fff;
708
  resize: none
709
  font-size: 1.8vw;
710
  text-align: center;
711
  margin-bottom: 20px;
712
  color: #006780;
713
  font-weight: 600;
714
  display: flex;
715
  flex-direction: column;
716
  align-items: center;
717
  width: 100%;
718
  display: flex;
719
  justify-content: space-between;
720
  align-items: center;
721
  width: 80%;
722
  max-width: 600px;
723
  margin-bottom: 20px;
724
  .card4 .sentence-input-group label {
725
  font-weight: bold;
726
  text-align: left;
727
  width: 30%;
728
  font-size: 1.7vw;
729
  }
730
  .card4 .sentence-input-group .input-group {
731
  width: 60%;
732
  }
733
  .card4 .sentence-input-group textarea {
734
  width: 138%;
735
  height: 100%;
736
  font-size: 1.4rem;
737
  border: 2px solid #006780;
738
  font-family: Arial, sans-serif;
739
  border-radius: 8px;
740
  padding: 0.4vw;
741
  }
742
  .card4 .sentence-input-group textarea:focus {
743
  outline: none;
744
  border: 1px solid #007bff;
745
  }
746
  background: rgba(255, 255, 255, 0.9);
747
  padding: 2vw;
748
  border-radius: 1vw;
749
  box-shadow: 0 0.4vw 0.8vw rgba(0, 0, 0, 0.6);
750
  width: 80vw;
751
  position: absolute;
752
  top: 54%;
753
  left: 50%;
754
  transform: translate(-50%, -50%);
755
  height: 70vh;
756
  border: 10px solid #009688;
757
  background-color: #fff;
758
  .card5 .feedback-text {
759
  font-size: 1.8vw;
760
  font-weight: 600;
761
  color: #333;
762
  margin-top: 1vw;
763
  word-wrap: break-word;
764
  max-height: 400px;
765
  overflow-y: auto;
766
  padding-left: 20px;
767
  padding-right: 20px;
768
  text-align: justify;
769
  margin-bottom: 1vw;
770
  }
771
  position: absolute;
772
  top: 1vw;
773
  left: 2vw;
774
  color: #007bff;
775
  font-size: 24px;
776
  width: 5vw;
777
  cursor: pointer;
778
  transition: transform 0.2s ease-in-out;
779
  .back-icon:hover {
780
  transform: scale(1.1);
781
  color: #0056b3;
782
  }
783
  .back-icon img {
784
  width: 30px;
785
  height: auto;
786
  cursor: pointer;
787
  }
788
  position: absolute;
789
  top: -1vw;
790
  right: -1.4vw;
791
  width: 36px;
792
  height: 36px;
793
  display: grid;
794
  place-items: center;
795
  border-radius: 50%;
796
  background: #009688;
797
  color: #0f172a;
798
  border: 4px solid #009688;
799
  font-size: 18px;
800
  font-weight: 800;
801
  cursor: pointer;
802
  box-shadow: 0 4px 10px rgba(0, 0, 0, .15);
803
  transition: transform .15s ease, box-shadow .15s ease, background .15s ease;
804
  z-index: 10;
805
  .icon-btn1:hover {
806
  transform: scale(1.06);
807
  box-shadow: 0 6px 14px rgba(0,0,0,.22);
808
  background: #f7fafc;
809
  }
810
  .icon-btn1:active {
811
  transform: scale(0.98);
812
  }
813
  .icon-btn1 {
814
  width: 50px;
815
  height: 50px;
816
  font-size: 20px;
817
  }
818
  position: fixed;
819
  top: 0;
820
  left: 0;
821
  width: 100%;
822
  height: 100%;
823
  display: flex;
824
  justify-content: center;
825
  align-items: center;
826
  z-index: 1000;
827
  font-size: 15px;
828
  width: 1.5em;
829
  height: 1.5em;
830
  border-radius: 50%;
831
  position: relative;
832
  text-indent: -9999em;
833
  animation: mulShdSpin 1.1s infinite ease;
834
  transform: translateZ(0);
835
  0%, 100% {
836
  box-shadow: 0em -3em 0em 0em #808080, 2.2em -2.2em 0 0em rgba(128, 128, 128, 0.2), 3em 0em 0 0em rgba(128, 128, 128, 0.2), 2.2em 2.2em 0 0em rgba(128, 128, 128, 0.2), 0em 3em 0 0em rgba(128, 128, 128, 0.2), -2.2em 2.2em 0 0em rgba(128, 128, 128, 0.2), -3em 0em 0 0em rgba(128, 128, 128, 0.5), -2.2em -2.2em 0 0em rgba(128, 128, 128, 0.7);
837
  }
838
  12.5% {
839
  box-shadow: 0em -3em 0em 0em rgba(128, 128, 128, 0.7), 2.2em -2.2em 0 0em #808080, 3em 0em 0 0em rgba(128, 128, 128, 0.2), 2.2em 2.2em 0 0em rgba(128, 128, 128, 0.2), 0em 3em 0 0em rgba(128, 128, 128, 0.2), -2.2em 2.2em 0 0em rgba(128, 128, 128, 0.2), -3em 0em 0 0em rgba(128, 128, 128, 0.2), -2.2em -2.2em 0 0em rgba(128, 128, 128, 0.5);
840
  }
841
  25% {
842
  box-shadow: 0em -3em 0em 0em rgba(128, 128, 128, 0.5), 2.2em -2.2em 0 0em rgba(128, 128, 128, 0.7), 3em 0em 0 0em #808080, 2.2em 2.2em 0 0em rgba(128, 128, 128, 0.2), 0em 3em 0 0em rgba(128, 128, 128, 0.2), -2.2em 2.2em 0 0em rgba(128, 128, 128, 0.2), -3em 0em 0 0em rgba(128, 128, 128, 0.2), -2.2em -2.2em 0 0em rgba(128, 128, 128, 0.2);
843
  }
844
  37.5% {
845
  box-shadow: 0em -3em 0em 0em rgba(128, 128, 128, 0.2), 2.2em -2.2em 0 0em rgba(128, 128, 128, 0.5), 3em 0em 0 0em rgba(128, 128, 128, 0.7), 2.2em 2.2em 0 0em #808080, 0em 3em 0 0em rgba(128, 128, 128, 0.2), -2.2em 2.2em 0 0em rgba(128, 128, 128, 0.2), -3em 0em 0 0em rgba(128, 128, 128, 0.2), -2.2em -2.2em 0 0em rgba(128, 128, 128, 0.2);
846
  }
847
  50% {
848
  box-shadow: 0em -3em 0em 0em rgba(128, 128, 128, 0.2), 2.2em -2.2em 0 0em rgba(128, 128, 128, 0.2), 3em 0em 0 0em rgba(128, 128, 128, 0.5), 2.2em 2.2em 0 0em rgba(128, 128, 128, 0.7), 0em 3em 0 0em #808080, -2.2em 2.2em 0 0em rgba(128, 128, 128, 0.2), -3em 0em 0 0em rgba(128, 128, 128, 0.2), -2.2em -2.2em 0 0em rgba(128, 128, 128, 0.2);
849
  }
850
  62.5% {
851
  box-shadow: 0em -3em 0em 0em rgba(128, 128, 128, 0.2), 2.2em -2.2em 0 0em rgba(128, 128, 128, 0.2), 3em 0em 0 0em rgba(128, 128, 128, 0.2), 2.2em 2.2em 0 0em rgba(128, 128, 128, 0.5), 0em 3em 0 0em rgba(128, 128, 128, 0.7), -2.2em 2.2em 0 0em #808080, -3em 0em 0 0em rgba(128, 128, 128, 0.2), -2.2em -2.2em 0 0em rgba(128, 128, 128, 0.2);
852
  }
853
  75% {
854
  box-shadow: 0em -3em 0em 0em rgba(128, 128, 128, 0.2), 2.2em -2.2em 0 0em rgba(128, 128, 128, 0.2), 3em 0em 0 0em rgba(128, 128, 128, 0.2), 2.2em 2.2em 0 0em rgba(128, 128, 128, 0.2), 0em 3em 0 0em rgba(128, 128, 128, 0.5), -2.2em 2.2em 0 0em rgba(128, 128, 128, 0.7), -3em 0em 0 0em #808080, -2.2em -2.2em 0 0em rgba(128, 128, 128, 0.2);
855
  }
856
  87.5% {
857
  box-shadow: 0em -3em 0em 0em rgba(128, 128, 128, 0.2), 2.2em -2.2em 0 0em rgba(128, 128, 128, 0.2), 3em 0em 0 0em rgba(128, 128, 128, 0.2), 2.2em 2.2em 0 0em rgba(128, 128, 128, 0.2), 0em 3em 0 0em rgba(128, 128, 128, 0.2), -2.2em 2.2em 0 0em rgba(128, 128, 128, 0.5), -3em 0em 0 0em rgba(128, 128, 128, 0.7), -2.2em -2.2em 0 0em #808080;
858
  }
 
 
1
  margin-top: 1rem;
2
  padding: 1rem;
3
  background-color: #f0f4f8;
4
  border-radius: 8px;
5
  border: 1px solid #cdd5df;
6
  display: flex;
7
  justify-content: space-between;
8
  align-items: center;
9
  padding: 0vw 2vw;
10
  background-color: #009688;
11
  box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.2); /* Soft shadow */
12
  width: 100%;
13
  position: sticky;
14
  top: 0;
15
  max-width: 5vw;
16
  height: auto;
17
  background: #fff;
18
  border-radius: 1vw;
19
  margin: 0.5vw;
20
  text-align: center;
21
  flex: 1;
22
  .header-title h1 {
23
  font-size: 3vw;
24
  color: #fff;
25
  margin: 0;
26
  }
27
  width: 5vw;
28
  .home-btn img:hover {
29
  transform: scale(1.1);
30
  }
31
  background-image: url(/assets/images/grammar-bg.png);
32
  background-size: auto;
33
  background-position: center;
34
  background-attachment: fixed;
35
  width: 100%;
36
  height: 100%;
37
  position: absolute;
38
  top: 10%;
39
  left: 0;
40
  width: 100%;
41
  height: auto;
42
  max-height: calc(100vh - 100px);
43
  object-fit: fill;
44
  z-index: -1;
45
  opacity: 0.2;
46
  background: rgba(255, 255, 255, 0.9);
47
  width: 80vw;
48
  position: absolute;
49
  top: 50%;
50
  left: 50%;
51
  transform: translate(-50%, -50%);
52
  height: 66vh;
53
  display: flex;
54
  justify-content: space-between;
55
  align-items: flex-start;
56
  padding: 4vw;
57
  gap: 2vw;
58
  background-color: #fff;
59
  border: 10px solid #009688;
60
  border-radius: 1vw;
61
  box-shadow: 0 0.4vw 0.8vw rgba(0, 0, 0, 0.6);
62
  margin: 2vw auto;
63
  max-width: 90%;
64
  display: flex;
65
  align-items: center;
66
  gap: 4vw;
67
  width: 50%;
68
  font-size: 2.5vw;
69
  font-weight: 800;
70
  color: #006780;
71
  margin-bottom: 20px;
72
  width: 100%;
73
  height: auto;
74
  border-radius: 10px;
75
  width: 66%;
76
  .description-container p {
77
  font-size: 1.4vw;
78
  margin-bottom: 30px;
79
  text-align: justify;
80
  }
81
  position: relative;
82
  border-radius: 0.5vw;
83
  font-size: 1.5vw;
84
  transition: background-color 0.3s;
85
  width: auto;
86
  font-weight: bold;
87
  background-color: #006780;
88
  border: none;
89
  color: white;
90
  padding: 15px 32px;
91
  text-align: center;
92
  text-decoration: none;
93
  display: inline-flex;
94
  align-items: center;
95
  justify-content: center;
96
  position: relative;
97
  min-width: 5vw;
98
  height: 2.9vw;
99
  margin-top: 1.5vw;
100
  .submit-button:hover {
101
  background-color: #bdc3c7;
102
  box-shadow: 0 12px 16px 0 rgba(0,0,0,0.24),0 17px 50px 0 rgba(0,0,0,0.19);
103
  }
104
  .submit-button:disabled {
105
  background-color: #ccc;
106
  cursor: not-allowed;
107
  }
108
  background: rgba(255, 255, 255, 0.9);
109
  padding: 2vw;
110
  border-radius: 1vw;
111
  box-shadow: 0 0.4vw 0.8vw rgba(0, 0, 0, 0.6);
112
  width: 80vw;
113
  position: absolute;
114
  top: 54%;
115
  left: 50%;
116
  transform: translate(-50%, -50%);
117
  height: 70vh;
118
  border: 10px solid #009688;
119
  background-color: #fff;
120
  .card2 .content-container {
121
  display: flex;
122
  justify-content: space-around;
123
  align-items: center;
124
  height: 100%;
125
  }
126
  max-width: 100%;
127
  height: auto;
128
 
129
  display: flex;
130
  flex-direction: column;
131
  align-items: center;
132
  justify-content: center;
133
  text-align: center;
134
  width: 50%;
135
  .word-container h2 {
136
  font-size: 2.5rem;
137
  font-weight: bold;
138
  color: #333;
139
  margin-top: 2.7vw;
140
  }
141
  width: 45%;
142
  text-align: center;
143
  padding: 20px;
144
  background: rgba(255, 255, 255, 0.7);
145
  border-radius: 10px;
146
  box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.2);
147
  margin-right: 4vw;
148
  font-size: 1.2vw;
149
  margin-bottom: 20px;
150
  font-weight: 700;
151
  display: flex;
152
  flex-direction: column;
153
  align-items: center;
154
  background-color: #ccc;
155
  color: white;
156
  padding: 12px 24px;
157
  border-radius: 5px;
158
  cursor: pointer;
159
  font-size: 1.2rem;
160
  margin: 10px;
161
  width: 80%;
162
  transition: background-color 0.3s ease;
163
  background-color: #ffffff;
164
  color: #333;
165
  border: 2px solid #000000;
166
  font-size: 1.1vw;
167
  border-radius: 3vw;
168
  transition: all 0.3s ease;
169
  font-weight: 600;
170
  display: flex;
171
  align-items: center;
172
  justify-content: center;
173
  box-shadow: -1px 1vw 0.5vw rgb(0 0 0 / 13%);
174
  height: 100%;
175
  text-align: center;
176
  white-space: normal;
177
  word-break: break-word;
178
  width: 21vw;
179
  .option-btn.selected {
180
  background-color: #e1f5fe !important;
181
  border-color: #0277bd !important;
182
  color: #01579b !important;
183
  font-weight: 600;
184
  }
185
  .option-btn:hover {
186
  background-color: #e1f5fe !important;
187
  border-color: #0277bd !important;
188
  color: #01579b !important;
189
  font-weight: 600;
190
  }
191
  .option-btn.disabled {
192
  cursor: not-allowed !important;
193
  pointer-events: none !important;
194
  }
195
  .option-btn.correct {
196
  background-color: #4caf506e !important;
197
  border-color: #388E3C !important;
198
  color: black;
199
  font-weight: bold;
200
  }
201
  .option-btn.incorrect {
202
  background-color: #f443367d !important;
203
  border-color: #C62828 !important;
204
  color: black;
205
  font-weight: bold;
206
  }
207
  background: rgba(255, 255, 255, 0.9);
208
  padding: 2vw;
209
  border-radius: 1vw;
210
  box-shadow: 0 0.4vw 0.8vw rgba(0, 0, 0, 0.6);
211
  width: 80vw;
212
  position: absolute;
213
  top: 55%;
214
  left: 50%;
215
  transform: translate(-50%, -50%);
216
  height: 70vh;
217
  display: flex;
218
  flex-direction: column;
219
  align-items: center;
220
  overflow-y: auto;
221
  border: 10px solid #009688;
222
  background-color: #fff;
223
  list-style-type: disc;
224
  padding: 0 5vw;
225
  color: #000000;
226
  overflow-y: auto;
227
  height: 18vw;
228
  font-size: 1.5vw;
229
  margin-bottom: 30px;
230
  text-align: justify;
231
  .feedback-list1 li {
232
  margin-bottom: 10px;
233
  line-height: 1.5;
234
  display: list-item;
235
  }
236
  list-style-type: none !important;
237
  text-align: justify;
238
  height: 20vw;
239
  overflow-y: auto;
240
  padding: 0 3vw;
241
  margin-bottom: 2vw;
242
  font-size: 1.5vw;
243
  .feedback-list li {
244
  margin-bottom: 1vw;
245
  font-weight: 500;
246
  }
247
  color: green;
248
  color: red;
249
  0% {
250
  transform: translate(-50%, -50%) rotate(0deg);
251
  }
252
  100% {
253
  transform: translate(-50%, -50%) rotate(360deg);
254
  }
255
  background: white;
256
  padding: 1vw;
257
  border-radius: 1vw;
258
  box-shadow: 0 0.4vw 0.8vw rgba(0, 0, 0, 0.6);
259
  width: 80vw;
260
  position: absolute;
261
  top: 55%;
262
  left: 50%;
263
  transform: translate(-50%, -50%);
264
  height: 73vh;
265
  max-height: 80vh;
266
  display: flex;
267
  flex-direction: column;
268
  justify-content: space-between;
269
  align-items: center;
270
  text-align: center;
271
  overflow-y: auto;
272
  border: 10px solid #009688;
273
 
274
  resize: none
275
  font-size: 1.8vw;
276
  text-align: center;
277
  margin-bottom: 20px;
278
  color: #006780;
279
  font-weight: 600;
280
  display: flex;
281
  flex-direction: column;
282
  align-items: center;
283
  width: 100%;
284
  display: flex;
285
  justify-content: space-between;
286
  align-items: center;
287
  width: 80%;
288
  max-width: 600px;
289
  margin-bottom: 20px;
290
  .card4 .sentence-input-group label {
291
  font-weight: bold;
292
  text-align: left;
293
  width: 30%;
294
  font-size: 1.7vw;
295
  }
296
  .card4 .sentence-input-group .input-group {
297
  width: 60%;
298
  }
299
  .card4 .sentence-input-group textarea {
300
  width: 138%;
301
  height: 100%;
302
  font-size: 1.4rem;
303
  border: 2px solid #006780;
304
  font-family: Arial, sans-serif;
305
  border-radius: 8px;
306
  padding: 0.4vw;
307
  }
308
  .card4 .sentence-input-group textarea:focus {
309
  outline: none;
310
  border: 1px solid #007bff;
311
  }
312
  background: rgba(255, 255, 255, 0.9);
313
  width: 80vw;
314
  position: absolute;
315
  top: 55%;
316
  left: 50%;
317
  transform: translate(-50%, -50%);
318
  height: 73vh;
319
  max-height: 80vh;
320
  padding: 20px;
321
  display: flex;
322
  flex-direction: column;
323
  justify-content: space-between;
324
  align-items: center;
325
  text-align: center;
326
  overflow-y: auto;
327
  box-shadow: 0 0.4vw 0.8vw rgba(0, 0, 0, 0.6);
328
  background-color: #fff;
329
  border: 10px solid #009688;
330
  border-radius: 1vw;
331
  .card5 .feedback-text {
332
  font-size: 1.8vw;
333
  font-weight: 600;
334
  color: #333;
335
  margin-top: 1vw;
336
  word-wrap: break-word;
337
  max-height: 400px;
338
  overflow-y: auto;
339
  padding-left: 20px;
340
  padding-right: 20px;
341
  text-align: justify;
342
  margin-bottom: 1vw;
343
  }
344
  position: absolute;
345
  top: 1vw;
346
  left: 2vw;
347
  color: #007bff;
348
  font-size: 24px;
349
  width: 5vw;
350
  cursor: pointer;
351
  transition: transform 0.2s ease-in-out;
352
  .back-icon:hover {
353
  transform: scale(1.1);
354
  color: #0056b3;
355
  }
356
  .back-icon img {
357
  width: 30px;
358
  height: auto;
359
  cursor: pointer;
360
  }
361
  position: fixed;
362
  top: 0;
363
  left: 0;
364
  width: 100%;
365
  height: 100%;
366
 
367
  display: flex;
368
  justify-content: center;
369
  align-items: center;
370
  z-index: 1000;
371
  font-size: 15px;
372
  width: 1.5em;
373
  height: 1.5em;
374
  border-radius: 50%;
375
  position: relative;
376
  text-indent: -9999em;
377
  animation: mulShdSpin 1.1s infinite ease;
378
  transform: translateZ(0);
379
  0%, 100% {
380
  box-shadow: 0em -3em 0em 0em #808080, 2.2em -2.2em 0 0em rgba(128, 128, 128, 0.2), 3em 0em 0 0em rgba(128, 128, 128, 0.2), 2.2em 2.2em 0 0em rgba(128, 128, 128, 0.2), 0em 3em 0 0em rgba(128, 128, 128, 0.2), -2.2em 2.2em 0 0em rgba(128, 128, 128, 0.2), -3em 0em 0 0em rgba(128, 128, 128, 0.5), -2.2em -2.2em 0 0em rgba(128, 128, 128, 0.7);
381
  }
382
  12.5% {
383
  box-shadow: 0em -3em 0em 0em rgba(128, 128, 128, 0.7), 2.2em -2.2em 0 0em #808080, 3em 0em 0 0em rgba(128, 128, 128, 0.2), 2.2em 2.2em 0 0em rgba(128, 128, 128, 0.2), 0em 3em 0 0em rgba(128, 128, 128, 0.2), -2.2em 2.2em 0 0em rgba(128, 128, 128, 0.2), -3em 0em 0 0em rgba(128, 128, 128, 0.2), -2.2em -2.2em 0 0em rgba(128, 128, 128, 0.5);
384
  }
385
  25% {
386
  box-shadow: 0em -3em 0em 0em rgba(128, 128, 128, 0.5), 2.2em -2.2em 0 0em rgba(128, 128, 128, 0.7), 3em 0em 0 0em #808080, 2.2em 2.2em 0 0em rgba(128, 128, 128, 0.2), 0em 3em 0 0em rgba(128, 128, 128, 0.2), -2.2em 2.2em 0 0em rgba(128, 128, 128, 0.2), -3em 0em 0 0em rgba(128, 128, 128, 0.2), -2.2em -2.2em 0 0em rgba(128, 128, 128, 0.2);
387
  }
388
  37.5% {
389
  box-shadow: 0em -3em 0em 0em rgba(128, 128, 128, 0.2), 2.2em -2.2em 0 0em rgba(128, 128, 128, 0.5), 3em 0em 0 0em rgba(128, 128, 128, 0.7), 2.2em 2.2em 0 0em #808080, 0em 3em 0 0em rgba(128, 128, 128, 0.2), -2.2em 2.2em 0 0em rgba(128, 128, 128, 0.2), -3em 0em 0 0em rgba(128, 128, 128, 0.2), -2.2em -2.2em 0 0em rgba(128, 128, 128, 0.2);
390
  }
391
  50% {
392
  box-shadow: 0em -3em 0em 0em rgba(128, 128, 128, 0.2), 2.2em -2.2em 0 0em rgba(128, 128, 128, 0.2), 3em 0em 0 0em rgba(128, 128, 128, 0.5), 2.2em 2.2em 0 0em rgba(128, 128, 128, 0.7), 0em 3em 0 0em #808080, -2.2em 2.2em 0 0em rgba(128, 128, 128, 0.2), -3em 0em 0 0em rgba(128, 128, 128, 0.2), -2.2em -2.2em 0 0em rgba(128, 128, 128, 0.2);
393
  }
394
  62.5% {
395
  box-shadow: 0em -3em 0em 0em rgba(128, 128, 128, 0.2), 2.2em -2.2em 0 0em rgba(128, 128, 128, 0.2), 3em 0em 0 0em rgba(128, 128, 128, 0.2), 2.2em 2.2em 0 0em rgba(128, 128, 128, 0.5), 0em 3em 0 0em rgba(128, 128, 128, 0.7), -2.2em 2.2em 0 0em #808080, -3em 0em 0 0em rgba(128, 128, 128, 0.2), -2.2em -2.2em 0 0em rgba(128, 128, 128, 0.2);
396
  }
397
  75% {
398
  box-shadow: 0em -3em 0em 0em rgba(128, 128, 128, 0.2), 2.2em -2.2em 0 0em rgba(128, 128, 128, 0.2), 3em 0em 0 0em rgba(128, 128, 128, 0.2), 2.2em 2.2em 0 0em rgba(128, 128, 128, 0.2), 0em 3em 0 0em rgba(128, 128, 128, 0.5), -2.2em 2.2em 0 0em rgba(128, 128, 128, 0.7), -3em 0em 0 0em #808080, -2.2em -2.2em 0 0em rgba(128, 128, 128, 0.2);
399
  }
400
  87.5% {
401
  box-shadow: 0em -3em 0em 0em rgba(128, 128, 128, 0.2), 2.2em -2.2em 0 0em rgba(128, 128, 128, 0.2), 3em 0em 0 0em rgba(128, 128, 128, 0.2), 2.2em 2.2em 0 0em rgba(128, 128, 128, 0.2), 0em 3em 0 0em rgba(128, 128, 128, 0.2), -2.2em 2.2em 0 0em rgba(128, 128, 128, 0.5), -3em 0em 0 0em rgba(128, 128, 128, 0.7), -2.2em -2.2em 0 0em #808080;
402
  }
403
+
404
  margin-top: 1rem;
405
  padding: 1rem;
406
  background-color: #f0f4f8;
407
  border-radius: 8px;
408
  border: 1px solid #cdd5df;
409
  display: flex;
410
  justify-content: space-between;
411
  align-items: center;
412
  padding: 0vw 2vw;
413
  background-color: #009688;
414
  box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.2); /* Soft shadow */
415
  width: 100%;
416
  position: sticky;
417
  top: 0;
418
  max-width: 5vw;
419
  height: auto;
420
  background: #fff;
421
  border-radius: 1vw;
422
  margin: 0.5vw;
423
  text-align: center;
424
  flex: 1;
425
  .header-title h1 {
426
  font-size: 3vw;
427
  color: #fff;
428
  margin: 0;
429
  position: absolute;
430
  top: 50%;
431
  left: 50%;
432
  transform: translate(-50%, -50%);
433
  }
434
  width: 5vw;
435
  .home-btn img:hover {
436
  transform: scale(1.1);
437
  }
438
  background-image: url(/assets/images/grammar-bg.png);
439
  background-size: auto;
440
  background-position: center;
441
  background-attachment: fixed;
442
  width: 100%;
443
  height: 100%;
444
  position: absolute;
445
  top: 10%;
446
  left: 0;
447
  width: 100%;
448
  height: auto;
449
  max-height: calc(100vh - 100px);
450
  object-fit: fill;
451
  z-index: -1;
452
  opacity: 0.2;
453
  background: rgba(255, 255, 255, 0.9);
454
  width: 80vw;
455
  position: absolute;
456
  top: 50%;
457
  left: 50%;
458
  transform: translate(-50%, -50%);
459
  height: 66vh;
460
  display: flex;
461
  justify-content: space-between;
462
  align-items: flex-start;
463
  padding: 4vw;
464
  gap: 2vw;
465
  background-color: #fff;
466
  border: 10px solid #009688;
467
  border-radius: 1vw;
468
  box-shadow: 0 0.4vw 0.8vw rgba(0, 0, 0, 0.6);
469
  margin: 2vw auto;
470
  max-width: 90%;
471
  display: flex;
472
  align-items: center;
473
  gap: 4vw;
474
  width: 50%;
475
  font-size: 2.5vw;
476
  font-weight: 800;
477
  color: #006780;
478
  margin-bottom: 20px;
479
  text-align: center;
480
  width: 100%;
481
  height: auto;
482
  border-radius: 10px;
483
  width: 66%;
484
  .description-container p {
485
  font-size: 1.4vw;
486
  margin-bottom: 30px;
487
  text-align: justify;
488
  }
489
  position: relative;
490
  border-radius: 0.5vw;
491
  font-size: 1.5vw;
492
  transition: background-color 0.3s;
493
  width: auto;
494
  font-weight: bold;
495
  background-color: #006780;
496
  border: none;
497
  color: white;
498
  padding: 15px 32px;
499
  text-align: center;
500
  text-decoration: none;
501
  display: inline-flex;
502
  align-items: center;
503
  justify-content: center;
504
  position: relative;
505
  min-width: 5vw;
506
  height: 2.9vw;
507
  margin-top: 1.5vw;
508
  .validate-button:hover {
509
  background-color: #bdc3c7;
510
  box-shadow: 0 12px 16px 0 rgba(0,0,0,0.24),0 17px 50px 0 rgba(0,0,0,0.19);
511
  }
512
  .validate-button:disabled {
513
  background-color: #ccc;
514
  cursor: not-allowed;
515
  }
516
  position: absolute;
517
  border-radius: 0.5vw;
518
  font-size: 1.5vw;
519
  transition: background-color 0.3s;
520
  font-weight: bold;
521
  background-color: #006780;
522
  border: none;
523
  color: white;
524
  left: 50%;
525
  text-decoration: none;
526
  transform: translateX(-50%);
527
  padding: 0.5vw;
528
  .submit-button:hover {
529
  background-color: #bdc3c7;
530
  box-shadow: 0 12px 16px 0 rgba(0,0,0,0.24),0 17px 50px 0 rgba(0,0,0,0.19);
531
  }
532
  .submit-button:disabled {
533
  background-color: #ccc;
534
  cursor: not-allowed;
535
  }
536
  background: rgba(255, 255, 255, 0.9);
537
  padding: 2vw;
538
  border-radius: 1vw;
539
  box-shadow: 0 0.4vw 0.8vw rgba(0, 0, 0, 0.6);
540
  width: 80vw;
541
  position: absolute;
542
  top: 54%;
543
  left: 50%;
544
  transform: translate(-50%, -50%);
545
  height: 70vh;
546
  border: 10px solid #009688;
547
  background-color: #fff;
548
  .card2 .content-container {
549
  display: flex;
550
  justify-content: space-around;
551
  align-items: center;
552
  height: 100%;
553
  }
554
  max-width: 100%;
555
  height: auto;
556
  display: flex;
557
  flex-direction: column;
558
  align-items: center;
559
  justify-content: center;
560
  text-align: center;
561
  width: 50%;
562
  .word-container h2 {
563
  font-size: 2.5rem;
564
  font-weight: bold;
565
  color: #333;
566
  margin-top: 2.7vw;
567
  }
568
  width: 45%;
569
  text-align: center;
570
  padding: 20px;
571
  background: rgba(255, 255, 255, 0.7);
572
  border-radius: 10px;
573
  box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.2);
574
  margin-right: 4vw;
575
  font-size: 1.2vw;
576
  margin-bottom: 20px;
577
  font-weight: 700;
578
  display: flex;
579
  flex-direction: column;
580
  align-items: center;
581
  background-color: #ccc;
582
  color: white;
583
  padding: 12px 24px;
584
  border-radius: 5px;
585
  cursor: pointer;
586
  font-size: 1.2rem;
587
  margin: 10px;
588
  width: 80%;
589
  transition: background-color 0.3s ease;
590
  background-color: #ffffff;
591
  color: #333;
592
  border: 2px solid #000000;
593
  font-size: 1.1vw;
594
  border-radius: 3vw;
595
  transition: all 0.3s ease;
596
  font-weight: 600;
597
  display: flex;
598
  align-items: center;
599
  justify-content: center;
600
  box-shadow: -1px 1vw 0.5vw rgb(0 0 0 / 13%);
601
  height: 100%;
602
  text-align: center;
603
  white-space: normal;
604
  word-break: break-word;
605
  width: 21vw;
606
  /* Make state classes override :hover */
607
  .option-btn.correct,
608
  .option-btn.incorrect,
609
  .option-btn.selected {
610
  position: relative; /* keeps layout stable */
611
  }
612
  /* Correct = green (state wins even on hover) */
613
  .option-btn.correct,
614
  .option-btn.correct:hover {
615
  background: #e8f7ed; /* soft green */
616
  border-color: #22c55e; /* green-500 */
617
  color: #14532d; /* dark green text */
618
  }
619
  /* Incorrect = red (state wins even on hover) */
620
  .option-btn.incorrect,
621
  .option-btn.incorrect:hover {
622
  background: #fee2e2; /* soft red */
623
  border-color: #ef4444; /* red-500 */
624
  color: #7f1d1d; /* dark red text */
625
  }
626
  /* Selected (pre-validation) = blue (state wins even on hover) */
627
  .option-btn.selected,
628
  .option-btn.selected:hover {
629
  background: #e0f2fe; /* soft blue */
630
  border-color: #3b82f6; /* blue-500 */
631
  color: #0c4a6e; /* dark blue text */
632
  }
633
  /* Default hover only when no state class is present */
634
  .option-btn:not(.selected):not(.correct):not(.incorrect):hover {
635
  background: #f3f4f6; /* light grey hover */
636
  }
637
  /* Optional: disabled look still visible */
638
  .option-btn.disabled,
639
  .option-btn:disabled {
640
  cursor: not-allowed;
641
  filter: grayscale(10%);
642
  }
643
  .option-btn.picked {
644
  outline: 2px dashed rgba(0,0,0,0.25);
645
  outline-offset: 2px;
646
  }
647
  margin-left: 8px;
648
  padding: 2px 8px;
649
  border-radius: 12px;
650
  font-size: 12px;
651
  background: rgba(0,0,0,0.06);
652
  background: rgba(255, 255, 255, 0.9);
653
  padding: 2vw;
654
  border-radius: 1vw;
655
  box-shadow: 0 0.4vw 0.8vw rgba(0, 0, 0, 0.6);
656
  width: 80vw;
657
  position: absolute;
658
  top: 54%;
659
  left: 50%;
660
  transform: translate(-50%, -50%);
661
  height: 70vh;
662
  border: 10px solid #009688;
663
  background-color: #fff;
664
  list-style-type: disc;
665
  padding: 0 5vw;
666
  color: #000000;
667
  overflow-y: auto;
668
  height: 18vw;
669
  font-size: 1.5vw;
670
  margin-bottom: 30px;
671
  text-align: justify;
672
  .feedback-list1 li {
673
  margin-bottom: 10px;
674
  line-height: 1.5;
675
  display: list-item;
676
  }
677
  list-style-type: none !important;
678
  text-align: justify;
679
  height: 20vw;
680
  overflow-y: auto;
681
  padding: 0 3vw;
682
  margin-bottom: 2vw;
683
  font-size: 1.5vw;
684
  .feedback-list li {
685
  margin-bottom: 1vw;
686
  font-weight: 500;
687
  }
688
  color: green;
689
  color: red;
690
  0% {
691
  transform: translate(-50%, -50%) rotate(0deg);
692
  }
693
  100% {
694
  transform: translate(-50%, -50%) rotate(360deg);
695
  }
696
  background: rgba(255, 255, 255, 0.9);
697
  padding: 2vw;
698
  border-radius: 1vw;
699
  box-shadow: 0 0.4vw 0.8vw rgba(0, 0, 0, 0.6);
700
  width: 80vw;
701
  position: absolute;
702
  top: 54%;
703
  left: 50%;
704
  transform: translate(-50%, -50%);
705
  height: 70vh;
706
  border: 10px solid #009688;
707
  background-color: #fff;
708
  resize: none
709
  font-size: 1.8vw;
710
  text-align: center;
711
  margin-bottom: 20px;
712
  color: #006780;
713
  font-weight: 600;
714
  display: flex;
715
  flex-direction: column;
716
  align-items: center;
717
  width: 100%;
718
  display: flex;
719
  justify-content: space-between;
720
  align-items: center;
721
  width: 80%;
722
  max-width: 600px;
723
  margin-bottom: 20px;
724
  .card4 .sentence-input-group label {
725
  font-weight: bold;
726
  text-align: left;
727
  width: 30%;
728
  font-size: 1.7vw;
729
  }
730
  .card4 .sentence-input-group .input-group {
731
  width: 60%;
732
  }
733
  .card4 .sentence-input-group textarea {
734
  width: 138%;
735
  height: 100%;
736
  font-size: 1.4rem;
737
  border: 2px solid #006780;
738
  font-family: Arial, sans-serif;
739
  border-radius: 8px;
740
  padding: 0.4vw;
741
  }
742
  .card4 .sentence-input-group textarea:focus {
743
  outline: none;
744
  border: 1px solid #007bff;
745
  }
746
  background: rgba(255, 255, 255, 0.9);
747
  padding: 2vw;
748
  border-radius: 1vw;
749
  box-shadow: 0 0.4vw 0.8vw rgba(0, 0, 0, 0.6);
750
  width: 80vw;
751
  position: absolute;
752
  top: 54%;
753
  left: 50%;
754
  transform: translate(-50%, -50%);
755
  height: 70vh;
756
  border: 10px solid #009688;
757
  background-color: #fff;
758
  .card5 .feedback-text {
759
  font-size: 1.8vw;
760
  font-weight: 600;
761
  color: #333;
762
  margin-top: 1vw;
763
  word-wrap: break-word;
764
  max-height: 400px;
765
  overflow-y: auto;
766
  padding-left: 20px;
767
  padding-right: 20px;
768
  text-align: justify;
769
  margin-bottom: 1vw;
770
  }
771
  position: absolute;
772
  top: 1vw;
773
  left: 2vw;
774
  color: #007bff;
775
  font-size: 24px;
776
  width: 5vw;
777
  cursor: pointer;
778
  transition: transform 0.2s ease-in-out;
779
  .back-icon:hover {
780
  transform: scale(1.1);
781
  color: #0056b3;
782
  }
783
  .back-icon img {
784
  width: 30px;
785
  height: auto;
786
  cursor: pointer;
787
  }
788
  position: absolute;
789
  top: -1vw;
790
  right: -1.4vw;
791
  width: 36px;
792
  height: 36px;
793
  display: grid;
794
  place-items: center;
795
  border-radius: 50%;
796
  background: #009688;
797
  color: #0f172a;
798
  border: 4px solid #009688;
799
  font-size: 18px;
800
  font-weight: 800;
801
  cursor: pointer;
802
  box-shadow: 0 4px 10px rgba(0, 0, 0, .15);
803
  transition: transform .15s ease, box-shadow .15s ease, background .15s ease;
804
  z-index: 10;
805
  .icon-btn1:hover {
806
  transform: scale(1.06);
807
  box-shadow: 0 6px 14px rgba(0,0,0,.22);
808
  background: #f7fafc;
809
  }
810
  .icon-btn1:active {
811
  transform: scale(0.98);
812
  }
813
  .icon-btn1 {
814
  width: 50px;
815
  height: 50px;
816
  font-size: 20px;
817
  }
818
  position: fixed;
819
  top: 0;
820
  left: 0;
821
  width: 100%;
822
  height: 100%;
823
  display: flex;
824
  justify-content: center;
825
  align-items: center;
826
  z-index: 1000;
827
  font-size: 15px;
828
  width: 1.5em;
829
  height: 1.5em;
830
  border-radius: 50%;
831
  position: relative;
832
  text-indent: -9999em;
833
  animation: mulShdSpin 1.1s infinite ease;
834
  transform: translateZ(0);
835
  0%, 100% {
836
  box-shadow: 0em -3em 0em 0em #808080, 2.2em -2.2em 0 0em rgba(128, 128, 128, 0.2), 3em 0em 0 0em rgba(128, 128, 128, 0.2), 2.2em 2.2em 0 0em rgba(128, 128, 128, 0.2), 0em 3em 0 0em rgba(128, 128, 128, 0.2), -2.2em 2.2em 0 0em rgba(128, 128, 128, 0.2), -3em 0em 0 0em rgba(128, 128, 128, 0.5), -2.2em -2.2em 0 0em rgba(128, 128, 128, 0.7);
837
  }
838
  12.5% {
839
  box-shadow: 0em -3em 0em 0em rgba(128, 128, 128, 0.7), 2.2em -2.2em 0 0em #808080, 3em 0em 0 0em rgba(128, 128, 128, 0.2), 2.2em 2.2em 0 0em rgba(128, 128, 128, 0.2), 0em 3em 0 0em rgba(128, 128, 128, 0.2), -2.2em 2.2em 0 0em rgba(128, 128, 128, 0.2), -3em 0em 0 0em rgba(128, 128, 128, 0.2), -2.2em -2.2em 0 0em rgba(128, 128, 128, 0.5);
840
  }
841
  25% {
842
  box-shadow: 0em -3em 0em 0em rgba(128, 128, 128, 0.5), 2.2em -2.2em 0 0em rgba(128, 128, 128, 0.7), 3em 0em 0 0em #808080, 2.2em 2.2em 0 0em rgba(128, 128, 128, 0.2), 0em 3em 0 0em rgba(128, 128, 128, 0.2), -2.2em 2.2em 0 0em rgba(128, 128, 128, 0.2), -3em 0em 0 0em rgba(128, 128, 128, 0.2), -2.2em -2.2em 0 0em rgba(128, 128, 128, 0.2);
843
  }
844
  37.5% {
845
  box-shadow: 0em -3em 0em 0em rgba(128, 128, 128, 0.2), 2.2em -2.2em 0 0em rgba(128, 128, 128, 0.5), 3em 0em 0 0em rgba(128, 128, 128, 0.7), 2.2em 2.2em 0 0em #808080, 0em 3em 0 0em rgba(128, 128, 128, 0.2), -2.2em 2.2em 0 0em rgba(128, 128, 128, 0.2), -3em 0em 0 0em rgba(128, 128, 128, 0.2), -2.2em -2.2em 0 0em rgba(128, 128, 128, 0.2);
846
  }
847
  50% {
848
  box-shadow: 0em -3em 0em 0em rgba(128, 128, 128, 0.2), 2.2em -2.2em 0 0em rgba(128, 128, 128, 0.2), 3em 0em 0 0em rgba(128, 128, 128, 0.5), 2.2em 2.2em 0 0em rgba(128, 128, 128, 0.7), 0em 3em 0 0em #808080, -2.2em 2.2em 0 0em rgba(128, 128, 128, 0.2), -3em 0em 0 0em rgba(128, 128, 128, 0.2), -2.2em -2.2em 0 0em rgba(128, 128, 128, 0.2);
849
  }
850
  62.5% {
851
  box-shadow: 0em -3em 0em 0em rgba(128, 128, 128, 0.2), 2.2em -2.2em 0 0em rgba(128, 128, 128, 0.2), 3em 0em 0 0em rgba(128, 128, 128, 0.2), 2.2em 2.2em 0 0em rgba(128, 128, 128, 0.5), 0em 3em 0 0em rgba(128, 128, 128, 0.7), -2.2em 2.2em 0 0em #808080, -3em 0em 0 0em rgba(128, 128, 128, 0.2), -2.2em -2.2em 0 0em rgba(128, 128, 128, 0.2);
852
  }
853
  75% {
854
  box-shadow: 0em -3em 0em 0em rgba(128, 128, 128, 0.2), 2.2em -2.2em 0 0em rgba(128, 128, 128, 0.2), 3em 0em 0 0em rgba(128, 128, 128, 0.2), 2.2em 2.2em 0 0em rgba(128, 128, 128, 0.2), 0em 3em 0 0em rgba(128, 128, 128, 0.5), -2.2em 2.2em 0 0em rgba(128, 128, 128, 0.7), -3em 0em 0 0em #808080, -2.2em -2.2em 0 0em rgba(128, 128, 128, 0.2);
855
  }
856
  87.5% {
857
  box-shadow: 0em -3em 0em 0em rgba(128, 128, 128, 0.2), 2.2em -2.2em 0 0em rgba(128, 128, 128, 0.2), 3em 0em 0 0em rgba(128, 128, 128, 0.2), 2.2em 2.2em 0 0em rgba(128, 128, 128, 0.2), 0em 3em 0 0em rgba(128, 128, 128, 0.2), -2.2em 2.2em 0 0em rgba(128, 128, 128, 0.5), -3em 0em 0 0em rgba(128, 128, 128, 0.7), -2.2em -2.2em 0 0em #808080;
858
  }
src/app/vocabulary-builder/vocabulary-builder.component.html CHANGED
@@ -4,9 +4,10 @@
4
  <!-- Header -->
5
  <div class="header-container">
6
  <div class="logo">
7
- <a (click)="goToHome()" routerLink="/home">
8
  <img src="assets/images/pykara-logo.png" alt="Pykara Logo" />
9
  </a>
 
10
  </div>
11
  <div class="header-title">
12
  <h1>Vocabulary Builder</h1>
@@ -49,6 +50,9 @@
49
  <!-- Step 2: Word Options -->
50
  <div *ngIf="step === 2" class="card2">
51
  <img src="assets/images/vocabulary/back.png" alt="Go Back" class="back-icon" (click)="goBack()" />
 
 
 
52
 
53
  <div class="content-container">
54
  <div class="word-container">
@@ -63,25 +67,29 @@
63
  <button *ngFor="let option of vocabulary.options"
64
  class="option-btn"
65
  [ngClass]="{
66
- 'selected': selectedOptions.includes(option) && !optionStates[option],
67
- 'correct': optionStates[option] === 'correct',
68
- 'incorrect': optionStates[option] === 'incorrect',
69
- 'disabled': buttonState !== 'validate'
70
- }"
71
- [disabled]="buttonState !== 'validate'"
 
72
  (click)="handleOptionClick(option)">
73
- {{ option }}
 
74
  </button>
 
 
75
  </div>
76
 
77
  <button *ngIf="buttonState === 'validate'"
78
- class="submit-button"
79
  [disabled]="!isCheckButtonEnabled || isLoaderVisible"
80
  (click)="checkSelections()">
81
  <span>Validate</span>
82
  </button>
83
 
84
- <button *ngIf="buttonState === 'next'" class="submit-button" (click)="goNext()">
85
  <span>Next</span>
86
  </button>
87
 
@@ -99,6 +107,9 @@
99
  <!-- Step 3: Feedback -->
100
  <div *ngIf="step === 3" class="card3">
101
  <img src="assets/images/vocabulary/back.png" alt="Go Back" class="back-icon" (click)="goBack()" />
 
 
 
102
  <h2>Feedback</h2>
103
  <ul class="feedback-list">
104
  <ng-container *ngFor="let point of formattedFeedback">
@@ -111,6 +122,9 @@
111
  <!-- Step 4: Sentence Formation -->
112
  <div *ngIf="step === 4" class="card4">
113
  <img src="assets/images/vocabulary/back.png" alt="Go Back" class="back-icon" (click)="goBack()" />
 
 
 
114
  <h2>Form a Sentence</h2>
115
  <p class="correct-answer">Using the words: <strong class="text-green-500">{{ correctOptions.join(', ') }}</strong></p>
116
  <div class="sentence-formation">
@@ -138,6 +152,9 @@
138
  <!-- Step 5: Sentence Feedback -->
139
  <div *ngIf="step === 5" class="card5">
140
  <img src="assets/images/vocabulary/back.png" alt="Go Back" class="back-icon" (click)="goBack()" />
 
 
 
141
  <h2 class="feedback-header">Sentence Feedback</h2>
142
  <ul class="feedback-list1">
143
  <li *ngFor="let point of formattedSentenceFeedback">
@@ -147,7 +164,7 @@
147
  <span *ngIf="!point.includes('correct answer')">{{ point }}</span>
148
  </li>
149
  </ul>
150
- <button class="submit-button" (click)="resetQuiz()">Reset</button>
151
  </div>
152
 
153
  </div>
 
4
  <!-- Header -->
5
  <div class="header-container">
6
  <div class="logo">
7
+ <a (click)="goToHome()" routerLink="/home" class="brand-link">
8
  <img src="assets/images/pykara-logo.png" alt="Pykara Logo" />
9
  </a>
10
+ <span class="product-name">Py-Learn</span>
11
  </div>
12
  <div class="header-title">
13
  <h1>Vocabulary Builder</h1>
 
50
  <!-- Step 2: Word Options -->
51
  <div *ngIf="step === 2" class="card2">
52
  <img src="assets/images/vocabulary/back.png" alt="Go Back" class="back-icon" (click)="goBack()" />
53
+ <!-- Top-right close button (NOT on intro/page 1) -->
54
+ <button class="icon-btn1" (click)="closeToMain()" aria-label="Close">✖</button>
55
+
56
 
57
  <div class="content-container">
58
  <div class="word-container">
 
67
  <button *ngFor="let option of vocabulary.options"
68
  class="option-btn"
69
  [ngClass]="{
70
+ 'selected': selectedOptions.includes(option) && !optionStates[option],
71
+ 'correct': optionStates[option] === 'correct',
72
+ 'incorrect': optionStates[option] === 'incorrect',
73
+ 'picked': isChecked && pickedAtCheck.has(option)
74
+
75
+ }"
76
+ [disabled]="(selectedOptions.length === 3 && !selectedOptions.includes(option) && buttonState === 'validate') || buttonState !== 'validate'"
77
  (click)="handleOptionClick(option)">
78
+ <span class="label">{{ option }}</span>
79
+ <span *ngIf="isChecked && pickedAtCheck?.has(option)" class="picked-chip"></span>
80
  </button>
81
+
82
+
83
  </div>
84
 
85
  <button *ngIf="buttonState === 'validate'"
86
+ class="validate-button"
87
  [disabled]="!isCheckButtonEnabled || isLoaderVisible"
88
  (click)="checkSelections()">
89
  <span>Validate</span>
90
  </button>
91
 
92
+ <button *ngIf="buttonState === 'next'" class="validate-button" (click)="goNext()">
93
  <span>Next</span>
94
  </button>
95
 
 
107
  <!-- Step 3: Feedback -->
108
  <div *ngIf="step === 3" class="card3">
109
  <img src="assets/images/vocabulary/back.png" alt="Go Back" class="back-icon" (click)="goBack()" />
110
+ <!-- Top-right close button (NOT on intro/page 1) -->
111
+ <button class="icon-btn1" (click)="closeToMain()" aria-label="Close">✖</button>
112
+
113
  <h2>Feedback</h2>
114
  <ul class="feedback-list">
115
  <ng-container *ngFor="let point of formattedFeedback">
 
122
  <!-- Step 4: Sentence Formation -->
123
  <div *ngIf="step === 4" class="card4">
124
  <img src="assets/images/vocabulary/back.png" alt="Go Back" class="back-icon" (click)="goBack()" />
125
+ <!-- Top-right close button (NOT on intro/page 1) -->
126
+ <button class="icon-btn1" (click)="closeToMain()" aria-label="Close">✖</button>
127
+
128
  <h2>Form a Sentence</h2>
129
  <p class="correct-answer">Using the words: <strong class="text-green-500">{{ correctOptions.join(', ') }}</strong></p>
130
  <div class="sentence-formation">
 
152
  <!-- Step 5: Sentence Feedback -->
153
  <div *ngIf="step === 5" class="card5">
154
  <img src="assets/images/vocabulary/back.png" alt="Go Back" class="back-icon" (click)="goBack()" />
155
+ <!-- Top-right close button (NOT on intro/page 1) -->
156
+ <button class="icon-btn1" (click)="closeToMain()" aria-label="Close">✖</button>
157
+
158
  <h2 class="feedback-header">Sentence Feedback</h2>
159
  <ul class="feedback-list1">
160
  <li *ngFor="let point of formattedSentenceFeedback">
 
164
  <span *ngIf="!point.includes('correct answer')">{{ point }}</span>
165
  </li>
166
  </ul>
167
+ <button class="submit-button" (click)="resetQuiz()"> Reset </button>
168
  </div>
169
 
170
  </div>
src/app/vocabulary-builder/vocabulary-builder.component.ts CHANGED
@@ -40,7 +40,7 @@ export class VocabularyBuilderComponent implements OnInit, AfterViewInit {
40
  buttonState: 'validate' | 'next' | 'formSentence' = 'validate';
41
  optionStates: { [key: string]: 'default' | 'selected' | 'correct' | 'incorrect' } = {};
42
  skipFeedback: boolean = false;
43
-
44
  constructor(private vocabularyService: VocabularyBuilderService, private router: Router) { }
45
 
46
  ngOnInit(): void {
@@ -83,18 +83,23 @@ export class VocabularyBuilderComponent implements OnInit, AfterViewInit {
83
  }
84
 
85
  handleOptionClick(option: string): void {
86
- const index = this.selectedOptions.indexOf(option);
87
- if (index > -1) {
88
- this.selectedOptions.splice(index, 1);
 
 
 
89
  } else {
90
- if (this.selectedOptions.length === 3) {
91
- this.selectedOptions.shift();
92
- }
93
  this.selectedOptions.push(option);
94
  }
 
 
95
  this.isCheckButtonEnabled = this.selectedOptions.length === 3;
96
  }
97
 
 
98
  checkSelections(): void {
99
  if (this.buttonState === 'next') {
100
  this.step = 3;
@@ -112,14 +117,13 @@ export class VocabularyBuilderComponent implements OnInit, AfterViewInit {
112
  this.processFeedback(response.feedback);
113
  this.isChecked = true;
114
  this.correctAnswers = response.correctAnswers || [];
 
 
115
 
116
- this.vocabulary.options.forEach((option: string) => {
117
- if (this.correctAnswers.includes(option)) {
118
- this.optionStates[option] = 'correct';
119
- } else if (this.selectedOptions.includes(option)) {
120
- this.optionStates[option] = 'incorrect';
121
- }
122
- });
123
 
124
  const allCorrectSelected = this.selectedOptions.length === 3 &&
125
  this.selectedOptions.every(option => this.correctAnswers.includes(option));
@@ -300,5 +304,15 @@ export class VocabularyBuilderComponent implements OnInit, AfterViewInit {
300
  this.isLoaderVisible = false;
301
  this.buttonState = 'validate';
302
  this.skipFeedback = false;
 
 
 
303
  }
 
 
 
 
 
 
 
304
  }
 
40
  buttonState: 'validate' | 'next' | 'formSentence' = 'validate';
41
  optionStates: { [key: string]: 'default' | 'selected' | 'correct' | 'incorrect' } = {};
42
  skipFeedback: boolean = false;
43
+ pickedAtCheck = new Set<string>();
44
  constructor(private vocabularyService: VocabularyBuilderService, private router: Router) { }
45
 
46
  ngOnInit(): void {
 
83
  }
84
 
85
  handleOptionClick(option: string): void {
86
+ if (this.buttonState !== 'validate') return;
87
+
88
+ const i = this.selectedOptions.indexOf(option);
89
+ if (i >= 0) {
90
+ // toggle OFF
91
+ this.selectedOptions.splice(i, 1);
92
  } else {
93
+ // do NOT auto-deselect the first; just stop at 3
94
+ if (this.selectedOptions.length >= 3) return;
 
95
  this.selectedOptions.push(option);
96
  }
97
+
98
+ // Enable Validate only when exactly 3 selected
99
  this.isCheckButtonEnabled = this.selectedOptions.length === 3;
100
  }
101
 
102
+
103
  checkSelections(): void {
104
  if (this.buttonState === 'next') {
105
  this.step = 3;
 
117
  this.processFeedback(response.feedback);
118
  this.isChecked = true;
119
  this.correctAnswers = response.correctAnswers || [];
120
+ // ⬇️ INSERT THIS LINE HERE
121
+ this.pickedAtCheck = new Set(this.selectedOptions);
122
 
123
+ this.optionStates = {};
124
+ for (const option of this.vocabulary.options) {
125
+ this.optionStates[option] = this.correctAnswers.includes(option) ? 'correct' : 'incorrect';
126
+ }
 
 
 
127
 
128
  const allCorrectSelected = this.selectedOptions.length === 3 &&
129
  this.selectedOptions.every(option => this.correctAnswers.includes(option));
 
304
  this.isLoaderVisible = false;
305
  this.buttonState = 'validate';
306
  this.skipFeedback = false;
307
+ this.pickedAtCheck.clear();
308
+ // or: this.pickedAtCheck = new Set<string>();
309
+
310
  }
311
+
312
+
313
+ closeToMain(): void {
314
+ this.resetQuiz(); // your existing method that sets step = 1 and clears state
315
+ // If you also want to route away, you can add: this.router.navigate(['/home']);
316
+ }
317
+
318
  }
src/app/writing/writing.component.css CHANGED
@@ -32,6 +32,10 @@
32
  font-size: 3vw;
33
  color: #fff;
34
  margin: 0;
 
 
 
 
35
  }
36
 
37
  .home-btn img {
 
32
  font-size: 3vw;
33
  color: #fff;
34
  margin: 0;
35
+ position: absolute;
36
+ top: 50%;
37
+ left: 50%;
38
+ transform: translate(-50%, -50%);
39
  }
40
 
41
  .home-btn img {
src/app/writing/writing.component.html CHANGED
@@ -1,9 +1,10 @@
1
  <!-- Header container -->
2
  <div class="header-container">
3
  <div class="logo">
4
- <a (click)="goToHome()" routerLink="/home">
5
  <img src="assets/images/pykara-logo.png" alt="Pykara Logo" />
6
  </a>
 
7
  </div>
8
  <div class="header-title">
9
  <h1>Writing Exercise</h1>
 
1
  <!-- Header container -->
2
  <div class="header-container">
3
  <div class="logo">
4
+ <a (click)="goToHome()" routerLink="/home" class="brand-link">
5
  <img src="assets/images/pykara-logo.png" alt="Pykara Logo" />
6
  </a>
7
+ <span class="product-name">Py-Learn</span>
8
  </div>
9
  <div class="header-title">
10
  <h1>Writing Exercise</h1>
src/styles.css CHANGED
@@ -62,3 +62,36 @@ body, html {
62
 
63
 
64
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
62
 
63
 
64
 
65
+ /*Py-Learn text near Logo css*/
66
+
67
+ /*Py-learn text*/
68
+ /* Keep logo and text in one row */
69
+ .logo {
70
+ display: flex;
71
+ align-items: center;
72
+ gap: 1vw;
73
+ }
74
+
75
+ /* Make the anchor wrap both image and name */
76
+ .brand-link {
77
+ display: flex;
78
+ align-items: center;
79
+ gap: 0.6vw; /* space between logo and text */
80
+ text-decoration: none;
81
+ }
82
+
83
+ /* “PY-Learn” text next to the logo */
84
+ .product-name {
85
+ color: #fff;
86
+ font-size: 2vw; /* slightly smaller than the 3vw title */
87
+ /*font-weight: 700;*/
88
+ letter-spacing: 0.5px;
89
+ /*font-family: 'Super Cartoon', 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;*/
90
+ font-family: Amonk_Outline;
91
+ line-height: 1;
92
+ }
93
+
94
+ .brand-link:hover .product-name {
95
+ opacity: 0.9; /* subtle hover */
96
+ }
97
+