@bytechain.cn/colamd 1.5.0 → 1.5.1-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.trae/specs/optimize-theme-loading/checklist.md +20 -0
- package/.trae/specs/optimize-theme-loading/spec.md +103 -0
- package/.trae/specs/optimize-theme-loading/tasks.md +40 -0
- package/CHANGELOG.md +323 -0
- package/CLAUDE.md +56 -0
- package/README.md +422 -26
- package/README_CN.md +480 -28
- package/android/app/build/.npmkeep +0 -0
- package/android/app/build.gradle +76 -0
- package/android/app/capacitor.build.gradle +24 -0
- package/android/app/proguard-rules.pro +21 -0
- package/android/app/release.keystore +0 -0
- package/android/app/src/androidTest/java/com/getcapacitor/myapp/ExampleInstrumentedTest.java +26 -0
- package/android/app/src/main/AndroidManifest.xml +64 -0
- package/android/app/src/main/java/cn/bytechain/colamd/MainActivity.java +180 -0
- package/android/app/src/main/res/drawable/ic_launcher_background.xml +170 -0
- package/android/app/src/main/res/drawable/splash.png +0 -0
- package/android/app/src/main/res/drawable-land-hdpi/splash.png +0 -0
- package/android/app/src/main/res/drawable-land-mdpi/splash.png +0 -0
- package/android/app/src/main/res/drawable-land-xhdpi/splash.png +0 -0
- package/android/app/src/main/res/drawable-land-xxhdpi/splash.png +0 -0
- package/android/app/src/main/res/drawable-land-xxxhdpi/splash.png +0 -0
- package/android/app/src/main/res/drawable-port-hdpi/splash.png +0 -0
- package/android/app/src/main/res/drawable-port-mdpi/splash.png +0 -0
- package/android/app/src/main/res/drawable-port-xhdpi/splash.png +0 -0
- package/android/app/src/main/res/drawable-port-xxhdpi/splash.png +0 -0
- package/android/app/src/main/res/drawable-port-xxxhdpi/splash.png +0 -0
- package/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml +34 -0
- package/android/app/src/main/res/layout/activity_main.xml +12 -0
- package/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +5 -0
- package/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +5 -0
- package/android/app/src/main/res/mipmap-hdpi/ic_launcher.png +0 -0
- package/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png +0 -0
- package/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png +0 -0
- package/android/app/src/main/res/mipmap-mdpi/ic_launcher.png +0 -0
- package/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png +0 -0
- package/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png +0 -0
- package/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
- package/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png +0 -0
- package/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png +0 -0
- package/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
- package/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png +0 -0
- package/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png +0 -0
- package/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
- package/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png +0 -0
- package/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png +0 -0
- package/android/app/src/main/res/values/ic_launcher_background.xml +4 -0
- package/android/app/src/main/res/values/strings.xml +7 -0
- package/android/app/src/main/res/values/styles.xml +22 -0
- package/android/app/src/main/res/xml/file_paths.xml +5 -0
- package/android/app/src/main/res/xml/network_security_config.xml +8 -0
- package/android/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java +18 -0
- package/android/build.gradle +29 -0
- package/android/capacitor.settings.gradle +21 -0
- package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/android/gradle/wrapper/gradle-wrapper.properties +7 -0
- package/android/gradle.properties +22 -0
- package/android/gradlew +248 -0
- package/android/gradlew.bat +92 -0
- package/android/settings.gradle +5 -0
- package/android/variables.gradle +16 -0
- package/bytechain.cn-colamd-1.5.1-beta.2.tgz +0 -0
- package/capacitor.config.js +29 -0
- package/capacitor.config.ts +30 -0
- package/demo.md +191 -484
- package/dist/main/index.js +77 -46
- package/dist/renderer/assets/{arc-tTbbM8LO.js → arc-CPdeInCG.js} +1 -1
- package/dist/renderer/assets/{architectureDiagram-3BPJPVTR-CEgYow6c.js → architectureDiagram-3BPJPVTR-BAbnaR9G.js} +4 -3
- package/dist/renderer/assets/{blockDiagram-GPEHLZMM-LHyVtPwW.js → blockDiagram-GPEHLZMM-CYSWjnJg.js} +5 -4
- package/dist/renderer/assets/{c4Diagram-AAUBKEIU-C1P1eJrf.js → c4Diagram-AAUBKEIU-Rb1tstnr.js} +3 -2
- package/dist/renderer/assets/{channel-upve91Tq.js → channel-DpG2A6fE.js} +1 -1
- package/dist/renderer/assets/{chunk-2J33WTMH-lag2vhq9.js → chunk-2J33WTMH-DFc0Jxy_.js} +1 -1
- package/dist/renderer/assets/{chunk-4BX2VUAB-BXJ8Ggh-.js → chunk-4BX2VUAB-BhRxDTNn.js} +1 -1
- package/dist/renderer/assets/{chunk-55IACEB6-CiBpxRa1.js → chunk-55IACEB6-DEgMVBk8.js} +1 -1
- package/dist/renderer/assets/{chunk-727SXJPM-ODeKQFXC.js → chunk-727SXJPM-bjBIfiz8.js} +5 -5
- package/dist/renderer/assets/{chunk-AQP2D5EJ-BK7xJolB.js → chunk-AQP2D5EJ-DwQMzTzD.js} +3 -3
- package/dist/renderer/assets/{chunk-FMBD7UC4-BxpCZPtz.js → chunk-FMBD7UC4-CkphwJzs.js} +1 -1
- package/dist/renderer/assets/{chunk-ND2GUHAM-CqqaU9Ue.js → chunk-ND2GUHAM-oU09z4y4.js} +1 -1
- package/dist/renderer/assets/{chunk-QZHKN3VN-Biq_K124.js → chunk-QZHKN3VN-rCbVuPBn.js} +1 -1
- package/dist/renderer/assets/{classDiagram-v2-Q7XG4LA2-Cq95X99o.js → classDiagram-4FO5ZUOK-DGS2faoM.js} +7 -6
- package/dist/renderer/assets/{classDiagram-4FO5ZUOK-Cq95X99o.js → classDiagram-v2-Q7XG4LA2-DGS2faoM.js} +7 -6
- package/dist/renderer/assets/{cose-bilkent-S5V4N54A-XasiD0bu.js → cose-bilkent-S5V4N54A-iqY6-EwA.js} +2 -1
- package/dist/renderer/assets/{dagre-BM42HDAG-Nq84Gfx4.js → dagre-BM42HDAG-5t3X5sDa.js} +4 -3
- package/dist/renderer/assets/{diagram-2AECGRRQ-DwuB1GWt.js → diagram-2AECGRRQ-DzHiYDPh.js} +4 -3
- package/dist/renderer/assets/{diagram-5GNKFQAL-C2tgeI1h.js → diagram-5GNKFQAL-BiNv6Keq.js} +5 -4
- package/dist/renderer/assets/{diagram-KO2AKTUF-D5KzjNBc.js → diagram-KO2AKTUF-ClzeDG6f.js} +4 -3
- package/dist/renderer/assets/{diagram-LMA3HP47-C12xHS1c.js → diagram-LMA3HP47-CGkw7wII.js} +4 -3
- package/dist/renderer/assets/{diagram-OG6HWLK6-CnxI9oEa.js → diagram-OG6HWLK6-Dl-Hyk1_.js} +5 -4
- package/dist/renderer/assets/{erDiagram-TEJ5UH35-D_uPaKwn.js → erDiagram-TEJ5UH35-BxUN79Qb.js} +5 -4
- package/dist/renderer/assets/{flowDiagram-I6XJVG4X-B6q_1-tE.js → flowDiagram-I6XJVG4X-CzFk-KNI.js} +7 -6
- package/dist/renderer/assets/{ganttDiagram-6RSMTGT7-CFo7ifF9.js → ganttDiagram-6RSMTGT7-C2xl6Igx.js} +3 -2
- package/dist/renderer/assets/{gitGraphDiagram-PVQCEYII-WSexHTnq.js → gitGraphDiagram-PVQCEYII-_fn7XCa7.js} +5 -4
- package/dist/renderer/assets/{graph-DyX_9f6d.js → graph-CDoHYrHm.js} +1 -1
- package/dist/renderer/assets/index-B4uDgADr.js +530 -0
- package/dist/renderer/assets/index-CBcVpA3d.js +30 -0
- package/dist/renderer/assets/index-CGj1spkU.js +27 -0
- package/dist/renderer/assets/{index-dyHEFYvY.css → index-CeFpoCKV.css} +443 -400
- package/dist/renderer/assets/index-D4CPFkph.js +9 -0
- package/dist/renderer/assets/{index-DW7LS8C1.js → index-DAlXyxzt.js} +1183 -346
- package/dist/renderer/assets/index-DxOzbfR-.js +110 -0
- package/dist/renderer/assets/index-Y89U1ptl.js +9 -0
- package/dist/renderer/assets/{infoDiagram-5YYISTIA-DaeJdLRq.js → infoDiagram-5YYISTIA-DL6XIxLz.js} +3 -2
- package/dist/renderer/assets/{ishikawaDiagram-YF4QCWOH-DDCZc35f.js → ishikawaDiagram-YF4QCWOH-BUZLjRo-.js} +2 -1
- package/dist/renderer/assets/{journeyDiagram-JHISSGLW-BEdmpAgl.js → journeyDiagram-JHISSGLW-C4rH_mQM.js} +5 -4
- package/dist/renderer/assets/{kanban-definition-UN3LZRKU-BEFtQcFb.js → kanban-definition-UN3LZRKU-DRbrBcWV.js} +3 -2
- package/dist/renderer/assets/{layout-CAJgQHdw.js → layout-DZl4n4qu.js} +2 -2
- package/dist/renderer/assets/{linear-B2ggJ8Am.js → linear-B0Krxg21.js} +1 -1
- package/dist/renderer/assets/{mindmap-definition-RKZ34NQL-DSxVgHB5.js → mindmap-definition-RKZ34NQL-DdmPsWrn.js} +4 -3
- package/dist/renderer/assets/{pieDiagram-4H26LBE5-CwYoJBuL.js → pieDiagram-4H26LBE5-BPZLqwG0.js} +5 -4
- package/dist/renderer/assets/preload-helper-tXtZnHb0.js +88 -0
- package/dist/renderer/assets/{quadrantDiagram-W4KKPZXB-CST9Fvg9.js → quadrantDiagram-W4KKPZXB-Dr-oWRk9.js} +3 -2
- package/dist/renderer/assets/{requirementDiagram-4Y6WPE33-DtrH52jS.js → requirementDiagram-4Y6WPE33-B6QZd0lo.js} +4 -3
- package/dist/renderer/assets/{sankeyDiagram-5OEKKPKP-ca1tPzJ_.js → sankeyDiagram-5OEKKPKP-Cyl9ojEt.js} +2 -1
- package/dist/renderer/assets/{sequenceDiagram-3UESZ5HK-Dfp1EJZ7.js → sequenceDiagram-3UESZ5HK-D48Yr9T6.js} +4 -3
- package/dist/renderer/assets/{stateDiagram-AJRCARHV-Bha2QoNB.js → stateDiagram-AJRCARHV-qyb8ETsa.js} +7 -6
- package/dist/renderer/assets/{stateDiagram-v2-BHNVJYJU-DWgFUYu1.js → stateDiagram-v2-BHNVJYJU-DmDOyyrJ.js} +5 -4
- package/dist/renderer/assets/{timeline-definition-PNZ67QCA-C3h_-OTj.js → timeline-definition-PNZ67QCA-C-KQxTi1.js} +3 -2
- package/dist/renderer/assets/{vennDiagram-CIIHVFJN-DFzjSrZi.js → vennDiagram-CIIHVFJN-BdaZlnH-.js} +2 -1
- package/dist/renderer/assets/{wardley-L42UT6IY-Cx-VbqoS.js → wardley-L42UT6IY-b-_GPpqL.js} +1 -1
- package/dist/renderer/assets/{wardleyDiagram-YWT4CUSO-S2D9XqX6.js → wardleyDiagram-YWT4CUSO-B2hBE-EE.js} +4 -3
- package/dist/renderer/assets/web-BKE0SH0E.js +36 -0
- package/dist/renderer/assets/web-CBsFp24u.js +564 -0
- package/dist/renderer/assets/web-Dc8YgoHP.js +24 -0
- package/dist/renderer/assets/web-TfDzToU7.js +58 -0
- package/dist/renderer/assets/{xychartDiagram-2RQKCTM6-Cfxigbts.js → xychartDiagram-2RQKCTM6-CSvswDTY.js} +3 -2
- package/dist/renderer/index.html +62 -3
- package/docs/academic-demo.md +566 -0
- package/docs/demo.html +748 -0
- package/docs/demo.md +546 -0
- package/docs/demo.pdf +0 -0
- package/docs/theme-paradigm.md +658 -0
- package/electron-builder.yml +7 -0
- package/electron.vite.config.js +31 -0
- package/electron.vite.config.ts +1 -1
- package/ios/App/App/AppDelegate.swift +49 -0
- package/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png +0 -0
- package/ios/App/App/Assets.xcassets/AppIcon.appiconset/Contents.json +14 -0
- package/ios/App/App/Assets.xcassets/Contents.json +6 -0
- package/ios/App/App/Assets.xcassets/Splash.imageset/Contents.json +23 -0
- package/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-1.png +0 -0
- package/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-2.png +0 -0
- package/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732.png +0 -0
- package/ios/App/App/Base.lproj/LaunchScreen.storyboard +32 -0
- package/ios/App/App/Base.lproj/Main.storyboard +19 -0
- package/ios/App/App/Info.plist +49 -0
- package/ios/App/App.xcodeproj/project.pbxproj +408 -0
- package/ios/App/App.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
- package/ios/App/Podfile +28 -0
- package/package.json +23 -3
- package/resources/templates/slides/template-forest-ink.html +540 -0
- package/scripts/generate-icons.js +102 -0
- package/src/main/index.ts +87 -63
- package/src/preload/index.d.ts +51 -0
- package/src/preload/index.js +70 -0
- package/src/renderer/capacitor-api.ts +713 -0
- package/src/renderer/editor/editor.ts +87 -4
- package/src/renderer/editor/plugins/index.ts +24 -32
- package/src/renderer/editor/plugins/math-plugin.ts +1 -1
- package/src/renderer/editor/plugins/mermaid-plugin-custom.css +13 -398
- package/src/renderer/editor/plugins/mermaid-plugin.ts +62 -71
- package/src/renderer/editor/plugins/themes/base/dark.css +23 -0
- package/src/renderer/editor/plugins/themes/base/elegant.css +32 -0
- package/src/renderer/editor/plugins/themes/base/light.css +20 -0
- package/src/renderer/editor/plugins/themes/base/newsprint.css +27 -0
- package/src/renderer/editor/plugins/themes/components/mermaid/academic.css +43 -0
- package/src/renderer/editor/plugins/themes/components/mermaid/dark.css +20 -0
- package/src/renderer/editor/plugins/themes/components/mermaid/elegant.css +24 -0
- package/src/renderer/editor/plugins/themes/components/mermaid/light.css +21 -0
- package/src/renderer/editor/plugins/themes/components/mermaid/newsprint.css +26 -0
- package/src/renderer/editor/plugins/themes/components/mermaid/variables.css +592 -0
- package/src/renderer/editor/plugins/themes/foundation.css +143 -0
- package/src/renderer/editor/plugins/themes/theme-manager.ts +92 -0
- package/src/renderer/env.d.ts +4 -1
- package/src/renderer/index.html +59 -1
- package/src/renderer/main.ts +432 -57
- package/src/renderer/mobile.css +429 -0
- package/themes/README.md +3 -0
- package/themes/academic-paper.css +1321 -0
- package/themes/elegant.css +14 -7
- package/themes/forest-ink.css +664 -0
- package/themes/pixso-design.css +1261 -0
- package/themes/swiss-design.css +596 -0
- package/themes/template.css +498 -0
- package/tsconfig.main.json +1 -0
- package/tsconfig.main.tsbuildinfo +1 -0
- package/tsconfig.preload.json +1 -0
- package/tsconfig.preload.tsbuildinfo +1 -0
- package/tsconfig.renderer.json +1 -0
- package/tsconfig.renderer.tsbuildinfo +1 -0
- package/tsconfig.tsbuildinfo +1 -0
- package/.trae/documents/fix-mermaid-colors-and-sankey.md +0 -50
- package/src/renderer/themes/theme-manager.ts +0 -40
- /package/src/renderer/{themes → editor/plugins/themes}/base.css +0 -0
|
@@ -0,0 +1,658 @@
|
|
|
1
|
+
# ColaMD CSS 主题定义范式 v3.0
|
|
2
|
+
|
|
3
|
+
**适用范围**:ColaMD `themes/*.css` 用户主题文件的编写与 AI 辅助生成
|
|
4
|
+
**最后更新**:2026-05-23
|
|
5
|
+
**关联文件**:`themes/template.css`(范式配套模板)
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 1. 设计目标
|
|
10
|
+
|
|
11
|
+
### 1.1 核心原则
|
|
12
|
+
|
|
13
|
+
| 原则 | 说明 |
|
|
14
|
+
|------|------|
|
|
15
|
+
| **变量化** | 颜色、字体、字号、间距一律通过 CSS 自定义属性定义。选择器规则中禁止出现裸色值(`#xxx`)、裸字号(`12pt`)、裸字体名 |
|
|
16
|
+
| **模块化** | 主题文件只定义变量 + 极小量选择器微调。Mermaid 图表、编辑器排版由内置系统 (`base.css` / `variables.css`) 自动承继 |
|
|
17
|
+
| **语义化** | 变量名描述用途而非外观。`--color-link` 而非 `--color-blue`;`--font-heading` 而非 `--font-sans` |
|
|
18
|
+
| **可推导** | 完整主题可由 5 个种子色 + 3 组字体栈自动推导,AI Agent 修改主题只需改动 SECTION 1 |
|
|
19
|
+
| **打印保真** | `@media print` 输出必须与屏幕显示保持视觉一致。打印样式是屏幕样式的**镜像增强版**(同值 + `!important` + `print-color-adjust`),而非独立设计 |
|
|
20
|
+
|
|
21
|
+
### 1.2 与现有体系的关系
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
┌─────────────────────────────────────────────────┐
|
|
25
|
+
│ themes/template.css 用户主题 (本范式) │
|
|
26
|
+
│ 定义变量值 + 微调选择器 │
|
|
27
|
+
├─────────────────────────────────────────────────┤
|
|
28
|
+
│ src/.../base.css 编辑器排版层 │
|
|
29
|
+
│ 消费 --bg-color, --text-color 等变量 │
|
|
30
|
+
├─────────────────────────────────────────────────┤
|
|
31
|
+
│ src/.../mermaid/variables.css Mermaid 映射层 │
|
|
32
|
+
│ 消费 --mermaid-* 变量,自动映射到 22 种图表 │
|
|
33
|
+
├─────────────────────────────────────────────────┤
|
|
34
|
+
│ src/.../mermaid-plugin-custom.css 文本偏移基线 │
|
|
35
|
+
│ 提供 --mermaid-label-offset-y 等定位变量 │
|
|
36
|
+
├─────────────────────────────────────────────────┤
|
|
37
|
+
│ src/.../foundation.css 全局 Reset + 默认值 │
|
|
38
|
+
└─────────────────────────────────────────────────┘
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
**关键约束**:主题文件通过 `body.theme-custom` 选择器接入系统。内置 `variables.css` 已预置所有 Mermaid SVG 选择器映射,主题**只需定义变量值**,**无需**重复写 SVG 选择器。
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## 2. 设计规范 (Design Specification)
|
|
46
|
+
|
|
47
|
+
本节定义可被 AI Agent 程序化验证的强制性设计约束。每条规则包含唯一 ID、约束级别(MUST / MUST NOT / SHOULD / SHOULD NOT)、验证方法和设计理由。
|
|
48
|
+
|
|
49
|
+
### 2.1 色彩空间规范
|
|
50
|
+
|
|
51
|
+
#### 2.1.1 对比度约束
|
|
52
|
+
|
|
53
|
+
| Rule ID | 级别 | 规则 | 验证方法 |
|
|
54
|
+
|---------|------|------|---------|
|
|
55
|
+
| **CR-01** | MUST | 正文色 (`--seed-ink`) 与页面底色 (`--seed-surface`) 对比度 ≥ 7:1(WCAG AAA) | `relativeLuminance(ink, surface) ≥ 7.0` |
|
|
56
|
+
| **CR-02** | MUST | 次要文字 (`--seed-ink-muted`) 与页面底色对比度 ≥ 4.5:1(WCAG AA) | `relativeLuminance(muted, surface) ≥ 4.5` |
|
|
57
|
+
| **CR-03** | MUST | 弱化文字 (`--seed-ink-dim`) 与页面底色对比度 ≥ 3:1(WCAG AA large) | `relativeLuminance(dim, surface) ≥ 3.0` |
|
|
58
|
+
| **CR-04** | MUST | 点缀色 (`--seed-accent`) 与页面底色对比度 ≥ 4.5:1(用于链接/强调文字时) | `relativeLuminance(accent, surface) ≥ 4.5` |
|
|
59
|
+
| **CR-05** | SHOULD | 内联代码背景 (`--seed-panel`) 与页面底色区分度 ≥ 1.5:1 | `relativeLuminance(panel, surface) ≥ 1.5` 或 `≤ 0.67` |
|
|
60
|
+
| **CR-06** | MUST NOT | 禁止正文色与页面底色对比度 < 4.5:1 | `relativeLuminance(ink, surface) ≥ 4.5` |
|
|
61
|
+
|
|
62
|
+
**WCAG 相对亮度计算公式**:
|
|
63
|
+
|
|
64
|
+
```
|
|
65
|
+
relativeLuminance(hex) = 0.2126 * R + 0.7152 * G + 0.0722 * B
|
|
66
|
+
其中 R/G/B = linearize(channel / 255)
|
|
67
|
+
linearize(c) = c ≤ 0.04045 ? c/12.92 : ((c+0.055)/1.055)^2.4
|
|
68
|
+
|
|
69
|
+
contrastRatio(L1, L2) = (max(L1,L2) + 0.05) / (min(L1,L2) + 0.05)
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
#### 2.1.2 色相协调规则
|
|
73
|
+
|
|
74
|
+
| Rule ID | 级别 | 规则 | 验证方法 |
|
|
75
|
+
|---------|------|------|---------|
|
|
76
|
+
| **HR-01** | SHOULD | 浅色主题中,点缀色优先选用暖色(红/橙/棕)或冷色(蓝/靛/绿),避免中性灰作为点缀色 | 检查 `--seed-accent` 的 HSL 饱和度 S ≥ 0.30 |
|
|
77
|
+
| **HR-02** | SHOULD | 深色主题中,点缀色亮度适当提高(HSL 的 L ≥ 0.50),避免深色背景上点缀色不可见 | 检查 accent-L 值 |
|
|
78
|
+
| **HR-03** | MUST NOT | 禁止同时使用 ≥ 3 个不同色相的饱和色作为功能色。点缀色应只有 1 个色相族 | 检查色板中饱和度 > 0.3 的色相数量 ≤ 2 |
|
|
79
|
+
|
|
80
|
+
#### 2.1.3 饱和度与明度约束
|
|
81
|
+
|
|
82
|
+
| Rule ID | 级别 | 规则 | 验证方法 |
|
|
83
|
+
|---------|------|------|---------|
|
|
84
|
+
| **SL-01** | MUST | 页面底色 (`--seed-surface`) 饱和度 ≤ 0.05(近白或近黑,不偏色) | 检查 HSL S 值 |
|
|
85
|
+
| **SL-02** | MUST NOT | 禁止大面积色块(代码区 `--seed-panel`、引用块 `--seed-panel-alt`)饱和度 > 0.10 | 检查 HSL S ≤ 0.10 |
|
|
86
|
+
| **SL-03** | SHOULD | 表面色三层 (`surface → panel → panel-alt`) 保持同色相(H 偏差 ≤ 5°),仅明度递减 | 检查 HSL H 差值 ≤ 5° |
|
|
87
|
+
| **SL-04** | MUST | 浅色主题:`L(surface) > L(panel) > L(panel-alt)`;深色主题反之 | 检查 L 单调性 |
|
|
88
|
+
|
|
89
|
+
#### 2.1.4 点缀色面积约束
|
|
90
|
+
|
|
91
|
+
| Rule ID | 级别 | 规则 |
|
|
92
|
+
|---------|------|------|
|
|
93
|
+
| **AR-01** | SHOULD | 点缀色覆盖面积 ≤ 页面可视面积的 10%(用于链接、Mermaid 节点边框、表头底线、引用块竖线等) |
|
|
94
|
+
| **AR-02** | MUST NOT | 禁止将点缀色用作大面积背景色(页面底色、代码块背景、表格全局背景) |
|
|
95
|
+
|
|
96
|
+
#### 2.1.5 中性灰轴约束
|
|
97
|
+
|
|
98
|
+
| Rule ID | 级别 | 规则 | 验证方法 |
|
|
99
|
+
|---------|------|------|---------|
|
|
100
|
+
| **NT-01** | MUST | `--seed-ink` / `--seed-ink-muted` / `--seed-ink-dim` 必须位于同一色相轴(HSL H 偏差 ≤ 3°),仅明度变化 | 检查 H 差值 |
|
|
101
|
+
| **NT-02** | MUST | `--seed-border` 与 `--seed-panel` 明度差 ≥ 0.08,确保边框可见 | `abs(L(border) - L(panel)) ≥ 0.08` |
|
|
102
|
+
| **NT-03** | SHOULD | `--seed-border` 只能使用中性灰(HSL S ≤ 0.05),禁止使用有色边框 | 检查 S ≤ 0.05 |
|
|
103
|
+
|
|
104
|
+
### 2.2 字体搭配规范
|
|
105
|
+
|
|
106
|
+
#### 2.2.1 字体数量与分类
|
|
107
|
+
|
|
108
|
+
| Rule ID | 级别 | 规则 |
|
|
109
|
+
|---------|------|------|
|
|
110
|
+
| **FP-01** | MUST | 主题使用的字体家族总数 ≤ 4(正文 1、标题 1、等宽 1、Mermaid 1) |
|
|
111
|
+
| **FP-02** | SHOULD | `--font-heading` 与 `--font-body` 须有分类对比:一个无衬线、一个衬线;或同分类但字重/字宽显著不同 |
|
|
112
|
+
| **FP-03** | MUST | `--font-code` 必须是等宽字体(monospace),禁止将比例字体用于代码 |
|
|
113
|
+
| **FP-04** | SHOULD | `--font-mermaid` 应引用 `var(--font-heading)`,保持图表与文档标题字体一致 |
|
|
114
|
+
|
|
115
|
+
#### 2.2.2 字体分类搭配矩阵
|
|
116
|
+
|
|
117
|
+
| 正文字体分类 | 推荐标题字体分类 | 搭配效果 |
|
|
118
|
+
|-------------|----------------|---------|
|
|
119
|
+
| Sans-serif | Sans-serif(更粗字重) | 现代、Swiss、技术文档 |
|
|
120
|
+
| Serif | Sans-serif | 经典学术、优雅对比 |
|
|
121
|
+
| Serif | Serif(更粗字重) | 传统印刷、书籍风格 |
|
|
122
|
+
| Sans-serif | Serif | 少见,通常反直觉 |
|
|
123
|
+
|
|
124
|
+
**禁止搭配**:正文与标题使用同一字体的相同字重(无任何区分度)。
|
|
125
|
+
|
|
126
|
+
#### 2.2.3 字号倍率约束
|
|
127
|
+
|
|
128
|
+
| Rule ID | 级别 | 规则 | 验证方法 |
|
|
129
|
+
|---------|------|------|---------|
|
|
130
|
+
| **FS-01** | MUST | `--font-scale-h1` ≥ 1.75(主标题至少为正文的 1.75 倍) | 检查倍率值 |
|
|
131
|
+
| **FS-02** | MUST | 标题倍率严格递减:`h1 > h2 > h3 > h4 > h5 > h6` | 检查单调性 |
|
|
132
|
+
| **FS-03** | SHOULD | 正文字号 `--font-size-root` ∈ [14px, 18px] | 检查范围 |
|
|
133
|
+
| **FS-04** | SHOULD | Mermaid 字号 `--font-size-mermaid` ∈ [11px, 14px] | 检查范围 |
|
|
134
|
+
| **FS-05** | SHOULD | 标题行高 `--line-height-heading` ∈ [1.15, 1.4],小于正文行高 | `heading < body` |
|
|
135
|
+
|
|
136
|
+
#### 2.2.4 字体栈构造规则
|
|
137
|
+
|
|
138
|
+
| Rule ID | 级别 | 规则 |
|
|
139
|
+
|---------|------|------|
|
|
140
|
+
| **FS-06** | MUST | 每个字体栈必须以通用字体族(`serif` / `sans-serif` / `monospace`)结尾 |
|
|
141
|
+
| **FS-07** | MUST | 字体栈中至少包含 1 个中文字体(覆盖 CJK 字符)和 1 个西文字体 |
|
|
142
|
+
| **FS-08** | SHOULD | 字体栈中同一字体族的不同字重变体(如 "Inter" 和 "Inter Display")只保留 1 个 |
|
|
143
|
+
|
|
144
|
+
### 2.3 表面/背景层次规范
|
|
145
|
+
|
|
146
|
+
#### 2.3.1 明度阶梯约束
|
|
147
|
+
|
|
148
|
+
页面视觉层次依赖三层表面的明度差异。
|
|
149
|
+
|
|
150
|
+
| Rule ID | 级别 | 规则 | 浅色主题 | 深色主题 |
|
|
151
|
+
|---------|------|------|---------|---------|
|
|
152
|
+
| **SH-01** | MUST | 相邻表面层明度差 ≥ 0.04 | `L(surface) - L(panel) ≥ 0.04` | `L(panel) - L(surface) ≥ 0.04` |
|
|
153
|
+
| **SH-02** | MUST | 代码块底色 (`--code-block-bg` 或 `--seed-panel-alt`) 与页面底色明度差 ≥ 0.06,确保代码区域肉眼可辨 | `abs(L(block) - L(surface)) ≥ 0.06` |
|
|
154
|
+
| **SH-03** | SHOULD | 三层表面 `surface → panel → panel-alt` 的明度差均匀(相邻层差值偏差 ≤ 50%) | `ratio(d1,d2) ≤ 1.5` |
|
|
155
|
+
|
|
156
|
+
#### 2.3.2 各语义表面最低对比度
|
|
157
|
+
|
|
158
|
+
| 语义角色 | 对应变量 | 与页面底色的最低对比度 |
|
|
159
|
+
|----------|---------|---------------------|
|
|
160
|
+
| 代码块背景 | `--code-block-bg` | 1.2:1(肉眼可辨即可,不宜过强) |
|
|
161
|
+
| 内联代码背景 | `--code-bg` | 1.15:1 |
|
|
162
|
+
| 引用块背景 | `--blockquote-bg` | 1.15:1 |
|
|
163
|
+
| 表头背景 | `--table-header-bg` | 1.5:1(需明显区分) |
|
|
164
|
+
| Mermaid 节点填充 | `--mermaid-node-fill` | 1.2:1 |
|
|
165
|
+
| Mermaid 聚类填充 | `--mermaid-cluster-fill` | 1.1:1(极浅即可) |
|
|
166
|
+
|
|
167
|
+
### 2.4 线条/边框规范
|
|
168
|
+
|
|
169
|
+
#### 2.4.1 边框色与底色关系
|
|
170
|
+
|
|
171
|
+
| Rule ID | 级别 | 规则 |
|
|
172
|
+
|---------|------|------|
|
|
173
|
+
| **BD-01** | MUST | 边框色 (`--seed-border`) 必须比其所在表面色暗:浅色主题 `L(border) < L(surface)`,深色主题反之 |
|
|
174
|
+
| **BD-02** | SHOULD | 强调边框 (`--seed-border-strong`) 比普通边框深 ≥ 0.15 明度差 |
|
|
175
|
+
| **BD-03** | SHOULD | Mermaid 节点描边 (`--mermaid-node-stroke`) 与节点填充 (`--mermaid-node-fill`) 对比度 ≥ 2:1 |
|
|
176
|
+
|
|
177
|
+
#### 2.4.2 边框宽度层级
|
|
178
|
+
|
|
179
|
+
| 用途 | 推荐宽度 | 说明 |
|
|
180
|
+
|------|---------|------|
|
|
181
|
+
| 分割线 (hr) | 1px | 最细,仅起分隔作用 |
|
|
182
|
+
| 表格内边框 (td) | 1px | 细线,不抢内容 |
|
|
183
|
+
| Mermaid 节点描边 | 1.5px | 略粗,确保图表清晰 |
|
|
184
|
+
| 引用块左侧竖线 | 4px | 最粗,视觉锚点 |
|
|
185
|
+
| 表头底线 | 2px | 区分表头与表体 |
|
|
186
|
+
|
|
187
|
+
### 2.5 语义色角色映射规范
|
|
188
|
+
|
|
189
|
+
#### 2.5.1 强制映射表 (Mandatory)
|
|
190
|
+
|
|
191
|
+
以下映射**必须**成立。变量值必须直接或间接来自种子色板。
|
|
192
|
+
|
|
193
|
+
| 语义变量 | 必须映射到 | 说明 |
|
|
194
|
+
|----------|-----------|------|
|
|
195
|
+
| `--bg-color` | `var(--seed-surface)` | 页面底色 = 最浅表面 |
|
|
196
|
+
| `--text-color` | `var(--seed-ink)` | 正文色 = 最深文字 |
|
|
197
|
+
| `--heading-color` | `var(--seed-ink)` | 标题色 = 正文色(统一) |
|
|
198
|
+
| `--link-color` | `var(--seed-accent)` | 链接色 = 点缀色 |
|
|
199
|
+
| `--accent-color` | `var(--seed-accent)` | 全局强调色 = 点缀色 |
|
|
200
|
+
| `--border-color` | `var(--seed-border)` | 边框色 = 中性灰 |
|
|
201
|
+
| `--code-bg` | `var(--seed-panel)` | 内联代码背景 = 中间表面 |
|
|
202
|
+
| `--code-block-bg` | `var(--seed-panel-alt)` | 代码块背景 = 最深表面 |
|
|
203
|
+
| `--blockquote-bg` | `var(--seed-panel)` | 引用块背景 = 中间表面 |
|
|
204
|
+
| `--blockquote-border` | `var(--seed-ink)` 或 `var(--seed-accent)` | 引用竖线 = 正文色或点缀色 |
|
|
205
|
+
| `--table-header-bg` | `var(--seed-panel)` 或 `var(--seed-ink)` | 表头 = 浅底或黑底白字 |
|
|
206
|
+
| `--selection-bg` | `accent color + alpha 0.10~0.20` | 选区 = 点缀色半透明 |
|
|
207
|
+
|
|
208
|
+
#### 2.5.2 禁止的映射 (Forbidden)
|
|
209
|
+
|
|
210
|
+
| Rule ID | 级别 | 禁止项 |
|
|
211
|
+
|---------|------|--------|
|
|
212
|
+
| **MP-01** | MUST NOT | `--text-color` 映射到 ⾮ `--seed-ink` 或 `--seed-ink-muted` 的其他来源 |
|
|
213
|
+
| **MP-02** | MUST NOT | `--bg-color` 映射到 ⾮ `--seed-surface` 的其他来源 |
|
|
214
|
+
| **MP-03** | MUST NOT | `--border-color` 映射到有彩色(非中性灰),HSL S > 0.05 |
|
|
215
|
+
| **MP-04** | MUST NOT | `--code-bg` 与 `--bg-color` 使用同一值(代码区不可见) |
|
|
216
|
+
| **MP-05** | MUST NOT | `--table-header-bg` 同时兼具浅底 + 浅字(表头必须可读) |
|
|
217
|
+
|
|
218
|
+
### 2.6 规则优先级与冲突解决
|
|
219
|
+
|
|
220
|
+
当多条规则冲突时,按以下优先级裁决:
|
|
221
|
+
|
|
222
|
+
```
|
|
223
|
+
1. MUST NOT > 2. MUST > 3. SHOULD NOT > 4. SHOULD
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
- 任何 MUST NOT 规则被违反 → 主题**拒绝**(不合规)
|
|
227
|
+
- 任何 MUST 规则被违反 → 主题**拒绝**
|
|
228
|
+
- SHOULD NOT 被违反 → **警告**,需人工审核
|
|
229
|
+
- SHOULD 被违反 → **建议**,不阻止使用
|
|
230
|
+
|
|
231
|
+
示例:若某个点缀色满足 HR-01(SHOULD),但违反 CR-04(MUST),则主题被拒绝。
|
|
232
|
+
|
|
233
|
+
---
|
|
234
|
+
|
|
235
|
+
## 3. 变量体系
|
|
236
|
+
|
|
237
|
+
### 3.1 分层架构
|
|
238
|
+
|
|
239
|
+
```
|
|
240
|
+
SECTION 1 设计令牌 (Design Tokens) ← 用户修改
|
|
241
|
+
SECTION 2 语义映射 (Semantic Mapping) ← 自动推导
|
|
242
|
+
SECTION 3 Mermaid 图表变量 ← 被内置系统消费
|
|
243
|
+
SECTION 4 排版微调变量 ← 可选覆盖
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
### 3.2 设计令牌:种子色板
|
|
247
|
+
|
|
248
|
+
主题的视觉基调由 5 个种子色 + 各自深浅变体决定。
|
|
249
|
+
|
|
250
|
+
```
|
|
251
|
+
--seed-accent 点缀色(链接、强调、Mermaid 高亮)
|
|
252
|
+
├── --seed-accent-light 浅变体(用作背景)
|
|
253
|
+
└── --seed-accent-dark 深变体(用作 hover / 文字)
|
|
254
|
+
|
|
255
|
+
--seed-surface 页面底色(最浅层)
|
|
256
|
+
--seed-panel 卡片/代码区底色(中间层)
|
|
257
|
+
--seed-panel-alt 表头/引用块底色(最深表面层)
|
|
258
|
+
|
|
259
|
+
--seed-ink 正文/标题色(最深文字)
|
|
260
|
+
--seed-ink-muted 次要文字色
|
|
261
|
+
--seed-ink-dim 弱化/禁用文字色
|
|
262
|
+
|
|
263
|
+
--seed-border 常规边框色
|
|
264
|
+
--seed-border-strong 强调边框色
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
**配色约束**:
|
|
268
|
+
|
|
269
|
+
| 主题类型 | 表面色关系 | 文字色关系 |
|
|
270
|
+
|----------|-----------|-----------|
|
|
271
|
+
| 浅色主题 | `surface` < `panel` < `panel-alt` (亮度递减) | `ink` > `muted` > `dim` (亮度递增) |
|
|
272
|
+
| 深色主题 | `surface` > `panel` > `panel-alt` (亮度递增) | `ink` < `muted` < `dim` (亮度递减) |
|
|
273
|
+
| 点缀色面积 | ≤ 页面 10%(链接 + 强调 + Mermaid 节点边框) | |
|
|
274
|
+
|
|
275
|
+
### 3.3 设计令牌:字体系统
|
|
276
|
+
|
|
277
|
+
```
|
|
278
|
+
--font-body 正文字体栈(衬线优先或无衬线)
|
|
279
|
+
--font-heading 标题字体栈(与正文形成对比)
|
|
280
|
+
--font-code 等宽字体栈(代码/公式)
|
|
281
|
+
--font-mermaid Mermaid 图表字体(默认引用 --font-heading)
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
**字体栈构造规范**:
|
|
285
|
+
1. 西文字体在前(Windows / macOS / Linux 逐一覆盖)
|
|
286
|
+
2. 中文字体居中(Serif 或 Sans Serif 按主题风格选择)
|
|
287
|
+
3. 通用后备字体在末(`serif` / `sans-serif` / `monospace`)
|
|
288
|
+
|
|
289
|
+
### 3.4 语义映射规则
|
|
290
|
+
|
|
291
|
+
设计令牌通过变量引用自动映射到 ColaMD 内置系统消费的语义变量。
|
|
292
|
+
|
|
293
|
+
| 内置变量 | 映射来源 | 消费者 |
|
|
294
|
+
|----------|---------|--------|
|
|
295
|
+
| `--bg-color` | `--seed-surface` | `base.css` 页面背景 |
|
|
296
|
+
| `--text-color` | `--seed-ink` | `base.css` 正文颜色 |
|
|
297
|
+
| `--text-muted` | `--seed-ink-muted` | `base.css` 引用/次要文字 |
|
|
298
|
+
| `--heading-color` | `--seed-ink` | `base.css` 标题颜色 |
|
|
299
|
+
| `--border-color` | `--seed-border` | `base.css` 表格/分割线 |
|
|
300
|
+
| `--link-color` | `--seed-accent` | `base.css` 超链接 |
|
|
301
|
+
| `--code-bg` | `--seed-panel` | `base.css` 内联代码背景 |
|
|
302
|
+
| `--code-block-bg` | `--seed-panel-alt` | `base.css` 代码块背景 |
|
|
303
|
+
| `--blockquote-border` | `--seed-accent` | `base.css` 引用块左侧竖线 |
|
|
304
|
+
| `--table-header-bg` | `--seed-panel` | `base.css` 表头背景 |
|
|
305
|
+
| `--selection-bg` | `accent + 0.15 alpha` | `base.css` 选区高亮 |
|
|
306
|
+
|
|
307
|
+
**映射原则**:语义映射仅做变量引用(`var(--seed-*)`),不引入新色值。如需微调某个语义角色(如让 `--code-bg` 比 `--seed-panel` 略深),在映射处加 `color-mix()` 或微调 alpha 值。
|
|
308
|
+
|
|
309
|
+
### 3.5 Mermaid 20 核心变量
|
|
310
|
+
|
|
311
|
+
所有 Mermaid 变量由内置 `variables.css` 自动消费,覆盖 22 种图表类型。
|
|
312
|
+
|
|
313
|
+
| 变量 | 作用于 | 映射建议 |
|
|
314
|
+
|------|--------|---------|
|
|
315
|
+
| `--mermaid-background` | 图表容器背景 | `--seed-panel` |
|
|
316
|
+
| `--mermaid-border-color` | 图表容器边框 | `--seed-border` |
|
|
317
|
+
| `--mermaid-font-family` | 图表内所有文字 | `--font-mermaid` |
|
|
318
|
+
| `--mermaid-font-size` | 图表内所有文字大小 | 独立设置(通常 12-14px) |
|
|
319
|
+
| `--mermaid-node-fill` | 节点填充色 | `--seed-panel` |
|
|
320
|
+
| `--mermaid-node-stroke` | 节点描边色 | `--seed-accent` |
|
|
321
|
+
| `--mermaid-node-stroke-width` | 节点描边宽度 | `1.5px`(固定) |
|
|
322
|
+
| `--mermaid-node-text` | 节点内文字色 | `--seed-ink` |
|
|
323
|
+
| `--mermaid-edge-stroke` | 连线颜色 | `--seed-ink-muted` |
|
|
324
|
+
| `--mermaid-edge-stroke-width` | 连线宽度 | `1.5px`(固定) |
|
|
325
|
+
| `--mermaid-cluster-fill` | Subgraph 聚类填充 | `accent + 0.06 alpha` |
|
|
326
|
+
| `--mermaid-cluster-stroke` | Subgraph 聚类边框 | `--seed-accent` |
|
|
327
|
+
| `--mermaid-label-text` | 标签/节点内文本色 | `--seed-ink` |
|
|
328
|
+
| `--mermaid-edge-label-text` | 边标签文字色 | `--seed-ink-muted` |
|
|
329
|
+
| `--mermaid-edge-label-bg` | 边标签背景色 | `--seed-surface` |
|
|
330
|
+
| `--mermaid-title-text` | 图表标题色 | `--seed-ink` |
|
|
331
|
+
| `--mermaid-axis-text` | 坐标轴文字色 | `--seed-ink-muted` |
|
|
332
|
+
| `--mermaid-highlight` | 高亮/标记色 | `--seed-accent` |
|
|
333
|
+
| `--mermaid-person-stroke` | 人物节点描边 | `--seed-ink` |
|
|
334
|
+
| `--mermaid-label-offset-y` | 标签 Y 偏移 | `0px`(无特殊需求时) |
|
|
335
|
+
|
|
336
|
+
---
|
|
337
|
+
|
|
338
|
+
## 4. 模块化规则
|
|
339
|
+
|
|
340
|
+
### 4.1 继承而非重写
|
|
341
|
+
|
|
342
|
+
内置系统已处理的样式,主题文件**禁止**重写其选择器。
|
|
343
|
+
|
|
344
|
+
| 内置文件 | 已处理内容 | 主题禁止 |
|
|
345
|
+
|----------|-----------|---------|
|
|
346
|
+
| `variables.css` | 所有 `body.theme-custom .mermaid-preview svg .*` 选择器 | 写 Mermaid SVG 选择器 |
|
|
347
|
+
| `base.css` | `#editor .ProseMirror` 下的 h1-h6/p/code/pre/table/blockquote/ul/ol/hr/img | 重写已被变量覆盖的排版规则 |
|
|
348
|
+
| `mermaid-plugin-custom.css` | `.label text`, `.nodeLabel`, `.edgeLabel` 的 `transform/display/position` | 在主题层做定位覆盖(参照 guizang 模式) |
|
|
349
|
+
|
|
350
|
+
### 4.2 允许的微调选择器
|
|
351
|
+
|
|
352
|
+
以下选择器**允许**在主题中定义(内置系统未覆盖或不满足个性化需求):
|
|
353
|
+
|
|
354
|
+
| 允许的选择器 | 用途 | 约束 |
|
|
355
|
+
|-------------|------|------|
|
|
356
|
+
| `body.theme-custom h1-h6` | 标题字号/字体(base.css 使用 em 倍率,可覆盖为 pt) | 值必须引用 `var(--font-*)` |
|
|
357
|
+
| `body.theme-custom strong` | 加粗文字颜色 | 引用 `var(--accent-color)` |
|
|
358
|
+
| `body.theme-custom code` | 内联代码字体/背景 | 引用 `var(--font-code)`, `var(--code-bg)` |
|
|
359
|
+
| `body.theme-custom pre` | 代码块字体/背景 | 引用变量 |
|
|
360
|
+
| `body.theme-custom blockquote` | 引用块背景色(base.css 未设背景) | 引用 `var(--blockquote-bg)` |
|
|
361
|
+
| `body.theme-custom table th` | 表头强调(双底线等) | 值引用变量 |
|
|
362
|
+
| `body.theme-custom .mermaid-block + p` | 图表标题居中 | 字体/字号引用变量 |
|
|
363
|
+
| `@media print` | 打印样式 | 用于固定打印色值 |
|
|
364
|
+
|
|
365
|
+
### 4.3 度量指标
|
|
366
|
+
|
|
367
|
+
| 指标 | 目标值 | 说明 |
|
|
368
|
+
|------|--------|------|
|
|
369
|
+
| 主题文件总行数 | ≤ 300 行 | 含注释和空行 |
|
|
370
|
+
| 裸色值数量 | 0 | 所有颜色通过 `var(--*)` 引用 |
|
|
371
|
+
| 裸字号数量 | 0 | 所有字号通过 `var(--font-*)` 引用 |
|
|
372
|
+
| Mermaid SVG 选择器 | 0 | 由内置 `variables.css` 处理 |
|
|
373
|
+
| 用户需修改的变量数 | ≤ 20 | 集中在 SECTION 1 |
|
|
374
|
+
|
|
375
|
+
---
|
|
376
|
+
|
|
377
|
+
## 5. 文件结构规范
|
|
378
|
+
|
|
379
|
+
### 5.1 必须的 SECTION
|
|
380
|
+
|
|
381
|
+
```
|
|
382
|
+
SECTION 1 设计令牌 — 变量定义块(用户编辑区)
|
|
383
|
+
├── 1.1 种子色板
|
|
384
|
+
├── 1.2 字体系统
|
|
385
|
+
├── 1.3 字号倍率
|
|
386
|
+
└── 1.4 圆角/间距/宽度
|
|
387
|
+
|
|
388
|
+
SECTION 2 语义映射 — 令牌 → 内置变量的自动映射
|
|
389
|
+
├── 2.1 编辑区表面色
|
|
390
|
+
├── 2.2 编辑区文字色
|
|
391
|
+
├── 2.3 链接/强调
|
|
392
|
+
├── 2.4 边框/分割线
|
|
393
|
+
├── 2.5 内联代码
|
|
394
|
+
├── 2.6 代码块
|
|
395
|
+
├── 2.7 引用块
|
|
396
|
+
├── 2.8 表格
|
|
397
|
+
└── 2.9 滚动条
|
|
398
|
+
|
|
399
|
+
SECTION 3 Mermaid 图表变量
|
|
400
|
+
├── 3.1 容器
|
|
401
|
+
├── 3.2 字体
|
|
402
|
+
├── 3.3 节点
|
|
403
|
+
├── 3.4 连线
|
|
404
|
+
├── 3.5 聚类
|
|
405
|
+
├── 3.6 标签
|
|
406
|
+
├── 3.7 标题/坐标轴
|
|
407
|
+
├── 3.8 人物节点
|
|
408
|
+
└── 3.9 偏移
|
|
409
|
+
|
|
410
|
+
SECTION 4 排版微调变量
|
|
411
|
+
|
|
412
|
+
SECTION 5 选择器级微调
|
|
413
|
+
|
|
414
|
+
SECTION 6 @media print
|
|
415
|
+
```
|
|
416
|
+
|
|
417
|
+
### 5.2 选择器规则
|
|
418
|
+
|
|
419
|
+
| 规则 | 说明 |
|
|
420
|
+
|------|------|
|
|
421
|
+
| 根选择器 | 变量定义在 `body.theme-custom { }` 内 |
|
|
422
|
+
| 选择器前缀 | 排版选择器使用 `body.theme-custom <element>` 限定作用域 |
|
|
423
|
+
| `!important` | 仅在 `@media print` 中使用。屏幕样式靠选择器优先级解决 |
|
|
424
|
+
| 层叠顺序 | 变量定义块在前,选择器规则块在后 |
|
|
425
|
+
|
|
426
|
+
### 5.3 注释规范
|
|
427
|
+
|
|
428
|
+
```css
|
|
429
|
+
/* ── X.X 功能描述(中文)── */
|
|
430
|
+
/* 用于 xxx 场景的 xxx 变量 */
|
|
431
|
+
--variable-name: value;
|
|
432
|
+
|
|
433
|
+
/* ═══════════════════ 分隔大节 ═══════════════════ */
|
|
434
|
+
```
|
|
435
|
+
|
|
436
|
+
---
|
|
437
|
+
|
|
438
|
+
## 6. 打印保真规范 (Print Fidelity)
|
|
439
|
+
|
|
440
|
+
### 6.1 核心约束
|
|
441
|
+
|
|
442
|
+
ColaMD 通过 Electron `printToPDF()` 生成 PDF,底层为 Chromium 打印引擎。Chromium 打印默认**剥离所有背景色和自定义颜色**。因此 `@media print` 必须主动恢复每个被剥离的样式。
|
|
443
|
+
|
|
444
|
+
**铁律**:`@media print` 是屏幕样式的**镜像增强版**——相同的变量值 + `!important` + `print-color-adjust: exact`。禁止在 print 中创造不同的设计。
|
|
445
|
+
|
|
446
|
+
### 6.2 必须覆盖的元素清单
|
|
447
|
+
|
|
448
|
+
以下元素在打印时会被 Chromium 剥离样式,**每个都必须**在 `@media print` 中显式声明:
|
|
449
|
+
|
|
450
|
+
| 元素 | 必须声明 | 原因 |
|
|
451
|
+
|------|---------|------|
|
|
452
|
+
| `html, body` | `background`, `color`, `font-family` | 根元素背景/文字被清除 |
|
|
453
|
+
| `h1-h6` | `color`(尤其是有色标题如 Swiss Red h1) | 非纯黑标题色被清除 |
|
|
454
|
+
| `code` | `background`, `color` | 内联代码背景被清除 |
|
|
455
|
+
| `pre` | `background`, `color`, `border-left`(如有) | 代码块背景/装饰被清除 |
|
|
456
|
+
| `blockquote` | `background`, `border-left` | 引用块背景被清除 |
|
|
457
|
+
| `table th` | `background`, `color`, `border` | 表头底色被清除 |
|
|
458
|
+
| `table td` | `border` | 表格线可能断裂 |
|
|
459
|
+
| `a` | `color`, `border-bottom`(如有) | 链接色被清除 |
|
|
460
|
+
| `.mermaid-block` | `background`, `border` | 图表容器被清除 |
|
|
461
|
+
| `.mermaid-preview svg *` | `print-color-adjust: exact` | SVG 颜色全部被剥离 |
|
|
462
|
+
| `.mermaid-block + p` | `color`, `text-align` | 图题样式丢失 |
|
|
463
|
+
| `strong` | `color`(如使用非默认色) | 强调色被清除 |
|
|
464
|
+
|
|
465
|
+
### 6.3 打印变量声明块
|
|
466
|
+
|
|
467
|
+
`@media print` 开头必须先重新声明关键变量。Chromium 打印可能丢失 `body.theme-custom` 中定义的 CSS 自定义属性,因此在 print 作用域内重新注入:
|
|
468
|
+
|
|
469
|
+
```css
|
|
470
|
+
@media print {
|
|
471
|
+
body.theme-custom {
|
|
472
|
+
/* 将 SECTION 1 的种子色重新声明到 print 作用域 */
|
|
473
|
+
--seed-accent: #e30613;
|
|
474
|
+
--seed-surface: #ffffff;
|
|
475
|
+
--seed-ink: #0d0d0d;
|
|
476
|
+
--seed-panel: #f4f4f4;
|
|
477
|
+
--seed-panel-alt: #eaeaea;
|
|
478
|
+
/* ... 以及所有在 print 选择器中引用的变量 */
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
/* 之后的选择器引用 var(--seed-*) 确保值一致 */
|
|
482
|
+
}
|
|
483
|
+
```
|
|
484
|
+
|
|
485
|
+
### 6.4 打印选择器编写规则
|
|
486
|
+
|
|
487
|
+
1. **先变量,后选择器**:先重声明变量块,再写选择器规则
|
|
488
|
+
2. **`!important` 全部**:print 中每个属性都用 `!important`,因为打印引擎的默认样式表优先级极高
|
|
489
|
+
3. **`print-color-adjust: exact` 精确覆盖**:每个有背景色的元素独立声明(不能依赖继承)
|
|
490
|
+
4. **值与屏幕一致**:print 选择器的值引用 `var(--seed-*)`,保证与屏幕端一致
|
|
491
|
+
5. **禁止在 print 中引入新色值**:即使是 `#ffffff` 也应引用变量(如 `var(--seed-surface)`)
|
|
492
|
+
|
|
493
|
+
### 6.5 完整打印模板
|
|
494
|
+
|
|
495
|
+
```css
|
|
496
|
+
@media print {
|
|
497
|
+
@page { margin: 20mm; }
|
|
498
|
+
|
|
499
|
+
/* —— 变量重声明(确保 Chromium 打印不丢失) —— */
|
|
500
|
+
body.theme-custom {
|
|
501
|
+
--seed-accent: <同 SECTION 1>;
|
|
502
|
+
--seed-accent-dark: <同 SECTION 1>;
|
|
503
|
+
--seed-surface: <同 SECTION 1>;
|
|
504
|
+
--seed-ink: <同 SECTION 1>;
|
|
505
|
+
--seed-ink-muted: <同 SECTION 1>;
|
|
506
|
+
--seed-panel: <同 SECTION 1>;
|
|
507
|
+
--seed-panel-alt: <同 SECTION 1>;
|
|
508
|
+
--seed-border: <同 SECTION 1>;
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
/* —— 根元素 —— */
|
|
512
|
+
html, body, body.theme-custom {
|
|
513
|
+
background: var(--seed-surface) !important;
|
|
514
|
+
color: var(--seed-ink) !important;
|
|
515
|
+
font-family: var(--font-body) !important;
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
/* —— 标题(尤其是有色标题必须恢复) —— */
|
|
519
|
+
body.theme-custom h1 {
|
|
520
|
+
color: var(--seed-accent) !important; /* 保留页面中的有色标题 */
|
|
521
|
+
-webkit-print-color-adjust: exact !important;
|
|
522
|
+
print-color-adjust: exact !important;
|
|
523
|
+
}
|
|
524
|
+
|
|
525
|
+
/* —— 内联代码 —— */
|
|
526
|
+
body.theme-custom code {
|
|
527
|
+
background: var(--seed-panel) !important;
|
|
528
|
+
color: var(--seed-accent-dark) !important;
|
|
529
|
+
-webkit-print-color-adjust: exact !important;
|
|
530
|
+
print-color-adjust: exact !important;
|
|
531
|
+
}
|
|
532
|
+
|
|
533
|
+
/* —— 代码块 —— */
|
|
534
|
+
body.theme-custom pre {
|
|
535
|
+
background: var(--seed-panel-alt) !important;
|
|
536
|
+
color: var(--seed-ink) !important;
|
|
537
|
+
-webkit-print-color-adjust: exact !important;
|
|
538
|
+
print-color-adjust: exact !important;
|
|
539
|
+
}
|
|
540
|
+
body.theme-custom pre code {
|
|
541
|
+
background: transparent !important;
|
|
542
|
+
color: inherit !important;
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
/* —— 引用块 —— */
|
|
546
|
+
body.theme-custom blockquote {
|
|
547
|
+
background: var(--seed-panel) !important;
|
|
548
|
+
border-left-color: var(--seed-ink) !important;
|
|
549
|
+
-webkit-print-color-adjust: exact !important;
|
|
550
|
+
print-color-adjust: exact !important;
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
/* —— 表格表头(有色底必须恢复) —— */
|
|
554
|
+
body.theme-custom table th {
|
|
555
|
+
background: var(--seed-ink) !important;
|
|
556
|
+
color: var(--seed-surface) !important;
|
|
557
|
+
-webkit-print-color-adjust: exact !important;
|
|
558
|
+
print-color-adjust: exact !important;
|
|
559
|
+
}
|
|
560
|
+
body.theme-custom table td {
|
|
561
|
+
border-color: var(--seed-border) !important;
|
|
562
|
+
}
|
|
563
|
+
|
|
564
|
+
/* —— 链接 —— */
|
|
565
|
+
body.theme-custom a {
|
|
566
|
+
color: var(--seed-ink) !important;
|
|
567
|
+
-webkit-print-color-adjust: exact !important;
|
|
568
|
+
print-color-adjust: exact !important;
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
/* —— 强调文字 —— */
|
|
572
|
+
body.theme-custom strong {
|
|
573
|
+
color: var(--seed-accent-dark) !important;
|
|
574
|
+
-webkit-print-color-adjust: exact !important;
|
|
575
|
+
print-color-adjust: exact !important;
|
|
576
|
+
}
|
|
577
|
+
|
|
578
|
+
/* —— Mermaid 图表容器 —— */
|
|
579
|
+
body.theme-custom .mermaid-block {
|
|
580
|
+
background: var(--seed-surface) !important;
|
|
581
|
+
border-color: var(--seed-border) !important;
|
|
582
|
+
-webkit-print-color-adjust: exact !important;
|
|
583
|
+
print-color-adjust: exact !important;
|
|
584
|
+
}
|
|
585
|
+
body.theme-custom .mermaid-preview svg * {
|
|
586
|
+
-webkit-print-color-adjust: exact !important;
|
|
587
|
+
print-color-adjust: exact !important;
|
|
588
|
+
}
|
|
589
|
+
|
|
590
|
+
/* —— 图表标题 —— */
|
|
591
|
+
body.theme-custom .mermaid-block + p {
|
|
592
|
+
color: var(--seed-ink-muted) !important;
|
|
593
|
+
text-align: center !important;
|
|
594
|
+
}
|
|
595
|
+
}
|
|
596
|
+
```
|
|
597
|
+
|
|
598
|
+
### 6.6 打印验证清单
|
|
599
|
+
|
|
600
|
+
主题开发完成后,逐项确认 PDF 导出效果:
|
|
601
|
+
|
|
602
|
+
- [ ] 页面背景色与屏幕一致(非灰色)
|
|
603
|
+
- [ ] h1 颜色与屏幕一致(尤其是有色标题如 Swiss Red)
|
|
604
|
+
- [ ] 内联代码背景色存在
|
|
605
|
+
- [ ] 代码块背景色存在,左侧装饰线(如有)可见
|
|
606
|
+
- [ ] 引用块背景色和左侧竖线存在
|
|
607
|
+
- [ ] 表格表头底色存在(黑底白字 / 浅灰底等)
|
|
608
|
+
- [ ] Mermaid SVG 颜色与屏幕一致
|
|
609
|
+
- [ ] 图表标题居中且字号正确
|
|
610
|
+
- [ ] 链接文字颜色不为默认蓝
|
|
611
|
+
|
|
612
|
+
---
|
|
613
|
+
|
|
614
|
+
## 7. AI Agent 编写指南
|
|
615
|
+
|
|
616
|
+
### 7.1 创建新主题
|
|
617
|
+
|
|
618
|
+
1. 复制 `themes/template.css` 为基础
|
|
619
|
+
2. 确定配色方向(浅色/深色/暖调/冷调/学术)
|
|
620
|
+
3. 填写 SECTION 1 的 5 个种子色 + 3 组字体栈
|
|
621
|
+
4. 微调 SECTION 5 的选择器(如需)
|
|
622
|
+
5. 保存,导入测试
|
|
623
|
+
|
|
624
|
+
### 7.2 修改现有主题
|
|
625
|
+
|
|
626
|
+
1. 只修改 SECTION 1 中的 `--seed-*` 和 `--font-*` 变量
|
|
627
|
+
2. 其他 SECTION 的映射变量自动跟随
|
|
628
|
+
3. 如某个语义角色需要独立微调,修改对应的 `--var: var(--seed-*)` 映射行
|
|
629
|
+
|
|
630
|
+
### 7.3 禁止操作
|
|
631
|
+
|
|
632
|
+
- 在 `body.theme-custom` 块外定义变量
|
|
633
|
+
- 在选择器中使用裸色值(`#xxxxxx`)
|
|
634
|
+
- 重复定义内置 `variables.css` 已有的 Mermaid SVG 选择器
|
|
635
|
+
- 使用 `!important`(`@media print` 除外)
|
|
636
|
+
- 为 mermaid 标签添加 `transform` / `display` / `position` / `top` / `left` 覆盖
|
|
637
|
+
|
|
638
|
+
---
|
|
639
|
+
|
|
640
|
+
## 8. 现有主题对标
|
|
641
|
+
|
|
642
|
+
| 主题 | 行数 | 范式符合度 | 迁移建议 |
|
|
643
|
+
|------|------|-----------|---------|
|
|
644
|
+
| `guizang.css` | ~700 | 中(变量驱动,但选择器冗长) | 可精简至 ~200 行 |
|
|
645
|
+
| `elegant.css` | ~750 | 中 | 可精简至 ~200 行 |
|
|
646
|
+
| `forest-ink.css` | ~750 | 中 | 可精简至 ~200 行 |
|
|
647
|
+
| `pixso-design.css` | ~700 | 中 | 可精简至 ~200 行 |
|
|
648
|
+
| `academic-paper.css` | ~1300 | 低(大量 GB/T 7713 专用选择器) | 适当保留专用规则 |
|
|
649
|
+
|
|
650
|
+
---
|
|
651
|
+
|
|
652
|
+
## 9. 版本历史
|
|
653
|
+
|
|
654
|
+
| 版本 | 日期 | 变更 |
|
|
655
|
+
|------|------|------|
|
|
656
|
+
| v3.2 | 2026-05-23 | 新增 Section 2「设计规范」:色彩空间、字体搭配、表面层次、线条边框的强制性约束(含 Rule ID、WCAG 对比度公式、色彩协调矩阵),支持 AI Agent 程序化验证 |
|
|
657
|
+
| v3.1 | 2026-05-23 | 新增「打印保真」原则与完整 `@media print` 规范(Section 6) |
|
|
658
|
+
| v3.0 | 2026-05-23 | 初始范式定义。提出种子色板 + 语义映射 + 内置继承的三层架构 |
|