@haklex/rich-editor 0.0.86 → 0.0.88

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/README.md CHANGED
@@ -10,36 +10,32 @@ pnpm add @haklex/rich-editor lexical @lexical/react react react-dom
10
10
 
11
11
  ## Peer Dependencies
12
12
 
13
- `@lexical/code` is provided transitively via `lexical-code-no-prism`. You only need to install it yourself if your app imports `@lexical/code` directly.
14
-
15
- | Package | Version | Required |
16
- | --- | --- | --- |
17
- | `@base-ui/react` | `^1.1.0` | Yes |
18
- | `@lexical/extension` | `^0.41.0` | Yes |
19
- | `@lexical/link` | `^0.41.0` | Yes |
20
- | `@lexical/list` | `^0.41.0` | Yes |
21
- | `@lexical/markdown` | `^0.41.0` | Yes |
22
- | `@lexical/react` | `^0.41.0` | Yes |
23
- | `@lexical/rich-text` | `^0.41.0` | Yes |
24
- | `@lexical/table` | `^0.41.0` | Yes |
25
- | `lexical` | `^0.41.0` | Yes |
26
- | `lucide-react` | `^0.574.0` | Yes |
27
- | `react` | `>=19` | Yes |
28
- | `react-dom` | `>=19` | Yes |
29
- | `katex` | `>=0.16.0` | Optional |
30
- | `shiki` | `^3.0.0` | Optional |
13
+ Lexical 0.42+ exposes code blocks in `@lexical/code-core` (no Prism). This package depends on it; add `@lexical/code-core` to your app only if you import it yourself (e.g. custom code-block tooling).
14
+
15
+ | Package | Version | Required |
16
+ | -------------------- | ---------- | -------- |
17
+ | `@base-ui/react` | `^1.1.0` | Yes |
18
+ | `@lexical/extension` | `^0.42.0` | Yes |
19
+ | `@lexical/link` | `^0.42.0` | Yes |
20
+ | `@lexical/list` | `^0.42.0` | Yes |
21
+ | `@lexical/markdown` | `^0.42.0` | Yes |
22
+ | `@lexical/react` | `^0.42.0` | Yes |
23
+ | `@lexical/rich-text` | `^0.42.0` | Yes |
24
+ | `@lexical/table` | `^0.42.0` | Yes |
25
+ | `lexical` | `^0.42.0` | Yes |
26
+ | `lucide-react` | `^0.574.0` | Yes |
27
+ | `react` | `>=19` | Yes |
28
+ | `react-dom` | `>=19` | Yes |
29
+ | `katex` | `>=0.16.0` | Optional |
30
+ | `shiki` | `^3.0.0` | Optional |
31
31
 
32
32
  ## Usage
33
33
 
34
34
  ```tsx
35
- import { RichEditor } from '@haklex/rich-editor'
36
- import '@haklex/rich-editor/style.css'
37
-
38
- <RichEditor
39
- variant="article"
40
- initialValue={savedState}
41
- onChange={(value) => save(value)}
42
- />
35
+ import { RichEditor } from '@haklex/rich-editor';
36
+ import '@haklex/rich-editor/style.css';
37
+
38
+ <RichEditor variant="article" initialValue={savedState} onChange={(value) => save(value)} />;
43
39
  ```
44
40
 
45
41
  For read-only rendering, use `@haklex/rich-static-renderer` instead.
@@ -48,77 +44,77 @@ For read-only rendering, use `@haklex/rich-static-renderer` instead.
48
44
 
49
45
  ### Components
50
46
 
51
- | Export | Description |
52
- | --- | --- |
53
- | `RichEditor` | Main editor component |
54
- | `ColorSchemeProvider` | Context provider for light/dark theme |
55
- | `FootnoteDefinitionsProvider` | Context provider for footnote definitions |
47
+ | Export | Description |
48
+ | ------------------------------- | --------------------------------------------- |
49
+ | `RichEditor` | Main editor component |
50
+ | `ColorSchemeProvider` | Context provider for light/dark theme |
51
+ | `FootnoteDefinitionsProvider` | Context provider for footnote definitions |
56
52
  | `NestedContentRendererProvider` | Context provider for nested content rendering |
57
53
 
58
54
  ### Node Registries
59
55
 
60
- | Export | Description |
61
- | --- | --- |
62
- | `allNodes` | All static nodes (builtin + custom) |
63
- | `builtinNodes` | Lexical builtin nodes only |
64
- | `customNodes` | Custom static nodes only |
65
- | `allEditNodes` | All edit-mode nodes (builtin + custom edit) |
66
- | `customEditNodes` | Custom edit-mode nodes only |
56
+ | Export | Description |
57
+ | ----------------- | ------------------------------------------- |
58
+ | `allNodes` | All static nodes (builtin + custom) |
59
+ | `builtinNodes` | Lexical builtin nodes only |
60
+ | `customNodes` | Custom static nodes only |
61
+ | `allEditNodes` | All edit-mode nodes (builtin + custom edit) |
62
+ | `customEditNodes` | Custom edit-mode nodes only |
67
63
 
68
64
  ### Node Classes
69
65
 
70
- | Export | Description |
71
- | --- | --- |
72
- | `MermaidNode`, `$createMermaidNode`, `$isMermaidNode` | Mermaid diagram node |
73
- | `RubyNode`, `$createRubyNode`, `$isRubyNode` | Ruby annotation node |
74
- | `GridContainerNode`, `$createGridContainerNode`, `$isGridContainerNode` | Grid layout container |
75
- | `FootnoteSectionNode`, `$createFootnoteSectionNode`, `$isFootnoteSectionNode` | Footnote section node |
76
- | `FootnoteSectionEditNode` | Footnote section edit-mode node |
77
- | `ImageNode`, `$createImageNode`, `$isImageNode` | Image node |
78
- | `LinkCardNode`, `$createLinkCardNode`, `$isLinkCardNode` | Link card node |
79
- | `KaTeXBlockNode`, `$isKaTeXBlockNode` | KaTeX block equation node |
80
- | `KaTeXInlineNode`, `$isKaTeXInlineNode` | KaTeX inline equation node |
81
- | `MentionNode`, `$createMentionNode`, `$isMentionNode` | Mention node |
66
+ | Export | Description |
67
+ | ----------------------------------------------------------------------------- | ------------------------------- |
68
+ | `MermaidNode`, `$createMermaidNode`, `$isMermaidNode` | Mermaid diagram node |
69
+ | `RubyNode`, `$createRubyNode`, `$isRubyNode` | Ruby annotation node |
70
+ | `GridContainerNode`, `$createGridContainerNode`, `$isGridContainerNode` | Grid layout container |
71
+ | `FootnoteSectionNode`, `$createFootnoteSectionNode`, `$isFootnoteSectionNode` | Footnote section node |
72
+ | `FootnoteSectionEditNode` | Footnote section edit-mode node |
73
+ | `ImageNode`, `$createImageNode`, `$isImageNode` | Image node |
74
+ | `LinkCardNode`, `$createLinkCardNode`, `$isLinkCardNode` | Link card node |
75
+ | `KaTeXBlockNode`, `$isKaTeXBlockNode` | KaTeX block equation node |
76
+ | `KaTeXInlineNode`, `$isKaTeXInlineNode` | KaTeX inline equation node |
77
+ | `MentionNode`, `$createMentionNode`, `$isMentionNode` | Mention node |
82
78
 
83
79
  ### Plugins
84
80
 
85
- | Export | Description |
86
- | --- | --- |
87
- | `AutoLinkPlugin` | Automatic link detection |
88
- | `BlockExitPlugin` | Exit block nodes with Enter/arrow keys |
89
- | `HorizontalRulePlugin` | Horizontal rule insertion |
90
- | `ImagePlugin` | Image node handling |
91
- | `ImageUploadPlugin` | Image upload dialog and logic |
92
- | `KaTeXPlugin` | KaTeX equation insertion |
93
- | `LinkFaviconPlugin` | Favicon resolution for links |
94
- | `MarkdownShortcutsPlugin` | Markdown syntax shortcuts |
95
- | `MermaidPlugin` | Mermaid diagram insertion |
96
- | `FootnotePlugin` | Footnote insertion and management |
81
+ | Export | Description |
82
+ | ------------------------- | -------------------------------------- |
83
+ | `AutoLinkPlugin` | Automatic link detection |
84
+ | `BlockExitPlugin` | Exit block nodes with Enter/arrow keys |
85
+ | `HorizontalRulePlugin` | Horizontal rule insertion |
86
+ | `ImagePlugin` | Image node handling |
87
+ | `ImageUploadPlugin` | Image upload dialog and logic |
88
+ | `KaTeXPlugin` | KaTeX equation insertion |
89
+ | `LinkFaviconPlugin` | Favicon resolution for links |
90
+ | `MarkdownShortcutsPlugin` | Markdown syntax shortcuts |
91
+ | `MermaidPlugin` | Mermaid diagram insertion |
92
+ | `FootnotePlugin` | Footnote insertion and management |
97
93
 
98
94
  ### Commands
99
95
 
100
- | Export | Description |
101
- | --- | --- |
102
- | `INSERT_ALERT_COMMAND` | Insert an alert/callout block |
103
- | `INSERT_IMAGE_COMMAND` | Insert an image node |
104
- | `OPEN_IMAGE_UPLOAD_DIALOG_COMMAND` | Open the image upload dialog |
105
- | `INSERT_KATEX_BLOCK_COMMAND` | Insert a KaTeX block equation |
106
- | `INSERT_KATEX_INLINE_COMMAND` | Insert a KaTeX inline equation |
107
- | `INSERT_MERMAID_COMMAND` | Insert a Mermaid diagram |
96
+ | Export | Description |
97
+ | ---------------------------------- | ------------------------------ |
98
+ | `INSERT_ALERT_COMMAND` | Insert an alert/callout block |
99
+ | `INSERT_IMAGE_COMMAND` | Insert an image node |
100
+ | `OPEN_IMAGE_UPLOAD_DIALOG_COMMAND` | Open the image upload dialog |
101
+ | `INSERT_KATEX_BLOCK_COMMAND` | Insert a KaTeX block equation |
102
+ | `INSERT_KATEX_INLINE_COMMAND` | Insert a KaTeX inline equation |
103
+ | `INSERT_MERMAID_COMMAND` | Insert a Mermaid diagram |
108
104
 
109
105
  ### Utilities
110
106
 
111
- | Export | Description |
112
- | --- | --- |
113
- | `extractTextContent` | Extract plain text from editor state |
114
- | `collectCommandItems` | Collect slash menu / toolbar command items |
115
- | `computeImageMeta` | Compute thumbhash and dimensions for an image |
116
- | `decodeThumbHash` | Decode a thumbhash string to a data URL |
117
- | `createRendererDecoration` | Create a renderer decoration for decorator nodes |
118
- | `getVariantClass` | Get the CSS class for a variant |
119
- | `defaultImageUpload` | Default image upload implementation |
120
- | `buildBlockAnchor`, `buildRangeAnchor` | Comment anchor utilities |
121
- | `ALL_TRANSFORMERS` | All Markdown transformers (inline + block) |
107
+ | Export | Description |
108
+ | -------------------------------------- | ------------------------------------------------ |
109
+ | `extractTextContent` | Extract plain text from editor state |
110
+ | `collectCommandItems` | Collect slash menu / toolbar command items |
111
+ | `computeImageMeta` | Compute thumbhash and dimensions for an image |
112
+ | `decodeThumbHash` | Decode a thumbhash string to a data URL |
113
+ | `createRendererDecoration` | Create a renderer decoration for decorator nodes |
114
+ | `getVariantClass` | Get the CSS class for a variant |
115
+ | `defaultImageUpload` | Default image upload implementation |
116
+ | `buildBlockAnchor`, `buildRangeAnchor` | Comment anchor utilities |
117
+ | `ALL_TRANSFORMERS` | All Markdown transformers (inline + block) |
122
118
 
123
119
  ### Types
124
120
 
@@ -126,13 +122,13 @@ For read-only rendering, use `@haklex/rich-static-renderer` instead.
126
122
 
127
123
  ### Sub-path Exports
128
124
 
129
- | Import Path | Description |
130
- | --- | --- |
131
- | `@haklex/rich-editor` | Full export (components, nodes, plugins, commands, contexts, types) |
132
- | `@haklex/rich-editor/editor` | Editor-specific entry (RichEditor + node configs) |
133
- | `@haklex/rich-editor/static` | Static/SSR utilities (for renderer and extension packages) |
134
- | `@haklex/rich-editor/styles` | Style variables and variant class exports |
135
- | `@haklex/rich-editor/style.css` | Compiled editor stylesheet |
125
+ | Import Path | Description |
126
+ | ------------------------------- | ------------------------------------------------------------------- |
127
+ | `@haklex/rich-editor` | Full export (components, nodes, plugins, commands, contexts, types) |
128
+ | `@haklex/rich-editor/editor` | Editor-specific entry (RichEditor + node configs) |
129
+ | `@haklex/rich-editor/static` | Static/SSR utilities (for renderer and extension packages) |
130
+ | `@haklex/rich-editor/styles` | Style variables and variant class exports |
131
+ | `@haklex/rich-editor/style.css` | Compiled editor stylesheet |
136
132
 
137
133
  ## Part of Haklex
138
134
 
@@ -12,7 +12,7 @@ import { LinkPlugin } from "@lexical/react/LexicalLinkPlugin";
12
12
  import { ListPlugin } from "@lexical/react/LexicalListPlugin";
13
13
  import { LexicalNestedComposer } from "@lexical/react/LexicalNestedComposer";
14
14
  import { RichTextPlugin } from "@lexical/react/LexicalRichTextPlugin";
15
- import { q as $isAlertQuoteNode, r as AlertRenderer, S as SpoilerNode, M as MentionNode, F as FootnoteNode, k as KaTeXInlineNode, T as TagNode, s as AlertQuoteNode, n as editorTheme } from "./theme-D_efLk4K.js";
15
+ import { s as $isAlertQuoteNode, t as AlertRenderer, S as SpoilerNode, M as MentionNode, F as FootnoteNode, k as KaTeXInlineNode, T as TagNode, v as AlertQuoteNode, n as editorTheme } from "./theme-CrJbATnf.js";
16
16
  import { a as RendererWrapper } from "./KaTeXRenderer-CQyQzNTJ.js";
17
17
  import { CodeNode } from "@lexical/code-core";
18
18
  import { HorizontalRuleNode } from "@lexical/extension";
@@ -1,8 +1,8 @@
1
1
  import { useLexicalComposerContext } from "@lexical/react/LexicalComposerContext";
2
2
  import { createCommand, $insertNodes, COMMAND_PRIORITY_EDITOR } from "lexical";
3
3
  import { useEffect } from "react";
4
- import { $ as $createAlertQuoteEditNode } from "./AlertQuoteEditNode-DRGnNV2H.js";
5
- import { $ as $createImageNode, t as $createKaTeXInlineNode, v as $createKaTeXBlockNode, b as $createMermaidNode } from "./theme-D_efLk4K.js";
4
+ import { $ as $createAlertQuoteEditNode } from "./AlertQuoteEditNode-C_Cb063D.js";
5
+ import { $ as $createImageNode, w as $createKaTeXInlineNode, x as $createKaTeXBlockNode, b as $createMermaidNode } from "./theme-CrJbATnf.js";
6
6
  const INSERT_ALERT_COMMAND = createCommand("INSERT_ALERT");
