// These are overriding the variables at https://getbootstrap.com/docs/3.4/customize/ $text-dark: #333; $brand-primary: #2196F3 !default; // #62bdfc $brand-success: #27CE65 !default; $brand-info: #3995b1 !default; $brand-warning: #f0ad4e !default; $brand-danger: #ff4c4c !default; $body-bg: #f4f4f4; $font-family-sans-serif: "Noto Sans", Helvetica, Arial, sans-serif; $font-family-heading: "Noto Sans Light", Helvetica, Arial, sans-serif; $navbar-default-link-color: $brand-primary !default; $navbar-default-link-hover-color: #62bdfc !default; $navbar-default-link-active-color: #428BCA !default; $navbar-default-brand-color: #777 !default; $btn-default-bg: transparent !default; $btn-default-color: #444 !default; $btn-default-border: #aaa !default; //$btn-primary-bg: $btn-default-bg; //$btn-primary-color: $brand-primary !default; $btn-primary-border: $brand-primary !default; //$btn-success-bg: $btn-default-bg; //$btn-success-color: $brand-success !default; $btn-success-border: $brand-success !default; $btn-info-bg: $btn-default-bg; $btn-info-color: $brand-info !default; $btn-info-border: $brand-info !default; // $btn-warning-bg: #333 !default; // $btn-warning-color: $brand-warning !default; // $btn-warning-border: $brand-warning !default; $btn-danger-bg: $btn-default-bg; $btn-danger-color: $brand-danger !default; $btn-danger-border: $brand-danger !default; $modal-content-border-color: transparent !default; $modal-header-border-color: white !default; $border-radius-large: 2px !default; $border-radius-base: 2px !default; $table-border-color: transparent !default; $state-danger-bg: $brand-danger; $state-danger-text: $brand-danger; $state-danger-border: $brand-danger; @import "pkg:bootstrap-sass"; // ---------------------------- // Bootstrap extension // ---------------------------- h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6 { font-family: $font-family-heading; font-weight: 400; } .hide-mobile { @media(max-width:767px) { display: none; } } .table-hover > tbody > tr:hover { background-color: $body-bg; } .text-monospace { font-family: $font-family-monospace; } .row-same-height { height: 100%; display: table; width: 100%; } .col-same-height { height: 100%; vertical-align: middle; display: table-cell; float: none !important; } .row-no-margin { margin: 0; } .row-no-margin:before, .row-no-margin:after { content: " "; display: table; } .row-no-margin:after { clear: both; } .elide-table-cell { text-overflow: ellipsis; white-space: nowrap; overflow: hidden; max-width: 300px; vertical-align: middle !important; } .wrap-table-cell { word-wrap: break-word; } .navbar-collapse.collapse.in { background-color: white; box-shadow: 0px 2px 5px rgba(0, 0, 0, 0.1); } .dropdown-menu>li>a:focus, .dropdown-menu>li>a:hover { background-color: $brand-primary; color: white; } select.form-control { -webkit-appearance: none; -moz-appearance: none; appearance: none; background-image: url("data:image/svg+xml;utf8,"); background-repeat: no-repeat; background-position-x: 100%; background-position-y: 5px; } .form-control { box-shadow: none; } input[type="checkbox"], input[type="radio"] { margin-top: 2px; } .nav-tabs > li.active > a, .nav-tabs > li.active > a:focus, .nav-tabs > li.active > a:hover { background-color: white; outline: none; } .fa-fw { margin-right: 5px; } .tooltip { pointer-events: none; .tooltip-inner { max-width: 800px; white-space: nowrap; overflow: hidden; } } .btn.pull-right { margin-left: 5px; } .nav-tabs > li.active > a, .nav-tabs > li.active > a:focus, .nav-tabs > li.active > a:hover { border: 1px solid white; } // ---------------------------- // Main classes // ---------------------------- html, body { height: 100%; width: 100%; padding: 0; } .view-header-filter-bar { padding-right: 20px; padding-left: 15px; display: flex; flex-wrap: wrap; justify-content: center; } @media(min-width:768px) { .view-header-filter-bar { justify-content: right; } } .view-header-search-bar { margin-top: 10px; form { display: flex; justify-content: space-between; } @media(min-width:768px) { float: right; } } .offline-banner { position: fixed; z-index: 30000; background-color: $brand-danger; width: 100%; padding: 2px; text-align: center; color: white; &:hover, &:focus { color: white; text-decoration: none; } } .restart-banner { position: fixed; z-index: 20000; background-color: $text-dark; width: 100%; padding: 2px; text-align: center; color: white; } .layout-root { display: flex; flex-direction: column; height: 100%; max-height: 100%; width: 100%; } .layout-content { flex-grow: 1; overflow: auto; } #mainContentContainer { background-position: center; background-repeat: no-repeat; background-size: cover; } #ng-view { display: flex; flex-direction: column; } .shadow { box-shadow: 0px 2px 5px rgba(0, 0, 0, 0.1); } .highlight:hover { background-color: rgba(0, 0, 0, 0.1) !important; } .content { width: 100%; max-width: 720px; margin: 0 auto; @media(min-width:768px) { width: 720px; .title-toolbar { float: right !important; } &.content-large { width: 970px; max-width: 970px; } } } .navbar { display: block; width: 100%; flex-grow: 0; background-color: white; border-color: white; @media(min-width:768px) { max-height: 50px; } .navbar-brand-icon { padding: 5px 15px; } .navbar-nav > li > a { @media(min-width:768px) { padding: 13px 15px; } } } .panel-body { padding: 15px 0; } .radio { margin-top: 0; } .help { color: #757c82; font-size: 14px; &:hover { color: $navbar-default-link-hover-color; } } h1, h2, h3 { font-family: $font-family-heading; @media(max-width:767px) { padding: 0 10px; } } .view-header { padding-left: 15px; padding-right: 20px; position: relative; z-index: 200; } .section-header { margin-top: 50px; } .offscreen { position: absolute; left: -999em; } textarea { max-width: 100%; } // status classes for circle indicators .status-active { color: #27CE65; } .status-inactive { color: #7c7c7c; } .status-starting { color: #f0ad4e; } .status-error { color: #ec534f; } // ---------------------------- // Apps view // ---------------------------- .app-list { width: 100%; margin-top: 20px !important; th { white-space: nowrap; } .app-list-item { .app-list-item-icon { height: 32px; } .app-list-app-link-cell { padding: 0; } .app-list-item-fqdn { visibility: hidden; color: $text-muted; margin-left: 20px; font-size: 12px; } &:hover .app-list-item-fqdn { visibility: visible; } .app-list-app-link { display: inline-block; color: $text-dark; padding: 8px; &:hover { text-decoration: none; } } .app-list-item-progress { height: 5px; margin: 0 8px; } } } .app-grid { display: flex; flex-wrap: wrap; width: 100%; } .grid-item { margin: 10px; width: 221px; position: relative; @media(max-width:767px) { width: 100%; } .col-xs-12 { padding-left: 5px; padding-right: 5px; .status, .status { padding-left: 5px; padding-right: 5px; } } &.stopped { filter: grayscale(1); } .grid-item-content { position: relative; display: block; background-color: #ffffffe3; box-shadow: 0px 2px 5px rgba(0, 0, 0, 0.1); border-radius: 2px; height: 100%; &:focus-within { box-shadow: 0px 2px 5px rgba(0,0,0,0.4); } .usermanagement-indicator { display: none; position: absolute; top: 10px; color: #03a9f49e; left: 10px; @media(max-width:767px) { display: block; } } &:hover { background-color: #ffffff9c !important; & > .grid-item-action { background-color: transparent; opacity: 1; border-bottom-right-radius: 0; border-top-left-radius: 0; &:hover { background-color: #f8f8f8; } } .usermanagement-indicator { display: block; } } .grid-item-action { border: none; z-index: 1; position: relative; float: right; margin-bottom: -14px; background-color: unset; opacity: 0; color: $text-dark; &:hover { color: $brand-primary; background-color: rgba(256, 256, 256, 0.5); } &:active { box-shadow: none; } @media(max-width:767px) { opacity: 1; } } .grid-item-top { position: relative; padding: 10px 15px; height: 100%; padding-top: 30px; // offset for non-admins .grid-item-top-title { white-space: nowrap; overflow: hidden; font-size: 24px; font-family: $font-family-heading; } } } } .app-update-badge { display: flex; justify-content: center; align-items: center; position: absolute; left: -12px; top: -12px; font-size: 24px; height: 36px; width: 36px; color: white; cursor: pointer; background-color: $brand-success; border-radius: 34px; transition: all 100ms ease-out; &:hover { transform: scale(1.4); } } .app-checklist-badge { display: flex; justify-content: center; align-items: center; position: absolute; right: -12px; top: -12px; z-index: 2; font-size: 14px; height: 24px; width: 24px; color: white; cursor: pointer; background-color: $brand-danger; border-radius: 34px; transition: all 100ms ease-out; &:hover { transform: scale(1.4); } } .app-postinstall-message { max-height: 500px; overflow-x: none; overflow-y: auto; } .app-info-title { display: inline-block; margin: 5px 10px; line-height: 1.4; } .app-info-icon { float: left; min-height: 64px; max-height: 64px; min-width: 64px; max-width: 100%; } multiselect { &.stretch { button { min-width: 120px; } } .dropdown-toggle { background-color: white; border-color: #ccc; &:hover { background-color: white; } } .empty { padding-left: 14px; } } // same as settings-avatar .app-custom-icon { position: relative; cursor: pointer; width: 64px; height: 64px; margin-bottom: 5px; background-position: center; background-size: 100% 100%; background-repeat: no-repeat; border: 1px solid gray; border-radius: 3px; img { display: block; width: 100%; height: 100%; } .overlay { position: absolute; width: 100%; height: 100%; top: 0; background-color: rgba(255, 255, 255 ,0.3); background-image: url('/img/plus.png'); background-repeat: no-repeat; background-size: 32px 32px; background-position: center; transition: all 150ms; opacity: 0; &:hover { opacity: 1; } } } .alias-domains .col-lg-11 { padding-right: 5px; } .alias-domains .col-lg-1 { padding-left: 0px; padding-right: 0px; } .alias-domains .row { margin-top: 5px; } .redirect-domains .col-lg-11 { padding-right: 5px; } .redirect-domains .col-lg-1 { padding-left: 0px; padding-right: 0px; } .redirect-domains .row { margin-top: 5px; } .back-to-view-link { position: absolute; z-index: 20; top: 50px; left: 0; width: 100%; padding: 10px; background-color: white; @media (prefers-color-scheme: dark) { background-color: #1c1c1c; } @media(min-width:768px) { background-color: transparent; width: auto; padding: 20px; } &:hover, &:focus { text-decoration: none; } } .bind-name { width: 35% } .bind-host-path { width: 45%; .form-control { width: 100%; } } .checklist-item { padding: 8px; border: none; border-left: 2px solid rgb(255, 76, 76); background-color: #ff000014; display: flex; justify-content: space-between; align-items: center; margin-bottom: 5px; } .checklist-item-acknowledged { border-left: 2px solid $brand-success; background-color: transparent; } .checklist-item > span > p { margin: 0; } // ---------------------------- // Mail view // ---------------------------- .maillog-filter { display: inline-block; padding-left: 0; margin: 20px 0; border-radius: 2px; .form-control { display: inline-block; width: 200px; vertical-align: middle; } } .email-domain-list-item { display: block; text-decoration: none; color: $text-dark; padding: 8px; &:hover { text-decoration: none; color: $text-dark; } } .no-padding { padding: 0 !important; } .aliases .col-lg-11 { padding-right: 5px; } .aliases .col-lg-1 { padding-left: 0px; padding-right: 0px; } .aliases .row { margin-top: 5px; } // ---------------------------- // App view // ---------------------------- .app-configure { // Ensure back link is fully visible @media(max-width:1200px) { margin-top: 60px; } h3 { margin-top: 0; } .card { min-height: 558px; } @media(min-width:768px) { .col-sm-2 { padding-right: 0; } .col-sm-8 { padding-left: 0; padding-right: 0; } } .app-header-container { display: flex; flex-direction: row; justify-content: space-between; padding: 0 15px; @media(min-width:768px) { padding: 0; } h1 { margin-right: 10px; margin-bottom: 0px; margin-top: 16px; padding: 4px 0; line-height: 1; font-size: 30px; text-overflow: ellipsis; white-space: nowrap; overflow: hidden visible; a { white-space: nowrap; color: black; line-height: 1.1; &:hover, &:active, &:focus { text-decoration: none; color: $brand-primary; } } } &>div { white-space: nowrap; text-align: right; padding-top: 10px; margin-top: 10px; } } .app-status-container { margin-bottom: 10px; padding: 0 15px; text-overflow: ellipsis; white-space: nowrap; overflow: hidden; max-width: 100%; @media(min-width:768px) { padding: 0; } } } .app-configure-links-container { margin-top: 10px; padding: 0; } .card-container { padding: 0; } .app-configure .row { @media(max-width:769px) { margin: 0; } } .app-configure-links { position: relative; z-index: 10; div { cursor: pointer; display: inline-block; padding: 6px 15px; margin: 0; overflow: hidden; color: black; text-overflow: ellipsis; white-space: nowrap; font-size: 16px; user-select: none; @media(min-width:768px) { display: block; } &:hover, &:focus { text-decoration: none; background-color: #e9ebed; box-shadow: -4px 3px 5px -2px rgba(0,0,0,.1); } &.active { background-color: white; color: $navbar-default-link-color; box-shadow: -4px 3px 5px -2px rgba(0,0,0,.1); } &.disabled { color: gray; background-color: transparent !important; box-shadow: none !important; cursor: not-allowed; } } } .task-active-overlay { display: flex; align-items: center; justify-content: center; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(255, 255, 255, 0.7); z-index: 7; cursor: not-allowed; } // ---------------------------- // Login and password forms // ---------------------------- .card-form-bottom-bar { display: flex; justify-content: space-between; } .card-form-bottom-bar > * { align-self: center; } // ---------------------------- // Appstore view // ---------------------------- .appstore-login { margin-top: 50px !important; h1 { font-size: 32px; } } .appstore-layout { display: block; height: 100%; width: 100%; } .appstore-toolbar { display: flex; flex-wrap: wrap; gap: 5px; margin: auto; max-width: 1400px; padding: 15px 10px; background: transparent; } .appstore-grid { margin: auto; overflow: auto; height: calc(100% - 65px); // offset navigation bar max-width: 1400px; h2 { font-size: 20px; margin-top: 10px; } } .appstore-item { padding: 10px; } .appstore-item-content { background-color: white; box-shadow: 0px 2px 5px rgba(0, 0, 0, 0.1); border-radius: 2px; padding: 10px; width: 100%; cursor: pointer; overflow: hidden; } .appstore-item-badge-testing { position: absolute; right: 0; top: 2px; } .appstore-item-content-testing { background-color: #E6E6E6; background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-size: 64px 64px; } .appstore-item-content-title { text-overflow: ellipsis; white-space: nowrap; overflow: hidden; margin-bottom: 0px; margin-top: 16px; padding: 4px 0; line-height: 1; font-family: $font-family-sans-serif; } .appstore-item-content-tagline { text-overflow: ellipsis; overflow: hidden; height: 44px; // show two lines } .appstore-item-content-icon { width: 90px; min-width: 90px; max-width: 90px; padding-left: 10px; padding-right: 10px; > .app-icon { width: 70px; height: 70px; min-width: 70px; min-height: 70px; } } .appstore-category-link { display: block; padding: 6px 10px; margin: 0; overflow: hidden; color: black; text-overflow: ellipsis; white-space: nowrap; font-size: 16px; &:hover, &:focus, &.category-active { text-decoration: none; background-color: white; color: black; } &.category-active { background-color: $navbar-default-link-hover-color; color: white; } & > i { width: 30px; } } .appstore-category-missing { padding: 10px; background-color: white; p { font-weight: bold; } textarea { display: block; width: 100%; height: 50px; margin-bottom: 10px; transition: all 250ms ease-out; &:focus { height: 200px; } } button { width: 100%; } } .appstore-install-description { max-height: 250px; overflow-x: none; overflow-y: auto; } .modal-body .panel-body { padding: 5px; } .modal-footer { padding-top: 0; } .appstore-install-title { display: inline-block; margin: 5px 10px; } .appstore-install-meta { margin-left: 10px; color: $text-muted; } .appstore-item-rating { color: $navbar-default-link-hover-color; } .appstore-search { width: 200px; } .loading-banner { padding-top: 150px; text-align: center; h1 { font-size: 48px; } } .badge-success { background-color: #5CB85C; } .badge-warning { background-color: #EFBD48; } .badge-danger { background-color: $brand-danger; } .progress { margin-bottom: 0; } .card { position: relative; background-color: white; max-width: 720px; margin: 0 auto; margin-bottom: 15px; padding: 10px 15px; box-shadow: 0px 2px 5px rgba(0, 0, 0, 0.1); } .card-small { max-width: 600px; } .card-large { max-width: 970px; } .card-expand { max-width: initial; } .text-success { color: #5CB85C; } .text-bold { font-weight: bold; } .text-large { font-size: $font-size-h1; } .text-medium { font-size: $font-size-h4; } .text-small { font-size: $font-size-h6; } .text-hover { cursor: pointer; &:hover { color: $brand-primary; } } .newPort { border-left: 5px solid $brand-success; padding-left: 5px; } .obsoletePort { border-left: 5px solid $gray-light; padding-left: 5px; } .grid-item-top .progress { border-radius: 0; box-shadow: none; margin-top: 10px; width: inherit; height: 10px; } .grid-item-top .progress-bar { border-radius: 0; box-shadow: none; } .app-icon { min-height: 80px; max-height: 80px; min-width: 80px; max-width: 100%; } .appstore-install .app-icon { float: left; min-height: 96px; max-height: 96px; min-width: 96px; max-width: 100%; } select.purpose:invalid { color: gray } // ---------------------------- // Animations // ---------------------------- // ngAnimate will delay hiding the element if there is an animation attached .fa-spin.ng-hide, .fa-pulse.ng-hide { display: none !important; } .animateMe { opacity: 1; -webkit-transition: 0.25s ease all; transition: 0.25s ease all; } .animateMe.ng-hide-add, .animateMe.ng-hide-remove { display: block !important; transform: scale(0.9, 0.9); opacity: 0; } .animateMeOpacity { opacity: 1; -webkit-transition: 0.25s ease all; transition: 0.25s ease all; } .animateMeOpacity.ng-hide-add, .animateMeOpacity.ng-hide-remove { display: block !important; opacity: 0; } .animation-rise { animation-duration: 3s; animation-name: rise; } .animation-plop { transform: scale(0); animation-name: plop; animation-delay: 2s; animation-duration: 350ms; animation-iteration-count: 1; animation-timing-function: ease-out; animation-fill-mode: forwards; } .animation-fade { opacity: 0; animation-name: fade; animation-delay: 4s; animation-duration: 250ms; animation-iteration-count: 1; animation-timing-function: ease-out; animation-fill-mode: forwards; } .animation-pulse { animation-duration: 1.5s; animation-name: pulse; animation-timing-function: ease-in; animation-iteration-count: infinite; } @keyframes rise { from { color: transparent; } to { color: white; } } @keyframes plop { 0% { transform: scale(0); opacity: 0; } 50% { transform: scale(1.2); opacity: 0.3 } 100% { transform: scale(1); opacity: 1; } } @keyframes fade { 0% { opacity: 0; } 100% { opacity: 1; } } @keyframes pulse { 0% { transform: scale(1); opacity: 1; } 50% { transform: scale(0.8); opacity: 0.5; } 100% { transform: scale(1); opacity: 1; } } .slick-item { height: 200px; background-position: center; background-repeat: no-repeat; background-size: contain; } .modal-backdrop { position: fixed; top: 0; bottom: 0; height: auto !important; } .has-error, .text-danger { color: $brand-danger; } footer { flex-grow: 0; background-color: white; width: 100%; color: #555; max-height: 30px; font-size: 14px; padding: 5px; text-align: center; box-shadow: 0px 2px 5px rgba(0, 0, 0, 0.1); a { color: #62bdfc; } p { margin: 0; } } .hand { cursor: pointer; } .copy { cursor: copy; } .arrow { cursor: default; } // ---------------------------- // Setup classes // ---------------------------- .setup { height: 100%; width: 100%; padding: 0; background: #F7F7F7; .main-container { height: 100%; width: 100%; display: table; h1 { margin-bottom: 30px; } &>.row { display: table-cell; vertical-align: middle; width: 100%; } } } // ---------------------------- // Graphs and system info classes // ---------------------------- .graphs-toolbar { display: flex; justify-content: space-between; } .graphs-toolbar-actions { display: flex; justify-content: end; } .color-indicator { display: inline-block; width: 16px; height: 16px; border-radius: 3px; line-height: 16px; } .disk-content { white-space: nowrap; overflow: auto; } .disks-last-updated { font-size: 12px; font-weight: bold; align-self: center; } // ---------------------------- // Error and status page classes // ---------------------------- .status-page { background-color: white; padding: 0; margin: 0; height: 100%; width: 100%; .wrapper { display: table; width: 100%; height: 100%; } .content { display: table-cell; width: 100%; height: 100%; text-align: center; vertical-align: middle; } footer { bottom: 0; width: 100%; } } // ---------------------------- // Settings // ---------------------------- .picture-edit-indicator { position: absolute; bottom: -4px; right: -4px; border-radius: 20px; padding: 5px; color: $text-dark; background-color: white; transition: all 250ms; } div:hover > .picture-edit-indicator { color: white; background: $brand-primary; transform: scale(1.2); } .info-edit-indicator { float: right; border-radius: 20px; padding: 5px; color: $text-dark; background-color: white; transition: all 250ms; cursor: pointer; } .info-edit-indicator:hover { color: white; background: $brand-primary; transform: scale(1.2); } .settings-avatar { position: relative; cursor: pointer; width: 128px; height: 128px; background-position: center; background-size: 100% 100%; background-repeat: no-repeat; border: 1px solid gray; border-radius: 3px; margin-bottom: 10px; img { display: block; width: 100%; height: 100%; } } .settings-avatar-selector { text-align: center; .grid { margin-top: 20px; } .preview-avatar { text-align: center; } .item { display: inline-block; background-size: cover; background-repeat: no-repeat; background-position: center; width: 64px; height: 64px; margin: 5px; cursor: pointer; opacity: 0.6; transform: scale(1.0); transition: all 150ms; &:hover { opacity: 1; transform: scale(1.1); } &.add { border-radius: 2px; width: 54px; height: 54px; background-color: $brand-primary; background-image: url('/img/plus.png'); background-repeat: no-repeat; background-position: center; background-size: 50%; } } } .plans label { font-weight: normal; } // ---------------------------- // Notification // ---------------------------- .ui-notification { cursor: auto; & a { color: white; &:hover { color: white; text-decoration: underline; } } &:hover { opacity: 1; } } // ---------------------------- // Users view // ---------------------------- .group-badge { margin-right: 10px; } .no-wrap { text-overflow: ellipsis; white-space: nowrap; overflow: hidden; } .users-toolbar { display: flex; margin-bottom: 5px; gap: 5px; } // ---------------------------- // Upgrade // ---------------------------- .upgrade { position: fixed; right: 10px; bottom: 30px; color: white; z-index: 1200; text-align: right; .content { height: 0; overflow: hidden; transition: height 250ms; background-color: #00A500; text-align: left; border-radius: 0; transition: all 250ms; box-shadow: 0 3px 5px rgba(0,0,0,.5); a { color: white; text-decoration: underline; &:hover { font-weight: bold; } } &.active { padding: 10px; border-radius: 5px; border-bottom-right-radius: 0; height: auto; } } .trigger { cursor: pointer; padding: 4px 10px; display: inline-block; font-size: 18px; background-color: #00A500; border-radius: 5px; transition: all 250ms; box-shadow: 0 3px 5px rgba(0,0,0,.5); &.active { border-top-left-radius: 0; border-top-right-radius: 0; } } } // ---------------------------- // Eventlog/Activity // ---------------------------- .eventlog-filter { display: inline-block; padding-left: 0; margin: 20px 0; border-radius: 2px; .form-control { display: inline-block; width: 200px; vertical-align: middle; } } .eventlog-details { white-space: pre-wrap; background-color: white; } // ---------------------------- // Account/Notifications // ---------------------------- .notification-item { cursor: pointer; padding: 10px 15px; &:hover { box-shadow: 0 2px 27px rgba(0,0,0,.1); } &.notification-unread { border-left: solid 3px #2196f3; .notification-title { font-weight: bold; } } } // ---------------------------- // Branding // ---------------------------- .branding-avatar { position: relative; cursor: pointer; width: 64px; height: 64px; background-position: center; background-size: 100% 100%; background-repeat: no-repeat; border: 1px solid gray; border-radius: 3px; img { display: block; width: 100%; height: 100%; } } .branding-avatar-selector { text-align: center; .grid { margin-top: 20px; } .preview-avatar { text-align: center; } .item { display: inline-block; background-size: cover; background-repeat: no-repeat; background-position: center; width: 64px; height: 64px; margin: 5px; cursor: pointer; opacity: 0.6; transform: scale(1.0); transition: all 150ms; &:hover { opacity: 1; transform: scale(1.1); } &.add { border-radius: 2px; width: 54px; height: 54px; background-color: $brand-primary; background-image: url('/img/plus.png'); background-repeat: no-repeat; background-position: center; background-size: 50%; } } } .branding-background { position: relative; cursor: pointer; width: 256px; background-position: center; background-size: 100% 100%; background-repeat: no-repeat; border: 1px solid gray; border-radius: 3px; img { display: block; width: 100%; height: 100%; } } // ---------------------------- // Tag Input // ---------------------------- // https://codepen.io/webmatze/pen/isuHh tag-input { height: auto !important; cursor: text; .tag-input-container { display: flex; flex-direction: row; flex-wrap: wrap; input { flex-grow: 1; padding: 0px; font-size: 14px; line-height: 18px; color: black; border: 0px; margin: 4px 0; &:focus { outline: 0; box-shadow: 0px; } } .input-tag { margin: 2px 0; margin-right: 4px; :first-child { cursor: text; } } } } // ---------------------------- // Logs // ---------------------------- .logs { background: black; .logs-error { color: white; width: 100%; font-size: 18px; text-align: center; margin-top: 200px; } .logs-controls { margin: 5px; .ng-isolate-scope { float: left; } h3 { margin: 5px 0; color: white; } } .logs-container { flex-grow: 1; color: white; overflow: auto; margin: 5px; font-family: monospace; .log-line { line-height: 1.2; white-space: nowrap; width: 100%; &:hover { background-color: #333333; .time { background-color: #333333; } } .time { color: #00FFFF; position: sticky; left: 0; background: black; } } } } // ---------------------------- // Terminal // ---------------------------- .terminal-view { background: black; .terminal-controls { margin: 5px; .ng-isolate-scope { float: left; } h3 { margin: 5px 0; color: white; } } .terminal-container { flex-grow: 1; margin-bottom: 5px; color: white; overflow: hidden; padding: 5px; font-family: monospace; &.placeholder { display: flex; justify-content: center; align-items: center; flex-direction: column; } } .contextMenuBackdrop { display: none; position: absolute; top: 0; left: 0; width: 100%; height: 100%; } } // ---------------------------- // File Manager // ---------------------------- .filemanager { .layout-root { height: calc(100% - 30px); } .filemanager-layout { } .file-trees { display: flex; overflow: hidden; height: 100%; } filetree { width: 100%; position: relative; display: flex; flex-direction: column; &.two-pane { width: 50%; &:first-of-type { margin-right: 5px; padding-right: 5px; border-right: 1px solid #d3d3d3; } } } .toolbar { display: flex; margin-bottom: 10px; button { float: none; } div { white-space: nowrap; } .path-parts { margin: 0 5px; white-space: nowrap; overflow: auto; flex-grow: 1; } } .text-editor { display: flex; position: absolute; left: 0; top: 0; padding: 10px; margin: 0; width: 100%; height: 100%; flex-direction: column; background-color: $body-bg; .toolbar { width: 100%; display: flex; margin-bottom: 5px; justify-content: space-between; :not(:last-child) { margin-right: 5px; } div { flex-grow: 2; margin: auto; text-align: center; } } } // those are for drag'n'drop .file-list { overflow: auto; border: 2px solid transparent; position: relative; height: 100%; flex-grow: 1; &.top-scroll-indicator { transition: box-shadow 200ms; box-shadow: inset 0 10px 10px -10px rgba(0,0,0,0.5); } .table-hover > tbody > tr:hover { background-color: #0000000a; } .table td { vertical-align: middle; padding: 0; } } .file-list-header { th { padding: 0; } } table { border: 2px solid transparent; } .context-menu-action { display: inline-block; visibility: hidden; } tr:hover .context-menu-action { // display: inline-block; visibility: visible; } tr.entry-selected .context-menu-action { display: inline-block; color: white; } .entry-hovered { border: 2px solid $brand-primary; } .entry-hovered > td { border: none !important; } .entry-selected { background-color: $brand-primary !important; color: white !important; } .card { height: calc(100% - 20px); display: flex; flex-direction: column; overflow: hidden; margin-bottom: 10px; margin-top: 10px; h4 { a { text-decoration: none; color: $text-dark; &:hover { text-decoration: none; color: $brand_primary; } } } } } // ---------------------------- // Background image overrides // ---------------------------- .has-background { h1, h2, h3 { color: white; -webkit-text-stroke: 0.3px black; .btn { color: white; -webkit-text-stroke: 0; } } .modal-content { h1, h2, h3 { filter: none; color: $text_dark; } } .card { background-color: #ffffffe3; border-radius: 2px; } .navbar { background-color: #ffffffe3; } .dropdown-menu { background-color: #ffffffe3; } footer { background-color: #ffffffe3; } .app-configure-links { div { filter: drop-shadow(0 0 0.5px black); color: white; &:hover, &:focus { color: black; filter: none; } &.active { color: black; background-color: #ffffffe3; filter: none; } } } .btn-default, .open > .btn-default.dropdown-toggle { background-color: #ffffffcf; border-color: transparent; &:hover { border-color: white; background-color: #e2e2e2cf; } } .btn-primary { background-color: #2196f3c7; &:hover { background-color: #2196f3; } } .input-group-btn { .btn-default { border-color: #ccc; } } .highlight:hover { background-color: #ffffffe3 !important; } .app-status-container { filter: drop-shadow(0 0 0.5px black); color: white; } .app-header-container { h1 { a { filter: drop-shadow(0 0 0.5px black); color: white; &:hover, &:active, &:focus { text-decoration: none; color: $brand-primary; } } } } } // ---------------------------- // Dark mode overrides // ---------------------------- @media (prefers-color-scheme: dark) { $textColor: #959595; $backgroundLight: #2b2b2e; $backgroundDark: #1c1c1c; body, .modal-content, .setup { color: $textColor; background-color: $backgroundLight; } .view-header-filter-bar { background-color: $backgroundLight; } .appstore-toolbar { color: $textColor; } select.form-control { background-image: url("data:image/svg+xml;utf8,"); } .navbar-default { background-color: $backgroundDark; border-color: $backgroundDark; } .navbar-collapse.collapse.in { background-color: $backgroundDark; } .grid-item { .grid-item-content { background-color: $backgroundDark !important; &:hover { background-color: #4545459c !important; } .grid-item-action { color: white; background-color: rgba($backgroundDark, 0.1) !important; &:hover { background-color: $backgroundDark !important; } } } } .app-list .app-list-item .app-list-app-link { color: $textColor; } .app-list .app-list-item:hover .app-list-app-link { color: white; } footer, .card, .app-configure-links div.active { background-color: $backgroundDark; } .app-configure-links div:hover { background-color: $backgroundDark; color: $textColor; } .app-configure-links div { color: $textColor; } multiselect .dropdown-toggle { background-color: $backgroundDark; border-color: $backgroundDark; } .btn { background-color: $backgroundDark; } .btn[disabled] { opacity: 0.25; } .btn-default { color: $textColor !important; &:hover { color: #868686; } } code { background-color: $backgroundDark; color: #991a3a; } hr { border-top: 1px solid #868686; } input { background-color: $backgroundLight; } tag-input .tag-input-container input { color: $textColor; } .form-control { background-color: $backgroundLight; border-color: #676767; color: $textColor; } fieldset[disabled] .form-control, .form-control[disabled], .form-control[readonly] { background-color: $backgroundDark; } .app-configure .app-header-container h1 a { color: $textColor; } .appstore-item-content { background-color: $backgroundDark; &.highlight:hover { background-color: #4545459c !important; color: white !important; } } .modal-header { border-bottom: none; } .modal-footer { border-top: none; } .navbar-default .navbar-nav > .open > a { background-color: transparent !important; } .dropdown-menu { background-color: $backgroundDark; } .dropdown-menu > li > a { color: $textColor; } multiselect .dropdown-toggle:hover { background-color: #222; } .table-hover > tbody > tr:hover { background-color: $backgroundLight; color: white; } .email-domain-list-item, .email-domain-list-item:hover { color: $textColor; } .nav-tabs { border-bottom: 1px solid $backgroundDark; } .nav-tabs > li > a .nav-tabs > li > a:focus, .nav-tabs > li > a:hover { background-color: $backgroundLight; border: 1px solid $backgroundDark; border-bottom-color: transparent; } .nav-tabs > li.active > a, .nav-tabs > li.active > a:focus, .nav-tabs > li.active > a:hover { background-color: $backgroundDark; color: $textColor; border: 1px solid $backgroundDark; } .filemanager { .text-editor { background-color: $backgroundDark; color: $textColor; } } .has-background { $darkBackgroundColor: #000000e0; .card { background-color: $darkBackgroundColor; border-radius: 2px; } .navbar-default { background-color: #000000e3; } .navbar-collapse.collapse.in { background-color: #000000e3; } .dropdown-menu { background-color: #000000e3; } footer { background-color: $darkBackgroundColor; } .btn-default { background-color: $darkBackgroundColor; border-color: #868686cf; color: white; &:hover { color: white; border-color: #868686cf; } } } }