.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; }