diff --git a/.vscode/settings.json b/.vscode/settings.json index 69bde91..0ffcaaf 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -13,6 +13,7 @@ "firstseen", "formik", "keepalive", + "mixins", "motd", "tsdoc" ], diff --git a/src/layouts/main/components/nav/Brand.scss b/src/layouts/main/components/nav/Brand.scss index 15caf97..fb13f24 100644 --- a/src/layouts/main/components/nav/Brand.scss +++ b/src/layouts/main/components/nav/Brand.scss @@ -10,7 +10,7 @@ align-items: center; justify-content: center; - border-right: 1px solid $gray-700; + border-right: 1px solid $border-color-darker; a { color: $navbar-dark-brand-color; @@ -38,4 +38,4 @@ @include media-breakpoint-down(sm) { display: none; } -} \ No newline at end of file +} diff --git a/src/layouts/main/components/nav/Search.scss b/src/layouts/main/components/nav/Search.scss index 283c4da..d6d51af 100644 --- a/src/layouts/main/components/nav/Search.scss +++ b/src/layouts/main/components/nav/Search.scss @@ -43,4 +43,4 @@ } } } -} \ No newline at end of file +} diff --git a/src/layouts/main/components/nav/index.scss b/src/layouts/main/components/nav/index.scss index 8a456f1..00409d0 100644 --- a/src/layouts/main/components/nav/index.scss +++ b/src/layouts/main/components/nav/index.scss @@ -8,13 +8,15 @@ box-shadow: $box-shadow; + border-bottom: 1px solid $border-color-darker; + .navbar-collapse { margin: 0 1rem 0 0; } .navbar-nav { .nav-link { - border-right: 1px solid $gray-700; + border-right: 1px solid $border-color-darker; padding: 0 1.5rem; .nav-icon { @@ -26,4 +28,4 @@ } } } -} \ No newline at end of file +} diff --git a/src/layouts/main/components/nav/index.tsx b/src/layouts/main/components/nav/index.tsx index 563fe94..90bb8ac 100644 --- a/src/layouts/main/components/nav/index.tsx +++ b/src/layouts/main/components/nav/index.tsx @@ -2,6 +2,7 @@ import Navbar from "react-bootstrap/Navbar"; import Nav from "react-bootstrap/Nav"; +import { LinkContainer } from "react-router-bootstrap"; import { Brand } from "./Brand"; import { Search } from "./Search"; @@ -15,9 +16,17 @@ + {/* Main nav buttons */} diff --git a/src/layouts/main/components/sidebar/GuestIndicator.scss b/src/layouts/main/components/sidebar/GuestIndicator.scss index 1b675b4..48a2580 100644 --- a/src/layouts/main/components/sidebar/GuestIndicator.scss +++ b/src/layouts/main/components/sidebar/GuestIndicator.scss @@ -1,11 +1,11 @@ @import "~scss/variables"; .nav-guest-indicator { - background-color: $gray-200; + background-color: $main-sidebar-top-bg; padding: 0.5rem 1rem; - border-bottom: 1px solid $border-color; + border-bottom: 1px solid $border-color-darker; color: $text-muted; text-align: center; diff --git a/src/layouts/main/components/sidebar/SidebarItem.scss b/src/layouts/main/components/sidebar/SidebarItem.scss index 1bd8f82..fb5bbba 100644 --- a/src/layouts/main/components/sidebar/SidebarItem.scss +++ b/src/layouts/main/components/sidebar/SidebarItem.scss @@ -3,13 +3,15 @@ #main-sidebar .nav-item { .nav-link { color: $main-sidebar-color; + + padding: 0.75rem 1.25rem; } .sidebar-icon { - margin-right: 0.5rem; + margin-right: 0.75rem; } &:hover { background: $main-sidebar-hover-bg; } -} \ No newline at end of file +} diff --git a/src/layouts/main/components/sidebar/TotalBalance.scss b/src/layouts/main/components/sidebar/TotalBalance.scss index c587897..19204cc 100644 --- a/src/layouts/main/components/sidebar/TotalBalance.scss +++ b/src/layouts/main/components/sidebar/TotalBalance.scss @@ -1,11 +1,11 @@ @import "~scss/variables"; .nav-total-balance { - background-color: $gray-200; + background-color: $main-sidebar-top-bg; padding: 0.5rem 1rem; - border-bottom: 1px solid $border-color; + border-bottom: 1px solid $border-color-darker; h5 { margin-bottom: 0; diff --git a/src/layouts/main/components/sidebar/index.scss b/src/layouts/main/components/sidebar/index.scss index 37db530..adf0a46 100644 --- a/src/layouts/main/components/sidebar/index.scss +++ b/src/layouts/main/components/sidebar/index.scss @@ -12,7 +12,7 @@ flex-direction: column; flex-wrap: nowrap; - border-right: 1px solid $border-color; + border-right: 1px solid $border-color-darker; background: $main-sidebar-bg; .sidebar-content { @@ -39,4 +39,4 @@ border-top: 1px solid $border-color; } -} \ No newline at end of file +} diff --git a/src/scss/_theme.scss b/src/scss/_theme.scss new file mode 100644 index 0000000..8cc03ec --- /dev/null +++ b/src/scss/_theme.scss @@ -0,0 +1,87 @@ +/* ========================================================================== */ +/* BOOTSTRAP RE-SKIN +/* ========================================================================== */ + +/* Colours */ +$light: #343a56; +$lighter: #434a6b; +$slighter: mix($light, $lighter, 50%); +$dark: #2a304a; +$darker: #242942; +$darkest: darken($darker, 5%); +$primary: #5ac6e9; +$secondary: $lighter; +$success: #38bf60; +$info: #57a3cb; +$danger: #fe4848; + +/* Typography */ +$body-color: #eaf0fe; +$text-muted: #8991ab; + +$body-hover-color: mix($body-color, $text-muted, 50%); +$body-hover-color: mix($body-color, $text-muted, 50%); + +$font-family-base: "Lato", sans-serif; + +/* Basic redefinitions */ +$body-bg: $dark; + +$border-color: #3f4661; +$border-color-lighter: #404962; +$border-color-darker: darken($darker, 5%); + +/* Shadows */ +$enable-shadows: true; + +$btn-box-shadow: none; +$input-box-shadow: none; + +/* Border radius */ +$border-radius: 6px !default; +$border-radius-lg: 12px !default; +$border-radius-sm: 3px !default; + +/* Button */ +$btn-active-box-shadow: none; + +/* Input */ +$input-bg: $lighter; +$input-border-width: 0; + +$input-color: $body-color; +$input-placeholder-color: $text-muted; + +$input-btn-focus-color: rgba($info, 0.5); + +.was-validated .form-control:invalid, .form-control.is-invalid { + /* Make invalid form controls have a red glow */ + &:not(:focus) { + box-shadow: 0 0 0 0.2rem rgba($danger, 0.35); + } + + &:focus { + box-shadow: 0 0 0 0.2rem rgba($danger, 0.5); + } +} + +/* Navbar */ +$navbar-dark-color: $body-color; +$navbar-dark-hover-color: $body-hover-color; +$navbar-dark-disabled-color: $text-muted; + +/* Modal */ +$modal-content-bg: $light; +$modal-content-box-shadow-xs: 0 0.5rem 1rem rgba(#000, 0.15); +$modal-content-box-shadow-sm-up: 0 0.5rem 1rem rgba(#000, 0.15); +$modal-content-border-width: 0; +$modal-header-border-color: $border-color-lighter; +$modal-header-border-width: 1px; + +$close-color: $text-muted; +$close-text-shadow: none; + +.modal-header { + /* Close button isn't vertically aligned in modal header by default. */ + align-items: center; +} diff --git a/src/scss/_variables.scss b/src/scss/_variables.scss index df939d2..3f1337c 100644 --- a/src/scss/_variables.scss +++ b/src/scss/_variables.scss @@ -1,23 +1,6 @@ -/* -------------------------------------------------------------------------- */ -/* BOOTSTRAP */ -/* -------------------------------------------------------------------------- */ -$border-radius: 0; -$border-radius-lg: 0; -$border-radius-sm: 0; +@import "_theme"; /* Re-skin bootstrap */ -$font-family-base: "Lato", sans-serif; - -$enable-shadows: true; - -$btn-box-shadow: none; -$input-box-shadow: none; - -$modal-content-box-shadow-xs: 0 .5rem 1rem rgba(#000, .15); -$modal-content-box-shadow-sm-up: 0 .5rem 1rem rgba(#000, .15); -$modal-content-border-width: 0; -$modal-header-border-width: 1px; - -/* Import Bootstrap after redefining */ +/* Import Bootstrap after redefining its variables */ @import "~bootstrap/scss/functions", "~bootstrap/scss/variables", @@ -29,24 +12,25 @@ $navbar-height: 50px; /* Search bar */ -$navbar-search-bg: $gray-700; -$navbar-search-color: $gray-500; -$navbar-search-placeholder-color: $gray-600; +$navbar-search-bg: $light; +$navbar-search-color: rgba($body-color, 0.5); +$navbar-search-placeholder-color: $input-placeholder-color; $navbar-search-placeholder-font-size: $font-size-sm; -$navbar-search-hover-bg: $gray-600; -$navbar-search-hover-color: $white; -$navbar-search-hover-placeholder-color: $gray-500; -$navbar-search-focus-bg: $white; +$navbar-search-hover-bg: $slighter; +$navbar-search-hover-color: rgba($body-color, 0.75); +$navbar-search-hover-placeholder-color: $input-placeholder-color; +$navbar-search-focus-bg: $lighter; $navbar-search-focus-color: $body-color; -$navbar-search-focus-placeholder-color: $body-color; +$navbar-search-focus-placeholder-color: $input-placeholder-color; /* -------------------------------------------------------------------------- */ /* MAIN SIDEBAR */ /* -------------------------------------------------------------------------- */ $main-sidebar-width: 200px !default; $main-sidebar-color: $body-color; -$main-sidebar-bg: $gray-100; -$main-sidebar-hover-bg: $gray-200; +$main-sidebar-bg: $darker; +$main-sidebar-hover-bg: mix($darker, $darkest, 50%); +$main-sidebar-top-bg: $darkest; /* -------------------------------------------------------------------------- */ /* MISC */