fika-editor 3.0.1 → 3.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. package/README.md +8 -0
  2. package/dist/embed/183.js +144 -0
  3. package/dist/embed/_e2e-statika.json +10909 -0
  4. package/dist/embed/agentic-manifest.json +188 -13
  5. package/dist/embed/chunks/1131.css +1 -1
  6. package/dist/embed/chunks/1131.js +1 -1
  7. package/dist/embed/chunks/1668.js +1 -1
  8. package/dist/embed/chunks/1904.js +1 -1
  9. package/dist/embed/chunks/2020.js +43 -37
  10. package/dist/embed/chunks/2289.js +1 -1
  11. package/dist/embed/chunks/2595.js +1 -0
  12. package/dist/embed/chunks/2796.js +1 -1
  13. package/dist/embed/chunks/2807.js +1 -1
  14. package/dist/embed/chunks/3030.js +1 -1
  15. package/dist/embed/chunks/3729.js +3 -3
  16. package/dist/embed/chunks/4467.js +1 -1
  17. package/dist/embed/chunks/4552.js +1 -1
  18. package/dist/embed/chunks/4625.js +1 -1
  19. package/dist/embed/chunks/4891.js +2 -2
  20. package/dist/embed/chunks/4950.js +1 -1
  21. package/dist/embed/chunks/4975.js +5 -5
  22. package/dist/embed/chunks/5792.js +1 -1
  23. package/dist/embed/chunks/627.js +1 -1
  24. package/dist/embed/chunks/6567.js +1 -1
  25. package/dist/embed/chunks/717.js +2 -2
  26. package/dist/embed/chunks/7175.js +1 -1
  27. package/dist/embed/chunks/7311.js +1 -1
  28. package/dist/embed/chunks/7594.js +1 -1
  29. package/dist/embed/chunks/7854.js +1 -1
  30. package/dist/embed/chunks/788.js +1 -1
  31. package/dist/embed/chunks/7916.js +1 -1
  32. package/dist/embed/chunks/8212.js +1 -1
  33. package/dist/embed/chunks/8239.js +1 -1
  34. package/dist/embed/chunks/8645.js +1 -1
  35. package/dist/embed/chunks/8716.js +3 -3
  36. package/dist/embed/chunks/9121.js +1 -1
  37. package/dist/embed/chunks/9465.js +2 -2
  38. package/dist/embed/fika-embed.css +1 -1
  39. package/dist/embed/fika-embed.js +9 -2
  40. package/dist/types/components/Button.d.ts +2 -1
  41. package/dist/types/components/ColorSwatches.d.ts +2 -1
  42. package/dist/types/components/Draggable.d.ts +9 -4
  43. package/dist/types/components/Slider.d.ts +1 -0
  44. package/dist/types/configs/animation.d.ts +2 -0
  45. package/dist/types/configs/font.d.ts +0 -2
  46. package/dist/types/configs/templates.d.ts +1 -5
  47. package/dist/types/configs/transitions.d.ts +28 -0
  48. package/dist/types/embed/agentic/templates.d.ts +2 -1
  49. package/dist/types/embed/agentic/types.d.ts +64 -1
  50. package/dist/types/embed/types.d.ts +8 -0
  51. package/dist/types/hooks/useScreening.d.ts +5 -3
  52. package/dist/types/i18n/i18n-types.d.ts +206 -38
  53. package/dist/types/paint/rasterResources.d.ts +7 -0
  54. package/dist/types/paint/scheduler.d.ts +17 -0
  55. package/dist/types/paint/slidePainter.d.ts +17 -0
  56. package/dist/types/paint/textPainter.d.ts +31 -0
  57. package/dist/types/store/importConfirm.d.ts +6 -1
  58. package/dist/types/store/index.d.ts +2 -2
  59. package/dist/types/store/slides.d.ts +30 -8
  60. package/dist/types/types/injectKey.d.ts +6 -0
  61. package/dist/types/types/slides.d.ts +3 -2
  62. package/dist/types/utils/canvasHitTest.d.ts +14 -2
  63. package/dist/types/utils/commitQueue.d.ts +13 -0
  64. package/dist/types/utils/cssLength.d.ts +8 -0
  65. package/dist/types/utils/database.d.ts +6 -1
  66. package/dist/types/utils/element.d.ts +18 -0
  67. package/dist/types/utils/elementOutline.d.ts +33 -3
  68. package/dist/types/utils/exportFonts.d.ts +7 -3
  69. package/dist/types/utils/imageBitmapCache.d.ts +14 -2
  70. package/dist/types/utils/imageSize.d.ts +9 -0
  71. package/dist/types/utils/importApply.d.ts +10 -0
  72. package/dist/types/utils/importTransition.d.ts +19 -0
  73. package/dist/types/utils/layerStack.d.ts +24 -0
  74. package/dist/types/utils/liveElementOffset.d.ts +6 -5
  75. package/dist/types/utils/liveElementSize.d.ts +20 -1
  76. package/dist/types/utils/mediaIntern.d.ts +21 -0
  77. package/dist/types/utils/placeholderLayout.d.ts +25 -6
  78. package/dist/types/utils/prosemirror/commitEditor.d.ts +3 -0
  79. package/dist/types/utils/prosemirror/index.d.ts +1 -0
  80. package/dist/types/utils/screening.d.ts +10 -0
  81. package/dist/types/utils/shapePaint.d.ts +23 -0
  82. package/dist/types/utils/simpleShape.d.ts +5 -0
  83. package/dist/types/utils/slideOrder.d.ts +10 -0
  84. package/dist/types/utils/snap.d.ts +9 -0
  85. package/dist/types/utils/tableCellStyle.d.ts +12 -0
  86. package/dist/types/utils/tableStyleTarget.d.ts +3 -0
  87. package/dist/types/utils/textContrast.d.ts +25 -1
  88. package/dist/types/utils/textFit.d.ts +39 -13
  89. package/dist/types/views/Editor/Canvas/LayerStackPanel.d.ts +14 -0
  90. package/dist/types/views/Editor/Canvas/Operate/ResizeHandler.d.ts +2 -1
  91. package/dist/types/views/Editor/Thumbnails/paneSize.d.ts +7 -3
  92. package/dist/types/views/Editor/Thumbnails/useThumbnailVirtualizer.d.ts +1 -0
  93. package/dist/types/views/Editor/Toolbar/common/ElementOutline.d.ts +2 -0
  94. package/dist/types/views/components/ThumbnailSlide/CanvasSlideThumb.d.ts +11 -0
  95. package/dist/types/views/components/ThumbnailSlide/index.d.ts +3 -0
  96. package/dist/types/views/components/ThumbnailSlide/paintedSlide.d.ts +1 -1
  97. package/dist/types/views/components/element/TableElement/CustomTextarea.d.ts +2 -1
  98. package/dist/types/views/components/element/hooks/useAutoShapeTextHeight.d.ts +3 -1
  99. package/docs/RELEASE.md +2 -0
  100. package/package.json +22 -21
  101. package/dist/embed/350.js +0 -164
  102. package/dist/embed/chunks/1932.js +0 -1
  103. package/dist/embed/chunks/5901.js +0 -1
  104. package/dist/types/previewRaster/index.d.ts +0 -9
  105. package/dist/types/previewRaster/painters/background.d.ts +0 -2
  106. package/dist/types/previewRaster/painters/booth.d.ts +0 -13
  107. package/dist/types/previewRaster/painters/chart.d.ts +0 -2
  108. package/dist/types/previewRaster/painters/code.d.ts +0 -2
  109. package/dist/types/previewRaster/painters/image.d.ts +0 -2
  110. package/dist/types/previewRaster/painters/index.d.ts +0 -3
  111. package/dist/types/previewRaster/painters/line.d.ts +0 -2
  112. package/dist/types/previewRaster/painters/media.d.ts +0 -2
  113. package/dist/types/previewRaster/painters/shape.d.ts +0 -2
  114. package/dist/types/previewRaster/painters/table.d.ts +0 -2
  115. package/dist/types/previewRaster/painters/text.d.ts +0 -2
  116. package/dist/types/previewRaster/planSlideRaster.d.ts +0 -19
  117. package/dist/types/previewRaster/rasterCache.d.ts +0 -19
  118. package/dist/types/previewRaster/scheduler.d.ts +0 -4
  119. package/dist/types/previewRaster/stagePool.d.ts +0 -36
  120. package/dist/types/previewRaster/stats.d.ts +0 -10
  121. package/dist/types/previewRaster/subscribeSlides.d.ts +0 -10
  122. package/dist/types/previewRaster/types.d.ts +0 -12
  123. package/dist/types/utils/elementPaint.d.ts +0 -129
  124. package/dist/types/views/components/element/ChartElement/chartBooth.d.ts +0 -2
  125. /package/dist/embed/{350.css → 183.css} +0 -0
  126. /package/dist/types/{previewRaster → utils}/diffPaintedSlide.d.ts +0 -0
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "schemaVersion": 2,
3
3
  "package": "fika-editor",
4
- "packageVersion": "3.0.1",
5
- "generatedAt": "2026-08-15T05:57:45.719Z",
4
+ "packageVersion": "3.0.3",
5
+ "generatedAt": "2026-08-18T11:23:08.219Z",
6
6
  "summary": "Authoring guidance for the Fika agentic bridge. SLIDE NUMBERS START AT 1 everywhere: payload.index, result.data.slideIndex, screenshot.slideIndex, getState().slideIndex, selectedSlideIndexes, plan.slides[].index, and plan.loudIndex are the SAME 1-based number — never subtract or add 1. First slide = 1; last existing = slideCount; omit index to append; index === slideCount+1 also appends; 1 ≤ index ≤ slideCount on createFromLayout REPLACES that slide. The recommended way to build a deck from scratch: (1) ONE bootstrap call deck.setup({ styleId, slideCount, title? }) — applies the visual identity, returns the composition plan (anchors + loud slide), and optionally builds the title slide together; prefer this over separate styles.catalog / deck.applyStyle / deck.planComposition, then (2) for each slide pick a recipe + visual variant from layouts.catalog and add it with slides.createFromLayout({ layoutId, variantId, slots }), preferring a variant whose anchor matches the plan (when variantId is omitted the engine picks a filled/full-width match; an explicit variantId is kept). The engine themes, positions, sanitizes slot markers the layout already draws, AND auto-fits every text box (via responsive measurement) so content does not overflow, and it runs a deterministic QA pass on each slide (overlap / contrast / density / monotony) so you can fix issues in the same turn. Author slot content as Markdown/plain text or structured values (arrays for bullets, { labels, series } for charts) — never hand-written HTML. Host-registered templates (deck.applyTemplate + slides.insertFromTemplate) are optional when the embed host supplies them. Avoid blank slides.create / hand-placed elements unless no layout fits. Pair this with the machine schema (command payload/return types) in the same manifest.",
