关世界 · 完整 Web 工程

运行
1. 安装 Node.js 20 或更新版本，或使用 Codex 自带的 Node.js。
2. 在此文件所在目录运行：node server.mjs
3. 打开 http://127.0.0.1:8787 。不要双击 dist/index.html，浏览器会阻止本地模块和模型加载。
4. 也可双击“启动预览.cmd”。关闭命令窗口会停止本地服务。

体验
移动鼠标观察；悬停 1.5 秒确认；移开取消。点击、触屏、Tab 和 Enter 也能操作。
前段从办公桌近景拉开，沿中央阶梯进入重复工位和悬浮消息组成的长廊。55 秒后停止提示。
随时选择“走向那道光”，可在暗门前停留。“穿过这道光”打开门，经过白场进入白色庭院，再自主进入空间选择。
确认一项后必须重新移动鼠标，才开始下一次停留确认。
后段无强制结束时间。可选择草坡、石塘、窗边，以及物件和四种光线。
声音需要主动开启；切换标签页静音并清除余下演示提示。
支持 PNG、十二秒无声 WebM、本机保存和带选择参数的访问链接。
保存链接不改变网站的访问权限；静态托管版为当前部署的私有站点。

文件
dist/                 可直接部署的完整静态站点，模型和 Three.js 均在本地，不依赖 CDN。
dist/app.js           阶段、停留确认、选择、声音、保存。
dist/engine.js        三维场景、地形、实例化草地、光线、镜头。
dist/assets/          由提供的资产转换得到的 glb 和透明遮罩图。
dist/assets/provenance.json  资产来源清单。
server.mjs            本地服务和可选 AI 代理。
model_scene.py        Blender 原创建模脚本。
关世界-原创场景.blend   长廊、房间、桌椅和书本的可编辑模型，按集合分组。

AI 状态与接入
当前开箱即用版本按固定规则组合三维资产，没有配置真实 AI 凭证。
页面会明确显示本地场景模式；输入文字作为寄语保留，不虚称 AI 已处理。
本地服务预留兼容 chat completions 的服务端接口。用环境变量设置：
GSJ_AI_URL   完整 HTTPS 生成接口地址
GSJ_AI_KEY   仅服务端使用的密钥
GSJ_AI_MODEL 模型名称
可将 .env.example 复制为 .env 后填入，并使用 node --env-file=.env server.mjs。
配置成功时 /api/status 返回 {"ai":true}，页面在确认时调用一次。
AI 只可返回 warmth 和 mist 两个受约束参数，不改空间或物件，也不推断心理。
出错或超时保留用户原有选择。服务支持输入长度、枚举、来源和并发限制。
当前在线版是静态托管，不运行 server.mjs；在线 AI 需另行配置带密钥的服务端。
不要将密钥放入 dist/，也不要将 .env 提交或公开。

制作说明
参考视频只用于冷灰工作台、纵深长廊和门光的视觉方向，未拷贝视频作为网页背景。
长廊、窗边建筑、茶桌、长椅、翻开的书为本项目新建模型。
自然物件来自提供的 Painterly Grass、PolyNature、Stylised EcoKit。
原始测试001(1).blend 的空间保留在 source-world.glb，出现在窗外景观中。
办公室场景转为暗灰背景模型，减少面数以控制网页体积。
商业资产按提供的授权范围使用；公开再分发时请确认对应资产许可。

当前验证范围
已检查开场、跳过演示、四步选择、最终确认、安静停留和保存入口。
已检查桌面和窄屏布局、WebGL 日志、模型路径和 JavaScript 语法。
没有 API 凭证，未验证真实 AI 服务；没有伪造调用结果。
WebM 依赖浏览器 MediaRecorder；不支持时可保存 PNG。
短片按十二秒风草周期记录，低帧率、页面失焦和编码器时序可能影响首尾衔接。
不包含操作系统动态壁纸安装功能。

字体更新：全站采用猫啃什锦黑 v1.70。字体随站点本地加载；授权和来源见 dist/fonts/OFL.txt 与 SOURCE.txt。

视频场景重建版：以用户提供视频的办公桌、中央阶梯、重复工位、悬浮消息、门缝光和白色庭院为视觉依据。播放节奏独立设计。
model_reference.py / 关世界-视频场景重建.blend：原创办公工位、暗门与白色庭院，可继续编辑。
dist/reference-sequence.js：工位实例、三维城市屏幕、悬浮信息、镜头移动、门光及辉光后处理。
活动场景使用真实三维几何，不播放参考视频充当背景。旧电视模型作为上一版工程资产保留，本版不加载。
