1
0
mirror of https://github.com/bitwarden/web synced 2025-12-06 00:03:28 +00:00
Files
web/src/scss/styles.scss
Danny Murphy cf24113924 Theme Support with a Dark Mode (#974)
* Stylesheets

* Theme Configuration

* Options Area

* swal2 style

Missed the swal2 styling and improved the table theming

* Icon styling

* Fix theme not saving

* Update English

Remove colour to make it more translatable between English and American

* Update messages.json

* Login logo

* dropdown and login logo

* btn-link and totp fix

Added a border for extra readability on the btn-link

* Organisation Styling

* Update messages.json

* Update webauthn-fallback.ts

Add missing semicolon and enable console.error bypass for tslint

* Fix contrast issues

Update the blue to match the browser extension and lighten the grey for text-muted variable

* Add Paypal Container and Loading svg file

* Update jslib

* Password Generator contrast fix
2021-06-02 14:38:04 -04:00

1051 lines
20 KiB
SCSS

@import "../css/webfonts.css";
@import "variables.scss";
//@import "~bootstrap/scss/bootstrap";
@import "~bootstrap/scss/_functions";
@import "~bootstrap/scss/_variables";
@import "~bootstrap/scss/_mixins";
@import "~bootstrap/scss/_root";
@import "~bootstrap/scss/_reboot";
@import "~bootstrap/scss/_type";
@import "~bootstrap/scss/_images";
@import "~bootstrap/scss/_code";
@import "~bootstrap/scss/_grid";
@import "~bootstrap/scss/_tables";
@import "~bootstrap/scss/_forms";
@import "~bootstrap/scss/_buttons";
@import "~bootstrap/scss/_transitions";
@import "~bootstrap/scss/_dropdown";
@import "~bootstrap/scss/_button-group";
@import "~bootstrap/scss/_input-group";
@import "~bootstrap/scss/_custom-forms";
@import "~bootstrap/scss/_nav";
@import "~bootstrap/scss/_navbar";
@import "~bootstrap/scss/_card";
@import "~bootstrap/scss/_breadcrumb";
@import "~bootstrap/scss/_pagination";
@import "~bootstrap/scss/_badge";
@import "~bootstrap/scss/_jumbotron";
@import "~bootstrap/scss/_alert";
@import "~bootstrap/scss/_progress";
@import "~bootstrap/scss/_media";
@import "~bootstrap/scss/_list-group";
@import "~bootstrap/scss/_close";
//@import "~bootstrap/scss/_toasts";
@import "~bootstrap/scss/_modal";
@import "~bootstrap/scss/_tooltip";
@import "~bootstrap/scss/_popover";
@import "~bootstrap/scss/_carousel";
@import "~bootstrap/scss/_spinners";
@import "~bootstrap/scss/_utilities";
@import "~bootstrap/scss/_print";
@import "./plugins";
html {
font-size: 14px;
}
body {
min-width: 1010px;
@include themify($themes) {
color: themed('textColor');
background-color: themed('backgroundColor');
}
&.full-width:not(.layout_frontend) {
.container {
min-width: 980px;
width: 90%;
}
}
}
.page-header, .secondary-header {
border-bottom: 1px solid $border-color;
padding-bottom: 0.6rem;
margin-bottom: 0.5rem;
h1, h2, h3, h4 {
margin: 0;
}
}
h1, h2, h3, h4, h5 {
small {
font-size: 80%;
}
@include themify($themes) {
color: themed('textColor');
}
}
a {
@include themify($themes) {
color: themed('linkColor');
}
}
input, select, textarea {
&:required {
box-shadow: none;
}
}
.text-body {
@include themify($themes) {
color: themed('textColor') !important;
}
}
.bg-primary {
@include themify($themes) {
background-color: themed('bgPrimaryColor') !important;
}
}
.bg-warning {
@include themify($themes) {
background-color: themed('warning') !important;
}
}
.border-primary {
@include themify($themes) {
border-color: themed('borderPrimaryColor') !important;
}
}
.border-warning {
@include themify($themes) {
border-color: themed('warning') !important;
}
}
.secondary-header, .spaced-header {
margin-top: 4rem;
}
.navbar {
padding-left: 0;
padding-right: 0;
.dropdown-menu {
min-width: 200px;
max-width: 300px;
@include themify($themes) {
color: themed('textColor');
background-color: themed('backgroundColor');
}
.dropdown-item {
@include themify($themes) {
color: themed('textColor');
}
}
.dropdown-item-text {
line-height: 1.3;
@include themify($themes) {
color: themed('textColor');
}
span, small {
display: block;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
}
}
.nav-link {
font-weight: 600;
}
}
.navbar-brand {
margin-top: -20px;
margin-bottom: -20px;
}
.dropdown-menu {
button {
cursor: pointer;
}
}
.container {
width: 980px;
max-width: none !important;
margin: 0 auto;
padding: 0;
}
.page-content {
margin-top: 20px;
}
.footer {
margin-top: 40px;
padding: 40px 0 40px 0;
border-top: 1px solid $border-color;
}
.list-group-item.active {
font-weight: bold;
padding-left: calc(#{$list-group-item-padding-x} - 3px);
border-color: rgba(0,0,0,0.125);
@include themify($themes) {
border-left: 3px solid themed('borderPrimaryColor');
}
}
.text-muted {
@include themify($themes) {
color: themed('textMuted') !important;
}
}
.card-header, .modal-header {
font-weight: bold;
text-transform: uppercase;
@include themify($themes) {
color: themed('textColor');
background-color: themed('backgroundColor');
}
small {
font-weight: normal;
text-transform: none;
@extend .text-muted;
}
}
.card-body-header {
font-size: $font-size-lg;
@extend .mb-4
}
.card ul.fa-ul.card-ul {
margin-left: 1.9em;
li {
word-break: break-all;
}
.fa-li {
top: 4px;
}
&.carets {
margin-left: 1.1em;
.fa-li {
left: -17px;
width: 1.1em;
}
}
ul {
&.carets {
margin-left: 0.85em;
}
}
}
.card-org-plans {
h2 {
font-size: $font-size-lg;
}
}
.modal-dialog {
width: $modal-md;
}
.modal-sm {
width: $modal-sm;
}
.modal-lg {
width: $modal-lg;
}
.modal-body {
@include themify($themes) {
color: themed('textColor');
background-color: themed('backgroundColor');
}
h3, .section-header > * {
font-weight: normal;
text-transform: uppercase;
@include themify($themes) {
color: themed('textMuted');
}
}
}
.modal .list-group-flush {
:first-child {
border-top: none;
}
:last-child {
border-bottom: none;
}
}
.modal-footer {
justify-content: flex-start;
@include border-radius($modal-content-border-radius);
@include themify($themes) {
color: themed('textColor');
background-color: themed('backgroundColor');
}
}
label:not(.form-check-label):not(.btn), label.bold {
font-weight: 600;
}
input[type="search"]::-webkit-search-cancel-button {
-webkit-appearance: searchfield-cancel-button;
}
.btn-primary {
@include themify($themes) {
border-color: themed('buttonBorderColor');
background-color: themed('buttonBackgroundColor');
}
&:hover {
@include themify($themes) {
border-color: themed('buttonBorderColorHover');
background-color: themed('buttonBackgroundColorHover');
}
color: #FFFFFF;
}
}
.btn[class*="btn-outline-"] {
&:not(:hover):not(.btn-outline-danger):not(.dropdown-toggle) {
@include themify($themes) {
border-color: themed('buttonBorderColor');
background-color: themed('backgroundColor');
color: themed('buttonTextColor');
}
}
&:hover:not(.btn-outline-danger):not(.dropdown-toggle) {
@include themify($themes) {
border-color: themed('buttonBorderColorHover');
background-color: themed('buttonBackgroundColorHover');
color: #fff;
}
}
}
.btn-link {
&:focus,
&.focus {
outline-color: -webkit-focus-ring-color;
outline-offset: 1px;
outline-style: auto;
outline-width: 1px;
}
&:not(.text-danger):not(.cursor-move) {
@include themify($themes) {
border-color: themed('buttonBorderColor');
color: themed('buttonBackgroundColor');
}
}
@include themify($themes) {
color: themed('buttonBackgroundColor');
}
}
.btn-outline-secondary {
@include themify($themes) {
color: themed('textMuted');
}
&:hover:not(:disabled) {
color: $body-color;
}
&:disabled {
opacity: 1;
}
&:focus,
&.focus {
box-shadow: 0 0 0 $btn-focus-width rgba(mix(color-yiq($primary), $primary, 15%), .5);
}
}
.btn-submit {
position: relative;
.fa-spinner {
position: absolute;
display: none;
align-items: center;
justify-content: center;
bottom: 0;
top: 0;
left: 0;
right: 0;
}
&:disabled:not(.manual), &.loading {
.fa-spinner {
display: flex;
}
span {
visibility: hidden;
}
}
}
.list-group-item {
&:focus,
&.focus {
z-index: 100;
}
@include themify($themes) {
color: themed('textColor');
background-color: themed('backgroundColor');
}
}
.fa-icon-above-input {
height: 1.5em;
}
.table.table-list {
@include themify($themes) {
color: themed('textColor');
}
thead th {
border-top: none;
}
tr:first-child {
td {
border: none;
}
}
td {
vertical-align: middle;
&.reduced-lh {
line-height: 1;
small {
font-size: 80%;
}
}
small, > .fa, .icon {
@include themify($themes) {
color: themed('textMuted');
}
}
}
td.wrap {
word-break: break-all;
}
td.table-list-options {
width: 76px;
max-width: 76px;
text-align: right;
height: 50px;
&.wider {
width: 100px;
max-width: 100px;
}
.btn {
line-height: 1;
transition: initial;
}
.dropdown-menu {
line-height: $line-height-base;
}
}
tr:not(:hover) td.table-list-options {
> .dropdown:not(.show) button:not(:focus):not(:active), > button:not(:focus):not(:active) {
@extend .sr-only;
}
}
td.table-list-icon {
width: 45px;
max-width: 45px;
text-align: center;
img {
@extend .rounded;
@extend .img-fluid;
max-height: 24px;
}
}
td.table-list-checkbox {
width: 35px;
max-width: 35px;
}
td.table-list-strike {
@include themify($themes) {
color: themed('textMuted');
}
text-decoration: line-through;
}
}
.table-hover tbody tr:hover {
@include themify($themes) {
color: themed('tableHover');
background-color: rgba(0, 0, 0, 0.03)
}
}
.text-lg {
font-size: $font-size-lg;
}
.text-strike {
text-decoration: line-through;
}
.font-weight-semibold {
font-weight: 600;
}
.password-wrapper {
word-break: break-all;
white-space: pre-wrap;
min-width: 0;
}
.password-row {
min-width: 0;
}
.password-number {
@include themify($themes) {
color: themed('pwNumber');
}
}
.password-special {
@include themify($themes) {
color: themed('pwSpecial');
}
}
.card {
@include themify($themes) {
color: themed('textColor');
background-color: themed('backgroundColor');
border-color: themed('borderColor');
}
}
.card-body {
@include themify($themes) {
color: themed('textColor');
background-color: themed('backgroundColor');
}
}
.badge[class*="badge-"] {
@include themify($themes) {
color: #FFFFFF;
background-color: themed('buttonBackgroundColor');
}
}
[class*="swal2-"] {
&:not(.swal2-container) {
@include themify($themes) {
color: themed('textColor');
background-color: themed('backgroundColor');
}
}
}
.close {
@include themify($themes) {
color: themed('textColor');
}
}
.dropdown-menu, .dropdown-item {
@include themify($themes) {
color: themed('textColor');
background-color: themed('backgroundColor');
}
}
app-vault-groupings, app-org-vault-groupings, .groupings {
.card {
#search {
margin-bottom: 1rem;
}
h3 {
font-weight: normal;
text-transform: uppercase;
@include themify($themes) {
color: themed('textMuted');
}
}
ul:last-child {
margin-bottom: 0;
}
.card-body a {
@include themify($themes) {
color: themed('textColor');
background-color: themed('backgroundColor');
}
&:hover {
&.text-muted {
@include themify($themes) {
color: themed('iconHover') !important;
}
}
}
}
.show-active {
display: none;
}
li {
> .fa, > div > .fa {
cursor: pointer;
}
}
li.active {
> .show-active, > div .show-active {
display: inline;
}
}
li.active {
> a:first-of-type, > div a:first-of-type {
font-weight: bold;
@include themify($themes) {
color: themed('linkColor');
}
}
> .fa, > div > .fa {
@include themify($themes) {
color: themed('linkColor');
}
}
}
}
}
app-password-generator {
#lengthRange {
width: 100%;
}
.card-password {
.card-body {
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: center;
text-align: center;
font-size: $font-size-lg;
font-family: $font-family-monospace;
}
}
}
app-password-generator-history {
.list-group-item {
line-height: 1;
.password {
font-family: $font-family-monospace;
}
}
}
app-import {
textarea {
height: 150px;
}
}
app-avatar {
img {
@extend .rounded;
}
}
app-user-billing {
.progress {
height: 20px;
.progress-bar {
min-width: 50px;
}
}
}
#duo-frame {
background: url('../images/loading.svg') 0 0 no-repeat;
height: 330px;
iframe {
width: 100%;
height: 100%;
border: none;
}
}
#web-authn-frame {
@include themify($themes) {
background: themed('imgLoading') 0 0 no-repeat;
}
height: 290px;
iframe {
width: 100%;
height: 100%;
border: none;
}
}
#bt-dropin-container {
/* @include themify($themes) {
background: themed('imgLoading') 0 0 no-repeat;
}
*/min-height: 50px;
background: url('../images/loading-white.svg') 0 0 no-repeat;
}
.braintree-placeholder, .braintree-sheet__header {
display: none;
}
.braintree-sheet__content--button {
text-align: left;
padding: 0;
min-height: 0;
}
.braintree-sheet__container {
margin-bottom: 0;
}
.braintree-sheet {
border: none;
}
[data-braintree-id="upper-container"]::before {
@include themify($themes) {
background-color: themed('backgroundColor');
}
}
#totpImage {
@include themify($themes) {
filter: themed('imgFilter');
}
}
.totp {
.totp-code {
@extend .text-monospace;
font-size: 1.2rem;
}
.totp-countdown {
margin: 3px 3px 0 0;
display: block;
user-select: none;
.totp-sec {
font-size: 0.85em;
position: absolute;
line-height: 32px;
width: 32px;
text-align: center;
}
svg {
width: 32px;
height: 32px;
transform: rotate(-90deg);
}
.totp-circle {
fill: none;
stroke: $primary;
&.inner {
stroke-width: 3;
stroke-dasharray: 78.6;
stroke-dashoffset: 0;
}
&.outer {
stroke-width: 2;
stroke-dasharray: 88;
stroke-dashoffset: 0;
}
}
}
> .align-items-center {
margin-bottom: -5px;
}
&.low {
.totp-sec, .totp-code {
color: $danger;
}
.totp-circle {
stroke: $danger;
}
}
}
.callout {
padding: $alert-padding-y $alert-padding-x;
margin-bottom: $alert-margin-bottom;
border: 1px solid $card-border-color;
border-left-width: 5px;
border-radius: $card-inner-border-radius;
@include themify($themes) {
color: themed('textColor');
background-color: themed('backgroundColor');
}
.callout-heading {
margin-top: 0;
}
h3.callout-heading {
font-weight: bold;
text-transform: uppercase;
}
&.callout-primary {
border-left-color: $primary;
.callout-heading {
color: $primary;
}
}
&.callout-info {
border-left-color: $gray-800;
.callout-heading {
color: $gray-800;
}
}
&.callout-danger {
border-left-color: $danger;
.callout-heading {
color: $danger;
}
}
&.callout-success {
border-left-color: $success;
.callout-heading {
color: $success;
}
}
&.callout-warning {
border-left-color: $warning;
.callout-heading {
color: $warning;
}
}
}
.list-group-2fa {
.logo-2fa {
min-width: 100px;
}
}
.form-check-block {
.form-check-label {
font-weight: 600;
> small {
display: block;
@include themify($themes) {
color: themed('textMuted');
}
font-weight: normal;
}
> span {
display: block;
font-weight: normal;
@extend .mt-2;
}
}
}
.form-check-block + .form-check-block {
&:not(.mt-2) {
@extend .mt-3;
}
}
.form-inline {
input[type='datetime-local'] {
width: 200px;
}
}
.form-control {
@include themify($themes) {
color: themed('textColor');
background-color: themed('inputBackgroundColor');
border-color: themed('inputBorderColor');
}
}
input[type="radio"], input[type="checkbox"] {
cursor: pointer;
}
.form-control.stripe-form-control {
padding-top: 0.55rem;
&.is-focused {
color: $input-focus-color;
background-color: $input-focus-bg;
border-color: $input-focus-border-color;
outline: 0;
box-shadow: $input-focus-box-shadow;
&.is-invalid {
box-shadow: 0 0 0 $input-focus-width rgba($form-feedback-invalid-color, .25);
}
}
&.is-invalid {
border-color: $form-feedback-invalid-color;
}
}
.org-nav {
@include themify($themes) {
color: themed('textColor');
background-color: themed('backgroundColor');
border-bottom: 1px solid themed('borderColor');
}
height: 100px;
min-height: 100px;
.container {
height: 100%;
}
.nav-tabs {
border-bottom: none;
a {
@include themify($themes) {
color: themed('textColor');
}
&:not(.active) {
border-color: transparent;
}
&.active {
@include themify($themes) {
border-top: 3px solid themed('primary');
}
font-weight: bold;
padding-top: calc(#{$nav-link-padding-y} - 2px);
}
&.disabled {
color: $input-placeholder-color;
}
}
}
.org-name {
line-height: 1;
span {
font-size: $font-size-lg;
display: block;
}
}
}
.nav-tabs .nav-link.active {
@include themify($themes) {
background: themed('navActiveBackground');
border-color: themed('borderColor');
}
}
img.logo, .logo#loginLogo {
width: 284px;
height: 43px;
margin: 0 auto;
display: block;
@include themify($themes) {
background: themed('loginLogo') no-repeat center center;
background-size: cover;
}
background: url("../images/logo-dark@2x.png") no-repeat center center;
background-size: cover;
}
.min-height-fix {
min-height: 1px;
}
.overflow-hidden {
overflow: hidden;
}
.cdk-drag-preview {
z-index: $zindex-tooltip !important;
opacity: 0.8;
/*background-color: $white;*/
border-radius: $border-radius;
@include themify($themes) {
background: themed('cdkDraggingBackground');
}
}
.cursor-move {
cursor: move !important;
}
@import "./register-layout";