@akairos/myno 0.3.0 → 0.3.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 (93) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/LICENSE +21 -0
  3. package/README.md +52 -5
  4. package/dist/.vite/manifest.json +49 -49
  5. package/dist/assets/{syntax-presets-Clw1Pr2j.js → image-markdown-flIFnZQz.js} +62 -53
  6. package/dist/assets/{index-YY02LYN-.js → index-66BBLxhh.js} +1 -1
  7. package/dist/assets/{index-z4iU21Ve.js → index-76YuLxi3.js} +1 -1
  8. package/dist/assets/{index-DIKlav_o.js → index-B7RyVmkn.js} +1 -1
  9. package/dist/assets/{index-Ct6xQ87_.js → index-BFqVGrx5.js} +1 -1
  10. package/dist/assets/{index-zXdbmld4.js → index-BWCTJYba.js} +1 -1
  11. package/dist/assets/{index-Bgyno-qy.js → index-BZ-5737Z.js} +1 -1
  12. package/dist/assets/{index-C3mqfS11.js → index-BZem0vzC.js} +1 -1
  13. package/dist/assets/{index-Cvpfia2o.js → index-BafFtz6v.js} +1 -1
  14. package/dist/assets/{index-BQQ1Mi1e.js → index-BbBk60Ij.js} +1 -1
  15. package/dist/assets/{index-DOi0-DWN.js → index-Be5b0nfK.js} +1 -1
  16. package/dist/assets/{index-BzdnLbE6.js → index-BsFL19fO.js} +1 -1
  17. package/dist/assets/{index-B7wgkGTY.js → index-BsUkmM8V.js} +1 -1
  18. package/dist/assets/{index-C7nlezox.js → index-BvNjhitP.js} +1 -1
  19. package/dist/assets/{index-BYo4GXZ3.js → index-C4U9J6mP.js} +1 -1
  20. package/dist/assets/{index-BY_5QCeN.js → index-C5i0rs3g.js} +1 -1
  21. package/dist/assets/{index-D33hrwhL.js → index-C6M3EF2u.js} +1 -1
  22. package/dist/assets/{index-Bf_t_p3-.js → index-CFRD2Kea.js} +1 -1
  23. package/dist/assets/{index-BVejJ9GP.js → index-CMxKN2ug.js} +1 -1
  24. package/dist/assets/{index-BXKhM-dq.js → index-CNRHxRLz.js} +1 -1
  25. package/dist/assets/{index-Bx5kysUB.js → index-CYmRM47f.js} +1 -1
  26. package/dist/assets/{index-CTr58p_e.js → index-CZq60G2m.js} +1 -1
  27. package/dist/assets/{index-D55fsC0p.js → index-CbDkmZGJ.js} +1 -1
  28. package/dist/assets/{index-mcj80rA1.js → index-CgHZBsFk.js} +1 -1
  29. package/dist/assets/{index-Dz2Wwzwt.js → index-Ci1ADeNw.js} +1 -1
  30. package/dist/assets/{index-DJiXc9K-.js → index-CkuA2-Dq.js} +1 -1
  31. package/dist/assets/{index-RBdLFvWq.js → index-CmmXvZ6J.js} +1 -1
  32. package/dist/assets/{index-BuwkzWC3.js → index-Cu7G95Iq.js} +1 -1
  33. package/dist/assets/{index-BQaqd7HV.js → index-DAD2d4p9.js} +1 -1
  34. package/dist/assets/{index-B4oP0CAo.js → index-DI76JKrp.js} +1 -1
  35. package/dist/assets/{index-CQLZZT0S.js → index-DKRYs_np.js} +1 -1
  36. package/dist/assets/{index-BRMGrREe.js → index-DYzqKMaM.js} +1 -1
  37. package/dist/assets/{index-dFTt0umM.js → index-Dap3LTeU.js} +1 -1
  38. package/dist/assets/{index-m1bbMc0Z.js → index-DdtnTgdR.js} +1 -1
  39. package/dist/assets/{index-B3KPjiNQ.js → index-DlWplKCS.js} +1 -1
  40. package/dist/assets/{index-Do3WF47E.js → index-DoiEiA2M.js} +1 -1
  41. package/dist/assets/{index-D5qCW0zl.js → index-Dt8w_V-H.js} +1 -1
  42. package/dist/assets/{index-C77pdafO.js → index-N1oAD1df.js} +1 -1
  43. package/dist/assets/{index-DkaQHRr_.js → index-geduL7if.js} +1 -1
  44. package/dist/assets/{index-CjIk2aLQ.js → index-ktq63SwX.js} +1 -1
  45. package/dist/assets/{index-qhRFP5Y0.js → index-lzIwkAor.js} +1 -1
  46. package/dist/assets/{index-iryVxUmP.js → index-nZYfY4TR.js} +1 -1
  47. package/dist/assets/{index-DGkCtD3C.js → index-pMBzGDJd.js} +1 -1
  48. package/dist/assets/{style-B23kjid6.css → style-Dbq6kayK.css} +1 -1
  49. package/dist/assets/{syntax-presets-B7ZlwXZx.js → syntax-presets-CoA-zUgk.js} +13 -4
  50. package/dist/editor/image-markdown.d.ts +10 -0
  51. package/dist/editor/image-markdown.d.ts.map +1 -0
  52. package/dist/editor/image-markdown.js +14 -0
  53. package/dist/editor/image-markdown.js.map +1 -0
  54. package/dist/editor/myno-editor.d.ts +2 -2
  55. package/dist/editor/myno-editor.d.ts.map +1 -1
  56. package/dist/editor/myno-editor.js +5 -2
  57. package/dist/editor/myno-editor.js.map +1 -1
  58. package/dist/editor-export.js +2 -2
  59. package/dist/src/studio/studio.html +2 -2
  60. package/dist/studio/editor-export.d.ts.map +1 -1
  61. package/dist/studio/editor-export.js +3 -2
  62. package/dist/studio/editor-export.js.map +1 -1
  63. package/dist/studio/studio.js +4 -2
  64. package/dist/studio/studio.js.map +1 -1
  65. package/dist/studio.js +83 -83
  66. package/dist/styles/article.css +646 -0
  67. package/dist/styles/index.css +2 -0
  68. package/dist/styles/tokens-default.css +30 -0
  69. package/package.json +7 -4
  70. package/dist/assets/index-6xZjfNBY.js +0 -1
  71. package/dist/assets/index-7jqFg9Mv.js +0 -13
  72. package/dist/assets/index-AdP2vXVD.js +0 -1
  73. package/dist/assets/index-BHPv-A3N.js +0 -1
  74. package/dist/assets/index-BL9wSBtZ.js +0 -1
  75. package/dist/assets/index-BjawAflQ.js +0 -1
  76. package/dist/assets/index-C0JZnjgf.js +0 -3
  77. package/dist/assets/index-C1vHAMos.js +0 -1
  78. package/dist/assets/index-CDgREgYC.js +0 -2
  79. package/dist/assets/index-CIYtVPt-.js +0 -1
  80. package/dist/assets/index-CddMuxp_.js +0 -6
  81. package/dist/assets/index-CmlqrlxY.js +0 -7
  82. package/dist/assets/index-Crr2UUqW.js +0 -1
  83. package/dist/assets/index-D3-l1kuh.js +0 -1
  84. package/dist/assets/index-D5AbviI1.js +0 -1
  85. package/dist/assets/index-D8eibMZn.js +0 -1
  86. package/dist/assets/index-DLh7eEmr.js +0 -1
  87. package/dist/assets/index-Q5rzr3Yl.js +0 -1
  88. package/dist/assets/index-RrNfwOco.js +0 -1
  89. package/dist/assets/index-kgpju2R2.js +0 -1
  90. package/dist/assets/index-qjQPn-9r.js +0 -1
  91. package/dist/assets/style-C2UIbbzr.css +0 -1
  92. package/dist/assets/style-Cif_gYUW.css +0 -1
  93. package/dist/assets/style-DG6dI-L6.css +0 -1
