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 |
|