/* Copyright (c) 2011, Jan-Christoph Borchardt, http://jancborchardt.net This file is licensed under the Affero General Public License version 3 or later. See the COPYING-README file. */ @use 'variables'; @import 'functions'; input { &#openid, &#webdav { width: 20em; } } /* PERSONAL */ .clear { clear: both; } /* icons for sidebar */ .nav-icon-personal-settings { @include icon-color('personal', 'settings', variables.$color-black); } .nav-icon-security { @include icon-color('toggle-filelist', 'settings', variables.$color-black); } .nav-icon-clientsbox { @include icon-color('change', 'settings', variables.$color-black); } .nav-icon-federated-cloud { @include icon-color('share', 'settings', variables.$color-black); } .nav-icon-second-factor-backup-codes, .nav-icon-ssl-root-certificate { @include icon-color('password', 'settings', variables.$color-black); } #personal-settings-avatar-container { display: inline-grid; grid-template-columns: 1fr; grid-template-rows: 2fr 1fr 2fr; vertical-align: top; } .profile-settings-container { display: inline-grid; grid-template-columns: 1fr 1fr 1fr; } .personal-show-container { width: 100%; } .personal-settings-setting-box { .section { padding: 10px 30px; .headerbar-label { margin-bottom: 0; } input { &[type='text'], &[type='email'], &[type='tel'], &[type='url'] { width: 100%; } } } &-profile { grid-row: 3/5; } &-detail { grid-row: 5; } &-detail--without-profile { grid-row: 3; } } select { &#timezone { width: 100%; } } #personal-settings { display: grid; padding: 20px; max-width: 1700px; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); grid-column-gap: 10px; .section { padding: 10px 10px; border: 0; h2 { margin-bottom: 12px; } h3 { > label { font-weight: bold; } } } .personal-info { margin-right: 10%; margin-bottom: 12px; margin-top: 12px; } .personal-info[class^='icon-'], .personal-info[class*=' icon-'] { background-position: 0px 2px; padding-left: 30px; opacity: 0.7; } } // Button for 'Reasons to use Nextcloud in your organization' .development-notice { text-align: center; a:not(.link-button) { text-decoration: underline; &:hover { background-color: var(--color-primary-element-hover); } } } .link-button { display: inline-block; margin: 16px; padding: 14px 20px; background-color: var(--color-primary-element); color: #fff; border-radius: var(--border-radius-pill); border: 1px solid var(--color-primary-element); box-shadow: 0 2px 9px var(--color-box-shadow); &:active, &:hover, &:focus { color: var(--color-primary-element); background-color: var(--color-primary-element-text); border-color: var(--color-primary-element) !important; } &.icon-file { padding-left: 48px; background-position: 24px; } } .personal-settings-container { display: inline-grid; grid-template-columns: 1fr 1fr 1fr; &:after { clear: both; } > div { h3 { position: relative; display: inline-flex; flex-wrap: nowrap; justify-content: flex-start; width: 100%; align-items: center; gap: 8px; > label { white-space: nowrap; text-overflow: ellipsis; overflow: hidden; } } > form span { &[class^='icon-checkmark'], &[class^='icon-error'] { position: relative; right: 8px; top: -28px; pointer-events: none; float: right; } } } .verify { position: relative; left: 100%; top: 0; height: 0; img { padding: 12px 7px 6px; } } .verify-action { cursor: pointer; } input:disabled { background-color: white; color: black; border: none; opacity: 100; } } /* verify accounts */ /* only show pointer cursor when popup will be there */ .verification-dialog { display: none; right: -9px; top: 40px; width: 275px; p { padding: 10px; } .verificationCode { font-family: monospace; display: block; overflow-wrap: break-word; } } .federation-menu { position: relative; cursor: pointer; width: 44px; height: 44px; padding: 10px; margin: 0; background: none; border: none; &:hover, &:focus { background-color: var(--color-background-hover); border-radius: var(--border-radius-pill); .icon-federation-menu { opacity: 0.8; } } .icon-federation-menu { padding-left: 16px; background-size: 16px; background-position: left center; opacity: .3; cursor: inherit; .icon-triangle-s { display: inline-block; vertical-align: middle; cursor: inherit; } } .federationScopeMenu { top: 44px; &.popovermenu { .menuitem { // override h3 heading font size font-size: 12.8px; line-height: 1.6em; .menuitem-text-detail { opacity: .75; } &.active { box-shadow: inset 2px 0 var(--color-primary-element); .menuitem-text { font-weight: bold; } } &.disabled { opacity: .5; cursor: default; * { cursor: default; } } } } } } .clientsbox img { height: 60px; } #sslCertificate { tr.expired { background-color: rgba(255, 0, 0, 0.5); } td { padding: 5px; } } #displaynameerror, #displaynamechanged { display: none; } input#identity { width: 20em; } #showWizard { display: inline-block; } .msg { &.success { color: #fff; background-color: #47a447; padding: 3px; } &.error { color: #fff; background-color: #d2322d; padding: 3px; } } table.nostyle { label { margin-right: 2em; } td { padding: 0.2em 0; } } #security-password { #passwordform { display: flex; flex-wrap: wrap; flex-direction: column; gap: 1rem; .input-control { display: flex; flex-wrap: wrap; flex-direction: column; label { margin-bottom: 0.5rem; } } #pass1, .personal-show-container { flex-shrink: 1; width: 300px; min-width: 150px; } // Extremely fragile code, to be replaced by PasswordField component soon .personal-show-container { #pass2 { position: relative; top: 0.5rem; } .personal-show-label { top: 34px !important; margin-right: 0; margin-top: 0 !important; right: 3px; } } #pass2 { width: 100%; } .password-state { display: inline-block; } .strengthify-wrapper { position: absolute; left: 0; width: 100%; border-radius: 0 0 2px 2px; margin-top: 5px; overflow: hidden; height: 3px; } } } /* Two-Factor Authentication (2FA) */ #two-factor-auth { h3 { margin-top: 24px; } li > div { margin-left: 20px; } .two-factor-provider-settings-icon { width: 16px; height: 16px; vertical-align: sub; filter: var(--background-invert-if-dark); } } /* USERS */ .isgroup { .groupname { width: 85%; display: block; overflow: hidden; text-overflow: ellipsis; } &.active .groupname { width: 65%; } } li.active { .delete, .rename { display: block; } } .app-navigation-entry-utils { .delete, .rename { display: none; } } #usersearchform { position: absolute; top: 2px; right: 0; input { width: 150px; } label { font-weight: bold; } } /* display table at full width */ table.grid { width: 100%; th { height: 2em; color: #999; border-bottom: 1px solid var(--color-border); padding: 0 .5em; padding-left: .8em; text-align: left; font-weight: normal; } td { border-bottom: 1px solid var(--color-border); padding: 0 .5em; padding-left: .8em; text-align: left; font-weight: normal; } } td, th { &.name { padding-left: .8em; min-width: 5em; max-width: 12em; text-overflow: ellipsis; overflow: hidden; } &.password { padding-left: .8em; > img { visibility: hidden; } } &.displayName > img { visibility: hidden; } &.password, &.mailAddress { min-width: 5em; max-width: 12em; cursor: pointer; span { width: 90%; display: inline-block; text-overflow: ellipsis; overflow: hidden; } } &.mailAddress { cursor: pointer; } &.password > span { margin-right: 1.2em; color: #C7C7C7; } } span.usersLastLoginTooltip { white-space: nowrap; } /* APPS */ #app-content > svg.app-filter { float: left; height: 0; width: 0; } #app-category-app-bundles { margin-bottom: 20px; } .appinfo { margin: 1em 40px; } #app-navigation { /* Navigation icons */ img { margin-bottom: -3px; margin-right: 6px; width: 16px; } li span.no-icon { padding-left: 32px; } ul li.active > span.utils { .delete, .rename { display: block; } } .appwarning { background: #fcc; } &.appwarning:hover { background: #fbb; } .app-external { color: var(--color-text-maxcontrast); } } span.version { margin-left: 1em; margin-right: 1em; color: var(--color-text-maxcontrast); } .app-version { color: var(--color-text-maxcontrast); } .app-level { span { color: var(--color-text-maxcontrast); background-color: transparent; border: 1px solid var(--color-text-maxcontrast); border-radius: var(--border-radius); padding: 3px 6px; } a { padding: 10px; margin: -6px; white-space: nowrap; } .official { background-position: left center; background-position: 5px center; padding-left: 25px; } .supported { border-color: var(--color-success); background-position: left center; background-position: 5px center; padding-left: 25px; color: var(--color-success); } } .app-score { position: relative; top: 4px; opacity: .5; } .app-settings-content { #searchresults { display: none; } } #apps-list.store { .section { border: 0; } .app-name { display: block; margin: 5px 0; } .app-name, .app-image * { cursor: pointer; } .app-summary { opacity: .7; } .app-image-icon .icon-settings-dark { width: 100%; height: 150px; background-size: 45px; opacity: 0.5; } .app-score-image { height: 14px; } .actions { margin-top: 10px; } } #app-sidebar #app-details-view { h2 { .icon-settings-dark, svg { display: inline-block; width: 16px; height: 16px; margin-right: 10px; opacity: .7; } } .app-level { clear: right; width: 100%; .supported, .official { vertical-align: top; } .app-score-image { float: right; } } .app-author, .app-licence { color: var(--color-text-maxcontrast); } .app-dependencies { margin: 10px 0; } .app-description p { margin: 10px 0; } .close { position: absolute; top: 0; right: 0; padding: 14px; opacity: 0.5; z-index: 1; width: 44px; height: 44px; } .actions { display: flex; align-items: center; .app-groups { padding: 5px; } } .appslink { text-decoration: underline; margin-right: 5px; } .app-level, .actions, .documentation, .app-dependencies, .app-description { margin: 20px 0; } } @media only screen and (min-width: 1601px) { .store .section { width: 25%; } .with-app-sidebar .store .section { width: 33%; } } @media only screen and (max-width: 1600px) { .store .section { width: 25%; } .with-app-sidebar .store .section { width: 33%; } } @media only screen and (max-width: 1400px) { .store .section { width: 33%; } .with-app-sidebar .store .section { width: 50%; } } @media only screen and (max-width: 900px) { .store .section { width: 50%; } .with-app-sidebar .store .section { width: 100%; } } @media only screen and (max-width: variables.$breakpoint-mobile) { .store .section { width: 50%; } } @media only screen and (max-width: 480px) { .store .section { width: 100%; } } /* hide app version and level on narrower screens */ @media only screen and (max-width: 900px) { .apps-list.installed { .app-version, .app-level { display: none !important; } } } @media only screen and (max-width: 500px) { .apps-list.installed .app-groups { display: none !important; } } .section { margin-bottom: 0; /* section divider lines, none needed for last one */ &:not(:last-child) { border-bottom: 1px solid var(--color-border); } /* correctly display help icons next to headings */ h2 { margin-bottom: 22px; .icon-info { padding: 6px 20px; vertical-align: text-bottom; display: inline-block; } } } .followupsection { display: block; padding: 0 30px 30px 30px; } .app-image { position: relative; height: 150px; opacity: 1; overflow: hidden; } .app-name, .app-version, .app-score, .app-level { display: inline-block; } .app-description-toggle-show, .app-description-toggle-hide { clear: both; padding: 7px 0; cursor: pointer; opacity: .5; } .app-description-container { clear: both; position: relative; top: 7px; } .app-description { clear: both; } #app-category-1 { margin-bottom: 18px; } /* capitalize 'Other' category */ #app-category-925 { text-transform: capitalize; } .app-dependencies { color: #ce3702; } .missing-dependencies { list-style: initial; list-style-type: initial; list-style-position: inside; } .apps-list { $toolbar-padding: 8px; $toolbar-height: 44px + $toolbar-padding * 2; .section { cursor: pointer; } .app-list-move { transition: transform 1s; } #app-list-update-all { margin-left: 10px; } .toolbar { height: $toolbar-height; padding: $toolbar-padding; // Leave room for app-navigation-toggle padding-left: $toolbar-height; width: 100%; background-color: var(--color-main-background); position: sticky; top: 0; z-index: 1; display: flex; align-items: center; } &.installed { .apps-list-container { display: table; width: 100%; height: auto; margin-top: $toolbar-height; } margin-bottom: 100px; .section { display: table-row; padding: 0; margin: 0; > * { display: table-cell; height: initial; vertical-align: middle; float: none; border-bottom: 1px solid var(--color-border); padding: 6px; box-sizing: border-box; } &.selected { background-color: var(--color-background-dark); } } .groups-enable { margin-top: 0; label { margin-right: 3px; } } .app-image { width: 44px; height: auto; text-align: right; } .app-image-icon svg, .app-image-icon .icon-settings-dark { margin-top: 5px; width: 20px; height: 20px; opacity: .5; background-size: cover; display: inline-block; } .actions { text-align: right; .icon-loading-small { display: inline-block; top: 4px; margin-right: 10px; } } } &:not(.installed) .app-image-icon svg { position: absolute; bottom: 43px; /* position halfway vertically */ width: 64px; height: 64px; opacity: .1; } display: flex; flex-wrap: wrap; align-content: flex-start; &.hidden { display: none; } .section { position: relative; flex: 0 0 auto; h2.app-name { display: block; margin: 8px 0; } &:hover { background-color: var(--color-background-dark); } } .app-description { p { margin: 10px 0; } ul { list-style: disc; } ol { list-style: decimal; ol, ul { padding-left: 15px; } } > { ul, ol { margin-left: 19px; } } ul { ol, ul { padding-left: 15px; } } } /* Bundle header */ .apps-header { display: table-row; position: relative; div { display: table-cell; height: 70px; } h2 { display: table-cell; position: absolute; padding-left: 6px; padding-top: 15px; .enable { position: relative; top: -1px; margin-left: 12px; } + .section { margin-top: 50px; } } } } #apps-list-search { .section { h2 { margin-bottom: 0; } } } /* LOG */ #log { white-space: normal; margin-bottom: 14px; } #lessLog { display: none; } table.grid td.date { white-space: nowrap; } #log-section p { margin-top: 20px; } #security-warning-state-ok, #security-warning-state-warning, #security-warning-state-failure, #security-warning-state-loading { span { vertical-align: middle; &.message { padding: 12px; } &.icon { width: 32px; height: 32px; background-position: center center; display: inline-block; border-radius: 50%; } &.icon-checkmark-white { background-color: var(--color-success); } &.icon-error-white { background-color: var(--color-warning); } &.icon-close-white { background-color: var(--color-error); } } } #shareAPI { &.loading > div { display: none; } p { padding-bottom: 0.8em; } .indent { padding-left: 28px; } .double-indent { padding-left: 56px; } .nocheckbox { padding-left: 20px; } } #shareApiDefaultPermissionsSection label { margin-right: 20px; } #fileSharingSettings h3 { display: inline-block; } #publicShareDisclaimerText { width: calc(100% - 23px); /* 20 px left margin, 3 px right margin */ max-width: 600px; height: 150px; margin-left: 20px; box-sizing: border-box; } /* correctly display help icons next to headings */ .icon-info { padding: 11px 20px; vertical-align: text-bottom; opacity: .5; } #two-factor-auth h2, #shareAPI h2, #mail_general_settings h2 { display: inline-block; } .mail_settings p { label:first-child { display: inline-block; width: 300px; text-align: right; } select:nth-child(2), input:not([type='button']) { width: 143px; } } #mail_smtpport { width: 60px; } .cronlog { margin-left: 10px; } .status { display: inline-block; height: 16px; width: 16px; vertical-align: text-bottom; &.success { border-radius: 50%; } } #selectGroups select { box-sizing: border-box; display: inline-block; height: 36px; padding: 7px 10px; } #log .log-message { word-break: break-all; min-width: 180px; } span { &.success { background-color: var(--color-success); border-radius: var(--border-radius); } &.error { background-color: var(--color-error); } &.indeterminate { background-color: var(--color-warning); border-radius: 40% 0; } } /* OPERA hack for strengthify*/ doesnotexist:-o-prefocus, .strengthify-wrapper { left: 185px; width: 129px; } .trusted-domain-warning { color: #fff; padding: 5px; background: #ce3702; border-radius: 5px; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; } #postsetupchecks { ul { margin-left: 44px; list-style: disc; li { margin: 10px 0; } ul { list-style: circle; } } .loading { height: 50px; background-position: left center; } .errors, .errors a { color: var(--color-error); } .warnings, .warnings a { color: var(--color-warning); } .hint { margin: 20px 0; } } #security-warning { a { text-decoration: underline; } .extra-top-margin { margin-top: 12px; } } #admin-tips li { list-style: initial; a { display: inline-block; padding: 3px 0; } } #warning { color: red; } .settings-hint { margin-top: -12px; margin-bottom: 12px; opacity: .7; } /* USERS LIST -------------------------------------------------------------- */ #body-settings { $grid-row-height: 60px; $grid-col-min-width: 160px; #app-content.user-list-grid { display: grid; grid-column-gap: 20px; grid-auto-rows: minmax(60px, max-content); .row { // TODO replace with css4 subgrid when available // fallback for ie11 no grid display: flex; display: grid; min-height: $grid-row-height; grid-row-start: span 1; grid-gap: 3px; align-items: center; /* let's define the column until storage path, what follows will be manually defined */ grid-template-columns: 44px minmax($grid-col-min-width + 30px, 1fr) // username, displayname minmax($grid-col-min-width, 1fr) // password minmax($grid-col-min-width, 1fr) // email minmax(1.5*$grid-col-min-width, 1fr) // groups minmax(1.5*$grid-col-min-width, 1fr) // group admins minmax($grid-col-min-width, 1fr) // quota minmax(1.5*$grid-col-min-width, 1fr) // manager repeat(auto-fit, minmax($grid-col-min-width, 1fr)); border-bottom: var(--color-border) 1px solid; &.disabled { opacity: .5; } /* grid col width */ .name, .password, .mailAddress, .languages, .storageLocation, .userBackend, .lastLogin { min-width: $grid-col-min-width; doesnotexist:-o-prefocus, .strengthify-wrapper { color: var(--color-text-dark); vertical-align: baseline; text-overflow: ellipsis; } } &:not(.row--editable) { &.name, &.password, &.displayName, &.mailAddress, &.userBackend, &.languages { overflow: hidden; } } // Scroll if too much groups &:not(.row--editable) { .groups, .subadmins, .subAdminsGroups { overflow: auto; max-height: 100%; } } .managers, .groups, .subadmins, .subAdminsGroups, .quota { min-width: $grid-col-min-width; .select { width: 100%; color: var(--color-text-dark); vertical-align: baseline; } progress { max-width: 95%; } } .obfuscated { width: 400px; opacity: .7; } .userActions { display: flex; justify-content: flex-end; position: sticky; right: 0px; min-width: 88px; background-color: var(--color-main-background); } &.row--editable .userActions { z-index: 10; } .subtitle { color: var(--color-text-maxcontrast); vertical-align: baseline; } /* various */ &#grid-header { position: sticky; align-self: normal; background-color: var(--color-main-background); z-index: 100; /* above multiselect */ top: 0; &.sticky { box-shadow: 0 -2px 10px 1px var(--color-box-shadow); } } &#grid-header { color: var(--color-text-maxcontrast); border-bottom-width: thin; #headerDisplayName, #headerPassword, #headerAddress, #headerGroups, #headerSubAdmins, #theHeaderUserBackend, #theHeaderLastLogin, #headerQuota, #theHeaderStorageLocation, #headerLanguages { /* Line up header text with column content for when there’s inputs */ padding-left: 7px; text-transform: none; color: var(--color-text-maxcontrast); vertical-align: baseline; } } &:hover { &:not(#grid-header) { box-shadow: 5px 0 0 var(--color-primary-element) inset; } } > form { width: 100%; } > div, > .displayName > form, > form { grid-row: 1; display: inline-flex; color: var(--color-text-lighter); flex-grow: 1; > input:not(:focus):not(:active) { border-color: transparent; cursor: pointer; } > input:focus, > input:active { + .icon-confirm { display: block !important; } } /* inputs like mail, username, password */ &:not(.userActions) > input:not([type='submit']) { width: 100%; min-width: 0; } &.name { word-break: break-all; } &.displayName, &.mailAddress { > input { text-overflow: ellipsis; flex-grow: 1; } } &.name, &.userBackend { /* better multi-line visual */ line-height: 1.3em; max-height: 100%; overflow: hidden; /* not supported by all browsers so we keep the overflow hidden as a fallback */ text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; } &.name .subtitle { color: var(--color-main-text); } &.quota { display: flex;; justify-content: left; white-space: nowrap; position: relative; progress { width: 150px; margin-top: 35px; height: 3px; } } .icon-confirm { flex: 0 0 auto; cursor: pointer; &:not(:active) { display: none; } } &.avatar { height: 32px; width: 32px; margin: 6px; img { display: block; } } &.userActions { display: flex; align-items: center; justify-content: flex-end; // Make sure to cover whole row height: 100%; width: fit-content; padding-inline: 12px; background-color: var(--color-main-background); } } } .infinite-loading-container { display: flex; align-items: center; justify-content: center; grid-row-start: span 4; } .users-list-end { opacity: .5; user-select: none; } } } .animated { animation: blink-animation 1s steps(5, start) 4; } @keyframes blink-animation { to { opacity: 0.6; } } @-webkit-keyframes blink-animation { to { opacity: 1; } }