diff --git a/client/assets/app.css b/client/assets/app.css index 36b3b4bad..163fce8b7 100644 --- a/client/assets/app.css +++ b/client/assets/app.css @@ -3,11 +3,12 @@ @import './draggable.css'; @import './defaultStyles.css'; @import './absicons.css'; - +@import './theme.css'; +/* :root { --bookshelf-texture-img: url(~static/textures/wood_default.jpg); --bookshelf-divider-bg: linear-gradient(180deg, rgba(149, 119, 90, 1) 0%, rgba(103, 70, 37, 1) 17%, rgba(103, 70, 37, 1) 88%, rgba(71, 48, 25, 1) 100%); -} +} */ .page { width: 100%; @@ -22,8 +23,7 @@ #bookshelf { height: calc(100% - 40px); - background-image: linear-gradient(to right bottom, #2e2e2e, #303030, #313131, #333333, #353535, #343434, #323232, #313131, #2c2c2c, #282828, #232323, #1f1f1f); - + background-image: var(--gradient-bookshelf) !important; /* For Firefox */ scrollbar-width: thin; scrollbar-color: #855620 rgba(0, 0, 0, 0); @@ -44,7 +44,7 @@ } #page-wrapper { - background-image: linear-gradient(to right bottom, #2e2e2e, #303030, #313131, #333333, #353535, #343434, #323232, #313131, #2c2c2c, #282828, #232323, #1f1f1f); + background-image: var(--gradient-bookshelf) !important; } /* width */ diff --git a/client/assets/theme.css b/client/assets/theme.css new file mode 100644 index 000000000..362f042c6 --- /dev/null +++ b/client/assets/theme.css @@ -0,0 +1,345 @@ +:root, +:root.dark { + /* Main backgrounds - from your existing design */ + --color-bg: #373838; /* From tailwind.css --color-bg */ + --color-primary: #232323; /* From tailwind.css --color-primary */ + --color-fg: #2e2e2e; /* From your existing even rows */ + + /* Gradient backgrounds - from your bookshelf design */ + --gradient-bookshelf: linear-gradient(to right bottom, #2e2e2e, #303030, #313131, #333333, #353535, #343434, #323232, #313131, #2c2c2c, #282828, #232323, #1f1f1f); + + /* Text colors */ + --color-text: #ffffff; + --color-text-muted: #bbbbbb; /* From --color-black-50 */ + --color-text-dim: #666666; /* From --color-black-100 */ + + /* Border colors - from your existing table styles */ + --color-border: #474747; /* From tracksTable border */ + --color-border-light: #555555; /* From --color-black-200 */ + + /* Interactive colors */ + --color-hover: #474747; /* From tracksTable hover */ + --color-accent: #1ad691; /* From tailwind.css --color-accent */ + --color-success: #4caf50; /* From tailwind.css --color-success */ + --color-darkgreen: rgb(34, 127, 35); /* From tailwind.css --color-darkgreen */ + + /* Status colors */ + --color-warning: #fb8c00; /* From tailwind.css --color-warning */ + --color-error: #ff5252; /* From tailwind.css --color-error */ + --color-info: #2196f3; /* From tailwind.css --color-info */ + + /* Scrollbar colors - from your existing design */ + --scrollbar-thumb: #855620; + --scrollbar-thumb-hover: #704922; + + /* Shadow colors */ + --color-shadow-light: rgba(17, 17, 17, 0.4); /* #111111aa */ + --color-shadow-medium: rgba(17, 17, 17, 0.6); /* #111111ee */ + --color-shadow-heavy: rgba(17, 17, 17, 0.8); + + /* Bookshelf specific - keep your existing design */ + --bookshelf-texture-img: url(~static/textures/wood_default.jpg); + --bookshelf-divider-bg: linear-gradient(180deg, rgba(149, 119, 90, 1) 0%, rgba(103, 70, 37, 1) 17%, rgba(103, 70, 37, 1) 88%, rgba(71, 48, 25, 1) 100%); + + /* Special effects */ + --shimmer-bg: linear-gradient(315deg, #19191a 0%, rgb(15, 15, 15) 74%); + --gold-border: rgba(255, 244, 182, 0.6); + --gold-text: #fce3a6; + + --table-border: #474747; + --table-header-bg: #272727; + --table-row-bg: #373838; + --table-row-alt-bg: #2f2f2f; + --table-row-hover-bg: #474747; + --table-text-color: #e0e0e0; +} + +/* Light theme */ +:root.light { + /* Main backgrounds - lighter equivalents */ + --color-bg: #f8f9fa; + --color-primary: #ffffff; + --color-fg: #f1f3f4; + + /* Gradient backgrounds - light version */ + --gradient-bookshelf: linear-gradient(to right bottom, #f8f9fa, #f1f3f4, #e9ecef, #dee2e6, #ced4da, #adb5bd, #868e96, #6c757d, #495057, #343a40, #212529, #000000); + + /* Text colors */ + --color-text: #212529; + --color-text-muted: #495057; + --color-text-dim: #868e96; + + /* Border colors */ + --color-border: #dee2e6; + --color-border-light: #e9ecef; + + /* Interactive colors */ + --color-hover: #e9ecef; + --color-accent: #20c997; /* Slightly adjusted for light mode */ + --color-success: #198754; + --color-darkgreen: rgb(25, 135, 84); + + /* Status colors - adjusted for light mode */ + --color-warning: #fd7e14; + --color-error: #dc3545; + --color-info: #0d6efd; + + /* Scrollbar colors */ + --scrollbar-thumb: #adb5bd; + --scrollbar-thumb-hover: #868e96; + + /* Shadow colors */ + --color-shadow-light: rgba(0, 0, 0, 0.1); + --color-shadow-medium: rgba(0, 0, 0, 0.2); + --color-shadow-heavy: rgba(0, 0, 0, 0.3); + + /* Bookshelf specific - lighter wood texture */ + --bookshelf-texture-img: url(~static/textures/wood_default.jpg); + --bookshelf-divider-bg: linear-gradient(180deg, rgba(200, 170, 140, 1) 0%, rgba(180, 150, 120, 1) 17%, rgba(180, 150, 120, 1) 88%, rgba(160, 130, 100, 1) 100%); + + /* Special effects */ + --shimmer-bg: linear-gradient(315deg, #f8f9fa 0%, #e9ecef 74%); + --gold-border: rgba(133, 86, 32, 0.6); + --gold-text: #855620; + + + --table-border: #ccc; + --table-header-bg: #f0f0f0; + --table-row-bg: #ffffff; + --table-row-alt-bg: #f9f9f9; + --table-row-hover-bg: #e6e6e6; + --table-text-color: #333; +} + +/* Smooth transitions for theme changes */ +* { + transition: background-color 0.3s ease, color 0.3s ease, border-color 0.3s ease, box-shadow 0.3s ease, fill 0.3s ease; +} + +body { + color: var(--color-text); +} +.userSessionsTable { + color: var(--table-text-color); +} +/* Update common classes to use CSS variables */ +.bg-bg { + background-color: var(--color-bg) !important; +} + +.bg-primary { + background-color: var(--color-primary) !important; +} + +.bg-fg { + background-color: var(--color-fg) !important; +} + +.text-white, +.text-themed { + color: var(--color-text) !important; +} + +.text-gray-100 { + color: var(--color-text-muted) !important; +} + +.text-gray-200 { + color: var(--color-text-muted) !important; +} +.text-gray-300 { + color: var(--color-text-muted) !important; +} + +.text-gray-400 { + color: var(--color-text-dim) !important; +} + +.border-gray-500 { + border-color: var(--color-border) !important; +} + +.shadow-xs { + box-shadow: 0 1px 2px var(--color-shadow) !important; +} + +/* Ensure SVG icons also use theme colors */ +svg { + color: var(--color-text); + fill: currentColor; +} + +/* Material symbols and icons */ +.material-symbols, +.material-icons { + color: var(--color-text) !important; +} + +.tooltip-content, +.ui-tooltip-content { + background-color: var(--color-primary) !important; + color: var(--color-text) !important; + border: 1px solid var(--color-border) !important; +} + +/* For Popper.js or similar tooltip libraries */ +.popper, +.tippy-box { + background-color: var(--color-primary) !important; + color: var(--color-text) !important; + border: 1px solid var(--color-border) !important; +} + +.tippy-arrow { + color: var(--color-primary) !important; +} + +/* Ensure text is readable */ +.ui-tooltip *, +.tooltip * { + color: var(--color-text) !important; +} + +/* More specific overrides for common tooltip libraries */ +[data-tippy-root] { + --tippy-color: var(--color-text) !important; + --tippy-bg: var(--color-primary) !important; +} + +/* Vue/Nuxt specific tooltip classes */ +.v-tooltip-content { + background: var(--color-primary) !important; + color: var(--color-text) !important; + border: 1px solid var(--color-border) !important; +} + +/* Override any hardcoded dark/light theme classes */ +.tooltip-dark, +.tooltip-light { + background-color: var(--color-primary) !important; + color: var(--color-text) !important; + border-color: var(--color-border) !important; +} + +/* Force override for stubborn tooltips */ +[class*="tooltip"], +[class*="popover"] { + background-color: var(--color-primary) !important; + color: var(--color-text) !important; + border-color: var(--color-border) !important; +} + +/* READERS */ +/* PDF Reader dark mode */ +.pdf-reader-container { + background-color: var(--color-primary); + color: var(--color-text); +} + +/* Ensure proper contrast for controls */ +.pdf-reader-container .material-symbols { + color: var(--color-text); +} + +/* Make sure the viewer area has proper background */ +.pdf-reader-container .pdf-viewer { + background-color: var(--color-primary); +} + +/* Modal specific overrides */ +.modal-content { + background-color: var(--color-fg) !important; + color: var(--color-text) !important; +} + +/* Input fields - general styling that works for both themes */ +input, +textarea, +select { + background-color: var(--color-primary); + color: var(--color-text); + border-color: var(--color-border-light); + transition: background-color 0.3s ease, color 0.3s ease, border-color 0.3s ease; +} + +/* Input focus states */ +input:focus, +textarea:focus, +select:focus { + border-color: var(--color-accent); + outline: none; + box-shadow: 0 0 0 2px rgba(var(--color-accent), 0.2); +} + +/* Button styling - general that works for both themes */ +.ui-btn, +button { + background-color: var(--color-primary); + color: var(--color-text); + border-color: var(--color-border-light); + transition: background-color 0.3s ease, color 0.3s ease, border-color 0.3s ease; +} + +/* Button hover states */ +.ui-btn:hover, +button:hover { + background-color: var(--color-hover); +} + +/* Tab styling */ +.tab { + background-color: var(--color-primary); + color: var(--color-text); + border-color: var(--color-border); + transition: background-color 0.3s ease; +} + +/* Tab hover states */ +.tab:hover { + background-color: var(--color-hover); +} + +/* Tab active states */ +.tab.active, +.tab[aria-selected="true"] { + background-color: var(--color-fg); + border-color: var(--color-accent); +} + +/* Dropdown menus */ +.dropdown-menu, +select option { + background-color: var(--color-primary); + color: var(--color-text); + border-color: var(--color-border); +} + +/* Form validation states */ +input.error, +textarea.error { + border-color: var(--color-error); +} + +input.success, +textarea.success { + border-color: var(--color-success); +} + +/* Placeholder text */ +input::placeholder, +textarea::placeholder { + color: var(--color-text-dim); +} + +/* Disabled states */ +input:disabled, +textarea:disabled, +select:disabled, +button:disabled, +.ui-btn:disabled { + background-color: var(--color-fg); + color: var(--color-text-dim); + border-color: var(--color-border); + opacity: 0.6; + cursor: not-allowed; +} diff --git a/client/components/app/Appbar.vue b/client/components/app/Appbar.vue index f74134041..dbd96c47b 100644 --- a/client/components/app/Appbar.vue +++ b/client/components/app/Appbar.vue @@ -21,7 +21,13 @@
- + + +