/*! * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors * SPDX-FileCopyrightText: 2016 ownCloud, Inc. * SPDX-License-Identifier: AGPL-3.0-or-later */ @use 'variables'; @use 'sass:math'; @use 'functions'; @media screen and (max-width: variables.$breakpoint-mobile) { // Make the body full width on mobile :root { --body-container-margin: 0px !important; --body-container-radius: 0px !important; } } html { width: 100%; height: 100%; position: absolute; // color-background-plain should always be defined. background-color: var(--color-background-plain, var(--color-main-background)); } body { // color-background-plain should always be defined. background-color: var(--color-background-plain, var(--color-main-background)); // user background, or plain color background-image: var(--image-background); background-size: cover; background-position: center; position: fixed; width: 100%; height: calc(100vh - env(safe-area-inset-bottom)); } /* BASE STYLING ------------------------------------------------------------ */ // no h1 allowed since h1 = logo h2, h3, h4, h5, h6 { font-weight: 600; line-height: 1.5; margin-top: 24px; margin-bottom: 12px; color: var(--color-main-text); } h2 { font-size: 1.8em; } h3 { font-size: 1.6em; } h4 { font-size: 1.4em; } h5 { font-size: 1.25em; } h6 { font-size: 1.1em; } /* do not use italic typeface style, instead lighter color */ em { font-style: normal; color: var(--color-text-maxcontrast); } dl { padding: 12px 0; } dt, dd { display: inline-block; padding: 12px; padding-inline-start: 0; } dt { width: 130px; white-space: nowrap; text-align: end; } kbd { padding: 4px 10px; border: 1px solid #ccc; box-shadow: 0 1px 0 rgba(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) { // Ensure the maxcontrast color is set for the background --color-text-maxcontrast: var(--color-text-maxcontrast-background-blur, var(--color-main-text)); width: variables.$navigation-width; z-index: 500; overflow-y: auto; overflow-x: hidden; background-color: var(--color-main-background-blur); backdrop-filter: var(--filter-background-blur); -webkit-backdrop-filter: var(--filter-background-blur); -webkit-user-select: none; position: sticky; height: 100%; -moz-user-select: none; -ms-user-select: none; user-select: none; display: flex; flex-direction: column; flex-grow: 0; flex-shrink: 0; .app-navigation-caption { font-weight: bold; line-height: var(--default-clickable-area); padding: 10px var(--default-clickable-area) 0 var(--default-clickable-area); white-space: nowrap; text-overflow: ellipsis; box-shadow: none !important; user-select: none; pointer-events:none; margin-inline-start: 10px; } } .app-navigation-personal, .app-navigation-administration { /* 'New' button */ .app-navigation-new { display: block; padding: calc(var(--default-grid-baseline) * 2); button { display: inline-block; width: 100%; padding: 10px; padding-inline-start: 34px; text-align: start; margin: 0; } } li { position: relative; } > ul { position: relative; height: 100%; width: 100%; overflow-x: hidden; overflow-y: auto; box-sizing: border-box; display: flex; flex-direction: column; padding: calc(var(--default-grid-baseline) * 2); padding-bottom: 0; &:last-child { padding-bottom: calc(var(--default-grid-baseline) * 2); } > li { display: inline-flex; flex-wrap: wrap; order: 1; flex-shrink: 0; margin: 0; margin-bottom: 3px; width: 100%; border-radius: var(--border-radius-element); /* Pinned-to-bottom entries */ &.pinned { order: 2; &.first-pinned { margin-top: auto !important; } } > .app-navigation-entry-deleted { /* Ugly hack for overriding the main entry link */ padding-inline-start: var(--default-clickable-area) !important; } > .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-inline-start: calc(var(--default-clickable-area) - 6px) !important; } a:hover, a:focus { &, > a { background-color: var(--color-background-hover); } } a:focus-visible { box-shadow: 0 0 0 4px var(--color-main-background); outline: 2px solid var(--color-main-text); } &.active, a:active, a.selected , a.active { &, > a { background-color: var(--color-primary-element); color: var(--color-primary-element-text); &:first-child > img { filter: var(--primary-invert-if-dark); } } } /* align loader */ &.icon-loading-small:after { inset-inline-start: 22px; top: 22px; } /* hide deletion/collapse of subitems */ &.deleted, &.collapsible:not(.open) { > ul { // NO ANIMATE because if not really hidden, we can still tab through it display: none; } } /* Second level nesting for lists */ > ul { flex: 0 1 auto; width: 100%; position: relative; > li { display: inline-flex; flex-wrap: wrap; padding-inline-start: var(--default-clickable-area); width: 100%; margin-bottom: 3px; &:hover, &:focus { &, > a { border-radius: var(--border-radius-element); background-color: var(--color-background-hover); } } &.active, a.selected { &, > a { border-radius: var(--border-radius-element); background-color: var(--color-primary-element-light); &:first-child > img { filter: var(--primary-invert-if-dark); } } } /* align loader */ &.icon-loading-small:after { inset-inline-start: calc(var(--default-clickable-area) / 2); } > .app-navigation-entry-deleted { /* margin to keep active indicator visible */ margin-inline-start: 4px; padding-inline-start: 84px; } > .app-navigation-entry-edit { /* margin to keep active indicator visible */ margin-inline-start: 4px; /* align the input correctly with the link text 44px+44px-4px-6px padding for the input */ padding-inline-start: calc(2 * var(--default-clickable-area) - 10px) !important; } } } } /* Menu and submenu */ > li, > li > ul > li { position: relative; box-sizing: border-box; /* hide icons if loading */ &.icon-loading-small { > a, > .app-navigation-entry-bullet { /* hide icon or bullet if loading state*/ background: transparent !important; } } /* Main entry link */ > a { background-size: 16px 16px; background-repeat: no-repeat; display: block; justify-content: space-between; line-height: var(--default-clickable-area); min-height: var(--default-clickable-area); padding-block: 0; padding-inline: calc(2 * var(--default-grid-baseline)); overflow: hidden; box-sizing: border-box; white-space: nowrap; text-overflow: ellipsis; border-radius: var(--border-radius-element); color: var(--color-main-text); flex: 1 1 0px; z-index: 100; /* above the bullet to allow click*/ /* TODO: forbid using img as icon in menu? */ &.svg { padding-block: 0; padding-inline: var(--default-clickable-area) 12px; :focus-visible { padding-block: 0; padding-inline: calc(var(--default-clickable-area) - 2px) 8px; } } &:first-child img { margin-inline-end: calc(2 * var(--default-grid-baseline)) !important; width: 16px; height: 16px; // Legacy invert if bright background filter: var(--background-invert-if-dark); } /* counter can also be inside the link */ > .app-navigation-entry-utils { display: inline-block; /* Check Floating fix below */ .app-navigation-entry-utils-counter { padding-inline-end: 0 !important; } } } /* Bullet icon */ > .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; + a { /* hide icon if bullet, can't have both */ background: transparent !important; } } /* popover fix the flex positionning of the li parent */ > .app-navigation-entry-menu { top: var(--default-clickable-area); } /* show edit/undo field if editing/deleted */ &.editing .app-navigation-entry-edit { opacity: 1; z-index: 250; } &.deleted .app-navigation-entry-deleted { transform: translateX(0); z-index: 250; } } } &.hidden { display: none; } /** * Button styling for menu, edit and undo */ .app-navigation-entry-utils .app-navigation-entry-utils-menu-button > button, .app-navigation-entry-deleted .app-navigation-entry-deleted-button { border: 0; opacity: 0.5; background-color: transparent; background-repeat: no-repeat; background-position: center; &:hover, &:focus { background-color: transparent; opacity: 1; } } /** * Collapsible menus */ .collapsible { /* Fallback for old collapse button. TODO: to be removed. Leaved here for retro compatibility */ .collapse { opacity: 0; position: absolute; width: var(--default-clickable-area); height: var(--default-clickable-area); margin: 0; z-index: 110; /* Needed for IE11; otherwise the button appears to the right of the * link. */ inset-inline-start: 0; &:focus-visible { opacity: 1; border-width: 0; box-shadow: inset 0 0 0 2px var(--color-primary-element); background: none; } } &:before { position: absolute; height: var(--default-clickable-area); width: var(--default-clickable-area); margin: 0; padding: 0; background: none; @include functions.icon-color('triangle-s', 'actions', variables.$color-black, 1, true); background-size: 16px; background-repeat: no-repeat; background-position: center; border: none; outline: none !important; box-shadow: none; content: ' '; opacity: 0; -webkit-transform: rotate(-90deg); -ms-transform: rotate(-90deg); transform: rotate(-90deg); z-index: 105; // above a, under button border-radius: 50%; transition: opacity variables.$animation-quick ease-in-out; } /* force padding on link no matter if 'a' has an icon class */ > a:first-child { padding-inline-start: var(--default-clickable-area); } &:hover, &:focus { &:before { opacity: 1; } > a { background-image: none; } > .app-navigation-entry-bullet { background: transparent !important; } } &.open { &:before { -webkit-transform: rotate(0); -ms-transform: rotate(0); transform: rotate(0); } } } /** * App navigation utils, buttons and counters for drop down menu */ .app-navigation-entry-utils { flex: 0 1 auto; ul { display: flex !important; align-items: center; justify-content: flex-end; } li { width: var(--default-clickable-area) !important; height: var(--default-clickable-area); } button { height: 100%; width: 100%; margin: 0; box-shadow: none; } .app-navigation-entry-utils-menu-button { /* Prevent bg img override if an icon class is set */ button:not([class^='icon-']):not([class*=' icon-']) { @include functions.icon-color('more', 'actions', variables.$color-black, 1, true); } &:hover button, &:focus button { background-color: transparent; opacity: 1; } } .app-navigation-entry-utils-counter { overflow: hidden; text-align: end; font-size: 9pt; line-height: var(--default-clickable-area); padding: 0 12px; /* Same padding as all li > a in the app-navigation */ &.highlighted { padding: 0; text-align: center; span { padding: 2px 5px; border-radius: 10px; background-color: var(--color-primary-element); color: var(--color-primary-element-text); } } } } /** * Editable entries */ .app-navigation-entry-edit { padding-inline: 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; form, div { display: inline-flex; width: 100%; } input { padding: 5px; margin-inline-end: 0; height: 38px; &:hover, &:focus { /* overlapp borders */ z-index: 1; } } input[type='text'] { width: 100%; min-width: 0; /* firefox hack: override auto */ border-end-end-radius: 0; border-start-end-radius: 0; } button, input:not([type='text']) { width: 36px; height: 38px; flex: 0 0 36px; &:not(:last-child) { border-radius: 0 !important; } &:not(:first-child) { margin-inline-start: -1px; } &:last-child { border-end-end-radius: var(--border-radius); border-start-end-radius: var(--border-radius); border-end-start-radius: 0; border-start-start-radius: 0; } } } /** * Deleted entries with undo button */ .app-navigation-entry-deleted { display: inline-flex; padding-inline-start: var(--default-clickable-area); transform: translateX(#{variables.$navigation-width}); .app-navigation-entry-deleted-description { position: relative; white-space: nowrap; text-overflow: ellipsis; overflow: hidden; flex: 1 1 0px; line-height: var(--default-clickable-area); } .app-navigation-entry-deleted-button { margin: 0; height: var(--default-clickable-area); width: var(--default-clickable-area); line-height: var(--default-clickable-area); &:hover, &:focus { opacity: 1; } } } /** * Common rules for animation of undo and edit entries */ .app-navigation-entry-edit, .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; inset-inline-start: 0; background-color: var(--color-main-background); box-sizing: border-box; } /** * drag and drop */ .drag-and-drop { -webkit-transition: padding-bottom 500ms ease 0s; transition: padding-bottom 500ms ease 0s; padding-bottom: 40px; } .error { color: var(--color-error); } .app-navigation-entry-utils ul, .app-navigation-entry-menu ul { list-style-type: none; } } /* Floating and background-position fix */ /* Cannot use inline-start and :dir to support Samsung Internet */ body[dir='ltr'] { .app-navigation-personal, .app-navigation-administration { .app-navigation-new button { background-position: left 10px center; } > ul > li > ul > li > a { background-position: left 14px center; > .app-navigation-entry-utils { float: right; } } } } body[dir='rtl'] { .app-navigation-personal, .app-navigation-administration { .app-navigation-new button { background-position: right 10px center; } > ul > li > ul > li > a { background-position: right 14px center; > .app-navigation-entry-utils { float: left; } } } } /* CONTENT --------------------------------------------------------- */ #content { box-sizing: border-box; position: static; margin: var(--body-container-margin); margin-top: 50px; padding: 0; display: flex; width: calc(100% - var(--body-container-margin) * 2); height: var(--body-height); border-radius: var(--body-container-radius); overflow: clip; &:not(.with-sidebar--full) { position: fixed; } } @media only screen and (max-width: variables.$breakpoint-mobile) { #content { border-start-start-radius: var(--border-radius-large); border-start-end-radius: var(--border-radius-large); } #app-navigation { border-start-start-radius: var(--border-radius-large); } #app-sidebar { border-start-end-radius: var(--border-radius-large); } } /* 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 */ $min-content-width: variables.$breakpoint-mobile - variables.$navigation-width - variables.$list-min-width; #app-content { z-index: 1000; background-color: var(--color-main-background); flex-basis: 100vw; overflow: auto; position: initial; height: 100%; /* margin if navigation element is here */ /* no top border for first settings item */ > .section:first-child { border-top: none; } /* if app-content-list is present */ #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-details { /* grow full width */ flex: 1 1 $min-content-width; #app-navigation-toggle-back { display: none; } } } &::-webkit-scrollbar-button { height: var(--body-container-radius); } } /* APP-SIDEBAR ------------------------------------------------------------ */ /* Sidebar: a sidebar to be used within #content #app-content will be shrinked properly */ #app-sidebar { width: 27vw; min-width: variables.$sidebar-min-width; max-width: variables.$sidebar-max-width; display: block; position: -webkit-sticky; position: sticky; top: variables.$header-height; inset-inline-end:0; overflow-y: auto; overflow-x: hidden; z-index: 1500; opacity: 0.7px; height: calc(100vh - #{variables.$header-height}); background: var(--color-main-background); border-inline-start: 1px solid var(--color-border); flex-shrink: 0; // no animations possible, use OC.Apps.showAppSidebar &.disappear { display: none; } } /* APP-SETTINGS ------------------------------------------------------------ */ /* settings area */ #app-settings { // To the bottom w/ flex margin-top: auto; &.open, &.opened { #app-settings-content { display: block; } } } #app-settings-content { display: none; padding: calc(var(--default-grid-baseline) * 2); padding-top: 0; padding-inline-start: calc(var(--default-grid-baseline) * 4); /* restrict height of settings and make scrollable */ max-height: 300px; overflow-y: auto; box-sizing: border-box; /* display input fields at full width */ input[type='text'] { width: 93%; } .info-text { padding-block: 5px 7px; padding-inline: 22px 0; color: var(--color-text-lighter); } input { &[type='checkbox'], &[type='radio'] { &.radio, &.checkbox { + label { display: inline-block; width: 100%; padding: 5px 0; } } } } } #app-settings-header { box-sizing: border-box; background-color: transparent; overflow: hidden; border-radius: calc(var(--default-clickable-area) / 2); padding: calc(var(--default-grid-baseline) * 2); padding-top: 0; .settings-button { display: flex; align-items: center; height: var(--default-clickable-area); width: 100%; padding: 0; margin: 0; background-color: transparent; box-shadow: none; border: 0; border-radius: calc(var(--default-clickable-area) / 2); text-align: start; font-weight: normal; font-size: 100%; opacity: 0.8; /* like app-navigation a */ color: var(--color-main-text); &.opened { border-top: solid 1px var(--color-border); background-color: var(--color-main-background); margin-top: 8px; } &:hover, &:focus { background-color: var(--color-background-hover); } &::before { background-image: var(--icon-settings-dark); background-repeat: no-repeat; content: ''; width: var(--default-clickable-area); height: var(--default-clickable-area); top: 0; inset-inline-start: 0; display: block; } &:focus-visible { box-shadow: 0 0 0 2px inset var(--color-primary-element) !important; } } } /* Background-position fix */ body[dir='ltr'] #app-settings-header .settings-button { &::before { background-position: left 14px center; } &:focus-visible { background-position: left 12px center; } } body[dir='rtl'] #app-settings-header .settings-button { &::before { background-position: right 14px center; } &:focus-visible { background-position: right 12px center; } } /* GENERAL SECTION ------------------------------------------------------------ */ .section { display: block; padding: 30px; margin-bottom: 24px; &.hidden { display: none !important; } /* slight position correction of checkboxes and radio buttons */ input { &[type='checkbox'], &[type='radio'] { vertical-align: -2px; margin-inline-end: 4px; } } } .sub-section { position: relative; margin-top: 10px; margin-inline-start: 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; &.transparent { opacity: 0; } } /* TABS ------------------------------------------------------------ */ .tabHeaders { display: flex; margin-bottom: 16px; .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; &.hidden { display: none; } /* Use same amount as sidebar padding */ &:first-child { padding-inline-start: 15px; } &:last-child { padding-inline-end: 15px; } .icon { display: inline-block; width: 100%; height: 16px; background-size: 16px; vertical-align: middle; margin-top: -2px; margin-inline-end: 3px; opacity: .7; cursor: pointer; } a { color: var(--color-text-lighter); margin-bottom: 1px; overflow: hidden; text-overflow: ellipsis; } &.selected { font-weight: bold; } &.selected, &:hover, &:focus { margin-bottom: 0px; color: var(--color-main-text); border-bottom: 1px solid var(--color-text-lighter); } } } .tabsContainer { .tab { padding: 0 15px 15px; } } /* Cannot use inline-start to support Samsung Internet*/ body[dir='ltr'] .tabsContainer { clear: left; } body[dir='rtl'] .tabsContainer { clear: right; } /* POPOVER MENU ------------------------------------------------------------ */ $popoveritem-height: 34px; $popovericon-size: 16px; $outter-margin: math.div($popoveritem-height - $popovericon-size, 2); .v-popper__inner div.open > ul { > li > a > span.action-link__icon, > li > a > span.action-router__icon, > li > a > img { filter: var(--background-invert-if-dark); // We do not want to invert the color of the user_status emoji: // https://github.com/nextcloud/nextcloud-vue/blob/8899087f8f8d45e0ed744bde9faa00b625a21905/src/components/NcAvatar/NcAvatar.vue#L495 &[src^="data"] { filter: none; } } } .bubble, .app-navigation-entry-menu, .popovermenu { position: absolute; background-color: var(--color-main-background); color: var(--color-main-text); border-radius: var(--border-radius-large); padding: 3px; z-index: 110; margin: 5px; margin-top: -5px; inset-inline-end: 0; filter: drop-shadow(0 1px 3px var(--color-box-shadow)); display: none; will-change: filter; &:after { bottom: 100%; // Required right-distance is half menu icon size + right padding // = 16px/2 + 14px = 22px // popover right margin is 5px, arrow width is 9px to center and border is 1px // 22px - 9px - 5px - 1px = 7px inset-inline-end: 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; } /* Center the popover */ &.menu-center { transform: translateX(50%); inset-inline-end: 50%; margin-inline-end: 0; &:after { inset-inline-end: 50%; transform: translateX(50%); } } /* Align the popover to the left */ &.menu-left { inset-inline: 0 auto; margin-inline-end: 0; &:after { inset-inline: 6px auto; } } &.open { display: block; } &.contactsmenu-popover { margin: 0; } ul { /* Overwrite #app-navigation > ul ul */ display: flex !important; flex-direction: column; } li { display: flex; flex: 0 0 auto; &.hidden { display: none; } > button, > a, > .menuitem { cursor: pointer; line-height: $popoveritem-height; border: 0; border-radius: var(--border-radius-large); 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; span[class^='icon-'], span[class*=' icon-'], &[class^='icon-'], &[class*=' icon-'] { min-width: 0; /* Overwrite icons*/ min-height: 0; 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: #{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-']) { > span, > input, > form { &:not([class^='icon-']):not([class*='icon-']):first-child { margin-inline-start: $popoveritem-height; } } } &[class^='icon-'], &[class*=' icon-'] { padding: 0 #{math.div($popoveritem-height - $popovericon-size, 2)} 0 $popoveritem-height !important; } &:hover, &:focus { background-color: var(--color-background-hover); } &:focus, &:focus-visible { box-shadow: 0 0 0 2px var(--color-primary-element); } &.active { border-radius: var(--border-radius-element); background-color: var(--color-primary-element-light); } /* prevent .action class to break the design */ &.action { padding: inherit !important; } > span { cursor: pointer; white-space: nowrap; } > p { width: 150px; line-height: 1.6em; padding: 8px 0; white-space: normal; } > select { margin: 0; margin-inline-start: 6px; } /* Add padding if contains icon+text */ &:not(:empty) { padding-inline-end: $outter-margin !important; } /* DEPRECATED! old img in popover fallback * TODO: to remove */ > img { width: $popovericon-size; padding: #{math.div($popoveritem-height - $popovericon-size, 2)}; } /* checkbox/radio fixes */ > input.radio + label, > input.checkbox + label { padding: 0 !important; width: 100%; } > input.checkbox + label::before { margin: -2px 13px 0; } > input.radio + label::before { margin: -2px 12px 0; } > input:not([type=radio]):not([type=checkbox]):not([type=image]) { width: 150px; } form { display: flex; flex: 1 1 auto; /* put a small space between text and form if there is an element before */ align-items: center; &:not(:first-child) { margin-inline-start: 5px; } } /* no margin if hidden span before */ > span.hidden + form, > span[style*='display:none'] + form { margin-inline-start: 0; } /* Inputs inside popover supports text, submit & reset */ input { min-width: $popoveritem-height; max-height: #{$popoveritem-height - 4px}; /* twice the element margin-y */ margin: 2px 0; flex: 1 1 auto; // space between inline inputs &:not(:first-child) { margin-inline-start: 5px; } } } /* css hack, only first not hidden */ &:not(.hidden):not([style*='display:none']) { &:first-of-type { > button, > a, > .menuitem { > form, > input { margin-top: $outter-margin - 2px; // minus the input margin } } } &:last-of-type { > button, > a, > .menuitem { > form, > input { margin-bottom: 0px; } } } } > button { padding: 0; span { opacity: 1; } } } } .popovermenu { li { > button, > a, > .menuitem { /* DEPRECATED! old img in popover fallback * TODO: to remove */ > img { width: $popoveritem-height; height: $popoveritem-height; } } } } #contactsmenu .contact .popovermenu { li { > a { > img { width: 16px; height: 16px; } } } } /* CONTENT LIST ------------------------------------------------------------ */ .app-content-list { position: -webkit-sticky; position: relative; top: 0; border-inline-end: 1px solid var(--color-border); display: flex; flex-direction: column; transition: transform 250ms ease-in-out; min-height: 100%; max-height: 100%; overflow-y: auto; overflow-x: hidden; flex: 1 1 variables.$list-min-width; min-width: variables.$list-min-width; max-width: variables.$list-max-width; /* Default item */ .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-item-menu { > [class^='icon-'], > [class*=' icon-'] { order: 4; width: 24px; height: 24px; margin: -7px; // right padding of item padding: 22px; opacity: .3; cursor: pointer; &:hover, &:focus { opacity: .7; } &[class^='icon-star'], &[class*=' icon-star'] { opacity: .7; &:hover, &:focus { opacity: 1 ; } } &.icon-starred { opacity: 1 ; } } } &:hover, &:focus, &.active { background-color: var(--color-background-dark); // display checkbox on hover/focus/active .app-content-list-item-checkbox.checkbox + label { display: flex; } } .app-content-list-item-checkbox.checkbox + label, .app-content-list-item-star { position: absolute; height: 40px; width: 40px; z-index: 50; } .app-content-list-item-checkbox.checkbox { &:checked, &:hover, &:focus, &.active { + label { // display checkbox if checked display: flex; // if checked, lower the opacity of the avatar + .app-content-list-item-icon { opacity: .7; } } } + label { top: 14px; inset-inline-start: 7px; // hidden by default, only chown on hover-focus or if checked display: none; &::before { margin: 0; } /* Hide the star, priority to the checkbox */ ~ .app-content-list-item-star { display: none; } } } .app-content-list-item-star { display: flex; top: 10px; inset-inline-start: 32px; background-size: 16px; height: 20px; width: 20px; margin: 0; padding: 0; } .app-content-list-item-icon { position: absolute; display: inline-block; height: 40px; width: 40px; line-height: 40px; border-radius: 50%; vertical-align: middle; margin-inline-end: 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-item-line-one, .app-content-list-item-line-two { display: block; padding-inline: 50px 10px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; order: 1; flex: 1 1 0px; cursor: pointer; } .app-content-list-item-line-two { opacity: .5; order: 3; flex: 1 0; flex-basis: calc(100% - var(--default-clickable-area)); } .app-content-list-item-details { order: 2; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 100px; opacity: .5; font-size: 80%; user-select: none; } .app-content-list-item-menu { order: 4; position: relative; .popovermenu { margin: 0; // action icon have -7px margin // default popover is normally 5px inset-inline-end: -2px; } } } &.selection .app-content-list-item-checkbox.checkbox + label { display: flex; } } .button.primary.skip-navigation:focus-visible { box-shadow: 0 0 0 4px var(--color-main-background) !important; outline: 2px solid var(--color-main-text) !important; }