LE Quoc Dat commited on
Commit
a8a3527
Β·
1 Parent(s): 06b9685
Files changed (2) hide show
  1. static/css/styles.css +112 -53
  2. templates/index.html +18 -0
static/css/styles.css CHANGED
@@ -7,6 +7,15 @@
7
  --button-min-width: 80px;
8
  --button-height: 30px;
9
  --button-font-size: 12px;
 
 
 
 
 
 
 
 
 
10
  }
11
 
12
  body {
@@ -17,9 +26,10 @@ body {
17
  flex-direction: column;
18
  height: 100vh;
19
  overflow: hidden;
20
- background-color: var(--background-color);
21
- color: var(--text-color);
22
  font-size: 80%;
 
23
  }
24
 
25
  #top-bar {
@@ -27,8 +37,8 @@ body {
27
  justify-content: space-between;
28
  align-items: center;
29
  padding: 15px;
30
- background-color: rgba(52, 152, 219, 0.4);
31
- color: white;
32
  box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
33
  backdrop-filter: blur(5px);
34
  }
@@ -91,8 +101,10 @@ body {
91
  padding: 10px;
92
  box-sizing: border-box;
93
  overflow-y: auto;
94
- background-color: white;
95
  box-shadow: -2px 0 5px rgba(0, 0, 0, 0.1);
 
 
96
  }
97
 
98
  #file-input,
@@ -113,9 +125,9 @@ body {
113
  .mode-btn {
114
  flex: 1;
115
  padding: 5px;
116
- border: 1px solid var(--secondary-color);
117
- background-color: white;
118
- color: var(--secondary-color);
119
  cursor: pointer;
120
  transition: all 0.3s ease;
121
  }
@@ -125,13 +137,13 @@ body {
125
  }
126
 
127
  .mode-btn.selected {
128
- background-color: var(--secondary-color);
129
- color: white;
130
  transform: scale(1.05);
131
  }
132
 
133
  .mode-btn:hover:not(.selected) {
134
- background-color: var(--background-color);
135
  }
136
 
137
  #page-navigation {
@@ -149,6 +161,8 @@ body {
149
 
150
  #settings-panel {
151
  margin-top: 15px;
 
 
152
  }
153
 
154
  #api-key-input,
@@ -156,13 +170,15 @@ body {
156
  margin-bottom: 15px;
157
  width: 100%;
158
  padding: 8px;
159
- border: 1px solid #ddd;
160
  border-radius: 3px;
 
 
161
  }
162
 
163
  #pdf-viewer {
164
- border: 1px solid #ddd;
165
- background-color: white;
166
  box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
167
  }
168
 
@@ -191,7 +207,7 @@ body {
191
  }
192
 
193
  ::selection {
194
- background: rgba(52, 152, 219, 0.3);
195
  }
196
 
197
  .highlight {
@@ -203,9 +219,11 @@ body {
203
  height: 150px;
204
  margin-bottom: 15px;
205
  padding: 10px;
206
- border: 1px solid #ddd;
207
  border-radius: 3px;
208
  resize: vertical;
 
 
209
  }
210
 
211
  #explain-prompt, #language-prompt {
@@ -220,17 +238,23 @@ body {
220
  .flashcard {
221
  margin-bottom: 8px;
222
  padding: 10px;
223
- border: 1px solid #ddd;
224
- background-color: white;
225
  border-radius: 3px;
226
  transition: box-shadow 0.3s ease;
227
  font-size: 1em;
 
228
  }
229
 
230
  .flashcard:hover {
231
  box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
232
  }
233
 
 
 
 
 
 
234
  .explanation-content {
235
  white-space: pre-wrap;
236
  text-align: left;
@@ -257,32 +281,13 @@ body {
257
  background-color: #c0392b;
258
  }
259
 
260
- #recent-pdfs {
261
- margin-top: 20px;
262
- }
263
-
264
- #recent-pdfs h3 {
265
- margin-bottom: 10px;
266
- color: var(--secondary-color);
267
- }
268
-
269
- #recent-pdfs ul {
270
- padding-left: 20px;
271
- list-style-type: none;
272
- }
273
-
274
- #recent-pdfs li {
275
- margin-bottom: 5px;
276
- }
277
-
278
- #recent-pdfs a {
279
- color: var(--primary-color);
280
- text-decoration: none;
281
- transition: color 0.3s ease;
282
  }
