diff --git a/src/components/App.css b/src/components/App.css index b0749d1..97cc391 100644 --- a/src/components/App.css +++ b/src/components/App.css @@ -1,6 +1,6 @@ body { - background-color: #141414; - color: #eee; + background-color: var(--background-color); + color: var(--text-color); font-family: monospace; } @@ -29,10 +29,10 @@ button, select { font-size: inherit; font-family: inherit; - background: #fff2; + background: var(--layer-color); border-radius: 8px; border: none; - color: #eee; + color: var(--text-color); padding-inline: 8px; padding-block: 4px; outline: none; @@ -43,27 +43,27 @@ input[type="file"].non-transparent::file-selector-button, input[type="text"].non-transparent, button.non-transparent, select.non-transparent { - background: #222; - border: 2px solid #444; + background: var(--layer-color-non-transparent); + border: 2px solid var(--layer-color-non-transparent); } input[type="file"]::file-selector-button:hover, button:hover, select:hover { - background: #fff3; + background: var(--layer-color-hover); } input[type="file"].non-transparent::file-selector-button:hover, button.non-transparent:hover, select.non-transparent:hover { - background: #444; + background: var(--layer-color-non-transparent-hover); } input[type="file"]:disabled::file-selector-button, button:disabled, select:disabled { - background: #fff1; - color: #666; + background: var(--layer-color-disabled); + color: var(--text-color-disabled); cursor: not-allowed; } @@ -71,8 +71,8 @@ select:disabled { input[type="file"].non-transparent:disabled::file-selector-button, button.non-transparent:disabled, select.non-transparent:disabled { - background: #222; - color: #666; + background: var(--layer-color-non-transparent-disabled); + color: var(--text-color-disabled); cursor: not-allowed; } @@ -83,17 +83,17 @@ button { } select > option { - background: #141414; - color: #eee; + background: var(--background-color); + color: var(--text-color); } input[type="text"] { background-color: unset; - border: 2px solid #fff2; + border: 2px solid var(--layer-color); } input[type="text"]:focus { - border: 2px solid #fff3; + border: 2px solid var(--layer-color-hover); } .invis-button { @@ -111,17 +111,17 @@ input[type="text"]:focus { } ::-webkit-scrollbar-track { - background-color: #141414; + background-color: var(--background-color); border-radius: 5px; } ::-webkit-scrollbar-thumb { - background-color: #fff2; + background-color: var(--layer-color); border-radius: 5px; } ::-webkit-scrollbar-thumb:hover { - background-color: #fff3; + background-color: var(--layer-color-hover); } ::-webkit-scrollbar { diff --git a/src/components/App.js b/src/components/App.js index 1f367e9..7bfb534 100644 --- a/src/components/App.js +++ b/src/components/App.js @@ -1,7 +1,6 @@ import { useState } from 'react'; import Map from './map/Map'; import Toolbar from './toolbar/Toolbar'; -import './App.css'; import SideMenu from './sidemenu/SideMenu'; import SettingsManager from './SettingsManager'; import LocList from './loclist/LocList'; @@ -11,6 +10,8 @@ import {GradientsManager} from "./GradientsManager"; import SideMenuContext from '../contexts/SideMenuContext'; import SceneryManager from './SceneryManager'; import ThemeManager from './ThemeManager'; +import './Themes.css'; +import './App.css'; function App() { const [sideMenuOpen, setSideMenuOpen] = useState(false); diff --git a/src/components/Themes.css b/src/components/Themes.css new file mode 100644 index 0000000..93c587b --- /dev/null +++ b/src/components/Themes.css @@ -0,0 +1,49 @@ +:root { + --background-color: #141414; + --text-color: #eee; + --layer-color: #fff2; + --layer-color-hover: #fff3; + --layer-color-disabled: #fff1; + --layer-color-non-transparent: #222; + --layer-color-non-transparent-hover: #444; + --layer-color-non-transparent-disabled: #222; + --text-color-disabled: #666; + --border-color: #444; + --text-color-inverted: #141414; + --icon-color: #aaa; + --icon-color-active: #fff; + --map-background-color: #111; + --map-shadow-color: #000; + --map-icon-color: #eee; + --map-text-color: #eee; + --map-platform-color: #444; + --dialog-background-color: #222; + --parser-log-background-color: #0004; + --parser-log-warn-color: #aa4; + --parser-log-error-color: #f44; +} + +.light-mode { + --background-color: #eee; + --text-color: #222; + --layer-color: #0002; + --layer-color-hover: #0003; + --layer-color-disabled: #0001; + --layer-color-non-transparent: #ddd; + --layer-color-non-transparent-hover: #eee; + --layer-color-non-transparent-disabled: #888; + --text-color-disabled: #666; + --border-color: #aaa; + --text-color-inverted: #eee; + --icon-color: #222; + --icon-color-active: #888; + --map-background-color: #fff; + --map-shadow-color: #0008; + --map-icon-color: #444; + --map-text-color: #444; + --map-platform-color: #ccc; + --dialog-background-color: #ddd; + --parser-log-background-color: #fff4; + --parser-log-warn-color: #774; + --parser-log-error-color: #f44; +} diff --git a/src/components/dialog/Dialog.css b/src/components/dialog/Dialog.css index 5234a06..1533da2 100644 --- a/src/components/dialog/Dialog.css +++ b/src/components/dialog/Dialog.css @@ -13,8 +13,8 @@ .dialog { display: block; - background-color: #222; - border: 2px solid #444; + background-color: var(--dialog-background-color); + border: 2px solid var(--border-color); border-radius: 8px; margin: 0 auto; padding: 1em; @@ -34,7 +34,7 @@ .dialog-title { margin-bottom: 2em; - color: #888; + color: var(--text-color-disabled); font-weight: bold; } diff --git a/src/components/map/Map.css b/src/components/map/Map.css index eb0c914..1e94315 100644 --- a/src/components/map/Map.css +++ b/src/components/map/Map.css @@ -3,7 +3,7 @@ display: flex; flex-wrap: wrap; flex-direction: column; - background-color: #111; + background-color: var(--map-background-color); } .map svg path.track { @@ -19,9 +19,9 @@ .map text { font-size: 2px; - fill: #eee; + fill: var(--map-text-color); stroke: none; - text-shadow: 0 0 16px #000; + text-shadow: 0 0 16px var(--map-shadow-color); } .map .switch-name-text { @@ -46,11 +46,11 @@ } .map g.track-object circle { - fill: #eee; + fill: var(--map-icon-color); } .map g.track-object text { - fill: #eee; + fill: var(--map-text-color); display: none; } @@ -59,7 +59,7 @@ } .map g.platform rect { - fill: #444; + fill: var(--map-platform-color); } .map g.map-icon-stroked path, @@ -67,25 +67,25 @@ .map g.map-icon-stroked line, .map g.map-icon-stroked rect { fill: none; - stroke: #eee; + stroke: var(--map-icon-color); } .map g.map-icon path, .map g.map-icon circle, .map g.map-icon line, .map g.map-icon rect { - fill: #eee; + fill: var(--map-icon-color); stroke: none; } .map g.map-icon-stroked .background, .map g.map-icon .background { - fill: #111; + fill: var(--map-background-color); stroke: none; } .map g.map-icon-stroked .with-background, .map g.map-icon .with-background { - fill: #111; - stroke: #eee; + fill: var(--map-background-color); + stroke: var(--map-icon-color); } diff --git a/src/components/map/track-hover-info/TrackHoverInfo.css b/src/components/map/track-hover-info/TrackHoverInfo.css index a2caf03..9b9c979 100644 --- a/src/components/map/track-hover-info/TrackHoverInfo.css +++ b/src/components/map/track-hover-info/TrackHoverInfo.css @@ -6,8 +6,8 @@ } .track-hover-info-popup { - background-color: #222; - border: 2px solid #444; + background-color: var(--layer-color-non-transparent); + border: 2px solid var(--border-color); border-radius: 8px; padding: 1em; } @@ -24,13 +24,13 @@ .track-hover-info-popup th { text-align: start; padding-right: 2em; - color: #888; + color: var(--text-color-disabled); } .track-hover-info-popup__align { margin-top: 1.5em; padding: 2px; - color: #888; + color: var(--text-color-disabled); } .track-hover-info-popup .track-hover-info-popup-label { diff --git a/src/components/scenery-info-dialog/SceneryInfoDialog.css b/src/components/scenery-info-dialog/SceneryInfoDialog.css index 0a2ccc0..0f6ca7e 100644 --- a/src/components/scenery-info-dialog/SceneryInfoDialog.css +++ b/src/components/scenery-info-dialog/SceneryInfoDialog.css @@ -1,12 +1,12 @@ .scenery-info-view td.label { font-weight: bold; - color: #aaa; + color: var(--text-disabled-color); vertical-align: baseline; padding-right: 1em; } .scenery-info-view td.value a { - color: #eee; + color: var(--text-color); text-decoration: none; } diff --git a/src/components/scenery-loaded-dialog/SceneryParserLogView.css b/src/components/scenery-loaded-dialog/SceneryParserLogView.css index baef0ae..52db454 100644 --- a/src/components/scenery-loaded-dialog/SceneryParserLogView.css +++ b/src/components/scenery-loaded-dialog/SceneryParserLogView.css @@ -1,8 +1,8 @@ .scenery-parser-log-view { padding: 1em; border-radius: 8px; - border: 2px solid #444; - background-color: #0004; + border: 2px solid var(--border-color); + background-color: var(--parser-log-background-color); } .scenery-parser-log-view ul { @@ -14,9 +14,9 @@ } .scenery-parser-log-view .log-entry.warn { - color: #aa4; + color: var(--parser-log-warn-color); } .scenery-parser-log-view .log-entry.error { - color: #f44; + color: var(--parser-log-error-color); } \ No newline at end of file diff --git a/src/components/sidemenu/SideMenu.css b/src/components/sidemenu/SideMenu.css index 831072a..feac37b 100644 --- a/src/components/sidemenu/SideMenu.css +++ b/src/components/sidemenu/SideMenu.css @@ -3,13 +3,13 @@ } .side-menu { - border-left: 2px solid #444; + border-left: 2px solid var(--border-color); padding: 1em; position: absolute; right: 0; top: 0; bottom: 0; - background-color: #141414; + background-color: var(--background-color); z-index: 2000; width: max-content; transition: transform 0.2s ease-in-out; @@ -71,7 +71,7 @@ } .info-footer { - color: #888; + color: var(--text-color-disabled); display: flex; flex-direction: column; flex-wrap: nowrap; diff --git a/src/components/sidemenu/track-color-mode/TrackColorMode.css b/src/components/sidemenu/track-color-mode/TrackColorMode.css index 7c97a27..9fedbe2 100644 --- a/src/components/sidemenu/track-color-mode/TrackColorMode.css +++ b/src/components/sidemenu/track-color-mode/TrackColorMode.css @@ -28,7 +28,7 @@ flex-direction: column; gap: 1em; padding: 1em; - background-color: #fff1; + background-color: var(--layer-color); border-radius: 8px; } diff --git a/src/components/toolbar/Toolbar.css b/src/components/toolbar/Toolbar.css index debf6c7..3442268 100644 --- a/src/components/toolbar/Toolbar.css +++ b/src/components/toolbar/Toolbar.css @@ -5,7 +5,7 @@ align-items: center; gap: 10px; padding: 10px; - border-bottom: 2px solid #444; + border-bottom: 2px solid var(--border-color); } .toolbar-spacer { @@ -29,7 +29,7 @@ .loading-indicator { height: fit-content; padding: 4px 8px; - color: #141414; + color: var(--text-color-inverted); text-align: center; opacity: 0; transition: opacity 1s ease-in-out; @@ -48,6 +48,7 @@ animation: fadeOut 1s ease-in-out 2s forwards; /* Start fading out after 2 seconds */ } +.theme-toggle svg, .side-menu-toggle svg { display: block; height: 2rem; @@ -56,10 +57,10 @@ .theme-toggle g, .side-menu-toggle g { - stroke: #aaa; + stroke: var(--icon-color); } .theme-toggle:hover g, .side-menu-toggle:hover g { - stroke: #fff; + stroke: var(--icon-color-active); }