/* Shared Gantt grid. The root owns every width used by CSS and pointer gestures. */
.board-gantt-overlay {
    position: fixed;
    inset: 0;
    z-index: 24000;
    display: grid;
    place-items: center;
    padding: 12px;
    background: rgb(0 0 0 / 52%);
    color: var(--ui-text);
}
.board-gantt-project {
    --gantt-day-width: 42px;
    --gantt-col-title: 280px;
    --gantt-col-people: 160px;
    --gantt-col-status: 120px;
    --gantt-col-start: 124px;
    --gantt-col-due: 124px;
    --gantt-group-accent: var(--ui-warning);
    --gantt-grid-width: calc(var(--gantt-col-title) + var(--gantt-col-people) + var(--gantt-col-status) + var(--gantt-col-start) + var(--gantt-col-due));
    --gantt-timeline-width: calc(var(--gantt-days) * var(--gantt-day-width));
    display: flex;
    flex-direction: column;
    width: calc(100vw - 24px);
    height: calc(100dvh - 24px);
    min-width: 0;
    min-height: 0;
    overflow: hidden;
    border: 1px solid var(--ui-line);
    border-radius: 10px;
    background: var(--ui-panel);
    color: var(--ui-text);
    color-scheme: var(--ui-scheme);
    font-size: 12px;
    font-weight: 400;
    line-height: 1.4;
    box-shadow: 0 24px 80px rgb(0 0 0 / 46%);
}
.board-gantt-project, .board-gantt-project * { box-sizing: border-box; }
.board-gantt-overlay:has(.is-fullscreen) { padding: 0; }
.board-gantt-project.is-fullscreen { width: 100vw; height: 100dvh; border: 0; border-radius: 0; }

.board-gantt-header {
    display: flex;
    flex: 0 0 auto;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    padding: 10px 14px;
    border-bottom: 1px solid var(--ui-line);
    background: var(--ui-panel);
}
.board-gantt-header > div:first-child { min-width: 0; }
.board-gantt-header h2 { margin: 0; color: var(--ui-text); font-size: 16px; font-weight: 600; }
.board-gantt-header small { display: block; margin-top: 3px; color: var(--ui-muted); font-size: 11px; font-weight: 400; }
.board-gantt-actions { display: flex; flex: 0 0 auto; align-items: flex-end; gap: 6px; }
.board-gantt-actions label { display: grid; gap: 2px; margin: 0; color: var(--ui-muted); font-size: 10px; font-weight: 400; }
.board-gantt-actions input { width: 124px; height: 30px; padding: 4px 6px; border: 1px solid var(--ui-line); border-radius: 5px; background: var(--ui-field); color: var(--ui-text); color-scheme: var(--ui-scheme); font: inherit; font-size: 12px; }
.board-gantt-actions button { height: 30px; min-height: 30px; margin: 0; border: 1px solid var(--ui-line); border-radius: 5px; background: var(--ui-soft); color: var(--ui-text); font: inherit; white-space: nowrap; }
.board-gantt-actions .secondary-button { padding: 4px 10px; }
.board-gantt-window-button { display: grid; place-items: center; width: 30px; padding: 5px; }
.board-gantt-window-button svg { width: 18px; height: 18px; }
.board-gantt-project button:hover:not(:disabled) { background: color-mix(in srgb, var(--ui-accent) 12%, var(--ui-panel)); }
.board-gantt-project :is(button, input, select):focus-visible { outline: 2px solid var(--ui-accent); outline-offset: -2px; }
.board-gantt-project button:disabled { opacity: .5; cursor: not-allowed; }
.board-gantt-message { flex: 0 0 auto; padding: 7px 14px; border-bottom: 1px solid var(--ui-line); background: color-mix(in srgb, var(--ui-danger) 12%, var(--ui-panel)); color: var(--ui-danger); }
.board-gantt-window-notice { flex: 0 0 auto; padding: 6px 14px; border-bottom: 1px solid var(--ui-line); background: var(--ui-soft); color: var(--ui-muted); }
.board-gantt-empty { display: grid; flex: 1 1 auto; min-height: 0; place-items: center; color: var(--ui-muted); }

.board-gantt-scroll {
    position: relative;
    flex: 1 1 0;
    min-width: 0;
    min-height: 0;
    overflow: scroll;
    overscroll-behavior: contain;
    scrollbar-gutter: stable;
    scrollbar-width: auto;
    scrollbar-color: var(--ui-muted) var(--ui-soft);
    background: var(--ui-panel);
}
.board-gantt-scroll::-webkit-scrollbar { width: 12px; height: 12px; }
.board-gantt-scroll::-webkit-scrollbar-track, .board-gantt-scroll::-webkit-scrollbar-corner { background: var(--ui-soft); }
.board-gantt-scroll::-webkit-scrollbar-thumb { border: 3px solid var(--ui-soft); border-radius: 8px; background: var(--ui-muted); }

