// Sass modules @use "sass:math"; // Base font size $base-font-size: 16px; // Libraries $fa-font-path: "/fonts"; @import "@fortawesome/fontawesome-free/scss/fontawesome.scss"; @import "@fortawesome/fontawesome-free/scss/solid.scss"; $enable-smooth-scroll: false; @import "bootstrap/scss/bootstrap.scss"; // Functions @import "functions/**/*.scss"; // Core @import "_fonts"; @import "_common-vars"; // Supplementary @import "mixins/**/*.scss"; // Colours $c-text: #111; // text $c-text-inactive: fade-out($c-text, 0.25); // inactive text $c-text-light: #fff; // light text $c-text-light-inactive: fade-out($c-text-light, 0.25); // inactive light text $c-input-bg: #fff; // white $c-dashboard-error: #a80000; $c-dashboard-dark: #111; $c-dashboard-light: #f1f1f1; $c-dashboard-edit: #87823e; $c-dashboard-delete: #87483e; // // Main Dashboard Styles // * { outline: none !important; } html { width: 100%; font-size: $base-font-size; @include media-breakpoint-up(xxxl) { font-size: 18px; } @include media-breakpoint-up(xxxxl) { font-size: 20px; } } body { @include font-sans; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; -webkit-overflow-scrolling: touch; } .site-content { position: relative; display: flex; min-height: 100vh; flex-direction: column; .page-content { flex-grow: 1; } } .dashboard-background { position: absolute; top: 0px; left: 0px; width: 100%; height: 100%; background-image: url("/img/dashboard/line-bg.svg"); background-position: center top; background-repeat: repeat; } .navbar, .dashboard-footer { z-index: 10; position: relative; } .navbar { margin-bottom: $grid-gutter-width; border: 0; background-color: $c-dashboard-dark; user-select: none; @include media-breakpoint-down(lg) { padding-right: pxrem(8); padding-left: pxrem(8); } @include media-breakpoint-down(md) { margin-bottom: 0px; } &-brand { @include font-sans-bold; overflow: hidden; max-width: calc(100vw - #{pxrem(60)}); color: $c-text-light; white-space: nowrap; &:hover, &:focus, &:active { color: $c-text-light; } @include media-breakpoint-down(md) { font-size: pxrem(12); } } &-toggler { position: absolute; top: pxrem(3); right: 0px; border: 0; @include media-breakpoint-up(md) { top: pxrem(10); } &-icon { position: relative; &-bar { $v-inset: pxrem(6); $h-inset: pxrem(3); position: absolute; left: $h-inset; width: calc(100% - #{$h-inset * 2}); height: pxrem(2); background-color: $c-text-light; &:nth-child(1) { top: $v-inset; } &:nth-child(2) { top: 50%; transform: translateY(-50%); } &:nth-child(3) { bottom: $v-inset; } } } } .nav-link { color: $c-text-light-inactive; transition: color 150ms; &.active { color: $c-text-light; } &.dropdown-toggle { border: 0; background-color: transparent; cursor: pointer; } } .dropdown-menu { right: 0px; left: auto; padding: 0px; border-top-right-radius: 0; border-top-left-radius: 0; list-style: none; @include media-breakpoint-up(lg) { top: pxrem(45); } @include media-breakpoint-down(lg) { border-bottom-right-radius: 0; border-bottom-left-radius: 0; } .dropdown-item { background-color: transparent; transition: background-color 150ms, color 150ms; @include media-breakpoint-down(lg) { padding-right: pxrem(8); padding-left: pxrem(8); background-color: darken($c-dashboard-dark, 2%); color: $c-text-light-inactive; } &.active, &:hover, &:focus, &:active { color: $c-text; @include media-breakpoint-down(lg) { color: $c-text-light; } } &:hover, &:focus { @include media-breakpoint-up(lg) { background-color: fade-out(#000, 0.97); } } &.active { @include media-breakpoint-up(lg) { background-color: fade-out(#000, 0.93); } } } } } .dashboard-footer { margin-top: $grid-gutter-width; width: 100%; padding: pxrem(8) $half-gutter-width; background-color: $c-dashboard-dark; text-align: right; a { color: $c-text-light-inactive; text-decoration: none; transition: color 150ms; &:hover, &:focus { text-decoration: none; } &.active { color: $c-text-light; } } } .card { margin-top: pxrem(20); margin-bottom: pxrem(20); > .card-header { @include font-sans-bold; position: relative; padding: pxrem(9) pxrem(15); border-top: 1px solid darken($c-dashboard-dark, 5%); border-right: 1px solid darken($c-dashboard-dark, 5%); border-left: 1px solid darken($c-dashboard-dark, 5%); background-color: $c-dashboard-dark; color: $c-dashboard-light; font-size: pxrem(14); .dashboard-heading { position: absolute; top: 50%; right: pxrem(8); transform: translateY(-50%); .btn { min-width: pxrem(70); height: pxrem(26); padding-top: pxrem(1); padding-bottom: pxrem(2); } a { color: $c-text; text-decoration: none; } } } .card-body { padding: pxrem(15); background-color: lighten($c-dashboard-light, 1%); &.dashboard { @include media-breakpoint-down(md) { padding: pxrem(10) pxrem(8) pxrem(12) pxrem(8); } } .search-form { display: flex; width: 100%; @include media-breakpoint-down(md) { margin-bottom: $half-gutter-width; } &-input { display: block; width: 100%; } &-submit { margin-top: pxrem(2); margin-left: pxrem(10); height: pxrem(32); border: 1px solid fade-out($c-text, 0.75); border-radius: pxrem(4); } } .search { margin-bottom: pxrem(10); width: 100%; padding: pxrem(3) pxrem(8); border: 1px solid fade-out(#000, 0.875); border-radius: 0.25rem; @include media-breakpoint-down(md) { margin: pxrem(3) pxrem(3) 0px pxrem(3); width: calc(100% - #{pxrem(6)}); } } .help-text { margin-top: pxrem(10); margin-bottom: pxrem(10); padding: pxrem(5) pxrem(10); border: 1px solid darken($c-dashboard-dark, 5%); border-radius: pxrem(5); background-color: $c-dashboard-dark; color: $c-text-light; ul { margin-bottom: 0px; } } .form-group { margin-bottom: pxrem(15); label { @include font-sans-semibold; font-size: pxrem(14); @include media-breakpoint-up(md) { text-align: right; } } .form-control { font-size: pxrem(14); transition: border-color 150ms, box-shadow 150ms; &:focus { border-color: $c-dashboard-dark; box-shadow: inset 0 pxrem(1) pxrem(1) fade-out(#000, 0.925), 0 0 pxrem(8) fade-out($c-dashboard-dark, 0.4); } } &.has-error .form-control { border-color: $c-dashboard-error; } .checkbox { position: relative; display: inline-block; min-height: 0px; padding-top: 0px; padding-left: pxrem(22); user-select: none; span, input { position: absolute; top: 50%; left: 0px; transform: translateY(-50%); display: block; width: pxrem(16); height: pxrem(16); } span { border: 1px solid lighten($c-text, 50%); border-radius: pxrem(4); background-color: $c-input-bg; pointer-events: none; &:after { content: ""; position: absolute; top: 0px; left: 0px; transform: scale(0); display: block; width: 100%; height: 100%; background-image: url("/img/dashboard/checkmark.svg"); background-position: center center; background-size: 65% auto; background-repeat: no-repeat; opacity: 0; transition: transform 150ms, opacity 150ms; } } input { margin: 0px; padding: 0px; opacity: 0; cursor: pointer; &:checked + span:after { transform: scale(1); opacity: 1; } } } .text-muted { font-size: pxrem(10); text-transform: uppercase; } } .dashboard-credits { padding: $grid-gutter-width; h2 { @include font-sans-semibold; margin-bottom: pxrem(15); font-size: pxrem(18); text-transform: uppercase; &:not(:first-child) { margin-top: pxrem(25); } } ul { margin-bottom: 0px; padding-left: pxrem(20); li a { color: $c-text; } } } } } .btn { border-color: darken($c-dashboard-dark, 5%); background-color: $c-dashboard-dark; color: $c-text-light; font-size: pxrem(14); transition: background-color 100ms; &:hover { background-color: darken($c-dashboard-dark, 5%); } &:focus { background-color: lighten($c-dashboard-dark, 5%); } &, &:hover, &:focus { text-decoration: none; } &.vertical-margin { margin-top: pxrem(3); margin-bottom: pxrem(3); } &.btn-warning, &.btn-danger { &:hover, &:focus, &:active { color: $c-text-light !important; } } &.btn-warning { border-color: darken($c-dashboard-edit, 10%); background-color: $c-dashboard-edit; &:hover { background-color: darken($c-dashboard-edit, 5%); } &:focus { background-color: lighten($c-dashboard-edit, 5%); } } &.btn-danger { border-color: darken($c-dashboard-delete, 10%); background-color: $c-dashboard-delete; &:hover { background-color: darken($c-dashboard-delete, 5%); } &:focus { background-color: lighten($c-dashboard-delete, 5%); } } &.btn-secondary { border-color: darken($c-dashboard-light, 10%); background-color: $c-dashboard-light; color: $c-text; &:hover { background-color: darken($c-dashboard-light, 5%); } &:focus { background-color: lighten($c-dashboard-light, 5%); } } &.btn-link { color: $c-dashboard-light; } &.btn-outline { background-color: transparent; color: $c-text; } &.btn-inactive { pointer-events: none; } &.btn-disabled { opacity: 0.5; pointer-events: none; } } .view-table-container { @include media-breakpoint-down(md) { padding: pxrem(10) pxrem(5); } .table { margin-bottom: 0px; border-bottom-color: transparent; > thead > tr { @include media-breakpoint-down(xl) { display: none; } > th { border-top: 0; border-bottom: 1px solid #666; } } > tbody > tr { @include media-breakpoint-down(xl) { &:not(:first-child) { border-top: 1px solid #ddd; } } @include media-breakpoint-up(xl) { border-bottom: 1px solid #ddd; &:last-child { border-bottom-color: transparent; } } > td { @include media-breakpoint-down(xl) { display: block; border-top: 0; &:first-child { padding-top: pxrem(20); } &:last-child { padding-bottom: pxrem(20); } } @include media-breakpoint-up(xl) { padding: pxrem(20) pxrem(8); } .mobile-heading { @include media-breakpoint-up(xl) { display: none; } } } &:last-child > td { @include media-breakpoint-up(xl) { padding-bottom: 0px; } } } } } .pagination-navigation-bar { margin-bottom: pxrem(10); margin-left: pxrem(4); display: flex; width: calc(100% - #{pxrem(8)}); @include media-breakpoint-down(sm) { flex-direction: column; } @include media-breakpoint-up(sm) { justify-content: space-between; } &-arrow { position: relative; font-size: 0px; @include media-breakpoint-down(sm) { height: pxrem(35); } &.prev { @include media-breakpoint-down(sm) { margin-bottom: pxrem(8); } @include media-breakpoint-up(sm) { margin-right: $half-gutter-width; } } &.next { transform: rotate(180deg); @include media-breakpoint-down(sm) { margin-top: pxrem(8); } @include media-breakpoint-up(sm) { margin-left: $half-gutter-width; } } &:before, &:after { content: ""; position: absolute; top: calc(50% - #{pxrem(1px)}); left: 25%; width: pxrem(16); height: pxrem(2); background-color: $c-text-light; @include media-breakpoint-down(sm) { left: 50%; } } &:before { transform: rotate(-45deg); transform-origin: bottom left; } &:after { transform: rotate(45deg); transform-origin: top left; } } &-page-count { display: flex; @include media-breakpoint-down(sm) { justify-content: center; } .btn { $spacing: pxrem(3); &:not(:first-child) { margin-left: $spacing; } &:not(:last-child) { margin-right: $spacing; } &.space { position: relative; &:after { content: "..."; position: absolute; top: 0px; line-height: pxrem(25); } &:first-child { margin-right: pxrem(20); &:after { left: calc(100% + #{pxrem(7)}); } } &:last-child { margin-left: pxrem(20); &:after { right: calc(100% + #{pxrem(7)}); } } } } } } .list-group { margin-bottom: 0px; &.menu-list .list-group-item { position: relative; padding: pxrem(10) pxrem(15); &-link { position: absolute; top: 0px; left: 0px; display: block; width: 100%; height: 100%; background-color: transparent; color: $c-text; transition: background-color 150ms; &:hover { background-color: fade-out(#000, 0.97); text-decoration: none; } } } &.edit-list { .list-group-item { padding-top: pxrem(4); padding-bottom: pxrem(4); @include media-breakpoint-down(md) { margin: pxrem(3); } @include media-breakpoint-up(md) { display: flex; } &.sortable { @include media-breakpoint-down(md) { padding-left: pxrem(50); } } .title-column { padding-top: pxrem(6); padding-bottom: pxrem(6); padding-left: 0px; font-family: "Lucida Console", Monaco, monospace; @include media-breakpoint-down(md) { text-align: center; } @include media-breakpoint-up(md) { overflow: hidden; display: flex; flex-grow: 1; white-space: nowrap; } .sort-icon { margin-right: pxrem(10); display: inline-block; opacity: 1; transition: opacity 100ms; cursor: grab; @include media-breakpoint-down(md) { position: absolute; top: 50%; left: pxrem(20); transform: translateY(-50%); } &-inner { position: relative; top: pxrem(2); display: inline-block; width: pxrem(12); height: pxrem(14); &-bar { position: absolute; left: 0px; width: 100%; height: pxrem(2); background-color: $c-text; &:nth-child(1) { top: pxrem(2); } &:nth-child(2) { top: 50%; transform: translateY(-50%); } &:nth-child(3) { bottom: pxrem(2); } } } } .column { display: inline-block; .image-preview { @include aspect-ratio(16, 9); display: block; background-position: center center; background-size: cover; background-repeat: no-repeat; @include media-breakpoint-down(md) { width: pxrem(150); max-width: 100%; } @include media-breakpoint-up(md) { width: pxrem(43); } } } .spacer { @include media-breakpoint-down(md) { display: block; font-size: 0; } @include media-breakpoint-up(md) { margin: 0px pxrem(5); display: inline-block; } } } .button-column { padding-right: 0px; @include media-breakpoint-down(md) { padding-bottom: pxrem(5); padding-left: 0px; text-align: center; } @include media-breakpoint-up(md) { padding-left: pxrem(5); flex-shrink: 0; text-align: right; } .btn { margin: pxrem(5) pxrem(3); min-width: pxrem(70); height: pxrem(26); padding-top: pxrem(1); padding-bottom: pxrem(2); @include media-breakpoint-down(md) { min-width: 33%; } } } } &.filtered .list-group-item .title-column .sort-icon { opacity: 0.5; pointer-events: none; } } } form { margin-top: pxrem(10); .form-title { @include font-sans-semibold; margin-top: 0px; margin-bottom: pxrem(15); font-size: pxrem(14); text-transform: uppercase; } &.edit-item { $label-height: pxrem(35); .CodeMirror { height: pxrem(300); padding: pxrem(5); &-code { margin-bottom: pxrem(10); } } .container-fluid { @include media-breakpoint-down(sm) { padding: 0px; } } .list { margin-bottom: pxrem(15); padding-bottom: pxrem(15); border-bottom: 1px solid fade-out($c-text, 0.9); &-template, &-data { display: none; } &-items-row { position: relative; margin-bottom: pxrem(10); padding: pxrem(8) pxrem(8) pxrem(8) pxrem(33); border-radius: pxrem(6); background-color: darken($c-input-bg, 2%); @include media-breakpoint-up(lg) { display: flex; padding: pxrem(5) pxrem(5) pxrem(5) pxrem(30); align-items: center; } &:not(:last-child) { @include media-breakpoint-down(lg) { margin-bottom: pxrem(15); } } .sort-icon { position: absolute; top: pxrem(11); left: pxrem(10); display: inline-block; opacity: 1; transition: opacity 100ms; cursor: grab; @include media-breakpoint-up(lg) { top: pxrem(9); } &-inner { position: relative; top: pxrem(2); display: inline-block; width: pxrem(12); height: pxrem(14); &-bar { position: absolute; left: 0px; width: 100%; height: pxrem(2); background-color: $c-text; &:nth-child(1) { top: pxrem(2); } &:nth-child(2) { top: 50%; transform: translateY(-50%); } &:nth-child(3) { bottom: pxrem(2); } } } } &-content, &-button { @include media-breakpoint-down(lg) { width: 100%; } &:not(:last-child) { @include media-breakpoint-down(lg) { margin-bottom: pxrem(10); } @include media-breakpoint-up(lg) { margin-right: pxrem(5); } } &:not(:first-child) { @include media-breakpoint-up(lg) { margin-left: pxrem(5); } } } &-content { position: relative; &.wide { width: 100%; } &-inner { $row-height: pxrem(36); display: flex; height: $row-height; align-items: center; .list-input { margin-bottom: 0px; height: auto; } .image-link { margin-right: pxrem(10); display: block; width: pxrem(50); height: $row-height; background-color: $c-input-bg; &:not(.active) { display: none; } .image-preview { display: block; width: 100%; height: 100%; object-fit: cover; } } } } &-buttons { @include media-breakpoint-up(lg) { display: flex; flex-grow: 1; justify-content: flex-end; } &-delete { min-width: pxrem(70); height: $label-height; border: 1px solid fade-out($c-text, 0.75); border-radius: pxrem(4); background-color: $c-dashboard-delete; color: $c-text-light; } } } &-add-button { height: $label-height; border: 1px solid fade-out($c-text, 0.75); border-radius: pxrem(4); @include media-breakpoint-down(lg) { margin-top: pxrem(15); width: 100%; } } } .picker__holder { overflow-y: hidden; .picker__button--today { white-space: nowrap; } .picker__select--year, .picker__select--month, .picker__month, .picker__day, .picker__weekday, .picker__footer { @include media-breakpoint-down(md) { font-size: pxrem(16); } } .picker__select--year, .picker__select--month { width: auto; height: 1.5em; padding: 0px; } } label { min-height: $label-height; line-height: $label-height; @include media-breakpoint-up(md) { margin-bottom: 0px; } } .text-display, .mkd-editor-container, input, textarea, select { margin-bottom: pxrem(15); } input, textarea { display: block; width: 100%; &:not([type="file"]) { padding: pxrem(5) pxrem(8); border: 1px solid darken($c-dashboard-light, 10%); border-radius: pxrem(2); transition: border-color 150ms; &.error { border-color: $c-dashboard-error; } } &[type="file"] { overflow: hidden; max-width: 100%; height: $label-height; font-size: pxrem(14); } &.date-picker { cursor: pointer; } } textarea { resize: none; min-height: pxrem(175); } select { max-width: 100%; } .current-image { margin-bottom: pxrem(15); display: block; width: pxrem(125); max-width: 100%; } .edit-button { margin-bottom: $half-gutter-width; display: inline-block; padding: pxrem(5) pxrem(10); border-radius: pxrem(5); text-transform: uppercase; text-decoration: none; transition: background-color 150ms; cursor: pointer; &:hover, &:focus { text-decoration: none; } &.view { border: 1px solid darken($c-dashboard-dark, 5%); background-color: $c-dashboard-dark; color: $c-text-light; &:hover { background-color: lighten($c-dashboard-dark, 5%); } } &.delete { border: 1px solid darken($c-dashboard-delete, 5%); background-color: $c-dashboard-delete; color: $c-text-light; &:hover { background-color: lighten($c-dashboard-delete, 5%); } } } .back-button, .submit-button { margin: pxrem(20) pxrem(15) pxrem(15) pxrem(15); @include media-breakpoint-down(lg) { margin-right: 0px; margin-left: 0px; display: block; width: 100%; } &:first-child { margin-left: 0px; @include media-breakpoint-down(lg) { margin-top: pxrem(20); margin-bottom: pxrem(5); } } &:last-child { @include media-breakpoint-down(lg) { margin-top: pxrem(10); margin-bottom: pxrem(20); } @include media-breakpoint-down(sm) { margin-bottom: 0px; } } } .submit-button { transition: opacity 150ms; &.no-input { opacity: 0.65; pointer-events: none; } } } } .dashboard-settings-container { @include media-breakpoint-up(lg) { display: flex; flex-direction: row; } form { &.user-profile-image { display: block; width: 100%; max-width: pxrem(150); @include media-breakpoint-down(lg) { margin: $grid-gutter-width auto; } @include media-breakpoint-up(lg) { flex-shrink: 0; } .image-display { @include aspect-ratio(1, 1); position: relative; width: 100%; border: 1px solid darken($c-dashboard-light, 10%); border-radius: pxrem(3); background-position: center center; background-size: cover; background-repeat: no-repeat; } .image-buttons { margin-top: pxrem(20); display: flex; justify-content: space-around; input { display: none; } .image-upload-button, .image-delete-button { display: block; width: pxrem(40); height: pxrem(40); min-height: 0; border: 1px solid darken($c-dashboard-light, 14%); border-radius: pxrem(3); background-color: darken($c-dashboard-light, 10%); line-height: 1; cursor: pointer; &:hover { background-color: darken($c-dashboard-light, 7%); } } .image-upload-button { display: flex; justify-content: center; align-items: center; transition: background-color 150ms; } .image-delete-button { opacity: 1; transition: background-color 150ms, opacity 150ms; &.inactive { opacity: 0.35; pointer-events: none; } } } } &.user-profile-update { @include media-breakpoint-down(lg) { border-top: 1px solid darken($c-dashboard-light, 10%); border-bottom: 1px solid darken($c-dashboard-light, 10%); } @include media-breakpoint-up(lg) { margin-right: $grid-gutter-width; margin-left: $grid-gutter-width; width: 100%; padding: 0px $grid-gutter-width; flex-grow: 1; border-right: 1px solid darken($c-dashboard-light, 10%); border-left: 1px solid darken($c-dashboard-light, 10%); } } &.user-password-update { @include media-breakpoint-up(lg) { width: pxrem(225); flex-shrink: 0; } } .form-title { @include media-breakpoint-down(lg) { margin-top: pxrem(25); margin-bottom: pxrem(20); text-align: center; } } .submit-button { @include media-breakpoint-down(md) { margin-right: auto; margin-left: auto; width: 100%; } @include media-breakpoint-up(md) { float: none; margin: $half-gutter-width 0px; } } } } #loading-modal { z-index: 1000; position: fixed; top: 0px; left: 0px; visibility: hidden; width: 100%; height: 100%; background-color: fade-out(lighten($c-dashboard-light, 1%), 0.6); opacity: 0; transition: opacity 250ms; .spinner-container { position: absolute; top: 50%; left: 50%; transform: translateX(-50%) translateY(-50%); } } .modal { z-index: 1000; position: fixed; top: 0px; left: 0px; visibility: hidden; display: flex; width: 100%; height: 100%; padding: $grid-gutter-width; justify-content: center; align-items: center; background-color: fade-out(lighten($c-dashboard-light, 1%), 0.3); opacity: 0; transition: opacity 250ms; .card { position: relative; margin: 0px; width: 100%; max-width: pxrem(500); .btn { margin: pxrem(20) pxrem(15); display: inline-block; &:not(:last-child) { margin-bottom: 0px; } } } &.alert .card { .message { min-height: pxrem(50); padding: pxrem(15) pxrem(20); text-align: left; @include media-breakpoint-up(md) { padding-right: pxrem(85); } } .btn { @include media-breakpoint-down(md) { margin-top: 0px; } @include media-breakpoint-up(md) { position: absolute; top: 50%; right: 0px; transform: translateY(-50%); } } } }