文园寻芳遇春景 · 3D 情境课堂 —— 最小运行版
============================================================

一、怎么跑起来（Windows）
  1. 电脑装好 Node.js 18 或更高版本（https://nodejs.org/，一路下一步）。
  2. 双击 start.bat。首次会联网装一个很小的依赖 ws，几秒钟就好，之后离线可用。
  3. 浏览器自动打开 http://localhost:8800 ；没自动开就手动输这个地址。
  4. 在 3D 园林里点光柱路标，或按 1 / 2 / 3 下发三个任务；
     按 R 重新下发，Esc 收起任务卡，右下角看作答看板。
  5. 没有行空板真机时，另开一个命令行窗口，在本目录执行：
         node tools\simulate.mjs
     会模拟第 2~8 组共 7 台终端，看板立刻有数据。

  Linux / macOS：终端执行 ./start.sh（同样需要 Node.js 18+）。
  ★ 本版不需要 Vite、不需要构建、不需要任何 API 密钥。
  教师端 :8800   中继 WebSocket :8801（同一个进程提供）
  别的电脑访问： http://教师机IP:8800 ，页面会自动连该 IP 的 8801。

二、接真实行空板 M10
  - 把 m10/ 整个目录传到板子：scp -r m10 root@10.1.2.3:/root/
  - 改 m10/config.json 里的 relay_ws，填「教师机的局域网 IP」，
    例如 ws://192.168.1.100:8801（原值是本次实测的教室 IP，换环境必须改）。
  - 板上需 websocket-client：pip3 install websocket-client
  - 完整刷机、配网、联调记录见 docs/03-行空板配置.md。
  - Windows 被「公用网络」拦入站时：右键 tools/allow_firewall.bat 以管理员运行，
    或让板子与教师机连同一个 WiFi。

三、这个包里有什么
  server/        中继服务（Node + ws），兼托管教师端页面
  teacher/dist/  教师端成品静态页：JS/CSS + 8 个 GLB 模型 + 贴图 + 插画
  m10/           行空板终端（Python + unihiker）、四屏预览页 preview.html
  tools/         simulate.mjs 模拟终端、allow_firewall.bat 防火墙放行
  docs/          03 行空板配置、04 课堂使用手册
  README.md      总说明

四、为瘦身做了什么
  - 删掉制作期原稿（插画 PNG 9.8M、贴图原稿 4.8M）、与 dist 完全重复的
    teacher/public/（6.8M）、开发源码与构建工具、生成脚本、多余的 lock 文件。
  - 保留的图片全部重编码压缩：JPEG / WebP 有损重压，云朵 PNG 调色板量化，
    行空板 PNG 无损重压。合计 1222 KB → 932 KB，文件名与引用路径都不变。
  - 不含 node_modules/，start.bat 首次启动自动装（只有 ws 一个小包）。
  - 不含 .env.local 或任何真实密钥；原先写死在生成脚本里的两把测试密钥
    连同那些脚本一起移除了。
  - 8 个 GLB 模型约 5.7 MB 是剩下的体积大头，已保留（画面最好）；
    真要再小可以删 teacher/dist/models/，场景会自动退回程序化简版模型。

五、常见问题
  - 双击没反应 / 提示缺 Node.js：先装 Node.js，装完重新双击。
  - 8800 打不开：看「课堂服务」窗口有没有报错，或端口被占用；
    关掉旧的服务窗口再启动。
  - 页面显示「连接中」：确认「课堂服务」窗口还开着，且防火墙没拦 8801。
  - 想换题目 / 改 3D 场景：本包是纯运行版，不含源码；请用完整工程修改后
    重新构建，再把 dist/ 换过来。

更多细节：README.md、docs/03-行空板配置.md、docs/04-课堂使用手册.md
