:root{--bg:#f5f4f0;--card:#fff;--line:#e6e3da;--line-2:#efece4;--ink:#2c2c2a;--ink-2:#6b6962;--ink-3:#8a877f;--accent:#9a7b3c;--todo:#d92d20;--doing:#dd8400;--review:#6b5bd6;--done:#a3a19a;--err-bg:#fcebeb;--err:#a32d2d;--ok:#2f6b34;--radius:10px}*{box-sizing:border-box}html,body{margin:0}body{background:var(--bg);color:var(--ink);-webkit-text-size-adjust:100%;font-family:-apple-system,BlinkMacSystemFont,PingFang TC,Noto Sans TC,Microsoft JhengHei,sans-serif;font-size:15px;line-height:1.6}a{color:inherit;text-decoration:none}h1{margin:0;font-size:24px;line-height:1.3}h2{margin:0;font-size:16px}h3{color:var(--ink-2);margin:20px 0 6px;font-size:14px}p{margin:0}button,input,select,textarea{font:inherit;color:inherit}.muted{color:var(--ink-2)}.small{font-size:13px}.spacer{flex:1}.nowrap{white-space:nowrap}.pad{padding:20px}.c-todo{color:var(--todo)}.c-doing{color:var(--doing)}.c-review{color:var(--review)}.top{z-index:20;background:var(--card);border-bottom:1px solid var(--line);align-items:center;gap:20px;padding:8px 24px;display:flex;position:sticky;top:0}.brand{flex:none;align-items:center;gap:8px;font-size:17px;font-weight:700;display:flex}.nav{scrollbar-width:none;flex:1;gap:2px;display:flex;overflow-x:auto}.nav a{color:var(--ink-2);white-space:nowrap;border-radius:8px;padding:6px 12px}.nav a:hover{background:var(--bg);color:var(--ink)}.nav a.on{background:var(--ink);color:#fff}.me{flex:none;align-items:center;gap:12px;font-size:14px;display:flex}.main{max-width:1680px;margin:0 auto;padding:20px 24px 60px}.page-head{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px;margin-bottom:16px;display:flex}.year-nav{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.btn{border:1px solid var(--line);background:var(--card);cursor:pointer;white-space:nowrap;border-radius:8px;justify-content:center;align-items:center;gap:6px;min-height:36px;padding:0 14px;display:inline-flex;position:relative}.btn:hover{border-color:var(--ink-3)}.btn.primary{background:var(--ink);border-color:var(--ink);color:#fff}.btn.primary:hover{background:#444441}.btn.danger{color:var(--err)}.btn:disabled{opacity:.55;cursor:not-allowed}.ghost{cursor:pointer;color:var(--ink-2);background:0 0;border:0;border-radius:6px;padding:4px 8px;font-size:13px}.ghost:hover:not(:disabled){background:var(--bg);color:var(--ink)}.ghost:disabled{opacity:.4;cursor:default}.ghost.danger{color:var(--err)}.link{cursor:pointer;color:var(--ink-2);text-underline-offset:3px;background:0 0;border:0;padding:0;text-decoration:underline;position:relative}.is-busy{cursor:progress}.is-busy .btn-label{visibility:hidden}.spinner{border:2px solid;border-right-color:#0000;border-radius:50%;width:14px;height:14px;margin:auto;animation:.7s linear infinite spin;position:absolute;inset:0}.busy-note{color:var(--ink-2);margin-left:8px;font-size:13px}.busy-note:empty{display:none}@keyframes spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion:reduce){.spinner{animation-duration:2s}}.code-input{text-align:center;color:#fff;text-transform:uppercase;border:0;border-radius:6px;width:44px;padding:5px 0;font-weight:700}.code{color:#fff;border-radius:4px;flex:none;padding:0 6px;font-size:11.5px;font-weight:700;line-height:18px;display:inline-block}.sdot{background:var(--line);border-radius:50%;flex:none;width:9px;height:9px;margin-right:5px;display:inline-block}.sdot.st-todo{background:var(--todo)}.sdot.st-doing{background:var(--doing)}.sdot.st-review{background:var(--review)}.sdot.st-done{background:var(--done)}.sdot.st-none{box-shadow:inset 0 0 0 1.5px var(--ink-3);background:#fff}.bar{background:var(--line-2);border-radius:3px;height:6px;display:inline-block;overflow:hidden}.bar i{background:var(--accent);border-radius:3px;height:100%;display:block}.recent{vertical-align:2px;background:#2f7fe0;border-radius:50%;width:7px;height:7px;margin-left:6px;display:inline-block}.panel{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);margin-bottom:16px;padding:16px 18px}.panel>h2{margin-bottom:8px}.count{color:var(--ink-3);font-size:13px;font-weight:600}.check{color:var(--ink-2);white-space:nowrap;align-items:center;gap:5px;font-size:13px;display:inline-flex}.seg{border:1px solid var(--line);background:var(--card);border-radius:8px;align-self:flex-start;display:inline-flex;overflow:hidden}.seg-btn{cursor:pointer;color:var(--ink-2);border:0;border-right:1px solid var(--line);background:0 0;padding:5px 12px;font-size:13px}.seg-btn:last-child{border-right:0}.seg-btn.on{background:var(--ink);color:#fff}.seg-btn.on.st-todo{background:var(--todo)}.seg-btn.on.st-doing{background:var(--doing)}.seg-btn.on.st-review{background:var(--review)}.seg-btn.on.st-done{background:var(--done)}input:not([type=checkbox]):not([type=range]),select,textarea{border:1px solid var(--line);background:#fdfcfa;border-radius:7px;max-width:100%;min-height:34px;padding:5px 9px}input:focus,select:focus,textarea:focus{border-color:var(--ink);background:#fff;outline:none;box-shadow:0 0 0 3px #2c2c2a14}textarea{resize:vertical;width:100%;line-height:1.5}.field{flex-direction:column;gap:3px;min-width:0;display:flex}.field .label{color:var(--ink-3);font-size:12px;font-weight:600}.field-row{flex-wrap:wrap;gap:10px;display:flex}.field-row .field{flex:130px}.field-row .field.narrow{flex:0 0 96px}.field-row .field input,.field-row .field select{width:100%}.field-error,.form-error{color:var(--err);font-size:13px}.form-error:not(.inline){background:var(--err-bg);border-radius:8px;margin-bottom:10px;padding:8px 10px}.saved{color:var(--ok);font-size:13px}.kpis{grid-template-columns:repeat(6,minmax(0,1fr));gap:12px;margin-bottom:16px;display:grid}.kpi{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);align-items:baseline;gap:10px;padding:12px 16px;display:flex}.kpi b{font-variant-numeric:tabular-nums;font-size:28px;line-height:1.1}.kpi span{color:var(--ink-2);font-size:14px}a.kpi:hover{border-color:var(--ink-3)}.overview{grid-template-columns:minmax(0,1fr) 360px;align-items:start;gap:16px;display:grid}.unit-grid{grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:12px;display:grid}.unit-card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);border-top:4px solid;flex-direction:column;gap:8px;padding:12px 14px;display:flex}.unit-card:hover{box-shadow:0 2px 10px #2c2c2a14}.unit-card-head{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.unit-card-head b{font-size:16px}.unit-card-stats{flex-wrap:wrap;gap:4px 12px;font-size:13px;display:flex}.unit-card-stats span{align-items:center;display:inline-flex}.unit-card-goal{color:var(--ink-2);align-items:center;gap:8px;display:flex}.unit-card-goal .bar{flex:1}.agenda{margin:0;padding:0;list-style:none}.agenda li+li{border-top:1px solid var(--line-2)}.agenda a{grid-template-columns:78px minmax(0,1fr) auto;align-items:baseline;gap:8px;padding:6px 0;font-size:14px;display:grid}.agenda a:hover .what{text-decoration:underline}.agenda .when{color:var(--ink-2);font-variant-numeric:tabular-nums;font-size:13px}.agenda .when.c-todo{color:var(--todo)}.agenda .what{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.agenda .tag{white-space:nowrap;font-size:12px;font-weight:600}.eta{color:var(--ink-3);border:1px solid var(--line);border-radius:4px;margin-right:5px;padding:0 4px;font-size:10.5px;font-style:normal;font-weight:700}.more-link{color:var(--ink-2);margin-top:6px;font-size:13px;display:inline-block}.unit-tabs{scrollbar-width:thin;gap:2px;margin:-8px 0 14px;display:flex;overflow-x:auto}.unit-tabs a{white-space:nowrap;color:var(--ink-2);opacity:.6;border-bottom:3px solid;padding:6px 12px;font-size:14px}.unit-tabs a:hover{opacity:1}.unit-tabs a.on{opacity:1;color:var(--ink);background:var(--card);border-radius:8px 8px 0 0;font-weight:700}.unit-head{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);border-left:6px solid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:8px 24px;margin-bottom:14px;padding:12px 18px;display:grid}.unit-title{align-items:center;gap:10px;display:flex}.unit-title h1{font-size:28px}.lead{color:var(--ink-2);font-size:15px}.unit-fvo{align-items:baseline;gap:10px;min-width:0;display:flex}.fvo-label{letter-spacing:.08em;color:var(--accent);flex:none;font-size:12px;font-weight:700}.fvo{font-size:17px;font-weight:600}.unit-tools{align-items:center;gap:16px;display:flex}.legend{color:var(--ink-2);gap:12px;font-size:13px;display:flex}.legend span{align-items:center;display:inline-flex}.pager{align-items:center;gap:6px;display:inline-flex}.pager a,.pager .off{border:1px solid var(--line);border-radius:8px;justify-content:center;align-items:center;width:30px;height:30px;font-size:18px;line-height:1;display:inline-flex}.pager a:hover{border-color:var(--ink-3)}.pager .off{opacity:.3}.editable{cursor:text;border-radius:4px}.editable:hover{background:#f1efe8}.placeholder{color:var(--ink-3);font-style:italic;font-weight:400}.inline-input{width:100%;min-width:180px}.unit-title .inline-input{width:160px}.board{grid-template-columns:minmax(0,1.25fr) minmax(0,1fr);align-items:start;gap:14px;display:grid}.board-left{flex-direction:column;gap:14px;min-width:0;display:flex}.board-right{min-width:0}.sec{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:12px 14px 8px}.sec-head{border-bottom:1px solid var(--line-2);justify-content:space-between;align-items:center;gap:12px;margin-bottom:4px;padding-bottom:6px;display:flex}.sec-head h2{color:var(--ink-2);letter-spacing:.02em;font-size:15px}.goal-avg{align-items:center;gap:8px;display:inline-flex}.goal-avg .bar{width:120px;height:8px}.goal-avg b{font-variant-numeric:tabular-nums;font-size:18px}.empty{color:var(--ink-3);padding:4px 0 8px}.add-row{opacity:.65;gap:4px;padding-top:2px;display:flex}.add-row:hover{opacity:1}.outline{min-height:6px;margin:0;padding:0;list-style:none}.row{border-radius:6px;scroll-margin-top:110px}.row:target{background:#fdf6e3}.row.is-open{background:#faf9f5}.row.drop-before{box-shadow:0 -2px 0 var(--accent)}.drop-line{background:var(--accent);height:2px;list-style:none}.row-main{align-items:flex-start;gap:6px;padding:3px 4px 3px 0;display:flex;position:relative}.row.lv1 .row-main{padding-left:26px}.row.lv2 .row-main{padding-left:52px}.grip{width:14px;color:var(--line);cursor:grab;letter-spacing:-2px;-webkit-user-select:none;user-select:none;text-align:center;flex:none;font-size:11px;line-height:26px}.row:hover .grip{color:var(--ink-3)}.dot{border:1.5px solid var(--ink-3);cursor:pointer;background:#fff;border-radius:50%;flex:none;width:14px;height:14px;margin-top:6px;padding:0}.dot:disabled{cursor:default}.st-todo>.row-main .dot{background:var(--todo);border-color:var(--todo)}.st-doing>.row-main .dot{background:var(--doing);border-color:var(--doing)}.st-review>.row-main .dot{background:var(--review);border-color:var(--review)}.st-done>.row-main .dot{background:var(--done);border-color:var(--done)}.row-body{flex:1;min-width:0}.title{white-space:pre-wrap;overflow-wrap:anywhere;margin-left:-3px;padding:0 3px;font-size:16.5px;font-weight:500;line-height:26px}.row.lv1 .title,.row.lv2 .title{font-size:15.5px}.st-todo>.row-main .title{color:var(--todo)}.st-doing>.row-main .title{color:var(--doing)}.st-review>.row-main .title{color:var(--review)}.st-done>.row-main .title{color:var(--done)}.row.heading{margin-top:6px}.row.heading:first-child{margin-top:0}.row.heading .title{color:var(--ink);font-size:16.5px;font-weight:700}.row.heading .grip{margin-right:0}.title-input{width:100%;font-size:16px;min-height:30px!important;padding:2px 6px!important}.chips{vertical-align:2px;flex-wrap:wrap;gap:6px;margin-left:8px;display:inline-flex}.chip{color:var(--ink-2);white-space:nowrap;font-variant-numeric:tabular-nums;background:#f1efe8;border-radius:9px;align-items:center;gap:5px;padding:0 7px;font-size:12px;line-height:18px;display:inline-flex}.chip.overdue{background:var(--err-bg);color:var(--todo);font-weight:600}.chip.owner{border:1px solid var(--line);background:0 0}.chip.sub{color:var(--done);background:#eef3ec;font-weight:600}.chip.sub.all{background:var(--done);color:#fff}.chip.sub .bar{width:34px;height:5px}.chip.sub.all .bar{background:#ffffff59}.chip.sub.all .bar i{background:#fff}.chip.progress .bar{width:44px;height:5px}.note{color:var(--ink-2);white-space:pre-wrap;overflow-wrap:anywhere;-webkit-line-clamp:2;cursor:pointer;-webkit-box-orient:vertical;margin:0 0 2px;font-size:13px;display:-webkit-box;overflow:hidden}.row-ops{flex:none;align-items:center;gap:2px;display:flex}.indent-btn{cursor:pointer;width:24px;height:24px;color:var(--ink-3);text-align:center;opacity:0;white-space:nowrap;background:0 0;border:0;border-radius:6px;width:auto;min-width:24px;padding:0 3px;font-size:13px;font-weight:600;line-height:24px;transition:opacity .15s,background .15s}.row:hover .indent-btn,.indent-btn:focus-visible,.row.is-open .indent-btn{opacity:.7}.indent-btn:hover:not(:disabled){opacity:1;color:var(--ink);background:#f1efe8}.indent-btn:disabled{display:none}.shortcut-hint{color:var(--ink-3);font-size:12px}.more{cursor:pointer;width:26px;height:26px;color:var(--ink-3);opacity:0;background:0 0;border:0;border-radius:6px;flex:none;font-weight:700;transition:opacity .15s,background .15s}.row:hover .more,.more:focus-visible,.row.is-open .more{opacity:.7}.more:hover{opacity:1;color:var(--ink);background:#f1efe8}.detail{border:1px solid var(--line);background:var(--card);border-radius:8px;flex-direction:column;gap:10px;margin:2px 4px 8px 20px;padding:10px 12px;display:flex}.detail-actions{flex-wrap:wrap;align-items:center;gap:4px;display:flex}.detail-actions select{min-height:28px;padding:2px 6px;font-size:13px}.toast{z-index:50;background:var(--ink);color:#fff;border-radius:10px;align-items:center;gap:8px;max-width:calc(100vw - 32px);padding:8px 10px 8px 16px;font-size:14px;display:flex;position:fixed;bottom:24px;left:50%;transform:translate(-50%);box-shadow:0 6px 24px #0003}.toast .ghost{color:#e6e3da}.toast .ghost:hover{color:#fff;background:#444441}.year-switch{flex-wrap:wrap;align-items:center;gap:10px;margin-top:14px;display:flex}.year-switch a:hover{color:var(--ink)}.cal-legend{flex-wrap:wrap;align-items:center;gap:6px;margin-bottom:14px;display:flex}.legend-chip{color:#fff;cursor:pointer;border:0;border-radius:6px;padding:3px 12px;font-size:13px;font-weight:700}.legend-chip.off{opacity:.28}a.legend-chip{text-decoration:none;display:inline-block}.legend-chip.all{background:var(--ink)}.cal-legend .check{margin-left:8px}.cal-grid{grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:14px;display:grid}.cal-grid.n3,.cal-grid.n6{grid-template-columns:repeat(3,minmax(0,1fr))}.cal-cell{display:flex}.cal-cell>.cal-month{flex:1;min-width:0}.cal-big{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:12px 14px 14px}.big-grid{border-top:1px solid var(--line);border-left:1px solid var(--line);grid-template-columns:repeat(7,minmax(0,1fr));display:grid}.big-wd{text-align:center;color:var(--ink-2);border-right:1px solid var(--line);border-bottom:1px solid var(--line);background:#faf9f5;padding:6px 0;font-size:12.5px;font-weight:600}.big-wd.weekend{color:var(--ink-3)}.big-day{border-right:1px solid var(--line);border-bottom:1px solid var(--line);flex-direction:column;gap:3px;min-width:0;min-height:112px;padding:4px 4px 6px;display:flex}.big-day.addable{cursor:pointer}.big-day.addable:hover{background:#fcfbf8}.big-day.weekend{background:#fbfaf7}.big-day.out{background:#f7f6f2}.big-day.out .big-num{color:#c3c0b8;font-size:12px}.big-num{text-align:center;font-variant-numeric:tabular-nums;min-width:24px;color:var(--ink);background:0 0;border:0;border-radius:12px;align-self:flex-start;padding:0 5px;font-size:14px;font-weight:600;line-height:24px}button.big-num{cursor:pointer}button.big-num:hover{background:var(--line-2)}.big-day.weekend .big-num{color:var(--ink-3)}.big-day.today .big-num{background:var(--todo);color:#fff}.big-chip{text-align:left;white-space:nowrap;text-overflow:ellipsis;border:0;border-radius:4px;width:100%;padding:0 6px;font-size:12.5px;line-height:19px;display:block;overflow:hidden}.big-chip.ev{color:#fff;font-weight:600}button.big-chip{cursor:pointer}button.big-chip:hover,a.big-chip:hover{filter:brightness(.94)}.big-chip.ev.cont{opacity:.75}.big-chip.eta{color:var(--ink-2);background:#f3f1ec;align-items:center;gap:5px;display:flex}.big-chip.eta .swatch.diamond{flex:none;width:7px;height:7px}.big-chip.eta.done{color:var(--done);text-decoration:line-through}.big-more{color:var(--ink-3);padding:0 6px;font-size:12px}.big-list-head{color:var(--ink-2);margin:16px 0 0;font-size:15px}.cal-month{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:12px 14px}.cal-month h2{color:var(--todo);margin-bottom:4px;font-size:18px;font-weight:600}.cal-days{grid-template-columns:repeat(7,1fr);gap:1px;display:grid}.wd{text-align:center;color:var(--ink-3);padding:2px 0;font-size:12px}.day{font-variant-numeric:tabular-nums;background:0 0;border:0;border-radius:6px;flex-direction:column;align-items:center;min-height:36px;padding:2px 0 3px;display:flex}button.day{cursor:pointer}button.day:hover{background:var(--bg)}.day .num{text-align:center;border-radius:50%;width:24px;font-size:14px;line-height:22px}.day.weekend .num{color:var(--ink-3)}.day.has .num{font-weight:700}.day.today .num{background:var(--todo);color:#fff;font-weight:700}.marks{align-items:center;gap:2px;height:5px;display:flex}.marks i{border-radius:2px;width:12px;height:4px}.marks i:only-child:not(.eta-mark){width:20px}.marks .eta-mark{background:var(--ink-3);border-radius:0;width:5px;height:5px;transform:rotate(45deg)}.cal-list{border-top:1px solid var(--line-2);min-height:8px;margin:8px 0 0;padding:6px 0 0;list-style:none}.cal-item{text-align:left;background:0 0;border:0;border-radius:6px;grid-template-columns:12px 76px minmax(0,1fr);align-items:baseline;gap:6px;width:100%;padding:2px 4px;font-size:13.5px;display:grid}button.cal-item,a.cal-item{cursor:pointer}button.cal-item:hover,a.cal-item:hover{background:var(--bg)}.swatch{border-radius:3px;align-self:center;width:10px;height:10px}.swatch.diamond{background:0 0;border:2px solid;border-radius:0;justify-self:center;width:8px;height:8px;transform:rotate(45deg)}.cal-item .when{color:var(--ink-2);font-variant-numeric:tabular-nums;white-space:nowrap;font-size:12.5px}.cal-item .what{overflow-wrap:anywhere;font-weight:600}.cal-item.eta .what{color:var(--ink-2);font-weight:400}.cal-item.eta.done .what{color:var(--done);text-decoration:line-through}.cal-item em{color:var(--ink-3);margin-left:6px;font-size:11.5px;font-style:normal}.dialog{border:1px solid var(--line);width:min(520px,100vw - 24px);color:var(--ink);border-radius:14px;padding:20px 22px;box-shadow:0 16px 60px #00000040}.dialog::backdrop{background:#2c2c2a66}.dialog h2{margin-bottom:12px;font-size:18px}.dialog form{flex-direction:column;gap:12px;display:flex}.dialog-actions{align-items:center;gap:8px;margin-top:4px;display:flex}.gantt{--lw:320px;background:var(--card);border:1px solid var(--line);border-radius:var(--radius);-webkit-overflow-scrolling:touch;margin-bottom:10px;overflow-x:auto}.gantt>*{width:calc(var(--lw) + var(--tw,900px))}.gantt{max-height:calc(100vh - 230px);overflow:auto}.gantt-nav{justify-content:flex-end;gap:6px;margin:-4px 0 8px;display:flex}.g-track{cursor:grab}.gantt.panning,.gantt.panning .g-track{cursor:grabbing;-webkit-user-select:none;user-select:none}.g-row{grid-template-columns:var(--lw) minmax(0, 1fr);border-top:1px solid var(--line-2);display:grid}.g-row:hover{background:#faf9f5}.g-head{background:var(--card);z-index:10;border-top:0;position:sticky;top:0}.g-label{border-right:1px solid var(--line);z-index:5;background:var(--card);align-items:center;gap:6px;min-width:0;padding:4px 10px 4px 14px;font-size:13.5px;display:flex;position:sticky;left:0;box-shadow:2px 0 6px #2c2c2a08}.g-head .g-label{z-index:15;background:#faf9f5}.g-title{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}a.g-label:hover .g-title{text-decoration:underline}.g-when{color:var(--ink-3);white-space:nowrap;font-variant-numeric:tabular-nums;font-size:12px}.g-when.c-todo{color:var(--todo)}.g-track{min-height:30px;position:relative}.g-col{border-right:1px solid var(--line-2);position:absolute;top:0;bottom:0}.g-col:nth-of-type(2n){background:#f5f4f066}.g-col.weekend{background:#e8e5dc73}.g-col.strong{border-left:1px solid var(--line)}.g-tick-label{text-align:center;color:var(--ink-2);border-right:1px solid var(--line-2);white-space:nowrap;font-size:12.5px;font-weight:600;line-height:30px;position:absolute;top:0;overflow:hidden}.view-12 .g-tick-label:not(.band){font-size:12px;font-weight:500}.g-tick-label.weekend{color:var(--ink-3);background:#e8e5dc73}.g-tick-label.now{color:var(--todo);font-weight:700}.g-tick-label.band{text-align:left;color:var(--ink);padding-left:8px}.g-band{position:static}.g-band .g-track,.g-head-2 .g-track{min-height:26px}.g-band .g-tick-label,.g-head-2 .g-tick-label{line-height:26px}.g-today{background:var(--todo);opacity:.65;z-index:2;width:2px;margin-left:-1px;position:absolute;top:0;bottom:0}.g-bar{z-index:1;background:#7d8590;border-radius:4px;min-width:6px;height:14px;position:absolute;top:8px}.g-bar.st-todo{background:var(--todo)}.g-bar.st-doing{background:var(--doing)}.g-bar.st-review{background:var(--review)}.g-bar.st-done{background:var(--done)}.g-bar.overdue{outline:2px solid var(--todo);outline-offset:1px}.g-diamond{z-index:1;background:#7d8590;border-radius:2px;width:12px;height:12px;position:absolute;top:9px;transform:translate(-50%)rotate(45deg)}.g-diamond.st-todo{background:var(--todo)}.g-diamond.st-doing{background:var(--doing)}.g-diamond.st-review{background:var(--review)}.g-diamond.st-done{background:var(--done)}.g-diamond.overdue{outline:2px solid var(--todo);outline-offset:1px}.g-group{border-left:5px solid var(--ink-3);z-index:4;width:max-content;min-width:var(--lw);box-sizing:border-box;background:#faf9f5;border-radius:0 0 8px;align-items:baseline;gap:10px;padding:7px 14px 5px;font-size:14px;display:flex;position:sticky;left:0}.g-block,.gantt>.g-group{border-top:1px solid var(--line)}.g-group a:hover{text-decoration:underline}.filters{flex-wrap:wrap;gap:6px;margin-bottom:10px;display:flex}.pill{border:1px solid var(--line);background:var(--card);color:var(--ink-2);border-radius:999px;align-items:center;gap:6px;padding:4px 12px;font-size:14px;display:inline-flex}.pill.sm{padding:2px 10px;font-size:13px}.pill:hover{border-color:var(--ink-3)}.pill.on{background:var(--ink);color:#fff;border-color:var(--ink)!important}.pill.on .count{color:#d9d5ca}.table-wrap{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);margin-top:6px;overflow-x:auto}.table{border-collapse:collapse;width:100%;font-size:14.5px}.table th{text-align:left;color:var(--ink-3);border-bottom:1px solid var(--line);white-space:nowrap;padding:8px 12px;font-size:12.5px;font-weight:600}.table td{border-top:1px solid var(--line-2);vertical-align:top;padding:7px 12px}.table tr:hover td{background:#faf9f5}.table td a:hover{text-decoration:underline}.set-row{border-top:1px solid var(--line-2);flex-wrap:wrap;align-items:center;gap:8px 14px;padding:8px 0;transition:background .15s;display:flex}.set-row.is-dirty{background:#faf8f2;border-radius:8px;margin:0 -10px;padding:8px 10px}.set-row.inactive{opacity:.55}.set-main{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.set-main input:not([type=checkbox]){width:150px}.set-main input.num{width:70px}.set-main input.code-input{flex:none;width:48px}.set-main .email{min-width:210px}.set-divs{flex-wrap:wrap;flex:1;gap:4px;display:flex}.div-check{cursor:pointer;opacity:.5;border:1.5px solid;border-radius:6px;align-items:center;gap:4px;padding:1px 8px;font-size:12.5px;font-weight:600;display:inline-flex}.div-check.on{opacity:1;background:#faf9f5}.set-actions{align-items:center;gap:8px;display:flex}.auth{justify-content:center;align-items:center;min-height:100vh;padding:24px 16px;display:flex}.card{background:var(--card);border:1px solid var(--line);border-radius:16px;flex-direction:column;align-items:flex-start;gap:14px;width:100%;max-width:400px;padding:28px;display:flex}.kb-scroll{padding-bottom:6px;overflow-x:auto}.kb{flex-direction:column;gap:10px;min-width:920px;display:flex}.kb-cols{grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;display:grid}.kb-colhead{background:var(--card);border:1px solid var(--line);border-top:4px solid var(--ink-3);border-radius:var(--radius);flex-direction:column;gap:2px;padding:8px 12px;display:flex}.kb-colhead.st-todo{border-top-color:var(--todo)}.kb-colhead.st-doing{border-top-color:var(--doing)}.kb-colhead.st-review{border-top-color:var(--review)}.kb-colhead.st-done{border-top-color:var(--done)}.kb-lane{flex-direction:column;gap:6px;display:flex}.kb-lane-head{flex-wrap:wrap;align-items:center;gap:8px;padding:4px 2px 0;font-size:14px;display:flex}.kb-col{border-radius:var(--radius);background:#efede6;border:2px solid #0000;flex-direction:column;gap:6px;min-height:64px;padding:6px;display:flex}.kb-col.over{border-color:var(--ink-3);background:#e7e4da}.kb-card{background:var(--card);border:1px solid var(--line);border-left:4px solid var(--ink-3);border-radius:8px;flex-direction:column;gap:5px;padding:7px 9px 6px;display:flex}.kb-card[draggable=true]{cursor:grab}.kb-card.dragging{opacity:.4}.kb-card.st-todo{border-left-color:var(--todo)}.kb-card.st-doing{border-left-color:var(--doing)}.kb-card.st-review{border-left-color:var(--review)}.kb-card.st-done{border-left-color:var(--done)}.kb-card.st-done .kb-title{color:var(--ink-3);text-decoration:line-through}.kb-card.stuck{border-color:#f1c4bd;border-left-color:var(--todo);background:#fff6f4}.kb-title{overflow-wrap:anywhere;color:var(--ink);font-size:14px;font-weight:600;line-height:1.4}.kb-title:hover{text-decoration:underline}.kb-meta{color:var(--ink-2);flex-wrap:wrap;align-items:center;gap:6px;font-size:12px;display:flex}.kb-unit{text-overflow:ellipsis;white-space:nowrap;max-width:9em;overflow:hidden}.kb-owner{font-weight:600}.kb-due.late{color:var(--todo);font-weight:600}.kb-age{background:var(--bg);font-variant-numeric:tabular-nums;border-radius:999px;margin-left:auto;padding:0 7px}.kb-age.stuck{background:var(--todo);color:#fff;font-weight:700}.kb-move{justify-content:flex-end;gap:4px;display:flex}.kb-move button{border:1px solid var(--line);background:var(--card);cursor:pointer;width:30px;height:24px;color:var(--ink-2);border-radius:6px;padding:0;font-size:16px;line-height:1}.kb-move button:hover:not(:disabled){border-color:var(--ink-3);color:var(--ink)}.kb-move button:disabled{opacity:.3;cursor:default}.wip{background:var(--bg);color:var(--ink-2);font-variant-numeric:tabular-nums;border-radius:999px;padding:0 8px;font-size:12px;display:inline-block}.wip.over{background:var(--err-bg);color:var(--err);font-weight:700}@media (max-width:1100px){.kpis{grid-template-columns:repeat(3,minmax(0,1fr))}.overview,.board,.unit-head{grid-template-columns:1fr}.gantt{--lw:240px}.cal-grid.n3,.cal-grid.n6{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width:640px){.top{flex-wrap:wrap;gap:10px;padding:8px 12px}.nav{flex-basis:100%;order:3}.me{margin-left:auto}.main{padding:14px 12px 60px}.kpis{grid-template-columns:repeat(2,minmax(0,1fr))}.unit-title h1{font-size:23px}.legend{display:none}.more{opacity:1}.gantt{--lw:170px}.g-when{display:none}.cal-grid.n3,.cal-grid.n6{grid-template-columns:1fr}.big-day{min-height:64px;padding:2px}.big-chip{height:6px;padding:0;font-size:0;line-height:6px}.big-chip.eta{background:var(--ink-3);height:6px}.big-chip .swatch{display:none}.big-more{padding:0;font-size:10.5px}}@media print{.top,.unit-tabs,.add-row,.more,.grip,.year-switch,.toast,.pager{display:none!important}body{background:#fff}.main{padding:0}}@media (hover:none){.indent-btn{opacity:.7}}.small-btn{min-height:28px;padding:2px 10px;font-size:13px}.history{margin:0;padding:0;list-style:none}.history li{border-top:1px solid var(--line-2);grid-template-columns:130px 70px 64px minmax(0,1fr) auto;align-items:baseline;gap:10px;padding:7px 4px;font-size:13.5px;display:grid}.history li:first-child{border-top:0}.history .when{color:var(--ink-3);font-variant-numeric:tabular-nums;font-size:12.5px}.history .act{font-weight:600}.history .act.delete{color:var(--todo)}.history .act.restore,.history .act.create{color:var(--done)}.history .what{overflow-wrap:anywhere;min-width:0}.history .chg{color:var(--ink-2);font-size:12.5px;display:block}.history .chg del{color:var(--ink-3)}.history-day{color:var(--ink-3);margin:14px 0 4px;font-size:13px;font-weight:600}@media (max-width:760px){.history li{grid-template-columns:1fr auto}.history .when,.history .who{grid-column:1}}.capture-btn{min-height:30px;padding:3px 12px;font-weight:600}.capture-due{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.capture-due input{width:150px}.chip-btn{border:1px solid var(--line);background:var(--card);cursor:pointer;color:var(--ink-2);border-radius:14px;align-items:baseline;gap:5px;padding:3px 10px;font-size:13px;display:inline-flex}.chip-btn small{color:var(--ink-3);font-size:11.5px}.chip-btn.on{background:var(--ink);color:#fff;border-color:var(--ink)}.chip-btn.on small{color:#ddd}.dialog.capture textarea{resize:vertical;width:100%}.my-list{margin:0;padding:0;list-style:none}.my-item{border-top:1px solid var(--line-2);padding:8px 2px}.my-item:first-child{border-top:0}.my-row{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.my-row .title{overflow-wrap:anywhere;flex:260px;min-width:0;font-weight:600}.my-row .dot{flex:none}.unit-tag{color:#fff;white-space:nowrap;border-radius:9px;padding:0 7px;font-size:12px;line-height:18px}.steps{flex-direction:column;gap:3px;margin:6px 0 0 30px;padding:0;list-style:none;display:flex}.steps li{align-items:center;gap:7px;font-size:13.5px;display:flex}.steps li.lv2{margin-left:22px}.steps li.done span{color:var(--ink-3);text-decoration:line-through}.steps input[type=checkbox]{width:16px;height:16px;accent-color:var(--done)}.step-add{gap:6px;margin:4px 0 0 30px;display:flex}.step-add input{flex:1;max-width:360px;min-height:28px;font-size:13px}.new-badge{color:#fff;background:var(--doing);border-radius:8px;padding:0 6px;font-size:11px;font-weight:700;line-height:16px}.review-grid{grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;display:grid}.review-col h3{align-items:center;gap:6px;margin:0 0 6px;font-size:14px;display:flex}.review-col ul{flex-direction:column;gap:6px;margin:0;padding:0;list-style:none;display:flex}.review-card{border:1px solid var(--line);background:var(--card);border-radius:8px;padding:7px 9px;font-size:13.5px}.review-card a{font-weight:600}.review-card .meta{color:var(--ink-3);flex-wrap:wrap;gap:6px;margin-top:3px;font-size:12px;display:flex}.review-col.stuck .review-card{border-color:var(--todo);background:var(--err-bg)}@media (max-width:1000px){.review-grid{grid-template-columns:1fr 1fr}}@media (max-width:600px){.review-grid{grid-template-columns:1fr}}.kpis.k4{grid-template-columns:repeat(4,minmax(0,1fr))}@media (max-width:700px){.kpis.k4{grid-template-columns:repeat(2,minmax(0,1fr))}}.my-row .dot.st-doing{background:var(--doing);border-color:var(--doing)}.my-row .dot.st-review{background:var(--review);border-color:var(--review)}.my-row .dot.st-done{background:var(--done);border-color:var(--done)}.my-item.st-done .my-row .title{color:var(--done)}.my-row .dot{margin-top:0}.rb-group{padding:2px 0 4px}.rb-group+.rb-group{margin-top:6px}.rb-group-head{align-items:center;gap:6px;padding:8px 0 2px;scroll-margin-top:110px;display:flex}.rb-group-head h3{color:var(--ink);letter-spacing:.01em;margin:0 0 0 -3px;padding:0 3px;font-size:15px;font-weight:700}.rb-group-input{max-width:320px;font-weight:700}.rb-items,.rb-steps{margin:0;padding:0;list-style:none}.rb-item{border-radius:8px;padding:2px 0;scroll-margin-top:110px}.rb-item:target,.rb-step:target{background:#fdf6e3}.rb-item.is-open{background:#faf9f5}.rb-item.dragging,.rb-step.dragging{opacity:.4}.rb-item.drop-before,.rb-step.drop-before{box-shadow:0 -2px 0 var(--accent)}.rb-item.drop-into{outline:2px dashed var(--accent);outline-offset:-1px}.rb-line{align-items:flex-start;gap:8px;min-height:30px;padding:3px 4px 3px 0;display:flex}.rb-body{flex-wrap:wrap;flex:1;align-items:baseline;gap:2px 8px;min-width:0;padding-top:2px;display:flex}.rb-title{color:var(--ink);white-space:pre-wrap;overflow-wrap:anywhere;margin-left:-3px;padding:0 3px;font-size:16px;font-weight:500;line-height:24px}.rb-step .rb-title{color:var(--ink-2);font-size:15px;font-weight:400}.rb-item.st-done>.rb-line .rb-title,.rb-step.st-done .rb-title{color:var(--ink-3);-webkit-text-decoration:line-through #8a877f80;text-decoration:line-through #8a877f80}.rb-meta{flex-wrap:wrap;gap:6px;display:inline-flex}.rb-note{color:var(--ink-2);white-space:pre-wrap;overflow-wrap:anywhere;-webkit-line-clamp:2;cursor:pointer;-webkit-box-orient:vertical;margin:-2px 0 4px 52px;font-size:13px;display:-webkit-box;overflow:hidden}.rb-step .rb-note{margin-left:48px}.rb-grip{color:#0000;cursor:grab;letter-spacing:-2px;-webkit-user-select:none;user-select:none;text-align:center;flex:none;width:14px;font-size:11px;line-height:28px}.rb-grip.small{line-height:24px}.rb-item:hover>.rb-line .rb-grip,.rb-step:hover .rb-grip{color:var(--ink-3)}.rb-check,.rb-box{cursor:pointer;color:#fff;background:#fff;border:1.8px solid #bdb9ae;border-radius:50%;flex:none;place-items:center;width:20px;height:20px;margin-top:3px;padding:0;transition:background .12s,border-color .12s;display:inline-grid}.rb-box{border-radius:5px;width:17px;height:17px;margin-top:4px}.rb-check:hover:not(:disabled),.rb-box:hover:not(:disabled){border-color:var(--accent)}.rb-check[aria-pressed=true],.rb-box[aria-pressed=true]{background:#6f9a5b;border-color:#6f9a5b}.rb-check:disabled,.rb-box:disabled{cursor:default}.rb-item.st-doing>.rb-line .rb-check{border-color:var(--doing);box-shadow:inset 0 0 0 3px #fff,inset 0 0 0 10px #dd840040}span.rb-box{cursor:default;border-style:dashed}.rb-ring{cursor:default;flex:none;align-items:center;gap:4px;margin-top:3px;display:inline-flex}.rb-ring svg{display:block}.rb-ring .track{fill:#fff;stroke:#e6e3da;stroke-width:3px}.rb-ring .fill{fill:none;stroke:var(--doing);stroke-width:3px;stroke-linecap:round;transition:stroke-dasharray .2s}.rb-ring.st-done .fill{stroke:#6f9a5b}.rb-ring.st-done .track{fill:#6f9a5b;stroke:#6f9a5b}.rb-ring .tick{fill:none;stroke:#fff;stroke-width:2px;stroke-linecap:round;stroke-linejoin:round}.rb-ring b{color:var(--ink-2);font-variant-numeric:tabular-nums;min-width:24px;font-size:12px;font-weight:600}.rb-tag{border:1px solid var(--line);color:var(--ink-3);white-space:nowrap;cursor:pointer;background:#fff;border-radius:10px;flex:none;align-self:center;padding:0 8px;font-size:12px;line-height:18px}button.rb-tag:hover:not(:disabled){border-color:var(--ink-3);color:var(--ink)}button.rb-tag:disabled{cursor:default}.rb-tag.st-doing{color:#a86400;background:#fff4e0;border-color:#f2cf8f;font-weight:600}.rb-tag.st-review{color:var(--review);background:#efedfc;border-color:#c9c2f2;font-weight:600}.rb-tag.st-done{color:#4d7a3a;background:#eef4ea;border-color:#c8dcbd}.rb-tag.derived{cursor:default}button.rb-tag.st-none{opacity:0;transition:opacity .12s}.rb-item:hover>.rb-line button.rb-tag.st-none,button.rb-tag.st-none:focus-visible{opacity:1}.rb-ops{opacity:0;flex:none;gap:2px;transition:opacity .12s;display:inline-flex}.rb-item:hover>.rb-line .rb-ops,.rb-step:hover .rb-ops,.rb-ops:focus-within,.is-open>.rb-line .rb-ops{opacity:1}.rb-icon{color:var(--ink-3);cursor:pointer;white-space:nowrap;background:0 0;border:0;border-radius:6px;min-width:26px;padding:0 5px;font-size:12.5px;font-weight:600;line-height:24px}.rb-icon:hover{color:var(--ink);background:#f1efe8}.rb-group-head .rb-icon{opacity:0}.rb-group-head:hover .rb-icon,.rb-group-head .rb-icon:focus-visible{opacity:1}.rb-steps{border-left:2px solid #eeebe3;margin:0 0 2px 30px;padding-left:12px}.rb-step{border-radius:6px;scroll-margin-top:110px}.rb-step .rb-line{gap:7px;min-height:26px;padding:1px 4px 1px 0}.rb-step.adding .rb-line,.rb-step.adding{align-items:center;gap:7px;padding:2px 4px 2px 21px;display:flex}.rb-input{width:100%;font-size:15.5px;min-height:30px!important;padding:2px 8px!important}.rb-input.add{background:#fffdf8;border-style:dashed}.rb-add{border-radius:6px;padding:2px 0 2px 22px}.rb-add.drop-on{box-shadow:0 -2px 0 var(--accent)}.rb-add-btn{color:var(--ink-3);cursor:pointer;background:0 0;border:0;border-radius:6px;margin-left:-6px;padding:3px 6px;font-size:14px}.rb-add-btn:hover{color:var(--ink);background:#f1efe8}.rb-add-btn .muted{margin-left:2px;font-size:12.5px}.rb-foot{border-top:1px dashed var(--line-2);gap:6px;margin-top:6px;padding:6px 0 2px;display:flex}.rb-add-group{max-width:420px}.rb-detail{margin:4px 4px 8px 52px}.rb-step .rb-detail{margin-left:24px}.rb-hint{grid-column:1/-1;margin:0}@media (hover:none){.rb-ops,.rb-group-head .rb-icon,button.rb-tag.st-none{opacity:1}.rb-grip{display:none}}@media (max-width:640px){.rb-note,.rb-detail{margin-left:28px}.rb-steps{margin-left:10px}}span.dot{cursor:default;display:inline-block}.live-meeting{background:#fdecea;border-radius:16px;align-items:center;gap:6px;padding:2px 4px 2px 10px;display:inline-flex}.live-meeting a{color:var(--todo);align-items:center;gap:6px;font-size:13px;font-weight:700;text-decoration:none;display:inline-flex}.live-meeting i{background:var(--todo);border-radius:50%;width:8px;height:8px;animation:1.6s ease-in-out infinite live-pulse}@keyframes live-pulse{50%{opacity:.3}}.danger-btn{color:var(--todo);border-color:#f0b8b2}.danger-btn:hover{background:#fdecea}
