# templates/assets/ — 前端资源与引用契约
本目录是引擎项目里的**前端资源源**。学习工作区里的资源由 gen_home.py / 总控(建科目时)
按下面的规则放置,页面按**固定相对路径**引用(模板里写死,生成器不改)。
## 目录职责
> **哪些文件属于共享层/课件层,清单只有一份**:`scripts/lessonfile.py` 的
> `SHARED_DIRS` / `SHARED_FILES` / `SUBJECT_FILES`(生成器与预览都照它拷)。
> 下面这张表解释每个文件是什么;**新增文件要登记进那份清单**,否则它既不会被拷进工作区,
> 也不会被 `test_templates.py` 的逐字节比对看住。
| 路径 | 是什么 | 谁维护 |
|------|--------|--------|
| `sayo/` | **Sayo UI**(自研零依赖 CSS 框架 + 交互引擎),MIT。含 `sayo.css`、`sayo.js`、`icons/`、`LICENSE` | 从 sayo-ui 项目整体拷贝,**不要手改** |
| `learn-theme.css` | 本项目**共享主题层**:亮色=暖纸白+深绿(覆盖 `--syo-*`)、暗色=用 Sayo 默认的 Primer 暗色;修正 Sayo 里为暗色硬编码的紫色光晕;放跨页面组件(进度条、状态徽标、筛选、空状态) | 本项目自研,改色只改这里 |
| `learn-theme.js` | **共享行为层**:① 主题(亮/暗)逻辑——早期应用、切换并持久化、绑定开关(`LearnTheme.apply/set/toggle/current/wire`);② **代码块高亮**——课件里的 `
` 与 `.syo-editor` 加载即自动上色(`LearnTheme.highlight`)。三个页面共用,别各写一份 | 本项目自研 |
| `katex/` | **KaTeX 0.18.7**:离线数学排版。JS/CSS 使用 MIT(见 `katex/LICENSE`);20 个 `fonts/*.woff2` 字体的嵌入许可为 SIL OFL 1.1(见 `katex/fonts/LICENSE`)。**已裁剪**:CSS 里去掉了 woff/ttf 回退,只留 woff2 | 从 KaTeX 官方 dist 拷贝,保留代码与字体的许可证,**不要手改字体**(更新步骤见下) |
| `lesson-math.js` | **公式渲染**:页面加载后把 `.math-inline` / `.math-block` 里的 TeX 交给 KaTeX 排版。降级可读——KaTeX 没加载成功时元素里留着的就是 TeX 原文 | 本项目自研;**只有含公式的课件页引用它** |
| `learn-mascot.png` | **抬头看板娘**(640×425,256 色带 alpha,23KB):透明底 + 底部羽化,给根主页抬头当主视觉(`.learn-hero__mascot`) | 本项目自研;**只有根主页引用它**,科目页与课件不引用 |
| `style.css` | **课件层**(讲解排版 + 练习样式),叠在 Sayo 之上 | 本项目自研;Task 8 拷进每个科目 |
| `quiz.js` | 课件**题目组件**(选择题即时反馈 + 开放题点开对照参考答案与判分要点);题面/选项/解析里的 `$…$` 交给 `lesson-math.js` 排版(KaTeX 不在时占位元素里留着的 TeX 原文可读)。数据契约以它顶部注释为准 | 同上 |
| `lesson-toc.js` | 课件**侧边目录 + 上/下节课入口**:目录按页面 `` 自动生成;正文里的 `