RaghavenderReddy commited on
Commit
1348f04
·
verified ·
1 Parent(s): 8584206

Upload 16 files

Browse files
.gitattributes CHANGED
@@ -33,3 +33,4 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ public/favicon.ico filter=lfs diff=lfs merge=lfs -text
css/main.css ADDED
@@ -0,0 +1,2158 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap');
2
+
3
+ @import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400&display=swap');
4
+
5
+ *, ::before, ::after{
6
+ --tw-border-spacing-x: 0;
7
+ --tw-border-spacing-y: 0;
8
+ --tw-translate-x: 0;
9
+ --tw-translate-y: 0;
10
+ --tw-rotate: 0;
11
+ --tw-skew-x: 0;
12
+ --tw-skew-y: 0;
13
+ --tw-scale-x: 1;
14
+ --tw-scale-y: 1;
15
+ --tw-pan-x: ;
16
+ --tw-pan-y: ;
17
+ --tw-pinch-zoom: ;
18
+ --tw-scroll-snap-strictness: proximity;
19
+ --tw-gradient-from-position: ;
20
+ --tw-gradient-via-position: ;
21
+ --tw-gradient-to-position: ;
22
+ --tw-ordinal: ;
23
+ --tw-slashed-zero: ;
24
+ --tw-numeric-figure: ;
25
+ --tw-numeric-spacing: ;
26
+ --tw-numeric-fraction: ;
27
+ --tw-ring-inset: ;
28
+ --tw-ring-offset-width: 0px;
29
+ --tw-ring-offset-color: #fff;
30
+ --tw-ring-color: rgb(59 130 246 / 0.5);
31
+ --tw-ring-offset-shadow: 0 0 #0000;
32
+ --tw-ring-shadow: 0 0 #0000;
33
+ --tw-shadow: 0 0 #0000;
34
+ --tw-shadow-colored: 0 0 #0000;
35
+ --tw-blur: ;
36
+ --tw-brightness: ;
37
+ --tw-contrast: ;
38
+ --tw-grayscale: ;
39
+ --tw-hue-rotate: ;
40
+ --tw-invert: ;
41
+ --tw-saturate: ;
42
+ --tw-sepia: ;
43
+ --tw-drop-shadow: ;
44
+ --tw-backdrop-blur: ;
45
+ --tw-backdrop-brightness: ;
46
+ --tw-backdrop-contrast: ;
47
+ --tw-backdrop-grayscale: ;
48
+ --tw-backdrop-hue-rotate: ;
49
+ --tw-backdrop-invert: ;
50
+ --tw-backdrop-opacity: ;
51
+ --tw-backdrop-saturate: ;
52
+ --tw-backdrop-sepia: ;
53
+ --tw-contain-size: ;
54
+ --tw-contain-layout: ;
55
+ --tw-contain-paint: ;
56
+ --tw-contain-style: ;
57
+ }
58
+
59
+ ::backdrop{
60
+ --tw-border-spacing-x: 0;
61
+ --tw-border-spacing-y: 0;
62
+ --tw-translate-x: 0;
63
+ --tw-translate-y: 0;
64
+ --tw-rotate: 0;
65
+ --tw-skew-x: 0;
66
+ --tw-skew-y: 0;
67
+ --tw-scale-x: 1;
68
+ --tw-scale-y: 1;
69
+ --tw-pan-x: ;
70
+ --tw-pan-y: ;
71
+ --tw-pinch-zoom: ;
72
+ --tw-scroll-snap-strictness: proximity;
73
+ --tw-gradient-from-position: ;
74
+ --tw-gradient-via-position: ;
75
+ --tw-gradient-to-position: ;
76
+ --tw-ordinal: ;
77
+ --tw-slashed-zero: ;
78
+ --tw-numeric-figure: ;
79
+ --tw-numeric-spacing: ;
80
+ --tw-numeric-fraction: ;
81
+ --tw-ring-inset: ;
82
+ --tw-ring-offset-width: 0px;
83
+ --tw-ring-offset-color: #fff;
84
+ --tw-ring-color: rgb(59 130 246 / 0.5);
85
+ --tw-ring-offset-shadow: 0 0 #0000;
86
+ --tw-ring-shadow: 0 0 #0000;
87
+ --tw-shadow: 0 0 #0000;
88
+ --tw-shadow-colored: 0 0 #0000;
89
+ --tw-blur: ;
90
+ --tw-brightness: ;
91
+ --tw-contrast: ;
92
+ --tw-grayscale: ;
93
+ --tw-hue-rotate: ;
94
+ --tw-invert: ;
95
+ --tw-saturate: ;
96
+ --tw-sepia: ;
97
+ --tw-drop-shadow: ;
98
+ --tw-backdrop-blur: ;
99
+ --tw-backdrop-brightness: ;
100
+ --tw-backdrop-contrast: ;
101
+ --tw-backdrop-grayscale: ;
102
+ --tw-backdrop-hue-rotate: ;
103
+ --tw-backdrop-invert: ;
104
+ --tw-backdrop-opacity: ;
105
+ --tw-backdrop-saturate: ;
106
+ --tw-backdrop-sepia: ;
107
+ --tw-contain-size: ;
108
+ --tw-contain-layout: ;
109
+ --tw-contain-paint: ;
110
+ --tw-contain-style: ;
111
+ }
112
+
113
+ /*
114
+ ! tailwindcss v3.4.17 | MIT License | https://tailwindcss.com
115
+ */
116
+
117
+ /*
118
+ 1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)
119
+ 2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)
120
+ */
121
+
122
+ *,
123
+ ::before,
124
+ ::after {
125
+ box-sizing: border-box;
126
+ /* 1 */
127
+ border-width: 0;
128
+ /* 2 */
129
+ border-style: solid;
130
+ /* 2 */
131
+ border-color: #e5e7eb;
132
+ /* 2 */
133
+ }
134
+
135
+ ::before,
136
+ ::after {
137
+ --tw-content: '';
138
+ }
139
+
140
+ /*
141
+ 1. Use a consistent sensible line-height in all browsers.
142
+ 2. Prevent adjustments of font size after orientation changes in iOS.
143
+ 3. Use a more readable tab size.
144
+ 4. Use the user's configured `sans` font-family by default.
145
+ 5. Use the user's configured `sans` font-feature-settings by default.
146
+ 6. Use the user's configured `sans` font-variation-settings by default.
147
+ 7. Disable tap highlights on iOS
148
+ */
149
+
150
+ html,
151
+ :host {
152
+ line-height: 1.5;
153
+ /* 1 */
154
+ -webkit-text-size-adjust: 100%;
155
+ /* 2 */
156
+ -moz-tab-size: 4;
157
+ /* 3 */
158
+ -o-tab-size: 4;
159
+ tab-size: 4;
160
+ /* 3 */
161
+ font-family: Inter, sans-serif;
162
+ /* 4 */
163
+ font-feature-settings: normal;
164
+ /* 5 */
165
+ font-variation-settings: normal;
166
+ /* 6 */
167
+ -webkit-tap-highlight-color: transparent;
168
+ /* 7 */
169
+ }
170
+
171
+ /*
172
+ 1. Remove the margin in all browsers.
173
+ 2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.
174
+ */
175
+
176
+ body {
177
+ margin: 0;
178
+ /* 1 */
179
+ line-height: inherit;
180
+ /* 2 */
181
+ }
182
+
183
+ /*
184
+ 1. Add the correct height in Firefox.
185
+ 2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)
186
+ 3. Ensure horizontal rules are visible by default.
187
+ */
188
+
189
+ hr {
190
+ height: 0;
191
+ /* 1 */
192
+ color: inherit;
193
+ /* 2 */
194
+ border-top-width: 1px;
195
+ /* 3 */
196
+ }
197
+
198
+ /*
199
+ Add the correct text decoration in Chrome, Edge, and Safari.
200
+ */
201
+
202
+ abbr:where([title]) {
203
+ -webkit-text-decoration: underline dotted;
204
+ text-decoration: underline dotted;
205
+ }
206
+
207
+ /*
208
+ Remove the default font size and weight for headings.
209
+ */
210
+
211
+ h1,
212
+ h2,
213
+ h3,
214
+ h4,
215
+ h5,
216
+ h6 {
217
+ font-size: inherit;
218
+ font-weight: inherit;
219
+ }
220
+
221
+ /*
222
+ Reset links to optimize for opt-in styling instead of opt-out.
223
+ */
224
+
225
+ a {
226
+ color: inherit;
227
+ text-decoration: inherit;
228
+ }
229
+
230
+ /*
231
+ Add the correct font weight in Edge and Safari.
232
+ */
233
+
234
+ b,
235
+ strong {
236
+ font-weight: bolder;
237
+ }
238
+
239
+ /*
240
+ 1. Use the user's configured `mono` font-family by default.
241
+ 2. Use the user's configured `mono` font-feature-settings by default.
242
+ 3. Use the user's configured `mono` font-variation-settings by default.
243
+ 4. Correct the odd `em` font sizing in all browsers.
244
+ */
245
+
246
+ code,
247
+ kbd,
248
+ samp,
249
+ pre {
250
+ font-family: JetBrains Mono, monospace;
251
+ /* 1 */
252
+ font-feature-settings: normal;
253
+ /* 2 */
254
+ font-variation-settings: normal;
255
+ /* 3 */
256
+ font-size: 1em;
257
+ /* 4 */
258
+ }
259
+
260
+ /*
261
+ Add the correct font size in all browsers.
262
+ */
263
+
264
+ small {
265
+ font-size: 80%;
266
+ }
267
+
268
+ /*
269
+ Prevent `sub` and `sup` elements from affecting the line height in all browsers.
270
+ */
271
+
272
+ sub,
273
+ sup {
274
+ font-size: 75%;
275
+ line-height: 0;
276
+ position: relative;
277
+ vertical-align: baseline;
278
+ }
279
+
280
+ sub {
281
+ bottom: -0.25em;
282
+ }
283
+
284
+ sup {
285
+ top: -0.5em;
286
+ }
287
+
288
+ /*
289
+ 1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)
290
+ 2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)
291
+ 3. Remove gaps between table borders by default.
292
+ */
293
+
294
+ table {
295
+ text-indent: 0;
296
+ /* 1 */
297
+ border-color: inherit;
298
+ /* 2 */
299
+ border-collapse: collapse;
300
+ /* 3 */
301
+ }
302
+
303
+ /*
304
+ 1. Change the font styles in all browsers.
305
+ 2. Remove the margin in Firefox and Safari.
306
+ 3. Remove default padding in all browsers.
307
+ */
308
+
309
+ button,
310
+ input,
311
+ optgroup,
312
+ select,
313
+ textarea {
314
+ font-family: inherit;
315
+ /* 1 */
316
+ font-feature-settings: inherit;
317
+ /* 1 */
318
+ font-variation-settings: inherit;
319
+ /* 1 */
320
+ font-size: 100%;
321
+ /* 1 */
322
+ font-weight: inherit;
323
+ /* 1 */
324
+ line-height: inherit;
325
+ /* 1 */
326
+ letter-spacing: inherit;
327
+ /* 1 */
328
+ color: inherit;
329
+ /* 1 */
330
+ margin: 0;
331
+ /* 2 */
332
+ padding: 0;
333
+ /* 3 */
334
+ }
335
+
336
+ /*
337
+ Remove the inheritance of text transform in Edge and Firefox.
338
+ */
339
+
340
+ button,
341
+ select {
342
+ text-transform: none;
343
+ }
344
+
345
+ /*
346
+ 1. Correct the inability to style clickable types in iOS and Safari.
347
+ 2. Remove default button styles.
348
+ */
349
+
350
+ button,
351
+ input:where([type='button']),
352
+ input:where([type='reset']),
353
+ input:where([type='submit']) {
354
+ -webkit-appearance: button;
355
+ /* 1 */
356
+ background-color: transparent;
357
+ /* 2 */
358
+ background-image: none;
359
+ /* 2 */
360
+ }
361
+
362
+ /*
363
+ Use the modern Firefox focus style for all focusable elements.
364
+ */
365
+
366
+ :-moz-focusring {
367
+ outline: auto;
368
+ }
369
+
370
+ /*
371
+ Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)
372
+ */
373
+
374
+ :-moz-ui-invalid {
375
+ box-shadow: none;
376
+ }
377
+
378
+ /*
379
+ Add the correct vertical alignment in Chrome and Firefox.
380
+ */
381
+
382
+ progress {
383
+ vertical-align: baseline;
384
+ }
385
+
386
+ /*
387
+ Correct the cursor style of increment and decrement buttons in Safari.
388
+ */
389
+
390
+ ::-webkit-inner-spin-button,
391
+ ::-webkit-outer-spin-button {
392
+ height: auto;
393
+ }
394
+
395
+ /*
396
+ 1. Correct the odd appearance in Chrome and Safari.
397
+ 2. Correct the outline style in Safari.
398
+ */
399
+
400
+ [type='search'] {
401
+ -webkit-appearance: textfield;
402
+ /* 1 */
403
+ outline-offset: -2px;
404
+ /* 2 */
405
+ }
406
+
407
+ /*
408
+ Remove the inner padding in Chrome and Safari on macOS.
409
+ */
410
+
411
+ ::-webkit-search-decoration {
412
+ -webkit-appearance: none;
413
+ }
414
+
415
+ /*
416
+ 1. Correct the inability to style clickable types in iOS and Safari.
417
+ 2. Change font properties to `inherit` in Safari.
418
+ */
419
+
420
+ ::-webkit-file-upload-button {
421
+ -webkit-appearance: button;
422
+ /* 1 */
423
+ font: inherit;
424
+ /* 2 */
425
+ }
426
+
427
+ /*
428
+ Add the correct display in Chrome and Safari.
429
+ */
430
+
431
+ summary {
432
+ display: list-item;
433
+ }
434
+
435
+ /*
436
+ Removes the default spacing and border for appropriate elements.
437
+ */
438
+
439
+ blockquote,
440
+ dl,
441
+ dd,
442
+ h1,
443
+ h2,
444
+ h3,
445
+ h4,
446
+ h5,
447
+ h6,
448
+ hr,
449
+ figure,
450
+ p,
451
+ pre {
452
+ margin: 0;
453
+ }
454
+
455
+ fieldset {
456
+ margin: 0;
457
+ padding: 0;
458
+ }
459
+
460
+ legend {
461
+ padding: 0;
462
+ }
463
+
464
+ ol,
465
+ ul,
466
+ menu {
467
+ list-style: none;
468
+ margin: 0;
469
+ padding: 0;
470
+ }
471
+
472
+ /*
473
+ Reset default styling for dialogs.
474
+ */
475
+
476
+ dialog {
477
+ padding: 0;
478
+ }
479
+
480
+ /*
481
+ Prevent resizing textareas horizontally by default.
482
+ */
483
+
484
+ textarea {
485
+ resize: vertical;
486
+ }
487
+
488
+ /*
489
+ 1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)
490
+ 2. Set the default placeholder color to the user's configured gray 400 color.
491
+ */
492
+
493
+ input::-moz-placeholder, textarea::-moz-placeholder {
494
+ opacity: 1;
495
+ /* 1 */
496
+ color: #9ca3af;
497
+ /* 2 */
498
+ }
499
+
500
+ input::placeholder,
501
+ textarea::placeholder {
502
+ opacity: 1;
503
+ /* 1 */
504
+ color: #9ca3af;
505
+ /* 2 */
506
+ }
507
+
508
+ /*
509
+ Set the default cursor for buttons.
510
+ */
511
+
512
+ button,
513
+ [role="button"] {
514
+ cursor: pointer;
515
+ }
516
+
517
+ /*
518
+ Make sure disabled buttons don't get the pointer cursor.
519
+ */
520
+
521
+ :disabled {
522
+ cursor: default;
523
+ }
524
+
525
+ /*
526
+ 1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)
527
+ 2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)
528
+ This can trigger a poorly considered lint error in some tools but is included by design.
529
+ */
530
+
531
+ img,
532
+ svg,
533
+ video,
534
+ canvas,
535
+ audio,
536
+ iframe,
537
+ embed,
538
+ object {
539
+ display: block;
540
+ /* 1 */
541
+ vertical-align: middle;
542
+ /* 2 */
543
+ }
544
+
545
+ /*
546
+ Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)
547
+ */
548
+
549
+ img,
550
+ video {
551
+ max-width: 100%;
552
+ height: auto;
553
+ }
554
+
555
+ /* Make elements with the HTML hidden attribute stay hidden by default */
556
+
557
+ [hidden]:where(:not([hidden="until-found"])) {
558
+ display: none;
559
+ }
560
+
561
+ *{
562
+ border-color: rgba(148, 163, 184, 0.2);
563
+ }
564
+
565
+ body{
566
+ --tw-bg-opacity: 1;
567
+ background-color: rgb(15 23 42 / var(--tw-bg-opacity, 1));
568
+ font-family: Inter, sans-serif;
569
+ --tw-text-opacity: 1;
570
+ color: rgb(248 250 252 / var(--tw-text-opacity, 1));
571
+ transition: background-color 300ms cubic-bezier(0.4, 0, 0.2, 1), color 300ms cubic-bezier(0.4, 0, 0.2, 1);
572
+ }
573
+
574
+ h1, h2, h3, h4, h5, h6{
575
+ font-family: Inter, sans-serif;
576
+ font-weight: 600;
577
+ }
578
+
579
+ p, span, div{
580
+ font-family: Inter, sans-serif;
581
+ }
582
+
583
+ /* Reduced motion preferences */
584
+
585
+ @media (prefers-reduced-motion: reduce) {
586
+ * {
587
+ animation-duration: 0.01ms !important;
588
+ animation-iteration-count: 1 !important;
589
+ transition-duration: 0.01ms !important;
590
+ }
591
+ }
592
+
593
+ .card{
594
+ border-radius: 12px;
595
+ border-width: 1px;
596
+ border-color: rgba(148, 163, 184, 0.2);
597
+ --tw-bg-opacity: 1;
598
+ background-color: rgb(30 41 59 / var(--tw-bg-opacity, 1));
599
+ --tw-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
600
+ --tw-shadow-colored: 0 1px 3px var(--tw-shadow-color);
601
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
602
+ transition: all 150ms ease-out;
603
+ }
604
+
605
+ .card:hover{
606
+ --tw-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
607
+ --tw-shadow-colored: 0 4px 6px var(--tw-shadow-color);
608
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
609
+ transform: translateY(-1px);
610
+ }
611
+
612
+ .btn{
613
+ border-radius: 8px;
614
+ padding-left: 1rem;
615
+ padding-right: 1rem;
616
+ padding-top: 0.5rem;
617
+ padding-bottom: 0.5rem;
618
+ font-weight: 500;
619
+ transition-property: all;
620
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
621
+ transition-duration: 150ms;
622
+ transition-timing-function: cubic-bezier(0, 0, 0.2, 1);
623
+ min-height: 44px;
624
+ min-width: 44px;
625
+ }
626
+
627
+ .btn:hover {
628
+ transform: scale(0.98);
629
+ }
630
+
631
+ .btn-primary{
632
+ --tw-bg-opacity: 1;
633
+ background-color: rgb(79 70 229 / var(--tw-bg-opacity, 1));
634
+ --tw-text-opacity: 1;
635
+ color: rgb(255 255 255 / var(--tw-text-opacity, 1));
636
+ }
637
+
638
+ .btn-primary:hover{
639
+ --tw-bg-opacity: 1;
640
+ background-color: rgb(67 56 202 / var(--tw-bg-opacity, 1));
641
+ }
642
+
643
+ .btn-secondary{
644
+ --tw-bg-opacity: 1;
645
+ background-color: rgb(6 182 212 / var(--tw-bg-opacity, 1));
646
+ --tw-text-opacity: 1;
647
+ color: rgb(255 255 255 / var(--tw-text-opacity, 1));
648
+ }
649
+
650
+ .btn-secondary:hover{
651
+ --tw-bg-opacity: 1;
652
+ background-color: rgb(8 145 178 / var(--tw-bg-opacity, 1));
653
+ }
654
+
655
+ .btn-accent{
656
+ --tw-bg-opacity: 1;
657
+ background-color: rgb(245 158 11 / var(--tw-bg-opacity, 1));
658
+ --tw-text-opacity: 1;
659
+ color: rgb(255 255 255 / var(--tw-text-opacity, 1));
660
+ }
661
+
662
+ .btn-accent:hover{
663
+ --tw-bg-opacity: 1;
664
+ background-color: rgb(217 119 6 / var(--tw-bg-opacity, 1));
665
+ }
666
+
667
+ @keyframes slideIn {
668
+ from {
669
+ transform: translateY(-10px);
670
+ opacity: 0;
671
+ }
672
+
673
+ to {
674
+ transform: translateY(0);
675
+ opacity: 1;
676
+ }
677
+ }
678
+
679
+ .progress-bar{
680
+ overflow: hidden;
681
+ border-radius: 9999px;
682
+ --tw-bg-opacity: 1;
683
+ background-color: rgb(30 41 59 / var(--tw-bg-opacity, 1));
684
+ }
685
+
686
+ .progress-fill{
687
+ height: 100%;
688
+ --tw-bg-opacity: 1;
689
+ background-color: rgb(79 70 229 / var(--tw-bg-opacity, 1));
690
+ transition-property: all;
691
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
692
+ transition-duration: 300ms;
693
+ transition-timing-function: cubic-bezier(0, 0, 0.2, 1);
694
+ }
695
+
696
+ .pointer-events-none{
697
+ pointer-events: none;
698
+ }
699
+
700
+ .visible{
701
+ visibility: visible;
702
+ }
703
+
704
+ .static{
705
+ position: static;
706
+ }
707
+
708
+ .fixed{
709
+ position: fixed;
710
+ }
711
+
712
+ .absolute{
713
+ position: absolute;
714
+ }
715
+
716
+ .relative{
717
+ position: relative;
718
+ }
719
+
720
+ .sticky{
721
+ position: sticky;
722
+ }
723
+
724
+ .inset-0{
725
+ inset: 0px;
726
+ }
727
+
728
+ .inset-y-0{
729
+ top: 0px;
730
+ bottom: 0px;
731
+ }
732
+
733
+ .left-0{
734
+ left: 0px;
735
+ }
736
+
737
+ .right-0{
738
+ right: 0px;
739
+ }
740
+
741
+ .right-4{
742
+ right: 1rem;
743
+ }
744
+
745
+ .top-0{
746
+ top: 0px;
747
+ }
748
+
749
+ .top-4{
750
+ top: 1rem;
751
+ }
752
+
753
+ .top-6{
754
+ top: 1.5rem;
755
+ }
756
+
757
+ .z-30{
758
+ z-index: 30;
759
+ }
760
+
761
+ .z-40{
762
+ z-index: 40;
763
+ }
764
+
765
+ .z-50{
766
+ z-index: 50;
767
+ }
768
+
769
+ .mx-auto{
770
+ margin-left: auto;
771
+ margin-right: auto;
772
+ }
773
+
774
+ .mb-1{
775
+ margin-bottom: 0.25rem;
776
+ }
777
+
778
+ .mb-2{
779
+ margin-bottom: 0.5rem;
780
+ }
781
+
782
+ .mb-3{
783
+ margin-bottom: 0.75rem;
784
+ }
785
+
786
+ .mb-4{
787
+ margin-bottom: 1rem;
788
+ }
789
+
790
+ .mb-6{
791
+ margin-bottom: 1.5rem;
792
+ }
793
+
794
+ .ml-1{
795
+ margin-left: 0.25rem;
796
+ }
797
+
798
+ .ml-2{
799
+ margin-left: 0.5rem;
800
+ }
801
+
802
+ .mr-1{
803
+ margin-right: 0.25rem;
804
+ }
805
+
806
+ .mr-2{
807
+ margin-right: 0.5rem;
808
+ }
809
+
810
+ .mr-3{
811
+ margin-right: 0.75rem;
812
+ }
813
+
814
+ .mr-4{
815
+ margin-right: 1rem;
816
+ }
817
+
818
+ .mt-1{
819
+ margin-top: 0.25rem;
820
+ }
821
+
822
+ .mt-2{
823
+ margin-top: 0.5rem;
824
+ }
825
+
826
+ .mt-4{
827
+ margin-top: 1rem;
828
+ }
829
+
830
+ .mt-6{
831
+ margin-top: 1.5rem;
832
+ }
833
+
834
+ .mt-8{
835
+ margin-top: 2rem;
836
+ }
837
+
838
+ .block{
839
+ display: block;
840
+ }
841
+
842
+ .inline-block{
843
+ display: inline-block;
844
+ }
845
+
846
+ .flex{
847
+ display: flex;
848
+ }
849
+
850
+ .inline-flex{
851
+ display: inline-flex;
852
+ }
853
+
854
+ .grid{
855
+ display: grid;
856
+ }
857
+
858
+ .hidden{
859
+ display: none;
860
+ }
861
+
862
+ .h-10{
863
+ height: 2.5rem;
864
+ }
865
+
866
+ .h-12{
867
+ height: 3rem;
868
+ }
869
+
870
+ .h-16{
871
+ height: 4rem;
872
+ }
873
+
874
+ .h-18{
875
+ height: 4.5rem;
876
+ }
877
+
878
+ .h-2{
879
+ height: 0.5rem;
880
+ }
881
+
882
+ .h-20{
883
+ height: 5rem;
884
+ }
885
+
886
+ .h-24{
887
+ height: 6rem;
888
+ }
889
+
890
+ .h-28{
891
+ height: 7rem;
892
+ }
893
+
894
+ .h-3{
895
+ height: 0.75rem;
896
+ }
897
+
898
+ .h-32{
899
+ height: 8rem;
900
+ }
901
+
902
+ .h-4{
903
+ height: 1rem;
904
+ }
905
+
906
+ .h-6{
907
+ height: 1.5rem;
908
+ }
909
+
910
+ .h-8{
911
+ height: 2rem;
912
+ }
913
+
914
+ .h-full{
915
+ height: 100%;
916
+ }
917
+
918
+ .max-h-60{
919
+ max-height: 15rem;
920
+ }
921
+
922
+ .max-h-96{
923
+ max-height: 24rem;
924
+ }
925
+
926
+ .min-h-screen{
927
+ min-height: 100vh;
928
+ }
929
+
930
+ .w-1\/3{
931
+ width: 33.333333%;
932
+ }
933
+
934
+ .w-10{
935
+ width: 2.5rem;
936
+ }
937
+
938
+ .w-11{
939
+ width: 2.75rem;
940
+ }
941
+
942
+ .w-12{
943
+ width: 3rem;
944
+ }
945
+
946
+ .w-16{
947
+ width: 4rem;
948
+ }
949
+
950
+ .w-20{
951
+ width: 5rem;
952
+ }
953
+
954
+ .w-32{
955
+ width: 8rem;
956
+ }
957
+
958
+ .w-4{
959
+ width: 1rem;
960
+ }
961
+
962
+ .w-6{
963
+ width: 1.5rem;
964
+ }
965
+
966
+ .w-72{
967
+ width: 18rem;
968
+ }
969
+
970
+ .w-8{
971
+ width: 2rem;
972
+ }
973
+
974
+ .w-80{
975
+ width: 20rem;
976
+ }
977
+
978
+ .w-full{
979
+ width: 100%;
980
+ }
981
+
982
+ .max-w-2xl{
983
+ max-width: 42rem;
984
+ }
985
+
986
+ .max-w-3xl{
987
+ max-width: 48rem;
988
+ }
989
+
990
+ .max-w-4xl{
991
+ max-width: 56rem;
992
+ }
993
+
994
+ .max-w-md{
995
+ max-width: 28rem;
996
+ }
997
+
998
+ .flex-1{
999
+ flex: 1 1 0%;
1000
+ }
1001
+
1002
+ .flex-shrink-0{
1003
+ flex-shrink: 0;
1004
+ }
1005
+
1006
+ .-translate-x-full{
1007
+ --tw-translate-x: -100%;
1008
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
1009
+ }
1010
+
1011
+ .translate-x-1{
1012
+ --tw-translate-x: 0.25rem;
1013
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
1014
+ }
1015
+
1016
+ .translate-x-6{
1017
+ --tw-translate-x: 1.5rem;
1018
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
1019
+ }
1020
+
1021
+ .-rotate-90{
1022
+ --tw-rotate: -90deg;
1023
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
1024
+ }
1025
+
1026
+ .rotate-180{
1027
+ --tw-rotate: 180deg;
1028
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
1029
+ }
1030
+
1031
+ .transform{
1032
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
1033
+ }
1034
+
1035
+ @keyframes scaleIn{
1036
+ 0%{
1037
+ transform: scale(0.95);
1038
+ opacity: 0;
1039
+ }
1040
+
1041
+ 100%{
1042
+ transform: scale(1);
1043
+ opacity: 1;
1044
+ }
1045
+ }
1046
+
1047
+ .animate-scale-in{
1048
+ animation: scaleIn 150ms ease-out;
1049
+ }
1050
+
1051
+ .cursor-not-allowed{
1052
+ cursor: not-allowed;
1053
+ }
1054
+
1055
+ .cursor-pointer{
1056
+ cursor: pointer;
1057
+ }
1058
+
1059
+ .appearance-none{
1060
+ -webkit-appearance: none;
1061
+ -moz-appearance: none;
1062
+ appearance: none;
1063
+ }
1064
+
1065
+ .grid-cols-1{
1066
+ grid-template-columns: repeat(1, minmax(0, 1fr));
1067
+ }
1068
+
1069
+ .grid-cols-2{
1070
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1071
+ }
1072
+
1073
+ .grid-cols-3{
1074
+ grid-template-columns: repeat(3, minmax(0, 1fr));
1075
+ }
1076
+
1077
+ .flex-col{
1078
+ flex-direction: column;
1079
+ }
1080
+
1081
+ .items-start{
1082
+ align-items: flex-start;
1083
+ }
1084
+
1085
+ .items-end{
1086
+ align-items: flex-end;
1087
+ }
1088
+
1089
+ .items-center{
1090
+ align-items: center;
1091
+ }
1092
+
1093
+ .justify-center{
1094
+ justify-content: center;
1095
+ }
1096
+
1097
+ .justify-between{
1098
+ justify-content: space-between;
1099
+ }
1100
+
1101
+ .gap-3{
1102
+ gap: 0.75rem;
1103
+ }
1104
+
1105
+ .gap-4{
1106
+ gap: 1rem;
1107
+ }
1108
+
1109
+ .gap-6{
1110
+ gap: 1.5rem;
1111
+ }
1112
+
1113
+ .space-x-1 > :not([hidden]) ~ :not([hidden]){
1114
+ --tw-space-x-reverse: 0;
1115
+ margin-right: calc(0.25rem * var(--tw-space-x-reverse));
1116
+ margin-left: calc(0.25rem * calc(1 - var(--tw-space-x-reverse)));
1117
+ }
1118
+
1119
+ .space-x-2 > :not([hidden]) ~ :not([hidden]){
1120
+ --tw-space-x-reverse: 0;
1121
+ margin-right: calc(0.5rem * var(--tw-space-x-reverse));
1122
+ margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse)));
1123
+ }
1124
+
1125
+ .space-x-3 > :not([hidden]) ~ :not([hidden]){
1126
+ --tw-space-x-reverse: 0;
1127
+ margin-right: calc(0.75rem * var(--tw-space-x-reverse));
1128
+ margin-left: calc(0.75rem * calc(1 - var(--tw-space-x-reverse)));
1129
+ }
1130
+
1131
+ .space-x-4 > :not([hidden]) ~ :not([hidden]){
1132
+ --tw-space-x-reverse: 0;
1133
+ margin-right: calc(1rem * var(--tw-space-x-reverse));
1134
+ margin-left: calc(1rem * calc(1 - var(--tw-space-x-reverse)));
1135
+ }
1136
+
1137
+ .space-x-6 > :not([hidden]) ~ :not([hidden]){
1138
+ --tw-space-x-reverse: 0;
1139
+ margin-right: calc(1.5rem * var(--tw-space-x-reverse));
1140
+ margin-left: calc(1.5rem * calc(1 - var(--tw-space-x-reverse)));
1141
+ }
1142
+
1143
+ .space-y-2 > :not([hidden]) ~ :not([hidden]){
1144
+ --tw-space-y-reverse: 0;
1145
+ margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse)));
1146
+ margin-bottom: calc(0.5rem * var(--tw-space-y-reverse));
1147
+ }
1148
+
1149
+ .space-y-3 > :not([hidden]) ~ :not([hidden]){
1150
+ --tw-space-y-reverse: 0;
1151
+ margin-top: calc(0.75rem * calc(1 - var(--tw-space-y-reverse)));
1152
+ margin-bottom: calc(0.75rem * var(--tw-space-y-reverse));
1153
+ }
1154
+
1155
+ .space-y-4 > :not([hidden]) ~ :not([hidden]){
1156
+ --tw-space-y-reverse: 0;
1157
+ margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse)));
1158
+ margin-bottom: calc(1rem * var(--tw-space-y-reverse));
1159
+ }
1160
+
1161
+ .space-y-6 > :not([hidden]) ~ :not([hidden]){
1162
+ --tw-space-y-reverse: 0;
1163
+ margin-top: calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));
1164
+ margin-bottom: calc(1.5rem * var(--tw-space-y-reverse));
1165
+ }
1166
+
1167
+ .space-y-8 > :not([hidden]) ~ :not([hidden]){
1168
+ --tw-space-y-reverse: 0;
1169
+ margin-top: calc(2rem * calc(1 - var(--tw-space-y-reverse)));
1170
+ margin-bottom: calc(2rem * var(--tw-space-y-reverse));
1171
+ }
1172
+
1173
+ .overflow-x-auto{
1174
+ overflow-x: auto;
1175
+ }
1176
+
1177
+ .overflow-y-auto{
1178
+ overflow-y: auto;
1179
+ }
1180
+
1181
+ .rounded{
1182
+ border-radius: 0.25rem;
1183
+ }
1184
+
1185
+ .rounded-full{
1186
+ border-radius: 9999px;
1187
+ }
1188
+
1189
+ .rounded-lg{
1190
+ border-radius: 12px;
1191
+ }
1192
+
1193
+ .rounded-xl{
1194
+ border-radius: 16px;
1195
+ }
1196
+
1197
+ .rounded-t{
1198
+ border-top-left-radius: 0.25rem;
1199
+ border-top-right-radius: 0.25rem;
1200
+ }
1201
+
1202
+ .border{
1203
+ border-width: 1px;
1204
+ }
1205
+
1206
+ .border-2{
1207
+ border-width: 2px;
1208
+ }
1209
+
1210
+ .border-b{
1211
+ border-bottom-width: 1px;
1212
+ }
1213
+
1214
+ .border-l-4{
1215
+ border-left-width: 4px;
1216
+ }
1217
+
1218
+ .border-r{
1219
+ border-right-width: 1px;
1220
+ }
1221
+
1222
+ .border-t{
1223
+ border-top-width: 1px;
1224
+ }
1225
+
1226
+ .border-accent{
1227
+ --tw-border-opacity: 1;
1228
+ border-color: rgb(245 158 11 / var(--tw-border-opacity, 1));
1229
+ }
1230
+
1231
+ .border-border{
1232
+ border-color: rgba(148, 163, 184, 0.2);
1233
+ }
1234
+
1235
+ .border-error{
1236
+ --tw-border-opacity: 1;
1237
+ border-color: rgb(239 68 68 / var(--tw-border-opacity, 1));
1238
+ }
1239
+
1240
+ .border-error-100{
1241
+ --tw-border-opacity: 1;
1242
+ border-color: rgb(254 226 226 / var(--tw-border-opacity, 1));
1243
+ }
1244
+
1245
+ .border-primary{
1246
+ --tw-border-opacity: 1;
1247
+ border-color: rgb(79 70 229 / var(--tw-border-opacity, 1));
1248
+ }
1249
+
1250
+ .border-primary-100{
1251
+ --tw-border-opacity: 1;
1252
+ border-color: rgb(224 231 255 / var(--tw-border-opacity, 1));
1253
+ }
1254
+
1255
+ .border-secondary{
1256
+ --tw-border-opacity: 1;
1257
+ border-color: rgb(6 182 212 / var(--tw-border-opacity, 1));
1258
+ }
1259
+
1260
+ .border-success-100{
1261
+ --tw-border-opacity: 1;
1262
+ border-color: rgb(209 250 229 / var(--tw-border-opacity, 1));
1263
+ }
1264
+
1265
+ .border-transparent{
1266
+ border-color: transparent;
1267
+ }
1268
+
1269
+ .border-warning{
1270
+ --tw-border-opacity: 1;
1271
+ border-color: rgb(245 158 11 / var(--tw-border-opacity, 1));
1272
+ }
1273
+
1274
+ .border-warning-100{
1275
+ --tw-border-opacity: 1;
1276
+ border-color: rgb(254 243 199 / var(--tw-border-opacity, 1));
1277
+ }
1278
+
1279
+ .border-white{
1280
+ --tw-border-opacity: 1;
1281
+ border-color: rgb(255 255 255 / var(--tw-border-opacity, 1));
1282
+ }
1283
+
1284
+ .bg-accent{
1285
+ --tw-bg-opacity: 1;
1286
+ background-color: rgb(245 158 11 / var(--tw-bg-opacity, 1));
1287
+ }
1288
+
1289
+ .bg-accent-100{
1290
+ --tw-bg-opacity: 1;
1291
+ background-color: rgb(254 243 199 / var(--tw-bg-opacity, 1));
1292
+ }
1293
+
1294
+ .bg-accent-50{
1295
+ --tw-bg-opacity: 1;
1296
+ background-color: rgb(255 251 235 / var(--tw-bg-opacity, 1));
1297
+ }
1298
+
1299
+ .bg-background{
1300
+ --tw-bg-opacity: 1;
1301
+ background-color: rgb(15 23 42 / var(--tw-bg-opacity, 1));
1302
+ }
1303
+
1304
+ .bg-black{
1305
+ --tw-bg-opacity: 1;
1306
+ background-color: rgb(0 0 0 / var(--tw-bg-opacity, 1));
1307
+ }
1308
+
1309
+ .bg-blue-600{
1310
+ --tw-bg-opacity: 1;
1311
+ background-color: rgb(37 99 235 / var(--tw-bg-opacity, 1));
1312
+ }
1313
+
1314
+ .bg-blue-800{
1315
+ --tw-bg-opacity: 1;
1316
+ background-color: rgb(30 64 175 / var(--tw-bg-opacity, 1));
1317
+ }
1318
+
1319
+ .bg-error{
1320
+ --tw-bg-opacity: 1;
1321
+ background-color: rgb(239 68 68 / var(--tw-bg-opacity, 1));
1322
+ }
1323
+
1324
+ .bg-error-100{
1325
+ --tw-bg-opacity: 1;
1326
+ background-color: rgb(254 226 226 / var(--tw-bg-opacity, 1));
1327
+ }
1328
+
1329
+ .bg-error-50{
1330
+ --tw-bg-opacity: 1;
1331
+ background-color: rgb(254 242 242 / var(--tw-bg-opacity, 1));
1332
+ }
1333
+
1334
+ .bg-gray-300{
1335
+ --tw-bg-opacity: 1;
1336
+ background-color: rgb(209 213 219 / var(--tw-bg-opacity, 1));
1337
+ }
1338
+
1339
+ .bg-gray-600{
1340
+ --tw-bg-opacity: 1;
1341
+ background-color: rgb(75 85 99 / var(--tw-bg-opacity, 1));
1342
+ }
1343
+
1344
+ .bg-green-600{
1345
+ --tw-bg-opacity: 1;
1346
+ background-color: rgb(22 163 74 / var(--tw-bg-opacity, 1));
1347
+ }
1348
+
1349
+ .bg-primary{
1350
+ --tw-bg-opacity: 1;
1351
+ background-color: rgb(79 70 229 / var(--tw-bg-opacity, 1));
1352
+ }
1353
+
1354
+ .bg-primary-100{
1355
+ --tw-bg-opacity: 1;
1356
+ background-color: rgb(224 231 255 / var(--tw-bg-opacity, 1));
1357
+ }
1358
+
1359
+ .bg-primary-50{
1360
+ --tw-bg-opacity: 1;
1361
+ background-color: rgb(238 242 255 / var(--tw-bg-opacity, 1));
1362
+ }
1363
+
1364
+ .bg-secondary{
1365
+ --tw-bg-opacity: 1;
1366
+ background-color: rgb(6 182 212 / var(--tw-bg-opacity, 1));
1367
+ }
1368
+
1369
+ .bg-secondary-100{
1370
+ --tw-bg-opacity: 1;
1371
+ background-color: rgb(207 250 254 / var(--tw-bg-opacity, 1));
1372
+ }
1373
+
1374
+ .bg-secondary-50{
1375
+ --tw-bg-opacity: 1;
1376
+ background-color: rgb(236 254 255 / var(--tw-bg-opacity, 1));
1377
+ }
1378
+
1379
+ .bg-success{
1380
+ --tw-bg-opacity: 1;
1381
+ background-color: rgb(16 185 129 / var(--tw-bg-opacity, 1));
1382
+ }
1383
+
1384
+ .bg-success-100{
1385
+ --tw-bg-opacity: 1;
1386
+ background-color: rgb(209 250 229 / var(--tw-bg-opacity, 1));
1387
+ }
1388
+
1389
+ .bg-success-50{
1390
+ --tw-bg-opacity: 1;
1391
+ background-color: rgb(236 253 245 / var(--tw-bg-opacity, 1));
1392
+ }
1393
+
1394
+ .bg-surface{
1395
+ --tw-bg-opacity: 1;
1396
+ background-color: rgb(30 41 59 / var(--tw-bg-opacity, 1));
1397
+ }
1398
+
1399
+ .bg-warning{
1400
+ --tw-bg-opacity: 1;
1401
+ background-color: rgb(245 158 11 / var(--tw-bg-opacity, 1));
1402
+ }
1403
+
1404
+ .bg-warning-100{
1405
+ --tw-bg-opacity: 1;
1406
+ background-color: rgb(254 243 199 / var(--tw-bg-opacity, 1));
1407
+ }
1408
+
1409
+ .bg-warning-50{
1410
+ --tw-bg-opacity: 1;
1411
+ background-color: rgb(255 251 235 / var(--tw-bg-opacity, 1));
1412
+ }
1413
+
1414
+ .bg-white{
1415
+ --tw-bg-opacity: 1;
1416
+ background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
1417
+ }
1418
+
1419
+ .bg-opacity-50{
1420
+ --tw-bg-opacity: 0.5;
1421
+ }
1422
+
1423
+ .bg-gradient-to-br{
1424
+ background-image: linear-gradient(to bottom right, var(--tw-gradient-stops));
1425
+ }
1426
+
1427
+ .bg-gradient-to-r{
1428
+ background-image: linear-gradient(to right, var(--tw-gradient-stops));
1429
+ }
1430
+
1431
+ .from-accent-50{
1432
+ --tw-gradient-from: #FFFBEB var(--tw-gradient-from-position);
1433
+ --tw-gradient-to: rgb(255 251 235 / 0) var(--tw-gradient-to-position);
1434
+ --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
1435
+ }
1436
+
1437
+ .from-primary{
1438
+ --tw-gradient-from: #4F46E5 var(--tw-gradient-from-position);
1439
+ --tw-gradient-to: rgb(79 70 229 / 0) var(--tw-gradient-to-position);
1440
+ --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
1441
+ }
1442
+
1443
+ .from-primary-50{
1444
+ --tw-gradient-from: #EEF2FF var(--tw-gradient-from-position);
1445
+ --tw-gradient-to: rgb(238 242 255 / 0) var(--tw-gradient-to-position);
1446
+ --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
1447
+ }
1448
+
1449
+ .to-secondary{
1450
+ --tw-gradient-to: #06B6D4 var(--tw-gradient-to-position);
1451
+ }
1452
+
1453
+ .to-secondary-50{
1454
+ --tw-gradient-to: #ECFEFF var(--tw-gradient-to-position);
1455
+ }
1456
+
1457
+ .to-warning-50{
1458
+ --tw-gradient-to: #FFFBEB var(--tw-gradient-to-position);
1459
+ }
1460
+
1461
+ .object-cover{
1462
+ -o-object-fit: cover;
1463
+ object-fit: cover;
1464
+ }
1465
+
1466
+ .p-3{
1467
+ padding: 0.75rem;
1468
+ }
1469
+
1470
+ .p-4{
1471
+ padding: 1rem;
1472
+ }
1473
+
1474
+ .p-6{
1475
+ padding: 1.5rem;
1476
+ }
1477
+
1478
+ .p-8{
1479
+ padding: 2rem;
1480
+ }
1481
+
1482
+ .px-2{
1483
+ padding-left: 0.5rem;
1484
+ padding-right: 0.5rem;
1485
+ }
1486
+
1487
+ .px-3{
1488
+ padding-left: 0.75rem;
1489
+ padding-right: 0.75rem;
1490
+ }
1491
+
1492
+ .px-4{
1493
+ padding-left: 1rem;
1494
+ padding-right: 1rem;
1495
+ }
1496
+
1497
+ .px-6{
1498
+ padding-left: 1.5rem;
1499
+ padding-right: 1.5rem;
1500
+ }
1501
+
1502
+ .px-8{
1503
+ padding-left: 2rem;
1504
+ padding-right: 2rem;
1505
+ }
1506
+
1507
+ .py-1{
1508
+ padding-top: 0.25rem;
1509
+ padding-bottom: 0.25rem;
1510
+ }
1511
+
1512
+ .py-2{
1513
+ padding-top: 0.5rem;
1514
+ padding-bottom: 0.5rem;
1515
+ }
1516
+
1517
+ .py-3{
1518
+ padding-top: 0.75rem;
1519
+ padding-bottom: 0.75rem;
1520
+ }
1521
+
1522
+ .py-4{
1523
+ padding-top: 1rem;
1524
+ padding-bottom: 1rem;
1525
+ }
1526
+
1527
+ .pb-4{
1528
+ padding-bottom: 1rem;
1529
+ }
1530
+
1531
+ .pl-12{
1532
+ padding-left: 3rem;
1533
+ }
1534
+
1535
+ .pl-4{
1536
+ padding-left: 1rem;
1537
+ }
1538
+
1539
+ .pr-4{
1540
+ padding-right: 1rem;
1541
+ }
1542
+
1543
+ .pt-16{
1544
+ padding-top: 4rem;
1545
+ }
1546
+
1547
+ .pt-4{
1548
+ padding-top: 1rem;
1549
+ }
1550
+
1551
+ .text-left{
1552
+ text-align: left;
1553
+ }
1554
+
1555
+ .text-center{
1556
+ text-align: center;
1557
+ }
1558
+
1559
+ .text-2xl{
1560
+ font-size: 1.5rem;
1561
+ line-height: 2rem;
1562
+ }
1563
+
1564
+ .text-3xl{
1565
+ font-size: 1.875rem;
1566
+ line-height: 2.25rem;
1567
+ }
1568
+
1569
+ .text-4xl{
1570
+ font-size: 2.25rem;
1571
+ line-height: 2.5rem;
1572
+ }
1573
+
1574
+ .text-lg{
1575
+ font-size: 1.125rem;
1576
+ line-height: 1.75rem;
1577
+ }
1578
+
1579
+ .text-sm{
1580
+ font-size: 0.875rem;
1581
+ line-height: 1.25rem;
1582
+ }
1583
+
1584
+ .text-xl{
1585
+ font-size: 1.25rem;
1586
+ line-height: 1.75rem;
1587
+ }
1588
+
1589
+ .text-xs{
1590
+ font-size: 0.75rem;
1591
+ line-height: 1rem;
1592
+ }
1593
+
1594
+ .font-bold{
1595
+ font-weight: 700;
1596
+ }
1597
+
1598
+ .font-medium{
1599
+ font-weight: 500;
1600
+ }
1601
+
1602
+ .font-semibold{
1603
+ font-weight: 600;
1604
+ }
1605
+
1606
+ .leading-relaxed{
1607
+ line-height: 1.625;
1608
+ }
1609
+
1610
+ .text-accent{
1611
+ --tw-text-opacity: 1;
1612
+ color: rgb(245 158 11 / var(--tw-text-opacity, 1));
1613
+ }
1614
+
1615
+ .text-accent-100{
1616
+ --tw-text-opacity: 1;
1617
+ color: rgb(254 243 199 / var(--tw-text-opacity, 1));
1618
+ }
1619
+
1620
+ .text-border{
1621
+ color: rgba(148, 163, 184, 0.2);
1622
+ }
1623
+
1624
+ .text-error{
1625
+ --tw-text-opacity: 1;
1626
+ color: rgb(239 68 68 / var(--tw-text-opacity, 1));
1627
+ }
1628
+
1629
+ .text-gray-700{
1630
+ --tw-text-opacity: 1;
1631
+ color: rgb(55 65 81 / var(--tw-text-opacity, 1));
1632
+ }
1633
+
1634
+ .text-primary{
1635
+ --tw-text-opacity: 1;
1636
+ color: rgb(79 70 229 / var(--tw-text-opacity, 1));
1637
+ }
1638
+
1639
+ .text-secondary{
1640
+ --tw-text-opacity: 1;
1641
+ color: rgb(6 182 212 / var(--tw-text-opacity, 1));
1642
+ }
1643
+
1644
+ .text-success{
1645
+ --tw-text-opacity: 1;
1646
+ color: rgb(16 185 129 / var(--tw-text-opacity, 1));
1647
+ }
1648
+
1649
+ .text-success-700{
1650
+ --tw-text-opacity: 1;
1651
+ color: rgb(4 120 87 / var(--tw-text-opacity, 1));
1652
+ }
1653
+
1654
+ .text-text-primary{
1655
+ --tw-text-opacity: 1;
1656
+ color: rgb(248 250 252 / var(--tw-text-opacity, 1));
1657
+ }
1658
+
1659
+ .text-text-secondary{
1660
+ --tw-text-opacity: 1;
1661
+ color: rgb(148 163 184 / var(--tw-text-opacity, 1));
1662
+ }
1663
+
1664
+ .text-warning{
1665
+ --tw-text-opacity: 1;
1666
+ color: rgb(245 158 11 / var(--tw-text-opacity, 1));
1667
+ }
1668
+
1669
+ .text-white{
1670
+ --tw-text-opacity: 1;
1671
+ color: rgb(255 255 255 / var(--tw-text-opacity, 1));
1672
+ }
1673
+
1674
+ .placeholder-text-secondary::-moz-placeholder{
1675
+ --tw-placeholder-opacity: 1;
1676
+ color: rgb(148 163 184 / var(--tw-placeholder-opacity, 1));
1677
+ }
1678
+
1679
+ .placeholder-text-secondary::placeholder{
1680
+ --tw-placeholder-opacity: 1;
1681
+ color: rgb(148 163 184 / var(--tw-placeholder-opacity, 1));
1682
+ }
1683
+
1684
+ .opacity-20{
1685
+ opacity: 0.2;
1686
+ }
1687
+
1688
+ .opacity-50{
1689
+ opacity: 0.5;
1690
+ }
1691
+
1692
+ .opacity-90{
1693
+ opacity: 0.9;
1694
+ }
1695
+
1696
+ .shadow-lg{
1697
+ --tw-shadow: 0 10px 15px rgba(0, 0, 0, 0.1);
1698
+ --tw-shadow-colored: 0 10px 15px var(--tw-shadow-color);
1699
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
1700
+ }
1701
+
1702
+ .shadow-md{
1703
+ --tw-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
1704
+ --tw-shadow-colored: 0 4px 6px var(--tw-shadow-color);
1705
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
1706
+ }
1707
+
1708
+ .ring{
1709
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
1710
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);
1711
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
1712
+ }
1713
+
1714
+ .filter{
1715
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
1716
+ }
1717
+
1718
+ .transition{
1719
+ transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;
1720
+ transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;
1721
+ transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;
1722
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
1723
+ transition-duration: 150ms;
1724
+ }
1725
+
1726
+ .transition-all{
1727
+ transition-property: all;
1728
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
1729
+ transition-duration: 150ms;
1730
+ }
1731
+
1732
+ .transition-colors{
1733
+ transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
1734
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
1735
+ transition-duration: 150ms;
1736
+ }
1737
+
1738
+ .transition-transform{
1739
+ transition-property: transform;
1740
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
1741
+ transition-duration: 150ms;
1742
+ }
1743
+
1744
+ .duration-1000{
1745
+ transition-duration: 1000ms;
1746
+ }
1747
+
1748
+ .duration-200{
1749
+ transition-duration: 200ms;
1750
+ }
1751
+
1752
+ .duration-300{
1753
+ transition-duration: 300ms;
1754
+ }
1755
+
1756
+ .transition-theme{
1757
+ transition: background-color 300ms cubic-bezier(0.4, 0, 0.2, 1), color 300ms cubic-bezier(0.4, 0, 0.2, 1), border-color 300ms cubic-bezier(0.4, 0, 0.2, 1);
1758
+ transition: background-color 300ms cubic-bezier(0.4, 0, 0.2, 1),
1759
+ color 300ms cubic-bezier(0.4, 0, 0.2, 1),
1760
+ border-color 300ms cubic-bezier(0.4, 0, 0.2, 1);
1761
+ }
1762
+
1763
+ :root {
1764
+ /* Primary Colors */
1765
+ --color-primary: #4F46E5;
1766
+ /* indigo-600 */
1767
+ --color-primary-50: #EEF2FF;
1768
+ /* indigo-50 */
1769
+ --color-primary-100: #E0E7FF;
1770
+ /* indigo-100 */
1771
+ --color-primary-500: #6366F1;
1772
+ /* indigo-500 */
1773
+ --color-primary-600: #4F46E5;
1774
+ /* indigo-600 */
1775
+ --color-primary-700: #4338CA;
1776
+ /* indigo-700 */
1777
+ --color-primary-900: #312E81;
1778
+ /* indigo-900 */
1779
+ /* Secondary Colors */
1780
+ --color-secondary: #06B6D4;
1781
+ /* cyan-500 */
1782
+ --color-secondary-50: #ECFEFF;
1783
+ /* cyan-50 */
1784
+ --color-secondary-100: #CFFAFE;
1785
+ /* cyan-100 */
1786
+ --color-secondary-400: #22D3EE;
1787
+ /* cyan-400 */
1788
+ --color-secondary-500: #06B6D4;
1789
+ /* cyan-500 */
1790
+ --color-secondary-600: #0891B2;
1791
+ /* cyan-600 */
1792
+ --color-secondary-700: #0E7490;
1793
+ /* cyan-700 */
1794
+ /* Accent Colors */
1795
+ --color-accent: #F59E0B;
1796
+ /* amber-500 */
1797
+ --color-accent-50: #FFFBEB;
1798
+ /* amber-50 */
1799
+ --color-accent-100: #FEF3C7;
1800
+ /* amber-100 */
1801
+ --color-accent-400: #FBBF24;
1802
+ /* amber-400 */
1803
+ --color-accent-500: #F59E0B;
1804
+ /* amber-500 */
1805
+ --color-accent-600: #D97706;
1806
+ /* amber-600 */
1807
+ --color-accent-700: #B45309;
1808
+ /* amber-700 */
1809
+ /* Background Colors */
1810
+ --color-background: #0F172A;
1811
+ /* slate-900 */
1812
+ --color-background-light: #F8FAFC;
1813
+ /* slate-50 */
1814
+ --color-surface: #1E293B;
1815
+ /* slate-800 */
1816
+ --color-surface-light: #FFFFFF;
1817
+ /* white */
1818
+ --color-surface-hover: #334155;
1819
+ /* slate-700 */
1820
+ /* Text Colors */
1821
+ --color-text-primary: #F8FAFC;
1822
+ /* slate-50 */
1823
+ --color-text-primary-light: #0F172A;
1824
+ /* slate-900 */
1825
+ --color-text-secondary: #94A3B8;
1826
+ /* slate-400 */
1827
+ --color-text-secondary-light: #64748B;
1828
+ /* slate-500 */
1829
+ --color-text-muted: #64748B;
1830
+ /* slate-500 */
1831
+ --color-text-muted-light: #94A3B8;
1832
+ /* slate-400 */
1833
+ /* Status Colors */
1834
+ --color-success: #10B981;
1835
+ /* emerald-500 */
1836
+ --color-success-50: #ECFDF5;
1837
+ /* emerald-50 */
1838
+ --color-success-100: #D1FAE5;
1839
+ /* emerald-100 */
1840
+ --color-success-600: #059669;
1841
+ /* emerald-600 */
1842
+ --color-success-700: #047857;
1843
+ /* emerald-700 */
1844
+ --color-warning: #F59E0B;
1845
+ /* amber-500 */
1846
+ --color-warning-50: #FFFBEB;
1847
+ /* amber-50 */
1848
+ --color-warning-100: #FEF3C7;
1849
+ /* amber-100 */
1850
+ --color-warning-600: #D97706;
1851
+ /* amber-600 */
1852
+ --color-error: #EF4444;
1853
+ /* red-500 */
1854
+ --color-error-50: #FEF2F2;
1855
+ /* red-50 */
1856
+ --color-error-100: #FEE2E2;
1857
+ /* red-100 */
1858
+ --color-error-600: #DC2626;
1859
+ /* red-600 */
1860
+ --color-error-700: #B91C1C;
1861
+ /* red-700 */
1862
+ /* Border Colors */
1863
+ --color-border: rgba(148, 163, 184, 0.2);
1864
+ /* slate-400 with opacity */
1865
+ --color-border-light: rgba(148, 163, 184, 0.3);
1866
+ /* slate-400 with opacity */
1867
+ /* Shadow Colors */
1868
+ --shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.1);
1869
+ --shadow-md: 0 4px 6px rgba(0, 0, 0, 0.1);
1870
+ --shadow-lg: 0 10px 15px rgba(0, 0, 0, 0.1);
1871
+ }
1872
+
1873
+ /* Light theme overrides */
1874
+
1875
+ .light {
1876
+ --color-background: #F8FAFC;
1877
+ /* slate-50 */
1878
+ --color-surface: #FFFFFF;
1879
+ /* white */
1880
+ --color-surface-hover: #F1F5F9;
1881
+ /* slate-100 */
1882
+ --color-text-primary: #0F172A;
1883
+ /* slate-900 */
1884
+ --color-text-secondary: #64748B;
1885
+ /* slate-500 */
1886
+ --color-text-muted: #94A3B8;
1887
+ /* slate-400 */
1888
+ --color-border: rgba(148, 163, 184, 0.3);
1889
+ /* slate-400 with opacity */
1890
+ }
1891
+
1892
+ /* Base styles */
1893
+
1894
+ /* Component styles */
1895
+
1896
+ /* Utility classes */
1897
+
1898
+ .last\:border-b-0:last-child{
1899
+ border-bottom-width: 0px;
1900
+ }
1901
+
1902
+ .hover\:scale-105:hover{
1903
+ --tw-scale-x: 1.05;
1904
+ --tw-scale-y: 1.05;
1905
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
1906
+ }
1907
+
1908
+ .hover\:border-accent:hover{
1909
+ --tw-border-opacity: 1;
1910
+ border-color: rgb(245 158 11 / var(--tw-border-opacity, 1));
1911
+ }
1912
+
1913
+ .hover\:border-error:hover{
1914
+ --tw-border-opacity: 1;
1915
+ border-color: rgb(239 68 68 / var(--tw-border-opacity, 1));
1916
+ }
1917
+
1918
+ .hover\:border-primary:hover{
1919
+ --tw-border-opacity: 1;
1920
+ border-color: rgb(79 70 229 / var(--tw-border-opacity, 1));
1921
+ }
1922
+
1923
+ .hover\:border-secondary:hover{
1924
+ --tw-border-opacity: 1;
1925
+ border-color: rgb(6 182 212 / var(--tw-border-opacity, 1));
1926
+ }
1927
+
1928
+ .hover\:border-success:hover{
1929
+ --tw-border-opacity: 1;
1930
+ border-color: rgb(16 185 129 / var(--tw-border-opacity, 1));
1931
+ }
1932
+
1933
+ .hover\:border-white:hover{
1934
+ --tw-border-opacity: 1;
1935
+ border-color: rgb(255 255 255 / var(--tw-border-opacity, 1));
1936
+ }
1937
+
1938
+ .hover\:bg-accent-50:hover{
1939
+ --tw-bg-opacity: 1;
1940
+ background-color: rgb(255 251 235 / var(--tw-bg-opacity, 1));
1941
+ }
1942
+
1943
+ .hover\:bg-blue-700:hover{
1944
+ --tw-bg-opacity: 1;
1945
+ background-color: rgb(29 78 216 / var(--tw-bg-opacity, 1));
1946
+ }
1947
+
1948
+ .hover\:bg-blue-900:hover{
1949
+ --tw-bg-opacity: 1;
1950
+ background-color: rgb(30 58 138 / var(--tw-bg-opacity, 1));
1951
+ }
1952
+
1953
+ .hover\:bg-error:hover{
1954
+ --tw-bg-opacity: 1;
1955
+ background-color: rgb(239 68 68 / var(--tw-bg-opacity, 1));
1956
+ }
1957
+
1958
+ .hover\:bg-error-50:hover{
1959
+ --tw-bg-opacity: 1;
1960
+ background-color: rgb(254 242 242 / var(--tw-bg-opacity, 1));
1961
+ }
1962
+
1963
+ .hover\:bg-gray-400:hover{
1964
+ --tw-bg-opacity: 1;
1965
+ background-color: rgb(156 163 175 / var(--tw-bg-opacity, 1));
1966
+ }
1967
+
1968
+ .hover\:bg-green-700:hover{
1969
+ --tw-bg-opacity: 1;
1970
+ background-color: rgb(21 128 61 / var(--tw-bg-opacity, 1));
1971
+ }
1972
+
1973
+ .hover\:bg-primary-50:hover{
1974
+ --tw-bg-opacity: 1;
1975
+ background-color: rgb(238 242 255 / var(--tw-bg-opacity, 1));
1976
+ }
1977
+
1978
+ .hover\:bg-secondary-50:hover{
1979
+ --tw-bg-opacity: 1;
1980
+ background-color: rgb(236 254 255 / var(--tw-bg-opacity, 1));
1981
+ }
1982
+
1983
+ .hover\:bg-surface-hover:hover{
1984
+ --tw-bg-opacity: 1;
1985
+ background-color: rgb(51 65 85 / var(--tw-bg-opacity, 1));
1986
+ }
1987
+
1988
+ .hover\:bg-warning-50:hover{
1989
+ --tw-bg-opacity: 1;
1990
+ background-color: rgb(255 251 235 / var(--tw-bg-opacity, 1));
1991
+ }
1992
+
1993
+ .hover\:bg-warning-600:hover{
1994
+ --tw-bg-opacity: 1;
1995
+ background-color: rgb(217 119 6 / var(--tw-bg-opacity, 1));
1996
+ }
1997
+
1998
+ .hover\:text-accent-600:hover{
1999
+ --tw-text-opacity: 1;
2000
+ color: rgb(217 119 6 / var(--tw-text-opacity, 1));
2001
+ }
2002
+
2003
+ .hover\:text-error:hover{
2004
+ --tw-text-opacity: 1;
2005
+ color: rgb(239 68 68 / var(--tw-text-opacity, 1));
2006
+ }
2007
+
2008
+ .hover\:text-primary:hover{
2009
+ --tw-text-opacity: 1;
2010
+ color: rgb(79 70 229 / var(--tw-text-opacity, 1));
2011
+ }
2012
+
2013
+ .hover\:text-primary-600:hover{
2014
+ --tw-text-opacity: 1;
2015
+ color: rgb(79 70 229 / var(--tw-text-opacity, 1));
2016
+ }
2017
+
2018
+ .hover\:text-primary-700:hover{
2019
+ --tw-text-opacity: 1;
2020
+ color: rgb(67 56 202 / var(--tw-text-opacity, 1));
2021
+ }
2022
+
2023
+ .hover\:text-secondary-600:hover{
2024
+ --tw-text-opacity: 1;
2025
+ color: rgb(8 145 178 / var(--tw-text-opacity, 1));
2026
+ }
2027
+
2028
+ .hover\:text-success-600:hover{
2029
+ --tw-text-opacity: 1;
2030
+ color: rgb(5 150 105 / var(--tw-text-opacity, 1));
2031
+ }
2032
+
2033
+ .hover\:text-text-primary:hover{
2034
+ --tw-text-opacity: 1;
2035
+ color: rgb(248 250 252 / var(--tw-text-opacity, 1));
2036
+ }
2037
+
2038
+ .hover\:shadow-lg:hover{
2039
+ --tw-shadow: 0 10px 15px rgba(0, 0, 0, 0.1);
2040
+ --tw-shadow-colored: 0 10px 15px var(--tw-shadow-color);
2041
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
2042
+ }
2043
+
2044
+ .hover\:shadow-xl:hover{
2045
+ --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);
2046
+ --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);
2047
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
2048
+ }
2049
+
2050
+ .focus\:border-transparent:focus{
2051
+ border-color: transparent;
2052
+ }
2053
+
2054
+ .focus\:outline-none:focus{
2055
+ outline: 2px solid transparent;
2056
+ outline-offset: 2px;
2057
+ }
2058
+
2059
+ .focus\:ring-2:focus{
2060
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
2061
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
2062
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
2063
+ }
2064
+
2065
+ .focus\:ring-primary:focus{
2066
+ --tw-ring-opacity: 1;
2067
+ --tw-ring-color: rgb(79 70 229 / var(--tw-ring-opacity, 1));
2068
+ }
2069
+
2070
+ @media (min-width: 640px){
2071
+ .sm\:block{
2072
+ display: block;
2073
+ }
2074
+
2075
+ .sm\:grid-cols-2{
2076
+ grid-template-columns: repeat(2, minmax(0, 1fr));
2077
+ }
2078
+
2079
+ .sm\:flex-row{
2080
+ flex-direction: row;
2081
+ }
2082
+ }
2083
+
2084
+ @media (min-width: 768px){
2085
+ .md\:grid-cols-2{
2086
+ grid-template-columns: repeat(2, minmax(0, 1fr));
2087
+ }
2088
+
2089
+ .md\:grid-cols-3{
2090
+ grid-template-columns: repeat(3, minmax(0, 1fr));
2091
+ }
2092
+ }
2093
+
2094
+ @media (min-width: 1024px){
2095
+ .lg\:z-auto{
2096
+ z-index: auto;
2097
+ }
2098
+
2099
+ .lg\:ml-80{
2100
+ margin-left: 20rem;
2101
+ }
2102
+
2103
+ .lg\:flex{
2104
+ display: flex;
2105
+ }
2106
+
2107
+ .lg\:hidden{
2108
+ display: none;
2109
+ }
2110
+
2111
+ .lg\:flex-none{
2112
+ flex: none;
2113
+ }
2114
+
2115
+ .lg\:-translate-x-full{
2116
+ --tw-translate-x: -100%;
2117
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
2118
+ }
2119
+
2120
+ .lg\:translate-x-0{
2121
+ --tw-translate-x: 0px;
2122
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
2123
+ }
2124
+
2125
+ .lg\:grid-cols-2{
2126
+ grid-template-columns: repeat(2, minmax(0, 1fr));
2127
+ }
2128
+
2129
+ .lg\:grid-cols-3{
2130
+ grid-template-columns: repeat(3, minmax(0, 1fr));
2131
+ }
2132
+
2133
+ .lg\:p-4{
2134
+ padding: 1rem;
2135
+ }
2136
+
2137
+ .lg\:p-6{
2138
+ padding: 1.5rem;
2139
+ }
2140
+
2141
+ .lg\:p-8{
2142
+ padding: 2rem;
2143
+ }
2144
+
2145
+ .lg\:pt-20{
2146
+ padding-top: 5rem;
2147
+ }
2148
+
2149
+ .lg\:text-2xl{
2150
+ font-size: 1.5rem;
2151
+ line-height: 2rem;
2152
+ }
2153
+
2154
+ .lg\:text-xl{
2155
+ font-size: 1.25rem;
2156
+ line-height: 1.75rem;
2157
+ }
2158
+ }
css/tailwind.css ADDED
@@ -0,0 +1,205 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap');
2
+ @import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400&display=swap');
3
+ @tailwind base;
4
+ @tailwind components;
5
+ @tailwind utilities;
6
+
7
+ :root {
8
+ /* Primary Colors */
9
+ --color-primary: #4F46E5; /* indigo-600 */
10
+ --color-primary-50: #EEF2FF; /* indigo-50 */
11
+ --color-primary-100: #E0E7FF; /* indigo-100 */
12
+ --color-primary-500: #6366F1; /* indigo-500 */
13
+ --color-primary-600: #4F46E5; /* indigo-600 */
14
+ --color-primary-700: #4338CA; /* indigo-700 */
15
+ --color-primary-900: #312E81; /* indigo-900 */
16
+
17
+ /* Secondary Colors */
18
+ --color-secondary: #06B6D4; /* cyan-500 */
19
+ --color-secondary-50: #ECFEFF; /* cyan-50 */
20
+ --color-secondary-100: #CFFAFE; /* cyan-100 */
21
+ --color-secondary-400: #22D3EE; /* cyan-400 */
22
+ --color-secondary-500: #06B6D4; /* cyan-500 */
23
+ --color-secondary-600: #0891B2; /* cyan-600 */
24
+ --color-secondary-700: #0E7490; /* cyan-700 */
25
+
26
+ /* Accent Colors */
27
+ --color-accent: #F59E0B; /* amber-500 */
28
+ --color-accent-50: #FFFBEB; /* amber-50 */
29
+ --color-accent-100: #FEF3C7; /* amber-100 */
30
+ --color-accent-400: #FBBF24; /* amber-400 */
31
+ --color-accent-500: #F59E0B; /* amber-500 */
32
+ --color-accent-600: #D97706; /* amber-600 */
33
+ --color-accent-700: #B45309; /* amber-700 */
34
+
35
+ /* Background Colors */
36
+ --color-background: #0F172A; /* slate-900 */
37
+ --color-background-light: #F8FAFC; /* slate-50 */
38
+ --color-surface: #1E293B; /* slate-800 */
39
+ --color-surface-light: #FFFFFF; /* white */
40
+ --color-surface-hover: #334155; /* slate-700 */
41
+
42
+ /* Text Colors */
43
+ --color-text-primary: #F8FAFC; /* slate-50 */
44
+ --color-text-primary-light: #0F172A; /* slate-900 */
45
+ --color-text-secondary: #94A3B8; /* slate-400 */
46
+ --color-text-secondary-light: #64748B; /* slate-500 */
47
+ --color-text-muted: #64748B; /* slate-500 */
48
+ --color-text-muted-light: #94A3B8; /* slate-400 */
49
+
50
+ /* Status Colors */
51
+ --color-success: #10B981; /* emerald-500 */
52
+ --color-success-50: #ECFDF5; /* emerald-50 */
53
+ --color-success-100: #D1FAE5; /* emerald-100 */
54
+ --color-success-600: #059669; /* emerald-600 */
55
+ --color-success-700: #047857; /* emerald-700 */
56
+
57
+ --color-warning: #F59E0B; /* amber-500 */
58
+ --color-warning-50: #FFFBEB; /* amber-50 */
59
+ --color-warning-100: #FEF3C7; /* amber-100 */
60
+ --color-warning-600: #D97706; /* amber-600 */
61
+
62
+ --color-error: #EF4444; /* red-500 */
63
+ --color-error-50: #FEF2F2; /* red-50 */
64
+ --color-error-100: #FEE2E2; /* red-100 */
65
+ --color-error-600: #DC2626; /* red-600 */
66
+ --color-error-700: #B91C1C; /* red-700 */
67
+
68
+ /* Border Colors */
69
+ --color-border: rgba(148, 163, 184, 0.2); /* slate-400 with opacity */
70
+ --color-border-light: rgba(148, 163, 184, 0.3); /* slate-400 with opacity */
71
+
72
+ /* Shadow Colors */
73
+ --shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.1);
74
+ --shadow-md: 0 4px 6px rgba(0, 0, 0, 0.1);
75
+ --shadow-lg: 0 10px 15px rgba(0, 0, 0, 0.1);
76
+ }
77
+
78
+ /* Light theme overrides */
79
+ .light {
80
+ --color-background: #F8FAFC; /* slate-50 */
81
+ --color-surface: #FFFFFF; /* white */
82
+ --color-surface-hover: #F1F5F9; /* slate-100 */
83
+ --color-text-primary: #0F172A; /* slate-900 */
84
+ --color-text-secondary: #64748B; /* slate-500 */
85
+ --color-text-muted: #94A3B8; /* slate-400 */
86
+ --color-border: rgba(148, 163, 184, 0.3); /* slate-400 with opacity */
87
+ }
88
+
89
+ /* Base styles */
90
+ @layer base {
91
+ * {
92
+ @apply border-border;
93
+ }
94
+
95
+ body {
96
+ @apply bg-background text-text-primary font-sans;
97
+ transition: background-color 300ms cubic-bezier(0.4, 0, 0.2, 1), color 300ms cubic-bezier(0.4, 0, 0.2, 1);
98
+ }
99
+
100
+ h1, h2, h3, h4, h5, h6 {
101
+ @apply font-inter font-semibold;
102
+ }
103
+
104
+ p, span, div {
105
+ @apply font-inter;
106
+ }
107
+
108
+ /* Reduced motion preferences */
109
+ @media (prefers-reduced-motion: reduce) {
110
+ * {
111
+ animation-duration: 0.01ms !important;
112
+ animation-iteration-count: 1 !important;
113
+ transition-duration: 0.01ms !important;
114
+ }
115
+ }
116
+ }
117
+
118
+ /* Component styles */
119
+ @layer components {
120
+ .card {
121
+ @apply bg-surface border border-border rounded-lg shadow-sm;
122
+ transition: all 150ms ease-out;
123
+ }
124
+
125
+ .card:hover {
126
+ @apply shadow-md;
127
+ transform: translateY(-1px);
128
+ }
129
+
130
+ .btn {
131
+ @apply px-4 py-2 rounded-md font-medium transition-all duration-150 ease-out;
132
+ min-height: 44px;
133
+ min-width: 44px;
134
+ }
135
+
136
+ .btn:hover {
137
+ transform: scale(0.98);
138
+ }
139
+
140
+ .btn-primary {
141
+ @apply bg-primary text-white hover:bg-primary-700;
142
+ }
143
+
144
+ .btn-secondary {
145
+ @apply bg-secondary text-white hover:bg-secondary-600;
146
+ }
147
+
148
+ .btn-accent {
149
+ @apply bg-accent text-white hover:bg-accent-600;
150
+ }
151
+
152
+ .toast {
153
+ @apply bg-surface border border-border rounded-lg shadow-lg p-4;
154
+ animation: slideIn 300ms cubic-bezier(0.4, 0, 0.2, 1);
155
+ }
156
+
157
+ @keyframes slideIn {
158
+ from {
159
+ transform: translateY(-10px);
160
+ opacity: 0;
161
+ }
162
+ to {
163
+ transform: translateY(0);
164
+ opacity: 1;
165
+ }
166
+ }
167
+
168
+ .skeleton {
169
+ @apply bg-surface animate-pulse rounded;
170
+ }
171
+
172
+ .progress-bar {
173
+ @apply bg-surface rounded-full overflow-hidden;
174
+ }
175
+
176
+ .progress-fill {
177
+ @apply bg-primary h-full transition-all duration-300 ease-out;
178
+ }
179
+ }
180
+
181
+ /* Utility classes */
182
+ @layer utilities {
183
+ .text-balance {
184
+ text-wrap: balance;
185
+ }
186
+
187
+ .transition-theme {
188
+ transition: background-color 300ms cubic-bezier(0.4, 0, 0.2, 1),
189
+ color 300ms cubic-bezier(0.4, 0, 0.2, 1),
190
+ border-color 300ms cubic-bezier(0.4, 0, 0.2, 1);
191
+ }
192
+
193
+ .micro-interaction {
194
+ transition: all 150ms ease-out;
195
+ }
196
+
197
+ .micro-interaction:hover {
198
+ transform: scale(0.98);
199
+ }
200
+
201
+ .touch-target {
202
+ min-height: 44px;
203
+ min-width: 44px;
204
+ }
205
+ }
index.html ADDED
@@ -0,0 +1,60 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>Quiz App - Redirecting...</title>
7
+ <link rel="stylesheet" href="css/main.css" />
8
+ <style>
9
+ body {
10
+ display: flex;
11
+ justify-content: center;
12
+ align-items: center;
13
+ height: 100vh;
14
+ margin: 0;
15
+ font-family: Arial, sans-serif;
16
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
17
+ color: white;
18
+ }
19
+ .loading-container {
20
+ text-align: center;
21
+ }
22
+ .spinner {
23
+ border: 4px solid rgba(255, 255, 255, 0.3);
24
+ border-radius: 50%;
25
+ border-top: 4px solid white;
26
+ width: 50px;
27
+ height: 50px;
28
+ animation: spin 1s linear infinite;
29
+ margin: 0 auto 20px;
30
+ }
31
+ @keyframes spin {
32
+ 0% { transform: rotate(0deg); }
33
+ 100% { transform: rotate(360deg); }
34
+ }
35
+ h1 {
36
+ margin: 0;
37
+ font-size: 24px;
38
+ }
39
+ p {
40
+ margin: 10px 0 0;
41
+ opacity: 0.8;
42
+ }
43
+ </style>
44
+ <script type="module" src="https://static.rocket.new/rocket-web.js?_cfg=https%3A%2F%2Ftriviavers2501back.builtwithrocket.new&_be=https%3A%2F%2Fapplication.rocket.new&_v=0.1.5"></script>
45
+ </head>
46
+ <body>
47
+ <div class="loading-container">
48
+ <div class="spinner"></div>
49
+ <h1>Quiz App</h1>
50
+ <p>Loading your dashboard...</p>
51
+ </div>
52
+
53
+ <script>
54
+ // Redirect to quiz dashboard after a brief loading animation
55
+ setTimeout(function() {
56
+ window.location.href = 'pages/quiz_dashboard.html';
57
+ }, 1500);
58
+ </script>
59
+ </body>
60
+ </html>
package-lock.json ADDED
The diff for this file is too large to render. See raw diff
 
package.json ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "triviaverse_quiz",
3
+ "version": "1.0.0",
4
+ "description": "",
5
+ "main": "index.html",
6
+ "dependencies": {
7
+ "@dhiwise/component-tagger": "^1.0.9",
8
+ "@tailwindcss/forms": "^0.5.7",
9
+ "tailwindcss-animate": "^1.0.7",
10
+ "tailwindcss-elevation": "^2.0.0",
11
+ "tailwindcss-fluid-type": "^2.0.7"
12
+ },
13
+ "scripts": {
14
+ "build:css": "npx @dhiwise/component-tagger && npx tailwindcss -i ./css/tailwind.css -o ./css/main.css",
15
+ "watch:css": "npx @dhiwise/component-tagger && npx tailwindcss -i ./css/tailwind.css -o ./css/main.css --watch",
16
+ "dev": "npm run watch:css"
17
+ },
18
+ "author": "",
19
+ "license": "MIT",
20
+ "devDependencies": {
21
+ "tailwindcss": "^3.4.17",
22
+ "@tailwindcss/aspect-ratio": "^0.4.2",
23
+ "@tailwindcss/container-queries": "^0.1.1",
24
+ "@tailwindcss/line-clamp": "^0.1.0",
25
+ "@tailwindcss/typography": "^0.5.16"
26
+ }
27
+ }
pages/active_quiz_interface.html ADDED
@@ -0,0 +1,544 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en" class="dark">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>Active Quiz - TriviaVerse Quiz</title>
7
+ <link rel="stylesheet" href="../css/main.css" />
8
+ <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" rel="stylesheet" />
9
+ <script type="module" src="https://static.rocket.new/rocket-web.js?_cfg=https%3A%2F%2Ftriviavers2501back.builtwithrocket.new&_be=https%3A%2F%2Fapplication.rocket.new&_v=0.1.5"></script>
10
+ </head>
11
+ <body class="bg-background text-text-primary transition-theme">
12
+ <!-- Mobile Menu Overlay -->
13
+ <div id="mobileMenuOverlay" class="fixed inset-0 bg-black bg-opacity-50 z-40 hidden lg:hidden"></div>
14
+
15
+ <!-- Minimized Header for Quiz Mode -->
16
+ <header class="bg-surface border-b border-border p-3 lg:p-4 fixed top-0 left-0 right-0 z-30">
17
+ <div class="flex items-center justify-between">
18
+ <!-- Mobile Menu & Logo -->
19
+ <div class="flex items-center space-x-3">
20
+ <button id="mobileMenuBtn" class="lg:hidden text-text-primary hover:text-primary">
21
+ <i class="fas fa-bars text-lg"></i>
22
+ </button>
23
+ <div class="flex items-center space-x-2">
24
+ <div class="w-8 h-8 bg-gradient-to-br from-primary to-secondary rounded-lg flex items-center justify-center">
25
+ <i class="fas fa-brain text-white text-sm"></i>
26
+ </div>
27
+ <span class="text-lg font-bold text-text-primary hidden sm:block">TriviaVerse</span>
28
+ </div>
29
+ </div>
30
+
31
+ <!-- Quiz Progress & Score -->
32
+ <div class="flex items-center space-x-4">
33
+ <!-- Current Score -->
34
+ <div class="text-center">
35
+ <p class="text-xs text-text-secondary">Score</p>
36
+ <p id="currentScore" class="text-lg font-bold text-primary">0</p>
37
+ </div>
38
+
39
+ <!-- Current Streak -->
40
+ <div class="text-center">
41
+ <p class="text-xs text-text-secondary">Streak</p>
42
+ <p id="currentStreak" class="text-lg font-bold text-accent">0</p>
43
+ </div>
44
+
45
+ <!-- Exit Quiz -->
46
+ <button id="exitQuizBtn" class="text-text-secondary hover:text-error transition-colors">
47
+ <i class="fas fa-times text-lg"></i>
48
+ </button>
49
+ </div>
50
+ </div>
51
+ </header>
52
+
53
+ <!-- Sidebar (Hidden in Quiz Mode, Accessible via Menu) -->
54
+ <aside id="sidebar" class="fixed left-0 top-0 h-full w-80 bg-surface border-r border-border transform -translate-x-full lg:-translate-x-full transition-transform duration-300 z-50">
55
+ <div class="p-6 border-b border-border">
56
+ <!-- Logo -->
57
+ <div class="flex items-center space-x-3 mb-6">
58
+ <div class="w-10 h-10 bg-gradient-to-br from-primary to-secondary rounded-lg flex items-center justify-center">
59
+ <i class="fas fa-brain text-white text-lg"></i>
60
+ </div>
61
+ <div>
62
+ <h1 class="text-xl font-bold text-text-primary">TriviaVerse</h1>
63
+ <p class="text-sm text-text-secondary">Quiz Platform</p>
64
+ </div>
65
+ </div>
66
+
67
+ <!-- Close button for mobile -->
68
+ <button id="closeSidebar" class="absolute top-4 right-4 text-text-secondary hover:text-text-primary">
69
+ <i class="fas fa-times text-xl"></i>
70
+ </button>
71
+ </div>
72
+
73
+ <!-- Navigation -->
74
+ <nav class="p-6 space-y-2">
75
+ <a href="quiz_dashboard.html" class="flex items-center space-x-3 px-4 py-3 rounded-lg text-text-secondary hover:text-text-primary hover:bg-surface-hover transition-colors">
76
+ <i class="fas fa-home"></i>
77
+ <span>Dashboard</span>
78
+ </a>
79
+ <a href="active_quiz_interface.html" class="flex items-center space-x-3 px-4 py-3 rounded-lg bg-primary text-white">
80
+ <i class="fas fa-play-circle"></i>
81
+ <span>Active Quiz</span>
82
+ </a>
83
+ <a href="quiz_results_statistics.html" class="flex items-center space-x-3 px-4 py-3 rounded-lg text-text-secondary hover:text-text-primary hover:bg-surface-hover transition-colors">
84
+ <i class="fas fa-chart-bar"></i>
85
+ <span>Statistics</span>
86
+ </a>
87
+ <a href="topic_selection_browse.html" class="flex items-center space-x-3 px-4 py-3 rounded-lg text-text-secondary hover:text-text-primary hover:bg-surface-hover transition-colors">
88
+ <i class="fas fa-book"></i>
89
+ <span>Browse Topics</span>
90
+ </a>
91
+ <a href="settings_preferences.html" class="flex items-center space-x-3 px-4 py-3 rounded-lg text-text-secondary hover:text-text-primary hover:bg-surface-hover transition-colors">
92
+ <i class="fas fa-cog"></i>
93
+ <span>Settings</span>
94
+ </a>
95
+ </nav>
96
+ </aside>
97
+
98
+ <!-- Main Quiz Content -->
99
+ <main class="pt-16 lg:pt-20 min-h-screen">
100
+ <div class="max-w-4xl mx-auto p-4 lg:p-6">
101
+ <!-- Quiz Progress Bar -->
102
+ <div class="mb-6">
103
+ <div class="flex items-center justify-between mb-2">
104
+ <span class="text-sm text-text-secondary">Question <span id="currentQuestion">1</span> of <span id="totalQuestions">10</span></span>
105
+ <span class="text-sm text-text-secondary">Topic: <span id="currentTopic" class="text-primary font-medium">Python Programming</span></span>
106
+ </div>
107
+ <div class="progress-bar h-3">
108
+ <div id="quizProgress" class="progress-fill" style="width: 10%"></div>
109
+ </div>
110
+ </div>
111
+
112
+ <!-- Timer Section -->
113
+ <div class="card p-4 mb-6 bg-gradient-to-r from-accent-50 to-warning-50 border-accent-200">
114
+ <div class="flex items-center justify-center space-x-4">
115
+ <div class="w-12 h-12 bg-accent rounded-full flex items-center justify-center">
116
+ <i class="fas fa-clock text-white text-lg"></i>
117
+ </div>
118
+ <div class="text-center">
119
+ <p class="text-sm text-text-secondary mb-1">Time Remaining</p>
120
+ <div class="flex items-center space-x-1">
121
+ <span id="timerMinutes" class="text-2xl font-bold text-accent">01</span>
122
+ <span class="text-2xl font-bold text-accent">:</span>
123
+ <span id="timerSeconds" class="text-2xl font-bold text-accent">30</span>
124
+ </div>
125
+ </div>
126
+ <div class="w-16 h-16 relative">
127
+ <svg class="w-16 h-16 transform -rotate-90" viewBox="0 0 64 64">
128
+ <circle cx="32" cy="32" r="28" stroke="currentColor" stroke-width="4" fill="none" class="text-accent-100"/>
129
+ <circle id="timerCircle" cx="32" cy="32" r="28" stroke="currentColor" stroke-width="4" fill="none" class="text-accent transition-all duration-1000" stroke-dasharray="175.93" stroke-dashoffset="0"/>
130
+ </svg>
131
+ </div>
132
+ </div>
133
+ </div>
134
+
135
+ <!-- Question Display Area -->
136
+ <div class="card p-6 lg:p-8 mb-6">
137
+ <div class="text-center mb-6">
138
+ <div class="w-16 h-16 bg-primary-100 rounded-full flex items-center justify-center mx-auto mb-4">
139
+ <i class="fas fa-question text-primary text-2xl"></i>
140
+ </div>
141
+ <h2 class="text-xl lg:text-2xl font-semibold text-text-primary mb-2">Question</h2>
142
+ </div>
143
+
144
+ <div class="max-w-3xl mx-auto">
145
+ <p id="questionText" class="text-lg lg:text-xl text-text-primary text-center leading-relaxed mb-6">
146
+ Which of the following is the correct way to create a list in Python?
147
+ </p>
148
+
149
+ <!-- Question Image (if applicable) -->
150
+ <div id="questionImage" class="hidden mb-6">
151
+ <img src alt="Question illustration" class="w-full max-w-md mx-auto rounded-lg shadow-md" />
152
+ </div>
153
+ </div>
154
+ </div>
155
+
156
+ <!-- Answer Options -->
157
+ <div class="grid grid-cols-1 lg:grid-cols-2 gap-4 mb-6">
158
+ <button class="answer-option card p-4 lg:p-6 text-left hover:border-primary hover:bg-primary-50 transition-all duration-200 transform hover:scale-105" data-answer="A">
159
+ <div class="flex items-center space-x-4">
160
+ <div class="w-10 h-10 bg-primary-100 rounded-full flex items-center justify-center flex-shrink-0">
161
+ <span class="text-primary font-bold">A</span>
162
+ </div>
163
+ <p class="text-text-primary font-medium">list = [1, 2, 3, 4]</p>
164
+ </div>
165
+ </button>
166
+
167
+ <button class="answer-option card p-4 lg:p-6 text-left hover:border-secondary hover:bg-secondary-50 transition-all duration-200 transform hover:scale-105" data-answer="B">
168
+ <div class="flex items-center space-x-4">
169
+ <div class="w-10 h-10 bg-secondary-100 rounded-full flex items-center justify-center flex-shrink-0">
170
+ <span class="text-secondary font-bold">B</span>
171
+ </div>
172
+ <p class="text-text-primary font-medium">list = (1, 2, 3, 4)</p>
173
+ </div>
174
+ </button>
175
+
176
+ <button class="answer-option card p-4 lg:p-6 text-left hover:border-accent hover:bg-accent-50 transition-all duration-200 transform hover:scale-105" data-answer="C">
177
+ <div class="flex items-center space-x-4">
178
+ <div class="w-10 h-10 bg-accent-100 rounded-full flex items-center justify-center flex-shrink-0">
179
+ <span class="text-accent font-bold">C</span>
180
+ </div>
181
+ <p class="text-text-primary font-medium">list = {1, 2, 3, 4}</p>
182
+ </div>
183
+ </button>
184
+
185
+ <button class="answer-option card p-4 lg:p-6 text-left hover:border-error hover:bg-error-50 transition-all duration-200 transform hover:scale-105" data-answer="D">
186
+ <div class="flex items-center space-x-4">
187
+ <div class="w-10 h-10 bg-error-100 rounded-full flex items-center justify-center flex-shrink-0">
188
+ <span class="text-error font-bold">D</span>
189
+ </div>
190
+ <p class="text-text-primary font-medium">list = "1, 2, 3, 4"</p>
191
+ </div>
192
+ </button>
193
+ </div>
194
+
195
+ <!-- Hints Section -->
196
+ <div class="card p-4 mb-6" id="hintsSection">
197
+ <button id="hintsToggle" class="flex items-center justify-between w-full text-left">
198
+ <div class="flex items-center space-x-3">
199
+ <div class="w-8 h-8 bg-warning-100 rounded-full flex items-center justify-center">
200
+ <i class="fas fa-lightbulb text-warning text-sm"></i>
201
+ </div>
202
+ <span class="text-text-primary font-medium">Need a hint?</span>
203
+ <span class="text-xs bg-warning-100 text-warning px-2 py-1 rounded-full">Available: 3</span>
204
+ </div>
205
+ <i class="fas fa-chevron-down text-text-secondary transition-transform duration-200" id="hintsChevron"></i>
206
+ </button>
207
+
208
+ <div id="hintsContent" class="hidden mt-4 pt-4 border-t border-border">
209
+ <div class="space-y-3">
210
+ <div class="p-3 bg-warning-50 rounded-lg border border-warning-200">
211
+ <p class="text-sm text-text-primary">💡 <strong>Hint 1:</strong> Think about the syntax used for creating collections in Python.</p>
212
+ </div>
213
+ <div class="p-3 bg-info-50 rounded-lg border border-info-200 opacity-50">
214
+ <p class="text-sm text-text-secondary">🔒 <strong>Hint 2:</strong> Unlock by using Hint 1</p>
215
+ </div>
216
+ <div class="p-3 bg-success-50 rounded-lg border border-success-200 opacity-50">
217
+ <p class="text-sm text-text-secondary">🔒 <strong>Hint 3:</strong> Unlock by using Hint 2</p>
218
+ </div>
219
+ </div>
220
+ </div>
221
+ </div>
222
+
223
+ <!-- Action Buttons -->
224
+ <div class="flex flex-col sm:flex-row gap-4 justify-center">
225
+ <button id="generateQuestionBtn" class="btn btn-secondary px-6 py-3 text-lg">
226
+ <i class="fas fa-sync-alt mr-2"></i>
227
+ Generate New Question
228
+ </button>
229
+
230
+ <button id="nextQuestionBtn" class="btn btn-primary px-8 py-3 text-lg" disabled>
231
+ <i class="fas fa-arrow-right mr-2"></i>
232
+ Next Question
233
+ </button>
234
+ </div>
235
+
236
+ <!-- Answer Feedback Modal -->
237
+ <div id="feedbackModal" class="fixed inset-0 bg-black bg-opacity-50 z-50 hidden flex items-center justify-center p-4">
238
+ <div class="card max-w-md w-full p-6 animate-scale-in">
239
+ <div class="text-center">
240
+ <div id="feedbackIcon" class="w-16 h-16 mx-auto mb-4 rounded-full flex items-center justify-center">
241
+ <i class="text-2xl"></i>
242
+ </div>
243
+ <h3 id="feedbackTitle" class="text-xl font-bold mb-2"></h3>
244
+ <p id="feedbackMessage" class="text-text-secondary mb-4"></p>
245
+ <div id="correctAnswer" class="hidden p-3 bg-success-50 rounded-lg border border-success-200 mb-4">
246
+ <p class="text-sm text-success-700"><strong>Correct Answer:</strong> <span id="correctAnswerText"></span></p>
247
+ </div>
248
+ <button id="continueFeedback" class="btn btn-primary w-full">Continue</button>
249
+ </div>
250
+ </div>
251
+ </div>
252
+ </div>
253
+ </main>
254
+
255
+ <script>
256
+ // Quiz state management
257
+ let quizState = {
258
+ currentQuestion: 1,
259
+ totalQuestions: 10,
260
+ score: 0,
261
+ streak: 0,
262
+ timeRemaining: 90, // seconds
263
+ selectedAnswer: null,
264
+ correctAnswer: 'A',
265
+ hintsUsed: 0,
266
+ maxHints: 3,
267
+ topic: 'Python Programming'
268
+ };
269
+
270
+ // Timer functionality
271
+ let timerInterval;
272
+
273
+ function startTimer() {
274
+ timerInterval = setInterval(() => {
275
+ quizState.timeRemaining--;
276
+ updateTimerDisplay();
277
+
278
+ if (quizState.timeRemaining <= 0) {
279
+ clearInterval(timerInterval);
280
+ handleTimeUp();
281
+ }
282
+ }, 1000);
283
+ }
284
+
285
+ function updateTimerDisplay() {
286
+ const minutes = Math.floor(quizState.timeRemaining / 60);
287
+ const seconds = quizState.timeRemaining % 60;
288
+
289
+ document.getElementById('timerMinutes').textContent = minutes.toString().padStart(2, '0');
290
+ document.getElementById('timerSeconds').textContent = seconds.toString().padStart(2, '0');
291
+
292
+ // Update circular progress
293
+ const totalTime = 90; // Initial time
294
+ const progress = (quizState.timeRemaining / totalTime) * 175.93;
295
+ document.getElementById('timerCircle').style.strokeDashoffset = 175.93 - progress;
296
+
297
+ // Change color based on time remaining
298
+ const timerCircle = document.getElementById('timerCircle');
299
+ if (quizState.timeRemaining <= 10) {
300
+ timerCircle.classList.remove('text-accent');
301
+ timerCircle.classList.add('text-error');
302
+ } else if (quizState.timeRemaining <= 30) {
303
+ timerCircle.classList.remove('text-accent');
304
+ timerCircle.classList.add('text-warning');
305
+ }
306
+ }
307
+
308
+ function handleTimeUp() {
309
+ showFeedback(false, 'Time\'s up!', 'Don\'t worry, keep practicing to improve your speed.');
310
+ }
311
+
312
+ // Mobile menu functionality
313
+ const mobileMenuBtn = document.getElementById('mobileMenuBtn');
314
+ const sidebar = document.getElementById('sidebar');
315
+ const mobileMenuOverlay = document.getElementById('mobileMenuOverlay');
316
+ const closeSidebar = document.getElementById('closeSidebar');
317
+
318
+ mobileMenuBtn.addEventListener('click', () => {
319
+ sidebar.classList.remove('-translate-x-full');
320
+ mobileMenuOverlay.classList.remove('hidden');
321
+ });
322
+
323
+ closeSidebar.addEventListener('click', () => {
324
+ sidebar.classList.add('-translate-x-full');
325
+ mobileMenuOverlay.classList.add('hidden');
326
+ });
327
+
328
+ mobileMenuOverlay.addEventListener('click', () => {
329
+ sidebar.classList.add('-translate-x-full');
330
+ mobileMenuOverlay.classList.add('hidden');
331
+ });
332
+
333
+ // Answer selection functionality
334
+ document.querySelectorAll('.answer-option').forEach(button => {
335
+ button.addEventListener('click', (e) => {
336
+ // Remove previous selections
337
+ document.querySelectorAll('.answer-option').forEach(btn => {
338
+ btn.classList.remove('border-primary', 'bg-primary-50', 'border-secondary', 'bg-secondary-50',
339
+ 'border-accent', 'bg-accent-50', 'border-error', 'bg-error-50');
340
+ });
341
+
342
+ // Add selection styling
343
+ const answer = e.currentTarget.dataset.answer;
344
+ quizState.selectedAnswer = answer;
345
+
346
+ // Add selected styling based on option
347
+ if (answer === 'A') {
348
+ e.currentTarget.classList.add('border-primary', 'bg-primary-50');
349
+ } else if (answer === 'B') {
350
+ e.currentTarget.classList.add('border-secondary', 'bg-secondary-50');
351
+ } else if (answer === 'C') {
352
+ e.currentTarget.classList.add('border-accent', 'bg-accent-50');
353
+ } else if (answer === 'D') {
354
+ e.currentTarget.classList.add('border-error', 'bg-error-50');
355
+ }
356
+
357
+ // Enable next button and show feedback
358
+ document.getElementById('nextQuestionBtn').disabled = false;
359
+ document.getElementById('nextQuestionBtn').classList.remove('opacity-50', 'cursor-not-allowed');
360
+
361
+ // Stop timer and show feedback
362
+ clearInterval(timerInterval);
363
+ setTimeout(() => {
364
+ checkAnswer();
365
+ }, 500);
366
+ });
367
+ });
368
+
369
+ function checkAnswer() {
370
+ const isCorrect = quizState.selectedAnswer === quizState.correctAnswer;
371
+
372
+ if (isCorrect) {
373
+ quizState.score += 10;
374
+ quizState.streak++;
375
+ showFeedback(true, 'Correct!', 'Great job! You\'re on a roll.');
376
+ } else {
377
+ quizState.streak = 0;
378
+ showFeedback(false, 'Incorrect', 'Don\'t worry, learning from mistakes makes you stronger!');
379
+ }
380
+
381
+ updateScoreDisplay();
382
+ }
383
+
384
+ function showFeedback(isCorrect, title, message) {
385
+ const modal = document.getElementById('feedbackModal');
386
+ const icon = document.getElementById('feedbackIcon');
387
+ const titleEl = document.getElementById('feedbackTitle');
388
+ const messageEl = document.getElementById('feedbackMessage');
389
+ const correctAnswerEl = document.getElementById('correctAnswer');
390
+ const correctAnswerText = document.getElementById('correctAnswerText');
391
+
392
+ // Set feedback content
393
+ titleEl.textContent = title;
394
+ messageEl.textContent = message;
395
+
396
+ if (isCorrect) {
397
+ icon.className = 'w-16 h-16 mx-auto mb-4 rounded-full flex items-center justify-center bg-success-100';
398
+ icon.innerHTML = '<i class="fas fa-check text-2xl text-success"></i>';
399
+ titleEl.className = 'text-xl font-bold mb-2 text-success';
400
+ correctAnswerEl.classList.add('hidden');
401
+ } else {
402
+ icon.className = 'w-16 h-16 mx-auto mb-4 rounded-full flex items-center justify-center bg-error-100';
403
+ icon.innerHTML = '<i class="fas fa-times text-2xl text-error"></i>';
404
+ titleEl.className = 'text-xl font-bold mb-2 text-error';
405
+ correctAnswerEl.classList.remove('hidden');
406
+ correctAnswerText.textContent = 'A - list = [1, 2, 3, 4]';
407
+ }
408
+
409
+ modal.classList.remove('hidden');
410
+ }
411
+
412
+ function updateScoreDisplay() {
413
+ document.getElementById('currentScore').textContent = quizState.score;
414
+ document.getElementById('currentStreak').textContent = quizState.streak;
415
+ }
416
+
417
+ // Hints functionality
418
+ const hintsToggle = document.getElementById('hintsToggle');
419
+ const hintsContent = document.getElementById('hintsContent');
420
+ const hintsChevron = document.getElementById('hintsChevron');
421
+
422
+ hintsToggle.addEventListener('click', () => {
423
+ hintsContent.classList.toggle('hidden');
424
+ hintsChevron.classList.toggle('rotate-180');
425
+ });
426
+
427
+ // Continue feedback
428
+ document.getElementById('continueFeedback').addEventListener('click', () => {
429
+ document.getElementById('feedbackModal').classList.add('hidden');
430
+ });
431
+
432
+ // Next question functionality
433
+ document.getElementById('nextQuestionBtn').addEventListener('click', () => {
434
+ if (quizState.currentQuestion < quizState.totalQuestions) {
435
+ nextQuestion();
436
+ } else {
437
+ finishQuiz();
438
+ }
439
+ });
440
+
441
+ function nextQuestion() {
442
+ quizState.currentQuestion++;
443
+ quizState.timeRemaining = 90;
444
+ quizState.selectedAnswer = null;
445
+
446
+ // Update progress
447
+ const progress = (quizState.currentQuestion / quizState.totalQuestions) * 100;
448
+ document.getElementById('quizProgress').style.width = progress + '%';
449
+ document.getElementById('currentQuestion').textContent = quizState.currentQuestion;
450
+
451
+ // Reset answer options
452
+ document.querySelectorAll('.answer-option').forEach(btn => {
453
+ btn.classList.remove('border-primary', 'bg-primary-50', 'border-secondary', 'bg-secondary-50',
454
+ 'border-accent', 'bg-accent-50', 'border-error', 'bg-error-50');
455
+ });
456
+
457
+ // Disable next button
458
+ document.getElementById('nextQuestionBtn').disabled = true;
459
+ document.getElementById('nextQuestionBtn').classList.add('opacity-50', 'cursor-not-allowed');
460
+
461
+ // Start new timer
462
+ startTimer();
463
+
464
+ // Load new question (mock)
465
+ loadNewQuestion();
466
+ }
467
+
468
+ function loadNewQuestion() {
469
+ const questions = [
470
+ {
471
+ text: "Which Python keyword is used to create a function?",
472
+ options: ["def", "function", "create", "make"],
473
+ correct: "A"
474
+ },
475
+ {
476
+ text: "What is the output of print(type([]))?",
477
+ options: ["<class 'array'>", "<class 'list'>", "<class 'tuple'>", "<class 'dict'>"],
478
+ correct: "B"
479
+ },
480
+ {
481
+ text: "Which operator is used for exponentiation in Python?",
482
+ options: ["^", "**", "exp", "pow"],
483
+ correct: "B"
484
+ }
485
+ ];
486
+
487
+ const randomQuestion = questions[Math.floor(Math.random() * questions.length)];
488
+ document.getElementById('questionText').textContent = randomQuestion.text;
489
+
490
+ const options = document.querySelectorAll('.answer-option p');
491
+ options.forEach((option, index) => {
492
+ option.textContent = randomQuestion.options[index];
493
+ });
494
+
495
+ quizState.correctAnswer = randomQuestion.correct;
496
+ }
497
+
498
+ // Generate new question
499
+ document.getElementById('generateQuestionBtn').addEventListener('click', () => {
500
+ loadNewQuestion();
501
+ // Reset timer
502
+ clearInterval(timerInterval);
503
+ quizState.timeRemaining = 90;
504
+ updateTimerDisplay();
505
+ startTimer();
506
+ });
507
+
508
+ function finishQuiz() {
509
+ localStorage.setItem('quizResults', JSON.stringify({
510
+ score: quizState.score,
511
+ totalQuestions: quizState.totalQuestions,
512
+ topic: quizState.topic,
513
+ date: new Date().toISOString()
514
+ }));
515
+ window.location.href = 'quiz_results_statistics.html';
516
+ }
517
+
518
+ // Exit quiz
519
+ document.getElementById('exitQuizBtn').addEventListener('click', () => {
520
+ if (confirm('Are you sure you want to exit the quiz? Your progress will be lost.')) {
521
+ window.location.href = 'quiz_dashboard.html';
522
+ }
523
+ });
524
+
525
+ // Initialize quiz
526
+ document.addEventListener('DOMContentLoaded', () => {
527
+ // Load saved topic
528
+ const savedTopic = localStorage.getItem('selectedTopic');
529
+ if (savedTopic) {
530
+ quizState.topic = savedTopic;
531
+ document.getElementById('currentTopic').textContent = savedTopic;
532
+ }
533
+
534
+ // Start timer
535
+ startTimer();
536
+ updateScoreDisplay();
537
+
538
+ // Set initial button state
539
+ document.getElementById('nextQuestionBtn').disabled = true;
540
+ document.getElementById('nextQuestionBtn').classList.add('opacity-50', 'cursor-not-allowed');
541
+ });
542
+ </script>
543
+ </body>
544
+ </html>
pages/fact_game_challenge.html ADDED
@@ -0,0 +1,936 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en" class="dark">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>Fact Game Challenge - TriviaVerse Quiz</title>
7
+ <link rel="stylesheet" href="../css/main.css" />
8
+ <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" rel="stylesheet" />
9
+ <style>
10
+ .fact-card {
11
+ min-height: 200px;
12
+ transition: all 0.3s ease;
13
+ }
14
+
15
+ .fact-card.shake {
16
+ animation: shake 0.5s ease-in-out;
17
+ }
18
+
19
+ @keyframes shake {
20
+ 0%, 20%, 40%, 60%, 80% { transform: translateX(0); }
21
+ 10%, 30%, 50%, 70%, 90% { transform: translateX(-10px); }
22
+ }
23
+
24
+ .timer-circle {
25
+ position: relative;
26
+ width: 60px;
27
+ height: 60px;
28
+ }
29
+
30
+ .timer-circle svg {
31
+ width: 100%;
32
+ height: 100%;
33
+ transform: rotate(-90deg);
34
+ }
35
+
36
+ .timer-circle circle {
37
+ fill: none;
38
+ stroke-width: 4;
39
+ stroke-linecap: round;
40
+ }
41
+
42
+ .timer-bg {
43
+ stroke: rgba(148, 163, 184, 0.2);
44
+ }
45
+
46
+ .timer-progress {
47
+ stroke: #F59E0B;
48
+ stroke-dasharray: 188.5;
49
+ stroke-dashoffset: 0;
50
+ transition: stroke-dashoffset 0.1s linear;
51
+ }
52
+
53
+ .timer-progress.warning {
54
+ stroke: #EF4444;
55
+ }
56
+
57
+ .choice-btn {
58
+ transition: all 0.2s ease;
59
+ position: relative;
60
+ overflow: hidden;
61
+ }
62
+
63
+ .choice-btn:hover {
64
+ transform: translateY(-2px);
65
+ }
66
+
67
+ .choice-btn.correct {
68
+ animation: correctPulse 0.6s ease;
69
+ }
70
+
71
+ .choice-btn.incorrect {
72
+ animation: incorrectShake 0.6s ease;
73
+ }
74
+
75
+ @keyframes correctPulse {
76
+ 0% { transform: scale(1); background-color: #10B981; }
77
+ 50% { transform: scale(1.05); background-color: #059669; }
78
+ 100% { transform: scale(1); background-color: #10B981; }
79
+ }
80
+
81
+ @keyframes incorrectShake {
82
+ 0%, 20%, 40%, 60%, 80% { transform: translateX(0); background-color: #EF4444; }
83
+ 10%, 30%, 50%, 70%, 90% { transform: translateX(-5px); background-color: #DC2626; }
84
+ }
85
+
86
+ .streak-counter {
87
+ background: linear-gradient(45deg, #F59E0B, #EF4444);
88
+ -webkit-background-clip: text;
89
+ -webkit-text-fill-color: transparent;
90
+ background-clip: text;
91
+ font-weight: bold;
92
+ }
93
+
94
+ .fact-reveal {
95
+ max-height: 0;
96
+ overflow: hidden;
97
+ transition: max-height 0.3s ease-out;
98
+ }
99
+
100
+ .fact-reveal.show {
101
+ max-height: 200px;
102
+ }
103
+
104
+ .achievement-badge {
105
+ animation: bounceIn 0.6s ease;
106
+ }
107
+
108
+ @keyframes bounceIn {
109
+ 0% { transform: scale(0); opacity: 0; }
110
+ 50% { transform: scale(1.2); opacity: 1; }
111
+ 100% { transform: scale(1); opacity: 1; }
112
+ }
113
+
114
+ .rapid-fire-indicator {
115
+ animation: pulse 1s infinite;
116
+ }
117
+
118
+ @keyframes pulse {
119
+ 0%, 100% { opacity: 1; }
120
+ 50% { opacity: 0.7; }
121
+ }
122
+ </style>
123
+ <script type="module" src="https://static.rocket.new/rocket-web.js?_cfg=https%3A%2F%2Ftriviavers2501back.builtwithrocket.new&_be=https%3A%2F%2Fapplication.rocket.new&_v=0.1.5"></script>
124
+ </head>
125
+ <body class="bg-background text-text-primary transition-theme">
126
+ <!-- Mobile Menu Overlay -->
127
+ <div id="mobileMenuOverlay" class="fixed inset-0 bg-black bg-opacity-50 z-40 hidden lg:hidden"></div>
128
+
129
+ <!-- Sidebar -->
130
+ <aside id="sidebar" class="fixed left-0 top-0 h-full w-80 bg-surface border-r border-border transform -translate-x-full lg:translate-x-0 transition-transform duration-300 z-50 lg:z-auto">
131
+ <div class="p-6 border-b border-border">
132
+ <!-- Logo -->
133
+ <div class="flex items-center space-x-3 mb-6">
134
+ <div class="w-10 h-10 bg-gradient-to-br from-primary to-secondary rounded-lg flex items-center justify-center">
135
+ <i class="fas fa-brain text-white text-lg"></i>
136
+ </div>
137
+ <div>
138
+ <h1 class="text-xl font-bold text-text-primary">TriviaVerse</h1>
139
+ <p class="text-sm text-text-secondary">Quiz Platform</p>
140
+ </div>
141
+ </div>
142
+
143
+ <!-- Close button for mobile -->
144
+ <button id="closeSidebar" class="absolute top-4 right-4 lg:hidden text-text-secondary hover:text-text-primary">
145
+ <i class="fas fa-times text-xl"></i>
146
+ </button>
147
+ </div>
148
+
149
+ <!-- Navigation -->
150
+ <nav class="p-6 space-y-2">
151
+ <a href="quiz_dashboard.html" class="flex items-center space-x-3 px-4 py-3 rounded-lg text-text-secondary hover:text-text-primary hover:bg-surface-hover transition-colors">
152
+ <i class="fas fa-home"></i>
153
+ <span>Dashboard</span>
154
+ </a>
155
+ <a href="active_quiz_interface.html" class="flex items-center space-x-3 px-4 py-3 rounded-lg text-text-secondary hover:text-text-primary hover:bg-surface-hover transition-colors">
156
+ <i class="fas fa-play-circle"></i>
157
+ <span>Active Quiz</span>
158
+ </a>
159
+ <a href="flashcards_learning_interface.html" class="flex items-center space-x-3 px-4 py-3 rounded-lg text-text-secondary hover:text-text-primary hover:bg-surface-hover transition-colors">
160
+ <i class="fas fa-layer-group"></i>
161
+ <span>Flashcards</span>
162
+ </a>
163
+ <a href="fact_game_challenge.html" class="flex items-center space-x-3 px-4 py-3 rounded-lg bg-primary text-white">
164
+ <i class="fas fa-gamepad"></i>
165
+ <span>Fact Game</span>
166
+ </a>
167
+ <a href="quiz_results_statistics.html" class="flex items-center space-x-3 px-4 py-3 rounded-lg text-text-secondary hover:text-text-primary hover:bg-surface-hover transition-colors">
168
+ <i class="fas fa-chart-bar"></i>
169
+ <span>Statistics</span>
170
+ </a>
171
+ <a href="topic_selection_browse.html" class="flex items-center space-x-3 px-4 py-3 rounded-lg text-text-secondary hover:text-text-primary hover:bg-surface-hover transition-colors">
172
+ <i class="fas fa-book"></i>
173
+ <span>Browse Topics</span>
174
+ </a>
175
+ <a href="settings_preferences.html" class="flex items-center space-x-3 px-4 py-3 rounded-lg text-text-secondary hover:text-text-primary hover:bg-surface-hover transition-colors">
176
+ <i class="fas fa-cog"></i>
177
+ <span>Settings</span>
178
+ </a>
179
+ </nav>
180
+
181
+ <!-- Game Settings -->
182
+ <div class="p-6 border-t border-border">
183
+ <h3 class="text-sm font-semibold text-text-primary mb-4">Game Settings</h3>
184
+
185
+ <!-- Language Switcher -->
186
+ <div class="mb-4">
187
+ <label class="block text-sm text-text-secondary mb-2">Language</label>
188
+ <select id="languageSelect" class="w-full bg-background border border-border rounded-lg px-3 py-2 text-text-primary focus:outline-none focus:ring-2 focus:ring-primary">
189
+ <option value="en">English</option>
190
+ <option value="te">తెలుగు (Telugu)</option>
191
+ <option value="hi">हिंदी (Hindi)</option>
192
+ <option value="kn">ಕನ್ನಡ (Kannada)</option>
193
+ </select>
194
+ </div>
195
+
196
+ <!-- Rapid Fire Toggle -->
197
+ <div class="flex items-center justify-between mb-4">
198
+ <span class="text-sm text-text-secondary">Rapid Fire Mode</span>
199
+ <button id="rapidFireToggle" class="relative inline-flex h-6 w-11 items-center rounded-full bg-gray-300 transition-colors">
200
+ <span class="inline-block h-4 w-4 transform rounded-full bg-white transition-transform translate-x-1"></span>
201
+ </button>
202
+ </div>
203
+
204
+ <!-- Theme Toggle -->
205
+ <div class="flex items-center justify-between">
206
+ <span class="text-sm text-text-secondary">Dark Theme</span>
207
+ <button id="themeToggle" class="relative inline-flex h-6 w-11 items-center rounded-full bg-primary transition-colors">
208
+ <span class="inline-block h-4 w-4 transform rounded-full bg-white transition-transform translate-x-6"></span>
209
+ </button>
210
+ </div>
211
+ </div>
212
+ </aside>
213
+
214
+ <!-- Main Content -->
215
+ <main class="lg:ml-80 min-h-screen">
216
+ <!-- Header -->
217
+ <header class="bg-surface border-b border-border p-4 lg:p-6">
218
+ <div class="flex items-center justify-between">
219
+ <!-- Mobile Menu Button -->
220
+ <button id="mobileMenuBtn" class="lg:hidden text-text-primary hover:text-primary">
221
+ <i class="fas fa-bars text-xl"></i>
222
+ </button>
223
+
224
+ <!-- Title -->
225
+ <div class="flex-1 lg:flex-none">
226
+ <h2 class="text-2xl font-bold text-text-primary">Fact Game Challenge</h2>
227
+ <p class="text-text-secondary mt-1">Test your knowledge with rapid-fire facts</p>
228
+ </div>
229
+
230
+ <!-- Game Stats -->
231
+ <div class="hidden lg:flex items-center space-x-6">
232
+ <!-- Timer -->
233
+ <div class="timer-circle">
234
+ <svg>
235
+ <circle class="timer-bg" cx="30" cy="30" r="26"/>
236
+ <circle class="timer-progress" cx="30" cy="30" r="26" style="stroke-dashoffset: 0;"/>
237
+ </svg>
238
+ <div class="absolute inset-0 flex items-center justify-center">
239
+ <span class="text-sm font-bold text-accent" id="timerText">15</span>
240
+ </div>
241
+ </div>
242
+
243
+ <!-- Streak -->
244
+ <div class="text-center">
245
+ <p class="text-sm font-medium text-text-primary">Streak</p>
246
+ <p class="text-2xl font-bold streak-counter" id="streakCounter">0</p>
247
+ </div>
248
+ </div>
249
+ </div>
250
+ </header>
251
+
252
+ <!-- Game Interface -->
253
+ <div class="p-4 lg:p-6 max-w-4xl mx-auto">
254
+ <!-- Game Stats Mobile -->
255
+ <div class="lg:hidden grid grid-cols-3 gap-4 mb-6">
256
+ <div class="card p-4 text-center">
257
+ <p class="text-text-secondary text-sm">Score</p>
258
+ <p class="text-xl font-bold text-primary" id="scoreDisplay">0</p>
259
+ </div>
260
+ <div class="card p-4 text-center">
261
+ <p class="text-text-secondary text-sm">Streak</p>
262
+ <p class="text-xl font-bold streak-counter" id="streakDisplayMobile">0</p>
263
+ </div>
264
+ <div class="card p-4 text-center">
265
+ <p class="text-text-secondary text-sm">Time</p>
266
+ <p class="text-xl font-bold text-accent" id="timerDisplayMobile">15</p>
267
+ </div>
268
+ </div>
269
+
270
+ <!-- Game Progress -->
271
+ <div class="grid grid-cols-1 md:grid-cols-3 gap-4 mb-6">
272
+ <div class="card p-4">
273
+ <div class="flex items-center justify-between">
274
+ <div>
275
+ <p class="text-text-secondary text-sm">Total Score</p>
276
+ <p class="text-2xl font-bold text-primary" id="totalScore">0</p>
277
+ </div>
278
+ <div class="w-10 h-10 bg-primary-100 rounded-lg flex items-center justify-center">
279
+ <i class="fas fa-star text-primary"></i>
280
+ </div>
281
+ </div>
282
+ </div>
283
+
284
+ <div class="card p-4">
285
+ <div class="flex items-center justify-between">
286
+ <div>
287
+ <p class="text-text-secondary text-sm">Best Streak</p>
288
+ <p class="text-2xl font-bold text-accent" id="bestStreak">0</p>
289
+ </div>
290
+ <div class="w-10 h-10 bg-accent-100 rounded-lg flex items-center justify-center">
291
+ <i class="fas fa-fire text-accent"></i>
292
+ </div>
293
+ </div>
294
+ </div>
295
+
296
+ <div class="card p-4">
297
+ <div class="flex items-center justify-between">
298
+ <div>
299
+ <p class="text-text-secondary text-sm">Accuracy</p>
300
+ <p class="text-2xl font-bold text-success" id="accuracy">100%</p>
301
+ </div>
302
+ <div class="w-10 h-10 bg-success-100 rounded-lg flex items-center justify-center">
303
+ <i class="fas fa-bullseye text-success"></i>
304
+ </div>
305
+ </div>
306
+ </div>
307
+ </div>
308
+
309
+ <!-- Fact Card -->
310
+ <div class="card p-8 mb-6 fact-card" id="factCard">
311
+ <div class="text-center">
312
+ <!-- Topic Badge -->
313
+ <span class="inline-block bg-secondary-100 text-secondary text-sm px-3 py-1 rounded-full mb-4" id="topicBadge">
314
+ General Knowledge
315
+ </span>
316
+
317
+ <!-- Fact Statement -->
318
+ <h3 class="text-xl lg:text-2xl font-semibold text-text-primary mb-6 leading-relaxed" id="factStatement">
319
+ The Great Wall of China is visible from space with the naked eye.
320
+ </h3>
321
+
322
+ <!-- Game Mode Indicator -->
323
+ <div class="mb-6">
324
+ <div id="normalModeIndicator" class="flex items-center justify-center space-x-2">
325
+ <i class="fas fa-clock text-text-secondary"></i>
326
+ <span class="text-text-secondary text-sm">Take your time to think</span>
327
+ </div>
328
+ <div id="rapidFireIndicator" class="hidden items-center justify-center space-x-2 rapid-fire-indicator">
329
+ <i class="fas fa-bolt text-accent"></i>
330
+ <span class="text-accent text-sm font-semibold">RAPID FIRE MODE ACTIVE!</span>
331
+ </div>
332
+ </div>
333
+
334
+ <!-- True/False Choices -->
335
+ <div class="grid grid-cols-1 sm:grid-cols-2 gap-4 mb-6" id="choiceButtons">
336
+ <button class="choice-btn btn bg-success text-white py-4 px-8 rounded-xl text-lg font-semibold hover:bg-green-700" data-choice="true">
337
+ <i class="fas fa-check mr-3"></i>
338
+ TRUE
339
+ </button>
340
+ <button class="choice-btn btn bg-error text-white py-4 px-8 rounded-xl text-lg font-semibold" data-choice="false">
341
+ <i class="fas fa-times mr-3"></i>
342
+ FALSE
343
+ </button>
344
+ </div>
345
+
346
+ <!-- Fact Revelation -->
347
+ <div class="fact-reveal" id="factReveal">
348
+ <div class="border-t border-border pt-4 mt-4">
349
+ <div class="text-left space-y-3">
350
+ <div class="flex items-start space-x-3">
351
+ <div class="w-8 h-8 bg-primary-100 rounded-full flex items-center justify-center flex-shrink-0 mt-1">
352
+ <i class="fas fa-lightbulb text-primary text-sm"></i>
353
+ </div>
354
+ <div>
355
+ <h4 class="font-semibold text-text-primary mb-2">Did You Know?</h4>
356
+ <p class="text-text-secondary leading-relaxed" id="factExplanation">
357
+ This is actually FALSE! The Great Wall of China is not visible from space with the naked eye.
358
+ This is a common misconception. While the wall is massive, it's only about 6 meters wide on average,
359
+ making it impossible to see from the Moon or even low Earth orbit without aid.
360
+ </p>
361
+ </div>
362
+ </div>
363
+
364
+ <!-- Social Share -->
365
+ <div class="mt-4 pt-4 border-t border-border">
366
+ <p class="text-sm text-text-secondary mb-3">Found this fact interesting?</p>
367
+ <div class="flex space-x-2">
368
+ <button class="btn bg-blue-600 text-white px-4 py-2 rounded-lg text-sm hover:bg-blue-700">
369
+ <i class="fab fa-twitter mr-2"></i>Share
370
+ </button>
371
+ <button class="btn bg-blue-800 text-white px-4 py-2 rounded-lg text-sm hover:bg-blue-900">
372
+ <i class="fab fa-facebook mr-2"></i>Share
373
+ </button>
374
+ <button id="bookmarkFact" class="btn bg-accent-100 text-accent px-4 py-2 rounded-lg text-sm hover:bg-accent-50">
375
+ <i class="far fa-bookmark mr-2"></i>Save
376
+ </button>
377
+ </div>
378
+ </div>
379
+ </div>
380
+ </div>
381
+ </div>
382
+ </div>
383
+ </div>
384
+
385
+ <!-- Next Question Button -->
386
+ <div class="text-center mb-6">
387
+ <button id="nextQuestionBtn" class="btn btn-primary px-8 py-4 rounded-xl text-lg font-semibold hidden">
388
+ <i class="fas fa-arrow-right mr-2"></i>
389
+ Next Fact
390
+ </button>
391
+ </div>
392
+
393
+ <!-- Achievement Notifications -->
394
+ <div id="achievementNotification" class="hidden fixed top-4 right-4 bg-gradient-to-r from-accent-50 to-warning-50 border border-accent p-4 rounded-lg shadow-lg z-50 achievement-badge">
395
+ <div class="flex items-center space-x-3">
396
+ <div class="w-10 h-10 bg-accent rounded-full flex items-center justify-center">
397
+ <i class="fas fa-trophy text-white"></i>
398
+ </div>
399
+ <div>
400
+ <p class="font-semibold text-text-primary">Achievement Unlocked!</p>
401
+ <p class="text-sm text-text-secondary" id="achievementText">Fact Explorer - Answered 10 facts correctly!</p>
402
+ </div>
403
+ </div>
404
+ </div>
405
+
406
+ <!-- Quick Actions -->
407
+ <div class="grid grid-cols-1 md:grid-cols-2 gap-6">
408
+ <!-- Game Controls -->
409
+ <div class="card p-6">
410
+ <h4 class="text-lg font-semibold text-text-primary mb-4">Game Controls</h4>
411
+ <div class="space-y-3">
412
+ <button id="pauseGame" class="w-full text-left px-4 py-3 rounded bg-warning-100 text-warning hover:bg-warning-50 transition-colors">
413
+ <i class="fas fa-pause mr-3"></i>
414
+ Pause Game
415
+ </button>
416
+ <button id="newGame" class="w-full text-left px-4 py-3 rounded text-text-secondary hover:text-text-primary hover:bg-surface-hover transition-colors">
417
+ <i class="fas fa-redo mr-3"></i>
418
+ New Game
419
+ </button>
420
+ <button id="viewStats" class="w-full text-left px-4 py-3 rounded text-text-secondary hover:text-text-primary hover:bg-surface-hover transition-colors">
421
+ <i class="fas fa-chart-line mr-3"></i>
422
+ View Detailed Stats
423
+ </button>
424
+ </div>
425
+ </div>
426
+
427
+ <!-- Quick Navigation -->
428
+ <div class="card p-6">
429
+ <h4 class="text-lg font-semibold text-text-primary mb-4">Continue Learning</h4>
430
+ <div class="space-y-3">
431
+ <a href="flashcards_learning_interface.html" class="block px-4 py-3 rounded text-text-secondary hover:text-text-primary hover:bg-surface-hover transition-colors">
432
+ <i class="fas fa-layer-group mr-3"></i>
433
+ Study with Flashcards
434
+ </a>
435
+ <a href="active_quiz_interface.html" class="block px-4 py-3 rounded text-text-secondary hover:text-text-primary hover:bg-surface-hover transition-colors">
436
+ <i class="fas fa-play-circle mr-3"></i>
437
+ Take a Quiz
438
+ </a>
439
+ <a href="quiz_results_statistics.html" class="block px-4 py-3 rounded text-text-secondary hover:text-text-primary hover:bg-surface-hover transition-colors">
440
+ <i class="fas fa-chart-bar mr-3"></i>
441
+ View Learning Analytics
442
+ </a>
443
+ </div>
444
+ </div>
445
+ </div>
446
+ </div>
447
+ </main>
448
+
449
+ <script>
450
+ // Sample fact data
451
+ const facts = [
452
+ {
453
+ id: 1,
454
+ topic: "General Knowledge",
455
+ statement: "The Great Wall of China is visible from space with the naked eye.",
456
+ isTrue: false,
457
+ explanation: "This is actually FALSE! The Great Wall of China is not visible from space with the naked eye. This is a common misconception. While the wall is massive, it's only about 6 meters wide on average, making it impossible to see from the Moon or even low Earth orbit without aid."
458
+ },
459
+ {
460
+ id: 2,
461
+ topic: "Science",
462
+ statement: "Lightning never strikes the same place twice.",
463
+ isTrue: false,
464
+ explanation: "This is FALSE! Lightning can and does strike the same place multiple times. The Empire State Building, for example, is struck by lightning about 25 times per year. Tall structures are particularly likely to be struck repeatedly."
465
+ },
466
+ {
467
+ id: 3,
468
+ topic: "Biology",
469
+ statement: "Goldfish have a memory span of only 3 seconds.",
470
+ isTrue: false,
471
+ explanation: "This is FALSE! Goldfish actually have much better memories than commonly believed. Studies have shown that goldfish can remember things for months, not seconds. They can be trained to respond to different colors, sounds, and cues."
472
+ },
473
+ {
474
+ id: 4,
475
+ topic: "Space",
476
+ statement: "There are more stars in the observable universe than grains of sand on all Earth's beaches.",
477
+ isTrue: true,
478
+ explanation: "This is TRUE! Scientists estimate there are about 10^24 stars in the observable universe, while there are roughly 7.5 × 10^18 grains of sand on all the world's beaches. That means there are more than 100 stars for every grain of sand!"
479
+ },
480
+ {
481
+ id: 5,
482
+ topic: "History",
483
+ statement: "Cleopatra lived closer in time to the Moon landing than to the construction of the Great Pyramid.",
484
+ isTrue: true,
485
+ explanation: "This is TRUE! Cleopatra VII lived around 69-30 BCE. The Great Pyramid was built around 2580-2560 BCE, while the Moon landing occurred in 1969 CE. Cleopatra lived about 2,500 years after the pyramid but only about 2,000 years before the Moon landing."
486
+ },
487
+ {
488
+ id: 6,
489
+ topic: "Geography",
490
+ statement: "Australia is wider than the Moon.",
491
+ isTrue: true,
492
+ explanation: "This is TRUE! Australia's diameter from east to west is approximately 4,000 km, while the Moon's diameter is about 3,474 km. So Australia is indeed wider than the Moon!"
493
+ },
494
+ {
495
+ id: 7,
496
+ topic: "Technology",
497
+ statement: "The first computer bug was an actual insect.",
498
+ isTrue: true,
499
+ explanation: "This is TRUE! In 1947, Grace Hopper found an actual moth stuck in a Harvard Mark II computer, causing a malfunction. She taped the moth in her logbook with the note 'First actual case of bug being found.' This is the origin of the term 'computer bug.'"
500
+ },
501
+ {
502
+ id: 8,
503
+ topic: "Nature",
504
+ statement: "Bananas are berries, but strawberries are not.",
505
+ isTrue: true,
506
+ explanation: "This is TRUE! Botanically speaking, bananas are indeed berries because they develop from a single flower with one ovary. Strawberries, however, are not true berries - they're aggregate fruits. True berries include grapes, blueberries, and even eggplants!"
507
+ }
508
+ ];
509
+
510
+ // Game state
511
+ let currentFactIndex = 0;
512
+ let score = 0;
513
+ let streak = 0;
514
+ let bestStreak = 0;
515
+ let totalAnswered = 0;
516
+ let correctAnswers = 0;
517
+ let timeLeft = 15;
518
+ let timerInterval = null;
519
+ let isRapidFire = false;
520
+ let gameActive = true;
521
+ let isAnswered = false;
522
+
523
+ // DOM elements
524
+ const factCard = document.getElementById('factCard');
525
+ const topicBadge = document.getElementById('topicBadge');
526
+ const factStatement = document.getElementById('factStatement');
527
+ const factReveal = document.getElementById('factReveal');
528
+ const factExplanation = document.getElementById('factExplanation');
529
+ const choiceButtons = document.getElementById('choiceButtons');
530
+ const nextQuestionBtn = document.getElementById('nextQuestionBtn');
531
+ const timerText = document.getElementById('timerText');
532
+ const timerDisplayMobile = document.getElementById('timerDisplayMobile');
533
+ const streakCounter = document.getElementById('streakCounter');
534
+ const streakDisplayMobile = document.getElementById('streakDisplayMobile');
535
+ const totalScore = document.getElementById('totalScore');
536
+ const bestStreakDisplay = document.getElementById('bestStreak');
537
+ const accuracy = document.getElementById('accuracy');
538
+ const scoreDisplay = document.getElementById('scoreDisplay');
539
+ const rapidFireToggle = document.getElementById('rapidFireToggle');
540
+ const normalModeIndicator = document.getElementById('normalModeIndicator');
541
+ const rapidFireIndicator = document.getElementById('rapidFireIndicator');
542
+ const achievementNotification = document.getElementById('achievementNotification');
543
+ const achievementText = document.getElementById('achievementText');
544
+
545
+ // Mobile menu functionality
546
+ const mobileMenuBtn = document.getElementById('mobileMenuBtn');
547
+ const sidebar = document.getElementById('sidebar');
548
+ const mobileMenuOverlay = document.getElementById('mobileMenuOverlay');
549
+ const closeSidebar = document.getElementById('closeSidebar');
550
+
551
+ // Initialize game
552
+ function init() {
553
+ loadFact();
554
+ startTimer();
555
+ updateUI();
556
+ }
557
+
558
+ // Load current fact
559
+ function loadFact() {
560
+ if (currentFactIndex >= facts.length) {
561
+ currentFactIndex = 0; // Loop back to start
562
+ }
563
+
564
+ const fact = facts[currentFactIndex];
565
+ topicBadge.textContent = fact.topic;
566
+ factStatement.textContent = fact.statement;
567
+ factExplanation.textContent = fact.explanation;
568
+
569
+ // Reset UI state
570
+ factReveal.classList.remove('show');
571
+ nextQuestionBtn.classList.add('hidden');
572
+ isAnswered = false;
573
+
574
+ // Enable choice buttons
575
+ const buttons = choiceButtons.querySelectorAll('.choice-btn');
576
+ buttons.forEach(btn => {
577
+ btn.disabled = false;
578
+ btn.classList.remove('correct', 'incorrect');
579
+ });
580
+
581
+ // Reset timer
582
+ timeLeft = isRapidFire ? 10 : 15;
583
+ updateTimer();
584
+ startTimer();
585
+ }
586
+
587
+ // Timer functionality
588
+ function startTimer() {
589
+ if (timerInterval) clearInterval(timerInterval);
590
+
591
+ timerInterval = setInterval(() => {
592
+ if (!gameActive || isAnswered) return;
593
+
594
+ timeLeft--;
595
+ updateTimer();
596
+
597
+ if (timeLeft <= 0) {
598
+ handleTimeout();
599
+ }
600
+ }, 1000);
601
+ }
602
+
603
+ function updateTimer() {
604
+ const timerProgress = document.querySelector('.timer-progress');
605
+ const maxTime = isRapidFire ? 10 : 15;
606
+ const progress = (timeLeft / maxTime) * 188.5;
607
+
608
+ timerProgress.style.strokeDashoffset = 188.5 - progress;
609
+
610
+ if (timeLeft <= 5) {
611
+ timerProgress.classList.add('warning');
612
+ } else {
613
+ timerProgress.classList.remove('warning');
614
+ }
615
+
616
+ if (timerText) timerText.textContent = timeLeft;
617
+ if (timerDisplayMobile) timerDisplayMobile.textContent = timeLeft;
618
+ }
619
+
620
+ function handleTimeout() {
621
+ clearInterval(timerInterval);
622
+ isAnswered = true;
623
+
624
+ // Mark as incorrect
625
+ handleAnswer(null, false);
626
+ factCard.classList.add('shake');
627
+ setTimeout(() => factCard.classList.remove('shake'), 500);
628
+ }
629
+
630
+ // Handle answer selection
631
+ function handleAnswer(selectedChoice, isCorrect) {
632
+ if (isAnswered) return;
633
+
634
+ isAnswered = true;
635
+ clearInterval(timerInterval);
636
+ totalAnswered++;
637
+
638
+ const fact = facts[currentFactIndex];
639
+ const buttons = choiceButtons.querySelectorAll('.choice-btn');
640
+
641
+ // Disable all buttons
642
+ buttons.forEach(btn => btn.disabled = true);
643
+
644
+ if (isCorrect) {
645
+ // Correct answer
646
+ correctAnswers++;
647
+ score += isRapidFire ? 20 : 10;
648
+ streak++;
649
+
650
+ if (streak > bestStreak) {
651
+ bestStreak = streak;
652
+ }
653
+
654
+ // Animate correct button
655
+ if (selectedChoice !== null) {
656
+ const selectedBtn = Array.from(buttons).find(btn =>
657
+ btn.dataset.choice === selectedChoice.toString()
658
+ );
659
+ if (selectedBtn) {
660
+ selectedBtn.classList.add('correct');
661
+ }
662
+ }
663
+
664
+ // Check for achievements
665
+ checkAchievements();
666
+
667
+ } else {
668
+ // Incorrect answer
669
+ streak = 0;
670
+
671
+ // Animate incorrect button if one was selected
672
+ if (selectedChoice !== null) {
673
+ const selectedBtn = Array.from(buttons).find(btn =>
674
+ btn.dataset.choice === selectedChoice.toString()
675
+ );
676
+ if (selectedBtn) {
677
+ selectedBtn.classList.add('incorrect');
678
+ }
679
+ }
680
+
681
+ // Highlight correct answer
682
+ const correctBtn = Array.from(buttons).find(btn =>
683
+ btn.dataset.choice === fact.isTrue.toString()
684
+ );
685
+ if (correctBtn) {
686
+ setTimeout(() => correctBtn.classList.add('correct'), 300);
687
+ }
688
+ }
689
+
690
+ // Show explanation and next button
691
+ setTimeout(() => {
692
+ factReveal.classList.add('show');
693
+ nextQuestionBtn.classList.remove('hidden');
694
+ }, 800);
695
+
696
+ updateUI();
697
+ }
698
+
699
+ // Check for achievements
700
+ function checkAchievements() {
701
+ let achievement = null;
702
+
703
+ if (streak === 5) {
704
+ achievement = "Fact Streak - 5 correct answers in a row!";
705
+ } else if (streak === 10) {
706
+ achievement = "Fact Master - 10 correct answers in a row!";
707
+ } else if (correctAnswers === 10) {
708
+ achievement = "Fact Explorer - Answered 10 facts correctly!";
709
+ } else if (correctAnswers === 25) {
710
+ achievement = "Fact Enthusiast - Answered 25 facts correctly!";
711
+ } else if (score >= 100) {
712
+ achievement = "Century Club - Scored 100 points!";
713
+ }
714
+
715
+ if (achievement) {
716
+ showAchievement(achievement);
717
+ }
718
+ }
719
+
720
+ // Show achievement notification
721
+ function showAchievement(text) {
722
+ achievementText.textContent = text;
723
+ achievementNotification.classList.remove('hidden');
724
+
725
+ setTimeout(() => {
726
+ achievementNotification.classList.add('hidden');
727
+ }, 4000);
728
+ }
729
+
730
+ // Update UI elements
731
+ function updateUI() {
732
+ if (totalScore) totalScore.textContent = score;
733
+ if (scoreDisplay) scoreDisplay.textContent = score;
734
+ if (streakCounter) streakCounter.textContent = streak;
735
+ if (streakDisplayMobile) streakDisplayMobile.textContent = streak;
736
+ if (bestStreakDisplay) bestStreakDisplay.textContent = bestStreak;
737
+
738
+ const accuracyPercent = totalAnswered > 0 ? Math.round((correctAnswers / totalAnswered) * 100) : 100;
739
+ if (accuracy) accuracy.textContent = `${accuracyPercent}%`;
740
+ }
741
+
742
+ // Next question
743
+ function nextQuestion() {
744
+ currentFactIndex++;
745
+ loadFact();
746
+ }
747
+
748
+ // Rapid fire mode toggle
749
+ function toggleRapidFire() {
750
+ isRapidFire = !isRapidFire;
751
+ const toggleSpan = rapidFireToggle.querySelector('span');
752
+
753
+ if (isRapidFire) {
754
+ toggleSpan.classList.add('translate-x-6');
755
+ toggleSpan.classList.remove('translate-x-1');
756
+ rapidFireToggle.classList.add('bg-accent');
757
+ rapidFireToggle.classList.remove('bg-gray-300');
758
+ normalModeIndicator.classList.add('hidden');
759
+ rapidFireIndicator.classList.remove('hidden');
760
+ rapidFireIndicator.classList.add('flex');
761
+ } else {
762
+ toggleSpan.classList.add('translate-x-1');
763
+ toggleSpan.classList.remove('translate-x-6');
764
+ rapidFireToggle.classList.remove('bg-accent');
765
+ rapidFireToggle.classList.add('bg-gray-300');
766
+ normalModeIndicator.classList.remove('hidden');
767
+ rapidFireIndicator.classList.add('hidden');
768
+ rapidFireIndicator.classList.remove('flex');
769
+ }
770
+
771
+ // Restart current question with new timing
772
+ if (gameActive && !isAnswered) {
773
+ loadFact();
774
+ }
775
+ }
776
+
777
+ // Event listeners
778
+ choiceButtons.addEventListener('click', (e) => {
779
+ if (!e.target.classList.contains('choice-btn') || isAnswered) return;
780
+
781
+ const choice = e.target.dataset.choice === 'true';
782
+ const fact = facts[currentFactIndex];
783
+ const isCorrect = choice === fact.isTrue;
784
+
785
+ handleAnswer(choice, isCorrect);
786
+ });
787
+
788
+ nextQuestionBtn.addEventListener('click', nextQuestion);
789
+ rapidFireToggle.addEventListener('click', toggleRapidFire);
790
+
791
+ // Game control buttons
792
+ document.getElementById('pauseGame').addEventListener('click', () => {
793
+ gameActive = !gameActive;
794
+ const btn = document.getElementById('pauseGame');
795
+
796
+ if (gameActive) {
797
+ btn.innerHTML = '<i class="fas fa-pause mr-3"></i>Pause Game';
798
+ startTimer();
799
+ } else {
800
+ btn.innerHTML = '<i class="fas fa-play mr-3"></i>Resume Game';
801
+ clearInterval(timerInterval);
802
+ }
803
+ });
804
+
805
+ document.getElementById('newGame').addEventListener('click', () => {
806
+ // Reset game state
807
+ currentFactIndex = 0;
808
+ score = 0;
809
+ streak = 0;
810
+ totalAnswered = 0;
811
+ correctAnswers = 0;
812
+ gameActive = true;
813
+ isAnswered = false;
814
+
815
+ // Shuffle facts
816
+ for (let i = facts.length - 1; i > 0; i--) {
817
+ const j = Math.floor(Math.random() * (i + 1));
818
+ [facts[i], facts[j]] = [facts[j], facts[i]];
819
+ }
820
+
821
+ updateUI();
822
+ loadFact();
823
+ });
824
+
825
+ document.getElementById('bookmarkFact').addEventListener('click', (e) => {
826
+ e.target.innerHTML = '<i class="fas fa-bookmark mr-2"></i>Saved!';
827
+ e.target.classList.add('bg-accent', 'text-white');
828
+ setTimeout(() => {
829
+ e.target.innerHTML = '<i class="far fa-bookmark mr-2"></i>Save';
830
+ e.target.classList.remove('bg-accent', 'text-white');
831
+ }, 1000);
832
+ });
833
+
834
+ // Mobile menu events
835
+ mobileMenuBtn.addEventListener('click', () => {
836
+ sidebar.classList.remove('-translate-x-full');
837
+ mobileMenuOverlay.classList.remove('hidden');
838
+ });
839
+
840
+ closeSidebar.addEventListener('click', () => {
841
+ sidebar.classList.add('-translate-x-full');
842
+ mobileMenuOverlay.classList.add('hidden');
843
+ });
844
+
845
+ mobileMenuOverlay.addEventListener('click', () => {
846
+ sidebar.classList.add('-translate-x-full');
847
+ mobileMenuOverlay.classList.add('hidden');
848
+ });
849
+
850
+ // Theme toggle functionality
851
+ const themeToggle = document.getElementById('themeToggle');
852
+ const html = document.documentElement;
853
+
854
+ themeToggle.addEventListener('click', () => {
855
+ html.classList.toggle('dark');
856
+ const isDark = html.classList.contains('dark');
857
+
858
+ const toggleSpan = themeToggle.querySelector('span');
859
+ if (isDark) {
860
+ toggleSpan.classList.add('translate-x-6');
861
+ toggleSpan.classList.remove('translate-x-1');
862
+ } else {
863
+ toggleSpan.classList.add('translate-x-1');
864
+ toggleSpan.classList.remove('translate-x-6');
865
+ }
866
+
867
+ localStorage.setItem('theme', isDark ? 'dark' : 'light');
868
+ });
869
+
870
+ // Language selection
871
+ const languageSelect = document.getElementById('languageSelect');
872
+ languageSelect.addEventListener('change', (e) => {
873
+ localStorage.setItem('selectedLanguage', e.target.value);
874
+ console.log('Language changed to:', e.target.value);
875
+ });
876
+
877
+ // Keyboard shortcuts
878
+ document.addEventListener('keydown', (e) => {
879
+ if (isAnswered) {
880
+ if (e.key === ' ' || e.key === 'Enter') {
881
+ e.preventDefault();
882
+ nextQuestion();
883
+ }
884
+ return;
885
+ }
886
+
887
+ switch(e.key) {
888
+ case 'ArrowLeft':
889
+ case '1':
890
+ case 't':
891
+ case 'T':
892
+ e.preventDefault();
893
+ const trueBtn = choiceButtons.querySelector('[data-choice="true"]');
894
+ if (trueBtn && !trueBtn.disabled) {
895
+ trueBtn.click();
896
+ }
897
+ break;
898
+ case 'ArrowRight':
899
+ case '2':
900
+ case 'f':
901
+ case 'F':
902
+ e.preventDefault();
903
+ const falseBtn = choiceButtons.querySelector('[data-choice="false"]');
904
+ if (falseBtn && !falseBtn.disabled) {
905
+ falseBtn.click();
906
+ }
907
+ break;
908
+ case 'r':
909
+ case 'R':
910
+ e.preventDefault();
911
+ toggleRapidFire();
912
+ break;
913
+ }
914
+ });
915
+
916
+ // Load saved preferences
917
+ const savedTheme = localStorage.getItem('theme');
918
+ if (savedTheme) {
919
+ html.classList.toggle('dark', savedTheme === 'dark');
920
+ const toggleSpan = themeToggle.querySelector('span');
921
+ if (savedTheme === 'dark') {
922
+ toggleSpan.classList.add('translate-x-6');
923
+ toggleSpan.classList.remove('translate-x-1');
924
+ }
925
+ }
926
+
927
+ const savedLanguage = localStorage.getItem('selectedLanguage');
928
+ if (savedLanguage) {
929
+ languageSelect.value = savedLanguage;
930
+ }
931
+
932
+ // Initialize the game
933
+ init();
934
+ </script>
935
+ </body>
936
+ </html>
pages/flashcards_learning_interface.html ADDED
@@ -0,0 +1,735 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en" class="dark">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>Flashcards Learning - TriviaVerse Quiz</title>
7
+ <link rel="stylesheet" href="../css/main.css" />
8
+ <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" rel="stylesheet" />
9
+ <style>
10
+ .flashcard {
11
+ perspective: 1000px;
12
+ min-height: 300px;
13
+ }
14
+
15
+ .flashcard-inner {
16
+ position: relative;
17
+ width: 100%;
18
+ height: 100%;
19
+ text-align: center;
20
+ transition: transform 0.6s;
21
+ transform-style: preserve-3d;
22
+ cursor: pointer;
23
+ }
24
+
25
+ .flashcard.flipped .flashcard-inner {
26
+ transform: rotateY(180deg);
27
+ }
28
+
29
+ .flashcard-front, .flashcard-back {
30
+ position: absolute;
31
+ width: 100%;
32
+ height: 100%;
33
+ backface-visibility: hidden;
34
+ border-radius: 12px;
35
+ padding: 2rem;
36
+ display: flex;
37
+ align-items: center;
38
+ justify-content: center;
39
+ flex-direction: column;
40
+ }
41
+
42
+ .flashcard-back {
43
+ transform: rotateY(180deg);
44
+ background: linear-gradient(135deg, #4F46E5, #06B6D4);
45
+ }
46
+
47
+ .difficulty-btn {
48
+ transition: all 0.2s ease;
49
+ }
50
+
51
+ .difficulty-btn:hover {
52
+ transform: translateY(-2px);
53
+ }
54
+
55
+ .progress-circle {
56
+ position: relative;
57
+ width: 80px;
58
+ height: 80px;
59
+ }
60
+
61
+ .progress-circle svg {
62
+ width: 100%;
63
+ height: 100%;
64
+ transform: rotate(-90deg);
65
+ }
66
+
67
+ .progress-circle circle {
68
+ fill: none;
69
+ stroke-width: 6;
70
+ stroke-linecap: round;
71
+ }
72
+
73
+ .progress-bg {
74
+ stroke: rgba(148, 163, 184, 0.2);
75
+ }
76
+
77
+ .progress-bar-circle {
78
+ stroke: #4F46E5;
79
+ stroke-dasharray: 251.2;
80
+ stroke-dashoffset: 251.2;
81
+ transition: stroke-dashoffset 0.3s ease;
82
+ }
83
+
84
+ @keyframes cardFlip {
85
+ 0% { transform: scale(1); }
86
+ 50% { transform: scale(1.05); }
87
+ 100% { transform: scale(1); }
88
+ }
89
+
90
+ .card-animate {
91
+ animation: cardFlip 0.3s ease;
92
+ }
93
+ </style>
94
+ <script type="module" src="https://static.rocket.new/rocket-web.js?_cfg=https%3A%2F%2Ftriviavers2501back.builtwithrocket.new&_be=https%3A%2F%2Fapplication.rocket.new&_v=0.1.5"></script>
95
+ </head>
96
+ <body class="bg-background text-text-primary transition-theme">
97
+ <!-- Mobile Menu Overlay -->
98
+ <div id="mobileMenuOverlay" class="fixed inset-0 bg-black bg-opacity-50 z-40 hidden lg:hidden"></div>
99
+
100
+ <!-- Sidebar -->
101
+ <aside id="sidebar" class="fixed left-0 top-0 h-full w-80 bg-surface border-r border-border transform -translate-x-full lg:translate-x-0 transition-transform duration-300 z-50 lg:z-auto">
102
+ <div class="p-6 border-b border-border">
103
+ <!-- Logo -->
104
+ <div class="flex items-center space-x-3 mb-6">
105
+ <div class="w-10 h-10 bg-gradient-to-br from-primary to-secondary rounded-lg flex items-center justify-center">
106
+ <i class="fas fa-brain text-white text-lg"></i>
107
+ </div>
108
+ <div>
109
+ <h1 class="text-xl font-bold text-text-primary">TriviaVerse</h1>
110
+ <p class="text-sm text-text-secondary">Quiz Platform</p>
111
+ </div>
112
+ </div>
113
+
114
+ <!-- Close button for mobile -->
115
+ <button id="closeSidebar" class="absolute top-4 right-4 lg:hidden text-text-secondary hover:text-text-primary">
116
+ <i class="fas fa-times text-xl"></i>
117
+ </button>
118
+ </div>
119
+
120
+ <!-- Navigation -->
121
+ <nav class="p-6 space-y-2">
122
+ <a href="quiz_dashboard.html" class="flex items-center space-x-3 px-4 py-3 rounded-lg text-text-secondary hover:text-text-primary hover:bg-surface-hover transition-colors">
123
+ <i class="fas fa-home"></i>
124
+ <span>Dashboard</span>
125
+ </a>
126
+ <a href="active_quiz_interface.html" class="flex items-center space-x-3 px-4 py-3 rounded-lg text-text-secondary hover:text-text-primary hover:bg-surface-hover transition-colors">
127
+ <i class="fas fa-play-circle"></i>
128
+ <span>Active Quiz</span>
129
+ </a>
130
+ <a href="flashcards_learning_interface.html" class="flex items-center space-x-3 px-4 py-3 rounded-lg bg-primary text-white">
131
+ <i class="fas fa-layer-group"></i>
132
+ <span>Flashcards</span>
133
+ </a>
134
+ <a href="fact_game_challenge.html" class="flex items-center space-x-3 px-4 py-3 rounded-lg text-text-secondary hover:text-text-primary hover:bg-surface-hover transition-colors">
135
+ <i class="fas fa-gamepad"></i>
136
+ <span>Fact Game</span>
137
+ </a>
138
+ <a href="quiz_results_statistics.html" class="flex items-center space-x-3 px-4 py-3 rounded-lg text-text-secondary hover:text-text-primary hover:bg-surface-hover transition-colors">
139
+ <i class="fas fa-chart-bar"></i>
140
+ <span>Statistics</span>
141
+ </a>
142
+ <a href="topic_selection_browse.html" class="flex items-center space-x-3 px-4 py-3 rounded-lg text-text-secondary hover:text-text-primary hover:bg-surface-hover transition-colors">
143
+ <i class="fas fa-book"></i>
144
+ <span>Browse Topics</span>
145
+ </a>
146
+ <a href="settings_preferences.html" class="flex items-center space-x-3 px-4 py-3 rounded-lg text-text-secondary hover:text-text-primary hover:bg-surface-hover transition-colors">
147
+ <i class="fas fa-cog"></i>
148
+ <span>Settings</span>
149
+ </a>
150
+ </nav>
151
+
152
+ <!-- Game Settings -->
153
+ <div class="p-6 border-t border-border">
154
+ <h3 class="text-sm font-semibold text-text-primary mb-4">Study Settings</h3>
155
+
156
+ <!-- Language Switcher -->
157
+ <div class="mb-4">
158
+ <label class="block text-sm text-text-secondary mb-2">Language</label>
159
+ <select id="languageSelect" class="w-full bg-background border border-border rounded-lg px-3 py-2 text-text-primary focus:outline-none focus:ring-2 focus:ring-primary">
160
+ <option value="en">English</option>
161
+ <option value="te">తెలుగు (Telugu)</option>
162
+ <option value="hi">हिंदी (Hindi)</option>
163
+ <option value="kn">ಕನ್ನಡ (Kannada)</option>
164
+ </select>
165
+ </div>
166
+
167
+ <!-- Audio Toggle -->
168
+ <div class="flex items-center justify-between mb-4">
169
+ <span class="text-sm text-text-secondary">Audio Pronunciation</span>
170
+ <button id="audioToggle" class="relative inline-flex h-6 w-11 items-center rounded-full bg-primary transition-colors">
171
+ <span class="inline-block h-4 w-4 transform rounded-full bg-white transition-transform translate-x-6"></span>
172
+ </button>
173
+ </div>
174
+
175
+ <!-- Theme Toggle -->
176
+ <div class="flex items-center justify-between">
177
+ <span class="text-sm text-text-secondary">Dark Theme</span>
178
+ <button id="themeToggle" class="relative inline-flex h-6 w-11 items-center rounded-full bg-primary transition-colors">
179
+ <span class="inline-block h-4 w-4 transform rounded-full bg-white transition-transform translate-x-6"></span>
180
+ </button>
181
+ </div>
182
+ </div>
183
+ </aside>
184
+
185
+ <!-- Main Content -->
186
+ <main class="lg:ml-80 min-h-screen">
187
+ <!-- Header -->
188
+ <header class="bg-surface border-b border-border p-4 lg:p-6">
189
+ <div class="flex items-center justify-between">
190
+ <!-- Mobile Menu Button -->
191
+ <button id="mobileMenuBtn" class="lg:hidden text-text-primary hover:text-primary">
192
+ <i class="fas fa-bars text-xl"></i>
193
+ </button>
194
+
195
+ <!-- Title -->
196
+ <div class="flex-1 lg:flex-none">
197
+ <h2 class="text-2xl font-bold text-text-primary">Flashcards Learning</h2>
198
+ <p class="text-text-secondary mt-1">Master topics through spaced repetition</p>
199
+ </div>
200
+
201
+ <!-- Session Progress -->
202
+ <div class="hidden lg:flex items-center space-x-4">
203
+ <div class="progress-circle">
204
+ <svg>
205
+ <circle class="progress-bg" cx="40" cy="40" r="36"/>
206
+ <circle class="progress-bar-circle" cx="40" cy="40" r="36" style="stroke-dashoffset: 125.6;"/>
207
+ </svg>
208
+ <div class="absolute inset-0 flex items-center justify-center">
209
+ <span class="text-sm font-semibold text-text-primary" id="progressText">5/10</span>
210
+ </div>
211
+ </div>
212
+ <div>
213
+ <p class="text-sm font-medium text-text-primary">Session Progress</p>
214
+ <p class="text-xs text-text-secondary">50% Complete</p>
215
+ </div>
216
+ </div>
217
+ </div>
218
+ </header>
219
+
220
+ <!-- Study Interface -->
221
+ <div class="p-4 lg:p-6 max-w-4xl mx-auto">
222
+ <!-- Study Stats -->
223
+ <div class="grid grid-cols-1 md:grid-cols-3 gap-4 mb-6">
224
+ <div class="card p-4">
225
+ <div class="flex items-center justify-between">
226
+ <div>
227
+ <p class="text-text-secondary text-sm">Cards Remaining</p>
228
+ <p class="text-2xl font-bold text-primary" id="cardsRemaining">5</p>
229
+ </div>
230
+ <div class="w-10 h-10 bg-primary-100 rounded-lg flex items-center justify-center">
231
+ <i class="fas fa-layer-group text-primary"></i>
232
+ </div>
233
+ </div>
234
+ </div>
235
+
236
+ <div class="card p-4">
237
+ <div class="flex items-center justify-between">
238
+ <div>
239
+ <p class="text-text-secondary text-sm">Mastery Level</p>
240
+ <p class="text-2xl font-bold text-success" id="masteryLevel">85%</p>
241
+ </div>
242
+ <div class="w-10 h-10 bg-success-100 rounded-lg flex items-center justify-center">
243
+ <i class="fas fa-brain text-success"></i>
244
+ </div>
245
+ </div>
246
+ </div>
247
+
248
+ <div class="card p-4">
249
+ <div class="flex items-center justify-between">
250
+ <div>
251
+ <p class="text-text-secondary text-sm">Study Streak</p>
252
+ <p class="text-2xl font-bold text-accent" id="studyStreak">7</p>
253
+ </div>
254
+ <div class="w-10 h-10 bg-accent-100 rounded-lg flex items-center justify-center">
255
+ <i class="fas fa-fire text-accent"></i>
256
+ </div>
257
+ </div>
258
+ </div>
259
+ </div>
260
+
261
+ <!-- Flashcard -->
262
+ <div class="card p-8 mb-6 flashcard" id="flashcard">
263
+ <div class="flashcard-inner">
264
+ <!-- Front of card -->
265
+ <div class="flashcard-front bg-surface border border-border">
266
+ <div class="mb-4">
267
+ <span class="inline-block bg-primary-100 text-primary text-xs px-3 py-1 rounded-full mb-4">Python Programming</span>
268
+ </div>
269
+ <h3 class="text-xl lg:text-2xl font-semibold text-text-primary mb-4 text-center" id="cardQuestion">
270
+ What is the difference between a list and a tuple in Python?
271
+ </h3>
272
+ <p class="text-text-secondary text-center mb-6">
273
+ <i class="fas fa-mouse-pointer mr-2"></i>
274
+ Click to reveal answer
275
+ </p>
276
+ <div class="flex items-center justify-center space-x-4">
277
+ <button id="audioBtn" class="btn bg-secondary-100 text-secondary px-4 py-2 rounded-lg hover:bg-secondary-50">
278
+ <i class="fas fa-volume-up mr-2"></i>
279
+ Pronounce
280
+ </button>
281
+ <button id="bookmarkBtn" class="btn bg-accent-100 text-accent px-4 py-2 rounded-lg hover:bg-accent-50">
282
+ <i class="far fa-bookmark mr-2"></i>
283
+ Bookmark
284
+ </button>
285
+ </div>
286
+ </div>
287
+
288
+ <!-- Back of card -->
289
+ <div class="flashcard-back text-white">
290
+ <h3 class="text-xl font-semibold mb-4 text-center">Answer</h3>
291
+ <div class="text-left space-y-3" id="cardAnswer">
292
+ <p class="leading-relaxed">
293
+ <strong>Lists:</strong> Mutable, ordered collections that can be modified after creation.
294
+ Use square brackets []. Example: my_list = [1, 2, 3]
295
+ </p>
296
+ <p class="leading-relaxed">
297
+ <strong>Tuples:</strong> Immutable, ordered collections that cannot be modified after creation.
298
+ Use parentheses (). Example: my_tuple = (1, 2, 3)
299
+ </p>
300
+ <p class="text-sm opacity-90 mt-4">
301
+ <i class="fas fa-lightbulb mr-2"></i>
302
+ <strong>Memory tip:</strong> Think "T" for Tuple = "T" for immutable (can't change)
303
+ </p>
304
+ </div>
305
+ </div>
306
+ </div>
307
+ </div>
308
+
309
+ <!-- Difficulty Rating -->
310
+ <div class="text-center mb-6">
311
+ <p class="text-text-secondary mb-4">How difficult was this card?</p>
312
+ <div class="flex justify-center space-x-4">
313
+ <button class="difficulty-btn btn bg-success text-white px-6 py-3 rounded-lg hover:bg-green-700" data-difficulty="easy">
314
+ <i class="fas fa-smile mr-2"></i>
315
+ Easy
316
+ </button>
317
+ <button class="difficulty-btn btn bg-warning text-white px-6 py-3 rounded-lg hover:bg-warning-600" data-difficulty="medium">
318
+ <i class="fas fa-meh mr-2"></i>
319
+ Medium
320
+ </button>
321
+ <button class="difficulty-btn btn bg-error text-white px-6 py-3 rounded-lg hover:bg-error" data-difficulty="hard">
322
+ <i class="fas fa-frown mr-2"></i>
323
+ Hard
324
+ </button>
325
+ </div>
326
+ </div>
327
+
328
+ <!-- Navigation Controls -->
329
+ <div class="flex justify-between items-center">
330
+ <button id="prevCard" class="btn btn-secondary px-6 py-3 rounded-lg" disabled>
331
+ <i class="fas fa-arrow-left mr-2"></i>
332
+ Previous
333
+ </button>
334
+
335
+ <div class="flex space-x-3">
336
+ <button id="flipCard" class="btn btn-primary px-6 py-3 rounded-lg">
337
+ <i class="fas fa-sync-alt mr-2"></i>
338
+ Flip Card
339
+ </button>
340
+ <button id="resetCard" class="btn bg-gray-600 text-white px-6 py-3 rounded-lg hover:bg-gray-400">
341
+ <i class="fas fa-redo mr-2"></i>
342
+ Reset
343
+ </button>
344
+ </div>
345
+
346
+ <button id="nextCard" class="btn btn-primary px-6 py-3 rounded-lg">
347
+ Next
348
+ <i class="fas fa-arrow-right ml-2"></i>
349
+ </button>
350
+ </div>
351
+
352
+ <!-- Quick Actions -->
353
+ <div class="mt-8 grid grid-cols-1 md:grid-cols-2 gap-4">
354
+ <div class="card p-4">
355
+ <h4 class="text-lg font-semibold text-text-primary mb-3">Study Options</h4>
356
+ <div class="space-y-2">
357
+ <button class="w-full text-left px-3 py-2 rounded text-text-secondary hover:text-text-primary hover:bg-surface-hover transition-colors">
358
+ <i class="fas fa-random mr-2"></i>
359
+ Shuffle Deck
360
+ </button>
361
+ <button class="w-full text-left px-3 py-2 rounded text-text-secondary hover:text-text-primary hover:bg-surface-hover transition-colors">
362
+ <i class="fas fa-bookmark mr-2"></i>
363
+ Review Bookmarked
364
+ </button>
365
+ <button class="w-full text-left px-3 py-2 rounded text-text-secondary hover:text-text-primary hover:bg-surface-hover transition-colors">
366
+ <i class="fas fa-clock mr-2"></i>
367
+ Timed Practice
368
+ </button>
369
+ </div>
370
+ </div>
371
+
372
+ <div class="card p-4">
373
+ <h4 class="text-lg font-semibold text-text-primary mb-3">Quick Switch</h4>
374
+ <div class="space-y-2">
375
+ <a href="active_quiz_interface.html" class="block px-3 py-2 rounded text-text-secondary hover:text-text-primary hover:bg-surface-hover transition-colors">
376
+ <i class="fas fa-play-circle mr-2"></i>
377
+ Switch to Quiz Mode
378
+ </a>
379
+ <a href="fact_game_challenge.html" class="block px-3 py-2 rounded text-text-secondary hover:text-text-primary hover:bg-surface-hover transition-colors">
380
+ <i class="fas fa-gamepad mr-2"></i>
381
+ Try Fact Game
382
+ </a>
383
+ <a href="quiz_results_statistics.html" class="block px-3 py-2 rounded text-text-secondary hover:text-text-primary hover:bg-surface-hover transition-colors">
384
+ <i class="fas fa-chart-bar mr-2"></i>
385
+ View Analytics
386
+ </a>
387
+ </div>
388
+ </div>
389
+ </div>
390
+ </div>
391
+ </main>
392
+
393
+ <script>
394
+ // Sample flashcard data
395
+ const flashcards = [
396
+ {
397
+ id: 1,
398
+ topic: "Python Programming",
399
+ question: "What is the difference between a list and a tuple in Python?",
400
+ answer: `<p class="leading-relaxed"><strong>Lists:</strong> Mutable, ordered collections that can be modified after creation. Use square brackets []. Example: my_list = [1, 2, 3]</p><p class="leading-relaxed"><strong>Tuples:</strong> Immutable, ordered collections that cannot be modified after creation. Use parentheses (). Example: my_tuple = (1, 2, 3)</p><p class="text-sm opacity-90 mt-4"><i class="fas fa-lightbulb mr-2"></i><strong>Memory tip:</strong> Think "T" for Tuple = "T" for immutable (can't change)</p>`,
401
+ difficulty: null,
402
+ bookmarked: false
403
+ },
404
+ {
405
+ id: 2,
406
+ topic: "JavaScript",
407
+ question: "What is the difference between 'let', 'const', and 'var' in JavaScript?",
408
+ answer: `<p class="leading-relaxed"><strong>var:</strong> Function-scoped, can be redeclared and updated. Hoisted to the top.</p><p class="leading-relaxed"><strong>let:</strong> Block-scoped, can be updated but not redeclared in the same scope.</p><p class="leading-relaxed"><strong>const:</strong> Block-scoped, cannot be updated or redeclared. Must be initialized.</p><p class="text-sm opacity-90 mt-4"><i class="fas fa-lightbulb mr-2"></i><strong>Best practice:</strong> Use const by default, let when you need to reassign, avoid var.</p>`,
409
+ difficulty: null,
410
+ bookmarked: false
411
+ },
412
+ {
413
+ id: 3,
414
+ topic: "General Science",
415
+ question: "What is photosynthesis and why is it important?",
416
+ answer: `<p class="leading-relaxed"><strong>Definition:</strong> The process by which plants convert sunlight, carbon dioxide, and water into glucose and oxygen.</p><p class="leading-relaxed"><strong>Formula:</strong> 6CO₂ + 6H₂O + light energy → C₆H₁₂O₆ + 6O₂</p><p class="leading-relaxed"><strong>Importance:</strong> Produces oxygen for life on Earth and forms the base of most food chains.</p><p class="text-sm opacity-90 mt-4"><i class="fas fa-lightbulb mr-2"></i><strong>Fun fact:</strong> Photosynthesis occurs in chloroplasts, the "green engines" of plants!</p>`,
417
+ difficulty: null,
418
+ bookmarked: false
419
+ },
420
+ {
421
+ id: 4,
422
+ topic: "World History",
423
+ question: "What were the main causes of World War I?",
424
+ answer: `<p class="leading-relaxed"><strong>M.A.I.N. Causes:</strong></p><p class="leading-relaxed"><strong>Militarism:</strong> Arms race between European powers</p><p class="leading-relaxed"><strong>Alliances:</strong> Complex web of treaties (Triple Alliance vs Triple Entente)</p><p class="leading-relaxed"><strong>Imperialism:</strong> Competition for colonies and resources</p><p class="leading-relaxed"><strong>Nationalism:</strong> Ethnic tensions, especially in the Balkans</p><p class="text-sm opacity-90 mt-4"><i class="fas fa-lightbulb mr-2"></i><strong>Trigger:</strong> Assassination of Archduke Franz Ferdinand in 1914</p>`,
425
+ difficulty: null,
426
+ bookmarked: false
427
+ },
428
+ {
429
+ id: 5,
430
+ topic: "Mathematics",
431
+ question: "What is the Pythagorean Theorem and how is it used?",
432
+ answer: `<p class="leading-relaxed"><strong>Theorem:</strong> In a right triangle, a² + b² = c² (where c is the hypotenuse)</p><p class="leading-relaxed"><strong>Applications:</strong> Finding distances, navigation, construction, computer graphics</p><p class="leading-relaxed"><strong>Example:</strong> If sides are 3 and 4, hypotenuse = √(3² + 4²) = √25 = 5</p><p class="text-sm opacity-90 mt-4"><i class="fas fa-lightbulb mr-2"></i><strong>Memory trick:</strong> 3-4-5 and 5-12-13 are common Pythagorean triples!</p>`,
433
+ difficulty: null,
434
+ bookmarked: false
435
+ }
436
+ ];
437
+
438
+ let currentCardIndex = 0;
439
+ let isFlipped = false;
440
+ let cardsStudied = 0;
441
+ let correctAnswers = 0;
442
+
443
+ // DOM elements
444
+ const flashcard = document.getElementById('flashcard');
445
+ const cardQuestion = document.getElementById('cardQuestion');
446
+ const cardAnswer = document.getElementById('cardAnswer');
447
+ const flipCard = document.getElementById('flipCard');
448
+ const resetCard = document.getElementById('resetCard');
449
+ const nextCard = document.getElementById('nextCard');
450
+ const prevCard = document.getElementById('prevCard');
451
+ const difficultyBtns = document.querySelectorAll('.difficulty-btn');
452
+ const audioBtn = document.getElementById('audioBtn');
453
+ const bookmarkBtn = document.getElementById('bookmarkBtn');
454
+ const cardsRemaining = document.getElementById('cardsRemaining');
455
+ const masteryLevel = document.getElementById('masteryLevel');
456
+ const studyStreak = document.getElementById('studyStreak');
457
+ const progressText = document.getElementById('progressText');
458
+
459
+ // Mobile menu functionality
460
+ const mobileMenuBtn = document.getElementById('mobileMenuBtn');
461
+ const sidebar = document.getElementById('sidebar');
462
+ const mobileMenuOverlay = document.getElementById('mobileMenuOverlay');
463
+ const closeSidebar = document.getElementById('closeSidebar');
464
+
465
+ // Initialize
466
+ function init() {
467
+ loadCard();
468
+ updateProgress();
469
+ updateStats();
470
+ }
471
+
472
+ // Load current card
473
+ function loadCard() {
474
+ const card = flashcards[currentCardIndex];
475
+ const topicBadge = flashcard.querySelector('.flashcard-front span');
476
+
477
+ topicBadge.textContent = card.topic;
478
+ cardQuestion.textContent = card.question;
479
+ cardAnswer.innerHTML = card.answer;
480
+
481
+ // Update bookmark button
482
+ bookmarkBtn.innerHTML = card.bookmarked
483
+ ? '<i class="fas fa-bookmark mr-2"></i>Bookmarked'
484
+ : '<i class="far fa-bookmark mr-2"></i>Bookmark';
485
+
486
+ // Reset flip state
487
+ isFlipped = false;
488
+ flashcard.classList.remove('flipped');
489
+
490
+ // Update navigation buttons
491
+ prevCard.disabled = currentCardIndex === 0;
492
+ nextCard.disabled = currentCardIndex === flashcards.length - 1;
493
+
494
+ // Add animation
495
+ flashcard.classList.add('card-animate');
496
+ setTimeout(() => flashcard.classList.remove('card-animate'), 300);
497
+ }
498
+
499
+ // Update progress indicators
500
+ function updateProgress() {
501
+ const progress = ((currentCardIndex + 1) / flashcards.length) * 100;
502
+ const circumference = 2 * Math.PI * 36;
503
+ const offset = circumference - (progress / 100) * circumference;
504
+
505
+ document.querySelector('.progress-bar-circle').style.strokeDashoffset = offset;
506
+ progressText.textContent = `${currentCardIndex + 1}/${flashcards.length}`;
507
+ cardsRemaining.textContent = flashcards.length - currentCardIndex - 1;
508
+ }
509
+
510
+ // Update statistics
511
+ function updateStats() {
512
+ const completedCards = flashcards.filter(card => card.difficulty !== null).length;
513
+ const mastery = completedCards > 0 ? Math.round((correctAnswers / completedCards) * 100) : 85;
514
+
515
+ masteryLevel.textContent = `${mastery}%`;
516
+ studyStreak.textContent = Math.floor(Math.random() * 10) + 5; // Simulated streak
517
+ }
518
+
519
+ // Flip card functionality
520
+ function handleFlip() {
521
+ isFlipped = !isFlipped;
522
+ flashcard.classList.toggle('flipped');
523
+ }
524
+
525
+ // Handle difficulty rating
526
+ function handleDifficulty(difficulty) {
527
+ flashcards[currentCardIndex].difficulty = difficulty;
528
+
529
+ if (difficulty === 'easy') {
530
+ correctAnswers++;
531
+ }
532
+
533
+ cardsStudied++;
534
+ updateStats();
535
+
536
+ // Auto-advance to next card
537
+ setTimeout(() => {
538
+ if (currentCardIndex < flashcards.length - 1) {
539
+ currentCardIndex++;
540
+ loadCard();
541
+ updateProgress();
542
+ }
543
+ }, 500);
544
+ }
545
+
546
+ // Handle navigation
547
+ function handleNext() {
548
+ if (currentCardIndex < flashcards.length - 1) {
549
+ currentCardIndex++;
550
+ loadCard();
551
+ updateProgress();
552
+ }
553
+ }
554
+
555
+ function handlePrev() {
556
+ if (currentCardIndex > 0) {
557
+ currentCardIndex--;
558
+ loadCard();
559
+ updateProgress();
560
+ }
561
+ }
562
+
563
+ // Handle bookmark
564
+ function handleBookmark() {
565
+ flashcards[currentCardIndex].bookmarked = !flashcards[currentCardIndex].bookmarked;
566
+ const card = flashcards[currentCardIndex];
567
+
568
+ bookmarkBtn.innerHTML = card.bookmarked
569
+ ? '<i class="fas fa-bookmark mr-2"></i>Bookmarked'
570
+ : '<i class="far fa-bookmark mr-2"></i>Bookmark';
571
+
572
+ bookmarkBtn.classList.add('bg-accent', 'text-white');
573
+ setTimeout(() => {
574
+ bookmarkBtn.classList.remove('bg-accent', 'text-white');
575
+ }, 200);
576
+ }
577
+
578
+ // Handle audio (simulated)
579
+ function handleAudio() {
580
+ audioBtn.innerHTML = '<i class="fas fa-volume-up mr-2"></i>Playing...';
581
+ audioBtn.disabled = true;
582
+
583
+ // Simulate audio playback
584
+ setTimeout(() => {
585
+ audioBtn.innerHTML = '<i class="fas fa-volume-up mr-2"></i>Pronounce';
586
+ audioBtn.disabled = false;
587
+ }, 2000);
588
+ }
589
+
590
+ // Event listeners
591
+ flashcard.addEventListener('click', handleFlip);
592
+ flipCard.addEventListener('click', handleFlip);
593
+ resetCard.addEventListener('click', () => {
594
+ isFlipped = false;
595
+ flashcard.classList.remove('flipped');
596
+ });
597
+ nextCard.addEventListener('click', handleNext);
598
+ prevCard.addEventListener('click', handlePrev);
599
+ bookmarkBtn.addEventListener('click', (e) => {
600
+ e.stopPropagation();
601
+ handleBookmark();
602
+ });
603
+ audioBtn.addEventListener('click', (e) => {
604
+ e.stopPropagation();
605
+ handleAudio();
606
+ });
607
+
608
+ // Difficulty button events
609
+ difficultyBtns.forEach(btn => {
610
+ btn.addEventListener('click', () => {
611
+ const difficulty = btn.dataset.difficulty;
612
+ handleDifficulty(difficulty);
613
+ });
614
+ });
615
+
616
+ // Mobile menu events
617
+ mobileMenuBtn.addEventListener('click', () => {
618
+ sidebar.classList.remove('-translate-x-full');
619
+ mobileMenuOverlay.classList.remove('hidden');
620
+ });
621
+
622
+ closeSidebar.addEventListener('click', () => {
623
+ sidebar.classList.add('-translate-x-full');
624
+ mobileMenuOverlay.classList.add('hidden');
625
+ });
626
+
627
+ mobileMenuOverlay.addEventListener('click', () => {
628
+ sidebar.classList.add('-translate-x-full');
629
+ mobileMenuOverlay.classList.add('hidden');
630
+ });
631
+
632
+ // Theme toggle functionality
633
+ const themeToggle = document.getElementById('themeToggle');
634
+ const html = document.documentElement;
635
+
636
+ themeToggle.addEventListener('click', () => {
637
+ html.classList.toggle('dark');
638
+ const isDark = html.classList.contains('dark');
639
+
640
+ const toggleSpan = themeToggle.querySelector('span');
641
+ if (isDark) {
642
+ toggleSpan.classList.add('translate-x-6');
643
+ toggleSpan.classList.remove('translate-x-1');
644
+ } else {
645
+ toggleSpan.classList.add('translate-x-1');
646
+ toggleSpan.classList.remove('translate-x-6');
647
+ }
648
+
649
+ localStorage.setItem('theme', isDark ? 'dark' : 'light');
650
+ });
651
+
652
+ // Audio toggle functionality
653
+ const audioToggle = document.getElementById('audioToggle');
654
+ let audioEnabled = true;
655
+
656
+ audioToggle.addEventListener('click', () => {
657
+ audioEnabled = !audioEnabled;
658
+ const toggleSpan = audioToggle.querySelector('span');
659
+
660
+ if (audioEnabled) {
661
+ toggleSpan.classList.add('translate-x-6');
662
+ toggleSpan.classList.remove('translate-x-1');
663
+ audioToggle.classList.add('bg-primary');
664
+ audioToggle.classList.remove('bg-gray-300');
665
+ } else {
666
+ toggleSpan.classList.add('translate-x-1');
667
+ toggleSpan.classList.remove('translate-x-6');
668
+ audioToggle.classList.remove('bg-primary');
669
+ audioToggle.classList.add('bg-gray-300');
670
+ }
671
+ });
672
+
673
+ // Language selection
674
+ const languageSelect = document.getElementById('languageSelect');
675
+ languageSelect.addEventListener('change', (e) => {
676
+ localStorage.setItem('selectedLanguage', e.target.value);
677
+ console.log('Language changed to:', e.target.value);
678
+ });
679
+
680
+ // Keyboard shortcuts
681
+ document.addEventListener('keydown', (e) => {
682
+ switch(e.key) {
683
+ case ' ':
684
+ case 'Enter':
685
+ e.preventDefault();
686
+ handleFlip();
687
+ break;
688
+ case 'ArrowLeft':
689
+ e.preventDefault();
690
+ handlePrev();
691
+ break;
692
+ case 'ArrowRight':
693
+ e.preventDefault();
694
+ handleNext();
695
+ break;
696
+ case '1':
697
+ e.preventDefault();
698
+ handleDifficulty('easy');
699
+ break;
700
+ case '2':
701
+ e.preventDefault();
702
+ handleDifficulty('medium');
703
+ break;
704
+ case '3':
705
+ e.preventDefault();
706
+ handleDifficulty('hard');
707
+ break;
708
+ case 'b':
709
+ e.preventDefault();
710
+ handleBookmark();
711
+ break;
712
+ }
713
+ });
714
+
715
+ // Load saved preferences
716
+ const savedTheme = localStorage.getItem('theme');
717
+ if (savedTheme) {
718
+ html.classList.toggle('dark', savedTheme === 'dark');
719
+ const toggleSpan = themeToggle.querySelector('span');
720
+ if (savedTheme === 'dark') {
721
+ toggleSpan.classList.add('translate-x-6');
722
+ toggleSpan.classList.remove('translate-x-1');
723
+ }
724
+ }
725
+
726
+ const savedLanguage = localStorage.getItem('selectedLanguage');
727
+ if (savedLanguage) {
728
+ languageSelect.value = savedLanguage;
729
+ }
730
+
731
+ // Initialize the app
732
+ init();
733
+ </script>
734
+ </body>
735
+ </html>
pages/quiz_dashboard.html ADDED
@@ -0,0 +1,409 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en" class="dark">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>Quiz Dashboard - TriviaVerse Quiz</title>
7
+ <link rel="stylesheet" href="../css/main.css" />
8
+ <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" rel="stylesheet" />
9
+ <script type="module" src="https://static.rocket.new/rocket-web.js?_cfg=https%3A%2F%2Ftriviavers2501back.builtwithrocket.new&_be=https%3A%2F%2Fapplication.rocket.new&_v=0.1.5"></script>
10
+ </head>
11
+ <body class="bg-background text-text-primary transition-theme">
12
+ <!-- Mobile Menu Overlay -->
13
+ <div id="mobileMenuOverlay" class="fixed inset-0 bg-black bg-opacity-50 z-40 hidden lg:hidden"></div>
14
+
15
+ <!-- Sidebar -->
16
+ <aside id="sidebar" class="fixed left-0 top-0 h-full w-80 bg-surface border-r border-border transform -translate-x-full lg:translate-x-0 transition-transform duration-300 z-50 lg:z-auto">
17
+ <div class="p-6 border-b border-border">
18
+ <!-- Logo -->
19
+ <div class="flex items-center space-x-3 mb-6">
20
+ <div class="w-10 h-10 bg-gradient-to-br from-primary to-secondary rounded-lg flex items-center justify-center">
21
+ <i class="fas fa-brain text-white text-lg"></i>
22
+ </div>
23
+ <div>
24
+ <h1 class="text-xl font-bold text-text-primary">TriviaVerse</h1>
25
+ <p class="text-sm text-text-secondary">Quiz Platform</p>
26
+ </div>
27
+ </div>
28
+
29
+ <!-- Close button for mobile -->
30
+ <button id="closeSidebar" class="absolute top-4 right-4 lg:hidden text-text-secondary hover:text-text-primary">
31
+ <i class="fas fa-times text-xl"></i>
32
+ </button>
33
+ </div>
34
+
35
+ <!-- Navigation -->
36
+ <nav class="p-6 space-y-2">
37
+ <a href="quiz_dashboard.html" class="flex items-center space-x-3 px-4 py-3 rounded-lg bg-primary text-white">
38
+ <i class="fas fa-home"></i>
39
+ <span>Dashboard</span>
40
+ </a>
41
+ <a href="active_quiz_interface.html" class="flex items-center space-x-3 px-4 py-3 rounded-lg text-text-secondary hover:text-text-primary hover:bg-surface-hover transition-colors">
42
+ <i class="fas fa-play-circle"></i>
43
+ <span>Active Quiz</span>
44
+ </a>
45
+ <a href="quiz_results_statistics.html" class="flex items-center space-x-3 px-4 py-3 rounded-lg text-text-secondary hover:text-text-primary hover:bg-surface-hover transition-colors">
46
+ <i class="fas fa-chart-bar"></i>
47
+ <span>Statistics</span>
48
+ </a>
49
+ <a href="topic_selection_browse.html" class="flex items-center space-x-3 px-4 py-3 rounded-lg text-text-secondary hover:text-text-primary hover:bg-surface-hover transition-colors">
50
+ <i class="fas fa-book"></i>
51
+ <span>Browse Topics</span>
52
+ </a>
53
+ <a href="settings_preferences.html" class="flex items-center space-x-3 px-4 py-3 rounded-lg text-text-secondary hover:text-text-primary hover:bg-surface-hover transition-colors">
54
+ <i class="fas fa-cog"></i>
55
+ <span>Settings</span>
56
+ </a>
57
+ </nav>
58
+
59
+ <!-- Game Settings -->
60
+ <div class="p-6 border-t border-border">
61
+ <h3 class="text-sm font-semibold text-text-primary mb-4">Game Settings</h3>
62
+
63
+ <!-- Language Switcher -->
64
+ <div class="mb-4">
65
+ <label class="block text-sm text-text-secondary mb-2">Language</label>
66
+ <select id="languageSelect" class="w-full bg-background border border-border rounded-lg px-3 py-2 text-text-primary focus:outline-none focus:ring-2 focus:ring-primary">
67
+ <option value="en">English</option>
68
+ <option value="te">తెలుగు (Telugu)</option>
69
+ <option value="hi">हिंदी (Hindi)</option>
70
+ <option value="kn">ಕನ್ನಡ (Kannada)</option>
71
+ </select>
72
+ </div>
73
+
74
+ <!-- Theme Toggle -->
75
+ <div class="flex items-center justify-between">
76
+ <span class="text-sm text-text-secondary">Dark Theme</span>
77
+ <button id="themeToggle" class="relative inline-flex h-6 w-11 items-center rounded-full bg-primary transition-colors">
78
+ <span class="inline-block h-4 w-4 transform rounded-full bg-white transition-transform translate-x-6"></span>
79
+ </button>
80
+ </div>
81
+ </div>
82
+ </aside>
83
+
84
+ <!-- Main Content -->
85
+ <main class="lg:ml-80 min-h-screen">
86
+ <!-- Header -->
87
+ <header class="bg-surface border-b border-border p-4 lg:p-6">
88
+ <div class="flex items-center justify-between">
89
+ <!-- Mobile Menu Button -->
90
+ <button id="mobileMenuBtn" class="lg:hidden text-text-primary hover:text-primary">
91
+ <i class="fas fa-bars text-xl"></i>
92
+ </button>
93
+
94
+ <!-- Welcome Message -->
95
+ <div class="flex-1 lg:flex-none">
96
+ <h2 class="text-2xl font-bold text-text-primary">Welcome back, Quiz Master!</h2>
97
+ <p class="text-text-secondary mt-1">Ready to challenge your knowledge today?</p>
98
+ </div>
99
+
100
+ <!-- User Avatar -->
101
+ <div class="hidden lg:flex items-center space-x-3">
102
+ <img src="https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?q=80&w=2940&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D" alt="User Avatar" class="w-10 h-10 rounded-full object-cover" onerror="this.src='https://images.unsplash.com/photo-1584824486509-112e4181ff6b?q=80&w=2940&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D'; this.onerror=null;" />
103
+ <div>
104
+ <p class="text-sm font-medium text-text-primary">John Doe</p>
105
+ <p class="text-xs text-text-secondary">Level 5 Quizzer</p>
106
+ </div>
107
+ </div>
108
+ </div>
109
+ </header>
110
+
111
+ <!-- Dashboard Content -->
112
+ <div class="p-4 lg:p-6 space-y-6">
113
+ <!-- Quick Stats -->
114
+ <div class="grid grid-cols-1 md:grid-cols-3 gap-4">
115
+ <!-- Current Streak -->
116
+ <div class="card p-6">
117
+ <div class="flex items-center justify-between">
118
+ <div>
119
+ <p class="text-text-secondary text-sm">Current Streak</p>
120
+ <p class="text-3xl font-bold text-primary">12</p>
121
+ </div>
122
+ <div class="w-12 h-12 bg-primary-100 rounded-lg flex items-center justify-center">
123
+ <i class="fas fa-fire text-primary text-xl"></i>
124
+ </div>
125
+ </div>
126
+ <div class="mt-4">
127
+ <div class="progress-bar h-2">
128
+ <div class="progress-fill" style="width: 80%"></div>
129
+ </div>
130
+ <p class="text-xs text-text-secondary mt-1">8 more to beat your record!</p>
131
+ </div>
132
+ </div>
133
+
134
+ <!-- Best Streak -->
135
+ <div class="card p-6">
136
+ <div class="flex items-center justify-between">
137
+ <div>
138
+ <p class="text-text-secondary text-sm">Best Streak</p>
139
+ <p class="text-3xl font-bold text-accent">20</p>
140
+ </div>
141
+ <div class="w-12 h-12 bg-accent-100 rounded-lg flex items-center justify-center">
142
+ <i class="fas fa-trophy text-accent text-xl"></i>
143
+ </div>
144
+ </div>
145
+ <div class="mt-4">
146
+ <p class="text-xs text-success">Personal Best!</p>
147
+ </div>
148
+ </div>
149
+
150
+ <!-- Recent Performance -->
151
+ <div class="card p-6">
152
+ <div class="flex items-center justify-between">
153
+ <div>
154
+ <p class="text-text-secondary text-sm">Avg. Score</p>
155
+ <p class="text-3xl font-bold text-secondary">85%</p>
156
+ </div>
157
+ <div class="w-12 h-12 bg-secondary-100 rounded-lg flex items-center justify-center">
158
+ <i class="fas fa-chart-line text-secondary text-xl"></i>
159
+ </div>
160
+ </div>
161
+ <div class="mt-4">
162
+ <p class="text-xs text-success">+5% from last week</p>
163
+ </div>
164
+ </div>
165
+ </div>
166
+
167
+ <!-- Game Mode Selection -->
168
+ <div class="card p-6">
169
+ <h3 class="text-xl font-semibold text-text-primary mb-4">Choose Your Game Mode</h3>
170
+ <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4">
171
+ <!-- Multiple Choice Quiz -->
172
+ <div class="border-2 border-primary bg-primary-50 rounded-lg p-6 cursor-pointer hover:shadow-lg transition-all">
173
+ <div class="text-center">
174
+ <div class="w-16 h-16 bg-primary rounded-full flex items-center justify-center mx-auto mb-4">
175
+ <i class="fas fa-list-ul text-white text-2xl"></i>
176
+ </div>
177
+ <h4 class="text-lg font-semibold text-primary mb-2">Multiple Choice</h4>
178
+ <p class="text-sm text-text-secondary">Classic quiz format with 4 options</p>
179
+ <div class="mt-4">
180
+ <span class="inline-block bg-primary text-white text-xs px-2 py-1 rounded-full">Most Popular</span>
181
+ </div>
182
+ </div>
183
+ </div>
184
+
185
+ <!-- True/False -->
186
+ <div class="border border-border rounded-lg p-6 cursor-pointer hover:shadow-lg transition-all hover:border-secondary">
187
+ <div class="text-center">
188
+ <div class="w-16 h-16 bg-secondary-100 rounded-full flex items-center justify-center mx-auto mb-4">
189
+ <i class="fas fa-check-double text-secondary text-2xl"></i>
190
+ </div>
191
+ <h4 class="text-lg font-semibold text-text-primary mb-2">True/False</h4>
192
+ <p class="text-sm text-text-secondary">Quick binary choice questions</p>
193
+ <div class="mt-4">
194
+ <span class="inline-block bg-secondary-100 text-secondary text-xs px-2 py-1 rounded-full">Coming Soon</span>
195
+ </div>
196
+ </div>
197
+ </div>
198
+
199
+ <!-- Timed Challenge -->
200
+ <div class="border border-border rounded-lg p-6 cursor-pointer hover:shadow-lg transition-all hover:border-accent">
201
+ <div class="text-center">
202
+ <div class="w-16 h-16 bg-accent-100 rounded-full flex items-center justify-center mx-auto mb-4">
203
+ <i class="fas fa-stopwatch text-accent text-2xl"></i>
204
+ </div>
205
+ <h4 class="text-lg font-semibold text-text-primary mb-2">Timed Challenge</h4>
206
+ <p class="text-sm text-text-secondary">Race against the clock</p>
207
+ <div class="mt-4">
208
+ <span class="inline-block bg-accent-100 text-accent text-xs px-2 py-1 rounded-full">Coming Soon</span>
209
+ </div>
210
+ </div>
211
+ </div>
212
+ </div>
213
+ </div>
214
+
215
+ <!-- Topic Selection -->
216
+ <div class="card p-6">
217
+ <h3 class="text-xl font-semibold text-text-primary mb-4">Select Your Topic</h3>
218
+ <div class="grid grid-cols-1 lg:grid-cols-2 gap-6">
219
+ <!-- Topic Dropdown -->
220
+ <div>
221
+ <label class="block text-sm font-medium text-text-secondary mb-2">Choose Topic</label>
222
+ <select id="topicSelect" class="w-full bg-background border border-border rounded-lg px-4 py-3 text-text-primary focus:outline-none focus:ring-2 focus:ring-primary">
223
+ <option value>Select a topic...</option>
224
+ <option value="python">🐍 Python Programming</option>
225
+ <option value="javascript">⚡ JavaScript</option>
226
+ <option value="science">🔬 General Science</option>
227
+ <option value="history">📚 World History</option>
228
+ <option value="geography">🌍 Geography</option>
229
+ <option value="literature">📖 Literature</option>
230
+ <option value="mathematics">🔢 Mathematics</option>
231
+ <option value="technology">💻 Technology</option>
232
+ </select>
233
+ </div>
234
+
235
+ <!-- Trending Topics -->
236
+ <div>
237
+ <h4 class="text-sm font-medium text-text-secondary mb-3">🔥 Trending Topics</h4>
238
+ <div class="space-y-2">
239
+ <div class="flex items-center justify-between p-3 bg-background rounded-lg border border-border hover:border-primary cursor-pointer transition-colors">
240
+ <div class="flex items-center space-x-3">
241
+ <div class="w-8 h-8 bg-primary-100 rounded-full flex items-center justify-center">
242
+ <i class="fab fa-python text-primary text-sm"></i>
243
+ </div>
244
+ <div>
245
+ <p class="text-sm font-medium text-text-primary">Python Programming</p>
246
+ <p class="text-xs text-text-secondary">Featured Topic</p>
247
+ </div>
248
+ </div>
249
+ <span class="text-xs bg-primary text-white px-2 py-1 rounded-full">Hot</span>
250
+ </div>
251
+
252
+ <div class="flex items-center justify-between p-3 bg-background rounded-lg border border-border hover:border-secondary cursor-pointer transition-colors">
253
+ <div class="flex items-center space-x-3">
254
+ <div class="w-8 h-8 bg-secondary-100 rounded-full flex items-center justify-center">
255
+ <i class="fas fa-atom text-secondary text-sm"></i>
256
+ </div>
257
+ <div>
258
+ <p class="text-sm font-medium text-text-primary">Quantum Physics</p>
259
+ <p class="text-xs text-text-secondary">Advanced Science</p>
260
+ </div>
261
+ </div>
262
+ <span class="text-xs bg-secondary text-white px-2 py-1 rounded-full">New</span>
263
+ </div>
264
+
265
+ <div class="flex items-center justify-between p-3 bg-background rounded-lg border border-border hover:border-accent cursor-pointer transition-colors">
266
+ <div class="flex items-center space-x-3">
267
+ <div class="w-8 h-8 bg-accent-100 rounded-full flex items-center justify-center">
268
+ <i class="fas fa-globe text-accent text-sm"></i>
269
+ </div>
270
+ <div>
271
+ <p class="text-sm font-medium text-text-primary">World Geography</p>
272
+ <p class="text-xs text-text-secondary">Popular Choice</p>
273
+ </div>
274
+ </div>
275
+ <span class="text-xs bg-accent text-white px-2 py-1 rounded-full">Top</span>
276
+ </div>
277
+ </div>
278
+ </div>
279
+ </div>
280
+ </div>
281
+
282
+ <!-- Start Quiz Button -->
283
+ <div class="text-center">
284
+ <button id="startQuizBtn" class="btn btn-primary text-lg px-8 py-4 rounded-xl shadow-lg hover:shadow-xl transform hover:scale-105 transition-all duration-200">
285
+ <i class="fas fa-play mr-2"></i>
286
+ Start Quiz Adventure
287
+ </button>
288
+ <p class="text-sm text-text-secondary mt-2">Select a topic above to begin your quiz journey</p>
289
+ </div>
290
+ </div>
291
+ </main>
292
+
293
+ <script>
294
+ // Mobile menu functionality
295
+ const mobileMenuBtn = document.getElementById('mobileMenuBtn');
296
+ const sidebar = document.getElementById('sidebar');
297
+ const mobileMenuOverlay = document.getElementById('mobileMenuOverlay');
298
+ const closeSidebar = document.getElementById('closeSidebar');
299
+
300
+ mobileMenuBtn.addEventListener('click', () => {
301
+ sidebar.classList.remove('-translate-x-full');
302
+ mobileMenuOverlay.classList.remove('hidden');
303
+ });
304
+
305
+ closeSidebar.addEventListener('click', () => {
306
+ sidebar.classList.add('-translate-x-full');
307
+ mobileMenuOverlay.classList.add('hidden');
308
+ });
309
+
310
+ mobileMenuOverlay.addEventListener('click', () => {
311
+ sidebar.classList.add('-translate-x-full');
312
+ mobileMenuOverlay.classList.add('hidden');
313
+ });
314
+
315
+ // Theme toggle functionality
316
+ const themeToggle = document.getElementById('themeToggle');
317
+ const html = document.documentElement;
318
+
319
+ themeToggle.addEventListener('click', () => {
320
+ html.classList.toggle('dark');
321
+ const isDark = html.classList.contains('dark');
322
+
323
+ // Update toggle button
324
+ const toggleSpan = themeToggle.querySelector('span');
325
+ if (isDark) {
326
+ toggleSpan.classList.add('translate-x-6');
327
+ toggleSpan.classList.remove('translate-x-1');
328
+ } else {
329
+ toggleSpan.classList.add('translate-x-1');
330
+ toggleSpan.classList.remove('translate-x-6');
331
+ }
332
+
333
+ // Save preference
334
+ localStorage.setItem('theme', isDark ? 'dark' : 'light');
335
+ });
336
+
337
+ // Load saved theme
338
+ const savedTheme = localStorage.getItem('theme');
339
+ if (savedTheme) {
340
+ html.classList.toggle('dark', savedTheme === 'dark');
341
+ const toggleSpan = themeToggle.querySelector('span');
342
+ if (savedTheme === 'dark') {
343
+ toggleSpan.classList.add('translate-x-6');
344
+ toggleSpan.classList.remove('translate-x-1');
345
+ } else {
346
+ toggleSpan.classList.add('translate-x-1');
347
+ toggleSpan.classList.remove('translate-x-6');
348
+ }
349
+ }
350
+
351
+ // Language selection
352
+ const languageSelect = document.getElementById('languageSelect');
353
+ languageSelect.addEventListener('change', (e) => {
354
+ localStorage.setItem('selectedLanguage', e.target.value);
355
+ // Here you would implement language switching logic
356
+ console.log('Language changed to:', e.target.value);
357
+ });
358
+
359
+ // Load saved language
360
+ const savedLanguage = localStorage.getItem('selectedLanguage');
361
+ if (savedLanguage) {
362
+ languageSelect.value = savedLanguage;
363
+ }
364
+
365
+ // Topic selection
366
+ const topicSelect = document.getElementById('topicSelect');
367
+ const startQuizBtn = document.getElementById('startQuizBtn');
368
+
369
+ topicSelect.addEventListener('change', (e) => {
370
+ if (e.target.value) {
371
+ startQuizBtn.disabled = false;
372
+ startQuizBtn.classList.remove('opacity-50', 'cursor-not-allowed');
373
+ } else {
374
+ startQuizBtn.disabled = true;
375
+ startQuizBtn.classList.add('opacity-50', 'cursor-not-allowed');
376
+ }
377
+ });
378
+
379
+ // Start quiz functionality
380
+ startQuizBtn.addEventListener('click', () => {
381
+ const selectedTopic = topicSelect.value;
382
+ if (selectedTopic) {
383
+ localStorage.setItem('selectedTopic', selectedTopic);
384
+ window.location.href = 'active_quiz_interface.html';
385
+ } else {
386
+ alert('Please select a topic first!');
387
+ }
388
+ });
389
+
390
+ // Trending topic clicks
391
+ document.querySelectorAll('[data-topic]').forEach(topic => {
392
+ topic.addEventListener('click', (e) => {
393
+ const topicValue = e.currentTarget.dataset.topic;
394
+ topicSelect.value = topicValue;
395
+ topicSelect.dispatchEvent(new Event('change'));
396
+ });
397
+ });
398
+
399
+ // Initialize
400
+ document.addEventListener('DOMContentLoaded', () => {
401
+ // Set initial state of start button
402
+ if (!topicSelect.value) {
403
+ startQuizBtn.disabled = true;
404
+ startQuizBtn.classList.add('opacity-50', 'cursor-not-allowed');
405
+ }
406
+ });
407
+ </script>
408
+ </body>
409
+ </html>
pages/quiz_results_statistics.html ADDED
@@ -0,0 +1,543 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en" class="dark">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>Quiz Results & Statistics - TriviaVerse Quiz</title>
7
+ <link rel="stylesheet" href="../css/main.css" />
8
+ <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" rel="stylesheet" />
9
+ <script type="module" src="https://static.rocket.new/rocket-web.js?_cfg=https%3A%2F%2Ftriviavers2501back.builtwithrocket.new&_be=https%3A%2F%2Fapplication.rocket.new&_v=0.1.5"></script>
10
+ </head>
11
+ <body class="bg-background text-text-primary transition-theme">
12
+ <!-- Mobile Menu Overlay -->
13
+ <div id="mobileMenuOverlay" class="fixed inset-0 bg-black bg-opacity-50 z-40 hidden lg:hidden"></div>
14
+
15
+ <!-- Sidebar -->
16
+ <aside id="sidebar" class="fixed left-0 top-0 h-full w-80 bg-surface border-r border-border transform -translate-x-full lg:translate-x-0 transition-transform duration-300 z-50 lg:z-auto">
17
+ <div class="p-6 border-b border-border">
18
+ <!-- Logo -->
19
+ <div class="flex items-center space-x-3 mb-6">
20
+ <div class="w-10 h-10 bg-gradient-to-br from-primary to-secondary rounded-lg flex items-center justify-center">
21
+ <i class="fas fa-brain text-white text-lg"></i>
22
+ </div>
23
+ <div>
24
+ <h1 class="text-xl font-bold text-text-primary">TriviaVerse</h1>
25
+ <p class="text-sm text-text-secondary">Quiz Platform</p>
26
+ </div>
27
+ </div>
28
+
29
+ <!-- Close button for mobile -->
30
+ <button id="closeSidebar" class="absolute top-4 right-4 lg:hidden text-text-secondary hover:text-text-primary">
31
+ <i class="fas fa-times text-xl"></i>
32
+ </button>
33
+ </div>
34
+
35
+ <!-- Navigation -->
36
+ <nav class="p-6 space-y-2">
37
+ <a href="quiz_dashboard.html" class="flex items-center space-x-3 px-4 py-3 rounded-lg text-text-secondary hover:text-text-primary hover:bg-surface-hover transition-colors">
38
+ <i class="fas fa-home"></i>
39
+ <span>Dashboard</span>
40
+ </a>
41
+ <a href="active_quiz_interface.html" class="flex items-center space-x-3 px-4 py-3 rounded-lg text-text-secondary hover:text-text-primary hover:bg-surface-hover transition-colors">
42
+ <i class="fas fa-play-circle"></i>
43
+ <span>Active Quiz</span>
44
+ </a>
45
+ <a href="quiz_results_statistics.html" class="flex items-center space-x-3 px-4 py-3 rounded-lg bg-primary text-white">
46
+ <i class="fas fa-chart-bar"></i>
47
+ <span>Statistics</span>
48
+ </a>
49
+ <a href="topic_selection_browse.html" class="flex items-center space-x-3 px-4 py-3 rounded-lg text-text-secondary hover:text-text-primary hover:bg-surface-hover transition-colors">
50
+ <i class="fas fa-book"></i>
51
+ <span>Browse Topics</span>
52
+ </a>
53
+ <a href="settings_preferences.html" class="flex items-center space-x-3 px-4 py-3 rounded-lg text-text-secondary hover:text-text-primary hover:bg-surface-hover transition-colors">
54
+ <i class="fas fa-cog"></i>
55
+ <span>Settings</span>
56
+ </a>
57
+ </nav>
58
+
59
+ <!-- Game Settings -->
60
+ <div class="p-6 border-t border-border">
61
+ <h3 class="text-sm font-semibold text-text-primary mb-4">Game Settings</h3>
62
+
63
+ <!-- Language Switcher -->
64
+ <div class="mb-4">
65
+ <label class="block text-sm text-text-secondary mb-2">Language</label>
66
+ <select id="languageSelect" class="w-full bg-background border border-border rounded-lg px-3 py-2 text-text-primary focus:outline-none focus:ring-2 focus:ring-primary">
67
+ <option value="en">English</option>
68
+ <option value="te">తెలుగు (Telugu)</option>
69
+ <option value="hi">हिंदी (Hindi)</option>
70
+ <option value="kn">ಕನ್ನಡ (Kannada)</option>
71
+ </select>
72
+ </div>
73
+
74
+ <!-- Theme Toggle -->
75
+ <div class="flex items-center justify-between">
76
+ <span class="text-sm text-text-secondary">Dark Theme</span>
77
+ <button id="themeToggle" class="relative inline-flex h-6 w-11 items-center rounded-full bg-primary transition-colors">
78
+ <span class="inline-block h-4 w-4 transform rounded-full bg-white transition-transform translate-x-6"></span>
79
+ </button>
80
+ </div>
81
+ </div>
82
+ </aside>
83
+
84
+ <!-- Main Content -->
85
+ <main class="lg:ml-80 min-h-screen">
86
+ <!-- Header -->
87
+ <header class="bg-surface border-b border-border p-4 lg:p-6">
88
+ <div class="flex items-center justify-between">
89
+ <!-- Mobile Menu Button -->
90
+ <button id="mobileMenuBtn" class="lg:hidden text-text-primary hover:text-primary">
91
+ <i class="fas fa-bars text-xl"></i>
92
+ </button>
93
+
94
+ <!-- Page Title -->
95
+ <div class="flex-1 lg:flex-none">
96
+ <h2 class="text-2xl font-bold text-text-primary">Quiz Results & Statistics</h2>
97
+ <p class="text-text-secondary mt-1">Your performance analysis and progress tracking</p>
98
+ </div>
99
+
100
+ <!-- User Avatar -->
101
+ <div class="hidden lg:flex items-center space-x-3">
102
+ <img src="https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?q=80&w=2940&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D" alt="User Avatar" class="w-10 h-10 rounded-full object-cover" onerror="this.src='https://images.unsplash.com/photo-1584824486509-112e4181ff6b?q=80&w=2940&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D'; this.onerror=null;" />
103
+ <div>
104
+ <p class="text-sm font-medium text-text-primary">John Doe</p>
105
+ <p class="text-xs text-text-secondary">Level 5 Quizzer</p>
106
+ </div>
107
+ </div>
108
+ </div>
109
+ </header>
110
+
111
+ <!-- Results Content -->
112
+ <div class="p-4 lg:p-6 space-y-6">
113
+ <!-- Completion Celebration -->
114
+ <div class="card p-6 lg:p-8 text-center bg-gradient-to-br from-primary-50 to-secondary-50 border-primary-100">
115
+ <div class="mb-6">
116
+ <div class="w-20 h-20 bg-gradient-to-br from-primary to-secondary rounded-full flex items-center justify-center mx-auto mb-4">
117
+ <i class="fas fa-trophy text-white text-3xl"></i>
118
+ </div>
119
+ <h3 class="text-3xl font-bold text-primary mb-2">Quiz Completed!</h3>
120
+ <p class="text-text-secondary">Congratulations on finishing the Python Programming quiz</p>
121
+ </div>
122
+
123
+ <!-- Final Score Display -->
124
+ <div class="grid grid-cols-1 md:grid-cols-3 gap-6 mb-6">
125
+ <div class="text-center">
126
+ <div class="text-4xl font-bold text-primary mb-2">85%</div>
127
+ <p class="text-sm text-text-secondary">Final Score</p>
128
+ </div>
129
+ <div class="text-center">
130
+ <div class="text-4xl font-bold text-secondary mb-2">17/20</div>
131
+ <p class="text-sm text-text-secondary">Correct Answers</p>
132
+ </div>
133
+ <div class="text-center">
134
+ <div class="text-4xl font-bold text-accent mb-2">8:45</div>
135
+ <p class="text-sm text-text-secondary">Time Taken</p>
136
+ </div>
137
+ </div>
138
+
139
+ <!-- Progress Ring -->
140
+ <div class="relative w-32 h-32 mx-auto mb-6">
141
+ <svg class="w-32 h-32 transform -rotate-90" viewBox="0 0 120 120">
142
+ <circle cx="60" cy="60" r="50" stroke="currentColor" stroke-width="8" fill="none" class="text-border opacity-20"/>
143
+ <circle cx="60" cy="60" r="50" stroke="currentColor" stroke-width="8" fill="none" class="text-primary" stroke-dasharray="314" stroke-dashoffset="47" stroke-linecap="round"/>
144
+ </svg>
145
+ <div class="absolute inset-0 flex items-center justify-center">
146
+ <span class="text-2xl font-bold text-primary">85%</span>
147
+ </div>
148
+ </div>
149
+
150
+ <!-- Social Sharing -->
151
+ <div class="flex justify-center space-x-3 mb-6">
152
+ <button class="btn bg-blue-600 text-white hover:bg-blue-700 px-4 py-2 rounded-lg">
153
+ <i class="fab fa-twitter mr-2"></i>Share
154
+ </button>
155
+ <button class="btn bg-blue-800 text-white hover:bg-blue-900 px-4 py-2 rounded-lg">
156
+ <i class="fab fa-facebook mr-2"></i>Share
157
+ </button>
158
+ <button class="btn bg-green-600 text-white hover:bg-green-700 px-4 py-2 rounded-lg">
159
+ <i class="fab fa-whatsapp mr-2"></i>Share
160
+ </button>
161
+ </div>
162
+ </div>
163
+
164
+ <!-- Desktop Two-Column Layout -->
165
+ <div class="grid grid-cols-1 lg:grid-cols-2 gap-6">
166
+ <!-- Left Column - Summary Metrics -->
167
+ <div class="space-y-6">
168
+ <!-- Current Session Stats -->
169
+ <div class="card p-6">
170
+ <h3 class="text-lg font-semibold text-text-primary mb-4 flex items-center">
171
+ <i class="fas fa-chart-line text-primary mr-2"></i>
172
+ Session Summary
173
+ </h3>
174
+ <div class="space-y-4">
175
+ <div class="flex justify-between items-center">
176
+ <span class="text-text-secondary">Questions Attempted</span>
177
+ <span class="font-semibold text-text-primary">20/20</span>
178
+ </div>
179
+ <div class="flex justify-between items-center">
180
+ <span class="text-text-secondary">Correct Answers</span>
181
+ <span class="font-semibold text-success">17</span>
182
+ </div>
183
+ <div class="flex justify-between items-center">
184
+ <span class="text-text-secondary">Incorrect Answers</span>
185
+ <span class="font-semibold text-error">3</span>
186
+ </div>
187
+ <div class="flex justify-between items-center">
188
+ <span class="text-text-secondary">Accuracy Rate</span>
189
+ <span class="font-semibold text-primary">85%</span>
190
+ </div>
191
+ <div class="flex justify-between items-center">
192
+ <span class="text-text-secondary">Average Time per Question</span>
193
+ <span class="font-semibold text-text-primary">26s</span>
194
+ </div>
195
+ </div>
196
+ </div>
197
+
198
+ <!-- Historical Performance -->
199
+ <div class="card p-6">
200
+ <h3 class="text-lg font-semibold text-text-primary mb-4 flex items-center">
201
+ <i class="fas fa-history text-secondary mr-2"></i>
202
+ Historical Performance
203
+ </h3>
204
+ <div class="space-y-4">
205
+ <div class="flex justify-between items-center">
206
+ <span class="text-text-secondary">Total Quizzes Taken</span>
207
+ <span class="font-semibold text-text-primary">47</span>
208
+ </div>
209
+ <div class="flex justify-between items-center">
210
+ <span class="text-text-secondary">Average Score</span>
211
+ <span class="font-semibold text-primary">78%</span>
212
+ </div>
213
+ <div class="flex justify-between items-center">
214
+ <span class="text-text-secondary">Best Score</span>
215
+ <span class="font-semibold text-success">95%</span>
216
+ </div>
217
+ <div class="flex justify-between items-center">
218
+ <span class="text-text-secondary">Current Streak</span>
219
+ <span class="font-semibold text-accent">12 quizzes</span>
220
+ </div>
221
+ <div class="flex justify-between items-center">
222
+ <span class="text-text-secondary">Best Streak</span>
223
+ <span class="font-semibold text-accent">20 quizzes</span>
224
+ </div>
225
+ </div>
226
+
227
+ <!-- Improvement Trend -->
228
+ <div class="mt-6">
229
+ <h4 class="text-sm font-medium text-text-secondary mb-3">Performance Trend (Last 7 Days)</h4>
230
+ <div class="h-32 bg-background rounded-lg p-4 flex items-end justify-between space-x-1">
231
+ <div class="bg-primary h-16 w-6 rounded-t"></div>
232
+ <div class="bg-primary h-20 w-6 rounded-t"></div>
233
+ <div class="bg-primary h-12 w-6 rounded-t"></div>
234
+ <div class="bg-primary h-24 w-6 rounded-t"></div>
235
+ <div class="bg-primary h-18 w-6 rounded-t"></div>
236
+ <div class="bg-primary h-22 w-6 rounded-t"></div>
237
+ <div class="bg-primary h-28 w-6 rounded-t"></div>
238
+ </div>
239
+ <div class="flex justify-between text-xs text-text-secondary mt-2">
240
+ <span>Mon</span>
241
+ <span>Tue</span>
242
+ <span>Wed</span>
243
+ <span>Thu</span>
244
+ <span>Fri</span>
245
+ <span>Sat</span>
246
+ <span>Sun</span>
247
+ </div>
248
+ </div>
249
+ </div>
250
+
251
+ <!-- Topic Performance -->
252
+ <div class="card p-6">
253
+ <h3 class="text-lg font-semibold text-text-primary mb-4 flex items-center">
254
+ <i class="fas fa-book text-accent mr-2"></i>
255
+ Topic Performance
256
+ </h3>
257
+ <div class="space-y-4">
258
+ <div>
259
+ <div class="flex justify-between items-center mb-2">
260
+ <span class="text-sm text-text-secondary">Python Basics</span>
261
+ <span class="text-sm font-semibold text-success">90%</span>
262
+ </div>
263
+ <div class="progress-bar h-2">
264
+ <div class="progress-fill bg-success" style="width: 90%"></div>
265
+ </div>
266
+ </div>
267
+ <div>
268
+ <div class="flex justify-between items-center mb-2">
269
+ <span class="text-sm text-text-secondary">Data Structures</span>
270
+ <span class="text-sm font-semibold text-primary">85%</span>
271
+ </div>
272
+ <div class="progress-bar h-2">
273
+ <div class="progress-fill" style="width: 85%"></div>
274
+ </div>
275
+ </div>
276
+ <div>
277
+ <div class="flex justify-between items-center mb-2">
278
+ <span class="text-sm text-text-secondary">Object-Oriented Programming</span>
279
+ <span class="text-sm font-semibold text-warning">75%</span>
280
+ </div>
281
+ <div class="progress-bar h-2">
282
+ <div class="progress-fill bg-warning" style="width: 75%"></div>
283
+ </div>
284
+ </div>
285
+ <div>
286
+ <div class="flex justify-between items-center mb-2">
287
+ <span class="text-sm text-text-secondary">Advanced Concepts</span>
288
+ <span class="text-sm font-semibold text-error">65%</span>
289
+ </div>
290
+ <div class="progress-bar h-2">
291
+ <div class="progress-fill bg-error" style="width: 65%"></div>
292
+ </div>
293
+ </div>
294
+ </div>
295
+ </div>
296
+ </div>
297
+
298
+ <!-- Right Column - Detailed Breakdown -->
299
+ <div class="space-y-6">
300
+ <!-- Question-by-Question Analysis -->
301
+ <div class="card p-6">
302
+ <h3 class="text-lg font-semibold text-text-primary mb-4 flex items-center">
303
+ <i class="fas fa-list-check text-primary mr-2"></i>
304
+ Question Analysis
305
+ </h3>
306
+ <div class="space-y-4 max-h-96 overflow-y-auto">
307
+ <!-- Correct Answer -->
308
+ <div class="border border-success-100 bg-success-50 rounded-lg p-4">
309
+ <div class="flex items-start space-x-3">
310
+ <div class="w-8 h-8 bg-success rounded-full flex items-center justify-center flex-shrink-0">
311
+ <i class="fas fa-check text-white text-sm"></i>
312
+ </div>
313
+ <div class="flex-1">
314
+ <p class="text-sm font-medium text-text-primary mb-1">Question 1</p>
315
+ <p class="text-sm text-text-secondary mb-2">What is the output of print(type([]))?</p>
316
+ <p class="text-xs text-success font-medium">Correct: &lt;class 'list'&gt;</p>
317
+ </div>
318
+ </div>
319
+ </div>
320
+
321
+ <!-- Incorrect Answer -->
322
+ <div class="border border-error-100 bg-error-50 rounded-lg p-4">
323
+ <div class="flex items-start space-x-3">
324
+ <div class="w-8 h-8 bg-error rounded-full flex items-center justify-center flex-shrink-0">
325
+ <i class="fas fa-times text-white text-sm"></i>
326
+ </div>
327
+ <div class="flex-1">
328
+ <p class="text-sm font-medium text-text-primary mb-1">Question 5</p>
329
+ <p class="text-sm text-text-secondary mb-2">Which method is used to add an element to a set?</p>
330
+ <p class="text-xs text-error font-medium mb-1">Your answer: append()</p>
331
+ <p class="text-xs text-success font-medium mb-2">Correct: add()</p>
332
+ <p class="text-xs text-text-secondary">Explanation: Sets use the add() method to insert elements, while lists use append().</p>
333
+ </div>
334
+ </div>
335
+ </div>
336
+
337
+ <!-- More questions... -->
338
+ <div class="border border-success-100 bg-success-50 rounded-lg p-4">
339
+ <div class="flex items-start space-x-3">
340
+ <div class="w-8 h-8 bg-success rounded-full flex items-center justify-center flex-shrink-0">
341
+ <i class="fas fa-check text-white text-sm"></i>
342
+ </div>
343
+ <div class="flex-1">
344
+ <p class="text-sm font-medium text-text-primary mb-1">Question 8</p>
345
+ <p class="text-sm text-text-secondary mb-2">What does the len() function return?</p>
346
+ <p class="text-xs text-success font-medium">Correct: The number of items in an object</p>
347
+ </div>
348
+ </div>
349
+ </div>
350
+
351
+ <div class="border border-error-100 bg-error-50 rounded-lg p-4">
352
+ <div class="flex items-start space-x-3">
353
+ <div class="w-8 h-8 bg-error rounded-full flex items-center justify-center flex-shrink-0">
354
+ <i class="fas fa-times text-white text-sm"></i>
355
+ </div>
356
+ <div class="flex-1">
357
+ <p class="text-sm font-medium text-text-primary mb-1">Question 12</p>
358
+ <p class="text-sm text-text-secondary mb-2">Which keyword is used to define a function in Python?</p>
359
+ <p class="text-xs text-error font-medium mb-1">Your answer: function</p>
360
+ <p class="text-xs text-success font-medium mb-2">Correct: def</p>
361
+ <p class="text-xs text-text-secondary">Explanation: Python uses 'def' keyword to define functions, not 'function'.</p>
362
+ </div>
363
+ </div>
364
+ </div>
365
+ </div>
366
+ </div>
367
+
368
+ <!-- Knowledge Gaps -->
369
+ <div class="card p-6">
370
+ <h3 class="text-lg font-semibold text-text-primary mb-4 flex items-center">
371
+ <i class="fas fa-lightbulb text-warning mr-2"></i>
372
+ Areas for Improvement
373
+ </h3>
374
+ <div class="space-y-3">
375
+ <div class="flex items-center space-x-3 p-3 bg-warning-50 border border-warning-100 rounded-lg">
376
+ <i class="fas fa-exclamation-triangle text-warning"></i>
377
+ <div>
378
+ <p class="text-sm font-medium text-text-primary">Set Operations</p>
379
+ <p class="text-xs text-text-secondary">Review add(), remove(), and discard() methods</p>
380
+ </div>
381
+ </div>
382
+ <div class="flex items-center space-x-3 p-3 bg-warning-50 border border-warning-100 rounded-lg">
383
+ <i class="fas fa-exclamation-triangle text-warning"></i>
384
+ <div>
385
+ <p class="text-sm font-medium text-text-primary">Function Definition</p>
386
+ <p class="text-xs text-text-secondary">Practice function syntax and parameters</p>
387
+ </div>
388
+ </div>
389
+ <div class="flex items-center space-x-3 p-3 bg-warning-50 border border-warning-100 rounded-lg">
390
+ <i class="fas fa-exclamation-triangle text-warning"></i>
391
+ <div>
392
+ <p class="text-sm font-medium text-text-primary">Exception Handling</p>
393
+ <p class="text-xs text-text-secondary">Study try-except blocks and error types</p>
394
+ </div>
395
+ </div>
396
+ </div>
397
+ </div>
398
+ </div>
399
+ </div>
400
+
401
+ <!-- Action Buttons -->
402
+ <div class="flex flex-col sm:flex-row gap-4 justify-center">
403
+ <button onclick="window.location.href='active_quiz_interface.html'" class="btn btn-primary px-6 py-3 rounded-lg text-lg">
404
+ <i class="fas fa-redo mr-2"></i>
405
+ Retake Quiz
406
+ </button>
407
+ <button onclick="window.location.href='topic_selection_browse.html'" class="btn btn-secondary px-6 py-3 rounded-lg text-lg">
408
+ <i class="fas fa-book mr-2"></i>
409
+ Try New Topic
410
+ </button>
411
+ <button onclick="window.location.href='quiz_dashboard.html'" class="btn bg-surface border border-border text-text-primary hover:bg-surface-hover px-6 py-3 rounded-lg text-lg">
412
+ <i class="fas fa-home mr-2"></i>
413
+ Return to Dashboard
414
+ </button>
415
+ </div>
416
+ </div>
417
+ </main>
418
+
419
+ <script>
420
+ // Mobile menu functionality
421
+ const mobileMenuBtn = document.getElementById('mobileMenuBtn');
422
+ const sidebar = document.getElementById('sidebar');
423
+ const mobileMenuOverlay = document.getElementById('mobileMenuOverlay');
424
+ const closeSidebar = document.getElementById('closeSidebar');
425
+
426
+ mobileMenuBtn.addEventListener('click', () => {
427
+ sidebar.classList.remove('-translate-x-full');
428
+ mobileMenuOverlay.classList.remove('hidden');
429
+ });
430
+
431
+ closeSidebar.addEventListener('click', () => {
432
+ sidebar.classList.add('-translate-x-full');
433
+ mobileMenuOverlay.classList.add('hidden');
434
+ });
435
+
436
+ mobileMenuOverlay.addEventListener('click', () => {
437
+ sidebar.classList.add('-translate-x-full');
438
+ mobileMenuOverlay.classList.add('hidden');
439
+ });
440
+
441
+ // Theme toggle functionality
442
+ const themeToggle = document.getElementById('themeToggle');
443
+ const html = document.documentElement;
444
+
445
+ themeToggle.addEventListener('click', () => {
446
+ html.classList.toggle('dark');
447
+ const isDark = html.classList.contains('dark');
448
+
449
+ // Update toggle button
450
+ const toggleSpan = themeToggle.querySelector('span');
451
+ if (isDark) {
452
+ toggleSpan.classList.add('translate-x-6');
453
+ toggleSpan.classList.remove('translate-x-1');
454
+ } else {
455
+ toggleSpan.classList.add('translate-x-1');
456
+ toggleSpan.classList.remove('translate-x-6');
457
+ }
458
+
459
+ // Save preference
460
+ localStorage.setItem('theme', isDark ? 'dark' : 'light');
461
+ });
462
+
463
+ // Load saved theme
464
+ const savedTheme = localStorage.getItem('theme');
465
+ if (savedTheme) {
466
+ html.classList.toggle('dark', savedTheme === 'dark');
467
+ const toggleSpan = themeToggle.querySelector('span');
468
+ if (savedTheme === 'dark') {
469
+ toggleSpan.classList.add('translate-x-6');
470
+ toggleSpan.classList.remove('translate-x-1');
471
+ } else {
472
+ toggleSpan.classList.add('translate-x-1');
473
+ toggleSpan.classList.remove('translate-x-6');
474
+ }
475
+ }
476
+
477
+ // Language selection
478
+ const languageSelect = document.getElementById('languageSelect');
479
+ languageSelect.addEventListener('change', (e) => {
480
+ localStorage.setItem('selectedLanguage', e.target.value);
481
+ console.log('Language changed to:', e.target.value);
482
+ });
483
+
484
+ // Load saved language
485
+ const savedLanguage = localStorage.getItem('selectedLanguage');
486
+ if (savedLanguage) {
487
+ languageSelect.value = savedLanguage;
488
+ }
489
+
490
+ // Load quiz results from localStorage
491
+ document.addEventListener('DOMContentLoaded', () => {
492
+ const quizResults = JSON.parse(localStorage.getItem('quizResults') || '{}');
493
+
494
+ // Update results if available
495
+ if (quizResults.score) {
496
+ // Update score displays
497
+ document.querySelectorAll('.score-display').forEach(el => {
498
+ el.textContent = quizResults.score + '%';
499
+ });
500
+ }
501
+
502
+ // Animate progress ring
503
+ setTimeout(() => {
504
+ const progressRing = document.querySelector('circle[stroke-dashoffset]');
505
+ if (progressRing) {
506
+ const score = 85; // Current score
507
+ const circumference = 314;
508
+ const offset = circumference - (score / 100) * circumference;
509
+ progressRing.style.strokeDashoffset = offset;
510
+ }
511
+ }, 500);
512
+ });
513
+
514
+ // Social sharing functionality
515
+ document.querySelectorAll('[class*="fa-twitter"], [class*="fa-facebook"], [class*="fa-whatsapp"]').forEach(btn => {
516
+ btn.closest('button').addEventListener('click', (e) => {
517
+ const platform = e.currentTarget.querySelector('i').classList.contains('fa-twitter') ? 'twitter' :
518
+ e.currentTarget.querySelector('i').classList.contains('fa-facebook') ? 'facebook' : 'whatsapp';
519
+
520
+ const shareText = "I just scored 85% on a Python Programming quiz on TriviaVerse! 🎉";
521
+ const shareUrl = window.location.origin;
522
+
523
+ let url = '';
524
+ switch(platform) {
525
+ case 'twitter':
526
+ url = `https://twitter.com/intent/tweet?text=${encodeURIComponent(shareText)}&url=${encodeURIComponent(shareUrl)}`;
527
+ break;
528
+ case 'facebook':
529
+ url = `https://www.facebook.com/sharer/sharer.php?u=${encodeURIComponent(shareUrl)}&quote=${encodeURIComponent(shareText)}`;
530
+ break;
531
+ case 'whatsapp':
532
+ url = `https://wa.me/?text=${encodeURIComponent(shareText + ' ' + shareUrl)}`;
533
+ break;
534
+ }
535
+
536
+ if (url) {
537
+ window.open(url, '_blank', 'width=600,height=400');
538
+ }
539
+ });
540
+ });
541
+ </script>
542
+ </body>
543
+ </html>
pages/settings_preferences.html ADDED
@@ -0,0 +1,1015 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en" class="dark">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>Settings & Preferences - TriviaVerse Quiz</title>
7
+ <link rel="stylesheet" href="../css/main.css" />
8
+ <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" rel="stylesheet" />
9
+ <script type="module" src="https://static.rocket.new/rocket-web.js?_cfg=https%3A%2F%2Ftriviavers2501back.builtwithrocket.new&_be=https%3A%2F%2Fapplication.rocket.new&_v=0.1.5"></script>
10
+ </head>
11
+ <body class="bg-background text-text-primary transition-theme">
12
+ <!-- Mobile Menu Overlay -->
13
+ <div id="mobileMenuOverlay" class="fixed inset-0 bg-black bg-opacity-50 z-40 hidden lg:hidden"></div>
14
+
15
+ <!-- Sidebar -->
16
+ <aside id="sidebar" class="fixed left-0 top-0 h-full w-80 bg-surface border-r border-border transform -translate-x-full lg:translate-x-0 transition-transform duration-300 z-50 lg:z-auto">
17
+ <div class="p-6 border-b border-border">
18
+ <!-- Logo -->
19
+ <div class="flex items-center space-x-3 mb-6">
20
+ <div class="w-10 h-10 bg-gradient-to-br from-primary to-secondary rounded-lg flex items-center justify-center">
21
+ <i class="fas fa-brain text-white text-lg"></i>
22
+ </div>
23
+ <div>
24
+ <h1 class="text-xl font-bold text-text-primary">TriviaVerse</h1>
25
+ <p class="text-sm text-text-secondary">Quiz Platform</p>
26
+ </div>
27
+ </div>
28
+
29
+ <!-- Close button for mobile -->
30
+ <button id="closeSidebar" class="absolute top-4 right-4 lg:hidden text-text-secondary hover:text-text-primary">
31
+ <i class="fas fa-times text-xl"></i>
32
+ </button>
33
+ </div>
34
+
35
+ <!-- Navigation -->
36
+ <nav class="p-6 space-y-2">
37
+ <a href="quiz_dashboard.html" class="flex items-center space-x-3 px-4 py-3 rounded-lg text-text-secondary hover:text-text-primary hover:bg-surface-hover transition-colors">
38
+ <i class="fas fa-home"></i>
39
+ <span>Dashboard</span>
40
+ </a>
41
+ <a href="active_quiz_interface.html" class="flex items-center space-x-3 px-4 py-3 rounded-lg text-text-secondary hover:text-text-primary hover:bg-surface-hover transition-colors">
42
+ <i class="fas fa-play-circle"></i>
43
+ <span>Active Quiz</span>
44
+ </a>
45
+ <a href="quiz_results_statistics.html" class="flex items-center space-x-3 px-4 py-3 rounded-lg text-text-secondary hover:text-text-primary hover:bg-surface-hover transition-colors">
46
+ <i class="fas fa-chart-bar"></i>
47
+ <span>Statistics</span>
48
+ </a>
49
+ <a href="topic_selection_browse.html" class="flex items-center space-x-3 px-4 py-3 rounded-lg text-text-secondary hover:text-text-primary hover:bg-surface-hover transition-colors">
50
+ <i class="fas fa-book"></i>
51
+ <span>Browse Topics</span>
52
+ </a>
53
+ <a href="settings_preferences.html" class="flex items-center space-x-3 px-4 py-3 rounded-lg bg-primary text-white">
54
+ <i class="fas fa-cog"></i>
55
+ <span>Settings</span>
56
+ </a>
57
+ </nav>
58
+
59
+ <!-- Game Settings -->
60
+ <div class="p-6 border-t border-border">
61
+ <h3 class="text-sm font-semibold text-text-primary mb-4">Game Settings</h3>
62
+
63
+ <!-- Language Switcher -->
64
+ <div class="mb-4">
65
+ <label class="block text-sm text-text-secondary mb-2">Language</label>
66
+ <select id="languageSelect" class="w-full bg-background border border-border rounded-lg px-3 py-2 text-text-primary focus:outline-none focus:ring-2 focus:ring-primary">
67
+ <option value="en">English</option>
68
+ <option value="te">తెలుగు (Telugu)</option>
69
+ <option value="hi">हिंदी (Hindi)</option>
70
+ <option value="kn">ಕನ್ನಡ (Kannada)</option>
71
+ </select>
72
+ </div>
73
+
74
+ <!-- Theme Toggle -->
75
+ <div class="flex items-center justify-between">
76
+ <span class="text-sm text-text-secondary">Dark Theme</span>
77
+ <button id="themeToggle" class="relative inline-flex h-6 w-11 items-center rounded-full bg-primary transition-colors">
78
+ <span class="inline-block h-4 w-4 transform rounded-full bg-white transition-transform translate-x-6"></span>
79
+ </button>
80
+ </div>
81
+ </div>
82
+ </aside>
83
+
84
+ <!-- Main Content -->
85
+ <main class="lg:ml-80 min-h-screen">
86
+ <!-- Header -->
87
+ <header class="bg-surface border-b border-border p-4 lg:p-6">
88
+ <div class="flex items-center justify-between">
89
+ <!-- Mobile Menu Button -->
90
+ <button id="mobileMenuBtn" class="lg:hidden text-text-primary hover:text-primary">
91
+ <i class="fas fa-bars text-xl"></i>
92
+ </button>
93
+
94
+ <!-- Page Title -->
95
+ <div class="flex-1 lg:flex-none">
96
+ <h2 class="text-2xl font-bold text-text-primary">Settings & Preferences</h2>
97
+ <p class="text-text-secondary mt-1">Customize your quiz experience</p>
98
+ </div>
99
+
100
+ <!-- User Avatar -->
101
+ <div class="hidden lg:flex items-center space-x-3">
102
+ <img src="https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?q=80&w=2940&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D" alt="User Avatar" class="w-10 h-10 rounded-full object-cover" onerror="this.src='https://images.unsplash.com/photo-1584824486509-112e4181ff6b?q=80&w=2940&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D'; this.onerror=null;" />
103
+ <div>
104
+ <p class="text-sm font-medium text-text-primary">John Doe</p>
105
+ <p class="text-xs text-text-secondary">Level 5 Quizzer</p>
106
+ </div>
107
+ </div>
108
+ </div>
109
+ </header>
110
+
111
+ <!-- Settings Content -->
112
+ <div class="p-4 lg:p-6">
113
+ <!-- Desktop Layout: Two Panel -->
114
+ <div class="hidden lg:flex gap-6">
115
+ <!-- Settings Categories Sidebar -->
116
+ <div class="w-1/3">
117
+ <div class="card p-6 sticky top-6">
118
+ <h3 class="text-lg font-semibold text-text-primary mb-4">Settings Categories</h3>
119
+ <nav class="space-y-2">
120
+ <button class="settings-nav-btn active w-full text-left px-4 py-3 rounded-lg bg-primary text-white" data-section="language">
121
+ <i class="fas fa-language mr-3"></i>
122
+ Language Settings
123
+ </button>
124
+ <button class="settings-nav-btn w-full text-left px-4 py-3 rounded-lg text-text-secondary hover:text-text-primary hover:bg-surface-hover transition-colors" data-section="theme">
125
+ <i class="fas fa-palette mr-3"></i>
126
+ Theme Preferences
127
+ </button>
128
+ <button class="settings-nav-btn w-full text-left px-4 py-3 rounded-lg text-text-secondary hover:text-text-primary hover:bg-surface-hover transition-colors" data-section="quiz">
129
+ <i class="fas fa-gamepad mr-3"></i>
130
+ Quiz Configuration
131
+ </button>
132
+ <button class="settings-nav-btn w-full text-left px-4 py-3 rounded-lg text-text-secondary hover:text-text-primary hover:bg-surface-hover transition-colors" data-section="notifications">
133
+ <i class="fas fa-bell mr-3"></i>
134
+ Notifications
135
+ </button>
136
+ <button class="settings-nav-btn w-full text-left px-4 py-3 rounded-lg text-text-secondary hover:text-text-primary hover:bg-surface-hover transition-colors" data-section="data">
137
+ <i class="fas fa-database mr-3"></i>
138
+ Data Management
139
+ </button>
140
+ <button class="settings-nav-btn w-full text-left px-4 py-3 rounded-lg text-text-secondary hover:text-text-primary hover:bg-surface-hover transition-colors" data-section="accessibility">
141
+ <i class="fas fa-universal-access mr-3"></i>
142
+ Accessibility
143
+ </button>
144
+ </nav>
145
+ </div>
146
+ </div>
147
+
148
+ <!-- Settings Content Area -->
149
+ <div class="flex-1">
150
+ <div id="settingsContent" class="space-y-6">
151
+ <!-- Language Settings Section -->
152
+ <div id="languageSection" class="settings-section">
153
+ <div class="card p-6">
154
+ <div class="flex items-center mb-6">
155
+ <div class="w-12 h-12 bg-primary-100 rounded-lg flex items-center justify-center mr-4">
156
+ <i class="fas fa-language text-primary text-xl"></i>
157
+ </div>
158
+ <div>
159
+ <h3 class="text-xl font-semibold text-text-primary">Language Settings</h3>
160
+ <p class="text-text-secondary">Configure your preferred language and regional settings</p>
161
+ </div>
162
+ </div>
163
+
164
+ <div class="space-y-6">
165
+ <!-- Interface Language -->
166
+ <div>
167
+ <label class="block text-sm font-medium text-text-primary mb-3">Interface Language</label>
168
+ <div class="grid grid-cols-2 gap-3">
169
+ <div class="language-option border-2 border-primary bg-primary-50 rounded-lg p-4 cursor-pointer">
170
+ <div class="flex items-center space-x-3">
171
+ <div class="w-8 h-8 bg-primary rounded-full flex items-center justify-center">
172
+ <span class="text-white text-sm font-bold">EN</span>
173
+ </div>
174
+ <div>
175
+ <p class="font-medium text-primary">English</p>
176
+ <p class="text-xs text-text-secondary">Default</p>
177
+ </div>
178
+ </div>
179
+ </div>
180
+ <div class="language-option border border-border rounded-lg p-4 cursor-pointer hover:border-secondary">
181
+ <div class="flex items-center space-x-3">
182
+ <div class="w-8 h-8 bg-secondary-100 rounded-full flex items-center justify-center">
183
+ <span class="text-secondary text-sm font-bold">తె</span>
184
+ </div>
185
+ <div>
186
+ <p class="font-medium text-text-primary">తెలుగు</p>
187
+ <p class="text-xs text-text-secondary">Telugu</p>
188
+ </div>
189
+ </div>
190
+ </div>
191
+ <div class="language-option border border-border rounded-lg p-4 cursor-pointer hover:border-accent">
192
+ <div class="flex items-center space-x-3">
193
+ <div class="w-8 h-8 bg-accent-100 rounded-full flex items-center justify-center">
194
+ <span class="text-accent text-sm font-bold">हि</span>
195
+ </div>
196
+ <div>
197
+ <p class="font-medium text-text-primary">हिंदी</p>
198
+ <p class="text-xs text-text-secondary">Hindi</p>
199
+ </div>
200
+ </div>
201
+ </div>
202
+ <div class="language-option border border-border rounded-lg p-4 cursor-pointer hover:border-secondary">
203
+ <div class="flex items-center space-x-3">
204
+ <div class="w-8 h-8 bg-secondary-100 rounded-full flex items-center justify-center">
205
+ <span class="text-secondary text-sm font-bold">ಕ</span>
206
+ </div>
207
+ <div>
208
+ <p class="font-medium text-text-primary">ಕನ್ನಡ</p>
209
+ <p class="text-xs text-text-secondary">Kannada</p>
210
+ </div>
211
+ </div>
212
+ </div>
213
+ </div>
214
+ </div>
215
+
216
+ <!-- Font Settings -->
217
+ <div>
218
+ <label class="block text-sm font-medium text-text-primary mb-3">Font Preferences</label>
219
+ <div class="space-y-4">
220
+ <div class="flex items-center justify-between">
221
+ <span class="text-text-secondary">Auto-load regional fonts</span>
222
+ <button class="relative inline-flex h-6 w-11 items-center rounded-full bg-primary transition-colors">
223
+ <span class="inline-block h-4 w-4 transform rounded-full bg-white transition-transform translate-x-6"></span>
224
+ </button>
225
+ </div>
226
+ <div class="flex items-center justify-between">
227
+ <span class="text-text-secondary">Unicode text rendering</span>
228
+ <button class="relative inline-flex h-6 w-11 items-center rounded-full bg-primary transition-colors">
229
+ <span class="inline-block h-4 w-4 transform rounded-full bg-white transition-transform translate-x-6"></span>
230
+ </button>
231
+ </div>
232
+ </div>
233
+ </div>
234
+ </div>
235
+ </div>
236
+ </div>
237
+
238
+ <!-- Theme Preferences Section -->
239
+ <div id="themeSection" class="settings-section hidden">
240
+ <div class="card p-6">
241
+ <div class="flex items-center mb-6">
242
+ <div class="w-12 h-12 bg-accent-100 rounded-lg flex items-center justify-center mr-4">
243
+ <i class="fas fa-palette text-accent text-xl"></i>
244
+ </div>
245
+ <div>
246
+ <h3 class="text-xl font-semibold text-text-primary">Theme Preferences</h3>
247
+ <p class="text-text-secondary">Customize the visual appearance of your interface</p>
248
+ </div>
249
+ </div>
250
+
251
+ <div class="space-y-6">
252
+ <!-- Theme Selection -->
253
+ <div>
254
+ <label class="block text-sm font-medium text-text-primary mb-3">Theme Mode</label>
255
+ <div class="grid grid-cols-2 gap-4">
256
+ <div class="theme-option border-2 border-primary bg-primary-50 rounded-lg p-4 cursor-pointer">
257
+ <div class="text-center">
258
+ <div class="w-16 h-12 bg-background rounded-lg mx-auto mb-3 border border-border"></div>
259
+ <p class="font-medium text-primary">Dark Theme</p>
260
+ <p class="text-xs text-text-secondary">Current</p>
261
+ </div>
262
+ </div>
263
+ <div class="theme-option border border-border rounded-lg p-4 cursor-pointer hover:border-secondary">
264
+ <div class="text-center">
265
+ <div class="w-16 h-12 bg-white rounded-lg mx-auto mb-3 border border-border"></div>
266
+ <p class="font-medium text-text-primary">Light Theme</p>
267
+ <p class="text-xs text-text-secondary">Alternative</p>
268
+ </div>
269
+ </div>
270
+ </div>
271
+ </div>
272
+
273
+ <!-- Color Customization -->
274
+ <div>
275
+ <label class="block text-sm font-medium text-text-primary mb-3">Accent Color</label>
276
+ <div class="flex space-x-3">
277
+ <div class="w-8 h-8 bg-primary rounded-full cursor-pointer border-2 border-white shadow-md"></div>
278
+ <div class="w-8 h-8 bg-secondary rounded-full cursor-pointer border-2 border-transparent hover:border-white shadow-md"></div>
279
+ <div class="w-8 h-8 bg-accent rounded-full cursor-pointer border-2 border-transparent hover:border-white shadow-md"></div>
280
+ <div class="w-8 h-8 bg-success rounded-full cursor-pointer border-2 border-transparent hover:border-white shadow-md"></div>
281
+ <div class="w-8 h-8 bg-error rounded-full cursor-pointer border-2 border-transparent hover:border-white shadow-md"></div>
282
+ </div>
283
+ </div>
284
+
285
+ <!-- Auto Theme -->
286
+ <div class="flex items-center justify-between">
287
+ <div>
288
+ <span class="text-text-primary">Auto theme switching</span>
289
+ <p class="text-xs text-text-secondary">Follow system preference</p>
290
+ </div>
291
+ <button class="relative inline-flex h-6 w-11 items-center rounded-full bg-gray-300 transition-colors">
292
+ <span class="inline-block h-4 w-4 transform rounded-full bg-white transition-transform translate-x-1"></span>
293
+ </button>
294
+ </div>
295
+ </div>
296
+ </div>
297
+ </div>
298
+
299
+ <!-- Quiz Configuration Section -->
300
+ <div id="quizSection" class="settings-section hidden">
301
+ <div class="card p-6">
302
+ <div class="flex items-center mb-6">
303
+ <div class="w-12 h-12 bg-secondary-100 rounded-lg flex items-center justify-center mr-4">
304
+ <i class="fas fa-gamepad text-secondary text-xl"></i>
305
+ </div>
306
+ <div>
307
+ <h3 class="text-xl font-semibold text-text-primary">Quiz Configuration</h3>
308
+ <p class="text-text-secondary">Set your default quiz preferences and difficulty</p>
309
+ </div>
310
+ </div>
311
+
312
+ <div class="space-y-6">
313
+ <!-- Timer Settings -->
314
+ <div>
315
+ <label class="block text-sm font-medium text-text-primary mb-3">Default Timer (seconds)</label>
316
+ <div class="flex items-center space-x-4">
317
+ <input type="range" min="10" max="120" value="30" class="flex-1 h-2 bg-surface rounded-lg appearance-none cursor-pointer" />
318
+ <span class="text-text-primary font-medium w-12">30s</span>
319
+ </div>
320
+ <div class="flex justify-between text-xs text-text-secondary mt-1">
321
+ <span>10s</span>
322
+ <span>120s</span>
323
+ </div>
324
+ </div>
325
+
326
+ <!-- Difficulty Preference -->
327
+ <div>
328
+ <label class="block text-sm font-medium text-text-primary mb-3">Default Difficulty</label>
329
+ <div class="grid grid-cols-3 gap-3">
330
+ <div class="difficulty-option border border-border rounded-lg p-3 cursor-pointer hover:border-success text-center">
331
+ <i class="fas fa-seedling text-success text-lg mb-2"></i>
332
+ <p class="text-sm font-medium text-text-primary">Easy</p>
333
+ </div>
334
+ <div class="difficulty-option border-2 border-accent bg-accent-50 rounded-lg p-3 cursor-pointer text-center">
335
+ <i class="fas fa-fire text-accent text-lg mb-2"></i>
336
+ <p class="text-sm font-medium text-accent">Medium</p>
337
+ </div>
338
+ <div class="difficulty-option border border-border rounded-lg p-3 cursor-pointer hover:border-error text-center">
339
+ <i class="fas fa-skull text-error text-lg mb-2"></i>
340
+ <p class="text-sm font-medium text-text-primary">Hard</p>
341
+ </div>
342
+ </div>
343
+ </div>
344
+
345
+ <!-- Quiz Features -->
346
+ <div class="space-y-4">
347
+ <div class="flex items-center justify-between">
348
+ <div>
349
+ <span class="text-text-primary">Enable hints</span>
350
+ <p class="text-xs text-text-secondary">Show helpful hints during quiz</p>
351
+ </div>
352
+ <button class="relative inline-flex h-6 w-11 items-center rounded-full bg-primary transition-colors">
353
+ <span class="inline-block h-4 w-4 transform rounded-full bg-white transition-transform translate-x-6"></span>
354
+ </button>
355
+ </div>
356
+ <div class="flex items-center justify-between">
357
+ <div>
358
+ <span class="text-text-primary">Auto-advance questions</span>
359
+ <p class="text-xs text-text-secondary">Move to next question automatically</p>
360
+ </div>
361
+ <button class="relative inline-flex h-6 w-11 items-center rounded-full bg-gray-300 transition-colors">
362
+ <span class="inline-block h-4 w-4 transform rounded-full bg-white transition-transform translate-x-1"></span>
363
+ </button>
364
+ </div>
365
+ <div class="flex items-center justify-between">
366
+ <div>
367
+ <span class="text-text-primary">Sound effects</span>
368
+ <p class="text-xs text-text-secondary">Play sounds for correct/incorrect answers</p>
369
+ </div>
370
+ <button class="relative inline-flex h-6 w-11 items-center rounded-full bg-primary transition-colors">
371
+ <span class="inline-block h-4 w-4 transform rounded-full bg-white transition-transform translate-x-6"></span>
372
+ </button>
373
+ </div>
374
+ </div>
375
+ </div>
376
+ </div>
377
+ </div>
378
+
379
+ <!-- Notifications Section -->
380
+ <div id="notificationsSection" class="settings-section hidden">
381
+ <div class="card p-6">
382
+ <div class="flex items-center mb-6">
383
+ <div class="w-12 h-12 bg-warning-100 rounded-lg flex items-center justify-center mr-4">
384
+ <i class="fas fa-bell text-warning text-xl"></i>
385
+ </div>
386
+ <div>
387
+ <h3 class="text-xl font-semibold text-text-primary">Notification Preferences</h3>
388
+ <p class="text-text-secondary">Manage your notification settings and reminders</p>
389
+ </div>
390
+ </div>
391
+
392
+ <div class="space-y-4">
393
+ <div class="flex items-center justify-between">
394
+ <div>
395
+ <span class="text-text-primary">Streak reminders</span>
396
+ <p class="text-xs text-text-secondary">Daily reminders to maintain your streak</p>
397
+ </div>
398
+ <button class="relative inline-flex h-6 w-11 items-center rounded-full bg-primary transition-colors">
399
+ <span class="inline-block h-4 w-4 transform rounded-full bg-white transition-transform translate-x-6"></span>
400
+ </button>
401
+ </div>
402
+ <div class="flex items-center justify-between">
403
+ <div>
404
+ <span class="text-text-primary">Achievement celebrations</span>
405
+ <p class="text-xs text-text-secondary">Notifications for milestones and achievements</p>
406
+ </div>
407
+ <button class="relative inline-flex h-6 w-11 items-center rounded-full bg-primary transition-colors">
408
+ <span class="inline-block h-4 w-4 transform rounded-full bg-white transition-transform translate-x-6"></span>
409
+ </button>
410
+ </div>
411
+ <div class="flex items-center justify-between">
412
+ <div>
413
+ <span class="text-text-primary">New topic alerts</span>
414
+ <p class="text-xs text-text-secondary">Notify when new quiz topics are available</p>
415
+ </div>
416
+ <button class="relative inline-flex h-6 w-11 items-center rounded-full bg-gray-300 transition-colors">
417
+ <span class="inline-block h-4 w-4 transform rounded-full bg-white transition-transform translate-x-1"></span>
418
+ </button>
419
+ </div>
420
+ <div class="flex items-center justify-between">
421
+ <div>
422
+ <span class="text-text-primary">Weekly progress reports</span>
423
+ <p class="text-xs text-text-secondary">Summary of your weekly quiz performance</p>
424
+ </div>
425
+ <button class="relative inline-flex h-6 w-11 items-center rounded-full bg-primary transition-colors">
426
+ <span class="inline-block h-4 w-4 transform rounded-full bg-white transition-transform translate-x-6"></span>
427
+ </button>
428
+ </div>
429
+ </div>
430
+ </div>
431
+ </div>
432
+
433
+ <!-- Data Management Section -->
434
+ <div id="dataSection" class="settings-section hidden">
435
+ <div class="card p-6">
436
+ <div class="flex items-center mb-6">
437
+ <div class="w-12 h-12 bg-error-100 rounded-lg flex items-center justify-center mr-4">
438
+ <i class="fas fa-database text-error text-xl"></i>
439
+ </div>
440
+ <div>
441
+ <h3 class="text-xl font-semibold text-text-primary">Data Management</h3>
442
+ <p class="text-text-secondary">Manage your quiz data, statistics, and backups</p>
443
+ </div>
444
+ </div>
445
+
446
+ <div class="space-y-6">
447
+ <!-- Export Options -->
448
+ <div>
449
+ <h4 class="text-sm font-medium text-text-primary mb-3">Export Data</h4>
450
+ <div class="space-y-3">
451
+ <button class="w-full flex items-center justify-between p-4 border border-border rounded-lg hover:border-primary transition-colors">
452
+ <div class="flex items-center space-x-3">
453
+ <i class="fas fa-chart-bar text-primary"></i>
454
+ <div class="text-left">
455
+ <p class="text-sm font-medium text-text-primary">Export Statistics</p>
456
+ <p class="text-xs text-text-secondary">Download your quiz performance data</p>
457
+ </div>
458
+ </div>
459
+ <i class="fas fa-download text-text-secondary"></i>
460
+ </button>
461
+ <button class="w-full flex items-center justify-between p-4 border border-border rounded-lg hover:border-secondary transition-colors">
462
+ <div class="flex items-center space-x-3">
463
+ <i class="fas fa-history text-secondary"></i>
464
+ <div class="text-left">
465
+ <p class="text-sm font-medium text-text-primary">Export Progress</p>
466
+ <p class="text-xs text-text-secondary">Backup your learning progress</p>
467
+ </div>
468
+ </div>
469
+ <i class="fas fa-download text-text-secondary"></i>
470
+ </button>
471
+ </div>
472
+ </div>
473
+
474
+ <!-- Reset Options -->
475
+ <div>
476
+ <h4 class="text-sm font-medium text-text-primary mb-3">Reset Data</h4>
477
+ <div class="space-y-3">
478
+ <button class="w-full flex items-center justify-between p-4 border border-warning rounded-lg hover:bg-warning-50 transition-colors">
479
+ <div class="flex items-center space-x-3">
480
+ <i class="fas fa-undo text-warning"></i>
481
+ <div class="text-left">
482
+ <p class="text-sm font-medium text-warning">Reset Statistics</p>
483
+ <p class="text-xs text-text-secondary">Clear all quiz statistics and scores</p>
484
+ </div>
485
+ </div>
486
+ <i class="fas fa-exclamation-triangle text-warning"></i>
487
+ </button>
488
+ <button class="w-full flex items-center justify-between p-4 border border-error rounded-lg hover:bg-error-50 transition-colors">
489
+ <div class="flex items-center space-x-3">
490
+ <i class="fas fa-trash text-error"></i>
491
+ <div class="text-left">
492
+ <p class="text-sm font-medium text-error">Reset All Data</p>
493
+ <p class="text-xs text-text-secondary">Delete all data and start fresh</p>
494
+ </div>
495
+ </div>
496
+ <i class="fas fa-exclamation-triangle text-error"></i>
497
+ </button>
498
+ </div>
499
+ </div>
500
+ </div>
501
+ </div>
502
+ </div>
503
+
504
+ <!-- Accessibility Section -->
505
+ <div id="accessibilitySection" class="settings-section hidden">
506
+ <div class="card p-6">
507
+ <div class="flex items-center mb-6">
508
+ <div class="w-12 h-12 bg-success-100 rounded-lg flex items-center justify-center mr-4">
509
+ <i class="fas fa-universal-access text-success text-xl"></i>
510
+ </div>
511
+ <div>
512
+ <h3 class="text-xl font-semibold text-text-primary">Accessibility Settings</h3>
513
+ <p class="text-text-secondary">Customize accessibility features for better usability</p>
514
+ </div>
515
+ </div>
516
+
517
+ <div class="space-y-6">
518
+ <!-- Font Size -->
519
+ <div>
520
+ <label class="block text-sm font-medium text-text-primary mb-3">Font Size</label>
521
+ <div class="flex items-center space-x-4">
522
+ <span class="text-sm text-text-secondary">A</span>
523
+ <input type="range" min="12" max="24" value="16" class="flex-1 h-2 bg-surface rounded-lg appearance-none cursor-pointer" />
524
+ <span class="text-lg text-text-secondary">A</span>
525
+ </div>
526
+ <div class="flex justify-between text-xs text-text-secondary mt-1">
527
+ <span>Small</span>
528
+ <span>Large</span>
529
+ </div>
530
+ </div>
531
+
532
+ <!-- Contrast Options -->
533
+ <div>
534
+ <label class="block text-sm font-medium text-text-primary mb-3">Contrast Level</label>
535
+ <div class="grid grid-cols-3 gap-3">
536
+ <div class="contrast-option border border-border rounded-lg p-3 cursor-pointer hover:border-primary text-center">
537
+ <div class="w-8 h-8 bg-gray-300 rounded mx-auto mb-2"></div>
538
+ <p class="text-xs text-text-primary">Normal</p>
539
+ </div>
540
+ <div class="contrast-option border-2 border-primary bg-primary-50 rounded-lg p-3 cursor-pointer text-center">
541
+ <div class="w-8 h-8 bg-gray-600 rounded mx-auto mb-2"></div>
542
+ <p class="text-xs text-primary">High</p>
543
+ </div>
544
+ <div class="contrast-option border border-border rounded-lg p-3 cursor-pointer hover:border-primary text-center">
545
+ <div class="w-8 h-8 bg-black rounded mx-auto mb-2"></div>
546
+ <p class="text-xs text-text-primary">Maximum</p>
547
+ </div>
548
+ </div>
549
+ </div>
550
+
551
+ <!-- Accessibility Features -->
552
+ <div class="space-y-4">
553
+ <div class="flex items-center justify-between">
554
+ <div>
555
+ <span class="text-text-primary">Reduce motion</span>
556
+ <p class="text-xs text-text-secondary">Minimize animations and transitions</p>
557
+ </div>
558
+ <button class="relative inline-flex h-6 w-11 items-center rounded-full bg-gray-300 transition-colors">
559
+ <span class="inline-block h-4 w-4 transform rounded-full bg-white transition-transform translate-x-1"></span>
560
+ </button>
561
+ </div>
562
+ <div class="flex items-center justify-between">
563
+ <div>
564
+ <span class="text-text-primary">Screen reader support</span>
565
+ <p class="text-xs text-text-secondary">Enhanced compatibility with screen readers</p>
566
+ </div>
567
+ <button class="relative inline-flex h-6 w-11 items-center rounded-full bg-primary transition-colors">
568
+ <span class="inline-block h-4 w-4 transform rounded-full bg-white transition-transform translate-x-6"></span>
569
+ </button>
570
+ </div>
571
+ <div class="flex items-center justify-between">
572
+ <div>
573
+ <span class="text-text-primary">Keyboard navigation</span>
574
+ <p class="text-xs text-text-secondary">Enhanced keyboard shortcuts and navigation</p>
575
+ </div>
576
+ <button class="relative inline-flex h-6 w-11 items-center rounded-full bg-primary transition-colors">
577
+ <span class="inline-block h-4 w-4 transform rounded-full bg-white transition-transform translate-x-6"></span>
578
+ </button>
579
+ </div>
580
+ </div>
581
+ </div>
582
+ </div>
583
+ </div>
584
+ </div>
585
+ </div>
586
+ </div>
587
+
588
+ <!-- Mobile Layout: Accordion Style -->
589
+ <div class="lg:hidden space-y-4">
590
+ <!-- Language Settings Accordion -->
591
+ <div class="card">
592
+ <button class="accordion-btn w-full flex items-center justify-between p-4 text-left" data-target="mobileLanguage">
593
+ <div class="flex items-center space-x-3">
594
+ <i class="fas fa-language text-primary"></i>
595
+ <span class="font-medium text-text-primary">Language Settings</span>
596
+ </div>
597
+ <i class="fas fa-chevron-down text-text-secondary transition-transform"></i>
598
+ </button>
599
+ <div id="mobileLanguage" class="accordion-content hidden p-4 border-t border-border">
600
+ <div class="space-y-4">
601
+ <div>
602
+ <label class="block text-sm font-medium text-text-primary mb-2">Interface Language</label>
603
+ <select class="w-full bg-background border border-border rounded-lg px-3 py-2 text-text-primary">
604
+ <option value="en">English</option>
605
+ <option value="te">తెలుగు (Telugu)</option>
606
+ <option value="hi">हिंदी (Hindi)</option>
607
+ <option value="kn">ಕನ್ನಡ (Kannada)</option>
608
+ </select>
609
+ </div>
610
+ <div class="flex items-center justify-between">
611
+ <span class="text-text-secondary">Auto-load regional fonts</span>
612
+ <button class="relative inline-flex h-6 w-11 items-center rounded-full bg-primary transition-colors">
613
+ <span class="inline-block h-4 w-4 transform rounded-full bg-white transition-transform translate-x-6"></span>
614
+ </button>
615
+ </div>
616
+ </div>
617
+ </div>
618
+ </div>
619
+
620
+ <!-- Theme Preferences Accordion -->
621
+ <div class="card">
622
+ <button class="accordion-btn w-full flex items-center justify-between p-4 text-left" data-target="mobileTheme">
623
+ <div class="flex items-center space-x-3">
624
+ <i class="fas fa-palette text-accent"></i>
625
+ <span class="font-medium text-text-primary">Theme Preferences</span>
626
+ </div>
627
+ <i class="fas fa-chevron-down text-text-secondary transition-transform"></i>
628
+ </button>
629
+ <div id="mobileTheme" class="accordion-content hidden p-4 border-t border-border">
630
+ <div class="space-y-4">
631
+ <div class="flex items-center justify-between">
632
+ <span class="text-text-primary">Dark Theme</span>
633
+ <button class="relative inline-flex h-6 w-11 items-center rounded-full bg-primary transition-colors">
634
+ <span class="inline-block h-4 w-4 transform rounded-full bg-white transition-transform translate-x-6"></span>
635
+ </button>
636
+ </div>
637
+ <div class="flex items-center justify-between">
638
+ <span class="text-text-secondary">Auto theme switching</span>
639
+ <button class="relative inline-flex h-6 w-11 items-center rounded-full bg-gray-300 transition-colors">
640
+ <span class="inline-block h-4 w-4 transform rounded-full bg-white transition-transform translate-x-1"></span>
641
+ </button>
642
+ </div>
643
+ </div>
644
+ </div>
645
+ </div>
646
+
647
+ <!-- Quiz Configuration Accordion -->
648
+ <div class="card">
649
+ <button class="accordion-btn w-full flex items-center justify-between p-4 text-left" data-target="mobileQuiz">
650
+ <div class="flex items-center space-x-3">
651
+ <i class="fas fa-gamepad text-secondary"></i>
652
+ <span class="font-medium text-text-primary">Quiz Configuration</span>
653
+ </div>
654
+ <i class="fas fa-chevron-down text-text-secondary transition-transform"></i>
655
+ </button>
656
+ <div id="mobileQuiz" class="accordion-content hidden p-4 border-t border-border">
657
+ <div class="space-y-4">
658
+ <div>
659
+ <label class="block text-sm font-medium text-text-primary mb-2">Default Timer</label>
660
+ <input type="range" min="10" max="120" value="30" class="w-full h-2 bg-surface rounded-lg appearance-none cursor-pointer" />
661
+ </div>
662
+ <div class="flex items-center justify-between">
663
+ <span class="text-text-secondary">Enable hints</span>
664
+ <button class="relative inline-flex h-6 w-11 items-center rounded-full bg-primary transition-colors">
665
+ <span class="inline-block h-4 w-4 transform rounded-full bg-white transition-transform translate-x-6"></span>
666
+ </button>
667
+ </div>
668
+ </div>
669
+ </div>
670
+ </div>
671
+
672
+ <!-- Notifications Accordion -->
673
+ <div class="card">
674
+ <button class="accordion-btn w-full flex items-center justify-between p-4 text-left" data-target="mobileNotifications">
675
+ <div class="flex items-center space-x-3">
676
+ <i class="fas fa-bell text-warning"></i>
677
+ <span class="font-medium text-text-primary">Notifications</span>
678
+ </div>
679
+ <i class="fas fa-chevron-down text-text-secondary transition-transform"></i>
680
+ </button>
681
+ <div id="mobileNotifications" class="accordion-content hidden p-4 border-t border-border">
682
+ <div class="space-y-4">
683
+ <div class="flex items-center justify-between">
684
+ <span class="text-text-secondary">Streak reminders</span>
685
+ <button class="relative inline-flex h-6 w-11 items-center rounded-full bg-primary transition-colors">
686
+ <span class="inline-block h-4 w-4 transform rounded-full bg-white transition-transform translate-x-6"></span>
687
+ </button>
688
+ </div>
689
+ <div class="flex items-center justify-between">
690
+ <span class="text-text-secondary">Achievement celebrations</span>
691
+ <button class="relative inline-flex h-6 w-11 items-center rounded-full bg-primary transition-colors">
692
+ <span class="inline-block h-4 w-4 transform rounded-full bg-white transition-transform translate-x-6"></span>
693
+ </button>
694
+ </div>
695
+ </div>
696
+ </div>
697
+ </div>
698
+
699
+ <!-- Data Management Accordion -->
700
+ <div class="card">
701
+ <button class="accordion-btn w-full flex items-center justify-between p-4 text-left" data-target="mobileData">
702
+ <div class="flex items-center space-x-3">
703
+ <i class="fas fa-database text-error"></i>
704
+ <span class="font-medium text-text-primary">Data Management</span>
705
+ </div>
706
+ <i class="fas fa-chevron-down text-text-secondary transition-transform"></i>
707
+ </button>
708
+ <div id="mobileData" class="accordion-content hidden p-4 border-t border-border">
709
+ <div class="space-y-3">
710
+ <button class="w-full btn btn-primary">
711
+ <i class="fas fa-download mr-2"></i>
712
+ Export Data
713
+ </button>
714
+ <button class="w-full btn bg-warning text-white hover:bg-warning-600">
715
+ <i class="fas fa-undo mr-2"></i>
716
+ Reset Statistics
717
+ </button>
718
+ </div>
719
+ </div>
720
+ </div>
721
+
722
+ <!-- Accessibility Accordion -->
723
+ <div class="card">
724
+ <button class="accordion-btn w-full flex items-center justify-between p-4 text-left" data-target="mobileAccessibility">
725
+ <div class="flex items-center space-x-3">
726
+ <i class="fas fa-universal-access text-success"></i>
727
+ <span class="font-medium text-text-primary">Accessibility</span>
728
+ </div>
729
+ <i class="fas fa-chevron-down text-text-secondary transition-transform"></i>
730
+ </button>
731
+ <div id="mobileAccessibility" class="accordion-content hidden p-4 border-t border-border">
732
+ <div class="space-y-4">
733
+ <div>
734
+ <label class="block text-sm font-medium text-text-primary mb-2">Font Size</label>
735
+ <input type="range" min="12" max="24" value="16" class="w-full h-2 bg-surface rounded-lg appearance-none cursor-pointer" />
736
+ </div>
737
+ <div class="flex items-center justify-between">
738
+ <span class="text-text-secondary">Reduce motion</span>
739
+ <button class="relative inline-flex h-6 w-11 items-center rounded-full bg-gray-300 transition-colors">
740
+ <span class="inline-block h-4 w-4 transform rounded-full bg-white transition-transform translate-x-1"></span>
741
+ </button>
742
+ </div>
743
+ </div>
744
+ </div>
745
+ </div>
746
+ </div>
747
+
748
+ <!-- Action Buttons -->
749
+ <div class="mt-8 flex flex-col sm:flex-row gap-4">
750
+ <button id="saveChangesBtn" class="btn btn-primary flex-1">
751
+ <i class="fas fa-save mr-2"></i>
752
+ Save Changes
753
+ </button>
754
+ <button id="resetDefaultsBtn" class="btn bg-warning text-white hover:bg-warning-600 flex-1">
755
+ <i class="fas fa-undo mr-2"></i>
756
+ Reset to Defaults
757
+ </button>
758
+ <button id="exportDataBtn" class="btn btn-secondary flex-1">
759
+ <i class="fas fa-download mr-2"></i>
760
+ Export Data
761
+ </button>
762
+ </div>
763
+ </div>
764
+ </main>
765
+
766
+ <!-- Confirmation Modal -->
767
+ <div id="confirmationModal" class="fixed inset-0 bg-black bg-opacity-50 z-50 hidden flex items-center justify-center p-4">
768
+ <div class="bg-surface rounded-lg p-6 max-w-md w-full">
769
+ <div class="text-center">
770
+ <div class="w-16 h-16 bg-warning-100 rounded-full flex items-center justify-center mx-auto mb-4">
771
+ <i class="fas fa-exclamation-triangle text-warning text-2xl"></i>
772
+ </div>
773
+ <h3 class="text-lg font-semibold text-text-primary mb-2">Confirm Action</h3>
774
+ <p id="confirmationMessage" class="text-text-secondary mb-6">Are you sure you want to proceed with this action?</p>
775
+ <div class="flex space-x-3">
776
+ <button id="cancelBtn" class="btn bg-gray-300 text-gray-700 hover:bg-gray-400 flex-1">Cancel</button>
777
+ <button id="confirmBtn" class="btn btn-primary flex-1">Confirm</button>
778
+ </div>
779
+ </div>
780
+ </div>
781
+ </div>
782
+
783
+ <script>
784
+ // Mobile menu functionality
785
+ const mobileMenuBtn = document.getElementById('mobileMenuBtn');
786
+ const sidebar = document.getElementById('sidebar');
787
+ const mobileMenuOverlay = document.getElementById('mobileMenuOverlay');
788
+ const closeSidebar = document.getElementById('closeSidebar');
789
+
790
+ mobileMenuBtn.addEventListener('click', () => {
791
+ sidebar.classList.remove('-translate-x-full');
792
+ mobileMenuOverlay.classList.remove('hidden');
793
+ });
794
+
795
+ closeSidebar.addEventListener('click', () => {
796
+ sidebar.classList.add('-translate-x-full');
797
+ mobileMenuOverlay.classList.add('hidden');
798
+ });
799
+
800
+ mobileMenuOverlay.addEventListener('click', () => {
801
+ sidebar.classList.add('-translate-x-full');
802
+ mobileMenuOverlay.classList.add('hidden');
803
+ });
804
+
805
+ // Theme toggle functionality
806
+ const themeToggle = document.getElementById('themeToggle');
807
+ const html = document.documentElement;
808
+
809
+ themeToggle.addEventListener('click', () => {
810
+ html.classList.toggle('dark');
811
+ const isDark = html.classList.contains('dark');
812
+
813
+ // Update toggle button
814
+ const toggleSpan = themeToggle.querySelector('span');
815
+ if (isDark) {
816
+ toggleSpan.classList.add('translate-x-6');
817
+ toggleSpan.classList.remove('translate-x-1');
818
+ } else {
819
+ toggleSpan.classList.add('translate-x-1');
820
+ toggleSpan.classList.remove('translate-x-6');
821
+ }
822
+
823
+ // Save preference
824
+ localStorage.setItem('theme', isDark ? 'dark' : 'light');
825
+ });
826
+
827
+ // Load saved theme
828
+ const savedTheme = localStorage.getItem('theme');
829
+ if (savedTheme) {
830
+ html.classList.toggle('dark', savedTheme === 'dark');
831
+ const toggleSpan = themeToggle.querySelector('span');
832
+ if (savedTheme === 'dark') {
833
+ toggleSpan.classList.add('translate-x-6');
834
+ toggleSpan.classList.remove('translate-x-1');
835
+ } else {
836
+ toggleSpan.classList.add('translate-x-1');
837
+ toggleSpan.classList.remove('translate-x-6');
838
+ }
839
+ }
840
+
841
+ // Desktop settings navigation
842
+ const settingsNavBtns = document.querySelectorAll('.settings-nav-btn');
843
+ const settingsSections = document.querySelectorAll('.settings-section');
844
+
845
+ settingsNavBtns.forEach(btn => {
846
+ btn.addEventListener('click', () => {
847
+ const targetSection = btn.dataset.section;
848
+
849
+ // Update active nav button
850
+ settingsNavBtns.forEach(navBtn => {
851
+ navBtn.classList.remove('active', 'bg-primary', 'text-white');
852
+ navBtn.classList.add('text-text-secondary', 'hover:text-text-primary', 'hover:bg-surface-hover');
853
+ });
854
+ btn.classList.add('active', 'bg-primary', 'text-white');
855
+ btn.classList.remove('text-text-secondary', 'hover:text-text-primary', 'hover:bg-surface-hover');
856
+
857
+ // Show target section
858
+ settingsSections.forEach(section => {
859
+ section.classList.add('hidden');
860
+ });
861
+ document.getElementById(targetSection + 'Section').classList.remove('hidden');
862
+ });
863
+ });
864
+
865
+ // Mobile accordion functionality
866
+ const accordionBtns = document.querySelectorAll('.accordion-btn');
867
+
868
+ accordionBtns.forEach(btn => {
869
+ btn.addEventListener('click', () => {
870
+ const targetId = btn.dataset.target;
871
+ const targetContent = document.getElementById(targetId);
872
+ const chevron = btn.querySelector('.fa-chevron-down');
873
+
874
+ // Toggle content
875
+ targetContent.classList.toggle('hidden');
876
+
877
+ // Rotate chevron
878
+ if (targetContent.classList.contains('hidden')) {
879
+ chevron.style.transform = 'rotate(0deg)';
880
+ } else {
881
+ chevron.style.transform = 'rotate(180deg)';
882
+ }
883
+ });
884
+ });
885
+
886
+ // Language selection
887
+ const languageSelect = document.getElementById('languageSelect');
888
+ languageSelect.addEventListener('change', (e) => {
889
+ localStorage.setItem('selectedLanguage', e.target.value);
890
+ console.log('Language changed to:', e.target.value);
891
+ });
892
+
893
+ // Load saved language
894
+ const savedLanguage = localStorage.getItem('selectedLanguage');
895
+ if (savedLanguage) {
896
+ languageSelect.value = savedLanguage;
897
+ }
898
+
899
+ // Toggle switches functionality
900
+ document.querySelectorAll('button[class*="inline-flex"]').forEach(toggle => {
901
+ toggle.addEventListener('click', () => {
902
+ const span = toggle.querySelector('span');
903
+ const isActive = span.classList.contains('translate-x-6');
904
+
905
+ if (isActive) {
906
+ span.classList.remove('translate-x-6');
907
+ span.classList.add('translate-x-1');
908
+ toggle.classList.remove('bg-primary');
909
+ toggle.classList.add('bg-gray-300');
910
+ } else {
911
+ span.classList.remove('translate-x-1');
912
+ span.classList.add('translate-x-6');
913
+ toggle.classList.remove('bg-gray-300');
914
+ toggle.classList.add('bg-primary');
915
+ }
916
+ });
917
+ });
918
+
919
+ // Range sliders
920
+ document.querySelectorAll('input[type="range"]').forEach(slider => {
921
+ slider.addEventListener('input', (e) => {
922
+ const value = e.target.value;
923
+ const nextSibling = e.target.nextElementSibling;
924
+ if (nextSibling && nextSibling.tagName === 'SPAN') {
925
+ if (e.target.min === '10' && e.target.max === '120') {
926
+ nextSibling.textContent = value + 's';
927
+ } else {
928
+ nextSibling.textContent = value + 'px';
929
+ }
930
+ }
931
+ });
932
+ });
933
+
934
+ // Confirmation modal
935
+ const confirmationModal = document.getElementById('confirmationModal');
936
+ const confirmationMessage = document.getElementById('confirmationMessage');
937
+ const cancelBtn = document.getElementById('cancelBtn');
938
+ const confirmBtn = document.getElementById('confirmBtn');
939
+
940
+ function showConfirmation(message, onConfirm) {
941
+ confirmationMessage.textContent = message;
942
+ confirmationModal.classList.remove('hidden');
943
+
944
+ confirmBtn.onclick = () => {
945
+ confirmationModal.classList.add('hidden');
946
+ onConfirm();
947
+ };
948
+ }
949
+
950
+ cancelBtn.addEventListener('click', () => {
951
+ confirmationModal.classList.add('hidden');
952
+ });
953
+
954
+ // Action buttons
955
+ const saveChangesBtn = document.getElementById('saveChangesBtn');
956
+ const resetDefaultsBtn = document.getElementById('resetDefaultsBtn');
957
+ const exportDataBtn = document.getElementById('exportDataBtn');
958
+
959
+ saveChangesBtn.addEventListener('click', () => {
960
+ // Save all settings to localStorage
961
+ const settings = {
962
+ language: languageSelect.value,
963
+ theme: html.classList.contains('dark') ? 'dark' : 'light',
964
+ // Add other settings here
965
+ };
966
+ localStorage.setItem('userSettings', JSON.stringify(settings));
967
+
968
+ // Show success feedback
969
+ saveChangesBtn.innerHTML = '<i class="fas fa-check mr-2"></i>Saved!';
970
+ saveChangesBtn.classList.add('bg-success');
971
+ setTimeout(() => {
972
+ saveChangesBtn.innerHTML = '<i class="fas fa-save mr-2"></i>Save Changes';
973
+ saveChangesBtn.classList.remove('bg-success');
974
+ }, 2000);
975
+ });
976
+
977
+ resetDefaultsBtn.addEventListener('click', () => {
978
+ showConfirmation('This will reset all settings to their default values. Are you sure?', () => {
979
+ localStorage.removeItem('userSettings');
980
+ localStorage.removeItem('selectedLanguage');
981
+ localStorage.removeItem('theme');
982
+ location.reload();
983
+ });
984
+ });
985
+
986
+ exportDataBtn.addEventListener('click', () => {
987
+ const data = {
988
+ settings: JSON.parse(localStorage.getItem('userSettings') || '{}'),
989
+ language: localStorage.getItem('selectedLanguage'),
990
+ theme: localStorage.getItem('theme'),
991
+ // Add other data here
992
+ };
993
+
994
+ const blob = new Blob([JSON.stringify(data, null, 2)], { type: 'application/json' });
995
+ const url = URL.createObjectURL(blob);
996
+ const a = document.createElement('a');
997
+ a.href = url;
998
+ a.download = 'triviaverse-settings.json';
999
+ a.click();
1000
+ URL.revokeObjectURL(url);
1001
+ });
1002
+
1003
+ // Initialize
1004
+ document.addEventListener('DOMContentLoaded', () => {
1005
+ // Load saved settings
1006
+ const savedSettings = localStorage.getItem('userSettings');
1007
+ if (savedSettings) {
1008
+ const settings = JSON.parse(savedSettings);
1009
+ // Apply saved settings
1010
+ console.log('Loaded settings:', settings);
1011
+ }
1012
+ });
1013
+ </script>
1014
+ </body>
1015
+ </html>
pages/topic_selection_browse.html ADDED
@@ -0,0 +1,702 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en" class="dark">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>Topic Selection & Browse - TriviaVerse Quiz</title>
7
+ <link rel="stylesheet" href="../css/main.css" />
8
+ <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" rel="stylesheet" />
9
+ <script type="module" src="https://static.rocket.new/rocket-web.js?_cfg=https%3A%2F%2Ftriviavers2501back.builtwithrocket.new&_be=https%3A%2F%2Fapplication.rocket.new&_v=0.1.5"></script>
10
+ </head>
11
+ <body class="bg-background text-text-primary transition-theme">
12
+ <!-- Mobile Menu Overlay -->
13
+ <div id="mobileMenuOverlay" class="fixed inset-0 bg-black bg-opacity-50 z-40 hidden lg:hidden"></div>
14
+
15
+ <!-- Sidebar -->
16
+ <aside id="sidebar" class="fixed left-0 top-0 h-full w-80 bg-surface border-r border-border transform -translate-x-full lg:translate-x-0 transition-transform duration-300 z-50 lg:z-auto">
17
+ <div class="p-6 border-b border-border">
18
+ <!-- Logo -->
19
+ <div class="flex items-center space-x-3 mb-6">
20
+ <div class="w-10 h-10 bg-gradient-to-br from-primary to-secondary rounded-lg flex items-center justify-center">
21
+ <i class="fas fa-brain text-white text-lg"></i>
22
+ </div>
23
+ <div>
24
+ <h1 class="text-xl font-bold text-text-primary">TriviaVerse</h1>
25
+ <p class="text-sm text-text-secondary">Quiz Platform</p>
26
+ </div>
27
+ </div>
28
+
29
+ <!-- Close button for mobile -->
30
+ <button id="closeSidebar" class="absolute top-4 right-4 lg:hidden text-text-secondary hover:text-text-primary">
31
+ <i class="fas fa-times text-xl"></i>
32
+ </button>
33
+ </div>
34
+
35
+ <!-- Navigation -->
36
+ <nav class="p-6 space-y-2">
37
+ <a href="quiz_dashboard.html" class="flex items-center space-x-3 px-4 py-3 rounded-lg text-text-secondary hover:text-text-primary hover:bg-surface-hover transition-colors">
38
+ <i class="fas fa-home"></i>
39
+ <span>Dashboard</span>
40
+ </a>
41
+ <a href="active_quiz_interface.html" class="flex items-center space-x-3 px-4 py-3 rounded-lg text-text-secondary hover:text-text-primary hover:bg-surface-hover transition-colors">
42
+ <i class="fas fa-play-circle"></i>
43
+ <span>Active Quiz</span>
44
+ </a>
45
+ <a href="quiz_results_statistics.html" class="flex items-center space-x-3 px-4 py-3 rounded-lg text-text-secondary hover:text-text-primary hover:bg-surface-hover transition-colors">
46
+ <i class="fas fa-chart-bar"></i>
47
+ <span>Statistics</span>
48
+ </a>
49
+ <a href="topic_selection_browse.html" class="flex items-center space-x-3 px-4 py-3 rounded-lg bg-primary text-white">
50
+ <i class="fas fa-book"></i>
51
+ <span>Browse Topics</span>
52
+ </a>
53
+ <a href="settings_preferences.html" class="flex items-center space-x-3 px-4 py-3 rounded-lg text-text-secondary hover:text-text-primary hover:bg-surface-hover transition-colors">
54
+ <i class="fas fa-cog"></i>
55
+ <span>Settings</span>
56
+ </a>
57
+ </nav>
58
+
59
+ <!-- Advanced Filters -->
60
+ <div class="p-6 border-t border-border">
61
+ <h3 class="text-sm font-semibold text-text-primary mb-4">Advanced Filters</h3>
62
+
63
+ <!-- Difficulty Level -->
64
+ <div class="mb-4">
65
+ <label class="block text-sm text-text-secondary mb-2">Difficulty Level</label>
66
+ <select id="difficultyFilter" class="w-full bg-background border border-border rounded-lg px-3 py-2 text-text-primary focus:outline-none focus:ring-2 focus:ring-primary">
67
+ <option value>All Levels</option>
68
+ <option value="beginner">🟢 Beginner</option>
69
+ <option value="intermediate">🟡 Intermediate</option>
70
+ <option value="advanced">🔴 Advanced</option>
71
+ <option value="expert">🟣 Expert</option>
72
+ </select>
73
+ </div>
74
+
75
+ <!-- Content Source -->
76
+ <div class="mb-4">
77
+ <label class="block text-sm text-text-secondary mb-2">Content Source</label>
78
+ <div class="space-y-2">
79
+ <label class="flex items-center">
80
+ <input type="checkbox" class="mr-2 text-primary" checked />
81
+ <span class="text-sm text-text-primary">Wikipedia</span>
82
+ </label>
83
+ <label class="flex items-center">
84
+ <input type="checkbox" class="mr-2 text-primary" checked />
85
+ <span class="text-sm text-text-primary">Wikidata</span>
86
+ </label>
87
+ <label class="flex items-center">
88
+ <input type="checkbox" class="mr-2 text-primary" />
89
+ <span class="text-sm text-text-primary">Wikibooks</span>
90
+ </label>
91
+ </div>
92
+ </div>
93
+
94
+ <!-- Language Availability -->
95
+ <div class="mb-4">
96
+ <label class="block text-sm text-text-secondary mb-2">Language</label>
97
+ <select id="languageFilter" class="w-full bg-background border border-border rounded-lg px-3 py-2 text-text-primary focus:outline-none focus:ring-2 focus:ring-primary">
98
+ <option value>All Languages</option>
99
+ <option value="en">English</option>
100
+ <option value="te">తెలుగు (Telugu)</option>
101
+ <option value="hi">हिंदी (Hindi)</option>
102
+ <option value="kn">ಕನ್ನಡ (Kannada)</option>
103
+ </select>
104
+ </div>
105
+
106
+ <!-- Reset Filters -->
107
+ <button id="resetFilters" class="w-full btn btn-secondary text-sm">
108
+ <i class="fas fa-refresh mr-2"></i>
109
+ Reset Filters
110
+ </button>
111
+ </div>
112
+ </aside>
113
+
114
+ <!-- Main Content -->
115
+ <main class="lg:ml-80 min-h-screen">
116
+ <!-- Header -->
117
+ <header class="bg-surface border-b border-border p-4 lg:p-6">
118
+ <div class="flex items-center justify-between">
119
+ <!-- Mobile Menu Button -->
120
+ <button id="mobileMenuBtn" class="lg:hidden text-text-primary hover:text-primary">
121
+ <i class="fas fa-bars text-xl"></i>
122
+ </button>
123
+
124
+ <!-- Page Title -->
125
+ <div class="flex-1 lg:flex-none">
126
+ <h2 class="text-2xl font-bold text-text-primary">Browse Topics</h2>
127
+ <p class="text-text-secondary mt-1">Discover and explore quiz topics from Wikipedia</p>
128
+ </div>
129
+
130
+ <!-- User Avatar -->
131
+ <div class="hidden lg:flex items-center space-x-3">
132
+ <img src="https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?q=80&w=2940&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D" alt="User Avatar" class="w-10 h-10 rounded-full object-cover" onerror="this.src='https://images.unsplash.com/photo-1584824486509-112e4181ff6b?q=80&w=2940&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D'; this.onerror=null;" />
133
+ <div>
134
+ <p class="text-sm font-medium text-text-primary">John Doe</p>
135
+ <p class="text-xs text-text-secondary">Level 5 Quizzer</p>
136
+ </div>
137
+ </div>
138
+ </div>
139
+ </header>
140
+
141
+ <!-- Search Section -->
142
+ <div class="p-4 lg:p-6 border-b border-border bg-surface">
143
+ <div class="max-w-4xl mx-auto">
144
+ <div class="relative">
145
+ <div class="absolute inset-y-0 left-0 pl-4 flex items-center pointer-events-none">
146
+ <i class="fas fa-search text-text-secondary"></i>
147
+ </div>
148
+ <input type="text" id="topicSearch" placeholder="Search topics from Wikipedia..." class="w-full pl-12 pr-4 py-4 bg-background border border-border rounded-xl text-text-primary placeholder-text-secondary focus:outline-none focus:ring-2 focus:ring-primary focus:border-transparent" />
149
+ <div class="absolute inset-y-0 right-0 pr-4 flex items-center">
150
+ <button id="clearSearch" class="text-text-secondary hover:text-text-primary hidden">
151
+ <i class="fas fa-times"></i>
152
+ </button>
153
+ </div>
154
+ </div>
155
+
156
+ <!-- Search Suggestions -->
157
+ <div id="searchSuggestions" class="hidden mt-2 bg-background border border-border rounded-lg shadow-lg max-h-60 overflow-y-auto">
158
+ <!-- Dynamic suggestions will be populated here -->
159
+ </div>
160
+ </div>
161
+ </div>
162
+
163
+ <!-- Content Area -->
164
+ <div class="p-4 lg:p-6 space-y-8">
165
+ <!-- Trending Topics -->
166
+ <section>
167
+ <div class="flex items-center justify-between mb-6">
168
+ <h3 class="text-xl font-semibold text-text-primary">🔥 Trending Topics</h3>
169
+ <button class="text-primary hover:text-primary-700 text-sm font-medium">
170
+ View All <i class="fas fa-arrow-right ml-1"></i>
171
+ </button>
172
+ </div>
173
+
174
+ <div class="flex space-x-4 overflow-x-auto pb-4 scrollbar-hide">
175
+ <!-- Python Programming - Featured -->
176
+ <div class="flex-shrink-0 w-72 card p-6 border-2 border-primary bg-primary-50 cursor-pointer hover:shadow-lg transition-all">
177
+ <div class="flex items-start justify-between mb-4">
178
+ <div class="w-12 h-12 bg-primary rounded-lg flex items-center justify-center">
179
+ <i class="fab fa-python text-white text-xl"></i>
180
+ </div>
181
+ <div class="flex items-center space-x-2">
182
+ <span class="bg-primary text-white text-xs px-2 py-1 rounded-full">Featured</span>
183
+ <span class="bg-accent text-white text-xs px-2 py-1 rounded-full">Hot</span>
184
+ </div>
185
+ </div>
186
+ <h4 class="text-lg font-semibold text-primary mb-2">Python Programming</h4>
187
+ <p class="text-sm text-text-secondary mb-4">Master Python concepts with interactive quizzes</p>
188
+ <div class="flex items-center justify-between text-xs text-text-secondary mb-4">
189
+ <span><i class="fas fa-question-circle mr-1"></i>250+ Questions</span>
190
+ <span><i class="fas fa-signal mr-1"></i>Intermediate</span>
191
+ <span><i class="fas fa-users mr-1"></i>1.2k Active</span>
192
+ </div>
193
+ <button class="w-full btn btn-primary text-sm">
194
+ <i class="fas fa-play mr-2"></i>Start Quiz
195
+ </button>
196
+ </div>
197
+
198
+ <!-- Quantum Physics -->
199
+ <div class="flex-shrink-0 w-72 card p-6 cursor-pointer hover:shadow-lg transition-all">
200
+ <div class="flex items-start justify-between mb-4">
201
+ <div class="w-12 h-12 bg-secondary-100 rounded-lg flex items-center justify-center">
202
+ <i class="fas fa-atom text-secondary text-xl"></i>
203
+ </div>
204
+ <div class="flex items-center space-x-2">
205
+ <span class="bg-secondary text-white text-xs px-2 py-1 rounded-full">New</span>
206
+ <span class="bg-error text-white text-xs px-2 py-1 rounded-full">🔴 Advanced</span>
207
+ </div>
208
+ </div>
209
+ <h4 class="text-lg font-semibold text-text-primary mb-2">Quantum Physics</h4>
210
+ <p class="text-sm text-text-secondary mb-4">Explore the fascinating world of quantum mechanics</p>
211
+ <div class="flex items-center justify-between text-xs text-text-secondary mb-4">
212
+ <span><i class="fas fa-question-circle mr-1"></i>180+ Questions</span>
213
+ <span><i class="fas fa-signal mr-1"></i>Advanced</span>
214
+ <span><i class="fas fa-users mr-1"></i>890 Active</span>
215
+ </div>
216
+ <button class="w-full btn btn-secondary text-sm">
217
+ <i class="fas fa-play mr-2"></i>Start Quiz
218
+ </button>
219
+ </div>
220
+
221
+ <!-- World History -->
222
+ <div class="flex-shrink-0 w-72 card p-6 cursor-pointer hover:shadow-lg transition-all">
223
+ <div class="flex items-start justify-between mb-4">
224
+ <div class="w-12 h-12 bg-accent-100 rounded-lg flex items-center justify-center">
225
+ <i class="fas fa-globe-americas text-accent text-xl"></i>
226
+ </div>
227
+ <div class="flex items-center space-x-2">
228
+ <span class="bg-accent text-white text-xs px-2 py-1 rounded-full">Popular</span>
229
+ <span class="bg-warning text-white text-xs px-2 py-1 rounded-full">🟡 Intermediate</span>
230
+ </div>
231
+ </div>
232
+ <h4 class="text-lg font-semibold text-text-primary mb-2">World History</h4>
233
+ <p class="text-sm text-text-secondary mb-4">Journey through major historical events</p>
234
+ <div class="flex items-center justify-between text-xs text-text-secondary mb-4">
235
+ <span><i class="fas fa-question-circle mr-1"></i>320+ Questions</span>
236
+ <span><i class="fas fa-signal mr-1"></i>Intermediate</span>
237
+ <span><i class="fas fa-users mr-1"></i>2.1k Active</span>
238
+ </div>
239
+ <button class="w-full btn btn-accent text-sm">
240
+ <i class="fas fa-play mr-2"></i>Start Quiz
241
+ </button>
242
+ </div>
243
+
244
+ <!-- Machine Learning -->
245
+ <div class="flex-shrink-0 w-72 card p-6 cursor-pointer hover:shadow-lg transition-all">
246
+ <div class="flex items-start justify-between mb-4">
247
+ <div class="w-12 h-12 bg-primary-100 rounded-lg flex items-center justify-center">
248
+ <i class="fas fa-robot text-primary text-xl"></i>
249
+ </div>
250
+ <div class="flex items-center space-x-2">
251
+ <span class="bg-success text-white text-xs px-2 py-1 rounded-full">Trending</span>
252
+ <span class="bg-error text-white text-xs px-2 py-1 rounded-full">🔴 Advanced</span>
253
+ </div>
254
+ </div>
255
+ <h4 class="text-lg font-semibold text-text-primary mb-2">Machine Learning</h4>
256
+ <p class="text-sm text-text-secondary mb-4">Test your AI and ML knowledge</p>
257
+ <div class="flex items-center justify-between text-xs text-text-secondary mb-4">
258
+ <span><i class="fas fa-question-circle mr-1"></i>200+ Questions</span>
259
+ <span><i class="fas fa-signal mr-1"></i>Advanced</span>
260
+ <span><i class="fas fa-users mr-1"></i>1.5k Active</span>
261
+ </div>
262
+ <button class="w-full btn btn-primary text-sm">
263
+ <i class="fas fa-play mr-2"></i>Start Quiz
264
+ </button>
265
+ </div>
266
+ </div>
267
+ </section>
268
+
269
+ <!-- Featured Categories -->
270
+ <section>
271
+ <h3 class="text-xl font-semibold text-text-primary mb-6">📚 Featured Categories</h3>
272
+
273
+ <div class="grid grid-cols-1 lg:grid-cols-2 gap-6">
274
+ <!-- Sciences Category -->
275
+ <div class="card p-6">
276
+ <div class="flex items-center justify-between mb-4">
277
+ <div class="flex items-center space-x-3">
278
+ <div class="w-12 h-12 bg-secondary-100 rounded-lg flex items-center justify-center">
279
+ <i class="fas fa-flask text-secondary text-xl"></i>
280
+ </div>
281
+ <div>
282
+ <h4 class="text-lg font-semibold text-text-primary">Sciences</h4>
283
+ <p class="text-sm text-text-secondary">Physics, Chemistry, Biology & More</p>
284
+ </div>
285
+ </div>
286
+ <button class="text-secondary hover:text-secondary-600">
287
+ <i class="fas fa-chevron-down"></i>
288
+ </button>
289
+ </div>
290
+
291
+ <div class="space-y-3">
292
+ <div class="flex items-center justify-between p-3 bg-background rounded-lg hover:bg-surface-hover cursor-pointer transition-colors">
293
+ <div class="flex items-center space-x-3">
294
+ <i class="fas fa-atom text-secondary text-sm"></i>
295
+ <span class="text-sm text-text-primary">Physics</span>
296
+ </div>
297
+ <div class="flex items-center space-x-2">
298
+ <span class="text-xs text-text-secondary">150+ questions</span>
299
+ <i class="fas fa-arrow-right text-text-secondary text-xs"></i>
300
+ </div>
301
+ </div>
302
+
303
+ <div class="flex items-center justify-between p-3 bg-background rounded-lg hover:bg-surface-hover cursor-pointer transition-colors">
304
+ <div class="flex items-center space-x-3">
305
+ <i class="fas fa-vial text-secondary text-sm"></i>
306
+ <span class="text-sm text-text-primary">Chemistry</span>
307
+ </div>
308
+ <div class="flex items-center space-x-2">
309
+ <span class="text-xs text-text-secondary">120+ questions</span>
310
+ <i class="fas fa-arrow-right text-text-secondary text-xs"></i>
311
+ </div>
312
+ </div>
313
+
314
+ <div class="flex items-center justify-between p-3 bg-background rounded-lg hover:bg-surface-hover cursor-pointer transition-colors">
315
+ <div class="flex items-center space-x-3">
316
+ <i class="fas fa-dna text-secondary text-sm"></i>
317
+ <span class="text-sm text-text-primary">Biology</span>
318
+ </div>
319
+ <div class="flex items-center space-x-2">
320
+ <span class="text-xs text-text-secondary">200+ questions</span>
321
+ <i class="fas fa-arrow-right text-text-secondary text-xs"></i>
322
+ </div>
323
+ </div>
324
+ </div>
325
+ </div></div></section>
326
+
327
+ <!-- Technology Category -->
328
+ <div class="card p-6">
329
+ <div class="flex items-center justify-between mb-4">
330
+ <div class="flex items-center space-x-3">
331
+ <div class="w-12 h-12 bg-primary-100 rounded-lg flex items-center justify-center">
332
+ <i class="fas fa-laptop-code text-primary text-xl"></i>
333
+ </div>
334
+ <div>
335
+ <h4 class="text-lg font-semibold text-text-primary">Technology</h4>
336
+ <p class="text-sm text-text-secondary">Programming, AI, Web Development</p>
337
+ </div>
338
+ </div>
339
+ <button class="text-primary hover:text-primary-600">
340
+ <i class="fas fa-chevron-down"></i>
341
+ </button>
342
+ </div>
343
+
344
+ <div class="space-y-3">
345
+ <div class="flex items-center justify-between p-3 bg-background rounded-lg hover:bg-surface-hover cursor-pointer transition-colors border-l-4 border-primary">
346
+ <div class="flex items-center space-x-3">
347
+ <i class="fab fa-python text-primary text-sm"></i>
348
+ <span class="text-sm text-text-primary font-medium">Python Programming</span>
349
+ </div>
350
+ <div class="flex items-center space-x-2">
351
+ <span class="text-xs bg-primary text-white px-2 py-1 rounded-full">Featured</span>
352
+ <i class="fas fa-arrow-right text-text-secondary text-xs"></i>
353
+ </div>
354
+ </div>
355
+
356
+ <div class="flex items-center justify-between p-3 bg-background rounded-lg hover:bg-surface-hover cursor-pointer transition-colors">
357
+ <div class="flex items-center space-x-3">
358
+ <i class="fab fa-js-square text-primary text-sm"></i>
359
+ <span class="text-sm text-text-primary">JavaScript</span>
360
+ </div>
361
+ <div class="flex items-center space-x-2">
362
+ <span class="text-xs text-text-secondary">180+ questions</span>
363
+ <i class="fas fa-arrow-right text-text-secondary text-xs"></i>
364
+ </div>
365
+ </div>
366
+
367
+ <div class="flex items-center justify-between p-3 bg-background rounded-lg hover:bg-surface-hover cursor-pointer transition-colors">
368
+ <div class="flex items-center space-x-3">
369
+ <i class="fas fa-robot text-primary text-sm"></i>
370
+ <span class="text-sm text-text-primary">Artificial Intelligence</span>
371
+ </div>
372
+ <div class="flex items-center space-x-2">
373
+ <span class="text-xs text-text-secondary">160+ questions</span>
374
+ <i class="fas fa-arrow-right text-text-secondary text-xs"></i>
375
+ </div>
376
+ </div>
377
+ </div>
378
+ </div>
379
+
380
+ <!-- History Category -->
381
+ <div class="card p-6">
382
+ <div class="flex items-center justify-between mb-4">
383
+ <div class="flex items-center space-x-3">
384
+ <div class="w-12 h-12 bg-accent-100 rounded-lg flex items-center justify-center">
385
+ <i class="fas fa-landmark text-accent text-xl"></i>
386
+ </div>
387
+ <div>
388
+ <h4 class="text-lg font-semibold text-text-primary">History</h4>
389
+ <p class="text-sm text-text-secondary">Ancient, Medieval, Modern History</p>
390
+ </div>
391
+ </div>
392
+ <button class="text-accent hover:text-accent-600">
393
+ <i class="fas fa-chevron-down"></i>
394
+ </button>
395
+ </div>
396
+
397
+ <div class="space-y-3">
398
+ <div class="flex items-center justify-between p-3 bg-background rounded-lg hover:bg-surface-hover cursor-pointer transition-colors">
399
+ <div class="flex items-center space-x-3">
400
+ <i class="fas fa-crown text-accent text-sm"></i>
401
+ <span class="text-sm text-text-primary">Ancient Civilizations</span>
402
+ </div>
403
+ <div class="flex items-center space-x-2">
404
+ <span class="text-xs text-text-secondary">140+ questions</span>
405
+ <i class="fas fa-arrow-right text-text-secondary text-xs"></i>
406
+ </div>
407
+ </div>
408
+
409
+ <div class="flex items-center justify-between p-3 bg-background rounded-lg hover:bg-surface-hover cursor-pointer transition-colors">
410
+ <div class="flex items-center space-x-3">
411
+ <i class="fas fa-globe-americas text-accent text-sm"></i>
412
+ <span class="text-sm text-text-primary">World Wars</span>
413
+ </div>
414
+ <div class="flex items-center space-x-2">
415
+ <span class="text-xs text-text-secondary">190+ questions</span>
416
+ <i class="fas fa-arrow-right text-text-secondary text-xs"></i>
417
+ </div>
418
+ </div>
419
+
420
+ <div class="flex items-center justify-between p-3 bg-background rounded-lg hover:bg-surface-hover cursor-pointer transition-colors">
421
+ <div class="flex items-center space-x-3">
422
+ <i class="fas fa-flag text-accent text-sm"></i>
423
+ <span class="text-sm text-text-primary">Indian History</span>
424
+ </div>
425
+ <div class="flex items-center space-x-2">
426
+ <span class="text-xs text-text-secondary">220+ questions</span>
427
+ <i class="fas fa-arrow-right text-text-secondary text-xs"></i>
428
+ </div>
429
+ </div>
430
+ </div>
431
+ </div>
432
+
433
+ <!-- Literature Category -->
434
+ <div class="card p-6">
435
+ <div class="flex items-center justify-between mb-4">
436
+ <div class="flex items-center space-x-3">
437
+ <div class="w-12 h-12 bg-success-100 rounded-lg flex items-center justify-center">
438
+ <i class="fas fa-book-open text-success text-xl"></i>
439
+ </div>
440
+ <div>
441
+ <h4 class="text-lg font-semibold text-text-primary">Literature</h4>
442
+ <p class="text-sm text-text-secondary">Classic & Modern Literature</p>
443
+ </div>
444
+ </div>
445
+ <button class="text-success hover:text-success-600">
446
+ <i class="fas fa-chevron-down"></i>
447
+ </button>
448
+ </div>
449
+
450
+ <div class="space-y-3">
451
+ <div class="flex items-center justify-between p-3 bg-background rounded-lg hover:bg-surface-hover cursor-pointer transition-colors">
452
+ <div class="flex items-center space-x-3">
453
+ <i class="fas fa-feather text-success text-sm"></i>
454
+ <span class="text-sm text-text-primary">Shakespeare</span>
455
+ </div>
456
+ <div class="flex items-center space-x-2">
457
+ <span class="text-xs text-text-secondary">100+ questions</span>
458
+ <i class="fas fa-arrow-right text-text-secondary text-xs"></i>
459
+ </div>
460
+ </div>
461
+
462
+ <div class="flex items-center justify-between p-3 bg-background rounded-lg hover:bg-surface-hover cursor-pointer transition-colors">
463
+ <div class="flex items-center space-x-3">
464
+ <i class="fas fa-scroll text-success text-sm"></i>
465
+ <span class="text-sm text-text-primary">Poetry</span>
466
+ </div>
467
+ <div class="flex items-center space-x-2">
468
+ <span class="text-xs text-text-secondary">80+ questions</span>
469
+ <i class="fas fa-arrow-right text-text-secondary text-xs"></i>
470
+ </div>
471
+ </div>
472
+
473
+ <div class="flex items-center justify-between p-3 bg-background rounded-lg hover:bg-surface-hover cursor-pointer transition-colors">
474
+ <div class="flex items-center space-x-3">
475
+ <i class="fas fa-book text-success text-sm"></i>
476
+ <span class="text-sm text-text-primary">Modern Fiction</span>
477
+ </div>
478
+ <div class="flex items-center space-x-2">
479
+ <span class="text-xs text-text-secondary">120+ questions</span>
480
+ <i class="fas fa-arrow-right text-text-secondary text-xs"></i>
481
+ </div>
482
+ </div>
483
+ </div>
484
+ </div>
485
+ </div>
486
+
487
+
488
+ <!-- Quick Start Section -->
489
+ <section class="card p-8 text-center bg-gradient-to-r from-primary-50 to-secondary-50 border-2 border-primary">
490
+ <div class="max-w-2xl mx-auto">
491
+ <div class="w-16 h-16 bg-primary rounded-full flex items-center justify-center mx-auto mb-4">
492
+ <i class="fas fa-rocket text-white text-2xl"></i>
493
+ </div>
494
+ <h3 class="text-2xl font-bold text-text-primary mb-2">Ready to Start Your Quiz Journey?</h3>
495
+ <p class="text-text-secondary mb-6">Select any topic above or use our intelligent topic matching to find the perfect quiz for you.</p>
496
+ <div class="flex flex-col sm:flex-row gap-4 justify-center">
497
+ <button id="randomTopicBtn" class="btn btn-primary px-6 py-3">
498
+ <i class="fas fa-random mr-2"></i>
499
+ Surprise Me with a Topic
500
+ </button>
501
+ <button id="continueLastBtn" class="btn btn-secondary px-6 py-3">
502
+ <i class="fas fa-play mr-2"></i>
503
+ Continue Last Quiz
504
+ </button>
505
+ </div>
506
+ </div>
507
+ </section>
508
+
509
+ </main>
510
+
511
+ <script>
512
+ // Mobile menu functionality
513
+ const mobileMenuBtn = document.getElementById('mobileMenuBtn');
514
+ const sidebar = document.getElementById('sidebar');
515
+ const mobileMenuOverlay = document.getElementById('mobileMenuOverlay');
516
+ const closeSidebar = document.getElementById('closeSidebar');
517
+
518
+ mobileMenuBtn.addEventListener('click', () => {
519
+ sidebar.classList.remove('-translate-x-full');
520
+ mobileMenuOverlay.classList.remove('hidden');
521
+ });
522
+
523
+ closeSidebar.addEventListener('click', () => {
524
+ sidebar.classList.add('-translate-x-full');
525
+ mobileMenuOverlay.classList.add('hidden');
526
+ });
527
+
528
+ mobileMenuOverlay.addEventListener('click', () => {
529
+ sidebar.classList.add('-translate-x-full');
530
+ mobileMenuOverlay.classList.add('hidden');
531
+ });
532
+
533
+ // Search functionality
534
+ const topicSearch = document.getElementById('topicSearch');
535
+ const clearSearch = document.getElementById('clearSearch');
536
+ const searchSuggestions = document.getElementById('searchSuggestions');
537
+
538
+ // Mock search suggestions
539
+ const mockSuggestions = [
540
+ { title: 'Python Programming', category: 'Technology', questions: 250 },
541
+ { title: 'Quantum Physics', category: 'Science', questions: 180 },
542
+ { title: 'World History', category: 'History', questions: 320 },
543
+ { title: 'Machine Learning', category: 'Technology', questions: 200 },
544
+ { title: 'Shakespeare', category: 'Literature', questions: 100 },
545
+ { title: 'Chemistry Basics', category: 'Science', questions: 150 },
546
+ { title: 'Ancient Rome', category: 'History', questions: 140 },
547
+ { title: 'JavaScript', category: 'Technology', questions: 180 }
548
+ ];
549
+
550
+ topicSearch.addEventListener('input', (e) => {
551
+ const query = e.target.value.toLowerCase();
552
+
553
+ if (query.length > 0) {
554
+ clearSearch.classList.remove('hidden');
555
+
556
+ const filteredSuggestions = mockSuggestions.filter(item =>
557
+ item.title.toLowerCase().includes(query) ||
558
+ item.category.toLowerCase().includes(query)
559
+ );
560
+
561
+ if (filteredSuggestions.length > 0) {
562
+ searchSuggestions.innerHTML = filteredSuggestions.map(item => `
563
+ <div class="p-3 hover:bg-surface-hover cursor-pointer border-b border-border last:border-b-0" data-topic="${item.title}">
564
+ <div class="flex items-center justify-between">
565
+ <div>
566
+ <p class="text-sm font-medium text-text-primary">${item.title}</p>
567
+ <p class="text-xs text-text-secondary">${item.category} • ${item.questions}+ questions</p>
568
+ </div>
569
+ <i class="fas fa-arrow-right text-text-secondary text-xs"></i>
570
+ </div>
571
+ </div>
572
+ `).join('');
573
+ searchSuggestions.classList.remove('hidden');
574
+ } else {
575
+ searchSuggestions.innerHTML = `
576
+ <div class="p-4 text-center text-text-secondary">
577
+ <i class="fas fa-search mb-2"></i>
578
+ <p class="text-sm">No topics found for "${query}"</p>
579
+ </div>
580
+ `;
581
+ searchSuggestions.classList.remove('hidden');
582
+ }
583
+ } else {
584
+ clearSearch.classList.add('hidden');
585
+ searchSuggestions.classList.add('hidden');
586
+ }
587
+ });
588
+
589
+ clearSearch.addEventListener('click', () => {
590
+ topicSearch.value = '';
591
+ clearSearch.classList.add('hidden');
592
+ searchSuggestions.classList.add('hidden');
593
+ });
594
+
595
+ // Handle suggestion clicks
596
+ searchSuggestions.addEventListener('click', (e) => {
597
+ const suggestionItem = e.target.closest('[data-topic]');
598
+ if (suggestionItem) {
599
+ const topicName = suggestionItem.dataset.topic;
600
+ localStorage.setItem('selectedTopic', topicName.toLowerCase().replace(/\s+/g, '_'));
601
+ window.location.href = 'active_quiz_interface.html';
602
+ }
603
+ });
604
+
605
+ // Filter functionality
606
+ const difficultyFilter = document.getElementById('difficultyFilter');
607
+ const languageFilter = document.getElementById('languageFilter');
608
+ const resetFilters = document.getElementById('resetFilters');
609
+
610
+ difficultyFilter.addEventListener('change', applyFilters);
611
+ languageFilter.addEventListener('change', applyFilters);
612
+
613
+ function applyFilters() {
614
+ const difficulty = difficultyFilter.value;
615
+ const language = languageFilter.value;
616
+
617
+ // Here you would implement actual filtering logic
618
+ console.log('Applying filters:', { difficulty, language });
619
+ }
620
+
621
+ resetFilters.addEventListener('click', () => {
622
+ difficultyFilter.value = '';
623
+ languageFilter.value = '';
624
+ document.querySelectorAll('input[type="checkbox"]').forEach(cb => cb.checked = false);
625
+ document.querySelectorAll('input[type="checkbox"]')[0].checked = true; // Wikipedia
626
+ document.querySelectorAll('input[type="checkbox"]')[1].checked = true; // Wikidata
627
+ applyFilters();
628
+ });
629
+
630
+ // Topic card clicks
631
+ document.addEventListener('click', (e) => {
632
+ const topicCard = e.target.closest('.card');
633
+ if (topicCard && topicCard.querySelector('button')) {
634
+ const button = topicCard.querySelector('button');
635
+ if (e.target === button || button.contains(e.target)) {
636
+ // Get topic from card title
637
+ const topicTitle = topicCard.querySelector('h4');
638
+ if (topicTitle) {
639
+ const topicName = topicTitle.textContent.toLowerCase().replace(/\s+/g, '_');
640
+ localStorage.setItem('selectedTopic', topicName);
641
+ window.location.href = 'active_quiz_interface.html';
642
+ }
643
+ }
644
+ }
645
+ });
646
+
647
+ // Category item clicks
648
+ document.addEventListener('click', (e) => {
649
+ const categoryItem = e.target.closest('.cursor-pointer');
650
+ if (categoryItem && categoryItem.querySelector('span')) {
651
+ const topicSpan = categoryItem.querySelector('span');
652
+ const topicName = topicSpan.textContent.toLowerCase().replace(/\s+/g, '_');
653
+ localStorage.setItem('selectedTopic', topicName);
654
+ window.location.href = 'active_quiz_interface.html';
655
+ }
656
+ });
657
+
658
+ // Quick start buttons
659
+ const randomTopicBtn = document.getElementById('randomTopicBtn');
660
+ const continueLastBtn = document.getElementById('continueLastBtn');
661
+
662
+ randomTopicBtn.addEventListener('click', () => {
663
+ const randomTopics = ['python_programming', 'quantum_physics', 'world_history', 'machine_learning', 'chemistry', 'javascript'];
664
+ const randomTopic = randomTopics[Math.floor(Math.random() * randomTopics.length)];
665
+ localStorage.setItem('selectedTopic', randomTopic);
666
+ window.location.href = 'active_quiz_interface.html';
667
+ });
668
+
669
+ continueLastBtn.addEventListener('click', () => {
670
+ const lastTopic = localStorage.getItem('selectedTopic') || 'python_programming';
671
+ localStorage.setItem('selectedTopic', lastTopic);
672
+ window.location.href = 'active_quiz_interface.html';
673
+ });
674
+
675
+ // Hide search suggestions when clicking outside
676
+ document.addEventListener('click', (e) => {
677
+ if (!topicSearch.contains(e.target) && !searchSuggestions.contains(e.target)) {
678
+ searchSuggestions.classList.add('hidden');
679
+ }
680
+ });
681
+
682
+ // Category expand/collapse
683
+ document.querySelectorAll('.fa-chevron-down').forEach(chevron => {
684
+ chevron.addEventListener('click', (e) => {
685
+ e.preventDefault();
686
+ const card = e.target.closest('.card');
687
+ const content = card.querySelector('.space-y-3');
688
+
689
+ if (content.style.display === 'none') {
690
+ content.style.display = 'block';
691
+ e.target.classList.remove('fa-chevron-down');
692
+ e.target.classList.add('fa-chevron-up');
693
+ } else {
694
+ content.style.display = 'none';
695
+ e.target.classList.remove('fa-chevron-up');
696
+ e.target.classList.add('fa-chevron-down');
697
+ }
698
+ });
699
+ });
700
+ </script>
701
+ </body>
702
+ </html>
public/favicon.ico ADDED

Git LFS Details

  • SHA256: 97ee1031ad8f58c4ac678a14e017f12b35b04469d3134059683bd24e93cb458a
  • Pointer size: 131 Bytes
  • Size of remote file: 175 kB
public/manifest.json ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "short_name": "triviaverse_quiz",
3
+ "name": "triviaverse_quiz",
4
+ "icons": [
5
+ {
6
+ "src": "favicon.ico",
7
+ "sizes": "64x64 32x32 24x24 16x16",
8
+ "type": "image/x-icon"
9
+ }
10
+ ],
11
+ "start_url": ".",
12
+ "display": "standalone",
13
+ "theme_color": "#000000",
14
+ "background_color": "#ffffff"
15
+ }
streamlit_web_interface.html ADDED
@@ -0,0 +1,1431 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>TriviaVerse - Streamlit Web Interface</title>
7
+ <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" rel="stylesheet">
8
+ <style>
9
+ /* Streamlit-inspired design system */
10
+ :root {
11
+ --primary-color: #FF6B6B;
12
+ --secondary-color: #4ECDC4;
13
+ --accent-color: #45B7D1;
14
+ --success-color: #96CEB4;
15
+ --warning-color: #FFEAA7;
16
+ --error-color: #D63031;
17
+ --background-color: #0E1117;
18
+ --surface-color: #1F2937;
19
+ --text-primary: #FFFFFF;
20
+ --text-secondary: #94A3B8;
21
+ --border-color: #374151;
22
+ --sidebar-width: 21rem;
23
+ }
24
+
25
+ * {
26
+ margin: 0;
27
+ padding: 0;
28
+ box-sizing: border-box;
29
+ }
30
+
31
+ body {
32
+ font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
33
+ background-color: var(--background-color);
34
+ color: var(--text-primary);
35
+ line-height: 1.6;
36
+ }
37
+
38
+ /* Streamlit-style sidebar */
39
+ .sidebar {
40
+ position: fixed;
41
+ left: 0;
42
+ top: 0;
43
+ width: var(--sidebar-width);
44
+ height: 100vh;
45
+ background-color: var(--surface-color);
46
+ border-right: 1px solid var(--border-color);
47
+ padding: 1.5rem;
48
+ overflow-y: auto;
49
+ z-index: 1000;
50
+ transition: transform 0.3s ease;
51
+ }
52
+
53
+ .sidebar.hidden {
54
+ transform: translateX(-100%);
55
+ }
56
+
57
+ .sidebar-header {
58
+ display: flex;
59
+ align-items: center;
60
+ gap: 0.75rem;
61
+ margin-bottom: 2rem;
62
+ padding-bottom: 1rem;
63
+ border-bottom: 1px solid var(--border-color);
64
+ }
65
+
66
+ .sidebar-logo {
67
+ width: 2.5rem;
68
+ height: 2.5rem;
69
+ background: linear-gradient(135deg, var(--primary-color), var(--secondary-color));
70
+ border-radius: 0.5rem;
71
+ display: flex;
72
+ align-items: center;
73
+ justify-content: center;
74
+ color: white;
75
+ }
76
+
77
+ .sidebar-title {
78
+ font-size: 1.5rem;
79
+ font-weight: 700;
80
+ color: var(--text-primary);
81
+ }
82
+
83
+ .sidebar-subtitle {
84
+ font-size: 0.875rem;
85
+ color: var(--text-secondary);
86
+ }
87
+
88
+ /* Main content area */
89
+ .main-content {
90
+ margin-left: var(--sidebar-width);
91
+ padding: 2rem;
92
+ transition: margin-left 0.3s ease;
93
+ }
94
+
95
+ .main-content.full-width {
96
+ margin-left: 0;
97
+ }
98
+
99
+ /* Streamlit-style components */
100
+ .st-container {
101
+ max-width: 1200px;
102
+ margin: 0 auto;
103
+ }
104
+
105
+ .st-header {
106
+ text-align: center;
107
+ margin-bottom: 3rem;
108
+ }
109
+
110
+ .st-title {
111
+ font-size: 3rem;
112
+ font-weight: 800;
113
+ background: linear-gradient(135deg, var(--primary-color), var(--secondary-color));
114
+ -webkit-background-clip: text;
115
+ -webkit-text-fill-color: transparent;
116
+ background-clip: text;
117
+ margin-bottom: 1rem;
118
+ }
119
+
120
+ .st-subtitle {
121
+ font-size: 1.25rem;
122
+ color: var(--text-secondary);
123
+ margin-bottom: 2rem;
124
+ }
125
+
126
+ /* Streamlit metrics */
127
+ .st-metrics {
128
+ display: grid;
129
+ grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
130
+ gap: 1.5rem;
131
+ margin-bottom: 3rem;
132
+ }
133
+
134
+ .st-metric {
135
+ background: var(--surface-color);
136
+ border: 1px solid var(--border-color);
137
+ border-radius: 0.75rem;
138
+ padding: 1.5rem;
139
+ text-align: center;
140
+ transition: transform 0.2s ease, box-shadow 0.2s ease;
141
+ }
142
+
143
+ .st-metric:hover {
144
+ transform: translateY(-2px);
145
+ box-shadow: 0 8px 25px rgba(0, 0, 0, 0.3);
146
+ }
147
+
148
+ .st-metric-value {
149
+ font-size: 2.5rem;
150
+ font-weight: 700;
151
+ margin-bottom: 0.5rem;
152
+ }
153
+
154
+ .st-metric-label {
155
+ font-size: 0.875rem;
156
+ color: var(--text-secondary);
157
+ text-transform: uppercase;
158
+ letter-spacing: 0.05em;
159
+ }
160
+
161
+ /* Streamlit columns */
162
+ .st-columns {
163
+ display: grid;
164
+ grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
165
+ gap: 2rem;
166
+ margin-bottom: 3rem;
167
+ }
168
+
169
+ .st-column {
170
+ background: var(--surface-color);
171
+ border: 1px solid var(--border-color);
172
+ border-radius: 0.75rem;
173
+ padding: 2rem;
174
+ }
175
+
176
+ /* Streamlit form elements */
177
+ .st-selectbox, .st-radio-group, .st-slider {
178
+ margin-bottom: 1.5rem;
179
+ }
180
+
181
+ .st-label {
182
+ display: block;
183
+ font-size: 0.875rem;
184
+ font-weight: 600;
185
+ color: var(--text-primary);
186
+ margin-bottom: 0.5rem;
187
+ }
188
+
189
+ .st-select {
190
+ width: 100%;
191
+ padding: 0.75rem;
192
+ background: var(--background-color);
193
+ border: 1px solid var(--border-color);
194
+ border-radius: 0.5rem;
195
+ color: var(--text-primary);
196
+ font-size: 1rem;
197
+ transition: border-color 0.2s ease;
198
+ }
199
+
200
+ .st-select:focus {
201
+ outline: none;
202
+ border-color: var(--primary-color);
203
+ }
204
+
205
+ .st-radio-options {
206
+ display: flex;
207
+ flex-direction: column;
208
+ gap: 0.75rem;
209
+ }
210
+
211
+ .st-radio-option {
212
+ display: flex;
213
+ align-items: center;
214
+ gap: 0.5rem;
215
+ padding: 0.75rem;
216
+ background: var(--background-color);
217
+ border: 1px solid var(--border-color);
218
+ border-radius: 0.5rem;
219
+ cursor: pointer;
220
+ transition: all 0.2s ease;
221
+ }
222
+
223
+ .st-radio-option:hover {
224
+ border-color: var(--primary-color);
225
+ background: rgba(255, 107, 107, 0.1);
226
+ }
227
+
228
+ .st-radio-option.selected {
229
+ border-color: var(--primary-color);
230
+ background: rgba(255, 107, 107, 0.2);
231
+ }
232
+
233
+ .st-radio-input {
234
+ width: 1rem;
235
+ height: 1rem;
236
+ margin-right: 0.5rem;
237
+ }
238
+
239
+ /* Streamlit buttons */
240
+ .st-button {
241
+ background: linear-gradient(135deg, var(--primary-color), var(--secondary-color));
242
+ color: white;
243
+ border: none;
244
+ border-radius: 0.5rem;
245
+ padding: 0.75rem 1.5rem;
246
+ font-size: 1rem;
247
+ font-weight: 600;
248
+ cursor: pointer;
249
+ transition: all 0.2s ease;
250
+ display: inline-flex;
251
+ align-items: center;
252
+ gap: 0.5rem;
253
+ }
254
+
255
+ .st-button:hover {
256
+ transform: translateY(-1px);
257
+ box-shadow: 0 4px 12px rgba(255, 107, 107, 0.4);
258
+ }
259
+
260
+ .st-button:disabled {
261
+ opacity: 0.5;
262
+ cursor: not-allowed;
263
+ transform: none;
264
+ }
265
+
266
+ .st-button-secondary {
267
+ background: var(--surface-color);
268
+ color: var(--text-primary);
269
+ border: 1px solid var(--border-color);
270
+ }
271
+
272
+ .st-button-secondary:hover {
273
+ background: var(--border-color);
274
+ box-shadow: 0 4px 12px rgba(255, 255, 255, 0.1);
275
+ }
276
+
277
+ /* Streamlit progress bar */
278
+ .st-progress {
279
+ width: 100%;
280
+ height: 0.5rem;
281
+ background: var(--border-color);
282
+ border-radius: 0.25rem;
283
+ overflow: hidden;
284
+ margin-bottom: 1rem;
285
+ }
286
+
287
+ .st-progress-bar {
288
+ height: 100%;
289
+ background: linear-gradient(90deg, var(--primary-color), var(--secondary-color));
290
+ transition: width 0.3s ease;
291
+ border-radius: 0.25rem;
292
+ }
293
+
294
+ /* Quiz interface */
295
+ .quiz-container {
296
+ display: none;
297
+ background: var(--surface-color);
298
+ border: 1px solid var(--border-color);
299
+ border-radius: 0.75rem;
300
+ padding: 2rem;
301
+ margin-bottom: 2rem;
302
+ }
303
+
304
+ .quiz-container.active {
305
+ display: block;
306
+ }
307
+
308
+ .quiz-header {
309
+ display: flex;
310
+ justify-content: space-between;
311
+ align-items: center;
312
+ margin-bottom: 2rem;
313
+ padding-bottom: 1rem;
314
+ border-bottom: 1px solid var(--border-color);
315
+ }
316
+
317
+ .quiz-timer {
318
+ display: flex;
319
+ align-items: center;
320
+ gap: 0.5rem;
321
+ font-size: 1.25rem;
322
+ font-weight: 700;
323
+ color: var(--accent-color);
324
+ }
325
+
326
+ .quiz-question {
327
+ font-size: 1.5rem;
328
+ font-weight: 600;
329
+ margin-bottom: 2rem;
330
+ line-height: 1.4;
331
+ }
332
+
333
+ .quiz-options {
334
+ display: grid;
335
+ gap: 1rem;
336
+ margin-bottom: 2rem;
337
+ }
338
+
339
+ .quiz-option {
340
+ display: flex;
341
+ align-items: center;
342
+ gap: 1rem;
343
+ padding: 1rem;
344
+ background: var(--background-color);
345
+ border: 1px solid var(--border-color);
346
+ border-radius: 0.5rem;
347
+ cursor: pointer;
348
+ transition: all 0.2s ease;
349
+ }
350
+
351
+ .quiz-option:hover {
352
+ border-color: var(--primary-color);
353
+ background: rgba(255, 107, 107, 0.1);
354
+ }
355
+
356
+ .quiz-option.selected {
357
+ border-color: var(--primary-color);
358
+ background: rgba(255, 107, 107, 0.2);
359
+ }
360
+
361
+ .quiz-option.correct {
362
+ border-color: var(--success-color);
363
+ background: rgba(150, 206, 180, 0.2);
364
+ }
365
+
366
+ .quiz-option.incorrect {
367
+ border-color: var(--error-color);
368
+ background: rgba(214, 48, 49, 0.2);
369
+ }
370
+
371
+ .option-letter {
372
+ display: flex;
373
+ align-items: center;
374
+ justify-content: center;
375
+ width: 2rem;
376
+ height: 2rem;
377
+ background: var(--primary-color);
378
+ color: white;
379
+ border-radius: 50%;
380
+ font-weight: 700;
381
+ flex-shrink: 0;
382
+ }
383
+
384
+ /* Results display */
385
+ .results-container {
386
+ display: none;
387
+ text-align: center;
388
+ }
389
+
390
+ .results-container.active {
391
+ display: block;
392
+ }
393
+
394
+ .results-score {
395
+ font-size: 4rem;
396
+ font-weight: 800;
397
+ color: var(--primary-color);
398
+ margin-bottom: 1rem;
399
+ }
400
+
401
+ .results-message {
402
+ font-size: 1.25rem;
403
+ color: var(--text-secondary);
404
+ margin-bottom: 2rem;
405
+ }
406
+
407
+ /* Expandable sections */
408
+ .st-expander {
409
+ border: 1px solid var(--border-color);
410
+ border-radius: 0.5rem;
411
+ margin-bottom: 1rem;
412
+ overflow: hidden;
413
+ }
414
+
415
+ .st-expander-header {
416
+ display: flex;
417
+ justify-content: space-between;
418
+ align-items: center;
419
+ padding: 1rem;
420
+ background: var(--surface-color);
421
+ cursor: pointer;
422
+ transition: background-color 0.2s ease;
423
+ }
424
+
425
+ .st-expander-header:hover {
426
+ background: var(--border-color);
427
+ }
428
+
429
+ .st-expander-content {
430
+ padding: 1rem;
431
+ background: var(--background-color);
432
+ border-top: 1px solid var(--border-color);
433
+ display: none;
434
+ }
435
+
436
+ .st-expander-content.expanded {
437
+ display: block;
438
+ }
439
+
440
+ .st-expander-arrow {
441
+ transition: transform 0.2s ease;
442
+ }
443
+
444
+ .st-expander-arrow.expanded {
445
+ transform: rotate(180deg);
446
+ }
447
+
448
+ /* Language switcher */
449
+ .language-switcher {
450
+ display: flex;
451
+ gap: 0.5rem;
452
+ margin-bottom: 1rem;
453
+ }
454
+
455
+ .language-option {
456
+ padding: 0.5rem 1rem;
457
+ background: var(--background-color);
458
+ border: 1px solid var(--border-color);
459
+ border-radius: 0.25rem;
460
+ cursor: pointer;
461
+ transition: all 0.2s ease;
462
+ }
463
+
464
+ .language-option:hover {
465
+ border-color: var(--primary-color);
466
+ }
467
+
468
+ .language-option.active {
469
+ background: var(--primary-color);
470
+ color: white;
471
+ border-color: var(--primary-color);
472
+ }
473
+
474
+ /* Theme toggle */
475
+ .theme-toggle {
476
+ display: flex;
477
+ align-items: center;
478
+ gap: 0.5rem;
479
+ margin-bottom: 1rem;
480
+ }
481
+
482
+ .toggle-switch {
483
+ position: relative;
484
+ width: 3rem;
485
+ height: 1.5rem;
486
+ background: var(--border-color);
487
+ border-radius: 0.75rem;
488
+ cursor: pointer;
489
+ transition: background-color 0.2s ease;
490
+ }
491
+
492
+ .toggle-switch.active {
493
+ background: var(--primary-color);
494
+ }
495
+
496
+ .toggle-slider {
497
+ position: absolute;
498
+ top: 0.125rem;
499
+ left: 0.125rem;
500
+ width: 1.25rem;
501
+ height: 1.25rem;
502
+ background: white;
503
+ border-radius: 50%;
504
+ transition: transform 0.2s ease;
505
+ }
506
+
507
+ .toggle-switch.active .toggle-slider {
508
+ transform: translateX(1.5rem);
509
+ }
510
+
511
+ /* Responsive design */
512
+ @media (max-width: 768px) {
513
+ .sidebar {
514
+ transform: translateX(-100%);
515
+ }
516
+
517
+ .main-content {
518
+ margin-left: 0;
519
+ }
520
+
521
+ .st-title {
522
+ font-size: 2rem;
523
+ }
524
+
525
+ .st-metrics {
526
+ grid-template-columns: 1fr;
527
+ }
528
+
529
+ .st-columns {
530
+ grid-template-columns: 1fr;
531
+ }
532
+ }
533
+
534
+ /* Animations */
535
+ @keyframes fadeIn {
536
+ from { opacity: 0; transform: translateY(20px); }
537
+ to { opacity: 1; transform: translateY(0); }
538
+ }
539
+
540
+ .fade-in {
541
+ animation: fadeIn 0.5s ease;
542
+ }
543
+
544
+ /* Chart styles */
545
+ .chart-container {
546
+ background: var(--surface-color);
547
+ border: 1px solid var(--border-color);
548
+ border-radius: 0.75rem;
549
+ padding: 1.5rem;
550
+ margin-bottom: 2rem;
551
+ }
552
+
553
+ .chart-title {
554
+ font-size: 1.25rem;
555
+ font-weight: 600;
556
+ margin-bottom: 1rem;
557
+ color: var(--text-primary);
558
+ }
559
+
560
+ /* Success/Error messages */
561
+ .st-success, .st-error, .st-warning, .st-info {
562
+ padding: 1rem;
563
+ border-radius: 0.5rem;
564
+ margin-bottom: 1rem;
565
+ display: flex;
566
+ align-items: center;
567
+ gap: 0.5rem;
568
+ }
569
+
570
+ .st-success {
571
+ background: rgba(150, 206, 180, 0.2);
572
+ border: 1px solid var(--success-color);
573
+ color: var(--success-color);
574
+ }
575
+
576
+ .st-error {
577
+ background: rgba(214, 48, 49, 0.2);
578
+ border: 1px solid var(--error-color);
579
+ color: var(--error-color);
580
+ }
581
+
582
+ .st-warning {
583
+ background: rgba(255, 234, 167, 0.2);
584
+ border: 1px solid var(--warning-color);
585
+ color: var(--warning-color);
586
+ }
587
+
588
+ .st-info {
589
+ background: rgba(69, 183, 209, 0.2);
590
+ border: 1px solid var(--accent-color);
591
+ color: var(--accent-color);
592
+ }
593
+ </style>
594
+ </head>
595
+ <body>
596
+ <!-- Streamlit-style sidebar -->
597
+ <div class="sidebar" id="sidebar">
598
+ <div class="sidebar-header">
599
+ <div class="sidebar-logo">
600
+ <i class="fas fa-brain"></i>
601
+ </div>
602
+ <div>
603
+ <div class="sidebar-title">TriviaVerse</div>
604
+ <div class="sidebar-subtitle">Quiz Platform</div>
605
+ </div>
606
+ </div>
607
+
608
+ <!-- Theme toggle -->
609
+ <div class="theme-toggle">
610
+ <span class="st-label">Dark Theme</span>
611
+ <div class="toggle-switch active" id="themeToggle">
612
+ <div class="toggle-slider"></div>
613
+ </div>
614
+ </div>
615
+
616
+ <!-- Language switcher -->
617
+ <div class="st-label">Language</div>
618
+ <div class="language-switcher">
619
+ <div class="language-option active" data-lang="en">EN</div>
620
+ <div class="language-option" data-lang="te">తె</div>
621
+ <div class="language-option" data-lang="hi">हि</div>
622
+ <div class="language-option" data-lang="kn">ಕನ್</div>
623
+ </div>
624
+
625
+ <!-- Quiz History -->
626
+ <div class="st-expander">
627
+ <div class="st-expander-header">
628
+ <span><i class="fas fa-history"></i> Quiz History</span>
629
+ <i class="fas fa-chevron-down st-expander-arrow"></i>
630
+ </div>
631
+ <div class="st-expander-content">
632
+ <div class="st-info">
633
+ <i class="fas fa-info-circle"></i>
634
+ <span>No quiz history available yet.</span>
635
+ </div>
636
+ </div>
637
+ </div>
638
+
639
+ <!-- Settings -->
640
+ <div class="st-expander">
641
+ <div class="st-expander-header">
642
+ <span><i class="fas fa-cog"></i> Settings</span>
643
+ <i class="fas fa-chevron-down st-expander-arrow"></i>
644
+ </div>
645
+ <div class="st-expander-content">
646
+ <div class="st-selectbox">
647
+ <label class="st-label">Sound Effects</label>
648
+ <select class="st-select">
649
+ <option value="on">On</option>
650
+ <option value="off">Off</option>
651
+ </select>
652
+ </div>
653
+ <div class="st-selectbox">
654
+ <label class="st-label">Difficulty Level</label>
655
+ <select class="st-select" id="difficultySelect">
656
+ <option value="easy">Easy</option>
657
+ <option value="medium">Medium</option>
658
+ <option value="hard">Hard</option>
659
+ </select>
660
+ </div>
661
+ </div>
662
+ </div>
663
+ </div>
664
+
665
+ <!-- Main content area -->
666
+ <div class="main-content" id="mainContent">
667
+ <div class="st-container">
668
+ <!-- Welcome section -->
669
+ <div class="st-header">
670
+ <h1 class="st-title">TriviaVerse</h1>
671
+ <p class="st-subtitle">Welcome to the ultimate quiz experience on Hugging Face Spaces!</p>
672
+ </div>
673
+
674
+ <!-- User statistics -->
675
+ <div class="st-metrics">
676
+ <div class="st-metric">
677
+ <div class="st-metric-value" style="color: var(--primary-color);" id="totalQuizzes">0</div>
678
+ <div class="st-metric-label">Total Quizzes</div>
679
+ </div>
680
+ <div class="st-metric">
681
+ <div class="st-metric-value" style="color: var(--success-color);" id="averageScore">0%</div>
682
+ <div class="st-metric-label">Average Score</div>
683
+ </div>
684
+ <div class="st-metric">
685
+ <div class="st-metric-value" style="color: var(--accent-color);" id="bestStreak">0</div>
686
+ <div class="st-metric-label">Best Streak</div>
687
+ </div>
688
+ <div class="st-metric">
689
+ <div class="st-metric-value" style="color: var(--secondary-color);" id="favoriteTopicDisplay">None</div>
690
+ <div class="st-metric-label">Favorite Topic</div>
691
+ </div>
692
+ </div>
693
+
694
+ <!-- Quiz configuration -->
695
+ <div class="st-columns">
696
+ <div class="st-column">
697
+ <h3 style="margin-bottom: 1.5rem; color: var(--text-primary);">
698
+ <i class="fas fa-play-circle"></i> Start New Quiz
699
+ </h3>
700
+
701
+ <div class="st-selectbox">
702
+ <label class="st-label">Select Topic</label>
703
+ <select class="st-select" id="topicSelect">
704
+ <option value="">Choose a topic...</option>
705
+ <option value="python">🐍 Python Programming</option>
706
+ <option value="javascript">⚡ JavaScript</option>
707
+ <option value="science">🔬 General Science</option>
708
+ <option value="history">📚 World History</option>
709
+ <option value="geography">🌍 Geography</option>
710
+ <option value="literature">📖 Literature</option>
711
+ <option value="mathematics">🔢 Mathematics</option>
712
+ <option value="technology">💻 Technology</option>
713
+ </select>
714
+ </div>
715
+
716
+ <div class="st-radio-group">
717
+ <label class="st-label">Number of Questions</label>
718
+ <div class="st-radio-options">
719
+ <div class="st-radio-option selected" data-questions="5">
720
+ <input type="radio" class="st-radio-input" name="questions" value="5" checked>
721
+ <span>5 Questions (Quick)</span>
722
+ </div>
723
+ <div class="st-radio-option" data-questions="10">
724
+ <input type="radio" class="st-radio-input" name="questions" value="10">
725
+ <span>10 Questions (Standard)</span>
726
+ </div>
727
+ <div class="st-radio-option" data-questions="15">
728
+ <input type="radio" class="st-radio-input" name="questions" value="15">
729
+ <span>15 Questions (Extended)</span>
730
+ </div>
731
+ </div>
732
+ </div>
733
+
734
+ <button class="st-button" id="startQuizBtn" disabled>
735
+ <i class="fas fa-play"></i>
736
+ Start Quiz
737
+ </button>
738
+ </div>
739
+
740
+ <div class="st-column">
741
+ <h3 style="margin-bottom: 1.5rem; color: var(--text-primary);">
742
+ <i class="fas fa-fire"></i> Trending Topics
743
+ </h3>
744
+
745
+ <div class="quiz-option" data-topic="python" style="margin-bottom: 1rem;">
746
+ <div class="option-letter">🐍</div>
747
+ <div>
748
+ <div style="font-weight: 600;">Python Programming</div>
749
+ <div style="font-size: 0.875rem; color: var(--text-secondary);">Most Popular</div>
750
+ </div>
751
+ </div>
752
+
753
+ <div class="quiz-option" data-topic="science" style="margin-bottom: 1rem;">
754
+ <div class="option-letter">🔬</div>
755
+ <div>
756
+ <div style="font-weight: 600;">General Science</div>
757
+ <div style="font-size: 0.875rem; color: var(--text-secondary);">High Engagement</div>
758
+ </div>
759
+ </div>
760
+
761
+ <div class="quiz-option" data-topic="history" style="margin-bottom: 1rem;">
762
+ <div class="option-letter">📚</div>
763
+ <div>
764
+ <div style="font-weight: 600;">World History</div>
765
+ <div style="font-size: 0.875rem; color: var(--text-secondary);">Trending Now</div>
766
+ </div>
767
+ </div>
768
+ </div>
769
+ </div>
770
+
771
+ <!-- Active quiz interface -->
772
+ <div class="quiz-container" id="quizContainer">
773
+ <div class="quiz-header">
774
+ <div>
775
+ <h3 style="color: var(--text-primary);">Question <span id="currentQuestionNum">1</span> of <span id="totalQuestions">10</span></h3>
776
+ <div class="st-progress">
777
+ <div class="st-progress-bar" id="quizProgress" style="width: 10%;"></div>
778
+ </div>
779
+ </div>
780
+ <div class="quiz-timer">
781
+ <i class="fas fa-clock"></i>
782
+ <span id="timeRemaining">30</span>s
783
+ </div>
784
+ </div>
785
+
786
+ <div class="quiz-question" id="questionText">
787
+ Loading question...
788
+ </div>
789
+
790
+ <div class="quiz-options" id="quizOptions">
791
+ <!-- Options will be populated by JavaScript -->
792
+ </div>
793
+
794
+ <div style="display: flex; gap: 1rem; justify-content: center;">
795
+ <button class="st-button-secondary" id="hintBtn">
796
+ <i class="fas fa-lightbulb"></i>
797
+ Hint
798
+ </button>
799
+ <button class="st-button" id="nextQuestionBtn" disabled>
800
+ <i class="fas fa-arrow-right"></i>
801
+ Next Question
802
+ </button>
803
+ </div>
804
+ </div>
805
+
806
+ <!-- Results section -->
807
+ <div class="results-container" id="resultsContainer">
808
+ <div class="results-score" id="finalScore">0%</div>
809
+ <div class="results-message" id="resultsMessage">Great job!</div>
810
+
811
+ <div class="chart-container">
812
+ <div class="chart-title">Performance Overview</div>
813
+ <div class="st-metrics">
814
+ <div class="st-metric">
815
+ <div class="st-metric-value" style="color: var(--success-color);" id="correctAnswers">0</div>
816
+ <div class="st-metric-label">Correct Answers</div>
817
+ </div>
818
+ <div class="st-metric">
819
+ <div class="st-metric-value" style="color: var(--error-color);" id="incorrectAnswers">0</div>
820
+ <div class="st-metric-label">Incorrect Answers</div>
821
+ </div>
822
+ <div class="st-metric">
823
+ <div class="st-metric-value" style="color: var(--accent-color);" id="timeTaken">0</div>
824
+ <div class="st-metric-label">Time Taken (min)</div>
825
+ </div>
826
+ </div>
827
+ </div>
828
+
829
+ <div style="display: flex; gap: 1rem; justify-content: center;">
830
+ <button class="st-button-secondary" id="reviewAnswersBtn">
831
+ <i class="fas fa-eye"></i>
832
+ Review Answers
833
+ </button>
834
+ <button class="st-button" id="newQuizBtn">
835
+ <i class="fas fa-refresh"></i>
836
+ New Quiz
837
+ </button>
838
+ </div>
839
+ </div>
840
+ </div>
841
+ </div>
842
+
843
+ <script>
844
+ // Application state
845
+ let appState = {
846
+ currentView: 'home',
847
+ selectedTopic: '',
848
+ selectedQuestions: 5,
849
+ currentQuestionIndex: 0,
850
+ questions: [],
851
+ userAnswers: [],
852
+ score: 0,
853
+ timeRemaining: 30,
854
+ timerInterval: null,
855
+ language: 'en',
856
+ theme: 'dark',
857
+ userStats: {
858
+ totalQuizzes: 0,
859
+ averageScore: 0,
860
+ bestStreak: 0,
861
+ favoriteTopic: 'None'
862
+ }
863
+ };
864
+
865
+ // Language translations
866
+ const translations = {
867
+ en: {
868
+ welcome: "Welcome to TriviaVerse!",
869
+ selectTopic: "Select Topic",
870
+ startQuiz: "Start Quiz",
871
+ nextQuestion: "Next Question",
872
+ hint: "Hint",
873
+ timeRemaining: "Time Remaining",
874
+ correctAnswers: "Correct Answers",
875
+ incorrectAnswers: "Incorrect Answers",
876
+ timeTaken: "Time Taken (min)",
877
+ reviewAnswers: "Review Answers",
878
+ newQuiz: "New Quiz"
879
+ },
880
+ te: {
881
+ welcome: "ట్రివియావర్స్‌కు స్వాగతం!",
882
+ selectTopic: "విషయం ఎంచుకోండి",
883
+ startQuiz: "క్విజ్ ప్రారంభించండి",
884
+ nextQuestion: "తదుపరి ప్రశ్న",
885
+ hint: "సూచన",
886
+ timeRemaining: "మిగిలిన సమయం",
887
+ correctAnswers: "సరైన సమాధానాలు",
888
+ incorrectAnswers: "తప్పు సమాధానాలు",
889
+ timeTaken: "తీసుకున్న సమయం (నిమిషాలు)",
890
+ reviewAnswers: "సమాధానాలను సమీక్షించండి",
891
+ newQuiz: "కొత్త క���విజ్"
892
+ },
893
+ hi: {
894
+ welcome: "TriviaVerse में आपका स्वागत है!",
895
+ selectTopic: "विषय चुनें",
896
+ startQuiz: "क्विज़ शुरू करें",
897
+ nextQuestion: "अगला प्रश्न",
898
+ hint: "संकेत",
899
+ timeRemaining: "शेष समय",
900
+ correctAnswers: "सही उत्तर",
901
+ incorrectAnswers: "गलत उत्तर",
902
+ timeTaken: "लिया गया समय (मिनट)",
903
+ reviewAnswers: "उत्तरों की समीक्षा करें",
904
+ newQuiz: "नया क्विज़"
905
+ },
906
+ kn: {
907
+ welcome: "ಟ್ರಿವಿಯಾವರ್ಸ್‌ಗೆ ಸ್ವಾಗತ!",
908
+ selectTopic: "ವಿಷಯ ಆಯ್ಕೆಮಾಡಿ",
909
+ startQuiz: "ಕ್ವಿಜ್ ಪ್ರಾರಂಭಿಸಿ",
910
+ nextQuestion: "ಮುಂದಿನ ಪ್ರಶ್ನೆ",
911
+ hint: "ಸುಳಿವು",
912
+ timeRemaining: "ಉಳಿದಿರುವ ಸಮಯ",
913
+ correctAnswers: "ಸರಿಯಾದ ಉತ್ತರಗಳು",
914
+ incorrectAnswers: "ತಪ್ಪಾದ ಉತ್ತರಗಳು",
915
+ timeTaken: "ತೆಗೆದುಕೊಂಡ ಸಮಯ (ನಿಮಿಷಗಳು)",
916
+ reviewAnswers: "ಉತ್ತರಗಳನ್ನು ಪರಿಶೀಲಿಸಿ",
917
+ newQuiz: "ಹೊಸ ಕ್ವಿಜ್"
918
+ }
919
+ };
920
+
921
+ // Sample questions database
922
+ const questionsDB = {
923
+ python: [
924
+ {
925
+ question: "Which of the following is the correct way to create a list in Python?",
926
+ options: ["list = [1, 2, 3, 4]", "list = (1, 2, 3, 4)", "list = {1, 2, 3, 4}", "list = \"1, 2, 3, 4\""],
927
+ correct: 0,
928
+ hint: "Think about the syntax used for creating collections in Python."
929
+ },
930
+ {
931
+ question: "What is the output of print(type([]))?",
932
+ options: ["<class 'array'>", "<class 'list'>", "<class 'tuple'>", "<class 'dict'>"],
933
+ correct: 1,
934
+ hint: "Consider what type of object [] creates in Python."
935
+ },
936
+ {
937
+ question: "Which operator is used for exponentiation in Python?",
938
+ options: ["^", "**", "exp", "pow"],
939
+ correct: 1,
940
+ hint: "This operator uses two of the same symbols."
941
+ }
942
+ ],
943
+ science: [
944
+ {
945
+ question: "What is the chemical symbol for gold?",
946
+ options: ["Go", "Gd", "Au", "Ag"],
947
+ correct: 2,
948
+ hint: "It comes from the Latin word 'aurum'."
949
+ },
950
+ {
951
+ question: "How many bones are in an adult human body?",
952
+ options: ["206", "196", "216", "186"],
953
+ correct: 0,
954
+ hint: "It's just over 200."
955
+ }
956
+ ],
957
+ history: [
958
+ {
959
+ question: "In which year did World War II end?",
960
+ options: ["1944", "1945", "1946", "1947"],
961
+ correct: 1,
962
+ hint: "It ended in the mid-1940s."
963
+ },
964
+ {
965
+ question: "Who was the first President of the United States?",
966
+ options: ["Thomas Jefferson", "John Adams", "George Washington", "Benjamin Franklin"],
967
+ correct: 2,
968
+ hint: "He is known as the 'Father of His Country'."
969
+ }
970
+ ]
971
+ };
972
+
973
+ // Initialize application
974
+ function initializeApp() {
975
+ loadUserStats();
976
+ setupEventListeners();
977
+ updateLanguage();
978
+ updateTheme();
979
+ }
980
+
981
+ // Load user statistics from localStorage
982
+ function loadUserStats() {
983
+ const saved = localStorage.getItem('triviaverse_stats');
984
+ if (saved) {
985
+ appState.userStats = JSON.parse(saved);
986
+ }
987
+ updateStatsDisplay();
988
+ }
989
+
990
+ // Save user statistics to localStorage
991
+ function saveUserStats() {
992
+ localStorage.setItem('triviaverse_stats', JSON.stringify(appState.userStats));
993
+ }
994
+
995
+ // Update statistics display
996
+ function updateStatsDisplay() {
997
+ document.getElementById('totalQuizzes').textContent = appState.userStats.totalQuizzes;
998
+ document.getElementById('averageScore').textContent = appState.userStats.averageScore + '%';
999
+ document.getElementById('bestStreak').textContent = appState.userStats.bestStreak;
1000
+ document.getElementById('favoriteTopicDisplay').textContent = appState.userStats.favoriteTopic;
1001
+ }
1002
+
1003
+ // Setup event listeners
1004
+ function setupEventListeners() {
1005
+ // Topic selection
1006
+ document.getElementById('topicSelect').addEventListener('change', (e) => {
1007
+ appState.selectedTopic = e.target.value;
1008
+ updateStartButton();
1009
+ });
1010
+
1011
+ // Question count selection
1012
+ document.querySelectorAll('.st-radio-option').forEach(option => {
1013
+ option.addEventListener('click', (e) => {
1014
+ document.querySelectorAll('.st-radio-option').forEach(opt => opt.classList.remove('selected'));
1015
+ e.currentTarget.classList.add('selected');
1016
+ appState.selectedQuestions = parseInt(e.currentTarget.dataset.questions);
1017
+ const radio = e.currentTarget.querySelector('input[type="radio"]');
1018
+ if (radio) radio.checked = true;
1019
+ });
1020
+ });
1021
+
1022
+ // Start quiz button
1023
+ document.getElementById('startQuizBtn').addEventListener('click', startQuiz);
1024
+
1025
+ // Next question button
1026
+ document.getElementById('nextQuestionBtn').addEventListener('click', nextQuestion);
1027
+
1028
+ // Hint button
1029
+ document.getElementById('hintBtn').addEventListener('click', showHint);
1030
+
1031
+ // New quiz button
1032
+ document.getElementById('newQuizBtn').addEventListener('click', resetToHome);
1033
+
1034
+ // Review answers button
1035
+ document.getElementById('reviewAnswersBtn').addEventListener('click', reviewAnswers);
1036
+
1037
+ // Theme toggle
1038
+ document.getElementById('themeToggle').addEventListener('click', toggleTheme);
1039
+
1040
+ // Language switcher
1041
+ document.querySelectorAll('.language-option').forEach(option => {
1042
+ option.addEventListener('click', (e) => {
1043
+ document.querySelectorAll('.language-option').forEach(opt => opt.classList.remove('active'));
1044
+ e.currentTarget.classList.add('active');
1045
+ appState.language = e.currentTarget.dataset.lang;
1046
+ updateLanguage();
1047
+ });
1048
+ });
1049
+
1050
+ // Trending topics
1051
+ document.querySelectorAll('[data-topic]').forEach(topic => {
1052
+ topic.addEventListener('click', (e) => {
1053
+ const topicValue = e.currentTarget.dataset.topic;
1054
+ document.getElementById('topicSelect').value = topicValue;
1055
+ appState.selectedTopic = topicValue;
1056
+ updateStartButton();
1057
+ });
1058
+ });
1059
+
1060
+ // Expandable sections
1061
+ document.querySelectorAll('.st-expander-header').forEach(header => {
1062
+ header.addEventListener('click', (e) => {
1063
+ const content = header.nextElementSibling;
1064
+ const arrow = header.querySelector('.st-expander-arrow');
1065
+
1066
+ content.classList.toggle('expanded');
1067
+ arrow.classList.toggle('expanded');
1068
+ });
1069
+ });
1070
+ }
1071
+
1072
+ // Update start button state
1073
+ function updateStartButton() {
1074
+ const startBtn = document.getElementById('startQuizBtn');
1075
+ if (appState.selectedTopic) {
1076
+ startBtn.disabled = false;
1077
+ startBtn.style.opacity = '1';
1078
+ } else {
1079
+ startBtn.disabled = true;
1080
+ startBtn.style.opacity = '0.5';
1081
+ }
1082
+ }
1083
+
1084
+ // Start quiz
1085
+ function startQuiz() {
1086
+ if (!appState.selectedTopic) {
1087
+ showMessage('Please select a topic first!', 'error');
1088
+ return;
1089
+ }
1090
+
1091
+ // Generate questions
1092
+ const availableQuestions = questionsDB[appState.selectedTopic] || [];
1093
+ if (availableQuestions.length === 0) {
1094
+ showMessage('No questions available for this topic yet!', 'error');
1095
+ return;
1096
+ }
1097
+
1098
+ // Select random questions
1099
+ appState.questions = [];
1100
+ for (let i = 0; i < Math.min(appState.selectedQuestions, availableQuestions.length); i++) {
1101
+ const randomIndex = Math.floor(Math.random() * availableQuestions.length);
1102
+ appState.questions.push(availableQuestions[randomIndex]);
1103
+ }
1104
+
1105
+ // Reset quiz state
1106
+ appState.currentQuestionIndex = 0;
1107
+ appState.userAnswers = [];
1108
+ appState.score = 0;
1109
+ appState.timeRemaining = 30;
1110
+
1111
+ // Show quiz interface
1112
+ showQuizInterface();
1113
+ loadCurrentQuestion();
1114
+ startTimer();
1115
+ }
1116
+
1117
+ // Show quiz interface
1118
+ function showQuizInterface() {
1119
+ document.getElementById('quizContainer').classList.add('active');
1120
+ document.querySelector('.st-header').style.display = 'none';
1121
+ document.querySelector('.st-metrics').style.display = 'none';
1122
+ document.querySelector('.st-columns').style.display = 'none';
1123
+ document.getElementById('resultsContainer').classList.remove('active');
1124
+ }
1125
+
1126
+ // Load current question
1127
+ function loadCurrentQuestion() {
1128
+ const question = appState.questions[appState.currentQuestionIndex];
1129
+ if (!question) return;
1130
+
1131
+ // Update question number and progress
1132
+ document.getElementById('currentQuestionNum').textContent = appState.currentQuestionIndex + 1;
1133
+ document.getElementById('totalQuestions').textContent = appState.questions.length;
1134
+
1135
+ const progress = ((appState.currentQuestionIndex + 1) / appState.questions.length) * 100;
1136
+ document.getElementById('quizProgress').style.width = progress + '%';
1137
+
1138
+ // Update question text
1139
+ document.getElementById('questionText').textContent = question.question;
1140
+
1141
+ // Update options
1142
+ const optionsContainer = document.getElementById('quizOptions');
1143
+ optionsContainer.innerHTML = '';
1144
+
1145
+ question.options.forEach((option, index) => {
1146
+ const optionElement = document.createElement('div');
1147
+ optionElement.className = 'quiz-option';
1148
+ optionElement.dataset.answer = index;
1149
+ optionElement.innerHTML = `
1150
+ <div class="option-letter">${String.fromCharCode(65 + index)}</div>
1151
+ <span>${option}</span>
1152
+ `;
1153
+ optionElement.addEventListener('click', selectAnswer);
1154
+ optionsContainer.appendChild(optionElement);
1155
+ });
1156
+
1157
+ // Reset timer
1158
+ appState.timeRemaining = 30;
1159
+ document.getElementById('nextQuestionBtn').disabled = true;
1160
+ document.getElementById('nextQuestionBtn').style.opacity = '0.5';
1161
+ }
1162
+
1163
+ // Select answer
1164
+ function selectAnswer(e) {
1165
+ const selectedOption = e.currentTarget;
1166
+ const answerIndex = parseInt(selectedOption.dataset.answer);
1167
+
1168
+ // Remove previous selections
1169
+ document.querySelectorAll('.quiz-option').forEach(opt => {
1170
+ opt.classList.remove('selected');
1171
+ });
1172
+
1173
+ // Add selection
1174
+ selectedOption.classList.add('selected');
1175
+
1176
+ // Store answer
1177
+ appState.userAnswers[appState.currentQuestionIndex] = answerIndex;
1178
+
1179
+ // Enable next button
1180
+ document.getElementById('nextQuestionBtn').disabled = false;
1181
+ document.getElementById('nextQuestionBtn').style.opacity = '1';
1182
+
1183
+ // Stop timer
1184
+ clearInterval(appState.timerInterval);
1185
+
1186
+ // Check answer
1187
+ setTimeout(() => checkAnswer(), 500);
1188
+ }
1189
+
1190
+ // Check answer
1191
+ function checkAnswer() {
1192
+ const question = appState.questions[appState.currentQuestionIndex];
1193
+ const userAnswer = appState.userAnswers[appState.currentQuestionIndex];
1194
+ const isCorrect = userAnswer === question.correct;
1195
+
1196
+ // Update score
1197
+ if (isCorrect) {
1198
+ appState.score++;
1199
+ }
1200
+
1201
+ // Show correct/incorrect styling
1202
+ document.querySelectorAll('.quiz-option').forEach((opt, index) => {
1203
+ if (index === question.correct) {
1204
+ opt.classList.add('correct');
1205
+ } else if (index === userAnswer && !isCorrect) {
1206
+ opt.classList.add('incorrect');
1207
+ }
1208
+ });
1209
+
1210
+ // Show feedback message
1211
+ const message = isCorrect ? 'Correct!' : 'Incorrect!';
1212
+ const messageType = isCorrect ? 'success' : 'error';
1213
+ showMessage(message, messageType);
1214
+ }
1215
+
1216
+ // Next question
1217
+ function nextQuestion() {
1218
+ if (appState.currentQuestionIndex < appState.questions.length - 1) {
1219
+ appState.currentQuestionIndex++;
1220
+ loadCurrentQuestion();
1221
+ startTimer();
1222
+ } else {
1223
+ finishQuiz();
1224
+ }
1225
+ }
1226
+
1227
+ // Finish quiz
1228
+ function finishQuiz() {
1229
+ clearInterval(appState.timerInterval);
1230
+
1231
+ // Calculate results
1232
+ const percentage = Math.round((appState.score / appState.questions.length) * 100);
1233
+ const correctAnswers = appState.score;
1234
+ const incorrectAnswers = appState.questions.length - appState.score;
1235
+
1236
+ // Update user stats
1237
+ appState.userStats.totalQuizzes++;
1238
+ appState.userStats.averageScore = Math.round(
1239
+ (appState.userStats.averageScore * (appState.userStats.totalQuizzes - 1) + percentage) / appState.userStats.totalQuizzes
1240
+ );
1241
+ if (appState.score > appState.userStats.bestStreak) {
1242
+ appState.userStats.bestStreak = appState.score;
1243
+ }
1244
+ appState.userStats.favoriteTopic = appState.selectedTopic;
1245
+
1246
+ saveUserStats();
1247
+ updateStatsDisplay();
1248
+
1249
+ // Show results
1250
+ showResults(percentage, correctAnswers, incorrectAnswers);
1251
+ }
1252
+
1253
+ // Show results
1254
+ function showResults(percentage, correctAnswers, incorrectAnswers) {
1255
+ document.getElementById('quizContainer').classList.remove('active');
1256
+ document.getElementById('resultsContainer').classList.add('active');
1257
+
1258
+ // Update results display
1259
+ document.getElementById('finalScore').textContent = percentage + '%';
1260
+ document.getElementById('correctAnswers').textContent = correctAnswers;
1261
+ document.getElementById('incorrectAnswers').textContent = incorrectAnswers;
1262
+ document.getElementById('timeTaken').textContent = Math.round((appState.questions.length * 30 - appState.timeRemaining) / 60);
1263
+
1264
+ // Update results message
1265
+ let message = '';
1266
+ if (percentage >= 90) {
1267
+ message = 'Outstanding! You\'re a quiz master!';
1268
+ } else if (percentage >= 70) {
1269
+ message = 'Great job! Well done!';
1270
+ } else if (percentage >= 50) {
1271
+ message = 'Good effort! Keep practicing!';
1272
+ } else {
1273
+ message = 'Don\'t give up! Practice makes perfect!';
1274
+ }
1275
+ document.getElementById('resultsMessage').textContent = message;
1276
+ }
1277
+
1278
+ // Start timer
1279
+ function startTimer() {
1280
+ clearInterval(appState.timerInterval);
1281
+ appState.timerInterval = setInterval(() => {
1282
+ appState.timeRemaining--;
1283
+ document.getElementById('timeRemaining').textContent = appState.timeRemaining;
1284
+
1285
+ if (appState.timeRemaining <= 0) {
1286
+ clearInterval(appState.timerInterval);
1287
+ showMessage('Time\'s up!', 'warning');
1288
+ setTimeout(() => {
1289
+ if (appState.currentQuestionIndex < appState.questions.length - 1) {
1290
+ nextQuestion();
1291
+ } else {
1292
+ finishQuiz();
1293
+ }
1294
+ }, 1000);
1295
+ }
1296
+ }, 1000);
1297
+ }
1298
+
1299
+ // Show hint
1300
+ function showHint() {
1301
+ const question = appState.questions[appState.currentQuestionIndex];
1302
+ if (question && question.hint) {
1303
+ showMessage(question.hint, 'info');
1304
+ } else {
1305
+ showMessage('No hint available for this question.', 'info');
1306
+ }
1307
+ }
1308
+
1309
+ // Reset to home
1310
+ function resetToHome() {
1311
+ document.getElementById('quizContainer').classList.remove('active');
1312
+ document.getElementById('resultsContainer').classList.remove('active');
1313
+ document.querySelector('.st-header').style.display = 'block';
1314
+ document.querySelector('.st-metrics').style.display = 'grid';
1315
+ document.querySelector('.st-columns').style.display = 'grid';
1316
+
1317
+ // Reset selections
1318
+ document.getElementById('topicSelect').value = '';
1319
+ appState.selectedTopic = '';
1320
+ updateStartButton();
1321
+ }
1322
+
1323
+ // Review answers
1324
+ function reviewAnswers() {
1325
+ let reviewHTML = '<div class="chart-container"><div class="chart-title">Answer Review</div>';
1326
+
1327
+ appState.questions.forEach((question, index) => {
1328
+ const userAnswer = appState.userAnswers[index];
1329
+ const isCorrect = userAnswer === question.correct;
1330
+ const status = isCorrect ? 'Correct' : 'Incorrect';
1331
+ const statusClass = isCorrect ? 'st-success' : 'st-error';
1332
+
1333
+ reviewHTML += `
1334
+ <div class="${statusClass}" style="margin-bottom: 1rem;">
1335
+ <div>
1336
+ <strong>Q${index + 1}:</strong> ${question.question}<br>
1337
+ <strong>Your Answer:</strong> ${question.options[userAnswer] || 'Not answered'}<br>
1338
+ <strong>Correct Answer:</strong> ${question.options[question.correct]}<br>
1339
+ <strong>Status:</strong> ${status}
1340
+ </div>
1341
+ </div>
1342
+ `;
1343
+ });
1344
+
1345
+ reviewHTML += '</div>';
1346
+
1347
+ // Create modal or show in new section
1348
+ showMessage('Review feature coming soon!', 'info');
1349
+ }
1350
+
1351
+ // Show message
1352
+ function showMessage(text, type = 'info') {
1353
+ const messageElement = document.createElement('div');
1354
+ messageElement.className = `st-${type}`;
1355
+ messageElement.innerHTML = `
1356
+ <i class="fas fa-${type === 'success' ? 'check' : type === 'error' ? 'times' : type === 'warning' ? 'exclamation-triangle' : 'info-circle'}"></i>
1357
+ <span>${text}</span>
1358
+ `;
1359
+
1360
+ // Insert at top of main content
1361
+ const mainContent = document.querySelector('.st-container');
1362
+ mainContent.insertBefore(messageElement, mainContent.firstChild);
1363
+
1364
+ // Remove after 3 seconds
1365
+ setTimeout(() => {
1366
+ messageElement.remove();
1367
+ }, 3000);
1368
+ }
1369
+
1370
+ // Toggle theme
1371
+ function toggleTheme() {
1372
+ const toggle = document.getElementById('themeToggle');
1373
+ toggle.classList.toggle('active');
1374
+
1375
+ // Here you would implement theme switching logic
1376
+ // For now, we'll just toggle the visual state
1377
+ appState.theme = appState.theme === 'dark' ? 'light' : 'dark';
1378
+ }
1379
+
1380
+ // Update language
1381
+ function updateLanguage() {
1382
+ const lang = appState.language;
1383
+ const t = translations[lang];
1384
+
1385
+ if (t) {
1386
+ // Update translatable elements
1387
+ // This is a simplified implementation
1388
+ // In a real app, you'd have data attributes or IDs for each translatable element
1389
+ console.log('Language updated to:', lang);
1390
+ }
1391
+ }
1392
+
1393
+ // Update theme
1394
+ function updateTheme() {
1395
+ document.body.className = appState.theme;
1396
+ }
1397
+
1398
+ // Initialize when page loads
1399
+ document.addEventListener('DOMContentLoaded', initializeApp);
1400
+
1401
+ // Mobile responsiveness
1402
+ function toggleSidebar() {
1403
+ const sidebar = document.getElementById('sidebar');
1404
+ const mainContent = document.getElementById('mainContent');
1405
+
1406
+ if (window.innerWidth <= 768) {
1407
+ sidebar.classList.toggle('hidden');
1408
+ mainContent.classList.toggle('full-width');
1409
+ }
1410
+ }
1411
+
1412
+ // Handle window resize
1413
+ window.addEventListener('resize', () => {
1414
+ if (window.innerWidth > 768) {
1415
+ document.getElementById('sidebar').classList.remove('hidden');
1416
+ document.getElementById('mainContent').classList.remove('full-width');
1417
+ } else {
1418
+ document.getElementById('sidebar').classList.add('hidden');
1419
+ document.getElementById('mainContent').classList.add('full-width');
1420
+ }
1421
+ });
1422
+
1423
+ // Initialize mobile view
1424
+ if (window.innerWidth <= 768) {
1425
+ document.getElementById('sidebar').classList.add('hidden');
1426
+ document.getElementById('mainContent').classList.add('full-width');
1427
+ }
1428
+ </script>
1429
+ <script id="dhws-dataInjector" src="/public/dhws-data-injector.js"></script>
1430
+ </body>
1431
+ </html>
tailwind.config.js ADDED
@@ -0,0 +1,184 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ module.exports = {
2
+ content: [
3
+ "./pages/*.{html,js}",
4
+ "./index.html",
5
+ "./src/**/*.{html,js,jsx,ts,tsx}",
6
+ "./components/**/*.{html,js,jsx,ts,tsx}"
7
+ ],
8
+ darkMode: 'class',
9
+ theme: {
10
+ extend: {
11
+ colors: {
12
+ // Primary Colors
13
+ primary: {
14
+ DEFAULT: "#4F46E5", // indigo-600
15
+ 50: "#EEF2FF", // indigo-50
16
+ 100: "#E0E7FF", // indigo-100
17
+ 500: "#6366F1", // indigo-500
18
+ 600: "#4F46E5", // indigo-600
19
+ 700: "#4338CA", // indigo-700
20
+ 900: "#312E81", // indigo-900
21
+ },
22
+ // Secondary Colors
23
+ secondary: {
24
+ DEFAULT: "#06B6D4", // cyan-500
25
+ 50: "#ECFEFF", // cyan-50
26
+ 100: "#CFFAFE", // cyan-100
27
+ 400: "#22D3EE", // cyan-400
28
+ 500: "#06B6D4", // cyan-500
29
+ 600: "#0891B2", // cyan-600
30
+ 700: "#0E7490", // cyan-700
31
+ },
32
+ // Accent Colors
33
+ accent: {
34
+ DEFAULT: "#F59E0B", // amber-500
35
+ 50: "#FFFBEB", // amber-50
36
+ 100: "#FEF3C7", // amber-100
37
+ 400: "#FBBF24", // amber-400
38
+ 500: "#F59E0B", // amber-500
39
+ 600: "#D97706", // amber-600
40
+ 700: "#B45309", // amber-700
41
+ },
42
+ // Background Colors
43
+ background: {
44
+ DEFAULT: "#0F172A", // slate-900
45
+ light: "#F8FAFC", // slate-50
46
+ },
47
+ surface: {
48
+ DEFAULT: "#1E293B", // slate-800
49
+ light: "#FFFFFF", // white
50
+ hover: "#334155", // slate-700
51
+ },
52
+ // Text Colors
53
+ 'text-primary': {
54
+ DEFAULT: "#F8FAFC", // slate-50
55
+ light: "#0F172A", // slate-900
56
+ },
57
+ 'text-secondary': {
58
+ DEFAULT: "#94A3B8", // slate-400
59
+ light: "#64748B", // slate-500
60
+ },
61
+ 'text-muted': {
62
+ DEFAULT: "#64748B", // slate-500
63
+ light: "#94A3B8", // slate-400
64
+ },
65
+ // Status Colors
66
+ success: {
67
+ DEFAULT: "#10B981", // emerald-500
68
+ 50: "#ECFDF5", // emerald-50
69
+ 100: "#D1FAE5", // emerald-100
70
+ 600: "#059669", // emerald-600
71
+ 700: "#047857", // emerald-700
72
+ },
73
+ warning: {
74
+ DEFAULT: "#F59E0B", // amber-500
75
+ 50: "#FFFBEB", // amber-50
76
+ 100: "#FEF3C7", // amber-100
77
+ 600: "#D97706", // amber-600
78
+ },
79
+ error: {
80
+ DEFAULT: "#EF4444", // red-500
81
+ 50: "#FEF2F2", // red-50
82
+ 100: "#FEE2E2", // red-100
83
+ 600: "#DC2626", // red-600
84
+ 700: "#B91C1C", // red-700
85
+ },
86
+ // Border Colors
87
+ border: "rgba(148, 163, 184, 0.2)", // slate-400 with opacity
88
+ },
89
+ fontFamily: {
90
+ sans: ['Inter', 'sans-serif'],
91
+ inter: ['Inter', 'sans-serif'],
92
+ mono: ['JetBrains Mono', 'monospace'],
93
+ 'jetbrains': ['JetBrains Mono', 'monospace'],
94
+ },
95
+ fontSize: {
96
+ 'xs': ['0.75rem', { lineHeight: '1rem' }],
97
+ 'sm': ['0.875rem', { lineHeight: '1.25rem' }],
98
+ 'base': ['1rem', { lineHeight: '1.5rem' }],
99
+ 'lg': ['1.125rem', { lineHeight: '1.75rem' }],
100
+ 'xl': ['1.25rem', { lineHeight: '1.75rem' }],
101
+ '2xl': ['1.5rem', { lineHeight: '2rem' }],
102
+ '3xl': ['1.875rem', { lineHeight: '2.25rem' }],
103
+ '4xl': ['2.25rem', { lineHeight: '2.5rem' }],
104
+ },
105
+ fontWeight: {
106
+ normal: '400',
107
+ medium: '500',
108
+ semibold: '600',
109
+ bold: '700',
110
+ },
111
+ borderRadius: {
112
+ 'sm': '4px',
113
+ 'md': '8px',
114
+ 'lg': '12px',
115
+ 'xl': '16px',
116
+ },
117
+ boxShadow: {
118
+ 'sm': '0 1px 3px rgba(0, 0, 0, 0.1)',
119
+ 'md': '0 4px 6px rgba(0, 0, 0, 0.1)',
120
+ 'lg': '0 10px 15px rgba(0, 0, 0, 0.1)',
121
+ 'card': '0 1px 3px rgba(0, 0, 0, 0.1)',
122
+ 'modal': '0 4px 6px rgba(0, 0, 0, 0.1)',
123
+ },
124
+ animation: {
125
+ 'slide-in': 'slideIn 300ms cubic-bezier(0.4, 0, 0.2, 1)',
126
+ 'fade-in': 'fadeIn 150ms ease-out',
127
+ 'scale-in': 'scaleIn 150ms ease-out',
128
+ },
129
+ keyframes: {
130
+ slideIn: {
131
+ '0%': { transform: 'translateY(-10px)', opacity: '0' },
132
+ '100%': { transform: 'translateY(0)', opacity: '1' },
133
+ },
134
+ fadeIn: {
135
+ '0%': { opacity: '0' },
136
+ '100%': { opacity: '1' },
137
+ },
138
+ scaleIn: {
139
+ '0%': { transform: 'scale(0.95)', opacity: '0' },
140
+ '100%': { transform: 'scale(1)', opacity: '1' },
141
+ },
142
+ },
143
+ transitionDuration: {
144
+ '150': '150ms',
145
+ '300': '300ms',
146
+ },
147
+ transitionTimingFunction: {
148
+ 'ease-out': 'ease-out',
149
+ 'custom': 'cubic-bezier(0.4, 0, 0.2, 1)',
150
+ },
151
+ spacing: {
152
+ '18': '4.5rem',
153
+ '88': '22rem',
154
+ '128': '32rem',
155
+ },
156
+ minHeight: {
157
+ 'touch': '44px',
158
+ },
159
+ minWidth: {
160
+ 'touch': '44px',
161
+ },
162
+ },
163
+ },
164
+ plugins: [
165
+ function({ addUtilities }) {
166
+ const newUtilities = {
167
+ '.touch-target': {
168
+ minHeight: '44px',
169
+ minWidth: '44px',
170
+ },
171
+ '.micro-interaction': {
172
+ transition: 'all 150ms ease-out',
173
+ },
174
+ '.micro-interaction:hover': {
175
+ transform: 'scale(0.98)',
176
+ },
177
+ '.transition-theme': {
178
+ transition: 'background-color 300ms cubic-bezier(0.4, 0, 0.2, 1), color 300ms cubic-bezier(0.4, 0, 0.2, 1), border-color 300ms cubic-bezier(0.4, 0, 0.2, 1)',
179
+ },
180
+ }
181
+ addUtilities(newUtilities)
182
+ }
183
+ ],
184
+ }