@@ -0,0 +1,646 @@
1
+ /*
2
+ * @akairos/myno — article typography
3
+ *
4
+ * Consumers:
5
+ * - zzhub-pipeline wechat-export (Juice inlines these rules)
6
+ * - myno editor and Studio (live editor preview)
7
+ *
8
+ * Selectors stay on `.milkdown .editor` so both hosts share the same cascade.
9
+ * Prefer semantic tags; `data-wechat-node` hooks are export-only and safe to
10
+ * leave in place when the host never sets them.
11
+ *
12
+ * Theme tokens: tokens-default.css (live hosts); pipeline export also injects
13
+ * via themes.ts / buildWechatThemeCss.
14
+ */
15
+
16
+ .milkdown .editor {
17
+ max-width: 100%;
18
+ margin: 0;
19
+ padding: 8px 4px 28px;
20
+ background: #ffffff;
21
+ box-sizing: border-box;
22
+ color: var(--wx-body-color);
23
+ font-family: var(--wx-font-family);
24
+ font-size: 16px;
25
+ font-weight: 400;
26
+ line-height: var(--wx-body-line-height);
27
+ letter-spacing: var(--wx-body-letter-spacing);
28
+ overflow-wrap: break-word;
29
+ word-break: break-word;
30
+ -webkit-text-size-adjust: 100%;
31
+ }
32
+
33
+ .milkdown .editor p {
34
+ margin: 0 0 1.18em;
35
+ color: var(--wx-body-color);
36
+ font-family: var(--wx-font-family);
37
+ font-size: 16px;
38
+ line-height: var(--wx-body-line-height);
39
+ letter-spacing: var(--wx-body-letter-spacing);
40
+ text-align: justify;
41
+ overflow-wrap: break-word;
42
+ word-break: break-word;
43
+ }
44
+
45
+ /*
46
+ * Heading hierarchy (WeChat-safe):
47
+ * - Primary levers: asymmetric margin (far above / near below) + chroma steps.
48
+ * - Keep font-weight at 700 (600 often snaps to 700 on Android CJK faces).
49
+ * - Adjacent rules (h2+p, h2+h3) are evaluated at export by Juice and baked into
50
+ * inline styles; WeChat runtime never re-runs selectors.
51
+ */
52
+ .milkdown .editor h1,
53
+ .milkdown .editor h2,
54
+ .milkdown .editor h3,
55
+ .milkdown .editor h4,
56
+ .milkdown .editor h5,
57
+ .milkdown .editor h6 {
58
+ font-family: var(--wx-font-family);
59
+ font-weight: 700;
60
+ text-align: left;
61
+ overflow-wrap: break-word;
62
+ word-break: break-word;
63
+ }
64
+
65
+ .milkdown .editor h1 {
66
+ margin: 2.45em 0 0.85em;
67
+ color: var(--wx-h2-color, var(--wx-body-color));
68
+ font-size: 26px;
69
+ line-height: 1.38;
70
+ letter-spacing: -0.01em;
71
+ }
72
+
73
+ /* H2 = major section break: more air above, stick to following copy */
74
+ .milkdown .editor h2 {
75
+ margin: 2.7em 0 0.7em;
76
+ padding-left: 0;
77
+ padding-bottom: 0;
78
+ border-left: 0;
79
+ border-bottom: none;
80
+ color: var(--wx-h2-color, #1f1b1c);
81
+ font-size: 20px;
82
+ line-height: 1.38;
83
+ letter-spacing: 0.005em;
84
+ text-decoration: none;
85
+ }
86
+
87
+ /* H3 = in-section label: near body size, mid chroma, less top air */
88
+ .milkdown .editor h3 {
89
+ margin: 1.55em 0 0.4em;
90
+ padding-bottom: 0;
91
+ border-bottom: none;
92
+ color: var(--wx-h3-color, #5c5658);
93
+ font-size: 16px;
94
+ line-height: 1.48;
95
+ letter-spacing: 0.02em;
96
+ text-decoration: none;
97
+ }
98
+
99
+ .milkdown .editor h4,
100
+ .milkdown .editor h5,
101
+ .milkdown .editor h6 {
102
+ margin: 1.45em 0 0.45em;
103
+ color: var(--wx-h3-color, #5c5658);
104
+ font-size: 16px;
105
+ line-height: 1.55;
106
+ letter-spacing: 0.02em;
107
+ }
108
+
109
+ /* Opening heading should not dump a large white gap under chrome */
110
+ .milkdown .editor > h1:first-child,
111
+ .milkdown .editor > h2:first-child,
112
+ .milkdown .editor > h3:first-child,
113
+ .milkdown .editor > h4:first-child {
114
+ margin-top: 0.25em;
115
+ }
116
+
117
+ /* Title sticks to following paragraph (Juice bakes margin-top onto that p) */
118
+ .milkdown .editor h1 + p,
119
+ .milkdown .editor h2 + p,
120
+ .milkdown .editor h3 + p,
121
+ .milkdown .editor h4 + p {
122
+ margin-top: 0;
123
+ }
124
+
125
+ /* Avoid stacked air when a subsection title follows a section title */
126
+ .milkdown .editor h2 + h3,
127
+ .milkdown .editor h2 + h4,
128
+ .milkdown .editor h3 + h4 {
129
+ margin-top: 1.1em;
130
+ }
131
+
132
+ .milkdown .editor strong,
133
+ .milkdown .editor b {
134
+ color: var(--wx-body-color);
135
+ font-weight: 700;
136
+ }
137
+
138
+ .milkdown .editor em,
139
+ .milkdown .editor i {
140
+ color: var(--wx-body-color);
141
+ font-style: italic;
142
+ }
143
+
144
+ .milkdown .editor s,
145
+ .milkdown .editor del {
146
+ color: var(--wx-muted-color);
147
+ text-decoration: line-through;
148
+ text-decoration-color: var(--wx-muted-color);
149
+ }
150
+
151
+ .milkdown .editor a,
152
+ .milkdown .editor [data-wechat-node="external-link"] {
153
+ border-bottom: 1px solid var(--wx-brand-accent);
154
+ color: var(--wx-brand-ink);
155
+ text-decoration: none;
156
+ }
157
+
158
+ .milkdown .editor [data-wechat-node="link-marker"] {
159
+ margin-left: 2px;
160
+ color: var(--wx-brand-ink);
161
+ font-size: 11px;
162
+ line-height: 1;
163
+ vertical-align: super;
164
+ }
165
+
166
+ /* Live editor uses bare <code>; export marks nodes with data-wechat-node. */
167
+ .milkdown .editor code:not(pre code),
168
+ .milkdown .editor [data-wechat-node="inline-code"] {
169
+ margin: 0 2px;
170
+ padding: 2px 5px;
171
+ border: 1px solid #ded9db;
172
+ border-radius: 4px;
173
+ background-color: #f7f5f6;
174
+ color: #4d484a;
175
+ font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace;
176
+ font-size: 14px;
177
+ line-height: 1.55;
178
+ overflow-wrap: break-word;
179
+ word-break: break-word;
180
+ }
181
+
182
+ .milkdown .editor [data-wechat-node="code-block"] {
183
+ margin: 1.55em 0;
184
+ border: 1px solid var(--wx-divider-color);
185
+ border-radius: 7px;
186
+ background-color: var(--wx-soft-surface);
187
+ overflow: hidden;
188
+ }
189
+
190
+ .milkdown .editor [data-wechat-node="code-language"] {
191
+ margin: 0;
192
+ padding: 7px 13px 6px;
193
+ border-bottom: 1px solid var(--wx-divider-color);
194
+ color: var(--wx-muted-color);
195
+ font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace;
196
+ font-size: 11px;
197
+ font-weight: 600;
198
+ line-height: 1.4;
199
+ letter-spacing: 0.08em;
200
+ text-align: left;
201
+ }
202
+
203
+ /* Export wraps <pre> in [data-wechat-node="code-block"] (outer chrome).
204
+ * Live editors only have bare <pre> — give them the same chrome. */
205
+ .milkdown .editor pre {
206
+ margin: 1.55em 0;
207
+ padding: 15px 14px 16px;
208
+ border: 1px solid var(--wx-divider-color);
209
+ border-radius: 7px;
210
+ background-color: var(--wx-soft-surface);
211
+ color: var(--wx-body-color);
212
+ font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace;
213
+ font-size: 13px;
214
+ line-height: 1.72;
215
+ overflow-x: auto;
216
+ white-space: pre;
217
+ word-break: normal;
218
+ }
219
+
220
+ .milkdown .editor [data-wechat-node="code-block"] pre {
221
+ margin: 0;
222
+ border: 0;
223
+ border-radius: 0;
224
+ }
225
+
226
+ .milkdown .editor pre code {
227
+ display: block;
228
+ margin: 0;
229
+ padding: 0;
230
+ border: 0;
231
+ background: transparent;
232
+ color: var(--wx-body-color);
233
+ font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace;
234
+ font-size: 13px;
235
+ line-height: 1.72;
236
+ overflow-wrap: normal;
237
+ white-space: pre;
238
+ word-break: normal;
239
+ }
240
+
241
+ .milkdown .editor figure,
242
+ .milkdown .editor [data-wechat-node="image-block"] {
243
+ margin: 1.65em 0 1.8em;
244
+ text-align: center;
245
+ }
246
+
247
+ .milkdown .editor img {
248
+ display: block;
249
+ width: auto;
250
+ max-width: 100%;
251
+ height: auto;
252
+ margin: 0 auto;
253
+ border-radius: 4px;
254
+ box-sizing: border-box;
255
+ }
256
+
257
+ .milkdown .editor figcaption,
258
+ .milkdown .editor [data-wechat-node="image-caption"] {
259
+ margin: 9px 0 0;
260
+ color: var(--wx-muted-color);
261
+ font-family: var(--wx-font-family);
262
+ font-size: 13px;
263
+ line-height: 1.62;
264
+ letter-spacing: 0.015em;
265
+ text-align: center;
266
+ }
267
+
268
+ .milkdown .editor blockquote {
269
+ margin: 1.48em 0;
270
+ padding: 0.82em 1em 0.82em 1.08em;
271
+ border-left: 3px solid var(--wx-blockquote-border, var(--wx-brand-accent));
272
+ border-radius: 0 5px 5px 0;
273
+ background-color: #fbfafb;
274
+ color: var(--wx-muted-color);
275
+ }
276
+
277
+ .milkdown .editor blockquote p {
278
+ margin: 0.35em 0;
279
+ color: var(--wx-muted-color);
280
+ font-size: 15px;
281
+ line-height: 1.78;
282
+ text-align: left;
283
+ }
284
+
285
+ .milkdown .editor ul,
286
+ .milkdown .editor ol {
287
+ margin: 1.05em 0 1.3em;
288
+ padding-left: 1.55em;
289
+ color: var(--wx-body-color);
290
+ list-style-position: outside;
291
+ }
292
+
293
+ .milkdown .editor ul {
294
+ list-style-type: disc;
295
+ }
296
+
297
+ .milkdown .editor ol {
298
+ list-style-type: decimal;
299
+ }
300
+
301
+ .milkdown .editor li {
302
+ margin: 0.42em 0;
303
+ padding-left: 0.12em;
304
+ color: var(--wx-body-color);
305
+ font-size: 16px;
306
+ line-height: 1.78;
307
+ overflow-wrap: break-word;
308
+ word-break: break-word;
309
+ }
310
+
311
+ .milkdown .editor li p {
312
+ margin: 0.18em 0;
313
+ line-height: 1.78;
314
+ text-align: left;
315
+ }
316
+
317
+ .milkdown .editor [data-wechat-node="task-list-item"] {
318
+ list-style: none;
319
+ }
320
+
321
+ .milkdown .editor [data-wechat-node="task-marker"] {
322
+ display: inline-block;
323
+ min-width: 1.35em;
324
+ color: var(--wx-brand-ink);
325
+ font-weight: 700;
326
+ }
327
+
328
+ .milkdown .editor table {
329
+ display: block;
330
+ width: 100%;
331
+ max-width: 100%;
332
+ margin: 1.5em 0;
333
+ border-collapse: collapse;
334
+ table-layout: auto;
335
+ overflow-x: auto;
336
+ box-sizing: border-box;
337
+ color: var(--wx-body-color);
338
+ font-size: 14px;
339
+ line-height: 1.62;
340
+ }
341
+
342
+ .milkdown .editor th,
343
+ .milkdown .editor td {
344
+ padding: 8px 9px;
345
+ border: 1px solid var(--wx-divider-color);
346
+ color: var(--wx-body-color);
347
+ text-align: left;
348
+ vertical-align: top;
349
+ overflow-wrap: break-word;
350
+ word-break: break-word;
351
+ }
352
+
353
+ .milkdown .editor th {
354
+ background-color: var(--wx-soft-surface);
355
+ color: var(--wx-brand-ink);
356
+ font-weight: 700;
357
+ }
358
+
359
+ .milkdown .editor th p,
360
+ .milkdown .editor td p {
361
+ margin: 0;
362
+ font-size: 14px;
363
+ line-height: 1.62;
364
+ text-align: left;
365
+ }
366
+
367
+ .milkdown .editor th p {
368
+ color: var(--wx-brand-ink);
369
+ }
370
+
371
+ /* 表头保持单行,超宽表格通过自身横向滚动。 */
372
+ .milkdown .editor th,
373
+ .milkdown .editor th p {
374
+ white-space: nowrap;
375
+ overflow-wrap: normal;
376
+ word-break: normal;
377
+ }
378
+
379
+ .milkdown .editor td p {
380
+ color: var(--wx-body-color);
381
+ }
382
+
383
+ .milkdown .editor hr {
384
+ display: block;
385
+ height: 0;
386
+ margin: 2.15em 0;
387
+ padding: 0;
388
+ border: 0;
389
+ border-top: 1px solid var(--wx-divider-color);
390
+ background: transparent;
391
+ }
392
+
393
+ .milkdown .editor [data-wechat-node="references"] {
394
+ margin-top: 2.6em;
395
+ padding-top: 1.05em;
396
+ border-top: 1px solid var(--wx-divider-color);
397
+ }
398
+
399
+ .milkdown .editor [data-wechat-node="references-title"] {
400
+ margin: 0 0 0.65em;
401
+ color: var(--wx-body-color);
402
+ font-size: 15px;
403
+ font-weight: 700;
404
+ line-height: 1.55;
405
+ text-align: left;
406
+ }
407
+
408
+ .milkdown .editor [data-wechat-node="references-list"] {
409
+ margin: 0;
410
+ padding-left: 1.5em;
411
+ }
412
+
413
+ .milkdown .editor [data-wechat-node="reference-item"] {
414
+ margin: 0.42em 0;
415
+ color: var(--wx-muted-color);
416
+ font-size: 12px;
417
+ line-height: 1.62;
418
+ overflow-wrap: break-word;
419
+ word-break: break-word;
420
+ }
421
+
422
+ .milkdown .editor [data-wechat-node="footer"] {
423
+ margin-top: 2.5em;
424
+ padding-top: 0.9em;
425
+ border-top: 1px solid var(--wx-divider-color);
426
+ text-align: center;
427
+ }
428
+
429
+ .milkdown .editor [data-wechat-node="footer-text"] {
430
+ margin: 0;
431
+ color: var(--wx-muted-color);
432
+ font-size: 12px;
433
+ line-height: 1.6;
434
+ letter-spacing: 0.08em;
435
+ text-align: center;
436
+ }
437
+
438
+ /*
439
+ * ==========================================================================
440
+ * Kairos Extended Article Components (Editorial Standard)
441
+ *
442
+ * 注:以下为作者 Kairos 个人公众号与 Milkdown 写作的标准组件排版样式。
443
+ * 宿主应用或用户可按需通过自定义 CSS 变量或选择器进行重写与覆盖。
444
+ * ==========================================================================
445
+ */
446
+
447
+ /* 1. 高亮标记 (Highlight Mark) */
448
+ .milkdown .editor mark {
449
+ background-color: #fef08a;
450
+ color: inherit;
451
+ padding: 0.1em 0.3em;
452
+ border-radius: 2px;
453
+ box-decoration-break: clone;
454
+ -webkit-box-decoration-break: clone;
455
+ }
456
+
457
+ /* 2. 提示卡片 (Callout GFM Alerts) */
458
+ .milkdown .editor section[data-wechat-node="callout"],
459
+ .milkdown .editor .wechat-callout {
460
+ margin: 1.6em 0;
461
+ padding: 14px 16px;
462
+ border-radius: 6px;
463
+ border-left-width: 4px;
464
+ border-left-style: solid;
465
+ border-left-color: #3b82f6;
466
+ background-color: rgba(59, 130, 246, 0.08);
467
+ box-sizing: border-box;
468
+ }
469
+ .milkdown .editor .wechat-callout-note,
470
+ .milkdown .editor section[data-callout-type="note"] {
471
+ border-left-color: #3b82f6 !important;
472
+ background-color: rgba(59, 130, 246, 0.08) !important;
473
+ }
474
+ .milkdown .editor .wechat-callout-tip,
475
+ .milkdown .editor section[data-callout-type="tip"] {
476
+ border-left-color: #10b981 !important;
477
+ background-color: rgba(16, 185, 129, 0.08) !important;
478
+ }
479
+ .milkdown .editor .wechat-callout-important,
480
+ .milkdown .editor section[data-callout-type="important"] {
481
+ border-left-color: #8b5cf6 !important;
482
+ background-color: rgba(139, 92, 246, 0.08) !important;
483
+ }
484
+ .milkdown .editor .wechat-callout-warning,
485
+ .milkdown .editor section[data-callout-type="warning"] {
486
+ border-left-color: #f59e0b !important;
487
+ background-color: rgba(245, 158, 11, 0.08) !important;
488
+ }
489
+ .milkdown .editor .wechat-callout-caution,
490
+ .milkdown .editor section[data-callout-type="caution"] {
491
+ border-left-color: #ef4444 !important;
492
+ background-color: rgba(239, 68, 68, 0.08) !important;
493
+ }
494
+ .milkdown .editor section[data-wechat-node="callout-header"],
495
+ .milkdown .editor .wechat-callout-header {
496
+ margin-bottom: 6px;
497
+ font-size: 14px;
498
+ font-weight: 700;
499
+ color: var(--wx-h2-color, #1f1b1c);
500
+ }
501
+ .milkdown .editor .wechat-callout-icon {
502
+ margin-right: 6px;
503
+ font-size: 15px;
504
+ display: inline-block;
505
+ vertical-align: middle;
506
+ }
507
+ .milkdown .editor .wechat-callout-title {
508
+ display: inline-block;
509
+ vertical-align: middle;
510
+ }
511
+ .milkdown .editor .wechat-callout p {
512
+ margin: 0.3em 0;
513
+ font-size: 14.5px;
514
+ line-height: 1.68;
515
+ }
516
+
517
+ /* 3. 键盘按键 (Keyboard Key) */
518
+ .milkdown .editor span[data-wechat-node="kbd"],
519
+ .milkdown .editor .wechat-kbd {
520
+ display: inline-block;
521
+ padding: 1.5px 5.5px;
522
+ font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace;
523
+ font-size: 0.82em;
524
+ font-weight: 500;
525
+ line-height: 1.35;
526
+ color: var(--wx-text-mid, #3c4043);
527
+ background-color: #f3f4f6;
528
+ border: 1px solid #d1d5db;
529
+ border-bottom-width: 2px;
530
+ border-radius: 4px;
531
+ box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
532
+ margin: 0 2px;
533
+ vertical-align: baseline;
534
+ }
535
+
536
+ /* 4. 状态徽章 (Status Badge) */
537
+ .milkdown .editor span[data-wechat-node="badge"],
538
+ .milkdown .editor .wechat-badge {
539
+ display: inline-block;
540
+ padding: 1.5px 7px;
541
+ font-size: 11px;
542
+ font-weight: 600;
543
+ line-height: 1.3;
544
+ border-radius: 9999px;
545
+ margin: 0 3px;
546
+ vertical-align: middle;
547
+ }
548
+ .milkdown .editor .wechat-badge-brand {
549
+ background-color: rgba(202, 96, 147, 0.12);
550
+ color: var(--wx-brand-accent, #ca6093);
551
+ }
552
+ .milkdown .editor .wechat-badge-success {
553
+ background-color: #dcfce7;
554
+ color: #15803d;
555
+ }
556
+ .milkdown .editor .wechat-badge-warning {
557
+ background-color: #fef3c7;
558
+ color: #b45309;
559
+ }
560
+ .milkdown .editor .wechat-badge-danger {
561
+ background-color: #fee2e2;
562
+ color: #b91c1c;
563
+ }
564
+ .milkdown .editor .wechat-badge-info {
565
+ background-color: #e0f2fe;
566
+ color: #0369a1;
567
+ }
568
+
569
+ /* 5. 篇章结构卡片 (Article Cards: Intro & CTA) */
570
+ .milkdown .editor section[data-wechat-node="article-card"],
571
+ .milkdown .editor .wechat-article-card {
572
+ margin: 1.8em 0;
573
+ padding: 16px 20px;
574
+ border-radius: 10px;
575
+ box-sizing: border-box;
576
+ overflow: hidden;
577
+ }
578
+ .milkdown .editor .wechat-article-card-intro {
579
+ background-color: var(--wx-soft-surface, #faf8f9);
580
+ border: 1px solid var(--wx-divider, #eae4e7);
581
+ }
582
+ .milkdown .editor .wechat-article-card-cta {
583
+ background-color: rgba(202, 96, 147, 0.04);
584
+ border: 1px dashed var(--wx-brand-accent, #ca6093);
585
+ text-align: center;
586
+ }
587
+ .milkdown .editor section[data-wechat-node="card-eyebrow"],
588
+ .milkdown .editor .wechat-card-eyebrow {
589
+ margin-bottom: 10px;
590
+ }
591
+ .milkdown .editor .wechat-article-card-cta section[data-wechat-node="card-eyebrow"],
592
+ .milkdown .editor .wechat-article-card-cta .wechat-card-eyebrow {
593
+ text-align: center;
594
+ }
595
+ .milkdown .editor span[data-wechat-node="card-eyebrow-badge"],
596
+ .milkdown .editor .wechat-card-eyebrow-badge {
597
+ display: inline-block;
598
+ padding: 2px 8px;
599
+ border-radius: 4px;
600
+ background-color: rgba(202, 96, 147, 0.08);
601
+ color: var(--wx-brand-accent, #ca6093);
602
+ font-size: 11px;
603
+ font-weight: 700;
604
+ letter-spacing: 0.06em;
605
+ line-height: 1.5;
606
+ }
607
+ .milkdown .editor .wechat-card-eyebrow-icon {
608
+ margin-right: 4px;
609
+ font-size: 12px;
610
+ display: inline-block;
611
+ vertical-align: middle;
612
+ }
613
+ .milkdown .editor .wechat-card-eyebrow-label {
614
+ display: inline-block;
615
+ vertical-align: middle;
616
+ }
617
+ .milkdown .editor .wechat-article-card p {
618
+ margin: 0.4em 0;
619
+ font-size: 13px;
620
+ line-height: 1.72;
621
+ color: var(--wx-text-soft, #555555);
622
+ letter-spacing: 0.02em;
623
+ }
624
+ .milkdown .editor p[data-wechat-node="intro-meta"],
625
+ .milkdown .editor .wechat-intro-meta {
626
+ margin: 4px 0 10px 0 !important;
627
+ padding-bottom: 8px;
628
+ border-bottom: 1px solid var(--wx-divider, #f0ebed);
629
+ font-size: 12px !important;
630
+ color: var(--wx-muted-color, #756b6e) !important;
631
+ line-height: 1.5 !important;
632
+ }
633
+ .milkdown .editor p[data-wechat-node="intro-meta"] strong,
634
+ .milkdown .editor .wechat-intro-meta strong {
635
+ color: var(--wx-brand-accent, #ca6093);
636
+ font-weight: 600;
637
+ }
638
+ .milkdown .editor p[data-wechat-node="intro-guide"],
639
+ .milkdown .editor .wechat-intro-guide {
640
+ margin-top: 10px !important;
641
+ padding-top: 8px;
642
+ border-top: 1px dashed rgba(202, 96, 147, 0.25);
643
+ font-size: 12px !important;
644
+ color: var(--wx-brand-accent, #ca6093) !important;
645
+ line-height: 1.6 !important;
646
+ }
@@ -0,0 +1,2 @@
1
+ @import "./tokens-default.css";
2
+ @import "./article.css";
@@ -0,0 +1,30 @@
1
+ /*
2
+ * Default editorial tokens (sage-journal / default account) by Kairos.
3
+ *
4
+ * Export path injects the same variables via buildWechatThemeCss(themes.ts).
5
+ * Live hosts (Nezus editor) should load this file so article.css resolves.
6
+ *
7
+ * Override by redefining --wx-* on a parent or on `.milkdown .editor`.
8
+ */
9
+
10
+ .milkdown .editor {
11
+ --wx-font-family: -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB",
12
+ "Microsoft YaHei", "Noto Sans CJK SC", "Source Han Sans SC", sans-serif;
13
+ --wx-body-color: #292526;
14
+ --wx-muted-color: #6f696b;
15
+ /* Heading chroma: H2 slightly deeper than body; H3 between body and muted.
16
+ * Prefer color hierarchy over font-weight 600 (unreliable on many CJK system fonts / WeChat). */
17
+ --wx-h2-color: #1f1b1c;
18
+ --wx-h3-color: #5c5658;
19
+ --wx-brand-ink: #a94473;
20
+ --wx-brand-accent: #ca6093;
21
+ --wx-brand-bg: rgba(202, 96, 147, 0.08);
22
+ --wx-divider-color: #e2dcdf;
23
+ --wx-divider: #eae4e7;
24
+ --wx-blockquote-border: #ca6093;
25
+ --wx-body-line-height: 1.84;
26
+ --wx-body-letter-spacing: 0.012em;
27
+ --wx-soft-surface: #faf8f9;
28
+ --wx-text-soft: #555555;
29
+ --wx-text-mid: #3c4043;
30
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@akairos/myno",
3
- "version": "0.3.0",
3
+ "version": "0.3.2",
4
4
  "description": "WeChat article WYSIWYG editor & visual typography studio",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -30,11 +30,15 @@
30
30
  "types": "./dist/editor/article-menu.d.ts",
31
31
  "default": "./dist/editor/article-menu.js"
32
32
  },
33
- "./style": "./dist/style.css"
33
+ "./style": "./dist/styles/index.css",
34
+ "./article.css": "./dist/styles/article.css",
35
+ "./tokens-default.css": "./dist/styles/tokens-default.css"
34
36
  },
35
37
  "files": [
36
38
  "dist",
37
- "README.md"
39
+ "README.md",
40
+ "LICENSE",
41
+ "CHANGELOG.md"
38
42
  ],
39
43
  "scripts": {
40
44
  "dev": "vite",
@@ -48,7 +52,6 @@
48
52
  },
49
53
  "dependencies": {
50
54
  "@akairos/milkdown-article-plugins": "^0.1.3",
51
- "@akairos/milkdown-article-style": "^0.1.1",
52
55
  "juice": "^12.2.0"
53
56
  },
54
57
  "devDependencies": {