mirror of
https://github.com/wekan/wekan.git
synced 2026-02-09 01:34:21 +01:00
738 lines
No EOL
16 KiB
CSS
738 lines
No EOL
16 KiB
CSS
.list:not(.mobile-view, .list-composer) {
|
|
box-sizing: border-box;
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-self: start;
|
|
position: relative;
|
|
background: #dedede;
|
|
border-left: 1px solid #ccc;
|
|
padding: 0;
|
|
/* so we get the computed minimal width, if no setting exist */
|
|
width: var(--list-width, min-content) !important;
|
|
min-width: var(--list-min-width, 200) !important;
|
|
max-width: var(--list-max-width, auto) !important;
|
|
/* Both needs to be set to 0 so that resize works; but implies overflowing without size constraints */
|
|
flex-grow: 0;
|
|
flex-shrink: 0;
|
|
z-index: 0;
|
|
/* So that sortable area is the tallest possible
|
|
⚠️ This will make swimlane resizes less fluid, because height
|
|
is re-applied in realtime, rather than the list being hidden
|
|
by swimlane. Maybe there is another way.*/
|
|
height: var(--swimlane-height, 100%);
|
|
}
|
|
|
|
.list.mobile-view {
|
|
max-height: 100%;
|
|
}
|
|
|
|
/* List resize handle */
|
|
.list-resize-handle {
|
|
position: absolute;
|
|
top: 0;
|
|
right: 0;
|
|
width: max(0.7ch, 0.3lh);
|
|
cursor: col-resize;
|
|
z-index: 0;
|
|
/* Ensure the handle is clickable */
|
|
pointer-events: auto;
|
|
height: 100%;
|
|
transition: all 0.2s ease-out;
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
.add-card-wrapper {
|
|
display: flex;
|
|
flex: 1;
|
|
justify-content: center;
|
|
align-items: stretch;
|
|
min-height: 2lh;
|
|
> {
|
|
display: flex;
|
|
align-items: center;
|
|
}
|
|
}
|
|
|
|
/* Show resize handle only on hover */
|
|
.list:hover .list-resize-handle, .list.list-resizing .list-resize-handle {
|
|
background: rgba(0, 123, 255, 0.2);
|
|
border-left: 1px solid rgba(0, 123, 255, 0.5);
|
|
}
|
|
|
|
|
|
.list:not(.cannot-resize) {
|
|
&:hover + .list-resize-handle, + .list-resize-handle:hover {
|
|
border-left: 1px solid rgba(0, 123, 255, 0.5);
|
|
background: rgba(0, 123, 255, 0.2);
|
|
border-radius: 0;
|
|
}
|
|
.list-resize-handle:hover, &.list-resizing .list-resize-handle {
|
|
background: rgba(0, 123, 255, 0.3);
|
|
}
|
|
}
|
|
|
|
|
|
/* Add a subtle indicator line */
|
|
.list-resize-handle::before {
|
|
content: '';
|
|
position: absolute;
|
|
top: 50%;
|
|
left: 50%;
|
|
transform: translate(-50%, -50%);
|
|
width: 2px;
|
|
height: 20px;
|
|
background: rgba(0, 0, 0, 0.2);
|
|
border-radius: 1px;
|
|
opacity: 0;
|
|
transition: opacity 0.2s ease-out;
|
|
|
|
}
|
|
|
|
.list-resize-handle:hover::before, .list.list-resizing + .list-resize-handle:hover::before {
|
|
opacity: 1;
|
|
}
|
|
|
|
/* Disable resize handle for collapsed lists and mobile view */
|
|
.list.list-collapsed .list-resize-handle,
|
|
.list.mobile-view .list-resize-handle {
|
|
display: none;
|
|
}
|
|
|
|
/* Disable resize handle for auto-width lists */
|
|
.list.list-auto-width .list-resize-handle {
|
|
display: none;
|
|
}
|
|
|
|
.list.list-resizing.cannot-resize .list-resize-handle {
|
|
background: rgba(227, 64, 83, 0.5) !important;
|
|
border-left: 1px solid rgba(155, 32, 46, 0.5);
|
|
}
|
|
|
|
body.list-resizing-active {
|
|
cursor: col-resize !important;
|
|
user-select: none !important;
|
|
}
|
|
|
|
body.list-resizing-active * {
|
|
cursor: col-resize !important;
|
|
user-select: none !important;
|
|
}
|
|
|
|
|
|
body.mobile-mode {
|
|
.list-header:not(.open-list-composer) {
|
|
.list-header-name-container {
|
|
justify-content: start;
|
|
}
|
|
}
|
|
}
|
|
|
|
.list-header-add {
|
|
display: flex;
|
|
justify-content: center;
|
|
>.inlined-form {
|
|
padding: 1ch;
|
|
}
|
|
}
|
|
.list-header:not(.open-list-composer) {
|
|
overflow: hidden !important;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
column-gap: 0.5lh;
|
|
row-gap: 0.5lh;
|
|
flex-shrink: 0;
|
|
background-color: #e4e4e4;
|
|
padding: 0.5lh;
|
|
.list-header-name-container {
|
|
display: grid;
|
|
/* by default, grid fill row before columns */
|
|
grid-auto-flow: column;
|
|
align-items: center;
|
|
justify-content: center;
|
|
flex: 1; /* so we can see the ellipsis */
|
|
max-width: 90%;
|
|
gap: 0.5ch;
|
|
flex-shrink: 0;
|
|
cursor: grab;
|
|
}
|
|
.list-header-menu {
|
|
width: max-content;
|
|
align-items: center;
|
|
gap: .5rlh;
|
|
}
|
|
&:not(:has(.list-rotated), :is(.list-header-name-container)) {
|
|
.list-header-name-container {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
gap: 1ch;
|
|
align-items: center;
|
|
}
|
|
}
|
|
&:has(.list-rotated) {
|
|
.list-header-name-container {
|
|
/* this time we switch to a vertical layout, justified "top" */
|
|
grid-auto-flow: row;
|
|
align-items: start;
|
|
align-content: start;
|
|
justify-items: center;
|
|
flex: 0;
|
|
gap: 0.3lh;
|
|
}
|
|
}
|
|
.viewer p {
|
|
/* cf https://developer.mozilla.org/fr/docs/Web/CSS/Reference/Properties/text-overflow */
|
|
white-space: nowrap;
|
|
overflow: scroll;
|
|
text-overflow: ellipsis;
|
|
}
|
|
}
|
|
|
|
.mini-list {
|
|
.list-header {
|
|
padding: 0.5lh 2ch;
|
|
}
|
|
.list-header-name-container {
|
|
/* on mobile, put card count below list name for a nice alignement effect */
|
|
grid-auto-flow: row;
|
|
gap: 0;
|
|
}
|
|
}
|
|
|
|
/* Ensure title text doesn't cause height changes for all lists */
|
|
.list-header .list-header-name {
|
|
font-weight: bold;
|
|
/* Ensure it doesn't overflow */
|
|
overflow: hidden !important;
|
|
}
|
|
|
|
.list-header .list-header-name p {
|
|
margin: 0;
|
|
}
|
|
|
|
.list-header .list-header-wrap {
|
|
display: flex;
|
|
}
|
|
|
|
/* Position drag handle at top-right corner for ALL lists */
|
|
.list-header .list-header-handle {
|
|
align-self: end;
|
|
/* Ensure it's clickable and shows proper cursor */
|
|
cursor: move !important;
|
|
pointer-events: auto !important;
|
|
}
|
|
|
|
.list:not:has(.list-header-add) {
|
|
/* so that absolute handle is positionned relative to the list */
|
|
position: relative;
|
|
&:last-child {
|
|
/* hackisk compensation of the handle "gap" effect; to be done better */
|
|
border-right: 1px solid #bbb;
|
|
}
|
|
height: 100%;
|
|
}
|
|
|
|
.list.list-composer {
|
|
display: flex;
|
|
justify-content: center;
|
|
min-width: 4ch;
|
|
padding-top: 0.5lh;
|
|
}
|
|
.list.list-auto-width {
|
|
flex: 1;
|
|
}
|
|
.card-details + .list {
|
|
border-left: none;
|
|
}
|
|
.list.ui-sortable-helper {
|
|
box-shadow: -2px 2px 8px rgba(0,0,0,0.3), 0 0 1px rgba(0,0,0,0.5);
|
|
transform: rotate(4deg);
|
|
cursor: grabbing;
|
|
}
|
|
.list.ui-sortable-helper .list-header.ui-sortable-handle {
|
|
cursor: grabbing;
|
|
}
|
|
.list.placeholder {
|
|
background-color: rgba(0,0,0,0.2);
|
|
border-color: transparent;
|
|
box-shadow: none;
|
|
height: 15vh;
|
|
}
|
|
.list.list-collapsed {
|
|
overflow: hidden !important;
|
|
/* strict sizing when collapsed because no resizing
|
|
and constant, vertical layout */
|
|
min-width: fit-content !important;
|
|
width: fit-content !important;
|
|
max-width: fit-content !important;
|
|
}
|
|
|
|
.list.list-collapsed .list-header {
|
|
flex-direction: column !important;
|
|
overflow: visible !important;
|
|
gap: 0.2lh !important;
|
|
justify-content: flex-start !important;
|
|
min-width: 5ch;
|
|
/* spans the whole swimlane */
|
|
flex: 1;
|
|
}
|
|
|
|
.list.list-composer .open-list-composer,
|
|
.list .list-composer .open-list-composer {
|
|
color: #8c8c8c;
|
|
min-width: max-content;
|
|
}
|
|
.list.list-composer .list-name-input,
|
|
.list .list-composer .list-name-input {
|
|
background: #fff;
|
|
display: flex;
|
|
flex: 1;
|
|
max-height: 2lh;
|
|
}
|
|
.list-rotated {
|
|
flex: 1;
|
|
writing-mode: vertical-rl;
|
|
}
|
|
|
|
body.mobile-mode .list-collapsed:nth-child(2n-1) > .list-header{
|
|
background-color: #f1f1f1;
|
|
}
|
|
|
|
body.mobile-mode .list-collapsed:nth-child(2n-2) > .list-header {
|
|
background-color: #f7f7f7;
|
|
}
|
|
|
|
.list-header .list-header-watch-icon {
|
|
padding-left: 10px;
|
|
color: #a6a6a6;
|
|
}
|
|
@media print {
|
|
.list-header .list-header-menu,
|
|
.list-header .list-header-menu-icon {
|
|
display: none;
|
|
}
|
|
}
|
|
.list-header .list-header-plus-top {
|
|
color: #a6a6a6;
|
|
vertical-align: middle;
|
|
line-height: 1.2;
|
|
}
|
|
.list-header .list-header-collapse-right {
|
|
color: #a6a6a6;
|
|
}
|
|
.list-header .list-header-collapse-left {
|
|
color: #a6a6a6;
|
|
margin-right: 15px;
|
|
}
|
|
.list-header .list-header-name-container p {
|
|
margin: 0;
|
|
}
|
|
|
|
.list-header .js-collapse {
|
|
position: absolute !important;
|
|
top: 5px !important;
|
|
left: 10px !important;
|
|
color: #a6a6a6;
|
|
border: none;
|
|
border-radius: 0;
|
|
background-color: transparent;
|
|
text-decoration: none;
|
|
}
|
|
.list-header .js-collapse:hover {
|
|
background-color: transparent;
|
|
color: #333;
|
|
}
|
|
|
|
.list.list-collapsed .list-header .js-collapse {
|
|
display: inline-block !important;
|
|
visibility: visible !important;
|
|
opacity: 1 !important;
|
|
}
|
|
|
|
/* Hide menu button in collapsed state */
|
|
.list.list-collapsed .list-header .js-open-list-menu,
|
|
.list.list-collapsed .list-header .list-header-menu {
|
|
display: none !important;
|
|
}
|
|
|
|
.list-header .highlight {
|
|
color: #ce1414;
|
|
}
|
|
.list-header .cardCount {
|
|
color: #8c8c8c;
|
|
font-size: 0.9em;
|
|
font-weight: normal;
|
|
text-wrap: nowrap;
|
|
}
|
|
.list-header,
|
|
.js-open-list-menu,
|
|
.list-header-menu a {
|
|
color: #4d4d4d;
|
|
vertical-align: middle;
|
|
line-height: 1.2;
|
|
}
|
|
.list-body {
|
|
/* do not set flex to avoid bad visual effects when resizing swimlanes */
|
|
flex-direction: column;
|
|
display: flex;
|
|
overflow-y: auto;
|
|
padding: 0.4lh 1ch;
|
|
flex: 1;
|
|
}
|
|
.minilists {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 0.5lh;
|
|
}
|
|
.minilist-wrapper > .minicard {
|
|
padding: 0.3lh 1ch;
|
|
.handle {
|
|
display: none;
|
|
}
|
|
}
|
|
.mobile-view {
|
|
.list-body {
|
|
flex: 1 0;
|
|
overflow-y: scroll;
|
|
}
|
|
&.list:not:has(.list-header-add) {
|
|
min-height: 50;
|
|
display: flex !important;
|
|
flex-direction: column;
|
|
align-items: stretch;
|
|
align-self: stretch;
|
|
justify-content: start;
|
|
}
|
|
}
|
|
|
|
.list-body .minicards {
|
|
flex-grow: 1;
|
|
flex-shrink: 0;
|
|
gap: 0.5lh;
|
|
display: flex;
|
|
flex-direction: column;
|
|
/** get card drag/drop working for empty swimlanes */
|
|
min-height: 10vh;
|
|
}
|
|
.list-body .minicards form {
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
flex: 1;
|
|
}
|
|
@media print {
|
|
.list-body .open-minicard-composer {
|
|
display: none;
|
|
}
|
|
}
|
|
|
|
.list-body .open-minicard-composer {
|
|
display: flex;
|
|
flex: 1;
|
|
border-radius: 0.4ch;
|
|
justify-content: center;
|
|
align-items: center;
|
|
font-size: 1.4em;
|
|
}
|
|
body.mobile-mode .list-body .open-minicard-composer, .list-body .open-minicard-composer:hover {
|
|
background: #fafafa;
|
|
color: #222;
|
|
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
|
|
}
|
|
#js-wip-limit-edit {
|
|
padding-top: 2%;
|
|
}
|
|
#js-wip-limit-edit p {
|
|
margin-bottom: 0;
|
|
}
|
|
#js-wip-limit-edit input {
|
|
display: inline-block;
|
|
}
|
|
#js-wip-limit-edit .wip-limit-value {
|
|
width: 20%;
|
|
margin-right: 5%;
|
|
}
|
|
#js-wip-limit-edit .wip-limit-error {
|
|
display: none;
|
|
}
|
|
#js-wip-limit-edit .soft-wip-limit {
|
|
margin-right: 8px;
|
|
}
|
|
#js-wip-limit-edit div {
|
|
float: left;
|
|
}
|
|
#js-list-width-edit .list-width-error {
|
|
display: none;
|
|
}
|
|
.js-select-cards {
|
|
max-width: 30ch;
|
|
text-overflow: ellipsis;
|
|
}
|
|
|
|
/* iPhone 12 Mini specific - fix icon positioning in stacked lists view */
|
|
@media screen and (device-width: 375px) and (device-height: 812px), /* iPhone 12 Mini exact */
|
|
screen and (max-width: 375px) and (max-height: 812px), /* iPhone 12 Mini viewport */
|
|
screen and (-webkit-min-device-pixel-ratio: 3) and (max-width: 375px) /* iPhone 12 Mini Retina */ {
|
|
.list.mobile-view .list-header {
|
|
/* Force grid layout for iPhone 12 Mini */
|
|
display: grid !important;
|
|
grid-template-columns: 30px 1fr auto auto !important;
|
|
gap: 10px !important;
|
|
align-items: center !important;
|
|
}
|
|
|
|
.list.mobile-view .list-header .list-header-menu-icon {
|
|
/* Remove absolute positioning for iPhone 12 Mini */
|
|
position: static !important;
|
|
right: auto !important;
|
|
top: auto !important;
|
|
transform: none !important;
|
|
/* Use grid positioning */
|
|
grid-row: 1/3 !important;
|
|
grid-column: 3 !important;
|
|
padding: 14px !important;
|
|
|
|
text-align: center !important;
|
|
}
|
|
|
|
.list.mobile-view .list-header .list-header-handle {
|
|
/* Remove absolute positioning for iPhone 12 Mini */
|
|
position: static !important;
|
|
right: auto !important;
|
|
top: auto !important;
|
|
transform: none !important;
|
|
/* Use grid positioning */
|
|
grid-row: 1/3 !important;
|
|
grid-column: 4 !important;
|
|
padding: 14px !important;
|
|
|
|
text-align: center !important;
|
|
}
|
|
|
|
.list.mobile-view .list-header .list-header-name {
|
|
grid-row: 1 !important;
|
|
grid-column: 2 !important;
|
|
align-self: end !important;
|
|
|
|
font-weight: bold !important;
|
|
line-height: 1.2 !important;
|
|
padding-bottom: 2px !important;
|
|
}
|
|
|
|
.list.mobile-view .list-header .cardCount {
|
|
grid-row: 2 !important;
|
|
grid-column: 2 !important;
|
|
align-self: start !important;
|
|
text-align: left !important;
|
|
padding-left: 0 !important;
|
|
margin-left: 0 !important;
|
|
|
|
line-height: 1.2 !important;
|
|
}
|
|
}
|
|
|
|
/* iPhone device JavaScript detection fallback - fix icon positioning */
|
|
.iphone-device .list.mobile-view .list-header {
|
|
/* Force grid layout for iPhone devices */
|
|
display: grid !important;
|
|
grid-template-columns: 30px 1fr auto auto !important;
|
|
gap: 10px !important;
|
|
align-items: center !important;
|
|
}
|
|
|
|
.iphone-device .list.mobile-view .list-header .list-header-menu-icon {
|
|
/* Remove absolute positioning for iPhone devices */
|
|
position: static !important;
|
|
right: auto !important;
|
|
top: auto !important;
|
|
transform: none !important;
|
|
/* Use grid positioning */
|
|
grid-row: 1/3 !important;
|
|
grid-column: 3 !important;
|
|
padding: 14px !important;
|
|
|
|
text-align: center !important;
|
|
}
|
|
|
|
.iphone-device .list.mobile-view .list-header .list-header-handle {
|
|
/* Remove absolute positioning for iPhone devices */
|
|
position: static !important;
|
|
right: auto !important;
|
|
top: auto !important;
|
|
transform: none !important;
|
|
/* Use grid positioning */
|
|
grid-row: 1/3 !important;
|
|
grid-column: 4 !important;
|
|
padding: 14px !important;
|
|
|
|
text-align: center !important;
|
|
}
|
|
|
|
.iphone-device .list.mobile-view .list-header .list-header-name {
|
|
grid-row: 1 !important;
|
|
grid-column: 2 !important;
|
|
align-self: end !important;
|
|
|
|
font-weight: bold !important;
|
|
line-height: 1.2 !important;
|
|
padding-bottom: 2px !important;
|
|
}
|
|
|
|
.iphone-device .list.mobile-view .list-header .cardCount {
|
|
grid-row: 2 !important;
|
|
grid-column: 2 !important;
|
|
align-self: start !important;
|
|
|
|
line-height: 1.2 !important;
|
|
}
|
|
|
|
.iphone-device .list.mobile-view .list-header .list-header-left-icon {
|
|
display: grid !important;
|
|
grid-row: 1/3 !important;
|
|
grid-column: 1 !important;
|
|
}
|
|
|
|
.list:not(.mobile-view):not(.list-collapsed) .list-header .list-header-name {
|
|
/* Permit wrapping and full visibility */
|
|
|
|
/* Break long words to avoid overflow */
|
|
white-space: nowrap;
|
|
overflow: scroll;
|
|
overflow-wrap: break-word !important;
|
|
text-overflow: clip;
|
|
}
|
|
.link-board-wrapper {
|
|
display: flex;
|
|
flex-direction: column;
|
|
padding: 0.3lh 1ch;
|
|
>form {
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: stretch;
|
|
flex: 1;
|
|
}
|
|
}
|
|
|
|
.link-board-dropdown {
|
|
display: grid;
|
|
grid-template-columns: 10ch auto;
|
|
gap: 0 1ch;
|
|
margin: 0.3lh 0;
|
|
grid-auto-columns: auto;
|
|
grid-auto-flow: column;
|
|
|
|
+ .edit-controls {
|
|
flex: 1;
|
|
justify-content: stretch;
|
|
>input {
|
|
flex: 1;
|
|
}
|
|
}
|
|
}
|
|
.search-card-results {
|
|
max-height: 250px;
|
|
overflow: hidden;
|
|
}
|
|
.sk-spinner-list {
|
|
margin-top: unset !important;
|
|
}
|
|
.list-header-white {
|
|
border-bottom: 6px solid #fff;
|
|
}
|
|
.list-header-green {
|
|
border-bottom: 6px solid #3cb500;
|
|
}
|
|
.list-header-yellow {
|
|
border-bottom: 6px solid #fad900;
|
|
}
|
|
.list-header-orange {
|
|
border-bottom: 6px solid #ff9f19;
|
|
}
|
|
.list-header-red {
|
|
border-bottom: 6px solid #eb4646;
|
|
}
|
|
.list-header-purple {
|
|
border-bottom: 6px solid #a632db;
|
|
}
|
|
.list-header-blue {
|
|
border-bottom: 6px solid #0079bf;
|
|
}
|
|
.list-header-pink {
|
|
border-bottom: 6px solid #ff78cb;
|
|
}
|
|
.list-header-sky {
|
|
border-bottom: 6px solid #00c2e0;
|
|
}
|
|
.list-header-black {
|
|
border-bottom: 6px solid #4d4d4d;
|
|
}
|
|
.list-header-lime {
|
|
border-bottom: 6px solid #51e898;
|
|
}
|
|
.list-header-silver {
|
|
border-bottom: 6px solid #e4e4e4;
|
|
}
|
|
.list-header-peachpuff {
|
|
border-bottom: 6px solid #ffdab9;
|
|
}
|
|
.list-header-crimson {
|
|
border-bottom: 6px solid #dc143c;
|
|
}
|
|
.list-header-plum {
|
|
border-bottom: 6px solid #dda0dd;
|
|
}
|
|
.list-header-darkgreen {
|
|
border-bottom: 6px solid #006400;
|
|
}
|
|
.list-header-slateblue {
|
|
border-bottom: 6px solid #6a5acd;
|
|
}
|
|
.list-header-magenta {
|
|
border-bottom: 6px solid #f0f;
|
|
}
|
|
.list-header-gold {
|
|
border-bottom: 6px solid #ffd700;
|
|
}
|
|
.list-header-navy {
|
|
border-bottom: 6px solid #000080;
|
|
}
|
|
.list-header-gray {
|
|
border-bottom: 6px solid #808080;
|
|
}
|
|
.list-header-saddlebrown {
|
|
border-bottom: 6px solid #8b4513;
|
|
}
|
|
.list-header-paleturquoise {
|
|
border-bottom: 6px solid #afeeee;
|
|
}
|
|
.list-header-mistyrose {
|
|
border-bottom: 6px solid #ffe4e1;
|
|
}
|
|
.list-header-indigo {
|
|
border-bottom: 6px solid #4b0082;
|
|
}
|
|
|
|
.list.list-collapsed .collapsed-list-drag-area {
|
|
width: 100%;
|
|
height: 60px;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
cursor: grab;
|
|
user-select: none;
|
|
}
|
|
.list.list-collapsed .collapsed-list-drag-area:active {
|
|
cursor: grabbing;
|
|
}
|
|
.list.list-collapsed .list-header-name-collapsed {
|
|
writing-mode: vertical-rl;
|
|
text-align: center;
|
|
font-size: 12px;
|
|
color: #333;
|
|
margin: 0;
|
|
padding: 0;
|
|
width: 100%;
|
|
white-space: nowrap;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
} |