/* ---------------------------------------------------------------------------- * Easy!Appointments - Online Appointment Scheduler * * @package EasyAppointments * @author A.Tselegidis * @copyright Copyright (c) Alex Tselegidis * @license https://opensource.org/licenses/GPL-3.0 - GPLv3 * @link https://easyappointments.org * @since v1.5.0 * ---------------------------------------------------------------------------- */ // Materia 5.1.3 // Bootswatch $theme: 'materia' !default; // // Color system // $white: #fff !default; $gray-100: #f8f9fa !default; $gray-200: #eee !default; $gray-300: #dee2e6 !default; $gray-400: #ced4da !default; $gray-500: #bbb !default; $gray-600: #666 !default; $gray-700: #444 !default; $gray-800: #222 !default; $gray-900: #212121 !default; $black: #000 !default; $blue: #2196f3 !default; $indigo: #6610f2 !default; $purple: #6f42c1 !default; $pink: #e83e8c !default; $red: #e51c23 !default; $orange: #fd7e14 !default; $yellow: #ff9800 !default; $green: #4caf50 !default; $teal: #20c997 !default; $cyan: #9c27b0 !default; $primary: $blue !default; $secondary: $white !default; $success: $green !default; $info: $cyan !default; $warning: $yellow !default; $danger: $red !default; $light: $gray-100 !default; $dark: $gray-800 !default; $min-contrast-ratio: 2.15 !default; $enable-gradients: true !default; // Body $body-color: $gray-700 !default; // Fonts // stylelint-disable-next-line value-keyword-case $font-family-sans-serif: Roboto, -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Helvetica Neue', Arial, sans-serif !default; $font-size-base: 1rem !default; $font-weight-base: 400 !default; // Buttons $input-btn-padding-y: 0.8rem !default; $input-btn-padding-x: 1rem !default; // Forms $input-padding-y: 1rem !default; $input-padding-x: 0% !default; $input-padding-y-sm: 0% !default; $input-padding-x-sm: 0% !default; $input-padding-y-lg: ($font-size-base * 1.25) !default; $input-padding-x-lg: 0% !default; $input-bg: transparent !default; $input-disabled-bg: transparent !default; $input-color: $gray-600 !default; $input-border-color: transparent !default; $input-border-width: 0% !default; $input-border-radius: 0% !default; $input-border-radius-lg: 0% !default; $input-border-radius-sm: 0% !default; $input-placeholder-color: rgba(0, 0, 0, 0.4) !default; $input-group-addon-bg: transparent !default; // Navs $nav-link-disabled-color: $gray-500 !default; $nav-tabs-border-color: transparent !default; // Navbar $navbar-padding-y: 1rem !default; $navbar-dark-color: rgba($white, 0.75) !default; $navbar-dark-hover-color: $white !default; // Cards $card-border-width: 0 !default; $card-border-color: transparent !default; // Tooltips $tooltip-bg: $gray-700 !default; // Modals $modal-content-border-color: transparent !default; // Progress bars $progress-height: 0.375rem !default; $progress-border-radius: 0% !default; // Close $btn-close-color: $white !default; $btn-close-opacity: 0.6 !default; $btn-close-hover-opacity: 1 !default; @import '../../../node_modules/bootstrap/scss/bootstrap'; // Materia 5.1.3 // Bootswatch // Variables $web-font-path: 'https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500;700&display=swap' !default; @if $web-font-path { @import url($web-font-path); } // Mixins @mixin ripple($color) { position: relative; &::before { position: absolute; top: 0; left: 0; display: block; width: 100%; height: 100%; margin-left: 0; pointer-events: none; content: ''; background-position: 50%; background-size: 1000% 1000%; border: none; opacity: 0; transition: background 0.5s, opacity 1s; @include gradient-radial($color 10%, transparent 10.01%); } &:active::before { background-size: 0 0; opacity: 0.2; transition: none; } &.disabled, &[disabled] { &::before { display: none; } } } @mixin btn($class, $bg, $color) { .btn-#{$class} { &:focus { background-color: $bg; box-shadow: 0 0 0 2px rgba(204, 204, 204, 0.5); } &:hover, &:active:hover { background-color: shade-color($bg, 12%); } &:active { box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.4); } @include ripple($color); } .btn-outline-#{$class} { @include ripple($color); } } .dropdown-toggle::after, .dropup .dropdown-toggle::after, .dropstart .dropdown-toggle::after, .dropend .dropdown-toggle::after { border-width: 4px; } // Navbar .navbar { border: none; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3); &-brand { font-size: 24px; } &-nav .nav-link { padding-top: 0.9rem; padding-bottom: 0.9rem; } &.bg-dark, &.bg-primary { input[type='search'], input[type='text'], input[type='password'], input[type='email'], input[type='number'], input[type='tel'] { color: $white; box-shadow: inset 0 -1px 0 rgba(255, 255, 255, 0.5); &:focus { box-shadow: inset 0 -2px 0 $white; } &::placeholder { color: rgba(255, 255, 255, 0.5); } } } } // Buttons @include btn(primary, $primary, $white); @include btn(secondary, $secondary, $gray-500); @include btn(success, $success, $white); @include btn(info, $info, $white); @include btn(warning, $warning, $white); @include btn(danger, $danger, $white); @include btn(dark, $dark, $white); @include btn(light, $light, $white); .btn { text-transform: uppercase; border: none; box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4); transition: color 0.4s, background-color 0.4s, border-color 0.4s, box-shadow 0.4s; &-link { color: $link-color; box-shadow: none; &:hover, &:focus { color: $link-hover-color; text-decoration: $link-hover-decoration; box-shadow: none; } &.disabled, // Although btn-link is intended for buttons, which want to look like link, I include here a.disable for the sake of consistency &[disabled], fieldset[disabled] & { &:hover, &:active:hover { color: $btn-link-disabled-color; text-decoration: none; } } } &-secondary { &.disabled, &[disabled], fieldset[disabled] & { color: rgba(0, 0, 0, 0.4); background-color: rgba(0, 0, 0, 0.1); opacity: 1; &:hover, &:focus { background-color: rgba(0, 0, 0, 0.1); } } } &-outline-secondary { color: $gray-300; border-color: $gray-200; } &-warning { color: $white; } } .btn-group { .btn + .btn, .btn + .btn-group, .btn-group + .btn, .btn-group + .btn-group { margin-left: 0; } &-vertical { > .btn + .btn, > .btn + .btn-group, > .btn-group + .btn, > .btn-group + .btn-group { margin-top: 0; } } .btn + .btn, .btn + .btn-group > .dropdown-toggle { box-shadow: 1px 1px 4px rgba(0, 0, 0, 0.4); } } .border-secondary { border: 1px solid #dfdfdf !important; } // Typography body, input, button { letter-spacing: 0.1px; } p { margin: 0 0 1em; } .text-secondary { color: $gray-500 !important; } // Tables .table-hover { > tbody > tr, > tbody > tr > th, > tbody > tr > td { transition: background-color 0.2s, color 0.2s; } } .thead-inverse th { color: $white; background-color: $primary; } // Forms .col-form-label { font-size: 16px; &-sm { font-size: $font-size-sm; } &-lg { font-size: $font-size-lg; } } textarea, textarea.form-control, input.form-control, input[type='text'], input[type='password'], input[type='email'], input[type='number'], [type='text'].form-control, [type='password'].form-control, [type='email'].form-control, [type='tel'].form-control, [contenteditable].form-control { box-shadow: inset 0 -1px 0 #ddd; transition: box-shadow 0.2s; &:focus { box-shadow: inset 0 -2px 0 $primary; } &[disabled], &[readonly] { border-bottom: 1px dotted #ddd; box-shadow: none; } &[disabled], &[disabled]::placeholder { color: #ddd; } } select, select.form-control { padding: 0.5rem 0; background-image: escape-svg( url("data:image/svg+xml,") ); background-repeat: no-repeat; background-position: right center; background-size: 8px 4px; box-shadow: inset 0 -1px 0 #ddd; appearance: none; &.input { &-sm { font-size: $font-size-sm; } &-lg { font-size: $font-size-lg; } } &:focus { background-image: escape-svg( url("data:image/svg+xml,") ); box-shadow: inset 0 -2px 0 $primary; } &[multiple] { background: none; } } .form-check-input { width: 1.25em; height: 1.25em; margin-top: 1px; border: 2px solid $gray-400; &:checked[type='radio'] { background-image: escape-svg( url("data:image/svg+xml,") ), var(--bs-gradient); background-size: 1.8em; } } .form-switch { .form-check-input { position: relative; height: 0.8em; margin-top: 0.29em; background-color: $gray-400; background-image: none; border: none; &:focus { box-shadow: none; } &::before { position: absolute; top: -0.2em; left: -0.2em; width: 1.2em; height: 1.2em; content: ''; background-color: $white; border-radius: 50%; box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3); transition: left 0.15s ease-in-out; } &::after { position: absolute; top: -0.2em; left: -0.2em; z-index: -1; width: 1.2em; height: 1.2em; content: ''; border-radius: 50%; box-shadow: 0 0 0 9px rgba(0, 0, 0, 0.05); transition: left 0.15s ease-in-out, transform 0.15s ease-in-out, box-shadow 0.15s ease-in-out; transform: scale(0); } &:hover:not(.disabled), &:focus:not(.disabled) { &::after { transform: scale(0.9); } } &:focus:not(.disabled) { &::after { box-shadow: 0 0 0 9px rgba(0, 0, 0, 0.1); } } &:checked { background-color: rgba(33, 150, 243, 0.3); &::before { left: calc(100% - 0.8em); background-color: rgba(33, 150, 243, 1); } &::after { left: calc(100% - 0.8em); box-shadow: 0 0 0 9px rgba(33, 150, 243, 0.1); } &:hover:not(.disabled), &:focus:not(.disabled) { &::after { transform: scale(0.9); } } &:focus:not(.disabled) { &::after { box-shadow: 0 0 0 9px rgba(33, 150, 243, 0.2); } } } } } .form-check:not(.form-switch) { .form-check-input { &:checked[type='checkbox'] { background-image: escape-svg( url("data:image/svg+xml,") ), var(--bs-gradient); background-size: 1.6em; } } } .has-warning { input:not([type='checkbox']), .form-control, input.form-control[readonly], input[type='text'][readonly], [type='text'].form-control[readonly], input:not([type='checkbox']):focus, .form-control:focus { border-bottom: none; box-shadow: inset 0 -2px 0 $warning; } } .has-danger { input:not([type='checkbox']), .form-control, input.form-control[readonly], input[type='text'][readonly], [type='text'].form-control[readonly], input:not([type='checkbox']):focus, .form-control:focus { border-bottom: none; box-shadow: inset 0 -2px 0 $danger; } } .has-success { input:not([type='checkbox']), .form-control, input.form-control[readonly], input[type='text'][readonly], [type='text'].form-control[readonly], input:not([type='checkbox']):focus, .form-control:focus { border-bottom: none; box-shadow: inset 0 -2px 0 $success; } } // Remove the Bootstrap feedback styles for input addons .input-group-addon { .has-warning &, .has-danger &, .has-success & { color: $input-color; background-color: $input-group-addon-bg; border-color: $input-group-addon-border-color; } } .form-group-lg { select, select.form-control { line-height: 1.5; } } // Navs .nav-tabs { .nav-item + .nav-item { margin-left: 0; } .nav-link, .nav-link:focus { margin-right: 0; color: $body-color; background-color: transparent; border: none; box-shadow: inset 0 -1px 0 #ddd; transition: color 0.2s, box-shadow 0.2s; &:hover { color: $primary; background-color: transparent; box-shadow: inset 0 -2px 0 $primary; } } .nav-link.active, .nav-link.active:focus { color: $primary; border: none; box-shadow: inset 0 -2px 0 $primary; &:hover { color: $primary; border: none; } } .nav-link.disabled { box-shadow: inset 0 -1px 0 #ddd; } &.nav-justified { .nav-link, .nav-link:hover, .nav-link:focus, .nav-link.active, .nav-link.active:hover, .nav-link.active:focus { border: none; } } .dropdown-menu { margin-top: 0; } } .dropdown-menu { margin-top: 0; border: none; box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3); } // Indicators .alert { padding-right: 2.5rem; border: none; &, h1, h2, h3, h4, h5, h6 { color: $white; } @each $color, $value in $theme-colors { &-#{$color} { @if $enable-gradients { background: $value linear-gradient(180deg, mix($body-bg, $value, 15%), $value) repeat-x; } @else { background-color: $value; } } } a:not(.btn), .alert-link { font-weight: 700; color: $white; } &-secondary, &-light { &, a:not(.btn), .alert-link { color: $body-color; } } } .badge { &.bg-secondary, &.bg-light { color: $dark; } } .tag { padding: 4px 6px; } // Containers .card { box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4); &.border-primary, &.border-secondary, &.border-success, &.border-info, &.border-warning, &.border-danger, &.border-light, &.border-dark { border-width: 1px; } } .list-group { &-item-action.active { h1, h2, h3, h4, h5, h6 { color: $white; } } } .modal-content { border-radius: 0.2rem; box-shadow: 0 6px 36px rgba(0, 0, 0, 0.3); } .modal, .toast, .offcanvas { .btn-close { background-image: escape-svg( url("data:image/svg+xml,") ); } } .popover { border: none; box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3); } .carousel { &-caption { h1, h2, h3, h4, h5, h6 { color: inherit; } } }