: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}html[data-theme=dark]{--g-arrow-color:#e5e5e5;--g-bar-color:#2a2a2a;--g-bar-border:#3a3a3a;--g-tick-color-thick:#1a1a1a;--g-tick-color:#0a0a0a;--g-actions-background:#1a1a1a;--g-border-color:#2a2a2a;--g-text-muted:#999;--g-text-light:#fff;--g-text-dark:#f5f5f5;--g-progress-color:#4a4a4a;--g-handle-color:#d0d0d0;--g-weekend-label-color:#3a3a3a;--g-expected-progress:#5a5a5a;--g-header-background:#0a0a0a;--g-row-color:#141414;--g-row-border-color:#2a2a2a;--g-today-highlight:#999;--g-popup-actions:#1a1a1a;--g-weekend-highlight-color:#0f0f0f}.gantt-container{height:var(--gv-grid-height);isolation:isolate;border-radius:8px;width:100%;font-size:12px;line-height:14.5px;position:relative;overflow:auto}.gantt-container .popup-wrapper{background:var(--g-header-background);z-index:1000;border-radius:5px;width:max-content;padding:10px;position:absolute;top:0;left:0;box-shadow:0 10px 24px -3px #0003}.gantt-container .popup-wrapper .title{color:var(--g-text-dark);margin-bottom:2px;font-size:.85rem;font-weight:650;line-height:15px}.gantt-container .popup-wrapper .subtitle{color:var(--g-text-dark);margin-bottom:5px;font-size:.8rem}.gantt-container .popup-wrapper .details{color:var(--g-text-muted);font-size:.7rem}.gantt-container .popup-wrapper .actions{margin-top:10px;margin-left:3px}.gantt-container .popup-wrapper .action-btn{background-color:var(--g-popup-actions);border:none;border-right:1px solid var(--g-border-color);padding:5px 8px}.gantt-container .popup-wrapper .action-btn:hover{filter: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-color:var(--g-header-background);border-bottom:1px solid var(--g-row-border-color);z-index:1000;position:sticky;top:0;left:0}.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{width:calc(var(--gv-column-width) * .8);height:calc(var(--gv-lower-header-height) * .8);margin:0 calc(var(--gv-column-width) * .1);text-align:center;color:var(--g-text-muted);align-content:center;font-size:12px;position:absolute}.gantt-container .upper-text{width:fit-content;color:var(--g-text-dark);height:calc(var(--gv-lower-header-height) * .66);font-size:14px;font-weight:500;position:absolute}.gantt-container .current-upper{background:var(--g-header-background);padding-left:17px;position:sticky;left:0!important}.gantt-container .side-header{float:right;z-index:1000;background:var(--g-header-background);width:max-content;margin-left:auto;padding-top:10px;padding-right:10px;font-weight:400;line-height:20px;display:flex;position:sticky;top:0;right:0}.gantt-container .side-header *{background-color:var(--g-actions-background);color:var(--g-text-dark);letter-spacing:.02em;box-sizing:content-box;border:none;border-radius:.5rem;margin-right:5px;padding:5px 8px;font-size:14px;font-weight:420;transition-property:background-color;transition-duration:.15s;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{width:60px;padding-top:2px;padding-bottom:2px}.gantt-container .side-header select:focus{outline:none}.gantt-container .date-range-highlight{background-color:var(--g-progress-color);height:calc(var(--gv-lower-header-height) - 6px);top:calc(var(--gv-upper-header-height) + 5px);border-radius:12px;position:absolute}.gantt-container .current-highlight{background:var(--g-today-highlight);z-index:999;width:1px;position:absolute}.gantt-container .current-ball-highlight{background:var(--g-today-highlight);z-index:1001;border-radius:50%;position:absolute}.gantt-container .current-date-highlight{background:var(--g-today-highlight);color:var(--g-text-light);border-radius:5px}.gantt-container .holiday-label{opacity:0;z-index:1000;background:var(--g-weekend-label-color);border-radius:5px;padding:2px 5px;position:absolute;top:0;left:0}.gantt-container .holiday-label.show{opacity:100}.gantt-container .extras{position:sticky;left:0}.gantt-container .extras .adjust{left:8px;top:calc(var(--gv-grid-height) - 60px);background-color:var(--g-actions-background);color:var(--g-text-light);border:none;border-radius:3px;padding:8px;position:absolute}.gantt-container .hide{display:none}.gantt{-webkit-user-select:none;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:.4px}.gantt .tick.thick{stroke:var(--g-tick-color-thick);stroke-width:.7px}.gantt .arrow{fill:none;stroke:var(--g-arrow-color);stroke-width:1.5px}.gantt .bar-wrapper .bar{fill:var(--g-bar-color);stroke:var(--g-bar-border);stroke-width:0;transition:stroke-width .3s}.gantt .bar-progress{fill:var(--g-progress-color);border-radius:4px}.gantt .bar-expected-progress{fill:var(--g-expected-progress)}.gantt .bar-invalid{fill:#0000;stroke:var(--g-bar-border);stroke-width:1px;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 .3s}.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:3px}.gantt .bar-wrapper:hover .bar{transition:transform .3s}.gantt .bar-wrapper:hover .date-range-highlight{display:block}.gantt .grid-column{fill:#0000;pointer-events:all}.gantt .grid-column:hover{fill:var(--g-weekend-highlight-color);transition:fill .1s}:root{--bg:#fff;--bg-soft:#fafafa;--border:#ebebeb;--text:#1a1a1a;--text-muted:#888;--red:#e53935;--yellow:#f9a825;--green:#43a047;--font:"PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans SC", "Source Han Sans SC", system-ui, -apple-system, sans-serif;--nav-w:180px}*,:before,:after{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{font-family:var(--font);color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:none}button,input,select,textarea{font:inherit;color:inherit}button{cursor:pointer;background:0 0;border:none;padding:0}h1,h2,h3{letter-spacing:-.02em;margin:0;font-weight:600}.app-shell{grid-template-columns:var(--nav-w) 1fr;height:100%;min-height:100%;display:grid}.nav{border-right:1px solid var(--border);flex-direction:column;gap:1.75rem;padding:1.5rem 1.25rem;display:flex}.brand-mark{font-size:1.05rem;font-weight:700}.brand-sub{letter-spacing:.06em;text-transform:uppercase;color:var(--text-muted);margin-top:.15rem;font-size:.7rem}.nav-links{flex-direction:column;flex:1;gap:.65rem;display:flex}.nav-link{color:var(--text-muted);font-size:.9rem}.nav-link:hover,.nav-link.active{color:var(--text)}.nav-link.active{font-weight:600}.nav-foot{border-top:1px solid var(--border);color:var(--text-muted);flex-direction:column;gap:.5rem;padding-top:.75rem;font-size:.85rem;display:flex}.main{flex-direction:column;min-width:0;height:100%;min-height:0;padding:1.75rem 2.25rem 3rem;display:flex;overflow:auto}.main:has(.tasks-page--gantt){padding-bottom:0;overflow:hidden}.tasks-page{flex-direction:column;min-height:0;display:flex}.tasks-page--gantt{flex:1;overflow:hidden}.page-head{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:1rem;margin-bottom:1.5rem;display:flex}.page-head h1{font-size:1.4rem}.page-head p{color:var(--text-muted);margin:.3rem 0 0;font-size:.875rem}.btn,.btn-ghost,.btn-danger,.btn-primary{cursor:pointer;background:0 0;border:none;border-radius:0;padding:0;font-size:.875rem;display:inline}.btn,.btn-primary{color:var(--text);font-weight:600}.btn:hover,.btn-primary:hover{color:var(--text-muted)}.btn-primary{border-bottom:1px solid;padding-bottom:1px}.btn-ghost{color:var(--text-muted);font-weight:400}.btn-ghost:hover{color:var(--text)}.btn-danger{color:var(--red);font-weight:400}.btn-danger:hover{opacity:.7}.btn:disabled,.btn-primary:disabled,.btn-ghost:disabled{opacity:.35;cursor:not-allowed}.panel{background:0 0;border:none;padding:0}.grid-stats{grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:1.25rem;margin-bottom:1.75rem;display:grid}.stat-card{background:0 0;border:none;padding:0}.stat-label{color:var(--text-muted);font-size:.75rem}.stat-value{margin-top:.25rem;font-size:1.6rem;font-weight:600;line-height:1.1}.form-grid{gap:1rem;display:grid}.field label{color:var(--text-muted);margin-bottom:.3rem;font-size:.8rem;display:block}.field input,.field select,.field textarea,.tree-composer-input{border:none;border-bottom:1px solid var(--border);background:0 0;border-radius:0;outline:none;width:100%;padding:.45rem 0}.field input:focus,.field select:focus,.field textarea:focus,.tree-composer-input:focus{border-bottom-color:var(--text)}.project-list{flex-direction:column;display:flex}.project-card{border-bottom:1px solid var(--border);padding:.9rem 0;display:block}.project-card:hover{color:var(--text-muted)}.project-dot{vertical-align:middle;border-radius:50%;width:7px;height:7px;margin-right:.45rem;display:inline-block}.tabs{border-bottom:1px solid var(--border);gap:1.25rem;margin-bottom:1.25rem;display:flex}.tab{color:var(--text-muted);background:0 0;border:none;border-bottom:1px solid #0000;margin-bottom:-1px;padding:.5rem 0;font-size:.9rem}.tab.active{color:var(--text);border-bottom-color:var(--text);font-weight:600}.task-tree{margin:0;padding:0;list-style:none}.task-row{border-bottom:1px solid var(--border);grid-template-columns:1fr auto auto;align-items:center;gap:.75rem;padding:.55rem 0;display:grid}.task-row:hover{background:0 0}.task-title{align-items:center;gap:.5rem;min-width:0;display:flex}.badge{color:var(--text-muted);white-space:nowrap;background:0 0;border:none;padding:0;font-size:.75rem;font-weight:500}.badge.todo,.badge.doing,.badge.done,.badge.cancelled,.badge.past-done,.badge.overdue,.badge.future-done,.badge.future-doing,.badge.future-todo{white-space:nowrap;background:0 0;border:none;padding:0;font-size:.75rem;font-weight:500}.badge.todo,.badge.future-todo{color:var(--text-muted)}.badge.doing,.badge.future-doing{color:#1e88e5}.badge.done,.badge.future-done{color:var(--green)}.badge.past-done{color:#6b8f71}.badge.overdue{color:var(--red)}.badge.cancelled{color:var(--text-muted)}.gantt-wrap{border:none;border-top:1px solid var(--border);background:var(--bg);flex-direction:column;flex:1;min-height:0;padding-top:.5rem;display:flex;overflow:hidden}.gantt-wrap-hints{flex-shrink:0}.gantt-host{flex:1;min-height:240px;position:relative;overflow:hidden}.gantt-host .gantt-container{max-height:100%;height:100%!important}.gantt-wrap .gantt{--g-bar-color:#43a047;--g-bar-border:#2e7d32;--g-progress-color:transparent;--g-tick-color:#ebebeb;--g-border-color:#ebebeb;--g-text-dark:#1a1a1a;--g-text-muted:#888;--g-actions-background:#fff}.gantt-wrap .bar-progress{display:none}.gantt-wrap .bar-wrapper.past-done .bar,.gantt-wrap .bar-wrapper.past-done-parent .bar{fill:#6b8f71!important}.gantt-wrap .bar-wrapper.overdue .bar,.gantt-wrap .bar-wrapper.overdue-parent .bar{fill:#e53935!important}.gantt-wrap .bar-wrapper.future-done .bar,.gantt-wrap .bar-wrapper.future-done-parent .bar{fill:#43a047!important}.gantt-wrap .bar-wrapper.future-doing .bar,.gantt-wrap .bar-wrapper.future-doing-parent .bar{fill:#1e88e5!important}.gantt-wrap .bar-wrapper.future-todo .bar,.gantt-wrap .bar-wrapper.future-todo-parent .bar{stroke-width:1.5px;fill:#fff!important;stroke:#1a1a1a!important}.gantt-wrap .bar-wrapper.cancelled .bar,.gantt-wrap .bar-wrapper.cancelled-parent .bar{fill:#bdbdbd!important}.gantt-wrap .bar-wrapper.past-done-parent .bar,.gantt-wrap .bar-wrapper.overdue-parent .bar,.gantt-wrap .bar-wrapper.future-done-parent .bar,.gantt-wrap .bar-wrapper.future-doing-parent .bar,.gantt-wrap .bar-wrapper.future-todo-parent .bar,.gantt-wrap .bar-wrapper.cancelled-parent .bar{opacity:.45}.timer-ring{background:conic-gradient(var(--red) var(--progress,0%), var(--border) 0);border-radius:50%;place-items:center;width:min(240px,70vw);height:min(240px,70vw);margin:0 auto 1.5rem;display:grid;position:relative}.timer-ring:before{content:"";background:var(--bg);border-radius:50%;position:absolute;inset:8px}.timer-time{z-index:1;letter-spacing:-.03em;font-size:2.5rem;font-weight:600;position:relative}.login-page{place-items:center;min-height:100%;padding:2rem;display:grid}.login-page:before{display:none}.login-card{width:min(340px,100%)}.login-card h1{margin-bottom:.2rem;font-size:1.6rem}.login-card .tagline{color:var(--text-muted);margin-bottom:1.75rem;font-size:.9rem}.err{color:var(--red);margin:.5rem 0 0;font-size:.85rem}.muted{color:var(--text-muted)}.row-actions{flex-wrap:wrap;align-items:center;gap:.75rem;display:flex}.empty{color:var(--text-muted);padding:2rem 0}.home-board{grid-template-columns:2fr 1fr;align-items:start;gap:2rem;min-height:calc(100vh - 9rem);display:grid}.home-today,.home-week{min-height:20rem}.home-week{border-left:1px solid var(--border);padding-left:2rem}.home-section-head{justify-content:space-between;align-items:baseline;gap:.75rem;margin-bottom:.85rem;display:flex}.home-section-head h2{font-size:1rem}.home-week-hint{margin:-.35rem 0 .85rem;font-size:.8rem}.home-task-row{border-bottom:1px solid var(--border);grid-template-columns:auto 1fr auto;align-items:center;gap:.65rem;padding:.65rem 0;display:grid}.home-today-list .home-task-row,.home-week .home-task-row{grid-template-columns:auto auto 1fr auto}.home-week .home-task-row{border-bottom:none;padding:.45rem 0}.home-task-main{flex-direction:column;gap:.15rem;min-width:0;display:flex}.home-task-title{text-overflow:ellipsis;white-space:nowrap;font-weight:500;overflow:hidden}.home-task-meta{color:var(--text-muted);flex-wrap:wrap;align-items:center;gap:.5rem;font-size:.75rem;display:flex}.home-task-link{flex-shrink:0}.home-expand{width:3rem;min-width:3rem;height:3rem;color:var(--text-muted);text-align:center;font-size:2.3rem;line-height:3rem}.home-expand.placeholder{visibility:hidden}.home-subtree{border-left:1px solid var(--border);margin:0;padding:0 0 0 .75rem;list-style:none}.tree-composer{border-bottom:1px solid var(--border)!important;grid-template-columns:auto auto 1fr auto!important}.tree-composer-badge{flex-shrink:0}.tree-add-trigger{padding:.65rem 0;border:none!important}.tree-add-btn{color:var(--text-muted);font-size:.875rem}.tree-add-btn:hover{color:var(--text)}@media (width<=860px){.app-shell{grid-template-columns:1fr}.nav{border-right:none;border-bottom:1px solid var(--border);flex-direction:row;align-items:center;gap:1rem;padding:1rem;overflow-x:auto}.nav-links{flex-direction:row;flex:1;gap:1rem}.nav-foot{border:none;flex-direction:row;align-items:center;padding:0}.main{padding:1.25rem}.main:has(.tasks-page--gantt){padding-bottom:0}.home-board{grid-template-columns:1fr;gap:2rem;min-height:0}.home-week{border-left:none;border-top:1px solid var(--border);padding-top:1.5rem;padding-left:0}}
