diff --git a/src/main/java/no/ntnu/idatt1005/group03/App.java b/src/main/java/no/ntnu/idatt1005/group03/App.java index 872a56f..ded5f58 100644 --- a/src/main/java/no/ntnu/idatt1005/group03/App.java +++ b/src/main/java/no/ntnu/idatt1005/group03/App.java @@ -1,6 +1,7 @@ package no.ntnu.idatt1005.group03; import javafx.application.Application; +import javafx.scene.text.Font; import javafx.stage.Stage; import no.ntnu.idatt1005.group03.DAO.DatabaseConnection; import no.ntnu.idatt1005.group03.UI.LoginScreen; @@ -29,6 +30,7 @@ public class App extends Application { public void start(Stage primaryStage) { // 1. Initialize the database so it is ready for the rest of the app DatabaseConnection.initializeDatabase(); + loadFonts(); // 2. Create and launch the LoginScreen LoginScreen loginScreen = new LoginScreen(); @@ -47,4 +49,12 @@ public void start(Stage primaryStage) { public static void main(String[] args) { launch(args); } -} \ No newline at end of file + + /** + * Loads bundled fonts so they are available to the shared stylesheet. + */ + private void loadFonts() { + Font.loadFont(getClass().getResource("/fonts/Inter-Regular.ttf").toExternalForm(), 14); + Font.loadFont(getClass().getResource("/fonts/Inter-SemiBold.ttf").toExternalForm(), 14); + } +} diff --git a/src/main/java/no/ntnu/idatt1005/group03/UI/AboutUsScreen.java b/src/main/java/no/ntnu/idatt1005/group03/UI/AboutUsScreen.java index 5f24826..a562154 100644 --- a/src/main/java/no/ntnu/idatt1005/group03/UI/AboutUsScreen.java +++ b/src/main/java/no/ntnu/idatt1005/group03/UI/AboutUsScreen.java @@ -9,8 +9,6 @@ import javafx.scene.layout.Region; import javafx.scene.layout.VBox; import javafx.stage.Stage; -import no.ntnu.idatt1005.group03.Model.User; - /** * Displays the "About Us" screen in the application. @@ -25,14 +23,6 @@ */ public class AboutUsScreen { - /** - * Constructs a new {@code AboutUsScreen} instance. - * - * @param user the current user context for the screen - */ - public AboutUsScreen(User user) { - } - /** * Builds and displays the About Us screen on the provided stage. * diff --git a/src/main/java/no/ntnu/idatt1005/group03/UI/AccountScreen.java b/src/main/java/no/ntnu/idatt1005/group03/UI/AccountScreen.java index 5013d8d..ba202d0 100644 --- a/src/main/java/no/ntnu/idatt1005/group03/UI/AccountScreen.java +++ b/src/main/java/no/ntnu/idatt1005/group03/UI/AccountScreen.java @@ -5,13 +5,11 @@ import javafx.scene.layout.BorderPane; import javafx.stage.Stage; import javafx.scene.layout.VBox; -import javafx.scene.layout.Priority; import javafx.geometry.Insets; import javafx.scene.control.Label; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import no.ntnu.idatt1005.group03.Model.User; -import javafx.scene.layout.Region; import no.ntnu.idatt1005.group03.Model.Donation; /** @@ -49,9 +47,9 @@ public void start(Stage stage) { BorderPane accountLayout = new BorderPane(); accountLayout.setTop(new TopMenu("Account")); - VBox mainContent = new VBox(20); + VBox mainContent = new VBox(28); mainContent.setAlignment(Pos.CENTER); - mainContent.setPadding(new Insets(15)); + mainContent.setPadding(new Insets(24)); mainContent.getChildren().addAll( createProfileSection(), @@ -70,47 +68,44 @@ public void start(Stage stage) { } private VBox createProfileSection() { - VBox profileBox = new VBox(10); - profileBox.setPadding(new Insets(20)); + VBox profileBox = new VBox(14); + profileBox.setPadding(new Insets(28)); profileBox.getStyleClass().add("profile-box"); - profileBox.setPrefSize(300, 150); - profileBox.setMaxSize(300, 150); + profileBox.setPrefSize(380, 220); + profileBox.setMaxSize(380, 220); profileBox.setAlignment(Pos.CENTER); Image profile = new Image(getClass().getResourceAsStream("/images/profile.png")); ImageView profileView = new ImageView(profile); - profileView.setFitWidth(60); - profileView.setFitHeight(60); + profileView.setFitWidth(84); + profileView.setFitHeight(84); profileView.setPreserveRatio(true); Label usernameLabel = new Label(user.getUsername()); - // CSS: Large title text - usernameLabel.getStyleClass().add("title-text"); + usernameLabel.getStyleClass().add("account-name"); Label emailLabel = new Label(user.getEmail()); - // CSS: Muted/grey text - emailLabel.getStyleClass().add("muted-text"); + emailLabel.getStyleClass().add("account-email"); Button editProfileButton = new Button("Edit Profile"); - // CSS: Outline button - editProfileButton.getStyleClass().addAll("btn", "btn-outline"); + editProfileButton.getStyleClass().addAll("btn", "btn-outline", "btn-large"); profileBox.getChildren().addAll(profileView, usernameLabel, emailLabel, editProfileButton); return profileBox; } private VBox createDonationLog() { - VBox donationsBox = new VBox(); + VBox donationsBox = new VBox(8); donationsBox.setAlignment(Pos.CENTER); Label recentTitle = new Label("Donations"); - recentTitle.getStyleClass().add("bold-text"); + recentTitle.getStyleClass().add("account-section-title"); donationsBox.getChildren().add(recentTitle); if (user.getDonations() == null || user.getDonations().isEmpty()) { Label noDonations = new Label("No donations yet."); - noDonations.getStyleClass().add("muted-text"); + noDonations.getStyleClass().add("account-email"); donationsBox.getChildren().add(noDonations); } else { for (Donation donation : user.getDonations()) { @@ -119,6 +114,7 @@ private VBox createDonationLog() { " - " + donation.getAmount() + " kr" + " (" + donation.getDate() + ")" ); + donationLabel.getStyleClass().add("account-donation-text"); donationsBox.getChildren().add(donationLabel); } @@ -130,17 +126,13 @@ private VBox createDonationLog() { private VBox createLogoutSection() { VBox logoutBox = new VBox(); logoutBox.setAlignment(Pos.CENTER); - - // The Region acts like an invisible spring, pushing the logout button to the bottom! - Region spacer = new Region(); - VBox.setVgrow(spacer, Priority.ALWAYS); + logoutBox.setPadding(new Insets(14, 0, 0, 0)); Button logoutButton = new Button("Log out"); - logoutButton.getStyleClass().addAll("btn", "btn-primary"); + logoutButton.getStyleClass().addAll("btn", "btn-primary", "btn-large"); logoutButton.setOnAction(e -> ScreenManager.logout()); - logoutBox.getChildren().addAll(spacer, logoutButton); - VBox.setVgrow(logoutBox, Priority.ALWAYS); + logoutBox.getChildren().add(logoutButton); return logoutBox; } } diff --git a/src/main/java/no/ntnu/idatt1005/group03/UI/DonationScreen.java b/src/main/java/no/ntnu/idatt1005/group03/UI/DonationScreen.java index e7d1eac..0d993ab 100644 --- a/src/main/java/no/ntnu/idatt1005/group03/UI/DonationScreen.java +++ b/src/main/java/no/ntnu/idatt1005/group03/UI/DonationScreen.java @@ -1,10 +1,12 @@ package no.ntnu.idatt1005.group03.UI; import javafx.geometry.Insets; +import javafx.geometry.Pos; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.control.TextField; import javafx.scene.layout.HBox; +import javafx.scene.layout.StackPane; import javafx.scene.layout.VBox; import javafx.scene.paint.Color; import javafx.stage.Stage; @@ -57,7 +59,11 @@ public DonationScreen(Organization organization, User user) { public void start(Stage stage) { VBox layout = new VBox(15); - layout.setPadding(new Insets(20)); + layout.setPadding(new Insets(30)); + layout.setPrefWidth(920); + layout.setMaxWidth(920); + layout.setFillWidth(true); + layout.setAlignment(Pos.TOP_CENTER); Label orgName = createOrgNameLabel(); Label websiteFeedbackLabel = new Label(); @@ -65,6 +71,7 @@ public void start(Stage stage) { Button favoriteButton = createFavoriteButton(); HBox actionButtons = new HBox(10); + actionButtons.setAlignment(Pos.CENTER); actionButtons.getChildren().addAll( favoriteButton, websiteButton @@ -73,6 +80,10 @@ public void start(Stage stage) { Label amountLabel = new Label("Amount"); TextField amountInput = new TextField(); amountInput.setPromptText("Enter amount"); + amountInput.setPrefWidth(420); + amountInput.setMaxWidth(420); + VBox amountSection = new VBox(8, amountLabel, amountInput); + amountSection.setAlignment(Pos.CENTER); Label feedbackLabel = new Label(); feedbackLabel.setWrapText(true); @@ -84,23 +95,26 @@ public void start(Stage stage) { orgName, actionButtons, websiteFeedbackLabel, - amountLabel, - amountInput, + amountSection, feedbackLabel, donateButton, backButton); + StackPane centeredLayout = new StackPane(layout); + centeredLayout.setAlignment(Pos.CENTER); + StackPane.setMargin(layout, new Insets(100, 0, 0, 0)); + ScreenManager.showRoot( stage, - layout, + centeredLayout, "Donation", getClass().getResource("/styles/app.css").toExternalForm() ); } private Label createOrgNameLabel() { - Label orgName = new Label("Donate to: " + organization.getName()); - orgName.getStyleClass().add("title-text"); + Label orgName = new Label(organization.getName()); + orgName.getStyleClass().add("donation-title"); return orgName; } diff --git a/src/main/java/no/ntnu/idatt1005/group03/UI/LoginScreen.java b/src/main/java/no/ntnu/idatt1005/group03/UI/LoginScreen.java index a3bbd21..8949060 100644 --- a/src/main/java/no/ntnu/idatt1005/group03/UI/LoginScreen.java +++ b/src/main/java/no/ntnu/idatt1005/group03/UI/LoginScreen.java @@ -9,6 +9,7 @@ import javafx.scene.control.*; import javafx.scene.image.Image; import javafx.scene.image.ImageView; +import javafx.scene.Parent; import javafx.scene.layout.*; import javafx.scene.paint.Color; import javafx.scene.text.Text; @@ -24,9 +25,10 @@ * Displays the login and sign-up screen for the application. * *

This class is part of the UI layer in the MVC architecture and serves as the - * entry point for user authentication. It provides two scenes: one for user registration - * and one for user login. The class coordinates user input with the authentication - * controller and handles navigation to the home screen after successful authentication.

+ * entry point for user authentication. It provides both user registration and user login + * flows, reusing a single JavaFX scene while swapping between different root layouts. + * The class coordinates user input with the authentication controller and handles + * navigation to the home screen after successful authentication.

* *

The class extends {@link Application} and is responsible for initializing the * primary stage used for login and registration.

@@ -44,8 +46,8 @@ public class LoginScreen extends Application { // homepage * Initializes and displays the login screen on the provided primary stage. * *

This method creates the authentication controller and favorite controller, - * initializes feedback labels, builds both the sign-up and login scenes, - * and displays the initial scene.

+ * initializes feedback labels, prepares the shared authentication scene, + * and displays the initial sign-up view.

* * @param primaryStage the primary JavaFX stage for the application */ @@ -84,7 +86,7 @@ public void start(Stage primaryStage) { } // -------- SCENE 1 (Sign Up) -------- - private GridPane createSignUpRoot() { + private Parent createSignUpRoot() { GridPane root1 = createBaseGrid(); Label nameLabel = new Label("Email address"); @@ -127,11 +129,11 @@ private GridPane createSignUpRoot() { accountBox.setAlignment(Pos.CENTER); root1.add(accountBox, 1, 9, 3, 1); - return root1; + return wrapCentered(root1); } // -------- SCENE 2 (Log In) -------- - private GridPane createLoginRoot() { + private Parent createLoginRoot() { GridPane root2 = createBaseGrid(); Label usernameLabel2 = new Label("Email address or username"); @@ -170,30 +172,38 @@ private GridPane createLoginRoot() { GridPane.setHalignment(forgot, HPos.CENTER); - return root2; + return wrapCentered(root2); } // -------- REUSABLE COMPONENTS -------- private GridPane createBaseGrid() { GridPane grid = new GridPane(); - grid.setPadding(new Insets(10)); - grid.setHgap(10); - grid.setVgap(10); + grid.setPadding(new Insets(12)); + grid.setHgap(12); + grid.setVgap(12); - ColumnConstraints col0 = new ColumnConstraints(50); - ColumnConstraints col1 = new ColumnConstraints(150); - ColumnConstraints col2 = new ColumnConstraints(150); + ColumnConstraints col0 = new ColumnConstraints(58); + ColumnConstraints col1 = new ColumnConstraints(175); + ColumnConstraints col2 = new ColumnConstraints(175); grid.getColumnConstraints().addAll(col0, col1, col2); return grid; } + private StackPane wrapCentered(GridPane content) { + content.setMaxSize(Region.USE_PREF_SIZE, Region.USE_PREF_SIZE); + StackPane wrapper = new StackPane(content); + wrapper.setAlignment(Pos.TOP_CENTER); + StackPane.setMargin(content, new Insets(100, 0, 0, 0)); + return wrapper; + } + private void addHeader(GridPane grid, boolean isScene2) { Image image = new Image(getClass().getResourceAsStream("/images/donate2.png")); ImageView imageView = new ImageView(image); - imageView.setFitWidth(40); - imageView.setFitHeight(40); + imageView.setFitWidth(48); + imageView.setFitHeight(48); imageView.setPreserveRatio(true); Button signloginButton = new Button("Sign In"); diff --git a/src/main/java/no/ntnu/idatt1005/group03/UI/OrganizationsScreen.java b/src/main/java/no/ntnu/idatt1005/group03/UI/OrganizationsScreen.java index 4091ef0..4697a25 100644 --- a/src/main/java/no/ntnu/idatt1005/group03/UI/OrganizationsScreen.java +++ b/src/main/java/no/ntnu/idatt1005/group03/UI/OrganizationsScreen.java @@ -3,16 +3,11 @@ import javafx.geometry.Insets; import javafx.geometry.Pos; import javafx.scene.control.Button; -import javafx.scene.control.Hyperlink; import javafx.scene.control.Label; import javafx.scene.control.ScrollPane; -import javafx.scene.image.Image; -import javafx.scene.image.ImageView; import javafx.scene.layout.BorderPane; -import javafx.scene.layout.GridPane; 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; import javafx.scene.layout.*; @@ -31,8 +26,9 @@ * *

This class is part of the UI layer in the MVC architecture and is responsible * for presenting available organizations to the user. It allows the user to browse - * organizations, search by name or category, view favorite organizations, mark or unmark - * favorites, and navigate to the donation screen for a selected organization.

+ * organizations, search through the available organization list, view favorite + * organizations, mark or unmark favorites, and navigate to the donation screen for a + * selected organization.

* *

The screen retrieves organization data through the {@link OrganizationController} * and favorite-related actions through the {@link FavoriteController}.

@@ -71,18 +67,19 @@ public void start(Stage stage) { VBox content = new VBox(15); content.setPadding(new Insets(10)); content.setAlignment(Pos.TOP_CENTER); + content.setFillWidth(true); - GridPane orgGrid = new GridPane(); - setupGrid(orgGrid); + VBox orgList = new VBox(15); + setupList(orgList); content.getChildren().addAll( createHeaderSection(), - createSearchBox(orgGrid), + createSearchBox(orgList), createFavoriteSection(), - orgGrid + orgList ); - refreshOrgGrid(orgGrid, orgController.getOrganizations()); + refreshOrgList(orgList, orgController.getOrganizations()); ScrollPane scrollPane = wrapInScrollPane(content); mainLayout.setCenter(scrollPane); @@ -100,7 +97,7 @@ private Text createHeaderSection() { return charity; } - private StackPane createSearchBox(GridPane orgGrid) { + private StackPane createSearchBox(VBox orgList) { StackPane searchPane = new StackPane(); searchPane.setMaxWidth(Double.MAX_VALUE); @@ -111,7 +108,7 @@ private StackPane createSearchBox(GridPane orgGrid) { search.textProperty().addListener((obs, previousText, currentText) -> { List searchresults = orgController.searchOrganizations(currentText); - refreshOrgGrid(orgGrid, searchresults); + refreshOrgList(orgList, searchresults); }); Button searchClick = new Button("Search"); @@ -119,7 +116,7 @@ private StackPane createSearchBox(GridPane orgGrid) { searchClick.setOnAction(e -> { String query = search.getText(); List searchresults = orgController.searchOrganizations(query); - refreshOrgGrid(orgGrid, searchresults); + refreshOrgList(orgList, searchresults); }); StackPane.setAlignment(searchClick, Pos.CENTER_RIGHT); @@ -133,6 +130,9 @@ private StackPane createSearchBox(GridPane orgGrid) { private VBox createFavoriteSection() { List favorites = user.getFavoriteOrganizations(); VBox favoritesBox = new VBox(10); + favoritesBox.setFillWidth(true); + favoritesBox.setMaxWidth(Double.MAX_VALUE); + favoritesBox.setPadding(new Insets(20)); if (favorites != null && !favorites.isEmpty()) { Text favTitle = new Text("Favorites"); @@ -149,7 +149,7 @@ private VBox createFavoriteSection() { } private HBox createOrgRow(Organization org, String styleClass) { - Label orgLabel = new Label(org.getName() + " (" + org.getOrgNumber() + ")"); + Label orgLabel = new Label(org.getName()); orgLabel.getStyleClass().add("org-label"); orgLabel.setWrapText(true); orgLabel.setMaxWidth(Double.MAX_VALUE); @@ -177,30 +177,39 @@ private HBox createOrgRow(Organization org, String styleClass) { ScreenManager.showHomeScreen(); }); - HBox row; + Region spacer = new Region(); + HBox.setHgrow(spacer, Priority.ALWAYS); + + HBox rightBox; if (org.isApprovedByIK()) { - row = new HBox(10, donateNow, orgLabel, approvedLabel, favoriteButton); + rightBox = new HBox(10, approvedLabel, favoriteButton); } else { - row = new HBox(10, donateNow, orgLabel, favoriteButton); + rightBox = new HBox(10, favoriteButton); } - row.setPadding(new Insets(10)); + rightBox.setAlignment(Pos.CENTER_RIGHT); + + HBox row = new HBox(10, donateNow, orgLabel, spacer, rightBox); + row.setAlignment(Pos.CENTER_LEFT); + row.setMinHeight(64); + row.setPadding(new Insets(8, 16, 8, 16)); row.getStyleClass().add(styleClass); + row.setMaxWidth(Double.MAX_VALUE); HBox.setHgrow(orgLabel, Priority.ALWAYS); return row; } - private void refreshOrgGrid(GridPane orgGrid, List organizations) { - orgGrid.getChildren().clear(); - int row = 0; + private void refreshOrgList(VBox orgList, List organizations) { + orgList.getChildren().clear(); for (Organization org : organizations) { - orgGrid.add(createOrgRow(org, "org-box"), 0, row++); + orgList.getChildren().add(createOrgRow(org, "org-box")); } } - private void setupGrid(GridPane grid) { - grid.setPadding(new Insets(20)); - grid.setHgap(10); - grid.setVgap(15); + private void setupList(VBox list) { + list.setPadding(new Insets(20)); + list.setSpacing(15); + list.setFillWidth(true); + list.setMaxWidth(Double.MAX_VALUE); } private ScrollPane wrapInScrollPane(VBox content) { diff --git a/src/main/java/no/ntnu/idatt1005/group03/UI/ScreenManager.java b/src/main/java/no/ntnu/idatt1005/group03/UI/ScreenManager.java index da2795f..334c763 100644 --- a/src/main/java/no/ntnu/idatt1005/group03/UI/ScreenManager.java +++ b/src/main/java/no/ntnu/idatt1005/group03/UI/ScreenManager.java @@ -57,6 +57,13 @@ public static User getCurrentUser() { return currentUser; } + /** + * Shows the given scene on the stage while reusing the existing scene when possible. + * + * @param stage the stage to update + * @param scene the scene to display, or whose root and stylesheet should be reused + * @param title the window title + */ public static void showScene(Stage stage, Scene scene, String title) { Scene currentScene = stage.getScene(); stage.setTitle(title); @@ -103,7 +110,7 @@ public static void showHomeScreen() { * Displays the About Us screen for the current user. */ public static void showAboutUsScreen() { - new AboutUsScreen(currentUser).start(mainStage); + new AboutUsScreen().start(mainStage); } /** diff --git a/src/main/java/no/ntnu/idatt1005/group03/UI/TopMenu.java b/src/main/java/no/ntnu/idatt1005/group03/UI/TopMenu.java index 673710e..cb2d874 100644 --- a/src/main/java/no/ntnu/idatt1005/group03/UI/TopMenu.java +++ b/src/main/java/no/ntnu/idatt1005/group03/UI/TopMenu.java @@ -18,7 +18,7 @@ * It includes a clickable logo, navigation links, and an account button.

* *

The menu highlights the currently active screen and disables navigation for that - * screen by showing it as styled text instead of an active link or button.

+ * screen by keeping its control visible while omitting the navigation action.

*/ public class TopMenu extends HBox { @@ -27,7 +27,7 @@ public class TopMenu extends HBox { * *

The menu adapts its navigation behavior depending on which screen is currently * displayed. The active screen is visually highlighted, while navigation controls - * for other screens remain available.

+ * for other screens remain available and clickable.

* * @param currentScreen the name of the currently active screen */ @@ -80,4 +80,4 @@ public TopMenu(String currentScreen) { this.getChildren().add(accountButton); } } -} \ No newline at end of file +} diff --git a/src/main/resources/fonts/Inter-Regular.ttf b/src/main/resources/fonts/Inter-Regular.ttf new file mode 100644 index 0000000..1e228ab Binary files /dev/null and b/src/main/resources/fonts/Inter-Regular.ttf differ diff --git a/src/main/resources/fonts/Inter-SemiBold.ttf b/src/main/resources/fonts/Inter-SemiBold.ttf new file mode 100644 index 0000000..e953535 Binary files /dev/null and b/src/main/resources/fonts/Inter-SemiBold.ttf differ diff --git a/src/main/resources/styles/app.css b/src/main/resources/styles/app.css index fbc2b29..2d51a4a 100644 --- a/src/main/resources/styles/app.css +++ b/src/main/resources/styles/app.css @@ -1,5 +1,9 @@ /* -- app.css -- */ +.root { + -fx-font-family: "Inter"; +} + /* -------- BUTTON BASE AND VARIANTS -------- */ /* Base button */ @@ -38,11 +42,11 @@ -fx-font-weight: bold; } .btn-toggle { - -fx-padding: 2 40; + -fx-padding: 4 48; -fx-background-radius: 0; } .btn-super-wide { - -fx-padding: 5 100; + -fx-padding: 7 118; } /* -------- BOXES, PANELS AND LAYOUTS -------- */ @@ -98,6 +102,29 @@ -fx-font-size: 18px; -fx-font-weight: bold; } +.account-name { + -fx-font-family: "Inter SemiBold"; + -fx-font-size: 26px; + -fx-text-fill: #040404; +} +.account-email { + -fx-font-size: 18px; + -fx-text-fill: #4a4949; +} +.account-section-title { + -fx-font-family: "Inter SemiBold"; + -fx-font-size: 22px; + -fx-text-fill: #040404; +} +.account-donation-text { + -fx-font-size: 17px; + -fx-text-fill: #040404; +} +.donation-title { + -fx-font-family: "Inter SemiBold"; + -fx-font-size: 22px; + -fx-text-fill: #040404; +} .bold-text { -fx-font-weight: bold; } @@ -106,27 +133,29 @@ } .org-label { -fx-text-fill: black; + -fx-font-size: 16px; } .approved-badge { - -fx-background-color: #00d000; - -fx-text-fill: black; - -fx-background-radius: 12; - -fx-padding: 3 10; - -fx-font-size: 11px; + -fx-background-color: #21a129; + -fx-text-fill: white; + -fx-background-radius: 14; + -fx-padding: 4 12; + -fx-font-size: 12px; -fx-font-weight: bold; } .favorite-star { -fx-background-color: transparent; -fx-border-color: transparent; -fx-padding: 0 6 0 6; - -fx-font-size: 18px; - -fx-text-fill: #ffd602; + -fx-font-size: 22px; + -fx-text-fill: #b68a1e; } /* -------- INPUTS AND SCROLL PANES -------- */ .search-field { - -fx-text-box-border: #a09b9b; + -fx-text-box-border: #6f6f6f; + -fx-prompt-text-fill: #666666; -fx-padding: 7 50; -fx-background-radius: 25; -fx-border-radius: 25; @@ -138,4 +167,4 @@ .dark-scroll-pane { -fx-background-color: #0B1D26; -fx-background: #0B1D26; -} \ No newline at end of file +}