/* Kanban board theme aligned with public/css/site.css */ html, body.kanban-page { height: 100%; } body.kanban-page { margin: 0; overflow: hidden; background: radial-gradient(75rem 35rem at -12% -18%, #dae8ff 0%, transparent 44%), radial-gradient(68rem 32rem at 115% -16%, #d8f3ff 0%, transparent 40%), linear-gradient(180deg, #eef4ff 0%, #f4f8ff 58%, #f3f7ff 100%); } /* Top bar */ body.kanban-page .navbar { position: sticky; top: 0; z-index: 1000; border-bottom: 1px solid rgba(255, 255, 255, 0.18); backdrop-filter: blur(9px); background: linear-gradient(120deg, #102241 0%, #173a72 56%, #1c4c90 100%); box-shadow: 0 8px 24px rgba(8, 20, 48, 0.26); } body.kanban-page .navbar-brand { color: #f4f8ff !important; letter-spacing: -0.01em; } .board-header-main { min-width: 0; } .board-header-actions { flex-shrink: 0; } .board-header-search { width: min(440px, 36vw); margin: 0 0.75rem; } .board-header-search .input-group-text { border-color: rgba(214, 229, 250, 0.7); background: rgba(255, 255, 255, 0.15); color: #eff6ff; } .board-header-search .form-control { border-color: rgba(214, 229, 250, 0.7); background: rgba(255, 255, 255, 0.17); color: #f5f9ff; } .board-header-search .form-control::placeholder { color: rgba(235, 243, 255, 0.72); } .board-header-search .form-control:focus { border-color: rgba(235, 245, 255, 0.95); box-shadow: 0 0 0 0.2rem rgba(157, 194, 245, 0.25); background: rgba(255, 255, 255, 0.23); } .kanban-board-title { display: block; min-width: 0; max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: clamp(1rem, 0.6vw + 0.95rem, 1.28rem); } body.kanban-page .navbar .btn-outline-light, body.kanban-page .navbar .btn-outline-secondary { border-color: rgba(213, 230, 255, 0.55) !important; color: #eef5ff !important; background: rgba(255, 255, 255, 0.06); } body.kanban-page .navbar .btn-outline-light:hover, body.kanban-page .navbar .btn-outline-secondary:hover { background: rgba(255, 255, 255, 0.16); border-color: rgba(234, 243, 255, 0.85) !important; } /* Board wrapper */ .kanban-wrapper { width: 100%; margin: 0 auto; height: calc(100vh - 65px); overflow-x: auto; overflow-y: auto; padding: 0.9rem 1rem 1.1rem; -webkit-overflow-scrolling: touch; scroll-behavior: smooth; touch-action: pan-x pan-y; overscroll-behavior: contain; scrollbar-width: thin; scrollbar-color: #8fb0e0 #dce8f8; scrollbar-gutter: stable; } .kanban-grid { display: grid; width: max-content; min-width: 100%; border: 1px solid var(--line, #d9e3f5); border-radius: 14px; background: rgba(255, 255, 255, 0.72); box-shadow: 0 12px 34px rgba(22, 48, 92, 0.12); overflow: clip; } /* Sticky corner and headers */ .kanban-corner { position: sticky; top: 0; left: 0; z-index: 40; min-width: 240px; min-height: 56px; background: linear-gradient(135deg, #173864 0%, #1e4d8f 100%); border-right: 1px solid rgba(255, 255, 255, 0.15); border-bottom: 1px solid rgba(255, 255, 255, 0.15); } .kanban-col-header { position: sticky; top: 0; z-index: 30; min-width: 230px; padding: 0.75rem 0.88rem; color: #eff5ff; font-size: clamp(0.68rem, 0.16vw + 0.65rem, 0.78rem); font-weight: 700; text-transform: uppercase; letter-spacing: 0.06em; white-space: normal; line-height: 1.22; word-break: break-word; overflow-wrap: anywhere; background: linear-gradient(120deg, #173864 0%, #1e4d8f 100%); border-left: 1px solid rgba(255, 255, 255, 0.16); } .kanban-lane-header { position: sticky; left: 0; z-index: 20; min-width: 240px; display: flex; align-items: center; gap: 0.42rem; padding: 0.85rem 0.82rem; font-size: clamp(0.7rem, 0.14vw + 0.66rem, 0.78rem); font-weight: 700; color: #2a3a58; background: linear-gradient(180deg, #f6faff 0%, #edf3ff 100%); border-top: 1px solid #d7e1f5; border-right: 1px solid #d4deef; } .kanban-lane-header .lane-label { display: inline-block; max-width: 100%; white-space: normal; line-height: 1.2; word-break: break-word; overflow-wrap: anywhere; } .kanban-lane-header .lane-toggle { display: inline-flex; align-items: center; justify-content: center; width: 1.34rem; height: 1.34rem; padding: 0; border: 0; border-radius: 999px; background: rgba(26, 74, 145, 0.12); color: #1f4f96; cursor: pointer; flex: 0 0 auto; } .kanban-lane-header .lane-toggle:hover { background: rgba(26, 74, 145, 0.22); } .kanban-lane-header .lane-toggle i { transition: transform 140ms ease; } .kanban-lane-header.lane-collapsed .lane-toggle i { transform: rotate(-90deg); } /* Cells */ .kanban-cell { min-width: 230px; min-height: 132px; padding: 0.56rem; border-top: 1px solid #dce5f4; border-left: 1px solid #dce5f4; display: flex; flex-direction: column; gap: 0.45rem; vertical-align: top; background: linear-gradient(180deg, rgba(255, 255, 255, 0.88) 0%, rgba(244, 248, 255, 0.93) 100%); } .kanban-cell.lane-collapsed { min-height: 0; max-height: 0; padding-top: 0; padding-bottom: 0; border-top-color: transparent; overflow: hidden; pointer-events: none; } .kanban-cell.lane-collapsed .kanban-card { display: none !important; } .kanban-cell.drag-over { background: linear-gradient(180deg, #e9f2ff 0%, #deecff 100%); box-shadow: inset 0 0 0 2px rgba(19, 99, 223, 0.24); } /* Cards */ .kanban-card { border: 1px solid #d5e1f6; border-radius: 12px; background: #ffffff; padding: 0.56rem 0.62rem; cursor: pointer; user-select: none; box-shadow: 0 4px 12px rgba(16, 44, 90, 0.08); transition: transform 120ms ease, box-shadow 140ms ease, border-color 120ms ease; touch-action: manipulation; } .kanban-card:hover { transform: translateY(-1px); border-color: #8eb0ea; box-shadow: 0 10px 22px rgba(16, 44, 90, 0.14); } .kanban-card.sortable-ghost { opacity: 0.38; } .kanban-card.sortable-chosen { border-color: #4d87e2; box-shadow: 0 14px 30px rgba(17, 46, 94, 0.22); } .kanban-card-hidden { display: none !important; } .card-headline { display: flex; align-items: center; gap: 0.38rem; min-width: 0; } .card-job-number { display: inline-block; padding: 0.08rem 0.42rem; border-radius: 999px; font-size: 0.66rem; font-weight: 800; letter-spacing: 0.07em; text-transform: uppercase; color: #0e4fae; background: #e7f0ff; flex: 0 0 auto; } .card-customer { font-size: 0.78rem; font-weight: 600; color: #2b4a80; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .card-meta { display: flex; flex-wrap: wrap; gap: 0.5rem; margin-top: 0.25rem; } .card-meta-label { font-size: 0.63rem; font-weight: 700; color: #7a90b2; text-transform: uppercase; letter-spacing: 0.05em; } .card-delivery, .card-qty { font-size: 0.73rem; color: #3a5080; } .card-notes { margin-top: 0.22rem; font-size: 0.71rem; color: #647899; line-height: 1.3; } /* Settings panel */ .kanban-settings-overlay { position: fixed; inset: 0; z-index: 1040; background: rgba(13, 25, 48, 0.42); backdrop-filter: blur(2px); } .kanban-settings-panel { position: fixed; top: 0; right: 0; width: min(420px, 94vw); max-width: 100vw; height: 100%; z-index: 1050; background: linear-gradient(180deg, #f7fbff 0%, #f1f6ff 100%); border-left: 1px solid #d8e2f2; box-shadow: -8px 0 28px rgba(19, 40, 81, 0.2); display: flex; flex-direction: column; overflow: hidden; transform: translateX(104%); transition: transform 180ms cubic-bezier(0.2, 0.7, 0.2, 1); will-change: transform; } .kanban-settings-panel.open { transform: translateX(0); } .settings-header { background: rgba(255, 255, 255, 0.7); border-bottom-color: #dce6f5 !important; } .settings-header h6 { letter-spacing: -0.01em; } .settings-body { flex: 1; overflow-y: auto; } .settings-body .list-group-item { border-color: #d7e2f4; border-radius: 10px !important; margin-bottom: 0.45rem; background: #ffffff; box-shadow: 0 3px 9px rgba(25, 45, 84, 0.05); } .settings-sortable .drag-handle { color: #8fa1bf !important; } .settings-sortable .drag-handle:hover { color: var(--brand, #1363df) !important; } .inline-rename { height: auto; font-size: 0.84rem; padding: 0.23rem 0.45rem; } /* Modal polish */ #cardModal .modal-content { border: 1px solid #d7e2f5; border-radius: 14px; box-shadow: 0 22px 48px rgba(18, 43, 83, 0.22); } #cardModal .modal-header { border-bottom-color: #dfe8f7; background: #f7fbff; } #cardModal .modal-footer { border-top-color: #dfe8f7; background: #fbfdff; } /* Scrollbars */ .kanban-wrapper::-webkit-scrollbar, .settings-body::-webkit-scrollbar { width: 12px; height: 12px; } .kanban-wrapper::-webkit-scrollbar-track, .settings-body::-webkit-scrollbar-track { background: #dce8f8; border-radius: 999px; } .kanban-wrapper::-webkit-scrollbar-thumb, .settings-body::-webkit-scrollbar-thumb { background: #8fb0e0; border-radius: 999px; border: 2px solid #dce8f8; } .kanban-wrapper::-webkit-scrollbar-thumb:hover, .settings-body::-webkit-scrollbar-thumb:hover { background: #5e8ecb; } .kanban-wrapper::-webkit-scrollbar-corner { background: #dce8f8; } /* Small screens */ @media (max-width: 900px) { .kanban-wrapper { padding: 0.7rem; height: calc(100vh - 62px); } .kanban-corner, .kanban-lane-header { min-width: 190px; } .kanban-col-header, .kanban-cell { min-width: 206px; } .kanban-board-title { font-size: clamp(0.92rem, 2.8vw, 1.1rem); } .board-header-actions { gap: 0.35rem !important; } .board-header-search { width: min(270px, 44vw); margin: 0 0.35rem; } .board-header-actions .btn { padding-left: 0.48rem; padding-right: 0.48rem; } } @media (max-width: 640px) { .board-header-search { width: 100%; margin: 0.5rem 0 0; order: 3; } body.kanban-page .navbar { flex-wrap: wrap; align-items: flex-start !important; } .board-header-main { flex: 1 1 auto; } .board-header-actions { flex: 0 0 auto; } .kanban-settings-panel { width: 100vw; border-left: 0; box-shadow: none; } .settings-body { padding-bottom: 1.25rem; } }