hypothetical/resources/sass/dashboard.scss

1149 lines
28 KiB
SCSS
Vendored

// Libraries
@import "bootstrap/scss/bootstrap.scss";
// Core
@import "_fonts";
// 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: #3e6087;
$c-dashboard-light: #f1f1f1;
$c-dashboard-edit: #87823e;
$c-dashboard-delete: #87483e;
//
// Main Dashboard Styles
//
* {
outline: none !important;
}
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/star-bg.svg");
background-position: center top;
background-size: 65px auto;
background-repeat: repeat;
&:after {
content: "";
position: absolute;
top: 0px;
left: 0px;
width: 100%;
height: 100%;
background-color: fade-out(#fff, 0.02);
}
}
.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(md) {
padding-right: 8px;
padding-left: 8px;
}
@include media-breakpoint-down(sm) {
margin-bottom: 0px;
}
&-brand {
@include font-sans-bold;
overflow: hidden;
max-width: calc(100vw - 60px);
color: $c-text-light;
white-space: nowrap;
&:hover, &:focus, &:active {
color: $c-text-light;
}
@include media-breakpoint-down(sm) {
font-size: 12px;
}
}
&-toggler {
position: absolute;
top: 3px;
right: 0px;
border: 0;
@include media-breakpoint-up(md) {
top: 10px;
}
&-icon {
position: relative;
&-bar {
$v-inset: 6px;
$h-inset: 3px;
position: absolute;
left: $h-inset;
width: calc(100% - #{$h-inset * 2});
height: 2px;
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 {
cursor: pointer;
}
}
.dropdown-menu {
padding: 0px;
border-top-right-radius: 0;
border-top-left-radius: 0;
@include media-breakpoint-up(lg) {
top: 45px;
}
@include media-breakpoint-down(md) {
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(md) {
padding-right: 8px;
padding-left: 8px;
background-color: darken($c-dashboard-dark, 2%);
color: $c-text-light-inactive;
}
&.active, &:hover, &:focus, &:active {
color: $c-text;
@include media-breakpoint-down(md) {
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: 8px ($grid-gutter-width / 2);
background-color: $c-dashboard-dark;
text-align: right;
a {
color: $c-text-light-inactive;
transition: color 150ms;
&:hover, &:focus {
text-decoration: none;
}
&.active {
color: $c-text-light;
}
}
}
.card {
margin-top: 20px;
margin-bottom: 20px;
> .card-header {
@include font-sans-bold;
position: relative;
padding: 9px 15px;
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: 14px;
.dashboard-heading {
position: absolute;
top: 50%;
right: 8px;
transform: translateY(-50%);
.btn {
min-width: 70px;
height: 26px;
padding-top: 1px;
padding-bottom: 2px;
}
a {
color: $c-text;
text-decoration: none;
}
}
}
.card-body {
padding: 15px;
background-color: lighten($c-dashboard-light, 1%);
&.dashboard {
@include media-breakpoint-down(sm) {
padding: 10px 8px 12px 8px;
}
}
.search {
margin-bottom: 10px;
width: 100%;
padding: 3px 8px;
border: 1px solid fade-out(#000, 0.875);
border-radius: 0.25rem;
@include media-breakpoint-down(sm) {
margin: 3px 3px 0px 3px;
width: calc(100% - 6px);
}
}
.help-text {
margin-top: 10px;
margin-bottom: 10px;
padding: 5px 10px;
border: 1px solid darken($c-dashboard-dark, 5%);
border-radius: 5px;
background-color: $c-dashboard-dark;
color: $c-text-light;
}
.form-group {
margin-bottom: 15px;
label {
@include font-sans-semibold;
font-size: 14px;
@include media-breakpoint-up(md) {
text-align: right;
}
}
.form-control {
font-size: 14px;
transition: border-color 150ms, box-shadow 150ms;
&:focus {
border-color: $c-dashboard-dark;
box-shadow: inset 0 1px 1px fade-out(#000, 0.925), 0 0 8px 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: 22px;
user-select: none;
span, input {
position: absolute;
top: 50%;
left: 0px;
transform: translateY(-50%);
display: block;
width: 16px;
height: 16px;
}
span {
border: 1px solid lighten($c-text, 50%);
border-radius: 4px;
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/icons/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: 10px;
text-transform: uppercase;
}
}
.dashboard-credits {
padding: $grid-gutter-width;
h2 {
@include font-sans-semibold;
margin-bottom: 15px;
font-size: 18px;
text-transform: uppercase;
&:not(:first-child) {
margin-top: 25px;
}
}
ul {
margin-bottom: 0px;
padding-left: 20px;
li a {
color: $c-text;
}
}
}
}
}
.btn {
border-color: darken($c-dashboard-dark, 5%);
background-color: $c-dashboard-dark;
color: $c-text-light;
font-size: 14px;
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: 3px;
margin-bottom: 3px;
}
&.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;
}
}
.view-table-container {
@include media-breakpoint-down(sm) {
padding: 10px 5px;
}
.table {
margin-bottom: 0px;
> thead > tr > th {
border-top: 0;
border-bottom: 1px solid #666;
}
@include media-breakpoint-down(lg) {
tr {
&.heading-row {
display: none;
}
&:not(:first-child) {
border-top: 1px solid #ddd;
}
}
> tbody > tr {
> td {
display: block;
border-top: 0;
&:first-child {
padding-top: 20px;
}
&:last-child {
padding-bottom: 20px;
}
}
&:first-child > td:first-child {
padding-top: 0px;
}
&:last-child > td:last-child {
padding-bottom: 0px;
}
}
}
@include media-breakpoint-up(xl) {
> tbody > tr > td { padding: 20px 8px; }
> tbody > tr:last-child > td { padding-bottom: 0px; }
.mobile-heading { display: none; }
}
}
}
.list-group {
margin-bottom: 0px;
&.menu-list .list-group-item {
position: relative;
padding: 10px 15px;
&-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: 4px;
padding-bottom: 4px;
@include media-breakpoint-down(sm) {
margin: 3px;
}
@include media-breakpoint-up(md) {
display: flex;
}
&.sortable {
@include media-breakpoint-down(sm) {
padding-left: 50px;
}
}
.title-column {
padding-top: 6px;
padding-bottom: 6px;
padding-left: 0px;
font-family: "Lucida Console", Monaco, monospace;
@include media-breakpoint-down(sm) {
text-align: center;
}
@include media-breakpoint-up(md) {
overflow: hidden;
flex-grow: 1;
white-space: nowrap;
}
.sort-icon {
margin-right: 10px;
display: inline-block;
opacity: 1;
transition: opacity 100ms;
cursor: grab;
@include media-breakpoint-down(sm) {
position: absolute;
top: 50%;
left: 20px;
transform: translateY(-50%);
}
&-inner {
position: relative;
top: 2px;
display: inline-block;
width: 12px;
height: 14px;
&-bar {
position: absolute;
left: 0px;
width: 100%;
height: 2px;
background-color: $c-text;
&:nth-child(1) {
top: 2px;
}
&:nth-child(2) {
top: 50%;
transform: translateY(-50%);
}
&:nth-child(3) {
bottom: 2px;
}
}
}
}
.column {
display: inline-block;
}
.spacer {
@include media-breakpoint-down(sm) {
display: block;
font-size: 0;
}
@include media-breakpoint-up(md) {
display: inline-block;
}
}
}
.button-column {
padding-right: 0px;
@include media-breakpoint-down(sm) {
padding-bottom: 5px;
padding-left: 0px;
text-align: center;
}
@include media-breakpoint-up(md) {
padding-left: 5px;
flex-shrink: 0;
text-align: right;
}
.btn {
margin: 5px 3px;
min-width: 70px;
height: 26px;
padding-top: 1px;
padding-bottom: 2px;
@include media-breakpoint-down(sm) {
min-width: 33%;
}
}
}
}
&.filtered .list-group-item .title-column .sort-icon {
opacity: 0.5;
pointer-events: none;
}
}
}
form {
margin-top: 10px;
.form-title {
@include font-sans-semibold;
margin-top: 0px;
margin-bottom: 15px;
font-size: 14px;
text-transform: uppercase;
}
&.edit-item {
$label-height: 30px;
.CodeMirror {
height: 300px;
padding: 5px;
&-code {
margin-bottom: 10px;
}
}
.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(sm) {
font-size: 16px;
}
}
.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, select {
margin-bottom: 15px;
}
input {
display: block;
width: 100%;
&:not([type="file"]) {
padding: 5px 8px;
border: 1px solid darken($c-dashboard-light, 10%);
border-radius: 2px;
transition: border-color 150ms;
&.error {
border-color: $c-dashboard-error;
}
}
&[type="file"] {
overflow: hidden;
max-width: 100%;
height: $label-height;
font-size: 14px;
}
&.date-picker {
cursor: pointer;
}
}
.current-image {
margin-bottom: 15px;
display: block;
width: 125px;
max-width: 100%;
}
.edit-button {
margin-bottom: ($grid-gutter-width / 2);
display: inline-block;
padding: 5px 10px;
border-radius: 5px;
text-transform: uppercase;
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 {
float: left;
}
.submit-button {
float: right;
transition: opacity 150ms;
&.no-input {
opacity: 0.65;
pointer-events: none;
}
}
.back-button, .submit-button {
margin: 20px 15px 15px 15px;
@include media-breakpoint-down(sm) {
float: none;
width: calc(100% - 30px);
&:first-child {
margin-top: 20px;
margin-bottom: 5px;
}
&:last-child {
margin-top: 5px;
margin-bottom: 20px;
}
}
}
}
}
.dashboard-settings-container {
@include media-breakpoint-up(lg) {
display: flex;
flex-direction: row;
}
form {
&.user-profile-image {
display: block;
width: 100%;
max-width: 150px;
@include media-breakpoint-down(md) {
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: 3px;
background-position: center center;
background-size: cover;
background-repeat: no-repeat;
}
.image-buttons {
margin-top: 20px;
display: flex;
justify-content: space-around;
input {
display: none;
}
.image-upload-button, .image-delete-button {
display: block;
width: 40px;
height: 40px;
min-height: 0;
border: 1px solid darken($c-dashboard-light, 14%);
border-radius: 3px;
background-color: darken($c-dashboard-light, 10%);
background-position: center center;
background-size: 50% auto;
background-repeat: no-repeat;
font-size: 0px;
line-height: 1;
cursor: pointer;
&:hover {
background-color: darken($c-dashboard-light, 7%);
}
}
.image-upload-button {
background-image: url("/img/dashboard/icons/upload.svg");
transition: background-color 150ms;
}
.image-delete-button {
background-image: url("/img/dashboard/icons/trash-alt.svg");
opacity: 1;
transition: background-color 150ms, opacity 150ms;
&.inactive {
opacity: 0.35;
pointer-events: none;
}
}
}
}
&.user-profile-update {
@include media-breakpoint-down(md) {
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: 225px;
flex-shrink: 0;
}
}
.form-title {
@include media-breakpoint-down(md) {
margin-top: 25px;
margin-bottom: 20px;
text-align: center;
}
}
.submit-button {
@include media-breakpoint-down(sm) {
margin-right: auto;
margin-left: auto;
width: 100%;
}
@include media-breakpoint-up(md) {
float: none;
margin: ($grid-gutter-width / 2) 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.6);
opacity: 0;
transition: opacity 250ms;
.card {
position: relative;
margin: 0px;
max-width: 500px;
.btn {
margin: 20px 15px;
display: inline-block;
&:not(:last-child) {
margin-bottom: 0px;
}
}
}
&.alert .card {
.message {
min-height: 50px;
padding: 15px 20px;
text-align: left;
@include media-breakpoint-up(md) {
padding-right: 85px;
}
}
.btn {
@include media-breakpoint-down(sm) {
margin-top: 0px;
}
@include media-breakpoint-up(md) {
position: absolute;
top: 50%;
right: 0px;
transform: translateY(-50%);
}
}
}
}
.fa {
position: relative;
vertical-align: bottom;
&:after {
content: "";
position: absolute;
top: 0px;
left: 0px;
display: block;
width: 100%;
height: 100%;
background-position: center center;
background-size: 10px auto;
background-repeat: no-repeat;
}
&.fa-arrows-alt:after {
background-image: url("/img/dashboard/icons/arrows-alt.svg");
}
&.fa-bold:after {
background-image: url("/img/dashboard/icons/bold.svg");
}
&.fa-code:after {
background-image: url("/img/dashboard/icons/code.svg");
}
&.fa-columns:after {
background-image: url("/img/dashboard/icons/columns.svg");
}
&.fa-eraser:after {
background-image: url("/img/dashboard/icons/eraser.svg");
}
&.fa-eye:after {
background-image: url("/img/dashboard/icons/eye.svg");
}
&.fa-header:after {
background-image: url("/img/dashboard/icons/header.svg");
}
&.fa-italic:after {
background-image: url("/img/dashboard/icons/italic.svg");
}
&.fa-link:after {
background-image: url("/img/dashboard/icons/link.svg");
}
&.fa-list-ol:after {
background-image: url("/img/dashboard/icons/list-ol.svg");
}
&.fa-list-ul:after {
background-image: url("/img/dashboard/icons/list-ul.svg");
}
&.fa-minus:after {
background-image: url("/img/dashboard/icons/minus.svg");
}
&.fa-picture-o:after {
background-image: url("/img/dashboard/icons/picture-o.svg");
}
&.fa-question-circle:after {
background-image: url("/img/dashboard/icons/question-circle.svg");
}
&.fa-quote-left:after {
background-image: url("/img/dashboard/icons/quote-left.svg");
}
&.fa-repeat:after {
background-image: url("/img/dashboard/icons/repeat.svg");
}
&.fa-star:after {
background-image: url("/img/dashboard/icons/star.svg");
}
&.fa-strikethrough:after {
background-image: url("/img/dashboard/icons/strikethrough.svg");
}
&.fa-table:after {
background-image: url("/img/dashboard/icons/table.svg");
}
&.fa-undo:after {
background-image: url("/img/dashboard/icons/undo.svg");
}
}