1. 回滚键盘遮挡统一方案 (真机测试不通过, 需求搁置): 恢复 TaskDetail/ UserPicker/CopyTaskPopup/ProjectManage 与 useKeyboardInset 到 9fea1a5^, 删除 useKeyboardInsetWatcher / .kb-safe / interactive-widget=resizes-content 2. 任务详情页样式随 1 一并恢复提交前状态 (含底部拷贝/删除按钮) 3. 列表视图换列改为卡片拖动: 新 useRowDrag (长按 400ms 行抬起, 左右 80px/列步进, 行尾徽标显示目标列, 松手落列), 移除长按 ActionSheet —— 旧长按与复选框/行点击互相误触, 抬手合成 click 落在控件上触发状态切换 4. 看板拖动防误触: 任务区禁长按文字选择与系统菜单 (输入框除外); pointercancel 只放弃不提交; 拖动结束 350ms 内抑制 click 误开详情; 状态点/⋯/子任务行 pointerdown 不冒泡, 不发起拖动 5. 看板横滑扩展到整屏: .page-transition 补 height:100% 打通 app-main → page-with-navbar 百分比链, board-wrap 撑满剩余高度 已验证: kb-safe/Watcher/onLongPress 残留引用清零, 逐文件 diff 审阅通过; 本机无 Node 运行时, 未跑 vite build
1. BUILD_ID 改为 yyyyMMddHHmmss (去掉中间点), 仍 UTC+8 2. 任务 ⋯ 菜单去掉顶部任务名标题 3. 任务详情去掉底部「拷贝到其他项目」「删除任务」按钮 (⋯ 菜单已有) 4+6. 键盘遮挡统一方案 (重点设计 §7.2): - index.html 加 interactive-widget=resizes-content - App 级 useKeyboardInsetWatcher 写 --kb-inset (visualViewport+window 双源) - 底部弹层统一 .kb-safe 类 (安全区+20px+键盘插入量, dvh 收缩+内部滚动) - TaskDetail/UserPicker/CopyTaskPopup/信息块弹层全部迁移, 删除 per-component hook - 信息块 textarea 补 focus scrollIntoView 兜底 5. 拖动方案重做 (重点设计 §7.1): - 新 useColumnDrag: Pointer Events + setPointerCapture, 长按400ms原位抬起, elementFromPoint 高亮目标列, 边缘 rAF 自动横滚; 移除手指跟随浮层(任务名) - 列表行长按 500ms → 「移动到列」ActionSheet (不做自由拖动) - 移除「拖到卡片转子任务」误触路径, 统一走详情页层级区 - 删除旧 useLongPressDrag 已验证: 99 文件语法 0 错误、导入 0 缺失
1. 项目管理等 cs-page 覆盖层与系统状态栏重合: .cs-page 补 padding-top: var(--safe-top) (复用 main.jsx 实测校准的变量) 2. 项目管理按返回键跑到上一个 Tab: 新增 useOverlayBack —— 覆盖层打开时 pushState 哨兵, 返回键先关覆盖层 应用于 项目管理(内层视图先回主区) 与 任务详情弹层 3. 更多项目页: - 头部补「+ 新建」入口 - 项目列表支持长按拖动排序(纵向), 顺序存设备端, 与首屏最近项目共用 recentOrder - 顺带修复首屏 RecentProjects 拖动排序的闭包缺陷(监听器读到旧下标, 首次移动 会 splice(-1)); 两处均改为 ref 取当前下标 4. 任务详情输入子任务被键盘遮挡: 新增 useKeyboardInset (visualViewport 差值), 键盘弹出时抬升弹层内容并收缩 maxHeight; 输入框聚焦后再 scrollIntoView 到可视区中部 (双保险) 已验证: 99 文件语法 0 错误、相对导入 0 缺失