: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}.gantt-container{border-radius:8px;font-size:12px;height:var(--gv-grid-height);line-height:14.5px;overflow:auto;position:relative;width:100%}.gantt-container .popup-wrapper{background:#fff;border-radius:5px;box-shadow:0 10px 24px -3px #0003;left:0;padding:10px;position:absolute;top:0;width:-moz-max-content;width:max-content;z-index:1000}.gantt-container .popup-wrapper .title{color:var(--g-text-dark);font-size:.85rem;font-weight:650;line-height:15px;margin-bottom:2px}.gantt-container .popup-wrapper .subtitle{color:var(--g-text-dark);font-size:.8rem;margin-bottom:5px}.gantt-container .popup-wrapper .details{color:var(--g-text-muted);font-size:.7rem}.gantt-container .popup-wrapper .actions{margin-left:3px;margin-top:10px}.gantt-container .popup-wrapper .action-btn{background-color:var(--g-popup-actions);border:none;border-right:1px solid var(--g-text-light);padding:5px 8px}.gantt-container .popup-wrapper .action-btn:hover{background-color:brightness(97%)}.gantt-container .popup-wrapper .action-btn:first-child{border-bottom-left-radius:4px;border-top-left-radius:4px}.gantt-container .popup-wrapper .action-btn:last-child{border-bottom-right-radius:4px;border-right:none;border-top-right-radius:4px}.gantt-container .grid-header{background-color:var(--g-header-background);border-bottom:1px solid var(--g-row-border-color);height:calc(var(--gv-lower-header-height) + var(--gv-upper-header-height) + 10px);left:0;position:sticky;top:0;z-index:1000}.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{align-content:center;color:var(--g-text-muted);font-size:12px;height:calc(var(--gv-lower-header-height)*.8);margin:0 calc(var(--gv-column-width)*.1);position:absolute;text-align:center;width:calc(var(--gv-column-width)*.8)}.gantt-container .upper-text{color:var(--g-text-dark);font-size:14px;font-weight:500;height:calc(var(--gv-lower-header-height)*.66);position:absolute;width:-moz-fit-content;width:fit-content}.gantt-container .current-upper{background:#fff;left:0!important;padding-left:17px;position:sticky}.gantt-container .side-header{background:var(--g-header-background);display:flex;float:right;font-weight:400;line-height:20px;margin-left:auto;padding-right:10px;padding-top:10px;position:sticky;right:0;top:0;width:-moz-max-content;width:max-content;z-index:1000}.gantt-container .side-header *{background-color:var(--g-actions-background);border:none;border-radius:.5rem;box-sizing:content-box;color:var(--g-text-dark);font-size:14px;font-weight:420;letter-spacing:.02em;margin-right:5px;padding:5px 8px;transition-duration:.15s;transition-property:background-color;transition-timing-function:cubic-bezier(.4,0,.2,1)}.gantt-container .side-header :last-child{margin-right:0}.gantt-container .side-header :hover{filter:brightness(97.5%)}.gantt-container .side-header select{padding-bottom:2px;padding-top:2px;width:60px}.gantt-container .side-header select:focus{outline:none}.gantt-container .date-range-highlight{background-color:var(--g-progress-color);border-radius:12px;height:calc(var(--gv-lower-header-height) - 6px);position:absolute;top:calc(var(--gv-upper-header-height) + 5px)}.gantt-container .current-highlight{background:var(--g-today-highlight);position:absolute;width:1px;z-index:999}.gantt-container .current-ball-highlight{background:var(--g-today-highlight);border-radius:50%;position:absolute;z-index:1001}.gantt-container .current-date-highlight{background:var(--g-today-highlight);border-radius:5px;color:var(--g-text-light)}.gantt-container .holiday-label{background:--g-weekend-label-color;border-radius:5px;left:0;opacity:0;padding:2px 5px;position:absolute;top:0;z-index:1000}.gantt-container .holiday-label.show{opacity:1}.gantt-container .extras{left:0;position:sticky}.gantt-container .extras .adjust{background-color:#000000b3;border:none;border-radius:3px;color:#fff;left:8px;padding:8px;position:absolute;top:calc(var(--gv-grid-height) - 60px)}.gantt-container .hide{display:none}.gantt{position:absolute;-moz-user-select:none;user-select:none;-webkit-user-select:none}.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:.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}.gantt .bar-progress{border-radius:4px;fill:var(--g-progress-color)}.gantt .bar-expected-progress{fill:var(--g-expected-progress)}.gantt .bar-invalid{fill:transparent;stroke:var(--g-bar-border);stroke-dasharray:5;stroke-width:1}:is(.gantt .bar-invalid)~.bar-label{fill:var(--g-text-light)}.gantt .bar-label{dominant-baseline:central;fill:var(--g-text-dark);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 .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{border-radius:3px;outline:1px solid var(--g-row-border-color)}.gantt .bar-wrapper:hover .bar{transition:transform .3s ease}.gantt .bar-wrapper:hover .date-range-highlight{display:block}:root{--primary:#4f46e5;--primary-hover:#4338ca;--bg:#fafafa;--card-bg:#fff;--border:#e5e7eb;--text:#1f2937;--text-muted:#6b7280;--success:#10b981;--warning:#f59e0b}*{box-sizing:border-box;margin:0;padding:0}body{background:var(--bg);color:var(--text);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;line-height:1.5}.app{margin:0 auto;max-width:1400px;padding:1.5rem}.header{margin-bottom:1.5rem}.header-title{gap:.75rem}.header-title,.logo{align-items:center;display:flex}.logo{background:var(--primary);border-radius:8px;color:#fff;height:40px;justify-content:center;width:40px}.logo svg{height:24px;width:24px}.header h1{font-size:1.75rem;font-weight:600}.toolbar{background:var(--card-bg);border:1px solid var(--border);border-radius:12px;margin-bottom:1.5rem;padding:1rem 1.5rem}.toolbar-row{align-items:center;display:flex;flex-wrap:wrap;gap:1rem}.toolbar-row+.toolbar-row{border-top:1px solid var(--border);margin-top:1rem;padding-top:1rem}.label{color:var(--text-muted);font-size:.875rem;min-width:80px}.config-row{flex-wrap:nowrap}.config-toggle{align-items:center;background:none;border:none;cursor:pointer;display:flex;gap:.25rem;padding:0}.config-toggle:hover .label{color:var(--primary)}.config-arrow{color:var(--text-muted);height:16px;transition:transform .2s ease;width:16px}.config-arrow.expanded{transform:rotate(90deg)}.config-options{align-items:center;display:flex;flex-wrap:wrap;gap:1rem}.select-wrapper{position:relative}.select-wrapper select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:var(--bg);border:1px solid var(--border);border-radius:8px;cursor:pointer;font-size:.875rem;min-width:140px;padding:.5rem 2rem .5rem 1rem}.select-wrapper select:focus{border-color:var(--primary);outline:none}.select-wrapper:after{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid var(--text-muted);content:"";height:0;pointer-events:none;position:absolute;right:12px;top:50%;transform:translateY(-50%);width:0}.select-label{display:none}.dropdown{position:relative}.dropdown-btn{align-items:center;background:var(--bg);border:1px solid var(--border);border-radius:8px;cursor:pointer;display:flex;font-size:.875rem;gap:.5rem;justify-content:space-between;min-width:140px;padding:.5rem 1rem}.dropdown-btn:hover{border-color:var(--primary)}.dropdown-arrow{color:var(--text-muted);height:16px;width:16px}.dropdown-menu{background:var(--card-bg);border:1px solid var(--border);border-radius:8px;box-shadow:0 4px 12px #0000001a;left:0;margin-top:4px;max-height:200px;min-width:160px;overflow-y:auto;position:absolute;top:100%;z-index:100}.dropdown-item{align-items:center;cursor:pointer;display:flex;font-size:.875rem;gap:.5rem;padding:.5rem 1rem}.dropdown-item:hover{background:var(--bg)}.dropdown-item input[type=checkbox]{accent-color:var(--primary)}.dropdown-empty{color:var(--text-muted);font-size:.8125rem;padding:.75rem 1rem;text-align:center}.btn{align-items:center;border:none;border-radius:8px;cursor:pointer;display:inline-flex;font-size:.875rem;font-weight:500;gap:.5rem;padding:.5rem 1rem;transition:all .2s}.btn .icon{height:18px;width:18px}.btn-primary{background:var(--primary);color:#fff}.btn-primary:hover{background:var(--primary-hover)}.btn-secondary{background:var(--bg);border:1px solid var(--border);color:var(--text)}.btn-secondary:hover{background:var(--border)}.btn-outline{background:transparent;border:1px solid var(--primary);color:var(--primary)}.btn-outline:hover{background:var(--primary);color:#fff}.btn-small{background:var(--bg);border:1px solid var(--border);font-size:.8125rem;padding:.375rem .75rem}.btn-small:hover{background:var(--border)}.csv-editor{background:var(--card-bg);border:1px solid var(--border);border-radius:12px;margin-bottom:1.5rem;padding:1rem 1.5rem}.csv-header{justify-content:space-between;margin-bottom:1rem}.csv-header,.csv-title{align-items:center;display:flex}.csv-title{font-weight:500;gap:.5rem}.csv-title .icon{color:var(--text-muted);height:20px;width:20px}.task-count{color:var(--primary);font-size:.875rem;font-weight:500}.csv-textarea{background:var(--bg);border:1px solid var(--border);border-radius:8px;font-family:Monaco,Menlo,monospace;font-size:.8125rem;line-height:1.6;min-height:150px;padding:1rem;resize:vertical;width:100%}.csv-textarea:focus{border-color:var(--primary);outline:none}.csv-footer{align-items:center;display:flex;justify-content:space-between;margin-top:1rem}.columns-info{color:var(--text-muted);font-size:.8125rem}.example-link{color:var(--primary);cursor:pointer;font-size:.8125rem;font-weight:400;margin-left:.75rem;text-decoration:underline}.example-link:hover{color:var(--primary-hover)}.gantt-section{background:var(--card-bg);border:1px solid var(--border);border-radius:12px;overflow:hidden}.gantt-header{border-bottom:1px solid var(--border);display:flex;justify-content:flex-end;padding:.75rem 1rem}.gantt-controls{align-items:center;display:flex;gap:.5rem}.view-mode-select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:var(--bg);border:1px solid var(--border);border-radius:6px;cursor:pointer;font-size:.8125rem;padding:.375rem 2rem .375rem .75rem}.gantt-container{min-height:200px;overflow-x:auto}.no-tasks{color:var(--text-muted);padding:3rem;text-align:center}.gantt-section.fullscreen{background:var(--card-bg);border-radius:0;display:flex;flex-direction:column;inset:0;margin:0;position:fixed;z-index:1000}.gantt-section.fullscreen .gantt-container{flex:1;min-height:0}.icon-small{height:16px;width:16px}.btn-fullscreen{padding:.375rem .5rem}.gantt .bar{fill:var(--primary)}.gantt .bar-progress{fill:#bbbccc}.gantt .bar-label{font-family:inherit;font-size:12px}.gantt .grid-header{fill:var(--bg)}.gantt .grid-row{fill:var(--card-bg)}.gantt .grid-row:nth-child(2n){fill:var(--bg)}.gantt .today-highlight{fill:#4f46e51a}.gantt-popup{color:#666;min-width:180px;padding:4px}.gantt-popup-title{font-size:.875rem;font-weight:700;margin-bottom:4px}.gantt-popup-dates{color:#888;font-size:.75rem;margin-bottom:6px}.gantt-popup-info{font-size:.75rem}.gantt-popup-info p{margin:2px 0}.gantt-popup-info strong{font-weight:600}.app-footer{color:var(--text-muted);font-size:.75rem;padding:1.5rem;text-align:center}
