wendang-react 0.6.3 → 0.6.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/NOTICE.md +1 -1
- package/README.md +133 -1
- package/dist/bindings/yjs.js +1 -5
- package/dist/chunks/AnchoredPanel-C7jMoPze.js +1 -0
- package/dist/chunks/DocumentExportMenu-CUMsgq3w.js +2 -0
- package/dist/chunks/Dropdown-D98tXfe0.js +3 -0
- package/dist/chunks/MindMapCanvas-C46Q5JBU.js +163 -0
- package/dist/chunks/MindMapViewer-C9zxZIW8.js +13 -0
- package/dist/chunks/SpreadsheetViewer-CoQ4VIgj.js +23 -0
- package/dist/chunks/code-highlight-BmaqTe1m.js +1 -30
- package/dist/chunks/code-highlight-engine-BFDzDPzy.js +1 -40
- package/dist/chunks/comment-hint-BhUxKjKK.js +14 -0
- package/dist/chunks/composition-state-Bl-U1R_2.js +1 -40
- package/dist/chunks/extensions-BefQ1tDm.js +14 -0
- package/dist/chunks/fuzzy-match-DYQR-4w2.js +1 -89
- package/dist/chunks/hooks-C53Dp0pr.js +1 -35
- package/dist/chunks/i18n-B0kCsIjc.js +2 -0
- package/dist/chunks/index-COeA2QcQ.js +15 -0
- package/dist/chunks/katex-WjrodtTU.js +1 -71
- package/dist/chunks/locale-DWpIJ_9X.js +1 -0
- package/dist/chunks/mind-map-controller-Ce76mETT.js +1 -0
- package/dist/chunks/mind-map-delete-CVsxdXfs.js +1 -31
- package/dist/chunks/mind-map-input-CEWRz_t6.js +1 -43
- package/dist/chunks/mind-topic-text-BHXkxexr.js +30 -0
- package/dist/chunks/popover-placement-D3xVYdkt.js +1 -47
- package/dist/chunks/worksheet-engine-c84sdD4N.js +1 -0
- package/dist/chunks/worksheet-preview-DsDVWxIM.js +1 -129
- package/dist/document/viewer.js +30 -289
- package/dist/document.js +120 -3811
- package/dist/export/json.js +1 -5
- package/dist/export/markdown.js +1 -2
- package/dist/export/mindmap.js +1 -2
- package/dist/export/pdf.js +1 -6
- package/dist/export/word.js +1 -2
- package/dist/export.js +1 -2
- package/dist/i18n.js +1 -0
- package/dist/index.js +1 -8
- package/dist/locales/en-US.js +1 -0
- package/dist/locales/es-ES.js +1 -0
- package/dist/locales/ja-JP.js +1 -0
- package/dist/locales/ko-KR.js +1 -0
- package/dist/locales/zh-CN.js +1 -0
- package/dist/locales/zh-TW.js +1 -0
- package/dist/mindmap/viewer.js +1 -6
- package/dist/mindmap.js +3 -123
- package/dist/shared.js +1 -52
- package/dist/spreadsheet/viewer.js +1 -5
- package/dist/spreadsheet/xlsx.js +1 -299
- package/dist/spreadsheet.js +2 -120
- package/dist/styles/callout.css +1 -34
- package/dist/styles/code-block.css +1 -58
- package/dist/styles/content-style.css +1 -619
- package/dist/styles/content-tokens.css +1 -29
- package/dist/styles/editor-interaction.css +1 -621
- package/dist/styles/file-video.css +1 -12
- package/dist/styles/image-preview.css +1 -103
- package/dist/styles/mind-map-block.css +1 -14
- package/dist/styles/mind-map-canvas.css +1 -80
- package/dist/styles/mind-map-comments.css +1 -93
- package/dist/styles/mind-map-details.css +1 -7
- package/dist/styles/mind-map-preview.css +1 -7
- package/dist/styles/mind-map-topic.css +1 -112
- package/dist/styles/page-picker.css +1 -47
- package/dist/styles/renderer.css +1 -45
- package/dist/styles/spreadsheet-editor.css +1 -3
- package/dist/styles/tokens.css +1 -142
- package/dist/styles/video-dialog.css +1 -41
- package/dist/styles/video-embed.css +1 -35
- package/dist/styles.css +1 -2655
- package/dist/types/editor/BlockAffordance.d.ts +5 -2
- package/dist/types/editor/CalloutView.d.ts +2 -1
- package/dist/types/editor/ImagePreview.d.ts +1 -1
- package/dist/types/editor/PagePicker.d.ts +1 -1
- package/dist/types/editor/extensions.d.ts +4 -1
- package/dist/types/engine/editor/block-commands.d.ts +1 -1
- package/dist/types/engine/editor/block-menu-hover.d.ts +16 -0
- package/dist/types/engine/editor/extensions/locale.d.ts +3 -0
- package/dist/types/engine/editor/nodes/image-nodeview.d.ts +1 -1
- package/dist/types/engine/editor/video-block-controls.d.ts +13 -0
- package/dist/types/engine/host.d.ts +60 -2
- package/dist/types/engine/renderer/attachments.d.ts +3 -3
- package/dist/types/engine/shared/video-feedback.d.ts +1 -1
- package/dist/types/engine/worksheets/worksheet-engine.d.ts +1 -0
- package/dist/types/engine/worksheets/worksheet-xlsx.d.ts +6 -1
- package/dist/types/host-types.d.ts +2 -60
- package/dist/types/host.d.ts +8 -1
- package/dist/types/i18n.d.ts +3 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/locales/en-US.d.ts +1 -0
- package/dist/types/locales/es-ES.d.ts +1 -0
- package/dist/types/locales/ja-JP.d.ts +1 -0
- package/dist/types/locales/ko-KR.d.ts +1 -0
- package/dist/types/locales/zh-CN.d.ts +1 -0
- package/dist/types/locales/zh-TW.d.ts +1 -0
- package/dist/types/renderer/media.d.ts +2 -1
- package/dist/types/spreadsheet/xlsx.d.ts +1 -1
- package/dist/types/wui/Dropdown.d.ts +2 -1
- package/dist/types/wui/index.d.ts +2 -1
- package/integrity.json +3140 -0
- package/package.json +15 -5
- package/verify-integrity.mjs +138 -0
- package/dist/chunks/AnchoredPanel-Cv4RURwF.js +0 -68
- package/dist/chunks/DocumentExportMenu-BrGipZ59.js +0 -75
- package/dist/chunks/MindMapCanvas-tkFBBs4g.js +0 -2090
- package/dist/chunks/MindMapViewer-DJrryb2Y.js +0 -180
- package/dist/chunks/SpreadsheetViewer-DxCxIUx_.js +0 -163
- package/dist/chunks/comment-hint-B9qcrqvn.js +0 -296
- package/dist/chunks/extensions-ByORRoRa.js +0 -4210
- package/dist/chunks/host-C-V688Rq.js +0 -197
- package/dist/chunks/index-DdfMnva8.js +0 -726
- package/dist/chunks/mind-map-controller-B6SxK3GZ.js +0 -479
- package/dist/chunks/mind-topic-text-DSyb95vL.js +0 -446
- package/dist/chunks/nodes-iKqTGr_N.js +0 -291
- package/dist/chunks/worksheet-engine-TJ54m0KC.js +0 -125
- package/third-party-notices/wendang-export@0.6.0-NOTICE.md.txt +0 -51
- package/third-party-notices/wendang-export@0.6.1-LICENSE.txt +0 -21
- package/third-party-notices/wendang-export@0.6.2-LICENSE.txt +0 -21
- package/third-party-notices/wendang-export@0.6.2-NOTICE.md.txt +0 -70
- /package/third-party-notices/{wendang-export@0.6.0-LICENSE.txt → wendang-export@0.6.4-LICENSE.txt} +0 -0
- /package/third-party-notices/{wendang-export@0.6.1-NOTICE.md.txt → wendang-export@0.6.4-NOTICE.md.txt} +0 -0
package/dist/styles.css
CHANGED
|
@@ -1,2655 +1 @@
|
|
|
1
|
-
/* Generated from wendang/shared CONTENT_PRESENTATION. */
|
|
2
|
-
.wendang {
|
|
3
|
-
--content-font-size: 16px;
|
|
4
|
-
--content-line-height: 1.75;
|
|
5
|
-
--content-text-color: var(--color-text);
|
|
6
|
-
--content-heading-color: #101828;
|
|
7
|
-
--content-table-header-bg: #edf3fc;
|
|
8
|
-
--content-table-grid-color: #d5dfed;
|
|
9
|
-
--content-table-font-size: calc(var(--content-font-size) * 13 / 14);
|
|
10
|
-
--content-table-line-height: 1.5;
|
|
11
|
-
--content-table-radius: 6px;
|
|
12
|
-
--content-table-padding-x: 8px;
|
|
13
|
-
--content-table-padding-y: 6px;
|
|
14
|
-
--content-media-radius: 8px;
|
|
15
|
-
--content-gallery-gap: 12px;
|
|
16
|
-
--content-callout-radius: 9px;
|
|
17
|
-
--content-callout-padding-x: 18px;
|
|
18
|
-
--content-callout-padding-y: 16px;
|
|
19
|
-
--content-callout-icon-width: 30px;
|
|
20
|
-
--content-callout-icon-size: 22px;
|
|
21
|
-
--content-callout-gap: 12px;
|
|
22
|
-
--space-block: calc(var(--content-font-size) * 5 / 7);
|
|
23
|
-
--space-module: calc(var(--content-font-size) * 9 / 7);
|
|
24
|
-
--space-heading-top: calc(var(--content-font-size) * 2);
|
|
25
|
-
--space-heading-bottom: calc(var(--content-font-size) * 5 / 7);
|
|
26
|
-
--space-list-item: calc(var(--content-font-size) * 0.25);
|
|
27
|
-
--space-list-block: calc(var(--content-font-size) * 0.5);
|
|
28
|
-
--space-divider: calc(var(--content-font-size) * 2);
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
.wendang {
|
|
32
|
-
--color-bg: #f6f8fc; --color-surface: #fff; --color-surface-subtle: #f5f7fa;
|
|
33
|
-
--color-text: #1f2937; --color-text-muted: #667085; --color-text-faint: #7c8798;
|
|
34
|
-
--color-border: #dce2eb; --color-border-strong: #b9c3d2;
|
|
35
|
-
--color-accent: var(--wendang-accent, #2f6feb); --color-accent-soft: #eaf1ff;
|
|
36
|
-
--color-danger: #cf3d48; --color-success: #21814b; --color-warning: #ad6b12;
|
|
37
|
-
/*
|
|
38
|
-
* 行内评论标记色:**同一黄色系的三档**,不引入第二种色相。
|
|
39
|
-
*
|
|
40
|
-
* 早先"有回复"的评论用蓝色区分,用户反馈蓝色与黄色差别太大、容易误读成
|
|
41
|
-
* 两类不同的东西("可以搞多色,但是不要影响用户心智")。现在三档都在黄色
|
|
42
|
-
* 家族里,靠**深浅**表达强弱:
|
|
43
|
-
* - 普通评论:亮黄底 + 深琥珀下划线;
|
|
44
|
-
* - 有回复:底色加深一档(表示这里更"热");
|
|
45
|
-
* - 当前激活:再深一档。
|
|
46
|
-
* 下划线取深琥珀(#d48806)而不是亮黄:底色变亮后,浅色下划线在浅蓝/白
|
|
47
|
-
* 背景上都看不清(用户反馈"这个看不清,底部和背景色")。
|
|
48
|
-
*/
|
|
49
|
-
--comment-mark-bg: #ffe58f; --comment-mark-line: #d48806;
|
|
50
|
-
--comment-mark-bg-reply: #ffd66688; --comment-mark-line-reply: #ff9900;
|
|
51
|
-
--comment-mark-bg-active: #ffc53d; --comment-mark-line-active: #ad6800;
|
|
52
|
-
--content-width: 100%; --shadow-pop: 0 10px 32px #14284a20;
|
|
53
|
-
/*
|
|
54
|
-
* 内容排版 token(表格、标题、间距、媒体)。
|
|
55
|
-
*
|
|
56
|
-
* 这些变量原先只存在于 YWiki 的 web/src/styles/global.css,抽成 SDK 时
|
|
57
|
-
* 消费方(shared/content-style.css)留下了、定义方漏掉了。CSS 变量取到
|
|
58
|
-
* 无效值会让整条声明在计算值阶段失效,于是表格边框变成 none、表头背景
|
|
59
|
-
* 变透明、段落与标题的间距塌成 0。颜色用绝对值,间距跟随 --content-font-size。
|
|
60
|
-
*/
|
|
61
|
-
--content-scroll-offset: 80px;
|
|
62
|
-
/**
|
|
63
|
-
* 块间距(段落之间)。
|
|
64
|
-
*
|
|
65
|
-
* 从 `3/7`(16px 字号下 6.86px)调到 `5/7`(11.43px)。原因有两个:
|
|
66
|
-
* 1. 6.86px 对中文正文偏紧,段与段之间读起来粘连(用户反馈"行间距处理下");
|
|
67
|
-
* 2. 块选中时会沿块上下各外扩一段做高亮带,而外扩必须给相邻块之间保留
|
|
68
|
-
* 可见的白缝——间距太小时这段预算不够,两个块的底色会糊成一整块
|
|
69
|
-
* (用户实测:"带了选中背景后上下间距没了")。
|
|
70
|
-
*/
|
|
71
|
-
--color-code-bg: #f1f5fa;
|
|
72
|
-
color: var(--color-text); background: var(--color-surface);
|
|
73
|
-
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", sans-serif;
|
|
74
|
-
min-width: 0; min-height: 0;
|
|
75
|
-
}
|
|
76
|
-
.wendang[data-wendang-theme="dark"] {
|
|
77
|
-
--color-bg: #17191e; --color-surface: #202329; --color-surface-subtle: #292d35;
|
|
78
|
-
--color-text: #e5e9f0; --color-text-muted: #b2bdcd; --color-text-faint: #8f9cb0;
|
|
79
|
-
--color-border: #3b4350; --color-border-strong: #606c7e; --color-accent-soft: #243653;
|
|
80
|
-
--content-text-color: #e8e8ec;
|
|
81
|
-
--content-heading-color: #f0f0f3;
|
|
82
|
-
--content-table-header-bg: #2a2e38;
|
|
83
|
-
--content-table-grid-color: #424753;
|
|
84
|
-
--color-code-bg: #20242c;
|
|
85
|
-
/* 深色底上用低明度琥珀底 + 高明度下划线,保持同一黄色系的三档深浅 */
|
|
86
|
-
--comment-mark-bg: #4a3a12; --comment-mark-line: #e8b923;
|
|
87
|
-
--comment-mark-bg-reply: #5c4813; --comment-mark-line-reply: #ffc53d;
|
|
88
|
-
--comment-mark-bg-active: #6b5416; --comment-mark-line-active: #ffc53d;
|
|
89
|
-
}
|
|
90
|
-
.wendang-root { min-height: 0; min-width: 0; height: 100%; }
|
|
91
|
-
/**
|
|
92
|
-
* 浮层挂载根。必须建层叠上下文:正文 `.tiptap` 自己是 `position: relative`,
|
|
93
|
-
* 若 portal 没有 z-index,它会被正文里的图片等元素盖住——实测拖拽插入线
|
|
94
|
-
* 就因此完全看不见(mouse 命中的是图片)。
|
|
95
|
-
*/
|
|
96
|
-
.wendang-portal {
|
|
97
|
-
position: relative;
|
|
98
|
-
z-index: 1000;
|
|
99
|
-
}
|
|
100
|
-
/*
|
|
101
|
-
* 基础元素样式同时作用于 `.wendang` 正文与 `.wendang-popup-scope` 弹层内容。
|
|
102
|
-
*
|
|
103
|
-
* 弹层(对话框、右键菜单)teleport 到 body 后不在 `.wendang` 内,只带了一份
|
|
104
|
-
* token 副本;如果这些规则只写在 `.wendang` 下,弹层里的 input 会退回浏览器
|
|
105
|
-
* 默认样式、`.muted`/`.small`/`.error-banner` 全部失效。用 `:is()` 让两处共用
|
|
106
|
-
* 同一组声明,避免再复制一遍。
|
|
107
|
-
*/
|
|
108
|
-
/* Inline topic editors own their font metrics and appearance in both canvas hosts. */
|
|
109
|
-
:is(.wendang, .wendang-popup-scope) :where(button, input, textarea):not(:where(.mind-topic-input)) { font: inherit; box-sizing: border-box; }
|
|
110
|
-
:is(.wendang, .wendang-popup-scope) :where(a) { color: var(--color-accent); }
|
|
111
|
-
:is(.wendang, .wendang-popup-scope) :where(button) { cursor: pointer; }
|
|
112
|
-
:is(.wendang, .wendang-popup-scope) .muted { color: var(--color-text-muted); }
|
|
113
|
-
:is(.wendang, .wendang-popup-scope) .small { font-size: 12px; }
|
|
114
|
-
:is(.wendang, .wendang-popup-scope) :where(input:not([type=checkbox]):not([type=radio]), textarea):not(.worksheet-grid *):not(:where(.mind-topic-input)) {
|
|
115
|
-
background: var(--color-surface); color: var(--color-text); border: 1px solid var(--color-border);
|
|
116
|
-
border-radius: 6px; padding: 6px 8px;
|
|
117
|
-
}
|
|
118
|
-
:is(.wendang, .wendang-popup-scope) :where(.error-banner, .error) { color: var(--color-danger); }
|
|
119
|
-
:is(.wendang, .wendang-popup-scope) :where(.notice) { color: var(--color-text-muted); }
|
|
120
|
-
|
|
121
|
-
/* 文档调色板:与存储值分开,切换主题不会改写正文或触发保存。 */
|
|
122
|
-
.wendang {
|
|
123
|
-
--doc-text-gray: #646a73;
|
|
124
|
-
--doc-text-red: #d92c2c;
|
|
125
|
-
--doc-text-orange: #b95d0b;
|
|
126
|
-
--doc-text-yellow: #8a6c0a;
|
|
127
|
-
--doc-text-green: #237b35;
|
|
128
|
-
--doc-text-blue: #1971c2;
|
|
129
|
-
--doc-text-purple: #7048e8;
|
|
130
|
-
--doc-highlight-gray-soft: #f1f3f5;
|
|
131
|
-
--doc-highlight-red: #ffe3e3;
|
|
132
|
-
--doc-highlight-orange: #fff0db;
|
|
133
|
-
--doc-highlight-yellow: #fff3bf;
|
|
134
|
-
--doc-highlight-green: #d3f9d8;
|
|
135
|
-
--doc-highlight-blue: #d0ebff;
|
|
136
|
-
--doc-highlight-purple: #e5dbff;
|
|
137
|
-
--doc-highlight-gray: #dee2e6;
|
|
138
|
-
--doc-highlight-gray-strong: #ced4da;
|
|
139
|
-
--doc-highlight-red-strong: #ffc9c9;
|
|
140
|
-
--doc-highlight-orange-strong: #ffd8a8;
|
|
141
|
-
--doc-highlight-yellow-strong: #ffec99;
|
|
142
|
-
--doc-highlight-green-strong: #b2f2bb;
|
|
143
|
-
--doc-highlight-blue-strong: #a5d8ff;
|
|
144
|
-
--doc-highlight-purple-strong: #d0bfff;
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
.wendang[data-wendang-theme='dark'] {
|
|
148
|
-
--doc-text-gray: #b8beca;
|
|
149
|
-
--doc-text-red: #ff9b9b;
|
|
150
|
-
--doc-text-orange: #ffc078;
|
|
151
|
-
--doc-text-yellow: #f6d37a;
|
|
152
|
-
--doc-text-green: #8ce99a;
|
|
153
|
-
--doc-text-blue: #91caff;
|
|
154
|
-
--doc-text-purple: #d0bfff;
|
|
155
|
-
--doc-highlight-gray-soft: #32353d;
|
|
156
|
-
--doc-highlight-red: #563138;
|
|
157
|
-
--doc-highlight-orange: #523a2a;
|
|
158
|
-
--doc-highlight-yellow: #4a4226;
|
|
159
|
-
--doc-highlight-green: #294737;
|
|
160
|
-
--doc-highlight-blue: #293f5b;
|
|
161
|
-
--doc-highlight-purple: #42335b;
|
|
162
|
-
--doc-highlight-gray: #424650;
|
|
163
|
-
--doc-highlight-gray-strong: #555b66;
|
|
164
|
-
--doc-highlight-red-strong: #713f47;
|
|
165
|
-
--doc-highlight-orange-strong: #6a4b31;
|
|
166
|
-
--doc-highlight-yellow-strong: #635732;
|
|
167
|
-
--doc-highlight-green-strong: #355c44;
|
|
168
|
-
--doc-highlight-blue-strong: #355476;
|
|
169
|
-
--doc-highlight-purple-strong: #554273;
|
|
170
|
-
}
|
|
171
|
-
/**
|
|
172
|
-
* 只读渲染器**专属**样式。
|
|
173
|
-
*
|
|
174
|
-
* 说明:内容排版(标题/列表/表格/代码/引用/高亮块/行内元素……)已收敛到
|
|
175
|
-
* `@/shared/content-style.css` 的单一真源,编辑端与只读端共用;本文件只保留
|
|
176
|
-
* **只有只读端才有**的东西:图片懒加载占位、公式占位/错误、附件卡片。
|
|
177
|
-
*
|
|
178
|
-
* 历史教训:曾因渲染器从 .vue 迁为 .ts 而丢失整个样式文件,排版静默退回浏览器
|
|
179
|
-
* 默认——结构正常、观感没生效,是很容易漏掉的回归。因此这里显式 import。
|
|
180
|
-
*/
|
|
181
|
-
/* One shell for the editor node view and the read-only renderer. */
|
|
182
|
-
.ywiki-content .ywiki-code-panel {
|
|
183
|
-
--code-bg:#ffffff;--code-header:#f7f8fa;--code-border:#e2e5e9;--code-text:#303640;--code-muted:#8a9099;
|
|
184
|
-
--code-keyword:#d13b52;--code-string:#2e8764;--code-number:#a66e12;--code-title:#8250b5;--code-property:#476f9c;--code-comment:#8a9099;--code-tag:#bf3c51;
|
|
185
|
-
position:relative;min-width:0;max-width:100%;border:1px solid var(--code-border);border-radius:7px;
|
|
186
|
-
background:var(--code-bg);color:var(--code-text);isolation:isolate;
|
|
187
|
-
}
|
|
188
|
-
.ywiki-content .ywiki-code-panel.code-theme-soft {
|
|
189
|
-
--code-bg:#f5f8fc;--code-header:#edf2f8;--code-border:#dce4ef;--code-text:#34445b;--code-muted:#8492a7;
|
|
190
|
-
--code-keyword:#3478bd;--code-string:#318b6d;--code-number:#9b7a1e;--code-title:#9851c4;--code-property:#516c9f;--code-comment:#8492a7;--code-tag:#b14c6c;
|
|
191
|
-
}
|
|
192
|
-
[data-wendang-theme='dark'] .ywiki-content .ywiki-code-panel.code-theme-auto,
|
|
193
|
-
.ywiki-content .ywiki-code-panel.code-theme-night {
|
|
194
|
-
--code-bg:#20242c;--code-header:#272c35;--code-border:#373e49;--code-text:#d7dde7;--code-muted:#929cac;
|
|
195
|
-
--code-keyword:#f58196;--code-string:#a5cf8b;--code-number:#efbc82;--code-title:#c6a0ee;--code-property:#89b9ee;--code-comment:#919cab;--code-tag:#f08a9d;
|
|
196
|
-
}
|
|
197
|
-
.code-toolbar {display:flex;align-items:center;gap:7px;min-height:38px;padding:4px 9px;background:var(--code-header);border-bottom:1px solid var(--code-border);border-radius:6px 6px 0 0;font:12px/1.5 var(--font-sans,system-ui,sans-serif);color:var(--code-muted);user-select:none;}
|
|
198
|
-
.code-toolbar-host {position:relative;z-index:2;}
|
|
199
|
-
.code-toolbar-actions {display:flex;align-items:center;gap:7px;margin-left:auto;min-width:0;}
|
|
200
|
-
.code-toolbar-summary {font-size:11px;font-variant-numeric:tabular-nums;white-space:nowrap;}
|
|
201
|
-
/*
|
|
202
|
-
* 语言选择器在代码块的深色标题栏里,必须把 wui 的语义变量改指向代码块色板,
|
|
203
|
-
* 否则会是一块白底控件。面板本身渲染在 portal 根(正文之外),不继承这些
|
|
204
|
-
* 变量,因此下拉列表仍是普通的浅色菜单 —— 与其它菜单一致。
|
|
205
|
-
*/
|
|
206
|
-
.code-language-select {width:146px;font-size:12px;--w-surface:var(--code-header);--w-text:var(--code-text);--w-text-faint:var(--code-muted);--w-border-strong:var(--code-border);--w-border:var(--code-border);--w-surface-subtle:color-mix(in srgb,var(--code-text) 10%,transparent);}
|
|
207
|
-
.code-language-label {max-width:190px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px;}
|
|
208
|
-
.code-toolbar-divider {height:15px;border-left:1px solid var(--code-border);margin:0 2px;}
|
|
209
|
-
.code-toolbar .code-copy-button,.code-toolbar .code-settings-button,.code-toolbar .code-fold-button {color:var(--code-muted);background:transparent;}
|
|
210
|
-
.code-toolbar .code-copy-button {min-width:86px;}
|
|
211
|
-
.code-toolbar .code-copy-button:hover,.code-toolbar .code-settings-button:hover,.code-toolbar .code-fold-button:hover {color:var(--code-text);background:color-mix(in srgb,var(--code-text) 6%,transparent);}
|
|
212
|
-
.code-copy-button svg {vertical-align:middle;}
|
|
213
|
-
.code-copy-announcement {position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);}
|
|
214
|
-
.code-option-check {float:right;margin-left:24px;}
|
|
215
|
-
.code-theme-swatch {display:inline-block;width:13px;height:13px;vertical-align:-2px;margin-right:8px;border:1px solid #c7ccd4;border-radius:3px;background:#fff;}
|
|
216
|
-
.code-theme-swatch[data-code-swatch='auto'] {background:linear-gradient(90deg,#fff 50%,#303743 50%);}
|
|
217
|
-
.code-theme-swatch[data-code-swatch='soft'] {background:#e6effa;}
|
|
218
|
-
.code-theme-swatch[data-code-swatch='night'] {background:#272c35;}
|
|
219
|
-
.ywiki-content .ywiki-code-panel .code-scroll {display:flex;align-items:stretch;position:relative;overflow:auto;max-height:464px;border-radius:0 0 6px 6px;overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--code-muted) 45%,transparent) transparent;background:var(--code-bg);}
|
|
220
|
-
.ywiki-content .ywiki-code-panel .code-scroll[hidden] {display:none;}
|
|
221
|
-
.ywiki-content .ywiki-code-panel.is-unlimited .code-scroll {max-height:none;}
|
|
222
|
-
.ywiki-content .ywiki-code-panel .code-line-numbers,
|
|
223
|
-
.ywiki-content .ywiki-code-panel pre.doc-code {font:13px/22px ui-monospace,SFMono-Regular,Menlo,Consolas,'Liberation Mono',monospace;font-variant-ligatures:none;tab-size:2;white-space:pre;}
|
|
224
|
-
.ywiki-content .ywiki-code-panel .code-line-numbers {position:sticky;left:0;z-index:1;align-self:stretch;flex:0 0 auto;min-width:42px;box-sizing:border-box;padding:12px 10px 12px 12px;text-align:right;color:var(--code-muted);background:var(--code-bg);border-right:1px solid color-mix(in srgb,var(--code-border) 65%,transparent);user-select:none;pointer-events:none;}
|
|
225
|
-
.ywiki-content .ywiki-code-panel pre.doc-code {flex:1 0 auto;min-width:0;max-width:none;margin:0!important;padding:12px 16px;border:0;border-radius:0;background:var(--code-bg);color:var(--code-text);overflow:visible;}
|
|
226
|
-
.ywiki-content .ywiki-code-panel pre.doc-code code {display:block;margin:0;padding:0;border:0;background:none;color:var(--code-text);font:inherit;white-space:inherit;tab-size:inherit;border-radius:0;}
|
|
227
|
-
.ywiki-content .ywiki-code-panel.is-collapsed .code-toolbar {border-bottom:0;border-radius:6px;}
|
|
228
|
-
.ywiki-content .ywiki-code-panel:focus-within {border-color:color-mix(in srgb,var(--color-accent) 45%,var(--code-border));}
|
|
229
|
-
.ywiki-content .ywiki-code-panel .code-scroll:focus-visible {outline:2px solid var(--color-accent);outline-offset:-2px;}
|
|
230
|
-
.ywiki-content .ywiki-code-panel :where(.hljs-keyword,.hljs-selector-tag,.hljs-literal,.hljs-meta) {color:var(--code-keyword);}
|
|
231
|
-
.ywiki-content .ywiki-code-panel :where(.hljs-string,.hljs-regexp,.hljs-addition,.hljs-attribute) {color:var(--code-string);}
|
|
232
|
-
.ywiki-content .ywiki-code-panel :where(.hljs-number,.hljs-symbol,.hljs-bullet,.hljs-variable,.hljs-template-variable) {color:var(--code-number);}
|
|
233
|
-
.ywiki-content .ywiki-code-panel :where(.hljs-title,.hljs-section,.hljs-selector-class,.hljs-selector-id,.hljs-type) {color:var(--code-title);}
|
|
234
|
-
.ywiki-content .ywiki-code-panel :where(.hljs-built_in,.hljs-attr,.hljs-property) {color:var(--code-property);}
|
|
235
|
-
.ywiki-content .ywiki-code-panel :where(.hljs-comment,.hljs-quote) {color:var(--code-comment);font-style:normal;}
|
|
236
|
-
.ywiki-content .ywiki-code-panel :where(.hljs-tag,.hljs-name,.hljs-deletion) {color:var(--code-tag);}
|
|
237
|
-
@media(max-width:600px){.code-toolbar{gap:4px;padding-inline:6px}.code-toolbar-actions{gap:4px}.code-language-select{width:108px}.code-toolbar-summary{display:none}.code-toolbar-divider{margin:0}.code-language-label{max-width:100px}.code-copy-button{min-width:72px!important}}
|
|
238
|
-
@media print{.ywiki-content .ywiki-code-panel .code-scroll{max-height:none!important;overflow:visible!important;display:flex!important}.code-toolbar-actions,.code-fold-button{display:none!important}.ywiki-content .ywiki-code-panel{break-inside:avoid}.ywiki-content .ywiki-code-panel pre.doc-code{white-space:pre-wrap;overflow-wrap:anywhere;flex-shrink:1}}
|
|
239
|
-
/* Tokens are document presentation; saved attributes never contain free CSS values. */
|
|
240
|
-
[data-wendang-theme] {
|
|
241
|
-
--callout-border-gray:#c7cbd1;--callout-border-red:#f0a2a2;--callout-border-orange:#ffc078;--callout-border-yellow:#e3ca71;
|
|
242
|
-
--callout-border-green:#91d4a0;--callout-border-blue:#9ac5ef;--callout-border-purple:#c0a4ed;
|
|
243
|
-
}
|
|
244
|
-
[data-wendang-theme='dark'] {
|
|
245
|
-
--callout-border-gray:#697181;--callout-border-red:#a7606b;--callout-border-orange:#a97843;--callout-border-yellow:#97844a;
|
|
246
|
-
--callout-border-green:#5c8b6c;--callout-border-blue:#587fa9;--callout-border-purple:#8667af;
|
|
247
|
-
}
|
|
248
|
-
.ywiki-content .doc-callout {
|
|
249
|
-
--callout-first-line-height:calc(var(--content-font-size) * var(--content-line-height));
|
|
250
|
-
position:relative;display:grid;grid-template-columns:var(--content-callout-icon-width) minmax(0,1fr);column-gap:var(--content-callout-gap);align-items:start;
|
|
251
|
-
border:1px solid var(--callout-border,var(--callout-border-blue));border-radius:var(--content-callout-radius);
|
|
252
|
-
background:var(--callout-fill,var(--doc-highlight-blue));color:var(--callout-text,var(--content-text-color));
|
|
253
|
-
padding:var(--content-callout-padding-y) var(--content-callout-padding-x);
|
|
254
|
-
}
|
|
255
|
-
.ywiki-content .doc-callout[data-icon-hidden='true'] {grid-template-columns:minmax(0,1fr);}
|
|
256
|
-
.callout-controls-host {display:contents;}
|
|
257
|
-
.ywiki-content .doc-callout-content {grid-column:2;grid-row:1;min-width:0;color:inherit;}
|
|
258
|
-
.ywiki-content .doc-callout[data-icon-hidden='true']>.doc-callout-content {grid-column:1;}
|
|
259
|
-
.ywiki-content .doc-callout .callout-icon {
|
|
260
|
-
grid-column:1;grid-row:1;align-self:start;display:inline-flex;align-items:center;justify-content:center;
|
|
261
|
-
width:var(--content-callout-icon-width);min-width:var(--content-callout-icon-width);height:var(--callout-first-line-height);min-height:0;padding:0;
|
|
262
|
-
font-size:var(--content-callout-icon-size);line-height:1;user-select:none;color:inherit;
|
|
263
|
-
}
|
|
264
|
-
/* A heading on the first line has its own size and leading; later paragraphs do not move the icon. */
|
|
265
|
-
.ywiki-content .doc-callout:has(>.doc-callout-content>h1:first-child){--callout-first-line-height:calc(var(--content-font-size) * 1.625 * 1.3);}
|
|
266
|
-
.ywiki-content .doc-callout:has(>.doc-callout-content>h2:first-child){--callout-first-line-height:calc(var(--content-font-size) * 1.375 * 1.3);}
|
|
267
|
-
.ywiki-content .doc-callout:has(>.doc-callout-content>h3:first-child){--callout-first-line-height:calc(var(--content-font-size) * 1.125 * 1.3);}
|
|
268
|
-
.ywiki-content .doc-callout:has(>.doc-callout-content>:is(h4,h5,h6):first-child){--callout-first-line-height:calc(var(--content-font-size) * 1.3);}
|
|
269
|
-
.ywiki-content .doc-callout>.doc-callout-content>:first-child {margin-top:0;}
|
|
270
|
-
.ywiki-content .doc-callout>.doc-callout-content>:last-child {margin-bottom:0;}
|
|
271
|
-
.ywiki-content .doc-callout-content :where(h1,h2,h3,h4,h5,h6) {color:inherit;}
|
|
272
|
-
@media(max-width:600px){.ywiki-content .doc-callout{padding:12px;column-gap:9px;}}
|
|
273
|
-
|
|
274
|
-
/**
|
|
275
|
-
* 内容排版**单一真源**。
|
|
276
|
-
*
|
|
277
|
-
* 为什么单独一个文件(对齐《Wiki好用技术方案》1.1 的「单一 schema 真源」):
|
|
278
|
-
* 正文的观感必须在**编辑态与只读态完全一致**。此前编辑端样式写在
|
|
279
|
-
* `EditorPane.vue` 的 `.ywiki-prose`、只读端写在 `renderer/renderer.css`
|
|
280
|
-
* 的 `.doc-renderer`,两份各改各的——实测已经漂移(标题上间距 1.2em vs 1.6em、
|
|
281
|
-
* h5/h6 两端都没定义)。这里收敛为一份,两端只在根元素上带同一个类
|
|
282
|
-
* `ywiki-content`:
|
|
283
|
-
* - 编辑端:`editorProps.attributes.class = 'ywiki-prose ywiki-content'`
|
|
284
|
-
* - 只读端:`DocRenderer` 根节点 `class="doc-renderer ywiki-content"`
|
|
285
|
-
*
|
|
286
|
-
* 只保留「只有一端才有」的规则在各自文件里(如编辑端的块手柄、只读端的
|
|
287
|
-
* 图片懒加载占位)。凡是两端都会渲染的元素,样式只写在这里。
|
|
288
|
-
*
|
|
289
|
-
* 尺度以 docs/Wiki内容区域规范.md 为准;数值是 YWiki 的产品基线。
|
|
290
|
-
* 块间距由文件末尾的 flow 规则统一处理,容器结构使用 :where(),确保编辑根
|
|
291
|
-
* 与阅读根以及兼容 .doc-body 容器的选择器优先级相同。元素规则不再各自声明纵向 margin。
|
|
292
|
-
*/
|
|
293
|
-
|
|
294
|
-
/* ---------------------------------------------------------------- 根与节奏 */
|
|
295
|
-
.ywiki-content {
|
|
296
|
-
min-width: 0;
|
|
297
|
-
container-type: inline-size;
|
|
298
|
-
container-name: wiki-content;
|
|
299
|
-
font-size: var(--content-font-size);
|
|
300
|
-
line-height: var(--content-line-height);
|
|
301
|
-
color: var(--content-text-color);
|
|
302
|
-
/* 标点空白裁剪(支持的浏览器生效);不修改正文中的中英文空格。 */
|
|
303
|
-
text-spacing-trim: space-all;
|
|
304
|
-
overflow-wrap: anywhere;
|
|
305
|
-
word-break: normal;
|
|
306
|
-
}
|
|
307
|
-
|
|
308
|
-
/* reset 与 flow 都只有 .ywiki-content 的一份 class 权重。
|
|
309
|
-
避免 p/ul/pre 的 margin: 0 压过编辑端的相邻块间距。 */
|
|
310
|
-
.ywiki-content :where(p, h1, h2, h3, h4, h5, h6, ul, ol, blockquote, pre, table, hr, img) {
|
|
311
|
-
margin-block: 0;
|
|
312
|
-
}
|
|
313
|
-
/* 用户输入的空段落也必须在阅读端保留一行,不能只在编辑端占高度。 */
|
|
314
|
-
.ywiki-content p:empty {
|
|
315
|
-
min-height: calc(1em * var(--content-line-height));
|
|
316
|
-
}
|
|
317
|
-
.ywiki-content :where(h1, h2, h3, h4, h5, h6):empty {
|
|
318
|
-
min-height: 1.3em;
|
|
319
|
-
}
|
|
320
|
-
|
|
321
|
-
/* ---------------------------------------------------------------- 标题层级
|
|
322
|
-
标题字号随正文 token 等比缩放。
|
|
323
|
-
字重统一 600(原 650 偏重),标题带轻微负字距更像正文排版而非 UI 文本。 */
|
|
324
|
-
.ywiki-content h1,
|
|
325
|
-
.ywiki-content h2,
|
|
326
|
-
.ywiki-content h3,
|
|
327
|
-
.ywiki-content h4,
|
|
328
|
-
.ywiki-content h5,
|
|
329
|
-
.ywiki-content h6 {
|
|
330
|
-
font-weight: 600;
|
|
331
|
-
color: var(--content-heading-color);
|
|
332
|
-
line-height: 1.3;
|
|
333
|
-
letter-spacing: -0.01em;
|
|
334
|
-
/* 目录跳转时留出顶部空间,避免标题被页头挡住 */
|
|
335
|
-
scroll-margin-top: var(--content-scroll-offset);
|
|
336
|
-
}
|
|
337
|
-
.ywiki-content h1 { font-size: calc(var(--content-font-size) * 1.625); }
|
|
338
|
-
.ywiki-content h2 { font-size: calc(var(--content-font-size) * 1.375); }
|
|
339
|
-
.ywiki-content h3 { font-size: calc(var(--content-font-size) * 1.125); }
|
|
340
|
-
.ywiki-content h4 { font-size: var(--content-font-size); }
|
|
341
|
-
.ywiki-content h5 { font-size: var(--content-font-size); }
|
|
342
|
-
.ywiki-content h6 {
|
|
343
|
-
font-size: var(--content-font-size);
|
|
344
|
-
color: var(--color-text-muted);
|
|
345
|
-
letter-spacing: 0;
|
|
346
|
-
}
|
|
347
|
-
|
|
348
|
-
/* ---------------------------------------------------------------- 列表 */
|
|
349
|
-
.ywiki-content ul,
|
|
350
|
-
.ywiki-content ol {
|
|
351
|
-
padding-left: 1.5em;
|
|
352
|
-
}
|
|
353
|
-
.ywiki-content ul { list-style: disc; }
|
|
354
|
-
.ywiki-content ol { list-style: decimal; }
|
|
355
|
-
/* 层级用不同符号区分,长嵌套下更容易看清层级。 */
|
|
356
|
-
.ywiki-content ul ul { list-style: circle; }
|
|
357
|
-
.ywiki-content ul ul ul { list-style: square; }
|
|
358
|
-
.ywiki-content li + li { margin-top: var(--space-list-item); }
|
|
359
|
-
.ywiki-content li::marker { color: var(--color-text-muted); }
|
|
360
|
-
/* 列表项段落的 reset 与内部间距同样由 flow 规则提供。 */
|
|
361
|
-
|
|
362
|
-
/* 待办列表:编辑端是 ul[data-type='taskList'],只读端是 ul.doc-task-list。
|
|
363
|
-
勾选框与正文左缘齐平、且与首行文字垂直居中(此前水平缩进 4px、垂直偏低约 5px,
|
|
364
|
-
用户反馈"不对齐")。刻意不用普通列表的 1.5em 缩进——待办项希望勾选框与
|
|
365
|
-
上方段落左对齐,读起来是一条直线。 */
|
|
366
|
-
.ywiki-content ul.doc-task-list,
|
|
367
|
-
.ywiki-content ul[data-type='taskList'] {
|
|
368
|
-
list-style: none;
|
|
369
|
-
padding-left: 0;
|
|
370
|
-
}
|
|
371
|
-
.ywiki-content li.doc-task-item,
|
|
372
|
-
.ywiki-content ul[data-type='taskList'] > li {
|
|
373
|
-
display: flex;
|
|
374
|
-
gap: 0.5em;
|
|
375
|
-
align-items: flex-start;
|
|
376
|
-
line-height: var(--content-line-height);
|
|
377
|
-
}
|
|
378
|
-
.ywiki-content li.doc-task-item > input[type='checkbox'],
|
|
379
|
-
.ywiki-content ul[data-type='taskList'] > li > label > input[type='checkbox'] {
|
|
380
|
-
flex: none;
|
|
381
|
-
font: inherit;
|
|
382
|
-
width: 1em;
|
|
383
|
-
height: 1em;
|
|
384
|
-
margin: 0;
|
|
385
|
-
accent-color: var(--color-accent);
|
|
386
|
-
}
|
|
387
|
-
/* 阅读端的 input 直接参与任务项布局,用上边距对齐首行。
|
|
388
|
-
编辑端由首行等高的 label 居中,不能再给 input 叠加这段偏移。 */
|
|
389
|
-
.ywiki-content li.doc-task-item > input[type='checkbox'] {
|
|
390
|
-
margin-top: calc((var(--content-line-height) - 1) * 0.5em);
|
|
391
|
-
}
|
|
392
|
-
.ywiki-content li.doc-task-item > span,
|
|
393
|
-
.ywiki-content ul[data-type='taskList'] > li > div {
|
|
394
|
-
min-width: 0;
|
|
395
|
-
flex: 1;
|
|
396
|
-
}
|
|
397
|
-
|
|
398
|
-
/* ---------------------------------------------------------------- 引用 */
|
|
399
|
-
.ywiki-content blockquote {
|
|
400
|
-
border-left: 3px solid var(--color-border-strong);
|
|
401
|
-
padding: 0.1em 0 0.1em 1em;
|
|
402
|
-
color: var(--color-text-muted);
|
|
403
|
-
}
|
|
404
|
-
|
|
405
|
-
/* 代码块外观由 code-block.css 统一;裸 pre 用于兼容内容。 */
|
|
406
|
-
.ywiki-content pre { overflow:auto; padding:12px 16px; border:1px solid var(--color-border); border-radius:6px; background:var(--color-code-bg); font:13px/22px ui-monospace,SFMono-Regular,Menlo,Consolas,monospace; }
|
|
407
|
-
.ywiki-content code { background:var(--color-surface-subtle);border:1px solid var(--color-border);border-radius:4px;padding:.1em .35em;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.875em; }
|
|
408
|
-
|
|
409
|
-
/* ---------------- 编辑端:公式就地编辑(nodeView) ---------------- */
|
|
410
|
-
.math-node { cursor: pointer; }
|
|
411
|
-
/* 渲染结果就位后,把它包在带淡底的容器里,提示"这是一段可点击编辑的公式" */
|
|
412
|
-
.math-node .math-render { border-radius: 4px; }
|
|
413
|
-
.math-node:hover .math-render {
|
|
414
|
-
background: color-mix(in srgb, var(--color-accent) 10%, transparent);
|
|
415
|
-
}
|
|
416
|
-
.math-node.is-editing .math-render { display: none; }
|
|
417
|
-
.math-latex-input {
|
|
418
|
-
width: 100%;
|
|
419
|
-
font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
|
|
420
|
-
font-size: 0.875em;
|
|
421
|
-
padding: 2px 6px;
|
|
422
|
-
border: 1px solid var(--color-accent);
|
|
423
|
-
border-radius: 4px;
|
|
424
|
-
background: var(--color-surface);
|
|
425
|
-
color: var(--color-text);
|
|
426
|
-
}
|
|
427
|
-
/* ---------------------------------------------------------------- 表格
|
|
428
|
-
文档网格:白色内容区、浅色表头、圆角外框;读写端共用。 */
|
|
429
|
-
.ywiki-content table,
|
|
430
|
-
.ywiki-content .doc-table {
|
|
431
|
-
--table-grid-color: var(--content-table-grid-color);
|
|
432
|
-
--table-header-bg: var(--content-table-header-bg);
|
|
433
|
-
border-collapse: separate;
|
|
434
|
-
border-spacing: 0;
|
|
435
|
-
/* 无显式列宽时按内容分配,避免说明列与短标签列被强制等分。
|
|
436
|
-
有 colwidth 的表格仍通过两端共同的 colgroup + 表宽保留作者尺寸。 */
|
|
437
|
-
table-layout: auto;
|
|
438
|
-
width: 100%;
|
|
439
|
-
font-size: var(--content-table-font-size);
|
|
440
|
-
background: var(--color-surface);
|
|
441
|
-
border: 1px solid var(--table-grid-color);
|
|
442
|
-
border-radius: var(--content-table-radius);
|
|
443
|
-
overflow: hidden;
|
|
444
|
-
}
|
|
445
|
-
.ywiki-content :where(.doc-table-wrap, .tableWrapper) {
|
|
446
|
-
overflow-x: auto;
|
|
447
|
-
scrollbar-width: thin;
|
|
448
|
-
scrollbar-color: var(--color-border-strong) transparent;
|
|
449
|
-
}
|
|
450
|
-
.ywiki-content th,
|
|
451
|
-
.ywiki-content td {
|
|
452
|
-
border: none;
|
|
453
|
-
border-right: 1px solid var(--table-grid-color);
|
|
454
|
-
border-bottom: 1px solid var(--table-grid-color);
|
|
455
|
-
padding: var(--content-table-padding-y) var(--content-table-padding-x);
|
|
456
|
-
line-height: var(--content-table-line-height);
|
|
457
|
-
min-width: 60px;
|
|
458
|
-
text-align: left;
|
|
459
|
-
vertical-align: top;
|
|
460
|
-
overflow-wrap: anywhere;
|
|
461
|
-
}
|
|
462
|
-
.ywiki-content th {
|
|
463
|
-
background: var(--table-header-bg);
|
|
464
|
-
color: var(--content-heading-color);
|
|
465
|
-
font-weight: 600;
|
|
466
|
-
}
|
|
467
|
-
.ywiki-content tr:last-child > :where(td, th) { border-bottom: none; }
|
|
468
|
-
.ywiki-content tr > :where(td, th):last-child { border-right: none; }
|
|
469
|
-
.ywiki-content tr:first-child > :where(td, th):first-child { border-top-left-radius: 5px; }
|
|
470
|
-
.ywiki-content tr:first-child > :where(td, th):last-child { border-top-right-radius: 5px; }
|
|
471
|
-
.ywiki-content tr:last-child > :where(td, th):first-child { border-bottom-left-radius: 5px; }
|
|
472
|
-
.ywiki-content tr:last-child > :where(td, th):last-child { border-bottom-right-radius: 5px; }
|
|
473
|
-
|
|
474
|
-
/* ---------------------------------------------------------------- 分割线 */
|
|
475
|
-
.ywiki-content hr {
|
|
476
|
-
border: none;
|
|
477
|
-
border-top: 1px solid var(--color-border);
|
|
478
|
-
}
|
|
479
|
-
|
|
480
|
-
/* ---------------------------------------------------------------- 图片 */
|
|
481
|
-
/* 图注(阅读端由 DocRenderer 渲染在图片下方) */
|
|
482
|
-
.ywiki-content .doc-image-caption {
|
|
483
|
-
margin-top: 6px;
|
|
484
|
-
color: var(--color-text-muted);
|
|
485
|
-
font-size: 12px;
|
|
486
|
-
line-height: 1.5;
|
|
487
|
-
text-align: center;
|
|
488
|
-
overflow: hidden;
|
|
489
|
-
text-overflow: ellipsis;
|
|
490
|
-
white-space: nowrap;
|
|
491
|
-
}
|
|
492
|
-
.ywiki-content .doc-image-gallery {
|
|
493
|
-
display: flex;
|
|
494
|
-
flex-wrap: wrap;
|
|
495
|
-
align-items: flex-start;
|
|
496
|
-
gap: 8px;
|
|
497
|
-
width: 100%;
|
|
498
|
-
}
|
|
499
|
-
.ywiki-content .doc-image-gallery > .doc-image[data-sized] {
|
|
500
|
-
/* 图库内的图由容器统一排布,忽略作者对单图设置的宽度。 */
|
|
501
|
-
margin-inline: 0;
|
|
502
|
-
}
|
|
503
|
-
/**
|
|
504
|
-
* 图片行:按比例铺满整行(与编辑态同一口径)。
|
|
505
|
-
*
|
|
506
|
-
* 列宽由 `flex-grow: 比例` 分配,高度由 `aspect-ratio` 自动产生,
|
|
507
|
-
* 因此同行几乎等高、右侧没有空白。
|
|
508
|
-
*/
|
|
509
|
-
.ywiki-content .doc-image-gallery {
|
|
510
|
-
gap: var(--content-gallery-gap);
|
|
511
|
-
align-items: flex-start;
|
|
512
|
-
}
|
|
513
|
-
.ywiki-content .doc-image-gallery > .doc-image {
|
|
514
|
-
flex: 1 1 0;
|
|
515
|
-
min-width: 0;
|
|
516
|
-
width: auto;
|
|
517
|
-
height: auto;
|
|
518
|
-
max-width: none;
|
|
519
|
-
margin: 0;
|
|
520
|
-
aspect-ratio: var(--doc-image-aspect-ratio, 1.3333);
|
|
521
|
-
object-fit: contain;
|
|
522
|
-
/* 权重 = 原始比例 × 用户拖角设定的相对缩放 */
|
|
523
|
-
flex-grow: calc(var(--doc-image-aspect-ratio, 1) * var(--doc-image-weight, 1));
|
|
524
|
-
}
|
|
525
|
-
/**
|
|
526
|
-
* 带图注的图片在图片行里被一层 `<figure>` 包住,因此 **figure 才是 flex 子项**。
|
|
527
|
-
*
|
|
528
|
-
* 缺了这条规则时 figure 用默认 `flex: 0 1 auto`,按内部图片的固有宽度占位,
|
|
529
|
-
* 整行被挤成多行(实测两张 4:3 图变成上下两行、右侧留白),与"按比例铺满"
|
|
530
|
-
* 的口径不一致。变量由渲染器同时写到 figure 上(见 DocRenderer 的 galleryVars)。
|
|
531
|
-
*/
|
|
532
|
-
.ywiki-content .doc-image-gallery > .doc-image-figure {
|
|
533
|
-
flex: 1 1 0;
|
|
534
|
-
min-width: 0;
|
|
535
|
-
margin: 0;
|
|
536
|
-
flex-grow: calc(var(--doc-image-aspect-ratio, 1) * var(--doc-image-weight, 1));
|
|
537
|
-
}
|
|
538
|
-
.ywiki-content .doc-image-gallery > .doc-image-figure > .doc-image {
|
|
539
|
-
/* 图注容器已按比例分到列宽,图片铺满容器即可。 */
|
|
540
|
-
width: 100%;
|
|
541
|
-
max-width: 100%;
|
|
542
|
-
margin: 0;
|
|
543
|
-
}
|
|
544
|
-
.ywiki-content .doc-image-gallery > .doc-image-figure > .doc-image-caption {
|
|
545
|
-
/* 行内已有 12px 列间距,图注不再额外缩进,跟随图片列宽。 */
|
|
546
|
-
margin-inline: 0;
|
|
547
|
-
}
|
|
548
|
-
.ywiki-content img,
|
|
549
|
-
.ywiki-content .doc-image {
|
|
550
|
-
display: block;
|
|
551
|
-
margin-inline: auto;
|
|
552
|
-
max-width: 100%;
|
|
553
|
-
height: auto;
|
|
554
|
-
border-radius: var(--content-media-radius);
|
|
555
|
-
}
|
|
556
|
-
|
|
557
|
-
/**
|
|
558
|
-
* 图片读取中:**渐变沿边框流动**的加载指示。
|
|
559
|
-
*
|
|
560
|
-
* ## 为什么不再用"整块灰底 + 微光"
|
|
561
|
-
*
|
|
562
|
-
* 静态灰块在浅色页面上几乎看不出是在加载,看起来更像"图丢了"或"这里是一块
|
|
563
|
-
* 空白"(用户多轮反馈)。改成一条沿边框奔跑的渐变——像贪吃蛇那样顺着圆角
|
|
564
|
-
* 绕圈,既明确表达"正在取",又不会往图片区域里填任何东西。
|
|
565
|
-
*
|
|
566
|
-
* ## 实现要点
|
|
567
|
-
*
|
|
568
|
-
* 1. **conic-gradient + 遮罩挖空**:整块铺一个锥形渐变,再用
|
|
569
|
-
* `mask-composite: exclude` 把中间挖掉,只留 2px 的一圈。
|
|
570
|
-
* `<img>` 是替换元素、`::before` 不渲染,所以不能像普通元素那样做双层。
|
|
571
|
-
* 2. **旋转靠 `@property` 注册角度变量**:conic-gradient 的 `from` 角度是离散值,
|
|
572
|
-
* 只有注册成 `<angle>` 类型才能被 `@keyframes` 平滑插值。不支持 `@property`
|
|
573
|
-
* 的浏览器会停在静态渐变上(仍有边框,只是不转)。
|
|
574
|
-
* 3. **加载完成时 `data-loading` 消失** → 遮罩一并移除,图片正常显示,
|
|
575
|
-
* 不会因为残留的 mask 把图片裁掉。
|
|
576
|
-
*/
|
|
577
|
-
@property --ywiki-image-flow-angle {
|
|
578
|
-
syntax: '<angle>';
|
|
579
|
-
initial-value: 0deg;
|
|
580
|
-
inherits: false;
|
|
581
|
-
}
|
|
582
|
-
|
|
583
|
-
.ywiki-content .doc-image[data-loading] {
|
|
584
|
-
box-sizing: border-box;
|
|
585
|
-
/* 这 3px 就是"边框"的厚度:遮罩只保留它,中间透明 */
|
|
586
|
-
padding: 3px;
|
|
587
|
-
border-radius: var(--content-media-radius);
|
|
588
|
-
background-image: conic-gradient(
|
|
589
|
-
from var(--ywiki-image-flow-angle),
|
|
590
|
-
color-mix(in srgb, var(--color-accent) 14%, var(--color-surface-subtle)) 0turn 55%,
|
|
591
|
-
color-mix(in srgb, var(--color-accent) 55%, transparent) 78%,
|
|
592
|
-
var(--color-accent) 92%,
|
|
593
|
-
color-mix(in srgb, var(--color-accent) 14%, var(--color-surface-subtle)) 100%
|
|
594
|
-
);
|
|
595
|
-
-webkit-mask-image: linear-gradient(#000 0 0), linear-gradient(#000 0 0);
|
|
596
|
-
-webkit-mask-clip: content-box, border-box;
|
|
597
|
-
-webkit-mask-composite: xor;
|
|
598
|
-
mask-image: linear-gradient(#000 0 0), linear-gradient(#000 0 0);
|
|
599
|
-
mask-clip: content-box, border-box;
|
|
600
|
-
mask-composite: exclude;
|
|
601
|
-
animation: ywiki-image-flow 1.4s linear infinite;
|
|
602
|
-
/* 独立图片没有 aspect-ratio 可撑高:给一个最小高度,否则框不可见 */
|
|
603
|
-
min-height: 120px;
|
|
604
|
-
}
|
|
605
|
-
/* 图片行内的高度由 aspect-ratio 决定,不要再叠加最小高度(会把行撑高) */
|
|
606
|
-
.ywiki-content .doc-image-gallery > .doc-image[data-loading] {
|
|
607
|
-
min-height: 0;
|
|
608
|
-
}
|
|
609
|
-
@keyframes ywiki-image-flow {
|
|
610
|
-
to { --ywiki-image-flow-angle: 360deg; }
|
|
611
|
-
}
|
|
612
|
-
/**
|
|
613
|
-
* 加载失败:一条很淡的实线边框 + 极浅底色,**不流动**。
|
|
614
|
-
*
|
|
615
|
-
* 与"加载中"靠"有没有在转"区分:正在转 = 还在取,静止 = 取不到。不需要图标
|
|
616
|
-
* 或文字(它们在大块图片里比图片本身还抢眼,用户实测反馈更丑)。
|
|
617
|
-
* 不用虚线:虚线在缩略图上会碎成一段段,看起来像边框画错了。
|
|
618
|
-
*/
|
|
619
|
-
.ywiki-content .doc-image[data-image-error] {
|
|
620
|
-
box-sizing: border-box;
|
|
621
|
-
min-height: 72px;
|
|
622
|
-
background-color: color-mix(in srgb, var(--color-surface-subtle) 70%, var(--color-border));
|
|
623
|
-
border-radius: var(--content-media-radius);
|
|
624
|
-
outline: 1px solid color-mix(in srgb, var(--color-border-strong) 55%, transparent);
|
|
625
|
-
outline-offset: -1px;
|
|
626
|
-
/*
|
|
627
|
-
* 破图图标不在这里处理:组件在失败时给 `<img>` 换上透明像素(见
|
|
628
|
-
* `LazyAttachmentImage` 的 `TRANSPARENT_PIXEL`)。CSS 侧的 `content: ''`、
|
|
629
|
-
* `text-indent`、`font-size: 0` 都盖不住浏览器为失败图片绘制的那个图标。
|
|
630
|
-
*/
|
|
631
|
-
}
|
|
632
|
-
.ywiki-content .doc-image-gallery > .doc-image[data-image-error] {
|
|
633
|
-
min-height: 0;
|
|
634
|
-
}
|
|
635
|
-
@media (prefers-reduced-motion: reduce) {
|
|
636
|
-
/* 减少动效:保留渐变的光段,只是不再旋转 */
|
|
637
|
-
.ywiki-content .doc-image[data-loading] {
|
|
638
|
-
animation: none;
|
|
639
|
-
}
|
|
640
|
-
}
|
|
641
|
-
|
|
642
|
-
/*
|
|
643
|
-
* 作者显式缩放过的图片(data-sized):**左对齐**,宽度即作者设定值。
|
|
644
|
-
* 与编辑端同一口径(EditorPane 的 .ywiki-image-frame[data-sized]):
|
|
645
|
-
* 缩放锚点固定在左缘,编辑端与阅读端观感一致;未缩放的图仍居中。
|
|
646
|
-
*/
|
|
647
|
-
.ywiki-content .doc-image[data-sized] {
|
|
648
|
-
margin-left: 0;
|
|
649
|
-
margin-right: auto;
|
|
650
|
-
}
|
|
651
|
-
|
|
652
|
-
/*
|
|
653
|
-
* 图片工具条设置的显式对齐(data-align)优先于上面的默认规则。
|
|
654
|
-
* 三端共用同一语义:编辑端用 flex 对齐容器,阅读端用 margin 对齐图片。
|
|
655
|
-
*/
|
|
656
|
-
.ywiki-content .doc-image[data-align='left'] { margin-left: 0; margin-right: auto; }
|
|
657
|
-
.ywiki-content .doc-image[data-align='center'] { margin-left: auto; margin-right: auto; }
|
|
658
|
-
.ywiki-content .doc-image[data-align='right'] { margin-left: auto; margin-right: 0; }
|
|
659
|
-
|
|
660
|
-
/* ---------------------------------------------------------------- 链接与行内 chip */
|
|
661
|
-
.ywiki-content a,
|
|
662
|
-
.ywiki-content .doc-link {
|
|
663
|
-
color: var(--color-accent);
|
|
664
|
-
text-decoration: none;
|
|
665
|
-
}
|
|
666
|
-
.ywiki-content a:hover,
|
|
667
|
-
.ywiki-content .doc-link:hover { text-decoration: underline; }
|
|
668
|
-
|
|
669
|
-
/* 页面引用:蓝色文字 + 淡下划线。 */
|
|
670
|
-
.ywiki-content .doc-page-link {
|
|
671
|
-
color: var(--color-accent);
|
|
672
|
-
text-decoration: none;
|
|
673
|
-
border-bottom: 1px solid color-mix(in srgb, var(--color-accent) 40%, transparent);
|
|
674
|
-
}
|
|
675
|
-
.ywiki-content .doc-page-link:hover {
|
|
676
|
-
border-bottom-color: var(--color-accent);
|
|
677
|
-
text-decoration: none;
|
|
678
|
-
}
|
|
679
|
-
.ywiki-content .doc-page-link-plain { color: var(--color-text); }
|
|
680
|
-
|
|
681
|
-
/* @提及:蓝色药丸 */
|
|
682
|
-
.ywiki-content .doc-mention {
|
|
683
|
-
color: var(--color-accent);
|
|
684
|
-
background: var(--color-accent-soft);
|
|
685
|
-
border-radius: 4px;
|
|
686
|
-
padding: 0.05em 0.35em;
|
|
687
|
-
font-size: 0.95em;
|
|
688
|
-
font-weight: 500;
|
|
689
|
-
white-space: nowrap;
|
|
690
|
-
}
|
|
691
|
-
|
|
692
|
-
/* 文字高亮:无自定义颜色时的默认底色(自定义色走内联 style 覆盖) */
|
|
693
|
-
.ywiki-content mark,
|
|
694
|
-
.ywiki-content .doc-mark-highlight {
|
|
695
|
-
background: color-mix(in srgb, var(--color-warning) 30%, transparent);
|
|
696
|
-
border-radius: 2px;
|
|
697
|
-
padding: 0.05em 0.1em;
|
|
698
|
-
color: inherit;
|
|
699
|
-
}
|
|
700
|
-
|
|
701
|
-
/* ---------------------------------------------------------------- 分栏 */
|
|
702
|
-
.ywiki-content .doc-columns {
|
|
703
|
-
display: flex;
|
|
704
|
-
gap: 16px;
|
|
705
|
-
align-items: flex-start;
|
|
706
|
-
}
|
|
707
|
-
.ywiki-content .doc-column { flex: 1 1 0; min-width: 0; }
|
|
708
|
-
.ywiki-content .doc-column > *:first-child { margin-top: 0; }
|
|
709
|
-
@media (max-width: 560px) {
|
|
710
|
-
.ywiki-content .doc-columns { flex-direction: column; gap: 10px; }
|
|
711
|
-
}
|
|
712
|
-
@container wiki-content (max-width: 560px) {
|
|
713
|
-
.ywiki-content .doc-columns { flex-direction: column; gap: 10px; }
|
|
714
|
-
}
|
|
715
|
-
|
|
716
|
-
/* ---------------------------------------------------------------- 公式 */
|
|
717
|
-
.ywiki-content .doc-math-inline { display: inline-block; vertical-align: middle; }
|
|
718
|
-
.ywiki-content .doc-math-block {
|
|
719
|
-
display: block;
|
|
720
|
-
overflow-x: auto;
|
|
721
|
-
padding: 8px 0;
|
|
722
|
-
text-align: center;
|
|
723
|
-
}
|
|
724
|
-
.doc-math-pending {
|
|
725
|
-
font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
|
|
726
|
-
font-size: 0.875em;
|
|
727
|
-
color: var(--color-text-muted);
|
|
728
|
-
}
|
|
729
|
-
.doc-math-error {
|
|
730
|
-
border: 1px dashed color-mix(in srgb, var(--color-danger) 50%, transparent);
|
|
731
|
-
border-radius: 4px;
|
|
732
|
-
padding: 0 4px;
|
|
733
|
-
font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
|
|
734
|
-
font-size: 0.875em;
|
|
735
|
-
color: var(--color-danger);
|
|
736
|
-
}
|
|
737
|
-
.doc-math-error-hint { margin-left: 6px; font-size: 0.85em; opacity: 0.8; }
|
|
738
|
-
|
|
739
|
-
/* ---------------------------------------------------------------- 文件与媒体
|
|
740
|
-
编辑 NodeView 与阅读卡片的结构类不同,盒模型与正文均由这一份样式提供。 */
|
|
741
|
-
.ywiki-content :where(.doc-file, .doc-file-attachment) {
|
|
742
|
-
border: 1px solid var(--color-border);
|
|
743
|
-
border-radius: 8px;
|
|
744
|
-
padding: 10px 12px;
|
|
745
|
-
background: var(--color-surface-subtle);
|
|
746
|
-
font-size: 14px;
|
|
747
|
-
color: var(--color-text-muted);
|
|
748
|
-
}
|
|
749
|
-
.ywiki-content .doc-file-head { display: flex; align-items: center; gap: 8px; }
|
|
750
|
-
.ywiki-content .doc-file-icon { flex: none; }
|
|
751
|
-
.ywiki-content .doc-file-name {
|
|
752
|
-
flex: 1;
|
|
753
|
-
min-width: 0;
|
|
754
|
-
overflow: hidden;
|
|
755
|
-
text-overflow: ellipsis;
|
|
756
|
-
white-space: nowrap;
|
|
757
|
-
}
|
|
758
|
-
.ywiki-content .doc-file-size { flex: none; font-size: 12px; color: var(--color-text-faint); }
|
|
759
|
-
.ywiki-content .doc-file-action {
|
|
760
|
-
flex: none;
|
|
761
|
-
border: 1px solid var(--color-border);
|
|
762
|
-
background: var(--color-surface);
|
|
763
|
-
border-radius: 6px;
|
|
764
|
-
padding: 2px 10px;
|
|
765
|
-
font-size: 12px;
|
|
766
|
-
color: var(--color-text-muted);
|
|
767
|
-
cursor: pointer;
|
|
768
|
-
}
|
|
769
|
-
.ywiki-content .doc-file-action:hover { color: var(--color-accent); border-color: var(--color-accent); }
|
|
770
|
-
.ywiki-content video.doc-file-video {
|
|
771
|
-
display: block;
|
|
772
|
-
width: 100%;
|
|
773
|
-
max-height: 420px;
|
|
774
|
-
margin-top: 8px;
|
|
775
|
-
border-radius: 6px;
|
|
776
|
-
background: #000;
|
|
777
|
-
}
|
|
778
|
-
.ywiki-content img.doc-file-image {
|
|
779
|
-
display: block;
|
|
780
|
-
max-width: 100%;
|
|
781
|
-
margin: 8px 0 0;
|
|
782
|
-
border-radius: 6px;
|
|
783
|
-
}
|
|
784
|
-
|
|
785
|
-
/* ---------------------------------------------------------------- 行内评论高亮
|
|
786
|
-
编辑端与只读端共用同一套观感。
|
|
787
|
-
|
|
788
|
-
## 同一黄色系三档,靠深浅表达强弱
|
|
789
|
-
|
|
790
|
-
早先用 `--color-warning`(偏橙棕)叠 22%,是脏橘色、与正文高亮分不清;
|
|
791
|
-
后来改淡米黄又太浅("看不到评论的选中区");再后来"有回复"用蓝色区分,
|
|
792
|
-
用户反馈与黄色差别太大、容易误读成两类东西("可以搞多色,但是不要影响
|
|
793
|
-
用户心智")。
|
|
794
|
-
|
|
795
|
-
现在三档都在黄色家族里:普通评论亮黄底 + 深琥珀下划线,有回复加深一档,
|
|
796
|
-
激活再深一档。下划线用深琥珀而不是亮黄——底色变亮后,浅色下划线在浅蓝
|
|
797
|
-
或白色背景上都看不清(用户反馈"这个看不清,底部和背景色")。
|
|
798
|
-
|
|
799
|
-
## 方角,不用圆角
|
|
800
|
-
|
|
801
|
-
`border-radius: 0`(用户明确要求)。标记是"文字底下的一条色带",
|
|
802
|
-
圆角会让它在行内显得像按钮。
|
|
803
|
-
|
|
804
|
-
## 提示不用原生 title
|
|
805
|
-
|
|
806
|
-
`title` 由浏览器绘制、样式不可控,这里由 `shared/comment-hint.ts` 自绘。 */
|
|
807
|
-
.ywiki-content .doc-inline-comment {
|
|
808
|
-
background: var(--comment-mark-bg, #ffe58f);
|
|
809
|
-
border-bottom: 2px solid var(--comment-mark-line, #d48806);
|
|
810
|
-
border-radius: 0;
|
|
811
|
-
/* 让底色与文字之间留一点空隙,读起来像"标记"而不是"文字被染色" */
|
|
812
|
-
padding-bottom: 1px;
|
|
813
|
-
cursor: pointer;
|
|
814
|
-
}
|
|
815
|
-
.ywiki-content .doc-inline-comment.has-replies {
|
|
816
|
-
background: var(--comment-mark-bg-reply, #ffd666);
|
|
817
|
-
border-bottom-color: var(--comment-mark-line-reply, #ad6800);
|
|
818
|
-
}
|
|
819
|
-
.ywiki-content .doc-inline-comment.is-active {
|
|
820
|
-
background: var(--comment-mark-bg-active, #ffc53d);
|
|
821
|
-
border-bottom-color: var(--comment-mark-line-active, #ad6800);
|
|
822
|
-
/* 激活项加一圈同色细边:与"有评论"区分开,一眼看出当前在看哪条 */
|
|
823
|
-
outline: 1px solid var(--comment-mark-line-active, #ad6800);
|
|
824
|
-
outline-offset: 1px;
|
|
825
|
-
}
|
|
826
|
-
/* 原文被改动:零宽落点用左侧竖线标记,避免伪装成正常高亮 */
|
|
827
|
-
.ywiki-content .doc-inline-comment.is-shifted {
|
|
828
|
-
border-left: 2px solid var(--color-danger);
|
|
829
|
-
padding-left: 1px;
|
|
830
|
-
background: transparent;
|
|
831
|
-
}
|
|
832
|
-
|
|
833
|
-
/* ---------------------------------------------------------------- 块流
|
|
834
|
-
两端的结构路径放进 :where(),统一为 (0,1,0) 权重。规则放在元素 reset 之后,
|
|
835
|
-
不以 !important 或逐个给 h/p 添加 class 来补偿 DOM 包装差异。
|
|
836
|
-
引用、高亮块、分栏、单元格内部使用同一节奏,首尾不产生额外空白。 */
|
|
837
|
-
.ywiki-content > * + *,
|
|
838
|
-
.ywiki-content :where(.doc-body, blockquote, .doc-callout-content, .doc-column, td, th) > * + * {
|
|
839
|
-
margin-top: var(--space-block);
|
|
840
|
-
}
|
|
841
|
-
.ywiki-content > :where(h1, h2, h3, h4, h5, h6),
|
|
842
|
-
.ywiki-content :where(.doc-body, blockquote, .doc-callout-content, .doc-column, td, th) > :where(h1, h2, h3, h4, h5, h6) {
|
|
843
|
-
margin-top: var(--space-heading-top);
|
|
844
|
-
}
|
|
845
|
-
/* 标题与其后的内容是一组,连续标题也保持紧凑。 */
|
|
846
|
-
.ywiki-content > :where(h1, h2, h3, h4, h5, h6) + *,
|
|
847
|
-
.ywiki-content :where(.doc-body, blockquote, .doc-callout-content, .doc-column, td, th) > :where(h1, h2, h3, h4, h5, h6) + * {
|
|
848
|
-
margin-top: var(--space-heading-bottom);
|
|
849
|
-
}
|
|
850
|
-
/* 待办项的 label 和内容容器横向排列,不在二者之间加纵向块间距。 */
|
|
851
|
-
/* TaskItem 的编辑 node view 没有 data-type,必须根据父 taskList 识别。 */
|
|
852
|
-
.ywiki-content :where(li:not(.doc-task-item):not(ul[data-type='taskList'] > li), li > div, li > span) > * + * {
|
|
853
|
-
margin-top: var(--space-list-block);
|
|
854
|
-
}
|
|
855
|
-
/* 结构模块与普通段落分开:两边都留模块间距,不能由短段距挤在一起。
|
|
856
|
-
编辑 nodeView 与阅读包装分别列明,单元格最后再按其内部紧凑规则覆盖。 */
|
|
857
|
-
.ywiki-content > :where(ul, ol, blockquote, pre, table, img, .tableWrapper, .doc-table-wrap, .code-block-wrap, .doc-code-wrap, .ywiki-image-frame, .doc-image, .doc-callout, .doc-columns, .doc-file-attachment, .doc-file-video, .doc-video-embed, [data-video-embed], .doc-math-block, .math-block) ,
|
|
858
|
-
.ywiki-content > :where(ul, ol, blockquote, pre, table, img, .tableWrapper, .doc-table-wrap, .code-block-wrap, .doc-code-wrap, .ywiki-image-frame, .doc-image, .doc-callout, .doc-columns, .doc-file-attachment, .doc-file-video, .doc-video-embed, [data-video-embed], .doc-math-block, .math-block) + *,
|
|
859
|
-
.ywiki-content :where(.doc-body, blockquote, .doc-callout-content, .doc-column) > :where(ul, ol, blockquote, pre, table, img, .tableWrapper, .doc-table-wrap, .code-block-wrap, .doc-code-wrap, .ywiki-image-frame, .doc-image, .doc-callout, .doc-columns, .doc-file-attachment, .doc-file-video, .doc-video-embed, [data-video-embed], .doc-math-block, .math-block),
|
|
860
|
-
.ywiki-content :where(.doc-body, blockquote, .doc-callout-content, .doc-column) > :where(ul, ol, blockquote, pre, table, img, .tableWrapper, .doc-table-wrap, .code-block-wrap, .doc-code-wrap, .ywiki-image-frame, .doc-image, .doc-callout, .doc-columns, .doc-file-attachment, .doc-file-video, .doc-video-embed, [data-video-embed], .doc-math-block, .math-block) + * {
|
|
861
|
-
margin-top: var(--space-module);
|
|
862
|
-
}
|
|
863
|
-
/* 标题是章节边界;即使前面是表格、代码或媒体,也保留足够章节留白。 */
|
|
864
|
-
.ywiki-content > :where(h1, h2, h3, h4, h5, h6),
|
|
865
|
-
.ywiki-content :where(.doc-body, blockquote, .doc-callout-content, .doc-column) > :where(h1, h2, h3, h4, h5, h6) {
|
|
866
|
-
margin-top: var(--space-heading-top);
|
|
867
|
-
}
|
|
868
|
-
.ywiki-content > :where(h1, h2, h3, h4, h5, h6) + *,
|
|
869
|
-
.ywiki-content :where(.doc-body, blockquote, .doc-callout-content, .doc-column) > :where(h1, h2, h3, h4, h5, h6) + * {
|
|
870
|
-
margin-top: var(--space-heading-bottom);
|
|
871
|
-
}
|
|
872
|
-
.ywiki-content > hr,
|
|
873
|
-
.ywiki-content :where(.doc-body, blockquote, .doc-callout-content, .doc-column, td, th) > hr {
|
|
874
|
-
margin-block: var(--space-divider);
|
|
875
|
-
}
|
|
876
|
-
.ywiki-content > :first-child,
|
|
877
|
-
.ywiki-content :where(.doc-body, blockquote, .doc-callout-content, .doc-column, td, th, li, li > div, li > span) > :first-child {
|
|
878
|
-
margin-top: 0;
|
|
879
|
-
}
|
|
880
|
-
.ywiki-content > :last-child,
|
|
881
|
-
.ywiki-content :where(.doc-body, blockquote, .doc-callout-content, .doc-column, td, th, li, li > div, li > span) > :last-child {
|
|
882
|
-
margin-bottom: 0;
|
|
883
|
-
}
|
|
884
|
-
|
|
885
|
-
/* 文档表格有自己的紧凑节奏,仍保留作者输入的空段落与显式加粗。 */
|
|
886
|
-
.ywiki-content :where(td, th) > * + * { margin-top: 0.25em; }
|
|
887
|
-
.ywiki-content :where(td, th) > :first-child { margin-top: 0; }
|
|
888
|
-
.ywiki-content :where(td, th) > :where(p, ul, ol) { font-weight: inherit; }
|
|
889
|
-
.ywiki-content :where(td, th) > p:empty { min-height: calc(1em * var(--content-table-line-height)); }
|
|
890
|
-
|
|
891
|
-
/* 阅读端内容宽度交给 token(外观菜单可调) */
|
|
892
|
-
.doc-renderer {
|
|
893
|
-
width: 100%;
|
|
894
|
-
max-width: var(--content-width);
|
|
895
|
-
margin-inline: auto;
|
|
896
|
-
}
|
|
897
|
-
|
|
898
|
-
/* ---------------------------------------------------------------- 图片懒加载占位
|
|
899
|
-
还没取到字节(接近视口时才取,见 LazyAttachmentImage):
|
|
900
|
-
给一个最小占位高度,避免图片陆续到达时正文不断被顶下去。 */
|
|
901
|
-
.doc-image {
|
|
902
|
-
cursor: zoom-in;
|
|
903
|
-
}
|
|
904
|
-
.doc-image[data-loading] {
|
|
905
|
-
min-width: 160px;
|
|
906
|
-
min-height: 60px;
|
|
907
|
-
background: var(--color-surface-subtle);
|
|
908
|
-
border-radius: 8px;
|
|
909
|
-
}
|
|
910
|
-
.doc-image-loading,
|
|
911
|
-
.doc-image-missing,
|
|
912
|
-
.doc-unknown {
|
|
913
|
-
color: var(--color-text-muted);
|
|
914
|
-
font-size: 0.9em;
|
|
915
|
-
}
|
|
916
|
-
.doc-unknown {
|
|
917
|
-
border: 1px dashed var(--color-border-strong);
|
|
918
|
-
border-radius: 6px;
|
|
919
|
-
padding: 8px 10px;
|
|
920
|
-
}
|
|
921
|
-
|
|
922
|
-
/* 文件卡片的共同样式在 shared/content-style.css。 */
|
|
923
|
-
.doc-file.is-missing { color: var(--color-text-faint); }
|
|
924
|
-
/* 编辑态图片:src 由 node view 按 attachmentId 解析而来(正文不存存储地址)。
|
|
925
|
-
给个最小样式,避免加载中/缺失时排版跳动。 */
|
|
926
|
-
.ywiki-prose img.ywiki-image {
|
|
927
|
-
max-width: 100%;
|
|
928
|
-
border-radius: var(--content-media-radius);
|
|
929
|
-
display: block;
|
|
930
|
-
}
|
|
931
|
-
/**
|
|
932
|
-
* 图片容器(node view)的**三层结构**:
|
|
933
|
-
* frame(块级、占满整行)→ 水平对齐(flex justify-content)
|
|
934
|
-
* inner(贴合图片尺寸)→ 选中框 / 四角手柄 / 块选中高亮
|
|
935
|
-
* img
|
|
936
|
-
*
|
|
937
|
-
* 选中框必须画在 **inner** 上(用户反馈"编辑图片大小时外框没有跟随图片
|
|
938
|
-
* 大小变化"):frame 占满整行,蓝框会横跨整行、右边空出一大片,看起来
|
|
939
|
-
* 像框没跟着图片走。
|
|
940
|
-
*/
|
|
941
|
-
.ywiki-prose .ywiki-image-frame {
|
|
942
|
-
display: flex;
|
|
943
|
-
justify-content: center;
|
|
944
|
-
/* 图注在图片下方:纵向排列,图片仍按 justify-content 水平对齐 */
|
|
945
|
-
flex-direction: column;
|
|
946
|
-
align-items: center;
|
|
947
|
-
}
|
|
948
|
-
/* 有图注时,图片与图注各自成行;图片的水平对齐交给内层 */
|
|
949
|
-
.ywiki-prose .ywiki-image-frame.has-caption > .ywiki-image-inner { align-self: center; }
|
|
950
|
-
/* 图注:一行灰色小字,超出省略(完整内容见 title) */
|
|
951
|
-
.ywiki-prose .ywiki-image-caption {
|
|
952
|
-
max-width: 100%;
|
|
953
|
-
margin-top: 6px;
|
|
954
|
-
padding: 0 2px;
|
|
955
|
-
color: var(--color-text-muted);
|
|
956
|
-
font-size: 12px;
|
|
957
|
-
line-height: 1.5;
|
|
958
|
-
text-align: center;
|
|
959
|
-
overflow: hidden;
|
|
960
|
-
text-overflow: ellipsis;
|
|
961
|
-
white-space: nowrap;
|
|
962
|
-
user-select: text;
|
|
963
|
-
}
|
|
964
|
-
.ywiki-prose .ywiki-image-gallery {
|
|
965
|
-
display: flex;
|
|
966
|
-
flex-wrap: wrap;
|
|
967
|
-
align-items: flex-start;
|
|
968
|
-
gap: 8px;
|
|
969
|
-
width: 100%;
|
|
970
|
-
}
|
|
971
|
-
/**
|
|
972
|
-
* 图片行**整行选中**:给整行加一圈描边。
|
|
973
|
-
*
|
|
974
|
-
* 只给每张图铺底色是不够的——图片之间的间隙、行首行尾的留白都没有任何
|
|
975
|
-
* 选中信号,整行看起来和未选中几乎一样(用户实测反馈:"一行全选中也要有
|
|
976
|
-
* 选中效果")。
|
|
977
|
-
*
|
|
978
|
-
* 不能用普通块的 `::before` 蓝带:图片行是 flex 容器,绝对定位的伪元素
|
|
979
|
-
* 会参与 flex 布局计算,外扩的 6px 也容易被行高吃掉。改为与其它自带外观
|
|
980
|
-
* 的块一致的实色描边;圆角取 6px,与表格的选中框对齐。
|
|
981
|
-
*/
|
|
982
|
-
.ywiki-prose .ywiki-image-gallery.is-block-selected {
|
|
983
|
-
outline: 2px solid var(--color-accent);
|
|
984
|
-
outline-offset: 2px;
|
|
985
|
-
border-radius: 6px;
|
|
986
|
-
}
|
|
987
|
-
/**
|
|
988
|
-
* 单张图片(独立图片块)被**整块选中**:给图片本身加一圈描边。
|
|
989
|
-
*
|
|
990
|
-
* 图片块没有自带外观,走的是"普通块铺蓝带"分支,结果只有一条半透明底色
|
|
991
|
-
* 与图片上的淡色覆盖,**没有边框**——与表格、高亮块、文件卡片的选中观感
|
|
992
|
-
* 不一致(用户实测反馈:"只有一张图的选中没有边框")。
|
|
993
|
-
*
|
|
994
|
-
* 只作用于独立图片(图片行内的子图不带 `is-block-selected`,整行选中时
|
|
995
|
-
* 描边画在行容器上),因此不会与图片行的整行框重叠。
|
|
996
|
-
*/
|
|
997
|
-
.ywiki-prose .ywiki-image-frame.is-block-selected .ywiki-image-inner {
|
|
998
|
-
outline: 2px solid var(--color-accent);
|
|
999
|
-
outline-offset: 2px;
|
|
1000
|
-
border-radius: 6px;
|
|
1001
|
-
}
|
|
1002
|
-
.ywiki-prose .ywiki-image-gallery > .ywiki-image-frame.is-in-gallery .ywiki-image-inner {
|
|
1003
|
-
/* 图片行里不显示四角缩放手柄(等高排布,单图改宽会破坏对齐)。 */
|
|
1004
|
-
cursor: default;
|
|
1005
|
-
}
|
|
1006
|
-
.ywiki-prose .ywiki-image-gallery {
|
|
1007
|
-
position: relative;
|
|
1008
|
-
}
|
|
1009
|
-
/* 图片行内的框选矩形(挂在 portal 上,视口坐标定位) */
|
|
1010
|
-
.ywiki-gallery-marquee {
|
|
1011
|
-
position: fixed;
|
|
1012
|
-
z-index: 69;
|
|
1013
|
-
border: 1px solid color-mix(in srgb, var(--color-accent) 70%, transparent);
|
|
1014
|
-
background: color-mix(in srgb, var(--color-accent) 12%, transparent);
|
|
1015
|
-
border-radius: 2px;
|
|
1016
|
-
pointer-events: none;
|
|
1017
|
-
}
|
|
1018
|
-
/**
|
|
1019
|
-
* 图片上的选中覆盖层:**只有一个 `::after`,强度固定 16%**。
|
|
1020
|
-
*
|
|
1021
|
-
* ## 为什么必须合并到一个选择器(用户实测:"为什么还有蓝色区域")
|
|
1022
|
-
*
|
|
1023
|
-
* 这里曾经有两处独立规则写同一个 `::after`:
|
|
1024
|
-
* - 框选命中(`.is-multi-picked`)16%;
|
|
1025
|
-
* - 整块选中(`.ywiki-image-frame.is-block-selected`)18%。
|
|
1026
|
-
*
|
|
1027
|
-
* 两者可以同时命中(框选后松手会转成块选区),于是同一个伪元素被两条规则
|
|
1028
|
-
* 分别赋值——后者胜出,颜色却与整页带(16%)不一致,图上出现一块更深的矩形。
|
|
1029
|
-
* 更早还叠过一层 frame 的 16% 背景,合计接近 50%。
|
|
1030
|
-
*
|
|
1031
|
-
* 现在统一为一条规则、一个强度:图片区域与非图片区域的选中底色完全相同。
|
|
1032
|
-
*
|
|
1033
|
-
* `outline` 仍按状态区分(框选中是实线、块选中不描边)——那表达的是"这是
|
|
1034
|
-
* 框选出来的"与"这块在选区里"的差别,不影响底色。
|
|
1035
|
-
*/
|
|
1036
|
-
.ywiki-prose .ywiki-image-frame.is-multi-picked .ywiki-image-inner,
|
|
1037
|
-
.ywiki-prose .ywiki-image-frame.is-block-selected-image .ywiki-image-inner,
|
|
1038
|
-
.wendang-portal .ywiki-image-frame.is-multi-picked .ywiki-image-inner {
|
|
1039
|
-
/**
|
|
1040
|
-
* 圆角与表格/其他块的选中描边统一为 6px(用户反馈:"图片选中的圆角
|
|
1041
|
-
* 和表格选中的差不多,现在有点不一致")。早先是 3px/4px,混在一起时
|
|
1042
|
-
* 图片的框明显更方。
|
|
1043
|
-
*/
|
|
1044
|
-
outline: 2px solid var(--color-accent);
|
|
1045
|
-
outline-offset: 2px;
|
|
1046
|
-
border-radius: 6px;
|
|
1047
|
-
}
|
|
1048
|
-
.ywiki-prose .is-block-selected .ywiki-image-inner::after,
|
|
1049
|
-
.ywiki-prose .ywiki-image-frame.is-multi-picked .ywiki-image-inner::after,
|
|
1050
|
-
.ywiki-prose .ywiki-image-frame.is-block-selected-image .ywiki-image-inner::after,
|
|
1051
|
-
.wendang-portal .ywiki-image-frame.is-multi-picked .ywiki-image-inner::after {
|
|
1052
|
-
content: '';
|
|
1053
|
-
position: absolute;
|
|
1054
|
-
inset: 0;
|
|
1055
|
-
border-radius: var(--content-media-radius, 4px);
|
|
1056
|
-
background: color-mix(in srgb, var(--color-accent) 16%, transparent);
|
|
1057
|
-
pointer-events: none;
|
|
1058
|
-
}
|
|
1059
|
-
/**
|
|
1060
|
-
* 跨图片拖拽:**落点提示**。
|
|
1061
|
-
*
|
|
1062
|
-
* ## 从"虚线框"改为"柔和的整体高亮"(用户反馈:虚线框看起来比较生硬)
|
|
1063
|
-
*
|
|
1064
|
-
* 原先落在目标图上画 2px dashed outline。虚线在照片这类复杂底图上会碎成
|
|
1065
|
-
* 一段段,而且"框住整张图"的观感太抢眼——它表达的是"我要插到这里",不是
|
|
1066
|
-
* "这张图被选中了",用户的原话是"看怎么处理更好看点"。
|
|
1067
|
-
*
|
|
1068
|
-
* 现在改成两层柔和的信号:
|
|
1069
|
-
* 1. 图片本身叠一层淡强调色(和块选中同一套语言,`::after` 已存在,复用);
|
|
1070
|
-
* 2. 外加一圈 2px 实线 + 3px 留白的描边,颜色是强调色但带透明度。
|
|
1071
|
-
*
|
|
1072
|
-
* 不用虚线、不用发光:拖拽是高频操作,提示需要"看得见但不吵"。
|
|
1073
|
-
*/
|
|
1074
|
-
.ywiki-prose .ywiki-image-frame.is-image-drop-target .ywiki-image-inner {
|
|
1075
|
-
outline: 2px solid color-mix(in srgb, var(--color-accent) 70%, transparent);
|
|
1076
|
-
outline-offset: 3px;
|
|
1077
|
-
border-radius: var(--content-media-radius, 6px);
|
|
1078
|
-
}
|
|
1079
|
-
/* 落点图上再叠一层淡色,明确"松手就并到这里" */
|
|
1080
|
-
.ywiki-prose .ywiki-image-frame.is-image-drop-target .ywiki-image-inner::after {
|
|
1081
|
-
content: '';
|
|
1082
|
-
position: absolute;
|
|
1083
|
-
inset: 0;
|
|
1084
|
-
border-radius: var(--content-media-radius, 6px);
|
|
1085
|
-
background: color-mix(in srgb, var(--color-accent) 14%, transparent);
|
|
1086
|
-
pointer-events: none;
|
|
1087
|
-
}
|
|
1088
|
-
|
|
1089
|
-
/**
|
|
1090
|
-
* 插入指示线:一条**细长的圆头光带**,插在将要落入的位置。
|
|
1091
|
-
*
|
|
1092
|
-
* 几何与颜色都由脚本内联(挂在 portal / body 上取不到主题变量),这里只给
|
|
1093
|
-
* 形状与层级。圆头 + 柔和外发光让它看起来像"一根发光的针",比纯色方块轻。
|
|
1094
|
-
*/
|
|
1095
|
-
.ywiki-image-drop-line,
|
|
1096
|
-
.ywiki-gallery-drop-line {
|
|
1097
|
-
position: fixed;
|
|
1098
|
-
border-radius: 999px;
|
|
1099
|
-
pointer-events: none;
|
|
1100
|
-
/* 必须高于图片行内容,否则会被图片盖住、看起来"拖拽没有反馈" */
|
|
1101
|
-
z-index: 70;
|
|
1102
|
-
}
|
|
1103
|
-
.ywiki-image-drop-line { z-index: 60; }
|
|
1104
|
-
/**
|
|
1105
|
-
* 指示线两端的小圆点:把"针"的两端收圆,视觉上更像刻度而不是一条色块。
|
|
1106
|
-
* 用伪元素而不是额外 DOM,避免拖拽期间频繁创建节点。
|
|
1107
|
-
*/
|
|
1108
|
-
.ywiki-image-drop-line::before,
|
|
1109
|
-
.ywiki-image-drop-line::after,
|
|
1110
|
-
.ywiki-gallery-drop-line::before,
|
|
1111
|
-
.ywiki-gallery-drop-line::after {
|
|
1112
|
-
content: '';
|
|
1113
|
-
position: absolute;
|
|
1114
|
-
left: 50%;
|
|
1115
|
-
width: 7px;
|
|
1116
|
-
height: 7px;
|
|
1117
|
-
margin-left: -3.5px;
|
|
1118
|
-
border-radius: 50%;
|
|
1119
|
-
background: inherit;
|
|
1120
|
-
}
|
|
1121
|
-
.ywiki-image-drop-line::before,
|
|
1122
|
-
.ywiki-gallery-drop-line::before { top: -3px; }
|
|
1123
|
-
.ywiki-image-drop-line::after,
|
|
1124
|
-
.ywiki-gallery-drop-line::after { bottom: -3px; }
|
|
1125
|
-
.wendang-portal .ywiki-gallery-drop-line,
|
|
1126
|
-
.wendang-portal .ywiki-image-drop-line { position: fixed; }
|
|
1127
|
-
.ywiki-prose .ywiki-image-frame.is-gallery-dragging {
|
|
1128
|
-
opacity: 0.55;
|
|
1129
|
-
}
|
|
1130
|
-
/**
|
|
1131
|
-
* 图片行(飞书口径):**按比例铺满整行**,高度由比例自然产生。
|
|
1132
|
-
*
|
|
1133
|
-
* 为什么不用固定行高:固定行高在图片少时右侧留一大片空白(实测两图并排只占
|
|
1134
|
-
* 一半宽度)。飞书改成「各列按 比例/比例和 分宽度」——列宽加起来正好铺满,
|
|
1135
|
-
* 高度 = 可用宽 / 比例和,因此同行几乎等高且无空白。
|
|
1136
|
-
*
|
|
1137
|
-
* `--ywiki-image-ratio` 由 node view 按原图宽高比写入,`flex-basis` 用比例
|
|
1138
|
-
* 作为权重,`flex-grow` 让它们把剩余空间按权重分掉。
|
|
1139
|
-
*/
|
|
1140
|
-
.ywiki-prose .ywiki-image-gallery {
|
|
1141
|
-
/* 12px 间距与飞书的 column-gap 实测一致 */
|
|
1142
|
-
gap: 12px;
|
|
1143
|
-
align-items: flex-start;
|
|
1144
|
-
}
|
|
1145
|
-
.ywiki-prose .ywiki-image-gallery > .ywiki-image-frame {
|
|
1146
|
-
flex: 1 1 0;
|
|
1147
|
-
/* 基础宽度置零,完全由 flex-grow 按比例分配,避免比例小的图先占位 */
|
|
1148
|
-
min-width: 0;
|
|
1149
|
-
width: auto;
|
|
1150
|
-
height: auto;
|
|
1151
|
-
max-width: none;
|
|
1152
|
-
justify-content: flex-start;
|
|
1153
|
-
}
|
|
1154
|
-
/* 分配权重 = 原始比例 × 用户拖角设定的相对缩放(`--ywiki-image-weight`) */
|
|
1155
|
-
.ywiki-prose .ywiki-image-gallery > .ywiki-image-frame {
|
|
1156
|
-
flex-grow: calc(var(--ywiki-image-ratio, 1) * var(--ywiki-image-weight, 1));
|
|
1157
|
-
}
|
|
1158
|
-
.ywiki-prose .ywiki-image-gallery > .ywiki-image-frame .ywiki-image-inner {
|
|
1159
|
-
width: 100%;
|
|
1160
|
-
max-width: none;
|
|
1161
|
-
}
|
|
1162
|
-
/**
|
|
1163
|
-
* 图库内图片高度由比例与列宽共同决定:
|
|
1164
|
-
* `width:100%` + `aspect-ratio` 让高度自动算出来,不用固定行高。
|
|
1165
|
-
* 没有 aspect-ratio(历史图片)时退回 4:3,等补算比例后再自动校正。
|
|
1166
|
-
*/
|
|
1167
|
-
.ywiki-prose .ywiki-image-gallery > .ywiki-image-frame img.ywiki-image {
|
|
1168
|
-
width: 100%;
|
|
1169
|
-
height: auto;
|
|
1170
|
-
max-width: none;
|
|
1171
|
-
aspect-ratio: var(--ywiki-image-ratio, 1.3333);
|
|
1172
|
-
object-fit: contain;
|
|
1173
|
-
border-radius: var(--content-media-radius);
|
|
1174
|
-
}
|
|
1175
|
-
/**
|
|
1176
|
-
* 图片**加载中**:渐变沿边框流动的指示(与阅读端同一口径)。
|
|
1177
|
-
*
|
|
1178
|
-
* 不再用"整块灰底 + 微光"——静态灰块在浅色页面上看不出在加载,更像"图丢了"。
|
|
1179
|
-
* 现在是一条沿圆角绕圈的渐变,像贪吃蛇一样顺着边框跑,图片区域本身保持透明。
|
|
1180
|
-
*
|
|
1181
|
-
* 实现同阅读端:conic-gradient + `mask-composite: exclude` 挖空中间,只留 2px
|
|
1182
|
-
* 边框;旋转靠 `@property` 注册的角度变量插值(定义在 content-style.css,
|
|
1183
|
-
* 该文件也被编辑器引入)。加载完成后 `data-image-loading` 移除,遮罩随之消失。
|
|
1184
|
-
*/
|
|
1185
|
-
.ywiki-prose .ywiki-image-frame img.ywiki-image[data-image-loading] {
|
|
1186
|
-
box-sizing: border-box;
|
|
1187
|
-
padding: 3px;
|
|
1188
|
-
border-radius: var(--content-media-radius);
|
|
1189
|
-
background-image: conic-gradient(
|
|
1190
|
-
from var(--ywiki-image-flow-angle),
|
|
1191
|
-
color-mix(in srgb, var(--color-accent) 14%, var(--color-surface-subtle)) 0turn 55%,
|
|
1192
|
-
color-mix(in srgb, var(--color-accent) 55%, transparent) 78%,
|
|
1193
|
-
var(--color-accent) 92%,
|
|
1194
|
-
color-mix(in srgb, var(--color-accent) 14%, var(--color-surface-subtle)) 100%
|
|
1195
|
-
);
|
|
1196
|
-
-webkit-mask-image: linear-gradient(#000 0 0), linear-gradient(#000 0 0);
|
|
1197
|
-
-webkit-mask-clip: content-box, border-box;
|
|
1198
|
-
-webkit-mask-composite: xor;
|
|
1199
|
-
mask-image: linear-gradient(#000 0 0), linear-gradient(#000 0 0);
|
|
1200
|
-
mask-clip: content-box, border-box;
|
|
1201
|
-
mask-composite: exclude;
|
|
1202
|
-
animation: ywiki-image-flow 1.4s linear infinite;
|
|
1203
|
-
/* 独立图片没有 aspect-ratio 撑高,需要最小高度才看得见框 */
|
|
1204
|
-
min-height: 120px;
|
|
1205
|
-
}
|
|
1206
|
-
/* 图片行内的高度由 aspect-ratio 与列宽决定,不叠加最小高度(否则整行被撑高) */
|
|
1207
|
-
.ywiki-prose .ywiki-image-gallery > .ywiki-image-frame img.ywiki-image[data-image-loading] {
|
|
1208
|
-
min-height: 0;
|
|
1209
|
-
}
|
|
1210
|
-
/**
|
|
1211
|
-
* 加载失败:淡底 + 细实线边框,**不流动**。
|
|
1212
|
-
*
|
|
1213
|
-
* "在转 = 还在取 / 静止 = 取不到",靠动效区分,不需要图标或文字。
|
|
1214
|
-
* 不用虚线:缩略图尺寸下虚线会碎成一段段,看起来像边框画错了。
|
|
1215
|
-
*/
|
|
1216
|
-
.ywiki-prose .ywiki-image-frame img.ywiki-image[data-image-error] {
|
|
1217
|
-
box-sizing: border-box;
|
|
1218
|
-
min-height: 72px;
|
|
1219
|
-
background-color: color-mix(in srgb, var(--color-surface-subtle) 70%, var(--color-border));
|
|
1220
|
-
border-radius: var(--content-media-radius);
|
|
1221
|
-
outline: 1px solid color-mix(in srgb, var(--color-border-strong) 55%, transparent);
|
|
1222
|
-
outline-offset: -1px;
|
|
1223
|
-
}
|
|
1224
|
-
.ywiki-prose .ywiki-image-gallery > .ywiki-image-frame img.ywiki-image[data-image-error] {
|
|
1225
|
-
min-height: 0;
|
|
1226
|
-
}
|
|
1227
|
-
@media (prefers-reduced-motion: reduce) {
|
|
1228
|
-
.ywiki-prose .ywiki-image-frame img.ywiki-image[data-image-loading] {
|
|
1229
|
-
animation: none;
|
|
1230
|
-
}
|
|
1231
|
-
}
|
|
1232
|
-
|
|
1233
|
-
/* 显式缩放过(data-sized)的图默认靠左:缩放锚点在左缘,拖动位置稳定 */
|
|
1234
|
-
.ywiki-prose .ywiki-image-frame[data-sized] {
|
|
1235
|
-
justify-content: flex-start;
|
|
1236
|
-
}
|
|
1237
|
-
/* 显式对齐(图片工具条的左/中/右)优先于上面的默认规则 */
|
|
1238
|
-
.ywiki-prose .ywiki-image-frame[data-align='left'] { justify-content: flex-start; }
|
|
1239
|
-
.ywiki-prose .ywiki-image-frame[data-align='center'] { justify-content: center; }
|
|
1240
|
-
.ywiki-prose .ywiki-image-frame[data-align='right'] { justify-content: flex-end; }
|
|
1241
|
-
|
|
1242
|
-
/* inner 贴合图片:选中框/手柄相对它定位,才随图片尺寸变化 */
|
|
1243
|
-
.ywiki-prose .ywiki-image-inner {
|
|
1244
|
-
position: relative;
|
|
1245
|
-
display: inline-block;
|
|
1246
|
-
max-width: 100%;
|
|
1247
|
-
line-height: 0;
|
|
1248
|
-
}
|
|
1249
|
-
/* 缩放期间禁止选中文本:跟手拖动时若触发文字选区会打断手感 */
|
|
1250
|
-
.ywiki-prose .ywiki-image-frame.is-resizing {
|
|
1251
|
-
user-select: none;
|
|
1252
|
-
}
|
|
1253
|
-
|
|
1254
|
-
/**
|
|
1255
|
-
* 选中态(对齐飞书截图):蓝框 + 四角圆点手柄,拖动等比缩放。
|
|
1256
|
-
* 手柄只在"用户点过这张图"时显示(见 `.img-pick-active` 门控说明),
|
|
1257
|
-
* 未选中时 display:none,既不拦截点击也不产生视觉噪声。
|
|
1258
|
-
*/
|
|
1259
|
-
/**
|
|
1260
|
-
* 四角手柄的尺寸与观感对齐飞书(实测飞书是 20×20 的命中区)。
|
|
1261
|
-
*
|
|
1262
|
-
* 早前是 10px 的小圆点:在 380px 宽的缩略图上几乎看不见,用户反馈
|
|
1263
|
-
* "选中了但看不清是不是选中了"(实测飞书明显更醒目)。这里放大到 14px
|
|
1264
|
-
* 的实心圆 + 2px 蓝描边 + 白色打底,并给整块加一圈白色外发光,
|
|
1265
|
-
* 保证在深色/蓝色图片上也能分辨。
|
|
1266
|
-
*/
|
|
1267
|
-
.ywiki-prose .ywiki-image-handle {
|
|
1268
|
-
display: none;
|
|
1269
|
-
position: absolute;
|
|
1270
|
-
width: 14px;
|
|
1271
|
-
height: 14px;
|
|
1272
|
-
box-sizing: border-box;
|
|
1273
|
-
border: 2px solid var(--color-accent);
|
|
1274
|
-
border-radius: 50%;
|
|
1275
|
-
background: #fff;
|
|
1276
|
-
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.28);
|
|
1277
|
-
z-index: 3;
|
|
1278
|
-
}
|
|
1279
|
-
/*
|
|
1280
|
-
* 选中外观需**同时**满足:node view 处于选中态,且用户点过这张图
|
|
1281
|
-
* (`.img-pick-active`)。只看前者会被 PM 的默认选区骗到——文档以图片
|
|
1282
|
-
* 开头时一打开页面就是 NodeSelection,不门控就会出现"没点过却带蓝框"。
|
|
1283
|
-
*/
|
|
1284
|
-
.editor-shell.img-pick-active .ywiki-prose .ywiki-image-frame.is-selected .ywiki-image-inner {
|
|
1285
|
-
/**
|
|
1286
|
-
* 双层描边:内层蓝色实线 + 外层白色细线。
|
|
1287
|
-
*
|
|
1288
|
-
* 单用蓝色在蓝底图片上几乎看不出边界(用户反馈"看不清有没有选中");
|
|
1289
|
-
* 白色隔离带让边框在任何底图上都有对比,与飞书的观感一致。
|
|
1290
|
-
*
|
|
1291
|
-
* 圆角与表格/其它块的选中框统一为 6px(用户反馈"图片选中的圆角和表格
|
|
1292
|
-
* 选中的差不多,现在有点不一致"):早先这里是 4px,图片行的框是 3px,
|
|
1293
|
-
* 与表格的 6px 摆在一起时能明显看出差别。
|
|
1294
|
-
*/
|
|
1295
|
-
outline: 2px solid var(--color-accent);
|
|
1296
|
-
outline-offset: 3px;
|
|
1297
|
-
border-radius: 6px;
|
|
1298
|
-
box-shadow: 0 0 0 5px #fff, 0 0 0 6px color-mix(in srgb, var(--color-accent) 28%, transparent);
|
|
1299
|
-
}
|
|
1300
|
-
.editor-shell.img-pick-active .ywiki-prose .ywiki-image-frame.is-selected .ywiki-image-handle {
|
|
1301
|
-
display: block;
|
|
1302
|
-
}
|
|
1303
|
-
/*
|
|
1304
|
-
* 图片行内**显示**四角手柄(对齐飞书):拖角调整该图的相对权重,
|
|
1305
|
-
* 整行按新权重重算,因此仍然铺满、仍然等高。
|
|
1306
|
-
* 唯一的例外是「整行处于块选区」时——那时拖动语义是移动整行,
|
|
1307
|
-
* 由行内重排逻辑让位给整块拖拽(见 image-nodeview 的 mousedown 判定)。
|
|
1308
|
-
*/
|
|
1309
|
-
.editor-shell.img-pick-active .ywiki-prose .ywiki-image-frame.is-selected.is-in-gallery .ywiki-image-handle {
|
|
1310
|
-
display: block;
|
|
1311
|
-
}
|
|
1312
|
-
/* 图片行内仍画选中蓝框,但只包住被选中的那一张(inner 贴合图片) */
|
|
1313
|
-
.editor-shell.img-pick-active .ywiki-prose .ywiki-image-frame.is-selected.is-in-gallery .ywiki-image-inner {
|
|
1314
|
-
outline: 2px solid var(--color-accent);
|
|
1315
|
-
outline-offset: 3px;
|
|
1316
|
-
/* 与其它块/图片的选中框同一圆角 */
|
|
1317
|
-
border-radius: 6px;
|
|
1318
|
-
}
|
|
1319
|
-
/* 四个角:手柄中心骑在蓝框上(outline-offset 3px + 手柄半宽 7px = -10px) */
|
|
1320
|
-
.ywiki-prose .ywiki-image-handle.handle-nw { left: -10px; top: -10px; cursor: nwse-resize; }
|
|
1321
|
-
.ywiki-prose .ywiki-image-handle.handle-ne { right: -10px; top: -10px; cursor: nesw-resize; }
|
|
1322
|
-
.ywiki-prose .ywiki-image-handle.handle-sw { left: -10px; bottom: -10px; cursor: nesw-resize; }
|
|
1323
|
-
.ywiki-prose .ywiki-image-handle.handle-se { right: -10px; bottom: -10px; cursor: nwse-resize; }
|
|
1324
|
-
|
|
1325
|
-
/**
|
|
1326
|
-
* 已选中的图片:放大镜光标(点击再次 = 打开大图预览)。
|
|
1327
|
-
* 拖拽缩放期间必须让位给缩放光标——否则指针拖离手柄、落在图片上时
|
|
1328
|
-
* 会突然变成放大镜(用户实测反馈)。
|
|
1329
|
-
*/
|
|
1330
|
-
.editor-shell.img-pick-active .ywiki-prose .ywiki-image-frame.is-selected:not(.is-resizing) img.ywiki-image {
|
|
1331
|
-
cursor: zoom-in;
|
|
1332
|
-
}
|
|
1333
|
-
.ywiki-prose img.ywiki-image[data-image-missing] {
|
|
1334
|
-
min-width: 120px;
|
|
1335
|
-
min-height: 40px;
|
|
1336
|
-
border: 1px dashed var(--color-border-strong);
|
|
1337
|
-
background: var(--color-surface-subtle);
|
|
1338
|
-
}
|
|
1339
|
-
|
|
1340
|
-
/**
|
|
1341
|
-
* 块级选中:普通块铺蓝底,**自带视觉身份的块只加外圈**。
|
|
1342
|
-
*
|
|
1343
|
-
* ## 两种画法,按块是否有自己的「脸」来分
|
|
1344
|
-
*
|
|
1345
|
-
* 飞书的做法(用户提供了对照截图)是一套区分得很清楚的规则:
|
|
1346
|
-
*
|
|
1347
|
-
* - **普通块**(段落、标题、列表、引用、图片…)——本来没有底色,选中时铺一条
|
|
1348
|
-
* 半透明蓝带,一眼能看出"这一段被选中了";
|
|
1349
|
-
* - **自带视觉身份的块**(高亮块、表格、代码块)——它们本来就有底色或边框,
|
|
1350
|
-
* 再往里铺一层蓝会把内容染色、把表格单元格弄脏。这些块只在**外围加一圈
|
|
1351
|
-
* 描边**,表达"这块在选区里",内容配色完全不动。
|
|
1352
|
-
*
|
|
1353
|
-
* 早先我一度把两类统一成蓝底,结果表格单元格被整片染蓝、高亮块的黄绿底色
|
|
1354
|
-
* 也被改掉——用户明确纠正:"像这类(高亮、表格等等)都可以有个外圈,不用蓝色
|
|
1355
|
-
* 背景"。
|
|
1356
|
-
*
|
|
1357
|
-
* ## 宽度只到正文列,不能铺到整页
|
|
1358
|
-
*
|
|
1359
|
-
* 曾经把带子向两侧溢出到"页面横带"边缘,那是把**可起手区域**和**高亮宽度**
|
|
1360
|
-
* 混为一谈了:起手区可以宽(用户在页面空白处按下就能拖选),但高亮必须只覆盖
|
|
1361
|
-
* 正文,否则左侧目录、右侧大纲栏也被染蓝(用户原话:"我内容区域在红框区域,
|
|
1362
|
-
* 为啥选中后有个这么宽的蓝色背景?不合理啊!")。
|
|
1363
|
-
*
|
|
1364
|
-
* ## 为什么普通块用伪元素而不是直接改 `background`
|
|
1365
|
-
*
|
|
1366
|
-
* 直接改背景会与块自身可能存在的底色冲突;伪元素能叠一层半透明,原底色仍透出。
|
|
1367
|
-
* 不能用 `z-index: -1`:那会让底色跑到祖先背景之后(`.tiptap` 是
|
|
1368
|
-
* `position: relative`),一旦宿主给正文加了底色,高亮就整块消失。
|
|
1369
|
-
*/
|
|
1370
|
-
.ywiki-prose .is-block-selected {
|
|
1371
|
-
position: relative;
|
|
1372
|
-
border-radius: 6px;
|
|
1373
|
-
}
|
|
1374
|
-
|
|
1375
|
-
/**
|
|
1376
|
-
* 普通块:铺半透明蓝带。
|
|
1377
|
-
*
|
|
1378
|
-
* 排除自带视觉身份的块(见下方外圈分支)——这是两类画法的唯一分界。
|
|
1379
|
-
* 用 `[data-block-chrome]` 声明式判断,而不是硬枚举类名:新增块时只在自己的
|
|
1380
|
-
* 渲染代码里加属性即可,不必回来改这里(思维导图就曾因为漏改而错误地变成蓝底)。
|
|
1381
|
-
*/
|
|
1382
|
-
.ywiki-prose .is-block-selected:not([data-block-chrome]):not(.doc-callout):not(.tableWrapper):not(.code-block-wrap):not(.ywiki-image-gallery)::before {
|
|
1383
|
-
content: '';
|
|
1384
|
-
position: absolute;
|
|
1385
|
-
/**
|
|
1386
|
-
* 四周比块本身**外扩**,让选中色不要紧贴文字(用户反馈"文字选中区域
|
|
1387
|
-
* 往外扩一下")。块盒子就是文字行盒,贴着它画会让文字看起来被框死。
|
|
1388
|
-
*
|
|
1389
|
-
* 纵向外扩量由 `measureBlocksPadding` 按**实测块间距**逐块写入:
|
|
1390
|
-
* - 相邻两个都选中:各溢出间隙的一半 → 两块拼成连续一条,且不重叠
|
|
1391
|
-
* (间隙实测 6.86px 到 21px 不等,写死一个值必然要么留白缝要么叠出深线);
|
|
1392
|
-
* - 开边一侧(首块上方 / 末块下方):用 `SELECT_PAD_Y` 给文字留呼吸空间。
|
|
1393
|
-
*
|
|
1394
|
-
* 横向用 `SELECT_PAD_X`:再宽就会溢出正文列(用户此前明确反对底色超出版心)。
|
|
1395
|
-
* 两侧同时外扩,因此带子比正文列宽 2×6px,仍落在阅读区留白内。
|
|
1396
|
-
*/
|
|
1397
|
-
top: calc(-1 * var(--block-select-pad-top, 5px));
|
|
1398
|
-
bottom: calc(-1 * var(--block-select-pad-bottom, 5px));
|
|
1399
|
-
left: calc(-1 * var(--block-select-pad-x, 6px));
|
|
1400
|
-
right: calc(-1 * var(--block-select-pad-x, 6px));
|
|
1401
|
-
background: color-mix(in srgb, var(--color-accent) 16%, transparent);
|
|
1402
|
-
/* 6px 圆角:外扩后的矩形边角更明显,需要圆角才不生硬 */
|
|
1403
|
-
border-radius: 6px;
|
|
1404
|
-
pointer-events: none;
|
|
1405
|
-
}
|
|
1406
|
-
|
|
1407
|
-
/**
|
|
1408
|
-
* 自带视觉身份的块:**只加外圈,不铺蓝底**。
|
|
1409
|
-
*
|
|
1410
|
-
* ## 哪些块算"自带视觉身份"
|
|
1411
|
-
*
|
|
1412
|
-
* 判据是「它本身已经有可见的边框、底色或独立画布」。这类块再往里铺一层蓝,
|
|
1413
|
-
* 会把内容染色或把画布弄脏;只在外围加圈,既表达"在选区里",又不改内容观感:
|
|
1414
|
-
*
|
|
1415
|
-
* - 高亮块(浅色底 + 边框)
|
|
1416
|
-
* - 表格(网格线)
|
|
1417
|
-
* - 代码块(深色底)
|
|
1418
|
-
* - 思维导图(独立画布;用户实测:"为啥思维导图没有框而是蓝色")
|
|
1419
|
-
* - 文件卡片 / 视频嵌入(自带卡片外观)
|
|
1420
|
-
* - 分栏(多列结构,铺底色会把两栏之间的空隙也染上)
|
|
1421
|
-
*
|
|
1422
|
-
* 其余块(段落、标题、列表、引用、图片…)没有自己的外观,走蓝底分支。
|
|
1423
|
-
*
|
|
1424
|
-
* ## 为什么用 `[data-block-chrome]` 而不是继续堆类名选择器
|
|
1425
|
-
*
|
|
1426
|
-
* 之前是 `:is(.doc-callout, .tableWrapper, .code-block-wrap)` 硬枚举。每新增
|
|
1427
|
-
* 一种块都要改两处(`:not()` 与 `:is()`),漏一处就会退化成"这个块又变蓝了"——
|
|
1428
|
-
* 思维导图就是这么漏掉的。改为让节点自己在根元素上声明 `data-block-chrome`,
|
|
1429
|
-
* 新增块时只在自己的渲染代码里加一个属性,不必再来碰这里。
|
|
1430
|
-
*
|
|
1431
|
-
* `outline` 而不是 `border`:border 会参与盒模型,给一个已经撑满正文列宽度的
|
|
1432
|
-
* 表格加上 2px 边框会让它溢出或挤压内容;outline 不占布局,`outline-offset`
|
|
1433
|
-
* 还能让它落在块的外侧,正好是"外圈"的观感。
|
|
1434
|
-
*
|
|
1435
|
-
* 用 55% 而非更浅的透明度:高亮块是浅蓝底、代码块是深底、表格有网格线,
|
|
1436
|
-
* 太淡的圈在这些底色上都看不清边界。
|
|
1437
|
-
*/
|
|
1438
|
-
.ywiki-prose :is([data-block-chrome], .doc-callout, .tableWrapper, .code-block-wrap).is-block-selected {
|
|
1439
|
-
/**
|
|
1440
|
-
* 描边圆角跟着**块自己的圆角**走,而不是写死 6px。
|
|
1441
|
-
*
|
|
1442
|
-
* 各块自带外观的圆角并不统一(高亮块 9px、文件卡片 8px、思维导图 12px),
|
|
1443
|
-
* 写死一个值就会出现"框的角比块本身的角更方"的错位观感(用户实测反馈:
|
|
1444
|
-
* "思维导图的选中圆角最好和选中带边框的圆角一致")。用变量按块类型覆盖,
|
|
1445
|
-
* 默认 6px 与表格一致。
|
|
1446
|
-
*/
|
|
1447
|
-
--block-select-radius: 6px;
|
|
1448
|
-
/**
|
|
1449
|
-
* 实色而不是 55% 半透明:高亮块自带浅色底与彩色边框,半透明蓝圈叠在
|
|
1450
|
-
* 这些底色上几乎看不出来(用户反馈"高亮没有被选中、没有边框")。与图片
|
|
1451
|
-
* 选中的描边用同一个强度,所有块的"被选中"一眼可辨且观感一致。
|
|
1452
|
-
*/
|
|
1453
|
-
outline: 2px solid var(--color-accent);
|
|
1454
|
-
outline-offset: 2px;
|
|
1455
|
-
/* 与铺色分支同一圆角,两种选中画的观感才统一 */
|
|
1456
|
-
border-radius: var(--block-select-radius);
|
|
1457
|
-
}
|
|
1458
|
-
/* 各块按自身外观的圆角覆盖描边圆角(值取自它们各自的 border-radius) */
|
|
1459
|
-
.ywiki-prose .doc-callout.is-block-selected { --block-select-radius: 9px; }
|
|
1460
|
-
.ywiki-prose .doc-file-attachment.is-block-selected { --block-select-radius: 8px; }
|
|
1461
|
-
.ywiki-prose [data-mind-map-node].is-block-selected { --block-select-radius: 12px; }
|
|
1462
|
-
|
|
1463
|
-
/* 块级拖拽期间:屏蔽浏览器原生的字形级选中高亮。
|
|
1464
|
-
块级选择本质上是一个覆盖整块文字的文本选区(复制/删除需要它),
|
|
1465
|
-
但浏览器会为它画字形级蓝底,与"整块底色"叠在一起很乱。
|
|
1466
|
-
这里只影响绘制,不影响选区模型与复制行为。 */
|
|
1467
|
-
.ywiki-prose.is-block-selecting ::selection,
|
|
1468
|
-
.ywiki-prose.is-block-selecting *::selection {
|
|
1469
|
-
background: transparent;
|
|
1470
|
-
color: inherit;
|
|
1471
|
-
}
|
|
1472
|
-
|
|
1473
|
-
/**
|
|
1474
|
-
* 拖拽选择框(飞书式的矩形,跟随鼠标)。
|
|
1475
|
-
*
|
|
1476
|
-
* ## 必须**填充**,不能只描边(用户对比飞书截图后指出)
|
|
1477
|
-
*
|
|
1478
|
-
* 此前这里刻意只画边框、不铺底色,理由是"填充会盖住高亮块/表格的颜色"。
|
|
1479
|
-
* 但飞书的拖拽框本身就是一块**半透明蓝色矩形**,用户一眼就能判断"我现在框住
|
|
1480
|
-
* 了哪些内容、范围有多大";只有边框时,框内的内容看起来和框外没区别,
|
|
1481
|
-
* 拖动过程中几乎无法判断落点,这正是用户反馈的差异。
|
|
1482
|
-
*
|
|
1483
|
-
* 用极低的透明度(12%)解决当初的顾虑:底色仍然透得出来,不会把高亮色
|
|
1484
|
-
* 染成另一种颜色;框的边界由 1px 实线 + 白描边交代清楚。
|
|
1485
|
-
*/
|
|
1486
|
-
.block-marquee {
|
|
1487
|
-
position: absolute;
|
|
1488
|
-
z-index: 33;
|
|
1489
|
-
pointer-events: none;
|
|
1490
|
-
/**
|
|
1491
|
-
* 宽高由插件按「按下点 → 当前指针」的拖拽矩形写入,边框必须算在尺寸内——
|
|
1492
|
-
* 否则 1px 边框会让框比鼠标实际划出的范围多出 2px(用户实测:左边贴合、
|
|
1493
|
-
* 右边多出一截)。
|
|
1494
|
-
*/
|
|
1495
|
-
box-sizing: border-box;
|
|
1496
|
-
background: color-mix(in srgb, var(--color-accent) 12%, transparent);
|
|
1497
|
-
border: 1px solid color-mix(in srgb, var(--color-accent) 65%, transparent);
|
|
1498
|
-
box-shadow: 0 0 0 1px color-mix(in srgb, var(--color-surface) 60%, transparent);
|
|
1499
|
-
border-radius: 2px;
|
|
1500
|
-
}
|
|
1501
|
-
|
|
1502
|
-
/* ---------------------------------------------------------------- 表格交互样式 */
|
|
1503
|
-
/* 这几条此前完全缺失:resizable 生效但没有任何可视反馈,选中态也没有高亮,
|
|
1504
|
-
导致"能拖列宽但看不出在哪拖、选中了格子也不知道"。 */
|
|
1505
|
-
/**
|
|
1506
|
-
* 列宽拖拽手柄。
|
|
1507
|
-
*
|
|
1508
|
-
* prosemirror-tables 为**每一行**各插一个 4px 宽的 widget,默认样式是强调色 +
|
|
1509
|
-
* 60% 透明度:鼠标经过列边界时它会在表格上竖着亮起一条分段蓝线,既没有
|
|
1510
|
-
* 拖拽反馈,也不像任何已知控件(用户反馈"表格里这个蓝色是什么?没什么用吧")。
|
|
1511
|
-
*
|
|
1512
|
-
* 改为两级语义:
|
|
1513
|
-
* - 悬停边界:中性色细线,连续贯穿整列(`top/bottom: -1px` 补齐行间缝隙),
|
|
1514
|
-
* 配合 `col-resize` 光标表达"这里可以拖";
|
|
1515
|
-
* - 真正拖拽中(单元格带 `column-resize-dragging`):才使用强调色。
|
|
1516
|
-
*/
|
|
1517
|
-
.ywiki-prose .column-resize-handle {
|
|
1518
|
-
position: absolute;
|
|
1519
|
-
right: -2px;
|
|
1520
|
-
top: -4px;
|
|
1521
|
-
bottom: -4px;
|
|
1522
|
-
width: 3px;
|
|
1523
|
-
border-radius: 2px;
|
|
1524
|
-
background-color: var(--color-border-strong, #b9c3d2);
|
|
1525
|
-
pointer-events: none;
|
|
1526
|
-
}
|
|
1527
|
-
.ywiki-prose .column-resize-dragging .column-resize-handle {
|
|
1528
|
-
background-color: var(--color-accent, #2f6feb);
|
|
1529
|
-
box-shadow: 0 0 0 1px var(--color-surface, #fff);
|
|
1530
|
-
}
|
|
1531
|
-
.ywiki-prose.resize-cursor, .ywiki-prose .resize-cursor { cursor: col-resize; }
|
|
1532
|
-
/* 矩形选中的单元格 */
|
|
1533
|
-
.ywiki-prose .selectedCell:after {
|
|
1534
|
-
content: '';
|
|
1535
|
-
position: absolute;
|
|
1536
|
-
inset: 0;
|
|
1537
|
-
background: color-mix(in srgb, var(--color-accent) 8%, transparent);
|
|
1538
|
-
pointer-events: none;
|
|
1539
|
-
z-index: 2;
|
|
1540
|
-
}
|
|
1541
|
-
.ywiki-prose td,
|
|
1542
|
-
.ywiki-prose th {
|
|
1543
|
-
position: relative;
|
|
1544
|
-
}
|
|
1545
|
-
.img-preview-mask {
|
|
1546
|
-
position: fixed;
|
|
1547
|
-
inset: 0;
|
|
1548
|
-
z-index: 1300;
|
|
1549
|
-
display: flex;
|
|
1550
|
-
flex-direction: column;
|
|
1551
|
-
align-items: center;
|
|
1552
|
-
justify-content: center;
|
|
1553
|
-
background: color-mix(in srgb, #0b1220 84%, transparent);
|
|
1554
|
-
overflow: hidden;
|
|
1555
|
-
user-select: none;
|
|
1556
|
-
}
|
|
1557
|
-
.img-preview-stage {
|
|
1558
|
-
display: flex;
|
|
1559
|
-
align-items: center;
|
|
1560
|
-
justify-content: center;
|
|
1561
|
-
width: 100%;
|
|
1562
|
-
flex: 1;
|
|
1563
|
-
min-height: 0;
|
|
1564
|
-
padding: 32px;
|
|
1565
|
-
outline: none;
|
|
1566
|
-
}
|
|
1567
|
-
.img-preview-image {
|
|
1568
|
-
max-width: 100%;
|
|
1569
|
-
max-height: 100%;
|
|
1570
|
-
object-fit: contain;
|
|
1571
|
-
cursor: grab;
|
|
1572
|
-
transition: transform 0.12s ease-out;
|
|
1573
|
-
will-change: transform;
|
|
1574
|
-
}
|
|
1575
|
-
.img-preview-image.is-dragging { cursor: grabbing; transition: none; }
|
|
1576
|
-
.img-preview-toolbar {
|
|
1577
|
-
display: flex;
|
|
1578
|
-
align-items: center;
|
|
1579
|
-
gap: 4px;
|
|
1580
|
-
flex: none;
|
|
1581
|
-
margin-bottom: 24px;
|
|
1582
|
-
padding: 6px 8px;
|
|
1583
|
-
border: 1px solid color-mix(in srgb, #ffffff 18%, transparent);
|
|
1584
|
-
border-radius: 8px;
|
|
1585
|
-
background: color-mix(in srgb, #101828 72%, transparent);
|
|
1586
|
-
color: #f2f5fa;
|
|
1587
|
-
backdrop-filter: blur(8px);
|
|
1588
|
-
}
|
|
1589
|
-
.img-preview-toolbar button {
|
|
1590
|
-
min-width: 32px;
|
|
1591
|
-
height: 30px;
|
|
1592
|
-
padding: 0 8px;
|
|
1593
|
-
border: none;
|
|
1594
|
-
border-radius: 5px;
|
|
1595
|
-
background: transparent;
|
|
1596
|
-
color: inherit;
|
|
1597
|
-
font-family: inherit;
|
|
1598
|
-
font-size: 13px;
|
|
1599
|
-
cursor: pointer;
|
|
1600
|
-
}
|
|
1601
|
-
.img-preview-toolbar button:hover { background: color-mix(in srgb, #ffffff 16%, transparent); }
|
|
1602
|
-
.img-preview-toolbar button:focus-visible { outline: 2px solid #fff; outline-offset: 1px; }
|
|
1603
|
-
.img-preview-scale { min-width: 48px; text-align: center; font-size: 12px; opacity: 0.85; }
|
|
1604
|
-
.img-preview-count {
|
|
1605
|
-
min-width: 52px;
|
|
1606
|
-
padding: 0 6px;
|
|
1607
|
-
text-align: center;
|
|
1608
|
-
font-size: 12px;
|
|
1609
|
-
font-variant-numeric: tabular-nums;
|
|
1610
|
-
opacity: 0.85;
|
|
1611
|
-
}
|
|
1612
|
-
.img-preview-divider { width: 1px; height: 16px; margin: 0 4px; background: color-mix(in srgb, #ffffff 26%, transparent); }
|
|
1613
|
-
|
|
1614
|
-
/* 翻页按钮:两侧垂直居中,避开工具条;深色半透明底保证在任何图片上都可见 */
|
|
1615
|
-
.img-preview-nav {
|
|
1616
|
-
position: absolute;
|
|
1617
|
-
inset: 0;
|
|
1618
|
-
pointer-events: none;
|
|
1619
|
-
display: flex;
|
|
1620
|
-
align-items: center;
|
|
1621
|
-
justify-content: space-between;
|
|
1622
|
-
padding: 0 18px;
|
|
1623
|
-
}
|
|
1624
|
-
.img-preview-nav-btn {
|
|
1625
|
-
pointer-events: auto;
|
|
1626
|
-
display: flex;
|
|
1627
|
-
align-items: center;
|
|
1628
|
-
justify-content: center;
|
|
1629
|
-
width: 44px;
|
|
1630
|
-
height: 44px;
|
|
1631
|
-
padding: 0;
|
|
1632
|
-
border: 1px solid color-mix(in srgb, #ffffff 20%, transparent);
|
|
1633
|
-
border-radius: 50%;
|
|
1634
|
-
background: color-mix(in srgb, #101828 66%, transparent);
|
|
1635
|
-
color: #f2f5fa;
|
|
1636
|
-
cursor: pointer;
|
|
1637
|
-
backdrop-filter: blur(8px);
|
|
1638
|
-
transition: background 0.12s, opacity 0.12s;
|
|
1639
|
-
}
|
|
1640
|
-
.img-preview-nav-btn:hover:not(:disabled) { background: color-mix(in srgb, #101828 84%, transparent); }
|
|
1641
|
-
.img-preview-nav-btn:focus-visible { outline: 2px solid #fff; outline-offset: 2px; }
|
|
1642
|
-
/* 到头的一侧保留占位(避免另一侧按钮跳动),只降到很低的可见度 */
|
|
1643
|
-
.img-preview-nav-btn:disabled { opacity: 0.22; cursor: default; }
|
|
1644
|
-
|
|
1645
|
-
@media (prefers-reduced-motion: reduce) {
|
|
1646
|
-
.img-preview-image { transition: none; }
|
|
1647
|
-
}
|
|
1648
|
-
.w-select { display: inline-flex; min-width: 0; }
|
|
1649
|
-
.w-select__trigger {
|
|
1650
|
-
display: inline-flex;
|
|
1651
|
-
align-items: center;
|
|
1652
|
-
justify-content: space-between;
|
|
1653
|
-
gap: 6px;
|
|
1654
|
-
width: 100%;
|
|
1655
|
-
min-width: 0;
|
|
1656
|
-
border: 1px solid var(--w-border-strong, var(--color-border-strong, #b9c3d2));
|
|
1657
|
-
border-radius: var(--w-radius-sm, 4px);
|
|
1658
|
-
background: var(--w-surface, var(--color-surface, #fff));
|
|
1659
|
-
color: var(--w-text, var(--color-text, #1f2937));
|
|
1660
|
-
font-family: var(--w-font-sans, inherit);
|
|
1661
|
-
cursor: pointer;
|
|
1662
|
-
transition: border-color var(--w-duration-fast, 0.12s);
|
|
1663
|
-
}
|
|
1664
|
-
.w-select--mini .w-select__trigger { height: var(--w-control-mini, 24px); padding: 0 6px; font-size: var(--w-font-size-mini, 12px); }
|
|
1665
|
-
.w-select--small .w-select__trigger { height: var(--w-control-small, 28px); padding: 0 8px; font-size: var(--w-font-size-small, 13px); }
|
|
1666
|
-
.w-select--medium .w-select__trigger { height: var(--w-control-medium, 32px); padding: 0 10px; font-size: var(--w-font-size-medium, 14px); }
|
|
1667
|
-
.w-select__trigger:hover { border-color: var(--w-accent, var(--color-accent, #2f6feb)); }
|
|
1668
|
-
.w-select__trigger:focus-visible { outline: 2px solid var(--w-accent, var(--color-accent, #2f6feb)); outline-offset: 1px; }
|
|
1669
|
-
.w-select__trigger:disabled { opacity: 0.5; cursor: not-allowed; }
|
|
1670
|
-
.w-select__label { min-width: 0; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
|
|
1671
|
-
.w-select__label.is-placeholder { color: var(--w-text-faint, var(--color-text-faint, #7c8798)); }
|
|
1672
|
-
.w-select__caret { flex: none; opacity: 0.65; }
|
|
1673
|
-
|
|
1674
|
-
.w-select-panel { display: flex; flex-direction: column; min-width: 160px; max-width: min(320px, calc(100vw - 24px)); padding: 4px; }
|
|
1675
|
-
.w-select-panel .w-select-search {
|
|
1676
|
-
width: 100%;
|
|
1677
|
-
margin-bottom: 4px;
|
|
1678
|
-
padding: 5px 8px;
|
|
1679
|
-
border: 1px solid var(--w-border, var(--color-border, #dce2eb));
|
|
1680
|
-
border-radius: var(--w-radius-sm, 4px);
|
|
1681
|
-
background: var(--w-surface, var(--color-surface, #fff));
|
|
1682
|
-
color: var(--w-text, var(--color-text, #1f2937));
|
|
1683
|
-
font-size: var(--w-font-size-small, 13px);
|
|
1684
|
-
}
|
|
1685
|
-
.w-select-panel .w-select-search:focus { outline: 2px solid var(--w-accent, #2f6feb); outline-offset: -1px; }
|
|
1686
|
-
.w-select-list {
|
|
1687
|
-
display: flex;
|
|
1688
|
-
flex-direction: column;
|
|
1689
|
-
max-height: min(50vh, 320px);
|
|
1690
|
-
overflow-y: auto;
|
|
1691
|
-
overscroll-behavior: contain;
|
|
1692
|
-
scrollbar-width: thin;
|
|
1693
|
-
}
|
|
1694
|
-
.w-select-option {
|
|
1695
|
-
display: flex;
|
|
1696
|
-
align-items: center;
|
|
1697
|
-
box-sizing: border-box;
|
|
1698
|
-
min-height: 30px;
|
|
1699
|
-
padding: 6px 9px;
|
|
1700
|
-
border: none;
|
|
1701
|
-
border-radius: var(--w-radius-md, 6px);
|
|
1702
|
-
background: transparent;
|
|
1703
|
-
color: var(--w-text, var(--color-text, #1f2937));
|
|
1704
|
-
font-family: inherit;
|
|
1705
|
-
font-size: var(--w-font-size-small, 13px);
|
|
1706
|
-
text-align: left;
|
|
1707
|
-
cursor: pointer;
|
|
1708
|
-
}
|
|
1709
|
-
.w-select-option.is-active { background: var(--w-surface-subtle, var(--color-surface-subtle, #f5f7fa)); }
|
|
1710
|
-
.w-select-option.is-selected { color: var(--w-accent, var(--color-accent, #2f6feb)); background: var(--w-accent-soft, var(--color-accent-soft, #eaf1ff)); }
|
|
1711
|
-
.w-select-option:disabled { opacity: 0.45; cursor: not-allowed; }
|
|
1712
|
-
.w-select-empty { padding: 8px 9px; color: var(--w-text-faint, #7c8798); font-size: var(--w-font-size-small, 13px); }
|
|
1713
|
-
.w-dropdown {
|
|
1714
|
-
min-width: 160px;
|
|
1715
|
-
max-width: min(320px, calc(100vw - 24px));
|
|
1716
|
-
max-height: min(70vh, 520px);
|
|
1717
|
-
overflow-y: auto;
|
|
1718
|
-
overscroll-behavior: contain;
|
|
1719
|
-
padding: 4px;
|
|
1720
|
-
scrollbar-width: thin;
|
|
1721
|
-
scrollbar-color: color-mix(in srgb, var(--w-text-faint, #7c8798) 40%, transparent) transparent;
|
|
1722
|
-
}
|
|
1723
|
-
.w-dropdown::-webkit-scrollbar { width: 8px; }
|
|
1724
|
-
.w-dropdown::-webkit-scrollbar-thumb {
|
|
1725
|
-
border: 2px solid transparent;
|
|
1726
|
-
border-radius: 999px;
|
|
1727
|
-
background-clip: content-box;
|
|
1728
|
-
background-color: color-mix(in srgb, var(--w-text-faint, #7c8798) 36%, transparent);
|
|
1729
|
-
}
|
|
1730
|
-
.w-dropdown-option {
|
|
1731
|
-
display: flex;
|
|
1732
|
-
align-items: center;
|
|
1733
|
-
gap: 6px;
|
|
1734
|
-
box-sizing: border-box;
|
|
1735
|
-
min-height: 30px;
|
|
1736
|
-
padding: 6px 9px;
|
|
1737
|
-
border-radius: var(--w-radius-md, 6px);
|
|
1738
|
-
color: var(--w-text, var(--color-text, #1f2937));
|
|
1739
|
-
font-size: var(--w-font-size-small, 13px);
|
|
1740
|
-
line-height: 1.5;
|
|
1741
|
-
cursor: pointer;
|
|
1742
|
-
user-select: none;
|
|
1743
|
-
}
|
|
1744
|
-
.w-dropdown-option:hover,
|
|
1745
|
-
.w-dropdown-option:focus-visible {
|
|
1746
|
-
background: var(--w-surface-subtle, var(--color-surface-subtle, #f5f7fa));
|
|
1747
|
-
outline: none;
|
|
1748
|
-
}
|
|
1749
|
-
.w-dropdown-option.is-selected {
|
|
1750
|
-
color: var(--w-accent, var(--color-accent, #2f6feb));
|
|
1751
|
-
background: var(--w-accent-soft, var(--color-accent-soft, #eaf1ff));
|
|
1752
|
-
}
|
|
1753
|
-
.w-dropdown-option.is-disabled {
|
|
1754
|
-
opacity: 0.45;
|
|
1755
|
-
cursor: not-allowed;
|
|
1756
|
-
background: transparent;
|
|
1757
|
-
}
|
|
1758
|
-
.w-dropdown-group__title {
|
|
1759
|
-
padding: 6px 9px 3px;
|
|
1760
|
-
color: var(--w-text-faint, var(--color-text-faint, #7c8798));
|
|
1761
|
-
font-size: 11px;
|
|
1762
|
-
line-height: 1.5;
|
|
1763
|
-
}
|
|
1764
|
-
.w-dropdown-group + .w-dropdown-group {
|
|
1765
|
-
margin-top: 2px;
|
|
1766
|
-
padding-top: 3px;
|
|
1767
|
-
border-top: 1px solid var(--w-border, var(--color-border, #dce2eb));
|
|
1768
|
-
}
|
|
1769
|
-
.w-tooltip {
|
|
1770
|
-
padding: 5px 9px;
|
|
1771
|
-
border: 1px solid var(--w-border, var(--color-border, #dce2eb));
|
|
1772
|
-
border-radius: var(--w-radius-sm, 4px);
|
|
1773
|
-
background: var(--w-surface, var(--color-surface, #fff));
|
|
1774
|
-
color: var(--w-text, var(--color-text, #1f2937));
|
|
1775
|
-
font-size: var(--w-font-size-mini, 12px);
|
|
1776
|
-
line-height: 1.55;
|
|
1777
|
-
white-space: nowrap;
|
|
1778
|
-
box-shadow: var(--w-shadow-pop, 0 10px 32px #14284a20);
|
|
1779
|
-
}
|
|
1780
|
-
.wd-dialog-mask {
|
|
1781
|
-
position: fixed;
|
|
1782
|
-
inset: 0;
|
|
1783
|
-
z-index: 1100;
|
|
1784
|
-
display: flex;
|
|
1785
|
-
align-items: flex-start;
|
|
1786
|
-
justify-content: center;
|
|
1787
|
-
padding: 10vh 16px 24px;
|
|
1788
|
-
background: color-mix(in srgb, #101828 42%, transparent);
|
|
1789
|
-
overflow-y: auto;
|
|
1790
|
-
overscroll-behavior: contain;
|
|
1791
|
-
}
|
|
1792
|
-
.wd-dialog-mask.is-fullscreen { padding: 0; overflow: hidden; }
|
|
1793
|
-
|
|
1794
|
-
.wd-dialog {
|
|
1795
|
-
position: relative;
|
|
1796
|
-
display: flex;
|
|
1797
|
-
flex-direction: column;
|
|
1798
|
-
max-width: calc(100vw - 32px);
|
|
1799
|
-
max-height: calc(100dvh - 14vh);
|
|
1800
|
-
border: 1px solid var(--w-border, var(--color-border, #dce2eb));
|
|
1801
|
-
border-radius: var(--w-radius-lg, 8px);
|
|
1802
|
-
background: var(--w-surface, var(--color-surface, #fff));
|
|
1803
|
-
color: var(--w-text, var(--color-text, #1f2937));
|
|
1804
|
-
box-shadow: 0 24px 64px #10182833;
|
|
1805
|
-
outline: none;
|
|
1806
|
-
}
|
|
1807
|
-
.wd-dialog.is-fullscreen {
|
|
1808
|
-
width: 100vw;
|
|
1809
|
-
max-width: none;
|
|
1810
|
-
height: 100dvh;
|
|
1811
|
-
max-height: none;
|
|
1812
|
-
border: 0;
|
|
1813
|
-
border-radius: 0;
|
|
1814
|
-
}
|
|
1815
|
-
|
|
1816
|
-
.wd-dialog__header {
|
|
1817
|
-
display: flex;
|
|
1818
|
-
align-items: center;
|
|
1819
|
-
gap: 12px;
|
|
1820
|
-
flex: none;
|
|
1821
|
-
padding: 14px 18px;
|
|
1822
|
-
border-bottom: 1px solid var(--w-border, var(--color-border, #dce2eb));
|
|
1823
|
-
}
|
|
1824
|
-
.wd-dialog__title {
|
|
1825
|
-
flex: 1;
|
|
1826
|
-
min-width: 0;
|
|
1827
|
-
font-size: 16px;
|
|
1828
|
-
font-weight: 600;
|
|
1829
|
-
line-height: 1.4;
|
|
1830
|
-
}
|
|
1831
|
-
.wd-dialog__close {
|
|
1832
|
-
display: flex;
|
|
1833
|
-
align-items: center;
|
|
1834
|
-
justify-content: center;
|
|
1835
|
-
flex: none;
|
|
1836
|
-
width: 28px;
|
|
1837
|
-
height: 28px;
|
|
1838
|
-
padding: 0;
|
|
1839
|
-
border: none;
|
|
1840
|
-
border-radius: var(--w-radius-sm, 4px);
|
|
1841
|
-
background: transparent;
|
|
1842
|
-
color: var(--w-text-muted, var(--color-text-muted, #667085));
|
|
1843
|
-
cursor: pointer;
|
|
1844
|
-
}
|
|
1845
|
-
.wd-dialog__close:hover { background: var(--w-surface-subtle, #f5f7fa); color: var(--w-text, #1f2937); }
|
|
1846
|
-
.wd-dialog__close:focus-visible { outline: 2px solid var(--w-accent, #2f6feb); outline-offset: -2px; }
|
|
1847
|
-
|
|
1848
|
-
.wd-dialog__body {
|
|
1849
|
-
flex: 1;
|
|
1850
|
-
min-height: 0;
|
|
1851
|
-
overflow-y: auto;
|
|
1852
|
-
padding: 4px 25px 24px;
|
|
1853
|
-
line-height: 1.7;
|
|
1854
|
-
}
|
|
1855
|
-
.wd-dialog.is-fullscreen .wd-dialog__body {
|
|
1856
|
-
display: flex;
|
|
1857
|
-
flex-direction: column;
|
|
1858
|
-
overflow: hidden;
|
|
1859
|
-
padding: 0;
|
|
1860
|
-
}
|
|
1861
|
-
|
|
1862
|
-
.wd-dialog__footer {
|
|
1863
|
-
display: flex;
|
|
1864
|
-
justify-content: flex-end;
|
|
1865
|
-
align-items: center;
|
|
1866
|
-
gap: 8px;
|
|
1867
|
-
flex: none;
|
|
1868
|
-
padding: 0 25px 20px;
|
|
1869
|
-
}
|
|
1870
|
-
|
|
1871
|
-
@media (max-width: 520px) {
|
|
1872
|
-
.wd-dialog__body { padding: 4px 18px 20px; }
|
|
1873
|
-
.wd-dialog__footer { padding: 0 18px 16px; }
|
|
1874
|
-
}
|
|
1875
|
-
.w-overlay-scrollbar { overflow: hidden; }
|
|
1876
|
-
.w-overlay-scrollbar__viewport {
|
|
1877
|
-
overflow: auto; overscroll-behavior: contain; scrollbar-width: none; min-height: 0;
|
|
1878
|
-
box-sizing: border-box; padding: 6px; overflow-anchor: none;
|
|
1879
|
-
}
|
|
1880
|
-
.w-overlay-scrollbar__viewport::-webkit-scrollbar { display: none; width: 0; height: 0; }
|
|
1881
|
-
.w-overlay-scrollbar__track {
|
|
1882
|
-
position: absolute; top: 5px; right: 2px; bottom: 5px; z-index: 1; width: 10px;
|
|
1883
|
-
opacity: 0; transition: opacity .15s; touch-action: none; cursor: default;
|
|
1884
|
-
}
|
|
1885
|
-
.w-overlay-scrollbar__track[hidden] { display: none; }
|
|
1886
|
-
.w-overlay-scrollbar:hover > .w-overlay-scrollbar__track,
|
|
1887
|
-
.w-overlay-scrollbar:focus-within > .w-overlay-scrollbar__track,
|
|
1888
|
-
.w-overlay-scrollbar.is-scrolling > .w-overlay-scrollbar__track { opacity: 1; }
|
|
1889
|
-
.w-overlay-scrollbar__thumb {
|
|
1890
|
-
position: absolute; top: 0; right: 2px; width: 6px; border-radius: 999px; touch-action: none;
|
|
1891
|
-
background: color-mix(in srgb, var(--color-text-muted) 42%, transparent); cursor: grab;
|
|
1892
|
-
}
|
|
1893
|
-
.w-overlay-scrollbar__thumb:hover,
|
|
1894
|
-
.w-overlay-scrollbar.is-dragging-scrollbar .w-overlay-scrollbar__thumb {
|
|
1895
|
-
background: color-mix(in srgb, var(--color-text-muted) 66%, transparent);
|
|
1896
|
-
}
|
|
1897
|
-
.w-overlay-scrollbar.is-dragging-scrollbar .w-overlay-scrollbar__thumb { cursor: grabbing; }
|
|
1898
|
-
.w-overlay-scrollbar__thumb:focus-visible { outline: 2px solid var(--color-accent); outline-offset: 1px; }
|
|
1899
|
-
@media (prefers-reduced-motion: reduce) { .w-overlay-scrollbar__track { transition: none; } }
|
|
1900
|
-
.mind-inline { height:100%; min-height:380px; }
|
|
1901
|
-
.mind-inline .mind-map-workspace { height:100%; padding:0; }
|
|
1902
|
-
.mind-canvas-title { display: inline-flex; align-items: center; gap: 14px; max-width: calc(100vw - 110px); }
|
|
1903
|
-
.mind-canvas-title > span { font-size: 13px; font-weight: 400; color: var(--color-text-muted); max-width: 65vw; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
1904
|
-
/**
|
|
1905
|
-
* 全屏弹层的工作区。
|
|
1906
|
-
*
|
|
1907
|
-
* ## 为什么是 `height:100%` 而不是 `calc(100dvh - 110px)`
|
|
1908
|
-
*
|
|
1909
|
-
* 弹层里 `.wd-dialog__body` 已经是"header 以下的全部高度"(flex 列、无内边距),
|
|
1910
|
-
* 再把 header 高度写死成 110px 去减就是重复扣减:实际 header 只有 57px,
|
|
1911
|
-
* 于是画布底部多出 53px 空白,看起来"没到底"(用户实测:"底部可以进一点")。
|
|
1912
|
-
* 交给父容器决定高度,画布就能填满。
|
|
1913
|
-
*
|
|
1914
|
-
* ## 为什么四周要留内边距
|
|
1915
|
-
*
|
|
1916
|
-
* 全屏时 body 的内边距是 0,工具栏会紧贴 header 的下边线、画布也贴着窗口
|
|
1917
|
-
* 左右边缘(用户实测:"边框距离太近")。这里按工具栏在上、画布在下的顺序
|
|
1918
|
-
* 给一圈呼吸空间;inline(正文内嵌)形态不需要,单独复位为 0。
|
|
1919
|
-
*/
|
|
1920
|
-
.mind-map-workspace { display: flex; flex-direction: column; height: 100%; min-height: 300px; box-sizing: border-box; padding: 16px 20px 20px; color: var(--color-text); }
|
|
1921
|
-
.mind-save-hint { margin-bottom: 10px; }
|
|
1922
|
-
.mind-canvas-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 0 0 10px; flex-wrap: wrap; }
|
|
1923
|
-
.mind-canvas-tools { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; min-width: 0; }
|
|
1924
|
-
.mind-canvas-options { justify-content: flex-end; margin-left: auto; }
|
|
1925
|
-
.mind-canvas-status { font-size: 12px; color: var(--color-text-muted); max-width: 32vw; }
|
|
1926
|
-
.mind-canvas-body { display: flex; flex: 1; min-height: 0; border: 1px solid var(--color-border); border-radius: 12px; overflow: hidden; }
|
|
1927
|
-
.mind-canvas-stage { position: relative; flex: 1; min-width: 0; overflow: hidden; outline: none; background: radial-gradient(var(--color-border) 1px, transparent 1px) 0 0 / 22px 22px var(--color-surface); }
|
|
1928
|
-
.mind-canvas-stage.mind-grid-hidden { background-image:none; }
|
|
1929
|
-
.mind-canvas-surface { width:100%;height:100%; }
|
|
1930
|
-
.mind-canvas-stage .vue-flow__pane { cursor:default; }
|
|
1931
|
-
.mind-canvas-stage .vue-flow__selection,.mind-marquee { background:color-mix(in srgb,var(--mind-color) 8%,transparent);border:1px solid var(--mind-color);box-sizing:border-box;pointer-events:none; }
|
|
1932
|
-
.mind-marquee {position:absolute;z-index:4;}
|
|
1933
|
-
.mind-canvas-stage.mind-space-pan .vue-flow__pane,
|
|
1934
|
-
.mind-canvas-stage.mind-space-pan .vue-flow__node { cursor:grab; }
|
|
1935
|
-
.mind-canvas-stage .vue-flow__pane.dragging { cursor:grabbing; }
|
|
1936
|
-
.mind-selection-summary {position:absolute;left:16px;top:16px;display:flex;align-items:center;gap:10px;padding:6px 12px;border:1px solid var(--color-border);border-radius:9px;background:var(--color-surface);font-size:12px;}
|
|
1937
|
-
.mind-menu-key {margin-left:22px;float:right;color:var(--color-text-faint);font-size:11px;}
|
|
1938
|
-
.mind-canvas-outline { flex: 0 0 235px; overflow: auto; border-right: 1px solid var(--color-border); padding: 12px 4px; }
|
|
1939
|
-
.mind-canvas-outline button { display: block; border: 0; background: transparent; border-radius: 5px; width: 100%; text-align: left; padding: 7px 10px; color: var(--color-text-muted); white-space: pre-wrap; overflow-wrap: anywhere; }
|
|
1940
|
-
.mind-canvas-outline button.current { color: var(--mind-color); background: var(--color-surface-subtle); }
|
|
1941
|
-
.mind-node-actions { position: absolute; left: 16px; top: 16px; display: flex; flex-wrap: wrap; align-items: center; gap: 5px; border: 1px solid var(--color-border); padding: 6px; background: var(--color-surface); border-radius: 10px; box-shadow: 0 4px 20px #00000008; }
|
|
1942
|
-
.mind-canvas-bottom { position: absolute; bottom: 16px; left: 18px; right: 18px; display: flex; justify-content: space-between; align-items: end; gap: 10px; pointer-events: none; }
|
|
1943
|
-
.mind-canvas-hint { font-size: 11px; color: var(--color-text-faint); padding: 6px 0; }
|
|
1944
|
-
.mind-canvas-viewport { display: flex; align-items: center; gap: 6px; padding: 6px; border: 1px solid var(--color-border); border-radius: 9px; background: var(--color-surface); pointer-events: auto; white-space: nowrap; }
|
|
1945
|
-
.mind-viewport-divider { height:20px;border-left:1px solid var(--color-border);margin:0 2px; }
|
|
1946
|
-
.mind-zoom-percent { min-width:52px;font-variant-numeric:tabular-nums; }
|
|
1947
|
-
.mind-viewport-tip { display:flex;align-items:center;flex-wrap:wrap;gap:7px;max-width:min(480px,calc(100vw - 40px));font-size:12px;line-height:1.6; }
|
|
1948
|
-
.mind-viewport-tip kbd { padding:2px 6px;border-radius:4px;background:#ffffff20;font:inherit;white-space:nowrap; }
|
|
1949
|
-
.mind-canvas-notice { position: absolute; bottom: 70px; left: 50%; transform: translateX(-50%); padding: 8px 14px; margin: 0; border-radius: 7px; background: var(--color-surface); border: 1px solid var(--color-border); color: var(--color-text-muted); font-size: 12px; pointer-events: none; max-width: 90%; }
|
|
1950
|
-
.mind-canvas-stage .mind-drop-child { outline: 3px solid var(--mind-color); border-radius: 10px; }
|
|
1951
|
-
.mind-canvas-stage .mind-drop-left { box-shadow:-6px 0 0 0 var(--mind-color);border-radius:9px; }
|
|
1952
|
-
.mind-canvas-stage .mind-drop-right { box-shadow:6px 0 0 0 var(--mind-color);border-radius:9px; }
|
|
1953
|
-
.mind-canvas-stage .mind-drag-branch { opacity:.35; }
|
|
1954
|
-
.mind-canvas-stage .mind-drag-branch-edge { opacity:.12; }
|
|
1955
|
-
.mind-side-preview {position:absolute;inset:0;width:100%;height:100%;overflow:visible;pointer-events:none;}
|
|
1956
|
-
.mind-side-preview path {fill:none;stroke:var(--mind-color);stroke-width:2;stroke-dasharray:6 4;}
|
|
1957
|
-
.mind-side-preview rect {fill:var(--color-surface);stroke:var(--mind-color);stroke-width:2;stroke-dasharray:5 3;}
|
|
1958
|
-
.mind-side-preview text {fill:var(--color-text);font-size:14px;}
|
|
1959
|
-
.mind-canvas-stage .mind-drop-before::before, .mind-canvas-stage .mind-drop-after::after { content: ''; position: absolute; left: -10px; right: -10px; height: 3px; background: var(--mind-color); }
|
|
1960
|
-
.mind-canvas-stage .mind-drop-before::before { top: -7px; }
|
|
1961
|
-
.mind-canvas-stage .mind-drop-after::after { bottom: -7px; }
|
|
1962
|
-
.mind-canvas-stage .vue-flow__edge-path { stroke: var(--mind-color); }
|
|
1963
|
-
@media (max-width: 760px) { .mind-canvas-outline { flex-basis: 170px; } .mind-canvas-hint { display: none; } .mind-canvas-toolbar { gap: 8px; } .mind-canvas-options { justify-content: flex-start; margin-left: 0; } .mind-node-actions { left: 8px; right: 8px; top: 8px; } .mind-canvas-status { max-width: 60vw; } }
|
|
1964
|
-
.mind-inline { height:100%; min-height:380px; }
|
|
1965
|
-
.mind-inline .mind-map-workspace { height:100%; }
|
|
1966
|
-
.mind-search { display:flex;align-items:center;flex-wrap:wrap;gap:8px;padding:6px 0 10px;font-size:12px; }
|
|
1967
|
-
.mind-search input {width:180px;font-size:12px;}
|
|
1968
|
-
.mind-outline-row {display:flex;align-items:center;margin:3px 0;}.mind-outline-row input {min-width:0;width:100%;border:0;background:transparent;font:12px/22px inherit;color:var(--color-text);padding:5px;}.mind-outline-row.current {background:var(--color-surface-subtle);}.mind-outline-row>button:last-child {width:24px;flex-shrink:0;padding:2px;}
|
|
1969
|
-
.mind-canvas-outline .mind-outline-row textarea{min-width:0;width:100%;border:0;background:transparent;font-size:12px;line-height:22px;color:var(--color-text);padding:5px;resize:none;border-radius:4px;}
|
|
1970
|
-
.mind-inline { height:100%; min-height:380px; }
|
|
1971
|
-
.mind-inline .mind-map-workspace { height:100%; }.mind-settings-menu{width:310px;display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding:8px;font-size:12px;}.mind-settings-menu label{width:100%;display:flex;gap:8px;align-items:center;}.mind-settings-menu input{width:auto;}
|
|
1972
|
-
.mind-canvas-fullscreen {
|
|
1973
|
-
position: fixed !important;
|
|
1974
|
-
top: 0 !important;
|
|
1975
|
-
left: 0 !important;
|
|
1976
|
-
width: 100vw !important;
|
|
1977
|
-
height: 100dvh !important;
|
|
1978
|
-
max-width: none !important;
|
|
1979
|
-
}
|
|
1980
|
-
.mind-topic-shell { position: relative; width: 100%; height: 100%; }
|
|
1981
|
-
.mind-topic { position: relative; border-radius: 9px; background: var(--color-surface); color: var(--color-text); border: 1px solid color-mix(in srgb, var(--mind-color) 38%, var(--color-border)); padding: 10px 16px; font-family: inherit; font-size: 14px; line-height: 22px; display: grid; place-items: center; box-sizing: border-box; }
|
|
1982
|
-
.mind-topic.root { background: var(--mind-color); border-color: var(--mind-color); color: white; font-weight: 600; }
|
|
1983
|
-
.mind-topic.active { box-shadow: 0 0 0 3px color-mix(in srgb, var(--mind-color) 22%, transparent); }
|
|
1984
|
-
.mind-topic-label { width:100%;min-width:0;white-space:pre-wrap;overflow-wrap:anywhere;word-break:break-all;text-align:center;line-height:var(--mind-topic-line-height,22px); }
|
|
1985
|
-
.mind-topic-input { box-sizing:border-box;display:block;border:0;border-radius:4px;outline:0;padding:0;margin:0;width:100%;min-width:0;min-height:var(--mind-topic-line-height,22px);max-width:none;resize:none;overflow:hidden;white-space:pre-wrap;word-break:break-all;overflow-wrap:anywhere;background:transparent;color:inherit;font:inherit;line-height:var(--mind-topic-line-height,22px);text-align:inherit; }
|
|
1986
|
-
.mind-topic-input:focus { box-shadow: none; outline: 0; }
|
|
1987
|
-
.mind-topic-fold {
|
|
1988
|
-
position:absolute;left:calc(100% + 20px);top:calc(50% - 12px);width:24px;min-width:24px;height:24px;padding:0;
|
|
1989
|
-
display:grid;place-items:center;z-index:2;border-radius:50%;border:1px solid var(--mind-color);color:var(--mind-color);background:var(--color-surface);
|
|
1990
|
-
font:11px/1 sans-serif;cursor:pointer;opacity:0;pointer-events:none;transition:opacity .12s ease;
|
|
1991
|
-
}
|
|
1992
|
-
.mind-topic-shell:hover>.mind-topic-fold,.mind-topic-shell.is-selected>.mind-topic-fold,
|
|
1993
|
-
.mind-topic-shell:focus-within>.mind-topic-fold,.mind-topic-shell.is-collapsed>.mind-topic-fold {
|
|
1994
|
-
opacity:1;pointer-events:auto;
|
|
1995
|
-
}
|
|
1996
|
-
.mind-topic-fold:hover {background:color-mix(in srgb,var(--mind-color) 10%,var(--color-surface));}
|
|
1997
|
-
.mind-topic-fold:focus-visible {outline:2px solid var(--mind-color);outline-offset:3px;}
|
|
1998
|
-
.mind-fold-count {font-variant-numeric:tabular-nums;font-weight:600;}
|
|
1999
|
-
/* Keep the node and its connector in one hover region while moving toward the button. */
|
|
2000
|
-
.mind-topic-shell.has-children:not(.root)::before {content:'';position:absolute;left:100%;top:0;width:64px;height:100%;}
|
|
2001
|
-
.mind-topic-handle { opacity: 0; pointer-events: none; }
|
|
2002
|
-
.mind-topic-shell.grows-left .mind-topic-add { left: auto; right: calc(100% - 12px); }
|
|
2003
|
-
.mind-topic-shell .mind-topic-add.root-left {left:auto;right:calc(100% - 12px);}
|
|
2004
|
-
.mind-topic-shell .mind-topic-add.root-right {right:auto;left:calc(100% - 12px);}
|
|
2005
|
-
.mind-topic-shell.grows-left .mind-topic-fold {left:auto;right:calc(100% + 20px);}
|
|
2006
|
-
.mind-topic-shell.grows-left .mind-fold-chevron {transform:rotate(180deg);}
|
|
2007
|
-
.mind-topic-shell.grows-left.has-children:not(.root)::before {left:auto;right:100%;}
|
|
2008
|
-
.mind-topic-shell.grows-down .mind-topic-add { left: calc(50% - 12px); top: calc(100% - 12px); }
|
|
2009
|
-
.mind-topic-shell.grows-down .mind-topic-fold {right:auto;left:calc(50% - 12px);top:calc(100% + 18px);}
|
|
2010
|
-
.mind-topic-shell.grows-down .mind-fold-chevron {transform:rotate(90deg);}
|
|
2011
|
-
.mind-topic-shell.grows-down.has-children:not(.root)::before {left:0;right:auto;top:100%;width:100%;height:60px;}
|
|
2012
|
-
@media(hover:none){.mind-topic-fold{opacity:1;pointer-events:auto;}}
|
|
2013
|
-
.mind-topic-sibling {
|
|
2014
|
-
position: absolute; width: 24px; min-width: 24px; height: 24px; padding: 0;
|
|
2015
|
-
left: calc(50% - 12px); display: grid; place-items: center;
|
|
2016
|
-
border: 0; border-radius: 50%; background: transparent; color: white;
|
|
2017
|
-
cursor: pointer; z-index: 1;
|
|
2018
|
-
}
|
|
2019
|
-
.mind-topic-sibling.before { top: -22px; }
|
|
2020
|
-
.mind-topic-sibling.after { bottom: -22px; }
|
|
2021
|
-
.mind-topic-sibling > span {
|
|
2022
|
-
display: grid; place-items: center; width: 9px; height: 9px; border-radius: 50%;
|
|
2023
|
-
background: color-mix(in srgb, var(--mind-color) 36%, var(--color-surface)); font: 0/1 sans-serif;
|
|
2024
|
-
}
|
|
2025
|
-
.mind-topic-sibling:hover, .mind-topic-sibling:focus-visible { background: transparent; }
|
|
2026
|
-
.mind-topic-sibling:hover > span, .mind-topic-sibling:focus-visible > span {
|
|
2027
|
-
width: 20px; height: 20px; background: var(--mind-color); font-size: 16px;
|
|
2028
|
-
}
|
|
2029
|
-
.mind-topic-sibling:focus-visible { outline: 2px solid var(--mind-color); outline-offset: 1px; }
|
|
2030
|
-
.mind-topic-shell.grows-down .mind-topic-sibling { top: calc(50% - 12px); bottom: auto; }
|
|
2031
|
-
.mind-topic-shell.grows-down .mind-topic-sibling.before { left: -22px; }
|
|
2032
|
-
.mind-topic-shell.grows-down .mind-topic-sibling.after { left: auto; right: -22px; }
|
|
2033
|
-
.mind-topic-description { font-size:12px;line-height:18px;white-space:pre-wrap;color:var(--color-text-muted);width:100%;min-width:0;word-break:break-all;overflow-wrap:anywhere;margin-top:6px; }
|
|
2034
|
-
.root .mind-topic-description { color:#e7f4ff; }.mind-topic-image { width:100%;height:96px;overflow:hidden;margin-top:8px; }
|
|
2035
|
-
.mind-topic-image img {width:100%!important;height:96px!important;object-fit:contain;max-height:96px!important;margin:0!important;}
|
|
2036
|
-
.mind-topic-note { font-size:10px;line-height:14px;margin-top:6px;opacity:.7;cursor:pointer; }
|
|
2037
|
-
/**
|
|
2038
|
-
* 「添加子主题」按钮:骑在节点右缘(或左缘)上的圆形按钮。
|
|
2039
|
-
*
|
|
2040
|
-
* ## 为什么必须显式给全样式(用户实测:"按钮+太怪异了")
|
|
2041
|
-
*
|
|
2042
|
-
* 这里原来只写了尺寸与圆角,**没有背景、边框、字色**。`<button>` 的默认样式
|
|
2043
|
-
* 因此生效:浅灰方块底 + 深灰描边 + 系统字体,压在蓝色根节点上像一块补丁,
|
|
2044
|
-
* 与画布其余部分(圆角卡片、细线连接)完全不是一个语言。
|
|
2045
|
-
*
|
|
2046
|
-
* 现在按参考样式统一为:圆形、白底、细描边、居中「+」,悬停时染色并略微放大。
|
|
2047
|
-
* 用 `display:grid` 而不是 `line-height` 居中——后者在 24px 圆里对不齐。
|
|
2048
|
-
*/
|
|
2049
|
-
.mind-topic-add {
|
|
2050
|
-
position: absolute;
|
|
2051
|
-
left: calc(100% - 12px);
|
|
2052
|
-
top: calc(50% - 12px);
|
|
2053
|
-
width: 24px;
|
|
2054
|
-
height: 24px;
|
|
2055
|
-
padding: 0;
|
|
2056
|
-
box-sizing: border-box;
|
|
2057
|
-
display: grid;
|
|
2058
|
-
place-items: center;
|
|
2059
|
-
border-radius: 50%;
|
|
2060
|
-
border: 1px solid color-mix(in srgb, var(--mind-color) 45%, var(--color-border));
|
|
2061
|
-
background: var(--color-surface);
|
|
2062
|
-
color: color-mix(in srgb, var(--mind-color) 82%, var(--color-text));
|
|
2063
|
-
font: 15px/1 system-ui, sans-serif;
|
|
2064
|
-
font-weight: 500;
|
|
2065
|
-
cursor: pointer;
|
|
2066
|
-
z-index: 3;
|
|
2067
|
-
box-shadow: 0 1px 3px rgb(15 23 42 / 12%);
|
|
2068
|
-
transition: background .12s ease, border-color .12s ease, transform .12s ease, box-shadow .12s ease;
|
|
2069
|
-
}
|
|
2070
|
-
/**
|
|
2071
|
-
* 悬停/聚焦:底色换成主题色的淡染,边界加深,轻微放大。
|
|
2072
|
-
*
|
|
2073
|
-
* 只改颜色而不改尺寸(除 transform)是关键:按钮骑在节点边缘,改 width/height
|
|
2074
|
-
* 会让它相对节点跳动;`transform: scale` 不参与布局,视觉放大而位置不动。
|
|
2075
|
-
*/
|
|
2076
|
-
.mind-topic-add:hover,
|
|
2077
|
-
.mind-topic-add:focus-visible {
|
|
2078
|
-
background: color-mix(in srgb, var(--mind-color) 14%, var(--color-surface));
|
|
2079
|
-
border-color: var(--mind-color);
|
|
2080
|
-
color: var(--mind-color);
|
|
2081
|
-
transform: scale(1.12);
|
|
2082
|
-
box-shadow: 0 2px 6px rgb(15 23 42 / 18%);
|
|
2083
|
-
}
|
|
2084
|
-
.mind-topic-add:focus-visible { outline: 2px solid var(--mind-color); outline-offset: 2px; }
|
|
2085
|
-
.mind-topic-add:active { transform: scale(0.98); }
|
|
2086
|
-
/* 深色节点(根主题)上按钮是白底压在深蓝上:描边改用白色系,避免与底色混在一起 */
|
|
2087
|
-
.mind-topic-add.root-left,
|
|
2088
|
-
.mind-topic-add.root-right {
|
|
2089
|
-
border-color: color-mix(in srgb, var(--color-surface) 70%, transparent);
|
|
2090
|
-
}
|
|
2091
|
-
.mind-topic-icon { font-size:16px;line-height:20px; }.mind-topic[style*="border: 0"] { background:transparent; }
|
|
2092
|
-
.mind-preview-wrap {display:flex;align-items:center;justify-content:center;overflow:hidden;min-height:240px;}
|
|
2093
|
-
.mind-preview-sized {position:relative;flex-shrink:0;}.mind-preview-scene {position:relative;transform-origin:top left;}.mind-preview-lines {position:absolute;inset:0;}
|
|
2094
|
-
.mind-preview-topic {position:absolute;box-sizing:border-box;border:1px solid color-mix(in srgb,var(--mind-color) 35%,var(--color-border));border-radius:9px;background:var(--color-surface-subtle);color:var(--color-text);padding:10px 16px;display:flex;flex-direction:column;justify-content:center;line-height:22px;white-space:pre-wrap;overflow-wrap:anywhere;word-break:break-all;}
|
|
2095
|
-
.mind-preview-title{display:block;width:100%;min-width:0;}.mind-preview-icon{font-size:16px;line-height:20px;}
|
|
2096
|
-
.mind-preview-topic.root {background:var(--mind-color);color:white;font-weight:600;}.mind-preview-topic.text {border:0;background:transparent;}
|
|
2097
|
-
.mind-preview-description {font-size:12px;font-weight:400;line-height:18px;margin-top:6px;opacity:.72;}.mind-preview-note{font-size:10px;line-height:14px;margin-top:6px;opacity:.65;}
|
|
2098
|
-
.mind-preview-image{width:100%;height:96px;margin-top:8px;overflow:hidden;}.mind-preview-image img{width:100%!important;height:96px!important;object-fit:contain;margin:0!important;}
|
|
2099
|
-
.mind-map-block { margin: 20px 0; border: 1px solid var(--color-border); border-radius: 12px; background: var(--color-surface); overflow: hidden; }
|
|
2100
|
-
.mind-map-block-header { min-height: 45px; display: flex; gap: 12px; align-items: center; justify-content: space-between; padding: 6px 12px; }
|
|
2101
|
-
.mind-map-block-label { display: inline-flex; align-items: center; gap: 8px; font-size: 12px; color: var(--color-text-muted); }
|
|
2102
|
-
.mind-map-block-label > span:first-child { color: var(--mind-color); font-size: 18px; }
|
|
2103
|
-
.mind-map-topic-count { font-size: 11px; color: var(--color-text-faint); }
|
|
2104
|
-
.mind-map-block-actions { display: flex; flex-shrink: 0; gap: 4px; }
|
|
2105
|
-
.mind-map-preview { width: 100%; display: block; min-height: 240px; cursor: zoom-in; }
|
|
2106
|
-
.mind-map-preview rect { fill: var(--color-surface-subtle); stroke: var(--mind-color); stroke-opacity: .3; }
|
|
2107
|
-
.mind-map-preview text { fill: var(--color-text); font-family: inherit; }
|
|
2108
|
-
.mind-map-preview .mind-map-root rect { fill: var(--mind-color); stroke: none; }
|
|
2109
|
-
.mind-map-preview .mind-map-root text { fill: white; }
|
|
2110
|
-
.mind-map-preview-outline { overflow: auto; padding: 16px 24px 24px; font-size: 14px; line-height: 2; white-space: pre-wrap; overflow-wrap: anywhere; }
|
|
2111
|
-
.mind-map-invalid { padding: 20px; color: var(--color-text-muted); }
|
|
2112
|
-
@media (max-width: 600px) { .mind-map-topic-count { display: none; } }
|
|
2113
|
-
.mind-details { flex: 0 0 280px; padding: 14px; border-left: 1px solid var(--color-border); overflow: auto; background: var(--color-surface); font-size: 12px; }
|
|
2114
|
-
.mind-details > header { display: flex; justify-content: space-between; align-items: center; }.mind-details-title { color: var(--color-text-muted); overflow-wrap:anywhere; }
|
|
2115
|
-
.mind-details fieldset { border: 0; border-top: 1px solid var(--color-border); padding: 12px 0; margin: 8px 0; display: flex; flex-direction:column; gap:8px; }
|
|
2116
|
-
.mind-details legend { font-weight:600; padding:0 8px 0 0; } .mind-details label { display:grid; grid-template-columns:70px minmax(0,1fr);align-items:center;gap:8px; }
|
|
2117
|
-
.mind-details input,.mind-details textarea { width:100%;font:inherit;box-sizing:border-box; } .mind-details textarea { resize:vertical; }.mind-format-buttons { display:flex;gap:6px; }
|
|
2118
|
-
.mind-relation-item { display:flex;align-items:center;gap:8px; }.mind-relation-item span { flex:1;overflow-wrap:anywhere; }
|
|
2119
|
-
.mind-color-grid {display:grid;grid-template-columns:repeat(8,24px);gap:4px;}.mind-color-grid>*{width:24px;min-width:24px;height:24px;padding:0;}
|
|
2120
|
-
.mind-comments {
|
|
2121
|
-
flex: 0 0 340px;
|
|
2122
|
-
display: flex;
|
|
2123
|
-
flex-direction: column;
|
|
2124
|
-
gap: 12px;
|
|
2125
|
-
min-height: 0;
|
|
2126
|
-
padding: 16px;
|
|
2127
|
-
overflow: auto;
|
|
2128
|
-
border-left: 1px solid var(--color-border);
|
|
2129
|
-
background: var(--color-surface, #fff);
|
|
2130
|
-
font-size: 13px;
|
|
2131
|
-
}
|
|
2132
|
-
.mind-comments__head {
|
|
2133
|
-
display: flex;
|
|
2134
|
-
align-items: flex-start;
|
|
2135
|
-
justify-content: space-between;
|
|
2136
|
-
gap: 8px;
|
|
2137
|
-
}
|
|
2138
|
-
.mind-comments__intro strong { font-size: 14px; }
|
|
2139
|
-
.mind-comments__intro p {
|
|
2140
|
-
margin: 4px 0 0;
|
|
2141
|
-
color: var(--color-text-muted);
|
|
2142
|
-
font-size: 12px;
|
|
2143
|
-
line-height: 1.6;
|
|
2144
|
-
}
|
|
2145
|
-
.mind-comments__head-actions { display: flex; flex: none; gap: 4px; }
|
|
2146
|
-
.mind-comments__error {
|
|
2147
|
-
margin: 0;
|
|
2148
|
-
padding: 8px 10px;
|
|
2149
|
-
border-radius: 6px;
|
|
2150
|
-
background: #fdecec;
|
|
2151
|
-
color: #b42b36;
|
|
2152
|
-
font-size: 12px;
|
|
2153
|
-
}
|
|
2154
|
-
.mind-comments__list { display: grid; gap: 10px; }
|
|
2155
|
-
.mind-comment {
|
|
2156
|
-
display: grid;
|
|
2157
|
-
gap: 8px;
|
|
2158
|
-
padding: 10px 12px;
|
|
2159
|
-
border: 1px solid var(--color-border);
|
|
2160
|
-
border-radius: 8px;
|
|
2161
|
-
}
|
|
2162
|
-
.mind-comment__head {
|
|
2163
|
-
display: flex;
|
|
2164
|
-
align-items: baseline;
|
|
2165
|
-
justify-content: space-between;
|
|
2166
|
-
gap: 8px;
|
|
2167
|
-
}
|
|
2168
|
-
.mind-comment__head span { color: var(--color-text-muted); font-size: 11px; }
|
|
2169
|
-
.mind-comment__body {
|
|
2170
|
-
margin: 0;
|
|
2171
|
-
white-space: pre-wrap;
|
|
2172
|
-
overflow-wrap: anywhere;
|
|
2173
|
-
line-height: 1.7;
|
|
2174
|
-
}
|
|
2175
|
-
.mind-comment__actions { display: flex; flex-wrap: wrap; gap: 4px; }
|
|
2176
|
-
.mind-comment__reply {
|
|
2177
|
-
display: grid;
|
|
2178
|
-
gap: 6px;
|
|
2179
|
-
margin-left: 12px;
|
|
2180
|
-
padding-left: 10px;
|
|
2181
|
-
border-left: 2px solid var(--color-border);
|
|
2182
|
-
}
|
|
2183
|
-
.mind-comment__label {
|
|
2184
|
-
color: var(--color-text-muted);
|
|
2185
|
-
font-size: 11px;
|
|
2186
|
-
font-weight: 600;
|
|
2187
|
-
}
|
|
2188
|
-
.mind-comment__compose { display: grid; gap: 6px; }
|
|
2189
|
-
.mind-comments__compose {
|
|
2190
|
-
display: grid;
|
|
2191
|
-
gap: 6px;
|
|
2192
|
-
padding-top: 12px;
|
|
2193
|
-
border-top: 1px solid var(--color-border);
|
|
2194
|
-
}
|
|
2195
|
-
.mind-comments__empty {
|
|
2196
|
-
margin: 0;
|
|
2197
|
-
color: var(--color-text-muted);
|
|
2198
|
-
font-size: 12px;
|
|
2199
|
-
line-height: 1.7;
|
|
2200
|
-
}
|
|
2201
|
-
.mind-comments textarea {
|
|
2202
|
-
width: 100%;
|
|
2203
|
-
padding: 8px 10px;
|
|
2204
|
-
border: 1px solid var(--color-border);
|
|
2205
|
-
border-radius: 6px;
|
|
2206
|
-
background: var(--color-surface, #fff);
|
|
2207
|
-
color: inherit;
|
|
2208
|
-
font: inherit;
|
|
2209
|
-
line-height: 1.6;
|
|
2210
|
-
box-sizing: border-box;
|
|
2211
|
-
resize: vertical;
|
|
2212
|
-
}
|
|
2213
|
-
.picker-backdrop {
|
|
2214
|
-
position: fixed;
|
|
2215
|
-
inset: 0;
|
|
2216
|
-
z-index: 1100;
|
|
2217
|
-
background: color-mix(in srgb, #000 45%, transparent);
|
|
2218
|
-
display: flex;
|
|
2219
|
-
align-items: flex-start;
|
|
2220
|
-
justify-content: center;
|
|
2221
|
-
padding-top: 12vh;
|
|
2222
|
-
}
|
|
2223
|
-
.picker-backdrop .picker {
|
|
2224
|
-
width: 420px;
|
|
2225
|
-
max-width: calc(100vw - 32px);
|
|
2226
|
-
background: var(--color-surface);
|
|
2227
|
-
border: 1px solid var(--color-border);
|
|
2228
|
-
border-radius: 10px;
|
|
2229
|
-
box-shadow: var(--shadow-pop);
|
|
2230
|
-
padding: 8px;
|
|
2231
|
-
}
|
|
2232
|
-
.picker-backdrop .picker .picker-input {
|
|
2233
|
-
width: 100%;
|
|
2234
|
-
box-sizing: border-box;
|
|
2235
|
-
border: 1px solid var(--color-border);
|
|
2236
|
-
border-radius: 6px;
|
|
2237
|
-
padding: 8px 10px;
|
|
2238
|
-
font-size: 14px;
|
|
2239
|
-
background: var(--color-surface-subtle);
|
|
2240
|
-
color: var(--color-text);
|
|
2241
|
-
}
|
|
2242
|
-
.picker-backdrop .picker-input:focus { outline: none; border-color: var(--color-accent); }
|
|
2243
|
-
.picker-backdrop .picker-list {
|
|
2244
|
-
list-style: none;
|
|
2245
|
-
margin: 6px 0 0;
|
|
2246
|
-
padding: 0;
|
|
2247
|
-
max-height: 320px;
|
|
2248
|
-
overflow-y: auto;
|
|
2249
|
-
}
|
|
2250
|
-
.picker-backdrop .picker-list li {
|
|
2251
|
-
padding: 7px 10px;
|
|
2252
|
-
border-radius: 6px;
|
|
2253
|
-
cursor: pointer;
|
|
2254
|
-
font-size: 14px;
|
|
2255
|
-
color: var(--color-text);
|
|
2256
|
-
}
|
|
2257
|
-
.picker-backdrop .picker-list li.active { background: var(--color-accent-soft); color: var(--color-accent); }
|
|
2258
|
-
.picker-backdrop .picker-title { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
2259
|
-
.picker-backdrop .picker-empty { color: var(--color-text-faint); font-size: 13px; text-align: center; padding: 14px 0; margin: 0; }
|
|
2260
|
-
/*
|
|
2261
|
-
* 垂直节奏:字段内部 8px,字段之间 16px,最后一段之外留出 dialog body 的
|
|
2262
|
-
* 底部内边距。之前的提示文字紧贴输入框、又贴着按钮行,看起来像被截断。
|
|
2263
|
-
*/
|
|
2264
|
-
.video-form { display: flex; flex-direction: column; gap: 16px; }
|
|
2265
|
-
.video-field { display: flex; flex-direction: column; gap: 8px; }
|
|
2266
|
-
.video-field label { font-size: 13px; font-weight: 600; color: var(--color-text); }
|
|
2267
|
-
.video-field input { width: 100%; }
|
|
2268
|
-
.video-hint {
|
|
2269
|
-
margin: 0;
|
|
2270
|
-
font-size: 12px;
|
|
2271
|
-
line-height: 1.7;
|
|
2272
|
-
color: var(--color-text-muted);
|
|
2273
|
-
}
|
|
2274
|
-
.video-status {
|
|
2275
|
-
margin: 0;
|
|
2276
|
-
padding: 8px 10px;
|
|
2277
|
-
border-radius: 6px;
|
|
2278
|
-
font-size: 12px;
|
|
2279
|
-
line-height: 1.7;
|
|
2280
|
-
}
|
|
2281
|
-
.video-status--ok {
|
|
2282
|
-
color: var(--color-text);
|
|
2283
|
-
background: var(--color-accent-soft);
|
|
2284
|
-
}
|
|
2285
|
-
.video-status--error {
|
|
2286
|
-
color: var(--color-danger);
|
|
2287
|
-
background: color-mix(in srgb, var(--color-danger) 8%, transparent);
|
|
2288
|
-
}
|
|
2289
|
-
.video-status-meta {
|
|
2290
|
-
margin-left: 4px;
|
|
2291
|
-
font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
|
|
2292
|
-
color: var(--color-text-muted);
|
|
2293
|
-
}
|
|
2294
|
-
.video-source {
|
|
2295
|
-
margin: 0;
|
|
2296
|
-
font-size: 12px;
|
|
2297
|
-
line-height: 1.6;
|
|
2298
|
-
color: var(--color-text-muted);
|
|
2299
|
-
overflow-wrap: anywhere;
|
|
2300
|
-
}
|
|
2301
|
-
/*
|
|
2302
|
-
* `--color-hover` 从来没有被定义过:占位区背景整条声明在计算值阶段失效,
|
|
2303
|
-
* 只剩正文白底,看起来像一块空白矩形。改用确定存在的 `--color-surface-subtle`
|
|
2304
|
-
* 并给出绝对色兜底,非 SDK 宿主也能正常着色。
|
|
2305
|
-
*/
|
|
2306
|
-
.doc-video-embed { width: 100%; min-width: 0; border: 1px solid var(--color-border, #dce2eb); border-radius: 8px; overflow: hidden; background: var(--color-surface, #fff); }
|
|
2307
|
-
.doc-video-embed .video-placeholder {
|
|
2308
|
-
min-height: 220px; padding: 28px 24px;
|
|
2309
|
-
display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 10px;
|
|
2310
|
-
background: var(--color-surface-subtle, #f5f7fa);
|
|
2311
|
-
}
|
|
2312
|
-
.doc-video-embed .video-play-icon {
|
|
2313
|
-
display: inline-flex; align-items: center; justify-content: center;
|
|
2314
|
-
width: 46px; height: 46px; margin-bottom: 2px; border-radius: 50%;
|
|
2315
|
-
color: var(--color-accent, #2f6feb);
|
|
2316
|
-
background: var(--color-accent-soft, #eaf1ff);
|
|
2317
|
-
font-size: 18px; line-height: 1; text-indent: 2px;
|
|
2318
|
-
}
|
|
2319
|
-
.doc-video-embed .video-placeholder strong { font-size: 14px; font-weight: 600; color: var(--color-text, #1f2937); }
|
|
2320
|
-
.doc-video-embed .video-id { font-size: 12px; color: var(--color-text-muted, #667085); font-family: ui-monospace, SFMono-Regular, Menlo, monospace; }
|
|
2321
|
-
.doc-video-embed .video-load {
|
|
2322
|
-
margin-top: 4px; padding: 7px 20px;
|
|
2323
|
-
color: var(--color-accent, #2f6feb); background: var(--color-accent-soft, #eaf1ff);
|
|
2324
|
-
border: 0; border-radius: 6px; cursor: pointer; font: inherit; font-size: 13px;
|
|
2325
|
-
}
|
|
2326
|
-
.doc-video-embed .video-load:hover { background: color-mix(in srgb, var(--color-accent, #2f6feb) 16%, transparent); }
|
|
2327
|
-
.doc-video-embed iframe { display: block; width: 100%; aspect-ratio: 16 / 9; min-height: 200px; border: 0; background: #111; }
|
|
2328
|
-
.doc-video-embed .video-footer {
|
|
2329
|
-
display: flex; justify-content: space-between; flex-wrap: wrap; gap: 10px;
|
|
2330
|
-
padding: 10px 14px; font-size: 12px;
|
|
2331
|
-
border-top: 1px solid var(--color-border, #dce2eb);
|
|
2332
|
-
background: var(--color-surface, #fff);
|
|
2333
|
-
}
|
|
2334
|
-
.doc-video-embed .video-footer a { color: var(--color-accent, #2f6feb); }
|
|
2335
|
-
.doc-video-embed button:focus-visible, .doc-video-embed a:focus-visible { outline: 2px solid var(--color-accent, #2f6feb); outline-offset: 2px; }
|
|
2336
|
-
.doc-file-video { margin-top: 8px; }
|
|
2337
|
-
.doc-file-video video {
|
|
2338
|
-
width: 100%;
|
|
2339
|
-
max-height: 420px;
|
|
2340
|
-
border-radius: 6px;
|
|
2341
|
-
background: #000;
|
|
2342
|
-
}
|
|
2343
|
-
.doc-file-video-fallback {
|
|
2344
|
-
margin: 0;
|
|
2345
|
-
font-size: 13px;
|
|
2346
|
-
color: var(--color-text-faint);
|
|
2347
|
-
}
|
|
2348
|
-
.wendang-spreadsheet { position: relative; display: flex; flex-direction: column; height: 100%; min-height: 300px; min-width: 0; flex: 1; }
|
|
2349
|
-
.worksheet-grid { position: relative; flex: 1; min-width: 0; min-height: 0; overflow: hidden; }
|
|
2350
|
-
.wendang-spreadsheet > p { position: absolute; top: 8px; left: 12px; z-index: 2; }
|
|
2351
|
-
|
|
2352
|
-
/**
|
|
2353
|
-
* wui 设计令牌与 Vue 版 `wui/styles/tokens.css` 同源:组件自己的变量用 `--w-*`,
|
|
2354
|
-
* 颜色两级 fallback(宿主覆盖 → 主题变量 → 绝对色),因此深色模式无需第二套定义。
|
|
2355
|
-
*/
|
|
2356
|
-
.wendang, .wendang-portal {
|
|
2357
|
-
--w-font-sans: var(--font-sans, -apple-system, BlinkMacSystemFont, 'Segoe UI', 'PingFang SC', sans-serif);
|
|
2358
|
-
--w-text: var(--color-text, #1f2937);
|
|
2359
|
-
--w-text-muted: var(--color-text-muted, #667085);
|
|
2360
|
-
--w-text-faint: var(--color-text-faint, #7c8798);
|
|
2361
|
-
--w-surface: var(--color-surface, #fff);
|
|
2362
|
-
--w-surface-subtle: var(--color-surface-subtle, #f5f7fa);
|
|
2363
|
-
--w-border: var(--color-border, #dce2eb);
|
|
2364
|
-
--w-border-strong: var(--color-border-strong, #b9c3d2);
|
|
2365
|
-
--w-accent: var(--color-accent, #2f6feb);
|
|
2366
|
-
--w-accent-soft: var(--color-accent-soft, #eaf1ff);
|
|
2367
|
-
--w-danger: var(--color-danger, #cf3d48);
|
|
2368
|
-
--w-success: var(--color-success, #238353);
|
|
2369
|
-
--w-warning: var(--color-warning, #b76e00);
|
|
2370
|
-
--w-shadow-pop: var(--shadow-pop, 0 10px 32px #14284a20);
|
|
2371
|
-
--w-font-size-mini: 12px; --w-font-size-small: 13px; --w-font-size-medium: 14px;
|
|
2372
|
-
--w-control-mini: 24px; --w-control-small: 28px; --w-control-medium: 32px;
|
|
2373
|
-
--w-radius-sm: 4px; --w-radius-md: 6px; --w-radius-lg: 8px;
|
|
2374
|
-
--w-duration-fast: .12s;
|
|
2375
|
-
}
|
|
2376
|
-
/* ---------------------------------------------------------------- WButton */
|
|
2377
|
-
.w-button {
|
|
2378
|
-
display:inline-flex;align-items:center;justify-content:center;gap:4px;flex:none;box-sizing:border-box;margin:0;
|
|
2379
|
-
border:1px solid transparent;border-radius:var(--w-radius-sm,4px);
|
|
2380
|
-
font-family:var(--w-font-sans,inherit);font-weight:500;line-height:1;white-space:nowrap;cursor:pointer;
|
|
2381
|
-
transition:background-color var(--w-duration-fast,.12s),border-color var(--w-duration-fast,.12s),color var(--w-duration-fast,.12s);
|
|
2382
|
-
}
|
|
2383
|
-
.w-button--mini { height:var(--w-control-mini,24px);padding:0 8px;font-size:var(--w-font-size-mini,12px); }
|
|
2384
|
-
.w-button--small { height:var(--w-control-small,28px);padding:0 10px;font-size:var(--w-font-size-small,13px); }
|
|
2385
|
-
.w-button--medium { height:var(--w-control-medium,32px);padding:0 12px;font-size:var(--w-font-size-medium,14px); }
|
|
2386
|
-
.w-button--narrow { padding-inline:0; }.w-button--block { display:flex;width:100%; }
|
|
2387
|
-
.w-button--default { background:var(--w-surface-subtle,var(--color-surface-subtle,#f5f7fa));border-color:var(--w-border-strong,var(--color-border-strong,#b9c3d2));color:var(--w-text,var(--color-text,#1f2937)); }
|
|
2388
|
-
.w-button--default:not(:disabled):hover { background:color-mix(in srgb,var(--w-accent,#2f6feb) 7%,var(--w-surface-subtle,#f5f7fa));border-color:var(--w-accent,var(--color-accent,#2f6feb));color:var(--w-accent,var(--color-accent,#2f6feb)); }
|
|
2389
|
-
.w-button--text { background:transparent;border-color:transparent;color:var(--w-text,var(--color-text,#1f2937)); }
|
|
2390
|
-
.w-button--text:not(:disabled):hover { background:color-mix(in srgb,currentColor 10%,transparent);color:var(--w-text,var(--color-text,#1f2937)); }
|
|
2391
|
-
.w-button--primary { background:var(--w-accent,var(--color-accent,#2f6feb));border-color:var(--w-accent,var(--color-accent,#2f6feb));color:#fff; }
|
|
2392
|
-
.w-button--primary:not(:disabled):hover { background:color-mix(in srgb,var(--w-accent,#2f6feb) 88%,#000);border-color:color-mix(in srgb,var(--w-accent,#2f6feb) 88%,#000); }
|
|
2393
|
-
.w-button--outline { background:transparent;border-color:var(--w-border,var(--color-border,#dce2eb));color:var(--w-text,var(--color-text,#1f2937)); }
|
|
2394
|
-
.w-button--outline:not(:disabled):hover { border-color:var(--w-accent,var(--color-accent,#2f6feb));color:var(--w-accent,var(--color-accent,#2f6feb)); }
|
|
2395
|
-
.w-button:disabled { opacity:.5;cursor:not-allowed; }.w-button.is-loading { cursor:progress;opacity:.75; }
|
|
2396
|
-
.w-button[aria-pressed=true] { background:var(--w-accent-soft,var(--color-accent-soft,#eaf1ff));border-color:var(--w-accent,var(--color-accent,#2f6feb));color:var(--w-accent,var(--color-accent,#2f6feb)); }
|
|
2397
|
-
.w-button__icon,.w-button__spinner { display:inline-flex;align-items:center;justify-content:center;flex:none; }
|
|
2398
|
-
.w-button__label { display:inline-flex;align-items:center;gap:4px; }.w-button__label > svg,.w-button__label > .wr-icon { flex:none; }
|
|
2399
|
-
.w-button__spinner svg { animation:w-button-spin .8s linear infinite; }
|
|
2400
|
-
@keyframes w-button-spin { to { transform:rotate(360deg); } }
|
|
2401
|
-
.w-button:focus-visible { outline:2px solid var(--w-accent,var(--color-accent,#2f6feb));outline-offset:1px; }
|
|
2402
|
-
/* ---------------------------------------------------------------- WAlert */
|
|
2403
|
-
.w-alert { display:flex;align-items:flex-start;gap:10px;padding:7px 10px;border:1px solid var(--w-border,var(--color-border));border-radius:var(--w-radius-md,6px);background:var(--w-accent-soft,var(--color-accent-soft));color:var(--w-text,var(--color-text));font-size:12px;margin-bottom:10px;flex:none;line-height:1.5; }
|
|
2404
|
-
.w-alert__icon { flex:none;line-height:1.5; }.w-alert__body { flex:1;min-width:0; }
|
|
2405
|
-
.w-alert--warning { background:color-mix(in srgb,var(--w-warning,#b76e00) 12%,var(--w-surface,#fff));border-color:color-mix(in srgb,var(--w-warning,#b76e00) 35%,var(--w-border,#dce2eb)); }
|
|
2406
|
-
.w-alert--danger { background:color-mix(in srgb,var(--w-danger,#cf3d48) 10%,var(--w-surface,#fff));border-color:color-mix(in srgb,var(--w-danger,#cf3d48) 32%,var(--w-border,#dce2eb)); }
|
|
2407
|
-
.w-alert--success { background:color-mix(in srgb,var(--w-success,#238353) 10%,var(--w-surface,#fff));border-color:color-mix(in srgb,var(--w-success,#238353) 32%,var(--w-border,#dce2eb)); }
|
|
2408
|
-
/* ---------------------------------------------------------------- WPopover */
|
|
2409
|
-
.w-popover { position:fixed;z-index:1400;max-width:min(320px,calc(100vw - 24px));max-height:min(70vh,520px);overflow:auto;min-width:160px;padding:4px;display:flex;flex-direction:column;gap:4px;background:var(--w-surface,var(--color-surface,#fff));border:1px solid var(--w-border,var(--color-border));border-radius:var(--w-radius-lg,8px);box-shadow:var(--w-shadow-pop);color:var(--w-text,var(--color-text)); }
|
|
2410
|
-
.w-popover .w-button { justify-content:flex-start;text-align:left;width:100%; }
|
|
2411
|
-
/* 内容自带内边距的面板(高亮块图标/颜色)不再叠加外层 padding。 */
|
|
2412
|
-
.w-popover--flush { padding:0; }
|
|
2413
|
-
.w-popover .wr-settings .w-button { width:auto; }
|
|
2414
|
-
.w-popover-group { padding:6px 8px 2px; font-size:11px; color:var(--color-text-faint); }
|
|
2415
|
-
/* ---------------------------------------------------------------- WDialog */
|
|
2416
|
-
.w-dialog-mask { position:fixed;inset:0;z-index:1100;display:flex;align-items:flex-start;justify-content:center;padding:10vh 16px 24px;background:color-mix(in srgb,#101828 42%,transparent);overflow-y:auto;overscroll-behavior:contain;box-sizing:border-box; }
|
|
2417
|
-
.w-dialog-mask.is-fullscreen { padding:0;overflow:hidden; }
|
|
2418
|
-
.w-dialog { position:relative;display:flex;flex-direction:column;width:520px;max-width:calc(100vw - 32px);max-height:calc(100dvh - 14vh);border:1px solid var(--w-border,var(--color-border,#dce2eb));border-radius:var(--w-radius-lg,8px);background:var(--w-surface,var(--color-surface,#fff));color:var(--w-text,var(--color-text,#1f2937));box-shadow:0 24px 64px #10182833;outline:none;box-sizing:border-box; }
|
|
2419
|
-
.w-dialog.is-fullscreen { width:100vw;max-width:none;height:100dvh;max-height:none;border:0;border-radius:0; }
|
|
2420
|
-
.w-dialog__header { display:flex;align-items:center;gap:12px;flex:none;padding:14px 18px 10px; }
|
|
2421
|
-
.w-dialog__title { flex:1;min-width:0;font-size:15px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap; }
|
|
2422
|
-
.w-dialog__close { flex:none;display:grid;place-items:center;width:28px;height:28px;padding:0;border:0;border-radius:var(--w-radius-md,6px);background:transparent;color:var(--w-text-muted,var(--color-text-muted));cursor:pointer; }
|
|
2423
|
-
.w-dialog__close:hover { background:var(--w-surface-subtle,#f5f7fa);color:var(--w-text,#1f2937); }
|
|
2424
|
-
.w-dialog__body { flex:1;min-height:0;padding:4px 18px 18px;overflow:auto;display:flex;flex-direction:column;gap:12px; }
|
|
2425
|
-
.w-dialog.is-fullscreen .w-dialog__body { padding:0;overflow:hidden; }
|
|
2426
|
-
.w-dialog__footer { flex:none;display:flex;justify-content:flex-end;gap:8px;padding:0 18px 16px; }
|
|
2427
|
-
.video-dialog {width:min(520px,calc(100vw - 32px));}
|
|
2428
|
-
.w-dialog label,.wr-mind-panel label { display:flex;flex-direction:column;gap:6px;font-size:13px;margin-bottom:10px; }
|
|
2429
|
-
.w-dialog input,.w-dialog textarea,.wr-mind-panel textarea { width:100%;box-sizing:border-box; }
|
|
2430
|
-
.wr-toolbar { display:flex;align-items:center;gap:8px;flex-wrap:wrap; }
|
|
2431
|
-
.wr-icon { display:block;flex:none; }
|
|
2432
|
-
/**
|
|
2433
|
-
* 编辑端外壳:**不加边框、不留左侧 padding**。
|
|
2434
|
-
*
|
|
2435
|
-
* 块快捷条、「+」和表格入口画在正文左缘之外,需要约 56px 留白;但这段留白
|
|
2436
|
-
* 必须由宿主提供(页面栏宽、文档容器 padding 等)。SDK 自己加 padding 会把
|
|
2437
|
-
* 正文整体右移,而宿主的页头/目录不会跟着动,整篇内容看起来就是歪的。
|
|
2438
|
-
* 宿主没留够时,`blockAffordanceStyle` 会把控件夹进视口作为兜底。
|
|
2439
|
-
*/
|
|
2440
|
-
.wr-document { position:relative;min-height:160px; }
|
|
2441
|
-
.wr-document-mount { min-width:0; }
|
|
2442
|
-
.wr-document .editor-canvas { outline:none;width:100%;max-width:var(--content-width);min-height:60vh;margin-inline:auto;padding-bottom:calc(var(--content-font-size,16px) * var(--content-line-height,1.75) + var(--space-block,12px)); }
|
|
2443
|
-
.wr-document-toolbar { margin-bottom:10px; }
|
|
2444
|
-
/* 块左侧入口:与 Vue 版共用一条 8px 间距的竖轨。 */
|
|
2445
|
-
/* 块左侧入口:与 Vue 的 EditorPane / BlockHandleMenu 同一套类名与尺寸。 */
|
|
2446
|
-
.block-plus { position:absolute; z-index:31; width:28px; height:28px; display:flex; align-items:center; justify-content:center; border:1px solid var(--color-border); border-radius:5px; background:var(--color-surface); color:var(--color-text-muted); cursor:pointer; padding:0; transition:background .12s,border-color .12s; }
|
|
2447
|
-
.block-plus:hover { color:var(--color-accent); border-color:var(--color-accent); background:var(--color-accent-soft); }
|
|
2448
|
-
.block-chip { position:absolute; z-index:31; display:flex; align-items:center; width:48px; height:28px; box-sizing:border-box; padding:1px; border:1px solid var(--color-border); border-radius:6px; background:var(--color-surface); transition:border-color .12s; }
|
|
2449
|
-
.block-chip:hover { border-color:var(--color-accent); }
|
|
2450
|
-
.chip-btn { width:22px; height:24px; display:flex; align-items:center; justify-content:center; border:none; background:transparent; color:var(--color-accent); cursor:pointer; padding:0; border-radius:3px; }
|
|
2451
|
-
.chip-btn:hover { color:var(--color-accent); background:var(--color-accent-soft); }
|
|
2452
|
-
.chip-grip { cursor:grab; color:var(--color-text-faint); }
|
|
2453
|
-
.chip-grip:active { cursor:grabbing; }
|
|
2454
|
-
/* 块菜单:主清单 + 右侧子菜单(结构、宽度、间距与 Vue 的 BlockHandleMenu 一致)。 */
|
|
2455
|
-
.block-anchor { position:absolute; z-index:45; overflow-anchor:none; display:flex; align-items:flex-start; gap:4px; pointer-events:auto; }
|
|
2456
|
-
.block-menu { width:208px; background:var(--color-surface); border:1px solid var(--color-border); border-radius:8px; box-shadow:var(--shadow-pop); padding:4px; }
|
|
2457
|
-
.bm-item { display:flex; align-items:center; gap:8px; width:100%; padding:6px 8px; border:0; border-radius:6px; background:transparent; cursor:pointer; font-size:13px; font-family:inherit; color:var(--color-text); text-align:left; }
|
|
2458
|
-
.bm-item:hover { background:var(--color-surface-subtle); }
|
|
2459
|
-
.bm-item:focus-visible { outline:2px solid var(--color-accent); outline-offset:-2px; }
|
|
2460
|
-
.bm-item.active { color:var(--color-accent); }
|
|
2461
|
-
.bm-item.disabled { opacity:.45; pointer-events:none; }
|
|
2462
|
-
.bm-item.danger { color:var(--color-danger); }
|
|
2463
|
-
.bm-item span:first-of-type { flex:1; }
|
|
2464
|
-
.bm-chevron { margin-left:auto; opacity:.5; }
|
|
2465
|
-
.bm-sep { height:1px; background:var(--color-border); margin:4px 6px; }
|
|
2466
|
-
.block-submenu { position:relative; width:208px; background:var(--color-surface); border:1px solid var(--color-border); border-radius:8px; box-shadow:var(--shadow-pop); padding:4px; max-height:calc(60vh - 10px); overflow:auto; }
|
|
2467
|
-
.block-submenu-color { width:max-content; padding:12px; }
|
|
2468
|
-
/* 文档颜色面板(块菜单与文字工具栏共用同一套版式)。 */
|
|
2469
|
-
.document-color-panel { width:220px; display:flex; flex-direction:column; gap:12px; }
|
|
2470
|
-
.color-section { display:flex; flex-direction:column; gap:6px; }
|
|
2471
|
-
.color-label { color:var(--color-text-muted); font-size:12px; line-height:1.5; }
|
|
2472
|
-
.color-grid { display:grid; grid-template-columns:repeat(8,24px); gap:4px; }
|
|
2473
|
-
.color-choice { width:24px; min-width:24px; height:24px; padding:0; border:1px solid var(--color-border); border-radius:3px; background:var(--color-surface); cursor:pointer; display:flex; align-items:center; justify-content:center; }
|
|
2474
|
-
.color-choice.selected { border-color:var(--color-accent); outline:1px solid var(--color-accent); outline-offset:-1px; }
|
|
2475
|
-
.font-sample { font-size:16px; font-weight:500; line-height:1; }
|
|
2476
|
-
.background-choice { position:relative; }
|
|
2477
|
-
.clear-stroke { display:block; width:27px; height:1px; background:var(--color-border-strong); transform:rotate(-45deg); }
|
|
2478
|
-
/* 图片工具条:与 Vue 的 EditorPane 同尺寸、同布局。 */
|
|
2479
|
-
.img-toolbar { position:absolute; z-index:50; display:flex; align-items:center; gap:2px; padding:3px 4px; background:var(--color-surface); border:1px solid var(--color-border); border-radius:8px; box-shadow:var(--shadow-pop); transform:translateX(-50%); }
|
|
2480
|
-
.it-btn { display:flex; align-items:center; justify-content:center; min-width:28px; height:28px; border:0; border-radius:5px; background:transparent; color:var(--color-text); cursor:pointer; padding:0 5px; }
|
|
2481
|
-
.it-btn:hover { background:var(--color-surface-subtle); }
|
|
2482
|
-
.it-btn.on { background:var(--color-accent-soft); color:var(--color-accent); }
|
|
2483
|
-
.it-btn.danger { color:var(--color-danger); }
|
|
2484
|
-
.it-btn.danger:hover { background:color-mix(in srgb,var(--color-danger) 12%,transparent); }
|
|
2485
|
-
.it-sep { width:1px; height:18px; background:var(--color-border); margin:0 3px; }
|
|
2486
|
-
/* 插入菜单:与 Vue 的 SlashMenu.vue / InsertPicker.vue 同一套类名与几何。 */
|
|
2487
|
-
.slash-anchor { position:absolute; z-index:40; display:flex; align-items:flex-start; gap:6px; }
|
|
2488
|
-
.slash-menu { width:268px; background:var(--color-surface); border:1px solid var(--color-border); border-radius:8px; box-shadow:var(--shadow-pop); padding:4px; }
|
|
2489
|
-
.slash-content { padding:0 0 4px; max-height:min(560px,calc(100dvh - 26px)); overflow-y:auto; overscroll-behavior:contain; }
|
|
2490
|
-
.slash-group { font-size:11px; color:var(--color-text-faint); padding:7px 8px 3px; }
|
|
2491
|
-
.slash-menu ul { list-style:none; margin:0; padding:0; }
|
|
2492
|
-
.slash-menu li { display:flex; align-items:center; gap:8px; padding:6px 8px; border-radius:6px; cursor:pointer; font-size:14px; color:var(--color-text); }
|
|
2493
|
-
.slash-menu li.active { background:var(--color-accent-soft); }
|
|
2494
|
-
.slash-label { flex:1; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
|
|
2495
|
-
.slash-hint { color:var(--color-text-faint); font-size:12px; flex:none; }
|
|
2496
|
-
.slash-chevron { color:var(--color-text-faint); flex:none; }
|
|
2497
|
-
.slash-empty { color:var(--color-text-faint); font-size:13px; text-align:center; padding:10px; }
|
|
2498
|
-
.insert-picker { position:absolute; z-index:46; background:var(--color-surface); border:1px solid var(--color-border); border-radius:8px; box-shadow:var(--shadow-pop); padding:10px; }
|
|
2499
|
-
.ip-head { display:flex; align-items:baseline; justify-content:space-between; gap:12px; font-size:12px; color:var(--color-text-muted); margin-bottom:8px; }
|
|
2500
|
-
.ip-dim { color:var(--color-text-faint); flex:none; }
|
|
2501
|
-
.ip-grid { display:grid; grid-template-columns:repeat(8,18px); grid-auto-rows:18px; gap:3px; }
|
|
2502
|
-
.ip-cell { width:18px; height:18px; padding:0; border:1px solid var(--color-border); border-radius:3px; background:var(--color-surface-subtle); cursor:pointer; }
|
|
2503
|
-
.ip-cell.on { background:var(--color-accent-soft); border-color:var(--color-accent); }
|
|
2504
|
-
.ip-counts { display:flex; gap:6px; }
|
|
2505
|
-
.ip-count { display:flex; flex-direction:column; align-items:center; gap:4px; padding:4px 6px; border:1px solid transparent; border-radius:6px; background:transparent; cursor:pointer; }
|
|
2506
|
-
.ip-count:hover { background:var(--color-surface-subtle); }
|
|
2507
|
-
.ip-count.on { border-color:var(--color-accent); background:var(--color-accent-soft); }
|
|
2508
|
-
.ip-count-box { display:flex; gap:2px; width:34px; height:22px; padding:3px; border:1px solid var(--color-border-strong); border-radius:3px; background:var(--color-surface-subtle); box-sizing:border-box; }
|
|
2509
|
-
.ip-count-bar { flex:1 1 0; min-width:0; background:var(--color-border-strong); border-radius:1px; }
|
|
2510
|
-
.ip-count.on .ip-count-bar { background:var(--color-accent); }
|
|
2511
|
-
.ip-count-num { font-size:11px; color:var(--color-text-muted); }
|
|
2512
|
-
.ip-close { position:absolute; right:4px; top:4px; padding:2px; border:0; background:transparent; color:var(--color-text-faint); cursor:pointer; }
|
|
2513
|
-
/* 表格控件:与 Vue 的 TableHandles.vue 同一套类名、尺寸与轨迹。 */
|
|
2514
|
-
.tbl-ui-host { position:absolute; left:0; top:0; width:0; height:0; pointer-events:none; z-index:30; }
|
|
2515
|
-
.tbl-ui-host > * { pointer-events:auto; }
|
|
2516
|
-
.tbl-corner { position:absolute; z-index:34; display:flex; width:44px; height:26px; padding:1px; box-sizing:border-box; border:1px solid var(--color-border); border-radius:6px; background:var(--color-surface); }
|
|
2517
|
-
.tbl-corner button { width:20px; height:22px; padding:0; display:flex; align-items:center; justify-content:center; border:none; border-radius:3px; background:transparent; color:var(--color-accent); cursor:pointer; }
|
|
2518
|
-
.tbl-corner .tbl-grip { color:var(--color-text-faint); cursor:grab; }
|
|
2519
|
-
.tbl-corner .tbl-grip:active { cursor:grabbing; }
|
|
2520
|
-
.tbl-corner button:hover { background:var(--color-accent-soft); }
|
|
2521
|
-
.tbl-axis { position:absolute; z-index:35; padding:0; border:none; border-radius:5px; background:transparent; cursor:pointer; }
|
|
2522
|
-
.tbl-axis::before { content:''; position:absolute; border-radius:3px; background:var(--color-border-strong); box-shadow:0 0 0 2px var(--color-surface); }
|
|
2523
|
-
.tbl-row-axis { width:20px; height:24px; opacity:0; }
|
|
2524
|
-
.tbl-row-axis::before { left:8px; top:4px; width:4px; height:16px; }
|
|
2525
|
-
.tbl-col-axis { width:24px; height:20px; opacity:0; }
|
|
2526
|
-
.tbl-col-axis::before { left:4px; top:8px; width:16px; height:4px; }
|
|
2527
|
-
.tbl-axis.current,.tbl-axis:hover,.tbl-axis:focus-visible,.tbl-axis.on { opacity:1; }
|
|
2528
|
-
.tbl-axis:hover::before,.tbl-axis.on::before { background:var(--color-accent); }
|
|
2529
|
-
.tbl-boundary { position:absolute; z-index:36; display:flex; justify-content:center; align-items:center; width:20px; height:20px; border:none; border-radius:50%; padding:0; background:transparent; color:transparent; cursor:pointer; }
|
|
2530
|
-
.tbl-boundary::before { content:''; position:absolute; width:4px; height:4px; border-radius:50%; background:var(--color-border-strong); }
|
|
2531
|
-
.tbl-boundary:hover,.tbl-boundary:focus-visible { color:#fff; background:var(--color-accent); }
|
|
2532
|
-
.tbl-boundary:hover::before,.tbl-boundary:focus-visible::before { display:none; }
|
|
2533
|
-
.tbl-boundary::after { content:''; position:absolute; pointer-events:none; background:var(--color-accent); display:none; }
|
|
2534
|
-
.tbl-boundary:hover::after,.tbl-boundary:focus-visible::after { display:block; }
|
|
2535
|
-
.tbl-boundary-row::after { left:14px; top:9px; width:var(--insert-length); height:2px; }
|
|
2536
|
-
.tbl-boundary-col::after { top:14px; left:9px; width:2px; height:var(--insert-length); }
|
|
2537
|
-
.tbl-boundary > svg,.tbl-boundary > .wr-icon { position:relative; z-index:1; }
|
|
2538
|
-
.tbl-selection-more { position:absolute; z-index:38; width:32px; height:20px; padding:0; line-height:12px; border:none; border-radius:6px; background:var(--color-accent); color:#fff; cursor:pointer; font-size:20px; }
|
|
2539
|
-
.tbl-ui-host > .tbl-selection { position:absolute; z-index:32; border:2px solid var(--color-accent); border-radius:5px; box-sizing:border-box; pointer-events:none; box-shadow:0 0 0 1px var(--color-surface); }
|
|
2540
|
-
.tbl-cellbar { position:fixed; z-index:55; box-sizing:border-box; width:max-content; max-width:calc(100vw - 24px); background:var(--color-surface); border:1px solid var(--color-border); border-radius:10px; box-shadow:var(--shadow-pop); padding:6px; }
|
|
2541
|
-
.tbl-tools { display:flex; gap:2px; align-items:center; flex-wrap:wrap; }
|
|
2542
|
-
.tool { flex:0 0 auto; display:flex; align-items:center; justify-content:center; gap:2px; min-width:32px; height:32px; padding:0 5px; border:none; border-radius:5px; background:transparent; color:var(--color-text); font-size:15px; cursor:pointer; }
|
|
2543
|
-
.tool:hover { background:var(--color-surface-subtle); }
|
|
2544
|
-
.tool.on { background:var(--color-accent-soft); color:var(--color-accent); }
|
|
2545
|
-
.tool[aria-disabled='true'] { opacity:.3; cursor:not-allowed; }
|
|
2546
|
-
.color-tool { position:relative; padding-bottom:2px; }
|
|
2547
|
-
.color-bar { position:absolute; left:8px; right:8px; bottom:3px; height:2px; border-radius:1px; box-shadow:0 0 0 1px var(--color-surface); }
|
|
2548
|
-
.tool-sep { flex:0 0 1px; height:20px; background:var(--color-border); margin:0 4px; }
|
|
2549
|
-
.tbl-palette { z-index:60; display:flex; flex-direction:column; gap:8px; width:max-content; max-width:calc(100vw - 48px); padding:10px; background:var(--color-surface); border:1px solid var(--color-border); border-radius:8px; box-shadow:var(--shadow-pop); }
|
|
2550
|
-
.palette-head { display:flex; flex-direction:column; gap:2px; padding:0 2px; }
|
|
2551
|
-
.palette-title { font-size:13px; font-weight:600; color:var(--color-text); }
|
|
2552
|
-
.palette-hint { font-size:11px; line-height:1.5; color:var(--color-text-muted); max-width:282px; }
|
|
2553
|
-
.palette-grid { display:grid; grid-template-columns:repeat(8,30px); gap:6px; }
|
|
2554
|
-
.tbl-align-menu { z-index:60; width:176px; padding:6px; background:var(--color-surface); border:1px solid var(--color-border); border-radius:8px; box-shadow:var(--shadow-pop); }
|
|
2555
|
-
.tbl-align-menu button { display:flex; align-items:center; gap:10px; width:100%; min-height:36px; padding:6px 10px; border:none; border-radius:5px; background:transparent; color:var(--color-text); cursor:pointer; }
|
|
2556
|
-
.tbl-align-menu button span { flex:1; text-align:left; }
|
|
2557
|
-
.tbl-align-menu button:hover,.tbl-align-menu button:focus-visible { background:var(--color-surface-subtle); }
|
|
2558
|
-
.tbl-align-menu button[aria-checked='true'] { color:var(--color-accent); }
|
|
2559
|
-
.swatch { display:flex; align-items:center; justify-content:center; width:30px; height:30px; padding:4px; border:1px solid var(--color-border); border-radius:5px; background:var(--color-surface); cursor:pointer; color:var(--color-text-muted); }
|
|
2560
|
-
.swatch span { width:100%; height:100%; border-radius:2px; }
|
|
2561
|
-
.swatch .glyph { display:flex; align-items:center; justify-content:center; width:100%; height:100%; font-size:15px; font-weight:500; line-height:1; border-radius:0; }
|
|
2562
|
-
.swatch:hover { border-color:var(--color-accent); }
|
|
2563
|
-
.swatch.selected { border-color:var(--color-accent); box-shadow:0 0 0 1px var(--color-accent); }
|
|
2564
|
-
.tbl-ctx { z-index:80; padding:0; box-sizing:border-box; background:var(--color-surface); border:1px solid var(--color-border); border-radius:8px; box-shadow:var(--shadow-pop); }
|
|
2565
|
-
/* 菜单项:与 Vue 的 TableContextMenu.vue 同尺寸与间距。 */
|
|
2566
|
-
.ctx-item { display:flex; align-items:center; gap:8px; width:100%; border:none; background:transparent; min-height:32px; padding:7px 10px; border-radius:6px; color:var(--color-text); cursor:pointer; text-align:left; font:inherit; font-size:13px; }
|
|
2567
|
-
.ctx-item:hover { background:var(--color-surface-subtle); }
|
|
2568
|
-
.ctx-item:focus-visible { outline:2px solid var(--color-accent); outline-offset:-2px; }
|
|
2569
|
-
.ctx-item:disabled { opacity:.5; cursor:wait; }
|
|
2570
|
-
.ctx-chevron { margin-left:auto; }
|
|
2571
|
-
.ctx-styles { margin:2px 4px; padding-left:12px; border-left:1px solid var(--color-border); }
|
|
2572
|
-
.ctx-style-swatch { width:18px; height:14px; border:1px solid var(--color-border); border-radius:3px; }
|
|
2573
|
-
.ctx-item.danger { color:var(--color-danger); }
|
|
2574
|
-
.ctx-sep { height:1px; background:var(--color-border); margin:4px 6px; }
|
|
2575
|
-
.ctx-label { font-size:11px; color:var(--color-text-faint); padding:4px 8px 2px; }
|
|
2576
|
-
.ctx-align { display:flex; gap:4px; padding:2px 6px 6px; }
|
|
2577
|
-
.al-btn { border:1px solid var(--color-border); background:var(--color-surface); border-radius:5px; padding:3px 6px; cursor:pointer; color:var(--color-text-muted); }
|
|
2578
|
-
.al-btn.on { border-color:var(--color-accent); color:var(--color-accent); background:var(--color-accent-soft); }
|
|
2579
|
-
.ctx-width { display:flex; align-items:center; gap:6px; padding:4px 8px; }
|
|
2580
|
-
.ctx-label-inline { color:var(--color-text-muted); }
|
|
2581
|
-
.ctx-num { width:66px; padding:3px 6px; font-size:13px; border:1px solid var(--color-border); border-radius:5px; background:var(--color-surface); color:var(--color-text); }
|
|
2582
|
-
.ctx-mini { border:1px solid var(--color-border); background:var(--color-surface); border-radius:5px; padding:3px 8px; font-size:12px; cursor:pointer; }
|
|
2583
|
-
.ctx-mini.primary { background:var(--color-accent); border-color:var(--color-accent); color:#fff; }
|
|
2584
|
-
.faint { color:var(--color-text-faint); }.small { font-size:11px; }
|
|
2585
|
-
/* 图片预览。 */
|
|
2586
|
-
.wr-link-popover { position:fixed;z-index:1450;padding:8px;border:1px solid var(--color-border);border-radius:8px;background:var(--color-surface);box-shadow:var(--shadow-pop);max-width:calc(100vw - 16px);font-size:13px; }.wr-link-popover input { min-width:250px; }.wr-link-popover a { max-width:350px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap; }
|
|
2587
|
-
/* 高亮块控件:图标常显,工具条在悬停 / 聚焦时出现。 */
|
|
2588
|
-
.callout-controls { display:contents; }
|
|
2589
|
-
.callout-icon-button { justify-self:start;background:transparent;border-color:transparent;margin:0;cursor:default; }
|
|
2590
|
-
.callout-icon-button:not(:disabled) { cursor:pointer; }
|
|
2591
|
-
.callout-toolbar { position:absolute;bottom:calc(100% + 4px);right:0;z-index:25;display:flex;align-items:center;gap:4px;padding:4px;background:var(--color-surface);border:1px solid var(--color-border);border-radius:8px;box-shadow:var(--shadow-pop);opacity:0;visibility:hidden;transition:opacity .1s; }
|
|
2592
|
-
.doc-callout:hover > .callout-controls-host .callout-toolbar,.doc-callout:focus-within > .callout-controls-host .callout-toolbar,.callout-toolbar.is-open { opacity:1;visibility:visible; }
|
|
2593
|
-
.callout-toolbar-button,.callout-preset { min-height:32px;padding:0 8px;border:0;border-radius:5px;background:transparent;color:var(--color-text);font:inherit;font-size:13px;cursor:pointer; }
|
|
2594
|
-
.callout-toolbar-button:hover,.callout-preset:hover { background:var(--color-surface-subtle); }
|
|
2595
|
-
.callout-toolbar-divider { height:16px;border-left:1px solid var(--color-border);margin:0 3px; }
|
|
2596
|
-
.callout-color-panel { width:max-content;display:flex;flex-direction:column;gap:12px;padding:2px; }
|
|
2597
|
-
.callout-color-label { font-size:12px;margin-bottom:6px;color:var(--color-text-muted); }
|
|
2598
|
-
.callout-color-grid { display:grid;grid-template-columns:repeat(8,26px);gap:5px; }
|
|
2599
|
-
.callout-color-choice { position:relative;width:26px;height:26px;padding:0;border:1px solid var(--color-border);border-radius:4px;background:var(--color-surface);cursor:pointer;overflow:hidden;font-size:12px;color:var(--color-text-muted); }
|
|
2600
|
-
.callout-color-choice.is-selected { outline:2px solid var(--color-accent);outline-offset:1px; }
|
|
2601
|
-
.callout-color-choice.is-none::after { content:'';position:absolute;left:-5px;top:12px;width:36px;height:1px;background:var(--color-border-strong);transform:rotate(-45deg); }
|
|
2602
|
-
.callout-font-sample { font-size:16px;line-height:1;color:inherit; }
|
|
2603
|
-
.callout-icon-picker { width:254px;box-sizing:border-box;padding:8px 10px 6px; }
|
|
2604
|
-
.callout-icon-grid { display:grid;grid-template-columns:repeat(6,34px);gap:6px; }
|
|
2605
|
-
.callout-icon-choice { width:34px;height:34px;padding:0;border:0;border-radius:5px;background:transparent;font-size:20px;cursor:pointer; }
|
|
2606
|
-
.callout-icon-choice:hover,.callout-icon-choice[aria-pressed='true'] { background:var(--color-accent-soft); }
|
|
2607
|
-
.callout-icon-footer { display:flex;gap:8px;margin-top:10px;padding-top:8px;border-top:1px solid var(--color-border); }
|
|
2608
|
-
.callout-icon-footer .w-button { flex:1;justify-content:center; }
|
|
2609
|
-
.wr-block-drop-line { position:fixed;z-index:1300;height:3px;pointer-events:none;background:var(--color-accent);border:1px solid #fff;border-radius:999px;box-shadow:0 1px 6px #0003;transform:translateY(-1px); }
|
|
2610
|
-
.wr-block-handle { position:absolute;left:0;z-index:25; }
|
|
2611
|
-
.wr-block-menu,.wr-insert-menu { position:sticky;bottom:10px;z-index:40;background:var(--color-surface);border:1px solid var(--color-border);border-radius:8px;padding:10px;box-shadow:var(--shadow-pop);max-height:360px;overflow:auto; }
|
|
2612
|
-
.wr-insert-menu { display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:5px; }
|
|
2613
|
-
.wr-insert-menu header { display:flex;justify-content:space-between;grid-column:1/-1; }
|
|
2614
|
-
.wr-image { max-width:100%;height:auto;cursor:zoom-in; }.wr-image-preview { max-width:100%;max-height:70vh;object-fit:contain; }
|
|
2615
|
-
.wr-media-placeholder { display:inline-flex;min-height:100px;align-items:center;justify-content:center;background:var(--color-surface-subtle); }
|
|
2616
|
-
.wr-code>header { display:flex;justify-content:space-between;background:var(--color-surface-subtle);padding:6px 10px;font-size:12px; }
|
|
2617
|
-
.wr-video iframe { width:100%;height:350px;border:0; }.doc-file-card video { max-width:100%; }
|
|
2618
|
-
.wr-spreadsheet { height:100%;min-height:360px;position:relative;display:flex;flex-direction:column; }.wr-sheet-engine { flex:1;min-height:300px; }
|
|
2619
|
-
/* 工作表只读预览:与 Vue 的 WorksheetPreview.vue 同一套类名与排版。 */
|
|
2620
|
-
.worksheet-preview { border:1px solid var(--color-border); border-radius:8px; overflow:hidden; background:var(--color-surface); }
|
|
2621
|
-
.worksheet-preview-standalone { display:flex;flex-direction:column;flex:1;min-height:0;border:0;border-radius:0; }
|
|
2622
|
-
.worksheet-preview-standalone .sheet-table { flex:1;min-height:0;max-height:none; }
|
|
2623
|
-
.sheet-tabs { display:flex; gap:8px; align-items:center; flex-wrap:wrap; padding:8px; font-size:12px; }
|
|
2624
|
-
.sheet-note { color:var(--color-text-muted); }
|
|
2625
|
-
.sheet-table { overflow:auto; max-height:600px; outline:none; }
|
|
2626
|
-
.sheet-table table { border-collapse:collapse; table-layout:fixed; width:max-content; font-size:13px; }
|
|
2627
|
-
.sheet-table th,.sheet-table td { border:1px solid var(--color-border); padding:3px 6px; overflow:hidden; white-space:pre-wrap; overflow-wrap:anywhere; vertical-align:top; }
|
|
2628
|
-
.sheet-table th { background:var(--color-surface-subtle); font-weight:500; color:var(--color-text-muted); }
|
|
2629
|
-
.sheet-table thead { position:sticky; top:0; z-index:1; }
|
|
2630
|
-
.sheet-table tr > th:first-child { min-width:40px; text-align:center; }
|
|
2631
|
-
.sheet-paging { display:flex; gap:8px; align-items:center; flex-wrap:wrap; padding:8px; font-size:12px; color:var(--color-text-faint); }
|
|
2632
|
-
.sheet-paging > span { flex:1; }
|
|
2633
|
-
.sheet-view-note { flex:none; margin:0; padding:6px 8px; font-size:12px; color:var(--color-text-muted); background:var(--color-surface-subtle); }
|
|
2634
|
-
/* The Canvas and topic visuals come from the canonical Vue style files. */
|
|
2635
|
-
.wr-mind-editor {height:100%;min-height:380px;min-width:0;}
|
|
2636
|
-
.mind-canvas-layers {position:absolute;left:0;top:0;transform-origin:0 0;}
|
|
2637
|
-
.mind-canvas-edges {position:absolute;left:0;top:0;width:1px;height:1px;overflow:visible;pointer-events:none;}
|
|
2638
|
-
.mind-canvas-stage {touch-action:none;}
|
|
2639
|
-
.mind-canvas-surface {position:absolute;inset:0;}
|
|
2640
|
-
.mind-node-actions,.mind-selection-summary,.mind-canvas-bottom {z-index:5;}
|
|
2641
|
-
.mind-canvas-notice {z-index:6;}
|
|
2642
|
-
.mind-context-menu {position:fixed;z-index:1400;padding:0;min-width:160px;max-height:calc(100vh - 16px);overflow:auto;background:var(--color-surface);border:1px solid var(--color-border);border-radius:8px;box-shadow:var(--shadow-pop);}
|
|
2643
|
-
.mind-side-projection {pointer-events:none;}
|
|
2644
|
-
.mind-canvas-fullscreen .wd-dialog__body {overflow:hidden;}
|
|
2645
|
-
.w-popover .mind-settings-menu .w-button {width:auto;}
|
|
2646
|
-
.mind-space-pan,.mind-space-pan .mind-topic {cursor:grab;}
|
|
2647
|
-
.mind-peer-badge {position:absolute;right:4px;top:4px;padding:1px 5px;border-radius:9px;background:var(--color-accent);color:white;font-size:10px;line-height:14px;pointer-events:none;}
|
|
2648
|
-
.wr-settings { display:flex;flex-direction:column;gap:8px; }
|
|
2649
|
-
@media(max-width:760px) { .wr-mind-hint { display:none; }.wr-mind-panel { flex-basis:210px; } }
|
|
2650
|
-
|
|
2651
|
-
/* Vue WPopover shell around the shared Select / Dropdown content. */
|
|
2652
|
-
.w-popover.w-select-popup,.w-popover.code-settings-popup,.w-popover.code-tooltip-popup,.w-popover.mind-dropdown-popup {
|
|
2653
|
-
box-sizing:border-box;min-width:0;max-width:calc(100vw - 16px);max-height:calc(100dvh - 16px);
|
|
2654
|
-
padding:0;display:block;overflow:visible;gap:0;overflow-anchor:none;
|
|
2655
|
-
}
|
|
1
|
+
.wendang{--content-font-size: 16px;--content-line-height: 1.75;--content-text-color: var(--color-text);--content-heading-color: #101828;--content-table-header-bg: #edf3fc;--content-table-grid-color: #d5dfed;--content-table-font-size: calc(var(--content-font-size) * 13 / 14);--content-table-line-height: 1.5;--content-table-radius: 6px;--content-table-padding-x: 8px;--content-table-padding-y: 6px;--content-media-radius: 8px;--content-gallery-gap: 12px;--content-callout-radius: 9px;--content-callout-padding-x: 18px;--content-callout-padding-y: 16px;--content-callout-icon-width: 30px;--content-callout-icon-size: 22px;--content-callout-gap: 12px;--space-block: calc(var(--content-font-size) * 5 / 7);--space-module: calc(var(--content-font-size) * 9 / 7);--space-heading-top: calc(var(--content-font-size) * 2);--space-heading-bottom: calc(var(--content-font-size) * 5 / 7);--space-list-item: calc(var(--content-font-size) * .25);--space-list-block: calc(var(--content-font-size) * .5);--space-divider: calc(var(--content-font-size) * 2)}:where(.wendang-root,.wendang,.wendang-portal) .color-transparency-grid{display:block;flex:none;width:18px;height:18px;min-height:18px;border-radius:2px;background:repeating-conic-gradient(var(--color-border-strong, #b9c3d2) 0% 25%,var(--color-surface, #fff) 0% 50%) 0 0 / 8px 8px}:where(.wendang-root,.wendang,.wendang-portal) .callout-color-choice .color-transparency-grid{position:absolute;inset:3px;width:auto;height:auto}.wendang{--color-bg: #f6f8fc;--color-surface: #fff;--color-surface-subtle: #f5f7fa;--color-text: #1f2937;--color-text-muted: #667085;--color-text-faint: #7c8798;--color-border: #dce2eb;--color-border-strong: #b9c3d2;--color-accent: var(--wendang-accent, #2f6feb);--color-accent-soft: #eaf1ff;--color-danger: #cf3d48;--color-success: #21814b;--color-warning: #ad6b12;--comment-mark-bg: #ffe58f;--comment-mark-line: #d48806;--comment-mark-bg-reply: #ffd66688;--comment-mark-line-reply: #ff9900;--comment-mark-bg-active: #ffc53d;--comment-mark-line-active: #ad6800;--content-width: 100%;--shadow-pop: 0 10px 32px #14284a20;--content-scroll-offset: 80px;--color-code-bg: #f1f5fa;color:var(--color-text);background:var(--color-surface);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,sans-serif;min-width:0;min-height:0}.wendang[data-wendang-theme=dark]{--color-bg: #17191e;--color-surface: #202329;--color-surface-subtle: #292d35;--color-text: #e5e9f0;--color-text-muted: #b2bdcd;--color-text-faint: #8f9cb0;--color-border: #3b4350;--color-border-strong: #606c7e;--color-accent-soft: #243653;--content-text-color: #e8e8ec;--content-heading-color: #f0f0f3;--content-table-header-bg: #2a2e38;--content-table-grid-color: #424753;--color-code-bg: #20242c;--comment-mark-bg: #4a3a12;--comment-mark-line: #e8b923;--comment-mark-bg-reply: #5c4813;--comment-mark-line-reply: #ffc53d;--comment-mark-bg-active: #6b5416;--comment-mark-line-active: #ffc53d}.wendang-root{min-height:0;min-width:0;height:100%}.wendang-portal{position:relative;z-index:1000}:is(.wendang,.wendang-popup-scope) :where(button,input,textarea):not(:where(.mind-topic-input)){font:inherit;box-sizing:border-box}:is(.wendang,.wendang-popup-scope) :where(a){color:var(--color-accent)}:is(.wendang,.wendang-popup-scope) :where(button){cursor:pointer}:is(.wendang,.wendang-popup-scope) .muted{color:var(--color-text-muted)}:is(.wendang,.wendang-popup-scope) .small{font-size:12px}:is(.wendang,.wendang-popup-scope) :where(input:not([type=checkbox]):not([type=radio]),textarea):not(.worksheet-grid *):not(:where(.mind-topic-input)){background:var(--color-surface);color:var(--color-text);border:1px solid var(--color-border);border-radius:6px;padding:6px 8px}:is(.wendang,.wendang-popup-scope) :where(.error-banner,.error){color:var(--color-danger)}:is(.wendang,.wendang-popup-scope) :where(.notice){color:var(--color-text-muted)}.wendang{--doc-text-gray: #646a73;--doc-text-red: #d92c2c;--doc-text-orange: #b95d0b;--doc-text-yellow: #8a6c0a;--doc-text-green: #237b35;--doc-text-blue: #1971c2;--doc-text-purple: #7048e8;--doc-highlight-gray-soft: #f1f3f5;--doc-highlight-red: #ffe3e3;--doc-highlight-orange: #fff0db;--doc-highlight-yellow: #fff3bf;--doc-highlight-green: #d3f9d8;--doc-highlight-blue: #d0ebff;--doc-highlight-purple: #e5dbff;--doc-highlight-gray: #dee2e6;--doc-highlight-gray-strong: #ced4da;--doc-highlight-red-strong: #ffc9c9;--doc-highlight-orange-strong: #ffd8a8;--doc-highlight-yellow-strong: #ffec99;--doc-highlight-green-strong: #b2f2bb;--doc-highlight-blue-strong: #a5d8ff;--doc-highlight-purple-strong: #d0bfff}.wendang[data-wendang-theme=dark]{--doc-text-gray: #b8beca;--doc-text-red: #ff9b9b;--doc-text-orange: #ffc078;--doc-text-yellow: #f6d37a;--doc-text-green: #8ce99a;--doc-text-blue: #91caff;--doc-text-purple: #d0bfff;--doc-highlight-gray-soft: #32353d;--doc-highlight-red: #563138;--doc-highlight-orange: #523a2a;--doc-highlight-yellow: #4a4226;--doc-highlight-green: #294737;--doc-highlight-blue: #293f5b;--doc-highlight-purple: #42335b;--doc-highlight-gray: #424650;--doc-highlight-gray-strong: #555b66;--doc-highlight-red-strong: #713f47;--doc-highlight-orange-strong: #6a4b31;--doc-highlight-yellow-strong: #635732;--doc-highlight-green-strong: #355c44;--doc-highlight-blue-strong: #355476;--doc-highlight-purple-strong: #554273}.ywiki-content .ywiki-code-panel{--code-bg:#ffffff;--code-header:#f7f8fa;--code-border:#e2e5e9;--code-text:#303640;--code-muted:#8a9099;--code-keyword:#d13b52;--code-string:#2e8764;--code-number:#a66e12;--code-title:#8250b5;--code-property:#476f9c;--code-comment:#8a9099;--code-tag:#bf3c51;position:relative;min-width:0;max-width:100%;border:1px solid var(--code-border);border-radius:7px;background:var(--code-bg);color:var(--code-text);isolation:isolate}.ywiki-content .ywiki-code-panel.code-theme-soft{--code-bg:#f5f8fc;--code-header:#edf2f8;--code-border:#dce4ef;--code-text:#34445b;--code-muted:#8492a7;--code-keyword:#3478bd;--code-string:#318b6d;--code-number:#9b7a1e;--code-title:#9851c4;--code-property:#516c9f;--code-comment:#8492a7;--code-tag:#b14c6c}[data-wendang-theme=dark] .ywiki-content .ywiki-code-panel.code-theme-auto,.ywiki-content .ywiki-code-panel.code-theme-night{--code-bg:#20242c;--code-header:#272c35;--code-border:#373e49;--code-text:#d7dde7;--code-muted:#929cac;--code-keyword:#f58196;--code-string:#a5cf8b;--code-number:#efbc82;--code-title:#c6a0ee;--code-property:#89b9ee;--code-comment:#919cab;--code-tag:#f08a9d}.code-toolbar{display:flex;align-items:center;gap:7px;min-height:38px;padding:4px 9px;background:var(--code-header);border-bottom:1px solid var(--code-border);border-radius:6px 6px 0 0;font:12px/1.5 var(--font-sans,system-ui,sans-serif);color:var(--code-muted);user-select:none}.code-toolbar-host{position:relative;z-index:2}.code-toolbar-actions{display:flex;align-items:center;gap:7px;margin-left:auto;min-width:0}.code-toolbar-summary{font-size:11px;font-variant-numeric:tabular-nums;white-space:nowrap}.code-language-select{width:146px;font-size:12px;--w-surface:var(--code-header);--w-text:var(--code-text);--w-text-faint:var(--code-muted);--w-border-strong:var(--code-border);--w-border:var(--code-border);--w-surface-subtle:color-mix(in srgb,var(--code-text) 10%,transparent)}.code-language-label{max-width:190px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px}.code-toolbar-divider{height:15px;border-left:1px solid var(--code-border);margin:0 2px}.code-toolbar .code-copy-button,.code-toolbar .code-settings-button,.code-toolbar .code-fold-button{color:var(--code-muted);background:transparent}.code-toolbar .code-copy-button{min-width:86px}.code-toolbar .code-copy-button:hover,.code-toolbar .code-settings-button:hover,.code-toolbar .code-fold-button:hover{color:var(--code-text);background:color-mix(in srgb,var(--code-text) 6%,transparent)}.code-copy-button svg{vertical-align:middle}.code-copy-announcement{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}.code-option-check{float:right;margin-left:24px}.code-theme-swatch{display:inline-block;width:13px;height:13px;vertical-align:-2px;margin-right:8px;border:1px solid #c7ccd4;border-radius:3px;background:#fff}.code-theme-swatch[data-code-swatch=auto]{background:linear-gradient(90deg,#fff 50%,#303743 50%)}.code-theme-swatch[data-code-swatch=soft]{background:#e6effa}.code-theme-swatch[data-code-swatch=night]{background:#272c35}.ywiki-content .ywiki-code-panel .code-scroll{display:flex;align-items:stretch;position:relative;overflow:auto;max-height:464px;border-radius:0 0 6px 6px;overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--code-muted) 45%,transparent) transparent;background:var(--code-bg)}.ywiki-content .ywiki-code-panel .code-scroll[hidden]{display:none}.ywiki-content .ywiki-code-panel.is-unlimited .code-scroll{max-height:none}.ywiki-content .ywiki-code-panel .code-line-numbers,.ywiki-content .ywiki-code-panel pre.doc-code{font:13px/22px ui-monospace,SFMono-Regular,Menlo,Consolas,Liberation Mono,monospace;font-variant-ligatures:none;tab-size:2;white-space:pre}.ywiki-content .ywiki-code-panel .code-line-numbers{position:sticky;left:0;z-index:1;align-self:stretch;flex:0 0 auto;min-width:42px;box-sizing:border-box;padding:12px 10px 12px 12px;text-align:right;color:var(--code-muted);background:var(--code-bg);border-right:1px solid color-mix(in srgb,var(--code-border) 65%,transparent);user-select:none;pointer-events:none}.ywiki-content .ywiki-code-panel pre.doc-code{flex:1 0 auto;min-width:0;max-width:none;margin:0!important;padding:12px 16px;border:0;border-radius:0;background:var(--code-bg);color:var(--code-text);overflow:visible}.ywiki-content .ywiki-code-panel pre.doc-code code{display:block;margin:0;padding:0;border:0;background:none;color:var(--code-text);font:inherit;white-space:inherit;tab-size:inherit;border-radius:0}.ywiki-content .ywiki-code-panel.is-collapsed .code-toolbar{border-bottom:0;border-radius:6px}.ywiki-content .ywiki-code-panel:focus-within{border-color:color-mix(in srgb,var(--color-accent) 45%,var(--code-border))}.ywiki-content .ywiki-code-panel .code-scroll:focus-visible{outline:2px solid var(--color-accent);outline-offset:-2px}.ywiki-content .ywiki-code-panel :where(.hljs-keyword,.hljs-selector-tag,.hljs-literal,.hljs-meta){color:var(--code-keyword)}.ywiki-content .ywiki-code-panel :where(.hljs-string,.hljs-regexp,.hljs-addition,.hljs-attribute){color:var(--code-string)}.ywiki-content .ywiki-code-panel :where(.hljs-number,.hljs-symbol,.hljs-bullet,.hljs-variable,.hljs-template-variable){color:var(--code-number)}.ywiki-content .ywiki-code-panel :where(.hljs-title,.hljs-section,.hljs-selector-class,.hljs-selector-id,.hljs-type){color:var(--code-title)}.ywiki-content .ywiki-code-panel :where(.hljs-built_in,.hljs-attr,.hljs-property){color:var(--code-property)}.ywiki-content .ywiki-code-panel :where(.hljs-comment,.hljs-quote){color:var(--code-comment);font-style:normal}.ywiki-content .ywiki-code-panel :where(.hljs-tag,.hljs-name,.hljs-deletion){color:var(--code-tag)}@media(max-width:600px){.code-toolbar{gap:4px;padding-inline:6px}.code-toolbar-actions{gap:4px}.code-language-select{width:108px}.code-toolbar-summary{display:none}.code-toolbar-divider{margin:0}.code-language-label{max-width:100px}.code-copy-button{min-width:72px!important}}@media print{.ywiki-content .ywiki-code-panel .code-scroll{max-height:none!important;overflow:visible!important;display:flex!important}.code-toolbar-actions,.code-fold-button{display:none!important}.ywiki-content .ywiki-code-panel{break-inside:avoid}.ywiki-content .ywiki-code-panel pre.doc-code{white-space:pre-wrap;overflow-wrap:anywhere;flex-shrink:1}}[data-wendang-theme]{--callout-border-gray:#c7cbd1;--callout-border-red:#f0a2a2;--callout-border-orange:#ffc078;--callout-border-yellow:#e3ca71;--callout-border-green:#91d4a0;--callout-border-blue:#9ac5ef;--callout-border-purple:#c0a4ed}[data-wendang-theme=dark]{--callout-border-gray:#697181;--callout-border-red:#a7606b;--callout-border-orange:#a97843;--callout-border-yellow:#97844a;--callout-border-green:#5c8b6c;--callout-border-blue:#587fa9;--callout-border-purple:#8667af}.ywiki-content .doc-callout{--callout-first-line-height:calc(var(--content-font-size) * var(--content-line-height));position:relative;display:grid;grid-template-columns:var(--content-callout-icon-width) minmax(0,1fr);column-gap:var(--content-callout-gap);align-items:start;border:1px solid var(--callout-border,var(--callout-border-blue));border-radius:var(--content-callout-radius);background:var(--callout-fill,var(--doc-highlight-blue));color:var(--callout-text,var(--content-text-color));padding:var(--content-callout-padding-y) var(--content-callout-padding-x)}.ywiki-content .doc-callout[data-icon-hidden=true]{grid-template-columns:minmax(0,1fr)}.callout-controls-host{display:contents}.ywiki-content .doc-callout-content{grid-column:2;grid-row:1;min-width:0;color:inherit}.ywiki-content .doc-callout[data-icon-hidden=true]>.doc-callout-content{grid-column:1}.ywiki-content .doc-callout .callout-icon{grid-column:1;grid-row:1;align-self:start;display:inline-flex;align-items:center;justify-content:center;width:var(--content-callout-icon-width);min-width:var(--content-callout-icon-width);height:var(--callout-first-line-height);min-height:0;padding:0;font-size:var(--content-callout-icon-size);line-height:1;user-select:none;color:inherit}.ywiki-content .doc-callout .callout-icon-button:hover{background:transparent}.callout-toolbar .callout-toolbar-button.callout-palette-button{padding:0}.ywiki-content .doc-callout:has(>.doc-callout-content>h1:first-child){--callout-first-line-height:calc(var(--content-font-size) * 1.625 * 1.3)}.ywiki-content .doc-callout:has(>.doc-callout-content>h2:first-child){--callout-first-line-height:calc(var(--content-font-size) * 1.375 * 1.3)}.ywiki-content .doc-callout:has(>.doc-callout-content>h3:first-child){--callout-first-line-height:calc(var(--content-font-size) * 1.125 * 1.3)}.ywiki-content .doc-callout:has(>.doc-callout-content>:is(h4,h5,h6):first-child){--callout-first-line-height:calc(var(--content-font-size) * 1.3)}.ywiki-content .doc-callout>.doc-callout-content>:first-child{margin-top:0}.ywiki-content .doc-callout>.doc-callout-content>:last-child{margin-bottom:0}.ywiki-content .doc-callout-content :where(h1,h2,h3,h4,h5,h6){color:inherit}@media(max-width:600px){.ywiki-content .doc-callout{padding:12px;column-gap:9px}}.ywiki-content{min-width:0;container-type:inline-size;container-name:wiki-content;font-size:var(--content-font-size);line-height:var(--content-line-height);color:var(--content-text-color);text-spacing-trim:space-all;overflow-wrap:anywhere;word-break:normal}.ywiki-content :where(p,h1,h2,h3,h4,h5,h6,ul,ol,blockquote,pre,table,hr,img){margin-block:0}.ywiki-content p:empty{min-height:calc(1em * var(--content-line-height))}.ywiki-content :where(h1,h2,h3,h4,h5,h6):empty{min-height:1.3em}.ywiki-content h1,.ywiki-content h2,.ywiki-content h3,.ywiki-content h4,.ywiki-content h5,.ywiki-content h6{font-weight:600;color:var(--content-heading-color);line-height:1.3;letter-spacing:-.01em;scroll-margin-top:var(--content-scroll-offset)}.ywiki-content h1{font-size:calc(var(--content-font-size) * 1.625)}.ywiki-content h2{font-size:calc(var(--content-font-size) * 1.375)}.ywiki-content h3{font-size:calc(var(--content-font-size) * 1.125)}.ywiki-content h4,.ywiki-content h5{font-size:var(--content-font-size)}.ywiki-content h6{font-size:var(--content-font-size);color:var(--color-text-muted);letter-spacing:0}.ywiki-content ul,.ywiki-content ol{padding-left:1.5em}.ywiki-content ul{list-style:disc}.ywiki-content ol{list-style:decimal}.ywiki-content ul ul{list-style:circle}.ywiki-content ul ul ul{list-style:square}.ywiki-content li+li{margin-top:var(--space-list-item)}.ywiki-content li::marker{color:var(--color-text-muted)}.ywiki-content ul.doc-task-list,.ywiki-content ul[data-type=taskList]{list-style:none;padding-left:0}.ywiki-content li.doc-task-item,.ywiki-content ul[data-type=taskList]>li{display:flex;gap:.5em;align-items:flex-start;line-height:var(--content-line-height)}.ywiki-content li.doc-task-item>input[type=checkbox],.ywiki-content ul[data-type=taskList]>li>label>input[type=checkbox]{flex:none;font:inherit;width:1em;height:1em;margin:0;accent-color:var(--color-accent)}.ywiki-content li.doc-task-item>input[type=checkbox]{margin-top:calc((var(--content-line-height) - 1) * .5em)}.ywiki-content li.doc-task-item>span,.ywiki-content ul[data-type=taskList]>li>div{min-width:0;flex:1}.ywiki-content blockquote{border-left:3px solid var(--color-border-strong);padding:.1em 0 .1em 1em;color:var(--color-text-muted)}.ywiki-content pre{overflow:auto;padding:12px 16px;border:1px solid var(--color-border);border-radius:6px;background:var(--color-code-bg);font:13px/22px ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}.ywiki-content code{background:var(--color-surface-subtle);border:1px solid var(--color-border);border-radius:4px;padding:.1em .35em;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.875em}.math-node{cursor:pointer}.math-node .math-render{border-radius:4px}.math-node:hover .math-render{background:color-mix(in srgb,var(--color-accent) 10%,transparent)}.math-node.is-editing .math-render{display:none}.math-latex-input{width:100%;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.875em;padding:2px 6px;border:1px solid var(--color-accent);border-radius:4px;background:var(--color-surface);color:var(--color-text)}.ywiki-content table,.ywiki-content .doc-table{--table-grid-color: var(--content-table-grid-color);--table-header-bg: var(--content-table-header-bg);border-collapse:separate;border-spacing:0;table-layout:auto;width:100%;font-size:var(--content-table-font-size);background:var(--color-surface);border:1px solid var(--table-grid-color);border-radius:var(--content-table-radius);overflow:hidden}.ywiki-content :where(.doc-table-wrap,.tableWrapper){overflow-x:auto;scrollbar-width:thin;scrollbar-color:var(--color-border-strong) transparent}.ywiki-content th,.ywiki-content td{border:none;border-right:1px solid var(--table-grid-color);border-bottom:1px solid var(--table-grid-color);padding:var(--content-table-padding-y) var(--content-table-padding-x);line-height:var(--content-table-line-height);min-width:60px;text-align:left;vertical-align:top;overflow-wrap:anywhere}.ywiki-content th{background:var(--table-header-bg);color:var(--content-heading-color);font-weight:600}.ywiki-content tr:last-child>:where(td,th){border-bottom:none}.ywiki-content tr>:where(td,th):last-child{border-right:none}.ywiki-content tr:first-child>:where(td,th):first-child{border-top-left-radius:5px}.ywiki-content tr:first-child>:where(td,th):last-child{border-top-right-radius:5px}.ywiki-content tr:last-child>:where(td,th):first-child{border-bottom-left-radius:5px}.ywiki-content tr:last-child>:where(td,th):last-child{border-bottom-right-radius:5px}.ywiki-content hr{border:none;border-top:1px solid var(--color-border)}.ywiki-content .doc-image-caption{margin-top:6px;color:var(--color-text-muted);font-size:12px;line-height:1.5;text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ywiki-content .doc-image-gallery{display:flex;flex-wrap:wrap;align-items:flex-start;gap:8px;width:100%}.ywiki-content .doc-image-gallery>.doc-image[data-sized]{margin-inline:0}.ywiki-content .doc-image-gallery{gap:var(--content-gallery-gap);align-items:flex-start}.ywiki-content .doc-image-gallery>.doc-image{flex:1 1 0;min-width:0;width:auto;height:auto;max-width:none;margin:0;aspect-ratio:var(--doc-image-aspect-ratio, 1.3333);object-fit:contain;flex-grow:calc(var(--doc-image-aspect-ratio, 1) * var(--doc-image-weight, 1))}.ywiki-content .doc-image-gallery>.doc-image-figure{flex:1 1 0;min-width:0;margin:0;flex-grow:calc(var(--doc-image-aspect-ratio, 1) * var(--doc-image-weight, 1))}.ywiki-content .doc-image-gallery>.doc-image-figure>.doc-image{width:100%;max-width:100%;margin:0}.ywiki-content .doc-image-gallery>.doc-image-figure>.doc-image-caption{margin-inline:0}.ywiki-content img,.ywiki-content .doc-image{display:block;margin-inline:auto;max-width:100%;height:auto;border-radius:var(--content-media-radius)}@property --ywiki-image-flow-angle{syntax: "<angle>"; initial-value: 0deg; inherits: false;}.ywiki-content .doc-image[data-loading]{box-sizing:border-box;padding:3px;border-radius:var(--content-media-radius);background-image:conic-gradient(from var(--ywiki-image-flow-angle),color-mix(in srgb,var(--color-accent) 14%,var(--color-surface-subtle)) 0turn 55%,color-mix(in srgb,var(--color-accent) 55%,transparent) 78%,var(--color-accent) 92%,color-mix(in srgb,var(--color-accent) 14%,var(--color-surface-subtle)) 100%);-webkit-mask-image:linear-gradient(#000 0 0),linear-gradient(#000 0 0);-webkit-mask-clip:content-box,border-box;-webkit-mask-composite:xor;mask-image:linear-gradient(#000 0 0),linear-gradient(#000 0 0);mask-clip:content-box,border-box;mask-composite:exclude;animation:ywiki-image-flow 1.4s linear infinite;min-height:120px}.ywiki-content .doc-image-gallery>.doc-image[data-loading]{min-height:0}@keyframes ywiki-image-flow{to{--ywiki-image-flow-angle: 360deg}}.ywiki-content .doc-image[data-image-error]{box-sizing:border-box;min-height:72px;background-color:color-mix(in srgb,var(--color-surface-subtle) 70%,var(--color-border));border-radius:var(--content-media-radius);outline:1px solid color-mix(in srgb,var(--color-border-strong) 55%,transparent);outline-offset:-1px}.ywiki-content .doc-image-gallery>.doc-image[data-image-error]{min-height:0}@media(prefers-reduced-motion:reduce){.ywiki-content .doc-image[data-loading]{animation:none}}.ywiki-content .doc-image[data-sized],.ywiki-content .doc-image[data-align=left]{margin-left:0;margin-right:auto}.ywiki-content .doc-image[data-align=center]{margin-left:auto;margin-right:auto}.ywiki-content .doc-image[data-align=right]{margin-left:auto;margin-right:0}.ywiki-content a,.ywiki-content .doc-link{color:var(--color-accent);text-decoration:none}.ywiki-content a:hover,.ywiki-content .doc-link:hover{text-decoration:underline}.ywiki-content .doc-page-link{color:var(--color-accent);text-decoration:none;border-bottom:1px solid color-mix(in srgb,var(--color-accent) 40%,transparent)}.ywiki-content .doc-page-link:hover{border-bottom-color:var(--color-accent);text-decoration:none}.ywiki-content .doc-page-link-plain{color:var(--color-text)}.ywiki-content .doc-mention{color:var(--color-accent);background:var(--color-accent-soft);border-radius:4px;padding:.05em .35em;font-size:.95em;font-weight:500;white-space:nowrap}.ywiki-content mark,.ywiki-content .doc-mark-highlight{background:color-mix(in srgb,var(--color-warning) 30%,transparent);border-radius:2px;padding:.05em .1em;color:inherit}.ywiki-content .doc-columns{display:flex;gap:16px;align-items:flex-start}.ywiki-content .doc-column{flex:1 1 0;min-width:0}.ywiki-content .doc-column>*:first-child{margin-top:0}@media(max-width:560px){.ywiki-content .doc-columns{flex-direction:column;gap:10px}}@container wiki-content (max-width: 560px){.ywiki-content .doc-columns{flex-direction:column;gap:10px}}.ywiki-content .doc-math-inline{display:inline-block;vertical-align:middle}.ywiki-content .doc-math-block{display:block;overflow-x:auto;padding:8px 0;text-align:center}.doc-math-pending{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.875em;color:var(--color-text-muted)}.doc-math-error{border:1px dashed color-mix(in srgb,var(--color-danger) 50%,transparent);border-radius:4px;padding:0 4px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.875em;color:var(--color-danger)}.doc-math-error-hint{margin-left:6px;font-size:.85em;opacity:.8}.ywiki-content :where(.doc-file,.doc-file-attachment){border:1px solid var(--color-border);border-radius:8px;padding:10px 12px;background:var(--color-surface-subtle);font-size:14px;color:var(--color-text-muted)}.ywiki-content .doc-file-head{display:flex;align-items:center;gap:8px}.ywiki-content .doc-file-icon{flex:none}.ywiki-content .doc-file-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ywiki-content .doc-file-size{flex:none;font-size:12px;color:var(--color-text-faint)}.ywiki-content .doc-file-action{flex:none;border:1px solid var(--color-border);background:var(--color-surface);border-radius:6px;padding:2px 10px;font-size:12px;color:var(--color-text-muted);cursor:pointer}.ywiki-content .doc-file-action:hover{color:var(--color-accent);border-color:var(--color-accent)}.ywiki-content video.doc-file-video{display:block;width:100%;max-height:420px;margin-top:8px;border-radius:6px;background:#000}.ywiki-content img.doc-file-image{display:block;max-width:100%;margin:8px 0 0;border-radius:6px}.ywiki-content .doc-inline-comment{background:var(--comment-mark-bg, #ffe58f);border-bottom:2px solid var(--comment-mark-line, #d48806);border-radius:0;padding-bottom:1px;cursor:pointer}.ywiki-content .doc-inline-comment.has-replies{background:var(--comment-mark-bg-reply, #ffd666);border-bottom-color:var(--comment-mark-line-reply, #ad6800)}.ywiki-content .doc-inline-comment.is-active{background:var(--comment-mark-bg-active, #ffc53d);border-bottom-color:var(--comment-mark-line-active, #ad6800);outline:1px solid var(--comment-mark-line-active, #ad6800);outline-offset:1px}.ywiki-content .doc-inline-comment.is-shifted{border-left:2px solid var(--color-danger);padding-left:1px;background:transparent}.ywiki-content>*+*,.ywiki-content :where(.doc-body,blockquote,.doc-callout-content,.doc-column,td,th)>*+*{margin-top:var(--space-block)}.ywiki-content>:where(h1,h2,h3,h4,h5,h6),.ywiki-content :where(.doc-body,blockquote,.doc-callout-content,.doc-column,td,th)>:where(h1,h2,h3,h4,h5,h6){margin-top:var(--space-heading-top)}.ywiki-content>:where(h1,h2,h3,h4,h5,h6)+*,.ywiki-content :where(.doc-body,blockquote,.doc-callout-content,.doc-column,td,th)>:where(h1,h2,h3,h4,h5,h6)+*{margin-top:var(--space-heading-bottom)}.ywiki-content :where(li:not(.doc-task-item):not(ul[data-type=taskList]>li),li>div,li>span)>*+*{margin-top:var(--space-list-block)}.ywiki-content>:where(ul,ol,blockquote,pre,table,img,.tableWrapper,.doc-table-wrap,.code-block-wrap,.doc-code-wrap,.ywiki-image-frame,.doc-image,.doc-callout,.doc-columns,.doc-file-attachment,.doc-file-video,.doc-video-embed,[data-video-embed],.doc-math-block,.math-block),.ywiki-content>:where(ul,ol,blockquote,pre,table,img,.tableWrapper,.doc-table-wrap,.code-block-wrap,.doc-code-wrap,.ywiki-image-frame,.doc-image,.doc-callout,.doc-columns,.doc-file-attachment,.doc-file-video,.doc-video-embed,[data-video-embed],.doc-math-block,.math-block)+*,.ywiki-content :where(.doc-body,blockquote,.doc-callout-content,.doc-column)>:where(ul,ol,blockquote,pre,table,img,.tableWrapper,.doc-table-wrap,.code-block-wrap,.doc-code-wrap,.ywiki-image-frame,.doc-image,.doc-callout,.doc-columns,.doc-file-attachment,.doc-file-video,.doc-video-embed,[data-video-embed],.doc-math-block,.math-block),.ywiki-content :where(.doc-body,blockquote,.doc-callout-content,.doc-column)>:where(ul,ol,blockquote,pre,table,img,.tableWrapper,.doc-table-wrap,.code-block-wrap,.doc-code-wrap,.ywiki-image-frame,.doc-image,.doc-callout,.doc-columns,.doc-file-attachment,.doc-file-video,.doc-video-embed,[data-video-embed],.doc-math-block,.math-block)+*{margin-top:var(--space-module)}.ywiki-content>:where(h1,h2,h3,h4,h5,h6),.ywiki-content :where(.doc-body,blockquote,.doc-callout-content,.doc-column)>:where(h1,h2,h3,h4,h5,h6){margin-top:var(--space-heading-top)}.ywiki-content>:where(h1,h2,h3,h4,h5,h6)+*,.ywiki-content :where(.doc-body,blockquote,.doc-callout-content,.doc-column)>:where(h1,h2,h3,h4,h5,h6)+*{margin-top:var(--space-heading-bottom)}.ywiki-content>hr,.ywiki-content :where(.doc-body,blockquote,.doc-callout-content,.doc-column,td,th)>hr{margin-block:var(--space-divider)}.ywiki-content>:first-child,.ywiki-content :where(.doc-body,blockquote,.doc-callout-content,.doc-column,td,th,li,li>div,li>span)>:first-child{margin-top:0}.ywiki-content>:last-child,.ywiki-content :where(.doc-body,blockquote,.doc-callout-content,.doc-column,td,th,li,li>div,li>span)>:last-child{margin-bottom:0}.ywiki-content :where(td,th)>*+*{margin-top:.25em}.ywiki-content :where(td,th)>:first-child{margin-top:0}.ywiki-content :where(td,th)>:where(p,ul,ol){font-weight:inherit}.ywiki-content :where(td,th)>p:empty{min-height:calc(1em * var(--content-table-line-height))}.doc-renderer{width:100%;max-width:var(--content-width);margin-inline:auto}.doc-image{cursor:zoom-in}.doc-image[data-loading]{min-width:160px;min-height:60px;background:var(--color-surface-subtle);border-radius:8px}.doc-image-loading,.doc-image-missing,.doc-unknown{color:var(--color-text-muted);font-size:.9em}.doc-unknown{border:1px dashed var(--color-border-strong);border-radius:6px;padding:8px 10px}.doc-file.is-missing{color:var(--color-text-faint)}.ywiki-prose img.ywiki-image{max-width:100%;border-radius:var(--content-media-radius);display:block}.ywiki-prose .ywiki-image-frame{display:flex;justify-content:center;flex-direction:column;align-items:center}.ywiki-prose .ywiki-image-frame.has-caption>.ywiki-image-inner{align-self:center}.ywiki-prose .ywiki-image-caption{max-width:100%;margin-top:6px;padding:0 2px;color:var(--color-text-muted);font-size:12px;line-height:1.5;text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;user-select:text}.ywiki-prose .ywiki-image-gallery{display:flex;flex-wrap:wrap;align-items:flex-start;gap:8px;width:100%}.ywiki-prose .ywiki-image-gallery.is-block-selected,.ywiki-prose .ywiki-image-frame.is-block-selected .ywiki-image-inner{outline:2px solid var(--color-accent);outline-offset:2px;border-radius:6px}.ywiki-prose .ywiki-image-gallery>.ywiki-image-frame.is-in-gallery .ywiki-image-inner{cursor:default}.ywiki-prose .ywiki-image-gallery{position:relative}.ywiki-gallery-marquee{position:fixed;z-index:69;border:1px solid color-mix(in srgb,var(--color-accent) 70%,transparent);background:color-mix(in srgb,var(--color-accent) 12%,transparent);border-radius:2px;pointer-events:none}.ywiki-prose .ywiki-image-frame.is-multi-picked .ywiki-image-inner,.ywiki-prose .ywiki-image-frame.is-block-selected-image .ywiki-image-inner,.wendang-portal .ywiki-image-frame.is-multi-picked .ywiki-image-inner{outline:2px solid var(--color-accent);outline-offset:2px;border-radius:6px}.ywiki-prose .is-block-selected .ywiki-image-inner:after,.ywiki-prose .ywiki-image-frame.is-multi-picked .ywiki-image-inner:after,.ywiki-prose .ywiki-image-frame.is-block-selected-image .ywiki-image-inner:after,.wendang-portal .ywiki-image-frame.is-multi-picked .ywiki-image-inner:after{content:"";position:absolute;inset:0;border-radius:var(--content-media-radius, 4px);background:color-mix(in srgb,var(--color-accent) 16%,transparent);pointer-events:none}.ywiki-prose .ywiki-image-frame.is-image-drop-target .ywiki-image-inner{outline:2px solid color-mix(in srgb,var(--color-accent) 70%,transparent);outline-offset:3px;border-radius:var(--content-media-radius, 6px)}.ywiki-prose .ywiki-image-frame.is-image-drop-target .ywiki-image-inner:after{content:"";position:absolute;inset:0;border-radius:var(--content-media-radius, 6px);background:color-mix(in srgb,var(--color-accent) 14%,transparent);pointer-events:none}.ywiki-image-drop-line,.ywiki-gallery-drop-line{position:fixed;border-radius:999px;pointer-events:none;z-index:70}.ywiki-image-drop-line{z-index:60}.ywiki-image-drop-line:before,.ywiki-image-drop-line:after,.ywiki-gallery-drop-line:before,.ywiki-gallery-drop-line:after{content:"";position:absolute;left:50%;width:7px;height:7px;margin-left:-3.5px;border-radius:50%;background:inherit}.ywiki-image-drop-line:before,.ywiki-gallery-drop-line:before{top:-3px}.ywiki-image-drop-line:after,.ywiki-gallery-drop-line:after{bottom:-3px}.wendang-portal .ywiki-gallery-drop-line,.wendang-portal .ywiki-image-drop-line{position:fixed}.ywiki-prose .ywiki-image-frame.is-gallery-dragging{opacity:.55}.ywiki-prose .ywiki-image-gallery{gap:12px;align-items:flex-start}.ywiki-prose .ywiki-image-gallery>.ywiki-image-frame{flex:1 1 0;min-width:0;width:auto;height:auto;max-width:none;justify-content:flex-start}.ywiki-prose .ywiki-image-gallery>.ywiki-image-frame{flex-grow:calc(var(--ywiki-image-ratio, 1) * var(--ywiki-image-weight, 1))}.ywiki-prose .ywiki-image-gallery>.ywiki-image-frame .ywiki-image-inner{width:100%;max-width:none}.ywiki-prose .ywiki-image-gallery>.ywiki-image-frame img.ywiki-image{width:100%;height:auto;max-width:none;aspect-ratio:var(--ywiki-image-ratio, 1.3333);object-fit:contain;border-radius:var(--content-media-radius)}.ywiki-prose .ywiki-image-frame img.ywiki-image[data-image-loading]{box-sizing:border-box;padding:3px;border-radius:var(--content-media-radius);background-image:conic-gradient(from var(--ywiki-image-flow-angle),color-mix(in srgb,var(--color-accent) 14%,var(--color-surface-subtle)) 0turn 55%,color-mix(in srgb,var(--color-accent) 55%,transparent) 78%,var(--color-accent) 92%,color-mix(in srgb,var(--color-accent) 14%,var(--color-surface-subtle)) 100%);-webkit-mask-image:linear-gradient(#000 0 0),linear-gradient(#000 0 0);-webkit-mask-clip:content-box,border-box;-webkit-mask-composite:xor;mask-image:linear-gradient(#000 0 0),linear-gradient(#000 0 0);mask-clip:content-box,border-box;mask-composite:exclude;animation:ywiki-image-flow 1.4s linear infinite;min-height:120px}.ywiki-prose .ywiki-image-gallery>.ywiki-image-frame img.ywiki-image[data-image-loading]{min-height:0}.ywiki-prose .ywiki-image-frame img.ywiki-image[data-image-error]{box-sizing:border-box;min-height:72px;background-color:color-mix(in srgb,var(--color-surface-subtle) 70%,var(--color-border));border-radius:var(--content-media-radius);outline:1px solid color-mix(in srgb,var(--color-border-strong) 55%,transparent);outline-offset:-1px}.ywiki-prose .ywiki-image-gallery>.ywiki-image-frame img.ywiki-image[data-image-error]{min-height:0}@media(prefers-reduced-motion:reduce){.ywiki-prose .ywiki-image-frame img.ywiki-image[data-image-loading]{animation:none}}.ywiki-prose .ywiki-image-frame[data-sized],.ywiki-prose .ywiki-image-frame[data-align=left]{justify-content:flex-start}.ywiki-prose .ywiki-image-frame[data-align=center]{justify-content:center}.ywiki-prose .ywiki-image-frame[data-align=right]{justify-content:flex-end}.ywiki-prose .ywiki-image-inner{position:relative;display:inline-block;max-width:100%;line-height:0}.ywiki-prose .ywiki-image-frame.is-resizing{user-select:none}.ywiki-prose .ywiki-image-handle{display:none;position:absolute;width:14px;height:14px;box-sizing:border-box;border:2px solid var(--color-accent);border-radius:50%;background:#fff;box-shadow:0 1px 3px #00000047;z-index:3}.editor-shell.img-pick-active .ywiki-prose .ywiki-image-frame.is-selected .ywiki-image-inner{outline:2px solid var(--color-accent);outline-offset:3px;border-radius:6px;box-shadow:0 0 0 5px #fff,0 0 0 6px color-mix(in srgb,var(--color-accent) 28%,transparent)}.editor-shell.img-pick-active .ywiki-prose .ywiki-image-frame.is-selected .ywiki-image-handle,.editor-shell.img-pick-active .ywiki-prose .ywiki-image-frame.is-selected.is-in-gallery .ywiki-image-handle{display:block}.editor-shell.img-pick-active .ywiki-prose .ywiki-image-frame.is-selected.is-in-gallery .ywiki-image-inner{outline:2px solid var(--color-accent);outline-offset:3px;border-radius:6px}.ywiki-prose .ywiki-image-handle.handle-nw{left:-10px;top:-10px;cursor:nwse-resize}.ywiki-prose .ywiki-image-handle.handle-ne{right:-10px;top:-10px;cursor:nesw-resize}.ywiki-prose .ywiki-image-handle.handle-sw{left:-10px;bottom:-10px;cursor:nesw-resize}.ywiki-prose .ywiki-image-handle.handle-se{right:-10px;bottom:-10px;cursor:nwse-resize}.editor-shell.img-pick-active .ywiki-prose .ywiki-image-frame.is-selected:not(.is-resizing) img.ywiki-image{cursor:zoom-in}.ywiki-prose img.ywiki-image[data-image-missing]{min-width:120px;min-height:40px;border:1px dashed var(--color-border-strong);background:var(--color-surface-subtle)}.ywiki-prose .is-block-selected{position:relative;border-radius:6px;cursor:grab}.ywiki-prose .is-block-selected:active,.ywiki-prose.is-block-dragging,.ywiki-prose.is-block-dragging *{cursor:grabbing!important}.ywiki-prose .is-block-menu-target:not([data-block-chrome]):not(.doc-callout):not(.tableWrapper):not(.code-block-wrap){background:var(--color-accent-soft);border-radius:4px}.ywiki-prose .is-block-selected:not([data-block-chrome]):not(.doc-callout):not(.tableWrapper):not(.code-block-wrap):not(.ywiki-image-gallery):before{content:"";position:absolute;top:calc(-1 * var(--block-select-pad-top, 5px));bottom:calc(-1 * var(--block-select-pad-bottom, 5px));left:calc(-1 * var(--block-select-pad-x, 6px));right:calc(-1 * var(--block-select-pad-x, 6px));background:color-mix(in srgb,var(--color-accent) 16%,transparent);border-radius:6px;pointer-events:none}.ywiki-prose :is([data-block-chrome],.doc-callout,.tableWrapper,.code-block-wrap).is-block-selected{--block-select-radius: 6px;outline:2px solid var(--color-accent);outline-offset:2px;border-radius:var(--block-select-radius)}.ywiki-prose .doc-callout.is-block-selected{--block-select-radius: 9px}.ywiki-prose .doc-file-attachment.is-block-selected{--block-select-radius: 8px}.ywiki-prose [data-mind-map-node].is-block-selected{--block-select-radius: 12px}.ywiki-prose.is-block-selecting ::selection,.ywiki-prose.is-block-selecting *::selection{background:transparent;color:inherit}.block-marquee{position:absolute;z-index:33;pointer-events:none;box-sizing:border-box;background:color-mix(in srgb,var(--color-accent) 12%,transparent);border:1px solid color-mix(in srgb,var(--color-accent) 65%,transparent);box-shadow:0 0 0 1px color-mix(in srgb,var(--color-surface) 60%,transparent);border-radius:2px}.ywiki-prose .column-resize-handle{position:absolute;right:-2px;top:-4px;bottom:-4px;width:3px;border-radius:2px;background-color:var(--color-border-strong, #b9c3d2);pointer-events:none}.ywiki-prose .column-resize-dragging .column-resize-handle{background-color:var(--color-accent, #2f6feb);box-shadow:0 0 0 1px var(--color-surface, #fff)}.ywiki-prose.resize-cursor,.ywiki-prose .resize-cursor{cursor:col-resize}.ywiki-prose .selectedCell:after{content:"";position:absolute;inset:0;background:color-mix(in srgb,var(--color-accent) 8%,transparent);pointer-events:none;z-index:2}.ywiki-prose td,.ywiki-prose th{position:relative}.img-preview-mask{position:fixed;inset:0;z-index:1300;display:flex;flex-direction:column;align-items:center;justify-content:center;background:color-mix(in srgb,#0b1220 84%,transparent);overflow:hidden;user-select:none}.img-preview-stage{display:flex;align-items:center;justify-content:center;width:100%;flex:1;min-height:0;padding:32px;outline:none}.img-preview-image{max-width:100%;max-height:100%;object-fit:contain;cursor:grab;transition:transform .12s ease-out;will-change:transform}.img-preview-image.is-dragging{cursor:grabbing;transition:none}.img-preview-toolbar{display:flex;align-items:center;gap:4px;flex:none;margin-bottom:24px;padding:6px 8px;border:1px solid color-mix(in srgb,#ffffff 18%,transparent);border-radius:8px;background:color-mix(in srgb,#101828 72%,transparent);color:#f2f5fa;backdrop-filter:blur(8px)}.img-preview-toolbar button{min-width:32px;height:30px;padding:0 8px;border:none;border-radius:5px;background:transparent;color:inherit;font-family:inherit;font-size:13px;cursor:pointer}.img-preview-toolbar button:hover{background:color-mix(in srgb,#ffffff 16%,transparent)}.img-preview-toolbar button:focus-visible{outline:2px solid #fff;outline-offset:1px}.img-preview-scale{min-width:48px;text-align:center;font-size:12px;opacity:.85}.img-preview-count{min-width:52px;padding:0 6px;text-align:center;font-size:12px;font-variant-numeric:tabular-nums;opacity:.85}.img-preview-divider{width:1px;height:16px;margin:0 4px;background:color-mix(in srgb,#ffffff 26%,transparent)}.img-preview-nav{position:absolute;inset:0;pointer-events:none;display:flex;align-items:center;justify-content:space-between;padding:0 18px}.img-preview-nav-btn{pointer-events:auto;display:flex;align-items:center;justify-content:center;width:44px;height:44px;padding:0;border:1px solid color-mix(in srgb,#ffffff 20%,transparent);border-radius:50%;background:color-mix(in srgb,#101828 66%,transparent);color:#f2f5fa;cursor:pointer;backdrop-filter:blur(8px);transition:background .12s,opacity .12s}.img-preview-nav-btn:hover:not(:disabled){background:color-mix(in srgb,#101828 84%,transparent)}.img-preview-nav-btn:focus-visible{outline:2px solid #fff;outline-offset:2px}.img-preview-nav-btn:disabled{opacity:.22;cursor:default}@media(prefers-reduced-motion:reduce){.img-preview-image{transition:none}}:where(.wendang-root,.wendang,.wendang-portal) .w-select{display:inline-flex;min-width:0}:where(.wendang-root,.wendang,.wendang-portal) .w-select__trigger{display:inline-flex;align-items:center;justify-content:space-between;gap:6px;width:100%;min-width:0;border:1px solid var(--w-border-strong, var(--color-border-strong, #b9c3d2));border-radius:var(--w-radius-sm, 4px);background:var(--w-surface, var(--color-surface, #fff));color:var(--w-text, var(--color-text, #1f2937));font-family:var(--w-font-sans, inherit);cursor:pointer;transition:border-color var(--w-duration-fast, .12s)}:where(.wendang-root,.wendang,.wendang-portal) .w-select--mini .w-select__trigger{height:var(--w-control-mini, 24px);padding:0 6px;font-size:var(--w-font-size-mini, 12px)}:where(.wendang-root,.wendang,.wendang-portal) .w-select--small .w-select__trigger{height:var(--w-control-small, 28px);padding:0 8px;font-size:var(--w-font-size-small, 13px)}:where(.wendang-root,.wendang,.wendang-portal) .w-select--medium .w-select__trigger{height:var(--w-control-medium, 32px);padding:0 10px;font-size:var(--w-font-size-medium, 14px)}:where(.wendang-root,.wendang,.wendang-portal) .w-select__trigger:hover{border-color:var(--w-accent, var(--color-accent, #2f6feb))}:where(.wendang-root,.wendang,.wendang-portal) .w-select__trigger:focus-visible{outline:2px solid var(--w-accent, var(--color-accent, #2f6feb));outline-offset:1px}:where(.wendang-root,.wendang,.wendang-portal) .w-select__trigger:disabled{opacity:.5;cursor:not-allowed}:where(.wendang-root,.wendang,.wendang-portal) .w-select__label{min-width:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}:where(.wendang-root,.wendang,.wendang-portal) .w-select__label.is-placeholder{color:var(--w-text-faint, var(--color-text-faint, #7c8798))}:where(.wendang-root,.wendang,.wendang-portal) .w-select__caret{flex:none;opacity:.65}:where(.wendang-root,.wendang,.wendang-portal) .w-select__prefix{display:inline-flex;align-items:center;flex:none}:where(.wendang-root,.wendang,.wendang-portal) .w-select__prefix svg{width:19px;height:19px}:where(.wendang-root,.wendang,.wendang-portal) .w-select-panel{display:flex;flex-direction:column;min-width:160px;max-width:min(320px,calc(100vw - 24px));padding:4px}:where(.wendang-root,.wendang,.wendang-portal) .w-select-panel .w-select-search{width:100%;margin-bottom:4px;padding:5px 8px;border:1px solid var(--w-border, var(--color-border, #dce2eb));border-radius:var(--w-radius-sm, 4px);background:var(--w-surface, var(--color-surface, #fff));color:var(--w-text, var(--color-text, #1f2937));font-size:var(--w-font-size-small, 13px)}:where(.wendang-root,.wendang,.wendang-portal) .w-select-panel .w-select-search:focus{outline:2px solid var(--w-accent, #2f6feb);outline-offset:-1px}:where(.wendang-root,.wendang,.wendang-portal) .w-select-list{display:flex;flex-direction:column;max-height:min(50vh,320px);overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin}:where(.wendang-root,.wendang,.wendang-portal) .w-select-option{display:flex;align-items:center;box-sizing:border-box;min-height:30px;padding:6px 9px;border:none;border-radius:var(--w-radius-md, 6px);background:transparent;color:var(--w-text, var(--color-text, #1f2937));font-family:inherit;font-size:var(--w-font-size-small, 13px);text-align:left;cursor:pointer}:where(.wendang-root,.wendang,.wendang-portal) .w-select-option.is-active{background:var(--w-surface-subtle, var(--color-surface-subtle, #f5f7fa))}:where(.wendang-root,.wendang,.wendang-portal) .w-select-option.is-selected{color:var(--w-accent, var(--color-accent, #2f6feb));background:var(--w-accent-soft, var(--color-accent-soft, #eaf1ff))}:where(.wendang-root,.wendang,.wendang-portal) .w-select-option:disabled{opacity:.45;cursor:not-allowed}:where(.wendang-root,.wendang,.wendang-portal) .w-select-empty{padding:8px 9px;color:var(--w-text-faint, #7c8798);font-size:var(--w-font-size-small, 13px)}:where(.wendang-root,.wendang,.wendang-portal) .w-dropdown{min-width:160px;max-width:min(320px,calc(100vw - 24px));max-height:min(70vh,520px);overflow-y:auto;overscroll-behavior:contain;padding:4px;scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--w-text-faint, #7c8798) 40%,transparent) transparent}:where(.wendang-root,.wendang,.wendang-portal) .w-dropdown::-webkit-scrollbar{width:8px}:where(.wendang-root,.wendang,.wendang-portal) .w-dropdown::-webkit-scrollbar-thumb{border:2px solid transparent;border-radius:999px;background-clip:content-box;background-color:color-mix(in srgb,var(--w-text-faint, #7c8798) 36%,transparent)}:where(.wendang-root,.wendang,.wendang-portal) .w-dropdown-option{display:flex;align-items:center;gap:6px;box-sizing:border-box;min-height:30px;padding:6px 9px;border-radius:var(--w-radius-md, 6px);color:var(--w-text, var(--color-text, #1f2937));font-size:var(--w-font-size-small, 13px);line-height:1.5;cursor:pointer;user-select:none}:where(.wendang-root,.wendang,.wendang-portal) .w-dropdown-option:hover,:where(.wendang-root,.wendang,.wendang-portal) .w-dropdown-option:focus-visible{background:var(--w-surface-subtle, var(--color-surface-subtle, #f5f7fa));outline:none}:where(.wendang-root,.wendang,.wendang-portal) .w-dropdown-option.is-selected{color:var(--w-accent, var(--color-accent, #2f6feb));background:var(--w-accent-soft, var(--color-accent-soft, #eaf1ff))}:where(.wendang-root,.wendang,.wendang-portal) .w-dropdown-option.is-disabled{opacity:.45;cursor:not-allowed;background:transparent}:where(.wendang-root,.wendang,.wendang-portal) .w-dropdown-group__title{padding:6px 9px 3px;color:var(--w-text-faint, var(--color-text-faint, #7c8798));font-size:11px;line-height:1.5}:where(.wendang-root,.wendang,.wendang-portal) .w-dropdown-group+.w-dropdown-group{margin-top:2px;padding-top:3px;border-top:1px solid var(--w-border, var(--color-border, #dce2eb))}:where(.wendang-root,.wendang,.wendang-portal) .w-tooltip{padding:5px 9px;border:1px solid var(--w-border, var(--color-border, #dce2eb));border-radius:var(--w-radius-sm, 4px);background:var(--w-surface, var(--color-surface, #fff));color:var(--w-text, var(--color-text, #1f2937));font-size:var(--w-font-size-mini, 12px);line-height:1.55;white-space:nowrap;box-shadow:var(--w-shadow-pop, 0 10px 32px #14284a20)}:where(.wendang-root,.wendang,.wendang-portal) .wd-dialog-mask{position:fixed;inset:0;z-index:1100;display:flex;align-items:flex-start;justify-content:center;padding:10vh 16px 24px;background:color-mix(in srgb,#101828 42%,transparent);overflow-y:auto;overscroll-behavior:contain}:where(.wendang-root,.wendang,.wendang-portal) .wd-dialog-mask.is-fullscreen{padding:0;overflow:hidden}:where(.wendang-root,.wendang,.wendang-portal) .wd-dialog{position:relative;display:flex;flex-direction:column;max-width:calc(100vw - 32px);max-height:calc(100dvh - 14vh);border:1px solid var(--w-border, var(--color-border, #dce2eb));border-radius:var(--w-radius-lg, 8px);background:var(--w-surface, var(--color-surface, #fff));color:var(--w-text, var(--color-text, #1f2937));box-shadow:0 24px 64px #10182833;outline:none}:where(.wendang-root,.wendang,.wendang-portal) .wd-dialog.is-fullscreen{width:100vw;max-width:none;height:100dvh;max-height:none;border:0;border-radius:0}:where(.wendang-root,.wendang,.wendang-portal) .wd-dialog__header{display:flex;align-items:center;gap:12px;flex:none;padding:14px 18px;border-bottom:1px solid var(--w-border, var(--color-border, #dce2eb))}:where(.wendang-root,.wendang,.wendang-portal) .wd-dialog__title{flex:1;min-width:0;font-size:16px;font-weight:600;line-height:1.4}:where(.wendang-root,.wendang,.wendang-portal) .wd-dialog__close{display:flex;align-items:center;justify-content:center;flex:none;width:28px;height:28px;padding:0;border:none;border-radius:var(--w-radius-sm, 4px);background:transparent;color:var(--w-text-muted, var(--color-text-muted, #667085));cursor:pointer}:where(.wendang-root,.wendang,.wendang-portal) .wd-dialog__close:hover{background:var(--w-surface-subtle, #f5f7fa);color:var(--w-text, #1f2937)}:where(.wendang-root,.wendang,.wendang-portal) .wd-dialog__close:focus-visible{outline:2px solid var(--w-accent, #2f6feb);outline-offset:-2px}:where(.wendang-root,.wendang,.wendang-portal) .wd-dialog__body{flex:1;min-height:0;overflow-y:auto;padding:4px 25px 24px;line-height:1.7}:where(.wendang-root,.wendang,.wendang-portal) .wd-dialog.is-fullscreen .wd-dialog__body{display:flex;flex-direction:column;overflow:hidden;padding:0}:where(.wendang-root,.wendang,.wendang-portal) .wd-dialog__footer{display:flex;justify-content:flex-end;align-items:center;gap:8px;flex:none;padding:0 25px 20px}@media(max-width:520px){:where(.wendang-root,.wendang,.wendang-portal) .wd-dialog__body{padding:4px 18px 20px}:where(.wendang-root,.wendang,.wendang-portal) .wd-dialog__footer{padding:0 18px 16px}}:where(.wendang-root,.wendang,.wendang-portal) .w-overlay-scrollbar{overflow:hidden}:where(.wendang-root,.wendang,.wendang-portal) .w-overlay-scrollbar__viewport{overflow:auto;overscroll-behavior:contain;scrollbar-width:none;min-height:0;box-sizing:border-box;padding:6px;overflow-anchor:none}:where(.wendang-root,.wendang,.wendang-portal) .w-overlay-scrollbar__viewport::-webkit-scrollbar{display:none;width:0;height:0}:where(.wendang-root,.wendang,.wendang-portal) .w-overlay-scrollbar__track{position:absolute;top:5px;right:2px;bottom:5px;z-index:1;width:10px;opacity:0;transition:opacity .15s;touch-action:none;cursor:default}:where(.wendang-root,.wendang,.wendang-portal) .w-overlay-scrollbar__track[hidden]{display:none}:where(.wendang-root,.wendang,.wendang-portal) .w-overlay-scrollbar:hover>.w-overlay-scrollbar__track,:where(.wendang-root,.wendang,.wendang-portal) .w-overlay-scrollbar:focus-within>.w-overlay-scrollbar__track,:where(.wendang-root,.wendang,.wendang-portal) .w-overlay-scrollbar.is-scrolling>.w-overlay-scrollbar__track{opacity:1}:where(.wendang-root,.wendang,.wendang-portal) .w-overlay-scrollbar__thumb{position:absolute;top:0;right:2px;width:6px;border-radius:999px;touch-action:none;background:color-mix(in srgb,var(--color-text-muted) 42%,transparent);cursor:grab}:where(.wendang-root,.wendang,.wendang-portal) .w-overlay-scrollbar__thumb:hover,:where(.wendang-root,.wendang,.wendang-portal) .w-overlay-scrollbar.is-dragging-scrollbar .w-overlay-scrollbar__thumb{background:color-mix(in srgb,var(--color-text-muted) 66%,transparent)}:where(.wendang-root,.wendang,.wendang-portal) .w-overlay-scrollbar.is-dragging-scrollbar .w-overlay-scrollbar__thumb{cursor:grabbing}:where(.wendang-root,.wendang,.wendang-portal) .w-overlay-scrollbar__thumb:focus-visible{outline:2px solid var(--color-accent);outline-offset:1px}@media(prefers-reduced-motion:reduce){:where(.wendang-root,.wendang,.wendang-portal) .w-overlay-scrollbar__track{transition:none}}.mind-inline .mind-map-workspace{height:100%;padding:0}.mind-canvas-title{display:inline-flex;align-items:center;gap:14px;max-width:calc(100vw - 110px)}.mind-canvas-title>span{font-size:13px;font-weight:400;color:var(--color-text-muted);max-width:65vw;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mind-map-workspace{display:flex;flex-direction:column;height:100%;min-height:300px;box-sizing:border-box;padding:16px 20px 20px;color:var(--color-text)}.mind-save-hint{margin-bottom:10px}.mind-canvas-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:0 0 10px;flex-wrap:wrap}.mind-canvas-tools{display:flex;align-items:center;gap:8px;flex-wrap:wrap;min-width:0}.mind-canvas-options{justify-content:flex-end;margin-left:auto}.mind-canvas-status{font-size:12px;color:var(--color-text-muted);max-width:32vw}.mind-canvas-body{display:flex;flex:1;min-height:0;border:1px solid var(--color-border);border-radius:12px;overflow:hidden}.mind-canvas-stage{position:relative;flex:1;min-width:0;overflow:hidden;outline:none;background:radial-gradient(var(--color-border) 1px,transparent 1px) 0 0 / 22px 22px var(--color-surface)}.mind-canvas-stage.mind-grid-hidden{background-image:none}.mind-canvas-surface{width:100%;height:100%}.mind-canvas-stage .vue-flow__pane{cursor:default}.mind-canvas-stage .vue-flow__selection,.mind-marquee{background:color-mix(in srgb,var(--mind-color) 8%,transparent);border:1px solid var(--mind-color);box-sizing:border-box;pointer-events:none}.mind-marquee{position:absolute;z-index:4}.mind-canvas-stage.mind-space-pan .vue-flow__pane,.mind-canvas-stage.mind-space-pan .vue-flow__node{cursor:grab}.mind-canvas-stage .vue-flow__pane.dragging{cursor:grabbing}.mind-selection-summary{position:absolute;left:16px;top:16px;display:flex;align-items:center;gap:10px;padding:6px 12px;border:1px solid var(--color-border);border-radius:9px;background:var(--color-surface);font-size:12px}.mind-menu-key{margin-left:22px;float:right;color:var(--color-text-faint);font-size:11px}.mind-canvas-outline{flex:0 0 235px;overflow:auto;border-right:1px solid var(--color-border);padding:12px 4px}.mind-canvas-outline button{display:block;border:0;background:transparent;border-radius:5px;width:100%;text-align:left;padding:7px 10px;color:var(--color-text-muted);white-space:pre-wrap;overflow-wrap:anywhere}.mind-canvas-outline button.current{color:var(--mind-color);background:var(--color-surface-subtle)}.mind-node-actions{position:absolute;left:16px;top:16px;display:flex;flex-wrap:wrap;align-items:center;gap:5px;border:1px solid var(--color-border);padding:6px;background:var(--color-surface);border-radius:10px;box-shadow:0 4px 20px #00000008}.mind-canvas-bottom{position:absolute;bottom:16px;left:18px;right:18px;display:flex;justify-content:space-between;align-items:end;gap:10px;pointer-events:none}.mind-canvas-hint{font-size:11px;color:var(--color-text-faint);padding:6px 0}.mind-canvas-viewport{display:flex;align-items:center;gap:6px;padding:6px;border:1px solid var(--color-border);border-radius:9px;background:var(--color-surface);pointer-events:auto;white-space:nowrap}.mind-viewport-divider{height:20px;border-left:1px solid var(--color-border);margin:0 2px}.mind-zoom-percent{min-width:52px;font-variant-numeric:tabular-nums}.mind-viewport-tip{display:flex;align-items:center;flex-wrap:wrap;gap:7px;max-width:min(480px,calc(100vw - 40px));font-size:12px;line-height:1.6}.mind-viewport-tip kbd{padding:2px 6px;border-radius:4px;background:#ffffff20;font:inherit;white-space:nowrap}.mind-canvas-notice{position:absolute;bottom:70px;left:50%;transform:translate(-50%);padding:8px 14px;margin:0;border-radius:7px;background:var(--color-surface);border:1px solid var(--color-border);color:var(--color-text-muted);font-size:12px;pointer-events:none;max-width:90%}.mind-canvas-stage .mind-drop-child{outline:3px solid var(--mind-color);border-radius:10px}.mind-canvas-stage .mind-drop-left{box-shadow:-6px 0 0 0 var(--mind-color);border-radius:9px}.mind-canvas-stage .mind-drop-right{box-shadow:6px 0 0 0 var(--mind-color);border-radius:9px}.mind-canvas-stage .mind-drag-branch{opacity:.35}.mind-canvas-stage .mind-drag-branch-edge{opacity:.12}.mind-side-preview{position:absolute;inset:0;width:100%;height:100%;overflow:visible;pointer-events:none}.mind-side-preview path{fill:none;stroke:var(--mind-color);stroke-width:2;stroke-dasharray:6 4}.mind-side-preview rect{fill:var(--color-surface);stroke:var(--mind-color);stroke-width:2;stroke-dasharray:5 3}.mind-side-preview text{fill:var(--color-text);font-size:14px}.mind-canvas-stage .mind-drop-before:before,.mind-canvas-stage .mind-drop-after:after{content:"";position:absolute;left:-10px;right:-10px;height:3px;background:var(--mind-color)}.mind-canvas-stage .mind-drop-before:before{top:-7px}.mind-canvas-stage .mind-drop-after:after{bottom:-7px}.mind-canvas-stage .vue-flow__edge-path{stroke:var(--mind-color)}@media(max-width:760px){.mind-canvas-outline{flex-basis:170px}.mind-canvas-hint{display:none}.mind-canvas-toolbar{gap:8px}.mind-canvas-options{justify-content:flex-start;margin-left:0}.mind-node-actions{left:8px;right:8px;top:8px}.mind-canvas-status{max-width:60vw}}.mind-search{display:flex;align-items:center;flex-wrap:wrap;gap:8px;padding:6px 0 10px;font-size:12px}.mind-search input{width:180px;font-size:12px}.mind-outline-row{display:flex;align-items:center;margin:3px 0}.mind-outline-row input{min-width:0;width:100%;border:0;background:transparent;font:12px/22px inherit;color:var(--color-text);padding:5px}.mind-outline-row.current{background:var(--color-surface-subtle)}.mind-outline-row>button:last-child{width:24px;flex-shrink:0;padding:2px}.mind-canvas-outline .mind-outline-row textarea{min-width:0;width:100%;border:0;background:transparent;font-size:12px;line-height:22px;color:var(--color-text);padding:5px;resize:none;border-radius:4px}.mind-inline{height:100%;min-height:380px}.mind-inline .mind-map-workspace{height:100%}.mind-settings-menu{width:310px;display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding:8px;font-size:12px}.mind-settings-menu label{width:100%;display:flex;gap:8px;align-items:center}.mind-settings-menu input{width:auto}.mind-canvas-fullscreen{position:fixed!important;top:0!important;left:0!important;width:100vw!important;height:100dvh!important;max-width:none!important}.mind-topic-shell{position:relative;width:100%;height:100%}.mind-topic{position:relative;border-radius:9px;background:var(--color-surface);color:var(--color-text);border:1px solid color-mix(in srgb,var(--mind-color) 38%,var(--color-border));padding:10px 16px;font-family:inherit;font-size:14px;line-height:22px;display:grid;place-items:center;box-sizing:border-box}.mind-topic.root{background:var(--mind-color);border-color:var(--mind-color);color:#fff;font-weight:600}.mind-topic.active{box-shadow:0 0 0 3px color-mix(in srgb,var(--mind-color) 22%,transparent)}.mind-topic-label{width:100%;min-width:0;white-space:pre-wrap;overflow-wrap:anywhere;word-break:break-all;text-align:center;line-height:var(--mind-topic-line-height,22px)}.mind-topic-input{box-sizing:border-box;display:block;border:0;border-radius:4px;outline:0;padding:0;margin:0;width:100%;min-width:0;min-height:var(--mind-topic-line-height,22px);max-width:none;resize:none;overflow:hidden;white-space:pre-wrap;word-break:break-all;overflow-wrap:anywhere;background:transparent;color:inherit;font:inherit;line-height:var(--mind-topic-line-height,22px);text-align:inherit}.mind-topic-input:focus{box-shadow:none;outline:0}.mind-topic-fold{position:absolute;left:calc(100% + 20px);top:calc(50% - 12px);width:24px;min-width:24px;height:24px;padding:0;display:grid;place-items:center;z-index:2;border-radius:50%;border:1px solid var(--mind-color);color:var(--mind-color);background:var(--color-surface);font:11px/1 sans-serif;cursor:pointer;opacity:0;pointer-events:none;transition:opacity .12s ease}.mind-topic-shell:hover>.mind-topic-fold,.mind-topic-shell.is-selected>.mind-topic-fold,.mind-topic-shell:focus-within>.mind-topic-fold,.mind-topic-shell.is-collapsed>.mind-topic-fold{opacity:1;pointer-events:auto}.mind-topic-fold:hover{background:color-mix(in srgb,var(--mind-color) 10%,var(--color-surface))}.mind-topic-fold:focus-visible{outline:2px solid var(--mind-color);outline-offset:3px}.mind-fold-count{font-variant-numeric:tabular-nums;font-weight:600}.mind-topic-shell.has-children:not(.root):before{content:"";position:absolute;left:100%;top:0;width:64px;height:100%}.mind-topic-handle{opacity:0;pointer-events:none}.mind-topic-shell.grows-left .mind-topic-add,.mind-topic-shell .mind-topic-add.root-left{left:auto;right:calc(100% - 12px)}.mind-topic-shell .mind-topic-add.root-right{right:auto;left:calc(100% - 12px)}.mind-topic-shell.grows-left .mind-topic-fold{left:auto;right:calc(100% + 20px)}.mind-topic-shell.grows-left .mind-fold-chevron{transform:rotate(180deg)}.mind-topic-shell.grows-left.has-children:not(.root):before{left:auto;right:100%}.mind-topic-shell.grows-down .mind-topic-add{left:calc(50% - 12px);top:calc(100% - 12px)}.mind-topic-shell.grows-down .mind-topic-fold{right:auto;left:calc(50% - 12px);top:calc(100% + 18px)}.mind-topic-shell.grows-down .mind-fold-chevron{transform:rotate(90deg)}.mind-topic-shell.grows-down.has-children:not(.root):before{left:0;right:auto;top:100%;width:100%;height:60px}@media(hover:none){.mind-topic-fold{opacity:1;pointer-events:auto}}.mind-topic-sibling{position:absolute;width:24px;min-width:24px;height:24px;padding:0;left:calc(50% - 12px);display:grid;place-items:center;border:0;border-radius:50%;background:transparent;color:#fff;cursor:pointer;z-index:1}.mind-topic-sibling.before{top:-22px}.mind-topic-sibling.after{bottom:-22px}.mind-topic-sibling>span{display:grid;place-items:center;width:9px;height:9px;border-radius:50%;background:color-mix(in srgb,var(--mind-color) 36%,var(--color-surface));font:0/1 sans-serif}.mind-topic-sibling:hover,.mind-topic-sibling:focus-visible{background:transparent}.mind-topic-sibling:hover>span,.mind-topic-sibling:focus-visible>span{width:20px;height:20px;background:var(--mind-color);font-size:16px}.mind-topic-sibling:focus-visible{outline:2px solid var(--mind-color);outline-offset:1px}.mind-topic-shell.grows-down .mind-topic-sibling{top:calc(50% - 12px);bottom:auto}.mind-topic-shell.grows-down .mind-topic-sibling.before{left:-22px}.mind-topic-shell.grows-down .mind-topic-sibling.after{left:auto;right:-22px}.mind-topic-description{font-size:12px;line-height:18px;white-space:pre-wrap;color:var(--color-text-muted);width:100%;min-width:0;word-break:break-all;overflow-wrap:anywhere;margin-top:6px}.root .mind-topic-description{color:#e7f4ff}.mind-topic-image{width:100%;height:96px;overflow:hidden;margin-top:8px}.mind-topic-image img{width:100%!important;height:96px!important;object-fit:contain;max-height:96px!important;margin:0!important}.mind-topic-note{font-size:10px;line-height:14px;margin-top:6px;opacity:.7;cursor:pointer}.mind-topic-add{position:absolute;left:calc(100% - 12px);top:calc(50% - 12px);width:24px;height:24px;padding:0;box-sizing:border-box;display:grid;place-items:center;border-radius:50%;border:1px solid color-mix(in srgb,var(--mind-color) 45%,var(--color-border));background:var(--color-surface);color:color-mix(in srgb,var(--mind-color) 82%,var(--color-text));font:15px/1 system-ui,sans-serif;font-weight:500;cursor:pointer;z-index:3;box-shadow:0 1px 3px #0f172a1f;transition:background .12s ease,border-color .12s ease,transform .12s ease,box-shadow .12s ease}.mind-topic-add:hover,.mind-topic-add:focus-visible{background:color-mix(in srgb,var(--mind-color) 14%,var(--color-surface));border-color:var(--mind-color);color:var(--mind-color);transform:scale(1.12);box-shadow:0 2px 6px #0f172a2e}.mind-topic-add:focus-visible{outline:2px solid var(--mind-color);outline-offset:2px}.mind-topic-add:active{transform:scale(.98)}.mind-topic-add.root-left,.mind-topic-add.root-right{border-color:color-mix(in srgb,var(--color-surface) 70%,transparent)}.mind-topic-icon{font-size:16px;line-height:20px}.mind-topic[style*="border: 0"]{background:transparent}.mind-preview-wrap{display:flex;align-items:center;justify-content:center;overflow:hidden;min-height:240px}.mind-preview-sized{position:relative;flex-shrink:0}.mind-preview-scene{position:relative;transform-origin:top left}.mind-preview-lines{position:absolute;inset:0}.mind-preview-topic{position:absolute;box-sizing:border-box;border:1px solid color-mix(in srgb,var(--mind-color) 35%,var(--color-border));border-radius:9px;background:var(--color-surface-subtle);color:var(--color-text);padding:10px 16px;display:flex;flex-direction:column;justify-content:center;line-height:22px;white-space:pre-wrap;overflow-wrap:anywhere;word-break:break-all}.mind-preview-title{display:block;width:100%;min-width:0}.mind-preview-icon{font-size:16px;line-height:20px}.mind-preview-topic.root{background:var(--mind-color);color:#fff;font-weight:600}.mind-preview-topic.text{border:0;background:transparent}.mind-preview-description{font-size:12px;font-weight:400;line-height:18px;margin-top:6px;opacity:.72}.mind-preview-note{font-size:10px;line-height:14px;margin-top:6px;opacity:.65}.mind-preview-image{width:100%;height:96px;margin-top:8px;overflow:hidden}.mind-preview-image img{width:100%!important;height:96px!important;object-fit:contain;margin:0!important}.mind-map-block{margin:20px 0;border:1px solid var(--color-border);border-radius:12px;background:var(--color-surface);overflow:hidden}.mind-map-block-header{min-height:45px;display:flex;gap:12px;align-items:center;justify-content:space-between;padding:6px 12px}.mind-map-block-label{display:inline-flex;align-items:center;gap:8px;font-size:12px;color:var(--color-text-muted)}.mind-map-block-label>span:first-child{color:var(--mind-color);font-size:18px}.mind-map-topic-count{font-size:11px;color:var(--color-text-faint)}.mind-map-block-actions{display:flex;flex-shrink:0;gap:4px}.mind-map-preview{width:100%;display:block;min-height:240px;cursor:zoom-in}.mind-map-preview rect{fill:var(--color-surface-subtle);stroke:var(--mind-color);stroke-opacity:.3}.mind-map-preview text{fill:var(--color-text);font-family:inherit}.mind-map-preview .mind-map-root rect{fill:var(--mind-color);stroke:none}.mind-map-preview .mind-map-root text{fill:#fff}.mind-map-preview-outline{overflow:auto;padding:16px 24px 24px;font-size:14px;line-height:2;white-space:pre-wrap;overflow-wrap:anywhere}.mind-map-invalid{padding:20px;color:var(--color-text-muted)}@media(max-width:600px){.mind-map-topic-count{display:none}}.mind-details{flex:0 0 280px;padding:14px;border-left:1px solid var(--color-border);overflow:auto;background:var(--color-surface);font-size:12px}.mind-details>header{display:flex;justify-content:space-between;align-items:center}.mind-details-title{color:var(--color-text-muted);overflow-wrap:anywhere}.mind-details fieldset{border:0;border-top:1px solid var(--color-border);padding:12px 0;margin:8px 0;display:flex;flex-direction:column;gap:8px}.mind-details legend{font-weight:600;padding:0 8px 0 0}.mind-details label{display:grid;grid-template-columns:70px minmax(0,1fr);align-items:center;gap:8px}.mind-details input,.mind-details textarea{width:100%;font:inherit;box-sizing:border-box}.mind-details textarea{resize:vertical}.mind-format-buttons{display:flex;gap:6px}.mind-relation-item{display:flex;align-items:center;gap:8px}.mind-relation-item span{flex:1;overflow-wrap:anywhere}.mind-color-grid{display:grid;grid-template-columns:repeat(8,24px);gap:4px}.mind-color-grid>*{width:24px;min-width:24px;height:24px;padding:0}.mind-comments{flex:0 0 340px;display:flex;flex-direction:column;gap:12px;min-height:0;padding:16px;overflow:auto;border-left:1px solid var(--color-border);background:var(--color-surface, #fff);font-size:13px}.mind-comments__head{display:flex;align-items:flex-start;justify-content:space-between;gap:8px}.mind-comments__intro strong{font-size:14px}.mind-comments__intro p{margin:4px 0 0;color:var(--color-text-muted);font-size:12px;line-height:1.6}.mind-comments__head-actions{display:flex;flex:none;gap:4px}.mind-comments__error{margin:0;padding:8px 10px;border-radius:6px;background:#fdecec;color:#b42b36;font-size:12px}.mind-comments__list{display:grid;gap:10px}.mind-comment{display:grid;gap:8px;padding:10px 12px;border:1px solid var(--color-border);border-radius:8px}.mind-comment__head{display:flex;align-items:baseline;justify-content:space-between;gap:8px}.mind-comment__head span{color:var(--color-text-muted);font-size:11px}.mind-comment__body{margin:0;white-space:pre-wrap;overflow-wrap:anywhere;line-height:1.7}.mind-comment__actions{display:flex;flex-wrap:wrap;gap:4px}.mind-comment__reply{display:grid;gap:6px;margin-left:12px;padding-left:10px;border-left:2px solid var(--color-border)}.mind-comment__label{color:var(--color-text-muted);font-size:11px;font-weight:600}.mind-comment__compose{display:grid;gap:6px}.mind-comments__compose{display:grid;gap:6px;padding-top:12px;border-top:1px solid var(--color-border)}.mind-comments__empty{margin:0;color:var(--color-text-muted);font-size:12px;line-height:1.7}.mind-comments textarea{width:100%;padding:8px 10px;border:1px solid var(--color-border);border-radius:6px;background:var(--color-surface, #fff);color:inherit;font:inherit;line-height:1.6;box-sizing:border-box;resize:vertical}.picker-backdrop{position:fixed;inset:0;z-index:1100;background:color-mix(in srgb,#000 45%,transparent);display:flex;align-items:flex-start;justify-content:center;padding-top:12vh}.picker-backdrop .picker{width:420px;max-width:calc(100vw - 32px);background:var(--color-surface);border:1px solid var(--color-border);border-radius:10px;box-shadow:var(--shadow-pop);padding:8px}.picker-backdrop .picker .picker-input{width:100%;box-sizing:border-box;border:1px solid var(--color-border);border-radius:6px;padding:8px 10px;font-size:14px;background:var(--color-surface-subtle);color:var(--color-text)}.picker-backdrop .picker-input:focus{outline:none;border-color:var(--color-accent)}.picker-backdrop .picker-list{list-style:none;margin:6px 0 0;padding:0;max-height:320px;overflow-y:auto}.picker-backdrop .picker-list li{padding:7px 10px;border-radius:6px;cursor:pointer;font-size:14px;color:var(--color-text)}.picker-backdrop .picker-list li.active{background:var(--color-accent-soft);color:var(--color-accent)}.picker-backdrop .picker-title{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.picker-backdrop .picker-empty{color:var(--color-text-faint);font-size:13px;text-align:center;padding:14px 0;margin:0}.video-form{display:flex;flex-direction:column;gap:16px}.video-field{display:flex;flex-direction:column;gap:8px}.video-field label{font-size:13px;font-weight:600;color:var(--color-text)}.video-field input{width:100%}.video-loading-option{display:flex;flex-direction:column;gap:6px}.video-loading-choice{display:inline-flex;align-items:center;gap:8px;cursor:pointer;font-size:13px;color:var(--color-text)}.video-loading-choice input[type=checkbox]{flex:none;width:16px;height:16px;margin:0;accent-color:var(--color-accent)}.video-loading-option .video-hint{padding-left:24px}.video-hint{margin:0;font-size:12px;line-height:1.7;color:var(--color-text-muted)}.video-status{margin:0;padding:8px 10px;border-radius:6px;font-size:12px;line-height:1.7}.video-status--ok{color:var(--color-text);background:var(--color-accent-soft)}.video-status--error{color:var(--color-danger);background:color-mix(in srgb,var(--color-danger) 8%,transparent)}.video-status-meta{margin-left:4px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--color-text-muted)}.video-source{margin:0;font-size:12px;line-height:1.6;color:var(--color-text-muted);overflow-wrap:anywhere}.doc-video-embed{width:100%;min-width:0;border:1px solid var(--color-border, #dce2eb);border-radius:8px;overflow:hidden;background:var(--color-surface, #fff)}.doc-video-embed .video-placeholder{min-height:220px;padding:28px 24px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;background:var(--color-surface-subtle, #f5f7fa)}.doc-video-embed .video-play-icon{display:inline-flex;align-items:center;justify-content:center;width:46px;height:46px;margin-bottom:2px;border-radius:50%;color:var(--color-accent, #2f6feb);background:var(--color-accent-soft, #eaf1ff);font-size:18px;line-height:1;text-indent:2px}.doc-video-embed .video-placeholder strong{font-size:14px;font-weight:600;color:var(--color-text, #1f2937)}.doc-video-embed .video-id{font-size:12px;color:var(--color-text-muted, #667085);font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.doc-video-embed .video-load{margin-top:4px;padding:7px 20px;color:var(--color-accent, #2f6feb);background:var(--color-accent-soft, #eaf1ff);border:0;border-radius:6px;cursor:pointer;font:inherit;font-size:13px}.doc-video-embed .video-load:hover{background:color-mix(in srgb,var(--color-accent, #2f6feb) 16%,transparent)}.doc-video-embed iframe{display:block;width:100%;aspect-ratio:16 / 9;min-height:200px;border:0;background:#111}.doc-video-embed .video-footer{display:flex;justify-content:space-between;flex-wrap:wrap;gap:10px;padding:10px 14px;font-size:12px;border-top:1px solid var(--color-border, #dce2eb);background:var(--color-surface, #fff)}.doc-video-embed .video-footer a{color:var(--color-accent, #2f6feb)}.doc-video-embed button:focus-visible,.doc-video-embed a:focus-visible{outline:2px solid var(--color-accent, #2f6feb);outline-offset:2px}.video-editor-node{position:relative;outline:none}.video-editor-node.is-video-selected>div>.doc-video-embed,.video-editor-node:focus-visible>div>.doc-video-embed{outline:2px solid var(--color-accent, #2f6feb);outline-offset:3px}.video-block-tools{position:fixed;z-index:260;width:max-content;max-width:calc(100vw - 16px);color:var(--color-text, #1f2937);font:13px/1.5 var(--font-sans, system-ui, sans-serif)}.video-block-tools[hidden],.video-block-tools [hidden]{display:none!important}.video-block-toolbar{display:flex;align-items:center;gap:4px;width:max-content;max-width:calc(100vw - 16px);padding:5px;overflow-x:auto;border:1px solid var(--color-border, #dce2eb);border-radius:9px;background:var(--color-surface, #fff);box-shadow:0 4px 18px #0000001a,0 1px 3px #0000000a}.video-block-tools button{display:inline-flex;align-items:center;justify-content:center;gap:6px;flex-shrink:0;min-width:32px;height:32px;padding:5px 7px;border:0;border-radius:5px;color:inherit;background:transparent;cursor:pointer;font:inherit;white-space:nowrap}.video-block-tools button:hover{background:var(--color-surface-subtle, #f5f7fa)}.video-block-tools button[aria-pressed=true]{color:var(--color-accent, #2f6feb);background:var(--color-accent-soft, #eaf1ff)}.video-block-tools button:disabled{opacity:.4;cursor:default}.video-block-tools button:focus-visible,.video-block-tools input:focus-visible{outline:2px solid var(--color-accent, #2f6feb);outline-offset:1px}.video-block-tools .video-block-delete{color:var(--color-danger, #d92d20);margin-left:3px;border-left:1px solid var(--color-border, #dce2eb);border-radius:0 5px 5px 0}.video-block-link-form{position:fixed;display:flex;flex-direction:column;gap:7px;width:min(560px,calc(100vw - 32px));box-sizing:border-box;margin:0;padding:10px;border:1px solid var(--color-border, #dce2eb);border-radius:8px;background:var(--color-surface, #fff);box-shadow:var(--shadow-pop, 0 4px 18px #0000001a);overflow-anchor:none}.video-block-link-row{display:flex;align-items:center;gap:8px}.video-block-link-field{position:relative;display:flex;align-items:center;flex:1;min-width:0}.video-block-link-icon{position:absolute;left:10px;top:9px;color:var(--color-text-faint, #98a2b3);pointer-events:none}.video-block-link-form .video-block-link-field textarea{min-width:0;width:100%;box-sizing:border-box;height:34px;min-height:34px;max-height:110px;padding:7px 10px 7px 32px;border:1px solid var(--color-border-strong, #b9c5d6);border-radius:6px;background:var(--color-surface, #fff);color:inherit;font:inherit;line-height:18px;outline:none;resize:none;overflow-wrap:anywhere;word-break:break-all;overflow-y:hidden}.video-block-link-form .video-block-link-field textarea::placeholder{color:var(--color-text-faint, #98a2b3)}.video-block-link-form .video-block-link-field textarea:focus{border-color:var(--color-accent, #2f6feb);box-shadow:0 0 0 2px color-mix(in srgb,var(--color-accent, #2f6feb) 18%,transparent);outline:none}.video-block-link-form .video-block-link-field textarea[aria-invalid=true]{border-color:var(--color-danger, #d92d20)}.video-block-link-form .video-block-link-field textarea[aria-invalid=true]:focus{box-shadow:0 0 0 2px color-mix(in srgb,var(--color-danger, #d92d20) 16%,transparent)}.video-block-tools .video-block-link-confirm{flex:none;height:34px;min-width:64px;padding:0 16px;border:1px solid var(--color-accent, #2f6feb);border-radius:6px;background:var(--color-accent, #2f6feb);color:#fff;font-weight:500}.video-block-tools .video-block-link-confirm:hover{background:color-mix(in srgb,var(--color-accent, #2f6feb) 88%,#000)}.video-block-tools .video-block-link-confirm:disabled{opacity:1;border-color:var(--color-border, #dce2eb);background:var(--color-surface-subtle, #f5f7fa);color:var(--color-text-faint, #98a2b3);cursor:not-allowed}.video-block-link-arrow{position:absolute;width:9px;height:9px;transform:translate(-50%) rotate(45deg);background:var(--color-surface, #fff);pointer-events:none}.video-block-link-arrow[data-side=below]{top:-5px;border-left:1px solid var(--color-border, #dce2eb);border-top:1px solid var(--color-border, #dce2eb)}.video-block-link-arrow[data-side=above]{bottom:-5px;border-right:1px solid var(--color-border, #dce2eb);border-bottom:1px solid var(--color-border, #dce2eb)}.video-block-link-form p{margin:0;font-size:12px;color:var(--color-danger, #d92d20);overflow-wrap:anywhere}.video-block-link-form p:empty{display:none}.video-block-feedback{padding:8px 12px;margin-top:8px;border:1px solid var(--color-border, #dce2eb);border-radius:6px;background:var(--color-surface, #fff);overflow-wrap:anywhere;max-width:340px;box-sizing:border-box}@media(max-width:480px){.video-block-toolbar{gap:2px}.video-block-tools .video-block-loading{padding-inline:5px}}.doc-file-video{margin-top:8px}.doc-file-video video{width:100%;max-height:420px;border-radius:6px;background:#000}.doc-file-video-fallback{margin:0;font-size:13px;color:var(--color-text-faint)}.wendang-spreadsheet{position:relative;display:flex;flex-direction:column;height:100%;min-height:300px;min-width:0;flex:1}.worksheet-grid{position:relative;flex:1;min-width:0;min-height:0;overflow:hidden}.wendang-spreadsheet>p{position:absolute;top:8px;left:12px;z-index:2}.wendang,.wendang-portal{--w-font-sans: var(--font-sans, -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", sans-serif);--w-text: var(--color-text, #1f2937);--w-text-muted: var(--color-text-muted, #667085);--w-text-faint: var(--color-text-faint, #7c8798);--w-surface: var(--color-surface, #fff);--w-surface-subtle: var(--color-surface-subtle, #f5f7fa);--w-border: var(--color-border, #dce2eb);--w-border-strong: var(--color-border-strong, #b9c3d2);--w-accent: var(--color-accent, #2f6feb);--w-accent-soft: var(--color-accent-soft, #eaf1ff);--w-danger: var(--color-danger, #cf3d48);--w-success: var(--color-success, #238353);--w-warning: var(--color-warning, #b76e00);--w-shadow-pop: var(--shadow-pop, 0 10px 32px #14284a20);--w-font-size-mini: 12px;--w-font-size-small: 13px;--w-font-size-medium: 14px;--w-control-mini: 24px;--w-control-small: 28px;--w-control-medium: 32px;--w-radius-sm: 4px;--w-radius-md: 6px;--w-radius-lg: 8px;--w-duration-fast: .12s}:where(.wendang-root,.wendang,.wendang-portal) .w-button{display:inline-flex;align-items:center;justify-content:center;gap:4px;flex:none;box-sizing:border-box;margin:0;border:1px solid transparent;border-radius:var(--w-radius-sm,4px);font-family:var(--w-font-sans,inherit);font-weight:500;line-height:1;white-space:nowrap;cursor:pointer;transition:background-color var(--w-duration-fast,.12s),border-color var(--w-duration-fast,.12s),color var(--w-duration-fast,.12s)}:where(.wendang-root,.wendang,.wendang-portal) .w-button--mini{height:var(--w-control-mini,24px);padding:0 8px;font-size:var(--w-font-size-mini,12px)}:where(.wendang-root,.wendang,.wendang-portal) .w-button--small{height:var(--w-control-small,28px);padding:0 10px;font-size:var(--w-font-size-small,13px)}:where(.wendang-root,.wendang,.wendang-portal) .w-button--medium{height:var(--w-control-medium,32px);padding:0 12px;font-size:var(--w-font-size-medium,14px)}:where(.wendang-root,.wendang,.wendang-portal) .w-button--narrow{padding-inline:0}:where(.wendang-root,.wendang,.wendang-portal) .w-button--block{display:flex;width:100%}:where(.wendang-root,.wendang,.wendang-portal) .w-button--default{background:var(--w-surface-subtle,var(--color-surface-subtle,#f5f7fa));border-color:var(--w-border-strong,var(--color-border-strong,#b9c3d2));color:var(--w-text,var(--color-text,#1f2937))}:where(.wendang-root,.wendang,.wendang-portal) .w-button--default:not(:disabled):hover{background:color-mix(in srgb,var(--w-accent,#2f6feb) 7%,var(--w-surface-subtle,#f5f7fa));border-color:var(--w-accent,var(--color-accent,#2f6feb));color:var(--w-accent,var(--color-accent,#2f6feb))}:where(.wendang-root,.wendang,.wendang-portal) .w-button--text{background:transparent;border-color:transparent;color:var(--w-text,var(--color-text,#1f2937))}:where(.wendang-root,.wendang,.wendang-portal) .w-button--text:not(:disabled):hover{background:color-mix(in srgb,currentColor 10%,transparent);color:var(--w-text,var(--color-text,#1f2937))}:where(.wendang-root,.wendang,.wendang-portal) .w-button--primary{background:var(--w-accent,var(--color-accent,#2f6feb));border-color:var(--w-accent,var(--color-accent,#2f6feb));color:#fff}:where(.wendang-root,.wendang,.wendang-portal) .w-button--primary:not(:disabled):hover{background:color-mix(in srgb,var(--w-accent,#2f6feb) 88%,#000);border-color:color-mix(in srgb,var(--w-accent,#2f6feb) 88%,#000)}:where(.wendang-root,.wendang,.wendang-portal) .w-button--outline{background:transparent;border-color:var(--w-border,var(--color-border,#dce2eb));color:var(--w-text,var(--color-text,#1f2937))}:where(.wendang-root,.wendang,.wendang-portal) .w-button--outline:not(:disabled):hover{border-color:var(--w-accent,var(--color-accent,#2f6feb));color:var(--w-accent,var(--color-accent,#2f6feb))}:where(.wendang-root,.wendang,.wendang-portal) .w-button:disabled{opacity:.5;cursor:not-allowed}:where(.wendang-root,.wendang,.wendang-portal) .w-button.is-loading{cursor:progress;opacity:.75}:where(.wendang-root,.wendang,.wendang-portal) .w-button[aria-pressed=true]{background:var(--w-accent-soft,var(--color-accent-soft,#eaf1ff));border-color:var(--w-accent,var(--color-accent,#2f6feb));color:var(--w-accent,var(--color-accent,#2f6feb))}:where(.wendang-root,.wendang,.wendang-portal) .w-button__icon,:where(.wendang-root,.wendang,.wendang-portal) .w-button__spinner{display:inline-flex;align-items:center;justify-content:center;flex:none}:where(.wendang-root,.wendang,.wendang-portal) .w-button__label{display:inline-flex;align-items:center;gap:4px}:where(.wendang-root,.wendang,.wendang-portal) .w-button__label>svg,:where(.wendang-root,.wendang,.wendang-portal) .w-button__label>.wr-icon{flex:none}:where(.wendang-root,.wendang,.wendang-portal) .w-button__spinner svg{animation:w-button-spin .8s linear infinite}@keyframes w-button-spin{to{transform:rotate(360deg)}}:where(.wendang-root,.wendang,.wendang-portal) .w-button:focus-visible{outline:2px solid var(--w-accent,var(--color-accent,#2f6feb));outline-offset:1px}:where(.wendang-root,.wendang,.wendang-portal) .w-alert{display:flex;align-items:flex-start;gap:10px;padding:7px 10px;border:1px solid var(--w-border,var(--color-border));border-radius:var(--w-radius-md,6px);background:var(--w-accent-soft,var(--color-accent-soft));color:var(--w-text,var(--color-text));font-size:12px;margin-bottom:10px;flex:none;line-height:1.5}:where(.wendang-root,.wendang,.wendang-portal) .w-alert__icon{flex:none;line-height:1.5}:where(.wendang-root,.wendang,.wendang-portal) .w-alert__body{flex:1;min-width:0}:where(.wendang-root,.wendang,.wendang-portal) .w-alert--warning{background:color-mix(in srgb,var(--w-warning,#b76e00) 12%,var(--w-surface,#fff));border-color:color-mix(in srgb,var(--w-warning,#b76e00) 35%,var(--w-border,#dce2eb))}:where(.wendang-root,.wendang,.wendang-portal) .w-alert--danger{background:color-mix(in srgb,var(--w-danger,#cf3d48) 10%,var(--w-surface,#fff));border-color:color-mix(in srgb,var(--w-danger,#cf3d48) 32%,var(--w-border,#dce2eb))}:where(.wendang-root,.wendang,.wendang-portal) .w-alert--success{background:color-mix(in srgb,var(--w-success,#238353) 10%,var(--w-surface,#fff));border-color:color-mix(in srgb,var(--w-success,#238353) 32%,var(--w-border,#dce2eb))}:where(.wendang-root,.wendang,.wendang-portal) .w-popover{position:fixed;z-index:1400;max-width:min(320px,calc(100vw - 24px));max-height:min(70vh,520px);overflow:auto;min-width:160px;padding:4px;display:flex;flex-direction:column;gap:4px;background:var(--w-surface,var(--color-surface,#fff));border:1px solid var(--w-border,var(--color-border));border-radius:var(--w-radius-lg,8px);box-shadow:var(--w-shadow-pop);color:var(--w-text,var(--color-text))}:where(.wendang-root,.wendang,.wendang-portal) .w-popover .w-button{justify-content:flex-start;text-align:left;width:100%}:where(.wendang-root,.wendang,.wendang-portal) .w-popover--flush{padding:0}:where(.wendang-root,.wendang,.wendang-portal) .w-popover .wr-settings .w-button{width:auto}:where(.wendang-root,.wendang,.wendang-portal) .w-popover-group{padding:6px 8px 2px;font-size:11px;color:var(--color-text-faint)}:where(.wendang-root,.wendang,.wendang-portal) .w-dialog-mask{position:fixed;inset:0;z-index:1100;display:flex;align-items:flex-start;justify-content:center;padding:10vh 16px 24px;background:color-mix(in srgb,#101828 42%,transparent);overflow-y:auto;overscroll-behavior:contain;box-sizing:border-box}:where(.wendang-root,.wendang,.wendang-portal) .w-dialog-mask.is-fullscreen{padding:0;overflow:hidden}:where(.wendang-root,.wendang,.wendang-portal) .w-dialog{position:relative;display:flex;flex-direction:column;width:520px;max-width:calc(100vw - 32px);max-height:calc(100dvh - 14vh);border:1px solid var(--w-border,var(--color-border,#dce2eb));border-radius:var(--w-radius-lg,8px);background:var(--w-surface,var(--color-surface,#fff));color:var(--w-text,var(--color-text,#1f2937));box-shadow:0 24px 64px #10182833;outline:none;box-sizing:border-box}:where(.wendang-root,.wendang,.wendang-portal) .w-dialog.is-fullscreen{width:100vw;max-width:none;height:100dvh;max-height:none;border:0;border-radius:0}:where(.wendang-root,.wendang,.wendang-portal) .w-dialog__header{display:flex;align-items:center;gap:12px;flex:none;padding:14px 18px 10px}:where(.wendang-root,.wendang,.wendang-portal) .w-dialog__title{flex:1;min-width:0;font-size:15px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}:where(.wendang-root,.wendang,.wendang-portal) .w-dialog__close{flex:none;display:grid;place-items:center;width:28px;height:28px;padding:0;border:0;border-radius:var(--w-radius-md,6px);background:transparent;color:var(--w-text-muted,var(--color-text-muted));cursor:pointer}:where(.wendang-root,.wendang,.wendang-portal) .w-dialog__close:hover{background:var(--w-surface-subtle,#f5f7fa);color:var(--w-text,#1f2937)}:where(.wendang-root,.wendang,.wendang-portal) .w-dialog__body{flex:1;min-height:0;padding:4px 18px 18px;overflow:auto;display:flex;flex-direction:column;gap:12px}:where(.wendang-root,.wendang,.wendang-portal) .w-dialog.is-fullscreen .w-dialog__body{padding:0;overflow:hidden}:where(.wendang-root,.wendang,.wendang-portal) .w-dialog__footer{flex:none;display:flex;justify-content:flex-end;gap:8px;padding:0 18px 16px}:where(.wendang-root,.wendang,.wendang-portal) .video-dialog{width:min(520px,calc(100vw - 32px))}:where(.wendang-root,.wendang,.wendang-portal) .w-dialog label,:where(.wendang-root,.wendang,.wendang-portal) .wr-mind-panel label{display:flex;flex-direction:column;gap:6px;font-size:13px;margin-bottom:10px}:where(.wendang-root,.wendang,.wendang-portal) .w-dialog input,:where(.wendang-root,.wendang,.wendang-portal) .w-dialog textarea,:where(.wendang-root,.wendang,.wendang-portal) .wr-mind-panel textarea{width:100%;box-sizing:border-box}:where(.wendang-root,.wendang,.wendang-portal) .wr-toolbar{display:flex;align-items:center;gap:8px;flex-wrap:wrap}:where(.wendang-root,.wendang,.wendang-portal) .wr-icon{display:block;flex:none}:where(.wendang-root,.wendang,.wendang-portal) .wr-document{position:relative;min-height:160px}:where(.wendang-root,.wendang,.wendang-portal) .wr-document-mount{min-width:0}:where(.wendang-root,.wendang,.wendang-portal) .wr-document .editor-canvas{outline:none;width:100%;max-width:var(--content-width);min-height:60vh;margin-inline:auto;padding-bottom:calc(var(--content-font-size,16px) * var(--content-line-height,1.75) + var(--space-block,12px))}:where(.wendang-root,.wendang,.wendang-portal) .wr-document-toolbar{margin-bottom:10px}:where(.wendang-root,.wendang,.wendang-portal) .block-plus{position:absolute;z-index:31;width:28px;height:28px;display:flex;align-items:center;justify-content:center;border:1px solid var(--color-border);border-radius:5px;background:var(--color-surface);color:var(--color-text-muted);cursor:pointer;padding:0;transition:background .12s,border-color .12s}:where(.wendang-root,.wendang,.wendang-portal) .block-plus:hover{color:var(--color-accent);border-color:var(--color-accent);background:var(--color-accent-soft)}:where(.wendang-root,.wendang,.wendang-portal) .block-chip{position:absolute;z-index:31;display:flex;align-items:center;width:48px;height:28px;box-sizing:border-box;padding:1px;border:1px solid var(--color-border);border-radius:6px;background:var(--color-surface);transition:border-color .12s}:where(.wendang-root,.wendang,.wendang-portal) .block-chip:hover{border-color:var(--color-accent)}:where(.wendang-root,.wendang,.wendang-portal) .chip-btn{width:22px;height:24px;display:flex;align-items:center;justify-content:center;border:none;background:transparent;color:var(--color-accent);cursor:pointer;padding:0;border-radius:3px}:where(.wendang-root,.wendang,.wendang-portal) .chip-btn:hover{color:var(--color-accent);background:var(--color-accent-soft)}:where(.wendang-root,.wendang,.wendang-portal) .chip-grip{cursor:grab;color:var(--color-text-faint)}:where(.wendang-root,.wendang,.wendang-portal) .chip-grip:active{cursor:grabbing}:where(.wendang-root,.wendang,.wendang-portal) .block-anchor{position:absolute;z-index:45;overflow-anchor:none;pointer-events:auto}:where(.wendang-root,.wendang,.wendang-portal) .block-menu{width:208px;background:var(--color-surface);border:1px solid var(--color-border);border-radius:8px;box-shadow:var(--shadow-pop);padding:4px}:where(.wendang-root,.wendang,.wendang-portal) .bm-item{display:flex;align-items:center;gap:8px;width:100%;padding:6px 8px;border:0;border-radius:6px;background:transparent;cursor:pointer;font-size:13px;font-family:inherit;color:var(--color-text);text-align:left}:where(.wendang-root,.wendang,.wendang-portal) .bm-item:hover{background:var(--color-surface-subtle)}:where(.wendang-root,.wendang,.wendang-portal) .bm-item:focus-visible{outline:2px solid var(--color-accent);outline-offset:-2px}:where(.wendang-root,.wendang,.wendang-portal) .bm-item.active{color:var(--color-accent)}:where(.wendang-root,.wendang,.wendang-portal) .bm-item.disabled{opacity:.45;pointer-events:none}:where(.wendang-root,.wendang,.wendang-portal) .bm-item.danger{color:var(--color-danger)}:where(.wendang-root,.wendang,.wendang-portal) .bm-item span:first-of-type{flex:1}:where(.wendang-root,.wendang,.wendang-portal) .bm-chevron{margin-left:auto;opacity:.5}:where(.wendang-root,.wendang,.wendang-portal) .bm-sep{height:1px;background:var(--color-border);margin:4px 6px}:where(.wendang-root,.wendang,.wendang-portal) .block-submenu{position:absolute;z-index:1;width:208px;background:var(--color-surface);border:1px solid var(--color-border);border-radius:8px;box-shadow:var(--shadow-pop);padding:4px;max-height:calc(100dvh - 16px);overflow:auto}:where(.wendang-root,.wendang,.wendang-portal) .block-submenu-color{width:max-content;padding:12px}:where(.wendang-root,.wendang,.wendang-portal) .sel-toolbar{position:absolute;z-index:50;display:flex;align-items:center;gap:2px;padding:3px 4px;width:max-content;background:var(--color-surface);border:1px solid var(--color-border);border-radius:8px;box-shadow:var(--shadow-pop);transform:translateY(-100%);overflow-anchor:none}:where(.wendang-root,.wendang,.wendang-portal) .tb-btn{display:flex;align-items:center;justify-content:center;gap:2px;flex:none;box-sizing:border-box;min-width:32px;height:32px;border:0;border-radius:5px;background:transparent;color:var(--color-text);font-size:16px;line-height:1;cursor:pointer;padding:0 5px}:where(.wendang-root,.wendang,.wendang-portal) .tb-btn:hover{background:var(--color-surface-subtle)}:where(.wendang-root,.wendang,.wendang-portal) .tb-btn.on{background:var(--color-accent-soft);color:var(--color-accent)}:where(.wendang-root,.wendang,.wendang-portal) .tb-btn:focus-visible{outline:2px solid var(--color-accent);outline-offset:1px}:where(.wendang-root,.wendang,.wendang-portal) .tb-sep{flex:none;width:1px;height:20px;background:var(--color-border);margin:0 4px}:where(.wendang-root,.wendang,.wendang-portal) .tb-color-wrap{position:relative}:where(.wendang-root,.wendang,.wendang-portal) .tb-panel{position:absolute;left:0;top:calc(100% + 8px);padding:12px;background:var(--color-surface);border:1px solid var(--color-border);border-radius:8px;box-shadow:var(--shadow-pop)}:where(.wendang-root,.wendang,.wendang-portal) .document-color-panel{width:220px;display:flex;flex-direction:column;gap:12px}:where(.wendang-root,.wendang,.wendang-portal) .color-section{display:flex;flex-direction:column;gap:6px}:where(.wendang-root,.wendang,.wendang-portal) .color-label{color:var(--color-text-muted);font-size:12px;line-height:1.5}:where(.wendang-root,.wendang,.wendang-portal) .color-grid{display:grid;grid-template-columns:repeat(8,24px);gap:4px}:where(.wendang-root,.wendang,.wendang-portal) .color-choice{width:24px;min-width:24px;height:24px;padding:0;border:1px solid var(--color-border);border-radius:3px;background:var(--color-surface);cursor:pointer;display:flex;align-items:center;justify-content:center}:where(.wendang-root,.wendang,.wendang-portal) .color-choice.selected{border-color:var(--color-accent);outline:1px solid var(--color-accent);outline-offset:-1px}:where(.wendang-root,.wendang,.wendang-portal) .font-sample{font-size:16px;font-weight:500;line-height:1}:where(.wendang-root,.wendang,.wendang-portal) .background-choice{position:relative}:where(.wendang-root,.wendang,.wendang-portal) .img-toolbar{position:absolute;z-index:50;display:flex;align-items:center;gap:2px;padding:3px 4px;background:var(--color-surface);border:1px solid var(--color-border);border-radius:8px;box-shadow:var(--shadow-pop);transform:translate(-50%)}:where(.wendang-root,.wendang,.wendang-portal) .it-btn{display:flex;align-items:center;justify-content:center;min-width:28px;height:28px;border:0;border-radius:5px;background:transparent;color:var(--color-text);cursor:pointer;padding:0 5px}:where(.wendang-root,.wendang,.wendang-portal) .it-btn:hover{background:var(--color-surface-subtle)}:where(.wendang-root,.wendang,.wendang-portal) .it-btn.on{background:var(--color-accent-soft);color:var(--color-accent)}:where(.wendang-root,.wendang,.wendang-portal) .it-btn.danger{color:var(--color-danger)}:where(.wendang-root,.wendang,.wendang-portal) .it-btn.danger:hover{background:color-mix(in srgb,var(--color-danger) 12%,transparent)}:where(.wendang-root,.wendang,.wendang-portal) .it-sep{width:1px;height:18px;background:var(--color-border);margin:0 3px}:where(.wendang-root,.wendang,.wendang-portal) .slash-anchor{position:absolute;z-index:40;display:flex;align-items:flex-start;gap:6px}:where(.wendang-root,.wendang,.wendang-portal) .slash-menu{width:268px;background:var(--color-surface);border:1px solid var(--color-border);border-radius:8px;box-shadow:var(--shadow-pop);padding:4px}:where(.wendang-root,.wendang,.wendang-portal) .slash-content{padding:0 0 4px;max-height:min(560px,calc(100dvh - 26px));overflow-y:auto;overscroll-behavior:contain}:where(.wendang-root,.wendang,.wendang-portal) .slash-group{font-size:11px;color:var(--color-text-faint);padding:7px 8px 3px}:where(.wendang-root,.wendang,.wendang-portal) .slash-menu ul{list-style:none;margin:0;padding:0}:where(.wendang-root,.wendang,.wendang-portal) .slash-menu li{display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:6px;cursor:pointer;font-size:14px;color:var(--color-text)}:where(.wendang-root,.wendang,.wendang-portal) .slash-menu li.active{background:var(--color-accent-soft)}:where(.wendang-root,.wendang,.wendang-portal) .slash-label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}:where(.wendang-root,.wendang,.wendang-portal) .slash-hint{color:var(--color-text-faint);font-size:12px;flex:none}:where(.wendang-root,.wendang,.wendang-portal) .slash-chevron{color:var(--color-text-faint);flex:none}:where(.wendang-root,.wendang,.wendang-portal) .slash-empty{color:var(--color-text-faint);font-size:13px;text-align:center;padding:10px}:where(.wendang-root,.wendang,.wendang-portal) .insert-picker{position:absolute;z-index:46;background:var(--color-surface);border:1px solid var(--color-border);border-radius:8px;box-shadow:var(--shadow-pop);padding:10px}:where(.wendang-root,.wendang,.wendang-portal) .ip-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px;font-size:12px;color:var(--color-text-muted);margin-bottom:8px}:where(.wendang-root,.wendang,.wendang-portal) .ip-dim{color:var(--color-text-faint);flex:none}:where(.wendang-root,.wendang,.wendang-portal) .ip-grid{display:grid;grid-template-columns:repeat(8,18px);grid-auto-rows:18px;gap:3px}:where(.wendang-root,.wendang,.wendang-portal) .ip-cell{width:18px;height:18px;padding:0;border:1px solid var(--color-border);border-radius:3px;background:var(--color-surface-subtle);cursor:pointer}:where(.wendang-root,.wendang,.wendang-portal) .ip-cell.on{background:var(--color-accent-soft);border-color:var(--color-accent)}:where(.wendang-root,.wendang,.wendang-portal) .ip-counts{display:flex;gap:6px}:where(.wendang-root,.wendang,.wendang-portal) .ip-count{display:flex;flex-direction:column;align-items:center;gap:4px;padding:4px 6px;border:1px solid transparent;border-radius:6px;background:transparent;cursor:pointer}:where(.wendang-root,.wendang,.wendang-portal) .ip-count:hover{background:var(--color-surface-subtle)}:where(.wendang-root,.wendang,.wendang-portal) .ip-count.on{border-color:var(--color-accent);background:var(--color-accent-soft)}:where(.wendang-root,.wendang,.wendang-portal) .ip-count-box{display:flex;gap:2px;width:34px;height:22px;padding:3px;border:1px solid var(--color-border-strong);border-radius:3px;background:var(--color-surface-subtle);box-sizing:border-box}:where(.wendang-root,.wendang,.wendang-portal) .ip-count-bar{flex:1 1 0;min-width:0;background:var(--color-border-strong);border-radius:1px}:where(.wendang-root,.wendang,.wendang-portal) .ip-count.on .ip-count-bar{background:var(--color-accent)}:where(.wendang-root,.wendang,.wendang-portal) .ip-count-num{font-size:11px;color:var(--color-text-muted)}:where(.wendang-root,.wendang,.wendang-portal) .ip-close{position:absolute;right:4px;top:4px;padding:2px;border:0;background:transparent;color:var(--color-text-faint);cursor:pointer}:where(.wendang-root,.wendang,.wendang-portal) .tbl-ui-host{position:absolute;left:0;top:0;width:0;height:0;pointer-events:none;z-index:30}:where(.wendang-root,.wendang,.wendang-portal) .tbl-ui-host>*{pointer-events:auto}:where(.wendang-root,.wendang,.wendang-portal) .tbl-corner{position:absolute;z-index:34;display:flex;width:44px;height:26px;padding:1px;box-sizing:border-box;border:1px solid var(--color-border);border-radius:6px;background:var(--color-surface)}:where(.wendang-root,.wendang,.wendang-portal) .tbl-corner button{width:20px;height:22px;padding:0;display:flex;align-items:center;justify-content:center;border:none;border-radius:3px;background:transparent;color:var(--color-accent);cursor:pointer}:where(.wendang-root,.wendang,.wendang-portal) .tbl-corner .tbl-grip{color:var(--color-text-faint);cursor:grab}:where(.wendang-root,.wendang,.wendang-portal) .tbl-corner .tbl-grip:active{cursor:grabbing}:where(.wendang-root,.wendang,.wendang-portal) .tbl-corner button:hover{background:var(--color-accent-soft)}:where(.wendang-root,.wendang,.wendang-portal) .tbl-axis{position:absolute;z-index:35;padding:0;border:none;border-radius:5px;background:transparent;cursor:pointer}:where(.wendang-root,.wendang,.wendang-portal) .tbl-axis:before{content:"";position:absolute;border-radius:3px;background:var(--color-border-strong);box-shadow:0 0 0 2px var(--color-surface)}:where(.wendang-root,.wendang,.wendang-portal) .tbl-row-axis{width:20px;height:24px;opacity:0}:where(.wendang-root,.wendang,.wendang-portal) .tbl-row-axis:before{left:8px;top:4px;width:4px;height:16px}:where(.wendang-root,.wendang,.wendang-portal) .tbl-col-axis{width:24px;height:20px;opacity:0}:where(.wendang-root,.wendang,.wendang-portal) .tbl-col-axis:before{left:4px;top:8px;width:16px;height:4px}:where(.wendang-root,.wendang,.wendang-portal) .tbl-axis.current,:where(.wendang-root,.wendang,.wendang-portal) .tbl-axis:hover,:where(.wendang-root,.wendang,.wendang-portal) .tbl-axis:focus-visible,:where(.wendang-root,.wendang,.wendang-portal) .tbl-axis.on{opacity:1}:where(.wendang-root,.wendang,.wendang-portal) .tbl-axis:hover:before,:where(.wendang-root,.wendang,.wendang-portal) .tbl-axis.on:before{background:var(--color-accent)}:where(.wendang-root,.wendang,.wendang-portal) .tbl-boundary{position:absolute;z-index:36;display:flex;justify-content:center;align-items:center;width:20px;height:20px;border:none;border-radius:50%;padding:0;background:transparent;color:transparent;cursor:pointer}:where(.wendang-root,.wendang,.wendang-portal) .tbl-boundary:before{content:"";position:absolute;width:4px;height:4px;border-radius:50%;background:var(--color-border-strong)}:where(.wendang-root,.wendang,.wendang-portal) .tbl-boundary:hover,:where(.wendang-root,.wendang,.wendang-portal) .tbl-boundary:focus-visible{color:#fff;background:var(--color-accent)}:where(.wendang-root,.wendang,.wendang-portal) .tbl-boundary:hover:before,:where(.wendang-root,.wendang,.wendang-portal) .tbl-boundary:focus-visible:before{display:none}:where(.wendang-root,.wendang,.wendang-portal) .tbl-boundary:after{content:"";position:absolute;pointer-events:none;background:var(--color-accent);display:none}:where(.wendang-root,.wendang,.wendang-portal) .tbl-boundary:hover:after,:where(.wendang-root,.wendang,.wendang-portal) .tbl-boundary:focus-visible:after{display:block}:where(.wendang-root,.wendang,.wendang-portal) .tbl-boundary-row:after{left:14px;top:9px;width:var(--insert-length);height:2px}:where(.wendang-root,.wendang,.wendang-portal) .tbl-boundary-col:after{top:14px;left:9px;width:2px;height:var(--insert-length)}:where(.wendang-root,.wendang,.wendang-portal) .tbl-boundary>svg,:where(.wendang-root,.wendang,.wendang-portal) .tbl-boundary>.wr-icon{position:relative;z-index:1}:where(.wendang-root,.wendang,.wendang-portal) .tbl-selection-more{position:absolute;z-index:38;display:flex;align-items:center;justify-content:center;width:32px;height:20px;padding:0;line-height:12px;border:none;border-radius:6px;background:var(--color-accent);color:#fff;cursor:pointer;font-size:20px}:where(.wendang-root,.wendang,.wendang-portal) .tbl-ui-host>.tbl-selection{position:absolute;z-index:32;border:2px solid var(--color-accent);border-radius:5px;box-sizing:border-box;pointer-events:none;box-shadow:0 0 0 1px var(--color-surface)}:where(.wendang-root,.wendang,.wendang-portal) .tbl-cellbar{position:fixed;z-index:55;box-sizing:border-box;width:max-content;max-width:calc(100vw - 24px);background:var(--color-surface);border:1px solid var(--color-border);border-radius:10px;box-shadow:var(--shadow-pop);padding:6px}:where(.wendang-root,.wendang,.wendang-portal) .tbl-tools{display:flex;gap:2px;align-items:center;flex-wrap:wrap}:where(.wendang-root,.wendang,.wendang-portal) .tool{flex:0 0 auto;display:flex;align-items:center;justify-content:center;gap:2px;min-width:32px;height:32px;padding:0 5px;border:none;border-radius:5px;background:transparent;color:var(--color-text);font-size:15px;cursor:pointer}:where(.wendang-root,.wendang,.wendang-portal) .tool:hover{background:var(--color-surface-subtle)}:where(.wendang-root,.wendang,.wendang-portal) .tool.on{background:var(--color-accent-soft);color:var(--color-accent)}:where(.wendang-root,.wendang,.wendang-portal) .tool[aria-disabled=true]{opacity:.3;cursor:not-allowed}:where(.wendang-root,.wendang,.wendang-portal) .color-tool{position:relative;padding-bottom:2px}:where(.wendang-root,.wendang,.wendang-portal) .color-bar{position:absolute;left:8px;right:8px;bottom:3px;height:2px;border-radius:1px;box-shadow:0 0 0 1px var(--color-surface)}:where(.wendang-root,.wendang,.wendang-portal) .tool-sep{flex:0 0 1px;height:20px;background:var(--color-border);margin:0 4px}:where(.wendang-root,.wendang,.wendang-portal) .tbl-palette{z-index:60;display:flex;flex-direction:column;gap:8px;width:max-content;max-width:calc(100vw - 48px);padding:10px;background:var(--color-surface);border:1px solid var(--color-border);border-radius:8px;box-shadow:var(--shadow-pop)}:where(.wendang-root,.wendang,.wendang-portal) .palette-head{display:flex;flex-direction:column;gap:2px;padding:0 2px}:where(.wendang-root,.wendang,.wendang-portal) .palette-title{font-size:13px;font-weight:600;color:var(--color-text)}:where(.wendang-root,.wendang,.wendang-portal) .palette-hint{font-size:11px;line-height:1.5;color:var(--color-text-muted);max-width:282px}:where(.wendang-root,.wendang,.wendang-portal) .palette-grid{display:grid;grid-template-columns:repeat(8,30px);gap:6px}:where(.wendang-root,.wendang,.wendang-portal) .tbl-align-menu{z-index:60;width:176px;padding:6px;background:var(--color-surface);border:1px solid var(--color-border);border-radius:8px;box-shadow:var(--shadow-pop)}:where(.wendang-root,.wendang,.wendang-portal) .tbl-align-menu button{display:flex;align-items:center;gap:10px;width:100%;min-height:36px;padding:6px 10px;border:none;border-radius:5px;background:transparent;color:var(--color-text);cursor:pointer}:where(.wendang-root,.wendang,.wendang-portal) .tbl-align-menu button span{flex:1;text-align:left}:where(.wendang-root,.wendang,.wendang-portal) .tbl-align-menu button:hover,:where(.wendang-root,.wendang,.wendang-portal) .tbl-align-menu button:focus-visible{background:var(--color-surface-subtle)}:where(.wendang-root,.wendang,.wendang-portal) .tbl-align-menu button[aria-checked=true]{color:var(--color-accent)}:where(.wendang-root,.wendang,.wendang-portal) .swatch{display:flex;align-items:center;justify-content:center;width:30px;height:30px;padding:4px;border:1px solid var(--color-border);border-radius:5px;background:var(--color-surface);cursor:pointer;color:var(--color-text-muted)}:where(.wendang-root,.wendang,.wendang-portal) .swatch span{width:100%;height:100%;border-radius:2px}:where(.wendang-root,.wendang,.wendang-portal) .swatch .glyph{display:flex;align-items:center;justify-content:center;width:100%;height:100%;font-size:15px;font-weight:500;line-height:1;border-radius:0}:where(.wendang-root,.wendang,.wendang-portal) .swatch:hover{border-color:var(--color-accent)}:where(.wendang-root,.wendang,.wendang-portal) .swatch.selected{border-color:var(--color-accent);box-shadow:0 0 0 1px var(--color-accent)}:where(.wendang-root,.wendang,.wendang-portal) .tbl-ctx{z-index:80;padding:0;box-sizing:border-box;background:var(--color-surface);border:1px solid var(--color-border);border-radius:8px;box-shadow:var(--shadow-pop)}:where(.wendang-root,.wendang,.wendang-portal) .ctx-item{display:flex;align-items:center;gap:8px;width:100%;border:none;background:transparent;min-height:32px;padding:7px 10px;border-radius:6px;color:var(--color-text);cursor:pointer;text-align:left;font:inherit;font-size:13px}:where(.wendang-root,.wendang,.wendang-portal) .ctx-item:hover{background:var(--color-surface-subtle)}:where(.wendang-root,.wendang,.wendang-portal) .ctx-item:focus-visible{outline:2px solid var(--color-accent);outline-offset:-2px}:where(.wendang-root,.wendang,.wendang-portal) .ctx-item:disabled{opacity:.5;cursor:wait}:where(.wendang-root,.wendang,.wendang-portal) .ctx-chevron{margin-left:auto}:where(.wendang-root,.wendang,.wendang-portal) .ctx-styles{margin:2px 4px;padding-left:12px;border-left:1px solid var(--color-border)}:where(.wendang-root,.wendang,.wendang-portal) .ctx-style-swatch{width:18px;height:14px;border:1px solid var(--color-border);border-radius:3px}:where(.wendang-root,.wendang,.wendang-portal) .ctx-item.danger{color:var(--color-danger)}:where(.wendang-root,.wendang,.wendang-portal) .ctx-sep{height:1px;background:var(--color-border);margin:4px 6px}:where(.wendang-root,.wendang,.wendang-portal) .ctx-label{font-size:11px;color:var(--color-text-faint);padding:4px 8px 2px}:where(.wendang-root,.wendang,.wendang-portal) .ctx-align{display:flex;gap:4px;padding:2px 6px 6px}:where(.wendang-root,.wendang,.wendang-portal) .al-btn{border:1px solid var(--color-border);background:var(--color-surface);border-radius:5px;padding:3px 6px;cursor:pointer;color:var(--color-text-muted)}:where(.wendang-root,.wendang,.wendang-portal) .al-btn.on{border-color:var(--color-accent);color:var(--color-accent);background:var(--color-accent-soft)}:where(.wendang-root,.wendang,.wendang-portal) .ctx-width{display:flex;align-items:center;gap:6px;padding:4px 8px}:where(.wendang-root,.wendang,.wendang-portal) .ctx-label-inline{color:var(--color-text-muted)}:where(.wendang-root,.wendang,.wendang-portal) .ctx-num{width:66px;padding:3px 6px;font-size:13px;border:1px solid var(--color-border);border-radius:5px;background:var(--color-surface);color:var(--color-text)}:where(.wendang-root,.wendang,.wendang-portal) .ctx-mini{border:1px solid var(--color-border);background:var(--color-surface);border-radius:5px;padding:3px 8px;font-size:12px;cursor:pointer}:where(.wendang-root,.wendang,.wendang-portal) .ctx-mini.primary{background:var(--color-accent);border-color:var(--color-accent);color:#fff}:where(.wendang-root,.wendang,.wendang-portal) .faint{color:var(--color-text-faint)}:where(.wendang-root,.wendang,.wendang-portal) .small{font-size:11px}:where(.wendang-root,.wendang,.wendang-portal) .wr-link-popover{position:fixed;z-index:1450;padding:8px;border:1px solid var(--color-border);border-radius:8px;background:var(--color-surface);box-shadow:var(--shadow-pop);max-width:calc(100vw - 16px);font-size:13px}:where(.wendang-root,.wendang,.wendang-portal) .wr-link-popover input{min-width:250px}:where(.wendang-root,.wendang,.wendang-portal) .wr-link-popover a{max-width:350px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}:where(.wendang-root,.wendang,.wendang-portal) .callout-controls{display:contents}:where(.wendang-root,.wendang,.wendang-portal) .callout-icon-button{justify-self:start;background:transparent;border-color:transparent;margin:0;cursor:default}:where(.wendang-root,.wendang,.wendang-portal) .callout-icon-button:not(:disabled){cursor:pointer}:where(.wendang-root,.wendang,.wendang-portal) .callout-toolbar{position:absolute;bottom:calc(100% + 4px);right:0;z-index:25;display:flex;align-items:center;gap:4px;padding:4px;background:var(--color-surface);border:1px solid var(--color-border);border-radius:8px;box-shadow:var(--shadow-pop);opacity:0;visibility:hidden;transition:opacity .1s}:where(.wendang-root,.wendang,.wendang-portal) .doc-callout:hover>.callout-controls-host .callout-toolbar,:where(.wendang-root,.wendang,.wendang-portal) .doc-callout:focus-within>.callout-controls-host .callout-toolbar,:where(.wendang-root,.wendang,.wendang-portal) .callout-toolbar.is-open{opacity:1;visibility:visible}:where(.wendang-root,.wendang,.wendang-portal) .callout-toolbar-button{min-width:32px}:where(.wendang-root,.wendang,.wendang-portal) .callout-palette-button{width:32px;min-width:32px;padding:0}:where(.wendang-root,.wendang,.wendang-portal) .callout-toolbar-divider{height:16px;border-left:1px solid var(--color-border);margin:0 3px}:where(.wendang-root,.wendang,.wendang-portal) .callout-color-panel{width:max-content;display:flex;flex-direction:column;gap:12px;padding:2px}:where(.wendang-root,.wendang,.wendang-portal) .callout-color-label{font-size:12px;margin-bottom:6px;color:var(--color-text-muted)}:where(.wendang-root,.wendang,.wendang-portal) .callout-color-grid{display:grid;grid-template-columns:repeat(8,26px);gap:5px}:where(.wendang-root,.wendang,.wendang-portal) .callout-color-choice{position:relative;width:26px;height:26px;padding:0;border:1px solid var(--color-border);border-radius:4px;background:var(--color-surface);cursor:pointer;overflow:hidden;font-size:12px;color:var(--color-text-muted)}:where(.wendang-root,.wendang,.wendang-portal) .callout-color-choice.is-selected{outline:2px solid var(--color-accent);outline-offset:1px}:where(.wendang-root,.wendang,.wendang-portal) .callout-font-sample{font-size:16px;line-height:1;color:inherit}:where(.wendang-root,.wendang,.wendang-portal) .callout-icon-picker{width:254px;box-sizing:border-box;padding:8px 10px 6px}:where(.wendang-root,.wendang,.wendang-portal) .callout-icon-grid{display:grid;grid-template-columns:repeat(6,34px);gap:6px}:where(.wendang-root,.wendang,.wendang-portal) .callout-icon-choice{width:34px;height:34px;padding:0;border:0;border-radius:5px;background:transparent;font-size:20px;cursor:pointer}:where(.wendang-root,.wendang,.wendang-portal) .callout-icon-choice:hover,:where(.wendang-root,.wendang,.wendang-portal) .callout-icon-choice[aria-pressed=true]{background:var(--color-accent-soft)}:where(.wendang-root,.wendang,.wendang-portal) .callout-icon-footer{display:flex;gap:8px;margin-top:10px;padding-top:8px;border-top:1px solid var(--color-border)}:where(.wendang-root,.wendang,.wendang-portal) .callout-icon-footer .w-button{flex:1;justify-content:center}:where(.wendang-root,.wendang,.wendang-portal) .wr-block-drop-line{position:fixed;z-index:1300;height:2px;pointer-events:none;background:var(--color-accent);border-radius:1px}:where(.wendang-root,.wendang,.wendang-portal) .wr-block-drop-line:before{content:"";position:absolute;left:-3px;top:-3px;width:8px;height:8px;border-radius:50%;background:var(--color-accent)}:where(.wendang-root,.wendang,.wendang-portal) .wr-block-handle{position:absolute;left:0;z-index:25}:where(.wendang-root,.wendang,.wendang-portal) .wr-block-menu,:where(.wendang-root,.wendang,.wendang-portal) .wr-insert-menu{position:sticky;bottom:10px;z-index:40;background:var(--color-surface);border:1px solid var(--color-border);border-radius:8px;padding:10px;box-shadow:var(--shadow-pop);max-height:360px;overflow:auto}:where(.wendang-root,.wendang,.wendang-portal) .wr-insert-menu{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:5px}:where(.wendang-root,.wendang,.wendang-portal) .wr-insert-menu header{display:flex;justify-content:space-between;grid-column:1/-1}:where(.wendang-root,.wendang,.wendang-portal) .wr-image{max-width:100%;height:auto;cursor:zoom-in}:where(.wendang-root,.wendang,.wendang-portal) .wr-image-preview{max-width:100%;max-height:70vh;object-fit:contain}:where(.wendang-root,.wendang,.wendang-portal) .wr-media-placeholder{display:inline-flex;min-height:100px;align-items:center;justify-content:center;background:var(--color-surface-subtle)}:where(.wendang-root,.wendang,.wendang-portal) .wr-code>header{display:flex;justify-content:space-between;background:var(--color-surface-subtle);padding:6px 10px;font-size:12px}:where(.wendang-root,.wendang,.wendang-portal) .wr-video iframe{width:100%;height:350px;border:0}:where(.wendang-root,.wendang,.wendang-portal) .doc-file-card video{max-width:100%}:where(.wendang-root,.wendang,.wendang-portal) .wr-spreadsheet{height:100%;min-height:360px;position:relative;display:flex;flex-direction:column}:where(.wendang-root,.wendang,.wendang-portal) .wr-sheet-engine{flex:1;min-height:300px}:where(.wendang-root,.wendang,.wendang-portal) .worksheet-preview{border:1px solid var(--color-border);border-radius:8px;overflow:hidden;background:var(--color-surface)}:where(.wendang-root,.wendang,.wendang-portal) .worksheet-preview-standalone{display:flex;flex-direction:column;flex:1;min-height:0;border:0;border-radius:0}:where(.wendang-root,.wendang,.wendang-portal) .worksheet-preview-standalone .sheet-table{flex:1;min-height:0;max-height:none}:where(.wendang-root,.wendang,.wendang-portal) .sheet-tabs{display:flex;gap:8px;align-items:center;flex-wrap:wrap;padding:8px;font-size:12px}:where(.wendang-root,.wendang,.wendang-portal) .sheet-note{color:var(--color-text-muted)}:where(.wendang-root,.wendang,.wendang-portal) .sheet-table{overflow:auto;max-height:600px;outline:none}:where(.wendang-root,.wendang,.wendang-portal) .sheet-table table{border-collapse:collapse;table-layout:fixed;width:max-content;font-size:13px}:where(.wendang-root,.wendang,.wendang-portal) .sheet-table th,:where(.wendang-root,.wendang,.wendang-portal) .sheet-table td{border:1px solid var(--color-border);padding:3px 6px;overflow:hidden;white-space:pre-wrap;overflow-wrap:anywhere;vertical-align:top}:where(.wendang-root,.wendang,.wendang-portal) .sheet-table th{background:var(--color-surface-subtle);font-weight:500;color:var(--color-text-muted)}:where(.wendang-root,.wendang,.wendang-portal) .sheet-table thead{position:sticky;top:0;z-index:1}:where(.wendang-root,.wendang,.wendang-portal) .sheet-table tr>th:first-child{min-width:40px;text-align:center}:where(.wendang-root,.wendang,.wendang-portal) .sheet-paging{display:flex;gap:8px;align-items:center;flex-wrap:wrap;padding:8px;font-size:12px;color:var(--color-text-faint)}:where(.wendang-root,.wendang,.wendang-portal) .sheet-paging>span{flex:1}:where(.wendang-root,.wendang,.wendang-portal) .sheet-view-note{flex:none;margin:0;padding:6px 8px;font-size:12px;color:var(--color-text-muted);background:var(--color-surface-subtle)}:where(.wendang-root,.wendang,.wendang-portal) .wr-mind-editor{height:100%;min-height:380px;min-width:0}:where(.wendang-root,.wendang,.wendang-portal) .mind-canvas-layers{position:absolute;left:0;top:0;transform-origin:0 0}:where(.wendang-root,.wendang,.wendang-portal) .mind-canvas-edges{position:absolute;left:0;top:0;width:1px;height:1px;overflow:visible;pointer-events:none}:where(.wendang-root,.wendang,.wendang-portal) .mind-canvas-stage{touch-action:none}:where(.wendang-root,.wendang,.wendang-portal) .mind-canvas-surface{position:absolute;inset:0}:where(.wendang-root,.wendang,.wendang-portal) .mind-node-actions,:where(.wendang-root,.wendang,.wendang-portal) .mind-selection-summary,:where(.wendang-root,.wendang,.wendang-portal) .mind-canvas-bottom{z-index:5}:where(.wendang-root,.wendang,.wendang-portal) .mind-canvas-notice{z-index:6}:where(.wendang-root,.wendang,.wendang-portal) .mind-context-menu{position:fixed;z-index:1400;padding:0;min-width:160px;max-height:calc(100vh - 16px);overflow:auto;background:var(--color-surface);border:1px solid var(--color-border);border-radius:8px;box-shadow:var(--shadow-pop)}:where(.wendang-root,.wendang,.wendang-portal) .mind-side-projection{pointer-events:none}:where(.wendang-root,.wendang,.wendang-portal) .mind-canvas-fullscreen .wd-dialog__body{overflow:hidden}:where(.wendang-root,.wendang,.wendang-portal) .w-popover .mind-settings-menu .w-button{width:auto}:where(.wendang-root,.wendang,.wendang-portal) .mind-space-pan,:where(.wendang-root,.wendang,.wendang-portal) .mind-space-pan .mind-topic{cursor:grab}:where(.wendang-root,.wendang,.wendang-portal) .mind-peer-badge{position:absolute;right:4px;top:4px;padding:1px 5px;border-radius:9px;background:var(--color-accent);color:#fff;font-size:10px;line-height:14px;pointer-events:none}:where(.wendang-root,.wendang,.wendang-portal) .wr-settings{display:flex;flex-direction:column;gap:8px}@media(max-width:760px){:where(.wendang-root,.wendang,.wendang-portal) .wr-mind-hint{display:none}:where(.wendang-root,.wendang,.wendang-portal) .wr-mind-panel{flex-basis:210px}}:where(.wendang-root,.wendang,.wendang-portal) .w-popover.w-select-popup,:where(.wendang-root,.wendang,.wendang-portal) .w-popover.code-settings-popup,:where(.wendang-root,.wendang,.wendang-portal) .w-popover.code-tooltip-popup,:where(.wendang-root,.wendang,.wendang-portal) .w-popover.mind-dropdown-popup{box-sizing:border-box;min-width:0;max-width:calc(100vw - 16px);max-height:calc(100dvh - 16px);padding:0;display:block;overflow:visible;gap:0;overflow-anchor:none}
|