@scribdown/ui-handdrawn 0.1.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 (37) hide show
  1. package/LICENSE +21 -0
  2. package/package.json +36 -0
  3. package/src/assets/blockquote-bar.svg +68 -0
  4. package/src/assets/delete.svg +64 -0
  5. package/src/assets/heading-mark.svg +60 -0
  6. package/src/assets/rect-shadow.svg +22 -0
  7. package/src/assets/rough-line-dash-horizontal.svg +32 -0
  8. package/src/assets/rough-line-dash-vertical.svg +32 -0
  9. package/src/assets/rough-line-horizontal.svg +6 -0
  10. package/src/assets/rough-line-shadow-horizontal.svg +80 -0
  11. package/src/assets/rough-line-shadow-vertical.svg +83 -0
  12. package/src/assets/rough-line-vertical.svg +6 -0
  13. package/src/assets/tag-body-hatch.svg +51 -0
  14. package/src/assets/tag-body-outline.svg +52 -0
  15. package/src/assets/tag-left-line.svg +50 -0
  16. package/src/assets/tag-right-hatch.svg +51 -0
  17. package/src/assets/tag-right-outline.svg +52 -0
  18. package/src/assets/toc-branch-toggle.svg +54 -0
  19. package/src/assets/underline-stroke.svg +44 -0
  20. package/src/styles/blockquote.css +40 -0
  21. package/src/styles/code.css +573 -0
  22. package/src/styles/details.css +29 -0
  23. package/src/styles/frame.css +71 -0
  24. package/src/styles/host-reset.css +46 -0
  25. package/src/styles/image-viewer.css +213 -0
  26. package/src/styles/image.css +232 -0
  27. package/src/styles/inline.css +101 -0
  28. package/src/styles/lists.css +126 -0
  29. package/src/styles/markdown.css +270 -0
  30. package/src/styles/mermaid.css +405 -0
  31. package/src/styles/shell.css +24 -0
  32. package/src/styles/table.css +252 -0
  33. package/src/styles/toc.css +163 -0
  34. package/src/styles/tokens.css +140 -0
  35. package/src/styles/toolbar.css +491 -0
  36. package/src/styles/video.css +195 -0
  37. package/src/styles.css +59 -0
