教案编排与课堂计时分组｜教案与现场工作台
==============================
打开 index.html 即可。教案、示例名单、字体与运行代码全部内嵌，无需安装、服务器、联网或账号。

从一堂有内容的课开始
默认是一堂 40 分钟的原创“日常物品重新设计”课，五个环节都有目标、材料与教师提示。可直接改成自己的课题、对象、总目标与时间预算。在下方编辑每一环节的标题、目标、分钟、材料和提示；可添加/删除，拖动左侧序号或用上下按钮重排。总时长、余量与超时会同时反映在文字和导演卡中。

带到现场
- “开始这一环节”真正开始计时；可暂停/继续，下一环节由教师手动决定。到时不会自动跳过，会显示超时。
- “打开现场大字”进入页面内的全屏提示面板，显示任务、目标、剩余/超时与下一环节。返回工作台不暂停计时。
- 大字面板可用空格开始/暂停（非输入或按钮焦点时），右箭头推进，Esc 返回。按钮保持正常键盘激活。
- 修改当前环节分钟数会保留已用时间；重排用稳定编号保留正在进行的环节。删除正在进行的环节会暂停并回到首个有效环节。
- “从这段准备”跳到某一环节并暂停；“重置当前”清零并暂停，“重置全课”回到首段待开始。
- 隐藏页面停止显示刷新，计时按单调时钟继续累积；回到页面补算。关闭页面后不会发送通知。

准备和分组
名单区可直接增删、编辑姓名、勾选出席，或粘贴一行一个姓名整体替换。CSV 支持无表头的一列姓名；有表头时支持“姓名/name”和可选的“出席/present”，出席可用是/否、1/0、true/false、yes/no。多余列、坏行、不闭合引号或无效出席标记会整份拒绝，不跳过一部分悄悄载入。空白行忽略；重名保留，以名单编号 # 区分。名单最多 120 人。
按指定组数，或按每组目标人数分组；先根据保存的种子洗牌，再轮流分配。出席人员各出现一次，组间人数最多差一人。缺席者不分组并列出。“重新分配”改变种子，可撤销。按每组目标人数时先计算组数，再均衡分配；目标人数不是对每组严格相等的承诺。也没有按能力、性别或其他特征分层。

带走结果
- 教案 JSON：完整保存标题、对象、目标、预算、活动、名单、出席和分组种子。载入后分组相同，可以继续编辑；现场计时复位。
- 活动表 CSV：完整顺序、计划相对开始/结束分钟、时长、目标、材料和教师提示。
- 分组 CSV：完整名单编号与姓名，含缺席未分组行。
- 打印教案 HTML：完整目标、每个环节与教师提示、当前分组。下载打开后可按“打印教案”。
- 导演卡 PNG：当前计划的真实节拍概览；长文字经测量分行/省略，完整内容在 JSON/CSV/打印稿。
- 分组图 PNG：适合投屏或打印的组别与名单编号结果图。

编辑与时间分别保存
所有重要教案编辑支持撤销/重做；CSV 替换、载入、新示例也可撤销。撤销针对计划与名单，不倒退真实经过的时间。现场计时属于当次会话，不写入教案 JSON，也不冒充课堂日志。浏览器暂存只提供便利；失败不影响继续编辑或手动保存。导入先整体验证，坏文件和过期读取不会覆盖当前计划。

边界与证据
默认教案与 24 个姓名是原创可改示例，不对应真实班级，也不代表学校课程标准。字体 LessonText 是 Noto Sans CJK SC 的改名子集，SIL OFL 1.1 许可内嵌并另附；自定义其他汉字使用设备字体回退。原生 QA 使用完整 Noto 作回退，不能代表设备字形完全相同。
实际验证 AppModel、TimerModel 与 Artwork：独立分钟求和、出席人数和 ID 守恒、分组均衡；控制时间戳检查开始、暂停、继续、超时、下一段、重排与删除；实际 CSV/JSON/打印 HTML 回读；实际导演卡和分组图完整出图并查看。没有进行浏览器 DOM/CSS、真实输入/触屏、原生大字对话框和 file:// 冷启验收。PNG 是同源 Canvas 输出，不是网页截图。
