wekan/client/components/boards/boardsList.css
copilot-swe-agent[bot] 97dd5d2064 Resolve merge conflicts by accepting PR #6131 changes
Co-authored-by: xet7 <15545+xet7@users.noreply.github.com>
2026-02-07 16:30:08 +00:00

899 lines
20 KiB
CSS

@import url("../../../css/reset.css") print, screen;
/* Board List Header */
.board-list-header:not(:empty) {
display: flex;
justify-content: center;
margin: 1vh 0 2vh 0;
padding: 1vh 0;
}
/* Two-column layout for All Boards */
.boards-layout {
display: grid;
gap: 1ch;
/* menu takes the space it needs, boards has the rest */
grid-template-columns: minmax(max-content, 250px) 1fr;
justify-content: stretch;
align-items: stretch;
}
body:not(.mobile-mode) .boards-layout {
padding: 1vmax;
}
body.mobile-mode .boards-layout {
grid-auto-flow: row;
grid-template-rows: 1fr auto;
grid-template-columns: minmax(auto, 100vw);
}
.boards-left-menu {
display: flex;
flex-direction: column;
align-items: stretch;
border-right: 1px solid #e0e0e0;
overflow: visible;
align-self: stretch;
min-width: max-content;
flex: 1;
}
.boards-left-menu .menu-item a {
display: flex;
justify-content: space-between;
align-items: center;
border-radius: 0.4ch;
cursor: pointer;
}
.boards-left-menu .menu-item .menu-label {
flex: 1;
padding: 0.3lh;
}
.boards-left-menu .menu-item .menu-count {
display: flex;
align-items: center;
justify-content: center;
background: #ddd;
margin-right: 0.4ch;
aspect-ratio: 1 / 1;
border-radius: 50%;
padding: 0.2em;
font-size: 0.8em;
min-width: 3ch;
font-weight: bold;
}
.boards-left-menu .menu-item.active a,
.boards-left-menu .menu-item a:hover {
background: #f0f0f0;
}
.boards-left-menu .menu-item.active .menu-count {
background: #bbb;
}
/* Drag-over state for menu items (for dropping boards on Remaining) */
.boards-left-menu .menu-item a.drag-over {
background: #d0e8ff;
border: 2px dashed #2196F3;
}
.boards-right-grid {
display: flex;
flex-direction: column;
gap: 1vmax;
/* hackish way to make the item grow only when wrapping, i.e. with no
other competing item on the cross axis */
flex: 10 1 0;
}
.workspaces-header {
display: flex;
align-items: center;
justify-content: space-between;
font-weight: bold;
padding: 0.3lh 0.8ch;
gap: 0.3lh;
}
.workspaces-header .js-add-space {
text-decoration: none;
font-weight: bold;
border: 1px solid #ccc;
padding: 2px 8px;
border-radius: 0.4ch;
}
.workspace-tree {
list-style: none;
padding-left: 10px;
}
.workspace-node {
margin: 2px 0;
position: relative;
}
.workspace-node-content {
display: flex;
align-items: center;
gap: 2ch;
justify-content: end;
flex: 1;
padding: 0.3lh 1ch 0 2ch;
border-radius: 0.4ch;
transition: background-color 0.2s;
}
.workspace-node.dragging > .workspace-node-content {
opacity: 0.5;
background: #e0e0e0;
}
.workspace-node.drag-over > .workspace-node-content {
background: #d0e8ff;
border: 2px dashed #2196F3;
}
.workspace-drag-handle {
cursor: grab;
color: #999;
padding: 0 4px;
user-select: none;
}
.workspace-drag-handle:active {
cursor: grabbing;
}
.workspace-node .js-select-space {
display: flex;
align-items: center;
gap: 6px;
padding: 4px 8px;
border-radius: 0.4ch;
cursor: pointer;
flex: 1;
text-decoration: none;
}
.workspace-node .workspace-icon {
line-height: 1;
}
.workspace-node .workspace-name {
flex: 1;
}
.workspace-node .workspace-count {
background: #ddd;
padding: 2px 6px;
border-radius: 10px;
font-weight: bold;
min-width: 20px;
text-align: center;
}
.workspace-node .js-edit-space,
.workspace-node .js-add-subspace {
padding: 2px 6px;
border-radius: 3px;
cursor: pointer;
text-decoration: none;
opacity: 0.6;
transition: opacity 0.2s;
}
.workspace-node .js-edit-space:hover,
.workspace-node .js-add-subspace:hover {
opacity: 1;
background: #e0e0e0;
}
.workspace-node.active > .workspace-node-content .js-select-space,
.workspace-node > .workspace-node-content:hover .js-select-space {
background: #f0f0f0;
}
.workspace-node.active .workspace-count {
background: #bbb;
}
.boards-left-menu .menu {
display: flex;
flex-direction: column;
gap: 0.3lh;
padding-bottom: 0.3lh;
}
.boards-path-header {
display: flex;
flex-direction: column;
background: #f5f5f5;
border-radius: 6px;
font-weight: 500;
min-height: 2lh;
justify-content: center;
.path-left {
display: flex;
align-items: center;
gap: 1ch;
flex: 1;
}
.path-top {
display: flex;
flex: 1;
justify-content: center;
gap: 1ch;
}
.path-bottom {
display: flex;
align-items: stretch;
justify-content: space-between;
gap: 1ch;
padding: 0 0.5ch;
}
}
.multiselection-hint {
background: #FFF3CD;
color: #856404;
border-radius: 0.4ch;
padding: 0.2lh 0.5ch;
font-weight: normal;
border: 1px solid #FFE69C;
animation: pulse 2s ease-in-out infinite;
display: flex;
flex: 1;
font-size: 0.8em;
>span {
flex: 1;
align-self: center;
}
}
@keyframes pulse {
0%, 100% { opacity: 1; }
50% { opacity: 0; }
}
.boards-path-header .path-right {
display: flex;
align-items: center;
gap: 0.5lh;
}
.boards-path-header .path-right button {
margin: 0;
}
.boards-path-header .path-icon {
}
.boards-path-header .path-text {
color: #333;
}
.boards-path-header .board-header-btn {
min-width: 4ch;
min-height: 4ch;
display: flex;
justify-content: center;
align-self: center;
align-items: center;
}
.boards-path-header .board-header-btn:hover {
background: #f0f0f0;
border-color: #bbb;
}
.boards-path-header .board-header-btn.js-multiselection-activate {
&.emphasis {
background: #2196F3;
color: #fff;
border-color: #2196F3;
box-shadow: 0 2px 8px rgba(33, 150, 243, 0.5);
}
font-weight: bold;
align-self: stretch;
align-items: center;
display: flex;
justify-content: center;
flex: 1;
min-width: 4ch;
font-size: 1em;
border-radius: 0.6ch;
}
.boards-path-header .board-header-btn.emphasis:hover {
background: #1976D2;
box-shadow: 0 3px 12px rgba(33, 150, 243, 0.7);
}
.boards-path-header .board-header-btn-close {
align-self: stretch;
align-items: center;
display: flex;
justify-content: center;
flex: 1;
border-radius: 0.6ch;
min-width: 4ch;
background: #f44336;
color: #000;
border: none;
cursor: pointer;
font-size: 1em;
}
.boards-path-header .board-header-btn-close:hover {
background: #d32f2f;
}
.board-list {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(30ch, 1fr));
grid-auto-rows: 7lh;
gap: 0.5lh 0.5lh;
align-items: start;
}
.board-list .details {
height: fit-content;
}
.board-list .board-list-item-name .viewer {
min-height: 0;
}
.board-list .board-list-item-name p {
margin: 0;
}
.board-list li.placeholder:after {
content: '';
display: block;
background: #ccc;
border-radius: 3px;
height: 106px;
margin: 8px;
}
.board-list li.ui-sortable-helper {
cursor: grabbing;
transform: rotate(4deg);
display: block !important;
}
.board-list li.starred .is-star-active,
.board-list li.starred .is-not-star-active {
opacity: 1;
color: #ffd700;
}
/* Show star icon on hover even for non-starred boards */
.board-list li:hover .is-star-active,
.board-list li:hover .is-not-star-active {
opacity: 1;
}
.board-list {
.js-board, .js-add-board {
display: flex;
overflow: hidden;
background-color: inherit;
min-height: 4lh !important;
min-width: min-content;
height: 100%;
/* Inherit board color from parent li.js-board */
color: #f6f6f6;
border-radius: 0.5ch;
/* No border-radius - parent .js-board has it */
font-weight: 700;
position: relative;
text-decoration: none;
overflow-wrap: break-word;
box-sizing: border-box;
justify-content: center;
align-items: stretch;
>a {
display: flex;
align-items: center;
justify-content: stretch;
flex: 1;
}
}
.board-list-item {
display: flex;
text-align: center;
justify-content: center;
align-items: center;
gap: 1ch;
flex: 1;
padding: 0 1ch;
}
}
.board-list .board-list-item .board-card-header {
display: flex;
justify-content: center;
align-items: center;
gap: 0.3lh;
}
.board-list .board-list-item {
font-size: var(--list-item-size);
}
.board-list .board-list-item .board-card-footer {
display: flex;
justify-content: center;
box-sizing: border-box;
padding: 0.1ch 0.1lh;
}
.board-list .board-list-item > .js-open-board {
text-decoration: none;
color: inherit;
display: block;
}
.board-list .board-list-item.tile {
background-size: auto;
background-repeat: repeat;
}
.board-list .board-list-item-sub-name {
color: rgba(255,255,255,0.5);
display: block;
font-weight: 400;
line-height: 22px;
}
.board-list .board-list-item-desc {
color: #fff;
display: block;
font-weight: 400;
line-height: 18px;
}
.board-list .js-add-board .label {
font-weight: normal;
display: flex;
align-items: center;
font-size: var(--list-item-size);
font-weight: bold;
justify-content: center;
background-color: #999; /* Darker background for better text contrast */
color: #fff; /* White text */
}
.board-list .js-add-board .label i {
color: #fff; /* White icon */
}
.board-list .js-add-board .label:hover {
background-color: #808080; /* Even darker on hover */
}
.board-list .js-add-board .label:hover i {
color: #fff; /* Keep icon white on hover */
}
.board-list .is-star-active,
.board-list .is-not-star-active {
opacity: 0;
transition-duration: 0.15s;
transition-property: color, font-size, background;
}
.board-list .fa-circle {
bottom: 0;
position: absolute;
right: 0;
transition-duration: 0.15s;
transition-property: color, font-size, background;
}
.board-list .has-overtime-card-active {
color: #eb4646 !important;
}
.board-list .no-overtime-card-active {
color: #3cb500 !important;
}
.board-list .is-star-active {
color: #fff;
}
.board-list .fa-clone {
line-height: 18px;
transition-duration: 0.15s;
transition-property: color, font-size, background;
}
.board-list .fa-archive {
position: absolute;
opacity: 0;
transition-duration: 0.15s;
transition-property: color, font-size, background;
}
.board-list li:hover a:hover .is-star-active,
.board-list li:hover a:hover .fa-clone,
.board-list li:hover a:hover .fa-archive,
.board-list li:hover a:hover .is-not-star-active {
color: #fff;
}
.board-list li:hover a .is-star-active,
.board-list li:hover a .fa-clone,
.board-list li:hover a .fa-archive,
.board-list li:hover a .is-not-star-active {
color: #fff;
opacity: 0.75;
}
.board-list li:hover a .is-star-active:hover,
.board-list li:hover a .fa-clone:hover,
.board-list li:hover a .fa-archive:hover,
.board-list li:hover a .is-not-star-active:hover {
opacity: 1;
}
.board-list li:hover a .is-star-active,
.board-list li:hover a .fa-clone,
.board-list li:hover a .fa-archive,
.board-list li:hover a .is-not-star-active {
opacity: 1;
}
/* Board drag handle - always visible and positioned at top */
.board-list .board-handle {
color: #fff;
background: rgba(0,0,0,0.4);
border-radius: 0.4ch;
display: flex;
align-items: center;
justify-content: center;
z-index: 10;
transition: background-color 0.2s ease;
cursor: grab;
opacity: 1;
user-select: none;
}
.board-list .board-handle:active {
cursor: grabbing;
}
.board-list .board-handle:hover {
background: rgba(255, 255, 0, 0.8) !important;
color: #000;
}
/* used to animate checkbox when added
without messing with the event/activation system */
@keyframes revealCheckBox {
from { opacity: 0; }
to { opacity: 1; }
}
.board-list .board-list-item .multi-selection-checkbox{
display: flex;
align-self: center;
width: 2ch;
height: 2ch;
}
.board-list .board-list-item .multi-selection-checkbox.is-checked {
background: #3cb500;
border-color: #3cb500;
box-shadow: 0 2px 8px rgba(60, 181, 0, 0.6);
width: 2ch !important;
height: 2ch !important;
top: auto !important;
transform: none !important;
border-radius: 0.4ch !important;
}
.board-list .board-list-item .multi-selection-checkbox.is-checked::after {
content: '✓';
color: #fff;
font-weight: bold;
position: absolute;
left: 0.4ch;
top: -0.2ch;
}
/* Multiselection checkbox on board items */
.board-list .board-list-item .multi-selection-checkbox:where(.active) {
border: none;
box-shadow: 0 0 0 3px #fff;
/* get back margin from box-shadow */
background: rgba(0,0,0,0.5);
outline-color: transparent;
border-radius: 0.4ch;
cursor: pointer;
z-index: 11;
align-items: center;
justify-content: center;
animation: 0.2s ease-out 0s 1 revealCheckBox;
&:hover {
background: rgba(0, 0, 0, 0.7);
transform: scale(1.15) !important;
box-shadow: 0 3px 6px rgba(0, 0, 0, 0.5);
}
&.is-checked {
background: #3cb500;
border-color: #3cb500;
box-shadow: 0 3px 6px #3cb500;
&::after {content: '✅';
color: #fff;
font-size: 1em;
font-weight: bold;
}
}
}
/* Grey checkboxes when grey icons setting is enabled */
body.grey-icons-enabled .board-list .board-list-item .multi-selection-checkbox.is-checked {
background: #7a7a7a;
border-color: #7a7a7a;
box-shadow: 0 2px 8px rgba(122, 122, 122, 0.6);
}
body.grey-icons-enabled .board-list.is-multiselection-active .js-board.is-checked {
outline: 4px solid #7a7a7a;
box-shadow: 0 4px 12px rgba(122, 122, 122, 0.4);
}
.board-list.is-multiselection-active .js-board.is-checked {
outline: 4px solid #3cb500;
outline-offset: -2px;
box-shadow: 0 4px 12px rgba(60, 181, 0, 0.4);
}
/* Visual hint when multiselection is active */
.board-list.is-multiselection-active .board-list-item {
outline: 2px dashed rgba(33, 150, 243, 0.3);
}
.board-backgrounds-list {
display: grid;
grid-template-columns: 1fr 1fr;
grid-auto-rows: 3lh;
justify-items: stretch;
gap: 1ch;
}
.board-backgrounds-list .board-background-select {
box-sizing: border-box;
display: flex;
position: relative;
z-index: 1;
}
.board-backgrounds-list .board-background-select .background-box {
color: #fff;
display: flex;
border-radius: 0.4ch;
flex: 1;
align-items: center;
justify-content: center;
gap: 1ch;
font-size: 1.1em;
cursor: pointer;
}
.board-backgrounds-list .board-background-select .background-box i.fa-check {
color: #3cb500;
}
/* Grey check icons when grey icons setting is enabled */
body.grey-icons-enabled .board-backgrounds-list .board-background-select .background-box i.fa-check {
color: #7a7a7a;
}
/* Prevent Grey Icons from affecting checkmarks in background color list */
body.grey-icons-enabled .checkmark-no-grey {
filter: none !important;
-webkit-filter: none !important;
}
/* Mobile view styles - applied when isMiniScreen is true (iPhone, etc.) */
.board-list.mobile-view {
overflow-y: scroll !important;
overflow-x: hidden;
margin: 0;
scrollbar-width: auto !important;
scrollbar-color: #888 #f1f1f1;
display: flex;
flex-direction: column;
align-items: stretch;
margin: 0 0.5ch;
gap: 0.3lh;
}
.board-list.mobile-view .board-list-item-sub-name {
position: relative;;
}
.board-list.mobile-view .board-handle:hover {
background: rgba(255, 255, 0, 0.8) !important; /* Yellow hover */
}
/* Force scrollbar to be visible on mobile view */
.board-list.mobile-view::-webkit-scrollbar {
width: 12px !important;
display: block !important;
visibility: visible !important;
}
.board-list.mobile-view::-webkit-scrollbar-track {
background: #f1f1f1 !important;
border-radius: 6px !important;
display: block !important;
visibility: visible !important;
}
.board-list.mobile-view::-webkit-scrollbar-thumb {
background: #888 !important;
border-radius: 6px !important;
display: block !important;
visibility: visible !important;
}
.board-list.mobile-view::-webkit-scrollbar-thumb:hover {
background: #555 !important;
}
/* Hide archive and clone board buttons in mobile view */
.board-list.mobile-view .js-archive-board,
.board-list.mobile-view .js-clone-board {
display: none !important;
}
/* Change board drag handle to up-down arrow in mobile view */
.board-list.mobile-view .board-handle.fa-arrows::before {
content: "↕️" !important;
font-family: inherit !important;
}
.AllBoardTeamsOrgs {
list-style-type: none;
overflow: hidden;
}
#filterBtn,
#resetBtn {
display: inline;
}
#resetBtn.filter-reset-btn {
background: #f44336;
color: #000;
border: none;
border-radius: 0.4ch;
cursor: pointer;
display: inline-flex;
align-items: center;
gap: 6px;
transition: background 0.2s;
}
#resetBtn.filter-reset-btn:hover {
background: #d32f2f;
}
#resetBtn.filter-reset-btn .reset-icon {
}
.js-board {
background-color: #999; /* Default gray background if no color class is applied */
border-radius: 3px; /* Rounded corners for board items */
overflow: hidden; /* Ensure children respect rounded corners */
}
/* Reset background for add-board button */
.js-add-board {
background-color: transparent !important;
}
/* Apply board colors to li.js-board parent instead of just the link */
.board-list .board-color-nephritis { background-color: #27ae60; }
.board-list .board-color-pomegranate { background-color: #c0392b; }
.board-list .board-color-belize { background-color: #2980b9; }
.board-list .board-color-wisteria { background-color: #8e44ad; }
.board-list .board-color-midnight { background-color: #2c3e50; }
.board-list .board-color-pumpkin { background-color: #e67e22; }
.board-list .board-color-moderatepink { background-color: #cd5a91; }
.board-list .board-color-strongcyan { background-color: #00aecc; }
.board-list .board-color-limegreen { background-color: #4bbf6b; }
.board-list .board-color-dark { background-color: #2c3e51; }
.board-list .board-color-relax { background-color: #27ae61; }
.board-list .board-color-corteza { background-color: #568ba2; }
.board-list .board-color-clearblue { background-color: #3498db; }
.board-list .board-color-natural { background-color: #596557; }
.board-list .board-color-modern { background-color: #2a80b8; }
.board-list .board-color-moderndark { background-color: #2a2a2a; }
.board-list .board-color-exodark { background-color: #222; }
.minicard-members {
display: flex;
justify-content: stretch;
}
.minicard-lists:has(*) {
margin: 0 auto;
max-width: 95%;
height: 100%;
}
.flex {
display: flex;
}
.flex-wrap {
flex-wrap: wrap;
}
.flex-wrap .item {
margin: 2px;
padding-right: 6px;
text-align: center;
}
/* Fix multiple scrollbars issue on mobile */
@media screen and (max-width: 800px),
screen and (max-device-width: 800px),
screen and (-webkit-min-device-pixel-ratio: 2) and (max-width: 800px),
screen and (max-width: 800px) and (orientation: portrait),
screen and (max-width: 800px) and (orientation: landscape),
screen and (max-device-width: 932px) and (-webkit-min-device-pixel-ratio: 3) {
.wrapper {
overflow: hidden;
}
.board-list {
overflow-y: scroll !important;
overflow-x: hidden !important;
-webkit-overflow-scrolling: touch;
scrollbar-width: thin;
scrollbar-color: #888 #f1f1f1;
}
/* Force scrollbar to always be visible */
.board-list::-webkit-scrollbar {
width: 12px !important;
display: block !important;
visibility: visible !important;
}
.board-list::-webkit-scrollbar-track {
background: #f1f1f1 !important;
border-radius: 6px !important;
display: block !important;
visibility: visible !important;
}
.board-list::-webkit-scrollbar-thumb {
background: #888 !important;
border-radius: 6px !important;
display: block !important;
visibility: visible !important;
}
.board-list::-webkit-scrollbar-thumb:hover {
background: #555 !important;
}
/* Ensure scrollbar is always visible */
.board-list::-webkit-scrollbar-corner {
background: #f1f1f1 !important;
}
/* Force scrollbar to be visible */
.board-list {
scrollbar-gutter: stable;
scrollbar-width: auto !important;
}
/* Ensure only one scrollbar is visible */
body {
overflow: hidden;
}
#content {
overflow: hidden;
display: flex;
flex: 1;
}
/* Hide archive and clone board buttons in mobile view */
.board-list .js-archive-board,
.board-list .js-clone-board {
display: none !important;
}
/* Change board drag handle to up-down arrow in mobile view */
.board-list .board-handle.fa-arrows::before {
content: "↕️" !important;
font-family: inherit !important;
}
}