@bytechain.cn/colamd 1.5.0

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 (157) hide show
  1. package/.github/workflows/release.yml +66 -0
  2. package/.trae/documents/fix-mermaid-colors-and-sankey.md +50 -0
  3. package/CLAUDE.md +87 -0
  4. package/LICENSE +21 -0
  5. package/README.md +540 -0
  6. package/README_CN.md +543 -0
  7. package/demo.md +486 -0
  8. package/dist/main/index.js +735 -0
  9. package/dist/preload/index.js +71 -0
  10. package/dist/renderer/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  11. package/dist/renderer/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  12. package/dist/renderer/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  13. package/dist/renderer/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  14. package/dist/renderer/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  15. package/dist/renderer/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  16. package/dist/renderer/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  17. package/dist/renderer/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  18. package/dist/renderer/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  19. package/dist/renderer/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  20. package/dist/renderer/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  21. package/dist/renderer/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  22. package/dist/renderer/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  23. package/dist/renderer/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  24. package/dist/renderer/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  25. package/dist/renderer/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  26. package/dist/renderer/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  27. package/dist/renderer/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  28. package/dist/renderer/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  29. package/dist/renderer/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  30. package/dist/renderer/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  31. package/dist/renderer/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  32. package/dist/renderer/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  33. package/dist/renderer/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  34. package/dist/renderer/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  35. package/dist/renderer/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  36. package/dist/renderer/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  37. package/dist/renderer/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  38. package/dist/renderer/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  39. package/dist/renderer/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  40. package/dist/renderer/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  41. package/dist/renderer/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  42. package/dist/renderer/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  43. package/dist/renderer/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  44. package/dist/renderer/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  45. package/dist/renderer/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  46. package/dist/renderer/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  47. package/dist/renderer/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  48. package/dist/renderer/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  49. package/dist/renderer/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  50. package/dist/renderer/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  51. package/dist/renderer/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  52. package/dist/renderer/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  53. package/dist/renderer/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  54. package/dist/renderer/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  55. package/dist/renderer/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  56. package/dist/renderer/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  57. package/dist/renderer/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  58. package/dist/renderer/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  59. package/dist/renderer/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  60. package/dist/renderer/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  61. package/dist/renderer/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  62. package/dist/renderer/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  63. package/dist/renderer/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  64. package/dist/renderer/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  65. package/dist/renderer/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  66. package/dist/renderer/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  67. package/dist/renderer/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  68. package/dist/renderer/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  69. package/dist/renderer/assets/arc-tTbbM8LO.js +131 -0
  70. package/dist/renderer/assets/architectureDiagram-3BPJPVTR-CEgYow6c.js +8720 -0
  71. package/dist/renderer/assets/blockDiagram-GPEHLZMM-LHyVtPwW.js +3825 -0
  72. package/dist/renderer/assets/c4Diagram-AAUBKEIU-C1P1eJrf.js +2482 -0
  73. package/dist/renderer/assets/channel-upve91Tq.js +7 -0
  74. package/dist/renderer/assets/chunk-2J33WTMH-lag2vhq9.js +24 -0
  75. package/dist/renderer/assets/chunk-4BX2VUAB-BXJ8Ggh-.js +16 -0
  76. package/dist/renderer/assets/chunk-55IACEB6-CiBpxRa1.js +13 -0
  77. package/dist/renderer/assets/chunk-727SXJPM-ODeKQFXC.js +2016 -0
  78. package/dist/renderer/assets/chunk-AQP2D5EJ-BK7xJolB.js +1953 -0
  79. package/dist/renderer/assets/chunk-FMBD7UC4-BxpCZPtz.js +19 -0
  80. package/dist/renderer/assets/chunk-ND2GUHAM-CqqaU9Ue.js +116 -0
  81. package/dist/renderer/assets/chunk-QZHKN3VN-Biq_K124.js +19 -0
  82. package/dist/renderer/assets/classDiagram-4FO5ZUOK-Cq95X99o.js +23 -0
  83. package/dist/renderer/assets/classDiagram-v2-Q7XG4LA2-Cq95X99o.js +23 -0
  84. package/dist/renderer/assets/cose-bilkent-S5V4N54A-XasiD0bu.js +4942 -0
  85. package/dist/renderer/assets/cytoscape.esm-CpHeHM5e.js +30269 -0
  86. package/dist/renderer/assets/dagre-BM42HDAG-Nq84Gfx4.js +705 -0
  87. package/dist/renderer/assets/defaultLocale-B2RvLBDe.js +206 -0
  88. package/dist/renderer/assets/diagram-2AECGRRQ-DwuB1GWt.js +301 -0
  89. package/dist/renderer/assets/diagram-5GNKFQAL-C2tgeI1h.js +169 -0
  90. package/dist/renderer/assets/diagram-KO2AKTUF-D5KzjNBc.js +632 -0
  91. package/dist/renderer/assets/diagram-LMA3HP47-C12xHS1c.js +212 -0
  92. package/dist/renderer/assets/diagram-OG6HWLK6-CnxI9oEa.js +851 -0
  93. package/dist/renderer/assets/erDiagram-TEJ5UH35-D_uPaKwn.js +1227 -0
  94. package/dist/renderer/assets/flowDiagram-I6XJVG4X-B6q_1-tE.js +2332 -0
  95. package/dist/renderer/assets/ganttDiagram-6RSMTGT7-CFo7ifF9.js +3720 -0
  96. package/dist/renderer/assets/gitGraphDiagram-PVQCEYII-WSexHTnq.js +1373 -0
  97. package/dist/renderer/assets/graph-DyX_9f6d.js +1988 -0
  98. package/dist/renderer/assets/index-DW7LS8C1.js +72292 -0
  99. package/dist/renderer/assets/index-dyHEFYvY.css +2184 -0
  100. package/dist/renderer/assets/infoDiagram-5YYISTIA-DaeJdLRq.js +31 -0
  101. package/dist/renderer/assets/init-ZxktEp_H.js +16 -0
  102. package/dist/renderer/assets/ishikawaDiagram-YF4QCWOH-DDCZc35f.js +967 -0
  103. package/dist/renderer/assets/journeyDiagram-JHISSGLW-BEdmpAgl.js +1255 -0
  104. package/dist/renderer/assets/kanban-definition-UN3LZRKU-BEFtQcFb.js +1052 -0
  105. package/dist/renderer/assets/layout-CAJgQHdw.js +2610 -0
  106. package/dist/renderer/assets/linear-B2ggJ8Am.js +340 -0
  107. package/dist/renderer/assets/mindmap-definition-RKZ34NQL-DSxVgHB5.js +1180 -0
  108. package/dist/renderer/assets/ordinal-DSZU4PqD.js +76 -0
  109. package/dist/renderer/assets/pieDiagram-4H26LBE5-CwYoJBuL.js +246 -0
  110. package/dist/renderer/assets/quadrantDiagram-W4KKPZXB-CST9Fvg9.js +1344 -0
  111. package/dist/renderer/assets/requirementDiagram-4Y6WPE33-DtrH52jS.js +1204 -0
  112. package/dist/renderer/assets/sankeyDiagram-5OEKKPKP-ca1tPzJ_.js +1274 -0
  113. package/dist/renderer/assets/sequenceDiagram-3UESZ5HK-Dfp1EJZ7.js +4514 -0
  114. package/dist/renderer/assets/stateDiagram-AJRCARHV-Bha2QoNB.js +450 -0
  115. package/dist/renderer/assets/stateDiagram-v2-BHNVJYJU-DWgFUYu1.js +21 -0
  116. package/dist/renderer/assets/timeline-definition-PNZ67QCA-C3h_-OTj.js +1596 -0
  117. package/dist/renderer/assets/vennDiagram-CIIHVFJN-DFzjSrZi.js +2486 -0
  118. package/dist/renderer/assets/wardley-L42UT6IY-Cx-VbqoS.js +30699 -0
  119. package/dist/renderer/assets/wardleyDiagram-YWT4CUSO-S2D9XqX6.js +975 -0
  120. package/dist/renderer/assets/xychartDiagram-2RQKCTM6-Cfxigbts.js +1932 -0
  121. package/dist/renderer/index.html +19 -0
  122. package/docs/agent-diff-view.md +48 -0
  123. package/electron-builder.yml +57 -0
  124. package/electron.vite.config.ts +30 -0
  125. package/package.json +40 -0
  126. package/resources/entitlements.mac.plist +12 -0
  127. package/resources/icon.icns +0 -0
  128. package/resources/icon.png +0 -0
  129. package/resources/icon.svg +23 -0
  130. package/resources/templates/slides/icon.png +0 -0
  131. package/resources/templates/slides/slides-template.md +74 -0
  132. package/resources/templates/slides/template.html +535 -0
  133. package/scripts/afterPack.js +13 -0
  134. package/src/main/index.ts +881 -0
  135. package/src/preload/index.ts +110 -0
  136. package/src/renderer/editor/editor.ts +204 -0
  137. package/src/renderer/editor/html-view.ts +15 -0
  138. package/src/renderer/editor/plugins/index.ts +76 -0
  139. package/src/renderer/editor/plugins/math-plugin.ts +297 -0
  140. package/src/renderer/editor/plugins/mermaid-plugin-custom.css +431 -0
  141. package/src/renderer/editor/plugins/mermaid-plugin-dark.css +428 -0
  142. package/src/renderer/editor/plugins/mermaid-plugin-elegant.css +443 -0
  143. package/src/renderer/editor/plugins/mermaid-plugin-newsprint.css +208 -0
  144. package/src/renderer/editor/plugins/mermaid-plugin.css +111 -0
  145. package/src/renderer/editor/plugins/mermaid-plugin.ts +679 -0
  146. package/src/renderer/env.d.ts +7 -0
  147. package/src/renderer/index.html +18 -0
  148. package/src/renderer/main.ts +303 -0
  149. package/src/renderer/themes/base.css +509 -0
  150. package/src/renderer/themes/theme-manager.ts +40 -0
  151. package/themes/README.md +280 -0
  152. package/themes/elegant.css +664 -0
  153. package/themes/guizang.css +732 -0
  154. package/tsconfig.json +14 -0
  155. package/tsconfig.main.json +11 -0
  156. package/tsconfig.preload.json +11 -0
  157. package/tsconfig.renderer.json +12 -0
