/* ============================================================
   GANTT (App.gantt) — read-only project timeline. No library.
   ============================================================ */
.gantt-toolbar { margin-bottom: 8px; display: flex; gap: 8px; align-items: center; }
.gantt-main {
  display: flex;
  border: 1px solid var(--bs-border-color);
  border-radius: 6px;
  max-height: 72vh;
  overflow: hidden;
  background: var(--bs-body-bg);
}
.gantt-left { flex: 0 0 240px; display: flex; flex-direction: column; border-right: 1px solid var(--bs-border-color); min-width: 0; }
.gantt-corner { height: 36px; flex: none; display: flex; align-items: center; padding: 0 10px; font-weight: 600; font-size: .8rem; border-bottom: 1px solid var(--bs-border-color); background: var(--bs-tertiary-bg); }
.gantt-left-body { flex: 1; overflow: hidden; }
.gantt-name-row { display: flex; align-items: center; border-bottom: 1px solid var(--bs-border-color); font-size: .82rem; white-space: nowrap; overflow: hidden; cursor: pointer; box-sizing: border-box; }
.gantt-name-row:hover { background: var(--bs-tertiary-bg); }
.gantt-name-txt { overflow: hidden; text-overflow: ellipsis; }

.gantt-right { flex: 1; overflow: auto; position: relative; }
.gantt-head { position: sticky; top: 0; z-index: 6; height: 36px; background: var(--bs-tertiary-bg); border-bottom: 1px solid var(--bs-border-color); position: -webkit-sticky; }
.gantt-tick { position: absolute; top: 0; height: 36px; line-height: 36px; font-size: .7rem; color: var(--bs-secondary-color); border-left: 1px solid var(--bs-border-color); padding-left: 3px; box-sizing: border-box; overflow: hidden; white-space: nowrap; }

.gantt-canvas { position: relative; }
.gantt-vline { position: absolute; top: 0; bottom: 0; width: 1px; background: var(--bs-border-color); opacity: .45; }
.gantt-today { position: absolute; top: 0; width: 0; border-left: 2px dashed var(--bs-danger); z-index: 5; pointer-events: none; }
.gantt-svg { position: absolute; top: 0; left: 0; z-index: 2; pointer-events: none; overflow: visible; }
.gantt-arrow { fill: none; stroke: var(--bs-secondary-color); stroke-width: 1.5; }
.gantt-svg marker path { fill: var(--bs-secondary-color); }

.gantt-bar { position: absolute; height: 18px; border-radius: 4px; z-index: 3; overflow: hidden; cursor: pointer; display: flex; align-items: center; background: var(--bs-secondary-bg); border: 1px solid var(--bs-border-color); box-sizing: border-box; }
.gantt-bar-fill { position: absolute; left: 0; top: 0; bottom: 0; background: var(--bs-primary); opacity: .85; }
.gantt-bar.done .gantt-bar-fill { background: var(--bs-success); }
.gantt-bar.overdue .gantt-bar-fill { background: var(--bs-danger); }
.gantt-bar-label { position: relative; z-index: 1; font-size: .66rem; padding: 0 5px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; color: var(--bs-body-color); }

.gantt-ms { position: absolute; width: 14px; height: 14px; background: var(--bs-warning); transform: rotate(45deg); z-index: 3; cursor: pointer; border: 1px solid rgba(0,0,0,.25); border-radius: 2px; }
.gantt-ms.done { background: var(--bs-success); }