@@ -0,0 +1,46 @@
1
+ /* 宿主默认样式隔离:
2
+ * VS Code Webview 会注入默认层(如 code/pre/a 等基础样式),
3
+ * 这里先把常见标签拉回到容器基线,再交给后续分模块样式接管。
4
+ */
5
+ .scribdown-markdown {
6
+ color: var(--scribdown-color-text-primary);
7
+ font-family: var(--scribdown-font-body);
8
+ }
9
+
10
+ /* 关键步骤:统一文本色与字体继承,抹平宿主兜底差异。 */
11
+ .scribdown-markdown :where(
12
+ p,
13
+ ul,
14
+ ol,
15
+ li,
16
+ blockquote,
17
+ pre,
18
+ code,
19
+ a,
20
+ strong,
21
+ em,
22
+ del,
23
+ s,
24
+ mark,
25
+ details,
26
+ summary,
27
+ table,
28
+ thead,
29
+ tbody,
30
+ tr,
31
+ th,
32
+ td,
33
+ img,
34
+ figure,
35
+ figcaption,
36
+ hr
37
+ ) {
38
+ color: inherit;
39
+ font-family: inherit;
40
+ }
41
+
42
+ /* 宿主常见的 pre/code 背景与边框兜底清空,避免和手绘样式叠加。 */
43
+ .scribdown-markdown :where(pre, code) {
44
+ border: 0;
45
+ background: transparent;
46
+ }
@@ -0,0 +1,213 @@
1
+ /* ImageViewer:运行时注入的全图查看层,支持按钮和快捷键缩放。 */
2
+ .scribdown-image-viewer {
3
+ width: 100vw;
4
+ max-width: none;
5
+ height: 100dvh;
6
+ max-height: none;
7
+ margin: 0;
8
+ padding: 0;
9
+ overflow: hidden;
10
+ border: 0;
11
+ background:
12
+ radial-gradient(
13
+ circle at 16% 18%,
14
+ color-mix(in srgb, var(--scribdown-color-bg) 10%, transparent) 0 1px,
15
+ transparent 1.7px
16
+ ),
17
+ color-mix(in srgb, var(--scribdown-color-text-primary) 84%, transparent);
18
+ color: var(--scribdown-color-text-primary);
19
+ }
20
+
21
+ .scribdown-image-viewer:not([open]) {
22
+ display: none;
23
+ }
24
+
25
+ .scribdown-image-viewer[open] {
26
+ display: grid;
27
+ grid-template-rows: auto minmax(0, 1fr);
28
+ }
29
+
30
+ .scribdown-image-viewer::backdrop {
31
+ background: color-mix(in srgb, var(--scribdown-color-text-primary) 78%, transparent);
32
+ backdrop-filter: blur(2px);
33
+ }
34
+
35
+ .scribdown-image-viewer__chrome {
36
+ position: relative;
37
+ z-index: 2;
38
+ display: grid;
39
+ grid-template-columns: minmax(0, 1fr) auto;
40
+ gap: var(--scribdown-space-3);
41
+ align-items: center;
42
+ padding: var(--scribdown-space-3) var(--scribdown-space-4);
43
+ background:
44
+ radial-gradient(circle at 18px 16px, var(--scribdown-paper-grain) 0 1px, transparent 1.6px),
45
+ color-mix(in srgb, var(--scribdown-color-surface) 94%, transparent);
46
+ background-size:
47
+ 32px 29px,
48
+ auto;
49
+ box-shadow: 0 4px 0 color-mix(in srgb, var(--scribdown-color-text-primary) 14%, transparent);
50
+ }
51
+
52
+ .scribdown-image-viewer__caption-group {
53
+ min-width: 0;
54
+ display: flex;
55
+ flex-direction: column;
56
+ gap: var(--scribdown-space-1);
57
+ }
58
+
59
+ .scribdown-image-viewer__caption {
60
+ min-width: 0;
61
+ margin: 0;
62
+ overflow: hidden;
63
+ color: var(--scribdown-color-text-primary);
64
+ font-family: var(--scribdown-font-heading);
65
+ font-size: 22px;
66
+ font-weight: 700;
67
+ line-height: 1.25;
68
+ text-overflow: ellipsis;
69
+ white-space: nowrap;
70
+ }
71
+
72
+ .scribdown-image-viewer__hint {
73
+ margin: 0;
74
+ color: color-mix(in srgb, var(--scribdown-color-text-primary) 60%, transparent);
75
+ font-family: var(--scribdown-font-code);
76
+ font-size: 12px;
77
+ line-height: 1.4;
78
+ letter-spacing: 0.02em;
79
+ }
80
+
81
+ .scribdown-image-viewer__controls {
82
+ display: inline-flex;
83
+ align-items: center;
84
+ gap: var(--scribdown-space-2);
85
+ }
86
+
87
+ .scribdown-image-viewer__button {
88
+ display: inline-flex;
89
+ align-items: center;
90
+ justify-content: center;
91
+ width: 36px;
92
+ height: 36px;
93
+ padding: 0;
94
+ border: 1px solid color-mix(in srgb, var(--scribdown-color-border) 72%, transparent);
95
+ border-radius: 8px 10px 9px 11px;
96
+ background: color-mix(
97
+ in srgb,
98
+ var(--scribdown-color-surface) 88%,
99
+ var(--scribdown-color-mark) 12%
100
+ );
101
+ box-shadow: var(--scribdown-shadow-sm);
102
+ color: var(--scribdown-color-text-primary);
103
+ cursor: pointer;
104
+ font-family: var(--scribdown-font-code);
105
+ font-size: 16px;
106
+ font-weight: 700;
107
+ line-height: 1;
108
+ }
109
+
110
+ .scribdown-image-viewer__button:hover {
111
+ background: color-mix(
112
+ in srgb,
113
+ var(--scribdown-color-surface) 78%,
114
+ var(--scribdown-color-mark) 22%
115
+ );
116
+ }
117
+
118
+ .scribdown-image-viewer__button:focus-visible {
119
+ outline: 2px solid var(--scribdown-color-accent);
120
+ outline-offset: 3px;
121
+ }
122
+
123
+ .scribdown-image-viewer__button:disabled {
124
+ box-shadow: none;
125
+ cursor: default;
126
+ opacity: 0.46;
127
+ }
128
+
129
+ .scribdown-image-viewer__button--close {
130
+ background: color-mix(
131
+ in srgb,
132
+ var(--scribdown-color-surface) 82%,
133
+ var(--scribdown-color-danger) 18%
134
+ );
135
+ }
136
+
137
+ .scribdown-image-viewer__zoom-value {
138
+ display: inline-flex;
139
+ align-items: center;
140
+ justify-content: center;
141
+ min-width: 56px;
142
+ height: 36px;
143
+ color: var(--scribdown-color-text-primary);
144
+ font-family: var(--scribdown-font-code);
145
+ font-size: 14px;
146
+ font-weight: 700;
147
+ line-height: 1;
148
+ }
149
+
150
+ .scribdown-image-viewer__viewport {
151
+ min-width: 0;
152
+ min-height: 0;
153
+ display: flex;
154
+ /* safe center:图片尺寸 ≤ 视口时居中;溢出时自动退化为 start,避免裁掉头部不可滚动。 */
155
+ align-items: safe center;
156
+ justify-content: safe center;
157
+ padding: var(--scribdown-space-5);
158
+ overflow: auto;
159
+ overscroll-behavior: contain;
160
+ touch-action: none;
161
+ }
162
+
163
+ .scribdown-image-viewer--zoomed .scribdown-image-viewer__viewport {
164
+ cursor: grab;
165
+ }
166
+
167
+ .scribdown-image-viewer--zoomed.scribdown-image-viewer--dragging .scribdown-image-viewer__viewport {
168
+ cursor: grabbing;
169
+ user-select: none;
170
+ }
171
+
172
+ .scribdown-image-viewer__image {
173
+ flex: 0 0 auto;
174
+ max-width: none;
175
+ max-height: none;
176
+ object-fit: contain;
177
+ background: var(--scribdown-color-surface);
178
+ border-radius: 6px 7px 5px 6px;
179
+ box-shadow: 6px 8px 0 color-mix(in srgb, var(--scribdown-color-text-primary) 26%, transparent);
180
+ user-select: none;
181
+ -webkit-user-drag: none;
182
+ }
183
+
184
+ .scribdown-image-viewer--dragging .scribdown-image-viewer__image {
185
+ pointer-events: none;
186
+ }
187
+
188
+ @media (max-width: 640px) {
189
+ .scribdown-image-viewer__chrome {
190
+ grid-template-columns: 1fr;
191
+ gap: var(--scribdown-space-2);
192
+ padding: var(--scribdown-space-3);
193
+ }
194
+
195
+ .scribdown-image-viewer__controls {
196
+ justify-content: space-between;
197
+ width: 100%;
198
+ }
199
+
200
+ .scribdown-image-viewer__button {
201
+ width: 34px;
202
+ height: 34px;
203
+ }
204
+
205
+ .scribdown-image-viewer__hint {
206
+ font-size: 11px;
207
+ white-space: normal;
208
+ }
209
+
210
+ .scribdown-image-viewer__viewport {
211
+ padding: var(--scribdown-space-3);
212
+ }
213
+ }
@@ -0,0 +1,232 @@
1
+ /* ImageRenderer:块级图片转换为 figure;边框沿用 blockquote::after 的 frame-edge 方案,
2
+ 通过 mask + background-color 让描边色由 token 接管。 */
3
+ .scribdown-markdown .scribdown-image-figure {
4
+ width: min(100%, 720px);
5
+ margin: 0 auto var(--scribdown-space-3);
6
+ }
7
+
8
+ .scribdown-markdown .scribdown-image-frame {
9
+ /* 关键步骤:本地覆盖 frame-edge-color,避免和 blockquote 的 accent 撞色。 */
10
+ --scribdown-frame-edge-color: var(--scribdown-color-text-secondary);
11
+
12
+ position: relative;
13
+ isolation: isolate;
14
+ display: block;
15
+ box-sizing: border-box;
16
+ width: 100%;
17
+ padding: 6px;
18
+ overflow: visible;
19
+ background-color: color-mix(
20
+ in srgb,
21
+ var(--scribdown-color-surface) 92%,
22
+ var(--scribdown-color-border) 8%
23
+ );
24
+ background-image: var(--scribdown-code-block-rect-shadow);
25
+ background-position: left top;
26
+ background-repeat: repeat;
27
+ background-size: auto;
28
+ /* 关键步骤:保留视觉为方形,仅给 box-shadow 一个手绘风格的非对称圆角。 */
29
+ border-radius: var(--scribdown-radius-sm);
30
+ box-shadow: none;
31
+ transition: box-shadow var(--scribdown-duration-base) var(--scribdown-easing-standard);
32
+ }
33
+
34
+ .scribdown-markdown .scribdown-image-frame:hover {
35
+ box-shadow: var(--scribdown-shadow-md);
36
+ }
37
+
38
+ /* 关键步骤:横/纵向 frame-edge SVG 四边平铺,描边色由 background-color 接管。 */
39
+ .scribdown-markdown .scribdown-image-frame::after {
40
+ content: "";
41
+ position: absolute;
42
+ z-index: 2;
43
+ inset: 0;
44
+ pointer-events: none;
45
+ background-image:
46
+ var(--scribdown-frame-edge-horizontal), var(--scribdown-frame-edge-horizontal),
47
+ var(--scribdown-frame-edge-vertical), var(--scribdown-frame-edge-vertical);
48
+ background-position:
49
+ left top,
50
+ 20% bottom,
51
+ left 40%,
52
+ right top;
53
+ background-repeat: repeat-x, repeat-x, repeat-y, repeat-y;
54
+ background-size:
55
+ var(--scribdown-frame-edge-tile-horizontal), var(--scribdown-frame-edge-tile-horizontal),
56
+ var(--scribdown-frame-edge-tile-vertical), var(--scribdown-frame-edge-tile-vertical);
57
+ }
58
+
59
+ @supports ((mask-image: url("")) or (-webkit-mask-image: url(""))) {
60
+ .scribdown-markdown .scribdown-image-frame::after {
61
+ background-color: var(--scribdown-frame-edge-color);
62
+ background-image: none;
63
+ -webkit-mask-image:
64
+ var(--scribdown-frame-edge-horizontal), var(--scribdown-frame-edge-horizontal),
65
+ var(--scribdown-frame-edge-vertical), var(--scribdown-frame-edge-vertical);
66
+ -webkit-mask-position:
67
+ left top,
68
+ 20% bottom,
69
+ left 40%,
70
+ right top;
71
+ -webkit-mask-repeat: repeat-x, repeat-x, repeat-y, repeat-y;
72
+ -webkit-mask-size:
73
+ var(--scribdown-frame-edge-tile-horizontal), var(--scribdown-frame-edge-tile-horizontal),
74
+ var(--scribdown-frame-edge-tile-vertical), var(--scribdown-frame-edge-tile-vertical);
75
+ -webkit-mask-mode: alpha, alpha, alpha, alpha;
76
+ mask-image:
77
+ var(--scribdown-frame-edge-horizontal), var(--scribdown-frame-edge-horizontal),
78
+ var(--scribdown-frame-edge-vertical), var(--scribdown-frame-edge-vertical);
79
+ mask-position:
80
+ left top,
81
+ 20% bottom,
82
+ left 40%,
83
+ right top;
84
+ mask-repeat: repeat-x, repeat-x, repeat-y, repeat-y;
85
+ mask-size:
86
+ var(--scribdown-frame-edge-tile-horizontal), var(--scribdown-frame-edge-tile-horizontal),
87
+ var(--scribdown-frame-edge-tile-vertical), var(--scribdown-frame-edge-tile-vertical);
88
+ mask-mode: alpha, alpha, alpha, alpha;
89
+ }
90
+ }
91
+
92
+ .scribdown-markdown .scribdown-image {
93
+ display: block;
94
+ width: 100%;
95
+ max-width: 100%;
96
+ height: auto;
97
+ background: color-mix(in srgb, var(--scribdown-color-surface) 86%, transparent);
98
+ border: 0;
99
+ box-shadow: none;
100
+ cursor: zoom-in;
101
+ }
102
+
103
+ .scribdown-markdown .scribdown-image:focus-visible {
104
+ outline: 3px solid color-mix(in srgb, var(--scribdown-color-accent) 72%, transparent);
105
+ outline-offset: 4px;
106
+ }
107
+
108
+ .scribdown-markdown a .scribdown-image {
109
+ cursor: pointer;
110
+ }
111
+
112
+ .scribdown-markdown .scribdown-image-caption {
113
+ margin-top: var(--scribdown-space-2);
114
+ color: var(--scribdown-color-text-primary);
115
+ font-family: var(--scribdown-font-heading);
116
+ font-size: 20px;
117
+ font-weight: 700;
118
+ line-height: 1.3;
119
+ text-align: center;
120
+ }
121
+
122
+ .scribdown-markdown .scribdown-image-figure + p:has(> em:only-child) {
123
+ width: min(100%, 720px);
124
+ margin: calc(0px - var(--scribdown-space-1)) auto var(--scribdown-space-3);
125
+ color: var(--scribdown-color-text-primary);
126
+ font-size: 15px;
127
+ line-height: 1.55;
128
+ text-align: left;
129
+ }
130
+
131
+ .scribdown-markdown .scribdown-image-fallback {
132
+ display: none;
133
+ }
134
+
135
+ .scribdown-markdown .scribdown-image-frame--failed {
136
+ display: flex;
137
+ align-items: center;
138
+ justify-content: center;
139
+ min-height: 144px;
140
+ padding: var(--scribdown-space-4);
141
+ background:
142
+ radial-gradient(circle at 18px 20px, var(--scribdown-paper-grain) 0 1px, transparent 1.6px),
143
+ color-mix(in srgb, var(--scribdown-color-surface) 88%, transparent);
144
+ }
145
+
146
+ .scribdown-markdown .scribdown-image-frame--failed::after {
147
+ background-image:
148
+ var(--scribdown-rough-line-dash-horizontal),
149
+ var(--scribdown-rough-line-dash-horizontal), var(--scribdown-rough-line-dash-vertical),
150
+ var(--scribdown-rough-line-dash-vertical);
151
+ background-size:
152
+ 64px 8px,
153
+ 64px 8px,
154
+ 8px 64px,
155
+ 8px 64px;
156
+ }
157
+
158
+ .scribdown-markdown .scribdown-image-frame--failed .scribdown-image {
159
+ display: none;
160
+ }
161
+
162
+ .scribdown-markdown .scribdown-image-frame--failed .scribdown-image-fallback {
163
+ position: relative;
164
+ z-index: 1;
165
+ display: flex;
166
+ align-items: center;
167
+ flex-direction: column;
168
+ max-width: 100%;
169
+ color: var(--scribdown-color-text-primary);
170
+ text-align: center;
171
+ }
172
+
173
+ .scribdown-markdown .scribdown-image-fallback-icon {
174
+ position: relative;
175
+ display: block;
176
+ box-sizing: border-box;
177
+ width: 58px;
178
+ height: 46px;
179
+ margin-bottom: var(--scribdown-space-3);
180
+ border: 2px solid var(--scribdown-color-text-primary);
181
+ background:
182
+ linear-gradient(
183
+ 42deg,
184
+ transparent 0 47%,
185
+ var(--scribdown-color-accent) 48% 52%,
186
+ transparent 53% 100%
187
+ ),
188
+ linear-gradient(
189
+ 138deg,
190
+ transparent 0 47%,
191
+ var(--scribdown-color-accent) 48% 52%,
192
+ transparent 53% 100%
193
+ ),
194
+ color-mix(in srgb, var(--scribdown-color-surface) 78%, var(--scribdown-color-accent) 8%);
195
+ transform: rotate(-1.5deg);
196
+ }
197
+
198
+ .scribdown-markdown .scribdown-image-fallback-icon::before {
199
+ content: "";
200
+ position: absolute;
201
+ right: 8px;
202
+ top: 7px;
203
+ width: 12px;
204
+ height: 12px;
205
+ border: 2px solid var(--scribdown-color-accent);
206
+ border-radius: 50%;
207
+ }
208
+
209
+ .scribdown-markdown .scribdown-image-fallback-text {
210
+ font-family: var(--scribdown-font-heading);
211
+ font-size: 20px;
212
+ font-weight: 700;
213
+ line-height: 1.25;
214
+ }
215
+
216
+ .scribdown-markdown .scribdown-image-fallback-source {
217
+ max-width: 100%;
218
+ margin-top: 4px;
219
+ overflow-wrap: anywhere;
220
+ color: var(--scribdown-color-text-secondary);
221
+ font-family: var(--scribdown-font-code);
222
+ font-size: 13px;
223
+ line-height: 1.4;
224
+ }
225
+
226
+ .scribdown-markdown :not(.scribdown-image-frame) > img {
227
+ max-width: 720px;
228
+ width: 100%;
229
+ height: auto;
230
+ background: var(--scribdown-color-surface);
231
+ border-radius: var(--scribdown-radius-md);
232
+ }
@@ -0,0 +1,101 @@
1
+ /* Delete:SVG 笔触替代浏览器默认直线,避免删除线过硬。 */
2
+ .scribdown-markdown del,
3
+ .scribdown-markdown s {
4
+ --scribdown-delete-stroke: url("../assets/delete.svg");
5
+
6
+ position: relative;
7
+ color: var(--scribdown-color-text-secondary);
8
+ text-decoration: none;
9
+ background-image: var(--scribdown-delete-stroke);
10
+ background-repeat: no-repeat;
11
+ background-position: 50% 58%;
12
+ background-size: 100% 0.95em;
13
+ -webkit-box-decoration-break: clone;
14
+ box-decoration-break: clone;
15
+ }
16
+
17
+ /* Delete overlay:让删除笔触压在文字上方,避免被字形遮住。 */
18
+ .scribdown-markdown del::after,
19
+ .scribdown-markdown s::after {
20
+ content: "";
21
+ position: absolute;
22
+ z-index: 1;
23
+ left: -0.08em;
24
+ right: -0.08em;
25
+ top: 50%;
26
+ height: 0.95em;
27
+ pointer-events: none;
28
+ background-image: var(--scribdown-delete-stroke);
29
+ background-repeat: no-repeat;
30
+ background-size: 100% 100%;
31
+ transform: translateY(-50%);
32
+ }
33
+
34
+ /* LinkRenderer:独立 link token,区分 default / hover / visited / focus-visible */
35
+ .scribdown-markdown a {
36
+ color: var(--scribdown-color-link);
37
+ text-decoration: none;
38
+ transition: opacity var(--scribdown-duration-fast) var(--scribdown-easing-standard);
39
+ }
40
+
41
+ .scribdown-markdown a:visited {
42
+ color: var(--scribdown-color-link-visited);
43
+ }
44
+
45
+ .scribdown-markdown a:hover {
46
+ opacity: 0.8;
47
+ }
48
+
49
+ .scribdown-markdown a:focus-visible {
50
+ outline: 2px solid var(--scribdown-color-link);
51
+ outline-offset: 2px;
52
+ border-radius: 2px;
53
+ }
54
+
55
+ /* Kbd:手绘风键帽,圆角矩形 + 微阴影,跟随正文字号自适应。 */
56
+ .scribdown-markdown kbd {
57
+ display: inline-block;
58
+ min-width: 1.4em;
59
+ padding: 1px 7px 2px;
60
+ margin: 0 2px;
61
+ vertical-align: baseline;
62
+ font-family: var(--scribdown-font-code);
63
+ font-size: 0.86em;
64
+ font-weight: 600;
65
+ line-height: 1.2;
66
+ color: var(--scribdown-color-text-primary);
67
+ background: color-mix(
68
+ in srgb,
69
+ var(--scribdown-color-surface) 88%,
70
+ var(--scribdown-color-border) 12%
71
+ );
72
+ border: 1px solid color-mix(in srgb, var(--scribdown-color-border) 72%, transparent);
73
+ border-bottom-width: 2px;
74
+ border-radius: 5px 6px 5px 7px;
75
+ box-shadow:
76
+ inset 0 -1px 0 color-mix(in srgb, var(--scribdown-color-border) 28%, transparent),
77
+ 1px 1px 0 color-mix(in srgb, var(--scribdown-color-border) 22%, transparent);
78
+ text-align: center;
79
+ white-space: nowrap;
80
+ }
81
+
82
+ /* 嵌套:避免链接 / mark 内部的 kbd 与父级配色冲突。 */
83
+ .scribdown-markdown a kbd,
84
+ .scribdown-markdown mark kbd {
85
+ color: inherit;
86
+ }
87
+
88
+ /* mark 高亮 */
89
+ .scribdown-markdown mark {
90
+ background: linear-gradient(
91
+ 92deg,
92
+ transparent 0 3%,
93
+ color-mix(in srgb, var(--scribdown-color-mark) 68%, transparent) 8% 90%,
94
+ transparent 97% 100%
95
+ );
96
+ color: var(--scribdown-color-text-primary);
97
+ border-radius: var(--scribdown-radius-sm);
98
+ padding: 0 3px;
99
+ -webkit-box-decoration-break: clone;
100
+ box-decoration-break: clone;
101
+ }
@@ -0,0 +1,126 @@
1
+ /* ListRenderer:保留有序列表语义编号,只替换无序列表的浏览器默认 bullet。 */
2
+ .scribdown-markdown ul:not(.scribdown-toc-list) {
3
+ margin: 0 0 var(--scribdown-space-3);
4
+ padding-left: 0;
5
+ list-style: none;
6
+ }
7
+
8
+ .scribdown-markdown ol:not(.scribdown-toc-list) {
9
+ margin: 0 0 var(--scribdown-space-3);
10
+ padding-left: 0;
11
+ list-style: none;
12
+ /* 启用有序列表序号计数器,配合 ::before 渲染手绘字体的数字。 */
13
+ counter-reset: scribdown-ol-counter;
14
+ }
15
+
16
+ .scribdown-markdown li:not(.scribdown-toc-item) {
17
+ position: relative;
18
+ margin-bottom: var(--scribdown-space-1);
19
+ }
20
+
21
+ .scribdown-markdown ul:not(.scribdown-toc-list) > li:not(.scribdown-toc-item) {
22
+ padding-left: 30px;
23
+ }
24
+
25
+ .scribdown-markdown ol:not(.scribdown-toc-list) > li:not(.scribdown-toc-item) {
26
+ padding-left: 32px;
27
+ counter-increment: scribdown-ol-counter;
28
+ }
29
+
30
+ .scribdown-markdown ol:not(.scribdown-toc-list) > li:not(.scribdown-toc-item)::marker {
31
+ /* 自定义 ::before 渲染数字,隐藏浏览器默认 marker,避免数字重复。 */
32
+ content: none;
33
+ }
34
+
35
+ .scribdown-markdown ol:not(.scribdown-toc-list) > li:not(.scribdown-toc-item)::before {
36
+ content: counter(scribdown-ol-counter) ".";
37
+ position: absolute;
38
+ top: 0;
39
+ left: 0;
40
+ min-width: 26px;
41
+ color: var(--scribdown-color-warning);
42
+ font-family: "Caveat", "Comic Sans MS", "Bradley Hand", "Segoe Print", "LXGW WenKai",
43
+ var(--scribdown-font-heading);
44
+ font-size: 22px;
45
+ font-style: normal;
46
+ font-weight: 700;
47
+ line-height: 1.2;
48
+ text-align: left;
49
+ text-shadow: 0.7px 0 color-mix(in srgb, var(--scribdown-color-warning) 24%, transparent);
50
+ transform: rotate(-4deg);
51
+ }
52
+
53
+ .scribdown-markdown ol:not(.scribdown-toc-list) > li:not(.scribdown-toc-item):nth-child(2n)::before {
54
+ transform: rotate(3deg) translateY(1px);
55
+ }
56
+
57
+ .scribdown-markdown li:not(.scribdown-toc-item) > ul,
58
+ .scribdown-markdown li:not(.scribdown-toc-item) > ol {
59
+ margin-top: var(--scribdown-space-2);
60
+ margin-bottom: var(--scribdown-space-2);
61
+ }
62
+
63
+ .scribdown-markdown ul:not(.scribdown-toc-list) > li:not(.scribdown-toc-item)::before {
64
+ content: "";
65
+ position: absolute;
66
+ top: 0.72em;
67
+ left: 6px;
68
+ width: 11px;
69
+ height: 9px;
70
+ border-radius: 54% 46% 58% 42%;
71
+ background:
72
+ radial-gradient(
73
+ circle at 36% 34%,
74
+ color-mix(in srgb, var(--scribdown-color-surface) 40%, transparent) 0 1.2px,
75
+ transparent 1.7px
76
+ ),
77
+ var(--scribdown-color-accent);
78
+ box-shadow: 0 1px 0 color-mix(in srgb, var(--scribdown-color-warning) 34%, transparent);
79
+ transform: rotate(-8deg);
80
+ }
81
+
82
+ .scribdown-markdown ul:not(.scribdown-toc-list) > li:nth-child(2n)::before {
83
+ transform: rotate(7deg) translateY(1px);
84
+ }
85
+
86
+ .scribdown-markdown ul:not(.scribdown-toc-list) ul > li:not(.scribdown-toc-item)::before {
87
+ top: 0.78em;
88
+ width: 14px;
89
+ height: 5px;
90
+ border-radius: 999px;
91
+ transform: rotate(-3deg);
92
+ }
93
+
94
+ .scribdown-markdown .task-list-item::before {
95
+ content: none !important;
96
+ }
97
+
98
+ .scribdown-markdown .task-list-item input[type="checkbox"] {
99
+ position: absolute;
100
+ top: 0.58em;
101
+ left: 3px;
102
+ width: 16px;
103
+ height: 16px;
104
+ margin: 0;
105
+ appearance: none;
106
+ border: 2px solid var(--scribdown-color-accent);
107
+ border-radius: 4px 5px 3px 6px;
108
+ background: color-mix(in srgb, var(--scribdown-color-surface) 78%, transparent);
109
+ transform: rotate(-2deg);
110
+ }
111
+
112
+ .scribdown-markdown .task-list-item input[type="checkbox"]:checked::after {
113
+ content: "";
114
+ position: absolute;
115
+ top: -1px;
116
+ left: 2px;
117
+ width: 11px;
118
+ height: 7px;
119
+ border-bottom: 2px solid var(--scribdown-color-warning);
120
+ border-left: 2px solid var(--scribdown-color-warning);
121
+ transform: rotate(-45deg);
122
+ }
123
+
124
+ .scribdown-markdown .task-list-item:has(input[type="checkbox"]:checked) {
125
+ color: var(--scribdown-color-text-secondary);
126
+ }