:root{--bg: #f4f5f7;--panel: #ffffff;--panel2: #fafbfc;--hover: #f2f4f7;--text: #1f2329;--text2: #5f6672;--text3: #8f959e;--border: #e4e6ea;--border2: #d6d9de;--p0: #e5484d;--p1: #e08600;--p2: #3d7eff;--ok: #12a150;--accent: #3d7eff}[data-theme=dark]{--bg: #14161b;--panel: #1b1e25;--panel2: #22262e;--hover: #252a33;--text: #e7e9ed;--text2: #a5abb6;--text3: #7a828e;--border: #2b3038;--border2: #3a4049;--p0: #f2686c;--p1: #f0a23c;--p2: #5b93ff;--ok: #34c27a;--accent: #5b93ff}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{font-family:-apple-system,BlinkMacSystemFont,PingFang SC,Microsoft YaHei,sans-serif;font-size:13px;color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased}button{font:inherit;color:inherit;background:none;border:none;cursor:pointer;padding:0}input,select,textarea{font:inherit;color:var(--text);background:var(--panel);border:1px solid var(--border2);border-radius:8px;padding:5px 9px;outline:none}input:focus,select:focus,textarea:focus{border-color:var(--accent)}input::placeholder,textarea::placeholder{color:var(--text3)}svg{display:block;flex:none}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-thumb{background:var(--border2);border-radius:4px}::-webkit-scrollbar-track{background:transparent}.app{display:grid;grid-template-rows:48px 1fr;grid-template-columns:210px 1fr;height:100vh}.topbar{grid-column:1 / 3;display:flex;align-items:center;gap:12px;padding:0 16px;background:var(--panel);border-bottom:1px solid var(--border)}.topbar-title{font-size:14px;font-weight:600;letter-spacing:.2px}.topbar-search{flex:1;max-width:360px;display:flex;align-items:center;gap:7px;color:var(--text3);background:var(--panel2);border:1px solid var(--border);border-radius:8px;padding:0 10px;height:30px}.topbar-search input{border:none;background:none;padding:0;width:100%}.topbar-spacer{flex:1}.icon-btn{display:flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:7px;color:var(--text2)}.icon-btn:hover{background:var(--hover);color:var(--text)}.sidebar{overflow-y:auto;border-right:1px solid var(--border);background:var(--panel);padding:10px 8px 20px;display:flex;flex-direction:column;gap:2px}.nav-item{display:flex;align-items:center;gap:9px;padding:7px 10px;border-radius:8px;color:var(--text2);text-align:left;width:100%}.nav-item:hover{background:var(--hover)}.nav-item.active{background:var(--hover);color:var(--text);font-weight:500}.nav-item .count{margin-left:auto;color:var(--text3);font-size:12px}.side-sec{margin:16px 10px 6px;font-size:11px;color:var(--text3);letter-spacing:.5px;display:flex;align-items:center;justify-content:space-between}.side-sec button{color:var(--text3);display:flex;padding:2px;border-radius:4px}.side-sec button:hover{color:var(--text);background:var(--hover)}.proj-dot{width:8px;height:8px;border-radius:50%;flex:none}.proj-item{padding:0 4px 0 2px}.proj-main{display:flex;align-items:center;gap:9px;flex:1;min-width:0;color:inherit;text-align:left;padding:7px 6px 7px 8px;border-radius:8px}.proj-main:hover{background:var(--hover)}.proj-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.proj-main .count{margin-left:auto}.proj-edit{display:none;color:var(--text3);padding:4px;border-radius:6px;flex:none}.proj-item:hover .proj-edit{display:flex}.proj-edit:hover{color:var(--text);background:var(--hover)}.proj-item:hover .count{display:none}.main{overflow-y:auto;padding:18px 22px 60px}.btn{border:1px solid var(--border2);background:var(--panel);color:var(--text);border-radius:8px;padding:5px 12px;white-space:nowrap}.btn:hover{background:var(--hover)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--accent);border-color:var(--accent);color:#fff}.btn-primary:hover{background:var(--accent);opacity:.92}.btn-danger{color:var(--p0);border-color:var(--p0)}.btn-danger:hover{background:var(--p0);color:#fff}.btn-sm{padding:2px 8px;font-size:12px;border-radius:6px}.composer{margin-bottom:14px}.composer-input{display:flex;align-items:center;gap:8px;background:var(--panel);border:1px solid var(--border2);border-radius:12px;padding:4px 6px;box-shadow:0 1px 2px #00000008}.composer-input:focus-within{border-color:var(--accent)}.composer-input input{border:none;background:none;flex:1;padding:7px 0;font-size:13.5px}.composer-proj{border:none;background:var(--panel2);font-size:12px;padding:5px 6px;border-radius:7px;max-width:118px;flex:none}.composer-input kbd{font-family:inherit;font-size:11px;color:var(--text3);border:1px solid var(--border);border-radius:5px;padding:1px 6px;background:var(--panel2)}.composer-preview{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-top:7px;padding-left:4px;min-height:22px;color:var(--text2)}.chip{display:inline-flex;align-items:center;gap:5px;font-size:12px;background:var(--panel2);border:1px solid var(--border);border-radius:6px;padding:1px 8px}.chip-title{color:var(--text)}.chip.due-overdue{color:var(--p0);border-color:color-mix(in srgb,var(--p0) 40%,transparent)}.filterbar{display:flex;align-items:center;gap:10px;margin-bottom:12px;color:var(--text2);flex-wrap:wrap}.filterbar select{padding:3px 6px;font-size:12.5px}.filterbar label{display:flex;align-items:center;gap:4px;font-size:12.5px;cursor:pointer}.task-group-title{display:flex;align-items:center;gap:8px;margin:18px 2px 8px;color:var(--text2);font-size:12.5px;font-weight:500}.task-group-title:first-child{margin-top:2px}.task-group-title .n{color:var(--text3);font-weight:400}.task-list{display:flex;flex-direction:column;gap:2px}.task-table{overflow-x:auto;padding-bottom:6px}.trow{display:grid;grid-template-columns:30px minmax(180px,1.2fr) 168px 78px 76px 128px minmax(120px,1fr) 30px;gap:10px;align-items:center;min-width:900px;padding:7px 12px;background:var(--panel);border:1px solid var(--border);border-radius:10px;cursor:pointer}.t-del{display:flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:6px;color:var(--text3);opacity:0;transition:opacity .1s}.trow:hover .t-del{opacity:1}.t-del:hover{color:var(--p0);background:color-mix(in srgb,var(--p0) 10%,transparent)}.trow:hover{border-color:var(--border2);background:var(--panel2)}.trow-head{border:none;background:none;padding:0 13px 6px;cursor:default;color:var(--text3);font-size:11.5px;-webkit-user-select:none;user-select:none}.trow-head:hover{border-color:transparent}.trow-head:hover{background:none;border-color:transparent}.trow.done .cell-title,.trow.done .cell-note{color:var(--text3);text-decoration:line-through}.cell{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-radius:6px;padding:3px 6px;margin-left:-6px;cursor:text;font-size:12.5px;display:flex;align-items:center;gap:5px}.cell:hover{background:var(--hover)}.cell input,.cell select{width:100%;min-width:0;padding:2px 4px;font-size:12.5px;border-radius:5px;border:1px solid var(--accent);background:var(--panel)}.cell input[type=datetime-local]{padding:1px 4px}.cell-empty{color:var(--text3)}.t-title-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.t-due-overdue{color:var(--p0)}.t-due-soon{color:var(--p1)}.st{font-size:12px}.st-todo{color:var(--text2)}.st-doing{color:var(--accent)}.st-blocked{color:var(--p0)}.st-done{color:var(--text3)}.t-check{width:18px;height:18px;border-radius:50%;border:1.5px solid var(--border2);display:flex;align-items:center;justify-content:center;color:#fff;flex:none;background:transparent}.t-check:hover{border-color:var(--accent)}.t-check.checked{background:var(--ok);border-color:var(--ok)}.t-proj{display:flex;align-items:center;gap:5px;min-width:0;overflow:hidden}.t-note-icon{color:var(--text3);display:flex}.prio-tag{font-size:11px;padding:0 5px;border-radius:4px;line-height:17px}.prio-1{color:var(--p0);background:color-mix(in srgb,var(--p0) 12%,transparent)}.prio-2{color:var(--p1);background:color-mix(in srgb,var(--p1) 14%,transparent)}.prio-3{color:var(--text2);background:var(--hover)}[data-theme=dark] .prio-1{color:var(--p0)}.empty{color:var(--text3);padding:40px 0;text-align:center}.board-hint{color:var(--text3);font-size:12px;margin:0 0 10px 2px}.board-hint button{color:var(--accent)}.board{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;align-items:start}.board-col{background:var(--panel2);border:1px solid var(--border);border-radius:12px;padding:10px;min-height:300px;transition:border-color .12s}.board-col.drag-over{border-color:var(--accent)}.board-col-title{display:flex;align-items:center;gap:7px;padding:2px 4px 10px;color:var(--text2);font-weight:500;font-size:12.5px}.board-col-title .n{color:var(--text3);font-weight:400}.board-cards{display:flex;flex-direction:column;gap:8px;min-height:60px}.board-card{background:var(--panel);border:1px solid var(--border);border-radius:10px;padding:9px 11px;cursor:grab}.board-card:active{cursor:grabbing}.board-card.drag-over-top{box-shadow:0 -2px 0 var(--accent)}.bc-title{margin-bottom:6px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bc-meta{display:flex;align-items:center;gap:8px;font-size:11.5px;color:var(--text2);flex-wrap:wrap}.timeline{display:flex;gap:0;overflow-x:auto;padding-bottom:10px;align-items:flex-start}.tl-col{flex:none;width:178px;border-right:1px solid var(--border);padding:0 8px 20px;min-height:300px}.tl-col:first-child{padding-left:2px}.tl-head{position:sticky;top:0;background:var(--bg);padding:4px 2px 10px;z-index:1}.tl-head .d1{font-size:12.5px;font-weight:500}.tl-head .d2{font-size:11px;color:var(--text3)}.tl-col.overdue-col .d1{color:var(--p0)}.tl-cards{display:flex;flex-direction:column;gap:6px}.tl-card{background:var(--panel);border:1px solid var(--border);border-radius:8px;padding:6px 8px;cursor:pointer;border-left-width:3px}.tl-card:hover{background:var(--panel2)}.tl-card .tt{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-bottom:3px}.tl-card .tm{font-size:11px;color:var(--text2);display:flex;gap:6px;align-items:center}.tl-card .tm.overdue{color:var(--p0)}.stats-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}.stat-card{background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:16px 18px}.stat-card h3{margin:0 0 14px;font-size:12.5px;font-weight:500;color:var(--text2)}.donut-wrap{display:flex;align-items:center;gap:22px}.legend{display:flex;flex-direction:column;gap:7px;flex:1;min-width:0}.legend-row{display:flex;align-items:center;gap:8px;font-size:12.5px}.legend-row .lc{margin-left:auto;color:var(--text3)}.big-num{font-size:30px;font-weight:600}.big-num small{font-size:13px;color:var(--text2);font-weight:400;margin-left:4px}.pbar-row{display:flex;align-items:center;gap:10px;margin-bottom:12px;font-size:12.5px}.pbar-row .lbl{width:66px;flex:none}.pbar{flex:1;height:8px;border-radius:4px;background:var(--hover);overflow:hidden}.pbar>i{display:block;height:100%;border-radius:4px}.pbar-row .num{width:84px;text-align:right;color:var(--text3);flex:none}.drawer-mask{position:fixed;top:48px;right:0;bottom:0;left:0;background:#0000001f;z-index:40}.drawer{position:fixed;top:48px;right:0;bottom:0;width:460px;max-width:92vw;background:var(--panel);border-left:1px solid var(--border);z-index:50;display:flex;flex-direction:column;box-shadow:-6px 0 24px #0000000f}.drawer-head{display:flex;align-items:center;gap:8px;padding:12px 16px;border-bottom:1px solid var(--border);flex:none}.drawer-head .t{font-weight:600;flex:1}.drawer-body{overflow-y:auto;padding:14px 18px 24px;flex:1}.drawer-foot{display:flex;gap:8px;padding:12px 16px;border-top:1px solid var(--border);flex:none;align-items:center}.d-sec{margin-bottom:20px}.d-sec-title{font-size:11.5px;color:var(--text3);margin-bottom:9px;letter-spacing:.5px}.d-field{display:flex;align-items:center;gap:10px;margin-bottom:8px}.d-field>label{width:64px;flex:none;color:var(--text2);text-align:right}.d-field>input,.d-field>select{flex:1;min-width:0}.d-field>input[type=number]{width:90px;flex:none}.d-field textarea{width:100%;min-height:84px;resize:vertical}.seg{display:flex;border:1px solid var(--border2);border-radius:8px;overflow:hidden;flex:1}.seg button{flex:1;padding:5px 0;color:var(--text2);border-right:1px solid var(--border)}.seg button:last-child{border-right:none}.seg button.on{background:var(--accent);color:#fff}.log-item{border:1px solid var(--border);border-radius:10px;padding:9px 11px;margin-bottom:8px}.log-item .lh{display:flex;align-items:center;gap:8px;color:var(--text2);margin-bottom:4px}.log-item .lh .time{color:var(--text3);font-size:11.5px;margin-left:auto}.log-item .lt{font-weight:500}.log-note-input{display:flex;gap:6px;margin-top:6px}.log-note-input input{flex:1}.log-note-text{color:var(--text2);margin-top:4px}.log-add-btn{color:var(--text3);font-size:12px;margin-top:4px}.log-add-btn:hover{color:var(--accent)}.modal-mask{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000040;z-index:60;display:flex;align-items:center;justify-content:center}.modal{width:480px;max-width:92vw;background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:18px 20px}.modal h3{margin:0 0 14px;font-size:14px}.modal .field{margin-bottom:12px}.modal .field input{width:100%}.modal .hint{color:var(--text3);font-size:12px;margin:6px 0 0;line-height:1.6}.modal .row-end{display:flex;gap:8px;justify-content:flex-end;margin-top:16px}.trash-row{display:flex;align-items:center;gap:10px;padding:8px 12px;margin-bottom:6px;background:var(--panel);border:1px solid var(--border);border-radius:10px}.trash-row .tt{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text2)}.trash-row .td{color:var(--text3);font-size:12px;flex:none}.toast{position:fixed;bottom:26px;left:50%;transform:translate(-50%);z-index:100;background:var(--text);color:var(--bg);border-radius:8px;padding:8px 16px;font-size:12.5px;box-shadow:0 4px 16px #0000002e;max-width:70vw}.toast.error{background:var(--p0);color:#fff}@media (max-width: 860px){.app{grid-template-columns:56px 1fr}.nav-item span.nav-text,.side-sec,.proj-item span{display:none}.board,.stats-grid{grid-template-columns:1fr}.topbar-search{max-width:none}}