.board-gantt-table { width: calc(var(--gantt-grid-width) + var(--gantt-timeline-width)); table-layout: fixed; border-collapse: separate; border-spacing: 0; margin: 0; color: var(--ui-text); font: inherit; }
.board-gantt-col-title { width: var(--gantt-col-title); }
.board-gantt-col-people { width: var(--gantt-col-people); }
.board-gantt-col-status { width: var(--gantt-col-status); }
.board-gantt-col-start { width: var(--gantt-col-start); }
.board-gantt-col-due { width: var(--gantt-col-due); }
.board-gantt-col-timeline { width: var(--gantt-timeline-width); }
.board-gantt-table :is(th, td) { height: 34px; padding: 3px 8px; overflow: hidden; border: 0; border-right: 1px solid var(--ui-line); border-bottom: 1px solid color-mix(in srgb, var(--ui-line) 55%, var(--ui-panel)); background: var(--ui-panel); color: var(--ui-text); vertical-align: middle; text-align: left; white-space: nowrap; text-overflow: ellipsis; font-size: 12px; font-weight: 400; }
.board-gantt-table .board-gantt-note-row :is(th, td) { height: 38px; border-top: 2px solid var(--gantt-group-accent); background: var(--ui-soft); }
.board-gantt-note-row strong { font-weight: 600; }
.board-gantt-group-toggle { display: flex; align-items: center; gap: 6px; width: 100%; height: 30px; margin: 0; padding: 0; border: 0; border-radius: 3px; background: transparent; color: var(--ui-text); text-align: left; font: inherit; }
.board-gantt-group-toggle strong { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
.board-gantt-group-arrow { flex: 0 0 14px; color: var(--gantt-group-accent); font-size: 10px; text-align: center; }
.board-gantt-table .board-gantt-task-row .board-gantt-title-cell { padding-left: 48px; }
.board-gantt-task-row:hover :is(th, td) { background-color: color-mix(in srgb, var(--ui-accent) 5%, var(--ui-panel)); }
.board-gantt-frozen { position: sticky; z-index: 3; }
.board-gantt-title-cell { left: 0; }
.board-gantt-people-cell { left: var(--gantt-col-title); }
.board-gantt-status-cell { left: calc(var(--gantt-col-title) + var(--gantt-col-people)); }
.board-gantt-start-cell { left: calc(var(--gantt-col-title) + var(--gantt-col-people) + var(--gantt-col-status)); }
.board-gantt-due-cell { left: calc(var(--gantt-col-title) + var(--gantt-col-people) + var(--gantt-col-status) + var(--gantt-col-start)); box-shadow: 2px 0 0 var(--ui-line); }
.board-gantt-heading-row th { position: sticky; top: 0; z-index: 6; height: 34px; padding: 0; background: var(--ui-soft); font-weight: 500; }
.board-gantt-heading-row .board-gantt-frozen { z-index: 8; }
.board-gantt-filter-row th { position: sticky; top: 34px; z-index: 5; height: 34px; padding: 3px 5px; background: var(--ui-panel); }
.board-gantt-filter-row .board-gantt-frozen { z-index: 7; }
.board-gantt-filter-row input, .board-gantt-filter-row select, .board-gantt-date-editor { width: 100%; min-width: 0; max-width: none; height: 26px; min-height: 0; margin: 0; padding: 2px 5px; border: 1px solid var(--ui-line); border-radius: 4px; background: var(--ui-field); color: var(--ui-text); color-scheme: var(--ui-scheme); font: inherit; font-weight: 400; }
.board-gantt-filter-row input::placeholder { color: var(--ui-muted); opacity: 1; }
.board-gantt-date-editor { border-color: transparent; background: transparent; }
.board-gantt-date-editor:hover, .board-gantt-date-editor:focus { border-color: var(--ui-line); background: var(--ui-field); }
.board-gantt-date-editor:disabled { background: var(--ui-soft); color: var(--ui-muted); }
.board-gantt-sort-button { width: 100%; height: 34px; padding: 0 22px 0 8px; border: 0; border-radius: 0; background: transparent; color: var(--ui-text); text-align: left; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; font: inherit; font-weight: 500; cursor: pointer; }
.board-gantt-column-resize { position: absolute; top: 0; right: 0; width: 12px; height: 34px; margin: 0; padding: 0; border: 0; border-radius: 0; background: transparent; color: var(--ui-muted); font-size: 14px; line-height: 1; cursor: col-resize; touch-action: none; }
.board-gantt-project.is-resizing-column { cursor: col-resize; user-select: none; }
.board-gantt-clear-filters { height: 26px; margin: 0 6px; padding: 2px 8px; border: 1px solid var(--ui-line); border-radius: 4px; background: var(--ui-soft); color: var(--ui-text); font: inherit; }

.board-gantt-table :is(.board-gantt-timeline-head, .board-gantt-timeline-filter, .board-gantt-timeline) { width: var(--gantt-timeline-width); padding: 0; }
.board-gantt-days { display: grid; grid-template-columns: repeat(var(--gantt-days), var(--gantt-day-width)); height: 34px; }
.board-gantt-days span { display: grid; place-items: center; height: 34px; border-right: 1px solid var(--ui-line); color: var(--ui-muted); font-size: 10px; font-weight: 400; }
.board-gantt-days .weekend { background: color-mix(in srgb, var(--ui-line) 24%, var(--ui-soft)); }
.board-gantt-table .board-gantt-timeline { position: relative; background-image: linear-gradient(to right, color-mix(in srgb, var(--ui-line) 55%, transparent) 1px, transparent 1px); background-size: var(--gantt-day-width) 100%; }
.board-gantt-bar { position: absolute; top: 10px; left: calc(var(--gantt-start) * var(--gantt-day-width) + 3px); width: calc(var(--gantt-span) * var(--gantt-day-width) - 6px); min-width: 20px; height: 14px; border: 1px solid color-mix(in srgb, var(--ui-accent) 65%, var(--ui-text)); border-radius: 3px; background: var(--ui-accent); }
.board-gantt-bar.is-overdue { border-color: var(--ui-danger); background: var(--ui-danger); }
.board-gantt-bar.is-editable { cursor: grab; touch-action: none; }
.board-gantt-bar.is-dragging { cursor: grabbing; opacity: .75; }
.board-gantt-resize-start, .board-gantt-resize-end { position: absolute; top: 0; width: 8px; height: 100%; cursor: ew-resize; }
.board-gantt-resize-start { left: 0; }
.board-gantt-resize-end { right: 0; }
.board-gantt-status-badge { display: inline-flex; max-width: 100%; align-items: center; height: 22px; padding: 1px 7px; border: 1px solid var(--ui-line); border-radius: 4px; background: var(--ui-soft); color: var(--ui-text); font-size: 11px; font-weight: 500; }
.board-gantt-status-badge.is-open { border-color: color-mix(in srgb, var(--ui-accent) 60%, var(--ui-line)); background: color-mix(in srgb, var(--ui-accent) 12%, var(--ui-panel)); }
.board-gantt-status-badge.is-closed { border-color: color-mix(in srgb, var(--ui-success) 60%, var(--ui-line)); background: color-mix(in srgb, var(--ui-success) 12%, var(--ui-panel)); }
.board-gantt-status-badge.is-cancelled { border-color: color-mix(in srgb, var(--ui-danger) 60%, var(--ui-line)); background: color-mix(in srgb, var(--ui-danger) 12%, var(--ui-panel)); }
.board-gantt-people-names { display: inline-block; max-width: calc(100% - 30px); vertical-align: middle; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.board-gantt-people-add { display: inline-grid; place-items: center; width: 24px; height: 24px; margin-left: 4px; padding: 0; vertical-align: middle; border: 1px solid var(--ui-line); border-radius: 4px; background: var(--ui-soft); color: var(--ui-text); font: inherit; font-size: 16px; font-weight: 400; }

@media (max-width: 1100px) {
    .board-gantt-project { --gantt-col-title: 200px; --gantt-col-people: 130px; --gantt-col-status: 110px; --gantt-col-start: 118px; --gantt-col-due: 118px; }
    .board-gantt-header { align-items: stretch; flex-direction: column; gap: 6px; }
    .board-gantt-actions { flex-wrap: wrap; }
}

/* Patch 287: visible grips and one active schedule gesture. */
.board-gantt-bar { top: 7px; height: 20px; box-sizing: border-box; }
.board-gantt-resize-start, .board-gantt-resize-end {
    width: 10px;
    box-sizing: border-box;
    touch-action: none;
    background: color-mix(in srgb, var(--ui-panel) 30%, transparent);
}
.board-gantt-resize-start { border-right: 2px solid color-mix(in srgb, var(--ui-panel) 70%, transparent); }
.board-gantt-resize-end { border-left: 2px solid color-mix(in srgb, var(--ui-panel) 70%, transparent); }
.board-gantt-resize-start:hover, .board-gantt-resize-end:hover { background: color-mix(in srgb, var(--ui-panel) 55%, transparent); }
.board-gantt-project.is-dragging-schedule { user-select: none; }
.board-gantt-bar.is-saving { opacity: .6; pointer-events: none; }
