:root{--g-arrow-color:var(--color-fg-tertiary);--g-bar-color:var(--color-bg-primary);--g-bar-border:var(--color-border-primary);--g-tick-color-thick:var(--color-border-secondary);--g-tick-color:var(--color-border-tertiary);--g-actions-background:var(--color-bg-secondary);--g-border-color:var(--color-border-secondary);--g-text-muted:var(--color-text-tertiary);--g-text-light:var(--color-text-primary);--g-text-dark:var(--color-text-primary);--g-progress-color:var(--color-bg-secondary);--g-handle-color:var(--color-fg-brand-primary);--g-weekend-label-color:var(--color-bg-tertiary);--g-expected-progress:var(--color-utility-blue-200);--g-header-background:var(--color-bg-primary);--g-row-color:var(--color-bg-primary);--g-row-border-color:var(--color-border-secondary);--g-today-highlight:var(--color-fg-brand-primary);--g-popup-actions:var(--color-bg-tertiary);--g-weekend-highlight-color:var(--color-bg-secondary_subtle)}.dark-mode{--g-arrow-color:var(--color-fg-tertiary);--g-bar-color:var(--color-bg-secondary);--g-bar-border:var(--color-border-primary);--g-tick-color-thick:var(--color-border-secondary);--g-tick-color:var(--color-border-tertiary);--g-actions-background:var(--color-bg-tertiary);--g-border-color:var(--color-border-secondary);--g-text-muted:var(--color-text-tertiary);--g-text-light:var(--color-text-primary);--g-text-dark:var(--color-text-primary);--g-progress-color:var(--color-bg-tertiary);--g-handle-color:var(--color-fg-brand-primary);--g-weekend-label-color:var(--color-bg-quaternary);--g-expected-progress:var(--color-utility-blue-700);--g-header-background:var(--color-bg-primary);--g-row-color:var(--color-bg-primary);--g-row-border-color:var(--color-border-secondary);--g-today-highlight:var(--color-fg-brand-primary);--g-popup-actions:var(--color-bg-quaternary);--g-weekend-highlight-color:var(--color-bg-secondary_subtle)}.gantt-container{line-height:14.5px;position:relative;overflow:auto;font-size:12px;height:var(--gv-grid-height);min-height:384px;width:100%}.gantt-container,.gantt-container .popup-wrapper{border-radius:var(--radius-lg);background:var(--color-bg-primary);border:1px solid var(--color-border-primary)}.gantt-container .popup-wrapper{position:absolute;top:0;left:0;box-shadow:var(--shadow-xl);padding:12px;width:max-content;max-width:280px;z-index:100}.gantt-container .popup-wrapper .title{margin-bottom:4px;color:var(--color-text-primary);font-size:var(--text-sm);font-weight:600;line-height:var(--text-sm--line-height)}.gantt-container .popup-wrapper .subtitle{color:var(--color-text-secondary);font-size:var(--text-xs);margin-bottom:8px;line-height:var(--text-xs--line-height)}.gantt-container .popup-wrapper .details{color:var(--color-text-tertiary);font-size:var(--text-xs);line-height:var(--text-xs--line-height)}.gantt-container .popup-wrapper .actions{margin-top:10px;display:flex;gap:4px}.gantt-container .popup-wrapper .action-btn{border:1px solid var(--color-border-primary);padding:4px 8px;background-color:var(--color-bg-secondary);color:var(--color-text-secondary);border-radius:var(--radius-md);font-size:var(--text-xs);cursor:pointer;transition:all .15s ease}.gantt-container .popup-wrapper .action-btn:hover{background-color:var(--color-bg-secondary_hover);color:var(--color-text-primary)}.gantt-popup-wrapper{padding:12px;min-width:200px}.gantt-popup-wrapper .title{font-size:var(--text-sm);font-weight:600;color:var(--color-text-primary);margin-bottom:4px}.gantt-popup-wrapper .subtitle{font-size:var(--text-xs);color:var(--color-text-secondary);margin-bottom:8px}.gantt-popup-wrapper .description{font-size:var(--text-xs);color:var(--color-text-tertiary);margin-bottom:8px;max-width:250px;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.gantt-popup-wrapper .progress{font-size:var(--text-xs);font-weight:500;color:var(--color-text-success-primary)}.gantt-container .grid-header{height:calc(var(--gv-lower-header-height) + var(--gv-upper-header-height) + 10px);background-color:var(--g-header-background);position:sticky;top:0;left:0;border-bottom:1px solid var(--g-row-border-color);z-index:10}.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) * .8);height:calc(var(--gv-lower-header-height) * .8);margin:0 calc(var(--gv-column-width) * .1);align-content:center;text-align:center;color:var(--g-text-muted)}.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) * .66)}.gantt-container .current-upper{position:sticky;left:0!important;padding-left:17px;background:var(--g-header-background)}.gantt-container .side-header{position:sticky;top:0;right:0;float:right;z-index:10;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;gap:8px}.gantt-container .side-header *{transition:background-color .15s ease;background-color:var(--g-actions-background);border-radius:var(--radius-md);border:1px solid var(--color-border-primary);padding:5px 8px;color:var(--g-text-dark);font-size:var(--text-sm);letter-spacing:.02em;font-weight:420;box-sizing:content-box;cursor:pointer}.gantt-container .side-header :hover{background-color:var(--color-bg-secondary_hover)}.gantt-container .side-header select{width:80px;padding-top:4px;padding-bottom:4px}.gantt-container .side-header select:focus{outline:2px solid var(--color-focus-ring);outline-offset:2px}.gantt-container .date-range-highlight{background-color:var(--g-progress-color);border-radius:var(--radius-lg);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;z-index:5}.gantt-container .current-ball-highlight{position:absolute;background:var(--g-today-highlight);z-index:6;border-radius:50%}.gantt-container .current-date-highlight{background:var(--g-today-highlight);color:var(--color-text-primary_on-brand);border-radius:var(--radius-sm);padding:2px 4px}.gantt-container .holiday-label{position:absolute;top:0;left:0;opacity:0;z-index:10;background:var(--g-weekend-label-color);color:var(--color-text-secondary);border-radius:var(--radius-sm);padding:2px 5px;font-size:var(--text-xs);transition:opacity .2s ease}.gantt-container .holiday-label.show{opacity:1}.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);stroke-width:.5}.gantt .tick{stroke:var(--g-tick-color);stroke-width:.4}.gantt .tick.thick{stroke:var(--g-tick-color-thick);stroke-width:.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 .3s ease,transform .15s ease;outline:1px solid var(--color-border-secondary);border-radius:var(--radius-md)}.gantt .bar-progress{fill:var(--g-progress-color);border-radius:var(--radius-sm)}.gantt .bar-expected-progress{fill:var(--g-expected-progress);opacity:.5}.gantt .bar-invalid{fill:transparent;stroke:var(--color-border-error);stroke-width:1.5;stroke-dasharray:5}:is(.gantt .bar-invalid)~.bar-label{fill:var(--color-text-error-primary)}.gantt .bar-label{fill:var(--g-text-dark);dominant-baseline:central;font-family:var(--font-body);font-size:13px;font-weight:500}.gantt .bar-label.big{fill:var(--g-text-dark);text-anchor:start}.gantt .bar-done .bar{fill:var(--color-utility-success-500)!important;stroke:var(--color-utility-success-600)!important;stroke-width:1}.gantt .bar-in-progress .bar{fill:var(--color-utility-warning-400)!important;stroke:var(--color-utility-warning-500)!important;stroke-width:1}.gantt .bar-review .bar{fill:var(--color-utility-blue-400)!important;stroke:var(--color-utility-blue-500)!important;stroke-width:1}.gantt .bar-todo .bar{fill:var(--color-utility-gray-400)!important;stroke:var(--color-utility-gray-500)!important;stroke-width:1}.gantt .bar-backlog .bar{fill:var(--color-utility-gray-300)!important;stroke:var(--color-utility-gray-400)!important;stroke-width:1}.gantt .bar-default .bar{fill:var(--color-utility-gray-500)!important;stroke:var(--color-utility-gray-600)!important;stroke-width:1}.gantt .bar-custom .bar{fill:var(--color-utility-purple-400)!important;stroke:var(--color-utility-purple-500)!important;stroke-width:1}.gantt .handle{fill:var(--g-handle-color);opacity:0;transition:opacity .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:hover .bar{stroke-width:2;filter:brightness(1.05)}.gantt .bar-wrapper:hover .date-range-highlight{display:block}.gantt-container .hide{display:none}.gantt-container .extras{position:sticky;left:0}.gantt-container .extras .adjust{position:absolute;left:8px;top:calc(var(--gv-grid-height) - 60px);background-color:var(--color-bg-overlay);color:var(--color-text-primary_on-brand);border:none;padding:8px 12px;border-radius:var(--radius-md);font-size:var(--text-sm);cursor:pointer;box-shadow:var(--shadow-lg);transition:background-color .15s ease}.gantt-container .extras .adjust:hover{background-color:var(--color-bg-primary-solid)}@media (max-width:768px){.gantt-container{overflow-x:auto;-webkit-overflow-scrolling:touch;padding:12px}.gantt{min-width:800px}.gantt-container .popup-wrapper{max-width:240px;font-size:11px}.gantt-container .side-header{gap:4px}.gantt-container .side-header *{padding:4px 6px;font-size:11px}}.gantt .bar-wrapper:focus{outline:2px solid var(--color-focus-ring);outline-offset:2px;border-radius:var(--radius-md)}.gantt .bar-wrapper:focus-visible{outline:2px solid var(--color-focus-ring);outline-offset:2px}@media (prefers-reduced-motion:reduce){.gantt .bar-wrapper .bar,.gantt .handle,.gantt-container .holiday-label,.gantt-container .popup-wrapper .action-btn,.gantt-container .side-header *{transition:none}}