:root {
  --g-arrow-color: #1f2937;
  --g-bar-color: #fff;
  --g-bar-border: #fff;
  --g-tick-color-thick: #ededed;
  --g-tick-color: #f3f3f3;
  --g-actions-background: #f3f3f3;
  --g-border-color: #ebeff2;
  --g-text-muted: #7c7c7c;
  --g-text-light: #fff;
  --g-text-dark: #171717;
  --g-progress-color: #dbdbdb;
  --g-handle-color: #37352f;
  --g-weekend-label-color: #dcdce4;
  --g-expected-progress: #c4c4e9;
  --g-header-background: #fff;
  --g-row-color: #fdfdfd;
  --g-row-border-color: #c7c7c7;
  --g-today-highlight: #37352f;
  --g-popup-actions: #ebeff2;
  --g-weekend-highlight-color: #f7f7f7;
  /* Accent palette for modern interactions */
  --g-accent-primary: #0d6efd;
  --g-accent-success: #198754;
  --g-accent-warning: #ffc107;
  --g-accent-danger:  #dc3545;
}
.gantt-container {
  line-height: 14.5px;
  position: relative;
  overflow: auto;
  font-size: 12px;
  min-height: 480px; /* ensure visible height by default */
  height: auto;      /* allow growth with data */
  width: 100%;
  border-radius: 2px;overscroll-behavior: contain;
  scroll-behavior: smooth;
  background: #fff;
}
.gantt-container .popup-wrapper {
  position: absolute;
  top: 0;
  left: 0;
  background: #fff;
  box-shadow: 0 10px 24px -3px #0003;
  padding: 10px;
  border-radius: 2px;width: max-content;
  z-index: 1000;
}
.gantt-container .popup-wrapper .title {
  margin-bottom: 2px;
  color: var(--g-text-dark);
  font-size: 0.85rem;
  font-weight: 650;
  line-height: 15px;
}
.gantt-container .popup-wrapper .subtitle {
  color: var(--g-text-dark);
  font-size: 0.8rem;
  margin-bottom: 5px;
}
.gantt-container .popup-wrapper .details {
  color: var(--g-text-muted);
  font-size: 0.7rem;
}
.gantt-container .popup-wrapper .actions {
  margin-top: 10px;
  margin-left: 3px;
}
.gantt-container .popup-wrapper .action-btn {
  border: none;
  padding: 5px 8px;
  background-color: var(--g-popup-actions);
  border-right: 1px solid var(--g-text-light);
}
.gantt-container .popup-wrapper .action-btn:hover {
  background-color: brightness(97%);
}
.gantt-container .popup-wrapper .action-btn:first-child {
  border-top-left-radius: 4px;
  border-bottom-left-radius: 4px;
}
.gantt-container .popup-wrapper .action-btn:last-child {
  border-right: none;
  border-top-right-radius: 4px;
  border-bottom-right-radius: 4px;
}
.gantt-container .grid-header {
  height: calc(var(--gv-lower-header-height) + var(--gv-upper-header-height) + 10px);
  background: linear-gradient(180deg, #ffffff 0%, #f8f9fb 100%);
  position: sticky;
  top: 0;
  left: 0;
  border-bottom: 1px solid var(--g-row-border-color);
  z-index: 1000;
  padding-top: 8px;            /* push grid away from very top */
}
.gantt-container .lower-text,
.gantt-container .upper-text {
  text-anchor: middle;
}
.gantt-container .upper-header {
  height: var(--gv-upper-header-height);
}
.gantt-container .lower-header {
  height: var(--gv-lower-header-height);
}
.gantt-container .lower-text {
  font-size: 12px;
  position: absolute;
  width: calc(var(--gv-column-width) * 0.8);
  height: calc(var(--gv-lower-header-height) * 0.8);
  margin: 0 calc(var(--gv-column-width) * 0.1);
  align-content: center;
  text-align: center;
  color: var(--g-text-muted);
  white-space: nowrap;
}
.gantt-container .upper-text {
  position: absolute;
  width: fit-content;
  font-weight: 500;
  font-size: 14px;
  color: var(--g-text-dark);
  height: calc(var(--gv-lower-header-height) * 0.66);
}
.gantt-container .current-upper {
  position: sticky;
  left: 0 !important;
  padding-left: 17px;
  background: #fff;
}
.gantt-container .side-header {
  position: sticky;
  top: 0;
  right: 0;
  float: right;
  z-index: 1000;
  line-height: 20px;
  font-weight: 400;
  width: max-content;
  margin-left: auto;
  padding-right: 10px;
  padding-top: 10px;
  background: var(--g-header-background);
  display: flex;
}
.gantt-container .side-header * {
  transition-property: background-color;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 0.15s;
  background-color: var(--g-actions-background);
  text-align: -webkit-center;
  border-radius: 0.5rem;
  border: none;
  padding: 5px 8px;
  color: var(--g-text-dark);
  font-size: 14px;
  letter-spacing: 0.02em;
  font-weight: 420;
  box-sizing: content-box;
  margin-right: 5px;
}
.gantt-container .side-header *:last-child {
  margin-right: 0;
}
.gantt-container .side-header *:hover {
  filter: brightness(97.5%);
}
.gantt-container .side-header select {
  padding-right: 1.25rem;
  width: 50px;
}
.gantt-container .date-range-highlight {
  background-color: var(--g-progress-color);
  border-radius: 2px;height: calc(var(--gv-lower-header-height) - 6px);
  top: calc(var(--gv-upper-header-height) + 5px);
  position: absolute;
}
.gantt-container .current-highlight {
  position: absolute;
  background: var(--g-today-highlight);
  width: 2px; /* slightly thicker for visibility */
  z-index: 999;
  top: 0;             /* stretch from top */
  bottom: 0;          /* to bottom of canvas */
  pointer-events: none; /* avoid intercepting clicks */
}
.gantt-container .current-ball-highlight {
  position: absolute;
  background: var(--g-today-highlight);
  z-index: 1001;
  border-radius: 50%;
  width: 8px;
  height: 8px;
  margin-left: -3px; /* center ball on line */
}
.gantt-container .current-date-highlight {
  background: var(--g-today-highlight);
  color: var(--g-text-light);
  border-radius: 2px;}
.gantt-container .holiday-label {
  position: absolute;
  top: 0;
  left: 0;
  opacity: 0;
  z-index: 1000;
  background: --g-weekend-label-color;
  border-radius: 2px;padding: 2px 5px;
}
.gantt-container .holiday-label.show {
  opacity: 100;
}
.gantt-container .extras {
  position: sticky;
  left: 0;
}
.gantt-container .extras .adjust {
  position: absolute;
  left: 8px;
  top: calc(var(--gv-grid-height) - 50px);
  background-color: #000000b3;
  color: #fff;
  border: none;
  padding: 8px;
  border-radius: 2px;}
.gantt-container .hide {
  display: none;
}
.gantt {
  user-select: none;
  -webkit-user-select: none;
  position: absolute;
}
.gantt .grid-background {
  fill: none;
}
.gantt .grid-row {
  fill: var(--g-row-color);
}
.gantt .row-line {
  stroke: var(--g-border-color);
}
.gantt .tick {
  stroke: var(--g-tick-color);
  stroke-width: 0.4;
}
.gantt .tick.thick {
  stroke: var(--g-tick-color-thick);
  stroke-width: 0.7;
}
.gantt .arrow {
  fill: none;
  stroke: var(--g-arrow-color);
  stroke-width: 1.5;
}
.gantt .bar-wrapper .bar {
  fill: var(--g-bar-color);
  stroke: var(--g-bar-border);
  stroke-width: 0;
  transition: stroke-width 0.3s ease;
  filter: drop-shadow(0 1px 2px rgba(0,0,0,0.06));
}
.gantt .bar-progress {
  fill: var(--g-progress-color);
  border-radius: 2px;}
.gantt .bar-expected-progress {
  fill: var(--g-expected-progress);
}
.gantt .bar-invalid {
  fill: transparent;
  stroke: var(--g-bar-border);
  stroke-width: 1;
  stroke-dasharray: 5;
}
:is(.gantt .bar-invalid) ~ .bar-label {
  fill: var(--g-text-light);
}
.gantt .bar-label {
  fill: var(--g-text-dark);
  dominant-baseline: central;
  font-family: Helvetica;
  font-size: 13px;
  font-weight: 400;
}
.gantt .bar-label.big {
  fill: var(--g-text-dark);
  text-anchor: start;
}
.gantt .handle {
  fill: var(--g-handle-color);
  opacity: 0;
  transition: opacity 0.3s ease;
}
.gantt .handle.active,
.gantt .handle.visible {
  cursor: ew-resize;
  opacity: 1;
}
.gantt .handle.progress {
  fill: var(--g-text-muted);
}
.gantt .bar-wrapper {
  cursor: pointer;
}
.gantt .bar-wrapper .bar {
  outline: 1px solid var(--g-row-border-color);
  border-radius: 2px;transition: transform 120ms ease, filter 160ms ease, outline-color 160ms ease;
}
.gantt .bar-wrapper:hover .bar {
  filter: drop-shadow(0 4px 10px rgba(13,110,253,0.15));
  outline-color: var(--g-accent-primary);
  transform: translateY(-1px);
}
.gantt .bar-wrapper.is-focus .bar {
  outline-color: var(--g-accent-primary);
  filter: drop-shadow(0 4px 10px rgba(13,110,253,0.18));
}
.gantt .bar-wrapper.is-related .bar {
  outline-color: var(--g-accent-success);
  filter: drop-shadow(0 2px 6px rgba(25,135,84,0.18));
}
.gantt .bar-wrapper.dimmed .bar,
.gantt .bar-wrapper.dimmed .bar-progress {
  opacity: 0.5;
}
.gantt .bar-wrapper:hover .date-range-highlight {
  display: block;
}

/* Accent mapping via classes (set from data) */
.gantt .bar-wrapper.primary  .bar { outline-color: var(--g-accent-primary); fill: rgba(13,110,253,0.10); }
.gantt .bar-wrapper.success  .bar { outline-color: var(--g-accent-success); fill: rgba(25,135,84,0.10); }
.gantt .bar-wrapper.warning  .bar { outline-color: var(--g-accent-warning); fill: rgba(255,193,7,0.12); }
.gantt .bar-wrapper.danger   .bar { outline-color: var(--g-accent-danger);  fill: rgba(220,53,69,0.10); }
.gantt .bar-wrapper.primary  .bar-progress { fill: rgba(13,110,253,0.35); }
.gantt .bar-wrapper.success  .bar-progress { fill: rgba(25,135,84,0.40); }
.gantt .bar-wrapper.warning  .bar-progress { fill: rgba(255,193,7,0.45); }
.gantt .bar-wrapper.danger   .bar-progress { fill: rgba(220,53,69,0.40); }

/* Scrollbar cosmetics (WebKit) */
.gantt-container::-webkit-scrollbar { height: 10px; width: 10px; }
.gantt-container::-webkit-scrollbar-track { background: #f1f1f1; border-radius: 2px;}
.gantt-container::-webkit-scrollbar-thumb { background: #c8c8c8; border-radius: 2px;}
.gantt-container::-webkit-scrollbar-thumb:hover { background: #b0b0b0; }

/* Responsive typography for headers */
@media (max-width: 992px) {
  .gantt-container .upper-text { font-size: 13px; }
  .gantt-container .lower-text { font-size: 11px; }
}
@media (max-width: 576px) {
  .gantt-container .upper-text { font-size: 12px; }
  .gantt-container .lower-text { font-size: 10px; }
}
