egroupware_official/kdots/css/kdots.css
nathan 48220b8b14 kdots improvements:
- Fix infinite loop in updateComplete()
- hide/show sides now return updateComplete promise
- If etemplate has only 1 rendered template, and that template has a slot, move the whole etemplate (DOMContainer) not just the et2-template
2025-03-03 14:00:45 -07:00

677 lines
19 KiB
CSS

/**
* kDots main styles
*
* Note that light / dark colors should go in kdots_light.less & kdots_dark.less
*/
/** Theme customisations **/
@import "../../node_modules/bootstrap-icons/font/bootstrap-icons.min.css";
:root,
:host,
html,
.sl-theme-light {
/*
color token generator using #0053c9
https://codepen.io/claviska/full/QWveRgL
*/
--sl-color-primary-50: #f7fafd;
--sl-color-primary-100: #e4edf9;
--sl-color-primary-200: #d0dff5;
--sl-color-primary-300: #bad0f0;
--sl-color-primary-400: #9cbcea;
--sl-color-primary-500: #75a2e2;
--sl-color-primary-600: #4984d8;
--sl-color-primary-700: #2169d0;
--sl-color-primary-800: #0051c5;
--sl-color-primary-900: #003a8d;
--sl-color-primary-950: #002458;
--sl-shadow-x-small: 0 1px 2px hsla(240, 3.8%, 46.1%, 0.24);
--sl-shadow-small: 0 1px 2px hsla(240, 3.8%, 46.1%, 0.48);
--sl-shadow-medium: 0 2px 4px hsla(240, 3.8%, 46.1%, 0.48);
--sl-shadow-large: 0 2px 8px hsla(240, 3.8%, 46.1%, 0.48);
--sl-shadow-x-large: 0 4px 16px hsla(240, 3.8%, 46.1%, 0.48);
}
html[data-darkmode="1"],
.sl-theme-dark {
background-color: black;
color: var(--sl-color-neutral-700);
--sl-color-primary-950: hsl(from var(--primary-color) h s calc(l + 18));
--sl-color-primary-900: hsl(from var(--primary-color) h s calc(l + 16));
--sl-color-primary-800: hsl(from var(--primary-color) h s calc(l + 12));
--sl-color-primary-700: hsl(from var(--primary-color) h s calc(l + 8));
--sl-color-primary-600: hsl(from var(--primary-color) h s calc(l + 4));
--sl-color-primary-500: var(--primary-color);
--sl-color-primary-400: hsl(from var(--primary-color) h s calc(l - 4));
--sl-color-primary-300: hsl(from var(--primary-color) h s calc(l - 8));
--sl-color-primary-200: hsl(from var(--primary-color) h s calc(l - 12));
--sl-color-primary-100: hsl(from var(--primary-color) h s calc(l - 16));
--sl-color-primary-50: hsl(from var(--primary-color) h s calc(l - 18));
/*** HEADER ***/
/*** APPLICATION ***/
/*** End APPLICATION ***/
/*** WIDGETS ***/
/* This should mostly go away with webcomponents */
/** End WIDGETS **/
}
html[data-darkmode="1"] #egw_fw_topmenu_info_items #topmenu_info_timer:before,
.sl-theme-dark #egw_fw_topmenu_info_items #topmenu_info_timer:before {
filter: initial;
}
html[data-darkmode="1"] egw-app,
.sl-theme-dark egw-app {
--application-header-text-color: var(--sl-color-neutral-700);
}
html[data-darkmode="1"] .et2_container,
.sl-theme-dark .et2_container {
background-color: initial;
}
html[data-darkmode="1"] .dialogFooterToolbar et2-button::part(base):not(:hover),
.sl-theme-dark .dialogFooterToolbar et2-button::part(base):not(:hover),
html[data-darkmode="1"] et2-dialog et2-button[variant='default'][slot='footer']::part(base):not(:hover),
.sl-theme-dark et2-dialog et2-button[variant='default'][slot='footer']::part(base):not(:hover) {
background-color: var(--sl-input-background-color);
}
html[data-darkmode="1"] .nextmatch_sortheader,
.sl-theme-dark .nextmatch_sortheader {
color: #96bcd9;
}
/** End theme customisations **/
/* BI icons */
.bi::before,
[class^="bi-"]::before,
[class*=" bi-"]::before {
vertical-align: middle;
}
html,
body {
width: 100vw;
height: 100vh;
overflow: clip;
padding: 0px;
margin: 0px;
/** Messages **/
/** end messages **/
}
html .sl-toast-stack,
body .sl-toast-stack {
top: auto;
bottom: 0px;
}
html .sl-toast-stack sl-alert et2-checkbox,
body .sl-toast-stack sl-alert et2-checkbox {
padding-top: var(--sl-spacing-large);
}
html #egw_message,
body #egw_message {
display: none;
}
.egw_menu::part(popup) {
z-index: var(--sl-z-index-dropdown);
}
egw-framework#egw_fw_basecontainer {
--icon-size: 32px;
--sl-tooltip-arrow-size: 0;
/* Internals */
/* Content slotted inside */
}
egw-framework#egw_fw_basecontainer::part(status-split) {
/* This limits the max size of the status panel */
--max: 32px;
}
egw-framework#egw_fw_basecontainer::part(header) {
--icon-size: 32px;
--tab-icon-size: var(--icon-size);
--tab-icon-size-active: 40px;
color: var(--primary-background-color);
gap: var(--sl-spacing-medium);
font-size: var(--icon-size);
}
egw-framework#egw_fw_basecontainer [slot="logo"] img {
max-width: 220px;
max-height: var(--icon-size);
display: block;
text-align: center;
}
egw-framework#egw_fw_basecontainer sl-icon-button[slot="header"],
egw-framework#egw_fw_basecontainer et2-image[slot="header"] {
font-size: var(--icon-size);
color: inherit;
}
egw-framework#egw_fw_basecontainer div#egw_fw_toggler {
position: initial;
display: none;
}
egw-framework#egw_fw_basecontainer #egw_fw_topmenu_info_items {
position: relative;
order: 99;
margin-left: auto;
display: flex;
}
egw-framework#egw_fw_basecontainer #egw_fw_topmenu_info_items .topmenu_info_item {
min-width: 1em;
min-height: 1em;
}
egw-framework#egw_fw_basecontainer div#egw_fw_sidebar_r {
position: initial;
top: initial;
}
egw-framework#egw_fw_basecontainer div#egw_fw_sidebar_r et2-avatar,
egw-framework#egw_fw_basecontainer div#egw_fw_sidebar_r et2-lavatar {
--size: 26px;
}
egw-framework#egw_fw_basecontainer .egw_fw_ui_sidemenu_entry_header {
display: flex;
gap: var(--sl-spacing-medium);
padding-left: 1em;
}
/*** HEADER ***/
#egw_fw_topmenu_info_items {
display: flex;
flex-direction: row-reverse;
align-items: stretch;
}
#egw_fw_topmenu_info_items > * {
border: none;
background-color: transparent;
}
#egw_fw_topmenu_info_items et2-avatar {
--size: var(--icon-size);
}
#egw_fw_topmenu_info_items et2-avatar::part(base) {
vertical-align: initial;
}
#egw_fw_topmenu_info_items .topmenu_info_item {
height: var(--icon-size);
width: var(--icon-size);
display: inline-block;
padding-left: 0px;
background-size: 20px;
background-position: center center;
background-repeat: no-repeat;
cursor: pointer;
}
#egw_fw_topmenu_info_items .topmenu_info_item:hover {
background-color: var(--sl-input-background-color-hover);
}
#egw_fw_topmenu_info_items et2-button-icon::part(base) {
padding: 0;
}
#egw_fw_topmenu_info_items #topmenu_info_timer {
order: 1;
position: relative;
display: flex;
align-items: center;
padding: 0px;
}
#egw_fw_topmenu_info_items #topmenu_info_timer #topmenu_timer {
display: block;
width: 100%;
z-index: 2;
}
#egw_fw_topmenu_info_items #topmenu_info_timer:hover {
cursor: pointer;
}
#egw_fw_topmenu_info_items #topmenu_info_timer:before {
content: "";
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-image: url(../../timesheet/templates/default/images/navbar.svg);
background-repeat: no-repeat;
background-size: 32px;
background-position: center center;
filter: opacity(0.3);
}
#egw_fw_topmenu_info_items #topmenu_info_quick_add {
position: relative;
}
#egw_fw_topmenu_info_items #topmenu_info_quick_add span#quick_add {
display: block;
background-image: url(../../node_modules/bootstrap-icons/icons/plus-circle.svg);
background-repeat: no-repeat;
background-size: 24px;
background-position: center;
width: 100%;
height: 100%;
padding-right: 3px;
}
#egw_fw_topmenu_info_items #topmenu_info_quick_add span#quick_add:before {
content: " ";
font-size: 2em;
line-height: 0.6em;
background-color: white;
}
#egw_fw_topmenu_info_items #topmenu_info_quick_add #quick_add_selectbox {
height: 0px;
display: inline-block;
text-align: initial;
}
#egw_fw_topmenu_info_items #topmenu_info_quick_add #quick_add_selectbox sl-option {
white-space: nowrap;
}
#egw_fw_topmenu_info_items #topmenu_info_quick_add #quick_add_selectbox::part(emptyLabel) {
/* do NOT show empty label, required for clearing value */
display: none;
}
#egw_fw_topmenu_info_items #topmenu_info_quick_add #quick_add_selectbox::part(form-control-input),
#egw_fw_topmenu_info_items #topmenu_info_quick_add #timer_selectbox::part(form-control-input) {
border: none !important;
}
#egw_fw_topmenu_info_items #topmenu_info_quick_add #quick_add_selectbox::part(form-control),
#egw_fw_topmenu_info_items #topmenu_info_quick_add #timer_selectbox::part(form-control) {
margin-left: -3em;
}
#egw_fw_topmenu_info_items #topmenu_info_quick_add #quick_add_selectbox::part(listbox),
#egw_fw_topmenu_info_items #topmenu_info_quick_add #timer_selectbox::part(menu) {
max-height: 60vh;
}
#egw_fw_topmenu_info_items #topmenu_info_quick_add #quick_add_selectbox {
height: 0px;
overflow: hidden;
}
#egw_fw_topmenu_info_items #topmenu_info_quick_add #quick_add_selectbox::part(combobox) {
visibility: hidden;
}
#egw_fw_topmenu_info_items #topmenu_info_user_avatar sl-menu-item et2-image {
width: 1em;
}
#egw_fw_topmenu_info_items button#topmenu_info_search {
background-image: url(../../api/templates/default/images/topmenu_items/search.svg);
}
#topmenu_info_print_title {
background-image: url(../../../api/templates/default/images/print.svg);
}
#topmenu_info_print_title span {
width: 45px;
height: 45px;
display: inline-block;
}
/* popup copied from pixelegg */
#egwpopup {
top: 46px;
right: 0 !important;
left: auto !important;
height: calc(100% - 69px);
width: 277px !important;
position: absolute;
background: #fff;
border: 1px solid silver;
border-top: none;
border-bottom: none;
padding: 1em;
/*Button*/
}
#egwpopup input#egwpopup_ok_button,
#egwpopup button#desktop_perms {
padding: 0 5px;
}
#egwpopup #egwpopup_list::-webkit-scrollbar-track {
-webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);
background-color: #fafafa;
}
#egwpopup #egwpopup_list::-webkit-scrollbar {
width: 4px;
background-color: #fafafa;
}
#egwpopup #egwpopup_list::-webkit-scrollbar-thumb {
background-color: #6a6f71;
}
#egwpopup #egwpopup_list {
overflow-y: auto;
height: calc(100% - 52px);
}
#egwpopup #egwpopup_list .egwpopup_time_label {
width: 100%;
color: #fafafa;
text-align: center;
font-style: italic;
opacity: 0.5;
font-size: 10pt;
background: #255ea5;
font-weight: bold;
}
#egwpopup #egwpopup_list span.egwpopup_delete {
display: inline-block;
float: right;
width: 24px;
height: 24px;
background-image: url(../../node_modules/bootstrap-icons/icons/trash3.svg);
background-repeat: no-repeat;
background-position: center;
background-size: 12px;
cursor: pointer;
}
#egwpopup #egwpopup_list .egwpopup_mark {
display: inline-block;
float: right;
width: 10px;
height: 10px;
border: 1px solid #b9436c;
border-radius: 50%;
margin: 7px;
background: #b9436c;
cursor: pointer;
}
#egwpopup #egwpopup_list .egwpopup_message {
height: auto;
overflow: hidden;
padding: 10px;
background-color: #fafafa;
margin-bottom: 5px;
}
#egwpopup #egwpopup_list .egwpopup_message:hover {
background-color: rgba(103, 159, 210, 0.2);
}
#egwpopup #egwpopup_list .egwpopup_message .egwpopup_message_inner_container {
height: 63px;
overflow: hidden;
}
#egwpopup #egwpopup_list .egwpopup_message .egwpopup_message_inner_container a {
max-width: 60em;
display: inline-block;
overflow-wrap: break-word;
vertical-align: text-top;
}
#egwpopup #egwpopup_list .egwpopup_message .egwpopup_message_top_toolbar {
display: inline-block;
width: 100%;
}
#egwpopup #egwpopup_list .egwpopup_message .egwpopup_message_top_toolbar .egwpopup_message_date {
float: left;
color: #767676;
}
#egwpopup #egwpopup_list .egwpopup_message .egwpopup_message_top_toolbar .egwpopup_message_open {
display: inline-block;
float: right;
width: 24px;
height: 24px;
background-image: url(../../node_modules/bootstrap-icons/icons/search.svg);
background-repeat: no-repeat;
background-position: center;
background-size: 12px;
cursor: pointer;
}
#egwpopup #egwpopup_list .egwpopup_message .egwpopup_message_top_toolbar .egwpopup_collapse {
display: none;
}
#egwpopup #egwpopup_list .egwpopup_message .egwpopup_actions_container {
text-align: center;
}
#egwpopup #egwpopup_list .egwpopup_message .egwpopup_actions_container > button {
height: 24px;
width: 80px;
border: none;
background: #e6e6e6;
background-size: 16px;
background-position: 12px center;
background-repeat: no-repeat;
padding-left: 26px;
}
#egwpopup #egwpopup_list .egwpopup_message .egwpopup_message_more_info {
color: #767676;
padding-top: 5px;
padding-bottom: 5px;
}
#egwpopup #egwpopup_list .egwpopup_message span.egwpopup_nav_prev,
#egwpopup #egwpopup_list .egwpopup_message span.egwpopup_nav_next {
display: none;
}
#egwpopup #egwpopup_list .egwpopup_message.egwpopup_expanded {
position: fixed;
top: 85px;
height: calc(100% - 130px);
left: 20vw;
width: 60vw;
box-shadow: 0 0 40px #666;
overflow: auto;
}
#egwpopup #egwpopup_list .egwpopup_message.egwpopup_expanded:hover {
background-color: #fafafa;
}
#egwpopup #egwpopup_list .egwpopup_message.egwpopup_expanded .egwpopup_message_inner_container {
height: calc(100% - 62px);
overflow: auto;
}
#egwpopup #egwpopup_list .egwpopup_message.egwpopup_expanded .egwpopup_collapse {
float: right;
width: 24px;
height: 24px;
background-image: url(../../node_modules/bootstrap-icons/icons/x-lg.svg);
background-repeat: no-repeat;
background-position: center;
background-size: 12px;
cursor: pointer;
display: inline-block;
}
#egwpopup #egwpopup_list .egwpopup_message.egwpopup_expanded .egwpopup_message_more_info {
display: none;
}
#egwpopup #egwpopup_list .egwpopup_message.egwpopup_expanded span.egwpopup_nav_prev {
display: inline-block;
float: right;
width: 24px;
height: 24px;
background-image: url(../../node_modules/bootstrap-icons/icons/arrow-bar-left.svg);
background-repeat: no-repeat;
background-position: center;
background-size: 16px;
cursor: pointer;
}
#egwpopup #egwpopup_list .egwpopup_message.egwpopup_expanded .egwpopup_nav_disable {
opacity: 0.5;
pointer-events: none;
}
#egwpopup #egwpopup_list .egwpopup_message.egwpopup_expanded span.egwpopup_nav_next {
display: inline-block;
float: right;
width: 24px;
height: 24px;
background-image: url(../../node_modules/bootstrap-icons/icons/arrow-bar-right.svg);
background-repeat: no-repeat;
background-position: center;
background-size: 16px;
cursor: pointer;
}
#egwpopup #egwpopup_list .egwpopup_message_seen .egwpopup_mark {
cursor: auto;
background: none;
border-color: #666c6e;
}
#egwpopup #egwpopup_list .egwpopup_message_clone {
border: 2px dashed silver;
opacity: 0.3;
height: 125px;
}
#egwpopup div#egwpopup_header {
font-size: 16px;
color: silver;
text-align: center;
padding: 15px;
}
#egwpopup div#egwpopup_header .egwpopup_seenall {
float: right;
width: 10px;
height: 10px;
border: 1px solid silver;
border-radius: 50%;
cursor: pointer;
margin: 4px 0px 0px 0px;
}
#egwpopup div#egwpopup_header .egwpopup_seenall:hover {
border-color: gray;
background: rgba(103, 159, 210, 0.2);
}
#egwpopup div#egwpopup_header .egwpopup_deleteall {
background-image: url(../../node_modules/bootstrap-icons/icons/trash3.svg);
width: 12px;
height: 12px;
background-position: center;
background-size: 12px;
float: right;
background-repeat: no-repeat;
margin-right: 15px;
margin-top: 4px;
cursor: pointer;
display: inline-block;
opacity: 0.5;
}
#egwpopup div#egwpopup_header .egwpopup_deleteall:hover {
opacity: 1;
}
/*** END HEADER ***/
/*** APPLICATION ***/
egw-app {
/* Application template gets full height */
}
egw-app::part(name) {
display: flex;
align-items: center;
text-wrap: nowrap;
}
egw-app::part(content) {
flex-direction: column;
overflow-y: hidden;
}
egw-app > div[id] > div,
egw-app > div[id] > et2-template {
height: 100%;
}
/* Individual application colors, should go in each app's CSS */
body,
:root {
--addressbook-color: #003366;
--admin-color: #333333;
--bookmarks-color: #CC6633;
--calendar-color: #CC0033;
--filemanager-color: #ff9933;
--infolog-color: #660033;
--mail-color: #006699;
--projectmanager-color: #669999;
--resources-color: #003333;
--timesheet-color: #330066;
--tracker-color: #009966;
--wiki-color: #797979;
--ranking-color: #404040;
--default-color: #797979;
--kanban-color: #4663c8;
}
body egw-app[name="addressbook"],
:root egw-app[name="addressbook"] {
--application-color: var(--addressbook-color);
}
body egw-app[name="admin"],
:root egw-app[name="admin"] {
--application-color: var(--admin-color);
}
body egw-app[name="bookmarks"],
:root egw-app[name="bookmarks"] {
--application-color: var(--bookmarks-color);
}
body egw-app[name="calendar"],
:root egw-app[name="calendar"] {
--application-color: var(--calendar-color);
}
body egw-app[name="filemanager"],
:root egw-app[name="filemanager"] {
--application-color: var(--filemanager-color);
}
body egw-app[name="infolog"],
:root egw-app[name="infolog"] {
--application-color: var(--infolog-color);
}
body egw-app[name="mail"],
:root egw-app[name="mail"] {
--application-color: var(--mail-color);
}
body egw-app[name="projectmanager"],
:root egw-app[name="projectmanager"] {
--application-color: var(--projectmanager-color);
}
body egw-app[name="resources"],
:root egw-app[name="resources"] {
--application-color: var(--resources-color);
}
body egw-app[name="timesheet"],
:root egw-app[name="timesheet"] {
--application-color: var(--timesheet-color);
}
body egw-app[name="tracker"],
:root egw-app[name="tracker"] {
--application-color: var(--tracker-color);
}
body egw-app[name="wiki"],
:root egw-app[name="wiki"] {
--application-color: var(--wiki-color);
}
body egw-app[name="ranking"],
:root egw-app[name="ranking"] {
--application-color: var(--ranking-color);
}
/*** END APPLICATION ***/
/*** WIDGETS ***/
/* This should mostly go away with webcomponents */
/* Show something for undefined widget */
*:not(:defined) {
background-size: contain;
background-image: url(../../node_modules/bootstrap-icons/icons/question-circle.svg);
}
/* Get nextmatch sizing more nicely without messing with dynheight */
div.et2_nextmatch {
display: flex;
flex-direction: column;
align-items: stretch;
height: 100%;
width: 100%;
overflow: hidden;
}
div.et2_nextmatch > div:not(:first-child) {
flex: 1 1 100%;
max-height: 100%;
}
div.et2_nextmatch .egwGridView_outer {
border-collapse: collapse;
}
div.et2_nextmatch .egwGridView_outer thead > tr {
background-color: var(--sl-color-neutral-50);
border-bottom: var(--sl-panel-border-width) solid var(--sl-color-neutral-200);
}
div.et2_nextmatch .egwGridView_outer thead > tr th {
border-right: var(--sl-panel-border-width) solid var(--sl-color-neutral-200);
}
div.et2_nextmatch .egwGridView_outer thead > tr th div.innerContainer {
max-height: 10em;
overflow-x: hidden;
overflow-y: auto;
}
div.et2_nextmatch .egwGridView_outer thead > tr th.optcol span.selectcols {
height: 9px;
padding: 4px 14px 0 2px;
margin-top: 4px;
background-image: url(../../api/templates/default/images/selectcols.svg);
background-repeat: no-repeat;
background-size: 10px 10px;
display: inline-block;
background-position: top;
}
div.et2_nextmatch .egwGridView_outer .egwGridView_scrollarea {
overflow-x: hidden;
overflow-y: auto;
}
div.et2_nextmatch .egwGridView_outer .egwGridView_scrollarea table {
border-collapse: collapse;
}
div.et2_nextmatch .egwGridView_outer .egwGridView_scrollarea table tr {
border-bottom: var(--sl-panel-border-width) solid var(--sl-color-neutral-200);
}
div.et2_nextmatch .egwGridView_outer .egwGridView_scrollarea table tr.selected {
background-color: var(--highlight-background-color);
}
div.et2_toolbar .et2_toolbar_actionlist > span {
gap: var(--sl-spacing-small);
}
div.et2_toolbar .et2_toolbar_actionlist > span * {
margin-right: 0px;
}
/*** END WIDGETS ***/