@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.
Files changed (193) hide show
  1. package/.trae/specs/optimize-theme-loading/checklist.md +20 -0
  2. package/.trae/specs/optimize-theme-loading/spec.md +103 -0
  3. package/.trae/specs/optimize-theme-loading/tasks.md +40 -0
  4. package/CHANGELOG.md +323 -0
  5. package/CLAUDE.md +56 -0
  6. package/README.md +422 -26
  7. package/README_CN.md +480 -28
  8. package/android/app/build/.npmkeep +0 -0
  9. package/android/app/build.gradle +76 -0
  10. package/android/app/capacitor.build.gradle +24 -0
  11. package/android/app/proguard-rules.pro +21 -0
  12. package/android/app/release.keystore +0 -0
  13. package/android/app/src/androidTest/java/com/getcapacitor/myapp/ExampleInstrumentedTest.java +26 -0
  14. package/android/app/src/main/AndroidManifest.xml +64 -0
  15. package/android/app/src/main/java/cn/bytechain/colamd/MainActivity.java +180 -0
  16. package/android/app/src/main/res/drawable/ic_launcher_background.xml +170 -0
  17. package/android/app/src/main/res/drawable/splash.png +0 -0
  18. package/android/app/src/main/res/drawable-land-hdpi/splash.png +0 -0
  19. package/android/app/src/main/res/drawable-land-mdpi/splash.png +0 -0
  20. package/android/app/src/main/res/drawable-land-xhdpi/splash.png +0 -0
  21. package/android/app/src/main/res/drawable-land-xxhdpi/splash.png +0 -0
  22. package/android/app/src/main/res/drawable-land-xxxhdpi/splash.png +0 -0
  23. package/android/app/src/main/res/drawable-port-hdpi/splash.png +0 -0
  24. package/android/app/src/main/res/drawable-port-mdpi/splash.png +0 -0
  25. package/android/app/src/main/res/drawable-port-xhdpi/splash.png +0 -0
  26. package/android/app/src/main/res/drawable-port-xxhdpi/splash.png +0 -0
  27. package/android/app/src/main/res/drawable-port-xxxhdpi/splash.png +0 -0
  28. package/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml +34 -0
  29. package/android/app/src/main/res/layout/activity_main.xml +12 -0
  30. package/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +5 -0
  31. package/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +5 -0
  32. package/android/app/src/main/res/mipmap-hdpi/ic_launcher.png +0 -0
  33. package/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png +0 -0
  34. package/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png +0 -0
  35. package/android/app/src/main/res/mipmap-mdpi/ic_launcher.png +0 -0
  36. package/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png +0 -0
  37. package/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png +0 -0
  38. package/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
  39. package/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png +0 -0
  40. package/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png +0 -0
  41. package/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
  42. package/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png +0 -0
  43. package/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png +0 -0
  44. package/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
  45. package/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png +0 -0
  46. package/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png +0 -0
  47. package/android/app/src/main/res/values/ic_launcher_background.xml +4 -0
  48. package/android/app/src/main/res/values/strings.xml +7 -0
  49. package/android/app/src/main/res/values/styles.xml +22 -0
  50. package/android/app/src/main/res/xml/file_paths.xml +5 -0
  51. package/android/app/src/main/res/xml/network_security_config.xml +8 -0
  52. package/android/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java +18 -0
  53. package/android/build.gradle +29 -0
  54. package/android/capacitor.settings.gradle +21 -0
  55. package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  56. package/android/gradle/wrapper/gradle-wrapper.properties +7 -0
  57. package/android/gradle.properties +22 -0
  58. package/android/gradlew +248 -0
  59. package/android/gradlew.bat +92 -0
  60. package/android/settings.gradle +5 -0
  61. package/android/variables.gradle +16 -0
  62. package/bytechain.cn-colamd-1.5.1-beta.2.tgz +0 -0
  63. package/capacitor.config.js +29 -0
  64. package/capacitor.config.ts +30 -0
  65. package/demo.md +191 -484
  66. package/dist/main/index.js +77 -46
  67. package/dist/renderer/assets/{arc-tTbbM8LO.js → arc-CPdeInCG.js} +1 -1
  68. package/dist/renderer/assets/{architectureDiagram-3BPJPVTR-CEgYow6c.js → architectureDiagram-3BPJPVTR-BAbnaR9G.js} +4 -3
  69. package/dist/renderer/assets/{blockDiagram-GPEHLZMM-LHyVtPwW.js → blockDiagram-GPEHLZMM-CYSWjnJg.js} +5 -4
  70. package/dist/renderer/assets/{c4Diagram-AAUBKEIU-C1P1eJrf.js → c4Diagram-AAUBKEIU-Rb1tstnr.js} +3 -2
  71. package/dist/renderer/assets/{channel-upve91Tq.js → channel-DpG2A6fE.js} +1 -1
  72. package/dist/renderer/assets/{chunk-2J33WTMH-lag2vhq9.js → chunk-2J33WTMH-DFc0Jxy_.js} +1 -1
  73. package/dist/renderer/assets/{chunk-4BX2VUAB-BXJ8Ggh-.js → chunk-4BX2VUAB-BhRxDTNn.js} +1 -1
  74. package/dist/renderer/assets/{chunk-55IACEB6-CiBpxRa1.js → chunk-55IACEB6-DEgMVBk8.js} +1 -1
  75. package/dist/renderer/assets/{chunk-727SXJPM-ODeKQFXC.js → chunk-727SXJPM-bjBIfiz8.js} +5 -5
  76. package/dist/renderer/assets/{chunk-AQP2D5EJ-BK7xJolB.js → chunk-AQP2D5EJ-DwQMzTzD.js} +3 -3
  77. package/dist/renderer/assets/{chunk-FMBD7UC4-BxpCZPtz.js → chunk-FMBD7UC4-CkphwJzs.js} +1 -1
  78. package/dist/renderer/assets/{chunk-ND2GUHAM-CqqaU9Ue.js → chunk-ND2GUHAM-oU09z4y4.js} +1 -1
  79. package/dist/renderer/assets/{chunk-QZHKN3VN-Biq_K124.js → chunk-QZHKN3VN-rCbVuPBn.js} +1 -1
  80. package/dist/renderer/assets/{classDiagram-v2-Q7XG4LA2-Cq95X99o.js → classDiagram-4FO5ZUOK-DGS2faoM.js} +7 -6
  81. package/dist/renderer/assets/{classDiagram-4FO5ZUOK-Cq95X99o.js → classDiagram-v2-Q7XG4LA2-DGS2faoM.js} +7 -6
  82. package/dist/renderer/assets/{cose-bilkent-S5V4N54A-XasiD0bu.js → cose-bilkent-S5V4N54A-iqY6-EwA.js} +2 -1
  83. package/dist/renderer/assets/{dagre-BM42HDAG-Nq84Gfx4.js → dagre-BM42HDAG-5t3X5sDa.js} +4 -3
  84. package/dist/renderer/assets/{diagram-2AECGRRQ-DwuB1GWt.js → diagram-2AECGRRQ-DzHiYDPh.js} +4 -3
  85. package/dist/renderer/assets/{diagram-5GNKFQAL-C2tgeI1h.js → diagram-5GNKFQAL-BiNv6Keq.js} +5 -4
  86. package/dist/renderer/assets/{diagram-KO2AKTUF-D5KzjNBc.js → diagram-KO2AKTUF-ClzeDG6f.js} +4 -3
  87. package/dist/renderer/assets/{diagram-LMA3HP47-C12xHS1c.js → diagram-LMA3HP47-CGkw7wII.js} +4 -3
  88. package/dist/renderer/assets/{diagram-OG6HWLK6-CnxI9oEa.js → diagram-OG6HWLK6-Dl-Hyk1_.js} +5 -4
  89. package/dist/renderer/assets/{erDiagram-TEJ5UH35-D_uPaKwn.js → erDiagram-TEJ5UH35-BxUN79Qb.js} +5 -4
  90. package/dist/renderer/assets/{flowDiagram-I6XJVG4X-B6q_1-tE.js → flowDiagram-I6XJVG4X-CzFk-KNI.js} +7 -6
  91. package/dist/renderer/assets/{ganttDiagram-6RSMTGT7-CFo7ifF9.js → ganttDiagram-6RSMTGT7-C2xl6Igx.js} +3 -2
  92. package/dist/renderer/assets/{gitGraphDiagram-PVQCEYII-WSexHTnq.js → gitGraphDiagram-PVQCEYII-_fn7XCa7.js} +5 -4
  93. package/dist/renderer/assets/{graph-DyX_9f6d.js → graph-CDoHYrHm.js} +1 -1
  94. package/dist/renderer/assets/index-B4uDgADr.js +530 -0
  95. package/dist/renderer/assets/index-CBcVpA3d.js +30 -0
  96. package/dist/renderer/assets/index-CGj1spkU.js +27 -0
  97. package/dist/renderer/assets/{index-dyHEFYvY.css → index-CeFpoCKV.css} +443 -400
  98. package/dist/renderer/assets/index-D4CPFkph.js +9 -0
  99. package/dist/renderer/assets/{index-DW7LS8C1.js → index-DAlXyxzt.js} +1183 -346
  100. package/dist/renderer/assets/index-DxOzbfR-.js +110 -0
  101. package/dist/renderer/assets/index-Y89U1ptl.js +9 -0
  102. package/dist/renderer/assets/{infoDiagram-5YYISTIA-DaeJdLRq.js → infoDiagram-5YYISTIA-DL6XIxLz.js} +3 -2
  103. package/dist/renderer/assets/{ishikawaDiagram-YF4QCWOH-DDCZc35f.js → ishikawaDiagram-YF4QCWOH-BUZLjRo-.js} +2 -1
  104. package/dist/renderer/assets/{journeyDiagram-JHISSGLW-BEdmpAgl.js → journeyDiagram-JHISSGLW-C4rH_mQM.js} +5 -4
  105. package/dist/renderer/assets/{kanban-definition-UN3LZRKU-BEFtQcFb.js → kanban-definition-UN3LZRKU-DRbrBcWV.js} +3 -2
  106. package/dist/renderer/assets/{layout-CAJgQHdw.js → layout-DZl4n4qu.js} +2 -2
  107. package/dist/renderer/assets/{linear-B2ggJ8Am.js → linear-B0Krxg21.js} +1 -1
  108. package/dist/renderer/assets/{mindmap-definition-RKZ34NQL-DSxVgHB5.js → mindmap-definition-RKZ34NQL-DdmPsWrn.js} +4 -3
  109. package/dist/renderer/assets/{pieDiagram-4H26LBE5-CwYoJBuL.js → pieDiagram-4H26LBE5-BPZLqwG0.js} +5 -4
  110. package/dist/renderer/assets/preload-helper-tXtZnHb0.js +88 -0
  111. package/dist/renderer/assets/{quadrantDiagram-W4KKPZXB-CST9Fvg9.js → quadrantDiagram-W4KKPZXB-Dr-oWRk9.js} +3 -2
  112. package/dist/renderer/assets/{requirementDiagram-4Y6WPE33-DtrH52jS.js → requirementDiagram-4Y6WPE33-B6QZd0lo.js} +4 -3
  113. package/dist/renderer/assets/{sankeyDiagram-5OEKKPKP-ca1tPzJ_.js → sankeyDiagram-5OEKKPKP-Cyl9ojEt.js} +2 -1
  114. package/dist/renderer/assets/{sequenceDiagram-3UESZ5HK-Dfp1EJZ7.js → sequenceDiagram-3UESZ5HK-D48Yr9T6.js} +4 -3
  115. package/dist/renderer/assets/{stateDiagram-AJRCARHV-Bha2QoNB.js → stateDiagram-AJRCARHV-qyb8ETsa.js} +7 -6
  116. package/dist/renderer/assets/{stateDiagram-v2-BHNVJYJU-DWgFUYu1.js → stateDiagram-v2-BHNVJYJU-DmDOyyrJ.js} +5 -4
  117. package/dist/renderer/assets/{timeline-definition-PNZ67QCA-C3h_-OTj.js → timeline-definition-PNZ67QCA-C-KQxTi1.js} +3 -2
  118. package/dist/renderer/assets/{vennDiagram-CIIHVFJN-DFzjSrZi.js → vennDiagram-CIIHVFJN-BdaZlnH-.js} +2 -1
  119. package/dist/renderer/assets/{wardley-L42UT6IY-Cx-VbqoS.js → wardley-L42UT6IY-b-_GPpqL.js} +1 -1
  120. package/dist/renderer/assets/{wardleyDiagram-YWT4CUSO-S2D9XqX6.js → wardleyDiagram-YWT4CUSO-B2hBE-EE.js} +4 -3
  121. package/dist/renderer/assets/web-BKE0SH0E.js +36 -0
  122. package/dist/renderer/assets/web-CBsFp24u.js +564 -0
  123. package/dist/renderer/assets/web-Dc8YgoHP.js +24 -0
  124. package/dist/renderer/assets/web-TfDzToU7.js +58 -0
  125. package/dist/renderer/assets/{xychartDiagram-2RQKCTM6-Cfxigbts.js → xychartDiagram-2RQKCTM6-CSvswDTY.js} +3 -2
  126. package/dist/renderer/index.html +62 -3
  127. package/docs/academic-demo.md +566 -0
  128. package/docs/demo.html +748 -0
  129. package/docs/demo.md +546 -0
  130. package/docs/demo.pdf +0 -0
  131. package/docs/theme-paradigm.md +658 -0
  132. package/electron-builder.yml +7 -0
  133. package/electron.vite.config.js +31 -0
  134. package/electron.vite.config.ts +1 -1
  135. package/ios/App/App/AppDelegate.swift +49 -0
  136. package/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png +0 -0
  137. package/ios/App/App/Assets.xcassets/AppIcon.appiconset/Contents.json +14 -0
  138. package/ios/App/App/Assets.xcassets/Contents.json +6 -0
  139. package/ios/App/App/Assets.xcassets/Splash.imageset/Contents.json +23 -0
  140. package/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-1.png +0 -0
  141. package/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-2.png +0 -0
  142. package/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732.png +0 -0
  143. package/ios/App/App/Base.lproj/LaunchScreen.storyboard +32 -0
  144. package/ios/App/App/Base.lproj/Main.storyboard +19 -0
  145. package/ios/App/App/Info.plist +49 -0
  146. package/ios/App/App.xcodeproj/project.pbxproj +408 -0
  147. package/ios/App/App.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  148. package/ios/App/Podfile +28 -0
  149. package/package.json +23 -3
  150. package/resources/templates/slides/template-forest-ink.html +540 -0
  151. package/scripts/generate-icons.js +102 -0
  152. package/src/main/index.ts +87 -63
  153. package/src/preload/index.d.ts +51 -0
  154. package/src/preload/index.js +70 -0
  155. package/src/renderer/capacitor-api.ts +713 -0
  156. package/src/renderer/editor/editor.ts +87 -4
  157. package/src/renderer/editor/plugins/index.ts +24 -32
  158. package/src/renderer/editor/plugins/math-plugin.ts +1 -1
  159. package/src/renderer/editor/plugins/mermaid-plugin-custom.css +13 -398
  160. package/src/renderer/editor/plugins/mermaid-plugin.ts +62 -71
  161. package/src/renderer/editor/plugins/themes/base/dark.css +23 -0
  162. package/src/renderer/editor/plugins/themes/base/elegant.css +32 -0
  163. package/src/renderer/editor/plugins/themes/base/light.css +20 -0
  164. package/src/renderer/editor/plugins/themes/base/newsprint.css +27 -0
  165. package/src/renderer/editor/plugins/themes/components/mermaid/academic.css +43 -0
  166. package/src/renderer/editor/plugins/themes/components/mermaid/dark.css +20 -0
  167. package/src/renderer/editor/plugins/themes/components/mermaid/elegant.css +24 -0
  168. package/src/renderer/editor/plugins/themes/components/mermaid/light.css +21 -0
  169. package/src/renderer/editor/plugins/themes/components/mermaid/newsprint.css +26 -0
  170. package/src/renderer/editor/plugins/themes/components/mermaid/variables.css +592 -0
  171. package/src/renderer/editor/plugins/themes/foundation.css +143 -0
  172. package/src/renderer/editor/plugins/themes/theme-manager.ts +92 -0
  173. package/src/renderer/env.d.ts +4 -1
  174. package/src/renderer/index.html +59 -1
  175. package/src/renderer/main.ts +432 -57
  176. package/src/renderer/mobile.css +429 -0
  177. package/themes/README.md +3 -0
  178. package/themes/academic-paper.css +1321 -0
  179. package/themes/elegant.css +14 -7
  180. package/themes/forest-ink.css +664 -0
  181. package/themes/pixso-design.css +1261 -0
  182. package/themes/swiss-design.css +596 -0
  183. package/themes/template.css +498 -0
  184. package/tsconfig.main.json +1 -0
  185. package/tsconfig.main.tsbuildinfo +1 -0
  186. package/tsconfig.preload.json +1 -0
  187. package/tsconfig.preload.tsbuildinfo +1 -0
  188. package/tsconfig.renderer.json +1 -0
  189. package/tsconfig.renderer.tsbuildinfo +1 -0
  190. package/tsconfig.tsbuildinfo +1 -0
  191. package/.trae/documents/fix-mermaid-colors-and-sankey.md +0 -50
  192. package/src/renderer/themes/theme-manager.ts +0 -40
  193. /package/src/renderer/{themes → editor/plugins/themes}/base.css +0 -0