@@ -0,0 +1,280 @@
1
+ # ColaMD Themes
2
+
3
+ Download any `.css` file and place it in `~/.colamd/themes/`, or use **Theme > Import Theme** in ColaMD to import directly.
4
+
5
+ ## Available Themes
6
+
7
+ | Theme | Description |
8
+ |-------|-------------|
9
+ | [elegant.css](elegant.css) | Warm serif theme with terracotta accents and dark code blocks |
10
+ | [guizang.css](guizang.css) | 古雅沉稳的归藏风格,赭石强调色、松烟墨代码块、宣纸底色 |
11
+
12
+ ## Creating Your Own Theme
13
+
14
+ ColaMD custom themes are plain CSS files. You can style the editor by targeting CSS custom properties or writing direct selectors.
15
+
16
+ When a custom theme is imported, ColaMD adds the `theme-custom` class to `<body>`. Use `body.theme-custom` selectors to ensure your styles override the defaults.
17
+
18
+ ### CSS Variables
19
+
20
+ Define variables on `body.theme-custom` to override the base theme:
21
+
22
+ ```css
23
+ body.theme-custom {
24
+ --bg-color: #ffffff;
25
+ --text-color: #24292f;
26
+ --text-muted: #656d76;
27
+ --border-color: #d0d7de;
28
+ --link-color: #0969da;
29
+ --code-bg: rgba(0,0,0,0.05);
30
+ --code-block-bg: #f6f8fa;
31
+ --code-block-text: #24292f;
32
+ --blockquote-border: #d0d7de;
33
+ --blockquote-bg: transparent;
34
+ --table-header-bg: #f6f8fa;
35
+ --selection-bg: rgba(0,0,0,0.1);
36
+ }
37
+ ```
38
+
39
+ ### Direct Selectors
40
+
41
+ For more control, target elements directly using `body.theme-custom` prefix:
42
+
43
+ ```css
44
+ body.theme-custom #editor .ProseMirror { font-family: Georgia, serif; }
45
+ body.theme-custom #editor .ProseMirror strong { color: #c44b2b; }
46
+ body.theme-custom #editor .ProseMirror pre { background: #2c2c2c; color: #e0dcd7; }
47
+ ```
48
+
49
+ ### Extended Features Styling
50
+
51
+ ColaMD supports advanced content like **Mermaid diagrams** and **Math formulas**. A well-designed theme should include styles for these elements to ensure visual consistency.
52
+
53
+ #### Mermaid Diagrams
54
+
55
+ ColaMD's Mermaid plugin reads CSS variables from `body.theme-custom` to configure diagram rendering. Define `--mermaid-*` variables alongside your base theme variables for full Mermaid integration:
56
+
57
+ ```css
58
+ body.theme-custom {
59
+ /* Base theme variables */
60
+ --bg-color: #f5f0e8;
61
+ --text-color: #2b2520;
62
+ --border-color: #d4cfc6;
63
+
64
+ /* ── Mermaid Font ── */
65
+ --mermaid-font-family: "LXGW WenKai", Georgia, serif;
66
+ --mermaid-font-size: 12px; /* Controls Mermaid fontSize (default: 12) */
67
+
68
+ /* ── Mermaid Rendering Variables (read by the plugin JS) ── */
69
+ --mermaid-background: #f0ebe3;
70
+ --mermaid-primary-color: #ede8df;
71
+ --mermaid-primary-border-color: #b0a89f;
72
+ --mermaid-primary-text-color: #2b2520;
73
+ --mermaid-secondary-color: #e8e0d4;
74
+ --mermaid-secondary-border-color: #c4bbb0;
75
+ --mermaid-line-color: #8a7b6a;
76
+ --mermaid-text-color: #2b2520;
77
+ --mermaid-main-bkg: #ede8df;
78
+ --mermaid-second-bkg: #e8e0d4;
79
+ --mermaid-label-background: #f0ebe3;
80
+ --mermaid-label-text-color: #2b2520;
81
+ --mermaid-node-bkg: #ede8df;
82
+ --mermaid-node-border: #b0a89f;
83
+ --mermaid-cluster-bkg: #e8e0d4;
84
+ --mermaid-cluster-border: #b0a89f;
85
+ --mermaid-edge-label-background: #f0ebe3;
86
+ --mermaid-arrowhead-color: #8a7b6a;
87
+ --mermaid-person-border: #b0a89f;
88
+ --mermaid-person-bkg: #ede8df;
89
+
90
+ /* ── Mermaid Color Scale (cScale0–cScale11) ── */
91
+ --mermaid-cscale0: #8b6b4a;
92
+ --mermaid-cscale1: #5a8a7a;
93
+ --mermaid-cscale2: #b8963a;
94
+ /* ... up to --mermaid-cscale11 */
95
+
96
+ /* ── Mermaid C4 Diagram Colors ── */
97
+ --mermaid-c4-person-bg: #8b4513;
98
+ --mermaid-c4-person-border: #6b350f;
99
+ --mermaid-c4-system-bg: #5a8a7a;
100
+ --mermaid-c4-system-border: #4a7a6b;
101
+ --mermaid-c4-container-bg: #6b5a4a;
102
+ --mermaid-c4-container-border: #5a4a3a;
103
+ --mermaid-c4-component-bg: #4a7a6b;
104
+ --mermaid-c4-component-border: #3a6a5b;
105
+ /* ... and their external_ variants */
106
+
107
+ /* ── Dark Mode ── */
108
+ /* Set to "true" for dark custom themes */
109
+ /* --mermaid-dark-mode: true; */
110
+ }
111
+ ```
112
+
113
+ ##### Font Size & Text Offset
114
+
115
+ Mermaid diagrams in custom themes have two font/offset control layers:
116
+
117
+ **1. JS Rendering Layer** — `--mermaid-font-size` controls the `fontSize` parameter passed to `mermaid.initialize()`. This affects how Mermaid calculates node sizes and text layout during SVG generation. Default is `12` (px). Smaller values produce more compact diagrams.
118
+
119
+ **2. CSS Override Layer** — The plugin's `mermaid-plugin-custom.css` applies `!important` overrides on the rendered SVG to enforce the theme's font family, font size, and text vertical offset. These CSS variables are used:
120
+
121
+ | CSS Variable | CSS Property | Default | Description |
122
+ |---|---|---|---|
123
+ | `--mermaid-font-size` | `font-size` | `12px` | Font size for all SVG text, spans, and foreignObject content |
124
+ | `--mermaid-font-family` | `font-family` | system sans-serif | Font family for all SVG text and labels |
125
+ | `--mermaid-text-color` | `fill` / `color` | `--text-color` | Text color for all diagram labels |
126
+
127
+ **3. Text Vertical Offset** — Chinese fonts and serif fonts often render text lower than expected inside Mermaid nodes. The plugin compensates with two CSS mechanisms:
128
+
129
+ ```css
130
+ /* Text elements are shifted up via transform */
131
+ body.theme-custom .mermaid-preview svg .label text,
132
+ body.theme-custom .mermaid-preview svg .nodeLabel text {
133
+ transform: translateY(-5px) !important;
134
+ }
135
+
136
+ /* foreignObject containers are shifted up via relative positioning */
137
+ body.theme-custom .mermaid-preview svg .nodeLabel,
138
+ body.theme-custom .mermaid-preview svg .edgeLabel {
139
+ position: relative !important;
140
+ top: -5px !important;
141
+ }
142
+ ```
143
+
144
+ **4. Node Height Padding** — The plugin's `adjustNodeHeights()` function expands node rectangles and foreignObject containers after rendering. For custom themes, the padding is `12px` (vs `6px` for built-in themes) to accommodate CJK characters that need more vertical space.
145
+
146
+ ##### Tuning Guide
147
+
148
+ If text in Mermaid diagrams appears clipped or misaligned:
149
+
150
+ | Problem | Solution |
151
+ |---|---|
152
+ | Text too large / nodes too small | Decrease `--mermaid-font-size` (e.g. `11px` or `10px`) |
153
+ | Text too small / hard to read | Increase `--mermaid-font-size` (e.g. `13px` or `14px`) |
154
+ | Text sits too low in nodes | Increase the `translateY` and `top` offset in your CSS overrides (e.g. `-6px` or `-7px`) |
155
+ | Text sits too high in nodes | Decrease the offset (e.g. `-3px` or `-4px`) |
156
+ | Node rectangles clip text | The 12px auto-padding should handle this; if still clipped, the `adjustNodeHeights` PAD value in `mermaid-plugin.ts` can be increased |
157
+ | Font doesn't match the theme | Set `--mermaid-font-family` to match your editor font |
158
+
159
+ ##### Complete Mermaid CSS Variable Reference
160
+
161
+ | Variable | Mermaid themeVariable | Fallback | Description |
162
+ |---|---|---|---|
163
+ | `--mermaid-background` | `background` | `--bg-color` | Diagram background |
164
+ | `--mermaid-primary-color` | `primaryColor` | `--code-block-bg` | Primary node fill |
165
+ | `--mermaid-primary-border-color` | `primaryBorderColor` | `--border-color` | Primary node border |
166
+ | `--mermaid-primary-text-color` | `primaryTextColor` | `--text-color` | Primary text color |
167
+ | `--mermaid-secondary-color` | `secondaryColor` | `--code-bg` | Secondary node fill |
168
+ | `--mermaid-secondary-border-color` | `secondaryBorderColor` | `--border-color` | Secondary node border |
169
+ | `--mermaid-line-color` | `lineColor` | `--border-color` | Connection line color |
170
+ | `--mermaid-text-color` | `textColor` | `--text-color` | Default text color |
171
+ | `--mermaid-main-bkg` | `mainBkg` | `--code-block-bg` | Main background |
172
+ | `--mermaid-second-bkg` | `secondBkg` | `--code-bg` | Secondary background |
173
+ | `--mermaid-label-background` | `labelBackground` | `--code-block-bg` | Label background |
174
+ | `--mermaid-label-text-color` | `labelTextColor` | `--text-color` | Label text color |
175
+ | `--mermaid-node-bkg` | `nodeBkg` | `--code-block-bg` | Node fill |
176
+ | `--mermaid-node-border` | `nodeBorder` | `--border-color` | Node border |
177
+ | `--mermaid-cluster-bkg` | `clusterBkg` | `--code-bg` | Cluster fill |
178
+ | `--mermaid-cluster-border` | `clusterBorder` | `--border-color` | Cluster border |
179
+ | `--mermaid-edge-label-background` | `edgeLabelBackground` | `--code-block-bg` | Edge label background |
180
+ | `--mermaid-arrowhead-color` | `arrowheadColor` | `--mermaid-line-color` | Arrowhead fill |
181
+ | `--mermaid-person-border` | `personBorder` | `--border-color` | C4 person border |
182
+ | `--mermaid-person-bkg` | `personBkg` | `--code-block-bg` | C4 person fill |
183
+ | `--mermaid-font-family` | `fontFamily` | system sans-serif | All diagram text font |
184
+ | `--mermaid-font-size` | `fontSize` (JS) | `12` | All diagram text size |
185
+ | `--mermaid-dark-mode` | `darkMode` | `false` | Set `"true"` for dark themes |
186
+ | `--mermaid-cscale0` – `--mermaid-cscale11` | `cScale0` – `cScale11` | default palette | Color scale for pie/mindmap/etc |
187
+ | `--mermaid-c4-person-bg` | `person_bg_color` | `#2d5f8a` | C4 person background |
188
+ | `--mermaid-c4-person-border` | `person_border_color` | `#4a7aaa` | C4 person border |
189
+ | `--mermaid-c4-ext-person-bg` | `external_person_bg_color` | `#4a5568` | External person background |
190
+ | `--mermaid-c4-ext-person-border` | `external_person_border_color` | `#6b7a8a` | External person border |
191
+ | `--mermaid-c4-system-bg` | `system_bg_color` | `#3d7a5a` | System background |
192
+ | `--mermaid-c4-system-border` | `system_border_color` | `#5a9a7a` | System border |
193
+ | `--mermaid-c4-ext-system-bg` | `external_system_bg_color` | `#6b4a7a` | External system background |
194
+ | `--mermaid-c4-ext-system-border` | `external_system_border_color` | `#8a6a9a` | External system border |
195
+ | `--mermaid-c4-container-bg` | `container_bg_color` | `#8a6b3c` | Container background |
196
+ | `--mermaid-c4-container-border` | `container_border_color` | `#aa8a5c` | Container border |
197
+ | `--mermaid-c4-ext-container-bg` | `external_container_bg_color` | `#5a5a6a` | External container background |
198
+ | `--mermaid-c4-ext-container-border` | `external_container_border_color` | `#7a7a8a` | External container border |
199
+ | `--mermaid-c4-component-bg` | `component_bg_color` | `#3c7a6b` | Component background |
200
+ | `--mermaid-c4-component-border` | `component_border_color` | `#5c9a8b` | Component border |
201
+ | `--mermaid-c4-ext-component-bg` | `external_component_bg_color` | `#6a6a6a` | External component background |
202
+ | `--mermaid-c4-ext-component-border` | `external_component_border_color` | `#8a8a8a` | External component border |
203
+
204
+ For additional CSS overrides on rendered SVG elements, target `.mermaid-preview svg` under `body.theme-custom`:
205
+
206
+ ```css
207
+ body.theme-custom .mermaid-preview svg .node rect,
208
+ body.theme-custom .mermaid-preview svg .node circle {
209
+ stroke: #b0a89f;
210
+ }
211
+
212
+ body.theme-custom .mermaid-preview svg .edgePath .path {
213
+ stroke: #8a7b6a;
214
+ }
215
+
216
+ body.theme-custom .mermaid-preview svg text {
217
+ fill: #2b2520;
218
+ font-family: "LXGW WenKai", Georgia, serif;
219
+ }
220
+ ```
221
+
222
+ Common Mermaid selectors to override:
223
+
224
+ | Selector | Description |
225
+ |----------|-------------|
226
+ | `.node rect/circle/ellipse/polygon` | Node shape fill and stroke |
227
+ | `.node .label` | Node text color and font |
228
+ | `.edgePath .path` | Connection line color |
229
+ | `.edgeLabel` | Edge label styling |
230
+ | `.cluster rect` | Group/cluster background |
231
+ | `.actor` | Sequence diagram actor box |
232
+ | `.messageLine0/1` | Sequence diagram message lines |
233
+ | `.classBox` | Class diagram class box |
234
+ | `.statediagram-state` | State diagram state node |
235
+ | `.pieCircle` / `.slice` | Pie chart slices |
236
+ | `.mindmap-node` | Mind map node |
237
+ | `.quadrant` | Quadrant chart |
238
+ | `.xychart` | XY chart |
239
+ | `.sankey` | Sankey diagram |
240
+ | `.block` | Block diagram |
241
+ | `.er .entityBox` | ER diagram entity |
242
+ | `.task0/1/2/3` | Gantt chart task bars |
243
+ | `.today` | Gantt chart "today" marker |
244
+
245
+ #### Math Formulas
246
+
247
+ Target math elements under `body.theme-custom` to ensure formulas match the theme color scheme. You can also define a `--katex-color` variable:
248
+
249
+ ```css
250
+ body.theme-custom {
251
+ --katex-color: #3d3530;
252
+ }
253
+
254
+ body.theme-custom .math-inline,
255
+ body.theme-custom .math-block {
256
+ color: #2b2520;
257
+ }
258
+
259
+ body.theme-custom .katex {
260
+ color: #3d3530;
261
+ }
262
+
263
+ body.theme-custom .katex .mord,
264
+ body.theme-custom .katex .mbin,
265
+ body.theme-custom .katex .mrel,
266
+ body.theme-custom .katex .mopen,
267
+ body.theme-custom .katex .mclose,
268
+ body.theme-custom .katex .mpunct,
269
+ body.theme-custom .katex .minner {
270
+ color: #3d3530;
271
+ }
272
+ ```
273
+
274
+ ### Tips
275
+
276
+ - Theme files should be self-contained (no external imports)
277
+ - Test that all variables are defined to avoid invisible text
278
+ - Name the file descriptively: `dark-ocean.css`, `solarized-light.css`, etc.
279
+ - When styling Mermaid diagrams, use `!important` cautiously as Mermaid's inline styles can be highly specific
280
+ - Math formulas may render as SVG or HTML depending on the engine; target both for best compatibility