nx-kv 0.11.0 → 0.11.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +15 -0
- package/package.json +1 -1
- package/src/modules/localtask/index.js +4 -1
- package/src/modules/localtask/service.js +22 -4
- package/src/modules/localtask/view.jsx +19 -1
- package/src/web/frontend/style.css +6 -4
- package/src/web/public/assets/{CliHints-CW3CNN-a.js → CliHints-C-BFn59G.js} +1 -1
- package/src/web/public/assets/{index-CavBxD_P.css → index-Bi6ABn3T.css} +1 -1
- package/src/web/public/assets/{index-bExI8RZr.js → index-CAoAkDuU.js} +2 -2
- package/src/web/public/assets/{view-Cud3f17v.js → view-B_8D1S1p.js} +1 -1
- package/src/web/public/assets/view-CGbnAQ7o.js +2 -0
- package/src/web/public/assets/{view-JCaMEOQu.js → view-CuAyOXB0.js} +1 -1
- package/src/web/public/assets/{view-CvSI8bnC.js → view-D0i4WoOA.js} +1 -1
- package/src/web/public/assets/{view-Dw9EcIvL.js → view-DJbamokf.js} +1 -1
- package/src/web/public/index.html +2 -2
- package/src/web/public/assets/view-C_l0o2rw.js +0 -2
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,21 @@
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [0.11.1] - 2026-10-23 单个项目目录也能从远程导入 + 面板导入 ref/refs 键修复
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
- **每个项目目录单独也能从远程导入**。目录看板的每一行操作列现在都有「导入」按钮
|
|
12
|
+
(全局池行同样有),点开就是同一个子弹窗:按主题筛选 + 单条勾选,导入落点是
|
|
13
|
+
**这一行的目录队列**——不用先点开它的队列再导。
|
|
14
|
+
|
|
15
|
+
### Fixed
|
|
16
|
+
|
|
17
|
+
- **【面板上点「导入」什么也没发生】**。action 只读 `ctx.ref`(CLI 的 `--ref` flag 名),
|
|
18
|
+
而面板 body 发的是 `refs`;HTTP body 里未声明的键会原样透传,于是 `ctx.ref` 是
|
|
19
|
+
undefined → 后端报「要导入的远程任务不能为空」,面板**静默导了 0 条**。
|
|
20
|
+
现在 `ref` 与 `refs` 两个键都收(合并逻辑抽成纯函数 `mergeImportRefs()`,可单测)。
|
|
21
|
+
|
|
7
22
|
## [0.11.0] - 2026-10-23 远程任务导入 + 仓库上下文迁入 + 面板视觉收敛
|
|
8
23
|
|
|
9
24
|
### Added
|
package/package.json
CHANGED
|
@@ -147,7 +147,10 @@ export default {
|
|
|
147
147
|
},
|
|
148
148
|
run: (ctx) =>
|
|
149
149
|
service.importRemoteTasks({
|
|
150
|
-
|
|
150
|
+
// ref(CLI 的 --ref,可给多次)与 refs(面板发的列表)**都传过去**:
|
|
151
|
+
// HTTP body 里未声明的键会原样透传,两边各叫各的更顺手。
|
|
152
|
+
ref: ctx.ref,
|
|
153
|
+
refs: ctx.refs,
|
|
151
154
|
cwd: ctx.cwd,
|
|
152
155
|
global: ctx.global,
|
|
153
156
|
topic: ctx.topic,
|
|
@@ -1143,14 +1143,31 @@ async function todoService() {
|
|
|
1143
1143
|
return todoMod;
|
|
1144
1144
|
}
|
|
1145
1145
|
|
|
1146
|
+
/**
|
|
1147
|
+
* 合并两个来源的"要导入的远程任务内容":**ref**(CLI 的 `--ref`,可给多次)与
|
|
1148
|
+
* **refs**(面板发的列表)。
|
|
1149
|
+
*
|
|
1150
|
+
* 为什么两个键:CLI 的 flag 叫 `--ref`(沿用 todo 模块"按内容定位"的约定),
|
|
1151
|
+
* 面板一次要导多条,发的是 `refs`;HTTP body 里未声明的键会原样透传,所以两个
|
|
1152
|
+
* 都可能到 action 的 ctx 里。**只认一个就会整批丢掉**——曾经只读 `ctx.ref`,
|
|
1153
|
+
* 面板那次导入静默地导了 0 条。
|
|
1154
|
+
*
|
|
1155
|
+
* 单独抽成纯函数是为了能单测(真跑导入要连远程后端,单测里连不上)。
|
|
1156
|
+
*/
|
|
1157
|
+
export function mergeImportRefs(refs, ref) {
|
|
1158
|
+
const a = Array.isArray(refs) ? refs : [];
|
|
1159
|
+
const b = Array.isArray(ref) ? ref : [];
|
|
1160
|
+
return [...a, ...b].map((r) => String(r ?? '').trim()).filter(Boolean);
|
|
1161
|
+
}
|
|
1162
|
+
|
|
1146
1163
|
/**
|
|
1147
1164
|
* 从远程清单导入任务到本地队列。
|
|
1148
1165
|
*
|
|
1149
1166
|
* @param {object} opts
|
|
1150
1167
|
* @param {string} [opts.cwd] 目标本地目录(不给则用当前目录)
|
|
1151
1168
|
* @param {boolean} [opts.global] true = 导入到全局共享池
|
|
1152
|
-
* @param {Array} opts.refs
|
|
1153
|
-
*
|
|
1169
|
+
* @param {Array} [opts.refs] 要导入的远程任务**内容整串**(面板发这个)
|
|
1170
|
+
* @param {Array} [opts.ref] 同上,CLI 的 `--ref` 走这个键
|
|
1154
1171
|
* @param {string} [opts.topic] 远程主题(消歧用)
|
|
1155
1172
|
* @param {number} [opts.pick] 同内容多条时的编号(消歧用)
|
|
1156
1173
|
* @param {number|string} [opts.groupId] 远程工作空间(缺省 = 当前)
|
|
@@ -1158,12 +1175,13 @@ async function todoService() {
|
|
|
1158
1175
|
export async function importRemoteTasks({
|
|
1159
1176
|
cwd: rawCwd,
|
|
1160
1177
|
global: toGlobal = false,
|
|
1161
|
-
refs
|
|
1178
|
+
refs,
|
|
1179
|
+
ref,
|
|
1162
1180
|
topic,
|
|
1163
1181
|
pick,
|
|
1164
1182
|
groupId,
|
|
1165
1183
|
} = {}) {
|
|
1166
|
-
const list =
|
|
1184
|
+
const list = mergeImportRefs(refs, ref);
|
|
1167
1185
|
if (!list.length) throw badInput('要导入的远程任务不能为空(按内容指定 --ref)');
|
|
1168
1186
|
|
|
1169
1187
|
const todo = await todoService();
|
|
@@ -1035,7 +1035,25 @@ export default function SessionTaskView() {
|
|
|
1035
1035
|
}}
|
|
1036
1036
|
title="把远程(KV 后端)上还没人领的任务勾几条搬进全局任务池"
|
|
1037
1037
|
>
|
|
1038
|
-
|
|
1038
|
+
导入
|
|
1039
|
+
</button>
|
|
1040
|
+
)}
|
|
1041
|
+
{/* 每个项目目录**单独**也能从远程导入(#73:「全局任务栏里面,队列栏
|
|
1042
|
+
里面也可以从中提取」)——不用先点开它的队列,直接在看板这一行
|
|
1043
|
+
把远程任务搬进这个目录的队列。 */}
|
|
1044
|
+
{!row.isGlobal && (
|
|
1045
|
+
<button
|
|
1046
|
+
className="btn small ghost"
|
|
1047
|
+
onClick={(e) => {
|
|
1048
|
+
e.stopPropagation();
|
|
1049
|
+
setModal({
|
|
1050
|
+
title: `从远程清单导入到「${row.name}」的队列`,
|
|
1051
|
+
importRemote: { global: false, cwd: row.cwd, name: row.name },
|
|
1052
|
+
});
|
|
1053
|
+
}}
|
|
1054
|
+
title={`把远程(KV 后端)上还没人领的任务勾几条搬进「${row.name}」的队列`}
|
|
1055
|
+
>
|
|
1056
|
+
导入
|
|
1039
1057
|
</button>
|
|
1040
1058
|
)}
|
|
1041
1059
|
{goal ? (
|
|
@@ -806,10 +806,12 @@ table.directory-board { min-width: 780px; table-layout: fixed; border-collapse:
|
|
|
806
806
|
既填上了空位,也让批量删除多一个入口。 */
|
|
807
807
|
.directory-board thead .board-check input { vertical-align: middle; cursor: pointer; }
|
|
808
808
|
.directory-board thead .board-check input:disabled { cursor: default; opacity: 0.35; }
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
.directory-board .board-
|
|
812
|
-
.directory-board .board-
|
|
809
|
+
/* 列宽:操作列塞了 4 个按钮(任务 / 目标 / 删除队列 / 导入),要给够宽度,
|
|
810
|
+
不然最后一个按钮会被挤出格子。目录列相应收窄。 */
|
|
811
|
+
.directory-board .board-directory { width: 36%; min-width: 240px; }
|
|
812
|
+
.directory-board .board-task-state { width: 17%; }
|
|
813
|
+
.directory-board .board-goal-state { width: 17%; }
|
|
814
|
+
.directory-board .board-ops { width: 290px; }
|
|
813
815
|
/* 行内操作:默认低调,hover/选中时全亮(把"操作"从视觉噪音里挪出去)。
|
|
814
816
|
常态 0.5 太像 disabled(disabled 才是 0.4),两态分不清 → 抬到 0.7。 */
|
|
815
817
|
.directory-board .board-ops .btn { opacity: 0.7; transition: opacity 0.12s, background 0.12s; }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{o as e,s as t,t as n}from"./index-
|
|
1
|
+
import{o as e,s as t,t as n}from"./index-CAoAkDuU.js";var r=t();function i({module:t}){let{boot:i}=e(),a=(i?.commands||[]).filter(e=>e.module===t);return a.length?(0,r.jsxs)(`div`,{className:`cli-hint`,children:[(0,r.jsx)(`span`,{className:`cli-hint-label`,children:`CLI 等价(同构命令,加 --json 得机器可读输出):`}),a.map(e=>(0,r.jsx)(n,{className:`cli-cmd`,text:e.command,title:`点击复制:${e.usage}`,children:e.command},e.id))]}):null}export{i as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
:root{--ink:#16181c;--ink-2:#4b515a;--mid:#838a93;--paper:#fff;--canvas:#f7f6f3;--soft:#f2f1ed;--soft-2:#e5e3de;--line:#e7e5e0;--live:#1f7a4d;--warn:#99690f;--danger:#b3261e;--radius:10px;--radius-sm:7px;--shadow-sm:0 1px 2px #16181c0d;--shadow:0 1px 2px #16181c0d, 0 10px 28px -16px #16181c2e;--label:"Bahnschrift", "Segoe UI Variable Display", "Segoe UI", system-ui, sans-serif;--mono:ui-monospace, "Cascadia Mono", "JetBrains Mono", "SF Mono", Menlo, Consolas, "Liberation Mono", "Courier New", monospace}*{box-sizing:border-box}body{color:var(--ink);background:var(--canvas);-webkit-font-smoothing:antialiased;font-variant-numeric:tabular-nums;margin:0;font-family:Segoe UI Variable Text,Segoe UI,system-ui,-apple-system,PingFang SC,Microsoft YaHei,sans-serif;font-size:13px;line-height:1.5}:focus-visible{outline:2px solid var(--ink);outline-offset:1px;border-radius:4px}header{background:var(--paper);box-shadow:0 1px 0 var(--soft-2);z-index:5;align-items:center;gap:20px;padding:12px 20px;display:flex;position:sticky;top:0}.brand{letter-spacing:.4px;align-items:center;gap:7px;font-weight:800;display:inline-flex}.brand img{border-radius:5px;width:20px;height:20px;display:block}.brand .sub{color:var(--mid);margin-left:8px;font-size:12px;font-weight:400}nav{gap:2px;display:inline-flex}.tab{font:inherit;color:var(--mid);cursor:pointer;background:0 0;border:0;border-radius:7px 7px 0 0;padding:7px 12px 8px;font-size:12.5px;transition:color .15s,background .15s;position:relative}.tab:hover{color:var(--ink);background:var(--soft)}.tab.active{color:var(--ink);font-weight:600}.tab.active:after{content:"";background:var(--ink);border-radius:2px 2px 0 0;height:2px;position:absolute;bottom:0;left:10px;right:10px}.meta{color:var(--mid);margin-left:auto;font-family:ui-monospace,Consolas,monospace;font-size:11.5px}#root{flex-direction:column;min-height:100vh;display:flex}main{flex:1 0 auto;width:100%;max-width:1240px;margin:0 auto;padding:18px 20px 28px}.panel{display:none}.panel.active{display:block}.toolbar{flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:10px;display:flex}.toolbar label{color:var(--mid);font-size:12px}.sep{background:var(--soft-2);width:1px;height:20px;margin:0 4px}.grow{max-width:340px}.compose-toolbar{align-items:center}.compose-label{color:var(--mid);white-space:nowrap;font-size:12px}.compose-bar{background:var(--paper);border:1px solid var(--line);border-radius:var(--radius-sm);min-width:0;box-shadow:var(--shadow-sm);flex:auto;align-items:stretch;transition:border-color .15s,box-shadow .15s;display:flex;overflow:hidden}.compose-bar:focus-within{border-color:var(--ink);box-shadow:0 0 0 3px #16181c0f}.compose-bar select,.compose-bar textarea{box-shadow:none;background-color:#0000;border:0;border-radius:0;padding:8px 10px}.compose-bar select:hover,.compose-bar textarea:hover{border-color:#0000}.compose-bar select{border-right:1px solid var(--line);background-color:var(--soft);flex:0 0 232px;font-size:12.5px}.compose-bar textarea{resize:vertical;flex:auto;min-width:180px;min-height:38px;line-height:1.5}.compose-bar .btn{border-radius:var(--radius-sm);flex:none;align-self:center;margin:3px}.compose-bar textarea::placeholder{color:#b3b8bd;font-size:12.5px}@media (width<=820px){.compose-toolbar{flex-direction:column;align-items:stretch;gap:6px}.compose-bar{flex-wrap:wrap}.compose-bar select{border-right:0;border-bottom:1px solid var(--line);flex:100%}.compose-bar textarea{flex:160px}.compose-bar .btn{margin:3px 3px 3px 0}table.directory-board{min-width:620px}.directory-board .board-ops{width:150px}.directory-board .board-directory{width:34%;min-width:200px}.directory-board .board-task-state{width:19%}.directory-board .board-goal-state{width:25%}.board-goal-label,.board-deadline{white-space:nowrap}}input,select,textarea{font:inherit;color:var(--ink);background:var(--paper);border:1px solid var(--line);border-radius:var(--radius-sm);padding:6px 10px;transition:border-color .15s,box-shadow .15s}input::placeholder,textarea::placeholder{color:#b3b8bd}input:focus,select:focus,textarea:focus{border-color:var(--ink);outline:none;box-shadow:0 0 0 3px #16181c12}select{appearance:none;background-image:linear-gradient(45deg, transparent 50%, var(--mid) 50%), linear-gradient(135deg, var(--mid) 50%, transparent 50%);cursor:pointer;background-position:calc(100% - 14px) 52%,calc(100% - 9px) 52%;background-repeat:no-repeat;background-size:5px 5px,5px 5px;padding-right:26px}.goal-form{flex-direction:column;gap:12px;display:flex}.goal-form-section{font-size:12px}.goal-form-title{margin-bottom:4px;font-weight:700}.goal-cwd-input{width:100%}.goal-dur-row{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.goal-dur-input{width:96px}.goal-dur-unit{width:92px}.goal-prompt{resize:vertical;width:100%;line-height:1.55}.goal-hint{color:var(--mid);font-size:11px}.goal-reset{cursor:pointer;align-items:center;gap:6px;font-size:12px;display:flex}.goal-presets{flex-wrap:wrap;gap:6px;margin-top:8px;display:flex}.goal-actions{align-items:center;gap:8px;margin-top:12px;display:flex}.btn{font:inherit;cursor:pointer;border-radius:var(--radius-sm);background:var(--ink);color:var(--paper);border:0;padding:6px 12px;transition:opacity .15s,background .15s,color .15s}.btn:hover{opacity:.86}.btn.ghost{background:var(--soft);color:var(--ink)}.btn.ghost:hover{background:var(--soft-2);opacity:1}.btn.ghost.danger{color:var(--danger);background:0 0;border:1px solid #b3261e4d}.btn.ghost.danger:hover{opacity:1;background:#b3261e12}.btn.small{border-radius:7px;padding:3px 9px;font-size:12px}.btn:disabled{opacity:.4;cursor:default}.btn.danger{color:#fff;background:#b3261e}.toast-stack{z-index:60;pointer-events:none;flex-direction:column;align-items:center;gap:8px;display:flex;position:fixed;bottom:28px;left:50%;transform:translate(-50%)}.toast{background:var(--ink);color:var(--paper);white-space:pre-wrap;word-break:break-all;border-radius:10px;max-width:72vw;padding:9px 16px;font-size:12.5px;box-shadow:0 8px 24px #14161a40}.dlg{-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);z-index:50;background:#fbfbfcdb;justify-content:center;align-items:flex-start;padding:96px 16px;display:flex;position:fixed;inset:0}.dlg-box{background:var(--paper);border-radius:var(--radius);width:min(460px,94vw);padding:16px 18px;box-shadow:0 12px 40px #14161a29}.dlg-title{margin-bottom:6px;font-weight:700}.dlg-msg{color:var(--ink);white-space:pre-wrap;word-break:break-all;margin-bottom:6px}.dlg-input{width:100%;margin:8px 0 4px;font-family:ui-monospace,Consolas,monospace;font-size:12.5px}.dlg-acts{justify-content:flex-end;gap:8px;margin-top:12px;display:flex}.card{background:var(--paper);border-radius:var(--radius);margin-bottom:12px;padding:10px 12px;box-shadow:0 0 0 1px #16181c12}.card.hidden{display:none}.fold-row{border-top:1px solid var(--line);margin-top:8px;padding-top:2px}.fold-row>summary{cursor:pointer;color:var(--ink-2);align-items:center;gap:7px;padding:7px 2px;font-size:12.5px;font-weight:600;list-style:none;display:flex}.fold-row>summary::-webkit-details-marker{display:none}.fold-row>summary:before{content:"▸";color:var(--mid);font-size:10px}.fold-row[open]>summary:before{content:"▾"}.fold-row>summary:hover{color:var(--ink)}.fold-row table{margin-top:4px}.localtask-cli-reference{margin-top:10px}.localtask-cli-reference>details>summary{cursor:pointer;color:var(--ink-2);align-items:center;gap:7px;padding:7px 2px;font-size:12.5px;font-weight:600;list-style:none;display:flex}.localtask-cli-reference>details>summary::-webkit-details-marker{display:none}.localtask-cli-reference>details>summary:before{content:"▸";color:var(--mid);font-size:10px}.localtask-cli-reference>details[open]>summary:before{content:"▾"}.localtask-cli-reference>details>summary:hover{color:var(--ink)}.import-remote-entry{flex-wrap:wrap;align-items:center;gap:8px;margin:-2px 0 8px;font-size:11.5px;display:flex}.import-remote-bar{flex-wrap:wrap;align-items:center;gap:12px;margin-bottom:10px;display:flex}.import-remote-bar label{color:var(--mid);align-items:center;gap:6px;font-size:12px;display:inline-flex}.import-remote-err{border-radius:var(--radius-sm);color:var(--danger);border:1px solid #b3261e4d;margin-bottom:10px;padding:8px 10px;font-size:12px}.import-remote-list{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--paper);max-height:46vh;overflow:auto}.import-remote-item{border-bottom:1px solid var(--line);cursor:pointer;align-items:baseline;gap:8px;padding:7px 10px;font-size:12.5px;display:flex}.import-remote-item:last-child{border-bottom:0}.import-remote-item:hover{background:var(--soft)}.import-remote-item input{flex:none;align-self:center}.import-remote-topic{font-family:var(--mono);color:var(--mid);background:var(--soft);text-overflow:ellipsis;white-space:nowrap;border-radius:4px;flex:none;max-width:120px;padding:1px 6px;font-size:10.5px;overflow:hidden}.import-remote-text{min-width:0;color:var(--ink);flex:auto}.import-remote-actions{align-items:center;gap:8px;margin-top:12px;font-size:11.5px;display:flex}.repo-boards{text-overflow:ellipsis;max-width:220px;overflow:hidden}.compose-context{background:var(--soft);border-radius:var(--radius-sm);color:var(--ink-2);flex-wrap:wrap;align-items:baseline;gap:8px;margin:0 0 6px;padding:5px 10px;font-size:11.5px;display:flex}.compose-context .repo-name{color:var(--ink);font-weight:700}.compose-context .repo-desc{color:var(--ink-2)}.compose-context .repo-boards-list{color:var(--mid);margin-left:auto}.bd-workbench{flex-direction:column;gap:12px;display:flex}.bd-board{padding:0 0 10px}.bd-board.drop{outline:1px dashed var(--ink);outline-offset:-1px}.bd-board .colhead{border-bottom:1px solid var(--line);margin:0;padding:8px 12px}.bd-head h3{margin:0;font-size:13px}.bd-head .bd-count{margin-left:auto;font-size:11px}.bd-grid{grid-template-columns:repeat(auto-fill,118px);justify-content:start;gap:8px;padding:10px 12px 0;display:grid}.bd-card{border:1px solid var(--line);border-radius:var(--radius);background:var(--paper);cursor:grab;text-align:center;flex-direction:column;align-items:center;gap:4px;padding:12px 8px 8px;display:flex;position:relative}.bd-card:hover{border-color:var(--mid);box-shadow:var(--shadow-sm)}.bd-card.dragging{opacity:.45}.bd-card.drop{outline:1px dashed var(--ink);outline-offset:-1px}.bd-card .glyph{background:var(--ink);color:#fff;border-radius:10px;place-items:center;width:38px;height:38px;font-size:16px;font-weight:700;display:grid}.bd-card .nm{text-overflow:ellipsis;white-space:nowrap;max-width:100%;color:var(--ink);font-size:12px;font-weight:600;overflow:hidden}.bd-card .ds{-webkit-line-clamp:2;min-height:28px;color:var(--mid);-webkit-box-orient:vertical;font-size:11px;line-height:14px;display:-webkit-box;overflow:hidden}.bd-card .acts{gap:2px;display:none;position:absolute;top:4px;right:4px}.bd-card:hover .acts{display:inline-flex}.bd-card .acts .btn{padding:1px 4px;font-size:10px}.bd-empty{text-align:center;grid-column:1/-1;padding:14px 0;font-size:11px}.bd-exp{width:100%;font-family:var(--mono);font-size:11px}.colhead{align-items:baseline;gap:8px;margin:2px 2px 8px;display:flex}h3{margin:0;font-size:13px;font-weight:700}.cols{align-items:flex-start;gap:14px;display:flex}.col{flex:1;min-width:0}@media (width<=900px){.cols{flex-direction:column}.col{width:100%}}.list{padding:4px}.row{border-radius:10px;flex-wrap:wrap;align-items:center;gap:8px 10px;padding:8px 10px;transition:background .12s;display:flex}.row:hover{background:var(--soft)}.row+.row{margin-top:2px}.row .tid{color:var(--mid);text-align:right;flex-shrink:0;min-width:30px;font-family:ui-monospace,Consolas,monospace;font-size:11.5px}.row .topic{background:var(--soft-2);white-space:nowrap;border-radius:5px;flex-shrink:0;padding:1px 6px;font-size:12px;font-weight:600}.row .text{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.row .time{color:var(--mid);white-space:nowrap;flex-shrink:0;font-size:11.5px}.row .note{color:var(--mid);word-break:break-word;-webkit-line-clamp:2;-webkit-box-orient:vertical;flex-basis:100%;padding-left:40px;font-size:11.5px;line-height:1.4;display:-webkit-box;overflow:hidden}.row-inline{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.row .name{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-weight:600;overflow:hidden}.row .desc{color:var(--mid);text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:12px;overflow:hidden}.row .acts{flex-shrink:0;align-items:center;gap:6px;margin-left:auto;display:flex}.plats{flex-wrap:wrap;gap:4px;display:flex}.pill{font:inherit;cursor:pointer;background:var(--soft);color:var(--mid);border:0;border-radius:999px;padding:5px 8px;font-size:11px;line-height:1;transition:background .12s,color .12s}.pill:hover{background:var(--soft-2);color:var(--ink)}.pill.on{background:var(--ink);color:var(--paper);font-weight:600}.pill.on.lnk{background:var(--paper);color:var(--ink);border:1.5px dashed var(--ink);padding:4px 6.5px}.tag{border:1px solid var(--soft-2);color:var(--mid);white-space:nowrap;letter-spacing:0;background:0 0;border-radius:4px;padding:1px 6px;font-size:10.5px;font-weight:600}.tag.strong{background:var(--ink);color:var(--paper)}.tag.badge{color:var(--ink-2);border:1px solid var(--soft-2);letter-spacing:.02em;background:0 0;font-weight:600}table{border-collapse:collapse;width:100%}th,td{text-align:left;vertical-align:top;padding:9px 10px}th{color:var(--mid);font-family:var(--label);letter-spacing:.04em;text-transform:uppercase;white-space:nowrap;font-size:10.5px;font-weight:600}tbody tr:hover{background:var(--soft)}tbody tr+tr td{box-shadow:inset 0 1px 0 var(--soft)}.mono,td.path{font-family:var(--mono);word-break:break-all;font-size:11.5px}td.ops{white-space:nowrap}td.ops .btn{margin:0 3px 3px 0}.muted{color:var(--mid)}.bad{font-weight:700}.queue-table{table-layout:fixed}.queue-table .c-drag{width:30px}.queue-table .c-id{width:46px}.queue-table .c-status{width:104px}.queue-table .c-time{width:150px}.queue-table .c-ops{width:196px}.queue-wrap{overflow-x:auto}.queue-table td.task-text{white-space:pre-wrap;word-break:break-word;font-size:12.5px;line-height:1.45}.queue-table .c-time{font-family:var(--mono);color:var(--mid);font-size:11px}.queue-table thead th{background:var(--soft);border-bottom:1px solid var(--line);color:var(--mid);font-family:var(--label);letter-spacing:.04em;text-transform:uppercase;white-space:nowrap;vertical-align:middle;padding:7px 10px;font-size:10.5px;font-weight:600}.queue-table tbody td{vertical-align:middle;padding:8px 10px}.queue-table .board-status{color:var(--ink-2);font-size:11.5px}.queue-table .board-status.done:before{background:var(--soft-2);box-shadow:inset 0 0 0 1.5px var(--soft-2)}.queue-table .board-status.pend:before{background:var(--live);box-shadow:0 0 0 3px #1f7a4d1f}.board-toolbar{background:var(--paper);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow-sm);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px 16px;margin-bottom:10px;padding:10px 12px;display:flex}.board-heading,.board-actions{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.board-heading strong{font-family:var(--label);font-size:13.5px;font-weight:600}.board-heading .muted{font-size:11.5px}.board-live{color:var(--mid);align-items:center;gap:6px;font-size:11px;display:inline-flex}.board-live-dot{background:var(--mid);border-radius:50%;flex:none;width:6px;height:6px}.board-live-dot.ok{background:var(--live);animation:2.4s ease-in-out infinite board-pulse}.board-live-dot.reconnecting{background:var(--danger)}.board-live-dot.connecting{background:var(--mid)}@keyframes board-pulse{0%,to{box-shadow:0 0 #1f7a4d59}50%{box-shadow:0 0 0 3px #1f7a4d00}}@media (prefers-reduced-motion:reduce){.board-live-dot.ok{animation:none}}.board-table-wrap{background:var(--paper);border:1px solid var(--line);border-radius:var(--radius);width:100%;box-shadow:var(--shadow-sm);margin-bottom:12px;overflow-x:auto}table.directory-board{table-layout:fixed;border-collapse:separate;border-spacing:0;min-width:780px}.directory-board thead th{font-family:var(--label);letter-spacing:.04em;text-transform:uppercase;color:var(--mid);text-align:left;background:var(--soft);border-bottom:1px solid var(--line);white-space:nowrap;padding:7px 12px;font-size:10.5px;font-weight:600}.directory-board td{border-bottom:1px solid var(--line);vertical-align:top;padding:8px 12px}.directory-board tbody tr:last-child td{border-bottom:0}.directory-board tbody tr{cursor:pointer;--rail:var(--soft-2);transition:background .12s}.directory-board tbody tr:hover{background:#faf9f6}.directory-board tbody tr td:first-child{box-shadow:inset 2px 0 0 var(--rail)}.directory-board tbody tr[data-state=live]{--rail:var(--live)}.directory-board tbody tr[data-state=stale]{--rail:var(--warn)}.directory-board tbody tr[data-state=pool]{--rail:var(--ink-2)}.directory-board tbody tr.is-active{background:var(--soft);--rail:var(--ink)}.directory-board .board-check{text-align:center;width:34px}.directory-board thead .board-check input{vertical-align:middle;cursor:pointer}.directory-board thead .board-check input:disabled{cursor:default;opacity:.35}.directory-board .board-directory{width:40%;min-width:240px}.directory-board .board-task-state{width:18%}.directory-board .board-goal-state{width:19%}.directory-board .board-ops{width:196px}.directory-board .board-ops .btn{opacity:.7;transition:opacity .12s,background .12s}.directory-board tbody tr:hover .board-ops .btn,.directory-board tbody tr.is-active .board-ops .btn,.directory-board tbody tr:focus-within .board-ops .btn{opacity:1}.board-name-line{align-items:baseline;gap:7px;min-width:0;display:flex}.board-name-line strong{text-overflow:ellipsis;white-space:nowrap;flex:0 auto;font-size:13.5px;font-weight:650;overflow:hidden}.board-cwd{font-family:var(--mono);color:var(--ink-2);white-space:nowrap;text-overflow:ellipsis;flex:0 auto;min-width:0;font-size:10.5px;line-height:1.4;overflow:hidden}.board-cwd .anc{color:var(--mid)}.board-summary-line{align-items:baseline;gap:6px;min-width:0;margin-top:1px;display:flex}.board-summary{min-width:0;color:var(--ink-2);font:inherit;text-align:left;white-space:nowrap;text-overflow:ellipsis;cursor:pointer;background:0 0;border:0;flex:auto;padding:0;font-size:11.5px;line-height:1.4;display:block;overflow:hidden}.board-summary:hover{-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.board-summary.muted{color:var(--mid)}.board-submit{min-width:0;max-width:46%;color:var(--mid);font:inherit;text-align:left;white-space:nowrap;text-overflow:ellipsis;cursor:pointer;background:0 0;border:0;flex:0 auto;padding:0;font-size:11.5px;line-height:1.4;overflow:hidden}.board-submit:hover{color:var(--ink-2);-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.board-count,.board-deadline{font-family:var(--mono);color:var(--mid);letter-spacing:-.01em;margin-top:4px;font-size:10.5px;display:block}.board-count b{color:var(--ink);font-weight:650}.board-count .sep-dot{color:var(--soft-2);margin:0 2px}.board-deadline{font-size:10px}.board-goal-label{color:var(--live);font-family:var(--mono);cursor:pointer;letter-spacing:-.01em;text-overflow:ellipsis;white-space:nowrap;background:0 0;border:0;max-width:100%;padding:0;font-size:11px;font-weight:650;display:block;overflow:hidden}.board-goal-gone{display:block}.board-goal-label:hover{text-underline-offset:2px;text-decoration:underline}.board-ops{white-space:nowrap}.board-ops .btn{margin:0 3px 2px 0}.board-status-row{align-items:center;gap:8px;min-width:0;display:flex}.board-status-row .board-status{flex:0 auto;min-width:0}.board-wait-stop{flex:none}.board-pickup{font-family:var(--mono);color:var(--mid);white-space:nowrap;margin-top:2px;font-size:10.5px}.board-status{color:var(--ink-2);white-space:nowrap;text-overflow:ellipsis;vertical-align:bottom;align-items:center;gap:7px;max-width:100%;font-size:12px;display:inline-flex;overflow:hidden}.board-status:before{content:"";background:var(--soft-2);border-radius:50%;flex:none;width:6px;height:6px}.board-status.live:before{background:var(--live);box-shadow:0 0 0 3px #1f7a4d1f}.board-status.busy:before{background:var(--warn);box-shadow:0 0 0 3px #99690f21}.board-status.pool:before{background:var(--ink)}.board-status.stale:before{box-shadow:inset 0 0 0 1.5px var(--soft-2);background:0 0}.board-empty{text-align:center;padding:30px 16px}.board-empty-mark{border:1.5px dashed var(--soft-2);border-radius:50%;width:26px;height:26px;margin:0 auto 10px}.board-empty-title{color:var(--ink-2);font-size:12.5px;font-weight:600}.board-empty-sub{color:var(--mid);margin-top:3px;font-size:11.5px}.localtask-topic-cards-legacy{display:none}.board-settings-dialog{gap:14px;display:grid}.board-setting-section{border-bottom:1px solid var(--soft-2);padding-bottom:12px}.board-setting-section:last-child{border-bottom:0;padding-bottom:0}.board-setting-title{align-items:center;gap:8px;margin-bottom:6px;font-size:13px;font-weight:700;display:flex}.board-setting-control{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.board-setting-control select{min-width:170px;padding:6px 8px}.board-setting-help{margin:0 0 8px;font-size:11px;line-height:1.4}.board-settings-dialog textarea{box-sizing:border-box;resize:vertical;width:100%;font:inherit;font-size:12px}.board-setting-actions{flex-wrap:wrap;align-items:center;gap:6px;margin-top:8px;display:flex}.board-add-directory label{margin-bottom:5px;font-size:12px;font-weight:700;display:block}.board-add-directory input{box-sizing:border-box;width:100%;font:inherit;padding:8px}.board-add-directory p{margin:6px 0 0;font-size:11px}.copyable{cursor:copy;border-bottom:1px dashed #0000;transition:border-color .12s,color .12s}.copyable:hover{border-bottom-color:var(--mid)}.copyable:active{color:var(--ink)}dd .adapter-dir{margin-right:14px;display:inline-block}.settings{grid-template-columns:120px 1fr;align-items:center;gap:10px 16px;display:grid}.settings dt{color:var(--mid);font-size:12px}.settings dd{margin:0}.row-inline{gap:8px;margin-top:8px;display:flex}.row-inline input{flex:1}.cli-hint{color:var(--mid);flex-wrap:wrap;align-items:baseline;gap:4px 8px;padding:6px 4px 2px;font-size:11.5px;display:flex}.cli-hint-label{flex-basis:100%}.cli-cmd{background:var(--soft);white-space:nowrap;border-radius:5px;padding:1px 6px}.modal{-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);z-index:20;background:#fbfbfcdb;justify-content:center;align-items:flex-start;padding:48px 16px;display:flex;position:fixed;inset:0}.modal.hidden{display:none}.modal-box{background:var(--paper);border-radius:var(--radius);flex-direction:column;width:min(880px,96vw);max-height:84vh;display:flex;overflow:hidden;box-shadow:0 12px 40px #14161a29}.modal-title{box-shadow:0 1px 0 var(--soft);justify-content:space-between;align-items:center;padding:12px 14px;font-weight:700;display:flex}.modal-body{padding:14px;overflow:auto}pre{white-space:pre-wrap;word-break:break-all;margin:0;font-family:ui-monospace,Consolas,monospace;font-size:12px;line-height:1.6}.d-add{background:var(--soft-2);font-weight:600}.d-del{color:var(--mid);text-decoration:line-through}.conflict-file{background:var(--soft);border-radius:10px;margin-bottom:10px;overflow:hidden}.conflict-file .cf-head{justify-content:space-between;align-items:center;padding:8px 12px;font-family:ui-monospace,Consolas,monospace;font-size:12px;display:flex}.conflict-file pre{background:var(--paper);padding:10px 12px}footer{color:var(--mid);text-align:center;padding:14px 20px 24px;font-size:11.5px}footer code{background:var(--soft);border-radius:6px;padding:1px 6px;font-family:ui-monospace,Consolas,monospace}.mdtext,.mdtext-plain{white-space:pre-wrap}.embed-image{vertical-align:middle;margin:0 2px;line-height:0;display:inline-block}.embed-image img{border-radius:var(--radius-sm);background:var(--soft);max-width:100%;max-height:220px;display:block}.embed-image.compact img{max-height:28px;box-shadow:0 0 0 1px var(--soft-2);border-radius:6px}.embed-file{background:var(--soft);color:var(--ink);vertical-align:middle;border-radius:7px;margin:0 2px;padding:1px 8px;font-size:12px;text-decoration:none;display:inline-block}.embed-file:hover{background:var(--soft-2)}.editor{border-radius:var(--radius);flex-direction:column;gap:12px;min-width:min(600px,80vw);display:flex;position:relative}.editor.drag{box-shadow:0 0 0 2px var(--ink)}.editor.drag:after{content:"松手即上传";border-radius:var(--radius);pointer-events:none;background:#ffffffdb;justify-content:center;align-items:center;font-weight:700;display:flex;position:absolute;inset:0}.ed-tip{color:var(--mid);font-size:11.5px;line-height:1.8}.ed-link{font:inherit;color:var(--ink);text-underline-offset:2px;cursor:pointer;background:0 0;border:0;padding:0 2px;font-weight:600;text-decoration:underline}.ed-link:disabled{color:var(--mid);cursor:default;text-decoration:none}.ed-field{flex-direction:column;gap:4px;display:flex}.ed-label{color:var(--mid);letter-spacing:.3px;font-size:11.5px;font-weight:600}.ed-textarea{width:100%;font:inherit;border-radius:var(--radius-sm);background:var(--soft);color:var(--ink);resize:vertical;border:0;padding:9px 11px}.ed-textarea:focus{outline:2px solid var(--soft-2)}.ed-meta{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;display:flex}.ed-acts{flex-wrap:wrap;align-items:center;gap:8px;display:inline-flex}.ed-foot{box-shadow:0 -1px 0 var(--soft) inset;justify-content:space-between;align-items:center;gap:10px;padding-top:10px;display:flex}.preview{border-radius:var(--radius-sm);background:var(--soft);max-height:340px;padding:10px;overflow:auto}.hint{color:var(--mid);font-size:11.5px}.hint code,.ed-tip code,kbd{background:var(--soft-2);border-radius:5px;padding:0 4px;font-family:ui-monospace,Consolas,monospace;font-size:11px}.toggle{background:var(--soft);color:var(--mid);cursor:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap;border-radius:999px;align-items:center;gap:6px;padding:3px 11px;font-size:12px;display:inline-flex;position:relative}.toggle:hover{background:var(--soft-2)}.toggle:focus-within{outline:2px solid var(--soft-2)}.toggle input{opacity:0;width:1px;height:1px;position:absolute}.toggle .dot{background:var(--mid);border-radius:50%;width:7px;height:7px}.toggle.on{background:var(--ink);color:var(--paper)}.toggle.on .dot{background:var(--paper)}
|
|
1
|
+
:root{--ink:#16181c;--ink-2:#4b515a;--mid:#838a93;--paper:#fff;--canvas:#f7f6f3;--soft:#f2f1ed;--soft-2:#e5e3de;--line:#e7e5e0;--live:#1f7a4d;--warn:#99690f;--danger:#b3261e;--radius:10px;--radius-sm:7px;--shadow-sm:0 1px 2px #16181c0d;--shadow:0 1px 2px #16181c0d, 0 10px 28px -16px #16181c2e;--label:"Bahnschrift", "Segoe UI Variable Display", "Segoe UI", system-ui, sans-serif;--mono:ui-monospace, "Cascadia Mono", "JetBrains Mono", "SF Mono", Menlo, Consolas, "Liberation Mono", "Courier New", monospace}*{box-sizing:border-box}body{color:var(--ink);background:var(--canvas);-webkit-font-smoothing:antialiased;font-variant-numeric:tabular-nums;margin:0;font-family:Segoe UI Variable Text,Segoe UI,system-ui,-apple-system,PingFang SC,Microsoft YaHei,sans-serif;font-size:13px;line-height:1.5}:focus-visible{outline:2px solid var(--ink);outline-offset:1px;border-radius:4px}header{background:var(--paper);box-shadow:0 1px 0 var(--soft-2);z-index:5;align-items:center;gap:20px;padding:12px 20px;display:flex;position:sticky;top:0}.brand{letter-spacing:.4px;align-items:center;gap:7px;font-weight:800;display:inline-flex}.brand img{border-radius:5px;width:20px;height:20px;display:block}.brand .sub{color:var(--mid);margin-left:8px;font-size:12px;font-weight:400}nav{gap:2px;display:inline-flex}.tab{font:inherit;color:var(--mid);cursor:pointer;background:0 0;border:0;border-radius:7px 7px 0 0;padding:7px 12px 8px;font-size:12.5px;transition:color .15s,background .15s;position:relative}.tab:hover{color:var(--ink);background:var(--soft)}.tab.active{color:var(--ink);font-weight:600}.tab.active:after{content:"";background:var(--ink);border-radius:2px 2px 0 0;height:2px;position:absolute;bottom:0;left:10px;right:10px}.meta{color:var(--mid);margin-left:auto;font-family:ui-monospace,Consolas,monospace;font-size:11.5px}#root{flex-direction:column;min-height:100vh;display:flex}main{flex:1 0 auto;width:100%;max-width:1240px;margin:0 auto;padding:18px 20px 28px}.panel{display:none}.panel.active{display:block}.toolbar{flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:10px;display:flex}.toolbar label{color:var(--mid);font-size:12px}.sep{background:var(--soft-2);width:1px;height:20px;margin:0 4px}.grow{max-width:340px}.compose-toolbar{align-items:center}.compose-label{color:var(--mid);white-space:nowrap;font-size:12px}.compose-bar{background:var(--paper);border:1px solid var(--line);border-radius:var(--radius-sm);min-width:0;box-shadow:var(--shadow-sm);flex:auto;align-items:stretch;transition:border-color .15s,box-shadow .15s;display:flex;overflow:hidden}.compose-bar:focus-within{border-color:var(--ink);box-shadow:0 0 0 3px #16181c0f}.compose-bar select,.compose-bar textarea{box-shadow:none;background-color:#0000;border:0;border-radius:0;padding:8px 10px}.compose-bar select:hover,.compose-bar textarea:hover{border-color:#0000}.compose-bar select{border-right:1px solid var(--line);background-color:var(--soft);flex:0 0 232px;font-size:12.5px}.compose-bar textarea{resize:vertical;flex:auto;min-width:180px;min-height:38px;line-height:1.5}.compose-bar .btn{border-radius:var(--radius-sm);flex:none;align-self:center;margin:3px}.compose-bar textarea::placeholder{color:#b3b8bd;font-size:12.5px}@media (width<=820px){.compose-toolbar{flex-direction:column;align-items:stretch;gap:6px}.compose-bar{flex-wrap:wrap}.compose-bar select{border-right:0;border-bottom:1px solid var(--line);flex:100%}.compose-bar textarea{flex:160px}.compose-bar .btn{margin:3px 3px 3px 0}table.directory-board{min-width:620px}.directory-board .board-ops{width:150px}.directory-board .board-directory{width:34%;min-width:200px}.directory-board .board-task-state{width:19%}.directory-board .board-goal-state{width:25%}.board-goal-label,.board-deadline{white-space:nowrap}}input,select,textarea{font:inherit;color:var(--ink);background:var(--paper);border:1px solid var(--line);border-radius:var(--radius-sm);padding:6px 10px;transition:border-color .15s,box-shadow .15s}input::placeholder,textarea::placeholder{color:#b3b8bd}input:focus,select:focus,textarea:focus{border-color:var(--ink);outline:none;box-shadow:0 0 0 3px #16181c12}select{appearance:none;background-image:linear-gradient(45deg, transparent 50%, var(--mid) 50%), linear-gradient(135deg, var(--mid) 50%, transparent 50%);cursor:pointer;background-position:calc(100% - 14px) 52%,calc(100% - 9px) 52%;background-repeat:no-repeat;background-size:5px 5px,5px 5px;padding-right:26px}.goal-form{flex-direction:column;gap:12px;display:flex}.goal-form-section{font-size:12px}.goal-form-title{margin-bottom:4px;font-weight:700}.goal-cwd-input{width:100%}.goal-dur-row{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.goal-dur-input{width:96px}.goal-dur-unit{width:92px}.goal-prompt{resize:vertical;width:100%;line-height:1.55}.goal-hint{color:var(--mid);font-size:11px}.goal-reset{cursor:pointer;align-items:center;gap:6px;font-size:12px;display:flex}.goal-presets{flex-wrap:wrap;gap:6px;margin-top:8px;display:flex}.goal-actions{align-items:center;gap:8px;margin-top:12px;display:flex}.btn{font:inherit;cursor:pointer;border-radius:var(--radius-sm);background:var(--ink);color:var(--paper);border:0;padding:6px 12px;transition:opacity .15s,background .15s,color .15s}.btn:hover{opacity:.86}.btn.ghost{background:var(--soft);color:var(--ink)}.btn.ghost:hover{background:var(--soft-2);opacity:1}.btn.ghost.danger{color:var(--danger);background:0 0;border:1px solid #b3261e4d}.btn.ghost.danger:hover{opacity:1;background:#b3261e12}.btn.small{border-radius:7px;padding:3px 9px;font-size:12px}.btn:disabled{opacity:.4;cursor:default}.btn.danger{color:#fff;background:#b3261e}.toast-stack{z-index:60;pointer-events:none;flex-direction:column;align-items:center;gap:8px;display:flex;position:fixed;bottom:28px;left:50%;transform:translate(-50%)}.toast{background:var(--ink);color:var(--paper);white-space:pre-wrap;word-break:break-all;border-radius:10px;max-width:72vw;padding:9px 16px;font-size:12.5px;box-shadow:0 8px 24px #14161a40}.dlg{-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);z-index:50;background:#fbfbfcdb;justify-content:center;align-items:flex-start;padding:96px 16px;display:flex;position:fixed;inset:0}.dlg-box{background:var(--paper);border-radius:var(--radius);width:min(460px,94vw);padding:16px 18px;box-shadow:0 12px 40px #14161a29}.dlg-title{margin-bottom:6px;font-weight:700}.dlg-msg{color:var(--ink);white-space:pre-wrap;word-break:break-all;margin-bottom:6px}.dlg-input{width:100%;margin:8px 0 4px;font-family:ui-monospace,Consolas,monospace;font-size:12.5px}.dlg-acts{justify-content:flex-end;gap:8px;margin-top:12px;display:flex}.card{background:var(--paper);border-radius:var(--radius);margin-bottom:12px;padding:10px 12px;box-shadow:0 0 0 1px #16181c12}.card.hidden{display:none}.fold-row{border-top:1px solid var(--line);margin-top:8px;padding-top:2px}.fold-row>summary{cursor:pointer;color:var(--ink-2);align-items:center;gap:7px;padding:7px 2px;font-size:12.5px;font-weight:600;list-style:none;display:flex}.fold-row>summary::-webkit-details-marker{display:none}.fold-row>summary:before{content:"▸";color:var(--mid);font-size:10px}.fold-row[open]>summary:before{content:"▾"}.fold-row>summary:hover{color:var(--ink)}.fold-row table{margin-top:4px}.localtask-cli-reference{margin-top:10px}.localtask-cli-reference>details>summary{cursor:pointer;color:var(--ink-2);align-items:center;gap:7px;padding:7px 2px;font-size:12.5px;font-weight:600;list-style:none;display:flex}.localtask-cli-reference>details>summary::-webkit-details-marker{display:none}.localtask-cli-reference>details>summary:before{content:"▸";color:var(--mid);font-size:10px}.localtask-cli-reference>details[open]>summary:before{content:"▾"}.localtask-cli-reference>details>summary:hover{color:var(--ink)}.import-remote-entry{flex-wrap:wrap;align-items:center;gap:8px;margin:-2px 0 8px;font-size:11.5px;display:flex}.import-remote-bar{flex-wrap:wrap;align-items:center;gap:12px;margin-bottom:10px;display:flex}.import-remote-bar label{color:var(--mid);align-items:center;gap:6px;font-size:12px;display:inline-flex}.import-remote-err{border-radius:var(--radius-sm);color:var(--danger);border:1px solid #b3261e4d;margin-bottom:10px;padding:8px 10px;font-size:12px}.import-remote-list{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--paper);max-height:46vh;overflow:auto}.import-remote-item{border-bottom:1px solid var(--line);cursor:pointer;align-items:baseline;gap:8px;padding:7px 10px;font-size:12.5px;display:flex}.import-remote-item:last-child{border-bottom:0}.import-remote-item:hover{background:var(--soft)}.import-remote-item input{flex:none;align-self:center}.import-remote-topic{font-family:var(--mono);color:var(--mid);background:var(--soft);text-overflow:ellipsis;white-space:nowrap;border-radius:4px;flex:none;max-width:120px;padding:1px 6px;font-size:10.5px;overflow:hidden}.import-remote-text{min-width:0;color:var(--ink);flex:auto}.import-remote-actions{align-items:center;gap:8px;margin-top:12px;font-size:11.5px;display:flex}.repo-boards{text-overflow:ellipsis;max-width:220px;overflow:hidden}.compose-context{background:var(--soft);border-radius:var(--radius-sm);color:var(--ink-2);flex-wrap:wrap;align-items:baseline;gap:8px;margin:0 0 6px;padding:5px 10px;font-size:11.5px;display:flex}.compose-context .repo-name{color:var(--ink);font-weight:700}.compose-context .repo-desc{color:var(--ink-2)}.compose-context .repo-boards-list{color:var(--mid);margin-left:auto}.bd-workbench{flex-direction:column;gap:12px;display:flex}.bd-board{padding:0 0 10px}.bd-board.drop{outline:1px dashed var(--ink);outline-offset:-1px}.bd-board .colhead{border-bottom:1px solid var(--line);margin:0;padding:8px 12px}.bd-head h3{margin:0;font-size:13px}.bd-head .bd-count{margin-left:auto;font-size:11px}.bd-grid{grid-template-columns:repeat(auto-fill,118px);justify-content:start;gap:8px;padding:10px 12px 0;display:grid}.bd-card{border:1px solid var(--line);border-radius:var(--radius);background:var(--paper);cursor:grab;text-align:center;flex-direction:column;align-items:center;gap:4px;padding:12px 8px 8px;display:flex;position:relative}.bd-card:hover{border-color:var(--mid);box-shadow:var(--shadow-sm)}.bd-card.dragging{opacity:.45}.bd-card.drop{outline:1px dashed var(--ink);outline-offset:-1px}.bd-card .glyph{background:var(--ink);color:#fff;border-radius:10px;place-items:center;width:38px;height:38px;font-size:16px;font-weight:700;display:grid}.bd-card .nm{text-overflow:ellipsis;white-space:nowrap;max-width:100%;color:var(--ink);font-size:12px;font-weight:600;overflow:hidden}.bd-card .ds{-webkit-line-clamp:2;min-height:28px;color:var(--mid);-webkit-box-orient:vertical;font-size:11px;line-height:14px;display:-webkit-box;overflow:hidden}.bd-card .acts{gap:2px;display:none;position:absolute;top:4px;right:4px}.bd-card:hover .acts{display:inline-flex}.bd-card .acts .btn{padding:1px 4px;font-size:10px}.bd-empty{text-align:center;grid-column:1/-1;padding:14px 0;font-size:11px}.bd-exp{width:100%;font-family:var(--mono);font-size:11px}.colhead{align-items:baseline;gap:8px;margin:2px 2px 8px;display:flex}h3{margin:0;font-size:13px;font-weight:700}.cols{align-items:flex-start;gap:14px;display:flex}.col{flex:1;min-width:0}@media (width<=900px){.cols{flex-direction:column}.col{width:100%}}.list{padding:4px}.row{border-radius:10px;flex-wrap:wrap;align-items:center;gap:8px 10px;padding:8px 10px;transition:background .12s;display:flex}.row:hover{background:var(--soft)}.row+.row{margin-top:2px}.row .tid{color:var(--mid);text-align:right;flex-shrink:0;min-width:30px;font-family:ui-monospace,Consolas,monospace;font-size:11.5px}.row .topic{background:var(--soft-2);white-space:nowrap;border-radius:5px;flex-shrink:0;padding:1px 6px;font-size:12px;font-weight:600}.row .text{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.row .time{color:var(--mid);white-space:nowrap;flex-shrink:0;font-size:11.5px}.row .note{color:var(--mid);word-break:break-word;-webkit-line-clamp:2;-webkit-box-orient:vertical;flex-basis:100%;padding-left:40px;font-size:11.5px;line-height:1.4;display:-webkit-box;overflow:hidden}.row-inline{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.row .name{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-weight:600;overflow:hidden}.row .desc{color:var(--mid);text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:12px;overflow:hidden}.row .acts{flex-shrink:0;align-items:center;gap:6px;margin-left:auto;display:flex}.plats{flex-wrap:wrap;gap:4px;display:flex}.pill{font:inherit;cursor:pointer;background:var(--soft);color:var(--mid);border:0;border-radius:999px;padding:5px 8px;font-size:11px;line-height:1;transition:background .12s,color .12s}.pill:hover{background:var(--soft-2);color:var(--ink)}.pill.on{background:var(--ink);color:var(--paper);font-weight:600}.pill.on.lnk{background:var(--paper);color:var(--ink);border:1.5px dashed var(--ink);padding:4px 6.5px}.tag{border:1px solid var(--soft-2);color:var(--mid);white-space:nowrap;letter-spacing:0;background:0 0;border-radius:4px;padding:1px 6px;font-size:10.5px;font-weight:600}.tag.strong{background:var(--ink);color:var(--paper)}.tag.badge{color:var(--ink-2);border:1px solid var(--soft-2);letter-spacing:.02em;background:0 0;font-weight:600}table{border-collapse:collapse;width:100%}th,td{text-align:left;vertical-align:top;padding:9px 10px}th{color:var(--mid);font-family:var(--label);letter-spacing:.04em;text-transform:uppercase;white-space:nowrap;font-size:10.5px;font-weight:600}tbody tr:hover{background:var(--soft)}tbody tr+tr td{box-shadow:inset 0 1px 0 var(--soft)}.mono,td.path{font-family:var(--mono);word-break:break-all;font-size:11.5px}td.ops{white-space:nowrap}td.ops .btn{margin:0 3px 3px 0}.muted{color:var(--mid)}.bad{font-weight:700}.queue-table{table-layout:fixed}.queue-table .c-drag{width:30px}.queue-table .c-id{width:46px}.queue-table .c-status{width:104px}.queue-table .c-time{width:150px}.queue-table .c-ops{width:196px}.queue-wrap{overflow-x:auto}.queue-table td.task-text{white-space:pre-wrap;word-break:break-word;font-size:12.5px;line-height:1.45}.queue-table .c-time{font-family:var(--mono);color:var(--mid);font-size:11px}.queue-table thead th{background:var(--soft);border-bottom:1px solid var(--line);color:var(--mid);font-family:var(--label);letter-spacing:.04em;text-transform:uppercase;white-space:nowrap;vertical-align:middle;padding:7px 10px;font-size:10.5px;font-weight:600}.queue-table tbody td{vertical-align:middle;padding:8px 10px}.queue-table .board-status{color:var(--ink-2);font-size:11.5px}.queue-table .board-status.done:before{background:var(--soft-2);box-shadow:inset 0 0 0 1.5px var(--soft-2)}.queue-table .board-status.pend:before{background:var(--live);box-shadow:0 0 0 3px #1f7a4d1f}.board-toolbar{background:var(--paper);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow-sm);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px 16px;margin-bottom:10px;padding:10px 12px;display:flex}.board-heading,.board-actions{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.board-heading strong{font-family:var(--label);font-size:13.5px;font-weight:600}.board-heading .muted{font-size:11.5px}.board-live{color:var(--mid);align-items:center;gap:6px;font-size:11px;display:inline-flex}.board-live-dot{background:var(--mid);border-radius:50%;flex:none;width:6px;height:6px}.board-live-dot.ok{background:var(--live);animation:2.4s ease-in-out infinite board-pulse}.board-live-dot.reconnecting{background:var(--danger)}.board-live-dot.connecting{background:var(--mid)}@keyframes board-pulse{0%,to{box-shadow:0 0 #1f7a4d59}50%{box-shadow:0 0 0 3px #1f7a4d00}}@media (prefers-reduced-motion:reduce){.board-live-dot.ok{animation:none}}.board-table-wrap{background:var(--paper);border:1px solid var(--line);border-radius:var(--radius);width:100%;box-shadow:var(--shadow-sm);margin-bottom:12px;overflow-x:auto}table.directory-board{table-layout:fixed;border-collapse:separate;border-spacing:0;min-width:780px}.directory-board thead th{font-family:var(--label);letter-spacing:.04em;text-transform:uppercase;color:var(--mid);text-align:left;background:var(--soft);border-bottom:1px solid var(--line);white-space:nowrap;padding:7px 12px;font-size:10.5px;font-weight:600}.directory-board td{border-bottom:1px solid var(--line);vertical-align:top;padding:8px 12px}.directory-board tbody tr:last-child td{border-bottom:0}.directory-board tbody tr{cursor:pointer;--rail:var(--soft-2);transition:background .12s}.directory-board tbody tr:hover{background:#faf9f6}.directory-board tbody tr td:first-child{box-shadow:inset 2px 0 0 var(--rail)}.directory-board tbody tr[data-state=live]{--rail:var(--live)}.directory-board tbody tr[data-state=stale]{--rail:var(--warn)}.directory-board tbody tr[data-state=pool]{--rail:var(--ink-2)}.directory-board tbody tr.is-active{background:var(--soft);--rail:var(--ink)}.directory-board .board-check{text-align:center;width:34px}.directory-board thead .board-check input{vertical-align:middle;cursor:pointer}.directory-board thead .board-check input:disabled{cursor:default;opacity:.35}.directory-board .board-directory{width:36%;min-width:240px}.directory-board .board-task-state,.directory-board .board-goal-state{width:17%}.directory-board .board-ops{width:290px}.directory-board .board-ops .btn{opacity:.7;transition:opacity .12s,background .12s}.directory-board tbody tr:hover .board-ops .btn,.directory-board tbody tr.is-active .board-ops .btn,.directory-board tbody tr:focus-within .board-ops .btn{opacity:1}.board-name-line{align-items:baseline;gap:7px;min-width:0;display:flex}.board-name-line strong{text-overflow:ellipsis;white-space:nowrap;flex:0 auto;font-size:13.5px;font-weight:650;overflow:hidden}.board-cwd{font-family:var(--mono);color:var(--ink-2);white-space:nowrap;text-overflow:ellipsis;flex:0 auto;min-width:0;font-size:10.5px;line-height:1.4;overflow:hidden}.board-cwd .anc{color:var(--mid)}.board-summary-line{align-items:baseline;gap:6px;min-width:0;margin-top:1px;display:flex}.board-summary{min-width:0;color:var(--ink-2);font:inherit;text-align:left;white-space:nowrap;text-overflow:ellipsis;cursor:pointer;background:0 0;border:0;flex:auto;padding:0;font-size:11.5px;line-height:1.4;display:block;overflow:hidden}.board-summary:hover{-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.board-summary.muted{color:var(--mid)}.board-submit{min-width:0;max-width:46%;color:var(--mid);font:inherit;text-align:left;white-space:nowrap;text-overflow:ellipsis;cursor:pointer;background:0 0;border:0;flex:0 auto;padding:0;font-size:11.5px;line-height:1.4;overflow:hidden}.board-submit:hover{color:var(--ink-2);-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.board-count,.board-deadline{font-family:var(--mono);color:var(--mid);letter-spacing:-.01em;margin-top:4px;font-size:10.5px;display:block}.board-count b{color:var(--ink);font-weight:650}.board-count .sep-dot{color:var(--soft-2);margin:0 2px}.board-deadline{font-size:10px}.board-goal-label{color:var(--live);font-family:var(--mono);cursor:pointer;letter-spacing:-.01em;text-overflow:ellipsis;white-space:nowrap;background:0 0;border:0;max-width:100%;padding:0;font-size:11px;font-weight:650;display:block;overflow:hidden}.board-goal-gone{display:block}.board-goal-label:hover{text-underline-offset:2px;text-decoration:underline}.board-ops{white-space:nowrap}.board-ops .btn{margin:0 3px 2px 0}.board-status-row{align-items:center;gap:8px;min-width:0;display:flex}.board-status-row .board-status{flex:0 auto;min-width:0}.board-wait-stop{flex:none}.board-pickup{font-family:var(--mono);color:var(--mid);white-space:nowrap;margin-top:2px;font-size:10.5px}.board-status{color:var(--ink-2);white-space:nowrap;text-overflow:ellipsis;vertical-align:bottom;align-items:center;gap:7px;max-width:100%;font-size:12px;display:inline-flex;overflow:hidden}.board-status:before{content:"";background:var(--soft-2);border-radius:50%;flex:none;width:6px;height:6px}.board-status.live:before{background:var(--live);box-shadow:0 0 0 3px #1f7a4d1f}.board-status.busy:before{background:var(--warn);box-shadow:0 0 0 3px #99690f21}.board-status.pool:before{background:var(--ink)}.board-status.stale:before{box-shadow:inset 0 0 0 1.5px var(--soft-2);background:0 0}.board-empty{text-align:center;padding:30px 16px}.board-empty-mark{border:1.5px dashed var(--soft-2);border-radius:50%;width:26px;height:26px;margin:0 auto 10px}.board-empty-title{color:var(--ink-2);font-size:12.5px;font-weight:600}.board-empty-sub{color:var(--mid);margin-top:3px;font-size:11.5px}.localtask-topic-cards-legacy{display:none}.board-settings-dialog{gap:14px;display:grid}.board-setting-section{border-bottom:1px solid var(--soft-2);padding-bottom:12px}.board-setting-section:last-child{border-bottom:0;padding-bottom:0}.board-setting-title{align-items:center;gap:8px;margin-bottom:6px;font-size:13px;font-weight:700;display:flex}.board-setting-control{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.board-setting-control select{min-width:170px;padding:6px 8px}.board-setting-help{margin:0 0 8px;font-size:11px;line-height:1.4}.board-settings-dialog textarea{box-sizing:border-box;resize:vertical;width:100%;font:inherit;font-size:12px}.board-setting-actions{flex-wrap:wrap;align-items:center;gap:6px;margin-top:8px;display:flex}.board-add-directory label{margin-bottom:5px;font-size:12px;font-weight:700;display:block}.board-add-directory input{box-sizing:border-box;width:100%;font:inherit;padding:8px}.board-add-directory p{margin:6px 0 0;font-size:11px}.copyable{cursor:copy;border-bottom:1px dashed #0000;transition:border-color .12s,color .12s}.copyable:hover{border-bottom-color:var(--mid)}.copyable:active{color:var(--ink)}dd .adapter-dir{margin-right:14px;display:inline-block}.settings{grid-template-columns:120px 1fr;align-items:center;gap:10px 16px;display:grid}.settings dt{color:var(--mid);font-size:12px}.settings dd{margin:0}.row-inline{gap:8px;margin-top:8px;display:flex}.row-inline input{flex:1}.cli-hint{color:var(--mid);flex-wrap:wrap;align-items:baseline;gap:4px 8px;padding:6px 4px 2px;font-size:11.5px;display:flex}.cli-hint-label{flex-basis:100%}.cli-cmd{background:var(--soft);white-space:nowrap;border-radius:5px;padding:1px 6px}.modal{-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);z-index:20;background:#fbfbfcdb;justify-content:center;align-items:flex-start;padding:48px 16px;display:flex;position:fixed;inset:0}.modal.hidden{display:none}.modal-box{background:var(--paper);border-radius:var(--radius);flex-direction:column;width:min(880px,96vw);max-height:84vh;display:flex;overflow:hidden;box-shadow:0 12px 40px #14161a29}.modal-title{box-shadow:0 1px 0 var(--soft);justify-content:space-between;align-items:center;padding:12px 14px;font-weight:700;display:flex}.modal-body{padding:14px;overflow:auto}pre{white-space:pre-wrap;word-break:break-all;margin:0;font-family:ui-monospace,Consolas,monospace;font-size:12px;line-height:1.6}.d-add{background:var(--soft-2);font-weight:600}.d-del{color:var(--mid);text-decoration:line-through}.conflict-file{background:var(--soft);border-radius:10px;margin-bottom:10px;overflow:hidden}.conflict-file .cf-head{justify-content:space-between;align-items:center;padding:8px 12px;font-family:ui-monospace,Consolas,monospace;font-size:12px;display:flex}.conflict-file pre{background:var(--paper);padding:10px 12px}footer{color:var(--mid);text-align:center;padding:14px 20px 24px;font-size:11.5px}footer code{background:var(--soft);border-radius:6px;padding:1px 6px;font-family:ui-monospace,Consolas,monospace}.mdtext,.mdtext-plain{white-space:pre-wrap}.embed-image{vertical-align:middle;margin:0 2px;line-height:0;display:inline-block}.embed-image img{border-radius:var(--radius-sm);background:var(--soft);max-width:100%;max-height:220px;display:block}.embed-image.compact img{max-height:28px;box-shadow:0 0 0 1px var(--soft-2);border-radius:6px}.embed-file{background:var(--soft);color:var(--ink);vertical-align:middle;border-radius:7px;margin:0 2px;padding:1px 8px;font-size:12px;text-decoration:none;display:inline-block}.embed-file:hover{background:var(--soft-2)}.editor{border-radius:var(--radius);flex-direction:column;gap:12px;min-width:min(600px,80vw);display:flex;position:relative}.editor.drag{box-shadow:0 0 0 2px var(--ink)}.editor.drag:after{content:"松手即上传";border-radius:var(--radius);pointer-events:none;background:#ffffffdb;justify-content:center;align-items:center;font-weight:700;display:flex;position:absolute;inset:0}.ed-tip{color:var(--mid);font-size:11.5px;line-height:1.8}.ed-link{font:inherit;color:var(--ink);text-underline-offset:2px;cursor:pointer;background:0 0;border:0;padding:0 2px;font-weight:600;text-decoration:underline}.ed-link:disabled{color:var(--mid);cursor:default;text-decoration:none}.ed-field{flex-direction:column;gap:4px;display:flex}.ed-label{color:var(--mid);letter-spacing:.3px;font-size:11.5px;font-weight:600}.ed-textarea{width:100%;font:inherit;border-radius:var(--radius-sm);background:var(--soft);color:var(--ink);resize:vertical;border:0;padding:9px 11px}.ed-textarea:focus{outline:2px solid var(--soft-2)}.ed-meta{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;display:flex}.ed-acts{flex-wrap:wrap;align-items:center;gap:8px;display:inline-flex}.ed-foot{box-shadow:0 -1px 0 var(--soft) inset;justify-content:space-between;align-items:center;gap:10px;padding-top:10px;display:flex}.preview{border-radius:var(--radius-sm);background:var(--soft);max-height:340px;padding:10px;overflow:auto}.hint{color:var(--mid);font-size:11.5px}.hint code,.ed-tip code,kbd{background:var(--soft-2);border-radius:5px;padding:0 4px;font-family:ui-monospace,Consolas,monospace;font-size:11px}.toggle{background:var(--soft);color:var(--mid);cursor:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap;border-radius:999px;align-items:center;gap:6px;padding:3px 11px;font-size:12px;display:inline-flex;position:relative}.toggle:hover{background:var(--soft-2)}.toggle:focus-within{outline:2px solid var(--soft-2)}.toggle input{opacity:0;width:1px;height:1px;position:absolute}.toggle .dot{background:var(--mid);border-radius:50%;width:7px;height:7px}.toggle.on{background:var(--ink);color:var(--paper)}.toggle.on .dot{background:var(--paper)}
|