From 3e6835862a8f9c040c92883583def432350ebfea Mon Sep 17 00:00:00 2001 From: EspenTinius Date: Tue, 26 May 2026 05:37:42 +0200 Subject: [PATCH] text vis og setting upgrade --- .../mappe/view/settings/SettingsActions.java | 24 +- .../view/settings/SettingsController.java | 33 +- .../g40/mappe/view/settings/SettingsView.java | 216 ++++--- src/main/resources/saves/Newbie.json | 11 +- src/main/resources/styles.css | 540 ++++++++++++------ 5 files changed, 522 insertions(+), 302 deletions(-) diff --git a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/settings/SettingsActions.java b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/settings/SettingsActions.java index b319a02..767bf2e 100644 --- a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/settings/SettingsActions.java +++ b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/settings/SettingsActions.java @@ -1,8 +1,30 @@ package edu.ntnu.idi.idatt2003.g40.mappe.view.settings; +/** + * User-triggered actions available on the main-menu settings view. + * + *

{@link #AUDIO}, {@link #VIDEO} and {@link #HOTKEYS} are kept for + * backwards compatibility with the older sidebar/tab layout - they no + * longer correspond to user-pressable buttons in the redesigned view, + * but the {@code SettingsController} still wires no-op handlers to + * them so existing call sites keep compiling.

+ * */ public enum SettingsActions { + /** Legacy audio-tab action. No longer triggered by the redesigned view. */ AUDIO, + + /** Legacy video-tab action. No longer triggered by the redesigned view. */ VIDEO, + + /** Legacy hot-keys-tab action. No longer triggered by the redesigned view. */ HOTKEYS, - BACK; + + /** Returns to the main menu. */ + BACK, + + /** Selects the dark theme. */ + DARK_MODE, + + /** Selects the light theme. */ + LIGHT_MODE; } diff --git a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/settings/SettingsController.java b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/settings/SettingsController.java index 12fde41..6c23a66 100644 --- a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/settings/SettingsController.java +++ b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/settings/SettingsController.java @@ -1,17 +1,18 @@ package edu.ntnu.idi.idatt2003.g40.mappe.view.settings; -import edu.ntnu.idi.idatt2003.g40.mappe.service.event.EventData; import edu.ntnu.idi.idatt2003.g40.mappe.service.event.EventManager; -import edu.ntnu.idi.idatt2003.g40.mappe.service.event.EventType; +import edu.ntnu.idi.idatt2003.g40.mappe.utils.ThemeManager; import edu.ntnu.idi.idatt2003.g40.mappe.view.ViewController; -import edu.ntnu.idi.idatt2003.g40.mappe.view.ViewData; import edu.ntnu.idi.idatt2003.g40.mappe.view.ViewEnum; /** * Controller for {@link SettingsView}. * - *

Wires up the category buttons to switch the right-hand content, - * and the Back button to return to the main menu.

+ *

Wires up the Back button to return to the main menu and the + * theme toggle buttons to the global {@link ThemeManager}. The + * legacy {@code AUDIO}, {@code VIDEO} and {@code HOTKEYS} actions + * are no longer pressable in the redesigned view, so no handlers + * are attached for them.

*/ public class SettingsController extends ViewController { @@ -24,14 +25,26 @@ public class SettingsController extends ViewController { public SettingsController(final SettingsView view, final EventManager eventManager) { super(view, eventManager); + // Sync the highlighted theme button with the current theme on + // construction (matches InGameSettingsController behaviour). + getViewElement().setActiveTheme( + ThemeManager.getInstance().getCurrentTheme()); } /** {@inheritDoc} */ @Override protected void initInteractions() { - getViewElement().setOnAction(SettingsActions.AUDIO, () -> getViewElement().showAudioSection()); - getViewElement().setOnAction(SettingsActions.VIDEO, () -> getViewElement().showVideoSection()); - getViewElement().setOnAction(SettingsActions.HOTKEYS, () -> getViewElement().showHotKeysSection()); - getViewElement().setOnAction(SettingsActions.BACK, () -> changeScene(ViewEnum.MAIN_MENU)); + getViewElement().setOnAction(SettingsActions.BACK, + () -> changeScene(ViewEnum.MAIN_MENU)); + + getViewElement().setOnAction(SettingsActions.DARK_MODE, () -> { + ThemeManager.getInstance().setTheme(ThemeManager.Theme.DARK); + getViewElement().setActiveTheme(ThemeManager.Theme.DARK); + }); + + getViewElement().setOnAction(SettingsActions.LIGHT_MODE, () -> { + ThemeManager.getInstance().setTheme(ThemeManager.Theme.LIGHT); + getViewElement().setActiveTheme(ThemeManager.Theme.LIGHT); + }); } -} \ No newline at end of file +} diff --git a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/settings/SettingsView.java b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/settings/SettingsView.java index d55c9ed..a46b874 100644 --- a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/settings/SettingsView.java +++ b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/settings/SettingsView.java @@ -1,14 +1,14 @@ package edu.ntnu.idi.idatt2003.g40.mappe.view.settings; +import edu.ntnu.idi.idatt2003.g40.mappe.utils.ThemeManager; import edu.ntnu.idi.idatt2003.g40.mappe.view.ViewElement; import edu.ntnu.idi.idatt2003.g40.mappe.view.ViewEnum; import javafx.geometry.Insets; import javafx.geometry.Pos; import javafx.scene.control.Button; import javafx.scene.control.Label; -import javafx.scene.control.Slider; -import javafx.scene.layout.BorderPane; import javafx.scene.layout.HBox; +import javafx.scene.layout.Priority; import javafx.scene.layout.Region; import javafx.scene.layout.StackPane; import javafx.scene.layout.VBox; @@ -16,159 +16,153 @@ /** * View shown when the player clicks "Settings" on the main menu. * - *

Layout: left sidebar with category buttons (audio, video, hot keys) - * and a Back button at the bottom. Right pane shows the content for the - * currently selected category.

+ *

+ * Mirrors + * {@link edu.ntnu.idi.idatt2003.g40.mappe.view.ingame.settings.InGameSettingsView} + * so the player gets the same panel layout in both places: a compact + * card with a header (title + Back button) and a single Theme section + * containing a Dark / Light toggle. + *

+ * + *

+ * The view applies the {@link ThemeManager} directly when the + * player clicks the Dark/Light buttons so the toggle works + * identically to the in-game one. + *

*/ public class SettingsView extends ViewElement { - /** Category buttons on the left side. */ - private Button audioButton; - private Button videoButton; - private Button hotKeysButton; - - /** Bottom-left back button. */ + /** Back-to-menu button shown in the panel's top-right corner. */ private Button backButton; - /** The currently displayed content pane on the right side. */ - private StackPane contentArea; + /** Selects the dark theme. */ + private Button darkModeButton; - /** Master volume slider for the audio section. */ - private Slider masterVolumeSlider; + /** Selects the light theme. */ + private Button lightModeButton; - /** Main border layout containing the sidebar and content area. */ - private BorderPane mainPanel; + /** Modal-style card hosting the settings sections. */ + private VBox panel; /** * Constructor. * - *

Constructs with name "SettingsView"

+ *

+ * Constructs with name "SettingsView" + *

*/ public SettingsView() { super(new StackPane(), ViewEnum.SETTINGS, SettingsActions.class); } - public Slider getMasterVolumeSlider() { - return masterVolumeSlider; - } - /** - * Replaces the content area with the audio section (master volume). + * Getter for the dark-mode button. + * + * @return the dark-mode button. */ - public void showAudioSection() { - Label title = new Label("Master volume"); - title.getStyleClass().add("settings-title"); - - masterVolumeSlider = new Slider(0, 100, 50); - masterVolumeSlider.setMaxWidth(360); - masterVolumeSlider.getStyleClass().add("settings-slider"); - - VBox audioBox = new VBox(24, title, masterVolumeSlider); - audioBox.setAlignment(Pos.TOP_LEFT); - audioBox.setPadding(new Insets(20, 30, 30, 30)); - - contentArea.getChildren().setAll(audioBox); + public Button getDarkModeButton() { + return darkModeButton; } /** - * Replaces the content area with the video section placeholder. + * Getter for the light-mode button. + * + * @return the light-mode button. */ - public void showVideoSection() { - Label title = new Label("Video"); - title.getStyleClass().add("settings-title"); - Label placeholder = new Label("(video settings coming soon)"); - placeholder.getStyleClass().add("settings-placeholder"); - - VBox videoBox = new VBox(20, title, placeholder); - videoBox.setAlignment(Pos.TOP_LEFT); - videoBox.setPadding(new Insets(20, 30, 30, 30)); - - contentArea.getChildren().setAll(videoBox); + public Button getLightModeButton() { + return lightModeButton; } /** - * Replaces the content area with the hot keys section placeholder. + * Highlights the active theme button so the player always sees which + * theme is currently selected. Mirrors {@code InGameSettingsView}. + * + * @param theme the active {@link ThemeManager.Theme}. */ - public void showHotKeysSection() { - Label title = new Label("Hot keys"); - title.getStyleClass().add("settings-title"); - Label placeholder = new Label("(hot key bindings coming soon)"); - placeholder.getStyleClass().add("settings-placeholder"); - - VBox hotKeysBox = new VBox(20, title, placeholder); - hotKeysBox.setAlignment(Pos.TOP_LEFT); - hotKeysBox.setPadding(new Insets(20, 30, 30, 30)); - - contentArea.getChildren().setAll(hotKeysBox); + public void setActiveTheme(final ThemeManager.Theme theme) { + darkModeButton.getStyleClass().remove("active"); + lightModeButton.getStyleClass().remove("active"); + if (theme == ThemeManager.Theme.LIGHT) { + lightModeButton.getStyleClass().add("active"); + } else { + darkModeButton.getStyleClass().add("active"); + } } /** {@inheritDoc} */ @Override protected void initLayout() { - audioButton = new Button("Audio"); - videoButton = new Button("Video"); - hotKeysButton = new Button("Hot keys"); + // Header row: title + back button. + Label title = new Label("Settings"); + title.getStyleClass().add("ingame-settings-title"); + + Region headerSpacer = new Region(); + HBox.setHgrow(headerSpacer, Priority.ALWAYS); + backButton = new Button("Back"); + backButton.setFocusTraversable(false); + backButton.getStyleClass().add("ingame-settings-toggle-button"); + + HBox header = new HBox(12, title, headerSpacer, backButton); + header.setAlignment(Pos.CENTER_LEFT); + + // Theme section. + Label themeSectionLabel = new Label("Theme"); + themeSectionLabel.getStyleClass().add("ingame-settings-section-label"); + + Label themeDescription = new Label( + "Choose between dark and light appearance for the game."); + themeDescription.getStyleClass().add("ingame-settings-description"); + themeDescription.setWrapText(true); + + darkModeButton = new Button("Dark mode"); + lightModeButton = new Button("Light mode"); + darkModeButton.setFocusTraversable(false); + lightModeButton.setFocusTraversable(false); + darkModeButton.getStyleClass().add("ingame-settings-toggle-button"); + lightModeButton.getStyleClass().add("ingame-settings-toggle-button"); + + HBox themeToggleRow = new HBox(12, darkModeButton, lightModeButton); + themeToggleRow.setAlignment(Pos.CENTER_LEFT); + + VBox themeSection = new VBox(10, themeSectionLabel, + themeDescription, themeToggleRow); + themeSection.setAlignment(Pos.TOP_LEFT); + + // Assemble panel - same dimensions as InGameSettingsView for visual + // parity between the two settings entry points. + panel = new VBox(22, header, themeSection); + panel.setAlignment(Pos.TOP_LEFT); + panel.setPadding(new Insets(28, 32, 32, 32)); + panel.setMaxWidth(440); + panel.setMaxHeight(280); + panel.setPrefWidth(440); + panel.getStyleClass().add("ingame-settings-panel"); + + getRootPane().getStyleClass().add("main-menu-bg"); + getRootPane().getChildren().add(panel); + StackPane.setAlignment(panel, Pos.CENTER); - // Sidebar header so the panel doesn't feel anonymous. - Label sidebarHeader = new Label("Settings"); - sidebarHeader.getStyleClass().add("settings-title"); - VBox.setMargin(sidebarHeader, new Insets(0, 0, 8, 0)); - - // Spacer pushes the Back button to the bottom of the sidebar. - Region spacer = new Region(); - VBox.setVgrow(spacer, javafx.scene.layout.Priority.ALWAYS); - - VBox sidebar = new VBox(8, - sidebarHeader, - audioButton, videoButton, hotKeysButton, spacer, backButton); - sidebar.setAlignment(Pos.TOP_LEFT); - sidebar.setPadding(new Insets(28, 22, 28, 22)); - sidebar.setPrefWidth(200); - - contentArea = new StackPane(); - contentArea.setPadding(new Insets(10)); - - mainPanel = new BorderPane(); - mainPanel.setLeft(sidebar); - mainPanel.setCenter(contentArea); - mainPanel.setMaxWidth(820); - mainPanel.setMaxHeight(520); - mainPanel.setPrefWidth(820); - mainPanel.setPrefHeight(520); - - // Center the BorderPane. - HBox centerWrapper = new HBox(mainPanel); - centerWrapper.setAlignment(Pos.CENTER); - - getRootPane().getChildren().add(centerWrapper); - - // Default section shown when settings opens. - showAudioSection(); - - registerButton(SettingsActions.AUDIO, audioButton); - registerButton(SettingsActions.VIDEO, videoButton); - registerButton(SettingsActions.HOTKEYS, hotKeysButton); registerButton(SettingsActions.BACK, backButton); + registerButton(SettingsActions.DARK_MODE, darkModeButton); + registerButton(SettingsActions.LIGHT_MODE, lightModeButton); } /** {@inheritDoc} */ @Override protected void initStyling() { - getRootPane().getStyleClass().add("main-menu-bg"); - mainPanel.getStyleClass().add("settings-panel"); - audioButton.getStyleClass().add("settings-tab-button"); - videoButton.getStyleClass().add("settings-tab-button"); - hotKeysButton.getStyleClass().add("settings-tab-button"); - backButton.getStyleClass().add("settings-tab-button"); + // Styling is applied via the .ingame-settings-* and .main-menu-bg + // style classes assigned in initLayout(). Nothing else to do here. } /** {@inheritDoc} */ @Override public void onUpdate() { - // Reset til audio-section hver gang viewet vises. - if (contentArea != null) { - showAudioSection(); + // Re-sync the highlighted theme button every time the view shows, + // since the player may have toggled the theme from the in-game + // overlay since they last visited. + if (darkModeButton != null && lightModeButton != null) { + setActiveTheme(ThemeManager.getInstance().getCurrentTheme()); } } } diff --git a/src/main/resources/saves/Newbie.json b/src/main/resources/saves/Newbie.json index 823acaf..ce4262a 100644 --- a/src/main/resources/saves/Newbie.json +++ b/src/main/resources/saves/Newbie.json @@ -5,16 +5,7 @@ "stockDataPath": null, "week": 5, "ownedShares": [ - { "symbol": "NVDA", "quantity": 5.0, "purchasePrice": 191.27 }, - { "symbol": "NVDA", "quantity": 5.0, "purchasePrice": 191.27 }, - { "symbol": "NVDA", "quantity": 5.0, "purchasePrice": 191.27 }, - { "symbol": "NVDA", "quantity": 5.0, "purchasePrice": 191.27 }, - { "symbol": "NVDA", "quantity": 5.0, "purchasePrice": 191.27 }, - { "symbol": "NVDA", "quantity": 5.0, "purchasePrice": 191.27 }, - { "symbol": "NVDA", "quantity": 5.0, "purchasePrice": 191.27 }, - { "symbol": "NVDA", "quantity": 5.0, "purchasePrice": 191.27 }, - { "symbol": "NVDA", "quantity": 5.0, "purchasePrice": 191.27 }, - { "symbol": "NVDA", "quantity": 5.0, "purchasePrice": 191.27 } + { "symbol": "NVDA", "quantity": 50.0, "purchasePrice": 191.27 } ], "transactions": [ { "type": "PURCHASE", "symbol": "NVDA", "quantity": 5.0, "price": 191.27, "week": 1 }, diff --git a/src/main/resources/styles.css b/src/main/resources/styles.css index 57c3410..8eadfc4 100644 --- a/src/main/resources/styles.css +++ b/src/main/resources/styles.css @@ -67,8 +67,8 @@ .menu-footer { -fx-font-family: "Aptos"; - -fx-font-size: 11px; - -fx-fill: #5d6889; + -fx-font-size: 13px; + -fx-fill: #a8b4d4; } .menu-button { @@ -126,15 +126,15 @@ .play-game-subtitle { -fx-font-family: "Aptos"; - -fx-font-size: 12px; - -fx-fill: #8b95b7; + -fx-font-size: 14px; + -fx-fill: #cdd5ed; } .play-game-empty { -fx-font-family: "Aptos"; -fx-font-style: italic; - -fx-font-size: 14px; - -fx-text-fill: #8b95b7; + -fx-font-size: 16px; + -fx-text-fill: #cdd5ed; -fx-padding: 40 0 40 0; } @@ -203,7 +203,7 @@ -fx-font-family: "Aptos"; -fx-font-weight: bold; -fx-font-size: 17px; - -fx-text-fill: #8b95b7; + -fx-text-fill: #cdd5ed; -fx-cursor: hand; -fx-padding: 8 14; -fx-background-radius: 8; @@ -228,8 +228,8 @@ .settings-placeholder { -fx-font-family: "Aptos"; -fx-font-style: italic; - -fx-font-size: 13px; - -fx-text-fill: #8b95b7; + -fx-font-size: 15px; + -fx-text-fill: #cdd5ed; } .settings-slider .thumb { @@ -267,8 +267,8 @@ .create-game-label { -fx-font-family: "Aptos"; -fx-font-weight: bold; - -fx-font-size: 13px; - -fx-text-fill: #8b95b7; + -fx-font-size: 15px; + -fx-text-fill: #cdd5ed; } .create-game-input { @@ -277,10 +277,10 @@ -fx-border-radius: 8; -fx-background-radius: 8; -fx-padding: 8 12; - -fx-font-size: 14px; + -fx-font-size: 16px; -fx-pref-width: 360; -fx-text-fill: #f0f4ff; - -fx-prompt-text-fill: #5d6889; + -fx-prompt-text-fill: #a8b4d4; } .create-game-input:focused { @@ -315,7 +315,7 @@ .create-game-input.choice-box .menu-item .label { -fx-text-fill: #f0f4ff; - -fx-font-size: 13px; + -fx-font-size: 15px; } .create-game-input.choice-box .menu-item:focused { @@ -325,8 +325,8 @@ .create-game-selection-label { -fx-font-family: "Aptos"; -fx-font-style: italic; - -fx-font-size: 12px; - -fx-text-fill: #8b95b7; + -fx-font-size: 14px; + -fx-text-fill: #cdd5ed; } .create-game-stock-button { @@ -338,7 +338,7 @@ -fx-padding: 10 16; -fx-font-family: "Aptos"; -fx-font-weight: bold; - -fx-font-size: 13px; + -fx-font-size: 15px; -fx-text-fill: #f0f4ff; -fx-cursor: hand; } @@ -363,7 +363,7 @@ -fx-padding: 10 28; -fx-font-family: "Aptos"; -fx-font-weight: bold; - -fx-font-size: 13px; + -fx-font-size: 15px; -fx-text-fill: #f0f4ff; -fx-cursor: hand; } @@ -378,7 +378,7 @@ -fx-padding: 10 28; -fx-font-family: "Aptos"; -fx-font-weight: bold; - -fx-font-size: 13px; + -fx-font-size: 15px; -fx-border-radius: 8; -fx-border-width: 1; } @@ -434,7 +434,7 @@ .top-bar-menu-button { -fx-font-family: "Aptos"; - -fx-font-size: 14px; + -fx-font-size: 16px; -fx-font-weight: bold; -fx-background-color: rgba(20, 28, 46, 0.85); -fx-background-radius: 8; @@ -467,8 +467,8 @@ .balance-title { -fx-font-family: "Aptos"; -fx-font-weight: bold; - -fx-font-size: 11px; - -fx-text-fill: #8b95b7; + -fx-font-size: 15px; + -fx-text-fill: #e0e6f5; } .balance-value { @@ -479,14 +479,21 @@ -fx-min-width: 200; } +.week-label { + -fx-font-family: "Aptos"; + -fx-font-weight: bold; + -fx-font-size: 13px; + -fx-text-fill: #cdd5ed; +} + .chart-plot-background { -fx-background-color: transparent; } .axis { -fx-tick-label-font-weight: normal; - -fx-tick-label-font-size: 10; - -fx-tick-label-fill: #8b95b7; + -fx-tick-label-font-size: 12; + -fx-tick-label-fill: #cdd5ed; } .axis:bottom { @@ -510,7 +517,7 @@ -fx-pref-width: 100; -fx-max-width: 100; -fx-font-weight: bold; - -fx-font-size: 13px; + -fx-font-size: 15px; -fx-text-fill: #07142a; -fx-padding: 8 16; -fx-cursor: hand; @@ -551,7 +558,7 @@ -fx-padding: 10 14; -fx-font-weight: bold; -fx-text-fill: #f0f4ff; - -fx-font-size: 13px; + -fx-font-size: 15px; } .dashboard-stock-button:hover { @@ -580,7 +587,7 @@ -fx-background-radius: 8; -fx-text-fill: #07142a; -fx-font-weight: bold; - -fx-font-size: 14px; + -fx-font-size: 16px; -fx-min-height: 30; -fx-pref-height: 45; @@ -597,7 +604,7 @@ -fx-background-radius: 8; -fx-text-fill: #2a0612; -fx-font-weight: bold; - -fx-font-size: 14px; + -fx-font-size: 16px; -fx-min-height: 30; -fx-pref-height: 45; @@ -626,7 +633,7 @@ -fx-border-width: 1; -fx-text-fill: #f0f4ff; -fx-font-weight: bold; - -fx-font-size: 14px; + -fx-font-size: 16px; -fx-min-width: 60; -fx-pref-width: 75; @@ -689,7 +696,7 @@ -fx-padding: 0; } -.dashboard-sidebar-scrollPane > .viewport { +.dashboard-sidebar-scrollPane>.viewport { -fx-background-color: transparent; } @@ -697,11 +704,23 @@ -fx-padding: 30; -fx-spacing: 20; -fx-alignment: TOP_LEFT; + -fx-background-color: transparent; } .dashboard-chart { -fx-min-height: 200; -fx-pref-height: 650; + -fx-background-color: transparent; +} + +/* JavaFX charts use these inner classes for the plot area and grid. */ +.chart { + -fx-background-color: transparent; + -fx-padding: 5; +} + +.chart-content { + -fx-background-color: transparent; } .dashboard-header { @@ -712,6 +731,15 @@ -fx-spacing: 5; } +/* All labels inside the stock-identity column (stock name, full name, + "Owned: N") inherit a visible text color. Without this, JavaFX falls + back to default black, which disappears against the dark-mode panel + background. */ +.dashboard-stockIdentity .label { + -fx-text-fill: #cdd5ed; + -fx-font-size: 14px; +} + .dashboard-priceStats { -fx-spacing: 5; } @@ -720,6 +748,14 @@ -fx-spacing: 10; } +/* All labels inside the low/high price row. Same reasoning as above: + the "Low: ... High: ..." text needs an explicit color or it goes + black on dark. */ +.dashboard-lowhigh .label { + -fx-text-fill: #cdd5ed; + -fx-font-size: 13px; +} + .dashboard-grid { -fx-alignment: CENTER; } @@ -754,9 +790,9 @@ -fx-border-radius: 10; -fx-background-radius: 10; -fx-padding: 8 16; - -fx-font-size: 14; + -fx-font-size: 16px; -fx-text-fill: #f0f4ff; - -fx-prompt-text-fill: #5d6889; + -fx-prompt-text-fill: #a8b4d4; } .market-search:focused { @@ -771,8 +807,8 @@ -fx-background-radius: 10; -fx-padding: 7 14; -fx-font-weight: bold; - -fx-font-size: 12px; - -fx-text-fill: #8b95b7; + -fx-font-size: 14px; + -fx-text-fill: #cdd5ed; -fx-cursor: hand; } @@ -826,8 +862,8 @@ } .market-stock-name { - -fx-font-size: 11px; - -fx-text-fill: #8b95b7; + -fx-font-size: 13px; + -fx-text-fill: #cdd5ed; } .market-price { @@ -854,7 +890,7 @@ .market-change { -fx-font-family: "Consolas, Menlo, monospace"; -fx-font-weight: bold; - -fx-font-size: 12px; + -fx-font-size: 14px; -fx-padding: 3 12; -fx-background-radius: 8; } @@ -870,13 +906,13 @@ } .market-owned-badge { - -fx-font-size: 11px; + -fx-font-size: 13px; -fx-text-fill: #4ad9ff; } .market-empty { -fx-font-style: italic; - -fx-text-fill: #8b95b7; + -fx-text-fill: #cdd5ed; -fx-padding: 40; } @@ -900,7 +936,7 @@ .stats-panel-title { -fx-font-family: "Aptos"; -fx-font-weight: bold; - -fx-font-size: 12px; + -fx-font-size: 14px; -fx-text-fill: #4ad9ff; -fx-border-color: transparent transparent rgba(0, 212, 255, 0.15) transparent; -fx-border-width: 0 0 1 0; @@ -919,8 +955,8 @@ .stats-kpi-label { -fx-font-family: "Aptos"; -fx-font-weight: bold; - -fx-font-size: 11px; - -fx-text-fill: #8b95b7; + -fx-font-size: 13px; + -fx-text-fill: #cdd5ed; } .stats-kpi-value { @@ -941,8 +977,8 @@ .stats-kpi-sub { -fx-font-family: "Consolas, Menlo, monospace"; -fx-font-weight: bold; - -fx-font-size: 11px; - -fx-text-fill: #8b95b7; + -fx-font-size: 13px; + -fx-text-fill: #cdd5ed; } .stats-kpi-sub.up { @@ -954,21 +990,21 @@ } .stats-chart-axis { - -fx-font-size: 9px; - -fx-fill: #8b95b7; + -fx-font-size: 12px; + -fx-fill: #cdd5ed; } .stats-legend-label { -fx-font-family: "Aptos"; -fx-font-weight: bold; - -fx-font-size: 12px; + -fx-font-size: 14px; -fx-text-fill: #f0f4ff; } .stats-legend-pct { -fx-font-family: "Consolas, Menlo, monospace"; - -fx-font-size: 12px; - -fx-text-fill: #8b95b7; + -fx-font-size: 14px; + -fx-text-fill: #cdd5ed; } .stats-legend-scroll, @@ -1000,21 +1036,21 @@ } .stats-holding-shares { - -fx-font-size: 11px; - -fx-text-fill: #8b95b7; + -fx-font-size: 13px; + -fx-text-fill: #cdd5ed; } .stats-holding-value { -fx-font-family: "Consolas, Menlo, monospace"; -fx-font-weight: bold; - -fx-font-size: 13px; + -fx-font-size: 15px; -fx-text-fill: #f0f4ff; } .stats-holding-pnl { -fx-font-family: "Consolas, Menlo, monospace"; -fx-font-weight: bold; - -fx-font-size: 11px; + -fx-font-size: 13px; -fx-padding: 3 10; -fx-background-radius: 6; } @@ -1031,7 +1067,7 @@ .stats-empty { -fx-font-style: italic; - -fx-text-fill: #8b95b7; + -fx-text-fill: #cdd5ed; -fx-padding: 20; } @@ -1062,9 +1098,9 @@ } .transactions-searchLabel { - -fx-font-size: 13px; + -fx-font-size: 15px; -fx-font-weight: bold; - -fx-text-fill: #8b95b7; + -fx-text-fill: #cdd5ed; } .transactions-searchField { @@ -1073,7 +1109,7 @@ -fx-border-radius: 8; -fx-background-radius: 8; -fx-text-fill: #f0f4ff; - -fx-prompt-text-fill: #5d6889; + -fx-prompt-text-fill: #a8b4d4; -fx-padding: 6 10; } @@ -1128,7 +1164,7 @@ .transactions-cardText { -fx-font-family: "Consolas, Menlo, monospace"; - -fx-font-size: 13px; + -fx-font-size: 15px; -fx-text-fill: #f0f4ff; } @@ -1174,7 +1210,7 @@ .minigames-stockLabel { -fx-font-size: 18px; -fx-font-weight: bold; - -fx-text-fill: #8b95b7; + -fx-text-fill: #cdd5ed; } .minigames-stockValue { @@ -1227,7 +1263,8 @@ -fx-cursor: hand; } -.minigames-cardBtn:hover, .minigames-helpBtn:hover { +.minigames-cardBtn:hover, +.minigames-helpBtn:hover { -fx-background-color: rgba(0, 212, 255, 0.12); -fx-border-color: rgba(0, 212, 255, 0.6); -fx-effect: dropshadow(gaussian, rgba(0, 212, 255, 0.3), 16, 0.3, 0, 0); @@ -1291,7 +1328,7 @@ } .minigames-help-description { - -fx-font-size: 14px; + -fx-font-size: 16px; -fx-fill: #f0f4ff; } @@ -1339,7 +1376,7 @@ .gameEngine-report-effect { -fx-font-size: 16px; - -fx-text-fill: #8b95b7; + -fx-text-fill: #cdd5ed; } .gameEngine-report-closeButton { @@ -1348,7 +1385,7 @@ -fx-background-color: rgba(0, 212, 255, 0.92); -fx-text-fill: #07142a; -fx-font-weight: bold; - -fx-font-size: 14px; + -fx-font-size: 16px; -fx-background-radius: 8; -fx-cursor: hand; } @@ -1437,14 +1474,14 @@ .ingame-settings-section-label { -fx-font-family: "Aptos"; -fx-font-weight: bold; - -fx-font-size: 13px; + -fx-font-size: 15px; -fx-text-fill: #4ad9ff; } .ingame-settings-description { -fx-font-family: "Aptos"; - -fx-font-size: 12px; - -fx-text-fill: #8b95b7; + -fx-font-size: 14px; + -fx-text-fill: #cdd5ed; } .ingame-settings-toggle-button { @@ -1456,7 +1493,7 @@ -fx-padding: 10 22; -fx-font-family: "Aptos"; -fx-font-weight: bold; - -fx-font-size: 13px; + -fx-font-size: 15px; -fx-text-fill: #f0f4ff; -fx-cursor: hand; } @@ -1479,7 +1516,7 @@ -fx-background-color: rgba(0, 212, 255, 0.85); -fx-text-fill: #07142a; -fx-font-weight: bold; - -fx-font-size: 14px; + -fx-font-size: 16px; -fx-background-radius: 18px; -fx-border-radius: 18px; -fx-cursor: hand; @@ -1516,29 +1553,36 @@ negative #c8334e ======================================================== */ -/* ---------- BACKGROUNDS ---------- */ -.light-mode .main-menu-bg { - -fx-background-color: - radial-gradient(center 50% 0%, radius 80%, - rgba(10, 132, 217, 0.10) 0%, - transparent 65%), - radial-gradient(center 90% 100%, radius 70%, - rgba(29, 138, 95, 0.06) 0%, - transparent 60%), - linear-gradient(to bottom right, - #f4f7fc 0%, - #e8eef7 50%, - #eef2fa 100%); -} - -.light-mode .in-game-root { +/* ---------- BACKGROUNDS ---------- + In light mode we deliberately go to a nearly-pure white background + so the app feels like a clean fintech UI in the bright theme. A + very faint blue radial highlight at the top adds depth without + tinting the canvas. + + Both selectors are needed: ViewManager replaces the scene root with + each view's root pane on view changes, and ThemeManager applies the + .light-mode class to whatever node IS the current scene root. So + for MainMenuView, .light-mode ends up on the SAME node as + .main-menu-bg, not on an ancestor. The descendant selector + ".light-mode .main-menu-bg" would only catch nested .main-menu-bg + nodes (none exist), so we add the compound selector to catch the + common case. */ +.light-mode .main-menu-bg, +.main-menu-bg.light-mode { -fx-background-color: radial-gradient(center 50% 0%, radius 60%, rgba(10, 132, 217, 0.08) 0%, transparent 70%), - linear-gradient(to bottom, - #f4f7fc 0%, - #e8eef7 100%); + #ffffff; +} + +.light-mode .in-game-root, +.in-game-root.light-mode { + -fx-background-color: + radial-gradient(center 50% 0%, radius 50%, + rgba(10, 132, 217, 0.06) 0%, + transparent 75%), + #ffffff; } /* ---------- MAIN MENU ---------- */ @@ -1552,12 +1596,12 @@ } .light-mode .menu-footer { - -fx-fill: #8a96b3; + -fx-fill: #3f4d6e; } .light-mode .menu-button { -fx-background-color: - rgba(255, 255, 255, 0.95), + rgba(232, 238, 248, 0.92), linear-gradient(to bottom, rgba(10, 132, 217, 0.02), rgba(255, 255, 255, 0)); @@ -1581,17 +1625,25 @@ } /* ---------- PLAY GAME ---------- */ -.light-mode .play-game-title { -fx-fill: #0f1b34; } -.light-mode .play-game-subtitle { -fx-fill: #5b6b8a; } -.light-mode .play-game-empty { -fx-text-fill: #5b6b8a; } +.light-mode .play-game-title { + -fx-fill: #0f1b34; +} + +.light-mode .play-game-subtitle { + -fx-fill: #2a3654; +} + +.light-mode .play-game-empty { + -fx-text-fill: #2a3654; +} .light-mode .save-list { - -fx-background-color: rgba(255, 255, 255, 0.95); + -fx-background-color: rgba(232, 238, 248, 0.92); -fx-border-color: rgba(10, 132, 217, 0.35); } .light-mode .save-row { - -fx-background-color: #fbfcfe; + -fx-background-color: #eef3fa; -fx-border-color: rgba(10, 132, 217, 0.12); } @@ -1601,18 +1653,26 @@ -fx-effect: dropshadow(gaussian, rgba(10, 132, 217, 0.18), 10, 0.2, 0, 0); } -.light-mode .save-name { -fx-fill: #0f1b34; } -.light-mode .save-balance-positive { -fx-fill: #1d8a5f; } -.light-mode .save-balance-negative { -fx-fill: #c8334e; } +.light-mode .save-name { + -fx-fill: #0f1b34; +} + +.light-mode .save-balance-positive { + -fx-fill: #1d8a5f; +} + +.light-mode .save-balance-negative { + -fx-fill: #c8334e; +} /* ---------- SETTINGS (main menu version) ---------- */ .light-mode .settings-panel { - -fx-background-color: rgba(255, 255, 255, 0.97); + -fx-background-color: rgba(232, 238, 248, 0.95); -fx-border-color: rgba(10, 132, 217, 0.4); } .light-mode .settings-tab-button { - -fx-text-fill: #5b6b8a; + -fx-text-fill: #2a3654; } .light-mode .settings-tab-button:hover { @@ -1621,8 +1681,13 @@ -fx-border-color: rgba(10, 132, 217, 0.45); } -.light-mode .settings-title { -fx-text-fill: #0f1b34; } -.light-mode .settings-placeholder { -fx-text-fill: #5b6b8a; } +.light-mode .settings-title { + -fx-text-fill: #0f1b34; +} + +.light-mode .settings-placeholder { + -fx-text-fill: #2a3654; +} .light-mode .settings-slider .thumb { -fx-background-color: #0a84d9; @@ -1635,18 +1700,23 @@ /* ---------- CREATE GAME ---------- */ .light-mode .create-game-panel { - -fx-background-color: rgba(255, 255, 255, 0.97); + -fx-background-color: rgba(232, 238, 248, 0.95); -fx-border-color: rgba(10, 132, 217, 0.4); } -.light-mode .create-game-title { -fx-fill: #0f1b34; } -.light-mode .create-game-label { -fx-text-fill: #5b6b8a; } +.light-mode .create-game-title { + -fx-fill: #0f1b34; +} + +.light-mode .create-game-label { + -fx-text-fill: #2a3654; +} .light-mode .create-game-input { - -fx-background-color: #fbfcfe; + -fx-background-color: #eef3fa; -fx-border-color: rgba(10, 132, 217, 0.35); -fx-text-fill: #0f1b34; - -fx-prompt-text-fill: #8a96b3; + -fx-prompt-text-fill: #5b6b8a; } .light-mode .create-game-input:focused { @@ -1654,8 +1724,13 @@ -fx-effect: dropshadow(gaussian, rgba(10, 132, 217, 0.28), 8, 0.3, 0, 0); } -.light-mode .create-game-input.choice-box .label { -fx-text-fill: #0f1b34; } -.light-mode .create-game-input.choice-box .arrow { -fx-background-color: #0a84d9; } +.light-mode .create-game-input.choice-box .label { + -fx-text-fill: #0f1b34; +} + +.light-mode .create-game-input.choice-box .arrow { + -fx-background-color: #0a84d9; +} .light-mode .create-game-input.choice-box .context-menu { -fx-background-color: #ffffff; @@ -1670,10 +1745,12 @@ -fx-background-color: rgba(10, 132, 217, 0.18); } -.light-mode .create-game-selection-label { -fx-text-fill: #5b6b8a; } +.light-mode .create-game-selection-label { + -fx-text-fill: #2a3654; +} .light-mode .create-game-stock-button { - -fx-background-color: #fbfcfe; + -fx-background-color: #eef3fa; -fx-border-color: rgba(10, 132, 217, 0.35); -fx-text-fill: #0f1b34; } @@ -1719,12 +1796,12 @@ /* ---------- IN-GAME : TOP BAR ---------- */ .light-mode .top-bar { - -fx-background-color: rgba(255, 255, 255, 0.92); + -fx-background-color: rgba(232, 238, 248, 0.90); -fx-border-color: transparent transparent rgba(10, 132, 217, 0.35) transparent; } .light-mode .top-bar-menu-button { - -fx-background-color: #fbfcfe; + -fx-background-color: #eef3fa; -fx-border-color: rgba(10, 132, 217, 0.3); -fx-text-fill: #0f1b34; } @@ -1740,11 +1817,20 @@ -fx-border-color: rgba(10, 132, 217, 0.35); } -.light-mode .balance-title { -fx-text-fill: #5b6b8a; } -.light-mode .balance-value { -fx-text-fill: #0f1b34; } +.light-mode .balance-title { + -fx-text-fill: #0f1b34; +} + +.light-mode .balance-value { + -fx-text-fill: #0f1b34; +} + +.light-mode .week-label { + -fx-text-fill: #2a3654; +} .light-mode .axis { - -fx-tick-label-fill: #5b6b8a; + -fx-tick-label-fill: #2a3654; } .light-mode .axis:bottom { @@ -1771,8 +1857,19 @@ -fx-border-color: transparent rgba(10, 132, 217, 0.25) transparent transparent; } +/* In light mode the header labels (stock name, "Owned: N", + "Low / High") need an explicitly dark text color to stay readable + on the white dashboard background. */ +.light-mode .dashboard-stockIdentity .label { + -fx-text-fill: #0f1b34; +} + +.light-mode .dashboard-lowhigh .label { + -fx-text-fill: #2a3654; +} + .light-mode .dashboard-stock-button { - -fx-background-color: #fbfcfe; + -fx-background-color: #eef3fa; -fx-border-color: rgba(10, 132, 217, 0.18); -fx-text-fill: #0f1b34; } @@ -1783,7 +1880,7 @@ } .light-mode .dashboard-selected-stock-pill { - -fx-background-color: rgba(255, 255, 255, 0.95); + -fx-background-color: rgba(232, 238, 248, 0.92); -fx-border-color: rgba(10, 132, 217, 0.45); -fx-text-fill: #0f1b34; } @@ -1807,7 +1904,7 @@ } .light-mode .dashboard-qtyBtn { - -fx-background-color: #fbfcfe; + -fx-background-color: #eef3fa; -fx-border-color: rgba(10, 132, 217, 0.35); -fx-text-fill: #0f1b34; } @@ -1818,7 +1915,7 @@ } .light-mode .dashboard-qtyTextField { - -fx-background-color: #fbfcfe; + -fx-background-color: #eef3fa; -fx-border-color: rgba(10, 132, 217, 0.35); -fx-text-fill: #0f1b34; } @@ -1828,12 +1925,17 @@ } .light-mode .dashboard-combo-box { - -fx-background-color: #fbfcfe; + -fx-background-color: #eef3fa; -fx-border-color: rgba(10, 132, 217, 0.35); } -.light-mode .dashboard-combo-box .list-cell { -fx-text-fill: #0f1b34; } -.light-mode .dashboard-combo-box .arrow { -fx-background-color: #0a84d9; } +.light-mode .dashboard-combo-box .list-cell { + -fx-text-fill: #0f1b34; +} + +.light-mode .dashboard-combo-box .arrow { + -fx-background-color: #0a84d9; +} /* ---------- IN-GAME : MARKET ---------- */ .light-mode .market-container { @@ -1844,7 +1946,7 @@ -fx-background-color: #ffffff; -fx-border-color: rgba(10, 132, 217, 0.3); -fx-text-fill: #0f1b34; - -fx-prompt-text-fill: #8a96b3; + -fx-prompt-text-fill: #5b6b8a; } .light-mode .market-search:focused { @@ -1853,9 +1955,9 @@ } .light-mode .market-filter-btn { - -fx-background-color: #fbfcfe; + -fx-background-color: #eef3fa; -fx-border-color: rgba(10, 132, 217, 0.25); - -fx-text-fill: #5b6b8a; + -fx-text-fill: #2a3654; } .light-mode .market-filter-btn:hover { @@ -1881,12 +1983,25 @@ -fx-effect: dropshadow(gaussian, rgba(10, 132, 217, 0.25), 12, 0.25, 0, 0); } -.light-mode .market-ticker { -fx-text-fill: #0f1b34; } -.light-mode .market-stock-name { -fx-text-fill: #5b6b8a; } -.light-mode .market-price { -fx-text-fill: #0f1b34; } +.light-mode .market-ticker { + -fx-text-fill: #0f1b34; +} + +.light-mode .market-stock-name { + -fx-text-fill: #2a3654; +} + +.light-mode .market-price { + -fx-text-fill: #0f1b34; +} -.light-mode .market-mini-chart.up { -fx-stroke: #1d8a5f; } -.light-mode .market-mini-chart.down { -fx-stroke: #c8334e; } +.light-mode .market-mini-chart.up { + -fx-stroke: #1d8a5f; +} + +.light-mode .market-mini-chart.down { + -fx-stroke: #c8334e; +} .light-mode .market-change.up { -fx-background-color: rgba(29, 138, 95, 0.15); @@ -1898,8 +2013,13 @@ -fx-text-fill: #c8334e; } -.light-mode .market-owned-badge { -fx-text-fill: #0a84d9; } -.light-mode .market-empty { -fx-text-fill: #5b6b8a; } +.light-mode .market-owned-badge { + -fx-text-fill: #0a84d9; +} + +.light-mode .market-empty { + -fx-text-fill: #2a3654; +} /* ---------- IN-GAME : STATS ---------- */ .light-mode .stats-container { @@ -1921,26 +2041,62 @@ -fx-border-color: rgba(10, 132, 217, 0.22); } -.light-mode .stats-kpi-label { -fx-text-fill: #5b6b8a; } -.light-mode .stats-kpi-value { -fx-text-fill: #0f1b34; } -.light-mode .stats-kpi-value.up { -fx-text-fill: #1d8a5f; } -.light-mode .stats-kpi-value.down { -fx-text-fill: #c8334e; } -.light-mode .stats-kpi-sub { -fx-text-fill: #5b6b8a; } -.light-mode .stats-kpi-sub.up { -fx-text-fill: #1d8a5f; } -.light-mode .stats-kpi-sub.down { -fx-text-fill: #c8334e; } +.light-mode .stats-kpi-label { + -fx-text-fill: #2a3654; +} -.light-mode .stats-chart-axis { -fx-fill: #5b6b8a; } -.light-mode .stats-legend-label { -fx-text-fill: #0f1b34; } -.light-mode .stats-legend-pct { -fx-text-fill: #5b6b8a; } +.light-mode .stats-kpi-value { + -fx-text-fill: #0f1b34; +} + +.light-mode .stats-kpi-value.up { + -fx-text-fill: #1d8a5f; +} + +.light-mode .stats-kpi-value.down { + -fx-text-fill: #c8334e; +} + +.light-mode .stats-kpi-sub { + -fx-text-fill: #2a3654; +} + +.light-mode .stats-kpi-sub.up { + -fx-text-fill: #1d8a5f; +} + +.light-mode .stats-kpi-sub.down { + -fx-text-fill: #c8334e; +} + +.light-mode .stats-chart-axis { + -fx-fill: #2a3654; +} + +.light-mode .stats-legend-label { + -fx-text-fill: #0f1b34; +} + +.light-mode .stats-legend-pct { + -fx-text-fill: #2a3654; +} .light-mode .stats-holding { - -fx-background-color: #fbfcfe; + -fx-background-color: #eef3fa; -fx-border-color: rgba(10, 132, 217, 0.15); } -.light-mode .stats-holding-ticker { -fx-text-fill: #0f1b34; } -.light-mode .stats-holding-shares { -fx-text-fill: #5b6b8a; } -.light-mode .stats-holding-value { -fx-text-fill: #0f1b34; } +.light-mode .stats-holding-ticker { + -fx-text-fill: #0f1b34; +} + +.light-mode .stats-holding-shares { + -fx-text-fill: #2a3654; +} + +.light-mode .stats-holding-value { + -fx-text-fill: #0f1b34; +} .light-mode .stats-holding-pnl.up { -fx-background-color: rgba(29, 138, 95, 0.15); @@ -1952,52 +2108,73 @@ -fx-text-fill: #c8334e; } -.light-mode .stats-empty { -fx-text-fill: #5b6b8a; } +.light-mode .stats-empty { + -fx-text-fill: #2a3654; +} /* ---------- IN-GAME : TRANSACTIONS ---------- */ .light-mode .transactions-root { -fx-background-color: rgba(244, 247, 252, 0.65); } -.light-mode .transactions-root .label { -fx-text-fill: #0f1b34; } +.light-mode .transactions-root .label { + -fx-text-fill: #0f1b34; +} .light-mode .transactions-searchBar { -fx-background-color: #ffffff; -fx-border-color: rgba(10, 132, 217, 0.3); } -.light-mode .transactions-searchLabel { -fx-text-fill: #5b6b8a; } +.light-mode .transactions-searchLabel { + -fx-text-fill: #2a3654; +} .light-mode .transactions-searchField { - -fx-background-color: #fbfcfe; + -fx-background-color: #eef3fa; -fx-border-color: rgba(10, 132, 217, 0.3); -fx-text-fill: #0f1b34; - -fx-prompt-text-fill: #8a96b3; + -fx-prompt-text-fill: #5b6b8a; } .light-mode .transactions-weekField { - -fx-background-color: #fbfcfe; + -fx-background-color: #eef3fa; -fx-border-color: rgba(10, 132, 217, 0.3); } -.light-mode .transactions-weekField .list-cell { -fx-text-fill: #0f1b34; } -.light-mode .transactions-weekField .arrow { -fx-background-color: #0a84d9; } +.light-mode .transactions-weekField .list-cell { + -fx-text-fill: #0f1b34; +} + +.light-mode .transactions-weekField .arrow { + -fx-background-color: #0a84d9; +} .light-mode .transactions-transactionCard { -fx-background-color: #ffffff; -fx-border-color: rgba(10, 132, 217, 0.25); } -.light-mode .transactions-typeLabel { -fx-text-fill: #0f1b34; } -.light-mode .transactions-cardText { -fx-text-fill: #0f1b34; } +.light-mode .transactions-typeLabel { + -fx-text-fill: #0f1b34; +} + +.light-mode .transactions-cardText { + -fx-text-fill: #0f1b34; +} /* ---------- IN-GAME : MINIGAMES ---------- */ .light-mode .minigames-root { -fx-background-color: rgba(244, 247, 252, 0.7); } -.light-mode .minigames-titleLabel { -fx-text-fill: #0f1b34; } -.light-mode .minigames-stockLabel { -fx-text-fill: #5b6b8a; } +.light-mode .minigames-titleLabel { + -fx-text-fill: #0f1b34; +} + +.light-mode .minigames-stockLabel { + -fx-text-fill: #2a3654; +} .light-mode .minigames-stockValue { -fx-text-fill: #0a84d9; @@ -2042,24 +2219,39 @@ -fx-background-color: #1296ec; } -.light-mode .minigames-help-header { -fx-fill: #0a84d9; } -.light-mode .minigames-help-description { -fx-fill: #0f1b34; } +.light-mode .minigames-help-header { + -fx-fill: #0a84d9; +} + +.light-mode .minigames-help-description { + -fx-fill: #0f1b34; +} /* ---------- IN-GAME : MINIGAMES ENGINE / REPORT ---------- */ .light-mode .gameEngine-root { -fx-background-color: rgba(244, 247, 252, 0.85); } -.light-mode .gameEngine-topBar-Label { -fx-text-fill: #0f1b34; } +.light-mode .gameEngine-topBar-Label { + -fx-text-fill: #0f1b34; +} .light-mode .gameEngine-report-box { -fx-background-color: #ffffff; -fx-border-color: rgba(10, 132, 217, 0.4); } -.light-mode .gameEngine-report-title { -fx-text-fill: #0f1b34; } -.light-mode .gameEngine-report-rank-result { -fx-text-fill: #0a84d9; } -.light-mode .gameEngine-report-effect { -fx-text-fill: #5b6b8a; } +.light-mode .gameEngine-report-title { + -fx-text-fill: #0f1b34; +} + +.light-mode .gameEngine-report-rank-result { + -fx-text-fill: #0a84d9; +} + +.light-mode .gameEngine-report-effect { + -fx-text-fill: #2a3654; +} .light-mode .gameEngine-report-closeButton { -fx-background-color: #0a84d9; @@ -2087,17 +2279,25 @@ } .light-mode .ingame-settings-panel { - -fx-background-color: #ffffff; + -fx-background-color: #e8eef8; -fx-border-color: rgba(10, 132, 217, 0.4); -fx-effect: dropshadow(gaussian, rgba(10, 27, 52, 0.25), 24, 0.3, 0, 6); } -.light-mode .ingame-settings-title { -fx-text-fill: #0f1b34; } -.light-mode .ingame-settings-section-label { -fx-text-fill: #0a84d9; } -.light-mode .ingame-settings-description { -fx-text-fill: #5b6b8a; } +.light-mode .ingame-settings-title { + -fx-text-fill: #0f1b34; +} + +.light-mode .ingame-settings-section-label { + -fx-text-fill: #0a84d9; +} + +.light-mode .ingame-settings-description { + -fx-text-fill: #2a3654; +} .light-mode .ingame-settings-toggle-button { - -fx-background-color: #fbfcfe; + -fx-background-color: #eef3fa; -fx-border-color: rgba(10, 132, 217, 0.35); -fx-text-fill: #0f1b34; } @@ -2122,4 +2322,4 @@ .light-mode .ingame-settings-close-button:hover { -fx-background-color: #1296ec; -fx-effect: dropshadow(gaussian, rgba(10, 132, 217, 0.45), 10, 0.3, 0, 0); -} +} \ No newline at end of file