283
 
284
- #recent-pdfs a:hover {
285
- color: #2980b9;
286
  }
287
 
288
  /* Modal styles */
@@ -295,11 +300,11 @@ body {
295
  width: 100%;
296
  height: 100%;
297
  overflow: auto;
298
- background-color: rgba(0,0,0,0.4);
299
  }
300
 
301
  .modal-content {
302
- background-color: #fefefe;
303
  margin: 5% auto;
304
  padding: 20px;
305
  border: 1px solid #888;
@@ -307,6 +312,7 @@ body {
307
  max-width: 800px;
308
  max-height: 80vh;
309
  overflow-y: auto;
 
310
  }
311
 
312
  .close {
@@ -538,13 +544,14 @@ body {
538
  #recent-files {
539
  margin-top: 20px;
540
  padding: 15px;
541
- background: #f8f8f8;
542
  border-radius: 5px;
 
543
  }
544
 
545
  #recent-files h3 {
546
  margin: 0 0 15px 0;
547
- color: #333;
548
  font-size: 1.1em;
549
  }
550
 
@@ -557,25 +564,37 @@ body {
557
  #file-list li {
558
  margin-bottom: 10px;
559
  padding: 8px;
560
- background: white;
561
  border-radius: 4px;
562
- border: 1px solid #eee;
563
- transition: background-color 0.2s;
564
  }
565
 
566
  #file-list li:hover {
567
- background-color: #f0f0f0;
 
568
  }
569
 
570
  #file-list a {
571
  text-decoration: none;
572
- color: #2196F3;
573
  display: block;
574
  width: 100%;
575
  }
576
 
577
- #file-list a:hover {
578
- color: #1976D2;
 
 
 
 
 
 
 
 
 
 
 
579
  }
580
 
581
  /* Dropdown styles for collection actions */
@@ -669,3 +688,43 @@ body {
669
  .show {
670
  display: block;
671
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
  --button-min-width: 80px;
8
  --button-height: 30px;
9
  --button-font-size: 12px;
10
+ --bg-primary: #ecf0f1;
11
+ --bg-secondary: #ffffff;
12
+ --text-primary: #34495e;
13
+ --text-secondary: #2c3e50;
14
+ --border-color: #ddd;
15
+ --flashcard-bg: #ffffff;
16
+ --highlight-bg: rgba(52, 152, 219, 0.3);
17
+ --modal-bg: rgba(0, 0, 0, 0.4);
18
+ --modal-content-bg: #fefefe;
19
  }
20
 
21
  body {
 
26
  flex-direction: column;
27
  height: 100vh;
28
  overflow: hidden;
29
+ background-color: var(--bg-primary);
30
+ color: var(--text-primary);
31
  font-size: 80%;
32
+ transition: background-color 0.3s ease, color 0.3s ease;
33
  }
34
 
35
  #top-bar {
 
37
  justify-content: space-between;
38
  align-items: center;
39
  padding: 15px;
40
+ background-color: var(--bg-secondary);
41
+ color: var(--text-primary);
42
  box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
43
  backdrop-filter: blur(5px);
44
  }
 
101
  padding: 10px;
102
  box-sizing: border-box;
103
  overflow-y: auto;
104
+ background-color: var(--bg-secondary);
105
  box-shadow: -2px 0 5px rgba(0, 0, 0, 0.1);
106
+ color: var(--text-primary);
107
+ transition: background-color 0.3s ease, color 0.3s ease;
108
  }
109
 
110
  #file-input,
 
125
  .mode-btn {
126
  flex: 1;
127
  padding: 5px;
128
+ border: 1px solid var(--text-secondary);
129
+ background-color: var(--bg-secondary);
130
+ color: var(--text-primary);
131
  cursor: pointer;
132
  transition: all 0.3s ease;
133
  }
 
