diff --git a/apps/dashboard/css/dashboard.css b/apps/dashboard/css/dashboard.css new file mode 100644 index 0000000000000..ea01e0f771bce --- /dev/null +++ b/apps/dashboard/css/dashboard.css @@ -0,0 +1,48 @@ +.skip-navigation:not(.skip-content) { + display: none; +} + +.skip-navigation.skip-content { + left: 3px; +} + +#header { + background: transparent !important; + --color-header: rgba(24, 24, 24, 1); +} +#body-user.dashboard--dark #header { + --color-header: rgba(255, 255, 255, 1); +} +#header:before { + content: " "; + display: block; + position: absolute; + background-image: linear-gradient(180deg, var(--color-header) 0%, transparent 100%); + width: 100%; + height: 70px; + top: 0; + margin-top: -70px; + transition: margin-top var(--animation-slow); +} +#body-user.dashboard--scrolled #header:before { + margin-top: 0; +} +#body-user.theme--highcontrast #header { + background-color: var(--color-header) !important; +} +#body-user.theme--highcontrast #header:before { + display: none; +} + +#content { + padding-top: 0 !important; +} + +#appmenu li a.active::before, +#appmenu li:hover a::before, +#appmenu li:hover a.active::before, +#appmenu li a:focus::before { + display: none !important; +} + +/*# sourceMappingURL=dashboard.css.map */ diff --git a/apps/dashboard/css/dashboard.css.map b/apps/dashboard/css/dashboard.css.map new file mode 100644 index 0000000000000..15b99dd3883ee --- /dev/null +++ b/apps/dashboard/css/dashboard.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["dashboard.scss"],"names":[],"mappings":"AACA;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;;AAEA;EACC;;AAID;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;;AAKF;EACC;;AAEA;EACC;;;AAMH;EACC;;;AAID;AAAA;AAAA;AAAA;EAIC","file":"dashboard.css"} \ No newline at end of file diff --git a/apps/encryption/css/settings-personal.css b/apps/encryption/css/settings-personal.css new file mode 100644 index 0000000000000..9b795f053828c --- /dev/null +++ b/apps/encryption/css/settings-personal.css @@ -0,0 +1,16 @@ +/* Copyright (c) 2013, Sam Tuke, + This file is licensed under the Affero General Public License version 3 or later. + See the COPYING-README file. */ +#encryptAllError, +#encryptAllSuccess, +#recoveryEnabledError, +#recoveryEnabledSuccess { + display: none; +} + +/* icons for sidebar */ +.nav-icon-basic-encryption-module { + background-image: var(--icon-encryption-dark); +} + +/*# sourceMappingURL=settings-personal.css.map */ diff --git a/apps/encryption/css/settings-personal.css.map b/apps/encryption/css/settings-personal.css.map new file mode 100644 index 0000000000000..979a14d9aec66 --- /dev/null +++ b/apps/encryption/css/settings-personal.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["settings-personal.scss"],"names":[],"mappings":"AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;EAIC;;;AAGD;AACA;EACC","file":"settings-personal.css"} \ No newline at end of file diff --git a/apps/federatedfilesharing/css/settings-admin.css b/apps/federatedfilesharing/css/settings-admin.css new file mode 100644 index 0000000000000..d043ebae43bb9 --- /dev/null +++ b/apps/federatedfilesharing/css/settings-admin.css @@ -0,0 +1,5 @@ +#fileSharingSettings h2 { + display: inline-block; +} + +/*# sourceMappingURL=settings-admin.css.map */ diff --git a/apps/federatedfilesharing/css/settings-admin.css.map b/apps/federatedfilesharing/css/settings-admin.css.map new file mode 100644 index 0000000000000..9b1d105e143df --- /dev/null +++ b/apps/federatedfilesharing/css/settings-admin.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["settings-admin.scss"],"names":[],"mappings":"AAAA;EACC","file":"settings-admin.css"} \ No newline at end of file diff --git a/apps/federatedfilesharing/css/settings-personal.css b/apps/federatedfilesharing/css/settings-personal.css new file mode 100644 index 0000000000000..16e482beecc76 --- /dev/null +++ b/apps/federatedfilesharing/css/settings-personal.css @@ -0,0 +1,107 @@ +@charset "UTF-8"; +/** + * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com) + * + * @author John Molakvoæ (skjnldsv) + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ +/** + * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com) + * + * @author John Molakvoæ (skjnldsv) + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ +/** + * @see core/src/icons.js + */ +/** + * SVG COLOR API + * + * @param string $icon the icon filename + * @param string $dir the icon folder within /core/img if $core or app name + * @param string $color the desired color in hexadecimal + * @param int $version the version of the file + * @param bool [$core] search icon in core + * + * @returns A background image with the url to the set to the requested icon. + */ +#fileSharingSettings h2 { + display: inline-block; +} + +#fileSharingSettings img { + cursor: pointer; +} + +#fileSharingSettings xmp { + margin-top: 0; + white-space: pre-wrap; +} + +#fileSharingSettings .icon { + background-size: 16px 16px; + display: inline-block; + position: relative; + top: 3px; + margin-left: 5px; +} + +[class^=social-], [class*=" social-"] { + background-repeat: no-repeat; + background-position: 8px; + min-width: 16px; + min-height: 16px; + padding-left: 28px; + background-size: 16px; +} + +.social-diaspora { + /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */ + background-image: var(--icon-social-diaspora-dark); +} + +.social-twitter { + /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */ + background-image: var(--icon-social-twitter-dark); +} + +.social-facebook { + /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */ + background-image: var(--icon-social-facebook-dark); +} + +.social_sharing_buttons { + padding-left: 30px !important; +} + +/*# sourceMappingURL=settings-personal.css.map */ diff --git a/apps/federatedfilesharing/css/settings-personal.css.map b/apps/federatedfilesharing/css/settings-personal.css.map new file mode 100644 index 0000000000000..490e82ccb2828 --- /dev/null +++ b/apps/federatedfilesharing/css/settings-personal.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["../../../core/css/variables.scss","../../../core/css/functions.scss","settings-personal.scss"],"names":[],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBA;AAAA;AAAA;AA4BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AC/CA;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;;;AAGD;AD8BC;EAEA;;;AC7BD;AD2BC;EAEA;;;AC1BD;ADwBC;EAEA;;;ACtBD;EACC","file":"settings-personal.css"} \ No newline at end of file diff --git a/apps/files/css/detailsView.css b/apps/files/css/detailsView.css new file mode 100644 index 0000000000000..46c2eeabe367e --- /dev/null +++ b/apps/files/css/detailsView.css @@ -0,0 +1,133 @@ +.app-sidebar .detailFileInfoContainer { + min-height: 50px; + padding: 15px; +} + +.app-sidebar .detailFileInfoContainer > div { + clear: both; +} + +.app-sidebar .mainFileInfoView .icon { + display: inline-block; + background-size: 16px 16px; +} + +.app-sidebar .mainFileInfoView .permalink { + padding: 6px 10px; + vertical-align: top; + opacity: 0.6; +} +.app-sidebar .mainFileInfoView .permalink:hover, .app-sidebar .mainFileInfoView .permalink:focus { + opacity: 1; +} + +.app-sidebar .mainFileInfoView .permalink-field > input { + clear: both; + width: 90%; +} + +.app-sidebar .thumbnailContainer.large { + margin-left: -15px; + margin-right: -35px; + /* 15 + 20 for the close button */ + margin-top: -15px; +} + +.app-sidebar .thumbnailContainer.large.portrait { + margin: 0; + /* if we don't fit the image anyway we give it back the margin */ +} + +.app-sidebar .large .thumbnail { + width: 100%; + display: block; + background-repeat: no-repeat; + background-position: center; + background-size: 100%; + float: none; + margin: 0; + height: auto; +} + +.app-sidebar .large .thumbnail .stretcher { + content: ""; + display: block; + padding-bottom: 56.25%; + /* sets height of .thumbnail to 9/16 of the width */ +} + +.app-sidebar .large.portrait .thumbnail { + background-position: 50% top; +} + +.app-sidebar .large.portrait .thumbnail { + background-size: contain; +} + +.app-sidebar .large.text { + overflow-y: scroll; + overflow-x: hidden; + padding-top: 14px; + font-size: 80%; + margin-left: 0; +} + +.app-sidebar .thumbnail { + width: 100%; + min-height: 75px; + display: inline-block; + float: left; + margin-right: 10px; + background-size: contain; + background-repeat: no-repeat; +} + +.app-sidebar .ellipsis { + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; +} + +.app-sidebar .fileName { + font-size: 16px; + padding-top: 13px; + padding-bottom: 3px; +} + +.app-sidebar .fileName h3 { + width: calc(100% - 42px); + /* 36px is the with of the copy link icon, but this breaks so we add some more to be sure */ + display: inline-block; + padding: 5px 0; + margin: -5px 0; +} + +.app-sidebar .file-details { + color: var(--color-text-maxcontrast); +} + +.app-sidebar .action-favorite { + vertical-align: sub; + padding: 10px; + margin: -10px; +} + +.app-sidebar .action-favorite > span { + opacity: 0.7 !important; +} + +.app-sidebar .detailList { + float: left; +} + +.app-sidebar .close { + position: absolute; + top: 0; + right: 0; + opacity: 0.5; + z-index: 1; + width: 44px; + height: 44px; +} + +/*# sourceMappingURL=detailsView.css.map */ diff --git a/apps/files/css/detailsView.css.map b/apps/files/css/detailsView.css.map new file mode 100644 index 0000000000000..30726744cafdb --- /dev/null +++ b/apps/files/css/detailsView.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["detailsView.scss"],"names":[],"mappings":"AAAA;EACC;EACA;;;AAGD;EACC;;;AAID;EACC;EACA;;;AAGD;EACC;EACA;EACA;;AAEA;EAEC;;;AAGF;EACC;EACA;;;AAGD;EACC;EACA;AAAqB;EACrB;;;AAGD;EACC;AAAW;;;AAGZ;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;AAAwB;;;AAGzB;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;AAA0B;EAC1B;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA","file":"detailsView.css"} \ No newline at end of file diff --git a/apps/files/css/files.css b/apps/files/css/files.css new file mode 100644 index 0000000000000..eb465b71cdbf1 --- /dev/null +++ b/apps/files/css/files.css @@ -0,0 +1,1297 @@ +@charset "UTF-8"; +/** + * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com) + * + * @author John Molakvoæ (skjnldsv) + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ +/** + * Copyright (c) 2011, Jan-Christoph Borchardt, http://jancborchardt.net + * @copyright Copyright (c) 2019, Fabian Dreßler + * + * This file is licensed under the Affero General Public License version 3 or later. + * See the COPYING-README file. + */ +/** + * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com) + * + * @author John Molakvoæ (skjnldsv) + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ +/** + * @see core/src/icons.js + */ +/** + * SVG COLOR API + * + * @param string $icon the icon filename + * @param string $dir the icon folder within /core/img if $core or app name + * @param string $color the desired color in hexadecimal + * @param int $version the version of the file + * @param bool [$core] search icon in core + * + * @returns A background image with the url to the set to the requested icon. + */ +/* FILE MENU */ +.actions { + padding: 5px; + height: 100%; + display: inline-block; + float: left; +} + +.actions input, .actions button, .actions .button { + margin: 0; + float: left; +} + +.actions .button a { + color: #555; +} + +.actions .button a:hover, +.actions .button a:focus { + background-color: var(--color-background-hover); +} + +.actions .button a:active { + background-color: var(--color-primary-light); +} + +.actions.creatable { + position: relative; + display: flex; + flex: 1 1; +} +.actions.creatable .button:not(:last-child) { + margin-right: 3px; +} + +.actions.hidden { + display: none; +} + +#trash { + margin-right: 8px; + float: right; + z-index: 1010; + padding: 10px; + font-weight: normal; +} + +.newFileMenu .error, +.newFileMenu .error + .icon-confirm, +#fileList .error { + color: var(--color-error); + border-color: var(--color-error); +} + +/* FILE TABLE */ +#filestable { + position: relative; + width: 100%; + min-width: 250px; + display: block; + flex-direction: column; + /** + * This is a dirty hack as the sticky header requires us to use a different display type on the table element + */ +} +#emptycontent:not(.hidden) ~ #filestable { + display: none; +} +#filestable thead { + position: -webkit-sticky; + position: sticky; + top: 50px; + z-index: 60; + display: block; + background-color: var(--color-main-background-translucent); +} +#filestable tbody { + display: table; + width: 100%; +} +#filestable tbody tr[data-permissions="0"], +#filestable tbody tr[data-permissions="16"] { + background-color: var(--color-background-dark); +} +#filestable tbody tr[data-permissions="0"] td.filename .nametext .innernametext, +#filestable tbody tr[data-permissions="16"] td.filename .nametext .innernametext { + color: var(--color-text-maxcontrast); +} + +#filestable.hidden { + display: none; +} + +/* fit app list view heights */ +.app-files #app-content > .viewcontainer { + min-height: 0%; + width: 100%; +} + +.app-files #app-content { + width: calc(100% - 300px); +} + +.file-drag, .file-drag #filestable tbody tr, .file-drag #filestable tbody tr:hover { + background-color: var(--color-primary-light) !important; +} + +.app-files #app-content.dir-drop { + background-color: var(--color-main-background) !important; +} + +.file-drag #filestable tbody tr, .file-drag #filestable tbody tr:hover { + background-color: transparent !important; +} + +.app-files #app-content.dir-drop #filestable tbody tr.dropping-to-dir { + background-color: var(--color-primary-light) !important; +} + +/* icons for sidebar */ +.nav-icon-files { + /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */ + background-image: var(--icon-folder-dark); +} + +.nav-icon-recent { + /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */ + background-image: var(--icon-recent-dark); +} + +.nav-icon-favorites { + /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */ + background-image: var(--icon-starred-dark); +} + +.nav-icon-sharingin, +.nav-icon-sharingout, +.nav-icon-pendingshares, +.nav-icon-shareoverview { + /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */ + background-image: var(--icon-share-dark); +} + +.nav-icon-sharinglinks { + /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */ + background-image: var(--icon-public-dark); +} + +.nav-icon-extstoragemounts { + /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */ + background-image: var(--icon-external-dark); +} + +.nav-icon-trashbin { + /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */ + background-image: var(--icon-delete-dark); +} + +.nav-icon-trashbin-starred { + /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */ + background-image: var(--icon-delete-#ff0000); +} + +.nav-icon-deletedshares { + /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */ + background-image: var(--icon-unshare-dark); +} + +.nav-icon-favorites-starred { + /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */ + background-image: var(--icon-starred-yellow); +} + +#app-navigation .nav-files a.nav-icon-files { + width: auto; +} + +/* button needs overrides due to navigation styles */ +#app-navigation .nav-files a.new { + width: 40px; + height: 32px; + padding: 0 10px; + margin: 0; + cursor: pointer; +} + +#app-navigation .nav-files a.new.hidden { + display: none; +} + +#app-navigation .nav-files a.new.disabled { + opacity: 0.3; +} + +#filestable tbody tr { + height: 51px; +} + +#filestable tbody tr:hover, +#filestable tbody tr:focus, +#filestable tbody .name:focus, +#filestable tbody tr:hover .filename form, +table tr.mouseOver td { + background-color: var(--color-background-hover); +} + +#filestable tbody tr:active, +#filestable tbody tr.highlighted, +#filestable tbody tr.highlighted .name:focus, +#filestable tbody tr.selected, +#filestable tbody tr.searchresult { + background-color: var(--color-primary-light); +} + +tbody a { + color: var(--color-main-text); +} + +span.conflict-path, span.extension, span.uploading, td.date { + color: var(--color-text-maxcontrast); +} + +span.conflict-path, span.extension { + -webkit-transition: opacity 300ms; + -moz-transition: opacity 300ms; + -o-transition: opacity 300ms; + transition: opacity 300ms; + vertical-align: top; +} + +tr:hover span.conflict-path, +tr:focus span.conflict-path, +tr:hover span.extension, +tr:focus span.extension { + opacity: 1; + color: var(--color-text-maxcontrast); +} + +table th, table th a { + color: var(--color-text-maxcontrast); +} + +table.multiselect th a { + color: var(--color-main-text); +} + +table th .columntitle { + display: block; + padding: 15px; + height: 50px; + box-sizing: border-box; + -moz-box-sizing: border-box; + vertical-align: middle; +} + +table.multiselect th .columntitle { + display: inline-block; + margin-right: -20px; +} + +table th .columntitle.name { + padding-left: 0; + margin-left: 44px; +} + +table.multiselect th .columntitle.name { + margin-left: 0; +} + +table th .sort-indicator { + width: 10px; + height: 8px; + margin-left: 5px; + display: inline-block; + vertical-align: text-bottom; + opacity: 0.3; +} + +.sort-indicator.hidden, +.multiselect .sort-indicator, +table.multiselect th:hover .sort-indicator.hidden, +table.multiselect th:focus .sort-indicator.hidden { + visibility: hidden; +} + +.multiselect .sort, .multiselect .sort span { + cursor: default; +} + +table th:hover .sort-indicator.hidden, +table th:focus .sort-indicator.hidden { + visibility: visible; +} + +table th, +table td { + border-bottom: 1px solid var(--color-border); + text-align: left; + font-weight: normal; +} + +table td { + padding: 0 15px; + font-style: normal; + background-position: 8px center; + background-repeat: no-repeat; +} + +table th#headerName { + position: relative; + width: 9999px; + /* not really sure why this works better than 100% … table styling */ + padding: 0; +} + +#headerName-container { + position: relative; + height: 50px; +} + +table th#headerSelection { + padding-top: 2px; +} + +table th#headerSize, table td.filesize { + text-align: right; +} + +table th#headerDate, table td.date, +table th.column-last, table td.column-last { + -moz-box-sizing: border-box; + box-sizing: border-box; + position: relative; + /* this can not be just width, both need to be set … table styling */ + min-width: 130px; + max-width: 130px; +} + +#app-content-files thead, +#app-content-trashbin thead { + top: 94px; +} + +#app-content-recent, +#app-content-favorites, +#app-content-shareoverview, +#app-content-sharingout, +#app-content-sharingin, +#app-content-sharinglinks, +#app-content-deletedshares, +#app-content-pendingshares { + margin-top: 22px; +} + +table.multiselect thead th { + background-color: var(--color-main-background-translucent); + font-weight: bold; +} + +#app-content.with-app-sidebar table.multiselect thead { + margin-right: 27%; +} + +table.multiselect #headerName { + position: relative; + width: 9999px; + /* when we use 100%, the styling breaks on mobile … table styling */ +} + +table.multiselect #modified { + display: none; +} + +table td.selection, +table th.selection, +table td.fileaction { + width: 32px; + text-align: center; +} + +table td.filename a.name, +table td.filename p.name { + display: flex; + position: relative; + /* Firefox needs to explicitly have this default set … */ + -moz-box-sizing: border-box; + box-sizing: border-box; + height: 50px; + line-height: 50px; + padding: 0; +} + +table td.filename .thumbnail-wrapper { + /* we need this to make sure flex is working inside a table cell */ + width: 0; + min-width: 50px; + max-width: 50px; + height: 50px; +} + +table td.filename .thumbnail-wrapper.icon-loading-small:after { + z-index: 10; +} +table td.filename .thumbnail-wrapper.icon-loading-small .thumbnail { + opacity: 0.2; +} + +table td.filename .thumbnail { + display: inline-block; + width: 32px; + height: 32px; + background-size: 32px; + margin-left: 9px; + margin-top: 9px; + border-radius: var(--border-radius); + cursor: pointer; + position: absolute; + z-index: 4; +} + +table td.filename p.name .thumbnail { + cursor: default; +} + +table tr[data-has-preview=true] .thumbnail { + border: 1px solid var(--color-border); +} + +table td.filename input.filename { + width: 70%; + margin-left: 48px; + cursor: text; +} + +table td.filename form { + margin-top: -40px; + position: relative; + top: -6px; +} + +table td.filename a, table td.login, table td.logout, table td.download, table td.upload, table td.create, table td.delete { + padding: 3px 8px 8px 3px; +} + +table td.filename .nametext, .modified, .column-last > span:first-child { + float: left; + padding: 15px 0; +} + +.modified, .column-last > span:first-child { + position: relative; + overflow: hidden; + text-overflow: ellipsis; + width: 110px; +} + +/* TODO fix usability bug (accidental file/folder selection) */ +table td.filename { + max-width: 0; +} +table td.filename .nametext { + width: 0; + flex-grow: 1; + display: flex; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + height: 100%; + z-index: 10; + padding: 0 20px 0 0; +} + +.hide-hidden-files #filestable #fileList tr.hidden-file, +.hide-hidden-files #filestable #fileList tr.hidden-file.dragging { + display: none; +} + +#fileList tr.animate-opacity { + -webkit-transition: opacity 250ms; + -moz-transition: opacity 250ms; + -o-transition: opacity 250ms; + transition: opacity 250ms; +} + +#fileList tr.dragging { + opacity: 0.2; +} + +table td.filename .nametext .innernametext { + text-overflow: ellipsis; + overflow: hidden; + position: relative; + vertical-align: top; +} + +/* for smaller resolutions - see mobile.css */ +table td.filename .uploadtext { + position: absolute; + font-weight: normal; + margin-left: 50px; + left: 0; + bottom: 0; + height: 20px; + padding: 0 4px; + padding-left: 1px; + font-size: 11px; + line-height: 22px; + color: var(--color-text-maxcontrast); + text-overflow: ellipsis; + white-space: nowrap; +} + +table td.selection { + padding: 0; +} + +/* File checkboxes */ +#fileList tr td.selection > .selectCheckBox + label:before { + opacity: 0.3; + margin-right: 0; +} + +/* Show checkbox with full opacity when hovering, checked, or selected */ +#fileList tr:hover td.selection > .selectCheckBox + label:before, +#fileList tr:focus td.selection > .selectCheckBox + label:before, +#fileList tr td.selection > .selectCheckBox:checked + label:before, +#fileList tr.selected td.selection > .selectCheckBox + label:before { + opacity: 1; +} + +/* Show checkbox with half opacity when selecting range */ +#fileList tr.halfselected td.selection > .selectCheckBox + label:before { + opacity: 0.5; +} + +/* Use label to have bigger clickable size for checkbox */ +#fileList tr td.selection > .selectCheckBox + label, +.select-all + label { + padding: 16px; +} +#fileList tr td.selection > .selectCheckBox:focus + label, +.select-all:focus + label { + background-color: var(--color-background-hover); + border-radius: var(--border-radius-pill); +} + +#fileList tr td.selection > .selectCheckBox:focus-visible + label, +.select-all:focus-visible + label { + outline-offset: 0px; +} + +#fileList tr td.filename { + position: relative; + width: 100%; + padding-left: 0; + padding-right: 0; + -webkit-transition: background-image 500ms; + -moz-transition: background-image 500ms; + -o-transition: background-image 500ms; + transition: background-image 500ms; +} + +#fileList tr td.filename a.name label, +#fileList tr td.filename p.name label { + position: absolute; + width: 80%; + height: 50px; +} + +#fileList tr td.filename .favorite { + display: inline-block; + float: left; +} + +#fileList tr td.filename .favorite-mark { + position: absolute; + display: block; + top: -6px; + right: -6px; + line-height: 100%; + text-align: center; +} + +#uploadsize-message, #delete-confirm { + display: none; +} + +/* File actions */ +.fileactions { + z-index: 50; +} + +.busy .fileactions, .busy .action { + visibility: hidden; +} + +/* fix position of bubble pointer for Files app */ +.bubble, +#app-navigation .app-navigation-entry-menu { + border-top-right-radius: 3px; + min-width: 100px; +} + +/* force show the loading icon, not only on hover */ +#fileList .icon-loading-small { + opacity: 1 !important; + display: inline !important; +} + +#fileList .action.action-share-notification span, #fileList a.name { + cursor: default !important; +} + +/* + * Make the disabled link look not like a link in file list rows + */ +#fileList a.name.disabled * { + cursor: default; +} +#fileList a.name.disabled a, #fileList a.name.disabled a * { + cursor: pointer; +} +#fileList a.name.disabled:focus { + background: none; +} + +a.action > img { + height: 16px; + width: 16px; + vertical-align: text-bottom; +} + +/* Actions for selected files */ +.selectedActions { + position: relative; + display: inline-block; + vertical-align: middle; +} + +.selectedActions.hidden { + display: none; +} + +.selectedActions a { + display: inline; + line-height: 50px; + padding: 16px 5px; +} + +.selectedActions a.hidden { + display: none; +} + +.selectedActions a img { + position: relative; + vertical-align: text-bottom; + margin-bottom: -1px; +} + +.selectedActions .actions-selected .icon-more { + margin-top: -3px; +} + +#fileList td a a.action { + display: inline; + padding: 17px 8px; + line-height: 50px; + opacity: 0.3; +} +#fileList td a a.action.action-share { + padding: 17px 14px; +} +#fileList td a a.action.action-share.permanent:not(.shared-style) .icon-shared + span { + /* hide text of the share action */ + /* .hidden-visually for accessbility */ + position: absolute; + left: -10000px; + top: auto; + width: 1px; + height: 1px; + overflow: hidden; +} +#fileList td a a.action.action-share .avatar { + display: inline-block; + vertical-align: middle; +} +#fileList td a a.action.action-menu { + padding-top: 17px; + padding-bottom: 17px; + padding-left: 14px; + padding-right: 14px; +} +#fileList td a a.action.no-permission:hover, #fileList td a a.action.no-permission:focus { + opacity: 0.3; +} +#fileList td a a.action.disabled:hover, #fileList td a a.action.disabled:focus, +#fileList td a a.action.disabled img { + opacity: 0.3; +} +#fileList td a a.action.disabled.action-download { + opacity: 0.7; +} +#fileList td a a.action.disabled.action-download:hover, #fileList td a a.action.disabled.action-download:focus { + opacity: 0.7; +} +#fileList td a a.action:hover, #fileList td a a.action:focus { + opacity: 1; +} +#fileList td a a.action:focus { + background-color: var(--color-background-hover); + border-radius: var(--border-radius-pill); +} +#fileList td a .fileActionsMenu a.action, #fileList td a a.action.action-share.shared-style { + opacity: 0.7; +} +#fileList td a .fileActionsMenu .action.permanent { + opacity: 1; +} + +#fileList .action.action-share.permanent.shared-style span:not(.icon) { + display: inline-block; + max-width: 70px; + overflow: hidden; + text-overflow: ellipsis; + vertical-align: middle; + margin-left: 6px; +} + +#fileList .remoteAddress .userDomain { + margin-left: 0 !important; +} + +#fileList .favorite-mark.permanent { + opacity: 1; +} + +#fileList .fileActionsMenu a.action:hover, +#fileList .fileActionsMenu a.action:focus, +#fileList a.action.action-share.shared-style:hover, +#fileList a.action.action-share.shared-style:focus { + opacity: 1; +} + +#fileList tr a.action.disabled { + background: none; +} + +#selectedActionsList a.download.disabled, +#fileList tr a.action.action-download.disabled { + color: #000000; +} + +#fileList tr:hover a.action.disabled:hover * { + cursor: default; +} + +.summary { + color: var(--color-text-maxcontrast); + /* add whitespace to bottom of files list to correctly show dropdowns */ + height: 330px; +} + +#filestable .filesummary { + width: 100%; + /* Width of checkbox and file preview */ + padding-left: 101px; +} + +/* Less whitespace needed on link share page + * as there is a footer and action menus have fewer entries. + */ +#body-public .summary { + height: 180px; +} + +.summary:hover, +.summary:focus, +.summary, +table tr.summary td { + background-color: transparent; +} + +.summary td { + border-bottom: none; + vertical-align: top; + padding-top: 20px; +} + +.summary td:first-child { + padding: 0; +} + +.hiddeninfo { + white-space: pre-line; +} + +table.dragshadow { + width: auto; + z-index: 2000; +} + +table.dragshadow td.filename { + padding-left: 60px; + padding-right: 16px; + height: 36px; + /* Override "max-width: 0" to prevent file name and size from overlapping */ + max-width: unset; +} + +table.dragshadow td.size { + padding-right: 8px; +} + +.mask { + z-index: 50; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: var(--color-main-background); + background-repeat: no-repeat no-repeat; + background-position: 50%; + opacity: 0.7; + transition: opacity 100ms; + -moz-transition: opacity 100ms; + -o-transition: opacity 100ms; + -ms-transition: opacity 100ms; + -webkit-transition: opacity 100ms; +} + +.mask.transparent { + opacity: 0; +} + +.newFileMenu { + font-weight: 300; + top: 100%; + left: -48px !important; + margin-top: 4px; + min-width: 100px; + z-index: 1001; + /* Center triangle */ +} +.newFileMenu::after { + left: 57px !important; +} + +#filestable .filename .action .icon, +#filestable .selectedActions a .icon, +#filestable .filename .favorite-mark .icon, +#controls .actions .button .icon { + display: inline-block; + vertical-align: middle; + background-size: 16px 16px; +} + +#filestable .filename .favorite-mark .icon-star { + background-image: none; +} +#filestable .filename .favorite-mark .icon-starred { + /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */ + background-image: var(--icon-star-dark-yellow); +} + +#filestable .filename .action .icon.hidden, +#filestable .selectedActions a .icon.hidden, +#controls .actions .button .icon.hidden { + display: none; +} + +#filestable .filename .action .icon.loading, +#filestable .selectedActions a .icon.loading, +#controls .actions .button .icon.loading { + width: 15px; + height: 15px; +} + +.app-files .actions .button.new { + position: relative; +} + +.breadcrumb .canDrop > a, +#filestable tbody tr.canDrop { + background-color: rgba(0, 130, 201, 0.3); +} + +.dropzone-background { + background-color: rgba(0, 130, 201, 0.3); +} +.dropzone-background :hover { + box-shadow: none !important; +} + +.notCreatable { + margin-left: 12px; + margin-right: 44px; + margin-top: 12px; + color: var(--color-main-text); + overflow: auto; + min-width: 160px; + height: 54px; +} +.notCreatable:not(.hidden) { + display: flex; +} +.notCreatable .icon-alert-outline { + top: -15px; + position: relative; + margin-right: 4px; +} + +#quota { + margin: 0 !important; + border: none; + border-radius: 0; + background-color: transparent; + z-index: 1; +} +#quota > a[href="#"] { + box-shadow: none !important; +} +#quota > a[href="#"], #quota > a[href="#"] * { + cursor: default !important; +} +#quota .quota-container { + height: 5px; + border-radius: var(--border-radius); +} +#quota .quota-container div { + height: 100%; + background-color: var(--color-primary); +} + +#quotatext { + padding: 0; + height: 30px; + line-height: 30px; +} + +/* GRID */ +#filestable.view-grid:not(.hidden) { + /* HEADER and MULTISELECT */ + /* MAIN FILE LIST */ + /* Center align the footer file number & size summary */ +} +#filestable.view-grid:not(.hidden) thead tr { + display: block; + border-bottom: 1px solid var(--color-border); + background-color: var(--color-main-background-translucent); +} +#filestable.view-grid:not(.hidden) thead tr th { + width: auto; + border: none; +} +#filestable.view-grid:not(.hidden) tbody { + display: grid; + grid-template-columns: repeat(auto-fill, 160px); + justify-content: space-around; + row-gap: 15px; + margin: 15px 0; +} +#filestable.view-grid:not(.hidden) tbody tr:not(.hidden) { + display: block; + position: relative; + height: 190px; + border-radius: var(--border-radius); +} +#filestable.view-grid:not(.hidden) tbody tr:not(.hidden):hover, #filestable.view-grid:not(.hidden) tbody tr:not(.hidden):focus, #filestable.view-grid:not(.hidden) tbody tr:not(.hidden):active, #filestable.view-grid:not(.hidden) tbody tr:not(.hidden).selected, #filestable.view-grid:not(.hidden) tbody tr:not(.hidden).searchresult, +#filestable.view-grid:not(.hidden) tbody tr:not(.hidden) .name:focus, #filestable.view-grid:not(.hidden) tbody tr:not(.hidden).highlighted { + background-color: transparent; +} +#filestable.view-grid:not(.hidden) tbody tr:not(.hidden):hover .thumbnail-wrapper, +#filestable.view-grid:not(.hidden) tbody tr:not(.hidden):hover .nametext, +#filestable.view-grid:not(.hidden) tbody tr:not(.hidden):hover .fileactions, #filestable.view-grid:not(.hidden) tbody tr:not(.hidden):focus .thumbnail-wrapper, +#filestable.view-grid:not(.hidden) tbody tr:not(.hidden):focus .nametext, +#filestable.view-grid:not(.hidden) tbody tr:not(.hidden):focus .fileactions, #filestable.view-grid:not(.hidden) tbody tr:not(.hidden):active .thumbnail-wrapper, +#filestable.view-grid:not(.hidden) tbody tr:not(.hidden):active .nametext, +#filestable.view-grid:not(.hidden) tbody tr:not(.hidden):active .fileactions, #filestable.view-grid:not(.hidden) tbody tr:not(.hidden).selected .thumbnail-wrapper, +#filestable.view-grid:not(.hidden) tbody tr:not(.hidden).selected .nametext, +#filestable.view-grid:not(.hidden) tbody tr:not(.hidden).selected .fileactions, #filestable.view-grid:not(.hidden) tbody tr:not(.hidden).searchresult .thumbnail-wrapper, +#filestable.view-grid:not(.hidden) tbody tr:not(.hidden).searchresult .nametext, +#filestable.view-grid:not(.hidden) tbody tr:not(.hidden).searchresult .fileactions, +#filestable.view-grid:not(.hidden) tbody tr:not(.hidden) .name:focus .thumbnail-wrapper, +#filestable.view-grid:not(.hidden) tbody tr:not(.hidden) .name:focus .nametext, +#filestable.view-grid:not(.hidden) tbody tr:not(.hidden) .name:focus .fileactions, #filestable.view-grid:not(.hidden) tbody tr:not(.hidden).highlighted .thumbnail-wrapper, +#filestable.view-grid:not(.hidden) tbody tr:not(.hidden).highlighted .nametext, +#filestable.view-grid:not(.hidden) tbody tr:not(.hidden).highlighted .fileactions { + background-color: var(--color-background-hover); +} +#filestable.view-grid:not(.hidden) tbody td { + display: inline; + border-bottom: none; + /* No space for filesize and date in grid view */ + /* Position actions menu below file */ +} +#filestable.view-grid:not(.hidden) tbody td.filename .thumbnail-wrapper { + min-width: 0; + max-width: none; + position: absolute; + width: 160px; + height: 160px; + padding: 14px; + top: 0; + left: 0; + z-index: -1; +} +#filestable.view-grid:not(.hidden) tbody td.filename .thumbnail-wrapper .thumbnail { + width: calc(100% - 2 * 14px); + height: calc(100% - 2 * 14px); + background-size: contain; + margin: 0; + border-radius: var(--border-radius); + background-repeat: no-repeat; + background-position: center; + /* Position favorite star related to checkbox to left and 3-dot menu below + * Position is inherited from the selection while in grid view + */ +} +#filestable.view-grid:not(.hidden) tbody td.filename .thumbnail-wrapper .thumbnail .favorite-mark { + padding: 14px; + left: auto; + top: -22px; + right: -22px; +} +#filestable.view-grid:not(.hidden) tbody td.filename .uploadtext { + width: 100%; + margin: 0; + top: 0; + bottom: auto; + height: 28px; + padding-top: 4px; + padding-left: 28px; +} +#filestable.view-grid:not(.hidden) tbody td.filename .name { + height: 100%; + border-radius: var(--border-radius); + overflow: hidden; + cursor: pointer !important; +} +#filestable.view-grid:not(.hidden) tbody td.filename .name .nametext { + display: flex; + height: 44px; + margin-top: 146px; + text-align: center; + line-height: 44px; + padding: 0; + /* No space for extension in grid view */ +} +#filestable.view-grid:not(.hidden) tbody td.filename .name .nametext .innernametext { + display: inline-block; + text-align: center; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +#filestable.view-grid:not(.hidden) tbody td.filename .name .nametext:before { + content: ""; + flex: 1; + min-width: 14px; +} +#filestable.view-grid:not(.hidden) tbody td.filename .name .nametext:after { + content: ""; + flex: 1; + min-width: 44px; +} +#filestable.view-grid:not(.hidden) tbody td.filename .name .nametext .extension { + display: none; +} +#filestable.view-grid:not(.hidden) tbody td.filename .name .fileactions { + height: initial; + margin-top: 146px; + display: flex; + align-items: center; + position: absolute; + right: 0; +} +#filestable.view-grid:not(.hidden) tbody td.filename .name .fileactions .action { + padding: 14px; + width: 44px; + height: 44px; + display: flex; + align-items: center; + justify-content: center; +} +#filestable.view-grid:not(.hidden) tbody td.filename .name .fileactions .action:not(.action-menu) { + display: none; +} +#filestable.view-grid:not(.hidden) tbody td.filename .fileActionsMenu .action-share-container.hidden { + display: block !important; +} +#filestable.view-grid:not(.hidden) tbody td.filename .fileActionsMenu .action-share-container.hidden .action-share img { + padding: 6px; + border-radius: 50%; +} +#filestable.view-grid:not(.hidden) tbody td.filename .fileActionsMenu .action-restore-container.hidden { + display: block !important; +} +#filestable.view-grid:not(.hidden) tbody td.filename .fileActionsMenu .action-comment-container.hidden { + display: block !important; +} +#filestable.view-grid:not(.hidden) tbody td.filename form { + padding: 3px 14px; + border-radius: var(--border-radius); +} +#filestable.view-grid:not(.hidden) tbody td.filename form input.filename { + width: 100%; + margin-left: 0; +} +#filestable.view-grid:not(.hidden) tbody td.filesize, #filestable.view-grid:not(.hidden) tbody td.date { + display: none; +} +#filestable.view-grid:not(.hidden) tbody td.selection, #filestable.view-grid:not(.hidden) tbody td.filename .favorite-mark { + position: absolute; + top: -8px; + left: -8px; + display: flex; + width: 44px; + height: 44px; + z-index: 10; + background: transparent; +} +#filestable.view-grid:not(.hidden) tbody td.selection label, #filestable.view-grid:not(.hidden) tbody td.filename .favorite-mark label { + width: 44px; + height: 44px; + display: inline-flex; + padding: 14px; +} +#filestable.view-grid:not(.hidden) tbody td.selection label::before, #filestable.view-grid:not(.hidden) tbody td.filename .favorite-mark label::before { + margin: 0; + width: 14px; + height: 14px; +} +#filestable.view-grid:not(.hidden) tbody td .popovermenu { + left: 0; + width: 150px; + margin: 0 5px; + /* Ellipsize long entries, normally menu width is adjusted but for grid we use fixed width. */ +} +#filestable.view-grid:not(.hidden) tbody td .popovermenu .menuitem span:not(.icon) { + overflow: hidden; + text-overflow: ellipsis; +} +#filestable.view-grid:not(.hidden) tr.hidden-file td.filename .name .nametext .extension { + display: block; +} +#filestable.view-grid:not(.hidden) tfoot { + display: grid; +} +#filestable.view-grid:not(.hidden) tfoot .summary:not(.hidden) { + display: inline-block; + margin: 0 auto; + height: 418px; +} +#filestable.view-grid:not(.hidden) tfoot .summary:not(.hidden) td { + padding-top: 50px; +} +#filestable.view-grid:not(.hidden) tfoot .summary:not(.hidden) td:first-child, #filestable.view-grid:not(.hidden) tfoot .summary:not(.hidden) td.date { + display: none; +} +#filestable.view-grid:not(.hidden) tfoot .summary:not(.hidden) td .info { + margin-left: 0; +} + +/* Grid view toggle */ +#view-toggle { + background-color: transparent; + border: none; + margin: 0; + padding: 22px; + opacity: 0.5; + position: fixed; + right: 0; + z-index: 100; +} +#view-toggle:hover, #view-toggle:focus, #showgridview:focus + #view-toggle { + opacity: 1; +} + +/** + * Make sure the hidden input is always + * on the visible scrolled area of the + * page to avoid scrolling to top when focusing + */ +#showgridview { + position: fixed; + top: 0; +} + +/* Adjustments for link share page */ +#body-public { + /* Right-align view toggle on link share page */ +} +#body-public #filestable.view-grid:not(.hidden) tbody td { + /* More space for filename since there is no share icon */ + /* Position actions menu correctly below 3-dot-menu */ +} +#body-public #filestable.view-grid:not(.hidden) tbody td.filename .name .nametext .innernametext { + max-width: 124px; +} +#body-public #filestable.view-grid:not(.hidden) tbody td .popovermenu { + left: -80px; +} +#body-public #view-toggle { + position: absolute; + right: 0; +} + +/* Hide legacy Gallery toggle */ +#gallery-button { + display: none; +} + +#tag_multiple_files_container { + overflow: hidden; + background-color: #fff; + border-radius: 3px; + position: relative; + display: flex; + flex-wrap: wrap; + margin-bottom: 10px; +} +#tag_multiple_files_container h3 { + width: 100%; + padding: 0 18px; +} +#tag_multiple_files_container .systemTagsInputFieldContainer { + flex: 1 1 80%; + min-width: 0; + margin: 0 12px; +} + +/*# sourceMappingURL=files.css.map */ diff --git a/apps/files/css/files.css.map b/apps/files/css/files.css.map new file mode 100644 index 0000000000000..ffefdcfdf5395 --- /dev/null +++ b/apps/files/css/files.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["../../../core/css/variables.scss","files.scss","../../../core/css/functions.scss"],"names":[],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBA;AAAA;AAAA;AA4BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ADxCA;AACA;EACC;EACA;EACA;EACA;;;AAED;EAAoD;EAAU;;;AAC9D;EAAqB;;;AACrB;AAAA;EAEC;;;AAED;EACC;;;AAGD;EACC;EACA;EACA;;AACA;EACC;;;AAIF;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;;;AAGD;AAAA;AAAA;EAGC;EACA;;;AAGD;AACA;EACC;EACA;EACA;EACA;EACA;AAiBA;AAAA;AAAA;;AAfA;EACC;;AAGD;EACC;EACA;EAEA,KDoCc;EClCd;EACA;EACA;;AAMD;EACC;EACA;;AAEA;AAAA;EAEC;;AAEA;AAAA;EACC;;;AAMJ;EACC;;;AAGD;AACA;EACC;EACA;;;AAGD;EAGC;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;AACA;AClEC;EAEA;;;ADmED;ACrEC;EAEA;;;ADsED;ACxEC;EAEA;;;ADyED;AAAA;AAAA;AAAA;AC3EC;EAEA;;;AD+ED;ACjFC;EAEA;;;ADkFD;ACpFC;EAEA;;;ADqFD;ACvFC;EAEA;;;ADwFD;AC1FC;EAEA;;;AD2FD;AC7FC;EAEA;;;AD8FD;AChGC;EAEA;;;ADkGD;EACC;;;AAED;AACA;EACC;EACA;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;EACC;;;AAED;AAAA;AAAA;AAAA;AAAA;EAKC;;;AAED;AAAA;AAAA;AAAA;AAAA;EAKC;;;AAGD;EAAU;;;AAEV;EACC;;;AAED;EACC;EACA;EACA;EACA;EACA;;;AAED;AAAA;AAAA;AAAA;EAIC;EACA;;;AAGD;EACC;;;AAED;EACC;;;AAED;EACC;EACA;EACA;EACA;EACA;EACA;;;AAED;EACC;EACA;;;AAED;EACC;EACA;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;;;AAED;AAAA;AAAA;AAAA;EAIC;;;AAED;EACC;;;AAED;AAAA;EAEC;;;AAGD;AAAA;EAEC;EACA;EACA;;;AAED;EACC;EACA;EACA;EACA;;;AAED;EACC;EACA;AAAe;EACf;;;AAGD;EACC;EACA;;;AAGD;EACC;;;AAED;EACC;;;AAED;AAAA;EAEC;EACA;EACA;AACA;EACA;EACA;;;AAGD;AAAA;EAEC;;;AAGD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAQC;;;AAGD;EACC;EACA;;;AAGD;EACC;;;AAGD;EACC;EACA;AAAe;;;AAEhB;EACC;;;AAGD;AAAA;AAAA;EAGC;EACA;;;AAED;AAAA;EAEC;EACA;AAAmB;EACnB;EACA;EACA;EACA;EACA;;;AAED;AACC;EACA;EACA;EACA;EACA;;;AAGA;EACC;;AAED;EACC;;;AAGF;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAED;EACC;;;AAID;EACC;;;AAGD;EACC;EACA;EACA;;;AAED;EACC;EACA;EACA;;;AAGD;EAA6H;;;AAC7H;EAAwE;EAAY;;;AAEpF;EACC;EACA;EACA;EACA;;;AAGD;AAEC;EACC;;AACA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAKH;AAAA;EAEC;;;AAGD;EACC;EACA;EACA;EACA;;;AAED;EACC;;;AAGD;EACC;EACA;EACA;EACA;;;AAGD;AAEA;EACC;EACA;EAEA;EACA;EACA;EACA;EACA;EAEA;EACA;EAEA;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;AACA;EACC;EACA;;;AAGD;AACA;AAAA;AAAA;AAAA;EAIC;;;AAGD;AACA;EACC;;;AAGD;AAGC;AAAA;EACC;;AAGD;AAAA;EACC;EACA;;;AAIF;AAAA;EAEC;;;AAGD;EACC;EACA;EACA;EACA;EACA;EAA2C;EAAwC;EAAsC;;;AAG1H;AAAA;EAEC;EACA;EACA;;;AAGD;EACC;EACA;;;AAED;EACC;EACA;EACA;EACA;EACA;EACA;;;AAGD;EAAsC;;;AAEtC;AACA;EACC;;;AAGD;EACC;;;AAGD;AACA;AAAA;EAEC;EACA;;;AAGD;AACA;EACC;EACA;;;AAGD;EACC;;;AAGD;AAAA;AAAA;AAIC;EACC;;AAGD;EACC;;AAGD;EACC;;;AAIF;EACC;EACA;EACA;;;AAGD;AACA;EACI;EACA;EACA;;;AAEJ;EACI;;;AAEJ;EACC;EACA;EACA;;;AAGD;EACC;;;AAED;EACC;EACA;EACA;;;AAGD;EACC;;;AAIA;EACC;EACA;EACA;EACA;;AACA;EACC;;AACA;AACC;AACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAED;EACC;EACA;;AAGF;EACC;EACA;EACA;EACA;;AAGA;EACC;;AAID;AAAA;EAEC;;AAED;EACC;;AACA;EACC;;AAIH;EACC;;AAED;EACC;EACA;;AAGF;EACC;;AAED;EACC;;;AAKF;EACC;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;AAAA;AAAA;AAAA;EAKC;;;AAGD;EACC;;;AAGD;AAAA;EAEC;;;AAGD;EACC;;;AAGD;EACC;AACA;EAEA;;;AAED;EACC;AACA;EACA;;;AAED;AAAA;AAAA;AAGA;EACC;;;AAED;AAAA;AAAA;AAAA;EAIC;;;AAED;EACC;EACA;EACA;;;AAED;EACC;;;AAED;EACC;;;AAGD;EACC;EACA;;;AAED;EACC;EACA;EACA;AAEA;EACA;;;AAED;EACC;;;AAED;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAED;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;AAEA;;AACA;EACC;;;AAIF;AAAA;AAAA;AAAA;EAIC;EACA;EACA;;;AAMA;EACC;;AAED;AC1vBA;EAEA;;;AD6vBD;AAAA;AAAA;EAGC;;;AAGD;AAAA;AAAA;EAGC;EACA;;;AAGD;EACC;;;AAGD;AAAA;EAEC;;;AAED;EACC;;AACA;EACC;;;AAIF;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;;AAGD;EACC;EACA;EACA;;;AAIF;EACC;EACA;EACA;EACA;EACA;;AAEA;EAEC;;AACA;EACC;;AAIF;EACC;EACA;;AAEA;EACC;EACA;;;AAKH;EACC;EACA;EACA;;;AAGD;AACA;AAIC;AAaA;AAoOA;;AA/OC;EACC;EACA;EACA;;AACA;EACC;EACA;;AAMH;EACC;EACA;EACA;EACA;EACA;;AAGA;EACC;EACA;EACA;EACA;;AAEA;AAAA;EAKC;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGC;;AAKH;EACC;EACA;AAmJA;AA8BA;;AA9KC;EACC;EACA;EACA;EACA,OAvDQ;EAwDR,QAxDQ;EAyDR,SAxDO;EAyDP;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;AAAA;AAAA;;AAGA;EACC,SA1EK;EA2EL;EACA;EACA;;AAKH;EACC;EACA;EACA;EACA;EAEA;EACA;EAEA;;AAGD;EACC;EACA;EAIA;EAKA;;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;AAoBA;;AAlBA;EACC;EACA;EACA;EACA;EACA;;AAED;EACC;EACA;EACA;;AAED;EACC;EACA;EACA;;AAID;EACC;;AAIF;EACC;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC,SApJK;EAqJL;EACA;EACA;EACA;EACA;;AAGA;EACC;;AAQH;EACC;;AAEA;EACC;EACA;;AAIF;EACC;;AAGD;EACC;;AAIF;EACC;EACA;;AAEA;EACC;EACA;;AAMH;EAEC;;AAGD;EAEC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA,SAvNO;;AAwNP;EACC;EACA,OA1NM;EA2NN,QA3NM;;AAiOT;EACC;EACA;EACA;AAEA;;AACA;EACC;EACA;;AAMJ;EACC;;AAID;EACC;;AAEA;EACC;EACA;EAEA;;AAEA;EACC;;AAEA;EAEC;;AAGD;EACI;;;AAOR;AACA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EAGC;;;AAIF;AAAA;AAAA;AAAA;AAAA;AAKA;EACC;EACA;;;AAGD;AACA;AAaC;;AAZA;AACC;AAKA;;AAJA;EACC;;AAID;EACC;;AAKF;EACC;EACA;;;AAIF;AACA;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;;AAGD;EACC;EACA;EACA","file":"files.css"} \ No newline at end of file diff --git a/apps/files/css/merged.css b/apps/files/css/merged.css new file mode 100644 index 0000000000000..4e36788ace671 --- /dev/null +++ b/apps/files/css/merged.css @@ -0,0 +1,1831 @@ +@charset "UTF-8"; +/** + * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com) + * + * @author John Molakvoæ (skjnldsv) + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ +/** + * Copyright (c) 2011, Jan-Christoph Borchardt, http://jancborchardt.net + * @copyright Copyright (c) 2019, Fabian Dreßler + * + * This file is licensed under the Affero General Public License version 3 or later. + * See the COPYING-README file. + */ +/** + * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com) + * + * @author John Molakvoæ (skjnldsv) + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ +/** + * @see core/src/icons.js + */ +/** + * SVG COLOR API + * + * @param string $icon the icon filename + * @param string $dir the icon folder within /core/img if $core or app name + * @param string $color the desired color in hexadecimal + * @param int $version the version of the file + * @param bool [$core] search icon in core + * + * @returns A background image with the url to the set to the requested icon. + */ +/* FILE MENU */ +.actions { + padding: 5px; + height: 100%; + display: inline-block; + float: left; +} + +.actions input, .actions button, .actions .button { + margin: 0; + float: left; +} + +.actions .button a { + color: #555; +} + +.actions .button a:hover, +.actions .button a:focus { + background-color: var(--color-background-hover); +} + +.actions .button a:active { + background-color: var(--color-primary-light); +} + +.actions.creatable { + position: relative; + display: flex; + flex: 1 1; +} +.actions.creatable .button:not(:last-child) { + margin-right: 3px; +} + +.actions.hidden { + display: none; +} + +#trash { + margin-right: 8px; + float: right; + z-index: 1010; + padding: 10px; + font-weight: normal; +} + +.newFileMenu .error, +.newFileMenu .error + .icon-confirm, +#fileList .error { + color: var(--color-error); + border-color: var(--color-error); +} + +/* FILE TABLE */ +#filestable { + position: relative; + width: 100%; + min-width: 250px; + display: block; + flex-direction: column; + /** + * This is a dirty hack as the sticky header requires us to use a different display type on the table element + */ +} +#emptycontent:not(.hidden) ~ #filestable { + display: none; +} +#filestable thead { + position: -webkit-sticky; + position: sticky; + top: 50px; + z-index: 60; + display: block; + background-color: var(--color-main-background-translucent); +} +#filestable tbody { + display: table; + width: 100%; +} +#filestable tbody tr[data-permissions="0"], +#filestable tbody tr[data-permissions="16"] { + background-color: var(--color-background-dark); +} +#filestable tbody tr[data-permissions="0"] td.filename .nametext .innernametext, +#filestable tbody tr[data-permissions="16"] td.filename .nametext .innernametext { + color: var(--color-text-maxcontrast); +} + +#filestable.hidden { + display: none; +} + +/* fit app list view heights */ +.app-files #app-content > .viewcontainer { + min-height: 0%; + width: 100%; +} + +.app-files #app-content { + width: calc(100% - 300px); +} + +.file-drag, .file-drag #filestable tbody tr, .file-drag #filestable tbody tr:hover { + background-color: var(--color-primary-light) !important; +} + +.app-files #app-content.dir-drop { + background-color: var(--color-main-background) !important; +} + +.file-drag #filestable tbody tr, .file-drag #filestable tbody tr:hover { + background-color: transparent !important; +} + +.app-files #app-content.dir-drop #filestable tbody tr.dropping-to-dir { + background-color: var(--color-primary-light) !important; +} + +/* icons for sidebar */ +.nav-icon-files { + /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */ + background-image: var(--icon-folder-dark); +} + +.nav-icon-recent { + /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */ + background-image: var(--icon-recent-dark); +} + +.nav-icon-favorites { + /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */ + background-image: var(--icon-starred-dark); +} + +.nav-icon-sharingin, +.nav-icon-sharingout, +.nav-icon-pendingshares, +.nav-icon-shareoverview { + /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */ + background-image: var(--icon-share-dark); +} + +.nav-icon-sharinglinks { + /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */ + background-image: var(--icon-public-dark); +} + +.nav-icon-extstoragemounts { + /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */ + background-image: var(--icon-external-dark); +} + +.nav-icon-trashbin { + /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */ + background-image: var(--icon-delete-dark); +} + +.nav-icon-trashbin-starred { + /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */ + background-image: var(--icon-delete-#ff0000); +} + +.nav-icon-deletedshares { + /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */ + background-image: var(--icon-unshare-dark); +} + +.nav-icon-favorites-starred { + /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */ + background-image: var(--icon-starred-yellow); +} + +#app-navigation .nav-files a.nav-icon-files { + width: auto; +} + +/* button needs overrides due to navigation styles */ +#app-navigation .nav-files a.new { + width: 40px; + height: 32px; + padding: 0 10px; + margin: 0; + cursor: pointer; +} + +#app-navigation .nav-files a.new.hidden { + display: none; +} + +#app-navigation .nav-files a.new.disabled { + opacity: 0.3; +} + +#filestable tbody tr { + height: 51px; +} + +#filestable tbody tr:hover, +#filestable tbody tr:focus, +#filestable tbody .name:focus, +#filestable tbody tr:hover .filename form, +table tr.mouseOver td { + background-color: var(--color-background-hover); +} + +#filestable tbody tr:active, +#filestable tbody tr.highlighted, +#filestable tbody tr.highlighted .name:focus, +#filestable tbody tr.selected, +#filestable tbody tr.searchresult { + background-color: var(--color-primary-light); +} + +tbody a { + color: var(--color-main-text); +} + +span.conflict-path, span.extension, span.uploading, td.date { + color: var(--color-text-maxcontrast); +} + +span.conflict-path, span.extension { + -webkit-transition: opacity 300ms; + -moz-transition: opacity 300ms; + -o-transition: opacity 300ms; + transition: opacity 300ms; + vertical-align: top; +} + +tr:hover span.conflict-path, +tr:focus span.conflict-path, +tr:hover span.extension, +tr:focus span.extension { + opacity: 1; + color: var(--color-text-maxcontrast); +} + +table th, table th a { + color: var(--color-text-maxcontrast); +} + +table.multiselect th a { + color: var(--color-main-text); +} + +table th .columntitle { + display: block; + padding: 15px; + height: 50px; + box-sizing: border-box; + -moz-box-sizing: border-box; + vertical-align: middle; +} + +table.multiselect th .columntitle { + display: inline-block; + margin-right: -20px; +} + +table th .columntitle.name { + padding-left: 0; + margin-left: 44px; +} + +table.multiselect th .columntitle.name { + margin-left: 0; +} + +table th .sort-indicator { + width: 10px; + height: 8px; + margin-left: 5px; + display: inline-block; + vertical-align: text-bottom; + opacity: 0.3; +} + +.sort-indicator.hidden, +.multiselect .sort-indicator, +table.multiselect th:hover .sort-indicator.hidden, +table.multiselect th:focus .sort-indicator.hidden { + visibility: hidden; +} + +.multiselect .sort, .multiselect .sort span { + cursor: default; +} + +table th:hover .sort-indicator.hidden, +table th:focus .sort-indicator.hidden { + visibility: visible; +} + +table th, +table td { + border-bottom: 1px solid var(--color-border); + text-align: left; + font-weight: normal; +} + +table td { + padding: 0 15px; + font-style: normal; + background-position: 8px center; + background-repeat: no-repeat; +} + +table th#headerName { + position: relative; + width: 9999px; + /* not really sure why this works better than 100% … table styling */ + padding: 0; +} + +#headerName-container { + position: relative; + height: 50px; +} + +table th#headerSelection { + padding-top: 2px; +} + +table th#headerSize, table td.filesize { + text-align: right; +} + +table th#headerDate, table td.date, +table th.column-last, table td.column-last { + -moz-box-sizing: border-box; + box-sizing: border-box; + position: relative; + /* this can not be just width, both need to be set … table styling */ + min-width: 130px; + max-width: 130px; +} + +#app-content-files thead, +#app-content-trashbin thead { + top: 94px; +} + +#app-content-recent, +#app-content-favorites, +#app-content-shareoverview, +#app-content-sharingout, +#app-content-sharingin, +#app-content-sharinglinks, +#app-content-deletedshares, +#app-content-pendingshares { + margin-top: 22px; +} + +table.multiselect thead th { + background-color: var(--color-main-background-translucent); + font-weight: bold; +} + +#app-content.with-app-sidebar table.multiselect thead { + margin-right: 27%; +} + +table.multiselect #headerName { + position: relative; + width: 9999px; + /* when we use 100%, the styling breaks on mobile … table styling */ +} + +table.multiselect #modified { + display: none; +} + +table td.selection, +table th.selection, +table td.fileaction { + width: 32px; + text-align: center; +} + +table td.filename a.name, +table td.filename p.name { + display: flex; + position: relative; + /* Firefox needs to explicitly have this default set … */ + -moz-box-sizing: border-box; + box-sizing: border-box; + height: 50px; + line-height: 50px; + padding: 0; +} + +table td.filename .thumbnail-wrapper { + /* we need this to make sure flex is working inside a table cell */ + width: 0; + min-width: 50px; + max-width: 50px; + height: 50px; +} + +table td.filename .thumbnail-wrapper.icon-loading-small:after { + z-index: 10; +} +table td.filename .thumbnail-wrapper.icon-loading-small .thumbnail { + opacity: 0.2; +} + +table td.filename .thumbnail { + display: inline-block; + width: 32px; + height: 32px; + background-size: 32px; + margin-left: 9px; + margin-top: 9px; + border-radius: var(--border-radius); + cursor: pointer; + position: absolute; + z-index: 4; +} + +table td.filename p.name .thumbnail { + cursor: default; +} + +table tr[data-has-preview=true] .thumbnail { + border: 1px solid var(--color-border); +} + +table td.filename input.filename { + width: 70%; + margin-left: 48px; + cursor: text; +} + +table td.filename form { + margin-top: -40px; + position: relative; + top: -6px; +} + +table td.filename a, table td.login, table td.logout, table td.download, table td.upload, table td.create, table td.delete { + padding: 3px 8px 8px 3px; +} + +table td.filename .nametext, .modified, .column-last > span:first-child { + float: left; + padding: 15px 0; +} + +.modified, .column-last > span:first-child { + position: relative; + overflow: hidden; + text-overflow: ellipsis; + width: 110px; +} + +/* TODO fix usability bug (accidental file/folder selection) */ +table td.filename { + max-width: 0; +} +table td.filename .nametext { + width: 0; + flex-grow: 1; + display: flex; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + height: 100%; + z-index: 10; + padding: 0 20px 0 0; +} + +.hide-hidden-files #filestable #fileList tr.hidden-file, +.hide-hidden-files #filestable #fileList tr.hidden-file.dragging { + display: none; +} + +#fileList tr.animate-opacity { + -webkit-transition: opacity 250ms; + -moz-transition: opacity 250ms; + -o-transition: opacity 250ms; + transition: opacity 250ms; +} + +#fileList tr.dragging { + opacity: 0.2; +} + +table td.filename .nametext .innernametext { + text-overflow: ellipsis; + overflow: hidden; + position: relative; + vertical-align: top; +} + +/* for smaller resolutions - see mobile.css */ +table td.filename .uploadtext { + position: absolute; + font-weight: normal; + margin-left: 50px; + left: 0; + bottom: 0; + height: 20px; + padding: 0 4px; + padding-left: 1px; + font-size: 11px; + line-height: 22px; + color: var(--color-text-maxcontrast); + text-overflow: ellipsis; + white-space: nowrap; +} + +table td.selection { + padding: 0; +} + +/* File checkboxes */ +#fileList tr td.selection > .selectCheckBox + label:before { + opacity: 0.3; + margin-right: 0; +} + +/* Show checkbox with full opacity when hovering, checked, or selected */ +#fileList tr:hover td.selection > .selectCheckBox + label:before, +#fileList tr:focus td.selection > .selectCheckBox + label:before, +#fileList tr td.selection > .selectCheckBox:checked + label:before, +#fileList tr.selected td.selection > .selectCheckBox + label:before { + opacity: 1; +} + +/* Show checkbox with half opacity when selecting range */ +#fileList tr.halfselected td.selection > .selectCheckBox + label:before { + opacity: 0.5; +} + +/* Use label to have bigger clickable size for checkbox */ +#fileList tr td.selection > .selectCheckBox + label, +.select-all + label { + padding: 16px; +} +#fileList tr td.selection > .selectCheckBox:focus + label, +.select-all:focus + label { + background-color: var(--color-background-hover); + border-radius: var(--border-radius-pill); +} + +#fileList tr td.selection > .selectCheckBox:focus-visible + label, +.select-all:focus-visible + label { + outline-offset: 0px; +} + +#fileList tr td.filename { + position: relative; + width: 100%; + padding-left: 0; + padding-right: 0; + -webkit-transition: background-image 500ms; + -moz-transition: background-image 500ms; + -o-transition: background-image 500ms; + transition: background-image 500ms; +} + +#fileList tr td.filename a.name label, +#fileList tr td.filename p.name label { + position: absolute; + width: 80%; + height: 50px; +} + +#fileList tr td.filename .favorite { + display: inline-block; + float: left; +} + +#fileList tr td.filename .favorite-mark { + position: absolute; + display: block; + top: -6px; + right: -6px; + line-height: 100%; + text-align: center; +} + +#uploadsize-message, #delete-confirm { + display: none; +} + +/* File actions */ +.fileactions { + z-index: 50; +} + +.busy .fileactions, .busy .action { + visibility: hidden; +} + +/* fix position of bubble pointer for Files app */ +.bubble, +#app-navigation .app-navigation-entry-menu { + border-top-right-radius: 3px; + min-width: 100px; +} + +/* force show the loading icon, not only on hover */ +#fileList .icon-loading-small { + opacity: 1 !important; + display: inline !important; +} + +#fileList .action.action-share-notification span, #fileList a.name { + cursor: default !important; +} + +/* + * Make the disabled link look not like a link in file list rows + */ +#fileList a.name.disabled * { + cursor: default; +} +#fileList a.name.disabled a, #fileList a.name.disabled a * { + cursor: pointer; +} +#fileList a.name.disabled:focus { + background: none; +} + +a.action > img { + height: 16px; + width: 16px; + vertical-align: text-bottom; +} + +/* Actions for selected files */ +.selectedActions { + position: relative; + display: inline-block; + vertical-align: middle; +} + +.selectedActions.hidden { + display: none; +} + +.selectedActions a { + display: inline; + line-height: 50px; + padding: 16px 5px; +} + +.selectedActions a.hidden { + display: none; +} + +.selectedActions a img { + position: relative; + vertical-align: text-bottom; + margin-bottom: -1px; +} + +.selectedActions .actions-selected .icon-more { + margin-top: -3px; +} + +#fileList td a a.action { + display: inline; + padding: 17px 8px; + line-height: 50px; + opacity: 0.3; +} +#fileList td a a.action.action-share { + padding: 17px 14px; +} +#fileList td a a.action.action-share.permanent:not(.shared-style) .icon-shared + span { + /* hide text of the share action */ + /* .hidden-visually for accessbility */ + position: absolute; + left: -10000px; + top: auto; + width: 1px; + height: 1px; + overflow: hidden; +} +#fileList td a a.action.action-share .avatar { + display: inline-block; + vertical-align: middle; +} +#fileList td a a.action.action-menu { + padding-top: 17px; + padding-bottom: 17px; + padding-left: 14px; + padding-right: 14px; +} +#fileList td a a.action.no-permission:hover, #fileList td a a.action.no-permission:focus { + opacity: 0.3; +} +#fileList td a a.action.disabled:hover, #fileList td a a.action.disabled:focus, +#fileList td a a.action.disabled img { + opacity: 0.3; +} +#fileList td a a.action.disabled.action-download { + opacity: 0.7; +} +#fileList td a a.action.disabled.action-download:hover, #fileList td a a.action.disabled.action-download:focus { + opacity: 0.7; +} +#fileList td a a.action:hover, #fileList td a a.action:focus { + opacity: 1; +} +#fileList td a a.action:focus { + background-color: var(--color-background-hover); + border-radius: var(--border-radius-pill); +} +#fileList td a .fileActionsMenu a.action, #fileList td a a.action.action-share.shared-style { + opacity: 0.7; +} +#fileList td a .fileActionsMenu .action.permanent { + opacity: 1; +} + +#fileList .action.action-share.permanent.shared-style span:not(.icon) { + display: inline-block; + max-width: 70px; + overflow: hidden; + text-overflow: ellipsis; + vertical-align: middle; + margin-left: 6px; +} + +#fileList .remoteAddress .userDomain { + margin-left: 0 !important; +} + +#fileList .favorite-mark.permanent { + opacity: 1; +} + +#fileList .fileActionsMenu a.action:hover, +#fileList .fileActionsMenu a.action:focus, +#fileList a.action.action-share.shared-style:hover, +#fileList a.action.action-share.shared-style:focus { + opacity: 1; +} + +#fileList tr a.action.disabled { + background: none; +} + +#selectedActionsList a.download.disabled, +#fileList tr a.action.action-download.disabled { + color: #000000; +} + +#fileList tr:hover a.action.disabled:hover * { + cursor: default; +} + +.summary { + color: var(--color-text-maxcontrast); + /* add whitespace to bottom of files list to correctly show dropdowns */ + height: 330px; +} + +#filestable .filesummary { + width: 100%; + /* Width of checkbox and file preview */ + padding-left: 101px; +} + +/* Less whitespace needed on link share page + * as there is a footer and action menus have fewer entries. + */ +#body-public .summary { + height: 180px; +} + +.summary:hover, +.summary:focus, +.summary, +table tr.summary td { + background-color: transparent; +} + +.summary td { + border-bottom: none; + vertical-align: top; + padding-top: 20px; +} + +.summary td:first-child { + padding: 0; +} + +.hiddeninfo { + white-space: pre-line; +} + +table.dragshadow { + width: auto; + z-index: 2000; +} + +table.dragshadow td.filename { + padding-left: 60px; + padding-right: 16px; + height: 36px; + /* Override "max-width: 0" to prevent file name and size from overlapping */ + max-width: unset; +} + +table.dragshadow td.size { + padding-right: 8px; +} + +.mask { + z-index: 50; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: var(--color-main-background); + background-repeat: no-repeat no-repeat; + background-position: 50%; + opacity: 0.7; + transition: opacity 100ms; + -moz-transition: opacity 100ms; + -o-transition: opacity 100ms; + -ms-transition: opacity 100ms; + -webkit-transition: opacity 100ms; +} + +.mask.transparent { + opacity: 0; +} + +.newFileMenu { + font-weight: 300; + top: 100%; + left: -48px !important; + margin-top: 4px; + min-width: 100px; + z-index: 1001; + /* Center triangle */ +} +.newFileMenu::after { + left: 57px !important; +} + +#filestable .filename .action .icon, +#filestable .selectedActions a .icon, +#filestable .filename .favorite-mark .icon, +#controls .actions .button .icon { + display: inline-block; + vertical-align: middle; + background-size: 16px 16px; +} + +#filestable .filename .favorite-mark .icon-star { + background-image: none; +} +#filestable .filename .favorite-mark .icon-starred { + /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */ + background-image: var(--icon-star-dark-yellow); +} + +#filestable .filename .action .icon.hidden, +#filestable .selectedActions a .icon.hidden, +#controls .actions .button .icon.hidden { + display: none; +} + +#filestable .filename .action .icon.loading, +#filestable .selectedActions a .icon.loading, +#controls .actions .button .icon.loading { + width: 15px; + height: 15px; +} + +.app-files .actions .button.new { + position: relative; +} + +.breadcrumb .canDrop > a, +#filestable tbody tr.canDrop { + background-color: rgba(0, 130, 201, 0.3); +} + +.dropzone-background { + background-color: rgba(0, 130, 201, 0.3); +} +.dropzone-background :hover { + box-shadow: none !important; +} + +.notCreatable { + margin-left: 12px; + margin-right: 44px; + margin-top: 12px; + color: var(--color-main-text); + overflow: auto; + min-width: 160px; + height: 54px; +} +.notCreatable:not(.hidden) { + display: flex; +} +.notCreatable .icon-alert-outline { + top: -15px; + position: relative; + margin-right: 4px; +} + +#quota { + margin: 0 !important; + border: none; + border-radius: 0; + background-color: transparent; + z-index: 1; +} +#quota > a[href="#"] { + box-shadow: none !important; +} +#quota > a[href="#"], #quota > a[href="#"] * { + cursor: default !important; +} +#quota .quota-container { + height: 5px; + border-radius: var(--border-radius); +} +#quota .quota-container div { + height: 100%; + background-color: var(--color-primary); +} + +#quotatext { + padding: 0; + height: 30px; + line-height: 30px; +} + +/* GRID */ +#filestable.view-grid:not(.hidden) { + /* HEADER and MULTISELECT */ + /* MAIN FILE LIST */ + /* Center align the footer file number & size summary */ +} +#filestable.view-grid:not(.hidden) thead tr { + display: block; + border-bottom: 1px solid var(--color-border); + background-color: var(--color-main-background-translucent); +} +#filestable.view-grid:not(.hidden) thead tr th { + width: auto; + border: none; +} +#filestable.view-grid:not(.hidden) tbody { + display: grid; + grid-template-columns: repeat(auto-fill, 160px); + justify-content: space-around; + row-gap: 15px; + margin: 15px 0; +} +#filestable.view-grid:not(.hidden) tbody tr:not(.hidden) { + display: block; + position: relative; + height: 190px; + border-radius: var(--border-radius); +} +#filestable.view-grid:not(.hidden) tbody tr:not(.hidden):hover, #filestable.view-grid:not(.hidden) tbody tr:not(.hidden):focus, #filestable.view-grid:not(.hidden) tbody tr:not(.hidden):active, #filestable.view-grid:not(.hidden) tbody tr:not(.hidden).selected, #filestable.view-grid:not(.hidden) tbody tr:not(.hidden).searchresult, +#filestable.view-grid:not(.hidden) tbody tr:not(.hidden) .name:focus, #filestable.view-grid:not(.hidden) tbody tr:not(.hidden).highlighted { + background-color: transparent; +} +#filestable.view-grid:not(.hidden) tbody tr:not(.hidden):hover .thumbnail-wrapper, +#filestable.view-grid:not(.hidden) tbody tr:not(.hidden):hover .nametext, +#filestable.view-grid:not(.hidden) tbody tr:not(.hidden):hover .fileactions, #filestable.view-grid:not(.hidden) tbody tr:not(.hidden):focus .thumbnail-wrapper, +#filestable.view-grid:not(.hidden) tbody tr:not(.hidden):focus .nametext, +#filestable.view-grid:not(.hidden) tbody tr:not(.hidden):focus .fileactions, #filestable.view-grid:not(.hidden) tbody tr:not(.hidden):active .thumbnail-wrapper, +#filestable.view-grid:not(.hidden) tbody tr:not(.hidden):active .nametext, +#filestable.view-grid:not(.hidden) tbody tr:not(.hidden):active .fileactions, #filestable.view-grid:not(.hidden) tbody tr:not(.hidden).selected .thumbnail-wrapper, +#filestable.view-grid:not(.hidden) tbody tr:not(.hidden).selected .nametext, +#filestable.view-grid:not(.hidden) tbody tr:not(.hidden).selected .fileactions, #filestable.view-grid:not(.hidden) tbody tr:not(.hidden).searchresult .thumbnail-wrapper, +#filestable.view-grid:not(.hidden) tbody tr:not(.hidden).searchresult .nametext, +#filestable.view-grid:not(.hidden) tbody tr:not(.hidden).searchresult .fileactions, +#filestable.view-grid:not(.hidden) tbody tr:not(.hidden) .name:focus .thumbnail-wrapper, +#filestable.view-grid:not(.hidden) tbody tr:not(.hidden) .name:focus .nametext, +#filestable.view-grid:not(.hidden) tbody tr:not(.hidden) .name:focus .fileactions, #filestable.view-grid:not(.hidden) tbody tr:not(.hidden).highlighted .thumbnail-wrapper, +#filestable.view-grid:not(.hidden) tbody tr:not(.hidden).highlighted .nametext, +#filestable.view-grid:not(.hidden) tbody tr:not(.hidden).highlighted .fileactions { + background-color: var(--color-background-hover); +} +#filestable.view-grid:not(.hidden) tbody td { + display: inline; + border-bottom: none; + /* No space for filesize and date in grid view */ + /* Position actions menu below file */ +} +#filestable.view-grid:not(.hidden) tbody td.filename .thumbnail-wrapper { + min-width: 0; + max-width: none; + position: absolute; + width: 160px; + height: 160px; + padding: 14px; + top: 0; + left: 0; + z-index: -1; +} +#filestable.view-grid:not(.hidden) tbody td.filename .thumbnail-wrapper .thumbnail { + width: calc(100% - 2 * 14px); + height: calc(100% - 2 * 14px); + background-size: contain; + margin: 0; + border-radius: var(--border-radius); + background-repeat: no-repeat; + background-position: center; + /* Position favorite star related to checkbox to left and 3-dot menu below + * Position is inherited from the selection while in grid view + */ +} +#filestable.view-grid:not(.hidden) tbody td.filename .thumbnail-wrapper .thumbnail .favorite-mark { + padding: 14px; + left: auto; + top: -22px; + right: -22px; +} +#filestable.view-grid:not(.hidden) tbody td.filename .uploadtext { + width: 100%; + margin: 0; + top: 0; + bottom: auto; + height: 28px; + padding-top: 4px; + padding-left: 28px; +} +#filestable.view-grid:not(.hidden) tbody td.filename .name { + height: 100%; + border-radius: var(--border-radius); + overflow: hidden; + cursor: pointer !important; +} +#filestable.view-grid:not(.hidden) tbody td.filename .name .nametext { + display: flex; + height: 44px; + margin-top: 146px; + text-align: center; + line-height: 44px; + padding: 0; + /* No space for extension in grid view */ +} +#filestable.view-grid:not(.hidden) tbody td.filename .name .nametext .innernametext { + display: inline-block; + text-align: center; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +#filestable.view-grid:not(.hidden) tbody td.filename .name .nametext:before { + content: ""; + flex: 1; + min-width: 14px; +} +#filestable.view-grid:not(.hidden) tbody td.filename .name .nametext:after { + content: ""; + flex: 1; + min-width: 44px; +} +#filestable.view-grid:not(.hidden) tbody td.filename .name .nametext .extension { + display: none; +} +#filestable.view-grid:not(.hidden) tbody td.filename .name .fileactions { + height: initial; + margin-top: 146px; + display: flex; + align-items: center; + position: absolute; + right: 0; +} +#filestable.view-grid:not(.hidden) tbody td.filename .name .fileactions .action { + padding: 14px; + width: 44px; + height: 44px; + display: flex; + align-items: center; + justify-content: center; +} +#filestable.view-grid:not(.hidden) tbody td.filename .name .fileactions .action:not(.action-menu) { + display: none; +} +#filestable.view-grid:not(.hidden) tbody td.filename .fileActionsMenu .action-share-container.hidden { + display: block !important; +} +#filestable.view-grid:not(.hidden) tbody td.filename .fileActionsMenu .action-share-container.hidden .action-share img { + padding: 6px; + border-radius: 50%; +} +#filestable.view-grid:not(.hidden) tbody td.filename .fileActionsMenu .action-restore-container.hidden { + display: block !important; +} +#filestable.view-grid:not(.hidden) tbody td.filename .fileActionsMenu .action-comment-container.hidden { + display: block !important; +} +#filestable.view-grid:not(.hidden) tbody td.filename form { + padding: 3px 14px; + border-radius: var(--border-radius); +} +#filestable.view-grid:not(.hidden) tbody td.filename form input.filename { + width: 100%; + margin-left: 0; +} +#filestable.view-grid:not(.hidden) tbody td.filesize, #filestable.view-grid:not(.hidden) tbody td.date { + display: none; +} +#filestable.view-grid:not(.hidden) tbody td.selection, #filestable.view-grid:not(.hidden) tbody td.filename .favorite-mark { + position: absolute; + top: -8px; + left: -8px; + display: flex; + width: 44px; + height: 44px; + z-index: 10; + background: transparent; +} +#filestable.view-grid:not(.hidden) tbody td.selection label, #filestable.view-grid:not(.hidden) tbody td.filename .favorite-mark label { + width: 44px; + height: 44px; + display: inline-flex; + padding: 14px; +} +#filestable.view-grid:not(.hidden) tbody td.selection label::before, #filestable.view-grid:not(.hidden) tbody td.filename .favorite-mark label::before { + margin: 0; + width: 14px; + height: 14px; +} +#filestable.view-grid:not(.hidden) tbody td .popovermenu { + left: 0; + width: 150px; + margin: 0 5px; + /* Ellipsize long entries, normally menu width is adjusted but for grid we use fixed width. */ +} +#filestable.view-grid:not(.hidden) tbody td .popovermenu .menuitem span:not(.icon) { + overflow: hidden; + text-overflow: ellipsis; +} +#filestable.view-grid:not(.hidden) tr.hidden-file td.filename .name .nametext .extension { + display: block; +} +#filestable.view-grid:not(.hidden) tfoot { + display: grid; +} +#filestable.view-grid:not(.hidden) tfoot .summary:not(.hidden) { + display: inline-block; + margin: 0 auto; + height: 418px; +} +#filestable.view-grid:not(.hidden) tfoot .summary:not(.hidden) td { + padding-top: 50px; +} +#filestable.view-grid:not(.hidden) tfoot .summary:not(.hidden) td:first-child, #filestable.view-grid:not(.hidden) tfoot .summary:not(.hidden) td.date { + display: none; +} +#filestable.view-grid:not(.hidden) tfoot .summary:not(.hidden) td .info { + margin-left: 0; +} + +/* Grid view toggle */ +#view-toggle { + background-color: transparent; + border: none; + margin: 0; + padding: 22px; + opacity: 0.5; + position: fixed; + right: 0; + z-index: 100; +} +#view-toggle:hover, #view-toggle:focus, #showgridview:focus + #view-toggle { + opacity: 1; +} + +/** + * Make sure the hidden input is always + * on the visible scrolled area of the + * page to avoid scrolling to top when focusing + */ +#showgridview { + position: fixed; + top: 0; +} + +/* Adjustments for link share page */ +#body-public { + /* Right-align view toggle on link share page */ +} +#body-public #filestable.view-grid:not(.hidden) tbody td { + /* More space for filename since there is no share icon */ + /* Position actions menu correctly below 3-dot-menu */ +} +#body-public #filestable.view-grid:not(.hidden) tbody td.filename .name .nametext .innernametext { + max-width: 124px; +} +#body-public #filestable.view-grid:not(.hidden) tbody td .popovermenu { + left: -80px; +} +#body-public #view-toggle { + position: absolute; + right: 0; +} + +/* Hide legacy Gallery toggle */ +#gallery-button { + display: none; +} + +#tag_multiple_files_container { + overflow: hidden; + background-color: #fff; + border-radius: 3px; + position: relative; + display: flex; + flex-wrap: wrap; + margin-bottom: 10px; +} +#tag_multiple_files_container h3 { + width: 100%; + padding: 0 18px; +} +#tag_multiple_files_container .systemTagsInputFieldContainer { + flex: 1 1 80%; + min-width: 0; + margin: 0 12px; +} + +#upload { + box-sizing: border-box; + height: 36px; + width: 39px; + padding: 0 !important; + /* override default control bar button padding */ + margin-left: 3px; + overflow: hidden; + vertical-align: top; + position: relative; + z-index: -20; +} + +#upload .icon-upload { + position: relative; + display: block; + width: 100%; + height: 44px; + width: 44px; + margin: -5px -3px; + cursor: pointer; + z-index: 10; + opacity: 0.65; +} + +.file_upload_target { + display: none; +} + +.file_upload_form { + display: inline; + float: left; + margin: 0; + padding: 0; + cursor: pointer; + overflow: visible; +} + +#uploadprogresswrapper, #uploadprogresswrapper * { + box-sizing: border-box; +} + +#uploadprogresswrapper { + display: inline-block; + vertical-align: top; + height: 36px; + margin-left: 3px; +} + +#uploadprogresswrapper > input[type=button] { + height: 36px; + margin-left: 3px; +} + +#uploadprogressbar { + border-color: var(--color-border-dark); + border-radius: 18px 0 0 18px; + border-right: 0; + position: relative; + float: left; + width: 200px; + height: 36px; + display: inline-block; + text-align: center; +} +#uploadprogressbar .ui-progressbar-value { + margin: 0; +} + +#uploadprogressbar .ui-progressbar-value.ui-widget-header.ui-corner-left { + height: calc(100% + 2px); + top: -1px; + left: -1px; + position: absolute; + overflow: hidden; + background-color: var(--color-primary); +} + +#uploadprogressbar .label { + top: 8px; + opacity: 1; + overflow: hidden; + white-space: nowrap; + font-weight: normal; +} + +#uploadprogressbar .label.inner { + color: var(--color-primary-text); + position: absolute; + display: block; + width: 200px; +} + +#uploadprogressbar .label.outer { + position: relative; + color: var(--color-main-text); +} + +#uploadprogressbar .desktop { + display: block; +} + +#uploadprogressbar .mobile { + display: none; +} + +#uploadprogressbar + .stop { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.oc-dialog .fileexists { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + margin-bottom: 30px; +} + +.oc-dialog .fileexists .conflict .filename, +.oc-dialog .fileexists .conflict .mtime, +.oc-dialog .fileexists .conflict .size { + -webkit-touch-callout: initial; + -webkit-user-select: initial; + -khtml-user-select: initial; + -moz-user-select: initial; + -ms-user-select: initial; + user-select: initial; +} + +.oc-dialog .fileexists .conflict .message { + color: #e9322d; +} + +.oc-dialog .fileexists table { + width: 100%; +} + +.oc-dialog .fileexists th { + padding-left: 0; + padding-right: 0; +} + +.oc-dialog .fileexists th input[type=checkbox] { + margin-right: 3px; +} + +.oc-dialog .fileexists th:first-child { + width: 225px; +} + +.oc-dialog .fileexists th label { + font-weight: normal; + color: var(--color-main-text); +} + +.oc-dialog .fileexists th .count { + margin-left: 3px; +} + +.oc-dialog .fileexists .conflicts .template { + display: none; +} + +.oc-dialog .fileexists .conflict { + width: 100%; + height: 85px; +} + +.oc-dialog .fileexists .conflict .filename { + color: #777; + word-break: break-all; + clear: left; +} + +.oc-dialog .fileexists .icon { + width: 64px; + height: 64px; + margin: 0px 5px 5px 5px; + background-repeat: no-repeat; + background-size: 64px 64px; + float: left; +} + +.oc-dialog .fileexists .original, +.oc-dialog .fileexists .replacement { + float: left; + width: 225px; +} + +.oc-dialog .fileexists .conflicts { + overflow-y: auto; + max-height: 225px; +} + +.oc-dialog .fileexists .conflict input[type=checkbox] { + float: left; +} + +.oc-dialog .fileexists #allfileslabel { + float: right; +} + +.oc-dialog .fileexists #allfiles { + vertical-align: bottom; + position: relative; + top: -3px; +} + +.oc-dialog .fileexists #allfiles + span { + vertical-align: bottom; +} + +.oc-dialog .oc-dialog-buttonrow { + width: 100%; + text-align: right; +} +.oc-dialog .oc-dialog-buttonrow .cancel { + float: left; +} + +.highlightUploaded { + -webkit-animation: highlightAnimation 2s 1; + -moz-animation: highlightAnimation 2s 1; + -o-animation: highlightAnimation 2s 1; + animation: highlightAnimation 2s 1; +} + +@-webkit-keyframes highlightAnimation { + 0% { + background-color: rgb(255, 255, 140); + } + 100% { + background-color: rgba(0, 0, 0, 0); + } +} +@-moz-keyframes highlightAnimation { + 0% { + background-color: rgb(255, 255, 140); + } + 100% { + background-color: rgba(0, 0, 0, 0); + } +} +@-o-keyframes highlightAnimation { + 0% { + background-color: rgb(255, 255, 140); + } + 100% { + background-color: rgba(0, 0, 0, 0); + } +} +@keyframes highlightAnimation { + 0% { + background-color: rgb(255, 255, 140); + } + 100% { + background-color: rgba(0, 0, 0, 0); + } +} +/** + * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com) + * + * @author John Molakvoæ (skjnldsv) + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ +/* 938 = table min-width(688) + app-navigation width: 250\ + $breakpoint-mobile +1 = size where app-navigation is hidden +1 + 688 = table min-width */ +@media only screen and (max-width: 988px) and (min-width: 1025px), only screen and (max-width: 688px) { + .app-files #app-content.dir-drop { + background-color: rgb(255, 255, 255) !important; + } + + table th#headerSize, +table td.filesize, +table th#headerDate, +table td.date { + display: none; + } + + /* remove padding to let border bottom fill the whole width*/ + table td { + padding: 0; + } + + /* remove shift for multiselect bar to account for missing navigation */ + table.multiselect thead { + padding-left: 0; + } + + #fileList a.action.action-menu img { + padding-left: 0; + } + + #fileList .fileActionsMenu { + margin-right: 6px; + } + + /* hide text of the share action on mobile */ + /* .hidden-visually for accessbility */ + #fileList a.action-share span:not(.icon):not(.avatar) { + position: absolute; + left: -10000px; + top: auto; + width: 1px; + height: 1px; + overflow: hidden; + } + + /* proper notification area for multi line messages */ + #notification-container { + display: flex; + } + + /* shorten elements for mobile */ + #uploadprogressbar, #uploadprogressbar .label.inner { + width: 50px; + } + + /* hide desktop-only parts */ + #uploadprogressbar .desktop { + display: none !important; + } + + #uploadprogressbar .mobile { + display: block !important; + } + + /* ensure that it is visible over #app-content */ + table.dragshadow { + z-index: 1000; + } +} +@media only screen and (max-width: 480px) { + /* Only show icons */ + table th .selectedActions { + float: right; + } + + table th .selectedActions > a span:not(.icon) { + display: none; + } + + /* Increase touch area for the icons */ + table th .selectedActions a { + padding: 17px 14px; + } + + /* Remove the margin to reduce the overlap between the name and the icons */ + table.multiselect th .columntitle.name { + margin-left: 0; + } +} +.app-sidebar .detailFileInfoContainer { + min-height: 50px; + padding: 15px; +} + +.app-sidebar .detailFileInfoContainer > div { + clear: both; +} + +.app-sidebar .mainFileInfoView .icon { + display: inline-block; + background-size: 16px 16px; +} + +.app-sidebar .mainFileInfoView .permalink { + padding: 6px 10px; + vertical-align: top; + opacity: 0.6; +} +.app-sidebar .mainFileInfoView .permalink:hover, .app-sidebar .mainFileInfoView .permalink:focus { + opacity: 1; +} + +.app-sidebar .mainFileInfoView .permalink-field > input { + clear: both; + width: 90%; +} + +.app-sidebar .thumbnailContainer.large { + margin-left: -15px; + margin-right: -35px; + /* 15 + 20 for the close button */ + margin-top: -15px; +} + +.app-sidebar .thumbnailContainer.large.portrait { + margin: 0; + /* if we don't fit the image anyway we give it back the margin */ +} + +.app-sidebar .large .thumbnail { + width: 100%; + display: block; + background-repeat: no-repeat; + background-position: center; + background-size: 100%; + float: none; + margin: 0; + height: auto; +} + +.app-sidebar .large .thumbnail .stretcher { + content: ""; + display: block; + padding-bottom: 56.25%; + /* sets height of .thumbnail to 9/16 of the width */ +} + +.app-sidebar .large.portrait .thumbnail { + background-position: 50% top; +} + +.app-sidebar .large.portrait .thumbnail { + background-size: contain; +} + +.app-sidebar .large.text { + overflow-y: scroll; + overflow-x: hidden; + padding-top: 14px; + font-size: 80%; + margin-left: 0; +} + +.app-sidebar .thumbnail { + width: 100%; + min-height: 75px; + display: inline-block; + float: left; + margin-right: 10px; + background-size: contain; + background-repeat: no-repeat; +} + +.app-sidebar .ellipsis { + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; +} + +.app-sidebar .fileName { + font-size: 16px; + padding-top: 13px; + padding-bottom: 3px; +} + +.app-sidebar .fileName h3 { + width: calc(100% - 42px); + /* 36px is the with of the copy link icon, but this breaks so we add some more to be sure */ + display: inline-block; + padding: 5px 0; + margin: -5px 0; +} + +.app-sidebar .file-details { + color: var(--color-text-maxcontrast); +} + +.app-sidebar .action-favorite { + vertical-align: sub; + padding: 10px; + margin: -10px; +} + +.app-sidebar .action-favorite > span { + opacity: 0.7 !important; +} + +.app-sidebar .detailList { + float: left; +} + +.app-sidebar .close { + position: absolute; + top: 0; + right: 0; + opacity: 0.5; + z-index: 1; + width: 44px; + height: 44px; +} + +/** + * @copyright Copyright (c) 2018, Arthur Schiwon + * + * @license GNU AGPL version 3 or any later version + * + */ +.whatsNewPopover { + bottom: 35px !important; + left: 15px !important; + width: 270px; + z-index: 700; +} + +.whatsNewPopover p { + width: auto !important; +} + +.whatsNewPopover .caption { + font-weight: bold; + cursor: auto !important; +} + +.whatsNewPopover .icon-close { + position: absolute; + right: 0; +} + +.whatsNewPopover::after { + content: none; +} + +/*# sourceMappingURL=merged.css.map */ diff --git a/apps/files/css/merged.css.map b/apps/files/css/merged.css.map new file mode 100644 index 0000000000000..b5236874c17e2 --- /dev/null +++ b/apps/files/css/merged.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["../../../core/css/variables.scss","files.scss","../../../core/css/functions.scss","upload.scss","mobile.scss","detailsView.scss","../../../core/css/whatsnew.scss"],"names":[],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBA;AAAA;AAAA;AA4BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ADxCA;AACA;EACC;EACA;EACA;EACA;;;AAED;EAAoD;EAAU;;;AAC9D;EAAqB;;;AACrB;AAAA;EAEC;;;AAED;EACC;;;AAGD;EACC;EACA;EACA;;AACA;EACC;;;AAIF;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;;;AAGD;AAAA;AAAA;EAGC;EACA;;;AAGD;AACA;EACC;EACA;EACA;EACA;EACA;AAiBA;AAAA;AAAA;;AAfA;EACC;;AAGD;EACC;EACA;EAEA,KDoCc;EClCd;EACA;EACA;;AAMD;EACC;EACA;;AAEA;AAAA;EAEC;;AAEA;AAAA;EACC;;;AAMJ;EACC;;;AAGD;AACA;EACC;EACA;;;AAGD;EAGC;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;AACA;AClEC;EAEA;;;ADmED;ACrEC;EAEA;;;ADsED;ACxEC;EAEA;;;ADyED;AAAA;AAAA;AAAA;AC3EC;EAEA;;;AD+ED;ACjFC;EAEA;;;ADkFD;ACpFC;EAEA;;;ADqFD;ACvFC;EAEA;;;ADwFD;AC1FC;EAEA;;;AD2FD;AC7FC;EAEA;;;AD8FD;AChGC;EAEA;;;ADkGD;EACC;;;AAED;AACA;EACC;EACA;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;EACC;;;AAED;AAAA;AAAA;AAAA;AAAA;EAKC;;;AAED;AAAA;AAAA;AAAA;AAAA;EAKC;;;AAGD;EAAU;;;AAEV;EACC;;;AAED;EACC;EACA;EACA;EACA;EACA;;;AAED;AAAA;AAAA;AAAA;EAIC;EACA;;;AAGD;EACC;;;AAED;EACC;;;AAED;EACC;EACA;EACA;EACA;EACA;EACA;;;AAED;EACC;EACA;;;AAED;EACC;EACA;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;;;AAED;AAAA;AAAA;AAAA;EAIC;;;AAED;EACC;;;AAED;AAAA;EAEC;;;AAGD;AAAA;EAEC;EACA;EACA;;;AAED;EACC;EACA;EACA;EACA;;;AAED;EACC;EACA;AAAe;EACf;;;AAGD;EACC;EACA;;;AAGD;EACC;;;AAED;EACC;;;AAED;AAAA;EAEC;EACA;EACA;AACA;EACA;EACA;;;AAGD;AAAA;EAEC;;;AAGD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAQC;;;AAGD;EACC;EACA;;;AAGD;EACC;;;AAGD;EACC;EACA;AAAe;;;AAEhB;EACC;;;AAGD;AAAA;AAAA;EAGC;EACA;;;AAED;AAAA;EAEC;EACA;AAAmB;EACnB;EACA;EACA;EACA;EACA;;;AAED;AACC;EACA;EACA;EACA;EACA;;;AAGA;EACC;;AAED;EACC;;;AAGF;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAED;EACC;;;AAID;EACC;;;AAGD;EACC;EACA;EACA;;;AAED;EACC;EACA;EACA;;;AAGD;EAA6H;;;AAC7H;EAAwE;EAAY;;;AAEpF;EACC;EACA;EACA;EACA;;;AAGD;AAEC;EACC;;AACA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAKH;AAAA;EAEC;;;AAGD;EACC;EACA;EACA;EACA;;;AAED;EACC;;;AAGD;EACC;EACA;EACA;EACA;;;AAGD;AAEA;EACC;EACA;EAEA;EACA;EACA;EACA;EACA;EAEA;EACA;EAEA;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;AACA;EACC;EACA;;;AAGD;AACA;AAAA;AAAA;AAAA;EAIC;;;AAGD;AACA;EACC;;;AAGD;AAGC;AAAA;EACC;;AAGD;AAAA;EACC;EACA;;;AAIF;AAAA;EAEC;;;AAGD;EACC;EACA;EACA;EACA;EACA;EAA2C;EAAwC;EAAsC;;;AAG1H;AAAA;EAEC;EACA;EACA;;;AAGD;EACC;EACA;;;AAED;EACC;EACA;EACA;EACA;EACA;EACA;;;AAGD;EAAsC;;;AAEtC;AACA;EACC;;;AAGD;EACC;;;AAGD;AACA;AAAA;EAEC;EACA;;;AAGD;AACA;EACC;EACA;;;AAGD;EACC;;;AAGD;AAAA;AAAA;AAIC;EACC;;AAGD;EACC;;AAGD;EACC;;;AAIF;EACC;EACA;EACA;;;AAGD;AACA;EACI;EACA;EACA;;;AAEJ;EACI;;;AAEJ;EACC;EACA;EACA;;;AAGD;EACC;;;AAED;EACC;EACA;EACA;;;AAGD;EACC;;;AAIA;EACC;EACA;EACA;EACA;;AACA;EACC;;AACA;AACC;AACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAED;EACC;EACA;;AAGF;EACC;EACA;EACA;EACA;;AAGA;EACC;;AAID;AAAA;EAEC;;AAED;EACC;;AACA;EACC;;AAIH;EACC;;AAED;EACC;EACA;;AAGF;EACC;;AAED;EACC;;;AAKF;EACC;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;AAAA;AAAA;AAAA;EAKC;;;AAGD;EACC;;;AAGD;AAAA;EAEC;;;AAGD;EACC;;;AAGD;EACC;AACA;EAEA;;;AAED;EACC;AACA;EACA;;;AAED;AAAA;AAAA;AAGA;EACC;;;AAED;AAAA;AAAA;AAAA;EAIC;;;AAED;EACC;EACA;EACA;;;AAED;EACC;;;AAED;EACC;;;AAGD;EACC;EACA;;;AAED;EACC;EACA;EACA;AAEA;EACA;;;AAED;EACC;;;AAED;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAED;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;AAEA;;AACA;EACC;;;AAIF;AAAA;AAAA;AAAA;EAIC;EACA;EACA;;;AAMA;EACC;;AAED;AC1vBA;EAEA;;;AD6vBD;AAAA;AAAA;EAGC;;;AAGD;AAAA;AAAA;EAGC;EACA;;;AAGD;EACC;;;AAGD;AAAA;EAEC;;;AAED;EACC;;AACA;EACC;;;AAIF;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;;AAGD;EACC;EACA;EACA;;;AAIF;EACC;EACA;EACA;EACA;EACA;;AAEA;EAEC;;AACA;EACC;;AAIF;EACC;EACA;;AAEA;EACC;EACA;;;AAKH;EACC;EACA;EACA;;;AAGD;AACA;AAIC;AAaA;AAoOA;;AA/OC;EACC;EACA;EACA;;AACA;EACC;EACA;;AAMH;EACC;EACA;EACA;EACA;EACA;;AAGA;EACC;EACA;EACA;EACA;;AAEA;AAAA;EAKC;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGC;;AAKH;EACC;EACA;AAmJA;AA8BA;;AA9KC;EACC;EACA;EACA;EACA,OAvDQ;EAwDR,QAxDQ;EAyDR,SAxDO;EAyDP;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;AAAA;AAAA;;AAGA;EACC,SA1EK;EA2EL;EACA;EACA;;AAKH;EACC;EACA;EACA;EACA;EAEA;EACA;EAEA;;AAGD;EACC;EACA;EAIA;EAKA;;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;AAoBA;;AAlBA;EACC;EACA;EACA;EACA;EACA;;AAED;EACC;EACA;EACA;;AAED;EACC;EACA;EACA;;AAID;EACC;;AAIF;EACC;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC,SApJK;EAqJL;EACA;EACA;EACA;EACA;;AAGA;EACC;;AAQH;EACC;;AAEA;EACC;EACA;;AAIF;EACC;;AAGD;EACC;;AAIF;EACC;EACA;;AAEA;EACC;EACA;;AAMH;EAEC;;AAGD;EAEC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA,SAvNO;;AAwNP;EACC;EACA,OA1NM;EA2NN,QA3NM;;AAiOT;EACC;EACA;EACA;AAEA;;AACA;EACC;EACA;;AAMJ;EACC;;AAID;EACC;;AAEA;EACC;EACA;EAEA;;AAEA;EACC;;AAEA;EAEC;;AAGD;EACI;;;AAOR;AACA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EAGC;;;AAIF;AAAA;AAAA;AAAA;AAAA;AAKA;EACC;EACA;;;AAGD;AACA;AAaC;;AAZA;AACC;AAKA;;AAJA;EACC;;AAID;EACC;;AAKF;EACC;EACA;;;AAIF;AACA;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;;AAGD;EACC;EACA;EACA;;;AEruCF;EACC;EACA;EACA;EACA;AAAuB;EACvB;EACA;EACA;EACA;EACA;;;AAED;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAED;EAAsB;;;AACtB;EAAoB;EAAgB;EAAY;EAAU;EAAW;EAAgB;;;AAErF;EACC;;;AAGD;EACC;EACA;EACA;EACA;;;AAED;EACC;EACA;;;AAED;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;;;AAGF;EACC;EACA;EACA;EACA;EACA;EACA;;;AAED;EACC;EACA;EACA;EACA;EACA;;;AAED;EACC;EACA;EACA;EACA;;;AAED;EACC;EACA;;;AAED;EACC;;;AAED;EACC;;;AAGD;EACC;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;AAAA;AAAA;EAGC;EACA;EACA;EACA;EACA;EACA;;;AAED;EACC;;;AAED;EACC;;;AAED;EACC;EACA;;;AAED;EACC;;;AAED;EACC;;;AAED;EACC;EACA;;;AAED;EACC;;;AAED;EACC;;;AAED;EACC;EACA;;;AAED;EACC;EACA;EACA;;;AAED;EACC;EACA;EACA;EACA;EACA;EACA;;;AAGD;AAAA;EAEC;EACA;;;AAED;EACC;EACA;;;AAED;EACC;;;AAED;EACC;;;AAED;EACC;EACA;EACA;;;AAED;EACC;;;AAGD;EACC;EACA;;AAEA;EACC;;;AAIF;EACC;EACA;EACA;EACA;;;AAGD;EACE;IAAK;;EACL;IAAO;;;AAET;EACE;IAAK;;EACL;IAAO;;;AAET;EACE;IAAK;;EACL;IAAO;;;AAET;EACE;IAAK;;EACL;IAAO;;;AHjNT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AIEA;AAAA;AAAA;AAIA;EAEA;IACC;;;EAGD;AAAA;AAAA;AAAA;IAIC;;;AAGD;EACA;IACC;;;AAGD;EACA;IACC;;;EAGD;IACC;;;EAGD;IACC;;;AAED;AACA;EACA;IACC;IACA;IACA;IACA;IACA;IACA;;;AAID;EACA;IACC;;;AAGD;EACA;IACC;;;AAED;EACA;IACC;;;EAED;IACC;;;AAGD;EACA;IACC;;;AAID;AACC;EACA;IACC;;;EAED;IACC;;;AAGD;EACA;IACC;;;AAGD;EACA;IACC;;;ACvFF;EACC;EACA;;;AAGD;EACC;;;AAID;EACC;EACA;;;AAGD;EACC;EACA;EACA;;AAEA;EAEC;;;AAGF;EACC;EACA;;;AAGD;EACC;EACA;AAAqB;EACrB;;;AAGD;EACC;AAAW;;;AAGZ;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;AAAwB;;;AAGzB;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;AAA0B;EAC1B;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;;AC/HD;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;EACE;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE","file":"merged.css"} \ No newline at end of file diff --git a/apps/files/css/mobile.css b/apps/files/css/mobile.css new file mode 100644 index 0000000000000..9cdbad8515620 --- /dev/null +++ b/apps/files/css/mobile.css @@ -0,0 +1,112 @@ +@charset "UTF-8"; +/** + * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com) + * + * @author John Molakvoæ (skjnldsv) + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ +/* 938 = table min-width(688) + app-navigation width: 250\ + $breakpoint-mobile +1 = size where app-navigation is hidden +1 + 688 = table min-width */ +@media only screen and (max-width: 988px) and (min-width: 1025px), only screen and (max-width: 688px) { + .app-files #app-content.dir-drop { + background-color: rgb(255, 255, 255) !important; + } + + table th#headerSize, +table td.filesize, +table th#headerDate, +table td.date { + display: none; + } + + /* remove padding to let border bottom fill the whole width*/ + table td { + padding: 0; + } + + /* remove shift for multiselect bar to account for missing navigation */ + table.multiselect thead { + padding-left: 0; + } + + #fileList a.action.action-menu img { + padding-left: 0; + } + + #fileList .fileActionsMenu { + margin-right: 6px; + } + + /* hide text of the share action on mobile */ + /* .hidden-visually for accessbility */ + #fileList a.action-share span:not(.icon):not(.avatar) { + position: absolute; + left: -10000px; + top: auto; + width: 1px; + height: 1px; + overflow: hidden; + } + + /* proper notification area for multi line messages */ + #notification-container { + display: flex; + } + + /* shorten elements for mobile */ + #uploadprogressbar, #uploadprogressbar .label.inner { + width: 50px; + } + + /* hide desktop-only parts */ + #uploadprogressbar .desktop { + display: none !important; + } + + #uploadprogressbar .mobile { + display: block !important; + } + + /* ensure that it is visible over #app-content */ + table.dragshadow { + z-index: 1000; + } +} +@media only screen and (max-width: 480px) { + /* Only show icons */ + table th .selectedActions { + float: right; + } + + table th .selectedActions > a span:not(.icon) { + display: none; + } + + /* Increase touch area for the icons */ + table th .selectedActions a { + padding: 17px 14px; + } + + /* Remove the margin to reduce the overlap between the name and the icons */ + table.multiselect th .columntitle.name { + margin-left: 0; + } +} + +/*# sourceMappingURL=mobile.css.map */ diff --git a/apps/files/css/mobile.css.map b/apps/files/css/mobile.css.map new file mode 100644 index 0000000000000..83b1e827b3352 --- /dev/null +++ b/apps/files/css/mobile.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["../../../core/css/variables.scss","mobile.scss"],"names":[],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACEA;AAAA;AAAA;AAIA;EAEA;IACC;;;EAGD;AAAA;AAAA;AAAA;IAIC;;;AAGD;EACA;IACC;;;AAGD;EACA;IACC;;;EAGD;IACC;;;EAGD;IACC;;;AAED;AACA;EACA;IACC;IACA;IACA;IACA;IACA;IACA;;;AAID;EACA;IACC;;;AAGD;EACA;IACC;;;AAED;EACA;IACC;;;EAED;IACC;;;AAGD;EACA;IACC;;;AAID;AACC;EACA;IACC;;;EAED;IACC;;;AAGD;EACA;IACC;;;AAGD;EACA;IACC","file":"mobile.css"} \ No newline at end of file diff --git a/apps/files/css/upload.css b/apps/files/css/upload.css new file mode 100644 index 0000000000000..dc90f5a793e2a --- /dev/null +++ b/apps/files/css/upload.css @@ -0,0 +1,264 @@ +#upload { + box-sizing: border-box; + height: 36px; + width: 39px; + padding: 0 !important; + /* override default control bar button padding */ + margin-left: 3px; + overflow: hidden; + vertical-align: top; + position: relative; + z-index: -20; +} + +#upload .icon-upload { + position: relative; + display: block; + width: 100%; + height: 44px; + width: 44px; + margin: -5px -3px; + cursor: pointer; + z-index: 10; + opacity: 0.65; +} + +.file_upload_target { + display: none; +} + +.file_upload_form { + display: inline; + float: left; + margin: 0; + padding: 0; + cursor: pointer; + overflow: visible; +} + +#uploadprogresswrapper, #uploadprogresswrapper * { + box-sizing: border-box; +} + +#uploadprogresswrapper { + display: inline-block; + vertical-align: top; + height: 36px; + margin-left: 3px; +} + +#uploadprogresswrapper > input[type=button] { + height: 36px; + margin-left: 3px; +} + +#uploadprogressbar { + border-color: var(--color-border-dark); + border-radius: 18px 0 0 18px; + border-right: 0; + position: relative; + float: left; + width: 200px; + height: 36px; + display: inline-block; + text-align: center; +} +#uploadprogressbar .ui-progressbar-value { + margin: 0; +} + +#uploadprogressbar .ui-progressbar-value.ui-widget-header.ui-corner-left { + height: calc(100% + 2px); + top: -1px; + left: -1px; + position: absolute; + overflow: hidden; + background-color: var(--color-primary); +} + +#uploadprogressbar .label { + top: 8px; + opacity: 1; + overflow: hidden; + white-space: nowrap; + font-weight: normal; +} + +#uploadprogressbar .label.inner { + color: var(--color-primary-text); + position: absolute; + display: block; + width: 200px; +} + +#uploadprogressbar .label.outer { + position: relative; + color: var(--color-main-text); +} + +#uploadprogressbar .desktop { + display: block; +} + +#uploadprogressbar .mobile { + display: none; +} + +#uploadprogressbar + .stop { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.oc-dialog .fileexists { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + margin-bottom: 30px; +} + +.oc-dialog .fileexists .conflict .filename, +.oc-dialog .fileexists .conflict .mtime, +.oc-dialog .fileexists .conflict .size { + -webkit-touch-callout: initial; + -webkit-user-select: initial; + -khtml-user-select: initial; + -moz-user-select: initial; + -ms-user-select: initial; + user-select: initial; +} + +.oc-dialog .fileexists .conflict .message { + color: #e9322d; +} + +.oc-dialog .fileexists table { + width: 100%; +} + +.oc-dialog .fileexists th { + padding-left: 0; + padding-right: 0; +} + +.oc-dialog .fileexists th input[type=checkbox] { + margin-right: 3px; +} + +.oc-dialog .fileexists th:first-child { + width: 225px; +} + +.oc-dialog .fileexists th label { + font-weight: normal; + color: var(--color-main-text); +} + +.oc-dialog .fileexists th .count { + margin-left: 3px; +} + +.oc-dialog .fileexists .conflicts .template { + display: none; +} + +.oc-dialog .fileexists .conflict { + width: 100%; + height: 85px; +} + +.oc-dialog .fileexists .conflict .filename { + color: #777; + word-break: break-all; + clear: left; +} + +.oc-dialog .fileexists .icon { + width: 64px; + height: 64px; + margin: 0px 5px 5px 5px; + background-repeat: no-repeat; + background-size: 64px 64px; + float: left; +} + +.oc-dialog .fileexists .original, +.oc-dialog .fileexists .replacement { + float: left; + width: 225px; +} + +.oc-dialog .fileexists .conflicts { + overflow-y: auto; + max-height: 225px; +} + +.oc-dialog .fileexists .conflict input[type=checkbox] { + float: left; +} + +.oc-dialog .fileexists #allfileslabel { + float: right; +} + +.oc-dialog .fileexists #allfiles { + vertical-align: bottom; + position: relative; + top: -3px; +} + +.oc-dialog .fileexists #allfiles + span { + vertical-align: bottom; +} + +.oc-dialog .oc-dialog-buttonrow { + width: 100%; + text-align: right; +} +.oc-dialog .oc-dialog-buttonrow .cancel { + float: left; +} + +.highlightUploaded { + -webkit-animation: highlightAnimation 2s 1; + -moz-animation: highlightAnimation 2s 1; + -o-animation: highlightAnimation 2s 1; + animation: highlightAnimation 2s 1; +} + +@-webkit-keyframes highlightAnimation { + 0% { + background-color: rgb(255, 255, 140); + } + 100% { + background-color: rgba(0, 0, 0, 0); + } +} +@-moz-keyframes highlightAnimation { + 0% { + background-color: rgb(255, 255, 140); + } + 100% { + background-color: rgba(0, 0, 0, 0); + } +} +@-o-keyframes highlightAnimation { + 0% { + background-color: rgb(255, 255, 140); + } + 100% { + background-color: rgba(0, 0, 0, 0); + } +} +@keyframes highlightAnimation { + 0% { + background-color: rgb(255, 255, 140); + } + 100% { + background-color: rgba(0, 0, 0, 0); + } +} + +/*# sourceMappingURL=upload.css.map */ diff --git a/apps/files/css/upload.css.map b/apps/files/css/upload.css.map new file mode 100644 index 0000000000000..718462f2607ac --- /dev/null +++ b/apps/files/css/upload.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["upload.scss"],"names":[],"mappings":"AAAA;EACC;EACA;EACA;EACA;AAAuB;EACvB;EACA;EACA;EACA;EACA;;;AAED;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAED;EAAsB;;;AACtB;EAAoB;EAAgB;EAAY;EAAU;EAAW;EAAgB;;;AAErF;EACC;;;AAGD;EACC;EACA;EACA;EACA;;;AAED;EACC;EACA;;;AAED;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;;;AAGF;EACC;EACA;EACA;EACA;EACA;EACA;;;AAED;EACC;EACA;EACA;EACA;EACA;;;AAED;EACC;EACA;EACA;EACA;;;AAED;EACC;EACA;;;AAED;EACC;;;AAED;EACC;;;AAGD;EACC;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;AAAA;AAAA;EAGC;EACA;EACA;EACA;EACA;EACA;;;AAED;EACC;;;AAED;EACC;;;AAED;EACC;EACA;;;AAED;EACC;;;AAED;EACC;;;AAED;EACC;EACA;;;AAED;EACC;;;AAED;EACC;;;AAED;EACC;EACA;;;AAED;EACC;EACA;EACA;;;AAED;EACC;EACA;EACA;EACA;EACA;EACA;;;AAGD;AAAA;EAEC;EACA;;;AAED;EACC;EACA;;;AAED;EACC;;;AAED;EACC;;;AAED;EACC;EACA;EACA;;;AAED;EACC;;;AAGD;EACC;EACA;;AAEA;EACC;;;AAIF;EACC;EACA;EACA;EACA;;;AAGD;EACE;IAAK;;EACL;IAAO;;;AAET;EACE;IAAK;;EACL;IAAO;;;AAET;EACE;IAAK;;EACL;IAAO;;;AAET;EACE;IAAK;;EACL;IAAO","file":"upload.css"} \ No newline at end of file diff --git a/apps/files_external/css/settings.css b/apps/files_external/css/settings.css new file mode 100644 index 0000000000000..84e382ceb89ef --- /dev/null +++ b/apps/files_external/css/settings.css @@ -0,0 +1,177 @@ +#files_external { + margin-bottom: 0px; +} + +#externalStorage { + margin: 15px 0 20px 0; +} +#externalStorage tr.externalStorageLoading > td { + text-align: center; +} + +#externalStorage td > input, #externalStorage td > select { + width: 100%; +} + +#externalStorage td.status { + /* overwrite conflicting core styles */ + display: table-cell; + vertical-align: middle; +} + +#externalStorage td.status > span { + display: inline-block; + height: 28px; + width: 28px; + vertical-align: text-bottom; + border-radius: 50%; + cursor: pointer; +} + +#externalStorage td.mountPoint, #externalStorage td.backend, #externalStorage td.authentication, #externalStorage td.configuration { + min-width: 160px; + width: 15%; +} + +#externalStorage td > img { + padding-top: 7px; + opacity: 0.5; +} + +#externalStorage td > img:hover { + padding-top: 7px; + cursor: pointer; + opacity: 1; +} + +#addMountPoint > td { + border: none; +} + +#addMountPoint > td.applicable { + visibility: hidden; +} + +#addMountPoint > td.hidden { + visibility: hidden; +} + +#externalStorage td { + height: 50px; +} +#externalStorage td.mountOptionsToggle, #externalStorage td.remove, #externalStorage td.save { + position: relative; + padding: 0 !important; + width: 44px; +} +#externalStorage td.mountOptionsToggle [class^=icon-], +#externalStorage td.mountOptionsToggle [class*=" icon-"], #externalStorage td.remove [class^=icon-], +#externalStorage td.remove [class*=" icon-"], #externalStorage td.save [class^=icon-], +#externalStorage td.save [class*=" icon-"] { + opacity: 0.5; + padding: 14px; + vertical-align: text-bottom; + cursor: pointer; +} +#externalStorage td.mountOptionsToggle [class^=icon-]:hover, +#externalStorage td.mountOptionsToggle [class*=" icon-"]:hover, #externalStorage td.remove [class^=icon-]:hover, +#externalStorage td.remove [class*=" icon-"]:hover, #externalStorage td.save [class^=icon-]:hover, +#externalStorage td.save [class*=" icon-"]:hover { + opacity: 1; +} + +#selectBackend { + margin-left: -10px; + width: 150px; +} + +#externalStorage td.configuration, +#externalStorage td.backend { + white-space: normal; +} + +#externalStorage td.configuration > * { + white-space: nowrap; +} + +#externalStorage td.configuration input.added { + margin-right: 6px; +} + +#externalStorage label > input[type=checkbox] { + margin-right: 3px; +} + +#externalStorage td.configuration label { + width: 100%; + display: inline-flex; + align-items: center; +} + +#externalStorage td.configuration input.disabled-success { + background-color: rgba(134, 255, 110, 0.9); +} + +#externalStorage td.applicable div.chzn-container { + position: relative; + top: 3px; +} + +#externalStorage .select2-container.applicableUsers { + width: 100% !important; +} + +#userMountingBackends { + padding-left: 25px; +} + +.files-external-select2 .select2-results .select2-result-label { + height: 32px; + padding: 3px; +} + +.files-external-select2 .select2-results .select2-result-label > span { + display: block; + position: relative; +} + +.files-external-select2 .select2-results .select2-result-label .avatardiv { + display: inline-block; +} + +.files-external-select2 .select2-results .select2-result-label .avatardiv + span { + position: absolute; + top: 5px; + margin-left: 10px; +} + +.files-external-select2 .select2-results .select2-result-label .avatardiv[data-type=group] + span { + vertical-align: top; + top: 6px; + position: absolute; + max-width: 80%; + left: 30px; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +#externalStorage .select2-container .select2-search-choice { + display: flex; +} +#externalStorage .select2-container .select2-search-choice .select2-search-choice-close { + display: block; + left: auto; + position: relative; + width: 20px; +} + +#externalStorage .mountOptionsToggle .dropdown { + width: auto; +} + +.nav-icon-external-storage { + background-image: var(--icon-external-dark); +} + +/*# sourceMappingURL=settings.css.map */ diff --git a/apps/files_external/css/settings.css.map b/apps/files_external/css/settings.css.map new file mode 100644 index 0000000000000..d084c036f9aca --- /dev/null +++ b/apps/files_external/css/settings.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["settings.scss"],"names":[],"mappings":"AAAA;EACC;;;AAGD;EACC;;AAEA;EACC;;;AAKD;EACC;;;AAIF;AACC;EACA;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;;;AAGA;EACC;EACA;;;AAGF;EAA0B;EAAiB;;;AAC3C;EAAgC;EAAiB;EAAgB;;;AACjE;EAAoB;;;AACpB;EAA+B;;;AAC/B;EAA2B;;;AAE3B;EACC;;AACA;EAGC;EACA;EACA;;AACA;AAAA;AAAA;AAAA;EAEC;EACA;EACA;EACA;;AACA;AAAA;AAAA;AAAA;EACC;;;AAMJ;EACC;EACA;;;AAGD;AAAA;EAEC;;;AAED;EACC;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;;;AAID;EACC;EACA;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;;;AAED;EACC;EACA;;;AAED;EACC;;;AAED;EACC;EACA;EACA;;;AAED;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;;AACA;EACC;EACA;EACA;EACA;;;AAIF;EACC;;;AAGD;EACC","file":"settings.css"} \ No newline at end of file diff --git a/apps/files_sharing/css/icons.css b/apps/files_sharing/css/icons.css new file mode 100644 index 0000000000000..ff5c5844df614 --- /dev/null +++ b/apps/files_sharing/css/icons.css @@ -0,0 +1,94 @@ +@charset "UTF-8"; +/** + * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com) + * + * @author John Molakvoæ (skjnldsv) + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ +/** + * @copyright Copyright (c) 2019 John Molakvoæ + * + * @author John Molakvoæ + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ +/** + * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com) + * + * @author John Molakvoæ (skjnldsv) + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ +/** + * @see core/src/icons.js + */ +/** + * SVG COLOR API + * + * @param string $icon the icon filename + * @param string $dir the icon folder within /core/img if $core or app name + * @param string $color the desired color in hexadecimal + * @param int $version the version of the file + * @param bool [$core] search icon in core + * + * @returns A background image with the url to the set to the requested icon. + */ +.icon-room { + /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */ + background-image: var(--icon-app-dark); +} + +.icon-circle { + /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */ + background-image: var(--icon-circles-dark); +} + +.icon-guests { + /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */ + background-image: var(--icon-app-dark); +} + +/*# sourceMappingURL=icons.css.map */ diff --git a/apps/files_sharing/css/icons.css.map b/apps/files_sharing/css/icons.css.map new file mode 100644 index 0000000000000..a2766ac03f7b0 --- /dev/null +++ b/apps/files_sharing/css/icons.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["../../../core/css/variables.scss","icons.scss","../../../core/css/functions.scss"],"names":[],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBA;AAAA;AAAA;AA4BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ADzBA;ACsCC;EAEA;;;ADrCD;ACmCC;EAEA;;;ADlCD;ACgCC;EAEA","file":"icons.css"} \ No newline at end of file diff --git a/apps/files_sharing/css/mobile.css b/apps/files_sharing/css/mobile.css new file mode 100644 index 0000000000000..63acecb90c802 --- /dev/null +++ b/apps/files_sharing/css/mobile.css @@ -0,0 +1,86 @@ +@charset "UTF-8"; +/** + * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com) + * + * @author John Molakvoæ (skjnldsv) + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ +@media only screen and (max-width: 1024px) { + /* make header scroll up for single shares, more view of content on small screens */ + #header.share-file { + position: absolute !important; + } + + /* hide size and date columns */ + table th#headerSize, +table td.filesize, +table th#headerDate, +table td.date { + display: none; + } + + /* restrict length of displayed filename to prevent overflow */ + table td.filename .nametext { + max-width: 75% !important; + } + + /* on mobile, show single shared image at full width without margin */ + #imgframe { + width: 100%; + padding: 0; + margin-bottom: 35px; + } + + /* some margin for the file type icon */ + #imgframe .publicpreview { + margin-top: 32px; + } + + /* some padding for better clickability */ + #fileList a.action img { + padding: 0 6px 0 12px; + } + + /* hide text of the actions on mobile */ + #fileList a.action:not(.menuitem) span { + display: none; + } + + /* ellipsis on file names */ + .nametext { + width: 60%; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + + #header .menutoggle { + padding-right: 14px; + background-position: center; + } + + .note { + padding: 0 20px; + } + + #emptycontent { + margin-top: 10vh; + } +} + +/*# sourceMappingURL=mobile.css.map */ diff --git a/apps/files_sharing/css/mobile.css.map b/apps/files_sharing/css/mobile.css.map new file mode 100644 index 0000000000000..36f4289e94aa9 --- /dev/null +++ b/apps/files_sharing/css/mobile.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["../../../core/css/variables.scss","mobile.scss"],"names":[],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACEA;AAEA;EACA;IACC;;;AAGD;EACA;AAAA;AAAA;AAAA;IAIC;;;AAGD;EACA;IACC;;;AAGD;EACA;IACC;IACA;IACA;;;AAED;EACA;IACC;;;AAGD;EACA;IACC;;;AAED;EACA;IACC;;;AAGD;EACA;IACC;IACA;IACA;IACA;;;EAGD;IACI;IACA;;;EAEJ;IACC;;;EAGD;IACC","file":"mobile.css"} \ No newline at end of file diff --git a/apps/files_sharing/css/public.css b/apps/files_sharing/css/public.css new file mode 100644 index 0000000000000..21dd876905c87 --- /dev/null +++ b/apps/files_sharing/css/public.css @@ -0,0 +1,237 @@ +@charset "UTF-8"; +/** + * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com) + * + * @author John Molakvoæ (skjnldsv) + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ +#preview { + text-align: center; +} + +#preview .notCreatable { + display: none; +} + +#noPreview { + display: none; + padding-top: 80px; +} + +#imgframe { + height: 75%; + padding-bottom: 32px; + padding-top: 32px; + width: 80%; + margin: 0 auto; +} + +#imgframe img { + max-height: 100% !important; + max-width: 100% !important; +} + +#imgframe audio { + display: block; + margin-left: auto; + margin-right: auto; +} + +#imgframe .text-preview { + display: inline-block; + position: relative; + text-align: left; + white-space: pre-wrap; + overflow-y: hidden; + height: auto; + min-height: 200px; + max-height: 800px; +} + +#imgframe .ellipsis { + font-size: 1.2em; +} + +/* fix multiselect bar offset on shared page */ +thead { + left: 0 !important; +} + +#data-upload-form { + position: relative; + right: 0; + height: 32px; + overflow: hidden; + padding: 0; + float: right; + display: inline; + margin: 0; +} + +/* keep long file names in one line to not overflow download button on mobile */ +.directDownload #downloadFile { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + max-width: 90%; + display: inline-block; + margin-left: auto; + margin-right: auto; + margin-top: 16px; +} + +.download-size { + opacity: 0.5; +} + +/* header buttons */ +#details { + display: inline-flex; +} + +#details button, +#details input, +#details .button { + margin: 0 5px; + line-height: normal; +} + +#details button:hover, +#details input:hover, +#details .button:hover { + /* No */ + border-color: rgba(0, 0, 0, 0.3) !important; +} + +#public-upload .avatardiv { + margin: 0 auto; +} + +#emptycontent.has-note { + margin-top: 5vh; +} + +#public-upload #emptycontent h2 { + margin: 10px 0 5px 0; +} + +#public-upload #emptycontent h2 + p { + margin-bottom: 30px; +} + +#public-upload #emptycontent .icon-folder { + height: 16px; + width: 16px; + background-size: 16px; + display: inline-block; + vertical-align: text-top; + margin-bottom: 0; + margin-right: 5px; + opacity: 1; +} + +#public-upload #emptycontent #displayavatar .icon-folder { + height: 48px; + width: 48px; + background-size: 48px; +} + +#public-upload #emptycontent .button { + display: inline-block; + height: auto; + width: auto; + background-size: 16px; + background-position: 16px; + opacity: 0.7; + font-size: 20px; + line-height: initial; + margin: 20px; + padding: 10px 20px; + padding-left: 42px; +} + +#public-upload #emptycontent ul { + width: 230px; + margin: 5px auto 5vh; + text-align: left; +} + +#public-upload #emptycontent li { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + padding: 7px 0; +} + +#public-upload #emptycontent li img { + margin-right: 5px; + position: relative; + top: 2px; +} + +#drop-upload-progress-indicator span.icon-loading-small { + padding-left: 18px; + margin-right: 7px; +} + +#drop-uploaded-files li #drop-upload-name { + float: left; + max-width: 180px; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +#drop-uploaded-files li #drop-upload-status { + float: right; +} + +.disclaimer, +.note { + margin: 0 auto 30px; + max-width: 400px; + text-align: left; +} + +#note-content { + padding: 5px; + display: inline-block; + width: 350px; +} +#note-content .content { + overflow: auto; + max-height: 200px; +} + +#show-terms-dialog { + cursor: pointer; + font-weight: bold; +} + +@media only screen and (min-width: 1025px) { + #body-public .header-right #header-actions-menu > ul > li#download { + display: none; + } +} +@media only screen and (max-width: 1024px) { + #body-public .header-right #header-primary-action { + display: none; + } +} + +/*# sourceMappingURL=public.css.map */ diff --git a/apps/files_sharing/css/public.css.map b/apps/files_sharing/css/public.css.map new file mode 100644 index 0000000000000..c100a63b6d8d4 --- /dev/null +++ b/apps/files_sharing/css/public.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["../../../core/css/variables.scss","public.scss"],"names":[],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACEA;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;;;AAID;EACC;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;AACA;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;AACA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;AACA;EACC;;;AAED;AAAA;AAAA;EAGC;EACA;;;AAED;AAAA;AAAA;AAGC;EACA;;;AAGD;EACC;;;AAIA;EACC;;;AAIF;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;AAAA;EAEC;EACA;EACA;;;AAGD;EACC;EACA;EACA;;AACA;EACC;EACA;;;AAIF;EACC;EACA;;;AAKD;EAII;IACC;;;AAQL;EAGG;IACC","file":"public.css"} \ No newline at end of file diff --git a/apps/files_sharing/css/publicView.css b/apps/files_sharing/css/publicView.css new file mode 100644 index 0000000000000..c10620e59bf94 --- /dev/null +++ b/apps/files_sharing/css/publicView.css @@ -0,0 +1,320 @@ +@charset "UTF-8"; +/** + * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com) + * + * @author John Molakvoæ (skjnldsv) + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ +#preview { + text-align: center; +} + +#preview .notCreatable { + display: none; +} + +#noPreview { + display: none; + padding-top: 80px; +} + +#imgframe { + height: 75%; + padding-bottom: 32px; + padding-top: 32px; + width: 80%; + margin: 0 auto; +} + +#imgframe img { + max-height: 100% !important; + max-width: 100% !important; +} + +#imgframe audio { + display: block; + margin-left: auto; + margin-right: auto; +} + +#imgframe .text-preview { + display: inline-block; + position: relative; + text-align: left; + white-space: pre-wrap; + overflow-y: hidden; + height: auto; + min-height: 200px; + max-height: 800px; +} + +#imgframe .ellipsis { + font-size: 1.2em; +} + +/* fix multiselect bar offset on shared page */ +thead { + left: 0 !important; +} + +#data-upload-form { + position: relative; + right: 0; + height: 32px; + overflow: hidden; + padding: 0; + float: right; + display: inline; + margin: 0; +} + +/* keep long file names in one line to not overflow download button on mobile */ +.directDownload #downloadFile { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + max-width: 90%; + display: inline-block; + margin-left: auto; + margin-right: auto; + margin-top: 16px; +} + +.download-size { + opacity: 0.5; +} + +/* header buttons */ +#details { + display: inline-flex; +} + +#details button, +#details input, +#details .button { + margin: 0 5px; + line-height: normal; +} + +#details button:hover, +#details input:hover, +#details .button:hover { + /* No */ + border-color: rgba(0, 0, 0, 0.3) !important; +} + +#public-upload .avatardiv { + margin: 0 auto; +} + +#emptycontent.has-note { + margin-top: 5vh; +} + +#public-upload #emptycontent h2 { + margin: 10px 0 5px 0; +} + +#public-upload #emptycontent h2 + p { + margin-bottom: 30px; +} + +#public-upload #emptycontent .icon-folder { + height: 16px; + width: 16px; + background-size: 16px; + display: inline-block; + vertical-align: text-top; + margin-bottom: 0; + margin-right: 5px; + opacity: 1; +} + +#public-upload #emptycontent #displayavatar .icon-folder { + height: 48px; + width: 48px; + background-size: 48px; +} + +#public-upload #emptycontent .button { + display: inline-block; + height: auto; + width: auto; + background-size: 16px; + background-position: 16px; + opacity: 0.7; + font-size: 20px; + line-height: initial; + margin: 20px; + padding: 10px 20px; + padding-left: 42px; +} + +#public-upload #emptycontent ul { + width: 230px; + margin: 5px auto 5vh; + text-align: left; +} + +#public-upload #emptycontent li { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + padding: 7px 0; +} + +#public-upload #emptycontent li img { + margin-right: 5px; + position: relative; + top: 2px; +} + +#drop-upload-progress-indicator span.icon-loading-small { + padding-left: 18px; + margin-right: 7px; +} + +#drop-uploaded-files li #drop-upload-name { + float: left; + max-width: 180px; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +#drop-uploaded-files li #drop-upload-status { + float: right; +} + +.disclaimer, +.note { + margin: 0 auto 30px; + max-width: 400px; + text-align: left; +} + +#note-content { + padding: 5px; + display: inline-block; + width: 350px; +} +#note-content .content { + overflow: auto; + max-height: 200px; +} + +#show-terms-dialog { + cursor: pointer; + font-weight: bold; +} + +@media only screen and (min-width: 1025px) { + #body-public .header-right #header-actions-menu > ul > li#download { + display: none; + } +} +@media only screen and (max-width: 1024px) { + #body-public .header-right #header-primary-action { + display: none; + } +} +/** + * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com) + * + * @author John Molakvoæ (skjnldsv) + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ +@media only screen and (max-width: 1024px) { + /* make header scroll up for single shares, more view of content on small screens */ + #header.share-file { + position: absolute !important; + } + + /* hide size and date columns */ + table th#headerSize, +table td.filesize, +table th#headerDate, +table td.date { + display: none; + } + + /* restrict length of displayed filename to prevent overflow */ + table td.filename .nametext { + max-width: 75% !important; + } + + /* on mobile, show single shared image at full width without margin */ + #imgframe { + width: 100%; + padding: 0; + margin-bottom: 35px; + } + + /* some margin for the file type icon */ + #imgframe .publicpreview { + margin-top: 32px; + } + + /* some padding for better clickability */ + #fileList a.action img { + padding: 0 6px 0 12px; + } + + /* hide text of the actions on mobile */ + #fileList a.action:not(.menuitem) span { + display: none; + } + + /* ellipsis on file names */ + .nametext { + width: 60%; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + + #header .menutoggle { + padding-right: 14px; + background-position: center; + } + + .note { + padding: 0 20px; + } + + #emptycontent { + margin-top: 10vh; + } +} + +/*# sourceMappingURL=publicView.css.map */ diff --git a/apps/files_sharing/css/publicView.css.map b/apps/files_sharing/css/publicView.css.map new file mode 100644 index 0000000000000..e49de3e17ba5d --- /dev/null +++ b/apps/files_sharing/css/publicView.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["../../../core/css/variables.scss","public.scss","mobile.scss"],"names":[],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACEA;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;;;AAID;EACC;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;AACA;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;AACA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;AACA;EACC;;;AAED;AAAA;AAAA;EAGC;EACA;;;AAED;AAAA;AAAA;AAGC;EACA;;;AAGD;EACC;;;AAIA;EACC;;;AAIF;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;AAAA;EAEC;EACA;EACA;;;AAGD;EACC;EACA;EACA;;AACA;EACC;EACA;;;AAIF;EACC;EACA;;;AAKD;EAII;IACC;;;AAQL;EAGG;IACC;;;ADjOJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AEEA;AAEA;EACA;IACC;;;AAGD;EACA;AAAA;AAAA;AAAA;IAIC;;;AAGD;EACA;IACC;;;AAGD;EACA;IACC;IACA;IACA;;;AAED;EACA;IACC;;;AAGD;EACA;IACC;;;AAED;EACA;IACC;;;AAGD;EACA;IACC;IACA;IACA;IACA;;;EAGD;IACI;IACA;;;EAEJ;IACC;;;EAGD;IACC","file":"publicView.css"} \ No newline at end of file diff --git a/apps/settings/css/settings.css b/apps/settings/css/settings.css new file mode 100644 index 0000000000000..32bd6599f6232 --- /dev/null +++ b/apps/settings/css/settings.css @@ -0,0 +1,1598 @@ +@charset "UTF-8"; +/** + * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com) + * + * @author John Molakvoæ (skjnldsv) + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ +/* 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. */ +/** + * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com) + * + * @author John Molakvoæ (skjnldsv) + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ +/** + * @see core/src/icons.js + */ +/** + * SVG COLOR API + * + * @param string $icon the icon filename + * @param string $dir the icon folder within /core/img if $core or app name + * @param string $color the desired color in hexadecimal + * @param int $version the version of the file + * @param bool [$core] search icon in core + * + * @returns A background image with the url to the set to the requested icon. + */ +input#openid, input#webdav { + width: 20em; +} + +/* PERSONAL */ +.clear { + clear: both; +} + +/* icons for sidebar */ +.nav-icon-personal-settings { + /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */ + background-image: var(--icon-personal-dark); +} + +.nav-icon-security { + /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */ + background-image: var(--icon-toggle-filelist-dark); +} + +.nav-icon-clientsbox { + /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */ + background-image: var(--icon-change-dark); +} + +.nav-icon-federated-cloud { + /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */ + background-image: var(--icon-share-dark); +} + +.nav-icon-second-factor-backup-codes, .nav-icon-ssl-root-certificate { + /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */ + background-image: var(--icon-password-dark); +} + +#avatarform .avatardiv { + margin: 10px auto; +} +#avatarform .warning { + width: 100%; +} +#avatarform .jcrop-keymgr { + display: none !important; +} + +#displayavatar { + text-align: center; +} + +#uploadavatarbutton, #selectavatar, #removeavatar { + padding: 21px; +} + +#selectavatar, #removeavatar { + vertical-align: top; +} + +.jcrop-holder { + z-index: 500; +} + +#cropper { + float: left; + z-index: 500; + /* float cropper above settings page to prevent unexpected flowing from dynamically sized element */ + position: fixed; + background-color: rgba(0, 0, 0, 0.2); + box-sizing: border-box; + top: 45px; + left: 0; + width: 100%; + height: calc(100% - 45px); +} +#cropper .inner-container { + z-index: 2001; + /* above the top bar if needed */ + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + background: #fff; + color: #333; + border-radius: var(--border-radius-large); + box-shadow: 0 0 10px var(--color-box-shadow); + padding: 15px; +} +#cropper .inner-container .jcrop-holder, +#cropper .inner-container .jcrop-holder img, +#cropper .inner-container img.jcrop-preview { + border-radius: var(--border-radius); +} +#cropper .inner-container .button { + margin-top: 15px; +} +#cropper .inner-container .primary { + float: right; +} + +#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; + grid-template-rows: 1fr 1fr 1fr 2fr; +} +.profile-settings-container #locale h3 { + height: 32px; +} + +.personal-show-container { + width: 100%; +} + +.personal-settings-setting-box .section { + padding: 10px 30px; +} +.personal-settings-setting-box .section h3 { + margin-bottom: 0; +} +.personal-settings-setting-box .section input[type=text], .personal-settings-setting-box .section input[type=email], .personal-settings-setting-box .section input[type=tel], .personal-settings-setting-box .section input[type=url] { + width: 100%; +} + +select#timezone, select#languageinput, select#localeinput { + width: 100%; +} + +#personal-settings { + display: grid; + padding: 20px; + max-width: 1500px; + grid-template-columns: 1fr 2fr 1fr; +} +#personal-settings .section { + padding: 10px 10px; + border: 0; +} +#personal-settings .section h2 { + margin-bottom: 12px; +} +#personal-settings .personal-info { + margin-right: 10%; + margin-bottom: 12px; + margin-top: 12px; +} +#personal-settings .personal-info[class^=icon-], #personal-settings .personal-info[class*=" icon-"] { + background-position: 0px 2px; + padding-left: 30px; + opacity: 0.7; +} + +.development-notice { + text-align: center; +} + +.link-button { + display: inline-block; + margin: 16px; + padding: 14px 20px; + background-color: var(--color-primary); + color: #fff; + border-radius: var(--border-radius-pill); + border: 1px solid var(--color-primary); + box-shadow: 0 2px 9px var(--color-box-shadow); +} +.link-button:active, .link-button:hover, .link-button:focus { + color: var(--color-primary); + background-color: var(--color-primary-text); + border-color: var(--color-primary) !important; +} +.link-button.icon-file { + padding-left: 48px; + background-position: 24px; +} + +@media (min-width: 1200px) and (max-width: 1400px) { + #personal-settings { + display: grid; + grid-template-columns: 1fr 2fr; + } + #personal-settings #personal-settings-avatar-container { + grid-template-columns: 1fr; + grid-template-rows: 1fr; + } + #personal-settings .personal-settings-container { + grid-template-columns: 1fr 1fr; + grid-template-rows: 1fr 1fr 1fr 1fr; + } + #personal-settings .profile-settings-container { + grid-template-columns: 1fr 1fr; + grid-template-rows: 1fr; + grid-column: 2; + } +} +@media (max-width: 1200px) { + #personal-settings { + display: grid; + grid-template-columns: 1fr; + } + #personal-settings #personal-settings-avatar-container { + grid-template-rows: 1fr; + } + #personal-settings .personal-settings-container { + grid-template-columns: 1fr 1fr; + grid-template-rows: 1fr 1fr 1fr 1fr; + } + #personal-settings .profile-settings-container { + grid-template-columns: 1fr 1fr; + grid-template-rows: 1fr; + } +} +@media (max-width: 560px) { + #personal-settings { + display: grid; + grid-template-columns: 1fr; + } + #personal-settings #personal-settings-avatar-container { + grid-template-rows: 1fr; + } + #personal-settings .personal-settings-container { + grid-template-columns: 1fr; + grid-template-rows: 1fr 1fr 1fr 1fr 1fr 1fr; + } + #personal-settings .profile-settings-container { + grid-template-columns: 1fr; + grid-template-rows: 1fr 1fr; + } +} +.personal-settings-container { + display: inline-grid; + grid-template-columns: 1fr 1fr; + grid-template-rows: 1fr 1fr 1fr 1fr 1fr; +} +.personal-settings-container:after { + clear: both; +} +.personal-settings-container > div h3 { + position: relative; + display: inline-flex; + flex-wrap: nowrap; + justify-content: flex-start; + width: 100%; +} +.personal-settings-container > div h3 > label { + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; +} +.personal-settings-container > div > form span[class^=icon-checkmark], .personal-settings-container > div > form span[class^=icon-error] { + position: relative; + right: 8px; + top: -28px; + pointer-events: none; + float: right; +} +.personal-settings-container .verify { + position: relative; + left: 100%; + top: 0; + height: 0; +} +.personal-settings-container .verify img { + padding: 12px 7px 6px; +} +.personal-settings-container .verify-action { + cursor: pointer; +} +.personal-settings-container input:disabled { + background-color: white; + color: black; + border: none; + opacity: 100; +} + +#body-settings #quota { + cursor: default; + position: relative; +} +#body-settings #quota progress { + height: 6px; +} +#body-settings #quota progress::-moz-progress-bar { + border-radius: 3px 0 0 3px; +} +#body-settings #quota progress::-webkit-progress-value { + border-radius: 3px 0 0 3px; +} +#body-settings #quota div { + font-weight: normal; + white-space: nowrap; +} + +/* verify accounts */ +/* only show pointer cursor when popup will be there */ +.verification-dialog { + display: none; + right: -9px; + top: 40px; + width: 275px; +} +.verification-dialog p { + padding: 10px; +} +.verification-dialog .verificationCode { + font-family: monospace; + display: block; + overflow-wrap: break-word; +} + +.federation-menu { + position: relative; + cursor: pointer; + width: 44px; + height: 44px; + padding: 10px; + margin: -12px 0 0 8px; + background: none; + border: none; +} +.federation-menu:hover, .federation-menu:focus { + background-color: var(--color-background-hover); + border-radius: var(--border-radius-pill); +} +.federation-menu:hover .icon-federation-menu, .federation-menu:focus .icon-federation-menu { + opacity: 0.8; +} +.federation-menu .icon-federation-menu { + padding-left: 16px; + background-size: 16px; + background-position: left center; + opacity: 0.3; + cursor: inherit; +} +.federation-menu .icon-federation-menu .icon-triangle-s { + display: inline-block; + vertical-align: middle; + cursor: inherit; +} +.federation-menu .federationScopeMenu { + top: 44px; +} +.federation-menu .federationScopeMenu.popovermenu .menuitem { + font-size: 12.8px; + line-height: 1.6em; +} +.federation-menu .federationScopeMenu.popovermenu .menuitem .menuitem-text-detail { + opacity: 0.75; +} +.federation-menu .federationScopeMenu.popovermenu .menuitem.active { + box-shadow: inset 2px 0 var(--color-primary); +} +.federation-menu .federationScopeMenu.popovermenu .menuitem.active .menuitem-text { + font-weight: bold; +} +.federation-menu .federationScopeMenu.popovermenu .menuitem.disabled { + opacity: 0.5; + cursor: default; +} +.federation-menu .federationScopeMenu.popovermenu .menuitem.disabled * { + cursor: default; +} + +#groups-groups { + padding-top: 5px; +} + +.clientsbox img { + height: 60px; +} + +#sslCertificate tr.expired { + background-color: rgba(255, 0, 0, 0.5); +} +#sslCertificate td { + padding: 5px; +} + +#displaynameerror, +#displaynamechanged { + display: none; +} + +input#identity { + width: 20em; +} + +#showWizard { + display: inline-block; +} + +.msg.success { + color: #fff; + background-color: #47a447; + padding: 3px; +} +.msg.error { + color: #fff; + background-color: #d2322d; + padding: 3px; +} + +table.nostyle label { + margin-right: 2em; +} +table.nostyle td { + padding: 0.2em 0; +} + +#security-password #passwordform { + display: flex; + flex-wrap: wrap; +} +#security-password #passwordform #pass1, #security-password #passwordform .personal-show-container, #security-password #passwordform #passwordbutton { + flex-shrink: 1; + width: 200px; + min-width: 150px; +} +#security-password #passwordform #pass2 { + width: 100%; +} +#security-password #passwordform .password-state { + display: inline-block; +} +#security-password #passwordform .strengthify-wrapper { + position: absolute; + left: 0; + width: 100%; + border-radius: 0 0 2px 2px; + margin-top: -6px; + overflow: hidden; + height: 3px; +} + +/* Two-Factor Authentication (2FA) */ +#two-factor-auth h3 { + margin-top: 24px; +} +#two-factor-auth li > div { + margin-left: 20px; +} +#two-factor-auth .two-factor-provider-settings-icon { + width: 16px; + height: 16px; + vertical-align: sub; +} + +.social-button { + padding-left: 0 !important; + margin-left: -10px; +} +.social-button img { + padding: 10px; +} + +/* USERS */ +.isgroup .groupname { + width: 85%; + display: block; + overflow: hidden; + text-overflow: ellipsis; +} +.isgroup.active .groupname { + width: 65%; +} + +li.active .delete, +li.active .rename { + display: block; +} + +.app-navigation-entry-utils .delete, +.app-navigation-entry-utils .rename { + display: none; +} + +#usersearchform { + position: absolute; + top: 2px; + right: 0; +} +#usersearchform input { + width: 150px; +} +#usersearchform label { + font-weight: bold; +} + +/* display table at full width */ +table.grid { + width: 100%; +} +table.grid th { + height: 2em; + color: #999; + border-bottom: 1px solid var(--color-border); + padding: 0 0.5em; + padding-left: 0.8em; + text-align: left; + font-weight: normal; +} +table.grid td { + border-bottom: 1px solid var(--color-border); + padding: 0 0.5em; + padding-left: 0.8em; + text-align: left; + font-weight: normal; +} + +td.name, th.name { + padding-left: 0.8em; + min-width: 5em; + max-width: 12em; + text-overflow: ellipsis; + overflow: hidden; +} +td.password, th.password { + padding-left: 0.8em; +} +td.password > img, th.password > img { + visibility: hidden; +} +td.displayName > img, th.displayName > img { + visibility: hidden; +} +td.password, td.mailAddress, th.password, th.mailAddress { + min-width: 5em; + max-width: 12em; + cursor: pointer; +} +td.password span, td.mailAddress span, th.password span, th.mailAddress span { + width: 90%; + display: inline-block; + text-overflow: ellipsis; + overflow: hidden; +} +td.mailAddress, th.mailAddress { + cursor: pointer; +} +td.password > span, th.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 */ +} +#app-navigation img { + margin-bottom: -3px; + margin-right: 6px; + width: 16px; +} +#app-navigation li span.no-icon { + padding-left: 32px; +} +#app-navigation ul li.active > span.utils .delete, #app-navigation ul li.active > span.utils .rename { + display: block; +} +#app-navigation .appwarning { + background: #fcc; +} +#app-navigation.appwarning:hover { + background: #fbb; +} +#app-navigation .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; +} +.app-level a { + padding: 10px; + margin: -6px; + white-space: nowrap; +} +.app-level .official { + background-position: left center; + background-position: 5px center; + padding-left: 25px; +} +.app-level .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: 0.5; +} + +.app-settings-content #searchresults { + display: none; +} + +#apps-list.store .section { + border: 0; +} +#apps-list.store .app-name { + display: block; + margin: 5px 0; +} +#apps-list.store .app-name, #apps-list.store .app-image * { + cursor: pointer; +} +#apps-list.store .app-summary { + opacity: 0.7; +} +#apps-list.store .app-image-icon .icon-settings-dark { + width: 100%; + height: 150px; + background-size: 45px; + opacity: 0.5; +} +#apps-list.store .app-score-image { + height: 14px; +} +#apps-list.store .actions { + margin-top: 10px; +} + +#app-sidebar #app-details-view h2 .icon-settings-dark, +#app-sidebar #app-details-view h2 svg { + display: inline-block; + width: 16px; + height: 16px; + margin-right: 10px; + opacity: 0.7; +} +#app-sidebar #app-details-view .app-level { + clear: right; + width: 100%; +} +#app-sidebar #app-details-view .app-level .supported, +#app-sidebar #app-details-view .app-level .official { + vertical-align: top; +} +#app-sidebar #app-details-view .app-level .app-score-image { + float: right; +} +#app-sidebar #app-details-view .app-author, #app-sidebar #app-details-view .app-licence { + color: var(--color-text-maxcontrast); +} +#app-sidebar #app-details-view .app-dependencies { + margin: 10px 0; +} +#app-sidebar #app-details-view .app-description p { + margin: 10px 0; +} +#app-sidebar #app-details-view .close { + position: absolute; + top: 0; + right: 0; + padding: 14px; + opacity: 0.5; + z-index: 1; + width: 44px; + height: 44px; +} +#app-sidebar #app-details-view .actions { + display: flex; + align-items: center; +} +#app-sidebar #app-details-view .actions .app-groups { + padding: 5px; +} +#app-sidebar #app-details-view .appslink { + text-decoration: underline; + margin-right: 5px; +} +#app-sidebar #app-details-view .app-level, +#app-sidebar #app-details-view .actions, +#app-sidebar #app-details-view .documentation, +#app-sidebar #app-details-view .app-dependencies, +#app-sidebar #app-details-view .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: 1024px) { + .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, .apps-list.installed .app-level { + display: none !important; + } +} +@media only screen and (max-width: 500px) { + .apps-list.installed .app-groups { + display: none !important; + } +} +#version.section { + border-bottom: none; +} + +.section { + margin-bottom: 0; + /* section divider lines, none needed for last one */ + /* correctly display help icons next to headings */ +} +.section:not(:last-child) { + border-bottom: 1px solid var(--color-border); +} +.section h2 { + margin-bottom: 22px; +} +.section h2 .icon-info { + padding: 6px 20px; + vertical-align: text-bottom; + display: inline-block; +} + +.followupsection { + display: block; + padding: 0 30px 30px 30px; + color: #555; +} + +.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: 0.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 { + display: flex; + flex-wrap: wrap; + align-content: flex-start; + /* Bundle header */ +} +.apps-list .section { + cursor: pointer; +} +.apps-list .app-list-move { + transition: transform 1s; +} +.apps-list #app-list-update-all { + margin-left: 10px; +} +.apps-list .toolbar { + height: 60px; + padding: 8px; + padding-left: 60px; + width: 100%; + background-color: var(--color-main-background); + position: fixed; + z-index: 1; + display: flex; + align-items: center; +} +.apps-list.installed { + margin-bottom: 100px; +} +.apps-list.installed .apps-list-container { + display: table; + width: 100%; + height: auto; + margin-top: 60px; +} +.apps-list.installed .section { + display: table-row; + padding: 0; + margin: 0; +} +.apps-list.installed .section > * { + display: table-cell; + height: initial; + vertical-align: middle; + float: none; + border-bottom: 1px solid var(--color-border); + padding: 6px; + box-sizing: border-box; +} +.apps-list.installed .section.selected { + background-color: var(--color-background-dark); +} +.apps-list.installed .groups-enable { + margin-top: 0; +} +.apps-list.installed .groups-enable label { + margin-right: 3px; +} +.apps-list.installed .app-image { + width: 44px; + height: auto; + text-align: right; +} +.apps-list.installed .app-image-icon svg, +.apps-list.installed .app-image-icon .icon-settings-dark { + margin-top: 5px; + width: 20px; + height: 20px; + opacity: 0.5; + background-size: cover; + display: inline-block; +} +.apps-list.installed .actions { + text-align: right; +} +.apps-list.installed .actions .icon-loading-small { + display: inline-block; + top: 4px; + margin-right: 10px; +} +.apps-list:not(.installed) .app-image-icon svg { + position: absolute; + bottom: 43px; + /* position halfway vertically */ + width: 64px; + height: 64px; + opacity: 0.1; +} +.apps-list.hidden { + display: none; +} +.apps-list .section { + position: relative; + flex: 0 0 auto; +} +.apps-list .section h2.app-name { + display: block; + margin: 8px 0; +} +.apps-list .section:hover { + background-color: var(--color-background-dark); +} +.apps-list .app-description p { + margin: 10px 0; +} +.apps-list .app-description ul { + list-style: disc; +} +.apps-list .app-description ol { + list-style: decimal; +} +.apps-list .app-description ol ol, .apps-list .app-description ol ul { + padding-left: 15px; +} +.apps-list .app-description > ul, .apps-list .app-description > ol { + margin-left: 19px; +} +.apps-list .app-description ul ol, .apps-list .app-description ul ul { + padding-left: 15px; +} +.apps-list .apps-header { + display: table-row; + position: relative; +} +.apps-list .apps-header div { + display: table-cell; + height: 70px; +} +.apps-list .apps-header h2 { + display: table-cell; + position: absolute; + padding-left: 6px; + padding-top: 15px; +} +.apps-list .apps-header h2 .enable { + position: relative; + top: -1px; + margin-left: 12px; +} +.apps-list .apps-header h2 + .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 span, +#security-warning-state-warning span, +#security-warning-state-failure span, +#security-warning-state-loading span { + vertical-align: middle; +} +#security-warning-state-ok span.message, +#security-warning-state-warning span.message, +#security-warning-state-failure span.message, +#security-warning-state-loading span.message { + padding: 12px; +} +#security-warning-state-ok span.icon, +#security-warning-state-warning span.icon, +#security-warning-state-failure span.icon, +#security-warning-state-loading span.icon { + width: 32px; + height: 32px; + background-position: center center; + display: inline-block; + border-radius: 50%; +} +#security-warning-state-ok span.icon-checkmark-white, +#security-warning-state-warning span.icon-checkmark-white, +#security-warning-state-failure span.icon-checkmark-white, +#security-warning-state-loading span.icon-checkmark-white { + background-color: var(--color-success); +} +#security-warning-state-ok span.icon-error-white, +#security-warning-state-warning span.icon-error-white, +#security-warning-state-failure span.icon-error-white, +#security-warning-state-loading span.icon-error-white { + background-color: var(--color-warning); +} +#security-warning-state-ok span.icon-close-white, +#security-warning-state-warning span.icon-close-white, +#security-warning-state-failure span.icon-close-white, +#security-warning-state-loading span.icon-close-white { + background-color: var(--color-error); +} + +#shareAPI p { + padding-bottom: 0.8em; +} +#shareAPI input#shareapiExpireAfterNDays { + width: 40px; +} +#shareAPI .indent { + padding-left: 28px; +} +#shareAPI .double-indent { + padding-left: 56px; +} +#shareAPI .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: 0.5; +} + +#two-factor-auth h2, +#shareAPI h2, +#encryptionAPI h2, +#mail_general_settings h2 { + display: inline-block; +} + +#encryptionAPI li { + list-style-type: initial; + margin-left: 20px; + padding: 5px 0; +} + +.mail_settings p label:first-child { + display: inline-block; + width: 300px; + text-align: right; +} +.mail_settings p select:nth-child(2), +.mail_settings p input:not([type=button]) { + width: 143px; +} + +#mail_smtpport { + width: 40px; +} + +.cronlog { + margin-left: 10px; +} + +.status { + display: inline-block; + height: 16px; + width: 16px; + vertical-align: text-bottom; +} +.status.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); +} +span.error { + background-color: var(--color-error); +} +span.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; +} +#postsetupchecks ul li { + margin: 10px 0; +} +#postsetupchecks ul ul { + list-style: circle; +} +#postsetupchecks .loading { + height: 50px; + background-position: left center; +} +#postsetupchecks .errors, #postsetupchecks .errors a { + color: var(--color-error); +} +#postsetupchecks .warnings, #postsetupchecks .warnings a { + color: var(--color-warning); +} +#postsetupchecks .hint { + margin: 20px 0; +} + +#security-warning a { + text-decoration: underline; +} +#security-warning .extra-top-margin { + margin-top: 12px; +} + +#admin-tips li { + list-style: initial; +} +#admin-tips li a { + display: inline-block; + padding: 3px 0; +} + +#selectEncryptionModules { + margin-left: 30px; + padding: 10px; +} + +#encryptionModules { + padding: 10px; +} + +#warning { + color: red; +} + +.settings-hint { + margin-top: -12px; + margin-bottom: 12px; + opacity: 0.7; +} + +/* USERS LIST -------------------------------------------------------------- */ +#body-settings { + overflow-x: scroll; + min-height: 100%; + height: auto; +} +#body-settings #app-content.user-list-grid { + display: grid; + grid-column-gap: 20px; + grid-auto-rows: minmax(60px, max-content); +} +#body-settings #app-content.user-list-grid .row { + display: flex; + display: grid; + min-height: 60px; + 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(190px, 1fr) minmax(160px, 1fr) minmax(160px, 1fr) minmax(240px, 1fr) minmax(240px, 1fr) repeat(auto-fit, minmax(160px, 1fr)); + border-bottom: var(--color-border) 1px solid; + /* grid col width */ + /* various */ +} +#body-settings #app-content.user-list-grid .row.disabled { + opacity: 0.5; +} +#body-settings #app-content.user-list-grid .row .name, +#body-settings #app-content.user-list-grid .row .password, +#body-settings #app-content.user-list-grid .row .mailAddress, +#body-settings #app-content.user-list-grid .row .languages, +#body-settings #app-content.user-list-grid .row .storageLocation, +#body-settings #app-content.user-list-grid .row .userBackend, +#body-settings #app-content.user-list-grid .row .lastLogin { + min-width: 160px; +} +#body-settings #app-content.user-list-grid .row .name doesnotexist:-o-prefocus, #body-settings #app-content.user-list-grid .row .name .strengthify-wrapper, +#body-settings #app-content.user-list-grid .row .password doesnotexist:-o-prefocus, +#body-settings #app-content.user-list-grid .row .password .strengthify-wrapper, +#body-settings #app-content.user-list-grid .row .mailAddress doesnotexist:-o-prefocus, +#body-settings #app-content.user-list-grid .row .mailAddress .strengthify-wrapper, +#body-settings #app-content.user-list-grid .row .languages doesnotexist:-o-prefocus, +#body-settings #app-content.user-list-grid .row .languages .strengthify-wrapper, +#body-settings #app-content.user-list-grid .row .storageLocation doesnotexist:-o-prefocus, +#body-settings #app-content.user-list-grid .row .storageLocation .strengthify-wrapper, +#body-settings #app-content.user-list-grid .row .userBackend doesnotexist:-o-prefocus, +#body-settings #app-content.user-list-grid .row .userBackend .strengthify-wrapper, +#body-settings #app-content.user-list-grid .row .lastLogin doesnotexist:-o-prefocus, +#body-settings #app-content.user-list-grid .row .lastLogin .strengthify-wrapper { + color: var(--color-text-dark); + vertical-align: baseline; + text-overflow: ellipsis; +} +#body-settings #app-content.user-list-grid .row:not(.row--editable).name, #body-settings #app-content.user-list-grid .row:not(.row--editable).password, #body-settings #app-content.user-list-grid .row:not(.row--editable).displayName, #body-settings #app-content.user-list-grid .row:not(.row--editable).mailAddress, #body-settings #app-content.user-list-grid .row:not(.row--editable).userBackend, #body-settings #app-content.user-list-grid .row:not(.row--editable).languages { + overflow: hidden; +} +#body-settings #app-content.user-list-grid .row .groups, +#body-settings #app-content.user-list-grid .row .subadmins, +#body-settings #app-content.user-list-grid .row .quota { + min-width: 160px; +} +#body-settings #app-content.user-list-grid .row .groups .multiselect, +#body-settings #app-content.user-list-grid .row .subadmins .multiselect, +#body-settings #app-content.user-list-grid .row .quota .multiselect { + width: 100%; + color: var(--color-text-dark); + vertical-align: baseline; +} +#body-settings #app-content.user-list-grid .row .obfuscated { + width: 400px; + opacity: 0.7; +} +#body-settings #app-content.user-list-grid .row .userActions { + display: flex; + justify-content: flex-end; + position: sticky; + right: 0px; + min-width: 88px; + background-color: var(--color-main-background); +} +#body-settings #app-content.user-list-grid .row .subtitle { + color: var(--color-text-maxcontrast); + vertical-align: baseline; +} +#body-settings #app-content.user-list-grid .row#grid-header { + position: sticky; + align-self: normal; + background-color: var(--color-main-background); + z-index: 100; + /* above multiselect */ + top: 50px; +} +#body-settings #app-content.user-list-grid .row#grid-header.sticky { + box-shadow: 0 -2px 10px 1px var(--color-box-shadow); +} +#body-settings #app-content.user-list-grid .row#grid-header { + color: var(--color-text-maxcontrast); + border-bottom-width: thin; +} +#body-settings #app-content.user-list-grid .row#grid-header #headerDisplayName, +#body-settings #app-content.user-list-grid .row#grid-header #headerPassword, +#body-settings #app-content.user-list-grid .row#grid-header #headerAddress, +#body-settings #app-content.user-list-grid .row#grid-header #headerGroups, +#body-settings #app-content.user-list-grid .row#grid-header #headerSubAdmins, +#body-settings #app-content.user-list-grid .row#grid-header #theHeaderUserBackend, +#body-settings #app-content.user-list-grid .row#grid-header #theHeaderLastLogin, +#body-settings #app-content.user-list-grid .row#grid-header #headerQuota, +#body-settings #app-content.user-list-grid .row#grid-header #theHeaderStorageLocation, +#body-settings #app-content.user-list-grid .row#grid-header #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; +} +#body-settings #app-content.user-list-grid .row:hover input:not([type=submit]):not(:focus):not(:active) { + border-color: var(--color-border) !important; +} +#body-settings #app-content.user-list-grid .row:hover:not(#grid-header) { + box-shadow: 5px 0 0 var(--color-primary-element) inset; +} +#body-settings #app-content.user-list-grid .row > form { + width: 100%; +} +#body-settings #app-content.user-list-grid .row > div, +#body-settings #app-content.user-list-grid .row > .displayName > form, +#body-settings #app-content.user-list-grid .row > form { + grid-row: 1; + display: inline-flex; + color: var(--color-text-lighter); + flex-grow: 1; + /* inputs like mail, username, password */ + /* Fill the grid cell */ +} +#body-settings #app-content.user-list-grid .row > div > input:not(:focus):not(:active), +#body-settings #app-content.user-list-grid .row > .displayName > form > input:not(:focus):not(:active), +#body-settings #app-content.user-list-grid .row > form > input:not(:focus):not(:active) { + border-color: transparent; + cursor: pointer; +} +#body-settings #app-content.user-list-grid .row > div > input:focus + .icon-confirm, #body-settings #app-content.user-list-grid .row > div > input:active + .icon-confirm, +#body-settings #app-content.user-list-grid .row > .displayName > form > input:focus + .icon-confirm, +#body-settings #app-content.user-list-grid .row > .displayName > form > input:active + .icon-confirm, +#body-settings #app-content.user-list-grid .row > form > input:focus + .icon-confirm, +#body-settings #app-content.user-list-grid .row > form > input:active + .icon-confirm { + display: block !important; +} +#body-settings #app-content.user-list-grid .row > div:not(.userActions) > input:not([type=submit]), +#body-settings #app-content.user-list-grid .row > .displayName > form:not(.userActions) > input:not([type=submit]), +#body-settings #app-content.user-list-grid .row > form:not(.userActions) > input:not([type=submit]) { + width: 100%; + min-width: 0; +} +#body-settings #app-content.user-list-grid .row > div.name, +#body-settings #app-content.user-list-grid .row > .displayName > form.name, +#body-settings #app-content.user-list-grid .row > form.name { + word-break: break-all; +} +#body-settings #app-content.user-list-grid .row > div.displayName > input, #body-settings #app-content.user-list-grid .row > div.mailAddress > input, +#body-settings #app-content.user-list-grid .row > .displayName > form.displayName > input, +#body-settings #app-content.user-list-grid .row > .displayName > form.mailAddress > input, +#body-settings #app-content.user-list-grid .row > form.displayName > input, +#body-settings #app-content.user-list-grid .row > form.mailAddress > input { + text-overflow: ellipsis; + flex-grow: 1; +} +#body-settings #app-content.user-list-grid .row > div.name, #body-settings #app-content.user-list-grid .row > div.userBackend, +#body-settings #app-content.user-list-grid .row > .displayName > form.name, +#body-settings #app-content.user-list-grid .row > .displayName > form.userBackend, +#body-settings #app-content.user-list-grid .row > form.name, +#body-settings #app-content.user-list-grid .row > form.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; +} +#body-settings #app-content.user-list-grid .row > div.quota, +#body-settings #app-content.user-list-grid .row > .displayName > form.quota, +#body-settings #app-content.user-list-grid .row > form.quota { + display: flex; + justify-content: left; + white-space: nowrap; + position: relative; +} +#body-settings #app-content.user-list-grid .row > div.quota progress, +#body-settings #app-content.user-list-grid .row > .displayName > form.quota progress, +#body-settings #app-content.user-list-grid .row > form.quota progress { + width: 150px; + margin-top: 35px; + height: 3px; +} +#body-settings #app-content.user-list-grid .row > div .icon-confirm, +#body-settings #app-content.user-list-grid .row > .displayName > form .icon-confirm, +#body-settings #app-content.user-list-grid .row > form .icon-confirm { + flex: 0 0 auto; + cursor: pointer; +} +#body-settings #app-content.user-list-grid .row > div .icon-confirm:not(:active), +#body-settings #app-content.user-list-grid .row > .displayName > form .icon-confirm:not(:active), +#body-settings #app-content.user-list-grid .row > form .icon-confirm:not(:active) { + display: none; +} +#body-settings #app-content.user-list-grid .row > div.avatar, +#body-settings #app-content.user-list-grid .row > .displayName > form.avatar, +#body-settings #app-content.user-list-grid .row > form.avatar { + height: 32px; + width: 32px; + margin: 6px; +} +#body-settings #app-content.user-list-grid .row > div.avatar img, +#body-settings #app-content.user-list-grid .row > .displayName > form.avatar img, +#body-settings #app-content.user-list-grid .row > form.avatar img { + display: block; +} +#body-settings #app-content.user-list-grid .row > div.userActions, +#body-settings #app-content.user-list-grid .row > .displayName > form.userActions, +#body-settings #app-content.user-list-grid .row > form.userActions { + display: flex; + justify-content: flex-end; +} +#body-settings #app-content.user-list-grid .row > div.userActions #newsubmit, +#body-settings #app-content.user-list-grid .row > .displayName > form.userActions #newsubmit, +#body-settings #app-content.user-list-grid .row > form.userActions #newsubmit { + width: 100%; +} +#body-settings #app-content.user-list-grid .row > div.userActions .toggleUserActions, +#body-settings #app-content.user-list-grid .row > .displayName > form.userActions .toggleUserActions, +#body-settings #app-content.user-list-grid .row > form.userActions .toggleUserActions { + position: relative; + display: flex; + align-items: center; + background-color: var(--color-main-background); +} +#body-settings #app-content.user-list-grid .row > div.userActions .toggleUserActions .icon-more, +#body-settings #app-content.user-list-grid .row > .displayName > form.userActions .toggleUserActions .icon-more, +#body-settings #app-content.user-list-grid .row > form.userActions .toggleUserActions .icon-more { + width: 44px; + height: 44px; + opacity: 0.5; + cursor: pointer; +} +#body-settings #app-content.user-list-grid .row > div.userActions .toggleUserActions .icon-more:focus, #body-settings #app-content.user-list-grid .row > div.userActions .toggleUserActions .icon-more:hover, #body-settings #app-content.user-list-grid .row > div.userActions .toggleUserActions .icon-more:active, +#body-settings #app-content.user-list-grid .row > .displayName > form.userActions .toggleUserActions .icon-more:focus, +#body-settings #app-content.user-list-grid .row > .displayName > form.userActions .toggleUserActions .icon-more:hover, +#body-settings #app-content.user-list-grid .row > .displayName > form.userActions .toggleUserActions .icon-more:active, +#body-settings #app-content.user-list-grid .row > form.userActions .toggleUserActions .icon-more:focus, +#body-settings #app-content.user-list-grid .row > form.userActions .toggleUserActions .icon-more:hover, +#body-settings #app-content.user-list-grid .row > form.userActions .toggleUserActions .icon-more:active { + opacity: 0.7; + background-color: var(--color-background-dark); +} +#body-settings #app-content.user-list-grid .row > div.userActions .feedback, +#body-settings #app-content.user-list-grid .row > .displayName > form.userActions .feedback, +#body-settings #app-content.user-list-grid .row > form.userActions .feedback { + display: flex; + align-items: center; + white-space: nowrap; + transition: opacity 200ms ease-in-out; +} +#body-settings #app-content.user-list-grid .row > div.userActions .feedback .icon-checkmark, +#body-settings #app-content.user-list-grid .row > .displayName > form.userActions .feedback .icon-checkmark, +#body-settings #app-content.user-list-grid .row > form.userActions .feedback .icon-checkmark { + opacity: 0.5; + margin-right: 5px; +} +#body-settings #app-content.user-list-grid .row > div .multiselect.multiselect-vue, +#body-settings #app-content.user-list-grid .row > .displayName > form .multiselect.multiselect-vue, +#body-settings #app-content.user-list-grid .row > form .multiselect.multiselect-vue { + width: 100%; +} +#body-settings #app-content.user-list-grid .infinite-loading-container { + display: flex; + align-items: center; + justify-content: center; + grid-row-start: span 4; +} +#body-settings #app-content.user-list-grid .users-list-end { + opacity: 0.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; + } +} + +/*# sourceMappingURL=settings.css.map */ diff --git a/apps/settings/css/settings.css.map b/apps/settings/css/settings.css.map new file mode 100644 index 0000000000000..0fb2c70ac0dfd --- /dev/null +++ b/apps/settings/css/settings.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["../../../core/css/variables.scss","settings.scss","../../../core/css/functions.scss"],"names":[],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA;AAAA;AAAA;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBA;AAAA;AAAA;AA4BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AD3CC;EACC;;;AAIF;AACA;EACC;;;AAGD;AACA;AC6CC;EAEA;;;AD3CD;ACyCC;EAEA;;;ADvCD;ACqCC;EAEA;;;ADnCD;ACiCC;EAEA;;;AD/BD;AC6BC;EAEA;;;AD1BA;EACC;;AAGD;EACC;;AAGD;EACC;;;AAIF;EACC;;;AAGD;EACC;;;AAED;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;AACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;AACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;AAAA;AAAA;EAGC;;AAGD;EACC;;AAGD;EACC;;;AAKH;EACC;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;;AAGC;EACC;;;AAKH;EACC;;;AAIA;EACC;;AAEA;EACC;;AAIA;EACC;;;AAOH;EAGC;;;AAIF;EACC;EACA;EACA;EACA;;AAEA;EACC;EACA;;AAEA;EACC;;AAIF;EACC;EACA;EACA;;AAGD;EACC;EACA;EACA;;;AAMF;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EAGC;EACA;EACA;;AAGD;EACC;EACA;;;AAMF;EACC;IACC;IACA;;EAEA;IACC;IACA;;EAGD;IACC;IACA;;EAGD;IACC;IACA;IACA;;;AAKH;EACC;IACC;IACA;;EAEA;IACC;;EAGD;IACC;IACA;;EAGD;IACC;IACA;;;AAKH;EACC;IACC;IACA;;EAEA;IACC;;EAGD;IACC;IACA;;EAGD;IACC;IACA;;;AAKH;EACC;EACA;EACA;;AAEA;EACC;;AAIA;EACC;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;;AAKD;EACC;EACA;EACA;EACA;EACA;;AAKH;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAIF;EACC;;AAGD;EACC;EACA;EACA;EACA;;;AAKF;EACC;EACA;;AAEA;EACC;;AAEA;EACC;;AAGD;EACC;;AAIF;EACC;EACA;;;AAKF;AACA;AACA;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAGD;EACC;EACA;EACA;;;AAIF;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EAEC;EACA;;AAEA;EACC;;AAIF;EACC;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;;AAIF;EACC;;AAGC;EAEC;EACA;;AAEA;EACC;;AAGD;EACC;;AAEA;EACC;;AAIF;EACC;EAEA;;AAEA;EACC;;;AAQN;EACC;;;AAGD;EACC;;;AAIA;EACC;;AAGD;EACC;;;AAIF;AAAA;EAEC;;;AAGD;EACC;;;AAGD;EACC;;;AAIA;EACC;EACA;EACA;;AAGD;EACC;EACA;EACA;;;AAMD;EACC;;AAGD;EACC;;;AAKD;EACC;EACA;;AAEA;EACC;EACA;EACA;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;;AAKH;AAGC;EACC;;AAGD;EACC;;AAGD;EACC;EACA;EACA;;;AAIF;EACC;EACA;;AAEA;EACC;;;AAIF;AAGC;EACC;EACA;EACA;EACA;;AAGD;EACC;;;AAKD;AAAA;EAEC;;;AAKD;AAAA;EAEC;;;AAIF;EACC;EACA;EACA;;AAEA;EACC;;AAGD;EACC;;;AAIF;AACA;EACC;;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA;EACA;;;AAKD;EACC;EACA;EACA;EACA;EACA;;AAGD;EACC;;AAEA;EACC;;AAIF;EACC;;AAGD;EAEC;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;;AAIF;EACC;;AAGD;EACC;EACA;;;AAIF;EACC;;;AAGD;AACA;EACC;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;AACC;;AACA;EACC;EACA;EACA;;AAGD;EACC;;AAIA;EACC;;AAIF;EACC;;AAGD;EACC;;AAGD;EACC;;;AAIF;EACC;EACA;EACA;;;AAGD;EACC;;;AAIA;EACC;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;EACA;;AAGD;EACC;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA;EACA;;;AAIF;EACC;EACA;EACA;;;AAIA;EACC;;;AAMD;EACC;;AAGD;EACC;EACA;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;EACA;EACA;EACA;;AAGD;EACC;;AAGD;EACC;;;AAMA;AAAA;EAEC;EACA;EACA;EACA;EACA;;AAIF;EACC;EACA;;AAEA;AAAA;EAEC;;AAGD;EACC;;AAIF;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;;AAEA;EACC;;AAIF;EACC;EACA;;AAGD;AAAA;AAAA;AAAA;AAAA;EAKC;;;AAIF;EACC;IACC;;;EAED;IACC;;;AAIF;EACC;IACC;;;EAED;IACC;;;AAIF;EACC;IACC;;;EAED;IACC;;;AAIF;EACC;IACC;;;EAED;IACC;;;AAIF;EACC;IACC;;;AAIF;EACC;IACC;;;AAIF;AACA;EAEE;IACC;;;AAKH;EACC;IACC;;;AAIF;EACC;;;AAGD;EACC;AACA;AAKA;;AAJA;EACC;;AAID;EACC;;AAEA;EACC;EACA;EACA;;;AAKH;EACC;EACA;EACA;;;AAGD;EACC;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;AAEA;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;;;AAGD;EAwGC;EACA;EACA;AAkDA;;AAxJA;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC,QAfgB;EAgBhB,SAjBiB;EAmBjB,cAlBgB;EAmBhB;EACA;EACA;EACA;EACA;EACA;;AAGD;EAQC;;AAPA;EACC;EACA;EACA;EACA,YAhCe;;AAqChB;EACC;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AAGD;EACC;;AAKF;EACC;;AAEA;EACC;;AAIF;EACC;EACA;EACA;;AAGD;AAAA;EAEC;EACA;EACA;EACA;EACA;EACA;;AAGD;EACC;;AAEA;EACC;EACA;EACA;;AAKH;EACC;EACA;AACA;EACA;EACA;EACA;;AAOD;EACC;;AAGD;EACC;EACA;;AAEA;EACC;EACA;;AAGD;EACC;;AAKD;EACC;;AAGD;EACC;;AAGD;EACC;;AAEA;EACC;;AAKD;EACC;;AAKD;EACC;;AAMH;EACC;EACA;;AAEA;EACC;EACA;;AAGD;EACC;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;;AAGD;EACC;;;AAQF;EACC;;;AAKH;AACA;EACC;EACA;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;EACC;;;AAOA;AAAA;AAAA;AAAA;EACC;;AAEA;AAAA;AAAA;AAAA;EACC;;AAGD;AAAA;AAAA;AAAA;EACC;EACA;EACA;EACA;EACA;;AAGD;AAAA;AAAA;AAAA;EACC;;AAGD;AAAA;AAAA;AAAA;EACC;;AAGD;AAAA;AAAA;AAAA;EACC;;;AAMF;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;;AAIF;EACC;;;AAGD;EACC;;;AAGD;EACC;AACA;EACA;EACA;EACA;EACA;;;AAGD;AAEA;EACC;EACA;EACA;;;AAGD;AAAA;AAAA;AAAA;EAIC;;;AAGD;EACC;EACA;EACA;;;AAIA;EACC;EACA;EACA;;AAGD;AAAA;EAEC;;;AAIF;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;EACA;;AAEA;EACC;;;AAIF;EACC;EACA;EACA;EACA;;;AAGD;EACC;EACA;;;AAIA;EACC;EACA;;AAGD;EACC;;AAGD;EACC;EACA;;;AAKF;AACA;EACC;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;;;AAIA;EACC;EACA;;AAEA;EACC;;AAGD;EACC;;AAIF;EACC;EACA;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;;AAKD;EACC;;AAGD;EACC;;;AAIF;EACC;;AAEA;EACC;EACA;;;AAIF;EACC;EACA;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;;;AAID;AACA;EAGC;EACA;EACA;;AAEA;EACC;EACA;EACA;;AAEA;EAGC;EACA;EACA,YAhBgB;EAiBhB;EACA;EACA;AACA;AAAA;EAEA,uBACE;EAOF;AAMA;AA0DA;;AA9DA;EACC;;AAID;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAOC,WA3CkB;;AA6ClB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;EACA;EACA;;AAID;EAMC;;AAIF;AAAA;AAAA;EAGC,WAjEkB;;AAmElB;AAAA;AAAA;EACC;EACA;EACA;;AAIF;EACC;EACA;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;;AAID;EACC;EACA;EACA;EACA;AAAc;EACd,KD77CY;;AC+7CZ;EACC;;AAIF;EACC;EACA;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUC;EACA;EACA;EACA;EACA;;AAKD;EACC;;AAGD;EACC;;AAIF;EACC;;AAGD;AAAA;AAAA;EAGC;EACA;EACA;EACA;AAaA;AA2GA;;AAtHA;AAAA;AAAA;EACC;EACA;;AAIA;AAAA;AAAA;AAAA;AAAA;EACC;;AAKF;AAAA;AAAA;EACC;EACA;;AAGD;AAAA;AAAA;EACC;;AAKA;AAAA;AAAA;AAAA;AAAA;EACC;EACA;;AAIF;AAAA;AAAA;AAAA;AAAA;AAEC;EACA;EACA;EACA;AACA;AAAA;AAAA;EAGA;EACA;EACA;EACA;;AAGD;AAAA;AAAA;EACC;EACA;EACA;EACA;;AAEA;AAAA;AAAA;EACC;EACA;EACA;;AAIF;AAAA;AAAA;EACC;EACA;;AAEA;AAAA;AAAA;EACC;;AAIF;AAAA;AAAA;EACC;EACA;EACA;;AAEA;AAAA;AAAA;EACC;;AAIF;AAAA;AAAA;EACC;EACA;;AAEA;AAAA;AAAA;EACC;;AAGD;AAAA;AAAA;EACC;EACA;EACA;EACA;;AAEA;AAAA;AAAA;EACC;EACA;EACA;EACA;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGC;EACA;;AAKH;AAAA;AAAA;EACC;EACA;EACA;EACA;;AAEA;AAAA;AAAA;EACC;EACA;;AAMH;AAAA;AAAA;EACC;;AAKH;EACC;EACA;EACA;EACA;;AAGD;EACC;EACA;;;AAKH;EACI;;;AAGJ;EACE;IACE;;;AAGJ;EACE;IACE","file":"settings.css"} \ No newline at end of file diff --git a/apps/theming/css/settings-admin.css b/apps/theming/css/settings-admin.css new file mode 100644 index 0000000000000..96be6dd862b4c --- /dev/null +++ b/apps/theming/css/settings-admin.css @@ -0,0 +1,132 @@ +#theming input { + width: 230px; +} +#theming input:focus, +#theming input:active { + padding-right: 30px; +} +#theming .fileupload { + display: none; +} +#theming div > label { + position: relative; +} +#theming .theme-undo { + position: absolute; + top: -7px; + right: 4px; + cursor: pointer; + opacity: 0.3; + padding: 7px; + vertical-align: top; + display: inline-block; + visibility: hidden; + height: 32px; + width: 32px; +} +#theming form.uploadButton { + width: 411px; +} +#theming form .theme-undo, +#theming .theme-remove-bg { + cursor: pointer; + opacity: 0.3; + padding: 7px; + vertical-align: top; + display: inline-block; + float: right; + position: relative; + top: 4px; + right: 0px; + visibility: visible; + height: 32px; + width: 32px; +} +#theming input[type=text]:hover + .theme-undo, +#theming input[type=text] + .theme-undo:hover, +#theming input[type=text]:focus + .theme-undo, +#theming input[type=text]:active + .theme-undo, +#theming input[type=url]:hover + .theme-undo, +#theming input[type=url] + .theme-undo:hover, +#theming input[type=url]:focus + .theme-undo, +#theming input[type=url]:active + .theme-undo { + visibility: visible; +} +#theming label span { + display: inline-block; + min-width: 175px; + padding: 8px 0px; + vertical-align: top; +} +#theming .icon-upload, +#theming .uploadButton .icon-loading-small { + padding: 8px 20px; + width: 20px; + margin: 2px 0px; + min-height: 32px; + display: inline-block; +} +#theming #theming_settings_status { + height: 26px; + margin: 10px; +} +#theming #theming_settings_loading { + display: inline-block; + vertical-align: middle; + margin-right: 10px; +} +#theming #theming_settings_msg { + vertical-align: middle; + border-radius: 3px; +} +#theming #theming-preview { + width: 230px; + height: 140px; + background-size: cover; + background-position: center center; + text-align: center; + margin-left: 178px; + margin-top: 10px; + margin-bottom: 20px; + cursor: pointer; + background-color: var(--color-primary); + background-image: var(--image-background, var(--image-background-plain, url("../../../core/img/background.svg"), linear-gradient(40deg, #0082c9 0%, #30b6ff 100%))); +} +#theming #theming-preview #theming-preview-logo { + cursor: pointer; + width: 20%; + height: 20%; + margin-top: 20px; + display: inline-block; + background-position: center; + background-repeat: no-repeat; + background-size: contain; + background-image: var(--image-logo, url("../../../core/img/logo/logo.svg")); +} +#theming .theming-hints { + margin-top: 20px; +} +#theming .image-preview { + display: inline-block; + width: 80px; + height: 36px; + background-position: center; + background-repeat: no-repeat; + background-size: contain; +} +#theming #theming-preview-logoheader { + background-image: var(--image-logoheader); +} +#theming #theming-preview-favicon { + background-image: var(--image-favicon); +} + +/* transition effects for theming value changes */ +#header { + transition: background-color 500ms linear; +} +#header svg, #header img { + transition: 500ms filter linear; +} + +/*# sourceMappingURL=settings-admin.css.map */ diff --git a/apps/theming/css/settings-admin.css.map b/apps/theming/css/settings-admin.css.map new file mode 100644 index 0000000000000..b5e657a4e308b --- /dev/null +++ b/apps/theming/css/settings-admin.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["settings-admin.scss"],"names":[],"mappings":"AACI;EACI;;AAGJ;AAAA;EAEI;;AAGJ;EACI;;AAGJ;EACI;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEJ;EACI;;AAEJ;AAAA;EAEI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAQI;;AAGJ;EACI;EACA;EACA;EACA;;AAGJ;AAAA;EAEI;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;;AAGJ;EACI;EACA;EACA;;AAGJ;EACI;EACA;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAIR;EACI;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;;AAGP;EAEO;;AAGP;EACO;;;AAIR;AACA;EACI;;AACA;EACI","file":"settings-admin.css"} \ No newline at end of file diff --git a/apps/theming/css/theming.css b/apps/theming/css/theming.css new file mode 100644 index 0000000000000..2d43b528a9510 --- /dev/null +++ b/apps/theming/css/theming.css @@ -0,0 +1,17 @@ +/* Error: Undefined variable. + * , + * 38 | $invert: luma($color-primary) > 0.6; + * | ^^^^^^^^^^^^^^ + * ' + * apps/theming/css/theming.scss 38:15 root stylesheet */ + +body::before { + font-family: "Source Code Pro", "SF Mono", Monaco, Inconsolata, "Fira Mono", + "Droid Sans Mono", monospace, monospace; + white-space: pre; + display: block; + padding: 1em; + margin-bottom: 1em; + border-bottom: 2px solid black; + content: "Error: Undefined variable.\a \2577 \a 38 \2502 $invert: luma($color-primary) > 0.6;\a \2502 ^^^^^^^^^^^^^^\a \2575 \a apps/theming/css/theming.scss 38:15 root stylesheet"; +} diff --git a/apps/theming/css/theming.scss b/apps/theming/css/theming.scss deleted file mode 100644 index a5b55a5a738af..0000000000000 --- a/apps/theming/css/theming.scss +++ /dev/null @@ -1,285 +0,0 @@ -/** Calculate luma as it is also used in OCA\Theming\Util::calculateLuma */ -@function luma($c) { - $-local-red: red(rgba($c, 1.0)); - $-local-green: green(rgba($c, 1.0)); - $-local-blue: blue(rgba($c, 1.0)); - - @return (0.2126 * $-local-red + 0.7152 * $-local-green + 0.0722 * $-local-blue) / 255; -} - -@mixin faded-background { - background-color: $color-primary; - - @if ($color-primary == #0082C9) { - background-image: linear-gradient(40deg, $color-primary 0%, lighten($color-primary, 20%) 100%); - } @else { - /** This will be overwritten by the faded-background-image mixin if needed */ - background-image: none; - } -} - -@mixin faded-background-image { - @include faded-background; - background-size: contain; - - @if ($color-primary == #0082C9) { - background-image: $image-login-background, linear-gradient(40deg, $color-primary 0%, lighten($color-primary, 20%) 100%); - } - - @if($has-custom-background == true) { - background-size: cover; - background-repeat: no-repeat; - background-image: $image-login-background; - } -} - -$has-custom-background: variable_exists('theming-background-mime') and $theming-background-mime != ''; -$has-custom-logo: variable_exists('theming-logo-mime') and $theming-logo-mime != ''; -$invert: luma($color-primary) > 0.6; - -@if ($has-custom-logo == false) { - @if ($invert) { - $image-logo: url(icon-color-path('logo', 'logo', #000000, 1, true)); - } @else { - $image-logo: url(icon-color-path('logo', 'logo', #ffffff, 1, true)); - } -} - -@if ($invert) { - // too bright, use dark text to mix the primary - $color-primary-light: mix($color-primary, $color-main-text, 10%); - - #appmenu:not(.inverted) svg { - filter: invert(1); - } - #appmenu.inverted svg { - filter: none; - } - .searchbox input[type="search"] { - background-repeat: no-repeat; - background-position: 6px center; - background-color: transparent; - @include icon-color('search', 'actions', $color-black, 1, true); - } - #contactsmenu .icon-contacts { - @include icon-color('contacts', 'places', $color-black, 1, true); - } - #settings .icon-settings-white { - @include icon-color('settings', 'actions', $color-black, 1, true); - } - #appmenu .icon-more-white { - @include icon-color('more', 'actions', $color-black, 1, true); - } -} @else { - #appmenu:not(.inverted) svg { - filter: none; - } - #appmenu.inverted svg { - filter: invert(1); - } -} - -/* Colorized svg images */ -.icon-file, .icon-filetype-text { - background-image: url(./img/core/filetypes/text.svg?v=#{$theming-cachebuster}); -} - -.icon-folder, .icon-filetype-folder { - background-image: url(./img/core/filetypes/folder.svg?v=#{$theming-cachebuster}); -} - -.icon-filetype-folder-drag-accept { - background-image: url(./img/core/filetypes/folder-drag-accept.svg?v=#{$theming-cachebuster}) !important; -} - -#theming-preview-logo, -#header .logo { - background-image: $image-logo; -} - -#body-user, -#body-settings, -#body-public { - #header, - .profile__header, - .preview-card__header { - @include faded-background; - } -} - -#body-login, -#firstrunwizard .firstrunwizard-header, -#theming-preview { - @include faded-background-image; -} - -/* override styles for login screen in guest.css */ -@if ($has-custom-logo) { - // custom logo - #theming-preview-logo, - #header .logo { - background-size: contain; - } - - #body-login #header .logo { - margin-bottom: 22px; - } -} @else { - // default logo - @if ($invert) { - #theming-preview-logo, - #header .logo { - opacity: .6; - } - } -} - -@if variable_exists('theming-logoheader-mime') and $theming-logoheader-mime != '' { - #theming .advanced-option-logoheader .image-preview, - body:not(#body-login) #header .logo { - background-image: $image-logoheader; - } -} @else { - #theming .advanced-option-favicon .image-preview { - background-image: none; - } -} - -input.primary { - background-color: $color-primary-element; - border: 1px solid $color-primary-text; - color: $color-primary-text; -} - -#body-login { - input.primary:enabled:hover, - input.primary:enabled:focus, - button.primary:enabled:hover, - button.primary:enabled:focus, - a.primary:enabled:hover, - a.primary:enabled:focus { - color: $color-primary-text; - background-image: linear-gradient(40deg, $color-primary 0%, lighten($color-primary, 20%) 100%); - } -} - -@if ($invert) { - #body-login { - .body-login-container { - background-color: transparentize(nc-lighten($color-primary, 30%), 0.2); - color: $color-primary-text !important; - - h2 { - color: $color-primary-text; - } - .icon-search.icon-white { - // CSS variable is not used here since it is on the public page layout, - // where the dark theme doesn't apply at the moment - background-image: url('../../../core/img/actions/search.svg'); - } - } - - input { - border: 1px solid nc-lighten($color-primary-text, 50%); - } - input.primary, - button.primary { - background-color: $color-primary; - color: $color-primary-text; - } - :not(div.alternative-logins) > a, - label, - footer p, - .alternative-logins legend, - .lost-password-container #lost-password, - .warning, .update, .error { - color: $color-primary-text !important; - } - input[type='checkbox'].checkbox--white + label:before { - border-color: nc-darken($color-primary-element, 40%) !important; - } - input[type='checkbox'].checkbox--white:not(:disabled):not(:checked) + label:hover:before, - input[type='checkbox'].checkbox--white:focus + label:before { - border-color: nc-darken($color-primary-element, 30%) !important; - } - input[type='checkbox'].checkbox--white:checked + label:before { - border-color: nc-darken($color-primary-element, 30%) !important; - background-color: nc-darken($color-primary-element, 30%) !important; - @include icon-color('checkbox-mark', 'actions', $color-white, 1, true); - } - #submit-wrapper .icon-confirm-white { - background-image: url('../../../core/img/actions/confirm.svg'); - } - - .two-factor-provider { - &:hover, &:focus { - border-color: $color-primary-text; - } - img { - filter: invert(1); - } - } - } - #body-public #header .icon-more-white { - background-image: var(--icon-more-000); - } -} - -// plain background color for login page -@if $image-login-plain == 'true' { - #body-login, #firstrunwizard .firstrunwizard-header, #theming-preview { - background-image: none !important; - } - #body-login { - - :not(.alternative-logins) a, label, p { - color: $color-primary-text; - } - - } -} - -/** Handle primary buttons for bright colors */ -@if (luma($color-primary) > 0.8) { - :root { - --color-primary-light-text: var(--color-primary-text); - } - select, - button, .button, - input:not([type='range']), - textarea, - div[contenteditable=true], - .pager li a { - &.primary:not(:disabled) { - background-color: var(--color-background-dark); - color: var(--color-main-text); - border-color: var(--color-text-lighter); - - &:hover, &:focus, &:active { - background-color: var(--color-background-darker); - color: var(--color-main-text); - border-color: var(--color-text); - } - } - } -} - -@if ($color-primary == #ffffff) { - /* show grey border below header */ - #body-user #header, - #body-settings #header, - #body-public #header { - border-bottom: 1px solid #ebebeb; - } - - /* show triangle in header in grey */ - #appmenu li a.active:before, - .header-right #settings #expand:before { - border-bottom-color:#ebebeb; - } - - /* show border around quota bar in files app */ - .app-files #quota .quota-container { - border: 1px solid #ebebeb; - } -} diff --git a/apps/user_status/css/user-status-menu.css b/apps/user_status/css/user-status-menu.css new file mode 100644 index 0000000000000..9966be2f4ff64 --- /dev/null +++ b/apps/user_status/css/user-status-menu.css @@ -0,0 +1,101 @@ +@charset "UTF-8"; +/** + * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com) + * + * @author John Molakvoæ (skjnldsv) + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ +/** + * @copyright Copyright (c) 2020 Georg Ehrke + * + * @author Georg Ehrke + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ +/** + * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com) + * + * @author John Molakvoæ (skjnldsv) + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ +/** + * @see core/src/icons.js + */ +/** + * SVG COLOR API + * + * @param string $icon the icon filename + * @param string $dir the icon folder within /core/img if $core or app name + * @param string $color the desired color in hexadecimal + * @param int $version the version of the file + * @param bool [$core] search icon in core + * + * @returns A background image with the url to the set to the requested icon. + */ +.icon-user-status { + /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */ + background-image: var(--icon-app-dark); +} + +.icon-user-status-online { + background-image: url("../img/user-status-online.svg"); +} + +.icon-user-status-away { + background-image: url("../img/user-status-away.svg"); +} + +.icon-user-status-dnd { + background-image: url("../img/user-status-dnd.svg"); +} + +.icon-user-status-invisible { + /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */ + background-image: var(--icon-user-status-invisible-dark); +} + +/*# sourceMappingURL=user-status-menu.css.map */ diff --git a/apps/user_status/css/user-status-menu.css.map b/apps/user_status/css/user-status-menu.css.map new file mode 100644 index 0000000000000..0363c914a41a8 --- /dev/null +++ b/apps/user_status/css/user-status-menu.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["../../../core/css/variables.scss","user-status-menu.scss","../../../core/css/functions.scss"],"names":[],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBA;AAAA;AAAA;AA4BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AD1BA;ACuCC;EAEA;;;ADrCD;EACC;;;AAGD;EACC;;;AAGD;EACC;;;AAID;ACsBC;EAEA","file":"user-status-menu.css"} \ No newline at end of file diff --git a/build/vue-builds.sh b/build/vue-builds.sh deleted file mode 100755 index b5198cbbc1fe5..0000000000000 --- a/build/vue-builds.sh +++ /dev/null @@ -1,54 +0,0 @@ -#!/bin/bash - -root=$(pwd) -entryFile=$1 - -if [ ! -f "$entryFile" ] -then - echo "The build file $entryFile does not exists" - exit 2 -else - path=$(dirname "$entryFile") - file=$(basename $entryFile) - - set -e - cd $path - echo "Entering $path" - - # support for multiple chunks - for chunk in *$file; do - - # Backup original file - backupFile="$chunk.orig" - echo "Backing up $chunk to $backupFile" - cp $chunk $backupFile - - done - - # Make the app - echo "Making $file" - cd ../ - npm --silent install - npm run --silent build - - # Reset - cd $root - cd $path - - # support for multiple chunks - for chunk in *$file; do - - # Compare build files - echo "Comparing $chunk to the original" - backupFile="$chunk.orig" - if ! diff -q $chunk $backupFile &>/dev/null - then - echo "$chunk build is NOT up-to-date! Please send the proper production build within the pull request" - cat $HOME/.npm/_logs/*.log - exit 2 - else - echo "$chunk build is up-to-date" - fi - - done -fi diff --git a/core/css/apps.css b/core/css/apps.css new file mode 100644 index 0000000000000..b875d08d628d7 --- /dev/null +++ b/core/css/apps.css @@ -0,0 +1,1575 @@ +@charset "UTF-8"; +/** + * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com) + * + * @author John Molakvoæ (skjnldsv) + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ +/** + * @copyright Copyright (c) 2016-2017, John Molakvoæ + * @copyright Copyright (c) 2016, Julius Haertl + * @copyright Copyright (c) 2016, Morris Jobke + * @copyright Copyright (c) 2016, pgys + * @copyright Copyright (c) 2016, Lukas Reschke + * @copyright Copyright (c) 2016, Stefan Weil + * @copyright Copyright (c) 2016, Roeland Jago Douma + * @copyright Copyright (c) 2016, jowi + * @copyright Copyright (c) 2015, Hendrik Leppelsack + * @copyright Copyright (c) 2015, Thomas Müller + * @copyright Copyright (c) 2015, Vincent Petry + * @copyright Copyright (c) 2014-2017, Jan-Christoph Borchardt + * + * @license GNU AGPL version 3 or any later version + * + */ +/** + * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com) + * + * @author John Molakvoæ (skjnldsv) + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ +/** + * @see core/src/icons.js + */ +/** + * SVG COLOR API + * + * @param string $icon the icon filename + * @param string $dir the icon folder within /core/img if $core or app name + * @param string $color the desired color in hexadecimal + * @param int $version the version of the file + * @param bool [$core] search icon in core + * + * @returns A background image with the url to the set to the requested icon. + */ +/* BASE STYLING ------------------------------------------------------------ */ +h2 { + font-weight: bold; + font-size: 20px; + margin-bottom: 12px; + line-height: 30px; + color: var(--color-text-light); +} + +h3 { + font-size: 16px; + margin: 12px 0; + color: var(--color-text-light); +} + +h4 { + font-size: 14px; +} + +/* do not use italic typeface style, instead lighter color */ +em { + font-style: normal; + color: var(--color-text-lighter); +} + +dl { + padding: 12px 0; +} + +dt, +dd { + display: inline-block; + padding: 12px; + padding-left: 0; +} + +dt { + width: 130px; + white-space: nowrap; + text-align: right; +} + +kbd { + padding: 4px 10px; + border: 1px solid #ccc; + box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2); + border-radius: var(--border-radius); + display: inline-block; + white-space: nowrap; +} + +/* APP STYLING ------------------------------------------------------------ */ +#content[class*=app-] * { + box-sizing: border-box; +} + +/* APP-NAVIGATION ------------------------------------------------------------ */ +/* Navigation: folder like structure */ +#app-navigation:not(.vue) { + width: 300px; + position: fixed; + top: 50px; + left: 0; + z-index: 500; + overflow-y: auto; + overflow-x: hidden; + height: calc(100% - 50px); + box-sizing: border-box; + background-color: var(--color-main-background); + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + border-right: 1px solid var(--color-border); + display: flex; + flex-direction: column; + flex-grow: 0; + flex-shrink: 0; + /* 'New' button */ + /** + * Button styling for menu, edit and undo + */ + /** + * Collapsible menus + */ + /** + * App navigation utils, buttons and counters for drop down menu + */ + /** + * Editable entries + */ + /** + * Deleted entries with undo button + */ + /** + * Common rules for animation of undo and edit entries + */ + /** + * drag and drop + */ +} +#app-navigation:not(.vue) .app-navigation-new { + display: block; + padding: 10px; +} +#app-navigation:not(.vue) .app-navigation-new button { + display: inline-block; + width: 100%; + padding: 10px; + padding-left: 34px; + background-position: 10px center; + text-align: left; + margin: 0; +} +#app-navigation:not(.vue) li { + position: relative; +} +#app-navigation:not(.vue) > ul { + position: relative; + height: 100%; + width: inherit; + overflow-x: hidden; + overflow-y: auto; + box-sizing: border-box; + display: flex; + flex-direction: column; + /* Menu and submenu */ +} +#app-navigation:not(.vue) > ul > li { + display: inline-flex; + flex-wrap: wrap; + order: 1; + flex-shrink: 0; + /* Pinned-to-bottom entries */ + /* align loader */ + /* hide deletion/collapse of subitems */ + /* Second level nesting for lists */ +} +#app-navigation:not(.vue) > ul > li.pinned { + order: 2; +} +#app-navigation:not(.vue) > ul > li.pinned.first-pinned { + margin-top: auto !important; +} +#app-navigation:not(.vue) > ul > li > .app-navigation-entry-deleted { + /* Ugly hack for overriding the main entry link */ + padding-left: 44px !important; +} +#app-navigation:not(.vue) > ul > li > .app-navigation-entry-edit { + /* Ugly hack for overriding the main entry link */ + /* align the input correctly with the link text + 44px-6px padding for the input */ + padding-left: 38px !important; +} +#app-navigation:not(.vue) > ul > li a:hover, +#app-navigation:not(.vue) > ul > li a:hover > a, +#app-navigation:not(.vue) > ul > li a:focus, +#app-navigation:not(.vue) > ul > li a:focus > a { + background-color: var(--color-background-hover); +} +#app-navigation:not(.vue) > ul > li.active, +#app-navigation:not(.vue) > ul > li.active > a, +#app-navigation:not(.vue) > ul > li a:active, +#app-navigation:not(.vue) > ul > li a:active > a, +#app-navigation:not(.vue) > ul > li a.selected, +#app-navigation:not(.vue) > ul > li a.selected > a, +#app-navigation:not(.vue) > ul > li a.active, +#app-navigation:not(.vue) > ul > li a.active > a { + background-color: var(--color-primary-light); +} +#app-navigation:not(.vue) > ul > li.icon-loading-small:after { + left: 22px; + top: 22px; +} +#app-navigation:not(.vue) > ul > li.deleted > ul, #app-navigation:not(.vue) > ul > li.collapsible:not(.open) > ul { + display: none; +} +#app-navigation:not(.vue) > ul > li.app-navigation-caption { + font-weight: bold; + line-height: 44px; + padding: 0 44px; + white-space: nowrap; + text-overflow: ellipsis; + box-shadow: none !important; + user-select: none; + pointer-events: none; +} +#app-navigation:not(.vue) > ul > li.app-navigation-caption:not(:first-child) { + margin-top: 22px; +} +#app-navigation:not(.vue) > ul > li > ul { + flex: 0 1 auto; + width: 100%; + position: relative; +} +#app-navigation:not(.vue) > ul > li > ul > li { + display: inline-flex; + flex-wrap: wrap; + padding-left: 44px; + /* align loader */ +} +#app-navigation:not(.vue) > ul > li > ul > li:hover, +#app-navigation:not(.vue) > ul > li > ul > li:hover > a, #app-navigation:not(.vue) > ul > li > ul > li:focus, +#app-navigation:not(.vue) > ul > li > ul > li:focus > a { + background-color: var(--color-background-hover); +} +#app-navigation:not(.vue) > ul > li > ul > li.active, +#app-navigation:not(.vue) > ul > li > ul > li.active > a, +#app-navigation:not(.vue) > ul > li > ul > li a.selected, +#app-navigation:not(.vue) > ul > li > ul > li a.selected > a { + background-color: var(--color-primary-light); +} +#app-navigation:not(.vue) > ul > li > ul > li.icon-loading-small:after { + left: 22px; + /* 44px / 2 */ +} +#app-navigation:not(.vue) > ul > li > ul > li > .app-navigation-entry-deleted { + /* margin to keep active indicator visible */ + margin-left: 4px; + padding-left: 84px; +} +#app-navigation:not(.vue) > ul > li > ul > li > .app-navigation-entry-edit { + /* margin to keep active indicator visible */ + margin-left: 4px; + /* align the input correctly with the link text + 44px+44px-4px-6px padding for the input */ + padding-left: 78px !important; +} +#app-navigation:not(.vue) > ul > li, +#app-navigation:not(.vue) > ul > li > ul > li { + position: relative; + width: 100%; + box-sizing: border-box; + /* hide icons if loading */ + /* Main entry link */ + /* Bullet icon */ + /* popover fix the flex positionning of the li parent */ + /* show edit/undo field if editing/deleted */ +} +#app-navigation:not(.vue) > ul > li.icon-loading-small > a, +#app-navigation:not(.vue) > ul > li.icon-loading-small > .app-navigation-entry-bullet, +#app-navigation:not(.vue) > ul > li > ul > li.icon-loading-small > a, +#app-navigation:not(.vue) > ul > li > ul > li.icon-loading-small > .app-navigation-entry-bullet { + /* hide icon or bullet if loading state*/ + background: transparent !important; +} +#app-navigation:not(.vue) > ul > li > a, +#app-navigation:not(.vue) > ul > li > ul > li > a { + background-size: 16px 16px; + background-position: 14px center; + background-repeat: no-repeat; + display: block; + justify-content: space-between; + line-height: 44px; + min-height: 44px; + padding: 0 12px 0 14px; + overflow: hidden; + box-sizing: border-box; + white-space: nowrap; + text-overflow: ellipsis; + color: var(--color-main-text); + opacity: 0.8; + flex: 1 1 0px; + z-index: 100; + /* above the bullet to allow click*/ + /* TODO: forbid using img as icon in menu? */ + /* counter can also be inside the link */ +} +#app-navigation:not(.vue) > ul > li > a.svg, +#app-navigation:not(.vue) > ul > li > ul > li > a.svg { + padding: 0 12px 0 44px; +} +#app-navigation:not(.vue) > ul > li > a:first-child img, +#app-navigation:not(.vue) > ul > li > ul > li > a:first-child img { + margin-right: 11px; + width: 16px; + height: 16px; + filter: var(--background-invert-if-dark); +} +#app-navigation:not(.vue) > ul > li > a > .app-navigation-entry-utils, +#app-navigation:not(.vue) > ul > li > ul > li > a > .app-navigation-entry-utils { + display: inline-block; + float: right; +} +#app-navigation:not(.vue) > ul > li > a > .app-navigation-entry-utils .app-navigation-entry-utils-counter, +#app-navigation:not(.vue) > ul > li > ul > li > a > .app-navigation-entry-utils .app-navigation-entry-utils-counter { + padding-right: 0 !important; +} +#app-navigation:not(.vue) > ul > li > .app-navigation-entry-bullet, +#app-navigation:not(.vue) > ul > li > ul > li > .app-navigation-entry-bullet { + position: absolute; + display: block; + margin: 16px; + width: 12px; + height: 12px; + border: none; + border-radius: 50%; + cursor: pointer; + transition: background 100ms ease-in-out; +} +#app-navigation:not(.vue) > ul > li > .app-navigation-entry-bullet + a, +#app-navigation:not(.vue) > ul > li > ul > li > .app-navigation-entry-bullet + a { + /* hide icon if bullet, can't have both */ + background: transparent !important; +} +#app-navigation:not(.vue) > ul > li > .app-navigation-entry-menu, +#app-navigation:not(.vue) > ul > li > ul > li > .app-navigation-entry-menu { + top: 44px; +} +#app-navigation:not(.vue) > ul > li.editing .app-navigation-entry-edit, +#app-navigation:not(.vue) > ul > li > ul > li.editing .app-navigation-entry-edit { + opacity: 1; + z-index: 250; +} +#app-navigation:not(.vue) > ul > li.deleted .app-navigation-entry-deleted, +#app-navigation:not(.vue) > ul > li > ul > li.deleted .app-navigation-entry-deleted { + transform: translateX(0); + z-index: 250; +} +#app-navigation:not(.vue).hidden { + display: none; +} +#app-navigation:not(.vue) .app-navigation-entry-utils .app-navigation-entry-utils-menu-button > button, +#app-navigation:not(.vue) .app-navigation-entry-deleted .app-navigation-entry-deleted-button { + border: 0; + opacity: 0.5; + background-color: transparent; + background-repeat: no-repeat; + background-position: center; +} +#app-navigation:not(.vue) .app-navigation-entry-utils .app-navigation-entry-utils-menu-button > button:hover, #app-navigation:not(.vue) .app-navigation-entry-utils .app-navigation-entry-utils-menu-button > button:focus, +#app-navigation:not(.vue) .app-navigation-entry-deleted .app-navigation-entry-deleted-button:hover, +#app-navigation:not(.vue) .app-navigation-entry-deleted .app-navigation-entry-deleted-button:focus { + background-color: transparent; + opacity: 1; +} +#app-navigation:not(.vue) .collapsible { + /* Fallback for old collapse button. + TODO: to be removed. Leaved here for retro compatibility */ + /* force padding on link no matter if 'a' has an icon class */ +} +#app-navigation:not(.vue) .collapsible .collapse { + opacity: 0; + position: absolute; + width: 44px; + height: 44px; + margin: 0; + z-index: 110; + /* Needed for IE11; otherwise the button appears to the right of the + * link. */ + left: 0; +} +#app-navigation:not(.vue) .collapsible:before { + position: absolute; + height: 44px; + width: 44px; + margin: 0; + padding: 0; + background: none; + /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */ + background-image: var(--icon-triangle-s-dark); + background-size: 16px; + background-repeat: no-repeat; + background-position: center; + border: none; + border-radius: 0; + outline: none !important; + box-shadow: none; + content: " "; + opacity: 0; + -webkit-transform: rotate(-90deg); + -ms-transform: rotate(-90deg); + transform: rotate(-90deg); + z-index: 105; + background-color: var(--color-background-hover); + border-radius: 50%; + transition: opacity 100ms ease-in-out; +} +#app-navigation:not(.vue) .collapsible > a:first-child { + padding-left: 44px; +} +#app-navigation:not(.vue) .collapsible:hover:before, #app-navigation:not(.vue) .collapsible:focus:before { + opacity: 1; +} +#app-navigation:not(.vue) .collapsible:hover > .app-navigation-entry-bullet, #app-navigation:not(.vue) .collapsible:focus > .app-navigation-entry-bullet { + background: transparent !important; +} +#app-navigation:not(.vue) .collapsible.open:before { + -webkit-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); +} +#app-navigation:not(.vue) .app-navigation-entry-utils { + flex: 0 1 auto; +} +#app-navigation:not(.vue) .app-navigation-entry-utils ul { + display: flex !important; + align-items: center; + justify-content: flex-end; +} +#app-navigation:not(.vue) .app-navigation-entry-utils li { + width: 44px !important; + height: 44px; +} +#app-navigation:not(.vue) .app-navigation-entry-utils button { + height: 100%; + width: 100%; + margin: 0; + box-shadow: none; +} +#app-navigation:not(.vue) .app-navigation-entry-utils .app-navigation-entry-utils-menu-button { + /* Prevent bg img override if an icon class is set */ +} +#app-navigation:not(.vue) .app-navigation-entry-utils .app-navigation-entry-utils-menu-button button:not([class^=icon-]):not([class*=" icon-"]) { + /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */ + background-image: var(--icon-more-dark); +} +#app-navigation:not(.vue) .app-navigation-entry-utils .app-navigation-entry-utils-menu-button:hover button, #app-navigation:not(.vue) .app-navigation-entry-utils .app-navigation-entry-utils-menu-button:focus button { + background-color: transparent; + opacity: 1; +} +#app-navigation:not(.vue) .app-navigation-entry-utils .app-navigation-entry-utils-counter { + overflow: hidden; + text-align: right; + font-size: 9pt; + line-height: 44px; + padding: 0 12px; + /* Same padding as all li > a in the app-navigation */ +} +#app-navigation:not(.vue) .app-navigation-entry-utils .app-navigation-entry-utils-counter.highlighted { + padding: 0; + text-align: center; +} +#app-navigation:not(.vue) .app-navigation-entry-utils .app-navigation-entry-utils-counter.highlighted span { + padding: 2px 5px; + border-radius: 10px; + background-color: var(--color-primary); + color: var(--color-primary-text); +} +#app-navigation:not(.vue) .app-navigation-entry-edit { + padding-left: 5px; + padding-right: 5px; + display: block; + width: calc(100% - 1px); + /* Avoid border overlapping */ + transition: opacity 250ms ease-in-out; + opacity: 0; + position: absolute; + background-color: var(--color-main-background); + z-index: -1; +} +#app-navigation:not(.vue) .app-navigation-entry-edit form, +#app-navigation:not(.vue) .app-navigation-entry-edit div { + display: inline-flex; + width: 100%; +} +#app-navigation:not(.vue) .app-navigation-entry-edit input { + padding: 5px; + margin-right: 0; + height: 38px; +} +#app-navigation:not(.vue) .app-navigation-entry-edit input:hover, #app-navigation:not(.vue) .app-navigation-entry-edit input:focus { + /* overlapp borders */ + z-index: 1; +} +#app-navigation:not(.vue) .app-navigation-entry-edit input[type=text] { + width: 100%; + min-width: 0; + /* firefox hack: override auto */ + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} +#app-navigation:not(.vue) .app-navigation-entry-edit button, +#app-navigation:not(.vue) .app-navigation-entry-edit input:not([type=text]) { + width: 36px; + height: 38px; + flex: 0 0 36px; +} +#app-navigation:not(.vue) .app-navigation-entry-edit button:not(:last-child), +#app-navigation:not(.vue) .app-navigation-entry-edit input:not([type=text]):not(:last-child) { + border-radius: 0 !important; +} +#app-navigation:not(.vue) .app-navigation-entry-edit button:not(:first-child), +#app-navigation:not(.vue) .app-navigation-entry-edit input:not([type=text]):not(:first-child) { + margin-left: -1px; +} +#app-navigation:not(.vue) .app-navigation-entry-edit button:last-child, +#app-navigation:not(.vue) .app-navigation-entry-edit input:not([type=text]):last-child { + border-bottom-right-radius: var(--border-radius); + border-top-right-radius: var(--border-radius); + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} +#app-navigation:not(.vue) .app-navigation-entry-deleted { + display: inline-flex; + padding-left: 44px; + transform: translateX(300px); +} +#app-navigation:not(.vue) .app-navigation-entry-deleted .app-navigation-entry-deleted-description { + position: relative; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + flex: 1 1 0px; + line-height: 44px; +} +#app-navigation:not(.vue) .app-navigation-entry-deleted .app-navigation-entry-deleted-button { + margin: 0; + height: 44px; + width: 44px; + line-height: 44px; +} +#app-navigation:not(.vue) .app-navigation-entry-deleted .app-navigation-entry-deleted-button:hover, #app-navigation:not(.vue) .app-navigation-entry-deleted .app-navigation-entry-deleted-button:focus { + opacity: 1; +} +#app-navigation:not(.vue) .app-navigation-entry-edit, +#app-navigation:not(.vue) .app-navigation-entry-deleted { + width: calc(100% - 1px); + /* Avoid border overlapping */ + transition: transform 250ms ease-in-out, opacity 250ms ease-in-out, z-index 250ms ease-in-out; + position: absolute; + left: 0; + background-color: var(--color-main-background); + box-sizing: border-box; +} +#app-navigation:not(.vue) .drag-and-drop { + -webkit-transition: padding-bottom 500ms ease 0s; + transition: padding-bottom 500ms ease 0s; + padding-bottom: 40px; +} +#app-navigation:not(.vue) .error { + color: var(--color-error); +} +#app-navigation:not(.vue) .app-navigation-entry-utils ul, +#app-navigation:not(.vue) .app-navigation-entry-menu ul { + list-style-type: none; +} + +/* CONTENT --------------------------------------------------------- */ +#content { + box-sizing: border-box; + position: relative; + display: flex; + padding-top: 50px; + min-height: 100%; +} + +/* APP-CONTENT AND WRAPPER ------------------------------------------ */ +/* Part where the content will be loaded into */ +/** + * !Important. We are defining the minimum requirement we want for flex + * Just before the mobile breakpoint we have variables.$breakpoint-mobile (1024px) - variables.$navigation-width + * -> 468px. In that case we want 200px for the list and 268px for the content + */ +#app-content { + z-index: 1000; + background-color: var(--color-main-background); + position: relative; + flex-basis: 100vw; + min-height: 100%; + /* margin if navigation element is here */ + /* no top border for first settings item */ + /* if app-content-list is present */ +} +#app-navigation:not(.hidden) + #app-content { + margin-left: 300px; +} +#app-content > .section:first-child { + border-top: none; +} +#app-content #app-content-wrapper { + display: flex; + position: relative; + align-items: stretch; + /* make sure we have at least full height for loaders or such + no need for list/details since we have a flex stretch */ + min-height: 100%; + /* CONTENT DETAILS AFTER LIST*/ +} +#app-content #app-content-wrapper .app-content-details { + /* grow full width */ + flex: 1 1 524px; +} +#app-content #app-content-wrapper .app-content-details #app-navigation-toggle-back { + display: none; +} + +/* APP-SIDEBAR ------------------------------------------------------------ */ +/* + Sidebar: a sidebar to be used within #content + #app-content will be shrinked properly +*/ +#app-sidebar { + width: 27vw; + min-width: 300px; + max-width: 500px; + display: block; + position: -webkit-sticky; + position: sticky; + top: 50px; + right: 0; + overflow-y: auto; + overflow-x: hidden; + z-index: 1500; + height: calc(100vh - 50px); + background: var(--color-main-background); + border-left: 1px solid var(--color-border); + flex-shrink: 0; +} +#app-sidebar.disappear { + display: none; +} + +/* APP-SETTINGS ------------------------------------------------------------ */ +/* settings area */ +#app-settings { + margin-top: auto; +} +#app-settings.open #app-settings-content, #app-settings.opened #app-settings-content { + display: block; +} + +#app-settings-content { + display: none; + padding: 10px; + background-color: var(--color-main-background); + /* restrict height of settings and make scrollable */ + max-height: 300px; + overflow-y: auto; + box-sizing: border-box; + /* display input fields at full width */ +} +#app-settings-content input[type=text] { + width: 93%; +} +#app-settings-content .info-text { + padding: 5px 0 7px 22px; + color: var(--color-text-lighter); +} +#app-settings-content input[type=checkbox].radio + label, #app-settings-content input[type=checkbox].checkbox + label, #app-settings-content input[type=radio].radio + label, #app-settings-content input[type=radio].checkbox + label { + display: inline-block; + width: 100%; + padding: 5px 0; +} + +#app-settings-header { + box-sizing: border-box; + background-color: var(--color-main-background); +} + +#app-settings-header .settings-button { + display: flex; + align-items: center; + height: 44px; + width: 100%; + padding: 0; + margin: 0; + background-color: var(--color-main-background); + box-shadow: none; + border: 0; + border-radius: 0; + text-align: left; + font-weight: normal; + font-size: 100%; + opacity: 0.8; + /* like app-navigation a */ + color: var(--color-main-text); +} +#app-settings-header .settings-button.opened { + border-top: solid 1px var(--color-border); + background-color: var(--color-main-background); +} +#app-settings-header .settings-button:hover, #app-settings-header .settings-button:focus { + background-color: var(--color-background-hover); +} +#app-settings-header .settings-button::before { + background-image: var(--icon-settings-dark); + background-position: 14px center; + background-repeat: no-repeat; + content: ""; + width: 44px; + height: 44px; + top: 0; + left: 0; + display: block; + filter: var(--background-invert-if-dark); +} + +/* GENERAL SECTION ------------------------------------------------------------ */ +.section { + display: block; + padding: 30px; + margin-bottom: 24px; + /* slight position correction of checkboxes and radio buttons */ +} +.section.hidden { + display: none !important; +} +.section input[type=checkbox], .section input[type=radio] { + vertical-align: -2px; + margin-right: 4px; +} + +.sub-section { + position: relative; + margin-top: 10px; + margin-left: 27px; + margin-bottom: 10px; +} + +.appear { + opacity: 1; + -webkit-transition: opacity 500ms ease 0s; + -moz-transition: opacity 500ms ease 0s; + -ms-transition: opacity 500ms ease 0s; + -o-transition: opacity 500ms ease 0s; + transition: opacity 500ms ease 0s; +} +.appear.transparent { + opacity: 0; +} + +/* TABS ------------------------------------------------------------ */ +.tabHeaders { + display: flex; + margin-bottom: 16px; +} +.tabHeaders .tabHeader { + display: flex; + flex-direction: column; + flex-grow: 1; + text-align: center; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + cursor: pointer; + color: var(--color-text-lighter); + margin-bottom: 1px; + padding: 5px; + /* Use same amount as sidebar padding */ +} +.tabHeaders .tabHeader.hidden { + display: none; +} +.tabHeaders .tabHeader:first-child { + padding-left: 15px; +} +.tabHeaders .tabHeader:last-child { + padding-right: 15px; +} +.tabHeaders .tabHeader .icon { + display: inline-block; + width: 100%; + height: 16px; + background-size: 16px; + vertical-align: middle; + margin-top: -2px; + margin-right: 3px; + opacity: 0.7; + cursor: pointer; +} +.tabHeaders .tabHeader a { + color: var(--color-text-lighter); + margin-bottom: 1px; + overflow: hidden; + text-overflow: ellipsis; +} +.tabHeaders .tabHeader.selected { + font-weight: bold; +} +.tabHeaders .tabHeader.selected, .tabHeaders .tabHeader:hover, .tabHeaders .tabHeader:focus { + margin-bottom: 0px; + color: var(--color-main-text); + border-bottom: 1px solid var(--color-text-lighter); +} + +.tabsContainer { + clear: left; +} +.tabsContainer .tab { + padding: 0 15px 15px; +} + +/* POPOVER MENU ------------------------------------------------------------ */ +.ie .bubble, .ie .bubble:after, +.ie .popovermenu, .ie .popovermenu:after, +.ie #app-navigation .app-navigation-entry-menu, +.ie #app-navigation .app-navigation-entry-menu:after, +.edge .bubble, +.edge .bubble:after, +.edge .popovermenu, +.edge .popovermenu:after, +.edge #app-navigation .app-navigation-entry-menu, +.edge #app-navigation .app-navigation-entry-menu:after { + border: 1px solid var(--color-border); +} + +.bubble, +.app-navigation-entry-menu, +.popovermenu { + position: absolute; + background-color: var(--color-main-background); + color: var(--color-main-text); + border-radius: var(--border-radius); + z-index: 110; + margin: 5px; + margin-top: -5px; + right: 0; + filter: drop-shadow(0 1px 3px var(--color-box-shadow)); + display: none; + will-change: filter; + /* Center the popover */ + /* Align the popover to the left */ +} +.bubble:after, +.app-navigation-entry-menu:after, +.popovermenu:after { + bottom: 100%; + right: 7px; + /* change this to adjust the arrow position */ + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; + pointer-events: none; + border-bottom-color: var(--color-main-background); + border-width: 9px; +} +.bubble.menu-center, +.app-navigation-entry-menu.menu-center, +.popovermenu.menu-center { + transform: translateX(50%); + right: 50%; + margin-right: 0; +} +.bubble.menu-center:after, +.app-navigation-entry-menu.menu-center:after, +.popovermenu.menu-center:after { + right: 50%; + transform: translateX(50%); +} +.bubble.menu-left, +.app-navigation-entry-menu.menu-left, +.popovermenu.menu-left { + right: auto; + left: 0; + margin-right: 0; +} +.bubble.menu-left:after, +.app-navigation-entry-menu.menu-left:after, +.popovermenu.menu-left:after { + left: 6px; + right: auto; +} +.bubble.open, +.app-navigation-entry-menu.open, +.popovermenu.open { + display: block; +} +.bubble.contactsmenu-popover, +.app-navigation-entry-menu.contactsmenu-popover, +.popovermenu.contactsmenu-popover { + margin: 0; +} +.bubble ul, +.app-navigation-entry-menu ul, +.popovermenu ul { + /* Overwrite #app-navigation > ul ul */ + display: flex !important; + flex-direction: column; +} +.bubble li, +.app-navigation-entry-menu li, +.popovermenu li { + display: flex; + flex: 0 0 auto; + /* css hack, only first not hidden */ +} +.bubble li.hidden, +.app-navigation-entry-menu li.hidden, +.popovermenu li.hidden { + display: none; +} +.bubble li > button, +.bubble li > a, +.bubble li > .menuitem, +.app-navigation-entry-menu li > button, +.app-navigation-entry-menu li > a, +.app-navigation-entry-menu li > .menuitem, +.popovermenu li > button, +.popovermenu li > a, +.popovermenu li > .menuitem { + cursor: pointer; + line-height: 44px; + border: 0; + border-radius: 0; + background-color: transparent; + display: flex; + align-items: flex-start; + height: auto; + margin: 0; + font-weight: normal; + box-shadow: none; + width: 100%; + color: var(--color-main-text); + white-space: nowrap; + /* prevent .action class to break the design */ + /* Add padding if contains icon+text */ + /* DEPRECATED! old img in popover fallback + * TODO: to remove */ + /* checkbox/radio fixes */ + /* no margin if hidden span before */ + /* Inputs inside popover supports text, submit & reset */ +} +.bubble li > button span[class^=icon-], +.bubble li > button span[class*=" icon-"], .bubble li > button[class^=icon-], .bubble li > button[class*=" icon-"], +.bubble li > a span[class^=icon-], +.bubble li > a span[class*=" icon-"], +.bubble li > a[class^=icon-], +.bubble li > a[class*=" icon-"], +.bubble li > .menuitem span[class^=icon-], +.bubble li > .menuitem span[class*=" icon-"], +.bubble li > .menuitem[class^=icon-], +.bubble li > .menuitem[class*=" icon-"], +.app-navigation-entry-menu li > button span[class^=icon-], +.app-navigation-entry-menu li > button span[class*=" icon-"], +.app-navigation-entry-menu li > button[class^=icon-], +.app-navigation-entry-menu li > button[class*=" icon-"], +.app-navigation-entry-menu li > a span[class^=icon-], +.app-navigation-entry-menu li > a span[class*=" icon-"], +.app-navigation-entry-menu li > a[class^=icon-], +.app-navigation-entry-menu li > a[class*=" icon-"], +.app-navigation-entry-menu li > .menuitem span[class^=icon-], +.app-navigation-entry-menu li > .menuitem span[class*=" icon-"], +.app-navigation-entry-menu li > .menuitem[class^=icon-], +.app-navigation-entry-menu li > .menuitem[class*=" icon-"], +.popovermenu li > button span[class^=icon-], +.popovermenu li > button span[class*=" icon-"], +.popovermenu li > button[class^=icon-], +.popovermenu li > button[class*=" icon-"], +.popovermenu li > a span[class^=icon-], +.popovermenu li > a span[class*=" icon-"], +.popovermenu li > a[class^=icon-], +.popovermenu li > a[class*=" icon-"], +.popovermenu li > .menuitem span[class^=icon-], +.popovermenu li > .menuitem span[class*=" icon-"], +.popovermenu li > .menuitem[class^=icon-], +.popovermenu li > .menuitem[class*=" icon-"] { + min-width: 0; + /* Overwrite icons*/ + min-height: 0; + background-position: 14px center; + background-size: 16px; +} +.bubble li > button span[class^=icon-], +.bubble li > button span[class*=" icon-"], +.bubble li > a span[class^=icon-], +.bubble li > a span[class*=" icon-"], +.bubble li > .menuitem span[class^=icon-], +.bubble li > .menuitem span[class*=" icon-"], +.app-navigation-entry-menu li > button span[class^=icon-], +.app-navigation-entry-menu li > button span[class*=" icon-"], +.app-navigation-entry-menu li > a span[class^=icon-], +.app-navigation-entry-menu li > a span[class*=" icon-"], +.app-navigation-entry-menu li > .menuitem span[class^=icon-], +.app-navigation-entry-menu li > .menuitem span[class*=" icon-"], +.popovermenu li > button span[class^=icon-], +.popovermenu li > button span[class*=" icon-"], +.popovermenu li > a span[class^=icon-], +.popovermenu li > a span[class*=" icon-"], +.popovermenu li > .menuitem span[class^=icon-], +.popovermenu li > .menuitem span[class*=" icon-"] { + /* Keep padding to define the width to + assure correct position of a possible text */ + padding: 22px 0 22px 44px; +} +.bubble li > button:not([class^=icon-]):not([class*=icon-]) > span:not([class^=icon-]):not([class*=icon-]):first-child, +.bubble li > button:not([class^=icon-]):not([class*=icon-]) > input:not([class^=icon-]):not([class*=icon-]):first-child, +.bubble li > button:not([class^=icon-]):not([class*=icon-]) > form:not([class^=icon-]):not([class*=icon-]):first-child, +.bubble li > a:not([class^=icon-]):not([class*=icon-]) > span:not([class^=icon-]):not([class*=icon-]):first-child, +.bubble li > a:not([class^=icon-]):not([class*=icon-]) > input:not([class^=icon-]):not([class*=icon-]):first-child, +.bubble li > a:not([class^=icon-]):not([class*=icon-]) > form:not([class^=icon-]):not([class*=icon-]):first-child, +.bubble li > .menuitem:not([class^=icon-]):not([class*=icon-]) > span:not([class^=icon-]):not([class*=icon-]):first-child, +.bubble li > .menuitem:not([class^=icon-]):not([class*=icon-]) > input:not([class^=icon-]):not([class*=icon-]):first-child, +.bubble li > .menuitem:not([class^=icon-]):not([class*=icon-]) > form:not([class^=icon-]):not([class*=icon-]):first-child, +.app-navigation-entry-menu li > button:not([class^=icon-]):not([class*=icon-]) > span:not([class^=icon-]):not([class*=icon-]):first-child, +.app-navigation-entry-menu li > button:not([class^=icon-]):not([class*=icon-]) > input:not([class^=icon-]):not([class*=icon-]):first-child, +.app-navigation-entry-menu li > button:not([class^=icon-]):not([class*=icon-]) > form:not([class^=icon-]):not([class*=icon-]):first-child, +.app-navigation-entry-menu li > a:not([class^=icon-]):not([class*=icon-]) > span:not([class^=icon-]):not([class*=icon-]):first-child, +.app-navigation-entry-menu li > a:not([class^=icon-]):not([class*=icon-]) > input:not([class^=icon-]):not([class*=icon-]):first-child, +.app-navigation-entry-menu li > a:not([class^=icon-]):not([class*=icon-]) > form:not([class^=icon-]):not([class*=icon-]):first-child, +.app-navigation-entry-menu li > .menuitem:not([class^=icon-]):not([class*=icon-]) > span:not([class^=icon-]):not([class*=icon-]):first-child, +.app-navigation-entry-menu li > .menuitem:not([class^=icon-]):not([class*=icon-]) > input:not([class^=icon-]):not([class*=icon-]):first-child, +.app-navigation-entry-menu li > .menuitem:not([class^=icon-]):not([class*=icon-]) > form:not([class^=icon-]):not([class*=icon-]):first-child, +.popovermenu li > button:not([class^=icon-]):not([class*=icon-]) > span:not([class^=icon-]):not([class*=icon-]):first-child, +.popovermenu li > button:not([class^=icon-]):not([class*=icon-]) > input:not([class^=icon-]):not([class*=icon-]):first-child, +.popovermenu li > button:not([class^=icon-]):not([class*=icon-]) > form:not([class^=icon-]):not([class*=icon-]):first-child, +.popovermenu li > a:not([class^=icon-]):not([class*=icon-]) > span:not([class^=icon-]):not([class*=icon-]):first-child, +.popovermenu li > a:not([class^=icon-]):not([class*=icon-]) > input:not([class^=icon-]):not([class*=icon-]):first-child, +.popovermenu li > a:not([class^=icon-]):not([class*=icon-]) > form:not([class^=icon-]):not([class*=icon-]):first-child, +.popovermenu li > .menuitem:not([class^=icon-]):not([class*=icon-]) > span:not([class^=icon-]):not([class*=icon-]):first-child, +.popovermenu li > .menuitem:not([class^=icon-]):not([class*=icon-]) > input:not([class^=icon-]):not([class*=icon-]):first-child, +.popovermenu li > .menuitem:not([class^=icon-]):not([class*=icon-]) > form:not([class^=icon-]):not([class*=icon-]):first-child { + margin-left: 44px; +} +.bubble li > button[class^=icon-], .bubble li > button[class*=" icon-"], +.bubble li > a[class^=icon-], +.bubble li > a[class*=" icon-"], +.bubble li > .menuitem[class^=icon-], +.bubble li > .menuitem[class*=" icon-"], +.app-navigation-entry-menu li > button[class^=icon-], +.app-navigation-entry-menu li > button[class*=" icon-"], +.app-navigation-entry-menu li > a[class^=icon-], +.app-navigation-entry-menu li > a[class*=" icon-"], +.app-navigation-entry-menu li > .menuitem[class^=icon-], +.app-navigation-entry-menu li > .menuitem[class*=" icon-"], +.popovermenu li > button[class^=icon-], +.popovermenu li > button[class*=" icon-"], +.popovermenu li > a[class^=icon-], +.popovermenu li > a[class*=" icon-"], +.popovermenu li > .menuitem[class^=icon-], +.popovermenu li > .menuitem[class*=" icon-"] { + padding: 0 14px 0 44px !important; +} +.bubble li > button:hover, .bubble li > button:focus, +.bubble li > a:hover, +.bubble li > a:focus, +.bubble li > .menuitem:hover, +.bubble li > .menuitem:focus, +.app-navigation-entry-menu li > button:hover, +.app-navigation-entry-menu li > button:focus, +.app-navigation-entry-menu li > a:hover, +.app-navigation-entry-menu li > a:focus, +.app-navigation-entry-menu li > .menuitem:hover, +.app-navigation-entry-menu li > .menuitem:focus, +.popovermenu li > button:hover, +.popovermenu li > button:focus, +.popovermenu li > a:hover, +.popovermenu li > a:focus, +.popovermenu li > .menuitem:hover, +.popovermenu li > .menuitem:focus { + background-color: var(--color-background-hover); +} +.bubble li > button.active, +.bubble li > a.active, +.bubble li > .menuitem.active, +.app-navigation-entry-menu li > button.active, +.app-navigation-entry-menu li > a.active, +.app-navigation-entry-menu li > .menuitem.active, +.popovermenu li > button.active, +.popovermenu li > a.active, +.popovermenu li > .menuitem.active { + background-color: var(--color-primary-light); +} +.bubble li > button.action, +.bubble li > a.action, +.bubble li > .menuitem.action, +.app-navigation-entry-menu li > button.action, +.app-navigation-entry-menu li > a.action, +.app-navigation-entry-menu li > .menuitem.action, +.popovermenu li > button.action, +.popovermenu li > a.action, +.popovermenu li > .menuitem.action { + padding: inherit !important; +} +.bubble li > button > span, +.bubble li > a > span, +.bubble li > .menuitem > span, +.app-navigation-entry-menu li > button > span, +.app-navigation-entry-menu li > a > span, +.app-navigation-entry-menu li > .menuitem > span, +.popovermenu li > button > span, +.popovermenu li > a > span, +.popovermenu li > .menuitem > span { + cursor: pointer; + white-space: nowrap; +} +.bubble li > button > p, +.bubble li > a > p, +.bubble li > .menuitem > p, +.app-navigation-entry-menu li > button > p, +.app-navigation-entry-menu li > a > p, +.app-navigation-entry-menu li > .menuitem > p, +.popovermenu li > button > p, +.popovermenu li > a > p, +.popovermenu li > .menuitem > p { + width: 150px; + line-height: 1.6em; + padding: 8px 0; + white-space: normal; +} +.bubble li > button > select, +.bubble li > a > select, +.bubble li > .menuitem > select, +.app-navigation-entry-menu li > button > select, +.app-navigation-entry-menu li > a > select, +.app-navigation-entry-menu li > .menuitem > select, +.popovermenu li > button > select, +.popovermenu li > a > select, +.popovermenu li > .menuitem > select { + margin: 0; + margin-left: 6px; +} +.bubble li > button:not(:empty), +.bubble li > a:not(:empty), +.bubble li > .menuitem:not(:empty), +.app-navigation-entry-menu li > button:not(:empty), +.app-navigation-entry-menu li > a:not(:empty), +.app-navigation-entry-menu li > .menuitem:not(:empty), +.popovermenu li > button:not(:empty), +.popovermenu li > a:not(:empty), +.popovermenu li > .menuitem:not(:empty) { + padding-right: 14px !important; +} +.bubble li > button > img, +.bubble li > a > img, +.bubble li > .menuitem > img, +.app-navigation-entry-menu li > button > img, +.app-navigation-entry-menu li > a > img, +.app-navigation-entry-menu li > .menuitem > img, +.popovermenu li > button > img, +.popovermenu li > a > img, +.popovermenu li > .menuitem > img { + width: 16px; + padding: 14px; +} +.bubble li > button > input.radio + label, +.bubble li > button > input.checkbox + label, +.bubble li > a > input.radio + label, +.bubble li > a > input.checkbox + label, +.bubble li > .menuitem > input.radio + label, +.bubble li > .menuitem > input.checkbox + label, +.app-navigation-entry-menu li > button > input.radio + label, +.app-navigation-entry-menu li > button > input.checkbox + label, +.app-navigation-entry-menu li > a > input.radio + label, +.app-navigation-entry-menu li > a > input.checkbox + label, +.app-navigation-entry-menu li > .menuitem > input.radio + label, +.app-navigation-entry-menu li > .menuitem > input.checkbox + label, +.popovermenu li > button > input.radio + label, +.popovermenu li > button > input.checkbox + label, +.popovermenu li > a > input.radio + label, +.popovermenu li > a > input.checkbox + label, +.popovermenu li > .menuitem > input.radio + label, +.popovermenu li > .menuitem > input.checkbox + label { + padding: 0 !important; + width: 100%; +} +.bubble li > button > input.checkbox + label::before, +.bubble li > a > input.checkbox + label::before, +.bubble li > .menuitem > input.checkbox + label::before, +.app-navigation-entry-menu li > button > input.checkbox + label::before, +.app-navigation-entry-menu li > a > input.checkbox + label::before, +.app-navigation-entry-menu li > .menuitem > input.checkbox + label::before, +.popovermenu li > button > input.checkbox + label::before, +.popovermenu li > a > input.checkbox + label::before, +.popovermenu li > .menuitem > input.checkbox + label::before { + margin: -2px 13px 0; +} +.bubble li > button > input.radio + label::before, +.bubble li > a > input.radio + label::before, +.bubble li > .menuitem > input.radio + label::before, +.app-navigation-entry-menu li > button > input.radio + label::before, +.app-navigation-entry-menu li > a > input.radio + label::before, +.app-navigation-entry-menu li > .menuitem > input.radio + label::before, +.popovermenu li > button > input.radio + label::before, +.popovermenu li > a > input.radio + label::before, +.popovermenu li > .menuitem > input.radio + label::before { + margin: -2px 12px 0; +} +.bubble li > button > input:not([type=radio]):not([type=checkbox]):not([type=image]), +.bubble li > a > input:not([type=radio]):not([type=checkbox]):not([type=image]), +.bubble li > .menuitem > input:not([type=radio]):not([type=checkbox]):not([type=image]), +.app-navigation-entry-menu li > button > input:not([type=radio]):not([type=checkbox]):not([type=image]), +.app-navigation-entry-menu li > a > input:not([type=radio]):not([type=checkbox]):not([type=image]), +.app-navigation-entry-menu li > .menuitem > input:not([type=radio]):not([type=checkbox]):not([type=image]), +.popovermenu li > button > input:not([type=radio]):not([type=checkbox]):not([type=image]), +.popovermenu li > a > input:not([type=radio]):not([type=checkbox]):not([type=image]), +.popovermenu li > .menuitem > input:not([type=radio]):not([type=checkbox]):not([type=image]) { + width: 150px; +} +.bubble li > button form, +.bubble li > a form, +.bubble li > .menuitem form, +.app-navigation-entry-menu li > button form, +.app-navigation-entry-menu li > a form, +.app-navigation-entry-menu li > .menuitem form, +.popovermenu li > button form, +.popovermenu li > a form, +.popovermenu li > .menuitem form { + display: flex; + flex: 1 1 auto; + /* put a small space between text and form + if there is an element before */ +} +.bubble li > button form:not(:first-child), +.bubble li > a form:not(:first-child), +.bubble li > .menuitem form:not(:first-child), +.app-navigation-entry-menu li > button form:not(:first-child), +.app-navigation-entry-menu li > a form:not(:first-child), +.app-navigation-entry-menu li > .menuitem form:not(:first-child), +.popovermenu li > button form:not(:first-child), +.popovermenu li > a form:not(:first-child), +.popovermenu li > .menuitem form:not(:first-child) { + margin-left: 5px; +} +.bubble li > button > span.hidden + form, +.bubble li > button > span[style*="display:none"] + form, +.bubble li > a > span.hidden + form, +.bubble li > a > span[style*="display:none"] + form, +.bubble li > .menuitem > span.hidden + form, +.bubble li > .menuitem > span[style*="display:none"] + form, +.app-navigation-entry-menu li > button > span.hidden + form, +.app-navigation-entry-menu li > button > span[style*="display:none"] + form, +.app-navigation-entry-menu li > a > span.hidden + form, +.app-navigation-entry-menu li > a > span[style*="display:none"] + form, +.app-navigation-entry-menu li > .menuitem > span.hidden + form, +.app-navigation-entry-menu li > .menuitem > span[style*="display:none"] + form, +.popovermenu li > button > span.hidden + form, +.popovermenu li > button > span[style*="display:none"] + form, +.popovermenu li > a > span.hidden + form, +.popovermenu li > a > span[style*="display:none"] + form, +.popovermenu li > .menuitem > span.hidden + form, +.popovermenu li > .menuitem > span[style*="display:none"] + form { + margin-left: 0; +} +.bubble li > button input, +.bubble li > a input, +.bubble li > .menuitem input, +.app-navigation-entry-menu li > button input, +.app-navigation-entry-menu li > a input, +.app-navigation-entry-menu li > .menuitem input, +.popovermenu li > button input, +.popovermenu li > a input, +.popovermenu li > .menuitem input { + min-width: 44px; + max-height: 40px; + /* twice the element margin-y */ + margin: 2px 0; + flex: 1 1 auto; +} +.bubble li > button input:not(:first-child), +.bubble li > a input:not(:first-child), +.bubble li > .menuitem input:not(:first-child), +.app-navigation-entry-menu li > button input:not(:first-child), +.app-navigation-entry-menu li > a input:not(:first-child), +.app-navigation-entry-menu li > .menuitem input:not(:first-child), +.popovermenu li > button input:not(:first-child), +.popovermenu li > a input:not(:first-child), +.popovermenu li > .menuitem input:not(:first-child) { + margin-left: 5px; +} +.bubble li:not(.hidden):not([style*="display:none"]):first-of-type > button > form, .bubble li:not(.hidden):not([style*="display:none"]):first-of-type > button > input, .bubble li:not(.hidden):not([style*="display:none"]):first-of-type > a > form, .bubble li:not(.hidden):not([style*="display:none"]):first-of-type > a > input, .bubble li:not(.hidden):not([style*="display:none"]):first-of-type > .menuitem > form, .bubble li:not(.hidden):not([style*="display:none"]):first-of-type > .menuitem > input, +.app-navigation-entry-menu li:not(.hidden):not([style*="display:none"]):first-of-type > button > form, +.app-navigation-entry-menu li:not(.hidden):not([style*="display:none"]):first-of-type > button > input, +.app-navigation-entry-menu li:not(.hidden):not([style*="display:none"]):first-of-type > a > form, +.app-navigation-entry-menu li:not(.hidden):not([style*="display:none"]):first-of-type > a > input, +.app-navigation-entry-menu li:not(.hidden):not([style*="display:none"]):first-of-type > .menuitem > form, +.app-navigation-entry-menu li:not(.hidden):not([style*="display:none"]):first-of-type > .menuitem > input, +.popovermenu li:not(.hidden):not([style*="display:none"]):first-of-type > button > form, +.popovermenu li:not(.hidden):not([style*="display:none"]):first-of-type > button > input, +.popovermenu li:not(.hidden):not([style*="display:none"]):first-of-type > a > form, +.popovermenu li:not(.hidden):not([style*="display:none"]):first-of-type > a > input, +.popovermenu li:not(.hidden):not([style*="display:none"]):first-of-type > .menuitem > form, +.popovermenu li:not(.hidden):not([style*="display:none"]):first-of-type > .menuitem > input { + margin-top: 12px; +} +.bubble li:not(.hidden):not([style*="display:none"]):last-of-type > button > form, .bubble li:not(.hidden):not([style*="display:none"]):last-of-type > button > input, .bubble li:not(.hidden):not([style*="display:none"]):last-of-type > a > form, .bubble li:not(.hidden):not([style*="display:none"]):last-of-type > a > input, .bubble li:not(.hidden):not([style*="display:none"]):last-of-type > .menuitem > form, .bubble li:not(.hidden):not([style*="display:none"]):last-of-type > .menuitem > input, +.app-navigation-entry-menu li:not(.hidden):not([style*="display:none"]):last-of-type > button > form, +.app-navigation-entry-menu li:not(.hidden):not([style*="display:none"]):last-of-type > button > input, +.app-navigation-entry-menu li:not(.hidden):not([style*="display:none"]):last-of-type > a > form, +.app-navigation-entry-menu li:not(.hidden):not([style*="display:none"]):last-of-type > a > input, +.app-navigation-entry-menu li:not(.hidden):not([style*="display:none"]):last-of-type > .menuitem > form, +.app-navigation-entry-menu li:not(.hidden):not([style*="display:none"]):last-of-type > .menuitem > input, +.popovermenu li:not(.hidden):not([style*="display:none"]):last-of-type > button > form, +.popovermenu li:not(.hidden):not([style*="display:none"]):last-of-type > button > input, +.popovermenu li:not(.hidden):not([style*="display:none"]):last-of-type > a > form, +.popovermenu li:not(.hidden):not([style*="display:none"]):last-of-type > a > input, +.popovermenu li:not(.hidden):not([style*="display:none"]):last-of-type > .menuitem > form, +.popovermenu li:not(.hidden):not([style*="display:none"]):last-of-type > .menuitem > input { + margin-bottom: 12px; +} +.bubble li > button, +.app-navigation-entry-menu li > button, +.popovermenu li > button { + padding: 0; +} +.bubble li > button span, +.app-navigation-entry-menu li > button span, +.popovermenu li > button span { + opacity: 1; +} + +/* "app-*" descendants use border-box sizing, so the height of the icon must be + * set to the height of the item (as well as its width to make it squared). */ +#content[class*=app-] .bubble li > button, +#content[class*=app-] .bubble li > a, +#content[class*=app-] .bubble li > .menuitem, +#content[class*=app-] .app-navigation-entry-menu li > button, +#content[class*=app-] .app-navigation-entry-menu li > a, +#content[class*=app-] .app-navigation-entry-menu li > .menuitem, +#content[class*=app-] .popovermenu li > button, +#content[class*=app-] .popovermenu li > a, +#content[class*=app-] .popovermenu li > .menuitem { + /* DEPRECATED! old img in popover fallback + * TODO: to remove */ +} +#content[class*=app-] .bubble li > button > img, +#content[class*=app-] .bubble li > a > img, +#content[class*=app-] .bubble li > .menuitem > img, +#content[class*=app-] .app-navigation-entry-menu li > button > img, +#content[class*=app-] .app-navigation-entry-menu li > a > img, +#content[class*=app-] .app-navigation-entry-menu li > .menuitem > img, +#content[class*=app-] .popovermenu li > button > img, +#content[class*=app-] .popovermenu li > a > img, +#content[class*=app-] .popovermenu li > .menuitem > img { + width: 44px; + height: 44px; +} + +/* CONTENT LIST ------------------------------------------------------------ */ +.app-content-list { + position: -webkit-sticky; + position: sticky; + top: 50px; + border-right: 1px solid var(--color-border); + display: flex; + flex-direction: column; + transition: transform 250ms ease-in-out; + min-height: calc(100vh - 50px); + max-height: calc(100vh - 50px); + overflow-y: auto; + overflow-x: hidden; + flex: 1 1 200px; + min-width: 200px; + max-width: 300px; + /* Default item */ +} +.app-content-list .app-content-list-item { + position: relative; + height: 68px; + cursor: pointer; + padding: 10px 7px; + display: flex; + flex-wrap: wrap; + align-items: center; + flex: 0 0 auto; + /* Icon fixes */ +} +.app-content-list .app-content-list-item > [class^=icon-], +.app-content-list .app-content-list-item > [class*=" icon-"], +.app-content-list .app-content-list-item > .app-content-list-item-menu > [class^=icon-], +.app-content-list .app-content-list-item > .app-content-list-item-menu > [class*=" icon-"] { + order: 4; + width: 24px; + height: 24px; + margin: -7px; + padding: 22px; + opacity: 0.3; + cursor: pointer; +} +.app-content-list .app-content-list-item > [class^=icon-]:hover, .app-content-list .app-content-list-item > [class^=icon-]:focus, +.app-content-list .app-content-list-item > [class*=" icon-"]:hover, +.app-content-list .app-content-list-item > [class*=" icon-"]:focus, +.app-content-list .app-content-list-item > .app-content-list-item-menu > [class^=icon-]:hover, +.app-content-list .app-content-list-item > .app-content-list-item-menu > [class^=icon-]:focus, +.app-content-list .app-content-list-item > .app-content-list-item-menu > [class*=" icon-"]:hover, +.app-content-list .app-content-list-item > .app-content-list-item-menu > [class*=" icon-"]:focus { + opacity: 0.7; +} +.app-content-list .app-content-list-item > [class^=icon-][class^=icon-star], .app-content-list .app-content-list-item > [class^=icon-][class*=" icon-star"], +.app-content-list .app-content-list-item > [class*=" icon-"][class^=icon-star], +.app-content-list .app-content-list-item > [class*=" icon-"][class*=" icon-star"], +.app-content-list .app-content-list-item > .app-content-list-item-menu > [class^=icon-][class^=icon-star], +.app-content-list .app-content-list-item > .app-content-list-item-menu > [class^=icon-][class*=" icon-star"], +.app-content-list .app-content-list-item > .app-content-list-item-menu > [class*=" icon-"][class^=icon-star], +.app-content-list .app-content-list-item > .app-content-list-item-menu > [class*=" icon-"][class*=" icon-star"] { + opacity: 0.7; +} +.app-content-list .app-content-list-item > [class^=icon-][class^=icon-star]:hover, .app-content-list .app-content-list-item > [class^=icon-][class^=icon-star]:focus, .app-content-list .app-content-list-item > [class^=icon-][class*=" icon-star"]:hover, .app-content-list .app-content-list-item > [class^=icon-][class*=" icon-star"]:focus, +.app-content-list .app-content-list-item > [class*=" icon-"][class^=icon-star]:hover, +.app-content-list .app-content-list-item > [class*=" icon-"][class^=icon-star]:focus, +.app-content-list .app-content-list-item > [class*=" icon-"][class*=" icon-star"]:hover, +.app-content-list .app-content-list-item > [class*=" icon-"][class*=" icon-star"]:focus, +.app-content-list .app-content-list-item > .app-content-list-item-menu > [class^=icon-][class^=icon-star]:hover, +.app-content-list .app-content-list-item > .app-content-list-item-menu > [class^=icon-][class^=icon-star]:focus, +.app-content-list .app-content-list-item > .app-content-list-item-menu > [class^=icon-][class*=" icon-star"]:hover, +.app-content-list .app-content-list-item > .app-content-list-item-menu > [class^=icon-][class*=" icon-star"]:focus, +.app-content-list .app-content-list-item > .app-content-list-item-menu > [class*=" icon-"][class^=icon-star]:hover, +.app-content-list .app-content-list-item > .app-content-list-item-menu > [class*=" icon-"][class^=icon-star]:focus, +.app-content-list .app-content-list-item > .app-content-list-item-menu > [class*=" icon-"][class*=" icon-star"]:hover, +.app-content-list .app-content-list-item > .app-content-list-item-menu > [class*=" icon-"][class*=" icon-star"]:focus { + opacity: 1; +} +.app-content-list .app-content-list-item > [class^=icon-].icon-starred, +.app-content-list .app-content-list-item > [class*=" icon-"].icon-starred, +.app-content-list .app-content-list-item > .app-content-list-item-menu > [class^=icon-].icon-starred, +.app-content-list .app-content-list-item > .app-content-list-item-menu > [class*=" icon-"].icon-starred { + opacity: 1; +} +.app-content-list .app-content-list-item:hover, .app-content-list .app-content-list-item:focus, .app-content-list .app-content-list-item.active { + background-color: var(--color-background-dark); +} +.app-content-list .app-content-list-item:hover .app-content-list-item-checkbox.checkbox + label, .app-content-list .app-content-list-item:focus .app-content-list-item-checkbox.checkbox + label, .app-content-list .app-content-list-item.active .app-content-list-item-checkbox.checkbox + label { + display: flex; +} +.app-content-list .app-content-list-item .app-content-list-item-checkbox.checkbox + label, +.app-content-list .app-content-list-item .app-content-list-item-star { + position: absolute; + height: 40px; + width: 40px; + z-index: 50; +} +.app-content-list .app-content-list-item .app-content-list-item-checkbox.checkbox:checked + label, .app-content-list .app-content-list-item .app-content-list-item-checkbox.checkbox:hover + label, .app-content-list .app-content-list-item .app-content-list-item-checkbox.checkbox:focus + label, .app-content-list .app-content-list-item .app-content-list-item-checkbox.checkbox.active + label { + display: flex; +} +.app-content-list .app-content-list-item .app-content-list-item-checkbox.checkbox:checked + label + .app-content-list-item-icon, .app-content-list .app-content-list-item .app-content-list-item-checkbox.checkbox:hover + label + .app-content-list-item-icon, .app-content-list .app-content-list-item .app-content-list-item-checkbox.checkbox:focus + label + .app-content-list-item-icon, .app-content-list .app-content-list-item .app-content-list-item-checkbox.checkbox.active + label + .app-content-list-item-icon { + opacity: 0.7; +} +.app-content-list .app-content-list-item .app-content-list-item-checkbox.checkbox + label { + top: 14px; + left: 7px; + display: none; + /* Hide the star, priority to the checkbox */ +} +.app-content-list .app-content-list-item .app-content-list-item-checkbox.checkbox + label::before { + margin: 0; +} +.app-content-list .app-content-list-item .app-content-list-item-checkbox.checkbox + label ~ .app-content-list-item-star { + display: none; +} +.app-content-list .app-content-list-item .app-content-list-item-star { + display: flex; + top: 10px; + left: 32px; + background-size: 16px; + height: 20px; + width: 20px; + margin: 0; + padding: 0; +} +.app-content-list .app-content-list-item .app-content-list-item-icon { + position: absolute; + display: inline-block; + height: 40px; + width: 40px; + line-height: 40px; + border-radius: 50%; + vertical-align: middle; + margin-right: 10px; + color: #fff; + text-align: center; + font-size: 1.5em; + text-transform: capitalize; + object-fit: cover; + user-select: none; + cursor: pointer; + top: 50%; + margin-top: -20px; +} +.app-content-list .app-content-list-item .app-content-list-item-line-one, +.app-content-list .app-content-list-item .app-content-list-item-line-two { + display: block; + padding-left: 50px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + order: 1; + flex: 1 1 0px; + padding-right: 10px; + cursor: pointer; +} +.app-content-list .app-content-list-item .app-content-list-item-line-two { + opacity: 0.5; + order: 3; + flex: 1 0; + flex-basis: calc(100% - 44px); +} +.app-content-list .app-content-list-item .app-content-list-item-details { + order: 2; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + max-width: 100px; + opacity: 0.5; + font-size: 80%; + user-select: none; +} +.app-content-list .app-content-list-item .app-content-list-item-menu { + order: 4; + position: relative; +} +.app-content-list .app-content-list-item .app-content-list-item-menu .popovermenu { + margin: 0; + right: -2px; +} +.app-content-list.selection .app-content-list-item-checkbox.checkbox + label { + display: flex; +} + +/*# sourceMappingURL=apps.css.map */ diff --git a/core/css/apps.css.map b/core/css/apps.css.map new file mode 100644 index 0000000000000..dc67886047c3b --- /dev/null +++ b/core/css/apps.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["variables.scss","apps.scss","functions.scss"],"names":[],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBA;AAAA;AAAA;AA4BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AD7BA;AAEA;EACC;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;;;AAGD;AACA;EACC;EACA;;;AAGD;EACC;;;AAGD;AAAA;EAEC;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;;;AAID;AAEA;EACC;;;AAGD;AACA;AACA;EACC,ODyBkB;ECxBlB;EACA,KDsBe;ECrBf;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;AA4OA;AAAA;AAAA;AAiBA;AAAA;AAAA;AAkEA;AAAA;AAAA;AAmDA;AAAA;AAAA;AAsDA;AAAA;AAAA;AA2BA;AAAA;AAAA;AAeA;AAAA;AAAA;;AAjdA;EACC;EACA;;AACA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AAIF;EACC;;AAED;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAsHA;;AArHA;EACC;EACA;EACA;EACA;AAEA;AAoCA;AAMA;AAwBA;;AAjEA;EACC;;AACA;EACC;;AAIF;AACC;EACA;;AAED;AACC;AACA;AAAA;EAEA;;AAKA;AAAA;AAAA;AAAA;EAEC;;AAOD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEC;;AAKF;EACC;EACA;;AAMA;EAEC;;AAIF;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;;AAKF;EACC;EACA;EACA;;AACA;EACC;EACA;EACA;AAgBA;;AAbC;AAAA;AAAA;EAEC;;AAKD;AAAA;AAAA;AAAA;EAEC;;AAKF;EACC;AAAY;;AAGb;AACC;EACA;EACA;;AAGD;AACC;EACA;AACA;AAAA;EAEA;;AAMJ;AAAA;EAEC;EACA;EACA;AACA;AAQA;AAwCA;AAkBA;AAKA;;AArEC;AAAA;AAAA;AAAA;AAEC;EACA;;AAIF;AAAA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAAc;AACd;AAaA;;AAXA;AAAA;EACC;;AAED;AAAA;EACI;EACA;EACA;EAEH;;AAID;AAAA;EACC;EACA;;AACA;AAAA;EACC;;AAKH;AAAA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;AAAA;AACC;EACA;;AAKF;AAAA;EACC;;AAID;AAAA;EACC;EACA;;AAED;AAAA;EACC;EACA;;AAIH;EACC;;AAMD;AAAA;EAEC;EACA;EACA;EACA;EACA;;AACA;AAAA;AAAA;EAEC;EACA;;AAOF;AACC;AAAA;AAwCA;;AAtCA;EACC;EACA;EACA;EACA;EACA;EACA;AAEA;AAAA;EAEA;;AAED;EACC;EACA;EACA;EACA;EACA;EACA;AC/TF;EAEA;ED+TE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAID;EACC;;AAIA;EACC;;AAED;EACC;;AAID;EACC;EACA;EACA;;AAQH;EACC;;AACA;EACC;EACA;EACA;;AAED;EACC;EACA;;AAED;EACC;EACA;EACA;EACA;;AAED;AACC;;AACA;AC/XF;EAEA;;ADgYE;EAEC;EACA;;AAGF;EACC;EACA;EACA;EACA;EACA;AAAiB;;AAEjB;EACC;EACA;;AACA;EACC;EACA;EACA;EACA;;AASJ;EACC;EACA;EACA;EACA;AAAyB;EACzB;EACA;EACA;EACA;EACA;;AACA;AAAA;EAEC;EACA;;AAED;EACC;EACA;EACA;;AACA;AAEC;EACA;;AAGF;EACC;EACA;AAAc;EACd;EACA;;AAED;AAAA;EAEC;EACA;EACA;;AACA;AAAA;EACC;;AAED;AAAA;EACC;;AAED;AAAA;EACC;EACA;EACA;EACA;;AAQH;EACC;EACA;EACA;;AACA;EACC;EACA;EACA;EACA;EACA;EACA;;AAED;EACC;EACA;EACA;EACA;;AACA;EAEC;;AAQH;AAAA;EAEC;AAAyB;EACzB;EAGA;EACA;EACA;EACA;;AAMD;EACC;EACA;EACA;;AAGD;EACC;;AAGD;AAAA;EAEC;;;AAKF;AACA;EACC;EACA;EACA;EAEA,aD1ee;EC2ef;;;AAGD;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAOA;EACC;EACA;EACA;EACA;EACA;AACA;AAIA;AAKA;;AARA;EACC,aD/fiB;;ACkgBlB;EACC;;AAID;EACC;EACA;EACA;AACA;AAAA;EAEA;AAEA;;AACA;AACC;EACA;;AACA;EACC;;;AAMJ;AACA;AAAA;AAAA;AAAA;AAIA;EACC;EACA,WDhiBmB;ECiiBnB,WDhiBmB;ECiiBnB;EACA;EACA;EACA,KDviBe;ECwiBf;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;;;AAKF;AACA;AACA;EAEC;;AAGC;EACC;;;AAKH;EACC;EACA;EACA;AACA;EACA;EACA;EACA;AAEA;;AACA;EACC;;AAGD;EACC;EACA;;AAOE;EACC;EACA;EACA;;;AAOL;EACC;EACA;;;AAID;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;EACA;;AAEA;EACC;EACA;;AAED;EAEC;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIF;AACA;EACC;EACA;EACA;AAIA;;AAHA;EACC;;AAIA;EAEC;EACA;;;AAIH;EACC;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;;AACA;EACC;;;AAIF;AACA;EACC;EACA;;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAMA;;AAJA;EACC;;AAID;EACC;;AAED;EACC;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA;;AAED;EACC;;AAED;EAGC;EACA;EACA;;;AAIH;EACC;;AACA;EACC;;;AAIF;AAOC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAIC;;;AAIF;AAAA;AAAA;EAGC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAmBA;AAUA;;AA3BA;AAAA;AAAA;EACC;EAKA;AACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGD;AAAA;AAAA;EACC;EACA;EACA;;AACA;AAAA;AAAA;EACC;EACA;;AAIF;AAAA;AAAA;EACC;EACA;EACA;;AACA;AAAA;AAAA;EACC;EACA;;AAIF;AAAA;AAAA;EACC;;AAGD;AAAA;AAAA;EACC;;AAGD;AAAA;AAAA;AACC;EACA;EACA;;AAED;AAAA;AAAA;EACC;EACA;AAiIA;;AA/HA;AAAA;AAAA;EACC;;AAGD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGC;EACA,aA5FkB;EA6FlB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAsCA;AAkBA;AAIA;AAAA;AAMA;AAwBA;AAKA;;AA7FA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAIC;AAAc;EACd;EACA;EACA,iBAhHe;;AAkHhB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEC;AAAA;EAEA;;AAOC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC,aA/He;;AAmIlB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEC;;AAED;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEC;;AAED;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;;AAGD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;;AAED;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;EACA;;AAED;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;EACA;EACA;EACA;;AAED;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;EACA;;AAGD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;;AAID;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC,OAtKe;EAuKf;;AAGD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEC;EACA;;AAED;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;;AAED;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;;AAED;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;;AAED;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;EACA;AACA;AAAA;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;;AAIF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEC;;AAGD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC,WAzMiB;EA0MjB;AAA0C;EAC1C;EACA;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;;AAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;;AAMD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;;AAKJ;AAAA;AAAA;EACC;;AACA;AAAA;AAAA;EACC;;;AAOJ;AAAA;AAOG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGC;AAAA;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC,OA3PgB;EA4PhB,QA5PgB;;;AAmQrB;AACA;EACC;EACA;EACA,KDpgCe;ECqgCf;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,WD1gCgB;EC2gChB,WD1gCgB;AC4gChB;;AACA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;;AAGC;AAAA;AAAA;AAAA;EAEC;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEC;;AAED;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEC;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEC;;AAIF;AAAA;AAAA;AAAA;EACC;;AAKH;EAGC;;AAEA;EACC;;AAIF;AAAA;EAEC;EACA;EACA;EACA;;AAQC;EAEC;;AAEA;EACC;;AAIH;EACC;EACA;EAEA;AAIA;;AAHA;EACC;;AAGD;EACC;;AAKH;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGD;AAAA;EAEC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;;AACA;EACC;EAGA;;AAIH;EACC","file":"apps.css"} \ No newline at end of file diff --git a/core/css/apps.scss b/core/css/apps.scss index aab575f5dd274..aa532c462d065 100644 --- a/core/css/apps.scss +++ b/core/css/apps.scss @@ -90,7 +90,7 @@ kbd { overflow-x: hidden; // Do not use vh because of mobile headers // are included in the calculation - height: calc(100% - #{$header-height}); + height: calc(100% - #{variables.$header-height}); box-sizing: border-box; background-color: var(--color-main-background); -webkit-user-select: none; @@ -982,14 +982,14 @@ $outter-margin: math.div($popoveritem-height - $popovericon-size, 2); &[class*=' icon-'] { min-width: 0; /* Overwrite icons*/ min-height: 0; - background-position: #{($popoveritem-height - $popovericon-size) / 2} center; + background-position: #{math.div($popoveritem-height - $popovericon-size, 2)} center; background-size: $popovericon-size; } span[class^='icon-'], span[class*=' icon-'] { /* Keep padding to define the width to assure correct position of a possible text */ - padding: #{$popoveritem-height / 2} 0 #{$popoveritem-height / 2} $popoveritem-height; + padding: #{math.div($popoveritem-height, 2)} 0 #{math.div($popoveritem-height, 2)} $popoveritem-height; } // If no icons set, force left margin to align &:not([class^='icon-']):not([class*='icon-']) { @@ -1003,7 +1003,7 @@ $outter-margin: math.div($popoveritem-height - $popovericon-size, 2); } &[class^='icon-'], &[class*=' icon-'] { - padding: 0 #{($popoveritem-height - $popovericon-size) / 2} 0 $popoveritem-height !important; + padding: 0 #{math.div($popoveritem-height - $popovericon-size, 2)} 0 $popoveritem-height !important; } &:hover, &:focus { @@ -1038,7 +1038,7 @@ $outter-margin: math.div($popoveritem-height - $popovericon-size, 2); * TODO: to remove */ > img { width: $popovericon-size; - padding: #{($popoveritem-height - $popovericon-size) / 2}; + padding: #{math.div($popoveritem-height - $popovericon-size, 2)}; } /* checkbox/radio fixes */ > input.radio + label, diff --git a/core/css/fixes.css b/core/css/fixes.css new file mode 100644 index 0000000000000..6401bd3ec671e --- /dev/null +++ b/core/css/fixes.css @@ -0,0 +1,7 @@ +/* ---- BROWSER-SPECIFIC FIXES ---- */ +/* remove dotted outlines in Firefox */ +::-moz-focus-inner { + border: 0; +} + +/*# sourceMappingURL=fixes.css.map */ diff --git a/core/css/fixes.css.map b/core/css/fixes.css.map new file mode 100644 index 0000000000000..582048ec0ef7e --- /dev/null +++ b/core/css/fixes.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["fixes.scss"],"names":[],"mappings":"AAAA;AAEA;AACA;EACC","file":"fixes.css"} \ No newline at end of file diff --git a/core/css/functions.css b/core/css/functions.css new file mode 100644 index 0000000000000..eade50140ea8d --- /dev/null +++ b/core/css/functions.css @@ -0,0 +1,38 @@ +@charset "UTF-8"; +/** + * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com) + * + * @author John Molakvoæ (skjnldsv) + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ +/** + * @see core/src/icons.js + */ +/** + * SVG COLOR API + * + * @param string $icon the icon filename + * @param string $dir the icon folder within /core/img if $core or app name + * @param string $color the desired color in hexadecimal + * @param int $version the version of the file + * @param bool [$core] search icon in core + * + * @returns A background image with the url to the set to the requested icon. + */ + +/*# sourceMappingURL=functions.css.map */ diff --git a/core/css/functions.css.map b/core/css/functions.css.map new file mode 100644 index 0000000000000..76274d3efda63 --- /dev/null +++ b/core/css/functions.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["functions.scss"],"names":[],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBA;AAAA;AAAA;AA4BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA","file":"functions.css"} \ No newline at end of file diff --git a/core/css/global.css b/core/css/global.css new file mode 100644 index 0000000000000..d9ecc634d7871 --- /dev/null +++ b/core/css/global.css @@ -0,0 +1,50 @@ +/* Copyright (c) 2015, Raghu Nayyar, http://raghunayyar.com + This file is licensed under the Affero General Public License version 3 or later. + See the COPYING-README file. */ +/* Global Components */ +.pull-left { + float: left; +} + +.pull-right { + float: right; +} + +.clear-left { + clear: left; +} + +.clear-right { + clear: right; +} + +.clear-both { + clear: both; +} + +.hidden { + display: none; +} + +.hidden-visually { + position: absolute; + left: -10000px; + top: -10000px; + width: 1px; + height: 1px; + overflow: hidden; +} + +.bold { + font-weight: 600; +} + +.center { + text-align: center; +} + +.inlineblock { + display: inline-block; +} + +/*# sourceMappingURL=global.css.map */ diff --git a/core/css/global.css.map b/core/css/global.css.map new file mode 100644 index 0000000000000..638db781eb428 --- /dev/null +++ b/core/css/global.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["global.scss"],"names":[],"mappings":"AAAA;AAAA;AAAA;AAIA;AAEA;EACC;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;EACC","file":"global.css"} \ No newline at end of file diff --git a/core/css/header.css b/core/css/header.css new file mode 100644 index 0000000000000..93c44812e5798 --- /dev/null +++ b/core/css/header.css @@ -0,0 +1,644 @@ +@charset "UTF-8"; +/** + * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com) + * + * @author John Molakvoæ (skjnldsv) + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ +/** + * @copyright Copyright (c) 2016, John Molakvoæ + * @copyright Copyright (c) 2016, Julius Haertl + * @copyright Copyright (c) 2016, Lukas Reschke + * @copyright Copyright (c) 2016, Jos Poortvliet + * @copyright Copyright (c) 2016, Erik Pellikka + * @copyright Copyright (c) 2016, jowi + * @copyright Copyright (c) 2015, Hendrik Leppelsack + * @copyright Copyright (c) 2015, Volker E + * @copyright Copyright (c) 2014-2017, Jan-Christoph Borchardt + * + * @license GNU AGPL version 3 or any later version + * + */ +/* prevent ugly selection effect on accidental selection */ +#header, +#navigation, +#expanddiv { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; +} + +/* removed until content-focusing issue is fixed */ +#skip-to-content a { + position: absolute; + left: -10000px; + top: auto; + width: 1px; + height: 1px; + overflow: hidden; +} +#skip-to-content a:focus { + left: 76px; + top: -9px; + color: var(--color-primary-text); + width: auto; + height: auto; +} + +/* HEADERS ------------------------------------------------------------------ */ +#body-user #header, +#body-settings #header, +#body-public #header { + display: inline-flex; + position: fixed; + top: 0; + width: 100%; + z-index: 2000; + height: 50px; + background-color: var(--color-primary); + background-image: linear-gradient(40deg, var(--color-primary) 0%, var(--color-primary-element-light) 100%); + box-sizing: border-box; + justify-content: space-between; +} + +/* LOGO and APP NAME -------------------------------------------------------- */ +#nextcloud { + padding: 7px 0; + padding-left: 86px; + position: relative; + height: 100%; + box-sizing: border-box; + opacity: 1; + align-items: center; + display: flex; + flex-wrap: wrap; + overflow: hidden; +} +#nextcloud:focus { + opacity: 0.75; +} +#nextcloud:hover, #nextcloud:active { + opacity: 1; +} + +#header { + /* Header menu */ + /* show caret indicator next to logo to make clear it is tappable */ + /* Right header standard */ +} +#header .header-left > nav > .menu, +#header .header-right > div > .menu { + background-color: var(--color-main-background); + filter: drop-shadow(0 1px 5px var(--color-box-shadow)); + border-radius: 0 0 var(--border-radius) var(--border-radius); + box-sizing: border-box; + z-index: 2000; + position: absolute; + max-width: 350px; + min-height: 66px; + max-height: calc(100vh - 50px * 4); + right: 5px; + top: 50px; + margin: 0; + /* Dropdown arrow */ + /* Use by the apps menu and the settings right menu */ +} +#header .header-left > nav > .menu:not(.popovermenu), +#header .header-right > div > .menu:not(.popovermenu) { + display: none; +} +#header .header-left > nav > .menu:after, +#header .header-right > div > .menu:after { + border: 10px solid transparent; + border-bottom-color: var(--color-main-background); + bottom: 100%; + content: " "; + height: 0; + width: 0; + position: absolute; + pointer-events: none; + right: 10px; +} +#header .header-left > nav > .menu #apps > ul, #header .header-left > nav > .menu > div, #header .header-left > nav > .menu > ul, +#header .header-right > div > .menu #apps > ul, +#header .header-right > div > .menu > div, +#header .header-right > div > .menu > ul { + overflow-y: auto; + -webkit-overflow-scrolling: touch; + min-height: 66px; + max-height: calc(100vh - 50px * 4); +} +#header .header-left > nav > .menu #apps > ul li a, #header .header-left > nav > .menu.settings-menu > ul li a, +#header .header-right > div > .menu #apps > ul li a, +#header .header-right > div > .menu.settings-menu > ul li a { + display: inline-flex; + align-items: center; + height: 44px; + color: var(--color-main-text); + padding: 10px 12px; + box-sizing: border-box; + white-space: nowrap; + position: relative; + width: 100%; +} +#header .header-left > nav > .menu #apps > ul li a:hover, #header .header-left > nav > .menu #apps > ul li a:focus, #header .header-left > nav > .menu.settings-menu > ul li a:hover, #header .header-left > nav > .menu.settings-menu > ul li a:focus, +#header .header-right > div > .menu #apps > ul li a:hover, +#header .header-right > div > .menu #apps > ul li a:focus, +#header .header-right > div > .menu.settings-menu > ul li a:hover, +#header .header-right > div > .menu.settings-menu > ul li a:focus { + background-color: var(--color-background-hover); +} +#header .header-left > nav > .menu #apps > ul li a:active, #header .header-left > nav > .menu #apps > ul li a.active, #header .header-left > nav > .menu.settings-menu > ul li a:active, #header .header-left > nav > .menu.settings-menu > ul li a.active, +#header .header-right > div > .menu #apps > ul li a:active, +#header .header-right > div > .menu #apps > ul li a.active, +#header .header-right > div > .menu.settings-menu > ul li a:active, +#header .header-right > div > .menu.settings-menu > ul li a.active { + background-color: var(--color-primary-light); +} +#header .header-left > nav > .menu #apps > ul li a span, #header .header-left > nav > .menu.settings-menu > ul li a span, +#header .header-right > div > .menu #apps > ul li a span, +#header .header-right > div > .menu.settings-menu > ul li a span { + display: inline-block; + padding-bottom: 0; + color: var(--color-main-text); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + max-width: 110px; +} +#header .header-left > nav > .menu #apps > ul li a .icon-loading-small, #header .header-left > nav > .menu.settings-menu > ul li a .icon-loading-small, +#header .header-right > div > .menu #apps > ul li a .icon-loading-small, +#header .header-right > div > .menu.settings-menu > ul li a .icon-loading-small { + margin-right: 10px; + background-size: 16px 16px; +} +#header .header-left > nav > .menu #apps > ul li a img, +#header .header-left > nav > .menu #apps > ul li a svg, #header .header-left > nav > .menu.settings-menu > ul li a img, +#header .header-left > nav > .menu.settings-menu > ul li a svg, +#header .header-right > div > .menu #apps > ul li a img, +#header .header-right > div > .menu #apps > ul li a svg, +#header .header-right > div > .menu.settings-menu > ul li a img, +#header .header-right > div > .menu.settings-menu > ul li a svg { + opacity: 0.7; + margin-right: 10px; + height: 16px; + width: 16px; + filter: var(--background-invert-if-dark); +} +#header .logo { + display: inline-flex; + background-image: var(--image-logoheader, var(--image-logo, url("../img/logo/logo.svg"))); + background-repeat: no-repeat; + background-size: contain; + background-position: center; + width: 62px; + position: absolute; + left: 12px; + top: 1px; + bottom: 1px; + filter: var(--image-logoheader-custom, var(--primary-invert-if-bright)); +} +#header .header-appname-container { + display: none; + padding-right: 10px; + flex-shrink: 0; +} +#header .icon-caret { + display: inline-block; + width: 12px; + height: 12px; + margin: 0; + margin-top: -21px; + padding: 0; + vertical-align: middle; +} +#header #header-left, #header .header-left, +#header #header-right, #header .header-right { + display: inline-flex; + align-items: center; +} +#header #header-left, #header .header-left { + flex: 1 0; + white-space: nowrap; + min-width: 0; +} +#header #header-right, #header .header-right { + justify-content: flex-end; + flex-shrink: 1; +} +#header .header-right > div, +#header .header-right > form { + height: 100%; + position: relative; +} +#header .header-right > div > .menutoggle, +#header .header-right > form > .menutoggle { + display: flex; + justify-content: center; + align-items: center; + width: 50px; + height: 100%; + cursor: pointer; + opacity: 0.6; + padding: 0; + margin: 0; +} + +/* hover effect for app switcher label */ +.header-appname-container .header-appname { + opacity: 0.75; +} + +.menutoggle .icon-caret { + opacity: 0.75; +} +.menutoggle:hover .header-appname, .menutoggle:hover .icon-caret { + opacity: 1; +} +.menutoggle:focus .header-appname, .menutoggle:focus .icon-caret { + opacity: 1; +} +.menutoggle.active .header-appname, .menutoggle.active .icon-caret { + opacity: 1; +} + +/* TODO: move into minimal css file for public shared template */ +/* only used for public share pages now as we have the app icons when logged in */ +.header-appname { + color: var(--color-primary-text); + font-size: 16px; + font-weight: bold; + margin: 0; + padding: 0; + padding-right: 5px; + overflow: hidden; + text-overflow: ellipsis; + flex: 1 1 100%; +} + +.header-shared-by { + color: var(--color-primary-text); + position: relative; + font-weight: 300; + font-size: 11px; + line-height: 11px; + overflow: hidden; + text-overflow: ellipsis; +} + +/* do not show menu toggle on public share links as there is no menu */ +#body-public #header .icon-caret { + display: none; +} + +/* NAVIGATION --------------------------------------------------------------- */ +nav[role=navigation] { + display: inline-block; + width: 50px; + height: 50px; + margin-left: -50px; + position: relative; +} + +#header .header-left > nav > #navigation { + position: relative; + left: 25px; + /* half the togglemenu */ + transform: translateX(-50%); + width: 160px; +} + +#header .header-left > nav > #navigation, +.ui-datepicker, +.ui-timepicker.ui-widget { + background-color: var(--color-main-background); + filter: drop-shadow(0 1px 10px var(--color-box-shadow)); +} +#header .header-left > nav > #navigation:after, +.ui-datepicker:after, +.ui-timepicker.ui-widget:after { + /* position of dropdown arrow */ + left: 50%; + bottom: 100%; + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; + pointer-events: none; + border-color: rgba(0, 0, 0, 0); + border-bottom-color: var(--color-main-background); + border-width: 10px; + margin-left: -10px; + /* border width */ +} + +#navigation { + box-sizing: border-box; +} +#navigation .in-header { + display: none; +} + +/* USER MENU -----------------------------------------------------------------*/ +#settings { + display: inline-block; + height: 100%; + cursor: pointer; + flex: 0 0 auto; + /* User menu on the right */ +} +#settings #expand { + opacity: 1; + /* override icon opacity */ + padding-right: 12px; + /* Profile picture in header */ + /* show triangle below user menu if active */ +} +#settings #expand:hover, #settings #expand:focus, #settings #expand:active { + color: var(--color-primary-text); +} +#settings #expand:hover #expandDisplayName, +#settings #expand:hover .avatardiv, #settings #expand:focus #expandDisplayName, +#settings #expand:focus .avatardiv, #settings #expand:active #expandDisplayName, +#settings #expand:active .avatardiv { + border-radius: 50%; + border: 2px solid var(--color-primary-text); + margin: -2px; +} +#settings #expand:hover .avatardiv, #settings #expand:focus .avatardiv, #settings #expand:active .avatardiv { + background-color: var(--color-primary-text); +} +#settings #expand:hover #expandDisplayName, #settings #expand:focus #expandDisplayName, #settings #expand:active #expandDisplayName { + opacity: 1; +} +#settings #expand .avatardiv { + cursor: pointer; + height: 32px; + width: 32px; + /* do not show display name when profile picture is present */ +} +#settings #expand .avatardiv img { + opacity: 1; + cursor: pointer; +} +#settings #expand .avatardiv.avatardiv-shown + #expandDisplayName { + display: none; +} +#settings #expand #expandDisplayName { + padding: 8px; + opacity: 0.6; + cursor: pointer; + /* full opacity for gear icon if active */ +} +#body-settings #settings #expand #expandDisplayName { + opacity: 1; +} +#body-settings #settings #expand:before { + content: " "; + height: 0; + width: 0; + position: absolute; + pointer-events: none; + border: 0 solid transparent; + border-bottom-color: var(--color-main-background); + border-width: 10px; + bottom: 0; + z-index: 100; + display: block; +} +#settings #expanddiv:after { + right: 22px; +} + +/* Apps menu */ +#appmenu { + display: inline-flex; + min-width: 50px; + z-index: 2; + /* Show all app titles on hovering app menu area */ + /* Also show app title on focusing single entry (showing all on focus is only possible with CSS4 and parent selectors) */ + /* show triangle below active app */ + /* triangle focus feedback */ +} +#appmenu li { + position: relative; + cursor: pointer; + padding: 0 2px; + display: flex; + justify-content: center; + /* focused app visual feedback */ + /* hidden apps menu */ + /* App title */ + /* Set up transitions for showing app titles on hover */ + /* App icon */ + /* Triangle */ +} +#appmenu li a { + position: relative; + display: flex; + margin: 0; + height: 50px; + width: 50px; + align-items: center; + justify-content: center; + opacity: 0.6; + letter-spacing: -0.5px; + font-size: 12px; +} +#appmenu li:hover a, +#appmenu li a:focus, +#appmenu li a.active { + opacity: 1; + font-weight: bold; +} +#appmenu li:hover a, +#appmenu li a:focus { + font-size: 14px; +} +#appmenu li:hover a + span, +#appmenu li a:focus + span, #appmenu li:hover span, #appmenu li:focus span, +#appmenu li a:focus span, +#appmenu li a.active span { + display: inline-block; + text-overflow: initial; + width: auto; + overflow: hidden; + padding: 0 5px; + z-index: 2; +} +#appmenu li img, +#appmenu li .icon-more-white { + display: inline-block; + width: 20px; + height: 20px; +} +#appmenu li span { + opacity: 0; + position: absolute; + color: var(--color-primary-text); + bottom: 2px; + width: 100%; + text-align: center; + overflow: hidden; + text-overflow: ellipsis; + transition: all var(--animation-quick) ease; + pointer-events: none; +} +#appmenu li svg, +#appmenu li .icon-more-white { + transition: transform var(--animation-quick) ease; + filter: var(--primary-invert-if-bright); +} +#appmenu li a::before { + transition: border var(--animation-quick) ease; +} +#appmenu:hover li { + /* Move up app icon */ + /* Show app title */ + /* Prominent app title for current and hovered/focused app */ + /* Smaller triangle because of limited space */ +} +#appmenu:hover li svg, +#appmenu:hover li .icon-more, +#appmenu:hover li .icon-more-white, +#appmenu:hover li .icon-loading-small, +#appmenu:hover li .icon-loading-small-dark { + transform: translateY(-7px); +} +#appmenu:hover li span { + opacity: 0.6; + bottom: 2px; + z-index: -1; + /* fix clickability issue - otherwise we need to move the span into the link */ +} +#appmenu:hover li:hover span, #appmenu:hover li:focus span, +#appmenu:hover li .active + span { + opacity: 1; +} +#appmenu:hover li a::before { + border-width: 5px; +} +#appmenu li a:focus { + /* Move up app icon */ + /* Show app title */ + /* Smaller triangle because of limited space */ +} +#appmenu li a:focus svg, +#appmenu li a:focus .icon-more, +#appmenu li a:focus .icon-more-white, +#appmenu li a:focus .icon-loading-small, +#appmenu li a:focus .icon-loading-small-dark { + transform: translateY(-7px); +} +#appmenu li a:focus + span, +#appmenu li a:focus span { + opacity: 1; + bottom: 2px; +} +#appmenu li a:focus::before { + border-width: 5px; +} +#appmenu li a::before { + content: " "; + height: 0; + width: 0; + position: absolute; + pointer-events: none; + border: 0 solid transparent; + border-bottom-color: var(--color-main-background); + border-width: 10px; + transform: translateX(-50%); + left: 50%; + bottom: 0; + display: none; +} +#appmenu li a.active::before, +#appmenu li:hover a::before, +#appmenu li:hover a.active::before, +#appmenu li a:focus::before { + display: block; +} +#appmenu li a.active::before { + z-index: 99; +} +#appmenu li:hover a::before, +#appmenu li a.active:hover::before, +#appmenu li a:focus::before { + z-index: 101; +} +#appmenu li.hidden { + display: none; +} +#appmenu #more-apps { + z-index: 3; +} + +.unread-counter { + display: none; +} + +#apps .app-icon-notification, +#appmenu .app-icon-notification { + fill: var(--color-error); +} + +#apps svg:not(.has-unread) .app-icon-notification-mask, +#appmenu svg:not(.has-unread) .app-icon-notification-mask { + display: none; +} +#apps svg:not(.has-unread) .app-icon-notification, +#appmenu svg:not(.has-unread) .app-icon-notification { + display: none; +} + +/* Skip navigation links – show only on keyboard focus */ +.skip-navigation { + padding: 11px; + position: absolute; + overflow: hidden; + z-index: 9999; + top: -999px; + left: 3px; + /* Force primary color, otherwise too light focused color */ + background: var(--color-primary) !important; +} +.skip-navigation.skip-content { + left: 300px; + margin-left: 3px; +} +.skip-navigation:focus, .skip-navigation:active { + top: 50px; +} + +/* Empty content messages in the header e.g. notifications, contacts menu, … */ +header #emptycontent h2, +header .emptycontent h2 { + font-weight: normal; + font-size: 16px; +} +header #emptycontent [class^=icon-], +header #emptycontent [class*=icon-], +header .emptycontent [class^=icon-], +header .emptycontent [class*=icon-] { + background-size: 48px; + height: 48px; + width: 48px; +} + +/*# sourceMappingURL=header.css.map */ diff --git a/core/css/header.css.map b/core/css/header.css.map new file mode 100644 index 0000000000000..b7763cbbdd71d --- /dev/null +++ b/core/css/header.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["variables.scss","header.scss"],"names":[],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBA;AACA;AAAA;AAAA;EAGC;EACA;EACA;;;AAGD;AACA;EACC;EACA;EACA;EACA;EACA;EACA;;AACA;EACC;EACA;EACA;EACA;EACA;;;AAIF;AACA;AAAA;AAAA;EAGC;EACA;EACA;EACA;EACA;EACA,QDwDe;ECvDf;EACA;EACA;EACA;;;AAGD;AACA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;;AAED;EACC;;;AASF;AACC;AA6GA;AA4BA;;AAtIA;AAAA;EAEC;EACA;EACA;EACA;EACA;EACA;EACA;EAhBD;EACA;EAiBC;EACA,KDQc;ECPd;AAMA;AAqBA;;AAzBA;AAAA;EACC;;AAID;AAAA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGD;AAAA;AAAA;AAAA;EAGC;EACA;EA3CF;EACA;;AAkDG;AAAA;AAAA;EACC;EACA;EACA,QAhDuB;EAiDvB;EACA;EACA;EACA;EACA;EACA;;AACA;AAAA;AAAA;AAAA;AAAA;EAEC;;AAED;AAAA;AAAA;AAAA;AAAA;EAEC;;AAED;AAAA;AAAA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AAED;AAAA;AAAA;EACC;EACA;;AAED;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEC;EACA;EACA;EACA;EACA;;AAML;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;;AAGD;EACC;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AAGD;AAAA;EAEC;EACA;;AAGD;EACC;EACA;EACA;;AAGD;EACC;EACA;;AAKA;AAAA;EAEC;EACA;;AACA;AAAA;EACC;EACA;EACA;EACA,OD7HY;EC8HZ;EACA;EACA;EACA;EACA;;;AAMJ;AAEA;EACC;;;AAIA;EACC;;AAGA;EACC;;AAID;EACC;;AAID;EACC;;;AAKH;AACA;AACA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;AACA;EACC;;;AAGD;AACA;EACC;EACA,ODpMe;ECqMf,QDrMe;ECsMf;EACA;;;AAGD;EACC;EACA;AAAY;EACZ;EACA;;;AAGD;AAAA;AAAA;EAGC;EACA;;AACA;AAAA;AAAA;AACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAAoB;;;AAItB;EACC;;AACA;EACC;;;AAIF;AACA;EACC;EACA;EACA;EACA;AAEA;;AACA;EACC;AAAY;EACZ;AAqBA;AA2BA;;AA9CA;EAGC;;AAEA;AAAA;AAAA;AAAA;EAEC;EACA;EACA;;AAED;EACC;;AAED;EACC;;AAKF;EACC;EACA;EACA;AAMA;;AAJA;EACC;EACA;;AAGD;EACC;;AAIF;EACC;EACA;EACA;AAEA;;AACA;EACC;;AAKF;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAIF;EACC;;;AAIF;AACA;EACC;EACA,WDhUe;ECiUf;AAwFA;AAiCA;AAwBA;AAgBA;;AA/JA;EACC;EACA;EACA;EACA;EACA;AAgBA;AA4BA;AAQA;AAcA;AACA;AAQA;;AAzEA;EACC;EACA;EACA;EACA,QD9Ua;EC+Ub,OD/Ua;ECgVb;EACA;EACA;EAEA;EACA;;AAID;AAAA;AAAA;EAGC;EACA;;AAID;AAAA;EAEC;;AAGD;AAAA;AAAA;AAAA;EAMC;EACA;EACA;EACA;EACA;EACA;;AAID;AAAA;EAEC;EACA;EACA;;AAID;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAKD;AAAA;EAEC;EAEA;;AAID;EACC;;AAMD;AACC;AASA;AAOA;AAOA;;AAtBA;AAAA;AAAA;AAAA;AAAA;EAKC;;AAID;EACC;EACA;EACA;AAAa;;AAId;AAAA;EAGC;;AAID;EACC;;AAMH;AACC;AASA;AAOA;;AAfA;AAAA;AAAA;AAAA;AAAA;EAKC;;AAID;AAAA;EAEC;EACA;;AAID;EACC;;AAKF;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAID;AAAA;AAAA;AAAA;EAIC;;AAED;EACC;;AAED;AAAA;AAAA;EAGC;;AAGD;EACC;;AAGD;EACC;;;AAIF;EACC;;;AAED;AAAA;EAEC;;;AAKA;AAAA;EACC;;AAED;AAAA;EACC;;;AAKF;AACA;EACC;EACA;EACA;EACA;EACA;EACA;AACA;EACA;;AAEA;EACC,MDzhBiB;EC0hBjB;;AAGD;EAEC,KDhiBc;;;ACqiBhB;AAGC;AAAA;EACC;EACA;;AAED;AAAA;AAAA;AAAA;EAEC;EACA;EACA","file":"header.css"} \ No newline at end of file diff --git a/core/css/icons.css b/core/css/icons.css new file mode 100644 index 0000000000000..80728ebd00c9e --- /dev/null +++ b/core/css/icons.css @@ -0,0 +1,206 @@ +@charset "UTF-8"; +/** + * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com) + * + * @author John Molakvoæ (skjnldsv) + * @author Joas Schilling + * @author Lukas Reschke + * @author Roeland Jago Douma + * @author Vincent Chan + * @author Thomas Müller + * @author Hendrik Leppelsack + * @author Jan-Christoph Borchardt + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ +/** + * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com) + * + * @author John Molakvoæ (skjnldsv) + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ +/** + * @see core/src/icons.js + */ +/** + * SVG COLOR API + * + * @param string $icon the icon filename + * @param string $dir the icon folder within /core/img if $core or app name + * @param string $color the desired color in hexadecimal + * @param int $version the version of the file + * @param bool [$core] search icon in core + * + * @returns A background image with the url to the set to the requested icon. + */ +/* GLOBAL ------------------------------------------------------------------- */ +@import url("../../dist/icons.css"); +/** + * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com) + * + * @author John Molakvoæ (skjnldsv) + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ +[class^=icon-], [class*=" icon-"] { + background-repeat: no-repeat; + background-position: center; + min-width: 16px; + min-height: 16px; +} + +.icon-breadcrumb { + background-image: url("../img/breadcrumb.svg?v=1"); +} + +/* LOADING ------------------------------------------------------------------ */ +.loading, +.loading-small, +.icon-loading, +.icon-loading-dark, +.icon-loading-small, +.icon-loading-small-dark { + position: relative; +} +.loading:after, +.loading-small:after, +.icon-loading:after, +.icon-loading-dark:after, +.icon-loading-small:after, +.icon-loading-small-dark:after { + z-index: 2; + content: ""; + height: 28px; + width: 28px; + margin: -16px 0 0 -16px; + position: absolute; + top: 50%; + left: 50%; + border-radius: 100%; + -webkit-animation: rotate 0.8s infinite linear; + animation: rotate 0.8s infinite linear; + -webkit-transform-origin: center; + -ms-transform-origin: center; + transform-origin: center; + border: 2px solid var(--color-loading-light); + border-top-color: var(--color-loading-dark); + filter: var(--background-invert-if-dark); +} +.primary .loading:after, .primary + .loading:after, +.primary .loading-small:after, +.primary + .loading-small:after, +.primary .icon-loading:after, +.primary + .icon-loading:after, +.primary .icon-loading-dark:after, +.primary + .icon-loading-dark:after, +.primary .icon-loading-small:after, +.primary + .icon-loading-small:after, +.primary .icon-loading-small-dark:after, +.primary + .icon-loading-small-dark:after { + filter: var(--primary-invert-if-bright); +} + +.icon-loading-dark:after, +.icon-loading-small-dark:after { + border: 2px solid var(--color-loading-dark); + border-top-color: var(--color-loading-light); +} + +.icon-loading-small:after, +.icon-loading-small-dark:after { + height: 12px; + width: 12px; + margin: -8px 0 0 -8px; +} + +/* Css replaced elements don't have ::after nor ::before */ +audio.icon-loading, canvas.icon-loading, embed.icon-loading, iframe.icon-loading, img.icon-loading, input.icon-loading, object.icon-loading, video.icon-loading { + background-image: url("../img/loading.gif"); +} +audio.icon-loading-dark, canvas.icon-loading-dark, embed.icon-loading-dark, iframe.icon-loading-dark, img.icon-loading-dark, input.icon-loading-dark, object.icon-loading-dark, video.icon-loading-dark { + background-image: url("../img/loading-dark.gif"); +} +audio.icon-loading-small, canvas.icon-loading-small, embed.icon-loading-small, iframe.icon-loading-small, img.icon-loading-small, input.icon-loading-small, object.icon-loading-small, video.icon-loading-small { + background-image: url("../img/loading-small.gif"); +} +audio.icon-loading-small-dark, canvas.icon-loading-small-dark, embed.icon-loading-small-dark, iframe.icon-loading-small-dark, img.icon-loading-small-dark, input.icon-loading-small-dark, object.icon-loading-small-dark, video.icon-loading-small-dark { + background-image: url("../img/loading-small-dark.gif"); +} + +@keyframes rotate { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} +.icon-32 { + background-size: 32px !important; +} + +.icon-white.icon-shadow, +.icon-audio-white, +.icon-audio-off-white, +.icon-fullscreen-white, +.icon-screen-white, +.icon-screen-off-white, +.icon-video-white, +.icon-video-off-white { + filter: drop-shadow(1px 1px 4px var(--color-box-shadow)); +} + +/* ICONS ------------------------------------------------------------------- + * These icon classes are generated automatically with the following pattern + * .icon-close (black icon) + * .icon-close-white (white icon) + * .icon-close.icon-white (white icon) + * + * Some class definitions are kept as before, since they don't follow the pattern + * or have some additional styling like drop shadows + */ + +/*# sourceMappingURL=icons.css.map */ diff --git a/core/css/icons.css.map b/core/css/icons.css.map new file mode 100644 index 0000000000000..f78070a9adcc4 --- /dev/null +++ b/core/css/icons.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["icons.scss","functions.scss","variables.scss"],"names":[],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBA;AAAA;AAAA;AA4BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ADnBA;AA+GQ;AE9IR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AFgCA;EACC;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;EAMC;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGC;;;AAKH;AAAA;EAEC;EACA;;;AAGD;AAAA;EAEC;EACA;EACA;;;AAGD;AAEC;EACC;;AAED;EACC;;AAED;EACC;;AAED;EACC;;;AAIF;EACC;IACC;;EAED;IACC;;;AAIF;EACC;;;AAGD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAQC;;;AAGD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA","file":"icons.css"} \ No newline at end of file diff --git a/core/css/inputs.css b/core/css/inputs.css new file mode 100644 index 0000000000000..a91dd62f3b830 --- /dev/null +++ b/core/css/inputs.css @@ -0,0 +1,1039 @@ +@charset "UTF-8"; +/** + * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com) + * + * @author John Molakvoæ (skjnldsv) + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ +/** + * @copyright Copyright (c) 2016, John Molakvoæ + * @copyright Copyright (c) 2016, Morris Jobke + * @copyright Copyright (c) 2016, Joas Schilling + * @copyright Copyright (c) 2016, Julius Haertl + * @copyright Copyright (c) 2016, jowi + * @copyright Copyright (c) 2015, Joas Schilling + * @copyright Copyright (c) 2015, Hendrik Leppelsack + * @copyright Copyright (c) 2014-2017, Jan-Christoph Borchardt + * + * @license GNU AGPL version 3 or any later version + * + */ +/** + * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com) + * + * @author John Molakvoæ (skjnldsv) + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ +/** + * @see core/src/icons.js + */ +/** + * SVG COLOR API + * + * @param string $icon the icon filename + * @param string $dir the icon folder within /core/img if $core or app name + * @param string $color the desired color in hexadecimal + * @param int $version the version of the file + * @param bool [$core] search icon in core + * + * @returns A background image with the url to the set to the requested icon. + */ +/* Specifically override browser styles */ +input, textarea, select, button, div[contenteditable=true], div[contenteditable=false] { + font-family: var(--font-face); +} + +.select2-container-multi .select2-choices .select2-search-field input, .select2-search input, .ui-widget { + font-family: var(--font-face) !important; +} + +/* Simple selector to allow easy overriding */ +select, +button:not(.button-vue), +input, +textarea, +div[contenteditable=true], +div[contenteditable=false] { + width: 130px; + min-height: 34px; + box-sizing: border-box; +} + +/** + * color-text-lighter normal state + * color-text-lighter active state + * color-text-maxcontrast disabled state + */ +/* Default global values */ +div.select2-drop .select2-search input, +select, +button:not(.button-vue), .button, +input:not([type=range]), +textarea, +div[contenteditable=true], +.pager li a { + margin: 3px 3px 3px 0; + padding: 7px 6px; + font-size: 13px; + background-color: var(--color-main-background); + color: var(--color-main-text); + border: 1px solid var(--color-border-dark); + outline: none; + border-radius: var(--border-radius); + cursor: text; + /* Primary action button, use sparingly */ +} +div.select2-drop .select2-search input:not(:disabled):not(.primary):hover, div.select2-drop .select2-search input:not(:disabled):not(.primary):focus, div.select2-drop .select2-search input:not(:disabled):not(.primary).active, +select:not(:disabled):not(.primary):hover, +select:not(:disabled):not(.primary):focus, +select:not(:disabled):not(.primary).active, +button:not(.button-vue):not(:disabled):not(.primary):hover, +button:not(.button-vue):not(:disabled):not(.primary):focus, +button:not(.button-vue):not(:disabled):not(.primary).active, .button:not(:disabled):not(.primary):hover, .button:not(:disabled):not(.primary):focus, .button:not(:disabled):not(.primary).active, +input:not([type=range]):not(:disabled):not(.primary):hover, +input:not([type=range]):not(:disabled):not(.primary):focus, +input:not([type=range]):not(:disabled):not(.primary).active, +textarea:not(:disabled):not(.primary):hover, +textarea:not(:disabled):not(.primary):focus, +textarea:not(:disabled):not(.primary).active, +div[contenteditable=true]:not(:disabled):not(.primary):hover, +div[contenteditable=true]:not(:disabled):not(.primary):focus, +div[contenteditable=true]:not(:disabled):not(.primary).active, +.pager li a:not(:disabled):not(.primary):hover, +.pager li a:not(:disabled):not(.primary):focus, +.pager li a:not(:disabled):not(.primary).active { + /* active class used for multiselect */ + border-color: var(--color-primary-element); + outline: none; +} +div.select2-drop .select2-search input:not(:disabled):not(.primary):active, +select:not(:disabled):not(.primary):active, +button:not(.button-vue):not(:disabled):not(.primary):active, .button:not(:disabled):not(.primary):active, +input:not([type=range]):not(:disabled):not(.primary):active, +textarea:not(:disabled):not(.primary):active, +div[contenteditable=true]:not(:disabled):not(.primary):active, +.pager li a:not(:disabled):not(.primary):active { + outline: none; + background-color: var(--color-main-background); + color: var(--color-text-light); +} +div.select2-drop .select2-search input:disabled, +select:disabled, +button:not(.button-vue):disabled, .button:disabled, +input:not([type=range]):disabled, +textarea:disabled, +div[contenteditable=true]:disabled, +.pager li a:disabled { + background-color: var(--color-background-dark); + color: var(--color-text-maxcontrast); + cursor: default; + opacity: 0.5; +} +div.select2-drop .select2-search input:required, +select:required, +button:not(.button-vue):required, .button:required, +input:not([type=range]):required, +textarea:required, +div[contenteditable=true]:required, +.pager li a:required { + box-shadow: none; +} +div.select2-drop .select2-search input:invalid, +select:invalid, +button:not(.button-vue):invalid, .button:invalid, +input:not([type=range]):invalid, +textarea:invalid, +div[contenteditable=true]:invalid, +.pager li a:invalid { + box-shadow: none !important; + border-color: var(--color-error); +} +div.select2-drop .select2-search input.primary, +select.primary, +button:not(.button-vue).primary, .button.primary, +input:not([type=range]).primary, +textarea.primary, +div[contenteditable=true].primary, +.pager li a.primary { + background-color: var(--color-primary-element); + border-color: var(--color-primary-element); + color: var(--color-primary-text); + cursor: pointer; + /* Apply border to primary button if on log in page (and not in a dark container) or if in header */ +} +#body-login :not(.body-login-container) div.select2-drop .select2-search input.primary, #header div.select2-drop .select2-search input.primary, +#body-login :not(.body-login-container) select.primary, +#header select.primary, +#body-login :not(.body-login-container) button:not(.button-vue).primary, +#header button:not(.button-vue).primary, #body-login :not(.body-login-container) .button.primary, #header .button.primary, +#body-login :not(.body-login-container) input:not([type=range]).primary, +#header input:not([type=range]).primary, +#body-login :not(.body-login-container) textarea.primary, +#header textarea.primary, +#body-login :not(.body-login-container) div[contenteditable=true].primary, +#header div[contenteditable=true].primary, +#body-login :not(.body-login-container) .pager li a.primary, +#header .pager li a.primary { + border-color: var(--color-primary-text); +} +div.select2-drop .select2-search input.primary:not(:disabled):hover, div.select2-drop .select2-search input.primary:not(:disabled):focus, div.select2-drop .select2-search input.primary:not(:disabled):active, +select.primary:not(:disabled):hover, +select.primary:not(:disabled):focus, +select.primary:not(:disabled):active, +button:not(.button-vue).primary:not(:disabled):hover, +button:not(.button-vue).primary:not(:disabled):focus, +button:not(.button-vue).primary:not(:disabled):active, .button.primary:not(:disabled):hover, .button.primary:not(:disabled):focus, .button.primary:not(:disabled):active, +input:not([type=range]).primary:not(:disabled):hover, +input:not([type=range]).primary:not(:disabled):focus, +input:not([type=range]).primary:not(:disabled):active, +textarea.primary:not(:disabled):hover, +textarea.primary:not(:disabled):focus, +textarea.primary:not(:disabled):active, +div[contenteditable=true].primary:not(:disabled):hover, +div[contenteditable=true].primary:not(:disabled):focus, +div[contenteditable=true].primary:not(:disabled):active, +.pager li a.primary:not(:disabled):hover, +.pager li a.primary:not(:disabled):focus, +.pager li a.primary:not(:disabled):active { + background-color: var(--color-primary-element-light); + border-color: var(--color-primary-element-light); +} +div.select2-drop .select2-search input.primary:not(:disabled):active, +select.primary:not(:disabled):active, +button:not(.button-vue).primary:not(:disabled):active, .button.primary:not(:disabled):active, +input:not([type=range]).primary:not(:disabled):active, +textarea.primary:not(:disabled):active, +div[contenteditable=true].primary:not(:disabled):active, +.pager li a.primary:not(:disabled):active { + color: var(--color-primary-text-dark); +} +div.select2-drop .select2-search input.primary:disabled, +select.primary:disabled, +button:not(.button-vue).primary:disabled, .button.primary:disabled, +input:not([type=range]).primary:disabled, +textarea.primary:disabled, +div[contenteditable=true].primary:disabled, +.pager li a.primary:disabled { + background-color: var(--color-primary-element); + color: var(--color-primary-text-dark); + cursor: default; +} + +div[contenteditable=false] { + margin: 3px 3px 3px 0; + padding: 7px 6px; + font-size: 13px; + background-color: var(--color-main-background); + color: var(--color-text-lighter); + border: 1px solid var(--color-background-darker); + outline: none; + border-radius: var(--border-radius); + background-color: var(--color-background-dark); + color: var(--color-text-lighter); + cursor: default; + opacity: 0.5; +} + +/* Specific override */ +input { + /* Color input doesn't respect the initial height + so we need to set a custom one */ +} +input:not([type=radio]):not([type=checkbox]):not([type=range]):not([type=submit]):not([type=button]):not([type=reset]):not([type=color]):not([type=file]):not([type=image]) { + -webkit-appearance: textfield; + -moz-appearance: textfield; + height: 34px; +} +input[type=radio], input[type=checkbox], input[type=file], input[type=image] { + height: auto; + width: auto; +} +input[type=color] { + margin: 3px; + padding: 0 2px; + min-height: 30px; + width: 40px; + cursor: pointer; +} +input[type=hidden] { + height: 0; + width: 0; +} +input[type=time] { + width: initial; +} + +/* 'Click' inputs */ +select, +button:not(.button-vue), .button, +input[type=button], +input[type=submit], +input[type=reset] { + padding: 6px 16px; + width: auto; + min-height: 34px; + cursor: pointer; + box-sizing: border-box; + background-color: var(--color-background-dark); +} +select:disabled, +button:not(.button-vue):disabled, .button:disabled, +input[type=button]:disabled, +input[type=submit]:disabled, +input[type=reset]:disabled { + cursor: default; +} + +select *, +button:not(.button-vue) *, .button * { + cursor: pointer; +} +select:disabled *, +button:not(.button-vue):disabled *, .button:disabled * { + cursor: default; +} + +/* Buttons */ +button:not(.button-vue), .button, +input[type=button], +input[type=submit], +input[type=reset] { + font-weight: bold; + border-radius: var(--border-radius-pill); + /* Get rid of the inside dotted line in Firefox */ +} +button:not(.button-vue)::-moz-focus-inner, .button::-moz-focus-inner, +input[type=button]::-moz-focus-inner, +input[type=submit]::-moz-focus-inner, +input[type=reset]::-moz-focus-inner { + border: 0; +} +button:not(.button-vue).error, .button.error, +input[type=button].error, +input[type=submit].error, +input[type=reset].error { + background-color: var(--color-error) !important; + border-color: var(--color-error) !important; + color: #fff !important; +} + +button:not(.button-vue):not(.action-button) > span, .button > span { + /* icon position inside buttons */ +} +button:not(.button-vue):not(.action-button) > span[class^=icon-], button:not(.button-vue):not(.action-button) > span[class*=" icon-"], .button > span[class^=icon-], .button > span[class*=" icon-"] { + display: inline-block; + vertical-align: text-bottom; + opacity: 0.5; +} + +textarea, div[contenteditable=true] { + color: var(--color-main-text); + cursor: text; + font-family: inherit; + height: auto; +} +textarea:not(:disabled):active, textarea:not(:disabled):hover, textarea:not(:disabled):focus, div[contenteditable=true]:not(:disabled):active, div[contenteditable=true]:not(:disabled):hover, div[contenteditable=true]:not(:disabled):focus { + border-color: var(--color-background-darker) !important; + background-color: var(--color-main-background) !important; +} + +div[contenteditable=false] { + color: var(--color-text-lighter); + font-family: inherit; + height: auto; +} + +/* Override the ugly select arrow */ +select { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + background: var(--icon-triangle-s-000) no-repeat right 4px center; + background-color: inherit; + outline: 0; + padding-right: 24px !important; + height: 34px; +} + +/* Confirm inputs */ +input[type=text], input[type=password], input[type=email] { + /* only show confirm borders if input is not focused */ +} +input[type=text] + .icon-confirm, input[type=password] + .icon-confirm, input[type=email] + .icon-confirm { + margin-left: -8px !important; + border-left-color: transparent !important; + border-radius: 0 var(--border-radius) var(--border-radius) 0 !important; + background-clip: padding-box; + /* Avoid background under border */ + background-color: var(--color-main-background) !important; + opacity: 1; + height: 34px; + width: 34px; + padding: 7px 6px; + cursor: pointer; + margin-right: 0; +} +input[type=text] + .icon-confirm:disabled, input[type=password] + .icon-confirm:disabled, input[type=email] + .icon-confirm:disabled { + cursor: default; + /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */ + background-image: var(--icon-confirm-fade-dark); +} +input[type=text]:not(:active):not(:hover):not(:focus):invalid + .icon-confirm, input[type=password]:not(:active):not(:hover):not(:focus):invalid + .icon-confirm, input[type=email]:not(:active):not(:hover):not(:focus):invalid + .icon-confirm { + border-color: var(--color-error); +} +input[type=text]:not(:active):not(:hover):not(:focus) + .icon-confirm:active, input[type=text]:not(:active):not(:hover):not(:focus) + .icon-confirm:hover, input[type=text]:not(:active):not(:hover):not(:focus) + .icon-confirm:focus, input[type=password]:not(:active):not(:hover):not(:focus) + .icon-confirm:active, input[type=password]:not(:active):not(:hover):not(:focus) + .icon-confirm:hover, input[type=password]:not(:active):not(:hover):not(:focus) + .icon-confirm:focus, input[type=email]:not(:active):not(:hover):not(:focus) + .icon-confirm:active, input[type=email]:not(:active):not(:hover):not(:focus) + .icon-confirm:hover, input[type=email]:not(:active):not(:hover):not(:focus) + .icon-confirm:focus { + border-color: var(--color-primary-element) !important; + border-radius: var(--border-radius) !important; +} +input[type=text]:not(:active):not(:hover):not(:focus) + .icon-confirm:active:disabled, input[type=text]:not(:active):not(:hover):not(:focus) + .icon-confirm:hover:disabled, input[type=text]:not(:active):not(:hover):not(:focus) + .icon-confirm:focus:disabled, input[type=password]:not(:active):not(:hover):not(:focus) + .icon-confirm:active:disabled, input[type=password]:not(:active):not(:hover):not(:focus) + .icon-confirm:hover:disabled, input[type=password]:not(:active):not(:hover):not(:focus) + .icon-confirm:focus:disabled, input[type=email]:not(:active):not(:hover):not(:focus) + .icon-confirm:active:disabled, input[type=email]:not(:active):not(:hover):not(:focus) + .icon-confirm:hover:disabled, input[type=email]:not(:active):not(:hover):not(:focus) + .icon-confirm:focus:disabled { + border-color: var(--color-background-darker) !important; +} +input[type=text]:active + .icon-confirm, input[type=text]:hover + .icon-confirm, input[type=text]:focus + .icon-confirm, input[type=password]:active + .icon-confirm, input[type=password]:hover + .icon-confirm, input[type=password]:focus + .icon-confirm, input[type=email]:active + .icon-confirm, input[type=email]:hover + .icon-confirm, input[type=email]:focus + .icon-confirm { + border-color: var(--color-primary-element) !important; + border-left-color: transparent !important; + /* above previous input */ + z-index: 2; +} + +/* Various Fixes */ +button img, +.button img { + cursor: pointer; +} + +select, +.button.multiselect { + font-weight: normal; +} + +/* Radio & Checkboxes */ +input[type=checkbox], input[type=radio] { + /* We do not use the nc-darken function as this is not supposed to be changed */ +} +input[type=checkbox].radio, input[type=checkbox].checkbox, input[type=radio].radio, input[type=radio].checkbox { + position: absolute; + left: -10000px; + top: auto; + width: 1px; + height: 1px; + overflow: hidden; +} +input[type=checkbox].radio + label, input[type=checkbox].checkbox + label, input[type=radio].radio + label, input[type=radio].checkbox + label { + user-select: none; +} +input[type=checkbox].radio:disabled + label, input[type=checkbox].radio:disabled + label:before, input[type=checkbox].checkbox:disabled + label, input[type=checkbox].checkbox:disabled + label:before, input[type=radio].radio:disabled + label, input[type=radio].radio:disabled + label:before, input[type=radio].checkbox:disabled + label, input[type=radio].checkbox:disabled + label:before { + cursor: default; +} +input[type=checkbox].radio + label:before, input[type=checkbox].checkbox + label:before, input[type=radio].radio + label:before, input[type=radio].checkbox + label:before { + content: ""; + display: inline-block; + height: 14px; + width: 14px; + vertical-align: middle; + border-radius: 50%; + margin: 0 6px 3px 3px; + border: 1px solid nc-darken(#fff, 47%); +} +input[type=checkbox].radio:not(:disabled):not(:checked) + label:hover:before, input[type=checkbox].radio:focus + label:before, input[type=checkbox].checkbox:not(:disabled):not(:checked) + label:hover:before, input[type=checkbox].checkbox:focus + label:before, input[type=radio].radio:not(:disabled):not(:checked) + label:hover:before, input[type=radio].radio:focus + label:before, input[type=radio].checkbox:not(:disabled):not(:checked) + label:hover:before, input[type=radio].checkbox:focus + label:before { + border-color: var(--color-primary-element); +} +input[type=checkbox].radio:focus-visible + label, input[type=checkbox].checkbox:focus-visible + label, input[type=radio].radio:focus-visible + label, input[type=radio].checkbox:focus-visible + label { + outline-style: solid; + outline-color: var(--color-main-text); + outline-width: 1px; + outline-offset: 2px; +} +input[type=checkbox].radio:checked + label:before, input[type=checkbox].radio.checkbox:indeterminate + label:before, input[type=checkbox].checkbox:checked + label:before, input[type=checkbox].checkbox.checkbox:indeterminate + label:before, input[type=radio].radio:checked + label:before, input[type=radio].radio.checkbox:indeterminate + label:before, input[type=radio].checkbox:checked + label:before, input[type=radio].checkbox.checkbox:indeterminate + label:before { + /* ^ :indeterminate have a strange behavior on radio, + so we respecified the checkbox class again to be safe */ + box-shadow: inset 0px 0px 0px 2px var(--color-main-background); + background-color: var(--color-primary-element); + border-color: var(--color-primary-element); +} +input[type=checkbox].radio:disabled + label:before, input[type=checkbox].checkbox:disabled + label:before, input[type=radio].radio:disabled + label:before, input[type=radio].checkbox:disabled + label:before { + border: 1px solid nc-darken(#fff, 47%); + background-color: nc-darken(#fff, 27%) !important; + /* override other status */ +} +input[type=checkbox].radio:checked:disabled + label:before, input[type=checkbox].checkbox:checked:disabled + label:before, input[type=radio].radio:checked:disabled + label:before, input[type=radio].checkbox:checked:disabled + label:before { + background-color: nc-darken(#fff, 27%); +} +input[type=checkbox].radio + label ~ em, input[type=checkbox].checkbox + label ~ em, input[type=radio].radio + label ~ em, input[type=radio].checkbox + label ~ em { + display: inline-block; + margin-left: 25px; +} +input[type=checkbox].radio + label ~ em:last-of-type, input[type=checkbox].checkbox + label ~ em:last-of-type, input[type=radio].radio + label ~ em:last-of-type, input[type=radio].checkbox + label ~ em:last-of-type { + margin-bottom: 14px; +} +input[type=checkbox].checkbox + label:before, input[type=radio].checkbox + label:before { + border-radius: 1px; + height: 14px; + width: 14px; + box-shadow: none !important; + background-position: center; +} +input[type=checkbox].checkbox:checked + label:before, input[type=radio].checkbox:checked + label:before { + background-image: url("../img/actions/checkbox-mark.svg"); +} +input[type=checkbox].checkbox:indeterminate + label:before, input[type=radio].checkbox:indeterminate + label:before { + background-image: url("../img/actions/checkbox-mixed.svg"); +} +input[type=checkbox].radio--white + label:before, input[type=checkbox].radio--white:focus + label:before, input[type=checkbox].checkbox--white + label:before, input[type=checkbox].checkbox--white:focus + label:before, input[type=radio].radio--white + label:before, input[type=radio].radio--white:focus + label:before, input[type=radio].checkbox--white + label:before, input[type=radio].checkbox--white:focus + label:before { + border-color: #bababa; +} +input[type=checkbox].radio--white:not(:disabled):not(:checked) + label:hover:before, input[type=checkbox].checkbox--white:not(:disabled):not(:checked) + label:hover:before, input[type=radio].radio--white:not(:disabled):not(:checked) + label:hover:before, input[type=radio].checkbox--white:not(:disabled):not(:checked) + label:hover:before { + border-color: #fff; +} +input[type=checkbox].radio--white:checked + label:before, input[type=checkbox].checkbox--white:checked + label:before, input[type=radio].radio--white:checked + label:before, input[type=radio].checkbox--white:checked + label:before { + box-shadow: inset 0px 0px 0px 2px var(--color-main-background); + background-color: #dbdbdb; + border-color: #dbdbdb; +} +input[type=checkbox].radio--white:disabled + label:before, input[type=checkbox].checkbox--white:disabled + label:before, input[type=radio].radio--white:disabled + label:before, input[type=radio].checkbox--white:disabled + label:before { + background-color: #bababa !important; + /* override other status */ + border-color: rgba(255, 255, 255, 0.4) !important; + /* override other status */ +} +input[type=checkbox].radio--white:checked:disabled + label:before, input[type=checkbox].checkbox--white:checked:disabled + label:before, input[type=radio].radio--white:checked:disabled + label:before, input[type=radio].checkbox--white:checked:disabled + label:before { + box-shadow: inset 0px 0px 0px 2px var(--color-main-background); + border-color: rgba(255, 255, 255, 0.4) !important; + /* override other status */ + background-color: #bababa; +} +input[type=checkbox].checkbox--white:checked + label:before, input[type=checkbox].checkbox--white:indeterminate + label:before, input[type=radio].checkbox--white:checked + label:before, input[type=radio].checkbox--white:indeterminate + label:before { + background-color: transparent !important; + /* Override default checked */ + border-color: #fff !important; + /* Override default checked */ + background-image: url("../img/actions/checkbox-mark-white.svg"); +} +input[type=checkbox].checkbox--white:indeterminate + label:before, input[type=radio].checkbox--white:indeterminate + label:before { + background-image: url("../img/actions/checkbox-mixed-white.svg"); +} +input[type=checkbox].checkbox--white:disabled + label:before, input[type=radio].checkbox--white:disabled + label:before { + opacity: 0.7; + /* No other choice for white background image */ +} + +/* Select2 overriding. Merged to core with vendor stylesheet */ +div.select2-drop { + margin-top: -2px; + background-color: var(--color-main-background); +} +div.select2-drop.select2-drop-active { + border-color: var(--color-border-dark); +} +div.select2-drop .avatar { + display: inline-block; + margin-right: 8px; + vertical-align: middle; +} +div.select2-drop .avatar img { + cursor: pointer; +} +div.select2-drop .select2-search input { + min-height: auto; + background: var(--icon-search-000) no-repeat right center !important; + background-origin: content-box !important; +} +div.select2-drop .select2-results { + max-height: 250px; + margin: 0; + padding: 0; +} +div.select2-drop .select2-results .select2-result-label { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +div.select2-drop .select2-results .select2-result-label span { + cursor: pointer; +} +div.select2-drop .select2-results .select2-result-label span em { + cursor: inherit; + background: unset; +} +div.select2-drop .select2-results .select2-result, +div.select2-drop .select2-results .select2-no-results, +div.select2-drop .select2-results .select2-searching { + position: relative; + display: list-item; + padding: 12px; + background-color: transparent; + cursor: pointer; + color: var(--color-text-lighter); +} +div.select2-drop .select2-results .select2-result.select2-selected { + background-color: var(--color-background-dark); +} +div.select2-drop .select2-results .select2-highlighted { + background-color: var(--color-background-dark); + color: var(--color-main-text); +} + +.select2-chosen .avatar, +.select2-chosen .avatar img, +#select2-drop .avatar, +#select2-drop .avatar img { + cursor: pointer; +} + +div.select2-container-multi .select2-choices, div.select2-container-multi.select2-container-active .select2-choices { + box-shadow: none; + white-space: nowrap; + text-overflow: ellipsis; + background: var(--color-main-background); + color: var(--color-text-lighter) !important; + box-sizing: content-box; + border-radius: var(--border-radius); + border: 1px solid var(--color-border-dark); + margin: 0; + padding: 2px 0; + min-height: auto; +} +div.select2-container-multi .select2-choices .select2-search-choice, div.select2-container-multi.select2-container-active .select2-choices .select2-search-choice { + line-height: 20px; + padding-left: 5px; +} +div.select2-container-multi .select2-choices .select2-search-choice.select2-search-choice-focus, div.select2-container-multi .select2-choices .select2-search-choice:hover, div.select2-container-multi .select2-choices .select2-search-choice:active, div.select2-container-multi .select2-choices .select2-search-choice, div.select2-container-multi.select2-container-active .select2-choices .select2-search-choice.select2-search-choice-focus, div.select2-container-multi.select2-container-active .select2-choices .select2-search-choice:hover, div.select2-container-multi.select2-container-active .select2-choices .select2-search-choice:active, div.select2-container-multi.select2-container-active .select2-choices .select2-search-choice { + background-image: none; + background-color: var(--color-main-background); + color: var(--color-text-lighter); + border: 1px solid var(--color-border-dark); +} +div.select2-container-multi .select2-choices .select2-search-choice .select2-search-choice-close, div.select2-container-multi.select2-container-active .select2-choices .select2-search-choice .select2-search-choice-close { + display: none; +} +div.select2-container-multi .select2-choices .select2-search-field input, div.select2-container-multi.select2-container-active .select2-choices .select2-search-field input { + line-height: 20px; +} +div.select2-container-multi .select2-choices .select2-search-field input.select2-active, div.select2-container-multi.select2-container-active .select2-choices .select2-search-field input.select2-active { + background: none !important; +} + +div.select2-container { + margin: 3px 3px 3px 0; +} +div.select2-container.select2-container-multi .select2-choices { + display: flex; + flex-wrap: wrap; +} +div.select2-container.select2-container-multi .select2-choices li { + float: none; +} +div.select2-container a.select2-choice { + box-shadow: none; + white-space: nowrap; + text-overflow: ellipsis; + background: var(--color-main-background); + color: var(--color-text-lighter) !important; + box-sizing: content-box; + border-radius: var(--border-radius); + border: 1px solid var(--color-border-dark); + margin: 0; + padding: 2px 0; + padding-left: 6px; + min-height: auto; +} +div.select2-container a.select2-choice .select2-search-choice { + line-height: 20px; + padding-left: 5px; + background-image: none; + background-color: var(--color-background-dark); + border-color: var(--color-background-dark); +} +div.select2-container a.select2-choice .select2-search-choice .select2-search-choice-close { + display: none; +} +div.select2-container a.select2-choice .select2-search-choice.select2-search-choice-focus, div.select2-container a.select2-choice .select2-search-choice:hover { + background-color: var(--color-border); + border-color: var(--color-border); +} +div.select2-container a.select2-choice .select2-arrow { + background: none; + border-radius: 0; + border: none; +} +div.select2-container a.select2-choice .select2-arrow b { + background: var(--icon-triangle-s-000) no-repeat center !important; + opacity: 0.5; +} +div.select2-container a.select2-choice:hover .select2-arrow b, div.select2-container a.select2-choice:focus .select2-arrow b, div.select2-container a.select2-choice:active .select2-arrow b { + opacity: 0.7; +} +div.select2-container a.select2-choice .select2-search-field input { + line-height: 20px; +} + +/* Vue v-select */ +.v-select { + margin: 3px 3px 3px 0; + display: inline-block; +} +.v-select .dropdown-toggle { + display: flex !important; + flex-wrap: wrap; +} +.v-select .dropdown-toggle .selected-tag { + line-height: 20px; + padding-left: 5px; + background-image: none; + background-color: var(--color-main-background); + color: var(--color-text-lighter); + border: 1px solid var(--color-border-dark); + display: inline-flex; + align-items: center; +} +.v-select .dropdown-toggle .selected-tag .close { + margin-left: 3px; +} +.v-select .dropdown-menu { + padding: 0; +} +.v-select .dropdown-menu li { + padding: 5px; + position: relative; + display: list-item; + background-color: transparent; + cursor: pointer; + color: var(--color-text-lighter); +} +.v-select .dropdown-menu li a { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + height: 25px; + padding: 3px 7px 4px 2px; + margin: 0; + cursor: pointer; + min-height: 1em; + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + display: inline-flex; + align-items: center; + background-color: transparent !important; + color: inherit !important; +} +.v-select .dropdown-menu li a::before { + content: " "; + background-image: var(--icon-checkmark-000); + background-repeat: no-repeat; + background-position: center; + min-width: 16px; + min-height: 16px; + display: block; + opacity: 0.5; + margin-right: 5px; + visibility: hidden; +} +.v-select .dropdown-menu li.highlight { + color: var(--color-main-text); +} +.v-select .dropdown-menu li.active > a { + background-color: var(--color-background-dark); + color: var(--color-main-text); +} +.v-select .dropdown-menu li.active > a::before { + visibility: visible; +} + +/* Vue multiselect */ +.multiselect.multiselect-vue { + margin: 1px 2px; + padding: 0 !important; + display: inline-block; + width: 160px; + position: relative; + background-color: var(--color-main-background); + /* results wrapper */ +} +.multiselect.multiselect-vue.multiselect--active { + /* Opened: force display the input */ +} +.multiselect.multiselect-vue.multiselect--active input.multiselect__input { + opacity: 1 !important; + cursor: text !important; +} +.multiselect.multiselect-vue.multiselect--disabled, .multiselect.multiselect-vue.multiselect--disabled .multiselect__single { + background-color: var(--color-background-dark) !important; +} +.multiselect.multiselect-vue .multiselect__tags { + /* space between tags and limit tag */ + display: flex; + flex-wrap: nowrap; + overflow: hidden; + border: 1px solid var(--color-border-dark); + cursor: pointer; + position: relative; + border-radius: var(--border-radius); + height: 34px; + /* tag wrapper */ + /* Single select default value */ + /* displayed text if tag limit reached */ + /* default multiselect input for search and placeholder */ +} +.multiselect.multiselect-vue .multiselect__tags .multiselect__tags-wrap { + align-items: center; + display: inline-flex; + overflow: hidden; + max-width: 100%; + position: relative; + padding: 3px 5px; + flex-grow: 1; + /* no tags or simple select? Show input directly + input is used to display single value */ + /* selected tag */ +} +.multiselect.multiselect-vue .multiselect__tags .multiselect__tags-wrap:empty ~ input.multiselect__input { + opacity: 1 !important; + /* hide default empty text, show input instead */ +} +.multiselect.multiselect-vue .multiselect__tags .multiselect__tags-wrap:empty ~ input.multiselect__input + span:not(.multiselect__single) { + display: none; +} +.multiselect.multiselect-vue .multiselect__tags .multiselect__tags-wrap .multiselect__tag { + flex: 1 0 0; + line-height: 20px; + padding: 1px 5px; + background-image: none; + color: var(--color-text-lighter); + border: 1px solid var(--color-border-dark); + display: inline-flex; + align-items: center; + border-radius: var(--border-radius); + /* require to override the default width + and force the tag to shring properly */ + min-width: 0; + max-width: 50%; + max-width: fit-content; + max-width: -moz-fit-content; + /* css hack, detect if more than two tags + if so, flex-basis is set to half */ + /* ellipsis the groups to be sure + we display at least two of them */ +} +.multiselect.multiselect-vue .multiselect__tags .multiselect__tags-wrap .multiselect__tag:only-child { + flex: 0 1 auto; +} +.multiselect.multiselect-vue .multiselect__tags .multiselect__tags-wrap .multiselect__tag:not(:last-child) { + margin-right: 5px; +} +.multiselect.multiselect-vue .multiselect__tags .multiselect__tags-wrap .multiselect__tag > span { + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; +} +.multiselect.multiselect-vue .multiselect__tags .multiselect__single { + padding: 8px 10px; + flex: 0 0 100%; + z-index: 1; + /* above input */ + background-color: var(--color-main-background); + cursor: pointer; + line-height: 17px; +} +.multiselect.multiselect-vue .multiselect__tags .multiselect__strong, +.multiselect.multiselect-vue .multiselect__tags .multiselect__limit { + flex: 0 0 auto; + line-height: 20px; + color: var(--color-text-lighter); + display: inline-flex; + align-items: center; + opacity: 0.7; + margin-right: 5px; + /* above the input */ + z-index: 5; +} +.multiselect.multiselect-vue .multiselect__tags input.multiselect__input { + width: 100% !important; + position: absolute !important; + margin: 0; + opacity: 0; + /* let's leave it on top of tags but hide it */ + height: 100%; + border: none; + /* override hide to force show the placeholder */ + display: block !important; + /* only when not active */ + cursor: pointer; +} +.multiselect.multiselect-vue .multiselect__content-wrapper { + position: absolute; + width: 100%; + margin-top: -1px; + border: 1px solid var(--color-border-dark); + background: var(--color-main-background); + z-index: 50; + max-height: 175px !important; + overflow-y: auto; +} +.multiselect.multiselect-vue .multiselect__content-wrapper .multiselect__content { + width: 100%; + padding: 5px 0; +} +.multiselect.multiselect-vue .multiselect__content-wrapper li { + padding: 5px; + position: relative; + display: flex; + align-items: center; + background-color: transparent; +} +.multiselect.multiselect-vue .multiselect__content-wrapper li, +.multiselect.multiselect-vue .multiselect__content-wrapper li span { + cursor: pointer; +} +.multiselect.multiselect-vue .multiselect__content-wrapper li > span { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + height: 20px; + margin: 0; + min-height: 1em; + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + display: inline-flex; + align-items: center; + background-color: transparent !important; + color: var(--color-text-lighter); + width: 100%; + /* selected checkmark icon */ + /* add the prop tag-placeholder="create" to add the + + * icon on top of an unknown-and-ready-to-be-created entry + */ +} +.multiselect.multiselect-vue .multiselect__content-wrapper li > span::before { + content: " "; + background-image: var(--icon-checkmark-000); + background-repeat: no-repeat; + background-position: center; + min-width: 16px; + min-height: 16px; + display: block; + opacity: 0.5; + margin-right: 5px; + visibility: hidden; +} +.multiselect.multiselect-vue .multiselect__content-wrapper li > span.multiselect__option--disabled { + background-color: var(--color-background-dark); + opacity: 0.5; +} +.multiselect.multiselect-vue .multiselect__content-wrapper li > span[data-select=create]::before { + background-image: var(--icon-add-000); + visibility: visible; +} +.multiselect.multiselect-vue .multiselect__content-wrapper li > span.multiselect__option--highlight { + color: var(--color-main-text); +} +.multiselect.multiselect-vue .multiselect__content-wrapper li > span:not(.multiselect__option--disabled):hover::before { + opacity: 0.3; +} +.multiselect.multiselect-vue .multiselect__content-wrapper li > span.multiselect__option--selected::before, .multiselect.multiselect-vue .multiselect__content-wrapper li > span:not(.multiselect__option--disabled):hover::before { + visibility: visible; +} + +/* Progressbar */ +progress:not(.vue) { + display: block; + width: 100%; + padding: 0; + border: 0 none; + background-color: var(--color-background-dark); + border-radius: var(--border-radius); + flex-basis: 100%; + height: 5px; + overflow: hidden; +} +progress:not(.vue).warn::-moz-progress-bar { + background: var(--color-error); +} +progress:not(.vue).warn::-webkit-progress-value { + background: var(--color-error); +} +progress:not(.vue)::-webkit-progress-bar { + background: transparent; +} +progress:not(.vue)::-moz-progress-bar { + border-radius: var(--border-radius); + background: var(--color-primary); + transition: 250ms all ease-in-out; +} +progress:not(.vue)::-webkit-progress-value { + border-radius: var(--border-radius); + background: var(--color-primary); + transition: 250ms all ease-in-out; +} + +/* Animation */ +@keyframes shake { + 10%, 90% { + transform: translate(-1px); + } + 20%, 80% { + transform: translate(2px); + } + 30%, 50%, 70% { + transform: translate(-4px); + } + 40%, 60% { + transform: translate(4px); + } +} +.shake { + animation-name: shake; + animation-duration: 0.7s; + animation-timing-function: ease-out; +} + +label.infield { + position: absolute; + left: -10000px; + top: -10000px; + width: 1px; + height: 1px; + overflow: hidden; +} + +::placeholder, +::-ms-input-placeholder, +::-webkit-input-placeholder { + color: var(--color-text-maxcontrast); +} + +/*# sourceMappingURL=inputs.css.map */ diff --git a/core/css/inputs.css.map b/core/css/inputs.css.map new file mode 100644 index 0000000000000..27ac15839c032 --- /dev/null +++ b/core/css/inputs.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["variables.scss","inputs.scss","functions.scss"],"names":[],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBA;AAAA;AAAA;AA4BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ADlCC;AACD;EACC;;;AAED;EACC;;;AAKD;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;EAMC;EACA,YAVgB;EAWhB;;;AAGD;AAAA;AAAA;AAAA;AAAA;AAMA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAOC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AA4BA;;AA1BC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;EACC;EACA;;AAED;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;EACA;EACA;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;EACA;EACA;EACA;;AAED;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;;AAED;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;EACA;;AAGD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;EACA;EACA;EACA;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEC;;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGC;EACA;;AAED;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEC;EACA;EACA;;;AAKH;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;;;AAGD;AACA;AAcC;AAAA;;AAbA;EACC;EACA;EAEA,QAvHe;;AAyHhB;EAIC;EACA;;AAID;EACC;EACA;EACA;EACA;EACA;;AAED;EACC;EACA;;AAED;EACC;;;AAIF;AACA;AAAA;AAAA;AAAA;AAAA;EAKC;EACA;EACA,YA1JgB;EA2JhB;EACA;EACA;;AAEA;AAAA;AAAA;AAAA;AAAA;EACC;;;AAKD;AAAA;EACC;;AAIA;AAAA;EACC;;;AAKH;AACA;AAAA;AAAA;AAAA;EAIC;EACA;AAEA;;AACA;AAAA;AAAA;AAAA;EACC;;AAGD;AAAA;AAAA;AAAA;EACC;EACA;EACA;;;AAID;AACC;;AACA;EAEC;EACA;EACA;;;AAKH;EACC;EACA;EACA;EACA;;AAEC;EAGC;EACA;;;AAKH;EACC;EACA;EACA;;;AAGD;AACA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EAEA,QA9OgB;;;AAiPjB;AAEC;AAsBC;;AAnBA;EACC;EACA;EACA;EACA;AACA;EACA;EACA;EACA,QA9Pc;EA+Pd,OA/Pc;EAgQd;EACA;EACA;;AACA;EACC;AC7NH;EAEA;;ADmOG;EACC;;AAID;EAGC;EACA;;AACA;EACC;;AAQH;EACC;EACA;AACA;EACA;;;AAOJ;AACA;AAAA;EAEC;;;AAED;AAAA;EAEC;;;AAGD;AAOC;AA8EC;;AA5EA;EAEC;EACA;EACA;EACA;EACA;EACA;;AACA;EACC;;AAED;EAEC;;AAED;EACC;EACA;EACA,QA1BkB;EA2BlB,OA3BkB;EA4BlB;EACA;EACA;EACA;;AAED;EAEC;;AAED;EACC;EACA;EACA;EACA;;AAED;AAEA;AAAA;EAEC;EACA;EACA;;AAED;EACC;EACA;AAA6D;;AAE9D;EACC,kBAvD4B;;AA2D7B;EACC;EACA;;AAED;EACC,eAjEkB;;AAqEnB;EACC;EACA,QAvEkB;EAwElB,OAxEkB;EAyElB;EACA;;AAED;EACC;;AAED;EACC;;AAOD;EAEC;;AAED;EACC,cAzFyB;;AA2F1B;EACC;EACA;EACA;;AAED;EACC;AAAuE;EACvE;AAAiE;;AAElE;EACC;EACA;AAAiE;EACjE;;AAID;EAEC;AAA0C;EAC1C;AAAsD;EACtD;;AAED;EACC;;AAED;EACC;AAAc;;;AAMlB;AACA;EACC;EACA;;AACA;EACC;;AAED;EACC;EACA;EACA;;AACA;EACC;;AAGF;EACC;EACA;EACA;;AAED;EACC;EACA;EACA;;AACA;EACC;EACA;EACA;;AACA;EACC;;AACA;EACC;EACA;;AAIH;AAAA;AAAA;EAGC;EACA;EACA;EACA;EACA;EACA;;AAGA;EACC;;AAGF;EACE;EACA;;;AAMH;AAAA;AAAA;AAAA;EAEC;;;AAID;EAEC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACC;EACA;;AACA;EAIC;EACA;EACA;EACA;;AAED;EACC;;AAGF;EACC;;AACA;EACC;;;AAKJ;EACC;;AACA;EACC;EACA;;AACA;EACC;;AAGF;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACC;EACA;EACA;EACA;EACA;;AACA;EACC;;AAED;EAEC;EACA;;AAGF;EACC;EACA;EACA;;AACA;EACC;EACA;;AAGF;EAGC;;AAED;EACC;;;AAKH;AACA;EACC;EACA;;AACA;EACC;EACA;;AACA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACC;;AAIH;EACC;;AACA;EACC;EACA;EACA;EACA;EACA;EACA;;AACA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACC;;AAED;EACC;EACA;;AACA;EACC;;;AAQL;AACA;EACC;EACA;EACA;EACA;EACA;EACA;AAiHA;;AAhHA;AACC;;AACA;EACC;EACA;;AAGF;EAEC;;AAED;AACC;EAGA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,QA5rBe;AA6rBf;AAoDA;AASA;AAaA;;AAzEA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;AACA;AAAA;AASA;;AAPA;EACC;AACA;;AACA;EACC;;AAIF;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AACA;AAAA;EAEA;EACA;EACA;EACA;AACA;AAAA;AAQA;AAAA;;AANA;EACC;;AAED;EACC,cAnDa;;AAuDd;EACC;EACA;EACA;;AAKH;EACC;EACA;EACA;AAAY;EACZ;EACA;EACA;;AAGD;AAAA;EAEC;EACA;EACA;EACA;EACA;EACA;EACA,cAhFe;AAiFf;EACA;;AAGD;EACC;EACA;EACA;EACA;AACA;EACA;EACA;AACA;EACA;AACA;EACA;;AAIF;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACC;EACA;;AAED;EACC;EACA;EACA;EACA;EACA;;AACA;AAAA;EAEC;;AAED;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AACA;AAiBA;AAAA;AAAA;;AAhBA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAED;EACC;EACA;;AAMA;EACC;EACA;;AAGF;EACC;;AAED;EACC;;AAIA;EACC;;;AAQN;AACA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEC;EACC;;AAED;EACC;;AAGF;EACC;;AAED;EACC;EACA;EACA;;AAED;EACC;EACA;EACA;;;AAIF;AACA;EACC;IAEC;;EAED;IAEC;;EAED;IAGC;;EAED;IAEC;;;AAGF;EACC;EACA;EACA;;;AAKD;EACC;EACA;EACA;EACA;EACA;EACA;;;AAGD;AAAA;AAAA;EAGC","file":"inputs.css"} \ No newline at end of file diff --git a/core/css/mobile.css b/core/css/mobile.css new file mode 100644 index 0000000000000..0cc41788b7a9b --- /dev/null +++ b/core/css/mobile.css @@ -0,0 +1,198 @@ +@charset "UTF-8"; +/** + * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com) + * + * @author John Molakvoæ (skjnldsv) + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ +@media only screen and (max-width: 1024px) { + /* position share dropdown */ + #dropdown { + margin-right: 10% !important; + width: 80% !important; + } + + /* fix name autocomplete not showing on mobile */ + .ui-autocomplete { + z-index: 1000 !important; + } + + /* fix error display on smaller screens */ + .error-wide { + width: 100%; + margin-left: 0 !important; + box-sizing: border-box; + } + + /* APP SIDEBAR TOGGLE and SWIPE ----------------------------------------------*/ + #app-navigation { + transform: translateX(-300px); + } + + .snapjs-left #app-navigation { + transform: translateX(0); + } + + #app-navigation:not(.hidden) + #app-content { + margin-left: 0; + } + + .skip-navigation.skip-content { + left: 3px; + margin-left: 0; + } + + /* full width for message list on mobile */ + .app-content-list { + background: var(--color-main-background); + flex: 1 1 100%; + max-height: unset; + max-width: 100%; + } + .app-content-list + .app-content-details { + display: none; + } + .app-content-list.showdetails { + display: none; + } + .app-content-list.showdetails + .app-content-details { + display: initial; + } + + /* Show app details page */ + #app-content.showdetails #app-navigation-toggle { + transform: translateX(-44px); + } + #app-content.showdetails #app-navigation-toggle-back { + position: fixed; + display: inline-block !important; + top: 50px; + left: 0; + width: 44px; + height: 44px; + z-index: 1050; + background-color: rgba(255, 255, 255, 0.7); + cursor: pointer; + opacity: 0.6; + transform: rotate(90deg); + } + #app-content.showdetails .app-content-list { + transform: translateX(-100%); + } + + #app-navigation-toggle { + position: fixed; + display: inline-block !important; + left: 0; + width: 44px; + height: 44px; + z-index: 1050; + cursor: pointer; + opacity: 0.6; + } + + #app-navigation-toggle:hover, +#app-navigation-toggle:focus { + opacity: 1; + } + + /* position controls for apps with app-navigation */ + #app-navigation + #app-content #controls { + padding-left: 44px; + } + + /* .viewer-mode is when text editor, PDF viewer, etc is open */ + #body-user .app-files.viewer-mode #controls { + padding-left: 0 !important; + } + + .app-files.viewer-mode #app-navigation-toggle { + display: none !important; + } + + table.multiselect thead { + left: 0 !important; + } + + /* prevent overflow in user management controls bar */ + #usersearchform { + display: none; + } + + #body-settings #controls { + min-width: 1024px !important; + } + + /* do not show dates in filepicker */ + #oc-dialog-filepicker-content .filelist #headerSize, +#oc-dialog-filepicker-content .filelist #headerDate, +#oc-dialog-filepicker-content .filelist .filesize, +#oc-dialog-filepicker-content .filelist .date { + display: none; + } + + #oc-dialog-filepicker-content .filelist .filename { + max-width: 100%; + } + + .snapjs-left table.multiselect thead { + top: 44px; + } + + /* end of media query */ +} +@media only screen and (max-width: 480px) { + #header .header-right > div > .menu { + max-width: calc(100vw - 10px); + position: fixed; + } + #header .header-right > div > .menu::after { + display: none !important; + } + + /* Arrow directly child of menutoggle */ + #header .header-right > div { + /* settings need a different offset, since they have a right padding */ + } + #header .header-right > div.openedMenu::after { + display: block; + } + #header .header-right > div::after { + border: 10px solid transparent; + border-bottom-color: var(--color-main-background); + bottom: 0; + content: " "; + height: 0; + width: 0; + position: absolute; + pointer-events: none; + right: 15px; + z-index: 2001; + display: none; + } + #header .header-right > div#settings::after { + right: 27px; + } + + #notification-container { + max-width: 100%; + width: 100%; + } +} + +/*# sourceMappingURL=mobile.css.map */ diff --git a/core/css/mobile.css.map b/core/css/mobile.css.map new file mode 100644 index 0000000000000..5601256135d36 --- /dev/null +++ b/core/css/mobile.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["variables.scss","mobile.scss"],"names":[],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACEA;AAEC;EACA;IACC;IACA;;;AAGD;EACA;IACC;;;AAGD;EACA;IACC;IACA;IACA;;;AAGD;EACA;IACC;;;EAGA;IACC;;;EAIF;IACC;;;EAGD;IACC;IACA;;;AAGD;EACA;IACC;IACA;IAEA;IAEA;;EACA;IACC;;EAED;IACC;;EACA;IACC;;;AAKH;EAEC;IACC;;EAED;IACC;IACA;IACA,KDuCa;ICtCb;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAED;IACC;;;EAKF;IACC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;;EAED;AAAA;IAEC;;;AAGD;EACA;IACC;;;AAGD;EACA;IACC;;;EAED;IACC;;;EAGD;IACC;;;AAGD;EACA;IACC;;;EAED;IACC;;;AAGD;EACA;AAAA;AAAA;AAAA;IAIC;;;EAED;IACC;;;EAGD;IACC;;;AAGD;;AAGD;EACC;IACC;IACA;;EACA;IACC;;;AAGF;EACA;AAoBC;;EAlBC;IACC;;EAGF;IACC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAID;IACC;;;EAIF;IACC;IACA","file":"mobile.css"} \ No newline at end of file diff --git a/core/css/public.css b/core/css/public.css new file mode 100644 index 0000000000000..a936d0c415206 --- /dev/null +++ b/core/css/public.css @@ -0,0 +1,72 @@ +#body-public { + /** don't apply content header padding on the base layout */ + /* force layout to make sure the content element's height matches its contents' height */ + /* public footer */ +} +#body-public .header-right #header-primary-action a { + color: var(--color-primary-text); +} +#body-public .header-right #header-secondary-action ul li { + min-width: 270px; +} +#body-public .header-right #header-secondary-action #header-actions-toggle { + background-color: transparent; + border-color: transparent; +} +#body-public .header-right #header-secondary-action #header-actions-toggle:hover, #body-public .header-right #header-secondary-action #header-actions-toggle:focus, #body-public .header-right #header-secondary-action #header-actions-toggle:active { + opacity: 1; +} +#body-public .header-right #header-secondary-action #external-share-menu-item form { + display: flex; +} +#body-public .header-right #header-secondary-action #external-share-menu-item .hidden { + display: none; +} +#body-public .header-right #header-secondary-action #external-share-menu-item #save-button-confirm { + flex-grow: 0; +} +#body-public #content { + min-height: calc(100% - 65px); +} +#body-public.layout-base #content { + padding-top: 0; +} +#body-public .ie #content { + display: inline-block; +} +#body-public p.info { + margin: 20px auto; + text-shadow: 0 0 2px rgba(0, 0, 0, 0.4); + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +#body-public p.info, #body-public form fieldset legend, +#body-public #datadirContent label, +#body-public form fieldset .warning-info, +#body-public form input[type=checkbox] + label { + text-align: center; +} +#body-public footer { + position: relative; + display: flex; + align-items: center; + justify-content: center; + height: 65px; + flex-direction: column; +} +#body-public footer p { + text-align: center; + color: var(--color-text-lighter); +} +#body-public footer p a { + color: var(--color-text-lighter); + font-weight: bold; + white-space: nowrap; + /* increasing clickability to more than the text height */ + padding: 10px; + margin: -10px; + line-height: 200%; +} + +/*# sourceMappingURL=public.css.map */ diff --git a/core/css/public.css.map b/core/css/public.css.map new file mode 100644 index 0000000000000..e3229512ffac0 --- /dev/null +++ b/core/css/public.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["public.scss"],"names":[],"mappings":"AAEA;AAyCC;AAKA;AAoBA;;AA/DC;EACC;;AAIA;EACC;;AAED;EACC;EACA;;AAEA;EAGC;;AAID;EACC;;AAED;EACC;;AAED;EACC;;AAMJ;EAEC;;AAKD;EACC;;AAID;EACC;;AAID;EACC;EACA;EACA;EACA;EACA;;AAED;AAAA;AAAA;AAAA;EAIC;;AAID;EACC;EACA;EACA;EACA;EACA,QA1Ec;EA2Ed;;AACA;EACC;EACA;;AACA;EACC;EACA;EACA;AACA;EACA;EACA;EACA","file":"public.css"} \ No newline at end of file diff --git a/core/css/server.css b/core/css/server.css new file mode 100644 index 0000000000000..d8828a149326c --- /dev/null +++ b/core/css/server.css @@ -0,0 +1,5189 @@ +@charset "UTF-8"; +/** + * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com) + * + * @author John Molakvoæ (skjnldsv) + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ +@import url("../../dist/icons.css"); +/** + * @copyright Copyright (c) 2016, John Molakvoæ + * @copyright Copyright (c) 2016, Lukas Reschke + * @copyright Copyright (c) 2016, Robin Appelman + * @copyright Copyright (c) 2016, Julius Haertl + * @copyright Copyright (c) 2016, Joas Schilling + * @copyright Copyright (c) 2016, Morris Jobke + * @copyright Copyright (c) 2016, Christoph Wurst + * @copyright Copyright (c) 2016, Raghu Nayyar + * @copyright Copyright (c) 2011-2017, Jan-Christoph Borchardt + * @copyright Copyright (c) 2019-2020, Gary Kim + * + * @license GNU AGPL version 3 or any later version + * + */ +html, body, div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, code, del, dfn, em, img, q, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, dialog, figure, footer, header, hgroup, nav, section { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-weight: inherit; + font-size: 100%; + font-family: inherit; + vertical-align: baseline; + cursor: default; + scrollbar-color: var(--color-border-dark) transparent; + scrollbar-width: thin; +} + +html, body { + height: 100%; +} + +article, aside, dialog, figure, footer, header, hgroup, nav, section { + display: block; +} + +body { + line-height: 1.5; +} + +table { + border-collapse: separate; + border-spacing: 0; + white-space: nowrap; +} + +caption, th, td { + text-align: left; + font-weight: normal; +} + +table, td, th { + vertical-align: middle; +} + +a { + border: 0; + color: var(--color-main-text); + text-decoration: none; + cursor: pointer; +} +a * { + cursor: pointer; +} + +a.external { + margin: 0 3px; + text-decoration: underline; +} + +input { + cursor: pointer; +} +input * { + cursor: pointer; +} + +select, .button span, label { + cursor: pointer; +} + +ul { + list-style: none; +} + +body { + background-color: var(--color-main-background); + font-weight: normal; + /* bring the default font size up to 15px */ + font-size: var(--default-font-size); + line-height: var(--default-line-height); + font-family: var(--font-face); + color: var(--color-main-text); +} + +.two-factor-header { + text-align: center; +} + +.two-factor-provider { + text-align: center; + width: 258px !important; + display: inline-block; + margin-bottom: 0 !important; + background-color: var(--color-background-darker) !important; + border: none !important; +} + +.two-factor-link { + display: inline-block; + padding: 12px; + color: var(--color-text-lighter); +} + +.float-spinner { + height: 32px; + display: none; +} + +#nojavascript { + position: fixed; + top: 0; + bottom: 0; + left: 0; + height: 100%; + width: 100%; + z-index: 9000; + text-align: center; + background-color: var(--color-background-darker); + color: var(--color-primary-text); + line-height: 125%; + font-size: 24px; +} +#nojavascript div { + display: block; + position: relative; + width: 50%; + top: 35%; + margin: 0px auto; +} +#nojavascript a { + color: var(--color-primary-text); + border-bottom: 2px dotted var(--color-main-background); +} +#nojavascript a:hover, #nojavascript a:focus { + color: var(--color-primary-text-dark); +} + +/* SCROLLING */ +::-webkit-scrollbar { + width: 12px; + height: 12px; +} + +::-webkit-scrollbar-track-piece { + background-color: transparent; +} + +::-webkit-scrollbar-thumb { + background: var(--color-border-dark); + border-radius: var(--border-radius-large); + border: 2px solid transparent; + background-clip: content-box; +} + +/* SELECTION */ +::selection { + background-color: var(--color-primary-element); + color: var(--color-primary-text); +} + +/* CONTENT ------------------------------------------------------------------ */ +#controls { + box-sizing: border-box; + position: -webkit-sticky; + position: sticky; + height: 44px; + padding: 0; + margin: 0; + background-color: var(--color-main-background-translucent); + z-index: 62; + /* must be above the filelist sticky header and texteditor menubar */ + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + display: flex; + top: 50px; +} + +/* position controls for apps with app-navigation */ +.viewer-mode #app-navigation + #app-content #controls { + left: 0; +} + +#app-navigation * { + box-sizing: border-box; +} + +#controls .actions > div > .button, #controls .actions > div button, #controls .actions > .button, #controls .actions button { + box-sizing: border-box; + display: inline-block; + display: flex; + height: 36px; + width: 36px; + padding: 9px; + align-items: center; + justify-content: center; +} +#controls .actions > div .button.hidden, #controls .actions .button.hidden { + display: none; +} + +/* EMPTY CONTENT DISPLAY ------------------------------------------------------------ */ +#emptycontent, +.emptycontent { + color: var(--color-text-maxcontrast); + text-align: center; + margin-top: 30vh; + width: 100%; +} +#app-sidebar #emptycontent, +#app-sidebar .emptycontent { + margin-top: 10vh; +} +#emptycontent .emptycontent-search, +.emptycontent .emptycontent-search { + position: static; +} +#emptycontent h2, +.emptycontent h2 { + margin-bottom: 10px; +} +#emptycontent [class^=icon-], +#emptycontent [class*=icon-], +.emptycontent [class^=icon-], +.emptycontent [class*=icon-] { + background-size: 64px; + height: 64px; + width: 64px; + margin: 0 auto 15px; +} +#emptycontent [class^=icon-]:not([class^=icon-loading]), #emptycontent [class^=icon-]:not([class*=icon-loading]), +#emptycontent [class*=icon-]:not([class^=icon-loading]), +#emptycontent [class*=icon-]:not([class*=icon-loading]), +.emptycontent [class^=icon-]:not([class^=icon-loading]), +.emptycontent [class^=icon-]:not([class*=icon-loading]), +.emptycontent [class*=icon-]:not([class^=icon-loading]), +.emptycontent [class*=icon-]:not([class*=icon-loading]) { + opacity: 0.4; +} + +/* LOG IN & INSTALLATION ------------------------------------------------------------ */ +#datadirContent label { + width: 100%; +} + +/* strengthify wrapper */ +/* General new input field look */ +/* Nicely grouping input field sets */ +.grouptop, .groupmiddle, .groupbottom { + position: relative; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* Show password toggle */ +#show, #dbpassword { + position: absolute; + right: 1em; + top: 0.8em; + float: right; +} + +#show + label, #dbpassword + label { + right: 21px; + top: 15px !important; + margin: -14px !important; + padding: 14px !important; +} + +#show:checked + label, #dbpassword:checked + label, #personal-show:checked + label { + opacity: 0.8; +} + +#show + label, #dbpassword + label, #personal-show + label { + position: absolute !important; + height: 20px; + width: 24px; + background-image: var(--icon-toggle-000); + background-repeat: no-repeat; + background-position: center; + opacity: 0.3; +} + +/* Feedback for keyboard focus and mouse hover */ +#show:focus + label, +#dbpassword:focus + label, +#personal-show:focus + label { + opacity: 1; +} +#show + label:hover, +#dbpassword + label:hover, +#personal-show + label:hover { + opacity: 1; +} + +#show + label:before, #dbpassword + label:before, #personal-show + label:before { + display: none; +} + +#pass2, input[name=personal-password-clone] { + padding-right: 30px; +} + +.personal-show-container { + position: relative; + display: inline-block; + margin-right: 6px; +} + +#personal-show + label { + display: block; + right: 0; + margin-top: -43px; + margin-right: -4px; + padding: 22px; +} + +/* Warnings and errors are the same */ +#body-user .warning, #body-settings .warning { + margin-top: 8px; + padding: 5px; + border-radius: var(--border-radius); + color: var(--color-primary-text); + background-color: var(--color-warning); +} + +.warning legend, .warning a { + color: var(--color-primary-text) !important; + font-weight: bold !important; +} + +.error:not(.toastify) a { + color: white !important; + font-weight: bold !important; +} +.error:not(.toastify) a.button { + color: var(--color-text-lighter) !important; + display: inline-block; + text-align: center; +} +.error:not(.toastify) pre { + white-space: pre-wrap; + text-align: left; +} + +.error-wide { + width: 700px; + margin-left: -200px !important; +} +.error-wide .button { + color: black !important; +} + +.warning-input { + border-color: var(--color-error) !important; +} + +/* fixes for update page TODO should be fixed some time in a proper way */ +/* this is just for an error while updating the Nextcloud instance */ +/* Sticky footer */ +/* round profile photos */ +.avatar, .avatardiv { + border-radius: 50%; + flex-shrink: 0; +} +.avatar > img, .avatardiv > img { + border-radius: 50%; + flex-shrink: 0; +} + +td.avatar { + border-radius: 0; +} + +#notification-container { + left: 50%; + max-width: 60%; + position: fixed; + top: 0; + text-align: center; + transform: translateX(-50%); + z-index: 8000; +} + +#notification { + margin: 0 auto; + z-index: 8000; + background-color: var(--color-main-background); + border: 0; + padding: 1px 8px; + display: none; + position: relative; + top: 0; + border-bottom-left-radius: 3px; + border-bottom-right-radius: 3px; + opacity: 0.9; + overflow-x: hidden; + overflow-y: auto; + max-height: 100px; +} +#notification span { + cursor: pointer; + margin-left: 1em; +} +#notification .row { + position: relative; +} +#notification .row .close { + display: inline-block; + vertical-align: middle; + position: absolute; + right: 0; + top: 0; + margin-top: 2px; +} +#notification .row.closeable { + padding-right: 20px; +} + +tr .action:not(.permanent), .selectedActions > a { + opacity: 0; +} + +tr:hover .action:not(.menuitem), tr:focus .action:not(.menuitem), +tr .action.permanent:not(.menuitem) { + opacity: 0.5; +} + +.selectedActions > a { + opacity: 0.5; + position: relative; + top: 2px; +} +.selectedActions > a:hover, .selectedActions > a:focus { + opacity: 1; +} + +tr .action { + width: 16px; + height: 16px; +} + +.header-action { + opacity: 0.8; +} + +tr:hover .action:hover, tr:focus .action:focus { + opacity: 1; +} + +.selectedActions a:hover, .selectedActions a:focus { + opacity: 1; +} + +.header-action:hover, .header-action:focus { + opacity: 1; +} + +tbody tr:hover, tbody tr:focus, tbody tr:active { + background-color: var(--color-background-dark); +} + +code { + font-family: "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", monospace; +} + +.pager { + list-style: none; + float: right; + display: inline; + margin: 0.7em 13em 0 0; +} +.pager li { + display: inline-block; +} + +.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { + overflow: hidden; + text-overflow: ellipsis; +} + +.ui-icon-circle-triangle-e { + background-image: url("../img/actions/play-next.svg?v=1"); +} + +.ui-icon-circle-triangle-w { + background-image: url("../img/actions/play-previous.svg?v=1"); +} + +/* ---- jQuery UI datepicker ---- */ +.ui-widget.ui-datepicker { + margin-top: 10px; + padding: 4px 8px; + width: auto; + border-radius: var(--border-radius); + border: none; + z-index: 1600 !important; +} +.ui-widget.ui-datepicker .ui-state-default, +.ui-widget.ui-datepicker .ui-widget-content .ui-state-default, +.ui-widget.ui-datepicker .ui-widget-header .ui-state-default { + border: 1px solid transparent; + background: inherit; +} +.ui-widget.ui-datepicker .ui-widget-header { + padding: 7px; + font-size: 13px; + border: none; + background-color: var(--color-main-background); + color: var(--color-main-text); +} +.ui-widget.ui-datepicker .ui-widget-header .ui-datepicker-title { + line-height: 1; + font-weight: normal; +} +.ui-widget.ui-datepicker .ui-widget-header .ui-icon { + opacity: 0.5; +} +.ui-widget.ui-datepicker .ui-widget-header .ui-icon.ui-icon-circle-triangle-e { + background: url("../img/actions/arrow-right.svg") center center no-repeat; +} +.ui-widget.ui-datepicker .ui-widget-header .ui-icon.ui-icon-circle-triangle-w { + background: url("../img/actions/arrow-left.svg") center center no-repeat; +} +.ui-widget.ui-datepicker .ui-widget-header .ui-state-hover .ui-icon { + opacity: 1; +} +.ui-widget.ui-datepicker .ui-datepicker-calendar th { + font-weight: normal; + color: var(--color-text-lighter); + opacity: 0.8; + width: 26px; + padding: 2px; +} +.ui-widget.ui-datepicker .ui-datepicker-calendar tr:hover { + background-color: inherit; +} +.ui-widget.ui-datepicker .ui-datepicker-calendar td.ui-datepicker-today a:not(.ui-state-hover) { + background-color: var(--color-background-darker); +} +.ui-widget.ui-datepicker .ui-datepicker-calendar td.ui-datepicker-current-day a.ui-state-active, +.ui-widget.ui-datepicker .ui-datepicker-calendar td .ui-state-hover, +.ui-widget.ui-datepicker .ui-datepicker-calendar td .ui-state-focus { + background-color: var(--color-primary); + color: var(--color-primary-text); + font-weight: bold; +} +.ui-widget.ui-datepicker .ui-datepicker-calendar td.ui-datepicker-week-end:not(.ui-state-disabled) :not(.ui-state-hover), +.ui-widget.ui-datepicker .ui-datepicker-calendar td .ui-priority-secondary:not(.ui-state-hover) { + color: var(--color-text-lighter); + opacity: 0.8; +} + +.ui-datepicker-prev, .ui-datepicker-next { + border: var(--color-border-dark); + background: var(--color-main-background); +} + +/* ---- jQuery UI timepicker ---- */ +.ui-widget.ui-timepicker { + margin-top: 10px !important; + width: auto !important; + border-radius: var(--border-radius); + z-index: 1600 !important; + /* AM/PM fix */ +} +.ui-widget.ui-timepicker .ui-widget-content { + border: none !important; +} +.ui-widget.ui-timepicker .ui-state-default, +.ui-widget.ui-timepicker .ui-widget-content .ui-state-default, +.ui-widget.ui-timepicker .ui-widget-header .ui-state-default { + border: 1px solid transparent; + background: inherit; +} +.ui-widget.ui-timepicker .ui-widget-header { + padding: 7px; + font-size: 13px; + border: none; + background-color: var(--color-main-background); + color: var(--color-main-text); +} +.ui-widget.ui-timepicker .ui-widget-header .ui-timepicker-title { + line-height: 1; + font-weight: normal; +} +.ui-widget.ui-timepicker table.ui-timepicker tr .ui-timepicker-hour-cell:first-child { + margin-left: 30px; +} +.ui-widget.ui-timepicker .ui-timepicker-table th { + font-weight: normal; + color: var(--color-text-lighter); + opacity: 0.8; +} +.ui-widget.ui-timepicker .ui-timepicker-table th.periods { + padding: 0; + width: 30px; + line-height: 30px; +} +.ui-widget.ui-timepicker .ui-timepicker-table tr:hover { + background-color: inherit; +} +.ui-widget.ui-timepicker .ui-timepicker-table td.ui-timepicker-hour-cell a.ui-state-active, .ui-widget.ui-timepicker .ui-timepicker-table td.ui-timepicker-minute-cell a.ui-state-active, +.ui-widget.ui-timepicker .ui-timepicker-table td .ui-state-hover, +.ui-widget.ui-timepicker .ui-timepicker-table td .ui-state-focus { + background-color: var(--color-primary); + color: var(--color-primary-text); + font-weight: bold; +} +.ui-widget.ui-timepicker .ui-timepicker-table td.ui-timepicker-minutes:not(.ui-state-hover) { + color: var(--color-text-lighter); +} +.ui-widget.ui-timepicker .ui-timepicker-table td.ui-timepicker-hours { + border-right: 1px solid var(--color-border); +} + +/* ---- jQuery UI datepicker & timepicker global rules ---- */ +.ui-widget.ui-datepicker .ui-datepicker-calendar tr, +.ui-widget.ui-timepicker table.ui-timepicker tr { + display: flex; + flex-wrap: nowrap; + justify-content: space-between; +} +.ui-widget.ui-datepicker .ui-datepicker-calendar tr td, +.ui-widget.ui-timepicker table.ui-timepicker tr td { + flex: 1 1 auto; + margin: 0; + padding: 2px; + height: 26px; + width: 26px; + display: flex; + align-items: center; + justify-content: center; +} +.ui-widget.ui-datepicker .ui-datepicker-calendar tr td > *, +.ui-widget.ui-timepicker table.ui-timepicker tr td > * { + border-radius: 50%; + text-align: center; + font-weight: normal; + color: var(--color-main-text); + display: block; + line-height: 18px; + width: 18px; + height: 18px; + padding: 3px; + font-size: 0.9em; +} + +/* ---- DIALOGS ---- */ +#oc-dialog-filepicker-content { + position: relative; + display: flex; + flex-direction: column; + /* Grid view toggle */ +} +#oc-dialog-filepicker-content .dirtree { + flex-wrap: wrap; + box-sizing: border-box; + padding-right: 140px; +} +#oc-dialog-filepicker-content .dirtree div:first-child a { + background-image: var(--icon-home-000); + background-repeat: no-repeat; + background-position: left center; +} +#oc-dialog-filepicker-content .dirtree span:not(:last-child) { + cursor: pointer; +} +#oc-dialog-filepicker-content .dirtree span:last-child { + font-weight: bold; +} +#oc-dialog-filepicker-content .dirtree span:not(:last-child)::after { + content: ">"; + padding: 3px; +} +#oc-dialog-filepicker-content #picker-view-toggle { + position: absolute; + background-color: transparent; + border: none; + margin: 0; + padding: 22px; + opacity: 0.5; + right: 0; + top: 0; +} +#oc-dialog-filepicker-content #picker-view-toggle:hover, #oc-dialog-filepicker-content #picker-view-toggle:focus { + opacity: 1; +} +#oc-dialog-filepicker-content #picker-showgridview:focus + #picker-view-toggle { + opacity: 1; +} +#oc-dialog-filepicker-content .actions.creatable { + flex-wrap: wrap; + padding: 0px; + box-sizing: border-box; + display: inline-flex; + float: none; + max-height: 36px; + max-width: 36px; + background-color: var(--color-background-dark); + border: 1px solid var(--color-border-dark); + border-radius: var(--border-radius-pill); + position: relative; + left: 15px; + top: 3px; + order: 1; +} +#oc-dialog-filepicker-content .actions.creatable .icon.icon-add { + background-image: var(--icon-add-000); + background-size: 16px 16px; + width: 34px; + height: 34px; + margin: 0px; + opacity: 0.5; +} +#oc-dialog-filepicker-content .actions.creatable a { + width: 36px; + padding: 0px; + position: static; +} +#oc-dialog-filepicker-content .actions.creatable .menu { + top: 100%; + margin-top: 10px; +} +#oc-dialog-filepicker-content .actions.creatable .menu form { + display: flex; + margin: 10px; +} +#oc-dialog-filepicker-content .filelist-container { + box-sizing: border-box; + display: inline-block; + overflow-y: auto; + flex: 1; + /*height: 100%;*/ + /* overflow under the button row */ + width: 100%; + overflow-x: hidden; +} +#oc-dialog-filepicker-content .emptycontent { + color: var(--color-text-maxcontrast); + text-align: center; + margin-top: 80px; + width: 100%; + display: none; +} +#oc-dialog-filepicker-content .filelist { + background-color: var(--color-main-background); + width: 100%; +} +#oc-dialog-filepicker-content #picker-filestable.filelist { + /* prevent the filepicker to overflow */ + min-width: initial; + margin-bottom: 50px; +} +#oc-dialog-filepicker-content #picker-filestable.filelist thead tr { + border-bottom: 1px solid var(--color-border); + background-color: var(--color-main-background); +} +#oc-dialog-filepicker-content #picker-filestable.filelist thead tr th { + width: 80%; + border: none; +} +#oc-dialog-filepicker-content #picker-filestable.filelist th .columntitle { + display: block; + padding: 15px; + height: 50px; + box-sizing: border-box; + -moz-box-sizing: border-box; + vertical-align: middle; +} +#oc-dialog-filepicker-content #picker-filestable.filelist th .columntitle.name { + padding-left: 5px; + margin-left: 50px; +} +#oc-dialog-filepicker-content #picker-filestable.filelist th .sort-indicator { + width: 10px; + height: 8px; + margin-left: 5px; + display: inline-block; + vertical-align: text-bottom; + opacity: 0.3; +} +#oc-dialog-filepicker-content #picker-filestable.filelist .sort-indicator.hidden, +#oc-dialog-filepicker-content #picker-filestable.filelist th:hover .sort-indicator.hidden, +#oc-dialog-filepicker-content #picker-filestable.filelist th:focus .sort-indicator.hidden { + visibility: hidden; +} +#oc-dialog-filepicker-content #picker-filestable.filelist th:hover .sort-indicator.hidden, +#oc-dialog-filepicker-content #picker-filestable.filelist th:focus .sort-indicator.hidden { + visibility: visible; +} +#oc-dialog-filepicker-content #picker-filestable.filelist td { + padding: 14px; + border-bottom: 1px solid var(--color-border); +} +#oc-dialog-filepicker-content #picker-filestable.filelist tr:last-child td { + border-bottom: none; +} +#oc-dialog-filepicker-content #picker-filestable.filelist .filename { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + background-size: 32px; + background-repeat: no-repeat; + padding-left: 51px; + background-position: 7px 7px; + cursor: pointer; + max-width: 0; +} +#oc-dialog-filepicker-content #picker-filestable.filelist .filename .filename-parts { + display: flex; +} +#oc-dialog-filepicker-content #picker-filestable.filelist .filename .filename-parts__first { + overflow: hidden; + white-space: pre; + text-overflow: ellipsis; +} +#oc-dialog-filepicker-content #picker-filestable.filelist .filename .filename-parts__last { + white-space: pre; +} +#oc-dialog-filepicker-content #picker-filestable.filelist .filesize, #oc-dialog-filepicker-content #picker-filestable.filelist .date { + width: 80px; +} +#oc-dialog-filepicker-content #picker-filestable.filelist .filesize { + text-align: right; +} +#oc-dialog-filepicker-content #picker-filestable.filelist.view-grid { + display: flex; + flex-direction: column; +} +#oc-dialog-filepicker-content #picker-filestable.filelist.view-grid tbody { + display: grid; + grid-template-columns: repeat(auto-fill, 120px); + justify-content: space-around; + row-gap: 15px; + margin: 15px 0; +} +#oc-dialog-filepicker-content #picker-filestable.filelist.view-grid tbody tr { + display: block; + position: relative; + border-radius: var(--border-radius); + padding: 10px; + display: flex; + flex-direction: column; + width: 100px; +} +#oc-dialog-filepicker-content #picker-filestable.filelist.view-grid tbody tr td { + border: none; + padding: 0; + text-align: center; + border-radius: var(--border-radius); +} +#oc-dialog-filepicker-content #picker-filestable.filelist.view-grid tbody tr td.filename { + padding: 100px 0 0 0; + background-position: center top; + background-size: contain; + line-height: 30px; + max-width: none; +} +#oc-dialog-filepicker-content #picker-filestable.filelist.view-grid tbody tr td.filename .filename-parts { + justify-content: center; +} +#oc-dialog-filepicker-content #picker-filestable.filelist.view-grid tbody tr td.filesize { + line-height: 10px; + width: 100%; +} +#oc-dialog-filepicker-content #picker-filestable.filelist.view-grid tbody tr td.date { + display: none; +} +#oc-dialog-filepicker-content .filepicker_element_selected { + background-color: var(--color-background-darker); +} + +.ui-dialog { + position: fixed !important; +} + +span.ui-icon { + float: left; + margin: 3px 7px 30px 0; +} + +/* ---- CONTACTS MENU ---- */ +#contactsmenu .menutoggle { + background-size: 20px 20px; + padding: 14px; + cursor: pointer; + background-image: var(--original-icon-contacts-white); + filter: var(--primary-invert-if-bright); +} +#contactsmenu .menutoggle:hover, #contactsmenu .menutoggle:focus, #contactsmenu .menutoggle:active { + opacity: 1 !important; +} + +#header .header-right > div#contactsmenu > .menu { + /* show 2.5 to 4.5 entries depending on the screen height */ + height: calc(100vh - 150px); + max-height: 275px; + min-height: 175px; + width: 350px; +} +#header .header-right > div#contactsmenu > .menu .emptycontent { + margin-top: 5vh !important; + margin-bottom: 2vh; +} +#header .header-right > div#contactsmenu > .menu .emptycontent .icon-loading, +#header .header-right > div#contactsmenu > .menu .emptycontent .icon-search { + display: inline-block; +} +#header .header-right > div#contactsmenu > .menu .content { + /* fixed max height of the parent container without the search input */ + height: calc(100vh - 150px - 50px); + max-height: 225px; + min-height: 125px; + overflow-y: auto; +} +#header .header-right > div#contactsmenu > .menu .content .footer { + text-align: center; +} +#header .header-right > div#contactsmenu > .menu .content .footer a { + display: block; + width: 100%; + padding: 12px 0; + opacity: 0.5; +} +#header .header-right > div#contactsmenu > .menu .contact { + display: flex; + position: relative; + align-items: center; + padding: 3px 3px 3px 10px; + border-bottom: 1px solid var(--color-border); + /* actions menu */ +} +#header .header-right > div#contactsmenu > .menu .contact :last-of-type { + border-bottom: none; +} +#header .header-right > div#contactsmenu > .menu .contact .avatar { + height: 32px; + width: 32px; + display: inline-block; +} +#header .header-right > div#contactsmenu > .menu .contact .body { + flex-grow: 1; + padding-left: 8px; +} +#header .header-right > div#contactsmenu > .menu .contact .body div { + position: relative; + width: 100%; +} +#header .header-right > div#contactsmenu > .menu .contact .body .full-name, #header .header-right > div#contactsmenu > .menu .contact .body .last-message { + /* TODO: don't use fixed width */ + max-width: 204px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} +#header .header-right > div#contactsmenu > .menu .contact .body .last-message { + opacity: 0.5; +} +#header .header-right > div#contactsmenu > .menu .contact .top-action, #header .header-right > div#contactsmenu > .menu .contact .second-action, #header .header-right > div#contactsmenu > .menu .contact .other-actions { + width: 16px; + height: 16px; + padding: 14px; + opacity: 0.5; + cursor: pointer; +} +#header .header-right > div#contactsmenu > .menu .contact .top-action :hover, #header .header-right > div#contactsmenu > .menu .contact .second-action :hover, #header .header-right > div#contactsmenu > .menu .contact .other-actions :hover { + opacity: 1; +} +#header .header-right > div#contactsmenu > .menu .contact .menu { + top: 47px; + margin-right: 13px; +} +#header .header-right > div#contactsmenu > .menu .contact .popovermenu::after { + right: 2px; +} + +#contactsmenu-search { + width: calc(100% - 16px); + margin: 8px; + height: 34px; +} + +/* ---- TOOLTIPS ---- */ +.extra-data { + padding-right: 5px !important; +} + +/* ---- TAGS ---- */ +#tagsdialog .content { + width: 100%; + height: 280px; +} +#tagsdialog .scrollarea { + overflow: auto; + border: 1px solid var(--color-background-darker); + width: 100%; + height: 240px; +} +#tagsdialog .bottombuttons { + width: 100%; + height: 30px; +} +#tagsdialog .bottombuttons * { + float: left; +} +#tagsdialog .taglist li { + background: var(--color-background-dark); + padding: 0.3em 0.8em; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + -webkit-transition: background-color 500ms; + transition: background-color 500ms; +} +#tagsdialog .taglist li:hover, #tagsdialog .taglist li:active { + background: var(--color-background-darker); +} +#tagsdialog .addinput { + width: 90%; + clear: both; +} + +/* ---- BREADCRUMB ---- */ +.breadcrumb { + display: inline-flex; +} + +div.crumb { + display: inline-flex; + background-image: url("../img/breadcrumb.svg?v=1"); + background-repeat: no-repeat; + background-position: right center; + height: 44px; + background-size: auto 24px; + flex: 0 0 auto; + order: 1; + padding-right: 7px; +} +div.crumb.crumbmenu { + order: 2; + position: relative; +} +div.crumb.crumbmenu a { + opacity: 0.5; +} +div.crumb.crumbmenu.canDropChildren .popovermenu, div.crumb.crumbmenu.canDrop .popovermenu { + display: block; +} +div.crumb.crumbmenu .popovermenu { + top: 100%; + margin-right: 3px; +} +div.crumb.crumbmenu .popovermenu ul { + max-height: 345px; + overflow-y: auto; + overflow-x: hidden; + padding-right: 5px; +} +div.crumb.crumbmenu .popovermenu ul li.canDrop span:first-child { + background-image: url("../img/filetypes/folder-drag-accept.svg?v=1") !important; +} +div.crumb.crumbmenu .popovermenu .in-breadcrumb { + display: none; +} +div.crumb.hidden { + display: none; +} +div.crumb.hidden ~ .crumb { + order: 3; +} +div.crumb > a, +div.crumb > span { + position: relative; + padding: 12px; + opacity: 0.5; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + flex: 0 0 auto; + max-width: 200px; +} +div.crumb > a.icon-home, div.crumb > a.icon-delete, +div.crumb > span.icon-home, +div.crumb > span.icon-delete { + text-indent: -9999px; +} +div.crumb > a[class^=icon-] { + padding: 0; + width: 44px; +} +div.crumb:last-child { + font-weight: bold; + margin-right: 10px; +} +div.crumb:last-child a ~ span { + padding-left: 0; +} +div.crumb:hover, div.crumb:focus, div.crumb a:focus, div.crumb:active { + opacity: 1; +} +div.crumb:hover > a, +div.crumb:hover > span, div.crumb:focus > a, +div.crumb:focus > span, div.crumb a:focus > a, +div.crumb a:focus > span, div.crumb:active > a, +div.crumb:active > span { + opacity: 0.7; +} + +/* some feedback for hover/tap on breadcrumbs */ +.appear { + opacity: 1; + -webkit-transition: opacity 500ms ease 0s; + -moz-transition: opacity 500ms ease 0s; + -ms-transition: opacity 500ms ease 0s; + -o-transition: opacity 500ms ease 0s; + transition: opacity 500ms ease 0s; +} +.appear.transparent { + opacity: 0; +} + +/* LEGACY FIX only - do not use fieldsets for settings */ +fieldset.warning legend, fieldset.update legend { + top: 18px; + position: relative; +} +fieldset.warning legend + p, fieldset.update legend + p { + margin-top: 12px; +} + +/* for IE10 */ +@-ms-viewport { + width: device-width; +} +/* hidden input type=file field */ +.hiddenuploadfield { + display: none; + width: 0; + height: 0; + opacity: 0; +} + +/** + * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com) + * + * @author John Molakvoæ (skjnldsv) + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ +/** + * @copyright Copyright (c) 2016, John Molakvoæ + * @copyright Copyright (c) 2016, Morris Jobke + * @copyright Copyright (c) 2016, Joas Schilling + * @copyright Copyright (c) 2016, Julius Haertl + * @copyright Copyright (c) 2016, jowi + * @copyright Copyright (c) 2015, Joas Schilling + * @copyright Copyright (c) 2015, Hendrik Leppelsack + * @copyright Copyright (c) 2014-2017, Jan-Christoph Borchardt + * + * @license GNU AGPL version 3 or any later version + * + */ +/** + * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com) + * + * @author John Molakvoæ (skjnldsv) + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ +/** + * @see core/src/icons.js + */ +/** + * SVG COLOR API + * + * @param string $icon the icon filename + * @param string $dir the icon folder within /core/img if $core or app name + * @param string $color the desired color in hexadecimal + * @param int $version the version of the file + * @param bool [$core] search icon in core + * + * @returns A background image with the url to the set to the requested icon. + */ +/* Specifically override browser styles */ +input, textarea, select, button, div[contenteditable=true], div[contenteditable=false] { + font-family: var(--font-face); +} + +.select2-container-multi .select2-choices .select2-search-field input, .select2-search input, .ui-widget { + font-family: var(--font-face) !important; +} + +/* Simple selector to allow easy overriding */ +select, +button:not(.button-vue), +input, +textarea, +div[contenteditable=true], +div[contenteditable=false] { + width: 130px; + min-height: 34px; + box-sizing: border-box; +} + +/** + * color-text-lighter normal state + * color-text-lighter active state + * color-text-maxcontrast disabled state + */ +/* Default global values */ +div.select2-drop .select2-search input, +select, +button:not(.button-vue), .button, +input:not([type=range]), +textarea, +div[contenteditable=true], +.pager li a { + margin: 3px 3px 3px 0; + padding: 7px 6px; + font-size: 13px; + background-color: var(--color-main-background); + color: var(--color-main-text); + border: 1px solid var(--color-border-dark); + outline: none; + border-radius: var(--border-radius); + cursor: text; + /* Primary action button, use sparingly */ +} +div.select2-drop .select2-search input:not(:disabled):not(.primary):hover, div.select2-drop .select2-search input:not(:disabled):not(.primary):focus, div.select2-drop .select2-search input:not(:disabled):not(.primary).active, +select:not(:disabled):not(.primary):hover, +select:not(:disabled):not(.primary):focus, +select:not(:disabled):not(.primary).active, +button:not(.button-vue):not(:disabled):not(.primary):hover, +button:not(.button-vue):not(:disabled):not(.primary):focus, +button:not(.button-vue):not(:disabled):not(.primary).active, .button:not(:disabled):not(.primary):hover, .button:not(:disabled):not(.primary):focus, .button:not(:disabled):not(.primary).active, +input:not([type=range]):not(:disabled):not(.primary):hover, +input:not([type=range]):not(:disabled):not(.primary):focus, +input:not([type=range]):not(:disabled):not(.primary).active, +textarea:not(:disabled):not(.primary):hover, +textarea:not(:disabled):not(.primary):focus, +textarea:not(:disabled):not(.primary).active, +div[contenteditable=true]:not(:disabled):not(.primary):hover, +div[contenteditable=true]:not(:disabled):not(.primary):focus, +div[contenteditable=true]:not(:disabled):not(.primary).active, +.pager li a:not(:disabled):not(.primary):hover, +.pager li a:not(:disabled):not(.primary):focus, +.pager li a:not(:disabled):not(.primary).active { + /* active class used for multiselect */ + border-color: var(--color-primary-element); + outline: none; +} +div.select2-drop .select2-search input:not(:disabled):not(.primary):active, +select:not(:disabled):not(.primary):active, +button:not(.button-vue):not(:disabled):not(.primary):active, .button:not(:disabled):not(.primary):active, +input:not([type=range]):not(:disabled):not(.primary):active, +textarea:not(:disabled):not(.primary):active, +div[contenteditable=true]:not(:disabled):not(.primary):active, +.pager li a:not(:disabled):not(.primary):active { + outline: none; + background-color: var(--color-main-background); + color: var(--color-text-light); +} +div.select2-drop .select2-search input:disabled, +select:disabled, +button:not(.button-vue):disabled, .button:disabled, +input:not([type=range]):disabled, +textarea:disabled, +div[contenteditable=true]:disabled, +.pager li a:disabled { + background-color: var(--color-background-dark); + color: var(--color-text-maxcontrast); + cursor: default; + opacity: 0.5; +} +div.select2-drop .select2-search input:required, +select:required, +button:not(.button-vue):required, .button:required, +input:not([type=range]):required, +textarea:required, +div[contenteditable=true]:required, +.pager li a:required { + box-shadow: none; +} +div.select2-drop .select2-search input:invalid, +select:invalid, +button:not(.button-vue):invalid, .button:invalid, +input:not([type=range]):invalid, +textarea:invalid, +div[contenteditable=true]:invalid, +.pager li a:invalid { + box-shadow: none !important; + border-color: var(--color-error); +} +div.select2-drop .select2-search input.primary, +select.primary, +button:not(.button-vue).primary, .button.primary, +input:not([type=range]).primary, +textarea.primary, +div[contenteditable=true].primary, +.pager li a.primary { + background-color: var(--color-primary-element); + border-color: var(--color-primary-element); + color: var(--color-primary-text); + cursor: pointer; + /* Apply border to primary button if on log in page (and not in a dark container) or if in header */ +} +#body-login :not(.body-login-container) div.select2-drop .select2-search input.primary, #header div.select2-drop .select2-search input.primary, +#body-login :not(.body-login-container) select.primary, +#header select.primary, +#body-login :not(.body-login-container) button:not(.button-vue).primary, +#header button:not(.button-vue).primary, #body-login :not(.body-login-container) .button.primary, #header .button.primary, +#body-login :not(.body-login-container) input:not([type=range]).primary, +#header input:not([type=range]).primary, +#body-login :not(.body-login-container) textarea.primary, +#header textarea.primary, +#body-login :not(.body-login-container) div[contenteditable=true].primary, +#header div[contenteditable=true].primary, +#body-login :not(.body-login-container) .pager li a.primary, +#header .pager li a.primary { + border-color: var(--color-primary-text); +} +div.select2-drop .select2-search input.primary:not(:disabled):hover, div.select2-drop .select2-search input.primary:not(:disabled):focus, div.select2-drop .select2-search input.primary:not(:disabled):active, +select.primary:not(:disabled):hover, +select.primary:not(:disabled):focus, +select.primary:not(:disabled):active, +button:not(.button-vue).primary:not(:disabled):hover, +button:not(.button-vue).primary:not(:disabled):focus, +button:not(.button-vue).primary:not(:disabled):active, .button.primary:not(:disabled):hover, .button.primary:not(:disabled):focus, .button.primary:not(:disabled):active, +input:not([type=range]).primary:not(:disabled):hover, +input:not([type=range]).primary:not(:disabled):focus, +input:not([type=range]).primary:not(:disabled):active, +textarea.primary:not(:disabled):hover, +textarea.primary:not(:disabled):focus, +textarea.primary:not(:disabled):active, +div[contenteditable=true].primary:not(:disabled):hover, +div[contenteditable=true].primary:not(:disabled):focus, +div[contenteditable=true].primary:not(:disabled):active, +.pager li a.primary:not(:disabled):hover, +.pager li a.primary:not(:disabled):focus, +.pager li a.primary:not(:disabled):active { + background-color: var(--color-primary-element-light); + border-color: var(--color-primary-element-light); +} +div.select2-drop .select2-search input.primary:not(:disabled):active, +select.primary:not(:disabled):active, +button:not(.button-vue).primary:not(:disabled):active, .button.primary:not(:disabled):active, +input:not([type=range]).primary:not(:disabled):active, +textarea.primary:not(:disabled):active, +div[contenteditable=true].primary:not(:disabled):active, +.pager li a.primary:not(:disabled):active { + color: var(--color-primary-text-dark); +} +div.select2-drop .select2-search input.primary:disabled, +select.primary:disabled, +button:not(.button-vue).primary:disabled, .button.primary:disabled, +input:not([type=range]).primary:disabled, +textarea.primary:disabled, +div[contenteditable=true].primary:disabled, +.pager li a.primary:disabled { + background-color: var(--color-primary-element); + color: var(--color-primary-text-dark); + cursor: default; +} + +div[contenteditable=false] { + margin: 3px 3px 3px 0; + padding: 7px 6px; + font-size: 13px; + background-color: var(--color-main-background); + color: var(--color-text-lighter); + border: 1px solid var(--color-background-darker); + outline: none; + border-radius: var(--border-radius); + background-color: var(--color-background-dark); + color: var(--color-text-lighter); + cursor: default; + opacity: 0.5; +} + +/* Specific override */ +input { + /* Color input doesn't respect the initial height + so we need to set a custom one */ +} +input:not([type=radio]):not([type=checkbox]):not([type=range]):not([type=submit]):not([type=button]):not([type=reset]):not([type=color]):not([type=file]):not([type=image]) { + -webkit-appearance: textfield; + -moz-appearance: textfield; + height: 34px; +} +input[type=radio], input[type=checkbox], input[type=file], input[type=image] { + height: auto; + width: auto; +} +input[type=color] { + margin: 3px; + padding: 0 2px; + min-height: 30px; + width: 40px; + cursor: pointer; +} +input[type=hidden] { + height: 0; + width: 0; +} +input[type=time] { + width: initial; +} + +/* 'Click' inputs */ +select, +button:not(.button-vue), .button, +input[type=button], +input[type=submit], +input[type=reset] { + padding: 6px 16px; + width: auto; + min-height: 34px; + cursor: pointer; + box-sizing: border-box; + background-color: var(--color-background-dark); +} +select:disabled, +button:not(.button-vue):disabled, .button:disabled, +input[type=button]:disabled, +input[type=submit]:disabled, +input[type=reset]:disabled { + cursor: default; +} + +select *, +button:not(.button-vue) *, .button * { + cursor: pointer; +} +select:disabled *, +button:not(.button-vue):disabled *, .button:disabled * { + cursor: default; +} + +/* Buttons */ +button:not(.button-vue), .button, +input[type=button], +input[type=submit], +input[type=reset] { + font-weight: bold; + border-radius: var(--border-radius-pill); + /* Get rid of the inside dotted line in Firefox */ +} +button:not(.button-vue)::-moz-focus-inner, .button::-moz-focus-inner, +input[type=button]::-moz-focus-inner, +input[type=submit]::-moz-focus-inner, +input[type=reset]::-moz-focus-inner { + border: 0; +} +button:not(.button-vue).error, .button.error, +input[type=button].error, +input[type=submit].error, +input[type=reset].error { + background-color: var(--color-error) !important; + border-color: var(--color-error) !important; + color: #fff !important; +} + +button:not(.button-vue):not(.action-button) > span, .button > span { + /* icon position inside buttons */ +} +button:not(.button-vue):not(.action-button) > span[class^=icon-], button:not(.button-vue):not(.action-button) > span[class*=" icon-"], .button > span[class^=icon-], .button > span[class*=" icon-"] { + display: inline-block; + vertical-align: text-bottom; + opacity: 0.5; +} + +textarea, div[contenteditable=true] { + color: var(--color-main-text); + cursor: text; + font-family: inherit; + height: auto; +} +textarea:not(:disabled):active, textarea:not(:disabled):hover, textarea:not(:disabled):focus, div[contenteditable=true]:not(:disabled):active, div[contenteditable=true]:not(:disabled):hover, div[contenteditable=true]:not(:disabled):focus { + border-color: var(--color-background-darker) !important; + background-color: var(--color-main-background) !important; +} + +div[contenteditable=false] { + color: var(--color-text-lighter); + font-family: inherit; + height: auto; +} + +/* Override the ugly select arrow */ +select { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + background: var(--icon-triangle-s-000) no-repeat right 4px center; + background-color: inherit; + outline: 0; + padding-right: 24px !important; + height: 34px; +} + +/* Confirm inputs */ +input[type=text], input[type=password], input[type=email] { + /* only show confirm borders if input is not focused */ +} +input[type=text] + .icon-confirm, input[type=password] + .icon-confirm, input[type=email] + .icon-confirm { + margin-left: -8px !important; + border-left-color: transparent !important; + border-radius: 0 var(--border-radius) var(--border-radius) 0 !important; + background-clip: padding-box; + /* Avoid background under border */ + background-color: var(--color-main-background) !important; + opacity: 1; + height: 34px; + width: 34px; + padding: 7px 6px; + cursor: pointer; + margin-right: 0; +} +input[type=text] + .icon-confirm:disabled, input[type=password] + .icon-confirm:disabled, input[type=email] + .icon-confirm:disabled { + cursor: default; + /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */ + background-image: var(--icon-confirm-fade-dark); +} +input[type=text]:not(:active):not(:hover):not(:focus):invalid + .icon-confirm, input[type=password]:not(:active):not(:hover):not(:focus):invalid + .icon-confirm, input[type=email]:not(:active):not(:hover):not(:focus):invalid + .icon-confirm { + border-color: var(--color-error); +} +input[type=text]:not(:active):not(:hover):not(:focus) + .icon-confirm:active, input[type=text]:not(:active):not(:hover):not(:focus) + .icon-confirm:hover, input[type=text]:not(:active):not(:hover):not(:focus) + .icon-confirm:focus, input[type=password]:not(:active):not(:hover):not(:focus) + .icon-confirm:active, input[type=password]:not(:active):not(:hover):not(:focus) + .icon-confirm:hover, input[type=password]:not(:active):not(:hover):not(:focus) + .icon-confirm:focus, input[type=email]:not(:active):not(:hover):not(:focus) + .icon-confirm:active, input[type=email]:not(:active):not(:hover):not(:focus) + .icon-confirm:hover, input[type=email]:not(:active):not(:hover):not(:focus) + .icon-confirm:focus { + border-color: var(--color-primary-element) !important; + border-radius: var(--border-radius) !important; +} +input[type=text]:not(:active):not(:hover):not(:focus) + .icon-confirm:active:disabled, input[type=text]:not(:active):not(:hover):not(:focus) + .icon-confirm:hover:disabled, input[type=text]:not(:active):not(:hover):not(:focus) + .icon-confirm:focus:disabled, input[type=password]:not(:active):not(:hover):not(:focus) + .icon-confirm:active:disabled, input[type=password]:not(:active):not(:hover):not(:focus) + .icon-confirm:hover:disabled, input[type=password]:not(:active):not(:hover):not(:focus) + .icon-confirm:focus:disabled, input[type=email]:not(:active):not(:hover):not(:focus) + .icon-confirm:active:disabled, input[type=email]:not(:active):not(:hover):not(:focus) + .icon-confirm:hover:disabled, input[type=email]:not(:active):not(:hover):not(:focus) + .icon-confirm:focus:disabled { + border-color: var(--color-background-darker) !important; +} +input[type=text]:active + .icon-confirm, input[type=text]:hover + .icon-confirm, input[type=text]:focus + .icon-confirm, input[type=password]:active + .icon-confirm, input[type=password]:hover + .icon-confirm, input[type=password]:focus + .icon-confirm, input[type=email]:active + .icon-confirm, input[type=email]:hover + .icon-confirm, input[type=email]:focus + .icon-confirm { + border-color: var(--color-primary-element) !important; + border-left-color: transparent !important; + /* above previous input */ + z-index: 2; +} + +/* Various Fixes */ +button img, +.button img { + cursor: pointer; +} + +select, +.button.multiselect { + font-weight: normal; +} + +/* Radio & Checkboxes */ +input[type=checkbox], input[type=radio] { + /* We do not use the nc-darken function as this is not supposed to be changed */ +} +input[type=checkbox].radio, input[type=checkbox].checkbox, input[type=radio].radio, input[type=radio].checkbox { + position: absolute; + left: -10000px; + top: auto; + width: 1px; + height: 1px; + overflow: hidden; +} +input[type=checkbox].radio + label, input[type=checkbox].checkbox + label, input[type=radio].radio + label, input[type=radio].checkbox + label { + user-select: none; +} +input[type=checkbox].radio:disabled + label, input[type=checkbox].radio:disabled + label:before, input[type=checkbox].checkbox:disabled + label, input[type=checkbox].checkbox:disabled + label:before, input[type=radio].radio:disabled + label, input[type=radio].radio:disabled + label:before, input[type=radio].checkbox:disabled + label, input[type=radio].checkbox:disabled + label:before { + cursor: default; +} +input[type=checkbox].radio + label:before, input[type=checkbox].checkbox + label:before, input[type=radio].radio + label:before, input[type=radio].checkbox + label:before { + content: ""; + display: inline-block; + height: 14px; + width: 14px; + vertical-align: middle; + border-radius: 50%; + margin: 0 6px 3px 3px; + border: 1px solid nc-darken(#fff, 47%); +} +input[type=checkbox].radio:not(:disabled):not(:checked) + label:hover:before, input[type=checkbox].radio:focus + label:before, input[type=checkbox].checkbox:not(:disabled):not(:checked) + label:hover:before, input[type=checkbox].checkbox:focus + label:before, input[type=radio].radio:not(:disabled):not(:checked) + label:hover:before, input[type=radio].radio:focus + label:before, input[type=radio].checkbox:not(:disabled):not(:checked) + label:hover:before, input[type=radio].checkbox:focus + label:before { + border-color: var(--color-primary-element); +} +input[type=checkbox].radio:focus-visible + label, input[type=checkbox].checkbox:focus-visible + label, input[type=radio].radio:focus-visible + label, input[type=radio].checkbox:focus-visible + label { + outline-style: solid; + outline-color: var(--color-main-text); + outline-width: 1px; + outline-offset: 2px; +} +input[type=checkbox].radio:checked + label:before, input[type=checkbox].radio.checkbox:indeterminate + label:before, input[type=checkbox].checkbox:checked + label:before, input[type=checkbox].checkbox.checkbox:indeterminate + label:before, input[type=radio].radio:checked + label:before, input[type=radio].radio.checkbox:indeterminate + label:before, input[type=radio].checkbox:checked + label:before, input[type=radio].checkbox.checkbox:indeterminate + label:before { + /* ^ :indeterminate have a strange behavior on radio, + so we respecified the checkbox class again to be safe */ + box-shadow: inset 0px 0px 0px 2px var(--color-main-background); + background-color: var(--color-primary-element); + border-color: var(--color-primary-element); +} +input[type=checkbox].radio:disabled + label:before, input[type=checkbox].checkbox:disabled + label:before, input[type=radio].radio:disabled + label:before, input[type=radio].checkbox:disabled + label:before { + border: 1px solid nc-darken(#fff, 47%); + background-color: nc-darken(#fff, 27%) !important; + /* override other status */ +} +input[type=checkbox].radio:checked:disabled + label:before, input[type=checkbox].checkbox:checked:disabled + label:before, input[type=radio].radio:checked:disabled + label:before, input[type=radio].checkbox:checked:disabled + label:before { + background-color: nc-darken(#fff, 27%); +} +input[type=checkbox].radio + label ~ em, input[type=checkbox].checkbox + label ~ em, input[type=radio].radio + label ~ em, input[type=radio].checkbox + label ~ em { + display: inline-block; + margin-left: 25px; +} +input[type=checkbox].radio + label ~ em:last-of-type, input[type=checkbox].checkbox + label ~ em:last-of-type, input[type=radio].radio + label ~ em:last-of-type, input[type=radio].checkbox + label ~ em:last-of-type { + margin-bottom: 14px; +} +input[type=checkbox].checkbox + label:before, input[type=radio].checkbox + label:before { + border-radius: 1px; + height: 14px; + width: 14px; + box-shadow: none !important; + background-position: center; +} +input[type=checkbox].checkbox:checked + label:before, input[type=radio].checkbox:checked + label:before { + background-image: url("../img/actions/checkbox-mark.svg"); +} +input[type=checkbox].checkbox:indeterminate + label:before, input[type=radio].checkbox:indeterminate + label:before { + background-image: url("../img/actions/checkbox-mixed.svg"); +} +input[type=checkbox].radio--white + label:before, input[type=checkbox].radio--white:focus + label:before, input[type=checkbox].checkbox--white + label:before, input[type=checkbox].checkbox--white:focus + label:before, input[type=radio].radio--white + label:before, input[type=radio].radio--white:focus + label:before, input[type=radio].checkbox--white + label:before, input[type=radio].checkbox--white:focus + label:before { + border-color: #bababa; +} +input[type=checkbox].radio--white:not(:disabled):not(:checked) + label:hover:before, input[type=checkbox].checkbox--white:not(:disabled):not(:checked) + label:hover:before, input[type=radio].radio--white:not(:disabled):not(:checked) + label:hover:before, input[type=radio].checkbox--white:not(:disabled):not(:checked) + label:hover:before { + border-color: #fff; +} +input[type=checkbox].radio--white:checked + label:before, input[type=checkbox].checkbox--white:checked + label:before, input[type=radio].radio--white:checked + label:before, input[type=radio].checkbox--white:checked + label:before { + box-shadow: inset 0px 0px 0px 2px var(--color-main-background); + background-color: #dbdbdb; + border-color: #dbdbdb; +} +input[type=checkbox].radio--white:disabled + label:before, input[type=checkbox].checkbox--white:disabled + label:before, input[type=radio].radio--white:disabled + label:before, input[type=radio].checkbox--white:disabled + label:before { + background-color: #bababa !important; + /* override other status */ + border-color: rgba(255, 255, 255, 0.4) !important; + /* override other status */ +} +input[type=checkbox].radio--white:checked:disabled + label:before, input[type=checkbox].checkbox--white:checked:disabled + label:before, input[type=radio].radio--white:checked:disabled + label:before, input[type=radio].checkbox--white:checked:disabled + label:before { + box-shadow: inset 0px 0px 0px 2px var(--color-main-background); + border-color: rgba(255, 255, 255, 0.4) !important; + /* override other status */ + background-color: #bababa; +} +input[type=checkbox].checkbox--white:checked + label:before, input[type=checkbox].checkbox--white:indeterminate + label:before, input[type=radio].checkbox--white:checked + label:before, input[type=radio].checkbox--white:indeterminate + label:before { + background-color: transparent !important; + /* Override default checked */ + border-color: #fff !important; + /* Override default checked */ + background-image: url("../img/actions/checkbox-mark-white.svg"); +} +input[type=checkbox].checkbox--white:indeterminate + label:before, input[type=radio].checkbox--white:indeterminate + label:before { + background-image: url("../img/actions/checkbox-mixed-white.svg"); +} +input[type=checkbox].checkbox--white:disabled + label:before, input[type=radio].checkbox--white:disabled + label:before { + opacity: 0.7; + /* No other choice for white background image */ +} + +/* Select2 overriding. Merged to core with vendor stylesheet */ +div.select2-drop { + margin-top: -2px; + background-color: var(--color-main-background); +} +div.select2-drop.select2-drop-active { + border-color: var(--color-border-dark); +} +div.select2-drop .avatar { + display: inline-block; + margin-right: 8px; + vertical-align: middle; +} +div.select2-drop .avatar img { + cursor: pointer; +} +div.select2-drop .select2-search input { + min-height: auto; + background: var(--icon-search-000) no-repeat right center !important; + background-origin: content-box !important; +} +div.select2-drop .select2-results { + max-height: 250px; + margin: 0; + padding: 0; +} +div.select2-drop .select2-results .select2-result-label { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +div.select2-drop .select2-results .select2-result-label span { + cursor: pointer; +} +div.select2-drop .select2-results .select2-result-label span em { + cursor: inherit; + background: unset; +} +div.select2-drop .select2-results .select2-result, +div.select2-drop .select2-results .select2-no-results, +div.select2-drop .select2-results .select2-searching { + position: relative; + display: list-item; + padding: 12px; + background-color: transparent; + cursor: pointer; + color: var(--color-text-lighter); +} +div.select2-drop .select2-results .select2-result.select2-selected { + background-color: var(--color-background-dark); +} +div.select2-drop .select2-results .select2-highlighted { + background-color: var(--color-background-dark); + color: var(--color-main-text); +} + +.select2-chosen .avatar, +.select2-chosen .avatar img, +#select2-drop .avatar, +#select2-drop .avatar img { + cursor: pointer; +} + +div.select2-container-multi .select2-choices, div.select2-container-multi.select2-container-active .select2-choices { + box-shadow: none; + white-space: nowrap; + text-overflow: ellipsis; + background: var(--color-main-background); + color: var(--color-text-lighter) !important; + box-sizing: content-box; + border-radius: var(--border-radius); + border: 1px solid var(--color-border-dark); + margin: 0; + padding: 2px 0; + min-height: auto; +} +div.select2-container-multi .select2-choices .select2-search-choice, div.select2-container-multi.select2-container-active .select2-choices .select2-search-choice { + line-height: 20px; + padding-left: 5px; +} +div.select2-container-multi .select2-choices .select2-search-choice.select2-search-choice-focus, div.select2-container-multi .select2-choices .select2-search-choice:hover, div.select2-container-multi .select2-choices .select2-search-choice:active, div.select2-container-multi .select2-choices .select2-search-choice, div.select2-container-multi.select2-container-active .select2-choices .select2-search-choice.select2-search-choice-focus, div.select2-container-multi.select2-container-active .select2-choices .select2-search-choice:hover, div.select2-container-multi.select2-container-active .select2-choices .select2-search-choice:active, div.select2-container-multi.select2-container-active .select2-choices .select2-search-choice { + background-image: none; + background-color: var(--color-main-background); + color: var(--color-text-lighter); + border: 1px solid var(--color-border-dark); +} +div.select2-container-multi .select2-choices .select2-search-choice .select2-search-choice-close, div.select2-container-multi.select2-container-active .select2-choices .select2-search-choice .select2-search-choice-close { + display: none; +} +div.select2-container-multi .select2-choices .select2-search-field input, div.select2-container-multi.select2-container-active .select2-choices .select2-search-field input { + line-height: 20px; +} +div.select2-container-multi .select2-choices .select2-search-field input.select2-active, div.select2-container-multi.select2-container-active .select2-choices .select2-search-field input.select2-active { + background: none !important; +} + +div.select2-container { + margin: 3px 3px 3px 0; +} +div.select2-container.select2-container-multi .select2-choices { + display: flex; + flex-wrap: wrap; +} +div.select2-container.select2-container-multi .select2-choices li { + float: none; +} +div.select2-container a.select2-choice { + box-shadow: none; + white-space: nowrap; + text-overflow: ellipsis; + background: var(--color-main-background); + color: var(--color-text-lighter) !important; + box-sizing: content-box; + border-radius: var(--border-radius); + border: 1px solid var(--color-border-dark); + margin: 0; + padding: 2px 0; + padding-left: 6px; + min-height: auto; +} +div.select2-container a.select2-choice .select2-search-choice { + line-height: 20px; + padding-left: 5px; + background-image: none; + background-color: var(--color-background-dark); + border-color: var(--color-background-dark); +} +div.select2-container a.select2-choice .select2-search-choice .select2-search-choice-close { + display: none; +} +div.select2-container a.select2-choice .select2-search-choice.select2-search-choice-focus, div.select2-container a.select2-choice .select2-search-choice:hover { + background-color: var(--color-border); + border-color: var(--color-border); +} +div.select2-container a.select2-choice .select2-arrow { + background: none; + border-radius: 0; + border: none; +} +div.select2-container a.select2-choice .select2-arrow b { + background: var(--icon-triangle-s-000) no-repeat center !important; + opacity: 0.5; +} +div.select2-container a.select2-choice:hover .select2-arrow b, div.select2-container a.select2-choice:focus .select2-arrow b, div.select2-container a.select2-choice:active .select2-arrow b { + opacity: 0.7; +} +div.select2-container a.select2-choice .select2-search-field input { + line-height: 20px; +} + +/* Vue v-select */ +.v-select { + margin: 3px 3px 3px 0; + display: inline-block; +} +.v-select .dropdown-toggle { + display: flex !important; + flex-wrap: wrap; +} +.v-select .dropdown-toggle .selected-tag { + line-height: 20px; + padding-left: 5px; + background-image: none; + background-color: var(--color-main-background); + color: var(--color-text-lighter); + border: 1px solid var(--color-border-dark); + display: inline-flex; + align-items: center; +} +.v-select .dropdown-toggle .selected-tag .close { + margin-left: 3px; +} +.v-select .dropdown-menu { + padding: 0; +} +.v-select .dropdown-menu li { + padding: 5px; + position: relative; + display: list-item; + background-color: transparent; + cursor: pointer; + color: var(--color-text-lighter); +} +.v-select .dropdown-menu li a { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + height: 25px; + padding: 3px 7px 4px 2px; + margin: 0; + cursor: pointer; + min-height: 1em; + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + display: inline-flex; + align-items: center; + background-color: transparent !important; + color: inherit !important; +} +.v-select .dropdown-menu li a::before { + content: " "; + background-image: var(--icon-checkmark-000); + background-repeat: no-repeat; + background-position: center; + min-width: 16px; + min-height: 16px; + display: block; + opacity: 0.5; + margin-right: 5px; + visibility: hidden; +} +.v-select .dropdown-menu li.highlight { + color: var(--color-main-text); +} +.v-select .dropdown-menu li.active > a { + background-color: var(--color-background-dark); + color: var(--color-main-text); +} +.v-select .dropdown-menu li.active > a::before { + visibility: visible; +} + +/* Vue multiselect */ +.multiselect.multiselect-vue { + margin: 1px 2px; + padding: 0 !important; + display: inline-block; + width: 160px; + position: relative; + background-color: var(--color-main-background); + /* results wrapper */ +} +.multiselect.multiselect-vue.multiselect--active { + /* Opened: force display the input */ +} +.multiselect.multiselect-vue.multiselect--active input.multiselect__input { + opacity: 1 !important; + cursor: text !important; +} +.multiselect.multiselect-vue.multiselect--disabled, .multiselect.multiselect-vue.multiselect--disabled .multiselect__single { + background-color: var(--color-background-dark) !important; +} +.multiselect.multiselect-vue .multiselect__tags { + /* space between tags and limit tag */ + display: flex; + flex-wrap: nowrap; + overflow: hidden; + border: 1px solid var(--color-border-dark); + cursor: pointer; + position: relative; + border-radius: var(--border-radius); + height: 34px; + /* tag wrapper */ + /* Single select default value */ + /* displayed text if tag limit reached */ + /* default multiselect input for search and placeholder */ +} +.multiselect.multiselect-vue .multiselect__tags .multiselect__tags-wrap { + align-items: center; + display: inline-flex; + overflow: hidden; + max-width: 100%; + position: relative; + padding: 3px 5px; + flex-grow: 1; + /* no tags or simple select? Show input directly + input is used to display single value */ + /* selected tag */ +} +.multiselect.multiselect-vue .multiselect__tags .multiselect__tags-wrap:empty ~ input.multiselect__input { + opacity: 1 !important; + /* hide default empty text, show input instead */ +} +.multiselect.multiselect-vue .multiselect__tags .multiselect__tags-wrap:empty ~ input.multiselect__input + span:not(.multiselect__single) { + display: none; +} +.multiselect.multiselect-vue .multiselect__tags .multiselect__tags-wrap .multiselect__tag { + flex: 1 0 0; + line-height: 20px; + padding: 1px 5px; + background-image: none; + color: var(--color-text-lighter); + border: 1px solid var(--color-border-dark); + display: inline-flex; + align-items: center; + border-radius: var(--border-radius); + /* require to override the default width + and force the tag to shring properly */ + min-width: 0; + max-width: 50%; + max-width: fit-content; + max-width: -moz-fit-content; + /* css hack, detect if more than two tags + if so, flex-basis is set to half */ + /* ellipsis the groups to be sure + we display at least two of them */ +} +.multiselect.multiselect-vue .multiselect__tags .multiselect__tags-wrap .multiselect__tag:only-child { + flex: 0 1 auto; +} +.multiselect.multiselect-vue .multiselect__tags .multiselect__tags-wrap .multiselect__tag:not(:last-child) { + margin-right: 5px; +} +.multiselect.multiselect-vue .multiselect__tags .multiselect__tags-wrap .multiselect__tag > span { + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; +} +.multiselect.multiselect-vue .multiselect__tags .multiselect__single { + padding: 8px 10px; + flex: 0 0 100%; + z-index: 1; + /* above input */ + background-color: var(--color-main-background); + cursor: pointer; + line-height: 17px; +} +.multiselect.multiselect-vue .multiselect__tags .multiselect__strong, +.multiselect.multiselect-vue .multiselect__tags .multiselect__limit { + flex: 0 0 auto; + line-height: 20px; + color: var(--color-text-lighter); + display: inline-flex; + align-items: center; + opacity: 0.7; + margin-right: 5px; + /* above the input */ + z-index: 5; +} +.multiselect.multiselect-vue .multiselect__tags input.multiselect__input { + width: 100% !important; + position: absolute !important; + margin: 0; + opacity: 0; + /* let's leave it on top of tags but hide it */ + height: 100%; + border: none; + /* override hide to force show the placeholder */ + display: block !important; + /* only when not active */ + cursor: pointer; +} +.multiselect.multiselect-vue .multiselect__content-wrapper { + position: absolute; + width: 100%; + margin-top: -1px; + border: 1px solid var(--color-border-dark); + background: var(--color-main-background); + z-index: 50; + max-height: 175px !important; + overflow-y: auto; +} +.multiselect.multiselect-vue .multiselect__content-wrapper .multiselect__content { + width: 100%; + padding: 5px 0; +} +.multiselect.multiselect-vue .multiselect__content-wrapper li { + padding: 5px; + position: relative; + display: flex; + align-items: center; + background-color: transparent; +} +.multiselect.multiselect-vue .multiselect__content-wrapper li, +.multiselect.multiselect-vue .multiselect__content-wrapper li span { + cursor: pointer; +} +.multiselect.multiselect-vue .multiselect__content-wrapper li > span { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + height: 20px; + margin: 0; + min-height: 1em; + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + display: inline-flex; + align-items: center; + background-color: transparent !important; + color: var(--color-text-lighter); + width: 100%; + /* selected checkmark icon */ + /* add the prop tag-placeholder="create" to add the + + * icon on top of an unknown-and-ready-to-be-created entry + */ +} +.multiselect.multiselect-vue .multiselect__content-wrapper li > span::before { + content: " "; + background-image: var(--icon-checkmark-000); + background-repeat: no-repeat; + background-position: center; + min-width: 16px; + min-height: 16px; + display: block; + opacity: 0.5; + margin-right: 5px; + visibility: hidden; +} +.multiselect.multiselect-vue .multiselect__content-wrapper li > span.multiselect__option--disabled { + background-color: var(--color-background-dark); + opacity: 0.5; +} +.multiselect.multiselect-vue .multiselect__content-wrapper li > span[data-select=create]::before { + background-image: var(--icon-add-000); + visibility: visible; +} +.multiselect.multiselect-vue .multiselect__content-wrapper li > span.multiselect__option--highlight { + color: var(--color-main-text); +} +.multiselect.multiselect-vue .multiselect__content-wrapper li > span:not(.multiselect__option--disabled):hover::before { + opacity: 0.3; +} +.multiselect.multiselect-vue .multiselect__content-wrapper li > span.multiselect__option--selected::before, .multiselect.multiselect-vue .multiselect__content-wrapper li > span:not(.multiselect__option--disabled):hover::before { + visibility: visible; +} + +/* Progressbar */ +progress:not(.vue) { + display: block; + width: 100%; + padding: 0; + border: 0 none; + background-color: var(--color-background-dark); + border-radius: var(--border-radius); + flex-basis: 100%; + height: 5px; + overflow: hidden; +} +progress:not(.vue).warn::-moz-progress-bar { + background: var(--color-error); +} +progress:not(.vue).warn::-webkit-progress-value { + background: var(--color-error); +} +progress:not(.vue)::-webkit-progress-bar { + background: transparent; +} +progress:not(.vue)::-moz-progress-bar { + border-radius: var(--border-radius); + background: var(--color-primary); + transition: 250ms all ease-in-out; +} +progress:not(.vue)::-webkit-progress-value { + border-radius: var(--border-radius); + background: var(--color-primary); + transition: 250ms all ease-in-out; +} + +/* Animation */ +@keyframes shake { + 10%, 90% { + transform: translate(-1px); + } + 20%, 80% { + transform: translate(2px); + } + 30%, 50%, 70% { + transform: translate(-4px); + } + 40%, 60% { + transform: translate(4px); + } +} +.shake { + animation-name: shake; + animation-duration: 0.7s; + animation-timing-function: ease-out; +} + +label.infield { + position: absolute; + left: -10000px; + top: -10000px; + width: 1px; + height: 1px; + overflow: hidden; +} + +::placeholder, +::-ms-input-placeholder, +::-webkit-input-placeholder { + color: var(--color-text-maxcontrast); +} + +/** + * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com) + * + * @author John Molakvoæ (skjnldsv) + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ +/** + * @copyright Copyright (c) 2016, John Molakvoæ + * @copyright Copyright (c) 2016, Julius Haertl + * @copyright Copyright (c) 2016, Lukas Reschke + * @copyright Copyright (c) 2016, Jos Poortvliet + * @copyright Copyright (c) 2016, Erik Pellikka + * @copyright Copyright (c) 2016, jowi + * @copyright Copyright (c) 2015, Hendrik Leppelsack + * @copyright Copyright (c) 2015, Volker E + * @copyright Copyright (c) 2014-2017, Jan-Christoph Borchardt + * + * @license GNU AGPL version 3 or any later version + * + */ +/* prevent ugly selection effect on accidental selection */ +#header, +#navigation, +#expanddiv { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; +} + +/* removed until content-focusing issue is fixed */ +#skip-to-content a { + position: absolute; + left: -10000px; + top: auto; + width: 1px; + height: 1px; + overflow: hidden; +} +#skip-to-content a:focus { + left: 76px; + top: -9px; + color: var(--color-primary-text); + width: auto; + height: auto; +} + +/* HEADERS ------------------------------------------------------------------ */ +#body-user #header, +#body-settings #header, +#body-public #header { + display: inline-flex; + position: fixed; + top: 0; + width: 100%; + z-index: 2000; + height: 50px; + background-color: var(--color-primary); + background-image: linear-gradient(40deg, var(--color-primary) 0%, var(--color-primary-element-light) 100%); + box-sizing: border-box; + justify-content: space-between; +} + +/* LOGO and APP NAME -------------------------------------------------------- */ +#nextcloud { + padding: 7px 0; + padding-left: 86px; + position: relative; + height: 100%; + box-sizing: border-box; + opacity: 1; + align-items: center; + display: flex; + flex-wrap: wrap; + overflow: hidden; +} +#nextcloud:focus { + opacity: 0.75; +} +#nextcloud:hover, #nextcloud:active { + opacity: 1; +} + +#header { + /* Header menu */ + /* show caret indicator next to logo to make clear it is tappable */ + /* Right header standard */ +} +#header .header-left > nav > .menu, +#header .header-right > div > .menu { + background-color: var(--color-main-background); + filter: drop-shadow(0 1px 5px var(--color-box-shadow)); + border-radius: 0 0 var(--border-radius) var(--border-radius); + box-sizing: border-box; + z-index: 2000; + position: absolute; + max-width: 350px; + min-height: 66px; + max-height: calc(100vh - 50px * 4); + right: 5px; + top: 50px; + margin: 0; + /* Dropdown arrow */ + /* Use by the apps menu and the settings right menu */ +} +#header .header-left > nav > .menu:not(.popovermenu), +#header .header-right > div > .menu:not(.popovermenu) { + display: none; +} +#header .header-left > nav > .menu:after, +#header .header-right > div > .menu:after { + border: 10px solid transparent; + border-bottom-color: var(--color-main-background); + bottom: 100%; + content: " "; + height: 0; + width: 0; + position: absolute; + pointer-events: none; + right: 10px; +} +#header .header-left > nav > .menu #apps > ul, #header .header-left > nav > .menu > div, #header .header-left > nav > .menu > ul, +#header .header-right > div > .menu #apps > ul, +#header .header-right > div > .menu > div, +#header .header-right > div > .menu > ul { + overflow-y: auto; + -webkit-overflow-scrolling: touch; + min-height: 66px; + max-height: calc(100vh - 50px * 4); +} +#header .header-left > nav > .menu #apps > ul li a, #header .header-left > nav > .menu.settings-menu > ul li a, +#header .header-right > div > .menu #apps > ul li a, +#header .header-right > div > .menu.settings-menu > ul li a { + display: inline-flex; + align-items: center; + height: 44px; + color: var(--color-main-text); + padding: 10px 12px; + box-sizing: border-box; + white-space: nowrap; + position: relative; + width: 100%; +} +#header .header-left > nav > .menu #apps > ul li a:hover, #header .header-left > nav > .menu #apps > ul li a:focus, #header .header-left > nav > .menu.settings-menu > ul li a:hover, #header .header-left > nav > .menu.settings-menu > ul li a:focus, +#header .header-right > div > .menu #apps > ul li a:hover, +#header .header-right > div > .menu #apps > ul li a:focus, +#header .header-right > div > .menu.settings-menu > ul li a:hover, +#header .header-right > div > .menu.settings-menu > ul li a:focus { + background-color: var(--color-background-hover); +} +#header .header-left > nav > .menu #apps > ul li a:active, #header .header-left > nav > .menu #apps > ul li a.active, #header .header-left > nav > .menu.settings-menu > ul li a:active, #header .header-left > nav > .menu.settings-menu > ul li a.active, +#header .header-right > div > .menu #apps > ul li a:active, +#header .header-right > div > .menu #apps > ul li a.active, +#header .header-right > div > .menu.settings-menu > ul li a:active, +#header .header-right > div > .menu.settings-menu > ul li a.active { + background-color: var(--color-primary-light); +} +#header .header-left > nav > .menu #apps > ul li a span, #header .header-left > nav > .menu.settings-menu > ul li a span, +#header .header-right > div > .menu #apps > ul li a span, +#header .header-right > div > .menu.settings-menu > ul li a span { + display: inline-block; + padding-bottom: 0; + color: var(--color-main-text); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + max-width: 110px; +} +#header .header-left > nav > .menu #apps > ul li a .icon-loading-small, #header .header-left > nav > .menu.settings-menu > ul li a .icon-loading-small, +#header .header-right > div > .menu #apps > ul li a .icon-loading-small, +#header .header-right > div > .menu.settings-menu > ul li a .icon-loading-small { + margin-right: 10px; + background-size: 16px 16px; +} +#header .header-left > nav > .menu #apps > ul li a img, +#header .header-left > nav > .menu #apps > ul li a svg, #header .header-left > nav > .menu.settings-menu > ul li a img, +#header .header-left > nav > .menu.settings-menu > ul li a svg, +#header .header-right > div > .menu #apps > ul li a img, +#header .header-right > div > .menu #apps > ul li a svg, +#header .header-right > div > .menu.settings-menu > ul li a img, +#header .header-right > div > .menu.settings-menu > ul li a svg { + opacity: 0.7; + margin-right: 10px; + height: 16px; + width: 16px; + filter: var(--background-invert-if-dark); +} +#header .logo { + display: inline-flex; + background-image: var(--image-logoheader, var(--image-logo, url("../img/logo/logo.svg"))); + background-repeat: no-repeat; + background-size: contain; + background-position: center; + width: 62px; + position: absolute; + left: 12px; + top: 1px; + bottom: 1px; + filter: var(--image-logoheader-custom, var(--primary-invert-if-bright)); +} +#header .header-appname-container { + display: none; + padding-right: 10px; + flex-shrink: 0; +} +#header .icon-caret { + display: inline-block; + width: 12px; + height: 12px; + margin: 0; + margin-top: -21px; + padding: 0; + vertical-align: middle; +} +#header #header-left, #header .header-left, +#header #header-right, #header .header-right { + display: inline-flex; + align-items: center; +} +#header #header-left, #header .header-left { + flex: 1 0; + white-space: nowrap; + min-width: 0; +} +#header #header-right, #header .header-right { + justify-content: flex-end; + flex-shrink: 1; +} +#header .header-right > div, +#header .header-right > form { + height: 100%; + position: relative; +} +#header .header-right > div > .menutoggle, +#header .header-right > form > .menutoggle { + display: flex; + justify-content: center; + align-items: center; + width: 50px; + height: 100%; + cursor: pointer; + opacity: 0.6; + padding: 0; + margin: 0; +} + +/* hover effect for app switcher label */ +.header-appname-container .header-appname { + opacity: 0.75; +} + +.menutoggle .icon-caret { + opacity: 0.75; +} +.menutoggle:hover .header-appname, .menutoggle:hover .icon-caret { + opacity: 1; +} +.menutoggle:focus .header-appname, .menutoggle:focus .icon-caret { + opacity: 1; +} +.menutoggle.active .header-appname, .menutoggle.active .icon-caret { + opacity: 1; +} + +/* TODO: move into minimal css file for public shared template */ +/* only used for public share pages now as we have the app icons when logged in */ +.header-appname { + color: var(--color-primary-text); + font-size: 16px; + font-weight: bold; + margin: 0; + padding: 0; + padding-right: 5px; + overflow: hidden; + text-overflow: ellipsis; + flex: 1 1 100%; +} + +.header-shared-by { + color: var(--color-primary-text); + position: relative; + font-weight: 300; + font-size: 11px; + line-height: 11px; + overflow: hidden; + text-overflow: ellipsis; +} + +/* do not show menu toggle on public share links as there is no menu */ +#body-public #header .icon-caret { + display: none; +} + +/* NAVIGATION --------------------------------------------------------------- */ +nav[role=navigation] { + display: inline-block; + width: 50px; + height: 50px; + margin-left: -50px; + position: relative; +} + +#header .header-left > nav > #navigation { + position: relative; + left: 25px; + /* half the togglemenu */ + transform: translateX(-50%); + width: 160px; +} + +#header .header-left > nav > #navigation, +.ui-datepicker, +.ui-timepicker.ui-widget { + background-color: var(--color-main-background); + filter: drop-shadow(0 1px 10px var(--color-box-shadow)); +} +#header .header-left > nav > #navigation:after, +.ui-datepicker:after, +.ui-timepicker.ui-widget:after { + /* position of dropdown arrow */ + left: 50%; + bottom: 100%; + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; + pointer-events: none; + border-color: rgba(0, 0, 0, 0); + border-bottom-color: var(--color-main-background); + border-width: 10px; + margin-left: -10px; + /* border width */ +} + +#navigation { + box-sizing: border-box; +} +#navigation .in-header { + display: none; +} + +/* USER MENU -----------------------------------------------------------------*/ +#settings { + display: inline-block; + height: 100%; + cursor: pointer; + flex: 0 0 auto; + /* User menu on the right */ +} +#settings #expand { + opacity: 1; + /* override icon opacity */ + padding-right: 12px; + /* Profile picture in header */ + /* show triangle below user menu if active */ +} +#settings #expand:hover, #settings #expand:focus, #settings #expand:active { + color: var(--color-primary-text); +} +#settings #expand:hover #expandDisplayName, +#settings #expand:hover .avatardiv, #settings #expand:focus #expandDisplayName, +#settings #expand:focus .avatardiv, #settings #expand:active #expandDisplayName, +#settings #expand:active .avatardiv { + border-radius: 50%; + border: 2px solid var(--color-primary-text); + margin: -2px; +} +#settings #expand:hover .avatardiv, #settings #expand:focus .avatardiv, #settings #expand:active .avatardiv { + background-color: var(--color-primary-text); +} +#settings #expand:hover #expandDisplayName, #settings #expand:focus #expandDisplayName, #settings #expand:active #expandDisplayName { + opacity: 1; +} +#settings #expand .avatardiv { + cursor: pointer; + height: 32px; + width: 32px; + /* do not show display name when profile picture is present */ +} +#settings #expand .avatardiv img { + opacity: 1; + cursor: pointer; +} +#settings #expand .avatardiv.avatardiv-shown + #expandDisplayName { + display: none; +} +#settings #expand #expandDisplayName { + padding: 8px; + opacity: 0.6; + cursor: pointer; + /* full opacity for gear icon if active */ +} +#body-settings #settings #expand #expandDisplayName { + opacity: 1; +} +#body-settings #settings #expand:before { + content: " "; + height: 0; + width: 0; + position: absolute; + pointer-events: none; + border: 0 solid transparent; + border-bottom-color: var(--color-main-background); + border-width: 10px; + bottom: 0; + z-index: 100; + display: block; +} +#settings #expanddiv:after { + right: 22px; +} + +/* Apps menu */ +#appmenu { + display: inline-flex; + min-width: 50px; + z-index: 2; + /* Show all app titles on hovering app menu area */ + /* Also show app title on focusing single entry (showing all on focus is only possible with CSS4 and parent selectors) */ + /* show triangle below active app */ + /* triangle focus feedback */ +} +#appmenu li { + position: relative; + cursor: pointer; + padding: 0 2px; + display: flex; + justify-content: center; + /* focused app visual feedback */ + /* hidden apps menu */ + /* App title */ + /* Set up transitions for showing app titles on hover */ + /* App icon */ + /* Triangle */ +} +#appmenu li a { + position: relative; + display: flex; + margin: 0; + height: 50px; + width: 50px; + align-items: center; + justify-content: center; + opacity: 0.6; + letter-spacing: -0.5px; + font-size: 12px; +} +#appmenu li:hover a, +#appmenu li a:focus, +#appmenu li a.active { + opacity: 1; + font-weight: bold; +} +#appmenu li:hover a, +#appmenu li a:focus { + font-size: 14px; +} +#appmenu li:hover a + span, +#appmenu li a:focus + span, #appmenu li:hover span, #appmenu li:focus span, +#appmenu li a:focus span, +#appmenu li a.active span { + display: inline-block; + text-overflow: initial; + width: auto; + overflow: hidden; + padding: 0 5px; + z-index: 2; +} +#appmenu li img, +#appmenu li .icon-more-white { + display: inline-block; + width: 20px; + height: 20px; +} +#appmenu li span { + opacity: 0; + position: absolute; + color: var(--color-primary-text); + bottom: 2px; + width: 100%; + text-align: center; + overflow: hidden; + text-overflow: ellipsis; + transition: all var(--animation-quick) ease; + pointer-events: none; +} +#appmenu li svg, +#appmenu li .icon-more-white { + transition: transform var(--animation-quick) ease; + filter: var(--primary-invert-if-bright); +} +#appmenu li a::before { + transition: border var(--animation-quick) ease; +} +#appmenu:hover li { + /* Move up app icon */ + /* Show app title */ + /* Prominent app title for current and hovered/focused app */ + /* Smaller triangle because of limited space */ +} +#appmenu:hover li svg, +#appmenu:hover li .icon-more, +#appmenu:hover li .icon-more-white, +#appmenu:hover li .icon-loading-small, +#appmenu:hover li .icon-loading-small-dark { + transform: translateY(-7px); +} +#appmenu:hover li span { + opacity: 0.6; + bottom: 2px; + z-index: -1; + /* fix clickability issue - otherwise we need to move the span into the link */ +} +#appmenu:hover li:hover span, #appmenu:hover li:focus span, +#appmenu:hover li .active + span { + opacity: 1; +} +#appmenu:hover li a::before { + border-width: 5px; +} +#appmenu li a:focus { + /* Move up app icon */ + /* Show app title */ + /* Smaller triangle because of limited space */ +} +#appmenu li a:focus svg, +#appmenu li a:focus .icon-more, +#appmenu li a:focus .icon-more-white, +#appmenu li a:focus .icon-loading-small, +#appmenu li a:focus .icon-loading-small-dark { + transform: translateY(-7px); +} +#appmenu li a:focus + span, +#appmenu li a:focus span { + opacity: 1; + bottom: 2px; +} +#appmenu li a:focus::before { + border-width: 5px; +} +#appmenu li a::before { + content: " "; + height: 0; + width: 0; + position: absolute; + pointer-events: none; + border: 0 solid transparent; + border-bottom-color: var(--color-main-background); + border-width: 10px; + transform: translateX(-50%); + left: 50%; + bottom: 0; + display: none; +} +#appmenu li a.active::before, +#appmenu li:hover a::before, +#appmenu li:hover a.active::before, +#appmenu li a:focus::before { + display: block; +} +#appmenu li a.active::before { + z-index: 99; +} +#appmenu li:hover a::before, +#appmenu li a.active:hover::before, +#appmenu li a:focus::before { + z-index: 101; +} +#appmenu li.hidden { + display: none; +} +#appmenu #more-apps { + z-index: 3; +} + +.unread-counter { + display: none; +} + +#apps .app-icon-notification, +#appmenu .app-icon-notification { + fill: var(--color-error); +} + +#apps svg:not(.has-unread) .app-icon-notification-mask, +#appmenu svg:not(.has-unread) .app-icon-notification-mask { + display: none; +} +#apps svg:not(.has-unread) .app-icon-notification, +#appmenu svg:not(.has-unread) .app-icon-notification { + display: none; +} + +/* Skip navigation links – show only on keyboard focus */ +.skip-navigation { + padding: 11px; + position: absolute; + overflow: hidden; + z-index: 9999; + top: -999px; + left: 3px; + /* Force primary color, otherwise too light focused color */ + background: var(--color-primary) !important; +} +.skip-navigation.skip-content { + left: 300px; + margin-left: 3px; +} +.skip-navigation:focus, .skip-navigation:active { + top: 50px; +} + +/* Empty content messages in the header e.g. notifications, contacts menu, … */ +header #emptycontent h2, +header .emptycontent h2 { + font-weight: normal; + font-size: 16px; +} +header #emptycontent [class^=icon-], +header #emptycontent [class*=icon-], +header .emptycontent [class^=icon-], +header .emptycontent [class*=icon-] { + background-size: 48px; + height: 48px; + width: 48px; +} + +/** + * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com) + * + * @author John Molakvoæ (skjnldsv) + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ +/** + * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com) + * + * @author John Molakvoæ (skjnldsv) + * @author Joas Schilling + * @author Lukas Reschke + * @author Roeland Jago Douma + * @author Vincent Chan + * @author Thomas Müller + * @author Hendrik Leppelsack + * @author Jan-Christoph Borchardt + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ +/** + * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com) + * + * @author John Molakvoæ (skjnldsv) + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ +/** + * @see core/src/icons.js + */ +/** + * SVG COLOR API + * + * @param string $icon the icon filename + * @param string $dir the icon folder within /core/img if $core or app name + * @param string $color the desired color in hexadecimal + * @param int $version the version of the file + * @param bool [$core] search icon in core + * + * @returns A background image with the url to the set to the requested icon. + */ +/* GLOBAL ------------------------------------------------------------------- */ +[class^=icon-], [class*=" icon-"] { + background-repeat: no-repeat; + background-position: center; + min-width: 16px; + min-height: 16px; +} + +.icon-breadcrumb { + background-image: url("../img/breadcrumb.svg?v=1"); +} + +/* LOADING ------------------------------------------------------------------ */ +.loading, +.loading-small, +.icon-loading, +.icon-loading-dark, +.icon-loading-small, +.icon-loading-small-dark { + position: relative; +} +.loading:after, +.loading-small:after, +.icon-loading:after, +.icon-loading-dark:after, +.icon-loading-small:after, +.icon-loading-small-dark:after { + z-index: 2; + content: ""; + height: 28px; + width: 28px; + margin: -16px 0 0 -16px; + position: absolute; + top: 50%; + left: 50%; + border-radius: 100%; + -webkit-animation: rotate 0.8s infinite linear; + animation: rotate 0.8s infinite linear; + -webkit-transform-origin: center; + -ms-transform-origin: center; + transform-origin: center; + border: 2px solid var(--color-loading-light); + border-top-color: var(--color-loading-dark); + filter: var(--background-invert-if-dark); +} +.primary .loading:after, .primary + .loading:after, +.primary .loading-small:after, +.primary + .loading-small:after, +.primary .icon-loading:after, +.primary + .icon-loading:after, +.primary .icon-loading-dark:after, +.primary + .icon-loading-dark:after, +.primary .icon-loading-small:after, +.primary + .icon-loading-small:after, +.primary .icon-loading-small-dark:after, +.primary + .icon-loading-small-dark:after { + filter: var(--primary-invert-if-bright); +} + +.icon-loading-dark:after, +.icon-loading-small-dark:after { + border: 2px solid var(--color-loading-dark); + border-top-color: var(--color-loading-light); +} + +.icon-loading-small:after, +.icon-loading-small-dark:after { + height: 12px; + width: 12px; + margin: -8px 0 0 -8px; +} + +/* Css replaced elements don't have ::after nor ::before */ +audio.icon-loading, canvas.icon-loading, embed.icon-loading, iframe.icon-loading, img.icon-loading, input.icon-loading, object.icon-loading, video.icon-loading { + background-image: url("../img/loading.gif"); +} +audio.icon-loading-dark, canvas.icon-loading-dark, embed.icon-loading-dark, iframe.icon-loading-dark, img.icon-loading-dark, input.icon-loading-dark, object.icon-loading-dark, video.icon-loading-dark { + background-image: url("../img/loading-dark.gif"); +} +audio.icon-loading-small, canvas.icon-loading-small, embed.icon-loading-small, iframe.icon-loading-small, img.icon-loading-small, input.icon-loading-small, object.icon-loading-small, video.icon-loading-small { + background-image: url("../img/loading-small.gif"); +} +audio.icon-loading-small-dark, canvas.icon-loading-small-dark, embed.icon-loading-small-dark, iframe.icon-loading-small-dark, img.icon-loading-small-dark, input.icon-loading-small-dark, object.icon-loading-small-dark, video.icon-loading-small-dark { + background-image: url("../img/loading-small-dark.gif"); +} + +@keyframes rotate { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} +.icon-32 { + background-size: 32px !important; +} + +.icon-white.icon-shadow, +.icon-audio-white, +.icon-audio-off-white, +.icon-fullscreen-white, +.icon-screen-white, +.icon-screen-off-white, +.icon-video-white, +.icon-video-off-white { + filter: drop-shadow(1px 1px 4px var(--color-box-shadow)); +} + +/* ICONS ------------------------------------------------------------------- + * These icon classes are generated automatically with the following pattern + * .icon-close (black icon) + * .icon-close-white (white icon) + * .icon-close.icon-white (white icon) + * + * Some class definitions are kept as before, since they don't follow the pattern + * or have some additional styling like drop shadows + */ +/** + * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com) + * + * @author John Molakvoæ (skjnldsv) + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ +/** + * @copyright Copyright (c) 2016-2017, John Molakvoæ + * @copyright Copyright (c) 2016, Julius Haertl + * @copyright Copyright (c) 2016, Morris Jobke + * @copyright Copyright (c) 2016, pgys + * @copyright Copyright (c) 2016, Lukas Reschke + * @copyright Copyright (c) 2016, Stefan Weil + * @copyright Copyright (c) 2016, Roeland Jago Douma + * @copyright Copyright (c) 2016, jowi + * @copyright Copyright (c) 2015, Hendrik Leppelsack + * @copyright Copyright (c) 2015, Thomas Müller + * @copyright Copyright (c) 2015, Vincent Petry + * @copyright Copyright (c) 2014-2017, Jan-Christoph Borchardt + * + * @license GNU AGPL version 3 or any later version + * + */ +/** + * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com) + * + * @author John Molakvoæ (skjnldsv) + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ +/** + * @see core/src/icons.js + */ +/** + * SVG COLOR API + * + * @param string $icon the icon filename + * @param string $dir the icon folder within /core/img if $core or app name + * @param string $color the desired color in hexadecimal + * @param int $version the version of the file + * @param bool [$core] search icon in core + * + * @returns A background image with the url to the set to the requested icon. + */ +/* BASE STYLING ------------------------------------------------------------ */ +h2 { + font-weight: bold; + font-size: 20px; + margin-bottom: 12px; + line-height: 30px; + color: var(--color-text-light); +} + +h3 { + font-size: 16px; + margin: 12px 0; + color: var(--color-text-light); +} + +h4 { + font-size: 14px; +} + +/* do not use italic typeface style, instead lighter color */ +em { + font-style: normal; + color: var(--color-text-lighter); +} + +dl { + padding: 12px 0; +} + +dt, +dd { + display: inline-block; + padding: 12px; + padding-left: 0; +} + +dt { + width: 130px; + white-space: nowrap; + text-align: right; +} + +kbd { + padding: 4px 10px; + border: 1px solid #ccc; + box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2); + border-radius: var(--border-radius); + display: inline-block; + white-space: nowrap; +} + +/* APP STYLING ------------------------------------------------------------ */ +#content[class*=app-] * { + box-sizing: border-box; +} + +/* APP-NAVIGATION ------------------------------------------------------------ */ +/* Navigation: folder like structure */ +#app-navigation:not(.vue) { + width: 300px; + position: fixed; + top: 50px; + left: 0; + z-index: 500; + overflow-y: auto; + overflow-x: hidden; + height: calc(100% - 50px); + box-sizing: border-box; + background-color: var(--color-main-background); + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + border-right: 1px solid var(--color-border); + display: flex; + flex-direction: column; + flex-grow: 0; + flex-shrink: 0; + /* 'New' button */ + /** + * Button styling for menu, edit and undo + */ + /** + * Collapsible menus + */ + /** + * App navigation utils, buttons and counters for drop down menu + */ + /** + * Editable entries + */ + /** + * Deleted entries with undo button + */ + /** + * Common rules for animation of undo and edit entries + */ + /** + * drag and drop + */ +} +#app-navigation:not(.vue) .app-navigation-new { + display: block; + padding: 10px; +} +#app-navigation:not(.vue) .app-navigation-new button { + display: inline-block; + width: 100%; + padding: 10px; + padding-left: 34px; + background-position: 10px center; + text-align: left; + margin: 0; +} +#app-navigation:not(.vue) li { + position: relative; +} +#app-navigation:not(.vue) > ul { + position: relative; + height: 100%; + width: inherit; + overflow-x: hidden; + overflow-y: auto; + box-sizing: border-box; + display: flex; + flex-direction: column; + /* Menu and submenu */ +} +#app-navigation:not(.vue) > ul > li { + display: inline-flex; + flex-wrap: wrap; + order: 1; + flex-shrink: 0; + /* Pinned-to-bottom entries */ + /* align loader */ + /* hide deletion/collapse of subitems */ + /* Second level nesting for lists */ +} +#app-navigation:not(.vue) > ul > li.pinned { + order: 2; +} +#app-navigation:not(.vue) > ul > li.pinned.first-pinned { + margin-top: auto !important; +} +#app-navigation:not(.vue) > ul > li > .app-navigation-entry-deleted { + /* Ugly hack for overriding the main entry link */ + padding-left: 44px !important; +} +#app-navigation:not(.vue) > ul > li > .app-navigation-entry-edit { + /* Ugly hack for overriding the main entry link */ + /* align the input correctly with the link text + 44px-6px padding for the input */ + padding-left: 38px !important; +} +#app-navigation:not(.vue) > ul > li a:hover, +#app-navigation:not(.vue) > ul > li a:hover > a, +#app-navigation:not(.vue) > ul > li a:focus, +#app-navigation:not(.vue) > ul > li a:focus > a { + background-color: var(--color-background-hover); +} +#app-navigation:not(.vue) > ul > li.active, +#app-navigation:not(.vue) > ul > li.active > a, +#app-navigation:not(.vue) > ul > li a:active, +#app-navigation:not(.vue) > ul > li a:active > a, +#app-navigation:not(.vue) > ul > li a.selected, +#app-navigation:not(.vue) > ul > li a.selected > a, +#app-navigation:not(.vue) > ul > li a.active, +#app-navigation:not(.vue) > ul > li a.active > a { + background-color: var(--color-primary-light); +} +#app-navigation:not(.vue) > ul > li.icon-loading-small:after { + left: 22px; + top: 22px; +} +#app-navigation:not(.vue) > ul > li.deleted > ul, #app-navigation:not(.vue) > ul > li.collapsible:not(.open) > ul { + display: none; +} +#app-navigation:not(.vue) > ul > li.app-navigation-caption { + font-weight: bold; + line-height: 44px; + padding: 0 44px; + white-space: nowrap; + text-overflow: ellipsis; + box-shadow: none !important; + user-select: none; + pointer-events: none; +} +#app-navigation:not(.vue) > ul > li.app-navigation-caption:not(:first-child) { + margin-top: 22px; +} +#app-navigation:not(.vue) > ul > li > ul { + flex: 0 1 auto; + width: 100%; + position: relative; +} +#app-navigation:not(.vue) > ul > li > ul > li { + display: inline-flex; + flex-wrap: wrap; + padding-left: 44px; + /* align loader */ +} +#app-navigation:not(.vue) > ul > li > ul > li:hover, +#app-navigation:not(.vue) > ul > li > ul > li:hover > a, #app-navigation:not(.vue) > ul > li > ul > li:focus, +#app-navigation:not(.vue) > ul > li > ul > li:focus > a { + background-color: var(--color-background-hover); +} +#app-navigation:not(.vue) > ul > li > ul > li.active, +#app-navigation:not(.vue) > ul > li > ul > li.active > a, +#app-navigation:not(.vue) > ul > li > ul > li a.selected, +#app-navigation:not(.vue) > ul > li > ul > li a.selected > a { + background-color: var(--color-primary-light); +} +#app-navigation:not(.vue) > ul > li > ul > li.icon-loading-small:after { + left: 22px; + /* 44px / 2 */ +} +#app-navigation:not(.vue) > ul > li > ul > li > .app-navigation-entry-deleted { + /* margin to keep active indicator visible */ + margin-left: 4px; + padding-left: 84px; +} +#app-navigation:not(.vue) > ul > li > ul > li > .app-navigation-entry-edit { + /* margin to keep active indicator visible */ + margin-left: 4px; + /* align the input correctly with the link text + 44px+44px-4px-6px padding for the input */ + padding-left: 78px !important; +} +#app-navigation:not(.vue) > ul > li, +#app-navigation:not(.vue) > ul > li > ul > li { + position: relative; + width: 100%; + box-sizing: border-box; + /* hide icons if loading */ + /* Main entry link */ + /* Bullet icon */ + /* popover fix the flex positionning of the li parent */ + /* show edit/undo field if editing/deleted */ +} +#app-navigation:not(.vue) > ul > li.icon-loading-small > a, +#app-navigation:not(.vue) > ul > li.icon-loading-small > .app-navigation-entry-bullet, +#app-navigation:not(.vue) > ul > li > ul > li.icon-loading-small > a, +#app-navigation:not(.vue) > ul > li > ul > li.icon-loading-small > .app-navigation-entry-bullet { + /* hide icon or bullet if loading state*/ + background: transparent !important; +} +#app-navigation:not(.vue) > ul > li > a, +#app-navigation:not(.vue) > ul > li > ul > li > a { + background-size: 16px 16px; + background-position: 14px center; + background-repeat: no-repeat; + display: block; + justify-content: space-between; + line-height: 44px; + min-height: 44px; + padding: 0 12px 0 14px; + overflow: hidden; + box-sizing: border-box; + white-space: nowrap; + text-overflow: ellipsis; + color: var(--color-main-text); + opacity: 0.8; + flex: 1 1 0px; + z-index: 100; + /* above the bullet to allow click*/ + /* TODO: forbid using img as icon in menu? */ + /* counter can also be inside the link */ +} +#app-navigation:not(.vue) > ul > li > a.svg, +#app-navigation:not(.vue) > ul > li > ul > li > a.svg { + padding: 0 12px 0 44px; +} +#app-navigation:not(.vue) > ul > li > a:first-child img, +#app-navigation:not(.vue) > ul > li > ul > li > a:first-child img { + margin-right: 11px; + width: 16px; + height: 16px; + filter: var(--background-invert-if-dark); +} +#app-navigation:not(.vue) > ul > li > a > .app-navigation-entry-utils, +#app-navigation:not(.vue) > ul > li > ul > li > a > .app-navigation-entry-utils { + display: inline-block; + float: right; +} +#app-navigation:not(.vue) > ul > li > a > .app-navigation-entry-utils .app-navigation-entry-utils-counter, +#app-navigation:not(.vue) > ul > li > ul > li > a > .app-navigation-entry-utils .app-navigation-entry-utils-counter { + padding-right: 0 !important; +} +#app-navigation:not(.vue) > ul > li > .app-navigation-entry-bullet, +#app-navigation:not(.vue) > ul > li > ul > li > .app-navigation-entry-bullet { + position: absolute; + display: block; + margin: 16px; + width: 12px; + height: 12px; + border: none; + border-radius: 50%; + cursor: pointer; + transition: background 100ms ease-in-out; +} +#app-navigation:not(.vue) > ul > li > .app-navigation-entry-bullet + a, +#app-navigation:not(.vue) > ul > li > ul > li > .app-navigation-entry-bullet + a { + /* hide icon if bullet, can't have both */ + background: transparent !important; +} +#app-navigation:not(.vue) > ul > li > .app-navigation-entry-menu, +#app-navigation:not(.vue) > ul > li > ul > li > .app-navigation-entry-menu { + top: 44px; +} +#app-navigation:not(.vue) > ul > li.editing .app-navigation-entry-edit, +#app-navigation:not(.vue) > ul > li > ul > li.editing .app-navigation-entry-edit { + opacity: 1; + z-index: 250; +} +#app-navigation:not(.vue) > ul > li.deleted .app-navigation-entry-deleted, +#app-navigation:not(.vue) > ul > li > ul > li.deleted .app-navigation-entry-deleted { + transform: translateX(0); + z-index: 250; +} +#app-navigation:not(.vue).hidden { + display: none; +} +#app-navigation:not(.vue) .app-navigation-entry-utils .app-navigation-entry-utils-menu-button > button, +#app-navigation:not(.vue) .app-navigation-entry-deleted .app-navigation-entry-deleted-button { + border: 0; + opacity: 0.5; + background-color: transparent; + background-repeat: no-repeat; + background-position: center; +} +#app-navigation:not(.vue) .app-navigation-entry-utils .app-navigation-entry-utils-menu-button > button:hover, #app-navigation:not(.vue) .app-navigation-entry-utils .app-navigation-entry-utils-menu-button > button:focus, +#app-navigation:not(.vue) .app-navigation-entry-deleted .app-navigation-entry-deleted-button:hover, +#app-navigation:not(.vue) .app-navigation-entry-deleted .app-navigation-entry-deleted-button:focus { + background-color: transparent; + opacity: 1; +} +#app-navigation:not(.vue) .collapsible { + /* Fallback for old collapse button. + TODO: to be removed. Leaved here for retro compatibility */ + /* force padding on link no matter if 'a' has an icon class */ +} +#app-navigation:not(.vue) .collapsible .collapse { + opacity: 0; + position: absolute; + width: 44px; + height: 44px; + margin: 0; + z-index: 110; + /* Needed for IE11; otherwise the button appears to the right of the + * link. */ + left: 0; +} +#app-navigation:not(.vue) .collapsible:before { + position: absolute; + height: 44px; + width: 44px; + margin: 0; + padding: 0; + background: none; + /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */ + background-image: var(--icon-triangle-s-dark); + background-size: 16px; + background-repeat: no-repeat; + background-position: center; + border: none; + border-radius: 0; + outline: none !important; + box-shadow: none; + content: " "; + opacity: 0; + -webkit-transform: rotate(-90deg); + -ms-transform: rotate(-90deg); + transform: rotate(-90deg); + z-index: 105; + background-color: var(--color-background-hover); + border-radius: 50%; + transition: opacity 100ms ease-in-out; +} +#app-navigation:not(.vue) .collapsible > a:first-child { + padding-left: 44px; +} +#app-navigation:not(.vue) .collapsible:hover:before, #app-navigation:not(.vue) .collapsible:focus:before { + opacity: 1; +} +#app-navigation:not(.vue) .collapsible:hover > .app-navigation-entry-bullet, #app-navigation:not(.vue) .collapsible:focus > .app-navigation-entry-bullet { + background: transparent !important; +} +#app-navigation:not(.vue) .collapsible.open:before { + -webkit-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); +} +#app-navigation:not(.vue) .app-navigation-entry-utils { + flex: 0 1 auto; +} +#app-navigation:not(.vue) .app-navigation-entry-utils ul { + display: flex !important; + align-items: center; + justify-content: flex-end; +} +#app-navigation:not(.vue) .app-navigation-entry-utils li { + width: 44px !important; + height: 44px; +} +#app-navigation:not(.vue) .app-navigation-entry-utils button { + height: 100%; + width: 100%; + margin: 0; + box-shadow: none; +} +#app-navigation:not(.vue) .app-navigation-entry-utils .app-navigation-entry-utils-menu-button { + /* Prevent bg img override if an icon class is set */ +} +#app-navigation:not(.vue) .app-navigation-entry-utils .app-navigation-entry-utils-menu-button button:not([class^=icon-]):not([class*=" icon-"]) { + /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */ + background-image: var(--icon-more-dark); +} +#app-navigation:not(.vue) .app-navigation-entry-utils .app-navigation-entry-utils-menu-button:hover button, #app-navigation:not(.vue) .app-navigation-entry-utils .app-navigation-entry-utils-menu-button:focus button { + background-color: transparent; + opacity: 1; +} +#app-navigation:not(.vue) .app-navigation-entry-utils .app-navigation-entry-utils-counter { + overflow: hidden; + text-align: right; + font-size: 9pt; + line-height: 44px; + padding: 0 12px; + /* Same padding as all li > a in the app-navigation */ +} +#app-navigation:not(.vue) .app-navigation-entry-utils .app-navigation-entry-utils-counter.highlighted { + padding: 0; + text-align: center; +} +#app-navigation:not(.vue) .app-navigation-entry-utils .app-navigation-entry-utils-counter.highlighted span { + padding: 2px 5px; + border-radius: 10px; + background-color: var(--color-primary); + color: var(--color-primary-text); +} +#app-navigation:not(.vue) .app-navigation-entry-edit { + padding-left: 5px; + padding-right: 5px; + display: block; + width: calc(100% - 1px); + /* Avoid border overlapping */ + transition: opacity 250ms ease-in-out; + opacity: 0; + position: absolute; + background-color: var(--color-main-background); + z-index: -1; +} +#app-navigation:not(.vue) .app-navigation-entry-edit form, +#app-navigation:not(.vue) .app-navigation-entry-edit div { + display: inline-flex; + width: 100%; +} +#app-navigation:not(.vue) .app-navigation-entry-edit input { + padding: 5px; + margin-right: 0; + height: 38px; +} +#app-navigation:not(.vue) .app-navigation-entry-edit input:hover, #app-navigation:not(.vue) .app-navigation-entry-edit input:focus { + /* overlapp borders */ + z-index: 1; +} +#app-navigation:not(.vue) .app-navigation-entry-edit input[type=text] { + width: 100%; + min-width: 0; + /* firefox hack: override auto */ + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} +#app-navigation:not(.vue) .app-navigation-entry-edit button, +#app-navigation:not(.vue) .app-navigation-entry-edit input:not([type=text]) { + width: 36px; + height: 38px; + flex: 0 0 36px; +} +#app-navigation:not(.vue) .app-navigation-entry-edit button:not(:last-child), +#app-navigation:not(.vue) .app-navigation-entry-edit input:not([type=text]):not(:last-child) { + border-radius: 0 !important; +} +#app-navigation:not(.vue) .app-navigation-entry-edit button:not(:first-child), +#app-navigation:not(.vue) .app-navigation-entry-edit input:not([type=text]):not(:first-child) { + margin-left: -1px; +} +#app-navigation:not(.vue) .app-navigation-entry-edit button:last-child, +#app-navigation:not(.vue) .app-navigation-entry-edit input:not([type=text]):last-child { + border-bottom-right-radius: var(--border-radius); + border-top-right-radius: var(--border-radius); + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} +#app-navigation:not(.vue) .app-navigation-entry-deleted { + display: inline-flex; + padding-left: 44px; + transform: translateX(300px); +} +#app-navigation:not(.vue) .app-navigation-entry-deleted .app-navigation-entry-deleted-description { + position: relative; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + flex: 1 1 0px; + line-height: 44px; +} +#app-navigation:not(.vue) .app-navigation-entry-deleted .app-navigation-entry-deleted-button { + margin: 0; + height: 44px; + width: 44px; + line-height: 44px; +} +#app-navigation:not(.vue) .app-navigation-entry-deleted .app-navigation-entry-deleted-button:hover, #app-navigation:not(.vue) .app-navigation-entry-deleted .app-navigation-entry-deleted-button:focus { + opacity: 1; +} +#app-navigation:not(.vue) .app-navigation-entry-edit, +#app-navigation:not(.vue) .app-navigation-entry-deleted { + width: calc(100% - 1px); + /* Avoid border overlapping */ + transition: transform 250ms ease-in-out, opacity 250ms ease-in-out, z-index 250ms ease-in-out; + position: absolute; + left: 0; + background-color: var(--color-main-background); + box-sizing: border-box; +} +#app-navigation:not(.vue) .drag-and-drop { + -webkit-transition: padding-bottom 500ms ease 0s; + transition: padding-bottom 500ms ease 0s; + padding-bottom: 40px; +} +#app-navigation:not(.vue) .error { + color: var(--color-error); +} +#app-navigation:not(.vue) .app-navigation-entry-utils ul, +#app-navigation:not(.vue) .app-navigation-entry-menu ul { + list-style-type: none; +} + +/* CONTENT --------------------------------------------------------- */ +#content { + box-sizing: border-box; + position: relative; + display: flex; + padding-top: 50px; + min-height: 100%; +} + +/* APP-CONTENT AND WRAPPER ------------------------------------------ */ +/* Part where the content will be loaded into */ +/** + * !Important. We are defining the minimum requirement we want for flex + * Just before the mobile breakpoint we have variables.$breakpoint-mobile (1024px) - variables.$navigation-width + * -> 468px. In that case we want 200px for the list and 268px for the content + */ +#app-content { + z-index: 1000; + background-color: var(--color-main-background); + position: relative; + flex-basis: 100vw; + min-height: 100%; + /* margin if navigation element is here */ + /* no top border for first settings item */ + /* if app-content-list is present */ +} +#app-navigation:not(.hidden) + #app-content { + margin-left: 300px; +} +#app-content > .section:first-child { + border-top: none; +} +#app-content #app-content-wrapper { + display: flex; + position: relative; + align-items: stretch; + /* make sure we have at least full height for loaders or such + no need for list/details since we have a flex stretch */ + min-height: 100%; + /* CONTENT DETAILS AFTER LIST*/ +} +#app-content #app-content-wrapper .app-content-details { + /* grow full width */ + flex: 1 1 524px; +} +#app-content #app-content-wrapper .app-content-details #app-navigation-toggle-back { + display: none; +} + +/* APP-SIDEBAR ------------------------------------------------------------ */ +/* + Sidebar: a sidebar to be used within #content + #app-content will be shrinked properly +*/ +#app-sidebar { + width: 27vw; + min-width: 300px; + max-width: 500px; + display: block; + position: -webkit-sticky; + position: sticky; + top: 50px; + right: 0; + overflow-y: auto; + overflow-x: hidden; + z-index: 1500; + height: calc(100vh - 50px); + background: var(--color-main-background); + border-left: 1px solid var(--color-border); + flex-shrink: 0; +} +#app-sidebar.disappear { + display: none; +} + +/* APP-SETTINGS ------------------------------------------------------------ */ +/* settings area */ +#app-settings { + margin-top: auto; +} +#app-settings.open #app-settings-content, #app-settings.opened #app-settings-content { + display: block; +} + +#app-settings-content { + display: none; + padding: 10px; + background-color: var(--color-main-background); + /* restrict height of settings and make scrollable */ + max-height: 300px; + overflow-y: auto; + box-sizing: border-box; + /* display input fields at full width */ +} +#app-settings-content input[type=text] { + width: 93%; +} +#app-settings-content .info-text { + padding: 5px 0 7px 22px; + color: var(--color-text-lighter); +} +#app-settings-content input[type=checkbox].radio + label, #app-settings-content input[type=checkbox].checkbox + label, #app-settings-content input[type=radio].radio + label, #app-settings-content input[type=radio].checkbox + label { + display: inline-block; + width: 100%; + padding: 5px 0; +} + +#app-settings-header { + box-sizing: border-box; + background-color: var(--color-main-background); +} + +#app-settings-header .settings-button { + display: flex; + align-items: center; + height: 44px; + width: 100%; + padding: 0; + margin: 0; + background-color: var(--color-main-background); + box-shadow: none; + border: 0; + border-radius: 0; + text-align: left; + font-weight: normal; + font-size: 100%; + opacity: 0.8; + /* like app-navigation a */ + color: var(--color-main-text); +} +#app-settings-header .settings-button.opened { + border-top: solid 1px var(--color-border); + background-color: var(--color-main-background); +} +#app-settings-header .settings-button:hover, #app-settings-header .settings-button:focus { + background-color: var(--color-background-hover); +} +#app-settings-header .settings-button::before { + background-image: var(--icon-settings-dark); + background-position: 14px center; + background-repeat: no-repeat; + content: ""; + width: 44px; + height: 44px; + top: 0; + left: 0; + display: block; + filter: var(--background-invert-if-dark); +} + +/* GENERAL SECTION ------------------------------------------------------------ */ +.section { + display: block; + padding: 30px; + margin-bottom: 24px; + /* slight position correction of checkboxes and radio buttons */ +} +.section.hidden { + display: none !important; +} +.section input[type=checkbox], .section input[type=radio] { + vertical-align: -2px; + margin-right: 4px; +} + +.sub-section { + position: relative; + margin-top: 10px; + margin-left: 27px; + margin-bottom: 10px; +} + +.appear { + opacity: 1; + -webkit-transition: opacity 500ms ease 0s; + -moz-transition: opacity 500ms ease 0s; + -ms-transition: opacity 500ms ease 0s; + -o-transition: opacity 500ms ease 0s; + transition: opacity 500ms ease 0s; +} +.appear.transparent { + opacity: 0; +} + +/* TABS ------------------------------------------------------------ */ +.tabHeaders { + display: flex; + margin-bottom: 16px; +} +.tabHeaders .tabHeader { + display: flex; + flex-direction: column; + flex-grow: 1; + text-align: center; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + cursor: pointer; + color: var(--color-text-lighter); + margin-bottom: 1px; + padding: 5px; + /* Use same amount as sidebar padding */ +} +.tabHeaders .tabHeader.hidden { + display: none; +} +.tabHeaders .tabHeader:first-child { + padding-left: 15px; +} +.tabHeaders .tabHeader:last-child { + padding-right: 15px; +} +.tabHeaders .tabHeader .icon { + display: inline-block; + width: 100%; + height: 16px; + background-size: 16px; + vertical-align: middle; + margin-top: -2px; + margin-right: 3px; + opacity: 0.7; + cursor: pointer; +} +.tabHeaders .tabHeader a { + color: var(--color-text-lighter); + margin-bottom: 1px; + overflow: hidden; + text-overflow: ellipsis; +} +.tabHeaders .tabHeader.selected { + font-weight: bold; +} +.tabHeaders .tabHeader.selected, .tabHeaders .tabHeader:hover, .tabHeaders .tabHeader:focus { + margin-bottom: 0px; + color: var(--color-main-text); + border-bottom: 1px solid var(--color-text-lighter); +} + +.tabsContainer { + clear: left; +} +.tabsContainer .tab { + padding: 0 15px 15px; +} + +/* POPOVER MENU ------------------------------------------------------------ */ +.ie .bubble, .ie .bubble:after, +.ie .popovermenu, .ie .popovermenu:after, +.ie #app-navigation .app-navigation-entry-menu, +.ie #app-navigation .app-navigation-entry-menu:after, +.edge .bubble, +.edge .bubble:after, +.edge .popovermenu, +.edge .popovermenu:after, +.edge #app-navigation .app-navigation-entry-menu, +.edge #app-navigation .app-navigation-entry-menu:after { + border: 1px solid var(--color-border); +} + +.bubble, +.app-navigation-entry-menu, +.popovermenu { + position: absolute; + background-color: var(--color-main-background); + color: var(--color-main-text); + border-radius: var(--border-radius); + z-index: 110; + margin: 5px; + margin-top: -5px; + right: 0; + filter: drop-shadow(0 1px 3px var(--color-box-shadow)); + display: none; + will-change: filter; + /* Center the popover */ + /* Align the popover to the left */ +} +.bubble:after, +.app-navigation-entry-menu:after, +.popovermenu:after { + bottom: 100%; + right: 7px; + /* change this to adjust the arrow position */ + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; + pointer-events: none; + border-bottom-color: var(--color-main-background); + border-width: 9px; +} +.bubble.menu-center, +.app-navigation-entry-menu.menu-center, +.popovermenu.menu-center { + transform: translateX(50%); + right: 50%; + margin-right: 0; +} +.bubble.menu-center:after, +.app-navigation-entry-menu.menu-center:after, +.popovermenu.menu-center:after { + right: 50%; + transform: translateX(50%); +} +.bubble.menu-left, +.app-navigation-entry-menu.menu-left, +.popovermenu.menu-left { + right: auto; + left: 0; + margin-right: 0; +} +.bubble.menu-left:after, +.app-navigation-entry-menu.menu-left:after, +.popovermenu.menu-left:after { + left: 6px; + right: auto; +} +.bubble.open, +.app-navigation-entry-menu.open, +.popovermenu.open { + display: block; +} +.bubble.contactsmenu-popover, +.app-navigation-entry-menu.contactsmenu-popover, +.popovermenu.contactsmenu-popover { + margin: 0; +} +.bubble ul, +.app-navigation-entry-menu ul, +.popovermenu ul { + /* Overwrite #app-navigation > ul ul */ + display: flex !important; + flex-direction: column; +} +.bubble li, +.app-navigation-entry-menu li, +.popovermenu li { + display: flex; + flex: 0 0 auto; + /* css hack, only first not hidden */ +} +.bubble li.hidden, +.app-navigation-entry-menu li.hidden, +.popovermenu li.hidden { + display: none; +} +.bubble li > button, +.bubble li > a, +.bubble li > .menuitem, +.app-navigation-entry-menu li > button, +.app-navigation-entry-menu li > a, +.app-navigation-entry-menu li > .menuitem, +.popovermenu li > button, +.popovermenu li > a, +.popovermenu li > .menuitem { + cursor: pointer; + line-height: 44px; + border: 0; + border-radius: 0; + background-color: transparent; + display: flex; + align-items: flex-start; + height: auto; + margin: 0; + font-weight: normal; + box-shadow: none; + width: 100%; + color: var(--color-main-text); + white-space: nowrap; + /* prevent .action class to break the design */ + /* Add padding if contains icon+text */ + /* DEPRECATED! old img in popover fallback + * TODO: to remove */ + /* checkbox/radio fixes */ + /* no margin if hidden span before */ + /* Inputs inside popover supports text, submit & reset */ +} +.bubble li > button span[class^=icon-], +.bubble li > button span[class*=" icon-"], .bubble li > button[class^=icon-], .bubble li > button[class*=" icon-"], +.bubble li > a span[class^=icon-], +.bubble li > a span[class*=" icon-"], +.bubble li > a[class^=icon-], +.bubble li > a[class*=" icon-"], +.bubble li > .menuitem span[class^=icon-], +.bubble li > .menuitem span[class*=" icon-"], +.bubble li > .menuitem[class^=icon-], +.bubble li > .menuitem[class*=" icon-"], +.app-navigation-entry-menu li > button span[class^=icon-], +.app-navigation-entry-menu li > button span[class*=" icon-"], +.app-navigation-entry-menu li > button[class^=icon-], +.app-navigation-entry-menu li > button[class*=" icon-"], +.app-navigation-entry-menu li > a span[class^=icon-], +.app-navigation-entry-menu li > a span[class*=" icon-"], +.app-navigation-entry-menu li > a[class^=icon-], +.app-navigation-entry-menu li > a[class*=" icon-"], +.app-navigation-entry-menu li > .menuitem span[class^=icon-], +.app-navigation-entry-menu li > .menuitem span[class*=" icon-"], +.app-navigation-entry-menu li > .menuitem[class^=icon-], +.app-navigation-entry-menu li > .menuitem[class*=" icon-"], +.popovermenu li > button span[class^=icon-], +.popovermenu li > button span[class*=" icon-"], +.popovermenu li > button[class^=icon-], +.popovermenu li > button[class*=" icon-"], +.popovermenu li > a span[class^=icon-], +.popovermenu li > a span[class*=" icon-"], +.popovermenu li > a[class^=icon-], +.popovermenu li > a[class*=" icon-"], +.popovermenu li > .menuitem span[class^=icon-], +.popovermenu li > .menuitem span[class*=" icon-"], +.popovermenu li > .menuitem[class^=icon-], +.popovermenu li > .menuitem[class*=" icon-"] { + min-width: 0; + /* Overwrite icons*/ + min-height: 0; + background-position: 14px center; + background-size: 16px; +} +.bubble li > button span[class^=icon-], +.bubble li > button span[class*=" icon-"], +.bubble li > a span[class^=icon-], +.bubble li > a span[class*=" icon-"], +.bubble li > .menuitem span[class^=icon-], +.bubble li > .menuitem span[class*=" icon-"], +.app-navigation-entry-menu li > button span[class^=icon-], +.app-navigation-entry-menu li > button span[class*=" icon-"], +.app-navigation-entry-menu li > a span[class^=icon-], +.app-navigation-entry-menu li > a span[class*=" icon-"], +.app-navigation-entry-menu li > .menuitem span[class^=icon-], +.app-navigation-entry-menu li > .menuitem span[class*=" icon-"], +.popovermenu li > button span[class^=icon-], +.popovermenu li > button span[class*=" icon-"], +.popovermenu li > a span[class^=icon-], +.popovermenu li > a span[class*=" icon-"], +.popovermenu li > .menuitem span[class^=icon-], +.popovermenu li > .menuitem span[class*=" icon-"] { + /* Keep padding to define the width to + assure correct position of a possible text */ + padding: 22px 0 22px 44px; +} +.bubble li > button:not([class^=icon-]):not([class*=icon-]) > span:not([class^=icon-]):not([class*=icon-]):first-child, +.bubble li > button:not([class^=icon-]):not([class*=icon-]) > input:not([class^=icon-]):not([class*=icon-]):first-child, +.bubble li > button:not([class^=icon-]):not([class*=icon-]) > form:not([class^=icon-]):not([class*=icon-]):first-child, +.bubble li > a:not([class^=icon-]):not([class*=icon-]) > span:not([class^=icon-]):not([class*=icon-]):first-child, +.bubble li > a:not([class^=icon-]):not([class*=icon-]) > input:not([class^=icon-]):not([class*=icon-]):first-child, +.bubble li > a:not([class^=icon-]):not([class*=icon-]) > form:not([class^=icon-]):not([class*=icon-]):first-child, +.bubble li > .menuitem:not([class^=icon-]):not([class*=icon-]) > span:not([class^=icon-]):not([class*=icon-]):first-child, +.bubble li > .menuitem:not([class^=icon-]):not([class*=icon-]) > input:not([class^=icon-]):not([class*=icon-]):first-child, +.bubble li > .menuitem:not([class^=icon-]):not([class*=icon-]) > form:not([class^=icon-]):not([class*=icon-]):first-child, +.app-navigation-entry-menu li > button:not([class^=icon-]):not([class*=icon-]) > span:not([class^=icon-]):not([class*=icon-]):first-child, +.app-navigation-entry-menu li > button:not([class^=icon-]):not([class*=icon-]) > input:not([class^=icon-]):not([class*=icon-]):first-child, +.app-navigation-entry-menu li > button:not([class^=icon-]):not([class*=icon-]) > form:not([class^=icon-]):not([class*=icon-]):first-child, +.app-navigation-entry-menu li > a:not([class^=icon-]):not([class*=icon-]) > span:not([class^=icon-]):not([class*=icon-]):first-child, +.app-navigation-entry-menu li > a:not([class^=icon-]):not([class*=icon-]) > input:not([class^=icon-]):not([class*=icon-]):first-child, +.app-navigation-entry-menu li > a:not([class^=icon-]):not([class*=icon-]) > form:not([class^=icon-]):not([class*=icon-]):first-child, +.app-navigation-entry-menu li > .menuitem:not([class^=icon-]):not([class*=icon-]) > span:not([class^=icon-]):not([class*=icon-]):first-child, +.app-navigation-entry-menu li > .menuitem:not([class^=icon-]):not([class*=icon-]) > input:not([class^=icon-]):not([class*=icon-]):first-child, +.app-navigation-entry-menu li > .menuitem:not([class^=icon-]):not([class*=icon-]) > form:not([class^=icon-]):not([class*=icon-]):first-child, +.popovermenu li > button:not([class^=icon-]):not([class*=icon-]) > span:not([class^=icon-]):not([class*=icon-]):first-child, +.popovermenu li > button:not([class^=icon-]):not([class*=icon-]) > input:not([class^=icon-]):not([class*=icon-]):first-child, +.popovermenu li > button:not([class^=icon-]):not([class*=icon-]) > form:not([class^=icon-]):not([class*=icon-]):first-child, +.popovermenu li > a:not([class^=icon-]):not([class*=icon-]) > span:not([class^=icon-]):not([class*=icon-]):first-child, +.popovermenu li > a:not([class^=icon-]):not([class*=icon-]) > input:not([class^=icon-]):not([class*=icon-]):first-child, +.popovermenu li > a:not([class^=icon-]):not([class*=icon-]) > form:not([class^=icon-]):not([class*=icon-]):first-child, +.popovermenu li > .menuitem:not([class^=icon-]):not([class*=icon-]) > span:not([class^=icon-]):not([class*=icon-]):first-child, +.popovermenu li > .menuitem:not([class^=icon-]):not([class*=icon-]) > input:not([class^=icon-]):not([class*=icon-]):first-child, +.popovermenu li > .menuitem:not([class^=icon-]):not([class*=icon-]) > form:not([class^=icon-]):not([class*=icon-]):first-child { + margin-left: 44px; +} +.bubble li > button[class^=icon-], .bubble li > button[class*=" icon-"], +.bubble li > a[class^=icon-], +.bubble li > a[class*=" icon-"], +.bubble li > .menuitem[class^=icon-], +.bubble li > .menuitem[class*=" icon-"], +.app-navigation-entry-menu li > button[class^=icon-], +.app-navigation-entry-menu li > button[class*=" icon-"], +.app-navigation-entry-menu li > a[class^=icon-], +.app-navigation-entry-menu li > a[class*=" icon-"], +.app-navigation-entry-menu li > .menuitem[class^=icon-], +.app-navigation-entry-menu li > .menuitem[class*=" icon-"], +.popovermenu li > button[class^=icon-], +.popovermenu li > button[class*=" icon-"], +.popovermenu li > a[class^=icon-], +.popovermenu li > a[class*=" icon-"], +.popovermenu li > .menuitem[class^=icon-], +.popovermenu li > .menuitem[class*=" icon-"] { + padding: 0 14px 0 44px !important; +} +.bubble li > button:hover, .bubble li > button:focus, +.bubble li > a:hover, +.bubble li > a:focus, +.bubble li > .menuitem:hover, +.bubble li > .menuitem:focus, +.app-navigation-entry-menu li > button:hover, +.app-navigation-entry-menu li > button:focus, +.app-navigation-entry-menu li > a:hover, +.app-navigation-entry-menu li > a:focus, +.app-navigation-entry-menu li > .menuitem:hover, +.app-navigation-entry-menu li > .menuitem:focus, +.popovermenu li > button:hover, +.popovermenu li > button:focus, +.popovermenu li > a:hover, +.popovermenu li > a:focus, +.popovermenu li > .menuitem:hover, +.popovermenu li > .menuitem:focus { + background-color: var(--color-background-hover); +} +.bubble li > button.active, +.bubble li > a.active, +.bubble li > .menuitem.active, +.app-navigation-entry-menu li > button.active, +.app-navigation-entry-menu li > a.active, +.app-navigation-entry-menu li > .menuitem.active, +.popovermenu li > button.active, +.popovermenu li > a.active, +.popovermenu li > .menuitem.active { + background-color: var(--color-primary-light); +} +.bubble li > button.action, +.bubble li > a.action, +.bubble li > .menuitem.action, +.app-navigation-entry-menu li > button.action, +.app-navigation-entry-menu li > a.action, +.app-navigation-entry-menu li > .menuitem.action, +.popovermenu li > button.action, +.popovermenu li > a.action, +.popovermenu li > .menuitem.action { + padding: inherit !important; +} +.bubble li > button > span, +.bubble li > a > span, +.bubble li > .menuitem > span, +.app-navigation-entry-menu li > button > span, +.app-navigation-entry-menu li > a > span, +.app-navigation-entry-menu li > .menuitem > span, +.popovermenu li > button > span, +.popovermenu li > a > span, +.popovermenu li > .menuitem > span { + cursor: pointer; + white-space: nowrap; +} +.bubble li > button > p, +.bubble li > a > p, +.bubble li > .menuitem > p, +.app-navigation-entry-menu li > button > p, +.app-navigation-entry-menu li > a > p, +.app-navigation-entry-menu li > .menuitem > p, +.popovermenu li > button > p, +.popovermenu li > a > p, +.popovermenu li > .menuitem > p { + width: 150px; + line-height: 1.6em; + padding: 8px 0; + white-space: normal; +} +.bubble li > button > select, +.bubble li > a > select, +.bubble li > .menuitem > select, +.app-navigation-entry-menu li > button > select, +.app-navigation-entry-menu li > a > select, +.app-navigation-entry-menu li > .menuitem > select, +.popovermenu li > button > select, +.popovermenu li > a > select, +.popovermenu li > .menuitem > select { + margin: 0; + margin-left: 6px; +} +.bubble li > button:not(:empty), +.bubble li > a:not(:empty), +.bubble li > .menuitem:not(:empty), +.app-navigation-entry-menu li > button:not(:empty), +.app-navigation-entry-menu li > a:not(:empty), +.app-navigation-entry-menu li > .menuitem:not(:empty), +.popovermenu li > button:not(:empty), +.popovermenu li > a:not(:empty), +.popovermenu li > .menuitem:not(:empty) { + padding-right: 14px !important; +} +.bubble li > button > img, +.bubble li > a > img, +.bubble li > .menuitem > img, +.app-navigation-entry-menu li > button > img, +.app-navigation-entry-menu li > a > img, +.app-navigation-entry-menu li > .menuitem > img, +.popovermenu li > button > img, +.popovermenu li > a > img, +.popovermenu li > .menuitem > img { + width: 16px; + padding: 14px; +} +.bubble li > button > input.radio + label, +.bubble li > button > input.checkbox + label, +.bubble li > a > input.radio + label, +.bubble li > a > input.checkbox + label, +.bubble li > .menuitem > input.radio + label, +.bubble li > .menuitem > input.checkbox + label, +.app-navigation-entry-menu li > button > input.radio + label, +.app-navigation-entry-menu li > button > input.checkbox + label, +.app-navigation-entry-menu li > a > input.radio + label, +.app-navigation-entry-menu li > a > input.checkbox + label, +.app-navigation-entry-menu li > .menuitem > input.radio + label, +.app-navigation-entry-menu li > .menuitem > input.checkbox + label, +.popovermenu li > button > input.radio + label, +.popovermenu li > button > input.checkbox + label, +.popovermenu li > a > input.radio + label, +.popovermenu li > a > input.checkbox + label, +.popovermenu li > .menuitem > input.radio + label, +.popovermenu li > .menuitem > input.checkbox + label { + padding: 0 !important; + width: 100%; +} +.bubble li > button > input.checkbox + label::before, +.bubble li > a > input.checkbox + label::before, +.bubble li > .menuitem > input.checkbox + label::before, +.app-navigation-entry-menu li > button > input.checkbox + label::before, +.app-navigation-entry-menu li > a > input.checkbox + label::before, +.app-navigation-entry-menu li > .menuitem > input.checkbox + label::before, +.popovermenu li > button > input.checkbox + label::before, +.popovermenu li > a > input.checkbox + label::before, +.popovermenu li > .menuitem > input.checkbox + label::before { + margin: -2px 13px 0; +} +.bubble li > button > input.radio + label::before, +.bubble li > a > input.radio + label::before, +.bubble li > .menuitem > input.radio + label::before, +.app-navigation-entry-menu li > button > input.radio + label::before, +.app-navigation-entry-menu li > a > input.radio + label::before, +.app-navigation-entry-menu li > .menuitem > input.radio + label::before, +.popovermenu li > button > input.radio + label::before, +.popovermenu li > a > input.radio + label::before, +.popovermenu li > .menuitem > input.radio + label::before { + margin: -2px 12px 0; +} +.bubble li > button > input:not([type=radio]):not([type=checkbox]):not([type=image]), +.bubble li > a > input:not([type=radio]):not([type=checkbox]):not([type=image]), +.bubble li > .menuitem > input:not([type=radio]):not([type=checkbox]):not([type=image]), +.app-navigation-entry-menu li > button > input:not([type=radio]):not([type=checkbox]):not([type=image]), +.app-navigation-entry-menu li > a > input:not([type=radio]):not([type=checkbox]):not([type=image]), +.app-navigation-entry-menu li > .menuitem > input:not([type=radio]):not([type=checkbox]):not([type=image]), +.popovermenu li > button > input:not([type=radio]):not([type=checkbox]):not([type=image]), +.popovermenu li > a > input:not([type=radio]):not([type=checkbox]):not([type=image]), +.popovermenu li > .menuitem > input:not([type=radio]):not([type=checkbox]):not([type=image]) { + width: 150px; +} +.bubble li > button form, +.bubble li > a form, +.bubble li > .menuitem form, +.app-navigation-entry-menu li > button form, +.app-navigation-entry-menu li > a form, +.app-navigation-entry-menu li > .menuitem form, +.popovermenu li > button form, +.popovermenu li > a form, +.popovermenu li > .menuitem form { + display: flex; + flex: 1 1 auto; + /* put a small space between text and form + if there is an element before */ +} +.bubble li > button form:not(:first-child), +.bubble li > a form:not(:first-child), +.bubble li > .menuitem form:not(:first-child), +.app-navigation-entry-menu li > button form:not(:first-child), +.app-navigation-entry-menu li > a form:not(:first-child), +.app-navigation-entry-menu li > .menuitem form:not(:first-child), +.popovermenu li > button form:not(:first-child), +.popovermenu li > a form:not(:first-child), +.popovermenu li > .menuitem form:not(:first-child) { + margin-left: 5px; +} +.bubble li > button > span.hidden + form, +.bubble li > button > span[style*="display:none"] + form, +.bubble li > a > span.hidden + form, +.bubble li > a > span[style*="display:none"] + form, +.bubble li > .menuitem > span.hidden + form, +.bubble li > .menuitem > span[style*="display:none"] + form, +.app-navigation-entry-menu li > button > span.hidden + form, +.app-navigation-entry-menu li > button > span[style*="display:none"] + form, +.app-navigation-entry-menu li > a > span.hidden + form, +.app-navigation-entry-menu li > a > span[style*="display:none"] + form, +.app-navigation-entry-menu li > .menuitem > span.hidden + form, +.app-navigation-entry-menu li > .menuitem > span[style*="display:none"] + form, +.popovermenu li > button > span.hidden + form, +.popovermenu li > button > span[style*="display:none"] + form, +.popovermenu li > a > span.hidden + form, +.popovermenu li > a > span[style*="display:none"] + form, +.popovermenu li > .menuitem > span.hidden + form, +.popovermenu li > .menuitem > span[style*="display:none"] + form { + margin-left: 0; +} +.bubble li > button input, +.bubble li > a input, +.bubble li > .menuitem input, +.app-navigation-entry-menu li > button input, +.app-navigation-entry-menu li > a input, +.app-navigation-entry-menu li > .menuitem input, +.popovermenu li > button input, +.popovermenu li > a input, +.popovermenu li > .menuitem input { + min-width: 44px; + max-height: 40px; + /* twice the element margin-y */ + margin: 2px 0; + flex: 1 1 auto; +} +.bubble li > button input:not(:first-child), +.bubble li > a input:not(:first-child), +.bubble li > .menuitem input:not(:first-child), +.app-navigation-entry-menu li > button input:not(:first-child), +.app-navigation-entry-menu li > a input:not(:first-child), +.app-navigation-entry-menu li > .menuitem input:not(:first-child), +.popovermenu li > button input:not(:first-child), +.popovermenu li > a input:not(:first-child), +.popovermenu li > .menuitem input:not(:first-child) { + margin-left: 5px; +} +.bubble li:not(.hidden):not([style*="display:none"]):first-of-type > button > form, .bubble li:not(.hidden):not([style*="display:none"]):first-of-type > button > input, .bubble li:not(.hidden):not([style*="display:none"]):first-of-type > a > form, .bubble li:not(.hidden):not([style*="display:none"]):first-of-type > a > input, .bubble li:not(.hidden):not([style*="display:none"]):first-of-type > .menuitem > form, .bubble li:not(.hidden):not([style*="display:none"]):first-of-type > .menuitem > input, +.app-navigation-entry-menu li:not(.hidden):not([style*="display:none"]):first-of-type > button > form, +.app-navigation-entry-menu li:not(.hidden):not([style*="display:none"]):first-of-type > button > input, +.app-navigation-entry-menu li:not(.hidden):not([style*="display:none"]):first-of-type > a > form, +.app-navigation-entry-menu li:not(.hidden):not([style*="display:none"]):first-of-type > a > input, +.app-navigation-entry-menu li:not(.hidden):not([style*="display:none"]):first-of-type > .menuitem > form, +.app-navigation-entry-menu li:not(.hidden):not([style*="display:none"]):first-of-type > .menuitem > input, +.popovermenu li:not(.hidden):not([style*="display:none"]):first-of-type > button > form, +.popovermenu li:not(.hidden):not([style*="display:none"]):first-of-type > button > input, +.popovermenu li:not(.hidden):not([style*="display:none"]):first-of-type > a > form, +.popovermenu li:not(.hidden):not([style*="display:none"]):first-of-type > a > input, +.popovermenu li:not(.hidden):not([style*="display:none"]):first-of-type > .menuitem > form, +.popovermenu li:not(.hidden):not([style*="display:none"]):first-of-type > .menuitem > input { + margin-top: 12px; +} +.bubble li:not(.hidden):not([style*="display:none"]):last-of-type > button > form, .bubble li:not(.hidden):not([style*="display:none"]):last-of-type > button > input, .bubble li:not(.hidden):not([style*="display:none"]):last-of-type > a > form, .bubble li:not(.hidden):not([style*="display:none"]):last-of-type > a > input, .bubble li:not(.hidden):not([style*="display:none"]):last-of-type > .menuitem > form, .bubble li:not(.hidden):not([style*="display:none"]):last-of-type > .menuitem > input, +.app-navigation-entry-menu li:not(.hidden):not([style*="display:none"]):last-of-type > button > form, +.app-navigation-entry-menu li:not(.hidden):not([style*="display:none"]):last-of-type > button > input, +.app-navigation-entry-menu li:not(.hidden):not([style*="display:none"]):last-of-type > a > form, +.app-navigation-entry-menu li:not(.hidden):not([style*="display:none"]):last-of-type > a > input, +.app-navigation-entry-menu li:not(.hidden):not([style*="display:none"]):last-of-type > .menuitem > form, +.app-navigation-entry-menu li:not(.hidden):not([style*="display:none"]):last-of-type > .menuitem > input, +.popovermenu li:not(.hidden):not([style*="display:none"]):last-of-type > button > form, +.popovermenu li:not(.hidden):not([style*="display:none"]):last-of-type > button > input, +.popovermenu li:not(.hidden):not([style*="display:none"]):last-of-type > a > form, +.popovermenu li:not(.hidden):not([style*="display:none"]):last-of-type > a > input, +.popovermenu li:not(.hidden):not([style*="display:none"]):last-of-type > .menuitem > form, +.popovermenu li:not(.hidden):not([style*="display:none"]):last-of-type > .menuitem > input { + margin-bottom: 12px; +} +.bubble li > button, +.app-navigation-entry-menu li > button, +.popovermenu li > button { + padding: 0; +} +.bubble li > button span, +.app-navigation-entry-menu li > button span, +.popovermenu li > button span { + opacity: 1; +} + +/* "app-*" descendants use border-box sizing, so the height of the icon must be + * set to the height of the item (as well as its width to make it squared). */ +#content[class*=app-] .bubble li > button, +#content[class*=app-] .bubble li > a, +#content[class*=app-] .bubble li > .menuitem, +#content[class*=app-] .app-navigation-entry-menu li > button, +#content[class*=app-] .app-navigation-entry-menu li > a, +#content[class*=app-] .app-navigation-entry-menu li > .menuitem, +#content[class*=app-] .popovermenu li > button, +#content[class*=app-] .popovermenu li > a, +#content[class*=app-] .popovermenu li > .menuitem { + /* DEPRECATED! old img in popover fallback + * TODO: to remove */ +} +#content[class*=app-] .bubble li > button > img, +#content[class*=app-] .bubble li > a > img, +#content[class*=app-] .bubble li > .menuitem > img, +#content[class*=app-] .app-navigation-entry-menu li > button > img, +#content[class*=app-] .app-navigation-entry-menu li > a > img, +#content[class*=app-] .app-navigation-entry-menu li > .menuitem > img, +#content[class*=app-] .popovermenu li > button > img, +#content[class*=app-] .popovermenu li > a > img, +#content[class*=app-] .popovermenu li > .menuitem > img { + width: 44px; + height: 44px; +} + +/* CONTENT LIST ------------------------------------------------------------ */ +.app-content-list { + position: -webkit-sticky; + position: sticky; + top: 50px; + border-right: 1px solid var(--color-border); + display: flex; + flex-direction: column; + transition: transform 250ms ease-in-out; + min-height: calc(100vh - 50px); + max-height: calc(100vh - 50px); + overflow-y: auto; + overflow-x: hidden; + flex: 1 1 200px; + min-width: 200px; + max-width: 300px; + /* Default item */ +} +.app-content-list .app-content-list-item { + position: relative; + height: 68px; + cursor: pointer; + padding: 10px 7px; + display: flex; + flex-wrap: wrap; + align-items: center; + flex: 0 0 auto; + /* Icon fixes */ +} +.app-content-list .app-content-list-item > [class^=icon-], +.app-content-list .app-content-list-item > [class*=" icon-"], +.app-content-list .app-content-list-item > .app-content-list-item-menu > [class^=icon-], +.app-content-list .app-content-list-item > .app-content-list-item-menu > [class*=" icon-"] { + order: 4; + width: 24px; + height: 24px; + margin: -7px; + padding: 22px; + opacity: 0.3; + cursor: pointer; +} +.app-content-list .app-content-list-item > [class^=icon-]:hover, .app-content-list .app-content-list-item > [class^=icon-]:focus, +.app-content-list .app-content-list-item > [class*=" icon-"]:hover, +.app-content-list .app-content-list-item > [class*=" icon-"]:focus, +.app-content-list .app-content-list-item > .app-content-list-item-menu > [class^=icon-]:hover, +.app-content-list .app-content-list-item > .app-content-list-item-menu > [class^=icon-]:focus, +.app-content-list .app-content-list-item > .app-content-list-item-menu > [class*=" icon-"]:hover, +.app-content-list .app-content-list-item > .app-content-list-item-menu > [class*=" icon-"]:focus { + opacity: 0.7; +} +.app-content-list .app-content-list-item > [class^=icon-][class^=icon-star], .app-content-list .app-content-list-item > [class^=icon-][class*=" icon-star"], +.app-content-list .app-content-list-item > [class*=" icon-"][class^=icon-star], +.app-content-list .app-content-list-item > [class*=" icon-"][class*=" icon-star"], +.app-content-list .app-content-list-item > .app-content-list-item-menu > [class^=icon-][class^=icon-star], +.app-content-list .app-content-list-item > .app-content-list-item-menu > [class^=icon-][class*=" icon-star"], +.app-content-list .app-content-list-item > .app-content-list-item-menu > [class*=" icon-"][class^=icon-star], +.app-content-list .app-content-list-item > .app-content-list-item-menu > [class*=" icon-"][class*=" icon-star"] { + opacity: 0.7; +} +.app-content-list .app-content-list-item > [class^=icon-][class^=icon-star]:hover, .app-content-list .app-content-list-item > [class^=icon-][class^=icon-star]:focus, .app-content-list .app-content-list-item > [class^=icon-][class*=" icon-star"]:hover, .app-content-list .app-content-list-item > [class^=icon-][class*=" icon-star"]:focus, +.app-content-list .app-content-list-item > [class*=" icon-"][class^=icon-star]:hover, +.app-content-list .app-content-list-item > [class*=" icon-"][class^=icon-star]:focus, +.app-content-list .app-content-list-item > [class*=" icon-"][class*=" icon-star"]:hover, +.app-content-list .app-content-list-item > [class*=" icon-"][class*=" icon-star"]:focus, +.app-content-list .app-content-list-item > .app-content-list-item-menu > [class^=icon-][class^=icon-star]:hover, +.app-content-list .app-content-list-item > .app-content-list-item-menu > [class^=icon-][class^=icon-star]:focus, +.app-content-list .app-content-list-item > .app-content-list-item-menu > [class^=icon-][class*=" icon-star"]:hover, +.app-content-list .app-content-list-item > .app-content-list-item-menu > [class^=icon-][class*=" icon-star"]:focus, +.app-content-list .app-content-list-item > .app-content-list-item-menu > [class*=" icon-"][class^=icon-star]:hover, +.app-content-list .app-content-list-item > .app-content-list-item-menu > [class*=" icon-"][class^=icon-star]:focus, +.app-content-list .app-content-list-item > .app-content-list-item-menu > [class*=" icon-"][class*=" icon-star"]:hover, +.app-content-list .app-content-list-item > .app-content-list-item-menu > [class*=" icon-"][class*=" icon-star"]:focus { + opacity: 1; +} +.app-content-list .app-content-list-item > [class^=icon-].icon-starred, +.app-content-list .app-content-list-item > [class*=" icon-"].icon-starred, +.app-content-list .app-content-list-item > .app-content-list-item-menu > [class^=icon-].icon-starred, +.app-content-list .app-content-list-item > .app-content-list-item-menu > [class*=" icon-"].icon-starred { + opacity: 1; +} +.app-content-list .app-content-list-item:hover, .app-content-list .app-content-list-item:focus, .app-content-list .app-content-list-item.active { + background-color: var(--color-background-dark); +} +.app-content-list .app-content-list-item:hover .app-content-list-item-checkbox.checkbox + label, .app-content-list .app-content-list-item:focus .app-content-list-item-checkbox.checkbox + label, .app-content-list .app-content-list-item.active .app-content-list-item-checkbox.checkbox + label { + display: flex; +} +.app-content-list .app-content-list-item .app-content-list-item-checkbox.checkbox + label, +.app-content-list .app-content-list-item .app-content-list-item-star { + position: absolute; + height: 40px; + width: 40px; + z-index: 50; +} +.app-content-list .app-content-list-item .app-content-list-item-checkbox.checkbox:checked + label, .app-content-list .app-content-list-item .app-content-list-item-checkbox.checkbox:hover + label, .app-content-list .app-content-list-item .app-content-list-item-checkbox.checkbox:focus + label, .app-content-list .app-content-list-item .app-content-list-item-checkbox.checkbox.active + label { + display: flex; +} +.app-content-list .app-content-list-item .app-content-list-item-checkbox.checkbox:checked + label + .app-content-list-item-icon, .app-content-list .app-content-list-item .app-content-list-item-checkbox.checkbox:hover + label + .app-content-list-item-icon, .app-content-list .app-content-list-item .app-content-list-item-checkbox.checkbox:focus + label + .app-content-list-item-icon, .app-content-list .app-content-list-item .app-content-list-item-checkbox.checkbox.active + label + .app-content-list-item-icon { + opacity: 0.7; +} +.app-content-list .app-content-list-item .app-content-list-item-checkbox.checkbox + label { + top: 14px; + left: 7px; + display: none; + /* Hide the star, priority to the checkbox */ +} +.app-content-list .app-content-list-item .app-content-list-item-checkbox.checkbox + label::before { + margin: 0; +} +.app-content-list .app-content-list-item .app-content-list-item-checkbox.checkbox + label ~ .app-content-list-item-star { + display: none; +} +.app-content-list .app-content-list-item .app-content-list-item-star { + display: flex; + top: 10px; + left: 32px; + background-size: 16px; + height: 20px; + width: 20px; + margin: 0; + padding: 0; +} +.app-content-list .app-content-list-item .app-content-list-item-icon { + position: absolute; + display: inline-block; + height: 40px; + width: 40px; + line-height: 40px; + border-radius: 50%; + vertical-align: middle; + margin-right: 10px; + color: #fff; + text-align: center; + font-size: 1.5em; + text-transform: capitalize; + object-fit: cover; + user-select: none; + cursor: pointer; + top: 50%; + margin-top: -20px; +} +.app-content-list .app-content-list-item .app-content-list-item-line-one, +.app-content-list .app-content-list-item .app-content-list-item-line-two { + display: block; + padding-left: 50px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + order: 1; + flex: 1 1 0px; + padding-right: 10px; + cursor: pointer; +} +.app-content-list .app-content-list-item .app-content-list-item-line-two { + opacity: 0.5; + order: 3; + flex: 1 0; + flex-basis: calc(100% - 44px); +} +.app-content-list .app-content-list-item .app-content-list-item-details { + order: 2; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + max-width: 100px; + opacity: 0.5; + font-size: 80%; + user-select: none; +} +.app-content-list .app-content-list-item .app-content-list-item-menu { + order: 4; + position: relative; +} +.app-content-list .app-content-list-item .app-content-list-item-menu .popovermenu { + margin: 0; + right: -2px; +} +.app-content-list.selection .app-content-list-item-checkbox.checkbox + label { + display: flex; +} + +/* Copyright (c) 2015, Raghu Nayyar, http://raghunayyar.com + This file is licensed under the Affero General Public License version 3 or later. + See the COPYING-README file. */ +/* Global Components */ +.pull-left { + float: left; +} + +.pull-right { + float: right; +} + +.clear-left { + clear: left; +} + +.clear-right { + clear: right; +} + +.clear-both { + clear: both; +} + +.hidden { + display: none; +} + +.hidden-visually { + position: absolute; + left: -10000px; + top: -10000px; + width: 1px; + height: 1px; + overflow: hidden; +} + +.bold { + font-weight: 600; +} + +.center { + text-align: center; +} + +.inlineblock { + display: inline-block; +} + +/* ---- BROWSER-SPECIFIC FIXES ---- */ +/* remove dotted outlines in Firefox */ +::-moz-focus-inner { + border: 0; +} + +/** + * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com) + * + * @author John Molakvoæ (skjnldsv) + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ +@media only screen and (max-width: 1024px) { + /* position share dropdown */ + #dropdown { + margin-right: 10% !important; + width: 80% !important; + } + + /* fix name autocomplete not showing on mobile */ + .ui-autocomplete { + z-index: 1000 !important; + } + + /* fix error display on smaller screens */ + .error-wide { + width: 100%; + margin-left: 0 !important; + box-sizing: border-box; + } + + /* APP SIDEBAR TOGGLE and SWIPE ----------------------------------------------*/ + #app-navigation { + transform: translateX(-300px); + } + + .snapjs-left #app-navigation { + transform: translateX(0); + } + + #app-navigation:not(.hidden) + #app-content { + margin-left: 0; + } + + .skip-navigation.skip-content { + left: 3px; + margin-left: 0; + } + + /* full width for message list on mobile */ + .app-content-list { + background: var(--color-main-background); + flex: 1 1 100%; + max-height: unset; + max-width: 100%; + } + .app-content-list + .app-content-details { + display: none; + } + .app-content-list.showdetails { + display: none; + } + .app-content-list.showdetails + .app-content-details { + display: initial; + } + + /* Show app details page */ + #app-content.showdetails #app-navigation-toggle { + transform: translateX(-44px); + } + #app-content.showdetails #app-navigation-toggle-back { + position: fixed; + display: inline-block !important; + top: 50px; + left: 0; + width: 44px; + height: 44px; + z-index: 1050; + background-color: rgba(255, 255, 255, 0.7); + cursor: pointer; + opacity: 0.6; + transform: rotate(90deg); + } + #app-content.showdetails .app-content-list { + transform: translateX(-100%); + } + + #app-navigation-toggle { + position: fixed; + display: inline-block !important; + left: 0; + width: 44px; + height: 44px; + z-index: 1050; + cursor: pointer; + opacity: 0.6; + } + + #app-navigation-toggle:hover, +#app-navigation-toggle:focus { + opacity: 1; + } + + /* position controls for apps with app-navigation */ + #app-navigation + #app-content #controls { + padding-left: 44px; + } + + /* .viewer-mode is when text editor, PDF viewer, etc is open */ + #body-user .app-files.viewer-mode #controls { + padding-left: 0 !important; + } + + .app-files.viewer-mode #app-navigation-toggle { + display: none !important; + } + + table.multiselect thead { + left: 0 !important; + } + + /* prevent overflow in user management controls bar */ + #usersearchform { + display: none; + } + + #body-settings #controls { + min-width: 1024px !important; + } + + /* do not show dates in filepicker */ + #oc-dialog-filepicker-content .filelist #headerSize, +#oc-dialog-filepicker-content .filelist #headerDate, +#oc-dialog-filepicker-content .filelist .filesize, +#oc-dialog-filepicker-content .filelist .date { + display: none; + } + + #oc-dialog-filepicker-content .filelist .filename { + max-width: 100%; + } + + .snapjs-left table.multiselect thead { + top: 44px; + } + + /* end of media query */ +} +@media only screen and (max-width: 480px) { + #header .header-right > div > .menu { + max-width: calc(100vw - 10px); + position: fixed; + } + #header .header-right > div > .menu::after { + display: none !important; + } + + /* Arrow directly child of menutoggle */ + #header .header-right > div { + /* settings need a different offset, since they have a right padding */ + } + #header .header-right > div.openedMenu::after { + display: block; + } + #header .header-right > div::after { + border: 10px solid transparent; + border-bottom-color: var(--color-main-background); + bottom: 0; + content: " "; + height: 0; + width: 0; + position: absolute; + pointer-events: none; + right: 15px; + z-index: 2001; + display: none; + } + #header .header-right > div#settings::after { + right: 27px; + } + + #notification-container { + max-width: 100%; + width: 100%; + } +} +/** + * @copyright Copyright (c) 2016, John Molakvoæ + * @copyright Copyright (c) 2016, Robin Appelman + * @copyright Copyright (c) 2016, Jan-Christoph Borchardt + * @copyright Copyright (c) 2016, Erik Pellikka + * @copyright Copyright (c) 2015, Vincent Petry + * + * Bootstrap v3.3.5 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +.tooltip { + position: absolute; + display: block; + font-family: var(--font-face); + font-style: normal; + font-weight: normal; + letter-spacing: normal; + line-break: auto; + line-height: 1.6; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + white-space: normal; + word-break: normal; + word-spacing: normal; + word-wrap: normal; + overflow-wrap: anywhere; + font-size: 12px; + opacity: 0; + z-index: 100000; + /* default to top */ + margin-top: -3px; + padding: 10px 0; + filter: drop-shadow(0 1px 10px var(--color-box-shadow)); + /* TOP */ + /* BOTTOM */ +} +.tooltip.in, .tooltip.show, .tooltip.tooltip[aria-hidden=false] { + visibility: visible; + opacity: 1; + transition: opacity 0.15s; +} +.tooltip.top .tooltip-arrow, .tooltip[x-placement^=top] { + left: 50%; + margin-left: -10px; +} +.tooltip.bottom, .tooltip[x-placement^=bottom] { + margin-top: 3px; + padding: 10px 0; +} +.tooltip.right, .tooltip[x-placement^=right] { + margin-left: 3px; + padding: 0 10px; +} +.tooltip.right .tooltip-arrow, .tooltip[x-placement^=right] .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -10px; + border-width: 10px 10px 10px 0; + border-right-color: var(--color-main-background); +} +.tooltip.left, .tooltip[x-placement^=left] { + margin-left: -3px; + padding: 0 5px; +} +.tooltip.left .tooltip-arrow, .tooltip[x-placement^=left] .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -10px; + border-width: 10px 0 10px 10px; + border-left-color: var(--color-main-background); +} +.tooltip.top .tooltip-arrow, .tooltip.top .arrow, .tooltip.top-left .tooltip-arrow, .tooltip.top-left .arrow, .tooltip[x-placement^=top] .tooltip-arrow, .tooltip[x-placement^=top] .arrow, .tooltip.top-right .tooltip-arrow, .tooltip.top-right .arrow { + bottom: 0; + border-width: 10px 10px 0; + border-top-color: var(--color-main-background); +} +.tooltip.top-left .tooltip-arrow { + right: 10px; + margin-bottom: -10px; +} +.tooltip.top-right .tooltip-arrow { + left: 10px; + margin-bottom: -10px; +} +.tooltip.bottom .tooltip-arrow, .tooltip.bottom .arrow, .tooltip[x-placement^=bottom] .tooltip-arrow, .tooltip[x-placement^=bottom] .arrow, .tooltip.bottom-left .tooltip-arrow, .tooltip.bottom-left .arrow, .tooltip.bottom-right .tooltip-arrow, .tooltip.bottom-right .arrow { + top: 0; + border-width: 0 10px 10px; + border-bottom-color: var(--color-main-background); +} +.tooltip[x-placement^=bottom] .tooltip-arrow, .tooltip.bottom .tooltip-arrow { + left: 50%; + margin-left: -10px; +} +.tooltip.bottom-left .tooltip-arrow { + right: 10px; + margin-top: -10px; +} +.tooltip.bottom-right .tooltip-arrow { + left: 10px; + margin-top: -10px; +} + +.tooltip-inner { + max-width: 350px; + padding: 5px 8px; + background-color: var(--color-main-background); + color: var(--color-main-text); + text-align: center; + border-radius: var(--border-radius); +} + +.tooltip-arrow, .tooltip .arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} + +/** + * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com) + * + * @author John Molakvoæ (skjnldsv) + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ +/** + * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com) + * + * @author John Molakvoæ (skjnldsv) + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ +/** + * @see core/src/icons.js + */ +/** + * SVG COLOR API + * + * @param string $icon the icon filename + * @param string $dir the icon folder within /core/img if $core or app name + * @param string $color the desired color in hexadecimal + * @param int $version the version of the file + * @param bool [$core] search icon in core + * + * @returns A background image with the url to the set to the requested icon. + */ +.toastify.toast { + min-width: 200px; + background: none; + background-color: var(--color-main-background); + color: var(--color-main-text); + box-shadow: 0 0 6px 0 var(--color-box-shadow); + padding: 12px; + padding-right: 34px; + margin-top: 45px; + position: fixed; + z-index: 9000; + border-radius: var(--border-radius); +} +.toastify.toast .toast-close { + position: absolute; + top: 0; + right: 0; + width: 38px; + opacity: 0.4; + padding: 12px; + /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */ + background-image: var(--icon-close-dark); + background-position: center; + background-repeat: no-repeat; + text-indent: 200%; + white-space: nowrap; + overflow: hidden; +} +.toastify.toast .toast-close:hover, .toastify.toast .toast-close:focus, .toastify.toast .toast-close:active { + cursor: pointer; + opacity: 1; +} + +.toastify.toastify-top { + right: 10px; +} + +.toast-error { + border-left: 3px solid var(--color-error); +} + +.toast-info { + border-left: 3px solid var(--color-primary); +} + +.toast-warning { + border-left: 3px solid var(--color-warning); +} + +.toast-success { + border-left: 3px solid var(--color-success); +} + +#body-public { + /** don't apply content header padding on the base layout */ + /* force layout to make sure the content element's height matches its contents' height */ + /* public footer */ +} +#body-public .header-right #header-primary-action a { + color: var(--color-primary-text); +} +#body-public .header-right #header-secondary-action ul li { + min-width: 270px; +} +#body-public .header-right #header-secondary-action #header-actions-toggle { + background-color: transparent; + border-color: transparent; +} +#body-public .header-right #header-secondary-action #header-actions-toggle:hover, #body-public .header-right #header-secondary-action #header-actions-toggle:focus, #body-public .header-right #header-secondary-action #header-actions-toggle:active { + opacity: 1; +} +#body-public .header-right #header-secondary-action #external-share-menu-item form { + display: flex; +} +#body-public .header-right #header-secondary-action #external-share-menu-item .hidden { + display: none; +} +#body-public .header-right #header-secondary-action #external-share-menu-item #save-button-confirm { + flex-grow: 0; +} +#body-public #content { + min-height: calc(100% - 65px); +} +#body-public.layout-base #content { + padding-top: 0; +} +#body-public .ie #content { + display: inline-block; +} +#body-public p.info { + margin: 20px auto; + text-shadow: 0 0 2px rgba(0, 0, 0, 0.4); + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +#body-public p.info, #body-public form fieldset legend, +#body-public #datadirContent label, +#body-public form fieldset .warning-info, +#body-public form input[type=checkbox] + label { + text-align: center; +} +#body-public footer { + position: relative; + display: flex; + align-items: center; + justify-content: center; + height: 65px; + flex-direction: column; +} +#body-public footer p { + text-align: center; + color: var(--color-text-lighter); +} +#body-public footer p a { + color: var(--color-text-lighter); + font-weight: bold; + white-space: nowrap; + /* increasing clickability to more than the text height */ + padding: 10px; + margin: -10px; + line-height: 200%; +} + +/*# sourceMappingURL=server.css.map */ diff --git a/core/css/server.css.map b/core/css/server.css.map new file mode 100644 index 0000000000000..ab8edd751a630 --- /dev/null +++ b/core/css/server.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["variables.scss","icons.scss","styles.scss","inputs.scss","functions.scss","header.scss","apps.scss","global.scss","fixes.scss","mobile.scss","tooltip.scss","toast.scss","public.scss"],"names":[],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AC8IQ;AC9IR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkBA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;EACA;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;EACA;;AACA;EACC;;;AAIF;EACC;EACA;;;AAGD;EACC;;AACA;EACC;;;AAIF;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;AACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACC;EACA;EACA;EACA;EACA;;AAED;EACC;EACA;;AACA;EACC;;;AAKH;AAEA;EACC;EACA;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;EACA;;;AAID;AAEA;EACC;EACA;;;AAID;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAAa;EACb;EACA;EACA;EACA;EACA;EACA,KFxFe;;;AE2FhB;AAEA;EACC;;;AAGD;EACC;;;AAMC;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAED;EACC;;;AAKH;AAEA;AAAA;EAEC;EACA;EACA;EACA;;AACA;AAAA;EACC;;AAED;AAAA;EACC;;AAED;AAAA;EACC;;AAED;AAAA;AAAA;AAAA;EAEC;EACA;EACA;EACA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEC;;;AAKH;AAEA;EACC;;;AAGD;AAEA;AAEA;AAEA;EACC;EACA;EACA;EACA;EACA;;;AAGD;AAEA;EACC;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;AAIC;AAAA;AAAA;EACC;;AAED;AAAA;AAAA;EACC;;;AAIF;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;;;AAED;EACC;EACA;EACA;EACA;EACA;;;AAGD;AAEA;EACC;EACA;EACA;EACA;EACA;;;AAIA;EACC;EACA;;;AAKD;EACC;EACA;;AACA;EACC;EACA;EACA;;AAGF;EACC;EACA;;;AAIF;EACC;EACA;;AACA;EACC;;;AAIF;EACC;;;AAGD;AACA;AAEA;AAEA;AAEA;EACC;EACA;;AACA;EACC;EACA;;;AAIF;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAKA;EACA;EACA;;AANA;EACC;EACA;;AAKD;EACC;;AACA;EACC;EACA;EACA;EACA;EACA;EACA;;AAED;EACC;;;AAKH;EACC;;;AAIA;AAAA;EAGC;;;AAIF;EACC;EACA;EACA;;AAEA;EACC;;;AAIF;EACC;EACA;;;AAGD;EACC;;;AAIA;EACC;;;AAKD;EACC;;;AAKD;EACC;;;AAKD;EACC;;;AAIF;EACC;;;AAGD;EACC;EACA;EACA;EACA;;AACA;EACC;;;AAIF;EACC;EACA;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;AACA;EACC;EACA;EACA;EACA;EACA;EACA;;AAEA;AAAA;AAAA;EAGC;EACA;;AAED;EACC;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;;AAED;EACC;;AAEA;EACC;;AAED;EACC;;AAGF;EACC;;AAID;EACC;EACA;EACA;EACA;EACA;;AAED;EACC;;AAGA;EACC;;AAGD;AAAA;AAAA;EAGC;EACA;EACA;;AAGD;AAAA;EAEC;EACA;;;AAMJ;EACC;EACA;;;AAID;AACA;EACC;EACA;EACA;EACA;AAwBA;;AAtBA;EACC;;AAGD;AAAA;AAAA;EAGC;EACA;;AAED;EACC;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;;AAIF;EACC;;AAGA;EACC;EACA;EACA;;AACA;EACC;EACA;EACA;;AAGF;EACC;;AAGA;AAAA;AAAA;EAIC;EACA;EACA;;AAGD;EACC;;AAGD;EACC;;;AAMJ;AAGC;AAAA;EACC;EACA;EACA;;AACA;AAAA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;AAAA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAMJ;AACA;EACC;EACA;EACA;AA0BA;;AAxBA;EACC;EACA;EACA;;AAEA;EACC;EACA;EACA;;AAGA;EACC;;AAED;EACC;;AAED;EACC;EACA;;AAMH;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EAEC;;AAKF;EACC;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;EACA;;AAGD;EACC;EACA;;AACA;EACC;EACA;;AAMH;EACC;EACA;EACA;EACA;AACA;AACA;EACA;EACA;;AAED;EACC;EACA;EACA;EACA;EACA;;AAED;EACC;EACA;;AAED;AACC;EACA;EACA;;AAEC;EACC;EACA;;AACA;EACC;EACA;;AAIH;EACC;EACA;EACA;EACA;EACA;EACA;;AAED;EACC;EACA;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;;AAED;AAAA;AAAA;EAGC;;AAED;AAAA;EAEC;;AAGD;EACC;EACA;;AAED;EACC;;AAED;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;;AACA;EACC;;AACA;EACC;EACA;EACA;;AAED;EACC;;AAIH;EACC;;AAED;EACC;;AAED;EAIC;EACA;;AAEA;EACC;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA,SAhBS;EAiBT;EACA;EACA;;AAGA;EACC;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA,aA/BU;EAgCV;;AACA;EACC;;AAGF;EACC;EACA;;AAED;EACC;;AAON;EACC;;;AAIF;EACC;;;AAGD;EACC;EACA;;;AAGD;AAGC;EACC;EACA;EACA;EAEA;EACA;;AAEA;EAGC;;;AAKH;AACC;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;;AACA;AAAA;EAEC;;AAIF;AACC;EACA;EACA;EACA;EACA;;AAEA;EACC;;AAEA;EACC;EACA;EACA;EACA;;AAKH;EACC;EACA;EACA;EACA;EACA;AA6CA;;AA3CA;EACC;;AAGD;EACC;EACA;EACA;;AAGD;EACC;EACA;;AAEA;EACC;EACA;;AAGD;AACC;EACA;EACA;EACA;EACA;;AAED;EACC;;AAIF;EACC;EACA;EACA;EACA;EACA;;AAEA;EACC;;AAKF;EACC;EACA;;AAED;EACC;;;AAMH;EACC;EACA;EACA;;;AAGD;AAEA;EACC;;;AAGD;AAGC;EACC;EACA;;AAED;EACC;EACA;EACA;EACA;;AAED;EACC;EACA;;AACA;EACC;;AAGF;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACC;;AAGF;EACC;EACA;;;AAIF;AACA;EACC;;;AAED;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACC;EACA;;AACA;EACC;;AAIA;EACC;;AAIF;EACC;EACA;;AACA;EACC;EACA;EACA;EACA;;AACA;EACC;;AAGF;EACC;;AAIH;EACC;;AACA;EACC;;AAGF;AAAA;EAEC;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;;AAEA;AAAA;AAAA;EAGC;;AAGF;EACC;EACA;;AAID;EACC;EACA;;AAEA;EACC;;AAGF;EACC;;AAEA;AAAA;AAAA;AAAA;AAAA;EAEC;;;AAKH;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;;AACA;EACC;;;AAIF;AAGC;EACC;EACA;;AAED;EACC;;;AAIF;AACA;EACC;;AAID;AAEA;EACC;EACA;EACA;EACA;;;AFrvCD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AGAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBA;AAAA;AAAA;AA4BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ADlCC;AACD;EACC;;;AAED;EACC;;;AAKD;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;EAMC;EACA,YAVgB;EAWhB;;;AAGD;AAAA;AAAA;AAAA;AAAA;AAMA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAOC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AA4BA;;AA1BC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;EACC;EACA;;AAED;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;EACA;EACA;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;EACA;EACA;EACA;;AAED;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;;AAED;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;EACA;;AAGD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;EACA;EACA;EACA;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEC;;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGC;EACA;;AAED;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEC;EACA;EACA;;;AAKH;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;;;AAGD;AACA;AAcC;AAAA;;AAbA;EACC;EACA;EAEA,QAvHe;;AAyHhB;EAIC;EACA;;AAID;EACC;EACA;EACA;EACA;EACA;;AAED;EACC;EACA;;AAED;EACC;;;AAIF;AACA;AAAA;AAAA;AAAA;AAAA;EAKC;EACA;EACA,YA1JgB;EA2JhB;EACA;EACA;;AAEA;AAAA;AAAA;AAAA;AAAA;EACC;;;AAKD;AAAA;EACC;;AAIA;AAAA;EACC;;;AAKH;AACA;AAAA;AAAA;AAAA;EAIC;EACA;AAEA;;AACA;AAAA;AAAA;AAAA;EACC;;AAGD;AAAA;AAAA;AAAA;EACC;EACA;EACA;;;AAID;AACC;;AACA;EAEC;EACA;EACA;;;AAKH;EACC;EACA;EACA;EACA;;AAEC;EAGC;EACA;;;AAKH;EACC;EACA;EACA;;;AAGD;AACA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EAEA,QA9OgB;;;AAiPjB;AAEC;AAsBC;;AAnBA;EACC;EACA;EACA;EACA;AACA;EACA;EACA;EACA,QA9Pc;EA+Pd,OA/Pc;EAgQd;EACA;EACA;;AACA;EACC;AC7NH;EAEA;;ADmOG;EACC;;AAID;EAGC;EACA;;AACA;EACC;;AAQH;EACC;EACA;AACA;EACA;;;AAOJ;AACA;AAAA;EAEC;;;AAED;AAAA;EAEC;;;AAGD;AAOC;AA8EC;;AA5EA;EAEC;EACA;EACA;EACA;EACA;EACA;;AACA;EACC;;AAED;EAEC;;AAED;EACC;EACA;EACA,QA1BkB;EA2BlB,OA3BkB;EA4BlB;EACA;EACA;EACA;;AAED;EAEC;;AAED;EACC;EACA;EACA;EACA;;AAED;AAEA;AAAA;EAEC;EACA;EACA;;AAED;EACC;EACA;AAA6D;;AAE9D;EACC,kBAvD4B;;AA2D7B;EACC;EACA;;AAED;EACC,eAjEkB;;AAqEnB;EACC;EACA,QAvEkB;EAwElB,OAxEkB;EAyElB;EACA;;AAED;EACC;;AAED;EACC;;AAOD;EAEC;;AAED;EACC,cAzFyB;;AA2F1B;EACC;EACA;EACA;;AAED;EACC;AAAuE;EACvE;AAAiE;;AAElE;EACC;EACA;AAAiE;EACjE;;AAID;EAEC;AAA0C;EAC1C;AAAsD;EACtD;;AAED;EACC;;AAED;EACC;AAAc;;;AAMlB;AACA;EACC;EACA;;AACA;EACC;;AAED;EACC;EACA;EACA;;AACA;EACC;;AAGF;EACC;EACA;EACA;;AAED;EACC;EACA;EACA;;AACA;EACC;EACA;EACA;;AACA;EACC;;AACA;EACC;EACA;;AAIH;AAAA;AAAA;EAGC;EACA;EACA;EACA;EACA;EACA;;AAGA;EACC;;AAGF;EACE;EACA;;;AAMH;AAAA;AAAA;AAAA;EAEC;;;AAID;EAEC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACC;EACA;;AACA;EAIC;EACA;EACA;EACA;;AAED;EACC;;AAGF;EACC;;AACA;EACC;;;AAKJ;EACC;;AACA;EACC;EACA;;AACA;EACC;;AAGF;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACC;EACA;EACA;EACA;EACA;;AACA;EACC;;AAED;EAEC;EACA;;AAGF;EACC;EACA;EACA;;AACA;EACC;EACA;;AAGF;EAGC;;AAED;EACC;;;AAKH;AACA;EACC;EACA;;AACA;EACC;EACA;;AACA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACC;;AAIH;EACC;;AACA;EACC;EACA;EACA;EACA;EACA;EACA;;AACA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACC;;AAED;EACC;EACA;;AACA;EACC;;;AAQL;AACA;EACC;EACA;EACA;EACA;EACA;EACA;AAiHA;;AAhHA;AACC;;AACA;EACC;EACA;;AAGF;EAEC;;AAED;AACC;EAGA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,QA5rBe;AA6rBf;AAoDA;AASA;AAaA;;AAzEA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;AACA;AAAA;AASA;;AAPA;EACC;AACA;;AACA;EACC;;AAIF;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AACA;AAAA;EAEA;EACA;EACA;EACA;AACA;AAAA;AAQA;AAAA;;AANA;EACC;;AAED;EACC,cAnDa;;AAuDd;EACC;EACA;EACA;;AAKH;EACC;EACA;EACA;AAAY;EACZ;EACA;EACA;;AAGD;AAAA;EAEC;EACA;EACA;EACA;EACA;EACA;EACA,cAhFe;AAiFf;EACA;;AAGD;EACC;EACA;EACA;EACA;AACA;EACA;EACA;AACA;EACA;AACA;EACA;;AAIF;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACC;EACA;;AAED;EACC;EACA;EACA;EACA;EACA;;AACA;AAAA;EAEC;;AAED;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AACA;AAiBA;AAAA;AAAA;;AAhBA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAED;EACC;EACA;;AAMA;EACC;EACA;;AAGF;EACC;;AAED;EACC;;AAIA;EACC;;;AAQN;AACA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEC;EACC;;AAED;EACC;;AAGF;EACC;;AAED;EACC;EACA;EACA;;AAED;EACC;EACA;EACA;;;AAIF;AACA;EACC;IAEC;;EAED;IAEC;;EAED;IAGC;;EAED;IAEC;;;AAGF;EACC;EACA;EACA;;;AAKD;EACC;EACA;EACA;EACA;EACA;EACA;;;AAGD;AAAA;AAAA;EAGC;;;AH58BD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AKAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBA;AACA;AAAA;AAAA;EAGC;EACA;EACA;;;AAGD;AACA;EACC;EACA;EACA;EACA;EACA;EACA;;AACA;EACC;EACA;EACA;EACA;EACA;;;AAIF;AACA;AAAA;AAAA;EAGC;EACA;EACA;EACA;EACA;EACA,QLwDe;EKvDf;EACA;EACA;EACA;;;AAGD;AACA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;;AAED;EACC;;;AASF;AACC;AA6GA;AA4BA;;AAtIA;AAAA;EAEC;EACA;EACA;EACA;EACA;EACA;EACA;EAhBD;EACA;EAiBC;EACA,KLQc;EKPd;AAMA;AAqBA;;AAzBA;AAAA;EACC;;AAID;AAAA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGD;AAAA;AAAA;AAAA;EAGC;EACA;EA3CF;EACA;;AAkDG;AAAA;AAAA;EACC;EACA;EACA,QAhDuB;EAiDvB;EACA;EACA;EACA;EACA;EACA;;AACA;AAAA;AAAA;AAAA;AAAA;EAEC;;AAED;AAAA;AAAA;AAAA;AAAA;EAEC;;AAED;AAAA;AAAA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AAED;AAAA;AAAA;EACC;EACA;;AAED;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEC;EACA;EACA;EACA;EACA;;AAML;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;;AAGD;EACC;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AAGD;AAAA;EAEC;EACA;;AAGD;EACC;EACA;EACA;;AAGD;EACC;EACA;;AAKA;AAAA;EAEC;EACA;;AACA;AAAA;EACC;EACA;EACA;EACA,OL7HY;EK8HZ;EACA;EACA;EACA;EACA;;;AAMJ;AAEA;EACC;;;AAIA;EACC;;AAGA;EACC;;AAID;EACC;;AAID;EACC;;;AAKH;AACA;AACA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;AACA;EACC;;;AAGD;AACA;EACC;EACA,OLpMe;EKqMf,QLrMe;EKsMf;EACA;;;AAGD;EACC;EACA;AAAY;EACZ;EACA;;;AAGD;AAAA;AAAA;EAGC;EACA;;AACA;AAAA;AAAA;AACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAAoB;;;AAItB;EACC;;AACA;EACC;;;AAIF;AACA;EACC;EACA;EACA;EACA;AAEA;;AACA;EACC;AAAY;EACZ;AAqBA;AA2BA;;AA9CA;EAGC;;AAEA;AAAA;AAAA;AAAA;EAEC;EACA;EACA;;AAED;EACC;;AAED;EACC;;AAKF;EACC;EACA;EACA;AAMA;;AAJA;EACC;EACA;;AAGD;EACC;;AAIF;EACC;EACA;EACA;AAEA;;AACA;EACC;;AAKF;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAIF;EACC;;;AAIF;AACA;EACC;EACA,WLhUe;EKiUf;AAwFA;AAiCA;AAwBA;AAgBA;;AA/JA;EACC;EACA;EACA;EACA;EACA;AAgBA;AA4BA;AAQA;AAcA;AACA;AAQA;;AAzEA;EACC;EACA;EACA;EACA,QL9Ua;EK+Ub,OL/Ua;EKgVb;EACA;EACA;EAEA;EACA;;AAID;AAAA;AAAA;EAGC;EACA;;AAID;AAAA;EAEC;;AAGD;AAAA;AAAA;AAAA;EAMC;EACA;EACA;EACA;EACA;EACA;;AAID;AAAA;EAEC;EACA;EACA;;AAID;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAKD;AAAA;EAEC;EAEA;;AAID;EACC;;AAMD;AACC;AASA;AAOA;AAOA;;AAtBA;AAAA;AAAA;AAAA;AAAA;EAKC;;AAID;EACC;EACA;EACA;AAAa;;AAId;AAAA;EAGC;;AAID;EACC;;AAMH;AACC;AASA;AAOA;;AAfA;AAAA;AAAA;AAAA;AAAA;EAKC;;AAID;AAAA;EAEC;EACA;;AAID;EACC;;AAKF;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAID;AAAA;AAAA;AAAA;EAIC;;AAED;EACC;;AAED;AAAA;AAAA;EAGC;;AAGD;EACC;;AAGD;EACC;;;AAIF;EACC;;;AAED;AAAA;EAEC;;;AAKA;AAAA;EACC;;AAED;AAAA;EACC;;;AAKF;AACA;EACC;EACA;EACA;EACA;EACA;EACA;AACA;EACA;;AAEA;EACC,MLzhBiB;EK0hBjB;;AAGD;EAEC,KLhiBc;;;AKqiBhB;AAGC;AAAA;EACC;EACA;;AAED;AAAA;AAAA;AAAA;EAEC;EACA;EACA;;;AL3pBF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AGAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBA;AAAA;AAAA;AA4BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AHnBA;AACA;EACC;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;EAMC;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGC;;;AAKH;AAAA;EAEC;EACA;;;AAGD;AAAA;EAEC;EACA;EACA;;;AAGD;AAEC;EACC;;AAED;EACC;;AAED;EACC;;AAED;EACC;;;AAIF;EACC;IACC;;EAED;IACC;;;AAIF;EACC;;;AAGD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAQC;;;AAGD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ADpIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AMAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AFAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBA;AAAA;AAAA;AA4BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AE7BA;AAEA;EACC;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;;;AAGD;AACA;EACC;EACA;;;AAGD;EACC;;;AAGD;AAAA;EAEC;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;;;AAID;AAEA;EACC;;;AAGD;AACA;AACA;EACC,ONyBkB;EMxBlB;EACA,KNsBe;EMrBf;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;AA4OA;AAAA;AAAA;AAiBA;AAAA;AAAA;AAkEA;AAAA;AAAA;AAmDA;AAAA;AAAA;AAsDA;AAAA;AAAA;AA2BA;AAAA;AAAA;AAeA;AAAA;AAAA;;AAjdA;EACC;EACA;;AACA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AAIF;EACC;;AAED;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAsHA;;AArHA;EACC;EACA;EACA;EACA;AAEA;AAoCA;AAMA;AAwBA;;AAjEA;EACC;;AACA;EACC;;AAIF;AACC;EACA;;AAED;AACC;AACA;AAAA;EAEA;;AAKA;AAAA;AAAA;AAAA;EAEC;;AAOD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEC;;AAKF;EACC;EACA;;AAMA;EAEC;;AAIF;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;;AAKF;EACC;EACA;EACA;;AACA;EACC;EACA;EACA;AAgBA;;AAbC;AAAA;AAAA;EAEC;;AAKD;AAAA;AAAA;AAAA;EAEC;;AAKF;EACC;AAAY;;AAGb;AACC;EACA;EACA;;AAGD;AACC;EACA;AACA;AAAA;EAEA;;AAMJ;AAAA;EAEC;EACA;EACA;AACA;AAQA;AAwCA;AAkBA;AAKA;;AArEC;AAAA;AAAA;AAAA;AAEC;EACA;;AAIF;AAAA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAAc;AACd;AAaA;;AAXA;AAAA;EACC;;AAED;AAAA;EACI;EACA;EACA;EAEH;;AAID;AAAA;EACC;EACA;;AACA;AAAA;EACC;;AAKH;AAAA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;AAAA;AACC;EACA;;AAKF;AAAA;EACC;;AAID;AAAA;EACC;EACA;;AAED;AAAA;EACC;EACA;;AAIH;EACC;;AAMD;AAAA;EAEC;EACA;EACA;EACA;EACA;;AACA;AAAA;AAAA;EAEC;EACA;;AAOF;AACC;AAAA;AAwCA;;AAtCA;EACC;EACA;EACA;EACA;EACA;EACA;AAEA;AAAA;EAEA;;AAED;EACC;EACA;EACA;EACA;EACA;EACA;AF/TF;EAEA;EE+TE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAID;EACC;;AAIA;EACC;;AAED;EACC;;AAID;EACC;EACA;EACA;;AAQH;EACC;;AACA;EACC;EACA;EACA;;AAED;EACC;EACA;;AAED;EACC;EACA;EACA;EACA;;AAED;AACC;;AACA;AF/XF;EAEA;;AEgYE;EAEC;EACA;;AAGF;EACC;EACA;EACA;EACA;EACA;AAAiB;;AAEjB;EACC;EACA;;AACA;EACC;EACA;EACA;EACA;;AASJ;EACC;EACA;EACA;EACA;AAAyB;EACzB;EACA;EACA;EACA;EACA;;AACA;AAAA;EAEC;EACA;;AAED;EACC;EACA;EACA;;AACA;AAEC;EACA;;AAGF;EACC;EACA;AAAc;EACd;EACA;;AAED;AAAA;EAEC;EACA;EACA;;AACA;AAAA;EACC;;AAED;AAAA;EACC;;AAED;AAAA;EACC;EACA;EACA;EACA;;AAQH;EACC;EACA;EACA;;AACA;EACC;EACA;EACA;EACA;EACA;EACA;;AAED;EACC;EACA;EACA;EACA;;AACA;EAEC;;AAQH;AAAA;EAEC;AAAyB;EACzB;EAGA;EACA;EACA;EACA;;AAMD;EACC;EACA;EACA;;AAGD;EACC;;AAGD;AAAA;EAEC;;;AAKF;AACA;EACC;EACA;EACA;EAEA,aN1ee;EM2ef;;;AAGD;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAOA;EACC;EACA;EACA;EACA;EACA;AACA;AAIA;AAKA;;AARA;EACC,aN/fiB;;AMkgBlB;EACC;;AAID;EACC;EACA;EACA;AACA;AAAA;EAEA;AAEA;;AACA;AACC;EACA;;AACA;EACC;;;AAMJ;AACA;AAAA;AAAA;AAAA;AAIA;EACC;EACA,WNhiBmB;EMiiBnB,WNhiBmB;EMiiBnB;EACA;EACA;EACA,KNviBe;EMwiBf;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;;;AAKF;AACA;AACA;EAEC;;AAGC;EACC;;;AAKH;EACC;EACA;EACA;AACA;EACA;EACA;EACA;AAEA;;AACA;EACC;;AAGD;EACC;EACA;;AAOE;EACC;EACA;EACA;;;AAOL;EACC;EACA;;;AAID;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;EACA;;AAEA;EACC;EACA;;AAED;EAEC;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIF;AACA;EACC;EACA;EACA;AAIA;;AAHA;EACC;;AAIA;EAEC;EACA;;;AAIH;EACC;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;;AACA;EACC;;;AAIF;AACA;EACC;EACA;;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAMA;;AAJA;EACC;;AAID;EACC;;AAED;EACC;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA;;AAED;EACC;;AAED;EAGC;EACA;EACA;;;AAIH;EACC;;AACA;EACC;;;AAIF;AAOC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAIC;;;AAIF;AAAA;AAAA;EAGC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAmBA;AAUA;;AA3BA;AAAA;AAAA;EACC;EAKA;AACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGD;AAAA;AAAA;EACC;EACA;EACA;;AACA;AAAA;AAAA;EACC;EACA;;AAIF;AAAA;AAAA;EACC;EACA;EACA;;AACA;AAAA;AAAA;EACC;EACA;;AAIF;AAAA;AAAA;EACC;;AAGD;AAAA;AAAA;EACC;;AAGD;AAAA;AAAA;AACC;EACA;EACA;;AAED;AAAA;AAAA;EACC;EACA;AAiIA;;AA/HA;AAAA;AAAA;EACC;;AAGD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGC;EACA,aA5FkB;EA6FlB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAsCA;AAkBA;AAIA;AAAA;AAMA;AAwBA;AAKA;;AA7FA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAIC;AAAc;EACd;EACA;EACA,iBAhHe;;AAkHhB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEC;AAAA;EAEA;;AAOC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC,aA/He;;AAmIlB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEC;;AAED;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEC;;AAED;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;;AAGD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;;AAED;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;EACA;;AAED;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;EACA;EACA;EACA;;AAED;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;EACA;;AAGD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;;AAID;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC,OAtKe;EAuKf;;AAGD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEC;EACA;;AAED;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;;AAED;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;;AAED;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;;AAED;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;EACA;AACA;AAAA;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;;AAIF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEC;;AAGD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC,WAzMiB;EA0MjB;AAA0C;EAC1C;EACA;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;;AAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;;AAMD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;;AAKJ;AAAA;AAAA;EACC;;AACA;AAAA;AAAA;EACC;;;AAOJ;AAAA;AAOG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGC;AAAA;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC,OA3PgB;EA4PhB,QA5PgB;;;AAmQrB;AACA;EACC;EACA;EACA,KNpgCe;EMqgCf;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,WN1gCgB;EM2gChB,WN1gCgB;AM4gChB;;AACA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;;AAGC;AAAA;AAAA;AAAA;EAEC;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEC;;AAED;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEC;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEC;;AAIF;AAAA;AAAA;AAAA;EACC;;AAKH;EAGC;;AAEA;EACC;;AAIF;AAAA;EAEC;EACA;EACA;EACA;;AAQC;EAEC;;AAEA;EACC;;AAIH;EACC;EACA;EAEA;AAIA;;AAHA;EACC;;AAGD;EACC;;AAKH;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGD;AAAA;EAEC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;;AACA;EACC;EAGA;;AAIH;EACC;;;AC/xCF;AAAA;AAAA;AAIA;AAEA;EACC;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;EACC;;;AChDD;AAEA;AACA;EACC;;;ARJD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ASEA;AAEC;EACA;IACC;IACA;;;AAGD;EACA;IACC;;;AAGD;EACA;IACC;IACA;IACA;;;AAGD;EACA;IACC;;;EAGA;IACC;;;EAIF;IACC;;;EAGD;IACC;IACA;;;AAGD;EACA;IACC;IACA;IAEA;IAEA;;EACA;IACC;;EAED;IACC;;EACA;IACC;;;AAKH;EAEC;IACC;;EAED;IACC;IACA;IACA,KTuCa;IStCb;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAED;IACC;;;EAKF;IACC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;;EAED;AAAA;IAEC;;;AAGD;EACA;IACC;;;AAGD;EACA;IACC;;;EAED;IACC;;;EAGD;IACC;;;AAGD;EACA;IACC;;;EAED;IACC;;;AAGD;EACA;AAAA;AAAA;AAAA;IAIC;;;EAED;IACC;;;EAGD;IACC;;;AAGD;;AAGD;EACC;IACC;IACA;;EACA;IACC;;;AAGF;EACA;AAoBC;;EAlBC;IACC;;EAGF;IACC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAID;IACC;;;EAIF;IACC;IACA;;;ACnLF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AACA;EACA;EACA;EACA;AA0CA;AAmBA;;AA5DA;EAGI;EACA;EACA;;AAEJ;EAEI;EACA;;AAEJ;EAEI;EACA;;AAEJ;EAEI;EACA;;AACA;EACI;EACA;EACA;EACA;EACA;;AAGR;EAEI;EACA;;AACA;EACI;EACA;EACA;EACA;EACA;;AAQJ;EACI;EACA;EACA;;AAGR;EACI;EACA;;AAEJ;EACI;EACA;;AAOA;EACI;EACA;EACA;;AAGR;EAEI;EACA;;AAEJ;EACI;EACA;;AAEJ;EACI;EACA;;;AAIR;EACI;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;EACA;EACA;EACA;;;AV1IJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AIAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBA;AAAA;AAAA;AA4BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AO/CA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;APyCD;EAEA;EOzCC;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;;;AAIH;EACC;;;AAGD;EACC;;;AAED;EACC;;;AAED;EACC;;;AAED;EACC;;;AChDD;AAyCC;AAKA;AAoBA;;AA/DC;EACC;;AAIA;EACC;;AAED;EACC;EACA;;AAEA;EAGC;;AAID;EACC;;AAED;EACC;;AAED;EACC;;AAMJ;EAEC;;AAKD;EACC;;AAID;EACC;;AAID;EACC;EACA;EACA;EACA;EACA;;AAED;AAAA;AAAA;AAAA;EAIC;;AAID;EACC;EACA;EACA;EACA;EACA,QA1Ec;EA2Ed;;AACA;EACC;EACA;;AACA;EACC;EACA;EACA;AACA;EACA;EACA;EACA","file":"server.css"} \ No newline at end of file diff --git a/core/css/styles.css b/core/css/styles.css new file mode 100644 index 0000000000000..0f6ac03696a49 --- /dev/null +++ b/core/css/styles.css @@ -0,0 +1,1181 @@ +@charset "UTF-8"; +/** + * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com) + * + * @author John Molakvoæ (skjnldsv) + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ +/** + * @copyright Copyright (c) 2016, John Molakvoæ + * @copyright Copyright (c) 2016, Lukas Reschke + * @copyright Copyright (c) 2016, Robin Appelman + * @copyright Copyright (c) 2016, Julius Haertl + * @copyright Copyright (c) 2016, Joas Schilling + * @copyright Copyright (c) 2016, Morris Jobke + * @copyright Copyright (c) 2016, Christoph Wurst + * @copyright Copyright (c) 2016, Raghu Nayyar + * @copyright Copyright (c) 2011-2017, Jan-Christoph Borchardt + * @copyright Copyright (c) 2019-2020, Gary Kim + * + * @license GNU AGPL version 3 or any later version + * + */ +html, body, div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, code, del, dfn, em, img, q, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, dialog, figure, footer, header, hgroup, nav, section { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-weight: inherit; + font-size: 100%; + font-family: inherit; + vertical-align: baseline; + cursor: default; + scrollbar-color: var(--color-border-dark) transparent; + scrollbar-width: thin; +} + +html, body { + height: 100%; +} + +article, aside, dialog, figure, footer, header, hgroup, nav, section { + display: block; +} + +body { + line-height: 1.5; +} + +table { + border-collapse: separate; + border-spacing: 0; + white-space: nowrap; +} + +caption, th, td { + text-align: left; + font-weight: normal; +} + +table, td, th { + vertical-align: middle; +} + +a { + border: 0; + color: var(--color-main-text); + text-decoration: none; + cursor: pointer; +} +a * { + cursor: pointer; +} + +a.external { + margin: 0 3px; + text-decoration: underline; +} + +input { + cursor: pointer; +} +input * { + cursor: pointer; +} + +select, .button span, label { + cursor: pointer; +} + +ul { + list-style: none; +} + +body { + background-color: var(--color-main-background); + font-weight: normal; + /* bring the default font size up to 15px */ + font-size: var(--default-font-size); + line-height: var(--default-line-height); + font-family: var(--font-face); + color: var(--color-main-text); +} + +.two-factor-header { + text-align: center; +} + +.two-factor-provider { + text-align: center; + width: 258px !important; + display: inline-block; + margin-bottom: 0 !important; + background-color: var(--color-background-darker) !important; + border: none !important; +} + +.two-factor-link { + display: inline-block; + padding: 12px; + color: var(--color-text-lighter); +} + +.float-spinner { + height: 32px; + display: none; +} + +#nojavascript { + position: fixed; + top: 0; + bottom: 0; + left: 0; + height: 100%; + width: 100%; + z-index: 9000; + text-align: center; + background-color: var(--color-background-darker); + color: var(--color-primary-text); + line-height: 125%; + font-size: 24px; +} +#nojavascript div { + display: block; + position: relative; + width: 50%; + top: 35%; + margin: 0px auto; +} +#nojavascript a { + color: var(--color-primary-text); + border-bottom: 2px dotted var(--color-main-background); +} +#nojavascript a:hover, #nojavascript a:focus { + color: var(--color-primary-text-dark); +} + +/* SCROLLING */ +::-webkit-scrollbar { + width: 12px; + height: 12px; +} + +::-webkit-scrollbar-track-piece { + background-color: transparent; +} + +::-webkit-scrollbar-thumb { + background: var(--color-border-dark); + border-radius: var(--border-radius-large); + border: 2px solid transparent; + background-clip: content-box; +} + +/* SELECTION */ +::selection { + background-color: var(--color-primary-element); + color: var(--color-primary-text); +} + +/* CONTENT ------------------------------------------------------------------ */ +#controls { + box-sizing: border-box; + position: -webkit-sticky; + position: sticky; + height: 44px; + padding: 0; + margin: 0; + background-color: var(--color-main-background-translucent); + z-index: 62; + /* must be above the filelist sticky header and texteditor menubar */ + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + display: flex; + top: 50px; +} + +/* position controls for apps with app-navigation */ +.viewer-mode #app-navigation + #app-content #controls { + left: 0; +} + +#app-navigation * { + box-sizing: border-box; +} + +#controls .actions > div > .button, #controls .actions > div button, #controls .actions > .button, #controls .actions button { + box-sizing: border-box; + display: inline-block; + display: flex; + height: 36px; + width: 36px; + padding: 9px; + align-items: center; + justify-content: center; +} +#controls .actions > div .button.hidden, #controls .actions .button.hidden { + display: none; +} + +/* EMPTY CONTENT DISPLAY ------------------------------------------------------------ */ +#emptycontent, +.emptycontent { + color: var(--color-text-maxcontrast); + text-align: center; + margin-top: 30vh; + width: 100%; +} +#app-sidebar #emptycontent, +#app-sidebar .emptycontent { + margin-top: 10vh; +} +#emptycontent .emptycontent-search, +.emptycontent .emptycontent-search { + position: static; +} +#emptycontent h2, +.emptycontent h2 { + margin-bottom: 10px; +} +#emptycontent [class^=icon-], +#emptycontent [class*=icon-], +.emptycontent [class^=icon-], +.emptycontent [class*=icon-] { + background-size: 64px; + height: 64px; + width: 64px; + margin: 0 auto 15px; +} +#emptycontent [class^=icon-]:not([class^=icon-loading]), #emptycontent [class^=icon-]:not([class*=icon-loading]), +#emptycontent [class*=icon-]:not([class^=icon-loading]), +#emptycontent [class*=icon-]:not([class*=icon-loading]), +.emptycontent [class^=icon-]:not([class^=icon-loading]), +.emptycontent [class^=icon-]:not([class*=icon-loading]), +.emptycontent [class*=icon-]:not([class^=icon-loading]), +.emptycontent [class*=icon-]:not([class*=icon-loading]) { + opacity: 0.4; +} + +/* LOG IN & INSTALLATION ------------------------------------------------------------ */ +#datadirContent label { + width: 100%; +} + +/* strengthify wrapper */ +/* General new input field look */ +/* Nicely grouping input field sets */ +.grouptop, .groupmiddle, .groupbottom { + position: relative; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* Show password toggle */ +#show, #dbpassword { + position: absolute; + right: 1em; + top: 0.8em; + float: right; +} + +#show + label, #dbpassword + label { + right: 21px; + top: 15px !important; + margin: -14px !important; + padding: 14px !important; +} + +#show:checked + label, #dbpassword:checked + label, #personal-show:checked + label { + opacity: 0.8; +} + +#show + label, #dbpassword + label, #personal-show + label { + position: absolute !important; + height: 20px; + width: 24px; + background-image: var(--icon-toggle-000); + background-repeat: no-repeat; + background-position: center; + opacity: 0.3; +} + +/* Feedback for keyboard focus and mouse hover */ +#show:focus + label, +#dbpassword:focus + label, +#personal-show:focus + label { + opacity: 1; +} +#show + label:hover, +#dbpassword + label:hover, +#personal-show + label:hover { + opacity: 1; +} + +#show + label:before, #dbpassword + label:before, #personal-show + label:before { + display: none; +} + +#pass2, input[name=personal-password-clone] { + padding-right: 30px; +} + +.personal-show-container { + position: relative; + display: inline-block; + margin-right: 6px; +} + +#personal-show + label { + display: block; + right: 0; + margin-top: -43px; + margin-right: -4px; + padding: 22px; +} + +/* Warnings and errors are the same */ +#body-user .warning, #body-settings .warning { + margin-top: 8px; + padding: 5px; + border-radius: var(--border-radius); + color: var(--color-primary-text); + background-color: var(--color-warning); +} + +.warning legend, .warning a { + color: var(--color-primary-text) !important; + font-weight: bold !important; +} + +.error:not(.toastify) a { + color: white !important; + font-weight: bold !important; +} +.error:not(.toastify) a.button { + color: var(--color-text-lighter) !important; + display: inline-block; + text-align: center; +} +.error:not(.toastify) pre { + white-space: pre-wrap; + text-align: left; +} + +.error-wide { + width: 700px; + margin-left: -200px !important; +} +.error-wide .button { + color: black !important; +} + +.warning-input { + border-color: var(--color-error) !important; +} + +/* fixes for update page TODO should be fixed some time in a proper way */ +/* this is just for an error while updating the Nextcloud instance */ +/* Sticky footer */ +/* round profile photos */ +.avatar, .avatardiv { + border-radius: 50%; + flex-shrink: 0; +} +.avatar > img, .avatardiv > img { + border-radius: 50%; + flex-shrink: 0; +} + +td.avatar { + border-radius: 0; +} + +#notification-container { + left: 50%; + max-width: 60%; + position: fixed; + top: 0; + text-align: center; + transform: translateX(-50%); + z-index: 8000; +} + +#notification { + margin: 0 auto; + z-index: 8000; + background-color: var(--color-main-background); + border: 0; + padding: 1px 8px; + display: none; + position: relative; + top: 0; + border-bottom-left-radius: 3px; + border-bottom-right-radius: 3px; + opacity: 0.9; + overflow-x: hidden; + overflow-y: auto; + max-height: 100px; +} +#notification span { + cursor: pointer; + margin-left: 1em; +} +#notification .row { + position: relative; +} +#notification .row .close { + display: inline-block; + vertical-align: middle; + position: absolute; + right: 0; + top: 0; + margin-top: 2px; +} +#notification .row.closeable { + padding-right: 20px; +} + +tr .action:not(.permanent), .selectedActions > a { + opacity: 0; +} + +tr:hover .action:not(.menuitem), tr:focus .action:not(.menuitem), +tr .action.permanent:not(.menuitem) { + opacity: 0.5; +} + +.selectedActions > a { + opacity: 0.5; + position: relative; + top: 2px; +} +.selectedActions > a:hover, .selectedActions > a:focus { + opacity: 1; +} + +tr .action { + width: 16px; + height: 16px; +} + +.header-action { + opacity: 0.8; +} + +tr:hover .action:hover, tr:focus .action:focus { + opacity: 1; +} + +.selectedActions a:hover, .selectedActions a:focus { + opacity: 1; +} + +.header-action:hover, .header-action:focus { + opacity: 1; +} + +tbody tr:hover, tbody tr:focus, tbody tr:active { + background-color: var(--color-background-dark); +} + +code { + font-family: "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", monospace; +} + +.pager { + list-style: none; + float: right; + display: inline; + margin: 0.7em 13em 0 0; +} +.pager li { + display: inline-block; +} + +.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { + overflow: hidden; + text-overflow: ellipsis; +} + +.ui-icon-circle-triangle-e { + background-image: url("../img/actions/play-next.svg?v=1"); +} + +.ui-icon-circle-triangle-w { + background-image: url("../img/actions/play-previous.svg?v=1"); +} + +/* ---- jQuery UI datepicker ---- */ +.ui-widget.ui-datepicker { + margin-top: 10px; + padding: 4px 8px; + width: auto; + border-radius: var(--border-radius); + border: none; + z-index: 1600 !important; +} +.ui-widget.ui-datepicker .ui-state-default, +.ui-widget.ui-datepicker .ui-widget-content .ui-state-default, +.ui-widget.ui-datepicker .ui-widget-header .ui-state-default { + border: 1px solid transparent; + background: inherit; +} +.ui-widget.ui-datepicker .ui-widget-header { + padding: 7px; + font-size: 13px; + border: none; + background-color: var(--color-main-background); + color: var(--color-main-text); +} +.ui-widget.ui-datepicker .ui-widget-header .ui-datepicker-title { + line-height: 1; + font-weight: normal; +} +.ui-widget.ui-datepicker .ui-widget-header .ui-icon { + opacity: 0.5; +} +.ui-widget.ui-datepicker .ui-widget-header .ui-icon.ui-icon-circle-triangle-e { + background: url("../img/actions/arrow-right.svg") center center no-repeat; +} +.ui-widget.ui-datepicker .ui-widget-header .ui-icon.ui-icon-circle-triangle-w { + background: url("../img/actions/arrow-left.svg") center center no-repeat; +} +.ui-widget.ui-datepicker .ui-widget-header .ui-state-hover .ui-icon { + opacity: 1; +} +.ui-widget.ui-datepicker .ui-datepicker-calendar th { + font-weight: normal; + color: var(--color-text-lighter); + opacity: 0.8; + width: 26px; + padding: 2px; +} +.ui-widget.ui-datepicker .ui-datepicker-calendar tr:hover { + background-color: inherit; +} +.ui-widget.ui-datepicker .ui-datepicker-calendar td.ui-datepicker-today a:not(.ui-state-hover) { + background-color: var(--color-background-darker); +} +.ui-widget.ui-datepicker .ui-datepicker-calendar td.ui-datepicker-current-day a.ui-state-active, +.ui-widget.ui-datepicker .ui-datepicker-calendar td .ui-state-hover, +.ui-widget.ui-datepicker .ui-datepicker-calendar td .ui-state-focus { + background-color: var(--color-primary); + color: var(--color-primary-text); + font-weight: bold; +} +.ui-widget.ui-datepicker .ui-datepicker-calendar td.ui-datepicker-week-end:not(.ui-state-disabled) :not(.ui-state-hover), +.ui-widget.ui-datepicker .ui-datepicker-calendar td .ui-priority-secondary:not(.ui-state-hover) { + color: var(--color-text-lighter); + opacity: 0.8; +} + +.ui-datepicker-prev, .ui-datepicker-next { + border: var(--color-border-dark); + background: var(--color-main-background); +} + +/* ---- jQuery UI timepicker ---- */ +.ui-widget.ui-timepicker { + margin-top: 10px !important; + width: auto !important; + border-radius: var(--border-radius); + z-index: 1600 !important; + /* AM/PM fix */ +} +.ui-widget.ui-timepicker .ui-widget-content { + border: none !important; +} +.ui-widget.ui-timepicker .ui-state-default, +.ui-widget.ui-timepicker .ui-widget-content .ui-state-default, +.ui-widget.ui-timepicker .ui-widget-header .ui-state-default { + border: 1px solid transparent; + background: inherit; +} +.ui-widget.ui-timepicker .ui-widget-header { + padding: 7px; + font-size: 13px; + border: none; + background-color: var(--color-main-background); + color: var(--color-main-text); +} +.ui-widget.ui-timepicker .ui-widget-header .ui-timepicker-title { + line-height: 1; + font-weight: normal; +} +.ui-widget.ui-timepicker table.ui-timepicker tr .ui-timepicker-hour-cell:first-child { + margin-left: 30px; +} +.ui-widget.ui-timepicker .ui-timepicker-table th { + font-weight: normal; + color: var(--color-text-lighter); + opacity: 0.8; +} +.ui-widget.ui-timepicker .ui-timepicker-table th.periods { + padding: 0; + width: 30px; + line-height: 30px; +} +.ui-widget.ui-timepicker .ui-timepicker-table tr:hover { + background-color: inherit; +} +.ui-widget.ui-timepicker .ui-timepicker-table td.ui-timepicker-hour-cell a.ui-state-active, .ui-widget.ui-timepicker .ui-timepicker-table td.ui-timepicker-minute-cell a.ui-state-active, +.ui-widget.ui-timepicker .ui-timepicker-table td .ui-state-hover, +.ui-widget.ui-timepicker .ui-timepicker-table td .ui-state-focus { + background-color: var(--color-primary); + color: var(--color-primary-text); + font-weight: bold; +} +.ui-widget.ui-timepicker .ui-timepicker-table td.ui-timepicker-minutes:not(.ui-state-hover) { + color: var(--color-text-lighter); +} +.ui-widget.ui-timepicker .ui-timepicker-table td.ui-timepicker-hours { + border-right: 1px solid var(--color-border); +} + +/* ---- jQuery UI datepicker & timepicker global rules ---- */ +.ui-widget.ui-datepicker .ui-datepicker-calendar tr, +.ui-widget.ui-timepicker table.ui-timepicker tr { + display: flex; + flex-wrap: nowrap; + justify-content: space-between; +} +.ui-widget.ui-datepicker .ui-datepicker-calendar tr td, +.ui-widget.ui-timepicker table.ui-timepicker tr td { + flex: 1 1 auto; + margin: 0; + padding: 2px; + height: 26px; + width: 26px; + display: flex; + align-items: center; + justify-content: center; +} +.ui-widget.ui-datepicker .ui-datepicker-calendar tr td > *, +.ui-widget.ui-timepicker table.ui-timepicker tr td > * { + border-radius: 50%; + text-align: center; + font-weight: normal; + color: var(--color-main-text); + display: block; + line-height: 18px; + width: 18px; + height: 18px; + padding: 3px; + font-size: 0.9em; +} + +/* ---- DIALOGS ---- */ +#oc-dialog-filepicker-content { + position: relative; + display: flex; + flex-direction: column; + /* Grid view toggle */ +} +#oc-dialog-filepicker-content .dirtree { + flex-wrap: wrap; + box-sizing: border-box; + padding-right: 140px; +} +#oc-dialog-filepicker-content .dirtree div:first-child a { + background-image: var(--icon-home-000); + background-repeat: no-repeat; + background-position: left center; +} +#oc-dialog-filepicker-content .dirtree span:not(:last-child) { + cursor: pointer; +} +#oc-dialog-filepicker-content .dirtree span:last-child { + font-weight: bold; +} +#oc-dialog-filepicker-content .dirtree span:not(:last-child)::after { + content: ">"; + padding: 3px; +} +#oc-dialog-filepicker-content #picker-view-toggle { + position: absolute; + background-color: transparent; + border: none; + margin: 0; + padding: 22px; + opacity: 0.5; + right: 0; + top: 0; +} +#oc-dialog-filepicker-content #picker-view-toggle:hover, #oc-dialog-filepicker-content #picker-view-toggle:focus { + opacity: 1; +} +#oc-dialog-filepicker-content #picker-showgridview:focus + #picker-view-toggle { + opacity: 1; +} +#oc-dialog-filepicker-content .actions.creatable { + flex-wrap: wrap; + padding: 0px; + box-sizing: border-box; + display: inline-flex; + float: none; + max-height: 36px; + max-width: 36px; + background-color: var(--color-background-dark); + border: 1px solid var(--color-border-dark); + border-radius: var(--border-radius-pill); + position: relative; + left: 15px; + top: 3px; + order: 1; +} +#oc-dialog-filepicker-content .actions.creatable .icon.icon-add { + background-image: var(--icon-add-000); + background-size: 16px 16px; + width: 34px; + height: 34px; + margin: 0px; + opacity: 0.5; +} +#oc-dialog-filepicker-content .actions.creatable a { + width: 36px; + padding: 0px; + position: static; +} +#oc-dialog-filepicker-content .actions.creatable .menu { + top: 100%; + margin-top: 10px; +} +#oc-dialog-filepicker-content .actions.creatable .menu form { + display: flex; + margin: 10px; +} +#oc-dialog-filepicker-content .filelist-container { + box-sizing: border-box; + display: inline-block; + overflow-y: auto; + flex: 1; + /*height: 100%;*/ + /* overflow under the button row */ + width: 100%; + overflow-x: hidden; +} +#oc-dialog-filepicker-content .emptycontent { + color: var(--color-text-maxcontrast); + text-align: center; + margin-top: 80px; + width: 100%; + display: none; +} +#oc-dialog-filepicker-content .filelist { + background-color: var(--color-main-background); + width: 100%; +} +#oc-dialog-filepicker-content #picker-filestable.filelist { + /* prevent the filepicker to overflow */ + min-width: initial; + margin-bottom: 50px; +} +#oc-dialog-filepicker-content #picker-filestable.filelist thead tr { + border-bottom: 1px solid var(--color-border); + background-color: var(--color-main-background); +} +#oc-dialog-filepicker-content #picker-filestable.filelist thead tr th { + width: 80%; + border: none; +} +#oc-dialog-filepicker-content #picker-filestable.filelist th .columntitle { + display: block; + padding: 15px; + height: 50px; + box-sizing: border-box; + -moz-box-sizing: border-box; + vertical-align: middle; +} +#oc-dialog-filepicker-content #picker-filestable.filelist th .columntitle.name { + padding-left: 5px; + margin-left: 50px; +} +#oc-dialog-filepicker-content #picker-filestable.filelist th .sort-indicator { + width: 10px; + height: 8px; + margin-left: 5px; + display: inline-block; + vertical-align: text-bottom; + opacity: 0.3; +} +#oc-dialog-filepicker-content #picker-filestable.filelist .sort-indicator.hidden, +#oc-dialog-filepicker-content #picker-filestable.filelist th:hover .sort-indicator.hidden, +#oc-dialog-filepicker-content #picker-filestable.filelist th:focus .sort-indicator.hidden { + visibility: hidden; +} +#oc-dialog-filepicker-content #picker-filestable.filelist th:hover .sort-indicator.hidden, +#oc-dialog-filepicker-content #picker-filestable.filelist th:focus .sort-indicator.hidden { + visibility: visible; +} +#oc-dialog-filepicker-content #picker-filestable.filelist td { + padding: 14px; + border-bottom: 1px solid var(--color-border); +} +#oc-dialog-filepicker-content #picker-filestable.filelist tr:last-child td { + border-bottom: none; +} +#oc-dialog-filepicker-content #picker-filestable.filelist .filename { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + background-size: 32px; + background-repeat: no-repeat; + padding-left: 51px; + background-position: 7px 7px; + cursor: pointer; + max-width: 0; +} +#oc-dialog-filepicker-content #picker-filestable.filelist .filename .filename-parts { + display: flex; +} +#oc-dialog-filepicker-content #picker-filestable.filelist .filename .filename-parts__first { + overflow: hidden; + white-space: pre; + text-overflow: ellipsis; +} +#oc-dialog-filepicker-content #picker-filestable.filelist .filename .filename-parts__last { + white-space: pre; +} +#oc-dialog-filepicker-content #picker-filestable.filelist .filesize, #oc-dialog-filepicker-content #picker-filestable.filelist .date { + width: 80px; +} +#oc-dialog-filepicker-content #picker-filestable.filelist .filesize { + text-align: right; +} +#oc-dialog-filepicker-content #picker-filestable.filelist.view-grid { + display: flex; + flex-direction: column; +} +#oc-dialog-filepicker-content #picker-filestable.filelist.view-grid tbody { + display: grid; + grid-template-columns: repeat(auto-fill, 120px); + justify-content: space-around; + row-gap: 15px; + margin: 15px 0; +} +#oc-dialog-filepicker-content #picker-filestable.filelist.view-grid tbody tr { + display: block; + position: relative; + border-radius: var(--border-radius); + padding: 10px; + display: flex; + flex-direction: column; + width: 100px; +} +#oc-dialog-filepicker-content #picker-filestable.filelist.view-grid tbody tr td { + border: none; + padding: 0; + text-align: center; + border-radius: var(--border-radius); +} +#oc-dialog-filepicker-content #picker-filestable.filelist.view-grid tbody tr td.filename { + padding: 100px 0 0 0; + background-position: center top; + background-size: contain; + line-height: 30px; + max-width: none; +} +#oc-dialog-filepicker-content #picker-filestable.filelist.view-grid tbody tr td.filename .filename-parts { + justify-content: center; +} +#oc-dialog-filepicker-content #picker-filestable.filelist.view-grid tbody tr td.filesize { + line-height: 10px; + width: 100%; +} +#oc-dialog-filepicker-content #picker-filestable.filelist.view-grid tbody tr td.date { + display: none; +} +#oc-dialog-filepicker-content .filepicker_element_selected { + background-color: var(--color-background-darker); +} + +.ui-dialog { + position: fixed !important; +} + +span.ui-icon { + float: left; + margin: 3px 7px 30px 0; +} + +/* ---- CONTACTS MENU ---- */ +#contactsmenu .menutoggle { + background-size: 20px 20px; + padding: 14px; + cursor: pointer; + background-image: var(--original-icon-contacts-white); + filter: var(--primary-invert-if-bright); +} +#contactsmenu .menutoggle:hover, #contactsmenu .menutoggle:focus, #contactsmenu .menutoggle:active { + opacity: 1 !important; +} + +#header .header-right > div#contactsmenu > .menu { + /* show 2.5 to 4.5 entries depending on the screen height */ + height: calc(100vh - 150px); + max-height: 275px; + min-height: 175px; + width: 350px; +} +#header .header-right > div#contactsmenu > .menu .emptycontent { + margin-top: 5vh !important; + margin-bottom: 2vh; +} +#header .header-right > div#contactsmenu > .menu .emptycontent .icon-loading, +#header .header-right > div#contactsmenu > .menu .emptycontent .icon-search { + display: inline-block; +} +#header .header-right > div#contactsmenu > .menu .content { + /* fixed max height of the parent container without the search input */ + height: calc(100vh - 150px - 50px); + max-height: 225px; + min-height: 125px; + overflow-y: auto; +} +#header .header-right > div#contactsmenu > .menu .content .footer { + text-align: center; +} +#header .header-right > div#contactsmenu > .menu .content .footer a { + display: block; + width: 100%; + padding: 12px 0; + opacity: 0.5; +} +#header .header-right > div#contactsmenu > .menu .contact { + display: flex; + position: relative; + align-items: center; + padding: 3px 3px 3px 10px; + border-bottom: 1px solid var(--color-border); + /* actions menu */ +} +#header .header-right > div#contactsmenu > .menu .contact :last-of-type { + border-bottom: none; +} +#header .header-right > div#contactsmenu > .menu .contact .avatar { + height: 32px; + width: 32px; + display: inline-block; +} +#header .header-right > div#contactsmenu > .menu .contact .body { + flex-grow: 1; + padding-left: 8px; +} +#header .header-right > div#contactsmenu > .menu .contact .body div { + position: relative; + width: 100%; +} +#header .header-right > div#contactsmenu > .menu .contact .body .full-name, #header .header-right > div#contactsmenu > .menu .contact .body .last-message { + /* TODO: don't use fixed width */ + max-width: 204px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} +#header .header-right > div#contactsmenu > .menu .contact .body .last-message { + opacity: 0.5; +} +#header .header-right > div#contactsmenu > .menu .contact .top-action, #header .header-right > div#contactsmenu > .menu .contact .second-action, #header .header-right > div#contactsmenu > .menu .contact .other-actions { + width: 16px; + height: 16px; + padding: 14px; + opacity: 0.5; + cursor: pointer; +} +#header .header-right > div#contactsmenu > .menu .contact .top-action :hover, #header .header-right > div#contactsmenu > .menu .contact .second-action :hover, #header .header-right > div#contactsmenu > .menu .contact .other-actions :hover { + opacity: 1; +} +#header .header-right > div#contactsmenu > .menu .contact .menu { + top: 47px; + margin-right: 13px; +} +#header .header-right > div#contactsmenu > .menu .contact .popovermenu::after { + right: 2px; +} + +#contactsmenu-search { + width: calc(100% - 16px); + margin: 8px; + height: 34px; +} + +/* ---- TOOLTIPS ---- */ +.extra-data { + padding-right: 5px !important; +} + +/* ---- TAGS ---- */ +#tagsdialog .content { + width: 100%; + height: 280px; +} +#tagsdialog .scrollarea { + overflow: auto; + border: 1px solid var(--color-background-darker); + width: 100%; + height: 240px; +} +#tagsdialog .bottombuttons { + width: 100%; + height: 30px; +} +#tagsdialog .bottombuttons * { + float: left; +} +#tagsdialog .taglist li { + background: var(--color-background-dark); + padding: 0.3em 0.8em; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + -webkit-transition: background-color 500ms; + transition: background-color 500ms; +} +#tagsdialog .taglist li:hover, #tagsdialog .taglist li:active { + background: var(--color-background-darker); +} +#tagsdialog .addinput { + width: 90%; + clear: both; +} + +/* ---- BREADCRUMB ---- */ +.breadcrumb { + display: inline-flex; +} + +div.crumb { + display: inline-flex; + background-image: url("../img/breadcrumb.svg?v=1"); + background-repeat: no-repeat; + background-position: right center; + height: 44px; + background-size: auto 24px; + flex: 0 0 auto; + order: 1; + padding-right: 7px; +} +div.crumb.crumbmenu { + order: 2; + position: relative; +} +div.crumb.crumbmenu a { + opacity: 0.5; +} +div.crumb.crumbmenu.canDropChildren .popovermenu, div.crumb.crumbmenu.canDrop .popovermenu { + display: block; +} +div.crumb.crumbmenu .popovermenu { + top: 100%; + margin-right: 3px; +} +div.crumb.crumbmenu .popovermenu ul { + max-height: 345px; + overflow-y: auto; + overflow-x: hidden; + padding-right: 5px; +} +div.crumb.crumbmenu .popovermenu ul li.canDrop span:first-child { + background-image: url("../img/filetypes/folder-drag-accept.svg?v=1") !important; +} +div.crumb.crumbmenu .popovermenu .in-breadcrumb { + display: none; +} +div.crumb.hidden { + display: none; +} +div.crumb.hidden ~ .crumb { + order: 3; +} +div.crumb > a, +div.crumb > span { + position: relative; + padding: 12px; + opacity: 0.5; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + flex: 0 0 auto; + max-width: 200px; +} +div.crumb > a.icon-home, div.crumb > a.icon-delete, +div.crumb > span.icon-home, +div.crumb > span.icon-delete { + text-indent: -9999px; +} +div.crumb > a[class^=icon-] { + padding: 0; + width: 44px; +} +div.crumb:last-child { + font-weight: bold; + margin-right: 10px; +} +div.crumb:last-child a ~ span { + padding-left: 0; +} +div.crumb:hover, div.crumb:focus, div.crumb a:focus, div.crumb:active { + opacity: 1; +} +div.crumb:hover > a, +div.crumb:hover > span, div.crumb:focus > a, +div.crumb:focus > span, div.crumb a:focus > a, +div.crumb a:focus > span, div.crumb:active > a, +div.crumb:active > span { + opacity: 0.7; +} + +/* some feedback for hover/tap on breadcrumbs */ +.appear { + opacity: 1; + -webkit-transition: opacity 500ms ease 0s; + -moz-transition: opacity 500ms ease 0s; + -ms-transition: opacity 500ms ease 0s; + -o-transition: opacity 500ms ease 0s; + transition: opacity 500ms ease 0s; +} +.appear.transparent { + opacity: 0; +} + +/* LEGACY FIX only - do not use fieldsets for settings */ +fieldset.warning legend, fieldset.update legend { + top: 18px; + position: relative; +} +fieldset.warning legend + p, fieldset.update legend + p { + margin-top: 12px; +} + +/* for IE10 */ +@-ms-viewport { + width: device-width; +} +/* hidden input type=file field */ +.hiddenuploadfield { + display: none; + width: 0; + height: 0; + opacity: 0; +} + +/*# sourceMappingURL=styles.css.map */ diff --git a/core/css/styles.css.map b/core/css/styles.css.map new file mode 100644 index 0000000000000..3eb43213bffd0 --- /dev/null +++ b/core/css/styles.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["variables.scss","styles.scss"],"names":[],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkBA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;EACA;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;EACA;;AACA;EACC;;;AAIF;EACC;EACA;;;AAGD;EACC;;AACA;EACC;;;AAIF;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;AACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACC;EACA;EACA;EACA;EACA;;AAED;EACC;EACA;;AACA;EACC;;;AAKH;AAEA;EACC;EACA;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;EACA;;;AAID;AAEA;EACC;EACA;;;AAID;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAAa;EACb;EACA;EACA;EACA;EACA;EACA,KDxFe;;;AC2FhB;AAEA;EACC;;;AAGD;EACC;;;AAMC;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAED;EACC;;;AAKH;AAEA;AAAA;EAEC;EACA;EACA;EACA;;AACA;AAAA;EACC;;AAED;AAAA;EACC;;AAED;AAAA;EACC;;AAED;AAAA;AAAA;AAAA;EAEC;EACA;EACA;EACA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEC;;;AAKH;AAEA;EACC;;;AAGD;AAEA;AAEA;AAEA;EACC;EACA;EACA;EACA;EACA;;;AAGD;AAEA;EACC;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;AAIC;AAAA;AAAA;EACC;;AAED;AAAA;AAAA;EACC;;;AAIF;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;;;AAED;EACC;EACA;EACA;EACA;EACA;;;AAGD;AAEA;EACC;EACA;EACA;EACA;EACA;;;AAIA;EACC;EACA;;;AAKD;EACC;EACA;;AACA;EACC;EACA;EACA;;AAGF;EACC;EACA;;;AAIF;EACC;EACA;;AACA;EACC;;;AAIF;EACC;;;AAGD;AACA;AAEA;AAEA;AAEA;EACC;EACA;;AACA;EACC;EACA;;;AAIF;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAKA;EACA;EACA;;AANA;EACC;EACA;;AAKD;EACC;;AACA;EACC;EACA;EACA;EACA;EACA;EACA;;AAED;EACC;;;AAKH;EACC;;;AAIA;AAAA;EAGC;;;AAIF;EACC;EACA;EACA;;AAEA;EACC;;;AAIF;EACC;EACA;;;AAGD;EACC;;;AAIA;EACC;;;AAKD;EACC;;;AAKD;EACC;;;AAKD;EACC;;;AAIF;EACC;;;AAGD;EACC;EACA;EACA;EACA;;AACA;EACC;;;AAIF;EACC;EACA;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;AACA;EACC;EACA;EACA;EACA;EACA;EACA;;AAEA;AAAA;AAAA;EAGC;EACA;;AAED;EACC;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;;AAED;EACC;;AAEA;EACC;;AAED;EACC;;AAGF;EACC;;AAID;EACC;EACA;EACA;EACA;EACA;;AAED;EACC;;AAGA;EACC;;AAGD;AAAA;AAAA;EAGC;EACA;EACA;;AAGD;AAAA;EAEC;EACA;;;AAMJ;EACC;EACA;;;AAID;AACA;EACC;EACA;EACA;EACA;AAwBA;;AAtBA;EACC;;AAGD;AAAA;AAAA;EAGC;EACA;;AAED;EACC;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;;AAIF;EACC;;AAGA;EACC;EACA;EACA;;AACA;EACC;EACA;EACA;;AAGF;EACC;;AAGA;AAAA;AAAA;EAIC;EACA;EACA;;AAGD;EACC;;AAGD;EACC;;;AAMJ;AAGC;AAAA;EACC;EACA;EACA;;AACA;AAAA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;AAAA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAMJ;AACA;EACC;EACA;EACA;AA0BA;;AAxBA;EACC;EACA;EACA;;AAEA;EACC;EACA;EACA;;AAGA;EACC;;AAED;EACC;;AAED;EACC;EACA;;AAMH;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EAEC;;AAKF;EACC;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;EACA;;AAGD;EACC;EACA;;AACA;EACC;EACA;;AAMH;EACC;EACA;EACA;EACA;AACA;AACA;EACA;EACA;;AAED;EACC;EACA;EACA;EACA;EACA;;AAED;EACC;EACA;;AAED;AACC;EACA;EACA;;AAEC;EACC;EACA;;AACA;EACC;EACA;;AAIH;EACC;EACA;EACA;EACA;EACA;EACA;;AAED;EACC;EACA;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;;AAED;AAAA;AAAA;EAGC;;AAED;AAAA;EAEC;;AAGD;EACC;EACA;;AAED;EACC;;AAED;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;;AACA;EACC;;AACA;EACC;EACA;EACA;;AAED;EACC;;AAIH;EACC;;AAED;EACC;;AAED;EAIC;EACA;;AAEA;EACC;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA,SAhBS;EAiBT;EACA;EACA;;AAGA;EACC;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA,aA/BU;EAgCV;;AACA;EACC;;AAGF;EACC;EACA;;AAED;EACC;;AAON;EACC;;;AAIF;EACC;;;AAGD;EACC;EACA;;;AAGD;AAGC;EACC;EACA;EACA;EAEA;EACA;;AAEA;EAGC;;;AAKH;AACC;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;;AACA;AAAA;EAEC;;AAIF;AACC;EACA;EACA;EACA;EACA;;AAEA;EACC;;AAEA;EACC;EACA;EACA;EACA;;AAKH;EACC;EACA;EACA;EACA;EACA;AA6CA;;AA3CA;EACC;;AAGD;EACC;EACA;EACA;;AAGD;EACC;EACA;;AAEA;EACC;EACA;;AAGD;AACC;EACA;EACA;EACA;EACA;;AAED;EACC;;AAIF;EACC;EACA;EACA;EACA;EACA;;AAEA;EACC;;AAKF;EACC;EACA;;AAED;EACC;;;AAMH;EACC;EACA;EACA;;;AAGD;AAEA;EACC;;;AAGD;AAGC;EACC;EACA;;AAED;EACC;EACA;EACA;EACA;;AAED;EACC;EACA;;AACA;EACC;;AAGF;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACC;;AAGF;EACC;EACA;;;AAIF;AACA;EACC;;;AAED;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACC;EACA;;AACA;EACC;;AAIA;EACC;;AAIF;EACC;EACA;;AACA;EACC;EACA;EACA;EACA;;AACA;EACC;;AAGF;EACC;;AAIH;EACC;;AACA;EACC;;AAGF;AAAA;EAEC;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;;AAEA;AAAA;AAAA;EAGC;;AAGF;EACC;EACA;;AAID;EACC;EACA;;AAEA;EACC;;AAGF;EACC;;AAEA;AAAA;AAAA;AAAA;AAAA;EAEC;;;AAKH;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;;AACA;EACC;;;AAIF;AAGC;EACC;EACA;;AAED;EACC;;;AAIF;AACA;EACC;;AAID;AAEA;EACC;EACA;EACA;EACA","file":"styles.css"} \ No newline at end of file diff --git a/core/css/styles.scss b/core/css/styles.scss index f1130979134ea..9cd407a6c3c63 100644 --- a/core/css/styles.scss +++ b/core/css/styles.scss @@ -13,6 +13,7 @@ * @license GNU AGPL version 3 or any later version * */ +@use 'sass:math'; @use 'variables'; html, body, div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, code, del, dfn, em, img, q, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, dialog, figure, footer, header, hgroup, nav, section { @@ -945,7 +946,7 @@ code { } } &.filesize { - line-height: $name-height / 3; + line-height: math.div($name-height, 3); width: 100%; } &.date { diff --git a/core/css/systemtags.css b/core/css/systemtags.css new file mode 100644 index 0000000000000..f2c3e75b568e0 --- /dev/null +++ b/core/css/systemtags.css @@ -0,0 +1,86 @@ +@charset "UTF-8"; +/** + * @copyright Copyright (c) 2016, John Molakvoæ + * @copyright Copyright (c) 2016, Robin Appelman + * @copyright Copyright (c) 2016, Jan-Christoph Borchardt + * @copyright Copyright (c) 2016, Vincent Petry + * @copyright Copyright (c) 2016, Erik Pellikka + * @copyright Copyright (c) 2015, Vincent Petry + * + * @license GNU AGPL version 3 or any later version + * + */ +.systemtags-select2-dropdown .select2-result-label .checkmark { + visibility: hidden; + margin-left: -5px; + margin-right: 5px; + padding: 4px; +} +.systemtags-select2-dropdown .select2-result-label .new-item .systemtags-actions { + display: none; +} +.systemtags-select2-dropdown .select2-selected .select2-result-label .checkmark { + visibility: visible; +} +.systemtags-select2-dropdown .select2-result-label .icon { + display: inline-block; + opacity: 0.5; +} +.systemtags-select2-dropdown .select2-result-label .icon.rename { + padding: 4px; +} +.systemtags-select2-dropdown .systemtags-actions { + position: absolute; + right: 5px; +} +.systemtags-select2-dropdown .systemtags-rename-form { + display: inline-block; + width: calc(100% - 20px); + top: -6px; + position: relative; +} +.systemtags-select2-dropdown .systemtags-rename-form input { + display: inline-block; + height: 30px; + width: calc(100% - 40px); +} +.systemtags-select2-dropdown .label { + width: 85%; + display: inline-block; + overflow: hidden; + text-overflow: ellipsis; +} +.systemtags-select2-dropdown .label.hidden { + display: none; +} +.systemtags-select2-dropdown span { + line-height: 25px; +} +.systemtags-select2-dropdown .systemtags-item { + display: inline-block; + height: 25px; + width: 100%; +} +.systemtags-select2-dropdown .select2-result-label { + height: 25px; +} + +.systemTagsInfoView, +.systemtags-select2-container { + width: 100%; +} +.systemTagsInfoView .select2-choices, +.systemtags-select2-container .select2-choices { + flex-wrap: nowrap !important; + max-height: 44px; +} +.systemTagsInfoView .select2-choices .select2-search-choice.select2-locked .label, +.systemtags-select2-container .select2-choices .select2-search-choice.select2-locked .label { + opacity: 0.5; +} + +#select2-drop.systemtags-select2-dropdown .select2-results li.select2-result { + padding: 5px; +} + +/*# sourceMappingURL=systemtags.css.map */ diff --git a/core/css/systemtags.css.map b/core/css/systemtags.css.map new file mode 100644 index 0000000000000..a4bdce4e0b76d --- /dev/null +++ b/core/css/systemtags.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["systemtags.scss"],"names":[],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAcE;EACC;EACA;EACA;EACA;;AAED;EACC;;AAGF;EACC;;AAED;EACC;EACA;;AACA;EACC;;AAGF;EACC;EACA;;AAED;EACC;EACA;EACA;EACA;;AACA;EACC;EACA;EACA;;AAGF;EACC;EACA;EACA;EACA;;AACA;EACC;;AAGF;EACC;;AAED;EACC;EACA;EACA;;AAED;EACC;;;AAIF;AAAA;EAEC;;AAEA;AAAA;EACC;EACA;;AAGD;AAAA;EACC;;;AAIF;EACC","file":"systemtags.css"} \ No newline at end of file diff --git a/core/css/toast.css b/core/css/toast.css new file mode 100644 index 0000000000000..d877cc299b71a --- /dev/null +++ b/core/css/toast.css @@ -0,0 +1,111 @@ +@charset "UTF-8"; +/** + * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com) + * + * @author John Molakvoæ (skjnldsv) + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ +/** + * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com) + * + * @author John Molakvoæ (skjnldsv) + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ +/** + * @see core/src/icons.js + */ +/** + * SVG COLOR API + * + * @param string $icon the icon filename + * @param string $dir the icon folder within /core/img if $core or app name + * @param string $color the desired color in hexadecimal + * @param int $version the version of the file + * @param bool [$core] search icon in core + * + * @returns A background image with the url to the set to the requested icon. + */ +.toastify.toast { + min-width: 200px; + background: none; + background-color: var(--color-main-background); + color: var(--color-main-text); + box-shadow: 0 0 6px 0 var(--color-box-shadow); + padding: 12px; + padding-right: 34px; + margin-top: 45px; + position: fixed; + z-index: 9000; + border-radius: var(--border-radius); +} +.toastify.toast .toast-close { + position: absolute; + top: 0; + right: 0; + width: 38px; + opacity: 0.4; + padding: 12px; + /* $dir is the app name, so we add this to the icon var to avoid conflicts between apps */ + background-image: var(--icon-close-dark); + background-position: center; + background-repeat: no-repeat; + text-indent: 200%; + white-space: nowrap; + overflow: hidden; +} +.toastify.toast .toast-close:hover, .toastify.toast .toast-close:focus, .toastify.toast .toast-close:active { + cursor: pointer; + opacity: 1; +} + +.toastify.toastify-top { + right: 10px; +} + +.toast-error { + border-left: 3px solid var(--color-error); +} + +.toast-info { + border-left: 3px solid var(--color-primary); +} + +.toast-warning { + border-left: 3px solid var(--color-warning); +} + +.toast-success { + border-left: 3px solid var(--color-success); +} + +/*# sourceMappingURL=toast.css.map */ diff --git a/core/css/toast.css.map b/core/css/toast.css.map new file mode 100644 index 0000000000000..19ff006761375 --- /dev/null +++ b/core/css/toast.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["variables.scss","functions.scss","toast.scss"],"names":[],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBA;AAAA;AAAA;AA4BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AC/CA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;ADyCD;EAEA;ECzCC;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;;;AAIH;EACC;;;AAGD;EACC;;;AAED;EACC;;;AAED;EACC;;;AAED;EACC","file":"toast.css"} \ No newline at end of file diff --git a/core/css/tooltip.css b/core/css/tooltip.css new file mode 100644 index 0000000000000..a215f2e5649ae --- /dev/null +++ b/core/css/tooltip.css @@ -0,0 +1,125 @@ +@charset "UTF-8"; +/** + * @copyright Copyright (c) 2016, John Molakvoæ + * @copyright Copyright (c) 2016, Robin Appelman + * @copyright Copyright (c) 2016, Jan-Christoph Borchardt + * @copyright Copyright (c) 2016, Erik Pellikka + * @copyright Copyright (c) 2015, Vincent Petry + * + * Bootstrap v3.3.5 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +.tooltip { + position: absolute; + display: block; + font-family: var(--font-face); + font-style: normal; + font-weight: normal; + letter-spacing: normal; + line-break: auto; + line-height: 1.6; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + white-space: normal; + word-break: normal; + word-spacing: normal; + word-wrap: normal; + overflow-wrap: anywhere; + font-size: 12px; + opacity: 0; + z-index: 100000; + /* default to top */ + margin-top: -3px; + padding: 10px 0; + filter: drop-shadow(0 1px 10px var(--color-box-shadow)); + /* TOP */ + /* BOTTOM */ +} +.tooltip.in, .tooltip.show, .tooltip.tooltip[aria-hidden=false] { + visibility: visible; + opacity: 1; + transition: opacity 0.15s; +} +.tooltip.top .tooltip-arrow, .tooltip[x-placement^=top] { + left: 50%; + margin-left: -10px; +} +.tooltip.bottom, .tooltip[x-placement^=bottom] { + margin-top: 3px; + padding: 10px 0; +} +.tooltip.right, .tooltip[x-placement^=right] { + margin-left: 3px; + padding: 0 10px; +} +.tooltip.right .tooltip-arrow, .tooltip[x-placement^=right] .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -10px; + border-width: 10px 10px 10px 0; + border-right-color: var(--color-main-background); +} +.tooltip.left, .tooltip[x-placement^=left] { + margin-left: -3px; + padding: 0 5px; +} +.tooltip.left .tooltip-arrow, .tooltip[x-placement^=left] .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -10px; + border-width: 10px 0 10px 10px; + border-left-color: var(--color-main-background); +} +.tooltip.top .tooltip-arrow, .tooltip.top .arrow, .tooltip.top-left .tooltip-arrow, .tooltip.top-left .arrow, .tooltip[x-placement^=top] .tooltip-arrow, .tooltip[x-placement^=top] .arrow, .tooltip.top-right .tooltip-arrow, .tooltip.top-right .arrow { + bottom: 0; + border-width: 10px 10px 0; + border-top-color: var(--color-main-background); +} +.tooltip.top-left .tooltip-arrow { + right: 10px; + margin-bottom: -10px; +} +.tooltip.top-right .tooltip-arrow { + left: 10px; + margin-bottom: -10px; +} +.tooltip.bottom .tooltip-arrow, .tooltip.bottom .arrow, .tooltip[x-placement^=bottom] .tooltip-arrow, .tooltip[x-placement^=bottom] .arrow, .tooltip.bottom-left .tooltip-arrow, .tooltip.bottom-left .arrow, .tooltip.bottom-right .tooltip-arrow, .tooltip.bottom-right .arrow { + top: 0; + border-width: 0 10px 10px; + border-bottom-color: var(--color-main-background); +} +.tooltip[x-placement^=bottom] .tooltip-arrow, .tooltip.bottom .tooltip-arrow { + left: 50%; + margin-left: -10px; +} +.tooltip.bottom-left .tooltip-arrow { + right: 10px; + margin-top: -10px; +} +.tooltip.bottom-right .tooltip-arrow { + left: 10px; + margin-top: -10px; +} + +.tooltip-inner { + max-width: 350px; + padding: 5px 8px; + background-color: var(--color-main-background); + color: var(--color-main-text); + text-align: center; + border-radius: var(--border-radius); +} + +.tooltip-arrow, .tooltip .arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} + +/*# sourceMappingURL=tooltip.css.map */ diff --git a/core/css/tooltip.css.map b/core/css/tooltip.css.map new file mode 100644 index 0000000000000..2b488db1c88a3 --- /dev/null +++ b/core/css/tooltip.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["tooltip.scss"],"names":[],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AACA;EACA;EACA;EACA;AA0CA;AAmBA;;AA5DA;EAGI;EACA;EACA;;AAEJ;EAEI;EACA;;AAEJ;EAEI;EACA;;AAEJ;EAEI;EACA;;AACA;EACI;EACA;EACA;EACA;EACA;;AAGR;EAEI;EACA;;AACA;EACI;EACA;EACA;EACA;EACA;;AAQJ;EACI;EACA;EACA;;AAGR;EACI;EACA;;AAEJ;EACI;EACA;;AAOA;EACI;EACA;EACA;;AAGR;EAEI;EACA;;AAEJ;EACI;EACA;;AAEJ;EACI;EACA;;;AAIR;EACI;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;EACA;EACA;EACA","file":"tooltip.css"} \ No newline at end of file diff --git a/core/css/variables.css b/core/css/variables.css new file mode 100644 index 0000000000000..904c85ccd0e75 --- /dev/null +++ b/core/css/variables.css @@ -0,0 +1,24 @@ +@charset "UTF-8"; +/** + * @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv@protonmail.com) + * + * @author John Molakvoæ (skjnldsv) + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ + +/*# sourceMappingURL=variables.css.map */ diff --git a/core/css/variables.css.map b/core/css/variables.css.map new file mode 100644 index 0000000000000..e2354d551c268 --- /dev/null +++ b/core/css/variables.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["variables.scss"],"names":[],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA","file":"variables.css"} \ No newline at end of file diff --git a/core/css/whatsnew.css b/core/css/whatsnew.css new file mode 100644 index 0000000000000..942b73451aeed --- /dev/null +++ b/core/css/whatsnew.css @@ -0,0 +1,32 @@ +/** + * @copyright Copyright (c) 2018, Arthur Schiwon + * + * @license GNU AGPL version 3 or any later version + * + */ +.whatsNewPopover { + bottom: 35px !important; + left: 15px !important; + width: 270px; + z-index: 700; +} + +.whatsNewPopover p { + width: auto !important; +} + +.whatsNewPopover .caption { + font-weight: bold; + cursor: auto !important; +} + +.whatsNewPopover .icon-close { + position: absolute; + right: 0; +} + +.whatsNewPopover::after { + content: none; +} + +/*# sourceMappingURL=whatsnew.css.map */ diff --git a/core/css/whatsnew.css.map b/core/css/whatsnew.css.map new file mode 100644 index 0000000000000..b55af64e8508c --- /dev/null +++ b/core/css/whatsnew.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["whatsnew.scss"],"names":[],"mappings":"AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;EACE;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE","file":"whatsnew.css"} \ No newline at end of file diff --git a/lib/composer/autoload.php b/lib/composer/autoload.php index a3d144b1777de..fe5311f43f174 100644 --- a/lib/composer/autoload.php +++ b/lib/composer/autoload.php @@ -9,4 +9,4 @@ require_once __DIR__ . '/composer/autoload_real.php'; -return ComposerAutoloaderInit53792487c5a8370acc0b06b1a864ff4c::getLoader(); +return ComposerAutoloaderInit749170dad3f5e7f9ca158f5a9f04f6a2::getLoader(); diff --git a/lib/composer/composer/autoload_real.php b/lib/composer/composer/autoload_real.php index eecff48bcf9f3..27e0b34bf5b24 100644 --- a/lib/composer/composer/autoload_real.php +++ b/lib/composer/composer/autoload_real.php @@ -2,7 +2,7 @@ // autoload_real.php @generated by Composer -class ComposerAutoloaderInit53792487c5a8370acc0b06b1a864ff4c +class ComposerAutoloaderInit749170dad3f5e7f9ca158f5a9f04f6a2 { private static $loader; @@ -22,12 +22,12 @@ public static function getLoader() return self::$loader; } - spl_autoload_register(array('ComposerAutoloaderInit53792487c5a8370acc0b06b1a864ff4c', 'loadClassLoader'), true, true); + spl_autoload_register(array('ComposerAutoloaderInit749170dad3f5e7f9ca158f5a9f04f6a2', 'loadClassLoader'), true, true); self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__)); - spl_autoload_unregister(array('ComposerAutoloaderInit53792487c5a8370acc0b06b1a864ff4c', 'loadClassLoader')); + spl_autoload_unregister(array('ComposerAutoloaderInit749170dad3f5e7f9ca158f5a9f04f6a2', 'loadClassLoader')); require __DIR__ . '/autoload_static.php'; - call_user_func(\Composer\Autoload\ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c::getInitializer($loader)); + call_user_func(\Composer\Autoload\ComposerStaticInit749170dad3f5e7f9ca158f5a9f04f6a2::getInitializer($loader)); $loader->register(true); diff --git a/lib/composer/composer/autoload_static.php b/lib/composer/composer/autoload_static.php index 4a49818930ee6..7408721529639 100644 --- a/lib/composer/composer/autoload_static.php +++ b/lib/composer/composer/autoload_static.php @@ -4,7 +4,7 @@ namespace Composer\Autoload; -class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c +class ComposerStaticInit749170dad3f5e7f9ca158f5a9f04f6a2 { public static $prefixLengthsPsr4 = array ( 'O' => @@ -1595,10 +1595,10 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c public static function getInitializer(ClassLoader $loader) { return \Closure::bind(function () use ($loader) { - $loader->prefixLengthsPsr4 = ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c::$prefixLengthsPsr4; - $loader->prefixDirsPsr4 = ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c::$prefixDirsPsr4; - $loader->fallbackDirsPsr4 = ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c::$fallbackDirsPsr4; - $loader->classMap = ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c::$classMap; + $loader->prefixLengthsPsr4 = ComposerStaticInit749170dad3f5e7f9ca158f5a9f04f6a2::$prefixLengthsPsr4; + $loader->prefixDirsPsr4 = ComposerStaticInit749170dad3f5e7f9ca158f5a9f04f6a2::$prefixDirsPsr4; + $loader->fallbackDirsPsr4 = ComposerStaticInit749170dad3f5e7f9ca158f5a9f04f6a2::$fallbackDirsPsr4; + $loader->classMap = ComposerStaticInit749170dad3f5e7f9ca158f5a9f04f6a2::$classMap; }, null, ClassLoader::class); } diff --git a/package-lock.json b/package-lock.json index 38abb09f1fe38..29546fef8f295 100644 --- a/package-lock.json +++ b/package-lock.json @@ -93,7 +93,6 @@ "babel-loader-exclude-node-modules-except": "^1.2.1", "css-loader": "^6.7.1", "eslint-plugin-es": "^4.1.0", - "eslint-webpack-plugin": "^3.1.1", "exports-loader": "^3.1.0", "file-loader": "^6.2.0", "handlebars": "^4.7.7", @@ -4450,13 +4449,13 @@ "dev": true }, "node_modules/accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dev": true, "dependencies": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" }, "engines": { "node": ">= 0.6" @@ -5517,24 +5516,27 @@ "integrity": "sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==" }, "node_modules/body-parser": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.1.tgz", - "integrity": "sha512-8ljfQi5eBk8EJfECMrgqNGWPEY5jWP+1IzkzkGdFFEwFQZZyaZ21UqdaHktgiMlH0xLHqIFtE/u2OYE5dOtViA==", + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", + "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", "dev": true, "dependencies": { - "bytes": "3.1.1", + "bytes": "3.1.2", "content-type": "~1.0.4", "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.8.1", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.9.6", - "raw-body": "2.4.2", - "type-is": "~1.6.18" + "on-finished": "2.4.1", + "qs": "6.10.3", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" }, "engines": { - "node": ">= 0.8" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, "node_modules/body-parser/node_modules/debug": { @@ -5546,12 +5548,33 @@ "ms": "2.0.0" } }, + "node_modules/body-parser/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/body-parser/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, + "node_modules/body-parser/node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/bootstrap": { "version": "4.6.1", "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.6.1.tgz", @@ -5661,9 +5684,9 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "node_modules/bytes": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz", - "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true, "engines": { "node": ">= 0.8" @@ -6740,6 +6763,16 @@ "node": ">= 0.6" } }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, "node_modules/detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", @@ -7876,48 +7909,6 @@ "node": ">=10" } }, - "node_modules/eslint-webpack-plugin": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.1.1.tgz", - "integrity": "sha512-xSucskTN9tOkfW7so4EaiFIkulWLXwCB/15H917lR6pTv0Zot6/fetFucmENRb7J5whVSFKIvwnrnsa78SG2yg==", - "dev": true, - "dependencies": { - "@types/eslint": "^7.28.2", - "jest-worker": "^27.3.1", - "micromatch": "^4.0.4", - "normalize-path": "^3.0.0", - "schema-utils": "^3.1.1" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0", - "webpack": "^5.0.0" - } - }, - "node_modules/eslint-webpack-plugin/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, "node_modules/eslint/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -9739,19 +9730,37 @@ "dev": true }, "node_modules/http-errors": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dev": true, "dependencies": { - "depd": "~1.1.2", + "depd": "2.0.0", "inherits": "2.0.4", "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", + "statuses": "2.0.1", "toidentifier": "1.0.1" }, "engines": { - "node": ">= 0.6" + "node": ">= 0.8" + } + }, + "node_modules/http-errors/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-errors/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" } }, "node_modules/http-proxy": { @@ -14071,9 +14080,9 @@ "dev": true }, "node_modules/negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "dev": true, "engines": { "node": ">= 0.6" @@ -15637,10 +15646,13 @@ } }, "node_modules/qs": { - "version": "6.9.6", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.6.tgz", - "integrity": "sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ==", + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, "engines": { "node": ">=0.6" }, @@ -15718,13 +15730,13 @@ } }, "node_modules/raw-body": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.2.tgz", - "integrity": "sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", "dev": true, "dependencies": { - "bytes": "3.1.1", - "http-errors": "1.8.1", + "bytes": "3.1.2", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", "unpipe": "1.0.0" }, @@ -23343,13 +23355,13 @@ "dev": true }, "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dev": true, "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" } }, "acorn": { @@ -24179,21 +24191,23 @@ "integrity": "sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==" }, "body-parser": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.1.tgz", - "integrity": "sha512-8ljfQi5eBk8EJfECMrgqNGWPEY5jWP+1IzkzkGdFFEwFQZZyaZ21UqdaHktgiMlH0xLHqIFtE/u2OYE5dOtViA==", + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", + "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", "dev": true, "requires": { - "bytes": "3.1.1", + "bytes": "3.1.2", "content-type": "~1.0.4", "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.8.1", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.9.6", - "raw-body": "2.4.2", - "type-is": "~1.6.18" + "on-finished": "2.4.1", + "qs": "6.10.3", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" }, "dependencies": { "debug": { @@ -24205,11 +24219,26 @@ "ms": "2.0.0" } }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true + }, + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } } } }, @@ -24285,9 +24314,9 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "bytes": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz", - "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true }, "cacache": { @@ -25140,6 +25169,12 @@ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", "dev": true }, + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true + }, "detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", @@ -26158,32 +26193,6 @@ "dev": true, "peer": true }, - "eslint-webpack-plugin": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.1.1.tgz", - "integrity": "sha512-xSucskTN9tOkfW7so4EaiFIkulWLXwCB/15H917lR6pTv0Zot6/fetFucmENRb7J5whVSFKIvwnrnsa78SG2yg==", - "dev": true, - "requires": { - "@types/eslint": "^7.28.2", - "jest-worker": "^27.3.1", - "micromatch": "^4.0.4", - "normalize-path": "^3.0.0", - "schema-utils": "^3.1.1" - }, - "dependencies": { - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, "espree": { "version": "9.3.0", "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.0.tgz", @@ -27420,16 +27429,30 @@ "dev": true }, "http-errors": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dev": true, "requires": { - "depd": "~1.1.2", + "depd": "2.0.0", "inherits": "2.0.4", "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", + "statuses": "2.0.1", "toidentifier": "1.0.1" + }, + "dependencies": { + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true + } } }, "http-proxy": { @@ -30708,9 +30731,9 @@ "dev": true }, "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "dev": true }, "neo-async": { @@ -31888,10 +31911,13 @@ } }, "qs": { - "version": "6.9.6", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.6.tgz", - "integrity": "sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ==", - "dev": true + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } }, "query-string": { "version": "7.1.1", @@ -31937,13 +31963,13 @@ "dev": true }, "raw-body": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.2.tgz", - "integrity": "sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", "dev": true, "requires": { - "bytes": "3.1.1", - "http-errors": "1.8.1", + "bytes": "3.1.2", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", "unpipe": "1.0.0" } diff --git a/package.json b/package.json index 73ebeac41b506..dc974b01157c8 100644 --- a/package.json +++ b/package.json @@ -113,7 +113,6 @@ "babel-loader-exclude-node-modules-except": "^1.2.1", "css-loader": "^6.7.1", "eslint-plugin-es": "^4.1.0", - "eslint-webpack-plugin": "^3.1.1", "exports-loader": "^3.1.0", "file-loader": "^6.2.0", "handlebars": "^4.7.7", diff --git a/webpack.common.js b/webpack.common.js index c8bcb7402368c..401ec6ef3f9bb 100644 --- a/webpack.common.js +++ b/webpack.common.js @@ -2,7 +2,6 @@ const { VueLoaderPlugin } = require('vue-loader') const path = require('path') const BabelLoaderExcludeNodeModulesExcept = require('babel-loader-exclude-node-modules-except') -const ESLintPlugin = require('eslint-webpack-plugin') const webpack = require('webpack') const modules = require('./webpack.modules.js') @@ -54,7 +53,9 @@ module.exports = { const rel = path.relative(rootDir, info.absoluteResourcePath) return `webpack:///nextcloud/${rel}` }, - clean: true, + clean: { + keep: /icons\.css/, // Keep static icons css + }, }, module: { @@ -138,7 +139,6 @@ module.exports = { plugins: [ new VueLoaderPlugin(), - new ESLintPlugin(), new webpack.ProvidePlugin({ // Provide jQuery to jquery plugins as some are loaded before $ is exposed globally. jQuery: 'jquery',