7
- "commandCount": 179,
7
+ "commandCount": 197,
8
8
  "designSystem": {
9
9
  "summary": "Fika lays elements out in a fixed pixel coordinate space, not inches. Prefer the styles + layouts flow (deck.applyStyle + slides.createFromLayout) so colors, contrast, fonts and layout are chosen for you instead of hand-picked. Host-registered templates (deck.applyTemplate + slides.insertFromTemplate) are optional when the embed host supplies them. These tokens describe the *fallback* defaults for manual placement only.",
10
10
  "coordinateSystem": {
@@ -58,7 +58,7 @@
58
58
  "domains": [
59
59
  {
60
60
  "id": "deck",
61
- "commandCount": 11,
61
+ "commandCount": 14,
62
62
  "title": "Deck",
63
63
  "summary": "Whole-document state: title, theme, viewport, templates, plus full get/set/patch.",
64
64
  "whenToUse": "Apply a style with deck.setup / deck.applyStyle up front; set the viewport once; use whole-document import/export at persistence boundaries."
@@ -100,7 +100,7 @@
100
100
  },
101
101
  {
102
102
  "id": "slides",
103
- "commandCount": 19,
103
+ "commandCount": 20,
104
104
  "title": "Slides",
105
105
  "summary": "Create slides from layouts (slides.createFromLayout); optionally insert host-registered template slides (slides.insertFromTemplate); read, update, delete, duplicate, move, select; set background, transition and speaker remark.",
106
106
  "whenToUse": "Prefer slides.createFromLayout (one call per slide). After insert, use text.setMarkdown on the returned placeholderElementIds/textElementIds. Avoid slides.create for deck building."
@@ -112,6 +112,17 @@
112
112
  "summary": "Generic element CRUD plus transform, ordering, grouping, lock/hide, and shared styling (outline, shadow, fill, link).",
113
113
  "whenToUse": "Use the generic create/update when you want one call across element types, or the typed sub-domains (text/shapes/charts/...) for richer helpers."
114
114
  },
115
+ {
116
+ "id": "links",
117
+ "commandCount": 2
118
+ },
119
+ {
120
+ "id": "shapes",
121
+ "commandCount": 9,
122
+ "title": "Shapes",
123
+ "summary": "Vector shapes from the preset catalog (shapes.presets) or raw SVG path; fill, gradient, outline, and inner text.",
124
+ "whenToUse": "Build dividers, callout boxes, accent bars, and backgrounds. Start from a preset, then set fill/outline/text."
125
+ },
115
126
  {
116
127
  "id": "latex",
117
128
  "commandCount": 3,
@@ -191,7 +202,7 @@
191
202
  },
192
203
  {
193
204
  "id": "notes",
194
- "commandCount": 4,
205
+ "commandCount": 7,
195
206
  "title": "Notes",
196
207
  "summary": "Slide comment threads: notes and replies.",
197
208
  "whenToUse": "Author review comments; not the same as the speaker remark (slides.setRemark)."
@@ -317,6 +328,25 @@
317
328
  ]
318
329
  }
319
330
  },
331
+ {
332
+ "name": "deck.getTheme",
333
+ "domain": "deck",
334
+ "payload": "undefined",
335
+ "returns": "SlideTheme"
336
+ },
337
+ {
338
+ "name": "deck.applyTheme",
339
+ "domain": "deck",
340
+ "payload": "{ theme: FikaSlideThemePatch; options?: FikaApplyThemeOptions }",
341
+ "returns": "SlideTheme"
342
+ },
343
+ {
344
+ "name": "deck.extractTheme",
345
+ "domain": "deck",
346
+ "payload": "{ options?: FikaThemeExtractionOptions }",
347
+ "returns": "SlideTheme",
348
+ "optional": true
349
+ },
320
350
  {
321
351
  "name": "deck.applyTemplate",
322
352
  "domain": "deck",
@@ -834,7 +864,13 @@
834
864
  {
835
865
  "name": "slides.applyBackground",
836
866
  "domain": "slides",
837
- "payload": "{ background: Slide['background']; slideIds?: string[] }",
867
+ "payload": "{ background: Slide['background']; slideIds?: string[]; slideId?: string | string[] }",
868
+ "returns": "Slide[]"
869
+ },
870
+ {
871
+ "name": "slides.applyBackgroundToAll",
872
+ "domain": "slides",
873
+ "payload": "{ background: Slide['background'] }",
838
874
  "returns": "Slide[]"
839
875
  },
840
876
  {
@@ -1050,13 +1086,13 @@
1050
1086
  {
1051
1087
  "name": "elements.lock",
1052
1088
  "domain": "elements",
1053
- "payload": "{ elementId: string | string[]; locked?: boolean }",
1089
+ "payload": "{ elementId: string | string[]; slideId?: string; locked?: boolean }",
1054
1090
  "returns": "PPTElement[]"
1055
1091
  },
1056
1092
  {
1057
1093
  "name": "elements.unlock",
1058
1094
  "domain": "elements",
1059
- "payload": "{ elementId: string | string[] }",
1095
+ "payload": "{ elementId: string | string[]; slideId?: string }",
1060
1096
  "returns": "PPTElement[]"
1061
1097
  },
1062
1098
  {
@@ -1074,9 +1110,124 @@
1074
1110
  {
1075
1111
  "name": "elements.setLink",
1076
1112
  "domain": "elements",
1077
- "payload": "{ elementId: string; slideId?: string; link?: PPTElement['link'] }",
1113
+ "payload": "{ elementId: string; slideId?: string; link?: PPTElementLink }",
1114
+ "returns": "PPTElement[]"
1115
+ },
1116
+ {
1117
+ "name": "links.set",
1118
+ "domain": "links",
1119
+ "payload": "{ elementId: string; slideId?: string; link?: PPTElementLink }",
1120
+ "returns": "PPTElement[]"
1121
+ },
1122
+ {
1123
+ "name": "links.remove",
1124
+ "domain": "links",
1125
+ "payload": "{ elementId: string; slideId?: string }",
1078
1126
  "returns": "PPTElement[]"
1079
1127
  },
1128
+ {
1129
+ "name": "shapes.presets",
1130
+ "domain": "shapes",
1131
+ "payload": "{ categoryKey?: FikaShapePreset['categoryKey'] | 'rect' }",
1132
+ "returns": "FikaShapePreset[]",
1133
+ "optional": true,
1134
+ "doc": {
1135
+ "summary": "List preset shapes (path + viewBox) grouped by category. Pass a category key to filter.",
1136
+ "examples": [
1137
+ "controller.shapes.presets() // all categories",
1138
+ "controller.shapes.presets('rect')"
1139
+ ],
1140
+ "related": [
1141
+ "shapes.create"
1142
+ ]
1143
+ }
1144
+ },
1145
+ {
1146
+ "name": "shapes.create",
1147
+ "domain": "shapes",
1148
+ "payload": "FikaCreateShapeInput",
1149
+ "returns": "PPTShapeElement",
1150
+ "optional": true,
1151
+ "doc": {
1152
+ "summary": "Create a shape. Start from a preset (shapes.presets) or supply a raw SVG path + viewBox.",
1153
+ "details": "Use shapes for accent rules, callout boxes, dividers and color blocks. Provide left/top/width/height in px; fill is a hex color; outline sets a border; text adds centered inner HTML text. Read shapes.presets(categoryKey?) for ready-made path/viewBox pairs.",
1154
+ "params": [
1155
+ {
1156
+ "name": "slideId",
1157
+ "type": "string",
1158
+ "required": false,
1159
+ "description": "Target slide."
1160
+ },
1161
+ {
1162
+ "name": "preset",
1163
+ "type": "string",
1164
+ "required": false,
1165
+ "description": "A preset id from shapes.presets()."
1166
+ },
1167
+ {
1168
+ "name": "element",
1169
+ "type": "Partial<PPTShapeElement>",
1170
+ "required": false,
1171
+ "description": "viewBox, path, fill, outline, gradient, opacity, text, plus geometry."
1172
+ }
1173
+ ],
1174
+ "examples": [
1175
+ "// thin accent rule under a title\ncontroller.shapes.create({ slideId, element: { left:40, top:120, width:920, height:3, viewBox:[200,200], path:'M 0 0 L 200 0 L 200 200 L 0 200 Z', fill:'#CCCCCC' } })",
1176
+ "// rounded callout box\nconst preset = controller.shapes.presets('rect')[0]\ncontroller.shapes.create({ slideId, element: { ...preset, left:150, top:160, width:700, height:160, fill:'#EBF3FA', outline:{ color:'#2E75B6', width:2, style:'solid' } } })"
1177
+ ],
1178
+ "tips": [
1179
+ "For a filled background band, place a wide low-height shape behind text with a lower z-order."
1180
+ ],
1181
+ "related": [
1182
+ "shapes.presets",
1183
+ "shapes.setFill",
1184
+ "shapes.setOutline",
1185
+ "shapes.setText"
1186
+ ]
1187
+ }
1188
+ },
1189
+ {
1190
+ "name": "shapes.patch",
1191
+ "domain": "shapes",
1192
+ "payload": "{ elementId: string; slideId?: string; patch: FikaShapePatch }",
1193
+ "returns": "PPTShapeElement"
1194
+ },
1195
+ {
1196
+ "name": "shapes.update",
1197
+ "domain": "shapes",
1198
+ "payload": "{ elementId: string; slideId?: string; patch: FikaShapePatch }",
1199
+ "returns": "PPTShapeElement"
1200
+ },
1201
+ {
1202
+ "name": "shapes.setPath",
1203
+ "domain": "shapes",
1204
+ "payload": "{ elementId: string; slideId?: string; path: string; viewBox?: PPTShapeElement['viewBox']; fixedRatio?: boolean }",
1205
+ "returns": "PPTShapeElement"
1206
+ },
1207
+ {
1208
+ "name": "shapes.setFormula",
1209
+ "domain": "shapes",
1210
+ "payload": "{ elementId: string; slideId?: string; pathFormula: PPTShapeElement['pathFormula']; keypoints?: number[] }",
1211
+ "returns": "PPTShapeElement"
1212
+ },
1213
+ {
1214
+ "name": "shapes.setFill",
1215
+ "domain": "shapes",
1216
+ "payload": "{ elementId: string; slideId?: string; fill: FikaShapeFillInput }",
1217
+ "returns": "PPTShapeElement"
1218
+ },
1219
+ {
1220
+ "name": "shapes.setOutline",
1221
+ "domain": "shapes",
1222
+ "payload": "{ elementId: string; slideId?: string; outline?: FikaShapePatch['outline'] }",
1223
+ "returns": "PPTShapeElement"
1224
+ },
1225
+ {
1226
+ "name": "shapes.setText",
1227
+ "domain": "shapes",
1228
+ "payload": "{ elementId: string; slideId?: string; text?: Partial<ShapeText> }",
1229
+ "returns": "PPTShapeElement"
1230
+ },
1080
1231
  {
1081
1232
  "name": "latex.get",
1082
1233
  "domain": "latex",
@@ -1533,7 +1684,7 @@
1533
1684
  {
1534
1685
  "name": "charts.addSeries",
1535
1686
  "domain": "charts",
1536
- "payload": "{ elementId: string; slideId?: string; series: number[] }",
1687
+ "payload": "{ elementId: string; slideId?: string; series: number[]; legend?: string }",
1537
1688
  "returns": "PPTChartElement"
1538
1689
  },
1539
1690
  {
@@ -1770,6 +1921,24 @@
1770
1921
  "payload": "{ slideId: string; noteId: string; reply: FikaNoteReplyInput }",
1771
1922
  "returns": "NoteReply"
1772
1923
  },
1924
+ {
1925
+ "name": "notes.listReplies",
1926
+ "domain": "notes",
1927
+ "payload": "{ slideId: string; noteId: string }",
1928
+ "returns": "NoteReply[]"
1929
+ },
1930
+ {
1931
+ "name": "notes.updateReply",
1932
+ "domain": "notes",
1933
+ "payload": "{ slideId: string; noteId: string; replyId: string; patch: Partial<NoteReply> }",
1934
+ "returns": "NoteReply"
1935
+ },
1936
+ {
1937
+ "name": "notes.deleteReply",
1938
+ "domain": "notes",
1939
+ "payload": "{ slideId: string; noteId: string; replyId: string | string[] }",
1940
+ "returns": "{ deleted: string[] }"
1941
+ },
1773
1942
  {
1774
1943
  "name": "sections.list",
1775
1944
  "domain": "sections",
@@ -2081,6 +2250,7 @@
2081
2250
  "FikaAnimationSequenceStep": "export interface FikaAnimationSequenceStep { index: number; animations: PPTAnimation[]; autoNext: boolean }",
2082
2251
  "FikaApplyStyleResult": "export interface FikaApplyStyleResult { styleId: string; theme: SlideTheme }",
2083
2252
  "FikaApplyTemplateResult": "export interface FikaApplyTemplateResult { templateId: string; theme: SlideTheme }",
2253
+ "FikaApplyThemeOptions": "export interface FikaApplyThemeOptions { applyToSlides?: boolean; includeElementStyles?: boolean }",
2084
2254
  "FikaAudioElementPatch": "export type FikaAudioElementPatch = Partial<Pick<PPTAudioElement, 'src' | 'ext' | 'autoplay' | 'loop' | 'color' | 'poster' | 'fixedRatio' | 'link' | 'name' | 'lock' | 'groupId'>> & { transform?: FikaAudioTransformPatch }",
2085
2255
  "FikaAudioSourceInput": "export type FikaAudioSourceInput = FikaMediaAssetInput",
2086
2256
  "FikaAudioTransformPatch": "export type FikaAudioTransformPatch = Pick<FikaElementTransformPatch, 'left' | 'top' | 'width' | 'height' | 'rotate'>",
@@ -2092,6 +2262,7 @@
2092
2262
  "FikaCreateFromLayoutResult": "export interface FikaCreateFromLayoutResult { slideId: string; slideIndex: number; layoutId: string; variantId: string; anchor: CompositionAnchor; replacedStarter?: boolean; replaced?: boolean; elementIds: string[]; textElementIds: string[] }",
2093
2263
  "FikaCreateLatexElementInput": "export interface FikaCreateLatexElementInput { slideId?: string; index?: number; element: FikaLatexElementInput; select?: boolean }",
2094
2264
  "FikaCreateLineElementInput": "export interface FikaCreateLineElementInput { slideId?: string; index?: number; element: FikaLineElementInput; select?: boolean }",
2265
+ "FikaCreateShapeInput": "export type FikaCreateShapeInput = FikaShapePatch & { slideId?: string; index?: number; select?: boolean; presetId?: string; categoryKey?: ShapeCategoryKey; presetIndex?: number; preset?: ShapePoolItem; element?: Partial<PPTShapeElement> }",
2095
2266
  "FikaCreateTableInput": "export type FikaCreateTableInput = FikaTableElementPatch & { id?: string; slideId?: string; index?: number; select?: boolean; element?: Partial<PPTTableElement> }",
2096
2267
  "FikaCreateTextInput": "export interface FikaCreateTextInput { slideId?: string; index?: number; content?: string; markdown?: string; element?: Partial<PPTTextElement>; select?: boolean }",
2097
2268
  "FikaDeckDocument": "export type FikaDeckDocument = Omit<FikaDocument, 'theme'> & { theme: SlideTheme; viewport: FikaDeckViewport; templates: SlideTemplate[] }",
@@ -2107,7 +2278,7 @@
2107
2278
  "FikaFillElement": "export type FikaFillElement = PPTTextElement | PPTShapeElement | PPTChartElement",
2108
2279
  "FikaIdMap": "export type FikaIdMap = Record<string, string>",
2109
2280
  "FikaIdRemap": "export interface FikaIdRemap { slideIds: FikaIdMap; elementIds: FikaIdMap; groupIds: FikaIdMap; animationIds: FikaIdMap }",
2110
- "FikaImportDocumentOptions": "export interface FikaImportDocumentOptions { mode?: import('../../utils/importApply').ImportApplyMode; cover?: boolean; confirm?: boolean }",
2281
+ "FikaImportDocumentOptions": "export interface FikaImportDocumentOptions { mode?: import('../../utils/importApply').ImportApplyMode; cover?: boolean; confirm?: boolean; turningMode?: TurningMode | Array<TurningMode | null | undefined> | Record<number, TurningMode>; defaultTurningMode?: TurningMode }",
2111
2282
  "FikaInsertElementsInput": "export interface FikaInsertElementsInput { slideId?: string; index?: number; elements: PPTElement | PPTElement[]; animations?: PPTAnimation[]; offset?: number | { left?: number; top?: number }; select?: boolean; preserveExternalSlideLinks?: boolean; slideIdMap?: FikaIdMap }",
2112
2283
  "FikaInsertElementsResult": "export interface FikaInsertElementsResult { slideId: string; elements: PPTElement[]; animations: PPTAnimation[]; remap: Omit<FikaIdRemap, 'slideIds'> & { slideIds?: FikaIdMap } }",
2113
2284
  "FikaInsertFromTemplateInput": "export interface FikaInsertFromTemplateInput { templateId: string; slug: string; index?: number; select?: boolean; applyTemplateTheme?: boolean }",
@@ -2146,6 +2317,9 @@
2146
2317
  "FikaSetupDeckResult": "export interface FikaSetupDeckResult { styleId: string; theme: SlideTheme; plan: CompositionPlan; motif: FikaStyleMotif; styles: FikaStyleSummary[]; titleSlideId?: string; titleBuilt?: boolean }",
2147
2318
  "FikaSetupTitleInput": "export interface FikaSetupTitleInput { slots: Record<string, unknown>; variantId?: string }",
2148
2319
  "FikaShadowElement": "export type FikaShadowElement = PPTTextElement | PPTImageElement | PPTShapeElement | PPTLineElement",
2320
+ "FikaShapeFillInput": "export type FikaShapeFillInput = string | Pick<FikaShapePatch, 'fill' | 'gradient' | 'pattern'>",
2321
+ "FikaShapePatch": "export type FikaShapePatch = Omit<Partial<Pick<PPTShapeElement, 'path' | 'viewBox' | 'fixedRatio' | 'fill' | 'gradient' | 'pattern' | 'outline' | 'text' | 'pathFormula' | 'keypoints' | 'left' | 'top' | 'width' | 'height' | 'rotate' | 'opacity' | 'flipH' | 'flipV' | 'shadow' | 'special'>>, 'outline' | 'text'> & { outline?: Partial<NonNullable<PPTShapeElement['outline']>>; text?: Partial<ShapeText> }",
2322
+ "FikaShapePreset": "export interface FikaShapePreset extends ShapePoolItem { id: string; categoryKey: ShapeCategoryKey; index: number }",
2149
2323
  "FikaSlideAnimationPreset": "export interface FikaSlideAnimationPreset { label: string; value: TurningMode }",
2150
2324
  "FikaSlideReference": "export type FikaSlideReference = string | number",
2151
2325
  "FikaSlideThemePatch": "export type FikaSlideThemePatch = Omit<Partial<SlideTheme>, 'outline' | 'shadow'> & { outline?: Partial<SlideTheme['outline']>; shadow?: Partial<SlideTheme['shadow']> }",
@@ -2158,6 +2332,7 @@
2158
2332
  "FikaTemplateSlidesCatalog": "export type FikaTemplateSlidesCatalog = Record<SlideType, FikaTemplateSlideEntry[]>",
2159
2333
  "FikaTemplateSlidesCatalogResult": "export interface FikaTemplateSlidesCatalogResult { templateId: string; templateName: string; slideCount: number; byType: FikaTemplateSlidesCatalog }",
2160
2334
  "FikaTemplateSummary": "export interface FikaTemplateSummary { id: string; name: string; cover: string; origin?: string }",
2335
+ "FikaThemeExtractionOptions": "export interface FikaThemeExtractionOptions { slideIds?: string[]; maxThemeColors?: number }",
2161
2336
  "FikaVideoPatch": "export type FikaVideoPatch = FikaVideoPlaybackPatch & FikaVideoSizePatch & FikaVideoPositionPatch & FikaVideoStylePatch",
2162
2337
  "FikaVideoPlaybackPatch": "export interface FikaVideoPlaybackPatch { src?: string; ext?: string; autoplay?: boolean; poster?: string }",
2163
2338
  "FikaVideoPositionPatch": "export interface FikaVideoPositionPatch { left?: number; top?: number; rotate?: number }",
@@ -2227,6 +2402,6 @@
2227
2402
  "TextAlignVertical": "export type TextAlignVertical = 'top' | 'middle' | 'bottom'",
2228
2403
  "TextInset": "export type TextInset = [number, number, number, number]",
2229
2404
  "TextType": "export type TextType = 'title' | 'subtitle' | 'content' | 'item' | 'itemTitle' | 'notes' | 'header' | 'footer' | 'partNumber' | 'itemNumber'",
2230
- "TurningMode": "export type TurningMode = 'no' | 'fade' | 'slideX' | 'slideY' | 'random' | 'slideX3D' | 'slideY3D' | 'rotate' | 'scaleY' | 'scaleX' | 'scale' | 'scaleReverse'"
2405
+ "TurningMode": "export type TurningMode = 'no' | 'fade' | 'throughInk' | 'dissolve' | 'slideX' | 'slideY' | 'wipe' | 'reveal' | 'scale' | 'scaleReverse' | 'morph' | 'ripple' | 'doors' | 'flythrough' | 'slideX3D' | 'slideY3D' | 'rotate' | 'scaleY' | 'scaleX' | 'random'"
2231
2406
  }
2232
2407
  }
@@ -1 +1 @@
1
- .fika-embed-root>.fika-embed-portal>*{pointer-events:auto}.base-view-PYX2ah{width:100%;height:100%;position:relative}.base-view-PYX2ah.laser-pen-M99wND{cursor:none!important}.screen-slide-list-YkUWQ8{background:#1d1d1d;width:100%;height:100%;position:relative;overflow:hidden}.screen-slide-list-YkUWQ8.paper-iU3iD3{background:0 0}.screen-slide-list-YkUWQ8.paper-iU3iD3 .slide-content-IBX06h{border-radius:8px;outline:1px solid #18181b14}.slide-item-fzYd0f{width:100%;height:100%;position:absolute;top:0;left:0;overflow:hidden}.slide-item-fzYd0f:not(.last-uwCh2k,.next-mAkmSM){z-index:-1}.slide-item-fzYd0f.current-WYDs2I{z-index:2}.slide-item-fzYd0f.hide-ub_97d{opacity:0}.slide-item-fzYd0f.turning-mode-no-S18sdW.before-xlyS5m{transform:translateY(-100%)}.slide-item-fzYd0f.turning-mode-no-S18sdW.after-vWCy1T{transform:translateY(100%)}.slide-item-fzYd0f.turning-mode-fade-UBZ62B{transition:opacity .22s ease-out}.slide-item-fzYd0f.turning-mode-fade-UBZ62B.before-xlyS5m,.slide-item-fzYd0f.turning-mode-fade-UBZ62B.after-vWCy1T{pointer-events:none;opacity:0}.slide-item-fzYd0f.turning-mode-slideX-goZfqL{transition:transform .2s ease-out}.slide-item-fzYd0f.turning-mode-slideX-goZfqL.before-xlyS5m{transform:translate(-100%)}.slide-item-fzYd0f.turning-mode-slideX-goZfqL.after-vWCy1T{transform:translate(100%)}.slide-item-fzYd0f.turning-mode-slideY-LVS4Ai{transition:transform .2s ease-out}.slide-item-fzYd0f.turning-mode-slideY-LVS4Ai.before-xlyS5m{transform:translateY(-100%)}.slide-item-fzYd0f.turning-mode-slideY-LVS4Ai.after-vWCy1T{transform:translateY(100%)}.slide-item-fzYd0f.turning-mode-slideX3D-xDlPzZ{transition:transform .22s ease-out}.slide-item-fzYd0f.turning-mode-slideX3D-xDlPzZ.before-xlyS5m{transform:translate(-100%)scale(.5)}.slide-item-fzYd0f.turning-mode-slideX3D-xDlPzZ.after-vWCy1T{transform:translate(100%)scale(.5)}.slide-item-fzYd0f.turning-mode-slideY3D-IBgj3b{transition:transform .22s ease-out}.slide-item-fzYd0f.turning-mode-slideY3D-IBgj3b.before-xlyS5m{transform:translateY(-100%)scale(.5)}.slide-item-fzYd0f.turning-mode-slideY3D-IBgj3b.after-vWCy1T{transform:translateY(100%)scale(.5)}.slide-item-fzYd0f.turning-mode-rotate-BPb1Nx{transform-origin:0 0;transition:transform .22s ease-out}.slide-item-fzYd0f.turning-mode-rotate-BPb1Nx.before-xlyS5m{transform:rotate(90deg)}.slide-item-fzYd0f.turning-mode-rotate-BPb1Nx.after-vWCy1T{transform:rotate(-90deg)}.slide-item-fzYd0f.turning-mode-scaleY-vOoYvD{transition:transform .22s ease-out}.slide-item-fzYd0f.turning-mode-scaleY-vOoYvD.before-xlyS5m,.slide-item-fzYd0f.turning-mode-scaleY-vOoYvD.after-vWCy1T{transform:scaleY(.1)}.slide-item-fzYd0f.turning-mode-scaleX-cCjdn7{transition:transform .22s ease-out}.slide-item-fzYd0f.turning-mode-scaleX-cCjdn7.before-xlyS5m,.slide-item-fzYd0f.turning-mode-scaleX-cCjdn7.after-vWCy1T{transform:scaleX(.1)}.slide-item-fzYd0f.turning-mode-scale-S65pos{transition:transform .22s ease-out}.slide-item-fzYd0f.turning-mode-scale-S65pos.before-xlyS5m,.slide-item-fzYd0f.turning-mode-scale-S65pos.after-vWCy1T{transform:scale(.25)}.slide-item-fzYd0f.turning-mode-scaleReverse-RnJswS{transition:transform .22s ease-out}.slide-item-fzYd0f.turning-mode-scaleReverse-RnJswS.before-xlyS5m,.slide-item-fzYd0f.turning-mode-scaleReverse-RnJswS.after-vWCy1T{transform:scale(2)}.slide-content-IBX06h{position:absolute;top:50%;left:50%;overflow:hidden;transform:translate(-50%,-50%)}.screen-slide-fxZwVU{position:absolute;inset:0;overflow:hidden}.background-zSEJFp{background-position:50%;background-size:cover;position:absolute;inset:0}.viewport-hgT0CF{transform-origin:0 0;position:absolute;top:0;left:0}.link-ytTQRk{cursor:pointer}.base-element-image-fkxhPb{position:absolute}.rotate-wrapper-kK3Qrx{width:100%;height:100%}.element-content-BrsGgY{width:100%;height:100%;position:relative}.element-content-BrsGgY .image-content-xjBPUi{width:100%;height:100%;position:relative;overflow:hidden}.element-content-BrsGgY img,.element-content-BrsGgY canvas{position:absolute}.color-mask-DNfzhz{position:absolute;inset:0}.base-element-text-NW89pF{box-sizing:border-box;position:absolute}.rotate-wrapper-BfruER{width:100%;height:100%}.element-content-CTz94h{box-sizing:border-box;word-break:break-word;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;line-height:1.5;position:relative}.element-content-CTz94h .text-fit-host-gSDkTW{width:100%;min-width:0}:is(.element-content-CTz94h.v-align-box-oCZ3K4 .text-fit-host-gSDkTW,.element-content-CTz94h.v-align-box-oCZ3K4 .text-joE8Fz,.element-content-CTz94h.v-align-box-oCZ3K4 .prosemirror-editor){flex:none;width:100%;height:auto}.element-content-CTz94h .text-joE8Fz{position:relative}.element-content-CTz94h .text-joE8Fz.thumbnail-NjnGvk{pointer-events:none}.element-content-CTz94h.content-title-placeholder-YCZiao .text-joE8Fz{flex:none;width:100%}.element-content-CTz94h .ProseMirror-static{font-size:var(--text-fit-base-size,inherit)}.base-element-line-wg5Y9j{position:absolute}.element-content-ZzSmsy{width:100%;height:100%;position:relative}.element-content-ZzSmsy svg{transform-origin:0 0;overflow:visible}.base-element-chart-fRuUXv{position:absolute}.base-element-chart-fRuUXv.is-thumbnail-Ql1J4X{pointer-events:none}.rotate-wrapper-cKwsSU,.element-content-_ldZRd{width:100%;height:100%}.base-element-table-zcJAxB{position:absolute}.rotate-wrapper-BHyZnj{width:100%;height:100%}.element-content-JgDN9Y{width:100%;height:100%;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;position:relative}.static-table-LOh7n4{-webkit-user-select:none;user-select:none;position:relative}table{table-layout:fixed;border-collapse:collapse;border-spacing:0;word-wrap:break-word;-webkit-user-select:none;user-select:none;border:0;width:100%;position:relative}table.theme-i8Cvzw{background-color:#fafafa}table.theme-i8Cvzw tr:nth-child(2n) .cell-jrwBZR:not([data-cell-fill]){background-color:var(--subThemeColor1)}table.theme-i8Cvzw tr:nth-child(odd) .cell-jrwBZR:not([data-cell-fill]){background-color:var(--subThemeColor2)}table.theme-i8Cvzw.row-header-BlNWn1 tr:first-child .cell-jrwBZR:not([data-cell-fill]){background-color:var(--headerColor)}table.theme-i8Cvzw.row-header-BlNWn1 tr:first-child .cell-jrwBZR{letter-spacing:.04em;font-weight:600;box-shadow:inset 0 -2px #18181b}table.theme-i8Cvzw.row-header-BlNWn1 tr:first-child .cell-jrwBZR:not([data-cell-color]) .cell-text-eQtqiK{color:#fafafa!important}table.theme-i8Cvzw.row-footer-Ao3Ujj tr:last-child .cell-jrwBZR:not([data-cell-fill]){background-color:var(--headerColor)}table.theme-i8Cvzw.row-footer-Ao3Ujj tr:last-child .cell-jrwBZR{font-weight:600}table.theme-i8Cvzw.row-footer-Ao3Ujj tr:last-child .cell-jrwBZR:not([data-cell-color]) .cell-text-eQtqiK{color:#fafafa!important}table.theme-i8Cvzw.col-header-MJ1xm0 tr .cell-jrwBZR:first-child:not([data-cell-fill]){background-color:var(--headerColor)}table.theme-i8Cvzw.col-header-MJ1xm0 tr .cell-jrwBZR:first-child{font-weight:600}table.theme-i8Cvzw.col-header-MJ1xm0 tr .cell-jrwBZR:first-child:not([data-cell-color]) .cell-text-eQtqiK{color:#fafafa!important}table.theme-i8Cvzw.col-footer-J0dEld tr .cell-jrwBZR:last-child:not([data-cell-fill]){background-color:var(--headerColor)}table.theme-i8Cvzw.col-footer-J0dEld tr .cell-jrwBZR:last-child{font-weight:600}table.theme-i8Cvzw.col-footer-J0dEld tr .cell-jrwBZR:last-child:not([data-cell-color]) .cell-text-eQtqiK{color:#fafafa!important}table .cell-jrwBZR{white-space:normal;word-wrap:break-word;vertical-align:middle;background-clip:padding-box;position:relative}table .cell-text-eQtqiK{flex-direction:column;align-items:stretch;padding:10px 14px;line-height:1.45;display:flex}.base-element-latex-SBWNCJ{position:absolute}.rotate-wrapper-jruZ3N{width:100%;height:100%}.screen-element-video-TNtsoU{position:absolute}.rotate-wrapper-VbGN_o,.element-content-PyhjCu{width:100%;height:100%}.screen-element-audio-roA6VT{position:absolute}.rotate-wrapper-Ag0Lnd,.element-content-C4l2fa{width:100%;height:100%}.element-content-C4l2fa{overflow:visible}.slide-thumbnails-HNsoCE{z-index:99;background:#f4f4f5;width:100%;height:100%;position:fixed;top:0;left:0}.return-button-ZiG7PY{height:56px;padding:16px 20px 0}.return-button-ZiG7PY .icon-FWeGJm{color:#71717a;cursor:pointer;font-size:28px}.return-button-ZiG7PY .icon-FWeGJm:hover{color:#18181b}.slide-thumbnails-content-hDOeNa{height:calc(100% - 72px);overflow:auto;overflow:overlay;flex-wrap:wrap;align-content:flex-start;gap:12px;padding:12px 20px 24px;display:flex}.slide-thumbnails-content-hDOeNa::-webkit-scrollbar{background-color:#0000;width:5px;height:5px}.slide-thumbnails-content-hDOeNa::-webkit-scrollbar-track{background:0 0}.slide-thumbnails-content-hDOeNa::-webkit-scrollbar-corner{background:0 0}.slide-thumbnails-content-hDOeNa::-webkit-scrollbar-button{width:0;height:0;display:none}.slide-thumbnails-content-hDOeNa::-webkit-scrollbar-thumb{background-color:#e1e1e1;border-radius:3px}.slide-thumbnails-content-hDOeNa .thumbnail-ABmRdv{cursor:pointer;border:1px solid #e4e4e7;border-radius:8px;width:150px;overflow:hidden}.slide-thumbnails-content-hDOeNa .thumbnail-ABmRdv:hover{border-color:#c4c4cc}.slide-thumbnails-content-hDOeNa .thumbnail-ABmRdv.active-o2u2Fy{border-color:#18181b;box-shadow:inset 0 0 0 1px #18181b}.writing-board-tool-CZM6Ws{z-index:10;pointer-events:none;font-size:12px;position:absolute;inset:0}.writing-board-tool-CZM6Ws .writing-board-wrap-O8Aywj{pointer-events:auto;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.writing-board-tool-CZM6Ws .tools-panel-vZel5n{pointer-events:auto}.writing-board-tool-CZM6Ws .tools-uN1BnQ{justify-content:space-between;align-items:center;width:100%;height:100%;display:flex}.writing-board-tool-CZM6Ws .tool-content-BHPAc3{align-items:center;display:flex}.writing-board-tool-CZM6Ws .btn-CAhVa8{cursor:pointer;border-radius:8px;margin-right:5px;padding:5px}.writing-board-tool-CZM6Ws .btn-CAhVa8:hover:not(.active-ynGLbv){color:#18181b}.writing-board-tool-CZM6Ws .btn-CAhVa8.active-ynGLbv{color:#fff;background-color:#18181b80}.writing-board-tool-CZM6Ws .btn-CAhVa8.disabled-fPTO6H{opacity:.35;cursor:default}.writing-board-tool-CZM6Ws .btn-CAhVa8.disabled-fPTO6H:hover{color:inherit}.writing-board-tool-CZM6Ws .btn-CAhVa8.close-livnZC{margin-left:5px;margin-right:0}.writing-board-tool-CZM6Ws .icon-Otsu7Q{font-size:20px}.shape-menu-ODTXgg{z-index:10060;pointer-events:auto;-webkit-user-select:none;user-select:none;background:#fff;border:1px solid #e4e4e7;border-radius:12px;align-items:center;gap:4px;height:44px;padding:6px 10px;font-size:13px;display:flex;position:fixed;box-shadow:0 8px 24px #18181b14,0 2px 6px #18181b0a}.shape-menu-ODTXgg .label-u3NHmZ{flex-shrink:0;width:70px}.shape-menu-ODTXgg .size-slider-WFmj9Y{width:90px}.shape-btn-xWccj0{appearance:none;box-shadow:none;color:#18181b;cursor:pointer;background:0 0;border:0;border-radius:8px;outline:0;justify-content:center;align-items:center;width:28px;height:28px;display:inline-flex}.shape-btn-xWccj0:hover{color:#18181b}.shape-btn-xWccj0.active-ynGLbv{color:#fff;background-color:#18181b80}.shape-btn-xWccj0 .icon-Otsu7Q{font-size:18px}.setting-QQaT_V{-webkit-user-select:none;user-select:none;align-items:center;width:200px;font-size:13px;display:flex}.setting-QQaT_V .label-u3NHmZ{width:70px}.setting-QQaT_V .size-slider-WFmj9Y{flex:1}.writing-board-jncwKh{z-index:8;cursor:none;touch-action:none;position:absolute;inset:0}.blackboard-NKh0jH{background-color:#0f392b;width:100%;height:100%}.canvas-U0rCv6{touch-action:none;position:absolute;top:0;left:0}.eraser-Y5jmJy,.pen-qZsg27{pointer-events:none;z-index:9;will-change:transform;position:absolute;top:0;left:0}.eraser-Y5jmJy .icon-rITb3m,.pen-qZsg27 .icon-rITb3m{filter:drop-shadow(2px 2px 2px #555)}.eraser-Y5jmJy{color:#555555bf;border:4px solid #55555526;border-radius:50%;justify-content:center;align-items:center;display:flex}.countdown-timer-JgghzN{-webkit-user-select:none;user-select:none}.header-O2Smv3{align-items:center;height:16px;margin-bottom:16px;font-size:13px;display:flex}.header-O2Smv3 .text-btn-DZmuFt{cursor:pointer;margin-right:8px}.header-O2Smv3 .text-btn-DZmuFt:hover,.header-O2Smv3 .text-btn-DZmuFt.active-jr26ZX{color:#18181b}.content-gcLQH4{justify-content:space-between;padding:0 5px;display:flex}.timer-jkmpO3{background-color:#18181b0d;border-radius:50%;width:54px;height:54px;overflow:hidden}.timer-jkmpO3 input{text-align:center;background-color:#0000;border:0;outline:0;width:100%;height:100%;font-size:22px}.colon-Ug__do{height:54px;font-size:22px;line-height:54px}.icon-btn-IoX0lq{cursor:pointer;justify-content:center;align-items:center;width:20px;height:20px;display:flex}.pause-sbvFOk,.play-BFvJ_P{font-size:17px}.reset-fgR6qd{font-size:12px}.close-btn-wXut5Z{cursor:pointer;padding:10px;line-height:1;position:absolute;top:0;right:0}.close-btn-wXut5Z:hover{color:#18181b}.bottom-thumbnails-ILwNfh{z-index:4;width:100%;transition:bottom .2s;position:fixed;bottom:-120px;left:0}.bottom-thumbnails-ILwNfh:after{content:"";width:100%;height:3px;position:absolute;top:-3px;left:0}.bottom-thumbnails-ILwNfh:hover{z-index:20;bottom:0}.bottom-thumbnails-ILwNfh .thumbnails-j6UWRc{white-space:nowrap;background-color:#000000bf;height:120px;padding:10px;position:relative;overflow:auto hidden}.thumbnail-rQRbp8{outline:2px solid #aaa;display:inline-block}.thumbnail-rQRbp8+.thumbnail-rQRbp8{margin-left:10px}.thumbnail-rQRbp8:hover{outline-color:#18181b}.thumbnail-rQRbp8.active-dUs5Mm{outline-width:3px;outline-color:#18181b}::-webkit-scrollbar{width:0;height:0}.laser-trail-AuWhhL{pointer-events:none;z-index:24;width:100%;height:100%;position:absolute;inset:0}.blank-veil-Otp0eW{z-index:30;cursor:pointer;justify-content:center;align-items:flex-end;padding-bottom:88px;display:flex;position:fixed;inset:0}.blank-veil-Otp0eW.black-tYe3gh{background:#000}.blank-veil-Otp0eW.white-apxn4S{background:#fff}.blank-hint-ng20nO{letter-spacing:.12em;text-transform:uppercase;color:#71717a;font-size:11px;font-weight:500}.black-tYe3gh .blank-hint-ng20nO{color:#ffffff73}.presenter-dock-W42lD3{z-index:40;opacity:0;pointer-events:none;background:#fff;border:1px solid #e4e4e7;border-radius:14px;align-items:center;gap:4px;height:44px;padding:6px;transition:opacity .22s;display:flex;position:fixed;bottom:16px;left:16px;box-shadow:0 8px 24px #18181b14,0 2px 6px #18181b0a}.presenter-dock-W42lD3.visible-tjrMCu{opacity:1;pointer-events:auto}.group-YpVR08{align-items:center;gap:2px;display:flex}.rule-uCJAaZ{background:#e4e4e7;width:1px;height:18px;margin:0 4px}.tool-dUnVe9{appearance:none;box-shadow:none;box-sizing:border-box;color:#71717a;min-width:32px;height:32px;font:inherit;cursor:pointer;background:0 0;border:0;border-radius:8px;outline:0;justify-content:center;align-items:center;gap:4px;padding:0 8px;font-size:16px;transition:background-color .15s,color .15s;display:inline-flex}.tool-dUnVe9:hover:not(:disabled):not(.on-ctwBVK){color:#18181b;background:#f4f4f5}.tool-dUnVe9.on-ctwBVK{color:#fff;background:#18181b}.tool-dUnVe9:disabled{opacity:.35;cursor:default}.tool-dUnVe9.end-Mv0vH_:hover:not(:disabled){color:#fff;background:#18181b}.page-LCsW_X{letter-spacing:-.02em;color:#18181b;font-variant-numeric:tabular-nums;min-width:0;padding:0 8px 0 10px;font-size:12px;font-weight:600}.page-LCsW_X .muted-L0yk3o{color:#71717a;margin:0 1px;font-weight:500}.page-LCsW_X .chevron-rtCfzD{color:#71717a;font-size:10px}.jump-panel-vTmGjz{width:min(268px,100vw - 32px);padding:8px}.jump-head-SDaUcj{letter-spacing:.08em;text-transform:uppercase;color:#71717a;padding:4px 6px 8px;font-size:11px;font-weight:600}.jump-grid-QTG4ik{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;max-height:min(52vh,420px);display:grid;overflow:auto}.jump-item-MZmy97{appearance:none;box-shadow:none;cursor:pointer;background:#f4f4f5;border:1px solid #e4e4e7;border-radius:8px;outline:0;min-width:0;padding:0;position:relative;overflow:hidden}.jump-item-MZmy97:hover{border-color:#c4c4cc}.jump-item-MZmy97.active-aNm92f{border-color:#18181b;box-shadow:inset 0 0 0 1px #18181b}.jump-index-YmeSF9{color:#fff;text-align:center;background:#18181b;border-radius:999px;min-width:18px;height:18px;padding:0 5px;font-size:10px;font-weight:700;line-height:18px;position:absolute;bottom:6px;left:6px}.more-menu-rBuzPG{min-width:200px;padding:4px}.more-item-E2tIth{color:#18181b;align-items:center;gap:8px;padding:8px 10px;display:flex}.more-item-E2tIth .icon-O2NQQi{color:#71717a;font-size:16px}.more-item-E2tIth .check-fCU8x9{color:#71717a;margin-left:auto;font-size:12px}.laser-swatches-PNMqei{flex-shrink:0;align-items:center;display:flex}.laser-swatches-PNMqei.row-pOHUxN{gap:4px;padding:0 4px}.laser-swatches-PNMqei.grid-maEbYP{grid-template-columns:repeat(2,14px);gap:6px;margin-top:6px;display:grid}.laser-swatch-GJvNZ_{appearance:none;box-shadow:none;cursor:pointer;background:0 0;border:1px solid #0000001f;border-radius:999px;outline:0;width:14px;height:14px;box-shadow:inset 0 0 0 1px #ffffff59}.laser-swatch-GJvNZ_.on-sYDXIi{outline-offset:1px;outline:2px solid #18181b}
1
+ .fika-embed-root>.fika-embed-portal>*{pointer-events:auto}.base-view-PYX2ah{width:100%;height:100%;position:relative}.base-view-PYX2ah.laser-pen-M99wND{cursor:none!important}.screen-slide-list-YkUWQ8{perspective:1600px;background:#1d1d1d;width:100%;height:100%;position:relative;overflow:hidden}.screen-slide-list-YkUWQ8.paper-iU3iD3{background:0 0}.screen-slide-list-YkUWQ8.paper-iU3iD3 .slide-content-IBX06h{border-radius:8px;outline:1px solid #18181b14}.slide-item-fzYd0f{pointer-events:none;will-change:transform,opacity,clip-path;backface-visibility:hidden;width:100%;height:100%;position:absolute;top:0;left:0;overflow:hidden}.slide-item-fzYd0f.current-WYDs2I{pointer-events:auto;z-index:2;opacity:1;clip-path:inset(0);transform:none}@media (prefers-reduced-motion:reduce){.slide-item-fzYd0f{transition-duration:1ms!important;transition-delay:0s!important}}.slide-item-fzYd0f.turning-mode-no-S18sdW.before-xlyS5m{transform:translateY(-100%)}.slide-item-fzYd0f.turning-mode-no-S18sdW.after-vWCy1T{transform:translateY(100%)}.slide-item-fzYd0f.turning-mode-fade-UBZ62B{transition:opacity var(--turning-duration,.7s) cubic-bezier(.45, .05, .15, 1)}.slide-item-fzYd0f.turning-mode-fade-UBZ62B.before-xlyS5m,.slide-item-fzYd0f.turning-mode-fade-UBZ62B.after-vWCy1T{opacity:0}.slide-item-fzYd0f.turning-mode-throughInk-vhOTGp{transition:opacity calc(var(--turning-duration,.7s)*.48) cubic-bezier(.55, 0, .7, .4)}.slide-item-fzYd0f.turning-mode-throughInk-vhOTGp.current-WYDs2I{transition:opacity calc(var(--turning-duration,.7s)*.52) cubic-bezier(.22, 1, .36, 1) calc(var(--turning-duration,.7s)*.44)}.slide-item-fzYd0f.turning-mode-throughInk-vhOTGp.before-xlyS5m,.slide-item-fzYd0f.turning-mode-throughInk-vhOTGp.after-vWCy1T{opacity:0}.slide-item-fzYd0f.turning-mode-dissolve-mkgMm4{transition:opacity var(--turning-duration,.7s) cubic-bezier(.45, .05, .15, 1),transform var(--turning-duration,.7s) cubic-bezier(.45, .05, .15, 1)}.slide-item-fzYd0f.turning-mode-dissolve-mkgMm4.before-xlyS5m{opacity:0;transform:scale(1.06)}.slide-item-fzYd0f.turning-mode-dissolve-mkgMm4.after-vWCy1T{opacity:0;transform:scale(.94)}.slide-item-fzYd0f.turning-mode-slideX-goZfqL{transition:transform var(--turning-duration,.7s) cubic-bezier(.45, .05, .15, 1),opacity var(--turning-duration,.7s) cubic-bezier(.45, .05, .15, 1)}.slide-item-fzYd0f.turning-mode-slideX-goZfqL.before-xlyS5m{opacity:0;transform:translate(-30%)scale(.96)}.slide-item-fzYd0f.turning-mode-slideX-goZfqL.after-vWCy1T{transform:translate(100%)}.slide-item-fzYd0f.turning-mode-slideY-LVS4Ai{transition:transform var(--turning-duration,.7s) cubic-bezier(.45, .05, .15, 1),opacity var(--turning-duration,.7s) cubic-bezier(.45, .05, .15, 1)}.slide-item-fzYd0f.turning-mode-slideY-LVS4Ai.before-xlyS5m{opacity:0;transform:translateY(-30%)scale(.96)}.slide-item-fzYd0f.turning-mode-slideY-LVS4Ai.after-vWCy1T{transform:translateY(100%)}.slide-item-fzYd0f.turning-mode-wipe-xr4Eij{transition:clip-path var(--turning-duration,.7s) cubic-bezier(.45, .05, .15, 1)}.slide-item-fzYd0f.turning-mode-wipe-xr4Eij.before-xlyS5m{clip-path:inset(0 0 0 100%)}.slide-item-fzYd0f.turning-mode-wipe-xr4Eij.after-vWCy1T{clip-path:inset(0 100% 0 0)}.slide-item-fzYd0f.turning-mode-reveal-dveTWZ{transition:transform var(--turning-duration,.7s) cubic-bezier(.45, .05, .15, 1),opacity var(--turning-duration,.7s) cubic-bezier(.45, .05, .15, 1)}.slide-item-fzYd0f.turning-mode-reveal-dveTWZ.before-xlyS5m{z-index:3;opacity:0;transform:translate(-36%)}.slide-item-fzYd0f.turning-mode-reveal-dveTWZ.after-vWCy1T{z-index:1;opacity:1;transform:none}.slide-item-fzYd0f.turning-mode-scale-S65pos{transition:transform var(--turning-duration,.7s) cubic-bezier(.45, .05, .15, 1),opacity var(--turning-duration,.7s) cubic-bezier(.45, .05, .15, 1)}.slide-item-fzYd0f.turning-mode-scale-S65pos.before-xlyS5m,.slide-item-fzYd0f.turning-mode-scale-S65pos.after-vWCy1T{opacity:0;transform:scale(.8)}.slide-item-fzYd0f.turning-mode-scaleReverse-RnJswS{transition:transform var(--turning-duration,.7s) cubic-bezier(.45, .05, .15, 1),opacity var(--turning-duration,.7s) cubic-bezier(.45, .05, .15, 1)}.slide-item-fzYd0f.turning-mode-scaleReverse-RnJswS.before-xlyS5m,.slide-item-fzYd0f.turning-mode-scaleReverse-RnJswS.after-vWCy1T{opacity:0;transform:scale(1.2)}.slide-item-fzYd0f.turning-mode-morph-ujpwzu{transition:transform var(--turning-duration,.7s) cubic-bezier(.22, 1, .36, 1),opacity calc(var(--turning-duration,.7s)*.7) cubic-bezier(.45, .05, .15, 1)}.slide-item-fzYd0f.turning-mode-morph-ujpwzu.before-xlyS5m{opacity:0;transform:scale(1.03)}.slide-item-fzYd0f.turning-mode-morph-ujpwzu.after-vWCy1T{opacity:0;transform:scale(.97)}.slide-item-fzYd0f.turning-mode-ripple-wDguZu{transition:clip-path var(--turning-duration,.7s) cubic-bezier(.45, .05, .15, 1)}.slide-item-fzYd0f.turning-mode-ripple-wDguZu.before-xlyS5m,.slide-item-fzYd0f.turning-mode-ripple-wDguZu.after-vWCy1T{clip-path:circle(0%)}.slide-item-fzYd0f.turning-mode-ripple-wDguZu.current-WYDs2I{clip-path:circle(75%)}.slide-item-fzYd0f.turning-mode-doors-Q9aiNz{transition:clip-path var(--turning-duration,.7s) cubic-bezier(.45, .05, .15, 1),transform var(--turning-duration,.7s) cubic-bezier(.45, .05, .15, 1)}.slide-item-fzYd0f.turning-mode-doors-Q9aiNz.before-xlyS5m,.slide-item-fzYd0f.turning-mode-doors-Q9aiNz.after-vWCy1T{clip-path:inset(0 50%);transform:scale(1.04)}.slide-item-fzYd0f.turning-mode-flythrough-YMEhMu{transition:transform var(--turning-duration,.7s) cubic-bezier(.45, .05, .15, 1),opacity calc(var(--turning-duration,.7s)*.8) cubic-bezier(.45, .05, .15, 1)}.slide-item-fzYd0f.turning-mode-flythrough-YMEhMu.before-xlyS5m{opacity:0;transform:translateZ(260px)scale(1.3)}.slide-item-fzYd0f.turning-mode-flythrough-YMEhMu.after-vWCy1T{opacity:0;transform:translateZ(-420px)scale(.6)}.slide-item-fzYd0f.turning-mode-slideX3D-xDlPzZ{transition:transform var(--turning-duration,.7s) cubic-bezier(.45, .05, .15, 1),opacity var(--turning-duration,.7s) cubic-bezier(.45, .05, .15, 1)}.slide-item-fzYd0f.turning-mode-slideX3D-xDlPzZ.before-xlyS5m{opacity:0;transform:translate(-42%)rotateY(48deg)scale(.9)}.slide-item-fzYd0f.turning-mode-slideX3D-xDlPzZ.after-vWCy1T{opacity:0;transform:translate(42%)rotateY(-48deg)scale(.9)}.slide-item-fzYd0f.turning-mode-slideY3D-IBgj3b{transition:transform var(--turning-duration,.7s) cubic-bezier(.45, .05, .15, 1),opacity var(--turning-duration,.7s) cubic-bezier(.45, .05, .15, 1)}.slide-item-fzYd0f.turning-mode-slideY3D-IBgj3b.before-xlyS5m{opacity:0;transform:translateY(-42%)rotateX(-48deg)scale(.9)}.slide-item-fzYd0f.turning-mode-slideY3D-IBgj3b.after-vWCy1T{opacity:0;transform:translateY(42%)rotateX(48deg)scale(.9)}.slide-item-fzYd0f.turning-mode-rotate-BPb1Nx{transition:transform var(--turning-duration,.7s) cubic-bezier(.45, .05, .15, 1),opacity var(--turning-duration,.7s) cubic-bezier(.45, .05, .15, 1);transform-origin:0 0}.slide-item-fzYd0f.turning-mode-rotate-BPb1Nx.before-xlyS5m{opacity:0;transform:rotate(72deg)}.slide-item-fzYd0f.turning-mode-rotate-BPb1Nx.after-vWCy1T{opacity:0;transform:rotate(-72deg)}.slide-item-fzYd0f.turning-mode-scaleY-vOoYvD{transition:transform var(--turning-duration,.7s) cubic-bezier(.45, .05, .15, 1),opacity var(--turning-duration,.7s) cubic-bezier(.45, .05, .15, 1)}.slide-item-fzYd0f.turning-mode-scaleY-vOoYvD.before-xlyS5m,.slide-item-fzYd0f.turning-mode-scaleY-vOoYvD.after-vWCy1T{opacity:0;transform:scaleY(.12)}.slide-item-fzYd0f.turning-mode-scaleX-cCjdn7{transition:transform var(--turning-duration,.7s) cubic-bezier(.45, .05, .15, 1),opacity var(--turning-duration,.7s) cubic-bezier(.45, .05, .15, 1)}.slide-item-fzYd0f.turning-mode-scaleX-cCjdn7.before-xlyS5m,.slide-item-fzYd0f.turning-mode-scaleX-cCjdn7.after-vWCy1T{opacity:0;transform:scaleX(.12)}.slide-item-fzYd0f.before-xlyS5m,.slide-item-fzYd0f.after-vWCy1T{pointer-events:none}.slide-item-fzYd0f:not(.last-uwCh2k,.next-mAkmSM,.current-WYDs2I){z-index:-1}.slide-item-fzYd0f.hide-ub_97d{opacity:0}.slide-content-IBX06h{position:absolute;top:50%;left:50%;overflow:hidden;transform:translate(-50%,-50%)}.screen-slide-fxZwVU{position:absolute;inset:0;overflow:hidden}.background-zSEJFp{background-position:50%;background-size:cover;position:absolute;inset:0}.viewport-hgT0CF{transform-origin:0 0;position:absolute;top:0;left:0}.link-ytTQRk{cursor:pointer}.base-element-image-fkxhPb{position:absolute}.rotate-wrapper-kK3Qrx{width:100%;height:100%}.element-content-BrsGgY{width:100%;height:100%;position:relative}.element-content-BrsGgY .image-content-xjBPUi{width:100%;height:100%;position:relative;overflow:hidden}.element-content-BrsGgY img,.element-content-BrsGgY canvas{position:absolute}.color-mask-DNfzhz{position:absolute;inset:0}.base-element-text-NW89pF{box-sizing:border-box;position:absolute}.rotate-wrapper-BfruER{width:100%;height:100%}.element-content-CTz94h{box-sizing:border-box;word-break:break-word;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;line-height:1.5;position:relative}.element-content-CTz94h .text-fit-host-gSDkTW{width:100%;min-width:0}.element-content-CTz94h .paint-clip-MTmXeJ{box-sizing:border-box;width:100%}.element-content-CTz94h:not([data-live-auto-height])>.paint-clip-MTmXeJ{height:100%}:is(.element-content-CTz94h.v-align-box-oCZ3K4 .text-fit-host-gSDkTW,.element-content-CTz94h.v-align-box-oCZ3K4 .text-joE8Fz,.element-content-CTz94h.v-align-box-oCZ3K4 .prosemirror-editor){flex:none;width:100%;height:auto}.element-content-CTz94h .text-joE8Fz{position:relative}.element-content-CTz94h .text-joE8Fz.thumbnail-NjnGvk{pointer-events:none}.element-content-CTz94h.content-title-placeholder-YCZiao .text-joE8Fz{flex:none;width:100%}.element-content-CTz94h .ProseMirror-static{font-size:var(--text-fit-base-size,inherit)}.base-element-line-wg5Y9j{position:absolute}.element-content-ZzSmsy{width:100%;height:100%;position:relative}.element-content-ZzSmsy svg{transform-origin:0 0;overflow:visible}.base-element-chart-fRuUXv{position:absolute}.base-element-chart-fRuUXv.is-thumbnail-Ql1J4X{pointer-events:none}.rotate-wrapper-cKwsSU,.element-content-_ldZRd{width:100%;height:100%}.base-element-table-zcJAxB{position:absolute}.rotate-wrapper-BHyZnj{width:100%;height:100%}.element-content-JgDN9Y{width:100%;height:100%;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;position:relative}.static-table-LOh7n4{-webkit-user-select:none;user-select:none;position:relative}table{table-layout:fixed;border-collapse:collapse;border-spacing:0;word-wrap:break-word;-webkit-user-select:none;user-select:none;border:0;width:100%;position:relative}table.theme-i8Cvzw{background-color:#fafafa}table.theme-i8Cvzw tr:nth-child(2n) .cell-jrwBZR:not([data-cell-fill]){background-color:var(--subThemeColor1)}table.theme-i8Cvzw tr:nth-child(odd) .cell-jrwBZR:not([data-cell-fill]){background-color:var(--subThemeColor2)}table.theme-i8Cvzw.row-header-BlNWn1 tr:first-child .cell-jrwBZR:not([data-cell-fill]){background-color:var(--headerColor)}table.theme-i8Cvzw.row-header-BlNWn1 tr:first-child .cell-jrwBZR{letter-spacing:.04em;font-weight:600;box-shadow:inset 0 -2px #18181b}table.theme-i8Cvzw.row-header-BlNWn1 tr:first-child .cell-jrwBZR:not([data-cell-color]) .cell-text-eQtqiK{color:#fafafa!important}table.theme-i8Cvzw.row-footer-Ao3Ujj tr:last-child .cell-jrwBZR:not([data-cell-fill]){background-color:var(--headerColor)}table.theme-i8Cvzw.row-footer-Ao3Ujj tr:last-child .cell-jrwBZR{font-weight:600}table.theme-i8Cvzw.row-footer-Ao3Ujj tr:last-child .cell-jrwBZR:not([data-cell-color]) .cell-text-eQtqiK{color:#fafafa!important}table.theme-i8Cvzw.col-header-MJ1xm0 tr .cell-jrwBZR:first-child:not([data-cell-fill]){background-color:var(--headerColor)}table.theme-i8Cvzw.col-header-MJ1xm0 tr .cell-jrwBZR:first-child{font-weight:600}table.theme-i8Cvzw.col-header-MJ1xm0 tr .cell-jrwBZR:first-child:not([data-cell-color]) .cell-text-eQtqiK{color:#fafafa!important}table.theme-i8Cvzw.col-footer-J0dEld tr .cell-jrwBZR:last-child:not([data-cell-fill]){background-color:var(--headerColor)}table.theme-i8Cvzw.col-footer-J0dEld tr .cell-jrwBZR:last-child{font-weight:600}table.theme-i8Cvzw.col-footer-J0dEld tr .cell-jrwBZR:last-child:not([data-cell-color]) .cell-text-eQtqiK{color:#fafafa!important}table .cell-jrwBZR{white-space:normal;word-wrap:break-word;vertical-align:middle;background-clip:padding-box;position:relative}table .cell-text-eQtqiK{flex-direction:column;align-items:stretch;padding:10px 14px;line-height:1.45;display:flex}.base-element-latex-SBWNCJ{position:absolute}.rotate-wrapper-jruZ3N{width:100%;height:100%}.screen-element-video-TNtsoU{position:absolute}.rotate-wrapper-VbGN_o,.element-content-PyhjCu{width:100%;height:100%}.screen-element-audio-roA6VT{position:absolute}.rotate-wrapper-Ag0Lnd,.element-content-C4l2fa{width:100%;height:100%}.element-content-C4l2fa{overflow:visible}.slide-thumbnails-HNsoCE{z-index:99;background:#f4f4f5;width:100%;height:100%;position:fixed;top:0;left:0}.return-button-ZiG7PY{height:56px;padding:16px 20px 0}.return-button-ZiG7PY .icon-FWeGJm{color:#71717a;cursor:pointer;font-size:28px}.return-button-ZiG7PY .icon-FWeGJm:hover{color:#18181b}.slide-thumbnails-content-hDOeNa{height:calc(100% - 72px);overflow:auto;overflow:overlay;flex-wrap:wrap;align-content:flex-start;gap:12px;padding:12px 20px 24px;display:flex}.slide-thumbnails-content-hDOeNa::-webkit-scrollbar{background-color:#0000;width:5px;height:5px}.slide-thumbnails-content-hDOeNa::-webkit-scrollbar-track{background:0 0}.slide-thumbnails-content-hDOeNa::-webkit-scrollbar-corner{background:0 0}.slide-thumbnails-content-hDOeNa::-webkit-scrollbar-button{width:0;height:0;display:none}.slide-thumbnails-content-hDOeNa::-webkit-scrollbar-thumb{background-color:#e1e1e1;border-radius:3px}.slide-thumbnails-content-hDOeNa .thumbnail-ABmRdv{cursor:pointer;border:1px solid #e4e4e7;border-radius:8px;width:150px;overflow:hidden}.slide-thumbnails-content-hDOeNa .thumbnail-ABmRdv:hover{border-color:#c4c4cc}.slide-thumbnails-content-hDOeNa .thumbnail-ABmRdv.active-o2u2Fy{border-color:#18181b;box-shadow:inset 0 0 0 1px #18181b}.writing-board-tool-CZM6Ws{z-index:10;pointer-events:none;font-size:12px;position:absolute;inset:0}.writing-board-tool-CZM6Ws .writing-board-wrap-O8Aywj{pointer-events:auto;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.writing-board-tool-CZM6Ws .tools-panel-vZel5n{pointer-events:auto}.writing-board-tool-CZM6Ws .tools-uN1BnQ{justify-content:space-between;align-items:center;width:100%;height:100%;display:flex}.writing-board-tool-CZM6Ws .tool-content-BHPAc3{align-items:center;display:flex}.writing-board-tool-CZM6Ws .btn-CAhVa8{cursor:pointer;border-radius:8px;margin-right:5px;padding:5px}.writing-board-tool-CZM6Ws .btn-CAhVa8:hover:not(.active-ynGLbv){color:#18181b}.writing-board-tool-CZM6Ws .btn-CAhVa8.active-ynGLbv{color:#fff;background-color:#18181b80}.writing-board-tool-CZM6Ws .btn-CAhVa8.disabled-fPTO6H{opacity:.35;cursor:default}.writing-board-tool-CZM6Ws .btn-CAhVa8.disabled-fPTO6H:hover{color:inherit}.writing-board-tool-CZM6Ws .btn-CAhVa8.close-livnZC{margin-left:5px;margin-right:0}.writing-board-tool-CZM6Ws .icon-Otsu7Q{font-size:20px}.shape-menu-ODTXgg{z-index:10060;pointer-events:auto;-webkit-user-select:none;user-select:none;background:#fff;border:1px solid #e4e4e7;border-radius:12px;align-items:center;gap:4px;height:44px;padding:6px 10px;font-size:13px;display:flex;position:fixed;box-shadow:0 8px 24px #18181b14,0 2px 6px #18181b0a}.shape-menu-ODTXgg .label-u3NHmZ{flex-shrink:0;width:70px}.shape-menu-ODTXgg .size-slider-WFmj9Y{width:90px}.shape-btn-xWccj0{appearance:none;box-shadow:none;color:#18181b;cursor:pointer;background:0 0;border:0;border-radius:8px;outline:0;justify-content:center;align-items:center;width:28px;height:28px;display:inline-flex}.shape-btn-xWccj0:hover{color:#18181b}.shape-btn-xWccj0.active-ynGLbv{color:#fff;background-color:#18181b80}.shape-btn-xWccj0 .icon-Otsu7Q{font-size:18px}.setting-QQaT_V{-webkit-user-select:none;user-select:none;align-items:center;width:200px;font-size:13px;display:flex}.setting-QQaT_V .label-u3NHmZ{width:70px}.setting-QQaT_V .size-slider-WFmj9Y{flex:1}.writing-board-jncwKh{z-index:8;cursor:none;touch-action:none;position:absolute;inset:0}.blackboard-NKh0jH{background-color:#0f392b;width:100%;height:100%}.canvas-U0rCv6{touch-action:none;position:absolute;top:0;left:0}.eraser-Y5jmJy,.pen-qZsg27{pointer-events:none;z-index:9;will-change:transform;position:absolute;top:0;left:0}.eraser-Y5jmJy .icon-rITb3m,.pen-qZsg27 .icon-rITb3m{filter:drop-shadow(2px 2px 2px #555)}.eraser-Y5jmJy{color:#555555bf;border:4px solid #55555526;border-radius:50%;justify-content:center;align-items:center;display:flex}.countdown-timer-JgghzN{-webkit-user-select:none;user-select:none}.header-O2Smv3{align-items:center;height:16px;margin-bottom:16px;font-size:13px;display:flex}.header-O2Smv3 .text-btn-DZmuFt{cursor:pointer;margin-right:8px}.header-O2Smv3 .text-btn-DZmuFt:hover,.header-O2Smv3 .text-btn-DZmuFt.active-jr26ZX{color:#18181b}.content-gcLQH4{justify-content:space-between;padding:0 5px;display:flex}.timer-jkmpO3{background-color:#18181b0d;border-radius:50%;width:54px;height:54px;overflow:hidden}.timer-jkmpO3 input{text-align:center;background-color:#0000;border:0;outline:0;width:100%;height:100%;font-size:22px}.colon-Ug__do{height:54px;font-size:22px;line-height:54px}.icon-btn-IoX0lq{cursor:pointer;justify-content:center;align-items:center;width:20px;height:20px;display:flex}.pause-sbvFOk,.play-BFvJ_P{font-size:17px}.reset-fgR6qd{font-size:12px}.close-btn-wXut5Z{cursor:pointer;padding:10px;line-height:1;position:absolute;top:0;right:0}.close-btn-wXut5Z:hover{color:#18181b}.bottom-thumbnails-ILwNfh{z-index:4;width:100%;transition:bottom .2s;position:fixed;bottom:-120px;left:0}.bottom-thumbnails-ILwNfh:after{content:"";width:100%;height:3px;position:absolute;top:-3px;left:0}.bottom-thumbnails-ILwNfh:hover{z-index:20;bottom:0}.bottom-thumbnails-ILwNfh .thumbnails-j6UWRc{white-space:nowrap;background-color:#000000bf;height:120px;padding:10px;position:relative;overflow:auto hidden}.thumbnail-rQRbp8{outline:2px solid #aaa;display:inline-block}.thumbnail-rQRbp8+.thumbnail-rQRbp8{margin-left:10px}.thumbnail-rQRbp8:hover{outline-color:#18181b}.thumbnail-rQRbp8.active-dUs5Mm{outline-width:3px;outline-color:#18181b}::-webkit-scrollbar{width:0;height:0}.laser-trail-AuWhhL{pointer-events:none;z-index:24;width:100%;height:100%;position:absolute;inset:0}.blank-veil-Otp0eW{z-index:30;cursor:pointer;justify-content:center;align-items:flex-end;padding-bottom:88px;display:flex;position:fixed;inset:0}.blank-veil-Otp0eW.black-tYe3gh{background:#000}.blank-veil-Otp0eW.white-apxn4S{background:#fff}.blank-hint-ng20nO{letter-spacing:.12em;text-transform:uppercase;color:#71717a;font-size:11px;font-weight:500}.black-tYe3gh .blank-hint-ng20nO{color:#ffffff73}.presenter-dock-W42lD3{z-index:40;opacity:0;pointer-events:none;background:#fff;border:1px solid #e4e4e7;border-radius:14px;align-items:center;gap:4px;height:44px;padding:6px;transition:opacity .22s;display:flex;position:fixed;bottom:16px;left:16px;box-shadow:0 8px 24px #18181b14,0 2px 6px #18181b0a}.presenter-dock-W42lD3.visible-tjrMCu{opacity:1;pointer-events:auto}.group-YpVR08{align-items:center;gap:2px;display:flex}.rule-uCJAaZ{background:#e4e4e7;width:1px;height:18px;margin:0 4px}.tool-dUnVe9{appearance:none;box-shadow:none;box-sizing:border-box;color:#71717a;min-width:32px;height:32px;font:inherit;cursor:pointer;background:0 0;border:0;border-radius:8px;outline:0;justify-content:center;align-items:center;gap:4px;padding:0 8px;font-size:16px;transition:background-color .15s,color .15s;display:inline-flex}.tool-dUnVe9:hover:not(:disabled):not(.on-ctwBVK){color:#18181b;background:#f4f4f5}.tool-dUnVe9.on-ctwBVK{color:#fff;background:#18181b}.tool-dUnVe9:disabled{opacity:.35;cursor:default}.tool-dUnVe9.end-Mv0vH_:hover:not(:disabled){color:#fff;background:#18181b}.page-LCsW_X{letter-spacing:-.02em;color:#18181b;font-variant-numeric:tabular-nums;min-width:0;padding:0 8px 0 10px;font-size:12px;font-weight:600}.page-LCsW_X .muted-L0yk3o{color:#71717a;margin:0 1px;font-weight:500}.page-LCsW_X .chevron-rtCfzD{color:#71717a;font-size:10px}.jump-panel-vTmGjz{width:min(268px,100vw - 32px);padding:8px}.jump-head-SDaUcj{letter-spacing:.08em;text-transform:uppercase;color:#71717a;padding:4px 6px 8px;font-size:11px;font-weight:600}.jump-grid-QTG4ik{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;max-height:min(52vh,420px);display:grid;overflow:auto}.jump-item-MZmy97{appearance:none;box-shadow:none;cursor:pointer;background:#f4f4f5;border:1px solid #e4e4e7;border-radius:8px;outline:0;min-width:0;padding:0;position:relative;overflow:hidden}.jump-item-MZmy97:hover{border-color:#c4c4cc}.jump-item-MZmy97.active-aNm92f{border-color:#18181b;box-shadow:inset 0 0 0 1px #18181b}.jump-index-YmeSF9{color:#fff;text-align:center;background:#18181b;border-radius:999px;min-width:18px;height:18px;padding:0 5px;font-size:10px;font-weight:700;line-height:18px;position:absolute;bottom:6px;left:6px}.more-menu-rBuzPG{min-width:200px;padding:4px}.more-item-E2tIth{color:#18181b;align-items:center;gap:8px;padding:8px 10px;display:flex}.more-item-E2tIth .icon-O2NQQi{color:#71717a;font-size:16px}.more-item-E2tIth .check-fCU8x9{color:#71717a;margin-left:auto;font-size:12px}.laser-swatches-PNMqei{flex-shrink:0;align-items:center;display:flex}.laser-swatches-PNMqei.row-pOHUxN{gap:4px;padding:0 4px}.laser-swatches-PNMqei.grid-maEbYP{grid-template-columns:repeat(2,14px);gap:6px;margin-top:6px;display:grid}.laser-swatch-GJvNZ_{appearance:none;box-shadow:none;cursor:pointer;background:0 0;border:1px solid #0000001f;border-radius:999px;outline:0;width:14px;height:14px;box-shadow:inset 0 0 0 1px #ffffff59}.laser-swatch-GJvNZ_.on-sYDXIi{outline-offset:1px;outline:2px solid #18181b}