137
  }
138
 
139
  .mode-btn.selected {
140
+ background-color: var(--text-secondary);
141
+ color: var(--bg-secondary);
142
  transform: scale(1.05);
143
  }
144
 
145
  .mode-btn:hover:not(.selected) {
146
+ background-color: var(--bg-primary);
147
  }
148
 
149
  #page-navigation {
 
161
 
162
  #settings-panel {
163
  margin-top: 15px;
164
+ background-color: var(--bg-secondary);
165
+ border-color: var(--border-color);
166
  }
167
 
168
  #api-key-input,
 
170
  margin-bottom: 15px;
171
  width: 100%;
172
  padding: 8px;
173
+ border: 1px solid var(--border-color);
174
  border-radius: 3px;
175
+ background-color: var(--bg-secondary);
176
+ color: var(--text-primary);
177
  }
178
 
179
  #pdf-viewer {
180
+ border: 1px solid var(--border-color);
181
+ background-color: var(--bg-secondary);
182
  box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
183
  }
184
 
 
207
  }
208
 
209
  ::selection {
210
+ background: var(--highlight-bg);
211
  }
212
 
213
  .highlight {
 
219
  height: 150px;
220
  margin-bottom: 15px;
221
  padding: 10px;
222
+ border: 1px solid var(--border-color);
223
  border-radius: 3px;
224
  resize: vertical;
225
+ background-color: var(--bg-secondary);
226
+ color: var(--text-primary);
227
  }
228
 
229
  #explain-prompt, #language-prompt {
 
238
  .flashcard {
239
  margin-bottom: 8px;
240
  padding: 10px;
241
+ border: 1px solid var(--border-color);
242
+ background-color: var(--flashcard-bg);
243
  border-radius: 3px;
244
  transition: box-shadow 0.3s ease;
245
  font-size: 1em;
246
+ color: var(--text-primary);
247
  }
248
 
249
  .flashcard:hover {
250
  box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
251
  }
252
 
253
+ .dark-mode .flashcard {
254
+ border-color: var(--text-secondary);
255
+ box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2);
256
+ }
257
+
258
  .explanation-content {
259
  white-space: pre-wrap;
260
  text-align: left;
 
281
  background-color: #c0392b;
282
  }
283
 
284
+ .dark-mode .remove-btn {
285
+ background-color: #e74c3c;
286
+ opacity: 0.9;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
287
  }
288
 
289
+ .dark-mode .remove-btn:hover {
290
+ opacity: 1;
291
  }
292
 
293
  /* Modal styles */
 
300
  width: 100%;
301
  height: 100%;
302
  overflow: auto;
303
+ background-color: var(--modal-bg);
304
  }
305
 
306
  .modal-content {
307
+ background-color: var(--modal-content-bg);
308
  margin: 5% auto;
309
  padding: 20px;
310
  border: 1px solid #888;
 
312
  max-width: 800px;
313
  max-height: 80vh;
314
  overflow-y: auto;
315
+ color: var(--text-primary);
316
  }
317
 
318
  .close {
 
544
  #recent-files {
545
  margin-top: 20px;
546
  padding: 15px;
547
+ background-color: var(--bg-secondary);
548
  border-radius: 5px;
549
+ border: 1px solid var(--border-color);
550
  }
551
 
552
  #recent-files h3 {
553
  margin: 0 0 15px 0;
554
+ color: var(--text-primary);
555
  font-size: 1.1em;
556
  }
557
 
 
564
  #file-list li {
565
  margin-bottom: 10px;
566
  padding: 8px;
567
+ background-color: var(--flashcard-bg);
568
  border-radius: 4px;
569
+ border: 1px solid var(--border-color);
570
+ transition: all 0.2s ease;
571
  }
572
 
573
  #file-list li:hover {
574
+ background-color: var(--bg-primary);
575
+ transform: translateX(5px);
576
  }
577
 