7
7
  function AlertPlugin() {
8
8
  const [editor] = useLexicalComposerContext();
@@ -9,13 +9,13 @@ import { useLexicalComposerContext } from "@lexical/react/LexicalComposerContext
9
9
  import { useEffect, createContext, use, useRef, useState, useMemo, useCallback } from "react";
10
10
  import { $isQuoteNode, QuoteNode, $createQuoteNode, DRAG_DROP_PASTE } from "@lexical/rich-text";
11
11
  import { KEY_ARROW_RIGHT_COMMAND, $getSelection, $isRangeSelection, COMMAND_PRIORITY_CRITICAL, KEY_ARROW_DOWN_COMMAND, $isDecoratorNode, $isElementNode, $isRootNode, $isParagraphNode, $createParagraphNode, KEY_ENTER_COMMAND, $isNodeSelection, KEY_BACKSPACE_COMMAND, COMMAND_PRIORITY_HIGH, KEY_DELETE_COMMAND, KEY_ARROW_UP_COMMAND, $isTextNode, IS_CODE, $createNodeSelection, $setSelection, $getRoot, COMMAND_PRIORITY_EDITOR, COMMAND_PRIORITY_LOW, $createTextNode, $createLineBreakNode, PASTE_COMMAND, $insertNodes, createEditor, $parseSerializedNode, createState, $getState, $addUpdateTag, $setState, $nodesOfType } from "lexical";
12
- import { b as setCodeBlockCursorIntent, g as getResolvedEditNodes, $ as $createBannerEditNode, d as $createCodeBlockEditNode } from "./node-registry-h1Ccc6gP.js";
12
+ import { b as setCodeBlockCursorIntent, g as getResolvedEditNodes, $ as $createBannerEditNode, d as $createCodeBlockEditNode } from "./node-registry-BOSH1oBi.js";
13
13
  import { HorizontalRuleNode, $createHorizontalRuleNode, INSERT_HORIZONTAL_RULE_COMMAND } from "@lexical/extension";
14
14
  import { HORIZONTAL_RULE_BLOCK_TRANSFORMER as HORIZONTAL_RULE_BLOCK_TRANSFORMER$1, GIT_ALERT_TRANSFORMER as GIT_ALERT_TRANSFORMER$1, COMMENT_TRANSFORMER as COMMENT_TRANSFORMER$1, CONTAINER_TRANSFORMER as CONTAINER_TRANSFORMER$1, FOOTNOTE_TRANSFORMER as FOOTNOTE_TRANSFORMER$1, FOOTNOTE_SECTION_TRANSFORMER as FOOTNOTE_SECTION_TRANSFORMER$1, KATEX_INLINE_TRANSFORMER as KATEX_INLINE_TRANSFORMER$1, KATEX_BLOCK_TRANSFORMER as KATEX_BLOCK_TRANSFORMER$1, MENTION_TRANSFORMER as MENTION_TRANSFORMER$1, RUBY_TRANSFORMER as RUBY_TRANSFORMER$1, SPOILER_TRANSFORMER as SPOILER_TRANSFORMER$1, INSERT_TRANSFORMER, SUPERSCRIPT_TRANSFORMER, SUBSCRIPT_TRANSFORMER, IMAGE_BLOCK_TRANSFORMER, VIDEO_BLOCK_TRANSFORMER, CODE_BLOCK_NODE_TRANSFORMER, LINK_CARD_BLOCK_TRANSFORMER, MERMAID_BLOCK_TRANSFORMER, TABLE_BLOCK_TRANSFORMER } from "@haklex/rich-headless/transformers";
15
15
  import { CHECK_LIST, TRANSFORMERS, QUOTE, CODE, $convertFromMarkdownString } from "@lexical/markdown";
16
- import { $ as $createAlertQuoteEditNode } from "./AlertQuoteEditNode-DRGnNV2H.js";
17
- import { s as AlertQuoteNode, F as FootnoteNode, w as $createFootnoteNode, k as KaTeXInlineNode, K as KaTeXBlockNode, t as $createKaTeXInlineNode, v as $createKaTeXBlockNode, M as MentionNode, a as $createMentionNode, o as extractTextContent, S as SpoilerNode, x as $createSpoilerNode, $ as $createImageNode, O as OPEN_IMAGE_UPLOAD_DIALOG_COMMAND } from "./theme-D_efLk4K.js";
18
- import { v as CodeBlockNode, C as CommentNode, w as $createCommentPlaceholderNode, $ as $createCommentNode, q as BannerNode, D as DetailsNode, x as $createDetailsNode, F as FootnoteSectionNode, f as $isFootnoteSectionNode, a as $createFootnoteSectionNode, g as $isGridContainerNode, R as RubyNode, d as $createRubyNode } from "./config-Bysik8H3.js";
16
+ import { $ as $createAlertQuoteEditNode } from "./AlertQuoteEditNode-C_Cb063D.js";
17
+ import { v as AlertQuoteNode, F as FootnoteNode, y as $createFootnoteNode, k as KaTeXInlineNode, K as KaTeXBlockNode, w as $createKaTeXInlineNode, x as $createKaTeXBlockNode, M as MentionNode, a as $createMentionNode, o as extractTextContent, S as SpoilerNode, q as $createSpoilerNode, $ as $createImageNode, O as OPEN_IMAGE_UPLOAD_DIALOG_COMMAND } from "./theme-CrJbATnf.js";
18
+ import { v as CodeBlockNode, C as CommentNode, w as $createCommentPlaceholderNode, $ as $createCommentNode, q as BannerNode, D as DetailsNode, x as $createDetailsNode, F as FootnoteSectionNode, f as $isFootnoteSectionNode, a as $createFootnoteSectionNode, g as $isGridContainerNode, R as RubyNode, d as $createRubyNode } from "./config-mAejoug-.js";
19
19
  import { $createTableNode, $createTableRowNode, $createTableCellNode, TableCellHeaderStates } from "@lexical/table";
20
20
  import { MarkdownShortcutPlugin } from "@lexical/react/LexicalMarkdownShortcutPlugin";
21
21
  import { nanoid } from "nanoid";
@@ -6,4 +6,5 @@ export { INSERT_MERMAID_COMMAND } from './plugins/MermaidPlugin';
6
6
  export type { CommandItemConfig, CommandPlacement, SlashMenuItemConfig, ToolbarGroup, } from './types/slash-menu';
7
7
  export { collectCommandItems } from './utils/collect-command-items';
8
8
  export { extractTextContent } from './utils/extractTextContent';
9
+ export { $selectionTouchesSpoiler, $toggleSpoilerSelection } from './utils/toggle-spoiler';
9
10
  //# sourceMappingURL=commands-entry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"commands-entry.d.ts","sourceRoot":"","sources":["../src/commands-entry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,gCAAgC,EAAE,MAAM,gCAAgC,CAAC;AAClF,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,0BAA0B,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AAChG,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,YAAY,EACV,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,YAAY,GACb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC"}
1
+ {"version":3,"file":"commands-entry.d.ts","sourceRoot":"","sources":["../src/commands-entry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,gCAAgC,EAAE,MAAM,gCAAgC,CAAC;AAClF,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,0BAA0B,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AAChG,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,YAAY,EACV,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,YAAY,GACb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC"}
@@ -1,5 +1,7 @@
1
- import { a, b, c, d, e } from "./MermaidPlugin-B6ZyzOZs.js";
2
- import { O, o } from "./theme-D_efLk4K.js";
1
+ import { a, b, c, d, e } from "./MermaidPlugin-DI86n71x.js";
2
+ import { q as $createSpoilerNode, r as $isSpoilerNode } from "./theme-CrJbATnf.js";
3
+ import { O, o } from "./theme-CrJbATnf.js";
4
+ import { $getSelection, $isRangeSelection, $createTextNode } from "lexical";
3
5
  function collectCommandItems(editor) {
4
6
  const items = [];
5
7
  const nodes = editor._nodes;
@@ -13,7 +15,66 @@ function collectCommandItems(editor) {
13
15
  }
14
16
  return items;
15
17
  }
18
+ function findSpoilerAncestor(node) {
19
+ let current = node;
20
+ while (current) {
21
+ if ($isSpoilerNode(current)) {
22
+ return current;
23
+ }
24
+ current = current.getParent();
25
+ }
26
+ return null;
27
+ }
28
+ function getSpoilerNodesInSelection(nodes) {
29
+ const spoilers = /* @__PURE__ */ new Map();
30
+ for (const node of nodes) {
31
+ const spoiler = findSpoilerAncestor(node);
32
+ if (spoiler) {
33
+ spoilers.set(spoiler.getKey(), spoiler);
34
+ }
35
+ }
36
+ return Array.from(spoilers.values());
37
+ }
38
+ function $selectionTouchesSpoiler(selection) {
39
+ return getSpoilerNodesInSelection(selection.getNodes()).length > 0;
40
+ }
41
+ function unwrapSpoiler(spoiler) {
42
+ const children = spoiler.getChildren();
43
+ for (const child of children) {
44
+ spoiler.insertBefore(child);
45
+ }
46
+ spoiler.remove();
47
+ }
48
+ function $toggleSpoilerSelection() {
49
+ const selection = $getSelection();
50
+ if (!$isRangeSelection(selection)) return;
51
+ if (selection.isCollapsed()) {
52
+ const spoiler2 = findSpoilerAncestor(selection.anchor.getNode());
53
+ if (spoiler2) {
54
+ unwrapSpoiler(spoiler2);
55
+ }
56
+ return;
57
+ }
58
+ const spoilerNodes = getSpoilerNodesInSelection(selection.getNodes());
59
+ if (spoilerNodes.length > 0) {
60
+ for (const spoiler2 of spoilerNodes) {
61
+ unwrapSpoiler(spoiler2);
62
+ }
63
+ return;
64
+ }
65
+ const text = selection.getTextContent();
66
+ if (!text.trim()) return;
67
+ selection.removeText();
68
+ const spoiler = $createSpoilerNode();
69
+ spoiler.append($createTextNode(text));
70
+ const freshSelection = $getSelection();
71
+ if ($isRangeSelection(freshSelection)) {
72
+ freshSelection.insertNodes([spoiler]);
73
+ }
74
+ }
16
75
  export {
76
+ $selectionTouchesSpoiler,
77
+ $toggleSpoilerSelection,
17
78
  a as INSERT_ALERT_COMMAND,
18
79
  b as INSERT_IMAGE_COMMAND,
19
80
  c as INSERT_KATEX_BLOCK_COMMAND,
@@ -7,7 +7,7 @@ import { LinkNode, AutoLinkNode } from "@lexical/link";
7
7
  import { ListNode, ListItemNode } from "@lexical/list";
8
8
  import { HeadingNode, QuoteNode } from "@lexical/rich-text";
9
9
  import { TableNode, TableCellNode, TableRowNode } from "@lexical/table";
10
- import { u as useNestedContentRenderer, o as extractTextContent, S as SpoilerNode, M as MentionNode, k as KaTeXInlineNode, K as KaTeXBlockNode, I as ImageNode, s as AlertQuoteNode, F as FootnoteNode, l as MermaidNode, T as TagNode } from "./theme-D_efLk4K.js";
10
+ import { u as useNestedContentRenderer, o as extractTextContent, S as SpoilerNode, M as MentionNode, k as KaTeXInlineNode, K as KaTeXBlockNode, I as ImageNode, v as AlertQuoteNode, F as FootnoteNode, l as MermaidNode, T as TagNode } from "./theme-CrJbATnf.js";
11
11
  import { DecoratorNode, $insertNodes, TextNode, ElementNode, $createTextNode } from "lexical";
12
12
  import { createElement, createContext, use, useState, useRef, useEffect, useCallback } from "react";
13
13
  import { jsx, jsxs } from "react/jsx-runtime";
package/dist/index.mjs CHANGED
@@ -1,19 +1,19 @@
1
- import { F as FootnotePlugin, O as OnChangePlugin, S as SubmitShortcutPlugin, E as EditorRefPlugin, a as AutoFocusPlugin, d as ImageUploadProvider, g as defaultImageUpload, C as CorePlugins, I as ImageUploadPlugin, L as LinkFaviconPlugin, c as BlockIdPlugin, f as blockIdState } from "./SubmitShortcutPlugin-BzLMsEes.js";
1
+ import { F as FootnotePlugin, O as OnChangePlugin, S as SubmitShortcutPlugin, E as EditorRefPlugin, a as AutoFocusPlugin, d as ImageUploadProvider, g as defaultImageUpload, C as CorePlugins, I as ImageUploadPlugin, L as LinkFaviconPlugin, c as BlockIdPlugin, f as blockIdState } from "./SubmitShortcutPlugin-h9dt9WrS.js";
2
2
  import { L, P, u } from "./PresentDialogContext-B4E78UB5.js";
3
3
  import { jsx, jsxs } from "react/jsx-runtime";
4
- import { s as setResolvedEditNodes, a as allEditNodes } from "./node-registry-h1Ccc6gP.js";
5
- import { I as ImagePlugin, K as KaTeXPlugin, A as AlertPlugin, M as MermaidPlugin } from "./MermaidPlugin-B6ZyzOZs.js";
4
+ import { s as setResolvedEditNodes, a as allEditNodes } from "./node-registry-BOSH1oBi.js";
5
+ import { I as ImagePlugin, K as KaTeXPlugin, A as AlertPlugin, M as MermaidPlugin } from "./MermaidPlugin-DI86n71x.js";
6
6
  import { PortalThemeProvider } from "@haklex/rich-style-token";
7
7
  import { LexicalComposer } from "@lexical/react/LexicalComposer";
8
8
  import { LexicalErrorBoundary } from "@lexical/react/LexicalErrorBoundary";
9
9
  import { HistoryPlugin } from "@lexical/react/LexicalHistoryPlugin";
10
10
  import { RichTextPlugin } from "@lexical/react/LexicalRichTextPlugin";
11
- import { n as ColorSchemeProvider } from "./config-Bysik8H3.js";
12
- import { u as u2 } from "./config-Bysik8H3.js";
11
+ import { n as ColorSchemeProvider } from "./config-mAejoug-.js";
12
+ import { u as u2 } from "./config-mAejoug-.js";
13
13
  import { R as RendererConfigProvider } from "./KaTeXRenderer-CQyQzNTJ.js";
14
14
  import { F, u as u3, b, d, e, f, g } from "./KaTeXRenderer-CQyQzNTJ.js";
15
- import { n as editorTheme } from "./theme-D_efLk4K.js";
16
- import { N, u as u4, p } from "./theme-D_efLk4K.js";
15
+ import { n as editorTheme } from "./theme-CrJbATnf.js";
16
+ import { N, u as u4, p } from "./theme-CrJbATnf.js";
17
17
  import { ContentEditable as ContentEditable$1 } from "@lexical/react/LexicalContentEditable";
18
18
  import { e as clsx, g as getVariantClass } from "./katex.css-Csc-7N7u.js";
19
19
  import { a, c, k, b as b2, n, r, s, d as d2 } from "./katex.css-Csc-7N7u.js";
@@ -1,8 +1,8 @@
1
1
  var __defProp = Object.defineProperty;
2
2
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
3
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
4
- import { o as $isBannerNode, p as BannerRenderer, q as BannerNode, r as normalizeBannerType, s as $isCodeBlockNode, t as CodeBlockRenderer, v as CodeBlockNode, F as FootnoteSectionNode, g as $isGridContainerNode, G as GridContainerNode, l as builtinNodes, V as VideoNode, L as LinkCardNode, C as CommentNode, D as DetailsNode, R as RubyNode } from "./config-Bysik8H3.js";
5
- import { N as NESTED_EDITOR_NODES, A as AlertQuoteEditNode } from "./AlertQuoteEditNode-DRGnNV2H.js";
4
+ import { o as $isBannerNode, p as BannerRenderer, q as BannerNode, r as normalizeBannerType, s as $isCodeBlockNode, t as CodeBlockRenderer, v as CodeBlockNode, F as FootnoteSectionNode, g as $isGridContainerNode, G as GridContainerNode, l as builtinNodes, V as VideoNode, L as LinkCardNode, C as CommentNode, D as DetailsNode, R as RubyNode } from "./config-mAejoug-.js";
5
+ import { N as NESTED_EDITOR_NODES, A as AlertQuoteEditNode } from "./AlertQuoteEditNode-C_Cb063D.js";
6
6
  import { $getNodeByKey, $insertNodes, createEditor, $getSelection, $isNodeSelection, $isElementNode, $isDecoratorNode, $createNodeSelection, $setSelection, $createParagraphNode, $nodesOfType, $getRoot } from "lexical";
7
7
  import { Flag, LayoutGrid, Plus, Minus } from "lucide-react";
8
8
  import { useCallback, createElement, useState, useEffect } from "react";
@@ -15,7 +15,7 @@ import { ListPlugin } from "@lexical/react/LexicalListPlugin";
15
15
  import { LexicalNestedComposer } from "@lexical/react/LexicalNestedComposer";
16
16
  import { RichTextPlugin } from "@lexical/react/LexicalRichTextPlugin";
17
17
  import { a as RendererWrapper, b as useFootnoteDefinitions } from "./KaTeXRenderer-CQyQzNTJ.js";
18
- import { n as editorTheme, S as SpoilerNode, M as MentionNode, k as KaTeXInlineNode, K as KaTeXBlockNode, I as ImageNode, F as FootnoteNode, l as MermaidNode, T as TagNode } from "./theme-D_efLk4K.js";
18
+ import { n as editorTheme, S as SpoilerNode, M as MentionNode, k as KaTeXInlineNode, K as KaTeXBlockNode, I as ImageNode, F as FootnoteNode, l as MermaidNode, T as TagNode } from "./theme-CrJbATnf.js";
19
19
  import { useLexicalNodeSelection } from "@lexical/react/useLexicalNodeSelection";
20
20
  import { e as clsx, d as sharedStyles, s as semanticClassNames } from "./katex.css-Csc-7N7u.js";
21
21
  import { b as gridStyles, g as gridClassNames } from "./grid.css-Md5-Cfx_.js";
@@ -1,7 +1,7 @@
1
- import { $, a, b, c, d, e, f, g, h, i, B, j, C, F, G, L, R, k, l, m } from "./config-Bysik8H3.js";
2
- import { F as F2, a as a2, c as c2, g as g2, s } from "./node-registry-h1Ccc6gP.js";
3
- import { N } from "./AlertQuoteEditNode-DRGnNV2H.js";
4
- import { $ as $2, a as a3, b as b2, c as c3, d as d2, e as e2, f as f2, g as g3, h as h2, i as i2, A, j as j2, I, K, k as k2, M, l as l2, T } from "./theme-D_efLk4K.js";
1
+ import { $, a, b, c, d, e, f, g, h, i, B, j, C, F, G, L, R, k, l, m } from "./config-mAejoug-.js";
2
+ import { F as F2, a as a2, c as c2, g as g2, s } from "./node-registry-BOSH1oBi.js";
3
+ import { N } from "./AlertQuoteEditNode-C_Cb063D.js";
4
+ import { $ as $2, a as a3, b as b2, c as c3, d as d2, e as e2, f as f2, g as g3, h as h2, i as i2, A, j as j2, I, K, k as k2, M, l as l2, T } from "./theme-CrJbATnf.js";
5
5
  export {
6
6
  $ as $createCommentNode,
7
7
  a as $createFootnoteSectionNode,
@@ -1,5 +1,5 @@
1
- import { A, a, b, B, c, C, E, F, H, I, d, L, M, e, O, S, f, g, u } from "./SubmitShortcutPlugin-BzLMsEes.js";
2
- import { A as A2, I as I2, K, M as M2 } from "./MermaidPlugin-B6ZyzOZs.js";
1
+ import { A, a, b, B, c, C, E, F, H, I, d, L, M, e, O, S, f, g, u } from "./SubmitShortcutPlugin-h9dt9WrS.js";
2
+ import { A as A2, I as I2, K, M as M2 } from "./MermaidPlugin-DI86n71x.js";
3
3
  export {
4
4
  A as ALL_TRANSFORMERS,
5
5
  A2 as AlertPlugin,
@@ -1 +1 @@
1
- :root{--rc-text: #000;--rc-text-secondary: #27272a;--rc-text-tertiary: #71717a;--rc-text-quaternary: #a1a1aa;--rc-bg: #ffffff;--rc-bg-secondary: #fafafa;--rc-bg-tertiary: #f4f4f5;--rc-fill: #e8e8ec;--rc-fill-secondary: #eeeeef;--rc-fill-tertiary: #f4f4f6;--rc-fill-quaternary: #f9f9fa;--rc-border: #f4f4f5;--rc-accent: #2563eb;--rc-accent-light: #2563eb20;--rc-link: #2563eb;--rc-code-text: #3f3f46;--rc-code-bg: #f4f4f5;--rc-hr-border: #e4e4e7;--rc-quote-border: #2563eb;--rc-quote-bg: #eff6ff;--rc-alert-info: #006bb7;--rc-alert-warning: #cc5500;--rc-alert-tip: #11cc00;--rc-alert-caution: #cc0011;--rc-alert-important: #5500cc;--rc-max-width: 700px;--rc-shadow-top-bar: 0 8px 30px rgba(0, 0, 0, .12), 0 2px 8px rgba(0, 0, 0, .06);--rc-shadow-modal: 0 10px 15px -3px rgba(0,0,0,.1), 0 4px 6px -4px rgba(0,0,0,.1);--rc-shadow-menu: 0 1px 4px rgba(0,0,0,.04), 0 4px 16px rgba(0,0,0,.08);--rc-space-xs: 4px;--rc-space-sm: 8px;--rc-space-md: 16px;--rc-space-lg: 24px;--rc-space-xl: 32px;--rc-font-family-sans: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif: "Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-mono: "SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs: .625em;--rc-font-size-xs: .75em;--rc-font-size-sm: .8125em;--rc-font-size-md: .875em;--rc-font-size-lg: 1.25em;--rc-font-size-base: 16px;--rc-font-size-small: 14px;--rc-line-height: 1.7;--rc-line-height-tight: 1.4;--rc-font-family: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-radius-sm: 4px;--rc-radius-md: 8px;--rc-radius-lg: 12px}:root.dark{--rc-text: #fafafa;--rc-text-secondary: #a1a1aa;--rc-text-tertiary: #71717a;--rc-text-quaternary: #52525b;--rc-bg: #09090b;--rc-bg-secondary: #18181b;--rc-bg-tertiary: #27272a;--rc-fill: #2a2a2f;--rc-fill-secondary: #222226;--rc-fill-tertiary: #1b1b1f;--rc-fill-quaternary: #131316;--rc-border: #27272a;--rc-accent: #60a5fa;--rc-accent-light: #60a5fa20;--rc-link: #60a5fa;--rc-code-text: #e4e4e7;--rc-code-bg: #27272a;--rc-hr-border: #27272a;--rc-quote-border: #60a5fa;--rc-quote-bg: #1e3a5f;--rc-alert-info: #7db9e5;--rc-alert-warning: #da864a;--rc-alert-tip: #54da48;--rc-alert-caution: #e16973;--rc-alert-important: #9966e0;--rc-max-width: 700px;--rc-shadow-top-bar: 0 8px 30px rgba(0, 0, 0, .45), 0 2px 8px rgba(0, 0, 0, .3);--rc-shadow-modal: 0 10px 15px -3px rgba(0,0,0,.4), 0 4px 6px -4px rgba(0,0,0,.35);--rc-shadow-menu: 0 1px 4px rgba(0,0,0,.25), 0 4px 16px rgba(0,0,0,.4);--rc-space-xs: 4px;--rc-space-sm: 8px;--rc-space-md: 16px;--rc-space-lg: 24px;--rc-space-xl: 32px;--rc-font-family-sans: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif: "Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-mono: "SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs: .625em;--rc-font-size-xs: .75em;--rc-font-size-sm: .8125em;--rc-font-size-md: .875em;--rc-font-size-lg: 1.25em;--rc-font-size-base: 16px;--rc-font-size-small: 14px;--rc-line-height: 1.7;--rc-line-height-tight: 1.4;--rc-font-family: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-radius-sm: 4px;--rc-radius-md: 8px;--rc-radius-lg: 12px}._13h71jk0{--rc-text: #000;--rc-text-secondary: #27272a;--rc-text-tertiary: #71717a;--rc-text-quaternary: #a1a1aa;--rc-bg: #ffffff;--rc-bg-secondary: #fafafa;--rc-bg-tertiary: #f4f4f5;--rc-fill: #e8e8ec;--rc-fill-secondary: #eeeeef;--rc-fill-tertiary: #f4f4f6;--rc-fill-quaternary: #f9f9fa;--rc-border: #f4f4f5;--rc-accent: #2563eb;--rc-accent-light: #2563eb20;--rc-link: #2563eb;--rc-code-text: #3f3f46;--rc-code-bg: #f4f4f5;--rc-hr-border: #e4e4e7;--rc-quote-border: #2563eb;--rc-quote-bg: #eff6ff;--rc-alert-info: #006bb7;--rc-alert-warning: #cc5500;--rc-alert-tip: #11cc00;--rc-alert-caution: #cc0011;--rc-alert-important: #5500cc;--rc-max-width: 700px;--rc-shadow-top-bar: 0 8px 30px rgba(0, 0, 0, .12), 0 2px 8px rgba(0, 0, 0, .06);--rc-shadow-modal: 0 10px 15px -3px rgba(0,0,0,.1), 0 4px 6px -4px rgba(0,0,0,.1);--rc-shadow-menu: 0 1px 4px rgba(0,0,0,.04), 0 4px 16px rgba(0,0,0,.08);--rc-space-xs: 4px;--rc-space-sm: 8px;--rc-space-md: 16px;--rc-space-lg: 24px;--rc-space-xl: 32px;--rc-font-family-sans: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif: "Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-mono: "SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs: .625em;--rc-font-size-xs: .75em;--rc-font-size-sm: .8125em;--rc-font-size-md: .875em;--rc-font-size-lg: 1.25em;--rc-font-size-base: 16px;--rc-font-size-small: 14px;--rc-line-height: 1.7;--rc-line-height-tight: 1.4;--rc-font-family: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-radius-sm: 4px;--rc-radius-md: 8px;--rc-radius-lg: 12px}._13h71jk1{--rc-text: #000;--rc-text-secondary: #27272a;--rc-text-tertiary: #71717a;--rc-text-quaternary: #a1a1aa;--rc-bg: #ffffff;--rc-bg-secondary: #fafafa;--rc-bg-tertiary: #f4f4f5;--rc-fill: #e8e8ec;--rc-fill-secondary: #eeeeef;--rc-fill-tertiary: #f4f4f6;--rc-fill-quaternary: #f9f9fa;--rc-border: #f4f4f5;--rc-accent: #2563eb;--rc-accent-light: #2563eb20;--rc-link: #2563eb;--rc-code-text: #3f3f46;--rc-code-bg: #f4f4f5;--rc-hr-border: #e4e4e7;--rc-quote-border: #2563eb;--rc-quote-bg: #eff6ff;--rc-alert-info: #006bb7;--rc-alert-warning: #cc5500;--rc-alert-tip: #11cc00;--rc-alert-caution: #cc0011;--rc-alert-important: #5500cc;--rc-max-width: 700px;--rc-shadow-top-bar: 0 8px 30px rgba(0, 0, 0, .12), 0 2px 8px rgba(0, 0, 0, .06);--rc-shadow-modal: 0 10px 15px -3px rgba(0,0,0,.1), 0 4px 6px -4px rgba(0,0,0,.1);--rc-shadow-menu: 0 1px 4px rgba(0,0,0,.04), 0 4px 16px rgba(0,0,0,.08);--rc-space-xs: 4px;--rc-space-sm: 8px;--rc-space-md: 16px;--rc-space-lg: 24px;--rc-space-xl: 32px;--rc-font-family-sans: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif: "Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-mono: "SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs: .625em;--rc-font-size-xs: .75em;--rc-font-size-sm: .8125em;--rc-font-size-md: .875em;--rc-font-size-lg: 1.25em;--rc-font-size-base: 16px;--rc-font-size-small: 14px;--rc-line-height: 1.8;--rc-line-height-tight: 1.4;--rc-font-family: "Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-radius-sm: 4px;--rc-radius-md: 8px;--rc-radius-lg: 12px}._13h71jk2{--rc-text: #000;--rc-text-secondary: #27272a;--rc-text-tertiary: #71717a;--rc-text-quaternary: #a1a1aa;--rc-bg: #ffffff;--rc-bg-secondary: #fafafa;--rc-bg-tertiary: #f4f4f5;--rc-fill: #e8e8ec;--rc-fill-secondary: #eeeeef;--rc-fill-tertiary: #f4f4f6;--rc-fill-quaternary: #f9f9fa;--rc-border: #f4f4f5;--rc-accent: #2563eb;--rc-accent-light: #2563eb20;--rc-link: #2563eb;--rc-code-text: #3f3f46;--rc-code-bg: #f4f4f5;--rc-hr-border: #e4e4e7;--rc-quote-border: #a1a1aa;--rc-quote-bg: #fafafa;--rc-alert-info: #006bb7;--rc-alert-warning: #cc5500;--rc-alert-tip: #11cc00;--rc-alert-caution: #cc0011;--rc-alert-important: #5500cc;--rc-max-width: none;--rc-shadow-top-bar: 0 8px 30px rgba(0, 0, 0, .12), 0 2px 8px rgba(0, 0, 0, .06);--rc-shadow-modal: 0 10px 15px -3px rgba(0,0,0,.1), 0 4px 6px -4px rgba(0,0,0,.1);--rc-shadow-menu: 0 1px 4px rgba(0,0,0,.04), 0 4px 16px rgba(0,0,0,.08);--rc-space-xs: 2px;--rc-space-sm: 4px;--rc-space-md: 10px;--rc-space-lg: 16px;--rc-space-xl: 20px;--rc-font-family-sans: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif: "Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-mono: "SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs: .625em;--rc-font-size-xs: .75em;--rc-font-size-sm: .8125em;--rc-font-size-md: .875em;--rc-font-size-lg: 1.25em;--rc-font-size-base: 14px;--rc-font-size-small: 12px;--rc-line-height: 1.5;--rc-line-height-tight: 1.3;--rc-font-family: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-radius-sm: 3px;--rc-radius-md: 6px;--rc-radius-lg: 12px}.dark ._13h71jk0,[data-theme=dark] ._13h71jk0,.dark._13h71jk0,[data-theme=dark]._13h71jk0,.dark ._13h71jk1,[data-theme=dark] ._13h71jk1,.dark._13h71jk1,[data-theme=dark]._13h71jk1,.dark ._13h71jk2,[data-theme=dark] ._13h71jk2,.dark._13h71jk2,[data-theme=dark]._13h71jk2{--rc-text: #fafafa;--rc-text-secondary: #a1a1aa;--rc-text-tertiary: #71717a;--rc-text-quaternary: #52525b;--rc-bg: #09090b;--rc-bg-secondary: #18181b;--rc-bg-tertiary: #27272a;--rc-fill: #2a2a2f;--rc-fill-secondary: #222226;--rc-fill-tertiary: #1b1b1f;--rc-fill-quaternary: #131316;--rc-border: #27272a;--rc-accent: #60a5fa;--rc-accent-light: #60a5fa20;--rc-link: #60a5fa;--rc-code-text: #e4e4e7;--rc-code-bg: #27272a;--rc-hr-border: #27272a;--rc-quote-border: #60a5fa;--rc-quote-bg: #1e3a5f;--rc-alert-info: #7db9e5;--rc-alert-warning: #da864a;--rc-alert-tip: #54da48;--rc-alert-caution: #e16973;--rc-alert-important: #9966e0;--rc-shadow-top-bar: 0 8px 30px rgba(0, 0, 0, .45), 0 2px 8px rgba(0, 0, 0, .3);--rc-shadow-modal: 0 10px 15px -3px rgba(0,0,0,.4), 0 4px 6px -4px rgba(0,0,0,.35);--rc-shadow-menu: 0 1px 4px rgba(0,0,0,.25), 0 4px 16px rgba(0,0,0,.4)}@keyframes r8uj4t0{to{--rc-hl-highlighted: 1}}@keyframes r8uj4t1{0%{background-color:#ef44443d}to{background-color:transparent}}.r8uj4t2{font-family:var(--rc-font-family);font-size:var(--rc-font-size-base);line-height:var(--rc-line-height);color:var(--rc-text);word-wrap:break-word;overflow-wrap:break-word}.r8uj4t3{margin:0 0 1em;line-height:var(--rc-line-height)}.r8uj4t4{font-weight:700}.r8uj4t5{font-style:italic}.r8uj4t6{text-decoration:underline}.r8uj4t7{text-decoration:line-through;opacity:.65}.r8uj4t8{vertical-align:super;font-size:.8em}.r8uj4t9{vertical-align:sub;font-size:.8em}.r8uj4ta{font-family:var(--rc-font-mono);font-size:.9em;background-color:var(--rc-code-bg);color:var(--rc-code-text);padding:2px 6px;border-radius:var(--rc-radius-sm);border:1px solid var(--rc-border)}[contenteditable=true] .r8uj4ta{padding-right:0}.r8uj4tb{--rc-hl-lightness: .3;--rc-hl-highlighted: 1;--rc-hl-color: oklch(from var(--rc-accent) l c h / var(--rc-hl-lightness));background:linear-gradient(120deg,var(--rc-hl-color, lightblue) 50%,transparent 50%) 110% 0 / 200% 100% no-repeat;background-position:calc((1 - var(--rc-hl-highlighted)) * 110%) 0;color:var(--rc-text);transition:background-position 1s}[contenteditable=true] .r8uj4tb{--rc-hl-highlighted: 1;animation:none}[data-theme=dark] .r8uj4tb{--rc-hl-lightness: .35}.r8uj4tc{position:absolute;left:-1.25rem;top:0;bottom:0;display:flex;align-items:center;text-decoration:none;color:var(--rc-text-secondary);opacity:0;transition:opacity .15s ease;font-size:.8rem}.r8uj4td{position:relative;font-size:2em;font-weight:700;line-height:var(--rc-line-height-tight);margin-top:1.5em;margin-bottom:.5em}[contenteditable=true] .r8uj4td:before{content:"H1";position:absolute;left:-1.5rem;bottom:.5rem;display:flex;font-size:.5rem;font-weight:600;color:var(--rc-text-secondary);opacity:.6;pointer-events:none;font-family:var(--rc-font-mono)}.r8uj4te{position:relative;font-size:1.5em;font-weight:700;line-height:var(--rc-line-height-tight);margin-top:1.4em;margin-bottom:.45em}[contenteditable=true] .r8uj4te:before{content:"H2";position:absolute;left:-1.5rem;bottom:.5rem;display:flex;font-size:.5rem;font-weight:600;color:var(--rc-text-secondary);opacity:.6;pointer-events:none;font-family:var(--rc-font-mono)}.r8uj4tf{position:relative;font-size:1.25em;font-weight:600;line-height:var(--rc-line-height-tight);margin-top:1.3em;margin-bottom:.4em}[contenteditable=true] .r8uj4tf:before{content:"H3";position:absolute;left:-1.5rem;bottom:.5rem;display:flex;font-size:.5rem;font-weight:600;color:var(--rc-text-secondary);opacity:.6;pointer-events:none;font-family:var(--rc-font-mono)}.r8uj4tg{position:relative;font-size:1.125em;font-weight:600;line-height:var(--rc-line-height-tight);margin-top:1.2em;margin-bottom:.35em}[contenteditable=true] .r8uj4tg:before{content:"H4";position:absolute;left:-1.5rem;bottom:.5rem;display:flex;font-size:.5rem;font-weight:600;color:var(--rc-text-secondary);opacity:.6;pointer-events:none;font-family:var(--rc-font-mono)}.r8uj4th{position:relative;font-size:1em;font-weight:600;line-height:var(--rc-line-height-tight);margin-top:1.1em;margin-bottom:.3em}[contenteditable=true] .r8uj4th:before{content:"H5";position:absolute;left:-1.5rem;bottom:.5rem;display:flex;font-size:.5rem;font-weight:600;color:var(--rc-text-secondary);opacity:.6;pointer-events:none;font-family:var(--rc-font-mono)}.r8uj4ti{position:relative;font-size:.875em;font-weight:600;line-height:var(--rc-line-height-tight);margin-top:1em;margin-bottom:.25em;color:var(--rc-text)}[contenteditable=true] .r8uj4ti:before{content:"H6";position:absolute;left:-1.5rem;bottom:.5rem;display:flex;font-size:.5rem;font-weight:600;color:var(--rc-text-secondary);opacity:.6;pointer-events:none;font-family:var(--rc-font-mono)}.r8uj4tj{color:var(--rc-link);text-decoration:none;transition:color .2s ease}.r8uj4tj:hover{text-decoration:underline}.r8uj4tj[data-favicon=loaded]:before{content:"";display:inline-block;width:1em;height:1em;margin-right:.2em;vertical-align:-.125em;background-image:var(--rc-link-favicon);background-size:contain;background-repeat:no-repeat;background-position:center;border-radius:2px}.r8uj4tk{display:inline-flex;align-items:center;margin-right:.15em;vertical-align:-.125em}.r8uj4tl{list-style-type:decimal;padding-left:var(--rc-space-lg);margin-bottom:1em}.r8uj4tm{list-style-type:disc;padding-left:var(--rc-space-lg);margin-bottom:1em}.r8uj4tn{margin-bottom:.25em}.r8uj4to{list-style-type:none}.r8uj4tp{list-style-type:none;padding-left:0}.r8uj4tq{--rc-cb-size: 1.125rem;position:relative;padding-left:2em;list-style-type:none;outline:none;transition:color .25s ease}.r8uj4tq:before{content:"";position:absolute;left:0;top:calc((1lh - var(--rc-cb-size)) / 2);width:var(--rc-cb-size);height:var(--rc-cb-size);border:1.5px solid var(--rc-text-quaternary);border-radius:var(--rc-radius-sm);box-sizing:border-box;cursor:pointer;background-color:transparent;transition:background-color .25s cubic-bezier(.4,0,.2,1),border-color .25s cubic-bezier(.4,0,.2,1),transform .15s ease}.r8uj4tq:after{content:"";position:absolute;left:calc(var(--rc-cb-size) * .32);top:calc((1lh - var(--rc-cb-size)) / 2 + var(--rc-cb-size) * .14);width:calc(var(--rc-cb-size) * .28);height:calc(var(--rc-cb-size) * .55);border-right:2px solid var(--rc-accent);border-bottom:2px solid var(--rc-accent);box-sizing:border-box;display:block;pointer-events:none;transform:rotate(45deg) scale(0);transform-origin:center;opacity:0;transition:transform .3s cubic-bezier(.34,1.56,.64,1) .1s,opacity .15s ease}[contenteditable=true] .r8uj4tq:active:before{transform:scale(.94)}[contenteditable=true] .r8uj4tq:hover:before{border-color:var(--rc-text-tertiary)}.r8uj4tr{--rc-cb-size: 1.125rem;position:relative;padding-left:2em;list-style-type:none;outline:none;transition:color .25s ease;color:var(--rc-text-secondary)}.r8uj4tr:before{content:"";position:absolute;left:0;top:calc((1lh - var(--rc-cb-size)) / 2);width:var(--rc-cb-size);height:var(--rc-cb-size);border:1.5px solid var(--rc-text-quaternary);border-radius:var(--rc-radius-sm);box-sizing:border-box;cursor:pointer;background-color:var(--rc-accent-light);transition:background-color .25s cubic-bezier(.4,0,.2,1),border-color .25s cubic-bezier(.4,0,.2,1),transform .15s ease;border-color:var(--rc-accent)}.r8uj4tr:after{content:"";position:absolute;left:calc(var(--rc-cb-size) * .32);top:calc((1lh - var(--rc-cb-size)) / 2 + var(--rc-cb-size) * .14);width:calc(var(--rc-cb-size) * .28);height:calc(var(--rc-cb-size) * .55);border-right:2px solid var(--rc-accent);border-bottom:2px solid var(--rc-accent);box-sizing:border-box;display:block;pointer-events:none;transform:rotate(45deg) scale(1);transform-origin:center;opacity:1;transition:transform .3s cubic-bezier(.34,1.56,.64,1) .1s,opacity .15s ease}[contenteditable=true] .r8uj4tr:active:before{transform:scale(.94)}[contenteditable=true] .r8uj4tr:hover:before{background-color:color-mix(in oklab,var(--rc-accent) 12%,transparent)}.r8uj4ts{position:relative;background-color:var(--rc-quote-bg);margin:var(--rc-space-md) 0;padding:var(--rc-space-sm) var(--rc-space-md);padding-left:calc(var(--rc-space-md) + 4px);font-style:italic;color:var(--rc-text-secondary);border-radius:0 var(--rc-radius-sm) var(--rc-radius-sm) 0}.r8uj4ts:before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;border-radius:var(--rc-radius-sm);background-color:var(--rc-quote-border)}.r8uj4tt{border:none;border-top:1px solid var(--rc-hr-border);margin:var(--rc-space-lg) auto;width:60px}.r8uj4tu{overflow-x:auto}.r8uj4tv{border:none;border-bottom:1px solid var(--rc-border);border-right:1px solid var(--rc-border);padding:1.25em var(--rc-space-lg);text-align:left;vertical-align:middle;line-height:1.5}.r8uj4tv:last-child{border-right:none}.r8uj4tw{border:none;border-bottom:1px solid var(--rc-border);border-right:1px solid var(--rc-border);padding:var(--rc-space-md) var(--rc-space-lg);text-align:left;font-weight:600;font-size:.75em;text-transform:uppercase;letter-spacing:.05em;color:var(--rc-text-secondary);background-color:var(--rc-bg-secondary);vertical-align:middle;line-height:1.5;position:sticky;top:0;z-index:1}.r8uj4tw:last-child{border-right:none}.r8uj4tx{width:100%;border-collapse:separate;border-spacing:0;margin:var(--rc-space-lg) 0;font-size:var(--rc-font-size-small);border:1px solid var(--rc-border);border-radius:var(--rc-radius-md);overflow:hidden}.r8uj4ty{background-color:var(--rc-text);color:transparent;border-radius:var(--rc-radius-sm);padding-inline:4px;cursor:pointer;transition:background-color .3s ease,color .3s ease;user-select:none}[contenteditable=true] .r8uj4ty{background-color:color-mix(in srgb,var(--rc-text) 30%,transparent);color:inherit;user-select:auto;cursor:text}.r8uj4ty:hover,.r8uj4tz{background-color:transparent;color:inherit;user-select:auto}.r8uj4t10{display:inline-block;border-radius:999px;padding-inline:.75em;font-size:var(--rc-font-size-small);line-height:1.6;vertical-align:baseline}.r8uj4t11{display:inline-block;font-family:var(--rc-font-mono);font-size:var(--rc-font-size-small);color:var(--rc-text-secondary);background-color:var(--rc-code-bg);border:1px dashed var(--rc-border);border-radius:var(--rc-radius-sm);padding:2px 6px;white-space:break-spaces}.r8uj4t11:before{content:"<!--";opacity:.7}.r8uj4t11:after{content:"-->";opacity:.7}.r8uj4t12{ruby-position:over;ruby-align:center}[contenteditable=true] .r8uj4t12[data-ruby]{position:relative;display:inline-block;padding-top:.72em;line-height:1.2}[contenteditable=true] .r8uj4t12[data-ruby]:before{content:attr(data-ruby);position:absolute;left:0;right:0;top:0;transform:translateY(-.68em);font-size:.58em;line-height:1;text-align:center;color:var(--rc-text-secondary);pointer-events:none;white-space:nowrap}.r8uj4t13{font-size:.58em;line-height:1;color:var(--rc-text-secondary);user-select:none}.r8uj4t14{vertical-align:super;font-size:.8em}.r8uj4t15{display:inline-flex;align-items:center;justify-content:center;min-width:1.5em;text-decoration:none;color:var(--rc-accent);background-color:var(--rc-accent-light);border-radius:999px;padding:0 .35em;line-height:1.45;font-weight:600;font-size:.82em;transition:filter .15s ease}.r8uj4t15:hover{filter:brightness(.96)}.r8uj4t16{animation:r8uj4t1 1.2s ease-out}.r8uj4t17{position:relative;display:inline}.r8uj4t18{margin-top:var(--rc-space-lg)}.r8uj4t19{border:none;border-top:1px solid var(--rc-border);margin:var(--rc-space-lg) 0 var(--rc-space-md)}.r8uj4t1a{list-style-type:decimal;padding-left:var(--rc-space-lg);font-size:var(--rc-font-size-small);color:var(--rc-text-secondary);line-height:1.6}.r8uj4t1b{margin-bottom:var(--rc-space-sm);padding-left:var(--rc-space-xs)}.r8uj4t1c{display:inline-flex;align-items:center;margin-left:var(--rc-space-xs);color:var(--rc-accent);text-decoration:none;font-size:.85em;transition:opacity .15s ease;font-family:var(--rc-font-mono)}.r8uj4t1c:hover{opacity:.7}.r8uj4t1d{display:flex;align-items:center;gap:var(--rc-space-sm);list-style-type:none}.r8uj4t1e{flex-shrink:0;color:var(--rc-text-secondary);font-size:var(--rc-font-size-small);font-weight:600;min-width:1.5em}.r8uj4t1f{flex:1;border:1px solid var(--rc-border);border-radius:var(--rc-radius-sm);padding:var(--rc-space-xs) var(--rc-space-sm);font-size:var(--rc-font-size-small);color:var(--rc-text);background-color:transparent;outline:none;transition:border-color .15s ease}.r8uj4t1f:focus{border-color:var(--rc-accent)}.r8uj4t1g{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border:none;background:none;color:var(--rc-text-secondary);cursor:pointer;border-radius:var(--rc-radius-sm);font-size:14px;transition:color .15s ease,background-color .15s ease}.r8uj4t1g:hover{color:#ef4444;background-color:#ef44441a}.r8uj4t1h{position:absolute;display:flex;align-items:center;justify-content:center;width:20px;height:20px;cursor:grab;border-radius:var(--rc-radius-sm);color:var(--rc-text-secondary);opacity:.4;transition:opacity .15s ease,background-color .15s ease;z-index:10}.r8uj4t1h:hover{opacity:1;background-color:var(--rc-fill-secondary)}.r8uj4t1h:active{cursor:grabbing}.r8uj4t1i{position:absolute;height:2px;background-color:var(--rc-accent);border-radius:1px;pointer-events:none;z-index:10}.r8uj4t1j{margin:2em 0;padding:0 1em;background-color:transparent;border:none;border-radius:0}.r8uj4t2 mark{background:transparent}.r8uj4t2 img{max-width:100%;height:auto;border-radius:var(--rc-radius-md)}.r8uj4t2>*:first-child,.r8uj4t2 .rich-editor__content>*:first-child{margin-top:0}.r8uj4t2>*:last-child,.r8uj4t2 .rich-editor__content>*:last-child{margin-bottom:0}.r8uj4tc svg{flex-shrink:0}.r8uj4td:hover .r8uj4tc{opacity:.5}.r8uj4td:hover .r8uj4tc:hover{opacity:1}.r8uj4te:hover .r8uj4tc{opacity:.5}.r8uj4te:hover .r8uj4tc:hover{opacity:1}.r8uj4tf:hover .r8uj4tc{opacity:.5}.r8uj4tf:hover .r8uj4tc:hover{opacity:1}.r8uj4tg:hover .r8uj4tc{opacity:.5}.r8uj4tg:hover .r8uj4tc:hover{opacity:1}.r8uj4th:hover .r8uj4tc{opacity:.5}.r8uj4th:hover .r8uj4tc:hover{opacity:1}.r8uj4ti:hover .r8uj4tc{opacity:.5}.r8uj4ti:hover .r8uj4tc:hover{opacity:1}.r8uj4tk img{width:1em;height:1em;border-radius:2px;object-fit:contain}.r8uj4tk svg{width:.9em;height:.9em}.r8uj4to .r8uj4tl{list-style-type:lower-alpha}.r8uj4to .r8uj4tm{list-style-type:circle}.r8uj4tr>*,.r8uj4tq>*{background-image:linear-gradient(var(--rc-text-secondary),var(--rc-text-secondary));background-size:0% 1.5px;background-position:left center;background-repeat:no-repeat;transition:background-size .35s cubic-bezier(.4,0,.2,1) .15s,opacity .15s ease}.r8uj4tr>*{background-size:100% 1.5px;opacity:.5}.r8uj4ts>.r8uj4t3:first-child{margin-top:0}.r8uj4ts>.r8uj4t3:last-child{margin-bottom:0}.r8uj4tx tbody tr:last-child .r8uj4tv{border-bottom:none}.r8uj4tv .r8uj4t3{margin:0;padding:0;line-height:inherit}.r8uj4tv>:first-child{margin-top:0}.r8uj4tv>:last-child{margin-bottom:0}.r8uj4tw .r8uj4t3{margin:0;padding:0;line-height:inherit}.r8uj4tw>:first-child{margin-top:0}.r8uj4tw>:last-child{margin-bottom:0}@supports (animation-timeline: view()){.r8uj4tb{--rc-hl-highlighted: 0;animation:r8uj4t0 steps(1) both;animation-timeline:view();animation-range:entry 100% cover 10%}}._1o2d5g50{margin:var(--rc-space-md) 0;border:none;background-color:transparent;interpolate-size:allow-keywords}._1o2d5g51{display:flex;align-items:flex-start;gap:var(--rc-space-sm);cursor:pointer;user-select:none;padding:var(--rc-space-xs) 0;color:var(--rc-text);font-weight:500;font-size:1em;line-height:var(--rc-line-height);list-style:none;outline:none;border-radius:var(--rc-radius-sm);transition:opacity .2s ease,color .2s ease,box-shadow .2s ease}._1o2d5g51:hover{opacity:.82}._1o2d5g51:focus-visible{box-shadow:0 0 0 2px var(--rc-accent-light)}._1o2d5g51::-webkit-details-marker{display:none}._1o2d5g51::marker{content:"";display:none}._1o2d5g52{flex:1;min-width:0}._1o2d5g53{display:inline-flex;align-items:center;justify-content:center;width:1.25rem;height:1.25rem;position:relative;top:.25rem;flex-shrink:0;color:var(--rc-text-tertiary);transform-origin:center;transition:transform .35s cubic-bezier(.4,0,.2,1),color .2s ease}._1o2d5g54{margin-top:var(--rc-space-xs);padding:var(--rc-space-sm) var(--rc-space-xl);color:var(--rc-text-secondary);background-color:color-mix(in srgb,var(--rc-accent) 6%,var(--rc-bg-secondary));border-radius:var(--rc-radius-md)}._1o2d5g51:hover ._1o2d5g53{color:var(--rc-text-secondary)}._1o2d5g50[open] ._1o2d5g53{color:var(--rc-accent);transform:rotate(90deg)}._1o2d5g50::details-content{display:block;height:0;overflow:hidden;opacity:0;content-visibility:hidden;transition:height .4s cubic-bezier(.4,0,.2,1),opacity .4s cubic-bezier(.4,0,.2,1),content-visibility .4s cubic-bezier(.4,0,.2,1) allow-discrete}._1o2d5g50[open]::details-content{height:auto;opacity:1;content-visibility:visible}._1o2d5g54>.r8uj4t3:first-child{margin-top:0}._1o2d5g54>.r8uj4t3:last-child{margin-bottom:0}.v10dui0{max-width:var(--rc-max-width);font-size:var(--rc-font-size-base);line-height:1.75;color:var(--rc-text)}.v10dui0 .r8uj4t3{margin-top:1.5em;margin-bottom:1.5em}.v10dui0 .r8uj4td{color:var(--rc-text);font-weight:800;font-size:3em;margin-top:0;margin-bottom:.8333333333333334em;line-height:1}.v10dui0 .r8uj4te{color:var(--rc-text);font-weight:700;font-size:1.875em;margin-top:1.8666666666666667em;margin-bottom:1.0666666666666667em;line-height:1.3333333}.v10dui0 .r8uj4tf{color:var(--rc-text);font-weight:600;font-size:1.5em;margin-top:1.6666666666666667em;margin-bottom:.6666666666666666em;line-height:1.5}.v10dui0 .r8uj4tg{color:var(--rc-text);font-weight:600;margin-top:2em;margin-bottom:.5em;line-height:1.5625}.v10dui0 .r8uj4te+*,.v10dui0 .r8uj4tf+*,.v10dui0 .r8uj4tg+*{margin-top:0}.v10dui0 .r8uj4ts{font-weight:500;font-style:italic;color:var(--rc-text);margin-top:2.5em;margin-bottom:2.5em;padding-left:calc(1.5em + 4px);background-color:transparent;border-radius:0;quotes:"“""”""‘""’"}.v10dui0 .r8uj4ts .r8uj4t3:first-of-type:before{content:open-quote}.v10dui0 .r8uj4ts .r8uj4t3:last-of-type:after{content:close-quote}.v10dui0 .r8uj4ts .r8uj4t3:first-child{margin-top:0}.v10dui0 .r8uj4ts .r8uj4t3:last-child{margin-bottom:0}.v10dui0 .r8uj4ta{color:var(--rc-text);font-weight:600;font-size:.875em;background-color:var(--rc-code-bg);padding:.2em .4em;border-radius:var(--rc-radius-sm);font-family:var(--rc-font-mono)}.v10dui0 .r8uj4ta:before,.v10dui0 .r8uj4ta:after{content:"`";color:var(--rc-text-secondary);opacity:.5}.v10dui0 [contenteditable=true] .r8uj4ta:before,.v10dui0 [contenteditable=true] .r8uj4ta:after{content:""}.v10dui0 .rich-code-block{color:var(--rc-text);background-color:var(--rc-code-bg);border-radius:.375rem;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.75}.v10dui0 .rich-code-block pre{padding:1em 1.5em;margin:0}.v10dui0 .r8uj4tm,.v10dui0 .r8uj4tl{margin-top:1.5em;margin-bottom:1.5em;padding-left:1.75em}.v10dui0 .r8uj4tn{margin-top:.75em;margin-bottom:.75em}.v10dui0 .r8uj4tn:not(.r8uj4tr):not(.r8uj4tq){padding-left:.5em}.v10dui0 .r8uj4tn .r8uj4t3{margin-top:1em;margin-bottom:1em}.v10dui0 .r8uj4tn>.r8uj4t3:first-child{margin-top:1.5em}.v10dui0 .r8uj4tn>.r8uj4t3:last-child{margin-bottom:1.5em}.v10dui0 .r8uj4tm .r8uj4tm,.v10dui0 .r8uj4tm .r8uj4tl,.v10dui0 .r8uj4tl .r8uj4tm,.v10dui0 .r8uj4tl .r8uj4tl{margin-top:1em;margin-bottom:1em}.v10dui0 .r8uj4tx{margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.5}.v10dui0 .r8uj4tx .r8uj4t3{margin:0;padding:0;line-height:inherit}.v10dui0 .rich-image{margin-top:2em;margin-bottom:2em}.v10dui0 .rich-image>*{margin-top:0;margin-bottom:0}.v10dui0 .rich-image figcaption{color:var(--rc-text-secondary);font-size:.875em;line-height:1.5;margin-top:1em}.v10dui0 .r8uj4tt{border-color:var(--rc-hr-border);border-top-width:1px;width:60px;margin:3.5em auto}.v10dui0 .r8uj4tt+*{margin-top:0}.v10dui0 .r8uj4tj{font-weight:500;text-decoration:underline}.v10dui0 .rich-banner,.v10dui0 .rich-code-snippet,.v10dui0 ._1o2d5g50{margin:2em 0}.v10dui0>*:first-child{margin-top:0}.v10dui0>*:last-child{margin-bottom:0}.egstxq0{display:inline;padding:0 2px;vertical-align:middle}.egstxq1{display:block;text-align:center;padding:var(--rc-space-md) 0;overflow-x:auto;margin:var(--rc-space-md) 0}.egstxq2{font-family:var(--rc-font-mono);font-size:.9em;color:var(--rc-code-text);background-color:var(--rc-code-bg);padding:2px 6px;border-radius:var(--rc-radius-sm)}._14ko36c0{font-size:var(--rc-font-size-base);line-height:var(--rc-line-height)}._14ko36c0 .r8uj4t3{margin-bottom:.6em}._14ko36c0 .r8uj4td{font-size:1.35em;font-weight:700;margin-top:.8em;margin-bottom:.3em}._14ko36c0 .r8uj4te{font-size:1.2em;font-weight:700;margin-top:.7em;margin-bottom:.25em}._14ko36c0 .r8uj4tf{font-size:1.1em;font-weight:600;margin-top:.6em;margin-bottom:.2em}._14ko36c0 .r8uj4tg{font-size:1em;font-weight:600;margin-top:.5em;margin-bottom:.15em}._14ko36c0 .r8uj4th{font-size:.9em;font-weight:600;margin-top:.45em;margin-bottom:.1em}._14ko36c0 .r8uj4ti{font-size:.85em;font-weight:600;margin-top:.4em;margin-bottom:.1em}._14ko36c0 .r8uj4ts{padding:var(--rc-space-sm) var(--rc-space-md);padding-left:calc(var(--rc-space-md) + 3px);margin:var(--rc-space-sm) 0;font-size:.95em}._14ko36c0 .r8uj4ts:before{width:3px}._14ko36c0 .r8uj4tl,._14ko36c0 .r8uj4tm{margin-bottom:.6em;padding-left:var(--rc-space-md)}._14ko36c0 .r8uj4tn{margin-bottom:.1em}._14ko36c0 .rich-code-block{margin:var(--rc-space-sm) 0;border-radius:var(--rc-radius-sm);font-size:var(--rc-font-size-small)}._14ko36c0 .rich-code-block pre{padding:var(--rc-space-sm)}._14ko36c0 .line:before{display:none!important}._14ko36c0 .r8uj4tx{margin:var(--rc-space-sm) 0;font-size:var(--rc-font-size-small)}._14ko36c0 .r8uj4tv,._14ko36c0 .r8uj4tw{padding:var(--rc-space-xs) var(--rc-space-sm)}._14ko36c0 .rich-image{margin:var(--rc-space-sm) 0}._14ko36c0 .rich-image figcaption{font-size:var(--rc-font-size-small)}._14ko36c0 .r8uj4tt{border:none;border-top:1px solid var(--rc-hr-border);margin:var(--rc-space-lg) auto;width:60px}._14ko36c0 .r8uj4t1j{padding:var(--rc-space-sm) var(--rc-space-md);padding-left:var(--rc-space-lg);margin:var(--rc-space-sm) 0}._14ko36c0 .egstxq1{padding:var(--rc-space-sm) 0;margin:var(--rc-space-sm) 0}.ys4fw90{max-width:var(--rc-max-width);font-size:var(--rc-font-size-base);line-height:1.8;color:var(--rc-text)}.ys4fw90 .rich-editor__content>.r8uj4t3,.ys4fw90.rich-content:not([data-rich-nested=true])>.r8uj4t3{margin-top:1.25em;margin-bottom:1.25em;line-height:1.8}.ys4fw90 .rich-editor__content>.r8uj4t3:first-of-type,.ys4fw90.rich-content:not([data-rich-nested=true])>.r8uj4t3:first-of-type{margin-top:0;margin-bottom:2rem}.ys4fw90 .rich-editor__content>.r8uj4t3:not(:first-of-type)>[data-lexical-text]:first-child,.ys4fw90.rich-content:not([data-rich-nested=true])>.r8uj4t3:not(:first-of-type)>[data-lexical-text]:first-child{margin-inline-start:2rem}.ys4fw90.rich-content:not([data-rich-nested=true])>.r8uj4t3:first-of-type:first-letter{float:left;font-size:2.4em;margin-right:.2em;line-height:1}.ys4fw90 .rich-editor__content>.r8uj4t3:first-of-type:first-letter{font-size:1.5em;font-weight:700;color:var(--rc-accent)}.ys4fw90 .rich-editor__content>.r8uj4t3:last-child,.ys4fw90.rich-content:not([data-rich-nested=true])>.r8uj4t3:last-child{margin-bottom:0}.ys4fw90 .r8uj4t4{font-family:var(--rc-font-family);font-weight:600;color:var(--rc-text)}.ys4fw90 .r8uj4td{font-size:2.25em;font-weight:800;line-height:1.1111111;margin-top:0;margin-bottom:.8888889em;letter-spacing:-.025em;color:var(--rc-text)}.ys4fw90 .r8uj4te{font-size:1.5em;font-weight:700;line-height:1.3333333;margin-top:2em;margin-bottom:1em;letter-spacing:-.025em;color:var(--rc-text)}.ys4fw90 .r8uj4te+*{margin-top:0}.ys4fw90 .r8uj4tf{font-size:1.25em;font-weight:600;line-height:1.6;margin-top:1.6em;margin-bottom:.6em;letter-spacing:-.025em;color:var(--rc-text)}.ys4fw90 .r8uj4tf+*{margin-top:0}.ys4fw90 .r8uj4tg{font-size:1.125em;font-weight:600;line-height:1.5;margin-top:1.5em;margin-bottom:.5em;color:var(--rc-text)}.ys4fw90 .r8uj4tg+*{margin-top:0}.ys4fw90 .r8uj4th{font-size:1em;font-weight:600;line-height:1.5;margin-top:1.5em;margin-bottom:.5em;color:var(--rc-text)}.ys4fw90 .r8uj4th+*{margin-top:0}.ys4fw90 .r8uj4ti{font-size:.875em;font-weight:600;line-height:1.5;margin-top:1.5em;margin-bottom:.5em;color:var(--rc-text);text-transform:uppercase}.ys4fw90 .r8uj4ti+*{margin-top:0}.ys4fw90 .r8uj4ts{font-style:normal;line-height:1.8;color:inherit;background-color:color-mix(in srgb,var(--rc-accent) 10%,transparent);margin-top:1.6em;margin-bottom:1.6em;margin-left:-1rem;margin-right:-1rem;padding:1em 2em;border-radius:0}.ys4fw90 .r8uj4ts:before{display:none}.ys4fw90 .r8uj4ts .r8uj4t3:first-child:first-letter{float:none;font-size:inherit;margin-right:0}.ys4fw90 .r8uj4tj{font-weight:500;text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:2px;transition:color .15s ease}.ys4fw90 .r8uj4tj:hover{text-decoration-thickness:2px}.ys4fw90 .r8uj4ta{font-size:.875em;font-family:var(--rc-font-mono);font-weight:500;padding:.2em .4em;border-radius:var(--rc-radius-sm);background-color:var(--rc-code-bg)}.ys4fw90 .r8uj4tl,.ys4fw90 .r8uj4tm{margin-top:1.25em;margin-bottom:1.25em;padding-left:1.625em}.ys4fw90 .r8uj4tl{list-style-type:decimal}.ys4fw90 .r8uj4tm{list-style-type:disc}.ys4fw90 .r8uj4tn{margin-top:.5em;margin-bottom:.5em}.ys4fw90 .r8uj4tn:not(.r8uj4tr):not(.r8uj4tq){padding-left:.375em}.ys4fw90 .r8uj4tn::marker{color:var(--rc-text-secondary)}.ys4fw90 .rich-code-block{font-size:.875em;line-height:1.7142857;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:var(--rc-radius-md);overflow-x:auto}.ys4fw90 .rich-code-block pre{padding:.8571429em 1.1428571em;margin:0}.ys4fw90 .r8uj4tx{margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.7142857}.ys4fw90 .r8uj4tx .r8uj4t3{margin:0;padding:0;line-height:inherit}.ys4fw90 .r8uj4tx .r8uj4t3:first-child:first-letter{float:none;font-size:inherit;margin-right:0}.ys4fw90 .rich-image{margin-top:2em;margin-bottom:2em}.ys4fw90 .rich-image img{border-radius:var(--rc-radius-md)}.ys4fw90 .rich-image figcaption{font-size:.875em;line-height:1.4285714;margin-top:.8571429em;color:var(--rc-text-secondary);text-align:center}.ys4fw90 .r8uj4tt{border:none;border-top:1px solid var(--rc-hr-border);opacity:.2;margin-top:.5rem;margin-bottom:.5rem;width:60px;margin-left:auto;margin-right:auto}.ys4fw90 .egstxq1{margin-top:1.6em;margin-bottom:1.6em;overflow-x:auto;padding:1em 0}.ys4fw90 .r8uj4ty{border-radius:var(--rc-radius-sm);padding-inline:.25em}.ys4fw90>*:first-child{margin-top:0}.ys4fw90>*:last-child{margin-bottom:0}._17ihk870{position:relative;margin:var(--rc-space-md) 0}._17ihk871{position:absolute;top:-36px;left:50%;transform:translate(-50%);display:flex;align-items:center;gap:2px;padding:4px 6px;border-radius:var(--rc-radius-md);pointer-events:none;background:var(--rc-bg);border:1px solid var(--rc-border);box-shadow:var(--rc-shadow-top-bar);z-index:10;user-select:none;white-space:nowrap;opacity:0;transition:opacity .15s ease}._17ihk872{display:flex;align-items:center;justify-content:center;width:24px;height:24px;color:var(--rc-text-secondary);flex-shrink:0}._17ihk873{display:flex;align-items:center;justify-content:center;min-width:24px;height:24px;padding:0 6px;border-radius:var(--rc-radius-sm);border:none;background:transparent;cursor:pointer;font-size:12px;font-weight:500;color:var(--rc-text-secondary);line-height:1;transition:color .15s ease,background-color .15s ease}._17ihk873:hover{background-color:var(--rc-fill-secondary);color:var(--rc-text)}._17ihk874{background:var(--rc-fill);font-weight:600;color:var(--rc-text)}._17ihk875{width:1px;height:16px;background:var(--rc-border);margin:0 2px;flex-shrink:0}._17ihk876{display:flex;align-items:center;justify-content:center;min-width:24px;height:24px;padding:0 6px;border-radius:var(--rc-radius-sm);border:none;background:transparent;cursor:pointer;color:var(--rc-text-secondary);transition:color .15s ease,background-color .15s ease}._17ihk876:hover{background-color:var(--rc-fill-secondary);color:var(--rc-text)}._17ihk877{display:grid;gap:var(--rc-space-md)}._17ihk878{min-width:0}._17ihk879{outline:none}._17ihk870:hover ._17ihk871,._17ihk870:focus-within ._17ihk871{opacity:1;pointer-events:auto}@keyframes _1x58dbf0{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes _1x58dbf6{to{transform:rotate(360deg)}}.rich-image-upload-dragging{position:relative;border-radius:var(--rc-radius-md);background-color:color-mix(in srgb,var(--rc-accent) 6%,transparent)}.rich-image-upload-dragging .rich-editor__content{outline:2px dashed color-mix(in srgb,var(--rc-accent) 48%,transparent);outline-offset:-2px}._1x58dbf1{position:absolute;right:.75rem;bottom:.75rem;z-index:25;display:flex;flex-direction:column;align-items:flex-end;gap:.375rem;pointer-events:none}._1x58dbf2{display:inline-flex;align-items:center;gap:.375rem;padding:.375rem .625rem;border-radius:var(--rc-radius-sm);border:1px solid var(--rc-border);background-color:color-mix(in srgb,var(--rc-bg) 95%,transparent);color:var(--rc-text);font-size:var(--rc-font-size-xs);line-height:1.2;box-shadow:var(--rc-shadow-top-bar);animation:_1x58dbf0 .12s ease-out}._1x58dbf4{border-color:color-mix(in srgb,var(--rc-accent) 35%,transparent)}._1x58dbf5{border-color:color-mix(in srgb,var(--rc-alert-caution) 45%,transparent);color:var(--rc-alert-caution)}._1x58dbf7{width:12px;height:12px;border-radius:50%;border:2px solid color-mix(in srgb,var(--rc-text-secondary) 35%,transparent);border-top-color:color-mix(in srgb,var(--rc-text) 65%,transparent);animation:_1x58dbf6 .75s linear infinite}._1x58dbf8._1x58dbf8{padding:0;gap:0;width:min(560px,calc(100vw - 2rem));overflow:hidden}._1x58dbf9{padding:.875rem 1rem .75rem;border-bottom:1px solid var(--rc-border)}._1x58dbfa{font-size:var(--rc-font-size-md);font-weight:600;color:var(--rc-text)}._1x58dbfb{display:flex;flex-direction:column;gap:.875rem;padding:.875rem 1rem}._1x58dbfc{display:flex;align-items:center;gap:.5rem}._1x58dbfd{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.5rem;border-radius:var(--rc-radius-md);border:1.5px dashed var(--rc-border);min-height:190px;padding:1.2rem;color:var(--rc-text-secondary);cursor:pointer;transition:border-color .15s ease,background-color .15s ease,color .15s ease}._1x58dbfd:hover{border-color:color-mix(in srgb,var(--rc-accent) 35%,transparent);background-color:color-mix(in srgb,var(--rc-accent) 6%,transparent);color:var(--rc-text)}._1x58dbff{border-color:color-mix(in srgb,var(--rc-accent) 55%,transparent);background-color:color-mix(in srgb,var(--rc-accent) 8%,transparent);color:var(--rc-text);transform:scale(1.01)}._1x58dbfg{cursor:progress;opacity:.9}._1x58dbfh{display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:var(--rc-radius-md);background-color:color-mix(in srgb,var(--rc-text) 6%,transparent)}._1x58dbfi{font-size:var(--rc-font-size-sm);font-weight:600;color:var(--rc-text)}._1x58dbfj{font-size:var(--rc-font-size-xs);color:var(--rc-text-secondary);text-align:center}._1x58dbfk{display:none}._1x58dbfl{display:flex;flex-direction:column;align-items:center;gap:.5rem}._1x58dbfm{display:inline-flex;align-items:center;gap:.375rem;font-size:var(--rc-font-size-sm);color:var(--rc-text)}._1x58dbfn{display:flex;align-items:center;gap:.5rem}._1x58dbfo{width:100%;border-radius:var(--rc-radius-sm);border:1px solid var(--rc-border);background-color:var(--rc-bg);color:var(--rc-text);height:34px;padding:0 .625rem;font-size:var(--rc-font-size-sm);outline:none;transition:border-color .15s ease}._1x58dbfo:focus{border-color:color-mix(in srgb,var(--rc-accent) 50%,transparent)}._1x58dbfo::placeholder{color:var(--rc-text-secondary)}._1x58dbfp{border-radius:var(--rc-radius-md);border:1px solid var(--rc-border);overflow:hidden;background-color:color-mix(in srgb,var(--rc-text) 2%,transparent)}._1x58dbfq{display:block;width:100%;max-height:220px;object-fit:cover}._1x58dbfr{display:inline-flex;align-items:center;gap:.4rem;font-size:var(--rc-font-size-xs);color:var(--rc-text-secondary)}._1x58dbfs{display:flex;align-items:center;justify-content:space-between;gap:.75rem;border-top:1px solid var(--rc-border);background-color:color-mix(in srgb,var(--rc-text) 2%,transparent);padding:.65rem 1rem}.b94s950{position:relative;max-width:var(--rc-max-width);margin:0 auto;flex:1;min-height:0;width:100%}.b94s951{outline:none;min-height:100px;width:100%;padding:var(--ce-padding-top, 12px) var(--rc-space-md) 12px var(--rc-space-md)}.b94s952{position:absolute;top:var(--ce-padding-top, 12px);left:var(--rc-space-md);color:var(--rc-text-secondary);pointer-events:none;user-select:none}
1
+ :root{--rc-text: #000;--rc-text-secondary: #27272a;--rc-text-tertiary: #71717a;--rc-text-quaternary: #a1a1aa;--rc-bg: #ffffff;--rc-bg-secondary: #fafafa;--rc-bg-tertiary: #f4f4f5;--rc-fill: #e8e8ec;--rc-fill-secondary: #eeeeef;--rc-fill-tertiary: #f4f4f6;--rc-fill-quaternary: #f9f9fa;--rc-border: #f4f4f5;--rc-accent: #2563eb;--rc-accent-light: #2563eb20;--rc-link: #2563eb;--rc-code-text: #3f3f46;--rc-code-bg: #f4f4f5;--rc-hr-border: #e4e4e7;--rc-quote-border: #2563eb;--rc-quote-bg: #eff6ff;--rc-alert-info: #006bb7;--rc-alert-warning: #cc5500;--rc-alert-tip: #11cc00;--rc-alert-caution: #cc0011;--rc-alert-important: #5500cc;--rc-max-width: 700px;--rc-shadow-top-bar: 0 8px 30px rgba(0, 0, 0, .12), 0 2px 8px rgba(0, 0, 0, .06);--rc-shadow-modal: 0 10px 15px -3px rgba(0,0,0,.1), 0 4px 6px -4px rgba(0,0,0,.1);--rc-shadow-menu: 0 1px 4px rgba(0,0,0,.04), 0 4px 16px rgba(0,0,0,.08);--rc-space-xs: 4px;--rc-space-sm: 8px;--rc-space-md: 16px;--rc-space-lg: 24px;--rc-space-xl: 32px;--rc-font-family-sans: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif: "Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-mono: "SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs: .625em;--rc-font-size-xs: .75em;--rc-font-size-sm: .8125em;--rc-font-size-md: .875em;--rc-font-size-lg: 1.25em;--rc-font-size-base: 16px;--rc-font-size-small: 14px;--rc-line-height: 1.7;--rc-line-height-tight: 1.4;--rc-font-family: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-radius-sm: 4px;--rc-radius-md: 8px;--rc-radius-lg: 12px}:root.dark{--rc-text: #fafafa;--rc-text-secondary: #a1a1aa;--rc-text-tertiary: #71717a;--rc-text-quaternary: #52525b;--rc-bg: #09090b;--rc-bg-secondary: #18181b;--rc-bg-tertiary: #27272a;--rc-fill: #2a2a2f;--rc-fill-secondary: #222226;--rc-fill-tertiary: #1b1b1f;--rc-fill-quaternary: #131316;--rc-border: #27272a;--rc-accent: #60a5fa;--rc-accent-light: #60a5fa20;--rc-link: #60a5fa;--rc-code-text: #e4e4e7;--rc-code-bg: #27272a;--rc-hr-border: #27272a;--rc-quote-border: #60a5fa;--rc-quote-bg: #1e3a5f;--rc-alert-info: #7db9e5;--rc-alert-warning: #da864a;--rc-alert-tip: #54da48;--rc-alert-caution: #e16973;--rc-alert-important: #9966e0;--rc-max-width: 700px;--rc-shadow-top-bar: 0 8px 30px rgba(0, 0, 0, .45), 0 2px 8px rgba(0, 0, 0, .3);--rc-shadow-modal: 0 10px 15px -3px rgba(0,0,0,.4), 0 4px 6px -4px rgba(0,0,0,.35);--rc-shadow-menu: 0 1px 4px rgba(0,0,0,.25), 0 4px 16px rgba(0,0,0,.4);--rc-space-xs: 4px;--rc-space-sm: 8px;--rc-space-md: 16px;--rc-space-lg: 24px;--rc-space-xl: 32px;--rc-font-family-sans: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif: "Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-mono: "SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs: .625em;--rc-font-size-xs: .75em;--rc-font-size-sm: .8125em;--rc-font-size-md: .875em;--rc-font-size-lg: 1.25em;--rc-font-size-base: 16px;--rc-font-size-small: 14px;--rc-line-height: 1.7;--rc-line-height-tight: 1.4;--rc-font-family: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-radius-sm: 4px;--rc-radius-md: 8px;--rc-radius-lg: 12px}._13h71jk0{--rc-text: #000;--rc-text-secondary: #27272a;--rc-text-tertiary: #71717a;--rc-text-quaternary: #a1a1aa;--rc-bg: #ffffff;--rc-bg-secondary: #fafafa;--rc-bg-tertiary: #f4f4f5;--rc-fill: #e8e8ec;--rc-fill-secondary: #eeeeef;--rc-fill-tertiary: #f4f4f6;--rc-fill-quaternary: #f9f9fa;--rc-border: #f4f4f5;--rc-accent: #2563eb;--rc-accent-light: #2563eb20;--rc-link: #2563eb;--rc-code-text: #3f3f46;--rc-code-bg: #f4f4f5;--rc-hr-border: #e4e4e7;--rc-quote-border: #2563eb;--rc-quote-bg: #eff6ff;--rc-alert-info: #006bb7;--rc-alert-warning: #cc5500;--rc-alert-tip: #11cc00;--rc-alert-caution: #cc0011;--rc-alert-important: #5500cc;--rc-max-width: 700px;--rc-shadow-top-bar: 0 8px 30px rgba(0, 0, 0, .12), 0 2px 8px rgba(0, 0, 0, .06);--rc-shadow-modal: 0 10px 15px -3px rgba(0,0,0,.1), 0 4px 6px -4px rgba(0,0,0,.1);--rc-shadow-menu: 0 1px 4px rgba(0,0,0,.04), 0 4px 16px rgba(0,0,0,.08);--rc-space-xs: 4px;--rc-space-sm: 8px;--rc-space-md: 16px;--rc-space-lg: 24px;--rc-space-xl: 32px;--rc-font-family-sans: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif: "Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-mono: "SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs: .625em;--rc-font-size-xs: .75em;--rc-font-size-sm: .8125em;--rc-font-size-md: .875em;--rc-font-size-lg: 1.25em;--rc-font-size-base: 16px;--rc-font-size-small: 14px;--rc-line-height: 1.7;--rc-line-height-tight: 1.4;--rc-font-family: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-radius-sm: 4px;--rc-radius-md: 8px;--rc-radius-lg: 12px}._13h71jk1{--rc-text: #000;--rc-text-secondary: #27272a;--rc-text-tertiary: #71717a;--rc-text-quaternary: #a1a1aa;--rc-bg: #ffffff;--rc-bg-secondary: #fafafa;--rc-bg-tertiary: #f4f4f5;--rc-fill: #e8e8ec;--rc-fill-secondary: #eeeeef;--rc-fill-tertiary: #f4f4f6;--rc-fill-quaternary: #f9f9fa;--rc-border: #f4f4f5;--rc-accent: #2563eb;--rc-accent-light: #2563eb20;--rc-link: #2563eb;--rc-code-text: #3f3f46;--rc-code-bg: #f4f4f5;--rc-hr-border: #e4e4e7;--rc-quote-border: #2563eb;--rc-quote-bg: #eff6ff;--rc-alert-info: #006bb7;--rc-alert-warning: #cc5500;--rc-alert-tip: #11cc00;--rc-alert-caution: #cc0011;--rc-alert-important: #5500cc;--rc-max-width: 700px;--rc-shadow-top-bar: 0 8px 30px rgba(0, 0, 0, .12), 0 2px 8px rgba(0, 0, 0, .06);--rc-shadow-modal: 0 10px 15px -3px rgba(0,0,0,.1), 0 4px 6px -4px rgba(0,0,0,.1);--rc-shadow-menu: 0 1px 4px rgba(0,0,0,.04), 0 4px 16px rgba(0,0,0,.08);--rc-space-xs: 4px;--rc-space-sm: 8px;--rc-space-md: 16px;--rc-space-lg: 24px;--rc-space-xl: 32px;--rc-font-family-sans: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif: "Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-mono: "SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs: .625em;--rc-font-size-xs: .75em;--rc-font-size-sm: .8125em;--rc-font-size-md: .875em;--rc-font-size-lg: 1.25em;--rc-font-size-base: 16px;--rc-font-size-small: 14px;--rc-line-height: 1.8;--rc-line-height-tight: 1.4;--rc-font-family: "Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-radius-sm: 4px;--rc-radius-md: 8px;--rc-radius-lg: 12px}._13h71jk2{--rc-text: #000;--rc-text-secondary: #27272a;--rc-text-tertiary: #71717a;--rc-text-quaternary: #a1a1aa;--rc-bg: #ffffff;--rc-bg-secondary: #fafafa;--rc-bg-tertiary: #f4f4f5;--rc-fill: #e8e8ec;--rc-fill-secondary: #eeeeef;--rc-fill-tertiary: #f4f4f6;--rc-fill-quaternary: #f9f9fa;--rc-border: #f4f4f5;--rc-accent: #2563eb;--rc-accent-light: #2563eb20;--rc-link: #2563eb;--rc-code-text: #3f3f46;--rc-code-bg: #f4f4f5;--rc-hr-border: #e4e4e7;--rc-quote-border: #a1a1aa;--rc-quote-bg: #fafafa;--rc-alert-info: #006bb7;--rc-alert-warning: #cc5500;--rc-alert-tip: #11cc00;--rc-alert-caution: #cc0011;--rc-alert-important: #5500cc;--rc-max-width: none;--rc-shadow-top-bar: 0 8px 30px rgba(0, 0, 0, .12), 0 2px 8px rgba(0, 0, 0, .06);--rc-shadow-modal: 0 10px 15px -3px rgba(0,0,0,.1), 0 4px 6px -4px rgba(0,0,0,.1);--rc-shadow-menu: 0 1px 4px rgba(0,0,0,.04), 0 4px 16px rgba(0,0,0,.08);--rc-space-xs: 2px;--rc-space-sm: 4px;--rc-space-md: 10px;--rc-space-lg: 16px;--rc-space-xl: 20px;--rc-font-family-sans: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif: "Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-mono: "SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs: .625em;--rc-font-size-xs: .75em;--rc-font-size-sm: .8125em;--rc-font-size-md: .875em;--rc-font-size-lg: 1.25em;--rc-font-size-base: 14px;--rc-font-size-small: 12px;--rc-line-height: 1.5;--rc-line-height-tight: 1.3;--rc-font-family: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-radius-sm: 3px;--rc-radius-md: 6px;--rc-radius-lg: 12px}.dark ._13h71jk0,[data-theme=dark] ._13h71jk0,.dark._13h71jk0,[data-theme=dark]._13h71jk0,.dark ._13h71jk1,[data-theme=dark] ._13h71jk1,.dark._13h71jk1,[data-theme=dark]._13h71jk1,.dark ._13h71jk2,[data-theme=dark] ._13h71jk2,.dark._13h71jk2,[data-theme=dark]._13h71jk2{--rc-text: #fafafa;--rc-text-secondary: #a1a1aa;--rc-text-tertiary: #71717a;--rc-text-quaternary: #52525b;--rc-bg: #09090b;--rc-bg-secondary: #18181b;--rc-bg-tertiary: #27272a;--rc-fill: #2a2a2f;--rc-fill-secondary: #222226;--rc-fill-tertiary: #1b1b1f;--rc-fill-quaternary: #131316;--rc-border: #27272a;--rc-accent: #60a5fa;--rc-accent-light: #60a5fa20;--rc-link: #60a5fa;--rc-code-text: #e4e4e7;--rc-code-bg: #27272a;--rc-hr-border: #27272a;--rc-quote-border: #60a5fa;--rc-quote-bg: #1e3a5f;--rc-alert-info: #7db9e5;--rc-alert-warning: #da864a;--rc-alert-tip: #54da48;--rc-alert-caution: #e16973;--rc-alert-important: #9966e0;--rc-shadow-top-bar: 0 8px 30px rgba(0, 0, 0, .45), 0 2px 8px rgba(0, 0, 0, .3);--rc-shadow-modal: 0 10px 15px -3px rgba(0,0,0,.4), 0 4px 6px -4px rgba(0,0,0,.35);--rc-shadow-menu: 0 1px 4px rgba(0,0,0,.25), 0 4px 16px rgba(0,0,0,.4)}@keyframes r8uj4t0{to{--rc-hl-highlighted: 1}}@keyframes r8uj4t1{0%{background-color:#ef44443d}to{background-color:transparent}}.r8uj4t2{font-family:var(--rc-font-family);font-size:var(--rc-font-size-base);line-height:var(--rc-line-height);color:var(--rc-text);word-wrap:break-word;overflow-wrap:break-word}.r8uj4t3{margin:0 0 1em;line-height:var(--rc-line-height)}.r8uj4t4{font-weight:700}.r8uj4t5{font-style:italic}.r8uj4t6{text-decoration:underline}.r8uj4t7{text-decoration:line-through;opacity:.65}.r8uj4t8{vertical-align:super;font-size:.8em}.r8uj4t9{vertical-align:sub;font-size:.8em}.r8uj4ta{font-family:var(--rc-font-mono);font-size:.9em;background-color:var(--rc-code-bg);color:var(--rc-code-text);padding:2px 6px;border-radius:var(--rc-radius-sm);border:1px solid var(--rc-border)}[contenteditable=true] .r8uj4ta{padding-right:0}.r8uj4tb{--rc-hl-lightness: .3;--rc-hl-highlighted: 1;--rc-hl-color: oklch(from var(--rc-accent) l c h / var(--rc-hl-lightness));background:linear-gradient(120deg,var(--rc-hl-color, lightblue) 50%,transparent 50%) 110% 0 / 200% 100% no-repeat;background-position:calc((1 - var(--rc-hl-highlighted)) * 110%) 0;color:var(--rc-text);transition:background-position 1s}[contenteditable=true] .r8uj4tb{--rc-hl-highlighted: 1;animation:none}[data-theme=dark] .r8uj4tb{--rc-hl-lightness: .35}.r8uj4tc{position:absolute;left:-1.25rem;top:0;bottom:0;display:flex;align-items:center;text-decoration:none;color:var(--rc-text-secondary);opacity:0;transition:opacity .15s ease;font-size:.8rem}.r8uj4td{position:relative;font-size:2em;font-weight:700;line-height:var(--rc-line-height-tight);margin-top:1.5em;margin-bottom:.5em}[contenteditable=true] .r8uj4td:before{content:"H1";position:absolute;left:-1.5rem;bottom:.5rem;display:flex;font-size:.5rem;font-weight:600;color:var(--rc-text-secondary);opacity:.6;pointer-events:none;font-family:var(--rc-font-mono)}.r8uj4te{position:relative;font-size:1.5em;font-weight:700;line-height:var(--rc-line-height-tight);margin-top:1.4em;margin-bottom:.45em}[contenteditable=true] .r8uj4te:before{content:"H2";position:absolute;left:-1.5rem;bottom:.5rem;display:flex;font-size:.5rem;font-weight:600;color:var(--rc-text-secondary);opacity:.6;pointer-events:none;font-family:var(--rc-font-mono)}.r8uj4tf{position:relative;font-size:1.25em;font-weight:600;line-height:var(--rc-line-height-tight);margin-top:1.3em;margin-bottom:.4em}[contenteditable=true] .r8uj4tf:before{content:"H3";position:absolute;left:-1.5rem;bottom:.5rem;display:flex;font-size:.5rem;font-weight:600;color:var(--rc-text-secondary);opacity:.6;pointer-events:none;font-family:var(--rc-font-mono)}.r8uj4tg{position:relative;font-size:1.125em;font-weight:600;line-height:var(--rc-line-height-tight);margin-top:1.2em;margin-bottom:.35em}[contenteditable=true] .r8uj4tg:before{content:"H4";position:absolute;left:-1.5rem;bottom:.5rem;display:flex;font-size:.5rem;font-weight:600;color:var(--rc-text-secondary);opacity:.6;pointer-events:none;font-family:var(--rc-font-mono)}.r8uj4th{position:relative;font-size:1em;font-weight:600;line-height:var(--rc-line-height-tight);margin-top:1.1em;margin-bottom:.3em}[contenteditable=true] .r8uj4th:before{content:"H5";position:absolute;left:-1.5rem;bottom:.5rem;display:flex;font-size:.5rem;font-weight:600;color:var(--rc-text-secondary);opacity:.6;pointer-events:none;font-family:var(--rc-font-mono)}.r8uj4ti{position:relative;font-size:.875em;font-weight:600;line-height:var(--rc-line-height-tight);margin-top:1em;margin-bottom:.25em;color:var(--rc-text)}[contenteditable=true] .r8uj4ti:before{content:"H6";position:absolute;left:-1.5rem;bottom:.5rem;display:flex;font-size:.5rem;font-weight:600;color:var(--rc-text-secondary);opacity:.6;pointer-events:none;font-family:var(--rc-font-mono)}.r8uj4tj{color:var(--rc-link);text-decoration:none;transition:color .2s ease}.r8uj4tj:hover{text-decoration:underline}.r8uj4tj[data-favicon=loaded]:before{content:"";display:inline-block;width:1em;height:1em;margin-right:.2em;vertical-align:-.125em;background-image:var(--rc-link-favicon);background-size:contain;background-repeat:no-repeat;background-position:center;border-radius:2px}.r8uj4tk{display:inline-flex;align-items:center;margin-right:.15em;vertical-align:-.125em}.r8uj4tl{list-style-type:decimal;padding-left:var(--rc-space-lg);margin-bottom:1em}.r8uj4tm{list-style-type:disc;padding-left:var(--rc-space-lg);margin-bottom:1em}.r8uj4tn{margin-bottom:.25em}.r8uj4to{list-style-type:none}.r8uj4tp{list-style-type:none;padding-left:0}.r8uj4tq{--rc-cb-size: 1.125rem;position:relative;padding-left:2em;list-style-type:none;outline:none;transition:color .25s ease}.r8uj4tq:before{content:"";position:absolute;left:0;top:calc((1lh - var(--rc-cb-size)) / 2);width:var(--rc-cb-size);height:var(--rc-cb-size);border:1.5px solid var(--rc-text-quaternary);border-radius:var(--rc-radius-sm);box-sizing:border-box;cursor:pointer;background-color:transparent;transition:background-color .25s cubic-bezier(.4,0,.2,1),border-color .25s cubic-bezier(.4,0,.2,1),transform .15s ease}.r8uj4tq:after{content:"";position:absolute;left:calc(var(--rc-cb-size) * .32);top:calc((1lh - var(--rc-cb-size)) / 2 + var(--rc-cb-size) * .14);width:calc(var(--rc-cb-size) * .28);height:calc(var(--rc-cb-size) * .55);border-right:2px solid var(--rc-accent);border-bottom:2px solid var(--rc-accent);box-sizing:border-box;display:block;pointer-events:none;transform:rotate(45deg) scale(0);transform-origin:center;opacity:0;transition:transform .3s cubic-bezier(.34,1.56,.64,1) .1s,opacity .15s ease}[contenteditable=true] .r8uj4tq:active:before{transform:scale(.94)}[contenteditable=true] .r8uj4tq:hover:before{border-color:var(--rc-text-tertiary)}.r8uj4tr{--rc-cb-size: 1.125rem;position:relative;padding-left:2em;list-style-type:none;outline:none;transition:color .25s ease;color:var(--rc-text-secondary)}.r8uj4tr:before{content:"";position:absolute;left:0;top:calc((1lh - var(--rc-cb-size)) / 2);width:var(--rc-cb-size);height:var(--rc-cb-size);border:1.5px solid var(--rc-text-quaternary);border-radius:var(--rc-radius-sm);box-sizing:border-box;cursor:pointer;background-color:var(--rc-accent-light);transition:background-color .25s cubic-bezier(.4,0,.2,1),border-color .25s cubic-bezier(.4,0,.2,1),transform .15s ease;border-color:var(--rc-accent)}.r8uj4tr:after{content:"";position:absolute;left:calc(var(--rc-cb-size) * .32);top:calc((1lh - var(--rc-cb-size)) / 2 + var(--rc-cb-size) * .14);width:calc(var(--rc-cb-size) * .28);height:calc(var(--rc-cb-size) * .55);border-right:2px solid var(--rc-accent);border-bottom:2px solid var(--rc-accent);box-sizing:border-box;display:block;pointer-events:none;transform:rotate(45deg) scale(1);transform-origin:center;opacity:1;transition:transform .3s cubic-bezier(.34,1.56,.64,1) .1s,opacity .15s ease}[contenteditable=true] .r8uj4tr:active:before{transform:scale(.94)}[contenteditable=true] .r8uj4tr:hover:before{background-color:color-mix(in oklab,var(--rc-accent) 12%,transparent)}.r8uj4ts{position:relative;background-color:var(--rc-quote-bg);margin:var(--rc-space-md) 0;padding:var(--rc-space-sm) var(--rc-space-md);padding-left:calc(var(--rc-space-md) + 4px);font-style:italic;color:var(--rc-text-secondary);border-radius:0 var(--rc-radius-sm) var(--rc-radius-sm) 0}.r8uj4ts:before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;border-radius:var(--rc-radius-sm);background-color:var(--rc-quote-border)}.r8uj4tt{border:none;border-top:1px solid var(--rc-hr-border);margin:var(--rc-space-lg) auto;width:60px}.r8uj4tu{overflow-x:auto}.r8uj4tv{border:none;border-bottom:1px solid var(--rc-border);border-right:1px solid var(--rc-border);padding:1.25em var(--rc-space-lg);text-align:left;vertical-align:middle;line-height:1.5}.r8uj4tv:last-child{border-right:none}.r8uj4tw{border:none;border-bottom:1px solid var(--rc-border);border-right:1px solid var(--rc-border);padding:var(--rc-space-md) var(--rc-space-lg);text-align:left;font-weight:600;font-size:.75em;text-transform:uppercase;letter-spacing:.05em;color:var(--rc-text-secondary);background-color:var(--rc-bg-secondary);vertical-align:middle;line-height:1.5;position:sticky;top:0;z-index:1}.r8uj4tw:last-child{border-right:none}.r8uj4tx{width:100%;border-collapse:separate;border-spacing:0;margin:var(--rc-space-lg) 0;font-size:var(--rc-font-size-small);border:1px solid var(--rc-border);border-radius:var(--rc-radius-md);overflow:hidden}.r8uj4ty{background-color:var(--rc-text);color:transparent;border-radius:var(--rc-radius-sm);padding-inline:4px;cursor:pointer;transition:background-color .3s ease,color .3s ease;user-select:none}[contenteditable=true] .r8uj4ty{background-color:color-mix(in srgb,var(--rc-text) 30%,transparent);color:inherit;user-select:auto;cursor:text}.r8uj4ty:hover{background-color:transparent;color:inherit;user-select:auto}.rich-content .r8uj4ty{background-color:var(--rc-text-tertiary);color:transparent}.rich-content .r8uj4ty:hover,.r8uj4tz{background-color:transparent;color:inherit;user-select:auto}.r8uj4t10{display:inline-block;border-radius:999px;padding-inline:.75em;font-size:var(--rc-font-size-small);line-height:1.6;vertical-align:baseline}.r8uj4t11{display:inline-block;font-family:var(--rc-font-mono);font-size:var(--rc-font-size-small);color:var(--rc-text-secondary);background-color:var(--rc-code-bg);border:1px dashed var(--rc-border);border-radius:var(--rc-radius-sm);padding:2px 6px;white-space:break-spaces}.r8uj4t11:before{content:"<!--";opacity:.7}.r8uj4t11:after{content:"-->";opacity:.7}.r8uj4t12{ruby-position:over;ruby-align:center}[contenteditable=true] .r8uj4t12[data-ruby]{position:relative;display:inline-block;padding-top:.72em;line-height:1.2}[contenteditable=true] .r8uj4t12[data-ruby]:before{content:attr(data-ruby);position:absolute;left:0;right:0;top:0;transform:translateY(-.68em);font-size:.58em;line-height:1;text-align:center;color:var(--rc-text-secondary);pointer-events:none;white-space:nowrap}.r8uj4t13{font-size:.58em;line-height:1;color:var(--rc-text-secondary);user-select:none}.r8uj4t14{vertical-align:super;font-size:.8em}.r8uj4t15{display:inline-flex;align-items:center;justify-content:center;min-width:1.5em;text-decoration:none;color:var(--rc-accent);background-color:var(--rc-accent-light);border-radius:999px;padding:0 .35em;line-height:1.45;font-weight:600;font-size:.82em;transition:filter .15s ease}.r8uj4t15:hover{filter:brightness(.96)}.r8uj4t16{animation:r8uj4t1 1.2s ease-out}.r8uj4t17{position:relative;display:inline}.r8uj4t18{margin-top:var(--rc-space-lg)}.r8uj4t19{border:none;border-top:1px solid var(--rc-border);margin:var(--rc-space-lg) 0 var(--rc-space-md)}.r8uj4t1a{list-style-type:decimal;padding-left:var(--rc-space-lg);font-size:var(--rc-font-size-small);color:var(--rc-text-secondary);line-height:1.6}.r8uj4t1b{margin-bottom:var(--rc-space-sm);padding-left:var(--rc-space-xs)}.r8uj4t1c{display:inline-flex;align-items:center;margin-left:var(--rc-space-xs);color:var(--rc-accent);text-decoration:none;font-size:.85em;transition:opacity .15s ease;font-family:var(--rc-font-mono)}.r8uj4t1c:hover{opacity:.7}.r8uj4t1d{display:flex;align-items:center;gap:var(--rc-space-sm);list-style-type:none}.r8uj4t1e{flex-shrink:0;color:var(--rc-text-secondary);font-size:var(--rc-font-size-small);font-weight:600;min-width:1.5em}.r8uj4t1f{flex:1;border:1px solid var(--rc-border);border-radius:var(--rc-radius-sm);padding:var(--rc-space-xs) var(--rc-space-sm);font-size:var(--rc-font-size-small);color:var(--rc-text);background-color:transparent;outline:none;transition:border-color .15s ease}.r8uj4t1f:focus{border-color:var(--rc-accent)}.r8uj4t1g{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border:none;background:none;color:var(--rc-text-secondary);cursor:pointer;border-radius:var(--rc-radius-sm);font-size:14px;transition:color .15s ease,background-color .15s ease}.r8uj4t1g:hover{color:#ef4444;background-color:#ef44441a}.r8uj4t1h{position:absolute;display:flex;align-items:center;justify-content:center;width:20px;height:20px;cursor:grab;border-radius:var(--rc-radius-sm);color:var(--rc-text-secondary);opacity:.4;transition:opacity .15s ease,background-color .15s ease;z-index:10}.r8uj4t1h:hover{opacity:1;background-color:var(--rc-fill-secondary)}.r8uj4t1h:active{cursor:grabbing}.r8uj4t1i{position:absolute;height:2px;background-color:var(--rc-accent);border-radius:1px;pointer-events:none;z-index:10}.r8uj4t1j{margin:2em 0;padding:0 1em;background-color:transparent;border:none;border-radius:0}.r8uj4t2 mark{background:transparent}.r8uj4t2 img{max-width:100%;height:auto;border-radius:var(--rc-radius-md)}.r8uj4t2>*:first-child,.r8uj4t2 .rich-editor__content>*:first-child{margin-top:0}.r8uj4t2>*:last-child,.r8uj4t2 .rich-editor__content>*:last-child{margin-bottom:0}.r8uj4tc svg{flex-shrink:0}.r8uj4td:hover .r8uj4tc{opacity:.5}.r8uj4td:hover .r8uj4tc:hover{opacity:1}.r8uj4te:hover .r8uj4tc{opacity:.5}.r8uj4te:hover .r8uj4tc:hover{opacity:1}.r8uj4tf:hover .r8uj4tc{opacity:.5}.r8uj4tf:hover .r8uj4tc:hover{opacity:1}.r8uj4tg:hover .r8uj4tc{opacity:.5}.r8uj4tg:hover .r8uj4tc:hover{opacity:1}.r8uj4th:hover .r8uj4tc{opacity:.5}.r8uj4th:hover .r8uj4tc:hover{opacity:1}.r8uj4ti:hover .r8uj4tc{opacity:.5}.r8uj4ti:hover .r8uj4tc:hover{opacity:1}.r8uj4tk img{width:1em;height:1em;border-radius:2px;object-fit:contain}.r8uj4tk svg{width:.9em;height:.9em}.r8uj4to .r8uj4tl{list-style-type:lower-alpha}.r8uj4to .r8uj4tm{list-style-type:circle}.r8uj4tr>*,.r8uj4tq>*{background-image:linear-gradient(var(--rc-text-secondary),var(--rc-text-secondary));background-size:0% 1.5px;background-position:left center;background-repeat:no-repeat;transition:background-size .35s cubic-bezier(.4,0,.2,1) .15s,opacity .15s ease}.r8uj4tr>*{background-size:100% 1.5px;opacity:.5}.r8uj4ts>.r8uj4t3:first-child{margin-top:0}.r8uj4ts>.r8uj4t3:last-child{margin-bottom:0}.r8uj4tx tbody tr:last-child .r8uj4tv{border-bottom:none}.r8uj4tv .r8uj4t3{margin:0;padding:0;line-height:inherit}.r8uj4tv>:first-child{margin-top:0}.r8uj4tv>:last-child{margin-bottom:0}.r8uj4tw .r8uj4t3{margin:0;padding:0;line-height:inherit}.r8uj4tw>:first-child{margin-top:0}.r8uj4tw>:last-child{margin-bottom:0}@supports (animation-timeline: view()){.r8uj4tb{--rc-hl-highlighted: 0;animation:r8uj4t0 steps(1) both;animation-timeline:view();animation-range:entry 100% cover 10%}}._1o2d5g50{margin:var(--rc-space-md) 0;border:none;background-color:transparent;interpolate-size:allow-keywords}._1o2d5g51{display:flex;align-items:flex-start;gap:var(--rc-space-sm);cursor:pointer;user-select:none;padding:var(--rc-space-xs) 0;color:var(--rc-text);font-weight:500;font-size:1em;line-height:var(--rc-line-height);list-style:none;outline:none;border-radius:var(--rc-radius-sm);transition:opacity .2s ease,color .2s ease,box-shadow .2s ease}._1o2d5g51:hover{opacity:.82}._1o2d5g51:focus-visible{box-shadow:0 0 0 2px var(--rc-accent-light)}._1o2d5g51::-webkit-details-marker{display:none}._1o2d5g51::marker{content:"";display:none}._1o2d5g52{flex:1;min-width:0}._1o2d5g53{display:inline-flex;align-items:center;justify-content:center;width:1.25rem;height:1.25rem;position:relative;top:.25rem;flex-shrink:0;color:var(--rc-text-tertiary);transform-origin:center;transition:transform .35s cubic-bezier(.4,0,.2,1),color .2s ease}._1o2d5g54{margin-top:var(--rc-space-xs);padding:var(--rc-space-sm) var(--rc-space-xl);color:var(--rc-text-secondary);background-color:color-mix(in srgb,var(--rc-accent) 6%,var(--rc-bg-secondary));border-radius:var(--rc-radius-md)}._1o2d5g51:hover ._1o2d5g53{color:var(--rc-text-secondary)}._1o2d5g50[open] ._1o2d5g53{color:var(--rc-accent);transform:rotate(90deg)}._1o2d5g50::details-content{display:block;height:0;overflow:hidden;opacity:0;content-visibility:hidden;transition:height .4s cubic-bezier(.4,0,.2,1),opacity .4s cubic-bezier(.4,0,.2,1),content-visibility .4s cubic-bezier(.4,0,.2,1) allow-discrete}._1o2d5g50[open]::details-content{height:auto;opacity:1;content-visibility:visible}._1o2d5g54>.r8uj4t3:first-child{margin-top:0}._1o2d5g54>.r8uj4t3:last-child{margin-bottom:0}.v10dui0{max-width:var(--rc-max-width);font-size:var(--rc-font-size-base);line-height:1.75;color:var(--rc-text)}.v10dui0 .r8uj4t3{margin-top:1.5em;margin-bottom:1.5em}.v10dui0 .r8uj4td{color:var(--rc-text);font-weight:800;font-size:3em;margin-top:0;margin-bottom:.8333333333333334em;line-height:1}.v10dui0 .r8uj4te{color:var(--rc-text);font-weight:700;font-size:1.875em;margin-top:1.8666666666666667em;margin-bottom:1.0666666666666667em;line-height:1.3333333}.v10dui0 .r8uj4tf{color:var(--rc-text);font-weight:600;font-size:1.5em;margin-top:1.6666666666666667em;margin-bottom:.6666666666666666em;line-height:1.5}.v10dui0 .r8uj4tg{color:var(--rc-text);font-weight:600;margin-top:2em;margin-bottom:.5em;line-height:1.5625}.v10dui0 .r8uj4te+*,.v10dui0 .r8uj4tf+*,.v10dui0 .r8uj4tg+*{margin-top:0}.v10dui0 .r8uj4ts{font-weight:500;font-style:italic;color:var(--rc-text);margin-top:2.5em;margin-bottom:2.5em;padding-left:calc(1.5em + 4px);background-color:transparent;border-radius:0;quotes:"“""”""‘""’"}.v10dui0 .r8uj4ts .r8uj4t3:first-of-type:before{content:open-quote}.v10dui0 .r8uj4ts .r8uj4t3:last-of-type:after{content:close-quote}.v10dui0 .r8uj4ts .r8uj4t3:first-child{margin-top:0}.v10dui0 .r8uj4ts .r8uj4t3:last-child{margin-bottom:0}.v10dui0 .r8uj4ta{color:var(--rc-text);font-weight:600;font-size:.875em;background-color:var(--rc-code-bg);padding:.2em .4em;border-radius:var(--rc-radius-sm);font-family:var(--rc-font-mono)}.v10dui0 .r8uj4ta:before,.v10dui0 .r8uj4ta:after{content:"`";color:var(--rc-text-secondary);opacity:.5}.v10dui0 [contenteditable=true] .r8uj4ta:before,.v10dui0 [contenteditable=true] .r8uj4ta:after{content:""}.v10dui0 .rich-code-block{color:var(--rc-text);background-color:var(--rc-code-bg);border-radius:.375rem;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.75}.v10dui0 .rich-code-block pre{padding:1em 1.5em;margin:0}.v10dui0 .r8uj4tm,.v10dui0 .r8uj4tl{margin-top:1.5em;margin-bottom:1.5em;padding-left:1.75em}.v10dui0 .r8uj4tn{margin-top:.75em;margin-bottom:.75em}.v10dui0 .r8uj4tn:not(.r8uj4tr):not(.r8uj4tq){padding-left:.5em}.v10dui0 .r8uj4tn .r8uj4t3{margin-top:1em;margin-bottom:1em}.v10dui0 .r8uj4tn>.r8uj4t3:first-child{margin-top:1.5em}.v10dui0 .r8uj4tn>.r8uj4t3:last-child{margin-bottom:1.5em}.v10dui0 .r8uj4tm .r8uj4tm,.v10dui0 .r8uj4tm .r8uj4tl,.v10dui0 .r8uj4tl .r8uj4tm,.v10dui0 .r8uj4tl .r8uj4tl{margin-top:1em;margin-bottom:1em}.v10dui0 .r8uj4tx{margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.5}.v10dui0 .r8uj4tx .r8uj4t3{margin:0;padding:0;line-height:inherit}.v10dui0 .rich-image{margin-top:2em;margin-bottom:2em}.v10dui0 .rich-image>*{margin-top:0;margin-bottom:0}.v10dui0 .rich-image figcaption{color:var(--rc-text-secondary);font-size:.875em;line-height:1.5;margin-top:1em}.v10dui0 .r8uj4tt{border-color:var(--rc-hr-border);border-top-width:1px;width:60px;margin:3.5em auto}.v10dui0 .r8uj4tt+*{margin-top:0}.v10dui0 .r8uj4tj{font-weight:500;text-decoration:underline}.v10dui0 .rich-banner,.v10dui0 .rich-code-snippet,.v10dui0 ._1o2d5g50{margin:2em 0}.v10dui0>*:first-child{margin-top:0}.v10dui0>*:last-child{margin-bottom:0}.egstxq0{display:inline;padding:0 2px;vertical-align:middle}.egstxq1{display:block;text-align:center;padding:var(--rc-space-md) 0;overflow-x:auto;margin:var(--rc-space-md) 0}.egstxq2{font-family:var(--rc-font-mono);font-size:.9em;color:var(--rc-code-text);background-color:var(--rc-code-bg);padding:2px 6px;border-radius:var(--rc-radius-sm)}._14ko36c0{font-size:var(--rc-font-size-base);line-height:var(--rc-line-height)}._14ko36c0 .r8uj4t3{margin-bottom:.6em}._14ko36c0 .r8uj4td{font-size:1.35em;font-weight:700;margin-top:.8em;margin-bottom:.3em}._14ko36c0 .r8uj4te{font-size:1.2em;font-weight:700;margin-top:.7em;margin-bottom:.25em}._14ko36c0 .r8uj4tf{font-size:1.1em;font-weight:600;margin-top:.6em;margin-bottom:.2em}._14ko36c0 .r8uj4tg{font-size:1em;font-weight:600;margin-top:.5em;margin-bottom:.15em}._14ko36c0 .r8uj4th{font-size:.9em;font-weight:600;margin-top:.45em;margin-bottom:.1em}._14ko36c0 .r8uj4ti{font-size:.85em;font-weight:600;margin-top:.4em;margin-bottom:.1em}._14ko36c0 .r8uj4ts{padding:var(--rc-space-sm) var(--rc-space-md);padding-left:calc(var(--rc-space-md) + 3px);margin:var(--rc-space-sm) 0;font-size:.95em}._14ko36c0 .r8uj4ts:before{width:3px}._14ko36c0 .r8uj4tl,._14ko36c0 .r8uj4tm{margin-bottom:.6em;padding-left:var(--rc-space-md)}._14ko36c0 .r8uj4tn{margin-bottom:.1em}._14ko36c0 .rich-code-block{margin:var(--rc-space-sm) 0;border-radius:var(--rc-radius-sm);font-size:var(--rc-font-size-small)}._14ko36c0 .rich-code-block pre{padding:var(--rc-space-sm)}._14ko36c0 .line:before{display:none!important}._14ko36c0 .r8uj4tx{margin:var(--rc-space-sm) 0;font-size:var(--rc-font-size-small)}._14ko36c0 .r8uj4tv,._14ko36c0 .r8uj4tw{padding:var(--rc-space-xs) var(--rc-space-sm)}._14ko36c0 .rich-image{margin:var(--rc-space-sm) 0}._14ko36c0 .rich-image figcaption{font-size:var(--rc-font-size-small)}._14ko36c0 .r8uj4tt{border:none;border-top:1px solid var(--rc-hr-border);margin:var(--rc-space-lg) auto;width:60px}._14ko36c0 .r8uj4t1j{padding:var(--rc-space-sm) var(--rc-space-md);padding-left:var(--rc-space-lg);margin:var(--rc-space-sm) 0}._14ko36c0 .egstxq1{padding:var(--rc-space-sm) 0;margin:var(--rc-space-sm) 0}.ys4fw90{max-width:var(--rc-max-width);font-size:var(--rc-font-size-base);line-height:1.8;color:var(--rc-text)}.ys4fw90 .rich-editor__content>.r8uj4t3,.ys4fw90.rich-content:not([data-rich-nested=true])>.r8uj4t3{margin-top:1.25em;margin-bottom:1.25em;line-height:1.8}.ys4fw90.rich-content:not([data-rich-nested=true])>.r8uj4t3:not(:first-of-type){text-indent:2em}.ys4fw90 .rich-editor__content>.r8uj4t3:first-of-type,.ys4fw90.rich-content:not([data-rich-nested=true])>.r8uj4t3:first-of-type{margin-top:0}.ys4fw90 .rich-editor__content>.r8uj4t3:not(:first-of-type)>[data-lexical-text]:first-child{margin-inline-start:2em}.ys4fw90.rich-content:not([data-rich-nested=true])>.r8uj4t3:first-of-type:first-letter{float:left;font-size:2.4em;margin-right:.2em;line-height:1}.ys4fw90 .rich-editor__content>.r8uj4t3:first-of-type:first-letter{font-size:1.5em;font-weight:700;color:var(--rc-accent)}.ys4fw90 .rich-editor__content>.r8uj4t3:last-child,.ys4fw90.rich-content:not([data-rich-nested=true])>.r8uj4t3:last-child{margin-bottom:0}.ys4fw90 .r8uj4t4{font-family:var(--rc-font-family);font-weight:600;color:var(--rc-text)}.ys4fw90 .r8uj4td{font-size:2.25em;font-weight:800;line-height:1.1111111;margin-top:0;margin-bottom:.8888889em;letter-spacing:-.025em;color:var(--rc-text)}.ys4fw90 .r8uj4te{font-size:1.5em;font-weight:700;line-height:1.3333333;margin-top:2em;margin-bottom:1em;letter-spacing:-.025em;color:var(--rc-text)}.ys4fw90 .r8uj4te+*{margin-top:0}.ys4fw90 .r8uj4tf{font-size:1.25em;font-weight:600;line-height:1.6;margin-top:1.6em;margin-bottom:.6em;letter-spacing:-.025em;color:var(--rc-text)}.ys4fw90 .r8uj4tf+*{margin-top:0}.ys4fw90 .r8uj4tg{font-size:1.125em;font-weight:600;line-height:1.5;margin-top:1.5em;margin-bottom:.5em;color:var(--rc-text)}.ys4fw90 .r8uj4tg+*{margin-top:0}.ys4fw90 .r8uj4th{font-size:1em;font-weight:600;line-height:1.5;margin-top:1.5em;margin-bottom:.5em;color:var(--rc-text)}.ys4fw90 .r8uj4th+*{margin-top:0}.ys4fw90 .r8uj4ti{font-size:.875em;font-weight:600;line-height:1.5;margin-top:1.5em;margin-bottom:.5em;color:var(--rc-text);text-transform:uppercase}.ys4fw90 .r8uj4ti+*{margin-top:0}.ys4fw90 .r8uj4ts{font-style:normal;line-height:1.8;color:inherit;background-color:color-mix(in srgb,var(--rc-accent) 10%,transparent);margin-top:1.6em;margin-bottom:1.6em;margin-left:-1rem;margin-right:-1rem;padding:1em 2em;border-radius:0}.ys4fw90 .r8uj4ts:before{display:none}.ys4fw90 .r8uj4ts .r8uj4t3:first-child:first-letter{float:none;font-size:inherit;margin-right:0}.ys4fw90 .r8uj4tj{font-weight:500;text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:2px;transition:color .15s ease}.ys4fw90 .r8uj4tj:hover{text-decoration-thickness:2px}.ys4fw90 .r8uj4ta{font-size:.875em;font-family:var(--rc-font-mono);font-weight:500;padding:.2em .4em;border-radius:var(--rc-radius-sm);background-color:var(--rc-code-bg)}.ys4fw90 .r8uj4tl,.ys4fw90 .r8uj4tm{margin-top:1.25em;margin-bottom:1.25em;padding-left:1.625em}.ys4fw90 .r8uj4tl{list-style-type:decimal}.ys4fw90 .r8uj4tm{list-style-type:disc}.ys4fw90 .r8uj4tn{margin-top:.5em;margin-bottom:.5em}.ys4fw90 .r8uj4tn:not(.r8uj4tr):not(.r8uj4tq){padding-left:.375em}.ys4fw90 .r8uj4tn::marker{color:var(--rc-text-secondary)}.ys4fw90 .rich-code-block{font-size:.875em;line-height:1.7142857;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:var(--rc-radius-md);overflow-x:auto}.ys4fw90 .rich-code-block pre{padding:.8571429em 1.1428571em;margin:0}.ys4fw90 .r8uj4tx{margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.7142857}.ys4fw90 .r8uj4tx .r8uj4t3{margin:0;padding:0;line-height:inherit}.ys4fw90 .r8uj4tx .r8uj4t3:first-child:first-letter{float:none;font-size:inherit;margin-right:0}.ys4fw90 .rich-image{margin-top:2em;margin-bottom:2em}.ys4fw90 .rich-image img{border-radius:var(--rc-radius-md)}.ys4fw90 .rich-image figcaption{font-size:.875em;line-height:1.4285714;margin-top:.8571429em;color:var(--rc-text-secondary);text-align:center}.ys4fw90 .r8uj4tt{border:none;border-top:1px solid var(--rc-hr-border);opacity:.2;margin-top:.5rem;margin-bottom:.5rem;width:60px;margin-left:auto;margin-right:auto}.ys4fw90 .egstxq1{margin-top:1.6em;margin-bottom:1.6em;overflow-x:auto;padding:1em 0}.ys4fw90 .r8uj4ty{border-radius:var(--rc-radius-sm);padding-inline:.25em}.ys4fw90>*:first-child{margin-top:0}.ys4fw90>*:last-child{margin-bottom:0}._17ihk870{position:relative;margin:var(--rc-space-md) 0}._17ihk871{position:absolute;top:-36px;left:50%;transform:translate(-50%);display:flex;align-items:center;gap:2px;padding:4px 6px;border-radius:var(--rc-radius-md);pointer-events:none;background:var(--rc-bg);border:1px solid var(--rc-border);box-shadow:var(--rc-shadow-top-bar);z-index:10;user-select:none;white-space:nowrap;opacity:0;transition:opacity .15s ease}._17ihk872{display:flex;align-items:center;justify-content:center;width:24px;height:24px;color:var(--rc-text-secondary);flex-shrink:0}._17ihk873{display:flex;align-items:center;justify-content:center;min-width:24px;height:24px;padding:0 6px;border-radius:var(--rc-radius-sm);border:none;background:transparent;cursor:pointer;font-size:12px;font-weight:500;color:var(--rc-text-secondary);line-height:1;transition:color .15s ease,background-color .15s ease}._17ihk873:hover{background-color:var(--rc-fill-secondary);color:var(--rc-text)}._17ihk874{background:var(--rc-fill);font-weight:600;color:var(--rc-text)}._17ihk875{width:1px;height:16px;background:var(--rc-border);margin:0 2px;flex-shrink:0}._17ihk876{display:flex;align-items:center;justify-content:center;min-width:24px;height:24px;padding:0 6px;border-radius:var(--rc-radius-sm);border:none;background:transparent;cursor:pointer;color:var(--rc-text-secondary);transition:color .15s ease,background-color .15s ease}._17ihk876:hover{background-color:var(--rc-fill-secondary);color:var(--rc-text)}._17ihk877{display:grid;gap:var(--rc-space-md)}._17ihk878{min-width:0}._17ihk879{outline:none}._17ihk870:hover ._17ihk871,._17ihk870:focus-within ._17ihk871{opacity:1;pointer-events:auto}@keyframes _1x58dbf0{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes _1x58dbf6{to{transform:rotate(360deg)}}.rich-image-upload-dragging{position:relative;border-radius:var(--rc-radius-md);background-color:color-mix(in srgb,var(--rc-accent) 6%,transparent)}.rich-image-upload-dragging .rich-editor__content{outline:2px dashed color-mix(in srgb,var(--rc-accent) 48%,transparent);outline-offset:-2px}._1x58dbf1{position:absolute;right:.75rem;bottom:.75rem;z-index:25;display:flex;flex-direction:column;align-items:flex-end;gap:.375rem;pointer-events:none}._1x58dbf2{display:inline-flex;align-items:center;gap:.375rem;padding:.375rem .625rem;border-radius:var(--rc-radius-sm);border:1px solid var(--rc-border);background-color:color-mix(in srgb,var(--rc-bg) 95%,transparent);color:var(--rc-text);font-size:var(--rc-font-size-xs);line-height:1.2;box-shadow:var(--rc-shadow-top-bar);animation:_1x58dbf0 .12s ease-out}._1x58dbf4{border-color:color-mix(in srgb,var(--rc-accent) 35%,transparent)}._1x58dbf5{border-color:color-mix(in srgb,var(--rc-alert-caution) 45%,transparent);color:var(--rc-alert-caution)}._1x58dbf7{width:12px;height:12px;border-radius:50%;border:2px solid color-mix(in srgb,var(--rc-text-secondary) 35%,transparent);border-top-color:color-mix(in srgb,var(--rc-text) 65%,transparent);animation:_1x58dbf6 .75s linear infinite}._1x58dbf8._1x58dbf8{padding:0;gap:0;width:min(560px,calc(100vw - 2rem));overflow:hidden}._1x58dbf9{padding:.875rem 1rem .75rem;border-bottom:1px solid var(--rc-border)}._1x58dbfa{font-size:var(--rc-font-size-md);font-weight:600;color:var(--rc-text)}._1x58dbfb{display:flex;flex-direction:column;gap:.875rem;padding:.875rem 1rem}._1x58dbfc{display:flex;align-items:center;gap:.5rem}._1x58dbfd{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.5rem;border-radius:var(--rc-radius-md);border:1.5px dashed var(--rc-border);min-height:190px;padding:1.2rem;color:var(--rc-text-secondary);cursor:pointer;transition:border-color .15s ease,background-color .15s ease,color .15s ease}._1x58dbfd:hover{border-color:color-mix(in srgb,var(--rc-accent) 35%,transparent);background-color:color-mix(in srgb,var(--rc-accent) 6%,transparent);color:var(--rc-text)}._1x58dbff{border-color:color-mix(in srgb,var(--rc-accent) 55%,transparent);background-color:color-mix(in srgb,var(--rc-accent) 8%,transparent);color:var(--rc-text);transform:scale(1.01)}._1x58dbfg{cursor:progress;opacity:.9}._1x58dbfh{display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:var(--rc-radius-md);background-color:color-mix(in srgb,var(--rc-text) 6%,transparent)}._1x58dbfi{font-size:var(--rc-font-size-sm);font-weight:600;color:var(--rc-text)}._1x58dbfj{font-size:var(--rc-font-size-xs);color:var(--rc-text-secondary);text-align:center}._1x58dbfk{display:none}._1x58dbfl{display:flex;flex-direction:column;align-items:center;gap:.5rem}._1x58dbfm{display:inline-flex;align-items:center;gap:.375rem;font-size:var(--rc-font-size-sm);color:var(--rc-text)}._1x58dbfn{display:flex;align-items:center;gap:.5rem}._1x58dbfo{width:100%;border-radius:var(--rc-radius-sm);border:1px solid var(--rc-border);background-color:var(--rc-bg);color:var(--rc-text);height:34px;padding:0 .625rem;font-size:var(--rc-font-size-sm);outline:none;transition:border-color .15s ease}._1x58dbfo:focus{border-color:color-mix(in srgb,var(--rc-accent) 50%,transparent)}._1x58dbfo::placeholder{color:var(--rc-text-secondary)}._1x58dbfp{border-radius:var(--rc-radius-md);border:1px solid var(--rc-border);overflow:hidden;background-color:color-mix(in srgb,var(--rc-text) 2%,transparent)}._1x58dbfq{display:block;width:100%;max-height:220px;object-fit:cover}._1x58dbfr{display:inline-flex;align-items:center;gap:.4rem;font-size:var(--rc-font-size-xs);color:var(--rc-text-secondary)}._1x58dbfs{display:flex;align-items:center;justify-content:space-between;gap:.75rem;border-top:1px solid var(--rc-border);background-color:color-mix(in srgb,var(--rc-text) 2%,transparent);padding:.65rem 1rem}.b94s950{position:relative;max-width:var(--rc-max-width);margin:0 auto;flex:1;min-height:0;width:100%}.b94s951{outline:none;min-height:100px;width:100%;padding:var(--ce-padding-top, 12px) var(--rc-space-md) 12px var(--rc-space-md)}.b94s952{position:absolute;top:var(--ce-padding-top, 12px);left:var(--rc-space-md);color:var(--rc-text-secondary);pointer-events:none;user-select:none}
@@ -3,10 +3,10 @@ import { R } from "./RubyRenderer-CJQmODir.js";
3
3
  import { jsx } from "react/jsx-runtime";
4
4
  import { e as clsx, d as sharedStyles, s as semanticClassNames } from "./katex.css-Csc-7N7u.js";
5
5
  import { a, c, g, k, b, n, r } from "./katex.css-Csc-7N7u.js";
6
- import { m as getTagBgColor } from "./theme-D_efLk4K.js";
7
- import { N, n as n2, o, u as u2, p } from "./theme-D_efLk4K.js";
6
+ import { m as getTagBgColor } from "./theme-CrJbATnf.js";
7
+ import { N, n as n2, o, u as u2, p } from "./theme-CrJbATnf.js";
8
8
  import { F, R as R2, a as a2, c as c2, u as u3, b as b2, d, e, f, g as g2 } from "./KaTeXRenderer-CQyQzNTJ.js";
9
- import { n as n3, k as k2, l, m, u as u4 } from "./config-Bysik8H3.js";
9
+ import { n as n3, k as k2, l, m, u as u4 } from "./config-mAejoug-.js";
10
10
  import { d as d2, a as a3, g as g3, b as b3 } from "./grid.css-Md5-Cfx_.js";
11
11
  import { articleTheme, commentTheme, noteTheme, vars } from "@haklex/rich-style-token/styles";
12
12
  function TagRenderer({ text }) {
@@ -1 +1 @@
1
- {"version":3,"file":"shared.css.d.ts","sourceRoot":"","sources":["../../src/styles/shared.css.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsDrB,CAAC;AA0BX,eAAO,MAAM,WAAW,QAOtB,CAAC;AAEH,eAAO,MAAM,SAAS,QAIpB,CAAC;AAEH,eAAO,MAAM,QAAQ,QAEnB,CAAC;AAEH,eAAO,MAAM,UAAU,QAErB,CAAC;AAEH,eAAO,MAAM,aAAa,QAExB,CAAC;AAEH,eAAO,MAAM,iBAAiB,QAG5B,CAAC;AAEH,eAAO,MAAM,eAAe,QAG1B,CAAC;AAEH,eAAO,MAAM,aAAa,QAGxB,CAAC;AAEH,eAAO,MAAM,QAAQ,QAanB,CAAC;AAEH,eAAO,MAAM,aAAa,QAkCxB,CAAC;AAEH,eAAO,MAAM,aAAa,QAYxB,CAAC;AAEH,eAAO,MAAM,SAAS,QAapB,CAAC;AAEH,eAAO,MAAM,SAAS,QAapB,CAAC;AAEH,eAAO,MAAM,SAAS,QAapB,CAAC;AAEH,eAAO,MAAM,SAAS,QAapB,CAAC;AAEH,eAAO,MAAM,SAAS,QAapB,CAAC;AAEH,eAAO,MAAM,SAAS,QAcpB,CAAC;AAEH,eAAO,MAAM,IAAI,QAsBf,CAAC;AAEH,eAAO,MAAM,WAAW,QAKtB,CAAC;AAEH,eAAO,MAAM,MAAM,QAIjB,CAAC;AAEH,eAAO,MAAM,MAAM,QAIjB,CAAC;AAEH,eAAO,MAAM,QAAQ,QAEnB,CAAC;AAEH,eAAO,MAAM,cAAc,QAEzB,CAAC;AAEH,eAAO,MAAM,SAAS,QAGpB,CAAC;AAkDH,eAAO,MAAM,iBAAiB,QAQ5B,CAAC;AAEH,eAAO,MAAM,eAAe,QAmB1B,CAAC;AAEH,eAAO,MAAM,KAAK,QAqBhB,CAAC;AAEH,eAAO,MAAM,EAAE,QAKb,CAAC;AAEH,eAAO,MAAM,sBAAsB,QAEjC,CAAC;AAEH,eAAO,MAAM,SAAS,QAapB,CAAC;AAEH,eAAO,MAAM,eAAe,QAsB1B,CAAC;AAEH,eAAO,MAAM,KAAK,QAShB,CAAC;AAEH,eAAO,MAAM,OAAO,QAqBlB,CAAC;AAEH,eAAO,MAAM,eAAe,QAI1B,CAAC;AAEH,eAAO,MAAM,GAAG,QAOd,CAAC;AAEH,eAAO,MAAM,OAAO,QAoBlB,CAAC;AAEH,eAAO,MAAM,IAAI,QAyBf,CAAC;AAEH,eAAO,MAAM,MAAM,QAKjB,CAAC;AAEH,eAAO,MAAM,QAAQ,QAGnB,CAAC;AAEH,eAAO,MAAM,WAAW,QAmBtB,CAAC;AAEH,eAAO,MAAM,iBAAiB,QAE5B,CAAC;AAEH,eAAO,MAAM,kBAAkB,QAG7B,CAAC;AAEH,eAAO,MAAM,eAAe,QAE1B,CAAC;AAEH,eAAO,MAAM,sBAAsB,QAIjC,CAAC;AAEH,eAAO,MAAM,mBAAmB,QAM9B,CAAC;AAEH,eAAO,MAAM,mBAAmB,QAG9B,CAAC;AAEH,eAAO,MAAM,eAAe,QAc1B,CAAC;AAEH,eAAO,MAAM,uBAAuB,QAKlC,CAAC;AAEH,eAAO,MAAM,sBAAsB,QAMjC,CAAC;AAEH,eAAO,MAAM,wBAAwB,QAenC,CAAC;AAEH,eAAO,MAAM,yBAAyB,QAoBpC,CAAC;AAEH,eAAO,MAAM,UAAU,QAsBrB,CAAC;AAEH,eAAO,MAAM,aAAa,QAOxB,CAAC;AAEH,eAAO,MAAM,KAAK,QAMhB,CAAC;AAoJH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsDkC,CAAC;AAE5D,MAAM,MAAM,cAAc,GAAG,MAAM,OAAO,YAAY,CAAC"}
1
+ {"version":3,"file":"shared.css.d.ts","sourceRoot":"","sources":["../../src/styles/shared.css.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsDrB,CAAC;AA0BX,eAAO,MAAM,WAAW,QAOtB,CAAC;AAEH,eAAO,MAAM,SAAS,QAIpB,CAAC;AAEH,eAAO,MAAM,QAAQ,QAEnB,CAAC;AAEH,eAAO,MAAM,UAAU,QAErB,CAAC;AAEH,eAAO,MAAM,aAAa,QAExB,CAAC;AAEH,eAAO,MAAM,iBAAiB,QAG5B,CAAC;AAEH,eAAO,MAAM,eAAe,QAG1B,CAAC;AAEH,eAAO,MAAM,aAAa,QAGxB,CAAC;AAEH,eAAO,MAAM,QAAQ,QAanB,CAAC;AAEH,eAAO,MAAM,aAAa,QAkCxB,CAAC;AAEH,eAAO,MAAM,aAAa,QAYxB,CAAC;AAEH,eAAO,MAAM,SAAS,QAapB,CAAC;AAEH,eAAO,MAAM,SAAS,QAapB,CAAC;AAEH,eAAO,MAAM,SAAS,QAapB,CAAC;AAEH,eAAO,MAAM,SAAS,QAapB,CAAC;AAEH,eAAO,MAAM,SAAS,QAapB,CAAC;AAEH,eAAO,MAAM,SAAS,QAcpB,CAAC;AAEH,eAAO,MAAM,IAAI,QAsBf,CAAC;AAEH,eAAO,MAAM,WAAW,QAKtB,CAAC;AAEH,eAAO,MAAM,MAAM,QAIjB,CAAC;AAEH,eAAO,MAAM,MAAM,QAIjB,CAAC;AAEH,eAAO,MAAM,QAAQ,QAEnB,CAAC;AAEH,eAAO,MAAM,cAAc,QAEzB,CAAC;AAEH,eAAO,MAAM,SAAS,QAGpB,CAAC;AAkDH,eAAO,MAAM,iBAAiB,QAQ5B,CAAC;AAEH,eAAO,MAAM,eAAe,QAmB1B,CAAC;AAEH,eAAO,MAAM,KAAK,QAqBhB,CAAC;AAEH,eAAO,MAAM,EAAE,QAKb,CAAC;AAEH,eAAO,MAAM,sBAAsB,QAEjC,CAAC;AAEH,eAAO,MAAM,SAAS,QAapB,CAAC;AAEH,eAAO,MAAM,eAAe,QAsB1B,CAAC;AAEH,eAAO,MAAM,KAAK,QAShB,CAAC;AAEH,eAAO,MAAM,OAAO,QAqBlB,CAAC;AAcH,eAAO,MAAM,eAAe,QAI1B,CAAC;AAEH,eAAO,MAAM,GAAG,QAOd,CAAC;AAEH,eAAO,MAAM,OAAO,QAoBlB,CAAC;AAEH,eAAO,MAAM,IAAI,QAyBf,CAAC;AAEH,eAAO,MAAM,MAAM,QAKjB,CAAC;AAEH,eAAO,MAAM,QAAQ,QAGnB,CAAC;AAEH,eAAO,MAAM,WAAW,QAmBtB,CAAC;AAEH,eAAO,MAAM,iBAAiB,QAE5B,CAAC;AAEH,eAAO,MAAM,kBAAkB,QAG7B,CAAC;AAEH,eAAO,MAAM,eAAe,QAE1B,CAAC;AAEH,eAAO,MAAM,sBAAsB,QAIjC,CAAC;AAEH,eAAO,MAAM,mBAAmB,QAM9B,CAAC;AAEH,eAAO,MAAM,mBAAmB,QAG9B,CAAC;AAEH,eAAO,MAAM,eAAe,QAc1B,CAAC;AAEH,eAAO,MAAM,uBAAuB,QAKlC,CAAC;AAEH,eAAO,MAAM,sBAAsB,QAMjC,CAAC;AAEH,eAAO,MAAM,wBAAwB,QAenC,CAAC;AAEH,eAAO,MAAM,yBAAyB,QAoBpC,CAAC;AAEH,eAAO,MAAM,UAAU,QAsBrB,CAAC;AAEH,eAAO,MAAM,aAAa,QAOxB,CAAC;AAEH,eAAO,MAAM,KAAK,QAMhB,CAAC;AAoJH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsDkC,CAAC;AAE5D,MAAM,MAAM,cAAc,GAAG,MAAM,OAAO,YAAY,CAAC"}
@@ -841,6 +841,9 @@ class SpoilerNode extends ElementNode {
841
841
  function $createSpoilerNode() {
842
842
  return new SpoilerNode();
843
843
  }
844
+ function $isSpoilerNode(node) {
845
+ return node instanceof SpoilerNode;
846
+ }
844
847
  function stringToHue(str) {
845
848
  let hash = 0;
846
849
  for (let i = 0; i < str.length; i++) {
@@ -1023,12 +1026,13 @@ export {
1023
1026
  editorTheme as n,
1024
1027
  extractTextContent as o,
1025
1028
  useOptionalNestedContentRenderer as p,
1026
- $isAlertQuoteNode as q,
1027
- AlertRenderer as r,
1028
- AlertQuoteNode as s,
1029
- $createKaTeXInlineNode as t,
1029
+ $createSpoilerNode as q,
1030
+ $isSpoilerNode as r,
1031
+ $isAlertQuoteNode as s,
1032
+ AlertRenderer as t,
1030
1033
  useNestedContentRenderer as u,
1031
- $createKaTeXBlockNode as v,
1032
- $createFootnoteNode as w,
1033
- $createSpoilerNode as x
1034
+ AlertQuoteNode as v,
1035
+ $createKaTeXInlineNode as w,
1036
+ $createKaTeXBlockNode as x,
1037
+ $createFootnoteNode as y
1034
1038
  };
@@ -0,0 +1,8 @@
1
+ import { RangeSelection } from 'lexical';
2
+ export declare function $selectionTouchesSpoiler(selection: RangeSelection): boolean;
3
+ /**
4
+ * Toggle inline spoiler on the current selection: wraps plain text in {@link SpoilerNode},
5
+ * or removes spoiler when the selection touches existing spoiler content.
6
+ */
7
+ export declare function $toggleSpoilerSelection(): void;
8
+ //# sourceMappingURL=toggle-spoiler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toggle-spoiler.d.ts","sourceRoot":"","sources":["../../src/utils/toggle-spoiler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,cAAc,EAAE,MAAM,SAAS,CAAC;AA2B3D,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,cAAc,GAAG,OAAO,CAE3E;AAUD;;;GAGG;AACH,wBAAgB,uBAAuB,IAAI,IAAI,CA8B9C"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@haklex/rich-editor",
3
- "version": "0.0.86",
3
+ "version": "0.0.88",
4
4
  "description": "Core rich text editor based on Lexical",
5
5
  "repository": {
6
6
  "type": "git",
@@ -49,9 +49,9 @@
49
49
  "@lexical/code-core": "^0.42.0",
50
50
  "nanoid": "^5.1.6",
51
51
  "thumbhash": "^0.1.1",
52
- "@haklex/rich-editor-ui": "0.0.86",
53
- "@haklex/rich-headless": "0.0.86",
54
- "@haklex/rich-style-token": "0.0.86"
52
+ "@haklex/rich-editor-ui": "0.0.88",
53
+ "@haklex/rich-style-token": "0.0.88",
54
+ "@haklex/rich-headless": "0.0.88"
55
55
  },
56
56
  "devDependencies": {
57
57
  "@lexical/extension": "^0.42.0",