$brand-primary: #2196F3 !default; // #62bdfc $brand-success: #27CE65 !default; $brand-info: #5bc0de !default; $brand-warning: #f0ad4e !default; $brand-danger: #d9534f !default; $body-bg: #E5E5E5; $font-family-sans-serif: Roboto, Helvetica, Arial, sans-serif; $font-family-heading: Roboto-Light, Helvetica, Arial, sans-serif; $navbar-default-link-color: #428BCA !default; $navbar-default-link-hover-color: #62bdfc !default; $navbar-default-link-active-color: #62bdfc !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; @import "bootstrap"; @font-face { font-family: Roboto; src: url(3rdparty/Roboto-Regular.ttf); } @font-face { font-family: Roboto-Light; src: url(3rdparty/Roboto-Light.ttf); } // ---------------------------- // Bootstrap extension // ---------------------------- .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; } .btn-admin { color: white !important; background-color: $brand-danger !important; border-color: $brand-danger !important; } .elide-table-cell { text-overflow: ellipsis; white-space: nowrap; overflow: hidden; max-width: 300px; width: 300px; } .dropdown-menu>li>a:focus, .dropdown-menu>li>a:hover { background-color: $brand-primary; color: white; } input[type="checkbox"] { margin-top: 2px; } // ---------------------------- // Main classes // ---------------------------- html, body { height: 100%; width: 100%; padding: 0; } .layout-root { display: flex; flex-direction: column; height: 100%; max-height: 100%; width: 100%; } .layout-content { flex-grow: 1; overflow: auto; } #ng-view { display: flex; flex-direction: column; } .shadow { box-shadow: 0px 2px 5px rgba(0, 0, 0, 0.1); } .blurred { filter: blur(2px); } .passive { pointer-events: none; user-select: none; } .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; &.content-large { width: 970px; max-width: 970px; } } } .navbar { display: block; width: 100%; flex-grow: 0; .navbar-collapse { background-color: #F8F8F8; } @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; } // ---------------------------- // Apps view // ---------------------------- .grid-item { padding: 10px; min-width: 225px; .col-xs-12 { padding-left: 5px; padding-right: 5px; .status, .status { padding-left: 5px; padding-right: 5px; } } } .grid-item:hover .grid-item-bottom { @media(min-width:768px) { opacity: 1; right: 10px; } } .grid-item-content { background-color: white; box-shadow: 0px 2px 5px rgba(0, 0, 0, 0.1); border-radius: 2px; } .grid-item-top { padding: 10px 15px; } .grid-item-top-title { white-space: nowrap; overflow: hidden; font-size: 24px; font-family: $font-family-heading; } .grid-item-bottom-mobile { padding: 10px 15px; border-top: 1px solid #ddd; background-color: white; @media(min-width:768px) { display: none; } } .grid-item-bottom { display: none; position: absolute; top: 20px; padding: 10px 15px; right: -10px; opacity: 0; background-color: transparent; transition: all 250ms; @media(min-width:768px) { display: block; } } .app-update-badge { position: absolute; right: 0; top: 0; } .app-postinstall-message { max-height: 500px; overflow-x: none; overflow-y: auto; } .app-info-title { display: inline-block; margin: 5px 10px; } .app-info-meta { margin-left: 10px; color: $text-muted; } .app-info-icon { float: left; min-height: 64px; max-height: 64px; min-width: 64px; max-width: 100%; } .app-tooltip { left: 32px !important; } multiselect { &.stretch { button { min-width: 120px; } } .dropdown-toggle { background-color: white; border-color: #ccc; &:hover { background-color: white; } } } // ---------------------------- // Appstore view // ---------------------------- .appstore-login { position: fixed; margin: 50px auto !important; left: 0; right: 0; h1 { font-size: 32px; } } .appstore-item { padding: 10px; width: 300px; } .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; } .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; } .appstore-item-content-tagline { text-overflow: ellipsis; overflow: hidden; height: 44px; // show two lines } .appstore-item-content-icon { width: 100px; min-width: 100px; max-width: 100px; padding-left: 10px; padding-right: 10px; } .appstore-item-content-description { width: 160px; min-width: 160px; max-width: 160px; } .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-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; } .scale { transition: transform 100ms ease-out; &:hover { transform: scale(2) } } .scale-small { transition: transform 100ms ease-out; &:hover { transform: scale(1.5) } } .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 { 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; } .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; } .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%; } // ---------------------------- // 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; a { color: $brand-danger; } } footer { flex-grow: 0; background-color: #f8f8f8; 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; padding: 0 10px; } } .hand { cursor: pointer; } .arrow { cursor: default; } // ---------------------------- // Upgrade // ---------------------------- .region-select-map { width: 600px; height: 300px; display: table; margin: auto; cursor: pointer; } .region-selected { opacity: 1 !important; } .region-select { display: inline-block; float: left; opacity: 0.5; height: 300px; transition: all 250ms; } .region-select:hover { opacity: 1; } .region-pin { display: block; position: relative; top: 0; opacity: 0; transition: all 250ms cubic-bezier(0.430, 0.950, 0.810, 1.280); } .region-pin-left { left: 27px; } .region-pin-right { left: -95px; } .region-pin-selected-left { top: 95px; opacity: 1; } .region-pin-selected-right { top: 73px; opacity: 1; } .cloudron-model-list { display: table; width: 100%; } .cloudron-model-item { display: table-cell; padding: 10px; margin: auto; vertical-align: bottom; } .cloudron-model-item-content { display: table-cell; width: 200px; transition: all 250ms; transform: scale(0.95); cursor: pointer; margin: auto; padding: 10px; border-radius: 5px; background-color: rgb(177, 177, 177); color: white; vertical-align: bottom; } .cloudron-model-item-content:hover { transform: scale(1); } .cloudron-model-item-content:hover h4, .cloudron-model-item-content:hover h5 { color: white; transition: all 250ms; } // ---------------------------- // 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; text-align: center; vertical-align: middle; width: 100%; } } } // ---------------------------- // Graphs classes // ---------------------------- .graphs { text-align: 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 // ---------------------------- .settings-avatar { cursor: pointer; width: 128px; height: 128px; background-position: center; background-size: cover; background-repeat: no-repeat; .overlay { width: 100%; height: 100%; background-color: rgba(255, 255, 255 ,0.3); background-image: url('/img/plus.png'); background-repeat: no-repeat; background-position: center; transition: all 150ms; opacity: 0; &:hover { opacity: 1; } } } .settings-avatar-selector { text-align: center; .grid { margin-top: 20px; } .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 { 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; } // ---------------------------- // 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 // ---------------------------- .filter { display: inline-block; padding-left: 0; margin: 20px 0; border-radius: 2px; .form-control { display: inline-block; width: 200px; } } .eventlog-details { white-space: pre-wrap; background-color: white; } // ---------------------------- // Tag Input // ---------------------------- // https://codepen.io/webmatze/pen/isuHh .tag-input-container { input { display: inline-block; float: left; height: 18px; padding: 0px; font-size: 14px; line-height: 18px; color: black; border: 0px; margin: 1px; &:focus { outline: 0; box-shadow: 0px; } } .input-tag { padding: 2px 4px; line-height: 12px; font-size: 11px; background-color: #e3eaf6; display: inline-block; float: left; border-radius: 2px; margin: 2px 5px 2px 0px; border: 1px solid #a9b6d2; .delete-tag { display: inline-block; font-size: 12px; cursor: pointer; padding: 0px 2px; &:hover { background-color: #96b4d2; } } } } // ---------------------------- // Logs // ---------------------------- .logs { background: black; .logs-controls { margin: 5px; .ng-isolate-scope { float: left; } h3 { margin: 5px 0; color: white; } } .logs-container { flex-grow: 1; margin-bottom: 5px; color: white; overflow: auto; padding: 5px; font-family: monospace; .log-line { line-height: 1.2; &:hover { background-color: #333333; } .time { color: #00FFFF; } } } } // ---------------------------- // 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: auto; 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%; } }