578
  #file-list a {
579
  text-decoration: none;
580
+ color: var(--primary-color);
581
  display: block;
582
  width: 100%;
583
  }
584
 
585
+ .dark-mode #file-list a {
586
+ color: #5dade2; /* Lighter blue for better visibility in dark mode */
587
+ }
588
+
589
+ .dark-mode #file-list li:hover {
590
+ border-color: var(--text-secondary);
591
+ }
592
+
593
+ /* Date styling in recent files */
594
+ #file-list .file-date {
595
+ color: var(--text-secondary);
596
+ font-size: 0.9em;
597
+ margin-left: 5px;
598
  }
599
 
600
  /* Dropdown styles for collection actions */
 
688
  .show {
689
  display: block;
690
  }
691
+
692
+ /* Dark mode colors */
693
+ .dark-mode {
694
+ --bg-primary: #1a1a1a;
695
+ --bg-secondary: #2d2d2d;
696
+ --text-primary: #ffffff;
697
+ --text-secondary: #e0e0e0;
698
+ --border-color: #404040;
699
+ --flashcard-bg: #333333;
700
+ --highlight-bg: rgba(52, 152, 219, 0.5);
701
+ --modal-bg: rgba(0, 0, 0, 0.7);
702
+ --modal-content-bg: #2d2d2d;
703
+ }
704
+
705
+ /* Add dark mode toggle button styles */
706
+ #dark-mode-toggle {
707
+ cursor: pointer;
708
+ font-size: 24px;
709
+ margin: 0 15px;
710
+ transition: transform 0.3s ease;
711
+ }
712
+
713
+ #dark-mode-toggle:hover {
714
+ transform: scale(1.1);
715
+ }
716
+
717
+ /* Dark mode specific adjustments for the dropdown */
718
+ .dark-mode .dropdown-content {
719
+ background-color: var(--bg-secondary);
720
+ border-color: var(--border-color);
721
+ }
722
+
723
+ .dark-mode .dropdown-content a {
724
+ color: var(--text-primary);
725
+ border-bottom-color: var(--border-color);
726
+ }
727
+
728
+ .dark-mode .dropdown-content a:hover {
729
+ background-color: var(--bg-primary);
730
+ }
templates/index.html CHANGED
@@ -25,6 +25,7 @@
25
  <div id="right-panel">
26
  <div id="top-controls">
27
  <div id="settings-icon">βš™οΈ</div>
 
28
  <div id="page-navigation">
29
  <button id="zoom-out-btn">-</button>
30
  <button id="zoom-in-btn">+</button>
@@ -1406,6 +1407,23 @@
1406
  exportToJSON();
1407
  });
1408
  });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1409
  </script>
1410
  </body>
1411
 
 
25
  <div id="right-panel">
26
  <div id="top-controls">
27
  <div id="settings-icon">βš™οΈ</div>
28
+ <div id="dark-mode-toggle">πŸŒ™</div>
29
  <div id="page-navigation">
30
  <button id="zoom-out-btn">-</button>
31
  <button id="zoom-in-btn">+</button>
 
1407
  exportToJSON();
1408
  });
1409
  });
1410
+
1411
+ // Dark mode toggle functionality
1412
+ const darkModeToggle = document.getElementById('dark-mode-toggle');
1413
+ let isDarkMode = localStorage.getItem('darkMode') === 'true';
1414
+
1415
+ // Initialize dark mode state
1416
+ if (isDarkMode) {
1417
+ document.body.classList.add('dark-mode');
1418
+ darkModeToggle.textContent = 'β˜€οΈ';
1419
+ }
1420
+
1421
+ darkModeToggle.addEventListener('click', () => {
1422
+ isDarkMode = !isDarkMode;
1423
+ document.body.classList.toggle('dark-mode');
1424
+ darkModeToggle.textContent = isDarkMode ? 'β˜€οΈ' : 'πŸŒ™';
1425
+ localStorage.setItem('darkMode', isDarkMode);
1426
+ });
1427
  </script>
1428
  </body>
1429