@@ -0,0 +1,1261 @@
1
+ /*
2
+ * ColaMD 主题:Pixso Design (设计美学)
3
+ * 配色:纯净白底 + 渐变蓝紫点缀
4
+ * 风格:现代简约、大量留白、精致布局
5
+ * 兼容:ColaMD (body.theme-custom) / Typora
6
+ * 导入:Theme > Import Theme
7
+ */
8
+
9
+ /* ── 1. 根变量 & 主题变量 ── */
10
+ :root {
11
+ --side-bar-bg-color: #f7f8fa;
12
+ --control-text-color: #5a6270;
13
+ --active-file-bg-color: #e8ecf2;
14
+ --active-file-text-color: #1e2330;
15
+ --active-file-border-color: #6366f1;
16
+ --bg-color: #ffffff;
17
+ --text-color: #2d3436;
18
+ --select-text-bg-color: rgba(99, 102, 241, 0.15);
19
+ --select-text-font-color: #1e2330;
20
+ --rawblock-edit-panel-bd: #e5e7eb;
21
+ }
22
+
23
+ body.theme-custom {
24
+ --bg-color: #f8f9fb;
25
+ --text-color: #2d3436;
26
+ --heading-color: #1a1d26;
27
+ --border-color: #e5e7eb;
28
+ --code-bg: #f4f5f7;
29
+ --code-color: #6366f1;
30
+ --code-block-bg: #1e2235;
31
+ --code-block-text: #e4e7ed;
32
+ --code-block-color: #e4e7ed;
33
+ --blockquote-bg: #f9fafb;
34
+ --blockquote-border: linear-gradient(180deg, #6366f1, #8b5cf6);
35
+ --link-color: #6366f1;
36
+ --accent-color: #6366f1;
37
+ --accent-dark: #4f46e5;
38
+ --accent-light: #eef2ff;
39
+ --surface-color: #f9fafb;
40
+ --surface-alt: #f8f9fb;
41
+ --text-muted: #6b7280;
42
+ --text-dim: #9ca3af;
43
+ --selection-bg: rgba(99, 102, 241, 0.12);
44
+ --table-header-bg: #f9fafb;
45
+ --table-stripe: rgba(99, 102, 241, 0.03);
46
+ --scrollbar-thumb: #d1d5db;
47
+ --scrollbar-thumb-hover: #9ca3af;
48
+ --hr-color: #e5e7eb;
49
+ --mermaid-font-family: "Inter", "SF Pro Display", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
50
+ --mermaid-font-size: 13px;
51
+ --mermaid-dark-mode: false;
52
+ --mermaid-background: linear-gradient(135deg, #f8f9fb 0%, #eef2ff 50%, #fdf4ff 100%);
53
+ --mermaid-primary-color: linear-gradient(135deg, #6366f1 0%, #8b5cf6 100%);
54
+ --mermaid-primary-border-color: #4f46e5;
55
+ --mermaid-primary-text-color: #ffffff;
56
+ --mermaid-secondary-color: linear-gradient(135deg, #ec4899 0%, #f43f5e 100%);
57
+ --mermaid-secondary-border-color: #db2777;
58
+ --mermaid-secondary-text-color: #ffffff;
59
+
60
+ --mermaid-tertiary-color: linear-gradient(135deg, #06b6d4 0%, #3b82f6 100%);
61
+ --mermaid-tertiary-border-color: #0891b2;
62
+ --mermaid-tertiary-text-color: #ffffff;
63
+ --mermaid-line-color: linear-gradient(90deg, #6366f1, #8b5cf6, #a78bfa);
64
+ --mermaid-text-color: #1e1b4b;
65
+ --mermaid-main-bkg: linear-gradient(135deg, #e0e7ff 0%, #c7d2fe 100%);
66
+ --mermaid-second-bkg: linear-gradient(135deg, #ede9fe 0%, #ddd6fe 100%);
67
+ --mermaid-main-contrast-color: #4f46e5;
68
+ --mermaid-label-background: linear-gradient(135deg, #f0f4ff 0%, #faf5ff 100%);
69
+ --mermaid-label-text-color: #374151;
70
+ --mermaid-node-border: #4f46e5;
71
+ --mermaid-node-bkg: linear-gradient(145deg, #818cf8 0%, #6366f1 50%, #4f46e5 100%);
72
+ --mermaid-cluster-bkg: rgba(99, 102, 241, 0.08);
73
+ --mermaid-cluster-border: linear-gradient(90deg, #6366f1, #8b5cf6);
74
+ --mermaid-default-link-color: #a78bfa;
75
+ --mermaid-edge-label-background: linear-gradient(135deg, #dbeafe 0%, #fce7f3 100%);
76
+ --mermaid-arrowhead-color: #6366f1;
77
+
78
+ /* 多彩调色板 */
79
+ --mermaid-accent-pink: linear-gradient(135deg, #ec4899 0%, #f472b6 100%);
80
+ --mermaid-accent-cyan: linear-gradient(135deg, #06b6d4 0%, #22d3ee 100%);
81
+ --mermaid-accent-emerald: linear-gradient(135deg, #10b981 0%, #34d399 100%);
82
+ --mermaid-accent-amber: linear-gradient(135deg, #f59e0b 0%, #fbbf24 100%);
83
+ --mermaid-accent-rose: linear-gradient(135deg, #f43f5e 0%, #fb7185 100%);
84
+
85
+ --mermaid-person-border: #4f46e5;
86
+ --mermaid-person-bkg: linear-gradient(135deg, #818cf8 0%, #a78bfa 100%);
87
+ }
88
+
89
+ pre { --select-text-bg-color: #2d2640; --select-text-font-color: #fff; }
90
+
91
+ /* ── 2. 全局 ── */
92
+ html {
93
+ font-size: 16px;
94
+ -webkit-font-smoothing: antialiased;
95
+ -moz-osx-font-smoothing: grayscale;
96
+ }
97
+
98
+ body.theme-custom,
99
+ html,
100
+ body {
101
+ background-color: #f8f9fb;
102
+ color: #2d3436;
103
+ font-family: "Inter", "SF Pro Display", -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans SC", "PingFang SC", "Microsoft YaHei", sans-serif;
104
+ line-height: 1.85;
105
+ }
106
+
107
+ body.theme-custom {
108
+ -webkit-font-smoothing: antialiased;
109
+ letter-spacing: 0.01em;
110
+ }
111
+
112
+ #write {
113
+ max-width: 800px;
114
+ margin: 0 auto;
115
+ padding: 40px 60px 120px;
116
+ }
117
+
118
+ #write > ul:first-child,
119
+ #write > ol:first-child {
120
+ margin-top: 40px;
121
+ }
122
+
123
+ @media only screen and (min-width:1400px) {
124
+ #write { max-width: 900px; }
125
+ }
126
+
127
+ @media only screen and (max-width:768px) {
128
+ #write { padding: 30px 25px 80px; }
129
+ }
130
+
131
+ /* ── 3. 标题 ── */
132
+ h1, h2, h3, h4, h5, h6,
133
+ body.theme-custom h1, body.theme-custom h2, body.theme-custom h3,
134
+ body.theme-custom h4, body.theme-custom h5, body.theme-custom h6 {
135
+ position: relative;
136
+ color: #1a1d26;
137
+ font-weight: 700;
138
+ line-height: 1.35;
139
+ margin-top: 2.2em;
140
+ margin-bottom: 0.75em;
141
+ letter-spacing: -0.02em;
142
+ }
143
+
144
+ h1, body.theme-custom h1 {
145
+ font-size: 2em;
146
+ padding-bottom: 0.35em;
147
+ cursor: text;
148
+ background: linear-gradient(135deg, #1a1d26 0%, #4338ca 100%);
149
+ -webkit-background-clip: text;
150
+ background-clip: text;
151
+ -webkit-text-fill-color: transparent;
152
+ color: #1a1d26;
153
+ }
154
+
155
+ h2, body.theme-custom h2 {
156
+ font-size: 1.55em;
157
+ padding-bottom: 0.25em;
158
+ cursor: text;
159
+ border-bottom: none;
160
+ position: relative;
161
+ display: block;
162
+ }
163
+
164
+ h2::after,
165
+ body.theme-custom h2::after {
166
+ content: '';
167
+ position: absolute;
168
+ left: 0;
169
+ bottom: 0.15em;
170
+ width: 60%;
171
+ height: 3px;
172
+ background: linear-gradient(90deg, #6366f1, #8b5cf6);
173
+ border-radius: 2px;
174
+ }
175
+
176
+ h3, body.theme-custom h3 {
177
+ font-size: 1.28em;
178
+ cursor: text;
179
+ color: #283149;
180
+ }
181
+
182
+ h4, body.theme-custom h4 {
183
+ font-size: 1.12em;
184
+ cursor: text;
185
+ font-weight: 600;
186
+ }
187
+
188
+ h5, body.theme-custom h5 {
189
+ font-size: 1em;
190
+ cursor: text;
191
+ font-weight: 600;
192
+ color: #374151;
193
+ }
194
+
195
+ h6, body.theme-custom h6 {
196
+ font-size: 0.92em;
197
+ color: #6b7280;
198
+ cursor: text;
199
+ font-weight: 500;
200
+ }
201
+
202
+ h1:hover a.anchor, h2:hover a.anchor, h3:hover a.anchor,
203
+ h4:hover a.anchor, h5:hover a.anchor, h6:hover a.anchor {
204
+ text-decoration: none;
205
+ }
206
+
207
+ /* ── 4. 内联元素 ── */
208
+ p {
209
+ margin: 1em 0;
210
+ line-height: 1.85;
211
+ text-align: justify;
212
+ }
213
+
214
+ strong, body.theme-custom strong {
215
+ color: #4338ca;
216
+ font-weight: 700;
217
+ }
218
+
219
+ em, body.theme-custom em {
220
+ font-style: italic;
221
+ color: #4b5563;
222
+ }
223
+
224
+ em strong, strong em,
225
+ body.theme-custom em strong, body.theme-custom strong em {
226
+ color: #4338ca;
227
+ }
228
+
229
+ a, body.theme-custom a {
230
+ color: #6366f1;
231
+ text-decoration: none;
232
+ transition: all 0.2s ease;
233
+ border-bottom: 1px solid transparent;
234
+ border-bottom-color: rgba(99, 102, 241, 0.35);
235
+ }
236
+
237
+ a:hover, body.theme-custom a:hover {
238
+ color: #4f46e5;
239
+ border-bottom-color: #4f46e5;
240
+ text-decoration: none;
241
+ }
242
+
243
+ u, body.theme-custom u {
244
+ text-decoration: none;
245
+ border-bottom: 2px solid #6366f1;
246
+ padding-bottom: 1px;
247
+ opacity: 0.85;
248
+ }
249
+
250
+ mark, body.theme-custom mark {
251
+ background: linear-gradient(120deg, rgba(99, 102, 241, 0.14) 0%, rgba(139, 92, 246, 0.14) 100%);
252
+ color: #2d3436;
253
+ padding: 2px 6px;
254
+ border-radius: 3px;
255
+ }
256
+
257
+ del, s {
258
+ color: #9ca3af;
259
+ }
260
+
261
+ /* ── 5. 引用�?── */
262
+ blockquote, body.theme-custom blockquote {
263
+ margin: 1.8em 0;
264
+ padding: 20px 24px 20px 28px;
265
+ border-left: none;
266
+ position: relative;
267
+ background: linear-gradient(135deg, #f8f9ff 0%, #fdf4ff 100%);
268
+ color: #4b5563;
269
+ border-radius: 10px;
270
+ box-shadow: 0 2px 12px rgba(99, 102, 241, 0.06);
271
+ }
272
+
273
+ blockquote::before,
274
+ body.theme-custom blockquote::before {
275
+ content: '';
276
+ position: absolute;
277
+ left: 0;
278
+ top: 0;
279
+ bottom: 0;
280
+ width: 4px;
281
+ background: linear-gradient(180deg, #6366f1, #8b5cf6);
282
+ border-radius: 10px 0 0 10px;
283
+ }
284
+
285
+ blockquote p, body.theme-custom blockquote p {
286
+ margin: 0.6em 0;
287
+ line-height: 1.75;
288
+ }
289
+
290
+ /* ── 6. 分割�?── */
291
+ hr, body.theme-custom hr {
292
+ border: none;
293
+ height: 1px;
294
+ margin: 3em 0;
295
+ background: linear-gradient(90deg, transparent, #e5e7eb 50%, transparent);
296
+ }
297
+
298
+ /* ── 7. 列表 ── */
299
+ ul, ol, body.theme-custom ul, body.theme-custom ol {
300
+ padding-left: 1.9em;
301
+ margin: 1em 0;
302
+ }
303
+
304
+ li, body.theme-custom li {
305
+ margin: 0.45em 0;
306
+ line-height: 1.78;
307
+ }
308
+
309
+ ul li {
310
+ list-style-type: disc;
311
+ list-style-position: outside;
312
+ }
313
+
314
+ ol li {
315
+ list-style-type: decimal;
316
+ list-style-position: outside;
317
+ }
318
+
319
+ .md-task-list-item > input {
320
+ margin-left: -1.3em;
321
+ margin-top: 0.32em;
322
+ }
323
+
324
+ /* ── 8. 内联代码 ── */
325
+ code, tt,
326
+ body.theme-custom code, body.theme-custom tt {
327
+ font-family: "JetBrains Mono", "Fira Code", "SF Mono", Menlo, Consolas, monospace;
328
+ font-size: 0.88em;
329
+ padding: 3px 7px;
330
+ margin: 0 2px;
331
+ background: #f4f5f7;
332
+ border-radius: 5px;
333
+ color: #6366f1;
334
+ border: 1px solid rgba(99, 102, 241, 0.08);
335
+ }
336
+
337
+ /* ── 9. 代码�?── */
338
+ pre.md-fences {
339
+ font-family: "JetBrains Mono", "Fira Code", "SF Mono", Menlo, Consolas, monospace;
340
+ font-size: 0.88em;
341
+ line-height: 1.68;
342
+ background: linear-gradient(145deg, #1e2235 0%, #2a2040 100%);
343
+ color: #e4e7ed;
344
+ padding: 22px 26px;
345
+ border-radius: 10px;
346
+ margin: 1.8em 0;
347
+ overflow-x: auto;
348
+ box-shadow: 0 8px 30px rgba(0, 0, 0, 0.18), inset 0 1px 0 rgba(255,255,255,0.05);
349
+ border: 1px solid rgba(99, 102, 241, 0.15);
350
+ }
351
+
352
+ pre.md-fences code {
353
+ background: transparent;
354
+ color: inherit;
355
+ padding: 0;
356
+ margin: 0;
357
+ border-radius: 0;
358
+ border: none;
359
+ }
360
+
361
+ body.theme-custom #editor .ProseMirror pre {
362
+ font-family: "JetBrains Mono", "Fira Code", "SF Mono", Menlo, Consolas, monospace;
363
+ font-size: 0.88em;
364
+ line-height: 1.68;
365
+ background: linear-gradient(145deg, #1e2235 0%, #2a2040 100%) !important;
366
+ color: #e4e7ed !important;
367
+ padding: 22px 26px;
368
+ border-radius: 10px;
369
+ margin: 1.8em 0;
370
+ overflow-x: auto;
371
+ box-shadow: 0 8px 30px rgba(0, 0, 0, 0.18), inset 0 1px 0 rgba(255,255,255,0.05);
372
+ border: 1px solid rgba(99, 102, 241, 0.15);
373
+ }
374
+
375
+ body.theme-custom #editor .ProseMirror pre code {
376
+ background: transparent !important;
377
+ color: inherit !important;
378
+ padding: 0;
379
+ margin: 0;
380
+ border-radius: 0;
381
+ border: none;
382
+ }
383
+
384
+ /* ── 10. 代码语法高亮 ── */
385
+ .cm-s-inner {
386
+ font-family: "JetBrains Mono", "Fira Code", "SF Mono", monospace;
387
+ font-size: 0.9em;
388
+ line-height: 1.68;
389
+ }
390
+
391
+ /* 注释 / 引用 / 分隔�?*/
392
+ body.theme-custom .token.comment, body.theme-custom .token.prolog,
393
+ body.theme-custom .token.doctype, body.theme-custom .token.cdata,
394
+ .cm-s-inner .cm-comment, .cm-s-inner .cm-quote, .cm-s-inner .cm-hr {
395
+ color: #7c83a6;
396
+ font-style: italic;
397
+ }
398
+
399
+ /* 标点 / 元数�?*/
400
+ body.theme-custom .token.punctuation, .cm-s-inner .cm-meta {
401
+ color: #9ca3be;
402
+ }
403
+
404
+ /* 关键�?(粗体) */
405
+ body.theme-custom .token.keyword, body.theme-custom .token.important,
406
+ .cm-s-inner .cm-keyword {
407
+ color: #a78bfa;
408
+ font-weight: 700;
409
+ }
410
+
411
+ /* 布尔 / 内建 / 标签 / 选择�?/ 常量 / 删除 / 原子 / 错误 */
412
+ body.theme-custom .token.boolean, body.theme-custom .token.builtin,
413
+ body.theme-custom .token.tag, body.theme-custom .token.selector,
414
+ body.theme-custom .token.constant, body.theme-custom .token.deleted,
415
+ .cm-s-inner .cm-atom, .cm-s-inner .cm-builtin,
416
+ .cm-s-inner .cm-tag, .cm-s-inner .cm-error {
417
+ color: #f472b6;
418
+ }
419
+
420
+ /* 字符�?/ 属性�?/ 符号 / 插入 */
421
+ body.theme-custom .token.string, body.theme-custom .token.attr-value,
422
+ body.theme-custom .token.symbol, body.theme-custom .token.inserted,
423
+ .cm-s-inner .cm-string {
424
+ color: #34d399;
425
+ }
426
+
427
+ /* 数字 */
428
+ body.theme-custom .token.number, .cm-s-inner .cm-number {
429
+ color: #fbbf24;
430
+ }
431
+
432
+ /* 函数 / 类名 / 变量 / 属性名 / 实体 / 定义 */
433
+ body.theme-custom .token.function, body.theme-custom .token.class-name,
434
+ body.theme-custom .token.variable, body.theme-custom .token.attr-name,
435
+ body.theme-custom .token.property, body.theme-custom .token.entity,
436
+ .cm-s-inner .cm-def, .cm-s-inner .cm-variable-2,
437
+ .cm-s-inner .cm-attribute, .cm-s-inner .cm-property,
438
+ .cm-s-inner .cm-header {
439
+ color: #60a5fa;
440
+ }
441
+
442
+ .cm-s-inner .cm-header {
443
+ font-weight: 700;
444
+ }
445
+ body.theme-custom .token.url, .cm-s-inner .cm-link {
446
+ color: #60a5fa;
447
+ text-decoration: underline;
448
+ }
449
+
450
+ /* 运算�?*/
451
+ body.theme-custom .token.operator, .cm-s-inner .cm-operator {
452
+ color: #94a3b8;
453
+ }
454
+
455
+ /* 正则 / 代码文本�?*/
456
+ body.theme-custom .token.regex { color: #fb923c; }
457
+ .cm-s-inner .cm-variable { color: #e4e7ed; }
458
+
459
+ /* ── 11. 表格 ── */
460
+ table, body.theme-custom table {
461
+ width: 100%;
462
+ border-collapse: collapse;
463
+ margin: 1.8em 0;
464
+ font-size: 0.93em;
465
+ border-radius: 10px;
466
+ overflow: hidden;
467
+ box-shadow: 0 4px 20px rgba(79, 70, 229, 0.08), 0 1px 3px rgba(0, 0, 0, 0.04);
468
+ border: 2px solid #c7d2fe;
469
+ }
470
+
471
+ table th, body.theme-custom table th {
472
+ background: linear-gradient(180deg, #4f46e5 0%, #6366f1 50%, #7c3aed 100%);
473
+ font-weight: 700;
474
+ color: #ffffff;
475
+ padding: 14px 20px;
476
+ border-right: 1px solid rgba(255, 255, 255, 0.15);
477
+ border-bottom: 3px solid #3730a3;
478
+ text-align: left;
479
+ font-size: 0.95em;
480
+ letter-spacing: 0.02em;
481
+ text-transform: uppercase;
482
+ text-shadow: 0 1px 2px rgba(0, 0, 0, 0.15);
483
+ position: relative;
484
+ }
485
+
486
+ table th:last-child,
487
+ body.theme-custom table th:last-child {
488
+ border-right: none;
489
+ }
490
+
491
+ table th::before,
492
+ body.theme-custom table th::before {
493
+ content: '';
494
+ position: absolute;
495
+ left: 0;
496
+ top: 0;
497
+ bottom: 0;
498
+ width: 3px;
499
+ background: linear-gradient(180deg, #fbbf24, #f59e0b);
500
+ opacity: 0.9;
501
+ }
502
+
503
+ table td, body.theme-custom table td {
504
+ padding: 13px 20px;
505
+ border-right: 1px solid #e5e7eb;
506
+ border-bottom: 1px solid #e5e7eb;
507
+ transition: all 0.25s ease;
508
+ color: #374151;
509
+ }
510
+
511
+ table td:last-child,
512
+ body.theme-custom table td:last-child {
513
+ border-right: none;
514
+ }
515
+
516
+ table tr:last-child td,
517
+ body.theme-custom table tr:last-child td {
518
+ border-bottom: none;
519
+ }
520
+
521
+ /* 斑马纹效果 */
522
+ table tbody tr:nth-child(even) td,
523
+ body.theme-custom table tbody tr:nth-child(even) td {
524
+ background-color: rgba(99, 102, 241, 0.03);
525
+ }
526
+
527
+ table tbody tr:nth-child(odd) td,
528
+ body.theme-custom table tbody tr:nth-child(odd) td {
529
+ background-color: #ffffff;
530
+ }
531
+
532
+ /* 悬停效果 */
533
+ table tbody tr:hover td,
534
+ body.theme-custom table tbody tr:hover td {
535
+ background: linear-gradient(90deg, rgba(99, 102, 241, 0.06), rgba(139, 92, 246, 0.04));
536
+ color: #1e1b4b;
537
+ transform: scale(1.005);
538
+ box-shadow: inset 0 0 0 1px rgba(99, 102, 241, 0.12);
539
+ }
540
+
541
+ /* ── 12. 图片 ── */
542
+ img, body.theme-custom img {
543
+ max-width: 100%;
544
+ border-radius: 10px;
545
+ transition: transform 0.3s ease, box-shadow 0.3s ease;
546
+ }
547
+
548
+ img:hover, body.theme-custom img:hover {
549
+ transform: scale(1.01);
550
+ box-shadow: 0 8px 30px rgba(99, 102, 241, 0.12);
551
+ }
552
+
553
+ p > img:only-child, body.theme-custom p > img:only-child {
554
+ display: block;
555
+ margin: 2em auto;
556
+ box-shadow: 0 4px 24px rgba(0, 0, 0, 0.08);
557
+ }
558
+
559
+ body.theme-custom figure {
560
+ margin: 2em 0;
561
+ text-align: center;
562
+ }
563
+
564
+ body.theme-custom figcaption {
565
+ font-size: 0.89em;
566
+ color: var(--text-muted);
567
+ margin-top: 0.8em;
568
+ font-style: italic;
569
+ }
570
+
571
+ /* ── 13. 数学公式 ── */
572
+
573
+ /* ColaMD */
574
+ body.theme-custom .math-block {
575
+ background: linear-gradient(135deg, #f8f9ff 0%, #fef4ff 100%);
576
+ padding: 20px 0;
577
+ margin: 1.8em 0;
578
+ border-radius: 10px;
579
+ border: 1px solid rgba(99, 102, 241, 0.1);
580
+ text-align: center;
581
+ overflow-x: auto;
582
+ box-shadow: 0 2px 12px rgba(99, 102, 241, 0.05);
583
+ }
584
+
585
+ body.theme-custom .math-block .katex,
586
+ body.theme-custom .math-block .katex-display,
587
+ body.theme-custom .math-block .MathJax,
588
+ body.theme-custom .math-block .katex *,
589
+ body.theme-custom .math-block .MathJax *,
590
+ body.theme-custom .math-block .katex .mord,
591
+ body.theme-custom .math-block .katex .mbin,
592
+ body.theme-custom .math-block .katex .mrel,
593
+ body.theme-custom .math-block .katex .mopen,
594
+ body.theme-custom .math-block .katex .mclose,
595
+ body.theme-custom .math-block .katex .mpunct,
596
+ body.theme-custom .math-block .katex .minner {
597
+ color: #2d3436 !important;
598
+ }
599
+
600
+ /* Typora */
601
+ .md-math-block, .MathJax_Display {
602
+ margin: 1.8em 0 !important;
603
+ text-align: center;
604
+ }
605
+
606
+ .md-inline-math, .md-inline-math script, .md-math-inline, .MathJax {
607
+ color: #2d3436;
608
+ }
609
+
610
+ .MathJax svg, .MathJax_Display svg {
611
+ fill: currentColor;
612
+ stroke: currentColor;
613
+ }
614
+
615
+ /* ── 14. Mermaid ── */
616
+
617
+ /* 容器 */
618
+ .md-diagram-panel { margin: 1.8em 0; }
619
+
620
+ .md-diagram-panel.md-mermaid,
621
+ body.theme-custom .mermaid-block {
622
+ background: linear-gradient(135deg, #f8f9fb 0%, #eef2ff 30%, #fdf4ff 60%, #fce7f3 100%);
623
+ border: none;
624
+ border-radius: 16px;
625
+ padding: 28px;
626
+ margin: 1.8em 0;
627
+ box-shadow:
628
+ 0 8px 32px rgba(99, 102, 241, 0.12),
629
+ 0 2px 8px rgba(139, 92, 246, 0.08),
630
+ inset 0 1px 0 rgba(255, 255, 255, 0.5);
631
+ }
632
+
633
+ body.theme-custom .mermaid-preview {
634
+ background: transparent;
635
+ border: none;
636
+ padding: 0;
637
+ margin: 0;
638
+ }
639
+
640
+ .md-diagram-panel.md-mermaid svg,
641
+ body.theme-custom .mermaid-preview svg {
642
+ max-width: 100%;
643
+ height: auto;
644
+ }
645
+
646
+ /* 全局字体 */
647
+ .md-diagram-panel.md-mermaid svg text,
648
+ body.theme-custom .mermaid-preview svg text {
649
+ fill: #1e1b4b;
650
+ font-family: "Inter", "SF Pro Display", -apple-system, BlinkMacSystemFont, sans-serif;
651
+ }
652
+
653
+ body.theme-custom .mermaid-preview svg .nodeLabel span,
654
+ body.theme-custom .mermaid-preview svg .edgeLabel span {
655
+ font-family: "Inter", "SF Pro Display", -apple-system, BlinkMacSystemFont, sans-serif;
656
+ }
657
+
658
+ body.theme-custom .mermaid-preview svg foreignObject span {
659
+ color: #1e1b4b !important;
660
+ font-family: "Inter", "SF Pro Display", -apple-system, BlinkMacSystemFont, sans-serif !important;
661
+ font-size: 14px !important;
662
+ }
663
+
664
+ .md-diagram-panel.md-mermaid .node .label {
665
+ color: #1e1b4b !important;
666
+ font-family: "Inter", -apple-system, BlinkMacSystemFont, sans-serif !important;
667
+ }
668
+
669
+ /* 通用节点 & 连线 (ColaMD) */
670
+ body.theme-custom .mermaid-preview svg .node rect,
671
+ body.theme-custom .mermaid-preview svg .node circle,
672
+ body.theme-custom .mermaid-preview svg .node ellipse,
673
+ body.theme-custom .mermaid-preview svg .node polygon,
674
+ body.theme-custom .mermaid-preview svg .node path {
675
+ stroke: #4f46e5;
676
+ stroke-width: 2px;
677
+ fill: url(#nodeGradient) !important;
678
+ filter: drop-shadow(0 2px 4px rgba(99, 102, 241, 0.25));
679
+ }
680
+
681
+ body.theme-custom .mermaid-preview svg defs {
682
+ display: block;
683
+ }
684
+
685
+ body.theme-custom .mermaid-preview svg defs::after {
686
+ content: '';
687
+ display: none;
688
+ }
689
+
690
+ body.theme-custom .mermaid-preview svg .edgePath .path {
691
+ stroke: url(#lineGradient);
692
+ stroke-width: 2.5px;
693
+ fill: none;
694
+ }
695
+
696
+ body.theme-custom .mermaid-preview svg .cluster rect,
697
+ body.theme-custom .mermaid-preview svg .cluster path {
698
+ stroke: #8b5cf6;
699
+ stroke-width: 2px;
700
+ fill: rgba(139, 92, 246, 0.06);
701
+ stroke-dasharray: 8, 4;
702
+ }
703
+
704
+ body.theme-custom .mermaid-preview svg defs marker path {
705
+ fill: #6366f1;
706
+ stroke: #6366f1;
707
+ }
708
+
709
+ /* 通用节点 & 连线 (Typora) */
710
+ .md-diagram-panel.md-mermaid .node rect,
711
+ .md-diagram-panel.md-mermaid .node circle,
712
+ .md-diagram-panel.md-mermaid .node ellipse,
713
+ .md-diagram-panel.md-mermaid .node polygon {
714
+ fill: #818cf8 !important;
715
+ stroke: #4f46e5 !important;
716
+ stroke-width: 2px !important;
717
+ }
718
+
719
+ .md-diagram-panel.md-mermaid .edgePath .path {
720
+ stroke: #6366f1 !important;
721
+ stroke-width: 2.5px !important;
722
+ }
723
+
724
+ .md-diagram-panel.md-mermaid .edgeLabel {
725
+ background: linear-gradient(135deg, #fef3c7 0%, #fce7f3 100%) !important;
726
+ color: #4c1d95 !important;
727
+ }
728
+
729
+ .md-diagram-panel.md-mermaid .cluster rect {
730
+ fill: rgba(139, 92, 246, 0.1) !important;
731
+ stroke: #8b5cf6 !important;
732
+ stroke-width: 2px !important;
733
+ stroke-dasharray: 8, 4;
734
+ }
735
+
736
+ /* 硬编码色值覆�?*/
737
+ body.theme-custom .mermaid-preview svg rect[stroke="#444444"],
738
+ body.theme-custom .mermaid-preview svg path[stroke="#444444"],
739
+ body.theme-custom .mermaid-preview svg line[stroke="#444444"],
740
+ body.theme-custom .mermaid-preview svg rect[stroke="#000000"],
741
+ body.theme-custom .mermaid-preview svg path[stroke="#000000"],
742
+ body.theme-custom .mermaid-preview svg line[stroke="#000000"] {
743
+ stroke: #4f46e5 !important;
744
+ }
745
+
746
+ /* 标签 & 文本 (ColaMD) */
747
+ body.theme-custom .mermaid-preview svg .label text,
748
+ body.theme-custom .mermaid-preview svg .nodeLabel text {
749
+ fill: #1e1b4b !important;
750
+ }
751
+
752
+ body.theme-custom .mermaid-preview svg .nodeLabel span {
753
+ color: #1e1b4b !important;
754
+ }
755
+
756
+ body.theme-custom .mermaid-preview svg .edgeLabel text {
757
+ fill: #4c1d95 !important;
758
+ font-weight: 600;
759
+ }
760
+
761
+ body.theme-custom .mermaid-preview svg .edgeLabel rect {
762
+ fill: linear-gradient(135deg, #fef3c7 0%, #fce7f3 100%) !important;
763
+ stroke: #f59e0b !important;
764
+ stroke-width: 1.5px;
765
+ }
766
+
767
+ body.theme-custom .mermaid-preview svg .edgeLabel span {
768
+ color: #4c1d95 !important;
769
+ }
770
+
771
+ /* 文本偏移 */
772
+ body.theme-custom .mermaid-preview svg .label text,
773
+ body.theme-custom .mermaid-preview svg .nodeLabel text {
774
+ transform: translateY(-3px) !important;
775
+ }
776
+
777
+ body.theme-custom .mermaid-preview svg .titleText {
778
+ transform: translateY(-1px) !important;
779
+ }
780
+
781
+ body.theme-custom .mermaid-preview svg .xychart .axis text {
782
+ transform: translateY(0) !important;
783
+ }
784
+
785
+ body.theme-custom .mermaid-preview svg .nodeLabel,
786
+ body.theme-custom .mermaid-preview svg .edgeLabel {
787
+ display: inline-block !important;
788
+ position: relative !important;
789
+ top: -3px !important;
790
+ }
791
+
792
+ /* 状态图 */
793
+ body.theme-custom .mermaid-preview svg .statediagram-state rect,
794
+ body.theme-custom .mermaid-preview svg .statediagram-state circle {
795
+ stroke: #ec4899;
796
+ stroke-width: 2.5px;
797
+ fill: linear-gradient(135deg, #ec4899 0%, #f43f5e 100%) !important;
798
+ filter: drop-shadow(0 3px 6px rgba(236, 72, 153, 0.3));
799
+ }
800
+
801
+ body.theme-custom .mermaid-preview svg .statediagram-state .nodeLabel text,
802
+ body.theme-custom .mermaid-preview svg .statediagram-state .nodeLabel span,
803
+ body.theme-custom .mermaid-preview svg .statediagram-cluster .outer-title text,
804
+ body.theme-custom .mermaid-preview svg .edgeLabel .label text {
805
+ fill: #ffffff !important;
806
+ color: #ffffff !important;
807
+ font-weight: 600;
808
+ }
809
+
810
+ body.theme-custom .mermaid-preview svg .statediagram-cluster rect {
811
+ stroke: #6366f1;
812
+ }
813
+
814
+ body.theme-custom .mermaid-preview svg .transition {
815
+ stroke: #c7d2fe;
816
+ }
817
+
818
+ /* 饼图 */
819
+ body.theme-custom .mermaid-preview svg .pieCircle,
820
+ body.theme-custom .mermaid-preview svg .slice {
821
+ stroke: #ffffff;
822
+ stroke-width: 2px;
823
+ filter: drop-shadow(0 2px 4px rgba(0, 0, 0, 0.15));
824
+ }
825
+
826
+ body.theme-custom .mermaid-preview svg .pieTitleText,
827
+ body.theme-custom .mermaid-preview svg .legend text {
828
+ fill: #1e1b4b !important;
829
+ font-weight: 600;
830
+ }
831
+
832
+ /* 四象限图 */
833
+ body.theme-custom .mermaid-preview svg .quadrant rect {
834
+ stroke: #6366f1;
835
+ stroke-width: 2px;
836
+ }
837
+
838
+ body.theme-custom .mermaid-preview svg .quadrant text,
839
+ body.theme-custom .mermaid-preview svg .quadrant .titleText {
840
+ fill: #1e1b4b !important;
841
+ font-weight: 700;
842
+ }
843
+
844
+ body.theme-custom .mermaid-preview svg .quadrant .axis text {
845
+ fill: #374151 !important;
846
+ font-weight: 500;
847
+ }
848
+
849
+ body.theme-custom .mermaid-preview svg .quadrant .axis line,
850
+ body.theme-custom .mermaid-preview svg .quadrant .axis path {
851
+ stroke: #8b5cf6;
852
+ stroke-width: 2px;
853
+ }
854
+
855
+ body.theme-custom .mermaid-preview svg .quadrant .point {
856
+ fill: #ec4899;
857
+ stroke: #ffffff;
858
+ stroke-width: 2px;
859
+ }
860
+
861
+ /* XY Chart */
862
+ body.theme-custom .mermaid-preview svg .xychart .axis text {
863
+ fill: #4b5563 !important;
864
+ font-weight: 500;
865
+ }
866
+
867
+ body.theme-custom .mermaid-preview svg .xychart .axis line,
868
+ body.theme-custom .mermaid-preview svg .xychart .axis path {
869
+ stroke: #8b5cf6;
870
+ stroke-width: 2px;
871
+ }
872
+
873
+ body.theme-custom .mermaid-preview svg .xychart .plot rect {
874
+ stroke: #4f46e5;
875
+ stroke-width: 2px;
876
+ fill: linear-gradient(180deg, #818cf8 0%, #6366f1 50%, #4f46e5 100%) !important;
877
+ filter: drop-shadow(0 2px 4px rgba(99, 102, 241, 0.25));
878
+ }
879
+
880
+ body.theme-custom .mermaid-preview svg .xychart .plot line {
881
+ stroke: #a78bfa;
882
+ stroke-width: 2.5px;
883
+ }
884
+
885
+ body.theme-custom .mermaid-preview svg .xychart .titleText {
886
+ fill: #1e1b4b !important;
887
+ font-weight: 700;
888
+ }
889
+
890
+ /* Sankey */
891
+ body.theme-custom .mermaid-preview svg .sankey .link {
892
+ stroke: linear-gradient(90deg, #6366f1, #8b5cf6, #ec4899);
893
+ stroke-opacity: 0.5;
894
+ fill: none;
895
+ }
896
+
897
+ body.theme-custom .mermaid-preview svg .sankey text {
898
+ fill: #1e1b4b !important;
899
+ font-weight: 600;
900
+ }
901
+
902
+ /* 时序图 (ColaMD) */
903
+ body.theme-custom .mermaid-preview svg .actor rect,
904
+ body.theme-custom .mermaid-preview svg .actor path {
905
+ stroke: #06b6d4;
906
+ stroke-width: 2.5px;
907
+ fill: linear-gradient(180deg, #22d3ee 0%, #06b6d4 100%) !important;
908
+ }
909
+
910
+ body.theme-custom .mermaid-preview svg text.actor {
911
+ fill: #ffffff !important;
912
+ font-weight: 700;
913
+ }
914
+
915
+ body.theme-custom .mermaid-preview svg .messageLine0,
916
+ body.theme-custom .mermaid-preview svg .messageLine1 {
917
+ stroke: #8b5cf6 !important;
918
+ stroke-width: 2.5px;
919
+ }
920
+
921
+ body.theme-custom .mermaid-preview svg .messageText,
922
+ body.theme-custom .mermaid-preview svg .labelText,
923
+ body.theme-custom .mermaid-preview svg .loopText tspan,
924
+ body.theme-custom .mermaid-preview svg .altText tspan,
925
+ body.theme-custom .mermaid-preview svg .optText tspan {
926
+ fill: #1e1b4b !important;
927
+ font-weight: 600;
928
+ }
929
+
930
+ body.theme-custom .mermaid-preview svg .loopText,
931
+ body.theme-custom .mermaid-preview svg .altText,
932
+ body.theme-custom .mermaid-preview svg .optText {
933
+ fill: #9ca3af !important;
934
+ }
935
+
936
+ body.theme-custom .mermaid-preview svg .loopLine,
937
+ body.theme-custom .mermaid-preview svg .altLine,
938
+ body.theme-custom .mermaid-preview svg .optLine {
939
+ stroke: #6366f1 !important;
940
+ }
941
+
942
+ body.theme-custom .mermaid-preview svg .labelBox {
943
+ stroke: #f59e0b;
944
+ stroke-width: 2px;
945
+ fill: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%) !important;
946
+ }
947
+
948
+ /* 时序图 (Typora) */
949
+ .md-diagram-panel.md-mermaid .actor {
950
+ fill: #22d3ee !important;
951
+ stroke: #06b6d4 !important;
952
+ }
953
+
954
+ .md-diagram-panel.md-mermaid text.actor {
955
+ fill: #ffffff !important;
956
+ }
957
+
958
+ .md-diagram-panel.md-mermaid .messageLine0,
959
+ .md-diagram-panel.md-mermaid .messageLine1 {
960
+ stroke: #6366f1 !important;
961
+ }
962
+
963
+ .md-diagram-panel.md-mermaid .messageText {
964
+ fill: #6b7280 !important;
965
+ }
966
+
967
+ /* 类图 */
968
+ body.theme-custom .mermaid-preview svg .classBox rect,
969
+ body.theme-custom .mermaid-preview svg .classBox path {
970
+ stroke: #8b5cf6;
971
+ stroke-width: 2px;
972
+ fill: linear-gradient(180deg, #ddd6fe 0%, #c4b5fd 100%) !important;
973
+ }
974
+
975
+ body.theme-custom .mermaid-preview svg .classTitle text,
976
+ body.theme-custom .mermaid-preview svg .classTitle span {
977
+ fill: #4c1d95 !important;
978
+ color: #4c1d95 !important;
979
+ font-weight: 700;
980
+ }
981
+
982
+ body.theme-custom .mermaid-preview svg .classText text,
983
+ body.theme-custom .mermaid-preview svg .classText span {
984
+ fill: #5b21b6 !important;
985
+ color: #5b21b6 !important;
986
+ font-weight: 500;
987
+ }
988
+
989
+ body.theme-custom .mermaid-preview svg .divider {
990
+ stroke: #e5e7eb;
991
+ }
992
+
993
+ body.theme-custom .mermaid-preview svg .relation {
994
+ stroke: #6366f1;
995
+ }
996
+
997
+ /* 甘特图 (ColaMD) */
998
+ body.theme-custom .mermaid-preview svg .task {
999
+ stroke: #10b981;
1000
+ stroke-width: 2px;
1001
+ fill: linear-gradient(90deg, #34d399 0%, #10b981 100%) !important;
1002
+ }
1003
+
1004
+ body.theme-custom .mermaid-preview svg .taskText,
1005
+ body.theme-custom .mermaid-preview svg .taskTextOutsideRight,
1006
+ body.theme-custom .mermaid-preview svg .taskTextOutsideLeft,
1007
+ body.theme-custom .mermaid-preview svg .sectionText,
1008
+ body.theme-custom .mermaid-preview svg .sectionTitle {
1009
+ fill: #ffffff !important;
1010
+ font-weight: 700;
1011
+ }
1012
+
1013
+ body.theme-custom .mermaid-preview svg .section rect {
1014
+ stroke: #f59e0b;
1015
+ stroke-width: 2px;
1016
+ }
1017
+
1018
+ body.theme-custom .mermaid-preview svg .today {
1019
+ stroke: #6366f1 !important;
1020
+ }
1021
+
1022
+ body.theme-custom .mermaid-preview svg .grid .tick line {
1023
+ stroke: #e5e7eb;
1024
+ }
1025
+
1026
+ body.theme-custom .mermaid-preview svg .grid .domain {
1027
+ stroke: #6366f1;
1028
+ }
1029
+
1030
+ body.theme-custom .mermaid-preview svg .tick text {
1031
+ fill: #9ca3af;
1032
+ }
1033
+
1034
+ /* 甘特图 (Typora) */
1035
+ .md-diagram-panel.md-mermaid .section0,
1036
+ .md-diagram-panel.md-mermaid .section1,
1037
+ .md-diagram-panel.md-mermaid .section2,
1038
+ .md-diagram-panel.md-mermaid .section3 {
1039
+ fill: linear-gradient(90deg, #818cf8 0%, #6366f1 50%, #a78bfa 100%) !important;
1040
+ stroke: #4f46e5 !important;
1041
+ }
1042
+
1043
+ .md-diagram-panel.md-mermaid .grid .tick line {
1044
+ stroke: #e5e7eb !important;
1045
+ }
1046
+
1047
+ .md-diagram-panel.md-mermaid .grid .domain {
1048
+ stroke: #6366f1 !important;
1049
+ }
1050
+
1051
+ .md-diagram-panel.md-mermaid .tick text {
1052
+ fill: #9ca3af !important;
1053
+ }
1054
+
1055
+ /* 流程�?/ ER �?*/
1056
+ .md-diagram-panel.md-mermaid .nodeDefault,
1057
+ .md-diagram-panel.md-mermaid .node clicked,
1058
+ .md-diagram-panel.md-mermaid .relation {
1059
+ fill: linear-gradient(135deg, #c084fc 0%, #a855f7 100%) !important;
1060
+ stroke: #9333ea !important;
1061
+ }
1062
+
1063
+ .md-diagram-panel.md-mermaid .edgeLabel {
1064
+ background: linear-gradient(135deg, #fef3c7 0%, #fce7f3 100%) !important;
1065
+ }
1066
+
1067
+ /* ── 15. 滚动条样�?── */
1068
+ ::-webkit-scrollbar {
1069
+ width: 7px;
1070
+ height: 7px;
1071
+ }
1072
+
1073
+ ::-webkit-scrollbar-track {
1074
+ background: transparent;
1075
+ }
1076
+
1077
+ ::-webkit-scrollbar-thumb {
1078
+ background: linear-gradient(180deg, #c7d2fe, #ddd6fe);
1079
+ border-radius: 10px;
1080
+ transition: background 0.3s ease;
1081
+ }
1082
+
1083
+ ::-webkit-scrollbar-thumb:hover {
1084
+ background: linear-gradient(180deg, #a5b4fc, #c4b5fd);
1085
+ }
1086
+
1087
+ /* ── 16. 选择文本样式 ── */
1088
+ ::selection,
1089
+ body.theme-custom ::selection {
1090
+ background: rgba(99, 102, 241, 0.18);
1091
+ color: #1a1d26;
1092
+ }
1093
+
1094
+ ::-moz-selection,
1095
+ body.theme-custom ::-moz-selection {
1096
+ background: rgba(99, 102, 241, 0.18);
1097
+ color: #1a1d26;
1098
+ }
1099
+
1100
+ /* ── 17. 特殊效果 ── */
1101
+
1102
+ /* 图片容器增强 */
1103
+ body.theme-custom figure img {
1104
+ transition: all 0.35s cubic-bezier(0.4, 0, 0.2, 1);
1105
+ }
1106
+
1107
+ /* 列表样式优化 */
1108
+ body.theme-custom li::marker {
1109
+ color: #a5b4fc;
1110
+ }
1111
+
1112
+ ol li::marker {
1113
+ color: #6366f1;
1114
+ font-weight: 600;
1115
+ }
1116
+
1117
+ /* 段落首字下沉效果(可选) */
1118
+ body.theme-custom #write > p:first-of-type::first-letter {
1119
+ /* font-size: 1.3em;
1120
+ font-weight: 700;
1121
+ float: left;
1122
+ margin-right: 6px;
1123
+ color: #6366f1; */
1124
+ }
1125
+
1126
+ /* 脚注样式 */
1127
+ body.theme-custom sup {
1128
+ color: #6366f1;
1129
+ font-size: 0.82em;
1130
+ cursor: pointer;
1131
+ vertical-align: super;
1132
+ margin: 0 2px;
1133
+ }
1134
+
1135
+ /* TOC 目录样式 */
1136
+ body.theme-custom .md-toc-content {
1137
+ background: linear-gradient(135deg, #f8f9ff 0%, #fdf4ff 100%);
1138
+ border: 1px solid rgba(99, 102, 241, 0.1);
1139
+ border-radius: 10px;
1140
+ padding: 20px 24px;
1141
+ margin: 2em 0;
1142
+ box-shadow: 0 2px 12px rgba(99, 102, 241, 0.05);
1143
+ }
1144
+
1145
+ body.theme-custom .md-toc-content .md-toc-title {
1146
+ font-weight: 700;
1147
+ color: #1a1d26;
1148
+ font-size: 1.1em;
1149
+ margin-bottom: 12px;
1150
+ padding-bottom: 10px;
1151
+ border-bottom: 2px solid #e5e7eb;
1152
+ }
1153
+
1154
+ body.theme-custom .md-toc-content a {
1155
+ color: #4b5563;
1156
+ border-bottom: none;
1157
+ transition: all 0.2s ease;
1158
+ display: inline-block;
1159
+ padding: 2px 0;
1160
+ }
1161
+
1162
+ body.theme-custom .md-toc-content a:hover {
1163
+ color: #6366f1;
1164
+ transform: translateX(4px);
1165
+ }
1166
+
1167
+ /* 任务列表样式 */
1168
+ body.theme-custom input[type="checkbox"] {
1169
+ accent-color: #6366f1;
1170
+ width: 16px;
1171
+ height: 16px;
1172
+ cursor: pointer;
1173
+ margin-right: 6px;
1174
+ }
1175
+
1176
+ /* ── 15. YAML 元数�?── */
1177
+ pre.md-meta-block,
1178
+ body.theme-custom .frontmatter,
1179
+ body.theme-custom .yaml-front-matter {
1180
+ font-family: "JetBrains Mono", "Fira Code", monospace;
1181
+ font-size: 0.85em;
1182
+ background: linear-gradient(135deg, #f8f9ff 0%, #fdf4ff 100%);
1183
+ border: 1px solid rgba(99, 102, 241, 0.12);
1184
+ border-radius: 8px;
1185
+ padding: 16px 20px;
1186
+ margin-bottom: 2em;
1187
+ color: #4b5563;
1188
+ }
1189
+
1190
+ /* ── 16. 脚注 ── */
1191
+ .md-footnote { font-size: 0.85em; color: #6366f1; }
1192
+ sup.md-footnote {
1193
+ background: transparent;
1194
+ cursor: pointer;
1195
+ }
1196
+
1197
+ /* ── 17. TOC 目录(完善) */
1198
+ .md-toc { font-size: 0.9em; }
1199
+ .md-toc-item { color: #2d3436; transition: all 0.2s ease; }
1200
+ .md-toc-item:hover { color: #6366f1; transform: translateX(3px); }
1201
+ .md-toc-h1 .md-toc-inner { font-weight: 700; color: #1a1d26; }
1202
+ .md-toc-h2 .md-toc-inner { font-weight: 600; color: #283149; }
1203
+ .md-toc-h3 .md-toc-inner { font-weight: 500; color: #374151; }
1204
+
1205
+ /* ── 18. 侧边�?── */
1206
+ .sidebar-content { font-family: inherit; }
1207
+ .file-node-content { line-height: 1.65; transition: background 0.2s ease; }
1208
+ .file-node-content:hover { background: rgba(99, 102, 241, 0.05); border-radius: 5px; }
1209
+ .file-node-title { font-size: 1em; color: #2d3436; }
1210
+ .file-node-title:hover { color: #6366f1; }
1211
+
1212
+ /* ── 19. 聚焦模式 ── */
1213
+ .on-focus-mode .md-end-block:not(.md-focus):not(.md-focus-container) * {
1214
+ color: rgba(107, 114, 128, 0.35) !important;
1215
+ }
1216
+ .on-focus-mode .md-end-block:not(.md-focus):not(.md-focus-container) img {
1217
+ opacity: 0.35;
1218
+ }
1219
+ .on-focus-mode .md-end-block:not(.md-focus):not(.md-focus-container) a,
1220
+ .on-focus-mode .md-end-block:not(.md-focus):not(.md-focus-container) strong {
1221
+ color: rgba(99, 102, 241, 0.25) !important;
1222
+ }
1223
+
1224
+ /* ── 20. 搜索 & 选择 ── */
1225
+ #write .md-search-hit {
1226
+ background: rgba(99, 102, 241, 0.18);
1227
+ border-radius: 3px;
1228
+ box-shadow: 0 0 0 2px rgba(99, 102, 241, 0.12);
1229
+ }
1230
+
1231
+ /* ── 22. Megamenu ── */
1232
+ .megamenu-content { font-family: inherit; }
1233
+ #megamenu-back-btn { color: #2d3436; transition: color 0.2s ease; }
1234
+ #megamenu-back-btn:hover { color: #6366f1; }
1235
+
1236
+ /* 打印样式优化 */
1237
+ @media print {
1238
+ body.theme-custom {
1239
+ background: #f8f9fb !important;
1240
+ color: black !important;
1241
+ }
1242
+
1243
+ body.theme-custom h1,
1244
+ body.theme-custom h2 {
1245
+ -webkit-text-fill-color: initial !important;
1246
+ background: none !important;
1247
+ }
1248
+
1249
+ body.theme-custom h2::after {
1250
+ background: #333 !important;
1251
+ }
1252
+
1253
+ body.theme-custom blockquote {
1254
+ background: #f5f5f5 !important;
1255
+ border-left: 4px solid #333 !important;
1256
+ }
1257
+
1258
+ body.theme-custom blockquote::before {
1259
+ display: none !important;
1260
+ }
1261
+ }