Spaces:
Runtime error
Runtime error
LE Quoc Dat
commited on
Commit
Β·
a8a3527
1
Parent(s):
06b9685
dark
Browse files- static/css/styles.css +112 -53
- 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(--
|
21 |
-
color: var(--text-
|
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:
|
31 |
-
color:
|
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:
|
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
|
117 |
-
background-color:
|
118 |
-
color: var(--
|
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
|
129 |
-
color:
|
130 |
transform: scale(1.05);
|
131 |
}
|
132 |
|
133 |
.mode-btn:hover:not(.selected) {
|
134 |
-
background-color: var(--
|
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
|
160 |
border-radius: 3px;
|
|
|
|
|
161 |
}
|
162 |
|
163 |
#pdf-viewer {
|
164 |
-
border: 1px solid
|
165 |
-
background-color:
|
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:
|
195 |
}
|
196 |
|
197 |
.highlight {
|
@@ -203,9 +219,11 @@ body {
|
|
203 |
height: 150px;
|
204 |
margin-bottom: 15px;
|
205 |
padding: 10px;
|
206 |
-
border: 1px solid
|
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
|
224 |
-
background-color:
|
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 |
-
|
261 |
-
|
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 |
-
|
285 |
-
|
286 |
}
|
287 |
|
288 |
/* Modal styles */
|
@@ -295,11 +300,11 @@ body {
|
|
295 |
width: 100%;
|
296 |
height: 100%;
|
297 |
overflow: auto;
|
298 |
-
background-color:
|
299 |
}
|
300 |
|
301 |
.modal-content {
|
302 |
-
background-color:
|
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:
|
542 |
border-radius: 5px;
|
|
|
543 |
}
|
544 |
|
545 |
#recent-files h3 {
|
546 |
margin: 0 0 15px 0;
|
547 |
-
color:
|
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:
|
561 |
border-radius: 4px;
|
562 |
-
border: 1px solid
|
563 |
-
transition:
|
564 |
}
|
565 |
|
566 |
#file-list li:hover {
|
567 |
-
background-color:
|
|
|
568 |
}
|
569 |
|
570 |
#file-list a {
|
571 |
text-decoration: none;
|
572 |
-
color:
|
573 |
display: block;
|
574 |
width: 100%;
|
575 |
}
|
576 |
|
577 |
-
#file-list a
|
578 |
-
color: #
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 |
|