@bendyline/squisq-editor-react 1.6.2 → 2.0.1

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 (218) hide show
  1. package/README.md +12 -3
  2. package/dist/index.d.ts +1275 -183
  3. package/dist/index.js +20345 -12777
  4. package/dist/index.js.map +1 -1
  5. package/dist/monaco.d.ts +1 -0
  6. package/dist/monaco.js +4 -0
  7. package/dist/monaco.js.map +1 -0
  8. package/dist/styles/index.css +1607 -241
  9. package/package.json +9 -5
  10. package/src/BlockPropertiesPopover.tsx +30 -15
  11. package/src/DocumentSettingsDialog.tsx +39 -33
  12. package/src/EditorContext.tsx +199 -42
  13. package/src/EditorShell.tsx +349 -261
  14. package/src/ImageEditor.tsx +22 -1
  15. package/src/InlinePreviewGutter.tsx +16 -8
  16. package/src/MediaBin.tsx +107 -14
  17. package/src/OutlinePanel.tsx +202 -7
  18. package/src/PlainHtmlPreview.tsx +40 -1
  19. package/src/PreviewControls.tsx +362 -89
  20. package/src/PreviewPanel.tsx +312 -78
  21. package/src/RawEditor.tsx +13 -2
  22. package/src/RecorderEntry.tsx +2 -0
  23. package/src/StatusBar.tsx +5 -2
  24. package/src/TemplateAnnotation.ts +12 -3
  25. package/src/TemplatePicker.tsx +75 -21
  26. package/src/ThemeCustomizerPanel.tsx +8 -0
  27. package/src/ThemePicker.tsx +10 -5
  28. package/src/TimelineBlockPreview.tsx +1 -1
  29. package/src/Toolbar.tsx +357 -51
  30. package/src/TransitionPicker.tsx +36 -4
  31. package/src/ViewMenuPanel.tsx +12 -14
  32. package/src/WysiwygEditor.tsx +124 -91
  33. package/src/__tests__/blockPropertiesPopoverTheme.test.tsx +33 -0
  34. package/src/__tests__/blockTagActivity.test.ts +183 -0
  35. package/src/__tests__/buildDocumentPreviewMarkdown.test.ts +75 -0
  36. package/src/__tests__/buildPreviewDocContent.test.ts +48 -0
  37. package/src/__tests__/buildPreviewDocTransition.test.ts +21 -1
  38. package/src/__tests__/canvasSurfaceTextEditing.test.tsx +60 -0
  39. package/src/__tests__/codeContextSectionView.test.tsx +8 -6
  40. package/src/__tests__/customLayoutManagerTheme.test.tsx +34 -0
  41. package/src/__tests__/documentSettingsDialog.test.tsx +51 -1
  42. package/src/__tests__/editorScrollHandoff.test.tsx +102 -0
  43. package/src/__tests__/editorScrollSync.test.ts +65 -0
  44. package/src/__tests__/editorShellProps.test.tsx +123 -1
  45. package/src/__tests__/emojiPicker.test.tsx +2 -42
  46. package/src/__tests__/headingTransition.test.ts +0 -12
  47. package/src/__tests__/imageEditAffordance.test.tsx +5 -1
  48. package/src/__tests__/imageEditModalContract.test.tsx +119 -0
  49. package/src/__tests__/imageEditorShell.test.tsx +15 -1
  50. package/src/__tests__/jsonEditor.test.tsx +56 -1
  51. package/src/__tests__/layersPanel.test.tsx +75 -5
  52. package/src/__tests__/majorApiTypes.test.ts +26 -0
  53. package/src/__tests__/mediaAttachmentFlow.test.ts +2 -2
  54. package/src/__tests__/mediaBinDrop.test.tsx +90 -0
  55. package/src/__tests__/narrationSave.test.ts +148 -0
  56. package/src/__tests__/outlinePanel.test.tsx +93 -3
  57. package/src/__tests__/outlineSource.test.ts +217 -0
  58. package/src/__tests__/plainHtmlPreview.test.tsx +17 -1
  59. package/src/__tests__/presentationMode.test.tsx +290 -0
  60. package/src/__tests__/previewControls.test.tsx +382 -5
  61. package/src/__tests__/previewPanelAudioFailure.test.tsx +46 -0
  62. package/src/__tests__/previewPanelPresentation.test.tsx +126 -0
  63. package/src/__tests__/previewPanelTransforms.test.tsx +117 -0
  64. package/src/__tests__/rawEditorModelIsolation.test.ts +19 -0
  65. package/src/__tests__/recorderTheme.test.tsx +42 -0
  66. package/src/__tests__/resolveBlockVisual.test.ts +43 -0
  67. package/src/__tests__/selectionConversions.test.ts +80 -0
  68. package/src/__tests__/statusBar.test.tsx +27 -0
  69. package/src/__tests__/teleprompter.test.tsx +190 -0
  70. package/src/__tests__/templateAnnotationRoundTrip.test.ts +26 -0
  71. package/src/__tests__/templatePickerPortal.test.tsx +62 -0
  72. package/src/__tests__/tiptapBridge.test.ts +71 -7
  73. package/src/__tests__/tiptapCodeBlockRoundTrip.test.ts +109 -0
  74. package/src/__tests__/tiptapImageRoundTrip.test.ts +1 -1
  75. package/src/__tests__/toolbarSelectionConversion.test.tsx +164 -0
  76. package/src/__tests__/transformStyleId.test.ts +13 -0
  77. package/src/__tests__/useImageEditor.test.tsx +67 -0
  78. package/src/__tests__/useMediaRecorder.test.ts +75 -0
  79. package/src/__tests__/viewMenuPanel.test.tsx +130 -0
  80. package/src/__tests__/wysiwygImageUpload.test.ts +69 -0
  81. package/src/__tests__/wysiwygTemplateBadgeFocus.test.tsx +56 -0
  82. package/src/asciiDiagram/AsciiDiagramExtension.ts +343 -0
  83. package/src/asciiDiagram/AsciiDiagramWidget.tsx +254 -0
  84. package/src/asciiDiagram/RepairableDiagramExtension.ts +200 -0
  85. package/src/asciiDiagram/__tests__/AsciiDiagramExtension.test.ts +145 -0
  86. package/src/asciiDiagram/__tests__/RepairableDiagramExtension.test.ts +159 -0
  87. package/src/asciiDiagram/__tests__/asciiDiagramCommands.test.ts +284 -0
  88. package/src/asciiDiagram/__tests__/asciiDiagramOps.test.ts +114 -0
  89. package/src/asciiDiagram/__tests__/asciiPaste.test.ts +43 -0
  90. package/src/asciiDiagram/asciiDiagramCommands.ts +174 -0
  91. package/src/asciiDiagram/asciiDiagramData.ts +149 -0
  92. package/src/asciiDiagram/asciiDiagramOps.ts +238 -0
  93. package/src/asciiDiagram/asciiPaste.ts +19 -0
  94. package/src/blockTagActivity.ts +233 -0
  95. package/src/buildDocumentPreviewMarkdown.ts +168 -0
  96. package/src/buildPreviewDoc.ts +19 -12
  97. package/src/codeContext/types.ts +1 -1
  98. package/src/customTemplates/CustomLayoutManager.tsx +3 -2
  99. package/src/customTemplates/CustomTemplateContext.tsx +6 -0
  100. package/src/customTemplates/TemplateDesigner.tsx +7 -4
  101. package/src/customTemplates/__tests__/library.test.ts +8 -0
  102. package/src/customTemplates/__tests__/useMemoryLayerAdapter.test.ts +13 -0
  103. package/src/customTemplates/designer.css +158 -99
  104. package/src/customTemplates/library.ts +16 -3
  105. package/src/customTemplates/useMemoryLayerAdapter.ts +7 -1
  106. package/src/customThemes/CustomThemeContext.tsx +6 -0
  107. package/src/customThemes/CustomThemeDialog.tsx +35 -5
  108. package/src/customThemes/ImportThemeSection.tsx +178 -0
  109. package/src/customThemes/__tests__/customThemeLibrary.test.ts +9 -0
  110. package/src/customThemes/__tests__/importThemeSection.test.tsx +192 -0
  111. package/src/customThemes/customThemeLibrary.ts +7 -4
  112. package/src/customThemes/index.ts +7 -1
  113. package/src/customThemes/themeDraft.ts +23 -7
  114. package/src/diagram/DiagramCanvas.tsx +25 -6
  115. package/src/diagram/types.ts +35 -0
  116. package/src/editorScrollSync.ts +73 -0
  117. package/src/emojiData.ts +3 -23
  118. package/src/frontmatterSettings.ts +23 -0
  119. package/src/headingTransition.ts +0 -15
  120. package/src/imageEditor/CanvasSurface.tsx +29 -23
  121. package/src/imageEditor/LayersPanel.tsx +78 -3
  122. package/src/imageEditor/Toolbar.tsx +5 -1
  123. package/src/imageEditor/icons.tsx +4 -0
  124. package/src/imageEditor/image-editor.css +75 -0
  125. package/src/imageEditor/layers/SelectionHandles.tsx +1 -1
  126. package/src/imageEditor/useImageEditor.ts +71 -14
  127. package/src/index.ts +198 -20
  128. package/src/jsonEditor/JsonEditorContext.tsx +12 -6
  129. package/src/jsonEditor/RenderNode.tsx +24 -3
  130. package/src/jsonEditor/editors.tsx +86 -19
  131. package/src/mediaEntries.ts +12 -0
  132. package/src/monaco.ts +35 -0
  133. package/src/monacoWorkers.ts +89 -0
  134. package/src/outlineSource.ts +171 -0
  135. package/src/presentation/PresentationMode.tsx +596 -0
  136. package/src/rawEditorIsolation.ts +18 -0
  137. package/src/recorder/RecorderButton.tsx +9 -1
  138. package/src/recorder/RecorderModal.tsx +84 -41
  139. package/src/recorder/RecorderPanel.tsx +9 -1
  140. package/src/recorder/hooks/useMediaRecorder.ts +97 -53
  141. package/src/resolveBlockVisual.ts +10 -4
  142. package/src/scene/Scene.tsx +48 -18
  143. package/src/scene/SceneBlockExtension.ts +17 -10
  144. package/src/scene/SceneBlockWidget.tsx +5 -1
  145. package/src/scene/SceneViewport.tsx +7 -3
  146. package/src/scene/ShapePalette.tsx +17 -2
  147. package/src/scene/__tests__/DiagramAdapter.test.ts +86 -0
  148. package/src/scene/__tests__/SceneBlockExtension.test.ts +33 -0
  149. package/src/scene/__tests__/sceneIsolation.test.tsx +119 -0
  150. package/src/scene/adapters/DiagramAdapter.ts +12 -101
  151. package/src/scene/adapters/DrawingAdapter.ts +6 -1
  152. package/src/scene/adapters/LayoutAdapter.ts +3 -0
  153. package/src/scene/commands/SceneCommand.ts +17 -3
  154. package/src/scene/index.ts +1 -6
  155. package/src/scene/layers/DiagramEdges.tsx +21 -7
  156. package/src/scene/layers/edgeGeometry.ts +9 -1
  157. package/src/scene/layers/nodeCard.tsx +27 -8
  158. package/src/scene/scene.css +5 -2
  159. package/src/scene/text/SceneTextOverlay.tsx +5 -5
  160. package/src/scene/text/sceneTextChannel.ts +26 -20
  161. package/src/scene/text/sceneTextConfig.ts +4 -0
  162. package/src/scene/tools/ConnectTool.ts +13 -4
  163. package/src/scene/tools/SceneTool.ts +8 -0
  164. package/src/scene/tools/SelectTool.ts +39 -23
  165. package/src/scene/tools/ShapeTool.ts +2 -3
  166. package/src/selectionConversions.ts +155 -0
  167. package/src/styles/ascii-diagram.css +79 -0
  168. package/src/styles/ascii-timeline.css +596 -0
  169. package/src/styles/editor.css +736 -120
  170. package/src/styles/index.css +3 -0
  171. package/src/styles/tree-view.css +189 -0
  172. package/src/teleprompter/TeleprompterControls.tsx +218 -0
  173. package/src/teleprompter/TeleprompterSelfView.tsx +22 -0
  174. package/src/teleprompter/TeleprompterSurface.tsx +267 -0
  175. package/src/teleprompter/TeleprompterView.tsx +338 -0
  176. package/src/teleprompter/canvasRenderer.ts +161 -0
  177. package/src/teleprompter/floatingWindow.ts +352 -0
  178. package/src/teleprompter/index.ts +61 -0
  179. package/src/teleprompter/pcmWorklet.ts +62 -0
  180. package/src/teleprompter/recording/insertPreamble.ts +80 -0
  181. package/src/teleprompter/recording/narrationSave.ts +134 -0
  182. package/src/teleprompter/recording/useNarrationRecorder.ts +367 -0
  183. package/src/teleprompter/scrollModel.ts +85 -0
  184. package/src/teleprompter/teleprompterTheme.ts +303 -0
  185. package/src/teleprompter/types.ts +38 -0
  186. package/src/teleprompter/useFloatingWindow.ts +74 -0
  187. package/src/teleprompter/useMicAnalysis.ts +211 -0
  188. package/src/teleprompter/useTeleprompter.ts +421 -0
  189. package/src/templateContentPreviewResolver.ts +12 -5
  190. package/src/timeline/TimelineEditorWidget.tsx +861 -0
  191. package/src/timeline/TimelineViewExtension.ts +252 -0
  192. package/src/timeline/__tests__/TimelineEditorWidget.test.tsx +414 -0
  193. package/src/timeline/__tests__/TimelineViewExtension.test.ts +163 -0
  194. package/src/timeline/__tests__/timelineCommands.test.ts +359 -0
  195. package/src/timeline/__tests__/timelineOps.test.ts +277 -0
  196. package/src/timeline/__tests__/timelinePaste.test.ts +34 -0
  197. package/src/timeline/timelineCommands.ts +421 -0
  198. package/src/timeline/timelineData.ts +54 -0
  199. package/src/timeline/timelineOps.ts +381 -0
  200. package/src/timeline/timelinePaste.ts +8 -0
  201. package/src/tiptapBridge.ts +47 -21
  202. package/src/transformStyleId.ts +17 -0
  203. package/src/treeview/TreeOutlineWidget.tsx +390 -0
  204. package/src/treeview/TreeViewExtension.ts +250 -0
  205. package/src/treeview/__tests__/TreeOutlineWidget.test.tsx +156 -0
  206. package/src/treeview/__tests__/TreeViewExtension.test.ts +122 -0
  207. package/src/treeview/__tests__/treeOps.test.ts +177 -0
  208. package/src/treeview/__tests__/treePaste.test.ts +40 -0
  209. package/src/treeview/__tests__/treeViewCommands.test.ts +179 -0
  210. package/src/treeview/treeOps.ts +231 -0
  211. package/src/treeview/treePaste.ts +13 -0
  212. package/src/treeview/treeViewCommands.ts +99 -0
  213. package/src/treeview/treeViewData.ts +41 -0
  214. package/src/useMonacoLoader.ts +11 -34
  215. package/src/wysiwygImageUpload.ts +113 -0
  216. package/src/diagram/DiagramExtension.ts +0 -209
  217. package/src/diagram/DiagramWidget.tsx +0 -272
  218. package/src/diagram/useDiagramData.ts +0 -126
@@ -7150,6 +7150,185 @@
7150
7150
  align-items: flex-end;
7151
7151
  box-sizing: border-box;
7152
7152
  }
7153
+ .squisq-toolbar-view-tab-wrap {
7154
+ display: flex;
7155
+ align-items: flex-end;
7156
+ align-self: stretch;
7157
+ }
7158
+ .squisq-toolbar-use-tab {
7159
+ border-bottom: 2px solid transparent;
7160
+ }
7161
+ .squisq-toolbar-use-tab > .squisq-toolbar-view-tab {
7162
+ padding-right: 4px;
7163
+ padding-bottom: 4px;
7164
+ border-bottom: 0;
7165
+ }
7166
+ .squisq-toolbar-use-tab--active {
7167
+ border-bottom-color: #2563eb;
7168
+ }
7169
+ .squisq-use-mode-trigger {
7170
+ align-self: stretch;
7171
+ display: inline-flex;
7172
+ align-items: flex-end;
7173
+ justify-content: center;
7174
+ width: 20px;
7175
+ padding: 0 6px 9px 0;
7176
+ border: 0;
7177
+ background: transparent;
7178
+ color: #4b5563;
7179
+ cursor: pointer;
7180
+ box-sizing: content-box;
7181
+ }
7182
+ .squisq-use-mode-trigger > svg {
7183
+ display: block;
7184
+ transform: translateY(-1px);
7185
+ }
7186
+ .squisq-use-mode-trigger:hover,
7187
+ .squisq-use-mode-trigger--open {
7188
+ color: #111827;
7189
+ }
7190
+ .squisq-toolbar-use-tab--active .squisq-use-mode-trigger {
7191
+ color: #1d4ed8;
7192
+ }
7193
+ .squisq-use-mode-menu {
7194
+ position: fixed;
7195
+ z-index: 120;
7196
+ width: min(340px, calc(100vw - 16px));
7197
+ padding: 6px;
7198
+ border: 1px solid #d1d5db;
7199
+ border-radius: 10px;
7200
+ background: #ffffff;
7201
+ box-shadow: 0 12px 32px rgba(15, 23, 42, 0.2), 0 2px 6px rgba(15, 23, 42, 0.08);
7202
+ box-sizing: border-box;
7203
+ font-family:
7204
+ -apple-system,
7205
+ BlinkMacSystemFont,
7206
+ "Segoe UI",
7207
+ "Noto Sans",
7208
+ Helvetica,
7209
+ Arial,
7210
+ sans-serif;
7211
+ animation: squisq-use-mode-menu-in 0.12s ease-out;
7212
+ }
7213
+ .squisq-use-mode-menu-item {
7214
+ display: flex;
7215
+ align-items: center;
7216
+ gap: 10px;
7217
+ width: 100%;
7218
+ min-height: 52px;
7219
+ padding: 7px 9px;
7220
+ border: 0;
7221
+ border-radius: 7px;
7222
+ background: transparent;
7223
+ color: #374151;
7224
+ font: inherit;
7225
+ text-align: left;
7226
+ cursor: pointer;
7227
+ transition: background 0.12s ease, color 0.12s ease;
7228
+ }
7229
+ .squisq-use-mode-menu-item:hover,
7230
+ .squisq-use-mode-menu-item:focus-visible {
7231
+ outline: none;
7232
+ background: #f3f4f6;
7233
+ color: #111827;
7234
+ }
7235
+ .squisq-use-mode-menu-item--selected {
7236
+ background: #eff6ff;
7237
+ color: #1d4ed8;
7238
+ }
7239
+ .squisq-use-mode-menu-icon {
7240
+ display: inline-flex;
7241
+ align-items: center;
7242
+ justify-content: center;
7243
+ width: 32px;
7244
+ height: 32px;
7245
+ flex: 0 0 32px;
7246
+ border-radius: 8px;
7247
+ background: #f1f5f9;
7248
+ color: #64748b;
7249
+ font-size: 14px;
7250
+ }
7251
+ .squisq-use-mode-menu-item--selected .squisq-use-mode-menu-icon {
7252
+ background: #dbeafe;
7253
+ color: #2563eb;
7254
+ }
7255
+ .squisq-use-mode-menu-copy {
7256
+ display: flex;
7257
+ flex: 1 1 auto;
7258
+ min-width: 0;
7259
+ flex-direction: column;
7260
+ gap: 2px;
7261
+ }
7262
+ .squisq-use-mode-menu-label {
7263
+ color: inherit;
7264
+ font-size: 12.5px;
7265
+ font-weight: 650;
7266
+ line-height: 1.2;
7267
+ }
7268
+ .squisq-use-mode-menu-summary {
7269
+ overflow: hidden;
7270
+ color: #6b7280;
7271
+ font-size: 11.5px;
7272
+ font-weight: 400;
7273
+ line-height: 1.3;
7274
+ text-overflow: ellipsis;
7275
+ white-space: nowrap;
7276
+ }
7277
+ .squisq-use-mode-menu-check {
7278
+ display: inline-flex;
7279
+ align-items: center;
7280
+ justify-content: center;
7281
+ width: 16px;
7282
+ flex: 0 0 16px;
7283
+ color: #2563eb;
7284
+ font-size: 11px;
7285
+ text-align: center;
7286
+ }
7287
+ @keyframes squisq-use-mode-menu-in {
7288
+ from {
7289
+ opacity: 0;
7290
+ transform: translateY(-3px) scale(0.99);
7291
+ }
7292
+ to {
7293
+ opacity: 1;
7294
+ transform: translateY(0) scale(1);
7295
+ }
7296
+ }
7297
+ @media (prefers-reduced-motion: reduce) {
7298
+ .squisq-use-mode-menu {
7299
+ animation: none;
7300
+ }
7301
+ }
7302
+ .squisq-use-mode-menu[data-theme=dark] {
7303
+ border-color: #4b5563;
7304
+ background: #1f2937;
7305
+ }
7306
+ .squisq-use-mode-menu[data-theme=dark] .squisq-use-mode-menu-item {
7307
+ color: #d1d5db;
7308
+ }
7309
+ .squisq-use-mode-menu[data-theme=dark] .squisq-use-mode-menu-item:hover,
7310
+ .squisq-use-mode-menu[data-theme=dark] .squisq-use-mode-menu-item:focus-visible {
7311
+ background: #374151;
7312
+ color: #f9fafb;
7313
+ }
7314
+ .squisq-use-mode-menu[data-theme=dark] .squisq-use-mode-menu-item--selected {
7315
+ background: #172f4f;
7316
+ color: #93c5fd;
7317
+ }
7318
+ .squisq-use-mode-menu[data-theme=dark] .squisq-use-mode-menu-icon {
7319
+ background: #334155;
7320
+ color: #cbd5e1;
7321
+ }
7322
+ .squisq-use-mode-menu[data-theme=dark] .squisq-use-mode-menu-item--selected .squisq-use-mode-menu-icon {
7323
+ background: #1e4976;
7324
+ color: #bfdbfe;
7325
+ }
7326
+ .squisq-use-mode-menu[data-theme=dark] .squisq-use-mode-menu-summary {
7327
+ color: #94a3b8;
7328
+ }
7329
+ .squisq-use-mode-menu[data-theme=dark] .squisq-use-mode-menu-check {
7330
+ color: #93c5fd;
7331
+ }
7153
7332
  .squisq-editor-shell[data-outline-visible=true] .squisq-toolbar-view-tabs {
7154
7333
  flex-shrink: 0;
7155
7334
  min-width: var(--squisq-outline-width, 240px);
@@ -7381,6 +7560,7 @@
7381
7560
  z-index: 100;
7382
7561
  min-width: 200px;
7383
7562
  padding: 4px 0;
7563
+ font-family: var( --squisq-ux-font, -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif );
7384
7564
  background: #fff;
7385
7565
  border: 1px solid #e5e7eb;
7386
7566
  border-radius: 6px;
@@ -7395,6 +7575,11 @@
7395
7575
  color: #9ca3af;
7396
7576
  user-select: none;
7397
7577
  }
7578
+ .squisq-insert-menu-header--separated {
7579
+ margin-top: 4px;
7580
+ padding-top: 8px;
7581
+ border-top: 1px solid #e5e7eb;
7582
+ }
7398
7583
  .squisq-insert-menu[data-theme=dark] {
7399
7584
  background: #1f2937;
7400
7585
  border-color: #374151;
@@ -7409,6 +7594,9 @@
7409
7594
  .squisq-insert-menu[data-theme=dark] .squisq-insert-menu-header {
7410
7595
  color: #6b7280;
7411
7596
  }
7597
+ .squisq-insert-menu[data-theme=dark] .squisq-insert-menu-header--separated {
7598
+ border-top-color: #374151;
7599
+ }
7412
7600
  .squisq-template-picker {
7413
7601
  display: flex;
7414
7602
  align-items: center;
@@ -8170,7 +8358,7 @@
8170
8358
  border: 0;
8171
8359
  border-radius: 0;
8172
8360
  vertical-align: baseline;
8173
- transform: translateY(2px);
8361
+ transform: translate(3px, 0);
8174
8362
  user-select: none;
8175
8363
  line-height: 1;
8176
8364
  cursor: pointer;
@@ -8258,6 +8446,14 @@
8258
8446
  .squisq-wysiwyg-container[data-block-tags=hidden] .squisq-props-badge {
8259
8447
  display: none;
8260
8448
  }
8449
+ .squisq-wysiwyg-container[data-block-tags=active] .squisq-template-badge,
8450
+ .squisq-wysiwyg-container[data-block-tags=active] .squisq-props-badge {
8451
+ display: none;
8452
+ }
8453
+ .squisq-wysiwyg-container[data-block-tags=active] .squisq-wysiwyg-editor.ProseMirror-focused :is(.squisq-block-tags--selected, .squisq-block-tags--hovered) > .squisq-template-badge,
8454
+ .squisq-wysiwyg-container[data-block-tags=active] .squisq-wysiwyg-editor.ProseMirror-focused :is(.squisq-block-tags--selected, .squisq-block-tags--hovered) > .squisq-props-badge {
8455
+ display: inline-flex;
8456
+ }
8261
8457
  .squisq-props-badge {
8262
8458
  display: inline-flex;
8263
8459
  align-items: center;
@@ -8276,6 +8472,7 @@
8276
8472
  border: 1px solid #d1d5db;
8277
8473
  border-radius: 10px;
8278
8474
  vertical-align: middle;
8475
+ transform: translate(3px, -2px);
8279
8476
  user-select: none;
8280
8477
  cursor: pointer;
8281
8478
  opacity: 0.5;
@@ -8286,16 +8483,16 @@
8286
8483
  }
8287
8484
  .squisq-props-badge::before {
8288
8485
  content: "\f1de";
8289
- font-family: "Font Awesome 6 Free";
8486
+ font-family: var(--fa-family-classic, "Font Awesome 7 Free");
8290
8487
  font-weight: 900;
8291
8488
  font-size: 10px;
8292
8489
  line-height: 1;
8293
8490
  }
8294
8491
  .squisq-props-badge[data-props-summary] {
8295
8492
  opacity: 1;
8296
- color: #6d28d9;
8297
- background: #f5f3ff;
8298
- border-color: #c4b5fd;
8493
+ color: var(--squisq-block-props-accent, inherit);
8494
+ background: color-mix(in oklch, currentColor 12%, transparent);
8495
+ border-color: color-mix(in oklch, currentColor 35%, transparent);
8299
8496
  }
8300
8497
  .squisq-props-badge[data-props-summary]::after {
8301
8498
  content: attr(data-props-summary);
@@ -8309,11 +8506,31 @@
8309
8506
  .squisq-props-badge:hover,
8310
8507
  .squisq-props-badge:focus-visible {
8311
8508
  opacity: 1;
8312
- color: #6d28d9;
8313
- background: #ede9fe;
8314
- border-color: #c4b5fd;
8509
+ color: var(--squisq-block-props-accent, inherit);
8510
+ background: color-mix(in oklch, currentColor 16%, transparent);
8511
+ border-color: color-mix(in oklch, currentColor 42%, transparent);
8315
8512
  outline: none;
8316
8513
  }
8514
+ :is(.squisq-block-props-popover, .squisq-transition-picker, .squisq-transition-flyout) {
8515
+ --squisq-block-props-surface: #ffffff;
8516
+ --squisq-block-props-surface-hover: #f3f4f6;
8517
+ --squisq-block-props-input: #ffffff;
8518
+ --squisq-block-props-text: #111827;
8519
+ --squisq-block-props-muted: #6b7280;
8520
+ --squisq-block-props-quiet: #9ca3af;
8521
+ --squisq-block-props-border: #d1d5db;
8522
+ --squisq-block-props-divider: #e5e7eb;
8523
+ }
8524
+ :is(.squisq-block-props-popover, .squisq-transition-picker, .squisq-transition-flyout)[data-theme=dark] {
8525
+ --squisq-block-props-surface: #1f2937;
8526
+ --squisq-block-props-surface-hover: #374151;
8527
+ --squisq-block-props-input: #111827;
8528
+ --squisq-block-props-text: #f9fafb;
8529
+ --squisq-block-props-muted: #d1d5db;
8530
+ --squisq-block-props-quiet: #9ca3af;
8531
+ --squisq-block-props-border: #4b5563;
8532
+ --squisq-block-props-divider: #374151;
8533
+ }
8317
8534
  .squisq-block-props-popover {
8318
8535
  width: 280px;
8319
8536
  max-width: calc(100vw - 24px);
@@ -8321,8 +8538,9 @@
8321
8538
  display: flex;
8322
8539
  flex-direction: column;
8323
8540
  gap: 10px;
8324
- background: #fff;
8325
- border: 1px solid #e5e7eb;
8541
+ color: var(--squisq-block-props-text);
8542
+ background: var(--squisq-block-props-surface);
8543
+ border: 1px solid var(--squisq-block-props-divider);
8326
8544
  border-radius: 10px;
8327
8545
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12), 0 2px 6px rgba(0, 0, 0, 0.08);
8328
8546
  }
@@ -8335,7 +8553,7 @@
8335
8553
  .squisq-block-props-label {
8336
8554
  font-size: 11px;
8337
8555
  font-weight: 600;
8338
- color: #6b7280;
8556
+ color: var(--squisq-block-props-muted);
8339
8557
  flex-shrink: 0;
8340
8558
  }
8341
8559
  .squisq-block-props-numfield {
@@ -8347,43 +8565,37 @@
8347
8565
  width: 72px;
8348
8566
  padding: 4px 6px;
8349
8567
  font-size: 12px;
8350
- color: #111827;
8351
- border: 1px solid #d1d5db;
8568
+ color: var(--squisq-block-props-text);
8569
+ background: var(--squisq-block-props-input);
8570
+ border: 1px solid var(--squisq-block-props-border);
8352
8571
  border-radius: 5px;
8353
8572
  outline: none;
8354
8573
  }
8355
8574
  .squisq-block-props-input:focus {
8356
- border-color: #6366f1;
8575
+ border-color: var(--squisq-block-props-accent, #6366f1);
8357
8576
  }
8358
8577
  .squisq-block-props-unit {
8359
8578
  font-size: 11px;
8360
- color: #9ca3af;
8579
+ color: var(--squisq-block-props-quiet);
8361
8580
  }
8362
- .squisq-editor-shell[data-theme=dark] .squisq-props-badge {
8581
+ .squisq-editor-shell[data-theme=dark] .squisq-props-badge:not([data-props-summary]) {
8363
8582
  border-color: #4b5563;
8364
8583
  color: #9ca3af;
8365
8584
  }
8366
8585
  .squisq-editor-shell[data-theme=dark] .squisq-props-badge[data-props-summary] {
8367
- color: #ddd6fe;
8368
- background: #3730a3;
8369
- border-color: #6d5fd6;
8586
+ color: var(--squisq-block-props-accent, inherit);
8587
+ background: color-mix(in oklch, currentColor 24%, transparent);
8588
+ border-color: color-mix(in oklch, currentColor 52%, transparent);
8370
8589
  }
8371
8590
  .squisq-editor-shell[data-theme=dark] .squisq-props-badge:hover,
8372
8591
  .squisq-editor-shell[data-theme=dark] .squisq-props-badge:focus-visible {
8373
- color: #ede9fe;
8374
- background: #4c1d95;
8375
- border-color: #7c3aed;
8592
+ color: var(--squisq-block-props-accent, inherit);
8593
+ background: color-mix(in oklch, currentColor 28%, transparent);
8594
+ border-color: color-mix(in oklch, currentColor 58%, transparent);
8376
8595
  }
8377
- .squisq-editor-shell[data-theme=dark] .squisq-block-props-popover {
8378
- background: #1f2937;
8379
- border-color: #374151;
8596
+ .squisq-block-props-popover[data-theme=dark] {
8380
8597
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.4), 0 2px 6px rgba(0, 0, 0, 0.2);
8381
8598
  }
8382
- .squisq-editor-shell[data-theme=dark] .squisq-block-props-input {
8383
- background: #111827;
8384
- color: #f9fafb;
8385
- border-color: #4b5563;
8386
- }
8387
8599
  .squisq-status-bar {
8388
8600
  display: flex;
8389
8601
  align-items: center;
@@ -8451,10 +8663,11 @@
8451
8663
  }
8452
8664
  .squisq-wysiwyg-editor h2 {
8453
8665
  font-size: 1.5em;
8454
- margin: 0.65em 0 0.35em;
8666
+ margin: 0.8em 0 0.25em;
8455
8667
  }
8456
8668
  .squisq-wysiwyg-editor h3 {
8457
8669
  font-size: 1.17em;
8670
+ min-height: 26px;
8458
8671
  margin: 1.3em 0 0.3em;
8459
8672
  }
8460
8673
  .squisq-wysiwyg-editor h4 {
@@ -8474,7 +8687,7 @@
8474
8687
  }
8475
8688
  .squisq-wysiwyg-editor p {
8476
8689
  margin: 0.5em 0;
8477
- line-height: 1.6;
8690
+ line-height: 1.7;
8478
8691
  }
8479
8692
  .squisq-wysiwyg-editor blockquote {
8480
8693
  border-left: 3px solid var(--squisq-theme-text-muted, #d1d5db);
@@ -8482,6 +8695,9 @@
8482
8695
  margin: 0.5em 0;
8483
8696
  color: var(--squisq-theme-text-muted, #6b7280);
8484
8697
  }
8698
+ .squisq-wysiwyg-editor blockquote > p {
8699
+ margin: 0;
8700
+ }
8485
8701
  .squisq-wysiwyg-editor pre {
8486
8702
  background: var(--squisq-theme-bg-muted, #1e293b);
8487
8703
  color: var(--squisq-theme-text, #e2e8f0);
@@ -8490,6 +8706,13 @@
8490
8706
  overflow-x: auto;
8491
8707
  font-size: 13px;
8492
8708
  line-height: 1.5;
8709
+ font-family:
8710
+ ui-monospace,
8711
+ SFMono-Regular,
8712
+ Menlo,
8713
+ Consolas,
8714
+ "Liberation Mono",
8715
+ monospace;
8493
8716
  }
8494
8717
  .squisq-wysiwyg-editor code {
8495
8718
  background: var(--squisq-theme-bg-muted, #f1f5f9);
@@ -8497,6 +8720,13 @@
8497
8720
  padding: 1px 4px;
8498
8721
  border-radius: 3px;
8499
8722
  font-size: 0.9em;
8723
+ font-family:
8724
+ ui-monospace,
8725
+ SFMono-Regular,
8726
+ Menlo,
8727
+ Consolas,
8728
+ "Liberation Mono",
8729
+ monospace;
8500
8730
  }
8501
8731
  .squisq-wysiwyg-editor pre code {
8502
8732
  background: none;
@@ -8751,6 +8981,46 @@
8751
8981
  accent-color: #2563eb;
8752
8982
  cursor: pointer;
8753
8983
  }
8984
+ .squisq-presentation-control {
8985
+ display: inline-flex;
8986
+ align-items: center;
8987
+ flex: 0 0 auto;
8988
+ margin: 0 5px 0 3px;
8989
+ border: 1px solid var(--squisq-border, #d1d5db);
8990
+ border-radius: 5px;
8991
+ background: var(--squisq-input-bg, #fff);
8992
+ overflow: hidden;
8993
+ }
8994
+ .squisq-presentation-control .squisq-presentation-start {
8995
+ width: 30px;
8996
+ border-radius: 0;
8997
+ }
8998
+ .squisq-presentation-menu-trigger {
8999
+ align-self: stretch;
9000
+ display: inline-flex;
9001
+ align-items: center;
9002
+ justify-content: center;
9003
+ width: 18px;
9004
+ padding: 0;
9005
+ border: 0;
9006
+ border-left: 1px solid var(--squisq-border, #d1d5db);
9007
+ background: transparent;
9008
+ color: var(--squisq-text-muted, #6b7280);
9009
+ cursor: pointer;
9010
+ }
9011
+ .squisq-presentation-menu-trigger:hover,
9012
+ .squisq-presentation-menu-trigger--open {
9013
+ background: rgba(107, 114, 128, 0.2);
9014
+ color: var(--squisq-text, #111827);
9015
+ }
9016
+ .squisq-presentation-menu-item:disabled {
9017
+ cursor: not-allowed;
9018
+ opacity: 0.55;
9019
+ }
9020
+ .squisq-presentation-menu-item:disabled:hover {
9021
+ background: transparent;
9022
+ color: inherit;
9023
+ }
8754
9024
  .squisq-wysiwyg-editor a {
8755
9025
  color: color-mix(in srgb, var(--squisq-theme-primary, #2563eb) 65%, var(--squisq-theme-text, #1f2937));
8756
9026
  text-decoration: underline;
@@ -8789,6 +9059,116 @@
8789
9059
  overflow: auto;
8790
9060
  color: #dc2626;
8791
9061
  }
9062
+ .squisq-editor-shell[data-presentation-mode=control],
9063
+ .squisq-editor-shell[data-presentation-mode=fullscreen] {
9064
+ position: relative;
9065
+ background: #000;
9066
+ }
9067
+ .squisq-editor-shell[data-presentation-mode=control] > .squisq-editor-header,
9068
+ .squisq-editor-shell[data-presentation-mode=fullscreen] > .squisq-editor-header,
9069
+ .squisq-editor-shell[data-presentation-mode=control] > .squisq-status-bar,
9070
+ .squisq-editor-shell[data-presentation-mode=fullscreen] > .squisq-status-bar,
9071
+ .squisq-editor-shell[data-presentation-mode=control] > .squisq-timeline,
9072
+ .squisq-editor-shell[data-presentation-mode=fullscreen] > .squisq-timeline {
9073
+ display: none;
9074
+ }
9075
+ .squisq-editor-shell[data-presentation-mode=control] .squisq-media-bin,
9076
+ .squisq-editor-shell[data-presentation-mode=fullscreen] .squisq-media-bin,
9077
+ .squisq-editor-shell[data-presentation-mode=control] .squisq-custom-theme-pane,
9078
+ .squisq-editor-shell[data-presentation-mode=fullscreen] .squisq-custom-theme-pane {
9079
+ display: none;
9080
+ }
9081
+ .squisq-editor-shell[data-presentation-mode=control] .squisq-preview-player,
9082
+ .squisq-editor-shell[data-presentation-mode=fullscreen] .squisq-preview-player {
9083
+ padding: 0;
9084
+ background: #000;
9085
+ }
9086
+ .squisq-editor-shell[data-presentation-mode=fullscreen]:fullscreen {
9087
+ width: 100vw !important;
9088
+ height: 100vh !important;
9089
+ min-width: 0 !important;
9090
+ min-height: 0 !important;
9091
+ max-width: none !important;
9092
+ max-height: none !important;
9093
+ }
9094
+ .squisq-presentation-exit {
9095
+ position: absolute;
9096
+ z-index: 1001;
9097
+ top: 12px;
9098
+ right: 12px;
9099
+ display: inline-flex;
9100
+ align-items: center;
9101
+ gap: 7px;
9102
+ min-height: 34px;
9103
+ padding: 7px 11px;
9104
+ border: 1px solid rgba(255, 255, 255, 0.35);
9105
+ border-radius: 7px;
9106
+ background: rgba(15, 23, 42, 0.78);
9107
+ color: #fff;
9108
+ font: 600 12px/1 var(--squisq-ux-font, sans-serif);
9109
+ cursor: pointer;
9110
+ opacity: 0.72;
9111
+ backdrop-filter: blur(8px);
9112
+ transition: opacity 0.12s ease, background 0.12s ease;
9113
+ }
9114
+ .squisq-presentation-exit:hover,
9115
+ .squisq-presentation-exit:focus-visible {
9116
+ outline: none;
9117
+ background: rgba(15, 23, 42, 0.94);
9118
+ opacity: 1;
9119
+ }
9120
+ .squisq-presentation-window {
9121
+ width: 100%;
9122
+ height: 100%;
9123
+ display: flex;
9124
+ overflow: hidden;
9125
+ background: #000;
9126
+ }
9127
+ .squisq-presentation-window-preview,
9128
+ .squisq-presentation-window-surface,
9129
+ .squisq-presentation-teleprompter {
9130
+ width: 100%;
9131
+ height: 100%;
9132
+ min-width: 0;
9133
+ min-height: 0;
9134
+ }
9135
+ .squisq-presentation-window-preview {
9136
+ display: flex;
9137
+ }
9138
+ .squisq-presentation-window-surface {
9139
+ padding: 0;
9140
+ background: #000;
9141
+ pointer-events: none;
9142
+ }
9143
+ .squisq-presentation-teleprompter {
9144
+ display: flex;
9145
+ overflow: hidden;
9146
+ pointer-events: none;
9147
+ }
9148
+ .squisq-presentation-connecting {
9149
+ color: rgba(255, 255, 255, 0.72);
9150
+ font: 500 14px/1.4 var(--squisq-ux-font, sans-serif);
9151
+ }
9152
+ .squisq-presentation-error {
9153
+ position: fixed;
9154
+ z-index: 10000;
9155
+ top: 16px;
9156
+ left: 50%;
9157
+ max-width: min(420px, calc(100vw - 32px));
9158
+ padding: 10px 14px;
9159
+ border: 1px solid #fecaca;
9160
+ border-radius: 8px;
9161
+ background: #fff1f2;
9162
+ color: #991b1b;
9163
+ box-shadow: 0 10px 30px rgba(15, 23, 42, 0.2);
9164
+ font: 500 13px/1.4 var(--squisq-ux-font, sans-serif);
9165
+ transform: translateX(-50%);
9166
+ }
9167
+ .squisq-presentation-error[data-theme=dark] {
9168
+ border-color: #7f1d1d;
9169
+ background: #3f151b;
9170
+ color: #fecdd3;
9171
+ }
8792
9172
  .squisq-editor-shell {
8793
9173
  --squisq-bg: #f5f5f5;
8794
9174
  --squisq-border: #e0e0e0;
@@ -8839,6 +9219,17 @@
8839
9219
  color: #93c5fd;
8840
9220
  border-bottom-color: #60a5fa;
8841
9221
  }
9222
+ .squisq-editor-shell[data-theme=dark] .squisq-toolbar-use-tab--active {
9223
+ border-bottom-color: #60a5fa;
9224
+ }
9225
+ .squisq-editor-shell[data-theme=dark] .squisq-use-mode-trigger {
9226
+ color: #d1d5db;
9227
+ }
9228
+ .squisq-editor-shell[data-theme=dark] .squisq-use-mode-trigger:hover,
9229
+ .squisq-editor-shell[data-theme=dark] .squisq-use-mode-trigger--open,
9230
+ .squisq-editor-shell[data-theme=dark] .squisq-toolbar-use-tab--active .squisq-use-mode-trigger {
9231
+ color: #93c5fd;
9232
+ }
8842
9233
  .squisq-editor-shell[data-theme=dark] .squisq-toolbar-button {
8843
9234
  color: #d1d5db;
8844
9235
  }
@@ -9135,6 +9526,7 @@
9135
9526
  }
9136
9527
  }
9137
9528
  .squisq-media-bin {
9529
+ position: relative;
9138
9530
  width: 220px;
9139
9531
  border-left: 1px solid #e5e7eb;
9140
9532
  background: #f9fafb;
@@ -9143,15 +9535,51 @@
9143
9535
  flex-shrink: 0;
9144
9536
  overflow: hidden;
9145
9537
  }
9146
- .squisq-media-bin-header {
9538
+ .squisq-media-bin-drop-target {
9539
+ position: absolute;
9540
+ inset: 6px;
9541
+ z-index: 5;
9147
9542
  display: flex;
9543
+ flex-direction: column;
9148
9544
  align-items: center;
9149
- justify-content: space-between;
9150
- padding: 8px 10px;
9151
- border-bottom: 1px solid #e5e7eb;
9152
- flex-shrink: 0;
9153
- }
9154
- .squisq-media-bin-title {
9545
+ justify-content: center;
9546
+ gap: 4px;
9547
+ border: 2px dashed #2563eb;
9548
+ border-radius: 6px;
9549
+ background: rgba(239, 246, 255, 0.96);
9550
+ color: #1d4ed8;
9551
+ font-size: 12px;
9552
+ text-align: center;
9553
+ pointer-events: none;
9554
+ }
9555
+ .squisq-media-bin-drop-target-icon {
9556
+ display: flex;
9557
+ align-items: center;
9558
+ justify-content: center;
9559
+ width: 28px;
9560
+ height: 28px;
9561
+ border-radius: 999px;
9562
+ background: #2563eb;
9563
+ color: #fff;
9564
+ font-size: 22px;
9565
+ font-weight: 400;
9566
+ line-height: 1;
9567
+ }
9568
+ .squisq-media-bin-drop-target strong {
9569
+ font-size: 13px;
9570
+ }
9571
+ .squisq-media-bin-drop-target span:last-child {
9572
+ color: #64748b;
9573
+ }
9574
+ .squisq-media-bin-header {
9575
+ display: flex;
9576
+ align-items: center;
9577
+ justify-content: space-between;
9578
+ padding: 8px 10px;
9579
+ border-bottom: 1px solid #e5e7eb;
9580
+ flex-shrink: 0;
9581
+ }
9582
+ .squisq-media-bin-title {
9155
9583
  font-size: 12px;
9156
9584
  font-weight: 600;
9157
9585
  color: #374151;
@@ -9302,6 +9730,16 @@
9302
9730
  background: #1e293b;
9303
9731
  border-left-color: #374151;
9304
9732
  }
9733
+ .squisq-media-bin--dark .squisq-media-bin-drop-target,
9734
+ .squisq-editor-shell[data-theme=dark] .squisq-media-bin .squisq-media-bin-drop-target {
9735
+ border-color: #60a5fa;
9736
+ background: rgba(15, 23, 42, 0.96);
9737
+ color: #bfdbfe;
9738
+ }
9739
+ .squisq-media-bin--dark .squisq-media-bin-drop-target span:last-child,
9740
+ .squisq-editor-shell[data-theme=dark] .squisq-media-bin .squisq-media-bin-drop-target span:last-child {
9741
+ color: #94a3b8;
9742
+ }
9305
9743
  .squisq-media-bin--dark .squisq-media-bin-header,
9306
9744
  .squisq-editor-shell[data-theme=dark] .squisq-media-bin .squisq-media-bin-header {
9307
9745
  border-bottom-color: #374151;
@@ -10221,6 +10659,57 @@
10221
10659
  .squisq-theme-customizer-button--primary:hover {
10222
10660
  background: #1d4ed8;
10223
10661
  }
10662
+ .squisq-theme-import {
10663
+ display: flex;
10664
+ flex-direction: column;
10665
+ gap: 6px;
10666
+ }
10667
+ .squisq-theme-import-drop {
10668
+ display: flex;
10669
+ align-items: center;
10670
+ gap: 8px;
10671
+ padding: 8px;
10672
+ border: 1px dashed var(--squisq-border, #d1d5db);
10673
+ border-radius: 6px;
10674
+ background: var(--squisq-input-bg, #f9fafb);
10675
+ }
10676
+ .squisq-theme-import-drop--active {
10677
+ border-color: #2563eb;
10678
+ background: rgba(37, 99, 235, 0.08);
10679
+ }
10680
+ .squisq-theme-import-drop--busy {
10681
+ opacity: 0.7;
10682
+ pointer-events: none;
10683
+ }
10684
+ .squisq-theme-import-hint {
10685
+ font-size: 11px;
10686
+ color: var(--squisq-text-muted, #6b7280);
10687
+ }
10688
+ .squisq-theme-import-status {
10689
+ font-size: 11px;
10690
+ color: var(--squisq-text-muted, #6b7280);
10691
+ }
10692
+ .squisq-theme-import-error {
10693
+ font-size: 11px;
10694
+ color: #dc2626;
10695
+ }
10696
+ .squisq-theme-import-warnings {
10697
+ margin: 0;
10698
+ padding-left: 16px;
10699
+ font-size: 11px;
10700
+ color: var(--squisq-text-muted, #6b7280);
10701
+ }
10702
+ .squisq-editor-shell[data-theme=dark] .squisq-theme-import-drop {
10703
+ border-color: #374151;
10704
+ background: #111827;
10705
+ }
10706
+ .squisq-editor-shell[data-theme=dark] .squisq-theme-import-drop--active {
10707
+ border-color: #3b82f6;
10708
+ background: rgba(59, 130, 246, 0.12);
10709
+ }
10710
+ .squisq-editor-shell[data-theme=dark] .squisq-theme-import-error {
10711
+ color: #f87171;
10712
+ }
10224
10713
  .squisq-editor-shell[data-theme=dark] .squisq-theme-customizer-popover {
10225
10714
  background: #1f2937;
10226
10715
  border-color: #374151;
@@ -10832,6 +11321,7 @@
10832
11321
  padding: 0;
10833
11322
  }
10834
11323
  .squisq-outline-item {
11324
+ position: relative;
10835
11325
  margin: 0;
10836
11326
  }
10837
11327
  .squisq-outline-row {
@@ -10853,6 +11343,46 @@
10853
11343
  .squisq-outline-row:hover {
10854
11344
  background: #f3f4f6;
10855
11345
  }
11346
+ .squisq-outline-row[draggable=true] {
11347
+ cursor: grab;
11348
+ }
11349
+ .squisq-outline-row[draggable=true]:active {
11350
+ cursor: grabbing;
11351
+ }
11352
+ .squisq-outline-drag-handle {
11353
+ display: inline-flex;
11354
+ align-items: center;
11355
+ justify-content: center;
11356
+ flex: 0 0 8px;
11357
+ color: currentColor;
11358
+ opacity: 0.35;
11359
+ transition: opacity 0.1s ease;
11360
+ }
11361
+ .squisq-outline-row:hover .squisq-outline-drag-handle,
11362
+ .squisq-outline-row:focus-visible .squisq-outline-drag-handle {
11363
+ opacity: 0.75;
11364
+ }
11365
+ .squisq-outline-item--dragging {
11366
+ opacity: 0.42;
11367
+ }
11368
+ .squisq-outline-item--drop-before > .squisq-outline-row-wrap::before,
11369
+ .squisq-outline-item--drop-after::after {
11370
+ content: "";
11371
+ position: absolute;
11372
+ z-index: 2;
11373
+ left: 4px;
11374
+ right: 4px;
11375
+ height: 2px;
11376
+ border-radius: 999px;
11377
+ background: var(--squisq-outline-accent, #4338ca);
11378
+ pointer-events: none;
11379
+ }
11380
+ .squisq-outline-item--drop-before > .squisq-outline-row-wrap::before {
11381
+ top: -1px;
11382
+ }
11383
+ .squisq-outline-item--drop-after::after {
11384
+ bottom: -1px;
11385
+ }
10856
11386
  .squisq-outline-row-text {
10857
11387
  overflow: hidden;
10858
11388
  text-overflow: ellipsis;
@@ -10993,9 +11523,6 @@
10993
11523
  --squisq-preview-empty-border: #374151;
10994
11524
  --squisq-preview-empty-text: #94a3b8;
10995
11525
  }
10996
- .squisq-editor-shell[data-theme=dark] .squisq-inline-preview-gutter {
10997
- background: var(--squisq-preview-gutter-bg);
10998
- }
10999
11526
  .squisq-editor-shell[data-theme=dark] .squisq-outline-empty {
11000
11527
  color: #94a3b8;
11001
11528
  }
@@ -11715,36 +12242,36 @@
11715
12242
  padding: 3px 8px;
11716
12243
  font-size: 12px;
11717
12244
  font-weight: 500;
11718
- color: #374151;
11719
- background: #fff;
11720
- border: 1px solid #d1d5db;
12245
+ color: var(--squisq-block-props-text);
12246
+ background: var(--squisq-block-props-surface);
12247
+ border: 1px solid var(--squisq-block-props-border);
11721
12248
  border-radius: 5px;
11722
12249
  cursor: pointer;
11723
12250
  white-space: nowrap;
11724
12251
  transition: background 0.1s, border-color 0.1s;
11725
12252
  }
11726
12253
  .squisq-transition-picker-trigger:hover {
11727
- background: #f3f4f6;
11728
- border-color: #9ca3af;
12254
+ background: var(--squisq-block-props-surface-hover);
12255
+ border-color: var(--squisq-block-props-quiet);
11729
12256
  }
11730
12257
  .squisq-transition-picker-trigger--open {
11731
- background: #f3f4f6;
11732
- border-color: #6366f1;
11733
- outline: 2px solid rgba(99, 102, 241, 0.25);
12258
+ background: var(--squisq-block-props-surface-hover);
12259
+ border-color: var(--squisq-block-props-accent, #6366f1);
12260
+ outline: 2px solid color-mix(in oklch, var(--squisq-block-props-accent, #6366f1) 25%, transparent);
11734
12261
  outline-offset: -1px;
11735
12262
  }
11736
12263
  .squisq-transition-picker-trigger-label {
11737
- color: #6b7280;
12264
+ color: var(--squisq-block-props-muted);
11738
12265
  }
11739
12266
  .squisq-transition-picker-trigger-value {
11740
- color: #111827;
12267
+ color: var(--squisq-block-props-text);
11741
12268
  font-weight: 400;
11742
12269
  max-width: 110px;
11743
12270
  overflow: hidden;
11744
12271
  text-overflow: ellipsis;
11745
12272
  }
11746
12273
  .squisq-transition-picker-trigger svg {
11747
- color: #9ca3af;
12274
+ color: var(--squisq-block-props-quiet);
11748
12275
  flex-shrink: 0;
11749
12276
  }
11750
12277
  @container squisq-toolbar (max-width: 900px) {
@@ -11757,27 +12284,29 @@
11757
12284
  max-width: calc(100vw - 24px);
11758
12285
  display: flex;
11759
12286
  flex-direction: column;
11760
- background: #fff;
11761
- border: 1px solid #e5e7eb;
12287
+ color: var(--squisq-block-props-text);
12288
+ background: var(--squisq-block-props-surface);
12289
+ border: 1px solid var(--squisq-block-props-divider);
11762
12290
  border-radius: 10px;
11763
12291
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12), 0 2px 6px rgba(0, 0, 0, 0.08);
11764
12292
  overflow: hidden;
11765
12293
  }
11766
12294
  .squisq-transition-flyout-search {
11767
12295
  padding: 8px;
11768
- border-bottom: 1px solid #f0f0f0;
12296
+ border-bottom: 1px solid var(--squisq-block-props-divider);
11769
12297
  }
11770
12298
  .squisq-transition-flyout-search-input {
11771
12299
  width: 100%;
11772
12300
  padding: 6px 8px;
11773
12301
  font-size: 13px;
11774
- color: #111827;
11775
- border: 1px solid #d1d5db;
12302
+ color: var(--squisq-block-props-text);
12303
+ background: var(--squisq-block-props-input);
12304
+ border: 1px solid var(--squisq-block-props-border);
11776
12305
  border-radius: 6px;
11777
12306
  outline: none;
11778
12307
  }
11779
12308
  .squisq-transition-flyout-search-input:focus {
11780
- border-color: #6366f1;
12309
+ border-color: var(--squisq-block-props-accent, #6366f1);
11781
12310
  }
11782
12311
  .squisq-transition-flyout-list {
11783
12312
  min-height: 0;
@@ -11793,7 +12322,7 @@
11793
12322
  font-weight: 600;
11794
12323
  letter-spacing: 0.04em;
11795
12324
  text-transform: uppercase;
11796
- color: #9ca3af;
12325
+ color: var(--squisq-block-props-quiet);
11797
12326
  }
11798
12327
  .squisq-transition-flyout-grid {
11799
12328
  display: grid;
@@ -11806,9 +12335,9 @@
11806
12335
  text-align: left;
11807
12336
  padding: 6px 8px;
11808
12337
  font-size: 12px;
11809
- color: #374151;
11810
- background: #fff;
11811
- border: 1px solid #e5e7eb;
12338
+ color: var(--squisq-block-props-text);
12339
+ background: var(--squisq-block-props-surface);
12340
+ border: 1px solid var(--squisq-block-props-divider);
11812
12341
  border-radius: 6px;
11813
12342
  cursor: pointer;
11814
12343
  white-space: nowrap;
@@ -11816,13 +12345,13 @@
11816
12345
  text-overflow: ellipsis;
11817
12346
  }
11818
12347
  .squisq-transition-option:hover {
11819
- background: #f3f4f6;
11820
- border-color: #d1d5db;
12348
+ background: var(--squisq-block-props-surface-hover);
12349
+ border-color: var(--squisq-block-props-border);
11821
12350
  }
11822
12351
  .squisq-transition-option--selected {
11823
- background: #eef2ff;
11824
- border-color: #6366f1;
11825
- color: #4338ca;
12352
+ color: var(--squisq-block-props-accent, #4338ca);
12353
+ background: color-mix(in oklch, var(--squisq-block-props-accent, #6366f1) 14%, transparent);
12354
+ border-color: var(--squisq-block-props-accent, #6366f1);
11826
12355
  font-weight: 600;
11827
12356
  }
11828
12357
  .squisq-transition-option {
@@ -11842,11 +12371,11 @@
11842
12371
  .squisq-transition-flyout-empty {
11843
12372
  padding: 12px 8px;
11844
12373
  font-size: 12px;
11845
- color: #9ca3af;
12374
+ color: var(--squisq-block-props-quiet);
11846
12375
  text-align: center;
11847
12376
  }
11848
12377
  .squisq-transition-flyout-controls {
11849
- border-top: 1px solid #f0f0f0;
12378
+ border-top: 1px solid var(--squisq-block-props-divider);
11850
12379
  padding: 10px 12px;
11851
12380
  display: flex;
11852
12381
  flex-direction: column;
@@ -11861,7 +12390,7 @@
11861
12390
  .squisq-transition-flyout-control-label {
11862
12391
  font-size: 11px;
11863
12392
  font-weight: 600;
11864
- color: #6b7280;
12393
+ color: var(--squisq-block-props-muted);
11865
12394
  }
11866
12395
  .squisq-transition-direction-row {
11867
12396
  display: inline-flex;
@@ -11870,19 +12399,19 @@
11870
12399
  .squisq-transition-direction-button {
11871
12400
  padding: 4px 8px;
11872
12401
  font-size: 11px;
11873
- color: #374151;
11874
- background: #fff;
11875
- border: 1px solid #d1d5db;
12402
+ color: var(--squisq-block-props-text);
12403
+ background: var(--squisq-block-props-surface);
12404
+ border: 1px solid var(--squisq-block-props-border);
11876
12405
  border-radius: 5px;
11877
12406
  cursor: pointer;
11878
12407
  }
11879
12408
  .squisq-transition-direction-button:hover {
11880
- background: #f3f4f6;
12409
+ background: var(--squisq-block-props-surface-hover);
11881
12410
  }
11882
12411
  .squisq-transition-direction-button--selected {
11883
- background: #eef2ff;
11884
- border-color: #6366f1;
11885
- color: #4338ca;
12412
+ color: var(--squisq-block-props-accent, #4338ca);
12413
+ background: color-mix(in oklch, var(--squisq-block-props-accent, #6366f1) 14%, transparent);
12414
+ border-color: var(--squisq-block-props-accent, #6366f1);
11886
12415
  font-weight: 600;
11887
12416
  }
11888
12417
  .squisq-transition-duration-row {
@@ -11894,17 +12423,18 @@
11894
12423
  width: 64px;
11895
12424
  padding: 4px 6px;
11896
12425
  font-size: 12px;
11897
- color: #111827;
11898
- border: 1px solid #d1d5db;
12426
+ color: var(--squisq-block-props-text);
12427
+ background: var(--squisq-block-props-input);
12428
+ border: 1px solid var(--squisq-block-props-border);
11899
12429
  border-radius: 5px;
11900
12430
  outline: none;
11901
12431
  }
11902
12432
  .squisq-transition-duration-input:focus {
11903
- border-color: #6366f1;
12433
+ border-color: var(--squisq-block-props-accent, #6366f1);
11904
12434
  }
11905
12435
  .squisq-transition-duration-unit {
11906
12436
  font-size: 11px;
11907
- color: #9ca3af;
12437
+ color: var(--squisq-block-props-quiet);
11908
12438
  }
11909
12439
  .squisq-editor-shell[data-theme=dark] .squisq-transition-picker-trigger {
11910
12440
  background: #1f2937;
@@ -11917,42 +12447,14 @@
11917
12447
  }
11918
12448
  .squisq-editor-shell[data-theme=dark] .squisq-transition-picker-trigger--open {
11919
12449
  background: #374151;
11920
- border-color: #818cf8;
12450
+ border-color: var(--squisq-block-props-accent, #818cf8);
11921
12451
  }
11922
12452
  .squisq-editor-shell[data-theme=dark] .squisq-transition-picker-trigger-value {
11923
12453
  color: #f9fafb;
11924
12454
  }
11925
- .squisq-editor-shell[data-theme=dark] .squisq-transition-flyout {
11926
- background: #1f2937;
11927
- border-color: #374151;
12455
+ .squisq-transition-flyout[data-theme=dark] {
11928
12456
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.4), 0 2px 6px rgba(0, 0, 0, 0.2);
11929
12457
  }
11930
- .squisq-editor-shell[data-theme=dark] .squisq-transition-flyout-search,
11931
- .squisq-editor-shell[data-theme=dark] .squisq-transition-flyout-controls {
11932
- border-color: #374151;
11933
- }
11934
- .squisq-editor-shell[data-theme=dark] .squisq-transition-flyout-search-input,
11935
- .squisq-editor-shell[data-theme=dark] .squisq-transition-duration-input {
11936
- background: #111827;
11937
- color: #f9fafb;
11938
- border-color: #4b5563;
11939
- }
11940
- .squisq-editor-shell[data-theme=dark] .squisq-transition-option,
11941
- .squisq-editor-shell[data-theme=dark] .squisq-transition-direction-button {
11942
- background: #1f2937;
11943
- color: #e5e7eb;
11944
- border-color: #4b5563;
11945
- }
11946
- .squisq-editor-shell[data-theme=dark] .squisq-transition-option:hover,
11947
- .squisq-editor-shell[data-theme=dark] .squisq-transition-direction-button:hover {
11948
- background: #374151;
11949
- }
11950
- .squisq-editor-shell[data-theme=dark] .squisq-transition-option--selected,
11951
- .squisq-editor-shell[data-theme=dark] .squisq-transition-direction-button--selected {
11952
- background: #3730a3;
11953
- border-color: #818cf8;
11954
- color: #e0e7ff;
11955
- }
11956
12458
 
11957
12459
  /* src/styles/code-context.css */
11958
12460
  .squisq-ccx-zone {
@@ -12800,6 +13302,73 @@
12800
13302
  .squisq-image-editor-layers {
12801
13303
  border-bottom: 1px solid var(--squisq-image-editor-panel-border);
12802
13304
  }
13305
+ .squisq-image-editor-layers-header {
13306
+ display: flex;
13307
+ align-items: center;
13308
+ justify-content: space-between;
13309
+ min-height: 32px;
13310
+ }
13311
+ .squisq-image-editor-layer-add {
13312
+ position: relative;
13313
+ display: inline-flex;
13314
+ }
13315
+ .squisq-image-editor-layer-add-button {
13316
+ display: inline-flex;
13317
+ align-items: center;
13318
+ justify-content: center;
13319
+ width: 22px;
13320
+ height: 22px;
13321
+ padding: 0;
13322
+ color: inherit;
13323
+ background: transparent;
13324
+ border: 1px solid transparent;
13325
+ border-radius: 3px;
13326
+ cursor: pointer;
13327
+ font: inherit;
13328
+ }
13329
+ .squisq-image-editor-layer-add-button:hover,
13330
+ .squisq-image-editor-layer-add-button[aria-expanded=true] {
13331
+ background: var(--squisq-image-editor-control-bg);
13332
+ border-color: var(--squisq-image-editor-control-border);
13333
+ }
13334
+ .squisq-image-editor-layer-add-menu {
13335
+ position: absolute;
13336
+ top: calc(100% + 4px);
13337
+ right: 0;
13338
+ z-index: 20;
13339
+ min-width: 150px;
13340
+ padding: 4px;
13341
+ background: var(--squisq-image-editor-panel-bg);
13342
+ border: 1px solid var(--squisq-image-editor-panel-border);
13343
+ border-radius: 5px;
13344
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.35);
13345
+ text-transform: none;
13346
+ letter-spacing: normal;
13347
+ }
13348
+ .squisq-image-editor-layer-add-menu-item {
13349
+ display: flex;
13350
+ align-items: center;
13351
+ gap: 8px;
13352
+ width: 100%;
13353
+ padding: 6px 8px;
13354
+ color: inherit;
13355
+ background: transparent;
13356
+ border: 0;
13357
+ border-radius: 3px;
13358
+ cursor: pointer;
13359
+ font: inherit;
13360
+ font-size: 12px;
13361
+ text-align: left;
13362
+ }
13363
+ .squisq-image-editor-layer-add-menu-item:hover,
13364
+ .squisq-image-editor-layer-add-menu-item:focus-visible {
13365
+ background: var(--squisq-image-editor-control-bg);
13366
+ outline: none;
13367
+ }
13368
+ .squisq-image-editor-layer-add-menu-item svg {
13369
+ flex: 0 0 auto;
13370
+ width: 14px;
13371
+ }
12803
13372
  .squisq-image-editor-layer-list {
12804
13373
  list-style: none;
12805
13374
  margin: 0;
@@ -12846,6 +13415,7 @@
12846
13415
  cursor: not-allowed;
12847
13416
  }
12848
13417
  .squisq-image-editor-layer-name {
13418
+ min-width: 0;
12849
13419
  flex: 1 1 auto;
12850
13420
  text-align: left;
12851
13421
  background: transparent;
@@ -12861,7 +13431,14 @@
12861
13431
  text-overflow: ellipsis;
12862
13432
  white-space: nowrap;
12863
13433
  }
13434
+ .squisq-image-editor-layer-name-text {
13435
+ min-width: 0;
13436
+ overflow: hidden;
13437
+ text-overflow: ellipsis;
13438
+ white-space: nowrap;
13439
+ }
12864
13440
  .squisq-image-editor-layer-kind {
13441
+ flex: 0 0 auto;
12865
13442
  margin-left: auto;
12866
13443
  font-size: 10px;
12867
13444
  color: var(--squisq-image-editor-text-muted);
@@ -13413,40 +13990,775 @@
13413
13990
  content: "Diagram open in full screen \2014 press Esc to return";
13414
13991
  }
13415
13992
 
13416
- /* src/scene/scene.css */
13417
- .squisq-scene-root {
13418
- position: relative;
13419
- width: 100%;
13420
- height: 100%;
13421
- background: var(--squisq-surface, #ffffff);
13422
- border: 1px solid var(--squisq-border, #e2e8f0);
13423
- border-radius: 8px;
13424
- overflow: hidden;
13993
+ /* src/styles/ascii-diagram.css */
13994
+ .squisq-wysiwyg-editor pre.squisq-ascii-fence-hidden {
13995
+ display: none;
13425
13996
  }
13426
- .squisq-editor-shell[data-theme=dark] .squisq-scene-shell {
13427
- --squisq-surface: #0f172a;
13428
- --squisq-surface-hover: #1e293b;
13429
- --squisq-border: #475569;
13430
- --squisq-text: #f8fafc;
13431
- --squisq-text-muted: #94a3b8;
13997
+ .squisq-wysiwyg-editor pre.squisq-ascii-fence-source {
13998
+ font-family:
13999
+ ui-monospace,
14000
+ SFMono-Regular,
14001
+ Menlo,
14002
+ Consolas,
14003
+ "Liberation Mono",
14004
+ monospace;
14005
+ white-space: pre;
14006
+ overflow-x: auto;
14007
+ line-height: 1.2;
14008
+ tab-size: 4;
13432
14009
  }
13433
- .squisq-editor-shell[data-theme=dark] .squisq-scene-root,
13434
- .squisq-editor-shell[data-theme=dark] .squisq-scene-inline,
13435
- .squisq-editor-shell[data-theme=dark] .squisq-diagram-inline {
13436
- background: #0f172a;
13437
- border-color: #475569;
14010
+ .squisq-ascii-diagram-widget-host {
14011
+ margin: 0.75rem 0 1.25rem;
13438
14012
  }
13439
- .squisq-editor-shell[data-theme=dark] .squisq-scene-layer--shape,
13440
- .squisq-editor-shell[data-theme=dark] .squisq-scene-layer--path,
13441
- .squisq-editor-shell[data-theme=dark] .squisq-scene-layer--text,
13442
- .squisq-editor-shell[data-theme=dark] .squisq-scene-extras {
13443
- filter: invert(1) hue-rotate(180deg) saturate(0.9);
14013
+ .squisq-ascii-diagram-warnings {
14014
+ margin-top: 4px;
14015
+ font-size: 12px;
14016
+ color: var(--squisq-theme-text-muted, #6b7280);
13444
14017
  }
13445
- .squisq-scene-viewport {
13446
- display: block;
13447
- width: 100%;
13448
- height: 100%;
13449
- touch-action: none;
14018
+ .squisq-ascii-diagram-warnings summary {
14019
+ cursor: pointer;
14020
+ user-select: none;
14021
+ }
14022
+ .squisq-ascii-diagram-warnings ul {
14023
+ margin: 4px 0 0;
14024
+ padding-left: 18px;
14025
+ }
14026
+ .squisq-repair-banner {
14027
+ display: flex;
14028
+ align-items: center;
14029
+ gap: 10px;
14030
+ flex-wrap: wrap;
14031
+ margin: 4px 0 1rem;
14032
+ padding: 8px 12px;
14033
+ border: 1px dashed var(--squisq-border, #d1d5db);
14034
+ border-radius: 8px;
14035
+ background: var(--squisq-input-bg, #f9fafb);
14036
+ font-size: 13px;
14037
+ }
14038
+ .squisq-repair-banner-text {
14039
+ color: var(--squisq-text-muted, #6b7280);
14040
+ }
14041
+ .squisq-repair-banner-btn {
14042
+ cursor: pointer;
14043
+ border: 1px solid var(--squisq-accent, #6366f1);
14044
+ border-radius: 6px;
14045
+ background: var(--squisq-accent, #6366f1);
14046
+ color: #fff;
14047
+ padding: 4px 12px;
14048
+ font-size: 13px;
14049
+ font-weight: 500;
14050
+ line-height: 1.4;
14051
+ white-space: nowrap;
14052
+ }
14053
+ .squisq-repair-banner-btn:hover {
14054
+ filter: brightness(1.05);
14055
+ }
14056
+ .squisq-repair-banner-btn:active {
14057
+ filter: brightness(0.95);
14058
+ }
14059
+
14060
+ /* src/styles/tree-view.css */
14061
+ .squisq-wysiwyg-editor pre.squisq-tree-fence-hidden {
14062
+ display: none;
14063
+ }
14064
+ .squisq-tree-widget-host {
14065
+ margin: 0.75rem 0 1.25rem;
14066
+ }
14067
+ .squisq-tree-outline {
14068
+ border: 1px solid var(--squisq-border, #e2e8f0);
14069
+ border-radius: 8px;
14070
+ padding: 8px 10px;
14071
+ background: var(--squisq-input-bg, #ffffff);
14072
+ color: var(--squisq-text, #1e293b);
14073
+ font-size: 14px;
14074
+ }
14075
+ .squisq-tree-toolbar {
14076
+ display: flex;
14077
+ gap: 6px;
14078
+ margin-bottom: 6px;
14079
+ }
14080
+ .squisq-tree-btn {
14081
+ display: inline-flex;
14082
+ align-items: center;
14083
+ gap: 5px;
14084
+ font-size: 12px;
14085
+ padding: 3px 8px;
14086
+ border: 1px solid var(--squisq-border, #e2e8f0);
14087
+ border-radius: 5px;
14088
+ background: var(--squisq-bg, #f8fafc);
14089
+ color: var(--squisq-text, #1e293b);
14090
+ cursor: pointer;
14091
+ }
14092
+ .squisq-tree-btn:hover {
14093
+ border-color: var(--squisq-text-muted, #94a3b8);
14094
+ }
14095
+ .squisq-tree-outline .squisq-tree-rows {
14096
+ list-style: none;
14097
+ margin: 0;
14098
+ padding: 0;
14099
+ }
14100
+ .squisq-tree-rows .squisq-tree-rows {
14101
+ border-left: 1px solid var(--squisq-border, #e2e8f0);
14102
+ margin-left: 8px;
14103
+ }
14104
+ .squisq-tree-item {
14105
+ position: relative;
14106
+ }
14107
+ .squisq-tree-row {
14108
+ position: relative;
14109
+ display: flex;
14110
+ align-items: center;
14111
+ gap: 4px;
14112
+ padding: 1px 0;
14113
+ border-radius: 4px;
14114
+ }
14115
+ .squisq-tree-row:hover .squisq-tree-controls {
14116
+ opacity: 1;
14117
+ }
14118
+ .squisq-tree-item--dragging {
14119
+ opacity: 0.42;
14120
+ }
14121
+ .squisq-tree-item--drop-before > .squisq-tree-row::before,
14122
+ .squisq-tree-item--drop-after::after {
14123
+ content: "";
14124
+ position: absolute;
14125
+ z-index: 2;
14126
+ left: 0;
14127
+ right: 0;
14128
+ height: 2px;
14129
+ border-radius: 999px;
14130
+ background: #6366f1;
14131
+ pointer-events: none;
14132
+ }
14133
+ .squisq-tree-item--drop-before > .squisq-tree-row::before {
14134
+ top: -1px;
14135
+ }
14136
+ .squisq-tree-item--drop-after::after {
14137
+ bottom: -1px;
14138
+ }
14139
+ .squisq-tree-item--drop-child > .squisq-tree-row {
14140
+ background: rgba(99, 102, 241, 0.12);
14141
+ box-shadow: inset 0 0 0 1px #6366f1;
14142
+ }
14143
+ .squisq-tree-chevron {
14144
+ flex: 0 0 auto;
14145
+ width: 16px;
14146
+ border: none;
14147
+ background: transparent;
14148
+ cursor: pointer;
14149
+ color: var(--squisq-text-muted, #64748b);
14150
+ padding: 0;
14151
+ font-size: 11px;
14152
+ }
14153
+ .squisq-tree-chevron--empty {
14154
+ cursor: default;
14155
+ }
14156
+ .squisq-tree-icon {
14157
+ flex: 0 0 auto;
14158
+ width: 18px;
14159
+ border: none;
14160
+ background: transparent;
14161
+ cursor: pointer;
14162
+ color: #6366f1;
14163
+ padding: 0;
14164
+ }
14165
+ .squisq-tree-label {
14166
+ flex: 1 1 auto;
14167
+ min-width: 0;
14168
+ border: 1px solid transparent;
14169
+ border-radius: 4px;
14170
+ padding: 1px 4px;
14171
+ font: inherit;
14172
+ color: var(--squisq-text, #1e293b);
14173
+ background: transparent;
14174
+ }
14175
+ .squisq-tree-label:focus {
14176
+ outline: none;
14177
+ border-color: #6366f1;
14178
+ background: var(--squisq-bg, #f8fafc);
14179
+ }
14180
+ .squisq-tree-controls {
14181
+ flex: 0 0 auto;
14182
+ display: inline-flex;
14183
+ gap: 2px;
14184
+ opacity: 0;
14185
+ transition: opacity 0.12s;
14186
+ }
14187
+ .squisq-tree-drag-handle {
14188
+ flex: 0 0 auto;
14189
+ display: inline-flex;
14190
+ align-items: center;
14191
+ justify-content: center;
14192
+ width: 16px;
14193
+ color: var(--squisq-text-muted, #64748b);
14194
+ cursor: grab;
14195
+ }
14196
+ .squisq-tree-drag-handle:active {
14197
+ cursor: grabbing;
14198
+ }
14199
+ .squisq-tree-controls button {
14200
+ border: none;
14201
+ background: transparent;
14202
+ cursor: pointer;
14203
+ color: var(--squisq-text-muted, #64748b);
14204
+ padding: 2px 4px;
14205
+ border-radius: 4px;
14206
+ font-size: 11px;
14207
+ }
14208
+ .squisq-tree-controls button:hover {
14209
+ background: var(--squisq-bg, #f1f5f9);
14210
+ color: var(--squisq-text, #1e293b);
14211
+ }
14212
+ .squisq-tree-controls .squisq-tree-delete:hover {
14213
+ color: #ef4444;
14214
+ }
14215
+ .squisq-tree-warnings {
14216
+ margin-top: 6px;
14217
+ font-size: 12px;
14218
+ color: var(--squisq-text-muted, #6b7280);
14219
+ }
14220
+
14221
+ /* src/styles/ascii-timeline.css */
14222
+ .squisq-wysiwyg-editor pre.squisq-ascii-timeline-fence-hidden {
14223
+ display: none;
14224
+ }
14225
+ .squisq-ascii-timeline-widget-host {
14226
+ margin: 0.75rem 0 1.25rem;
14227
+ }
14228
+ .squisq-ascii-timeline-editor {
14229
+ --squisq-ascii-timeline-accent: var(--squisq-theme-primary, #6366f1);
14230
+ --squisq-ascii-timeline-label-width: 160px;
14231
+ border: 1px solid var(--squisq-border, #e2e8f0);
14232
+ border-radius: 10px;
14233
+ background: var(--squisq-input-bg, #fff);
14234
+ color: var(--squisq-text, #1e293b);
14235
+ overflow: hidden;
14236
+ font-size: 14px;
14237
+ }
14238
+ .squisq-ascii-timeline-header {
14239
+ display: flex;
14240
+ align-items: center;
14241
+ justify-content: space-between;
14242
+ gap: 12px;
14243
+ min-height: 36px;
14244
+ padding: 6px 10px;
14245
+ border-bottom: 1px solid var(--squisq-border, #e2e8f0);
14246
+ background: var(--squisq-bg, #f8fafc);
14247
+ }
14248
+ .squisq-ascii-timeline-header > span {
14249
+ display: inline-flex;
14250
+ align-items: center;
14251
+ gap: 6px;
14252
+ font-weight: 650;
14253
+ }
14254
+ .squisq-ascii-timeline-header small {
14255
+ color: var(--squisq-text-muted, #64748b);
14256
+ }
14257
+ .squisq-ascii-timeline-header-actions {
14258
+ display: flex;
14259
+ align-items: center;
14260
+ justify-content: flex-end;
14261
+ gap: 10px;
14262
+ }
14263
+ .squisq-ascii-timeline-header-actions button {
14264
+ display: inline-flex;
14265
+ align-items: center;
14266
+ gap: 5px;
14267
+ padding: 4px 8px;
14268
+ border: 1px solid var(--squisq-border, #cbd5e1);
14269
+ border-radius: 5px;
14270
+ background: var(--squisq-input-bg, #fff);
14271
+ color: var(--squisq-ascii-timeline-accent);
14272
+ font: inherit;
14273
+ font-size: 12px;
14274
+ cursor: pointer;
14275
+ }
14276
+ .squisq-ascii-timeline-header-actions button:hover,
14277
+ .squisq-ascii-timeline-header-actions button:focus-visible {
14278
+ border-color: var(--squisq-ascii-timeline-accent);
14279
+ outline: 2px solid color-mix(in srgb, var(--squisq-ascii-timeline-accent) 22%, transparent);
14280
+ }
14281
+ .squisq-ascii-timeline-canvas {
14282
+ position: relative;
14283
+ min-width: 600px;
14284
+ padding: 8px 18px 8px 10px;
14285
+ overflow-x: auto;
14286
+ }
14287
+ .squisq-ascii-timeline-track {
14288
+ display: grid;
14289
+ grid-template-columns: var(--squisq-ascii-timeline-label-width) minmax(420px, 1fr);
14290
+ gap: 12px;
14291
+ height: 96px;
14292
+ align-items: center;
14293
+ }
14294
+ .squisq-ascii-timeline-track-label {
14295
+ display: flex;
14296
+ min-width: 0;
14297
+ align-items: center;
14298
+ justify-content: flex-end;
14299
+ gap: 5px;
14300
+ color: var(--squisq-text-muted, #64748b);
14301
+ font-size: 12px;
14302
+ font-weight: 650;
14303
+ text-align: right;
14304
+ white-space: nowrap;
14305
+ }
14306
+ .squisq-ascii-timeline-track-name {
14307
+ min-width: 0;
14308
+ flex: 1 1 auto;
14309
+ padding: 3px 4px;
14310
+ overflow: hidden;
14311
+ border: 1px solid transparent;
14312
+ border-radius: 4px;
14313
+ background: transparent;
14314
+ color: inherit;
14315
+ font: inherit;
14316
+ text-align: right;
14317
+ text-overflow: ellipsis;
14318
+ white-space: nowrap;
14319
+ }
14320
+ button.squisq-ascii-timeline-track-name {
14321
+ cursor: text;
14322
+ }
14323
+ button.squisq-ascii-timeline-track-name:hover,
14324
+ button.squisq-ascii-timeline-track-name:focus-visible {
14325
+ border-color: var(--squisq-border, #cbd5e1);
14326
+ background: var(--squisq-input-bg, #fff);
14327
+ outline: none;
14328
+ }
14329
+ .squisq-ascii-timeline-track-name-input {
14330
+ width: 100%;
14331
+ min-width: 0;
14332
+ flex: 1 1 auto;
14333
+ padding: 3px 4px;
14334
+ border: 1px solid var(--squisq-ascii-timeline-accent);
14335
+ border-radius: 4px;
14336
+ background: var(--squisq-input-bg, #fff);
14337
+ color: var(--squisq-text, #1e293b);
14338
+ font: inherit;
14339
+ text-align: right;
14340
+ outline: 2px solid color-mix(in srgb, var(--squisq-ascii-timeline-accent) 22%, transparent);
14341
+ }
14342
+ .squisq-ascii-timeline-track-delete {
14343
+ display: grid;
14344
+ width: 22px;
14345
+ height: 22px;
14346
+ flex: 0 0 22px;
14347
+ place-items: center;
14348
+ padding: 0;
14349
+ border: 0;
14350
+ border-radius: 4px;
14351
+ background: transparent;
14352
+ color: var(--squisq-text-muted, #64748b);
14353
+ cursor: pointer;
14354
+ }
14355
+ .squisq-ascii-timeline-track-delete:hover,
14356
+ .squisq-ascii-timeline-track-delete:focus-visible {
14357
+ background: color-mix(in srgb, #ef4444 12%, transparent);
14358
+ color: #dc2626;
14359
+ outline: 2px solid color-mix(in srgb, #ef4444 25%, transparent);
14360
+ }
14361
+ .squisq-ascii-timeline-track-delete:disabled {
14362
+ opacity: 0.35;
14363
+ cursor: not-allowed;
14364
+ }
14365
+ .squisq-ascii-timeline-track-add {
14366
+ display: grid;
14367
+ width: 22px;
14368
+ height: 22px;
14369
+ flex: 0 0 22px;
14370
+ place-items: center;
14371
+ padding: 0;
14372
+ border: 1px solid var(--squisq-border, #cbd5e1);
14373
+ border-radius: 50%;
14374
+ background: var(--squisq-input-bg, #fff);
14375
+ color: var(--squisq-ascii-timeline-accent);
14376
+ font: 700 15px/1 system-ui, sans-serif;
14377
+ cursor: pointer;
14378
+ }
14379
+ .squisq-ascii-timeline-track-add:hover,
14380
+ .squisq-ascii-timeline-track-add:focus-visible,
14381
+ .squisq-ascii-timeline-track-add[aria-pressed=true] {
14382
+ border-color: var(--squisq-ascii-timeline-accent);
14383
+ outline: 2px solid color-mix(in srgb, var(--squisq-ascii-timeline-accent) 22%, transparent);
14384
+ }
14385
+ .squisq-ascii-timeline-rail {
14386
+ position: relative;
14387
+ height: 96px;
14388
+ min-width: 420px;
14389
+ outline: none;
14390
+ cursor: default;
14391
+ }
14392
+ .squisq-ascii-timeline-rail--adding {
14393
+ cursor: crosshair;
14394
+ }
14395
+ .squisq-ascii-timeline-rail--readonly {
14396
+ cursor: default;
14397
+ }
14398
+ .squisq-ascii-timeline-rail-line {
14399
+ position: absolute;
14400
+ z-index: 1;
14401
+ top: 50%;
14402
+ right: 0;
14403
+ left: 0;
14404
+ height: 2px;
14405
+ border-radius: 999px;
14406
+ background: var(--squisq-text-muted, #94a3b8);
14407
+ pointer-events: none;
14408
+ }
14409
+ .squisq-ascii-timeline-rail-line::after {
14410
+ position: absolute;
14411
+ top: 50%;
14412
+ right: -1px;
14413
+ width: 8px;
14414
+ height: 8px;
14415
+ border-top: 2px solid currentColor;
14416
+ border-right: 2px solid currentColor;
14417
+ color: var(--squisq-text-muted, #94a3b8);
14418
+ content: "";
14419
+ transform: translateY(-50%) rotate(45deg);
14420
+ }
14421
+ .squisq-ascii-timeline-add-ghost,
14422
+ .squisq-ascii-timeline-gap-add {
14423
+ position: absolute;
14424
+ z-index: 4;
14425
+ top: 50%;
14426
+ display: grid;
14427
+ width: 22px;
14428
+ height: 22px;
14429
+ place-items: center;
14430
+ border: 1px solid var(--squisq-ascii-timeline-accent);
14431
+ border-radius: 50%;
14432
+ background: var(--squisq-input-bg, #fff);
14433
+ color: var(--squisq-ascii-timeline-accent);
14434
+ font: 700 15px/1 system-ui, sans-serif;
14435
+ transform: translate(-50%, -50%);
14436
+ }
14437
+ .squisq-ascii-timeline-add-ghost {
14438
+ opacity: 0.72;
14439
+ pointer-events: none;
14440
+ }
14441
+ .squisq-ascii-timeline-gap-add {
14442
+ padding: 0;
14443
+ opacity: 0.12;
14444
+ cursor: pointer;
14445
+ transition: opacity 120ms ease, transform 120ms ease;
14446
+ }
14447
+ .squisq-ascii-timeline-rail:hover .squisq-ascii-timeline-gap-add,
14448
+ .squisq-ascii-timeline-gap-add:focus-visible {
14449
+ opacity: 0.9;
14450
+ }
14451
+ .squisq-ascii-timeline-gap-add:hover,
14452
+ .squisq-ascii-timeline-gap-add:focus-visible {
14453
+ outline: none;
14454
+ transform: translate(-50%, -50%) scale(1.12);
14455
+ }
14456
+ .squisq-ascii-timeline-point {
14457
+ position: absolute;
14458
+ z-index: 6;
14459
+ top: 50%;
14460
+ width: 0;
14461
+ height: 0;
14462
+ }
14463
+ .squisq-ascii-timeline-marker {
14464
+ position: absolute;
14465
+ top: 0;
14466
+ left: 0;
14467
+ z-index: 2;
14468
+ width: 36px;
14469
+ height: 36px;
14470
+ padding: 0;
14471
+ border: 0;
14472
+ border-radius: 50%;
14473
+ background: transparent;
14474
+ cursor: grab;
14475
+ touch-action: none;
14476
+ user-select: none;
14477
+ transform: translate(-50%, -50%);
14478
+ }
14479
+ .squisq-ascii-timeline-point--dragging {
14480
+ z-index: 8;
14481
+ }
14482
+ .squisq-ascii-timeline-point--dragging .squisq-ascii-timeline-marker {
14483
+ cursor: grabbing;
14484
+ }
14485
+ .squisq-ascii-timeline-point--dragging .squisq-ascii-timeline-marker::before {
14486
+ box-shadow: 0 0 0 3px var(--squisq-input-bg, #fff), 0 0 0 7px color-mix(in srgb, var(--squisq-ascii-timeline-accent) 72%, transparent);
14487
+ }
14488
+ .squisq-ascii-timeline-rail--readonly .squisq-ascii-timeline-marker {
14489
+ cursor: pointer;
14490
+ }
14491
+ .squisq-ascii-timeline-marker::before {
14492
+ display: block;
14493
+ width: 12px;
14494
+ height: 12px;
14495
+ margin: 12px;
14496
+ border: 2px solid var(--squisq-ascii-timeline-accent);
14497
+ border-radius: 50%;
14498
+ background: var(--squisq-ascii-timeline-accent);
14499
+ box-sizing: border-box;
14500
+ content: "";
14501
+ }
14502
+ .squisq-ascii-timeline-marker--hollow::before {
14503
+ background: var(--squisq-input-bg, #fff);
14504
+ }
14505
+ .squisq-ascii-timeline-marker--diamond::before {
14506
+ border-radius: 2px;
14507
+ transform: rotate(45deg);
14508
+ }
14509
+ .squisq-ascii-timeline-marker:hover::before {
14510
+ box-shadow: 0 0 0 5px color-mix(in srgb, var(--squisq-ascii-timeline-accent) 18%, transparent);
14511
+ }
14512
+ .squisq-ascii-timeline-marker:focus-visible {
14513
+ outline: 2px solid var(--squisq-ascii-timeline-accent);
14514
+ outline-offset: 1px;
14515
+ }
14516
+ .squisq-ascii-timeline-marker--selected::before {
14517
+ box-shadow: 0 0 0 3px var(--squisq-input-bg, #fff), 0 0 0 6px var(--squisq-ascii-timeline-accent);
14518
+ }
14519
+ .squisq-ascii-timeline-callout,
14520
+ .squisq-ascii-timeline-description {
14521
+ position: absolute;
14522
+ left: 0;
14523
+ width: 128px;
14524
+ overflow: hidden;
14525
+ color: var(--squisq-text, #1e293b);
14526
+ line-height: 1.2;
14527
+ text-align: center;
14528
+ text-overflow: ellipsis;
14529
+ white-space: nowrap;
14530
+ pointer-events: none;
14531
+ transform: translateX(-50%);
14532
+ }
14533
+ .squisq-ascii-timeline-callout {
14534
+ font-size: 12px;
14535
+ font-weight: 650;
14536
+ }
14537
+ .squisq-ascii-timeline-description {
14538
+ color: var(--squisq-text-muted, #64748b);
14539
+ font-size: 10px;
14540
+ }
14541
+ .squisq-ascii-timeline-callout--above {
14542
+ bottom: 14px;
14543
+ }
14544
+ .squisq-ascii-timeline-callout--below {
14545
+ top: 14px;
14546
+ }
14547
+ .squisq-ascii-timeline-description--above {
14548
+ bottom: 30px;
14549
+ }
14550
+ .squisq-ascii-timeline-description--below {
14551
+ top: 30px;
14552
+ }
14553
+ .squisq-ascii-timeline-end-label {
14554
+ position: absolute;
14555
+ top: calc(50% + 8px);
14556
+ right: 0;
14557
+ max-width: 100px;
14558
+ overflow: hidden;
14559
+ color: var(--squisq-text-muted, #64748b);
14560
+ font-size: 10px;
14561
+ text-overflow: ellipsis;
14562
+ white-space: nowrap;
14563
+ pointer-events: none;
14564
+ }
14565
+ .squisq-ascii-timeline-branches {
14566
+ position: absolute;
14567
+ z-index: 2;
14568
+ top: 8px;
14569
+ right: 18px;
14570
+ bottom: 8px;
14571
+ left: calc(10px + var(--squisq-ascii-timeline-label-width) + 12px);
14572
+ width: calc(100% - var(--squisq-ascii-timeline-label-width) - 40px);
14573
+ height: calc(var(--squisq-ascii-timeline-track-count) * 96px);
14574
+ overflow: visible;
14575
+ pointer-events: none;
14576
+ }
14577
+ .squisq-ascii-timeline-branches path {
14578
+ fill: none;
14579
+ stroke: color-mix(in srgb, var(--squisq-ascii-timeline-accent) 72%, transparent);
14580
+ stroke-width: 2;
14581
+ stroke-dasharray: 4 3;
14582
+ }
14583
+ .squisq-ascii-timeline-link-list {
14584
+ display: flex;
14585
+ flex-wrap: wrap;
14586
+ gap: 4px;
14587
+ margin: 0;
14588
+ padding: 0 10px 8px;
14589
+ list-style: none;
14590
+ }
14591
+ .squisq-ascii-timeline-link-list li {
14592
+ padding: 2px 7px;
14593
+ border-radius: 999px;
14594
+ background: var(--squisq-bg, #f1f5f9);
14595
+ color: var(--squisq-text-muted, #64748b);
14596
+ font-size: 11px;
14597
+ list-style: none;
14598
+ }
14599
+ .squisq-ascii-timeline-inspector {
14600
+ display: grid;
14601
+ grid-template-columns: minmax(150px, 1fr) minmax(190px, 1.5fr) 120px 120px;
14602
+ gap: 8px;
14603
+ margin: 0;
14604
+ padding: 10px;
14605
+ border: 0;
14606
+ border-top: 1px solid var(--squisq-border, #e2e8f0);
14607
+ background: var(--squisq-bg, #f8fafc);
14608
+ }
14609
+ .squisq-ascii-timeline-inspector legend {
14610
+ grid-column: 1 / -1;
14611
+ padding: 0 4px;
14612
+ color: var(--squisq-text, #1e293b);
14613
+ font-size: 12px;
14614
+ font-weight: 700;
14615
+ }
14616
+ .squisq-ascii-timeline-inspector legend span {
14617
+ color: var(--squisq-text-muted, #64748b);
14618
+ font-weight: 500;
14619
+ }
14620
+ .squisq-ascii-timeline-inspector label {
14621
+ display: flex;
14622
+ min-width: 0;
14623
+ flex-direction: column;
14624
+ gap: 3px;
14625
+ color: var(--squisq-text-muted, #64748b);
14626
+ font-size: 11px;
14627
+ }
14628
+ .squisq-ascii-timeline-inspector input,
14629
+ .squisq-ascii-timeline-inspector textarea,
14630
+ .squisq-ascii-timeline-inspector select {
14631
+ min-width: 0;
14632
+ border: 1px solid var(--squisq-border, #cbd5e1);
14633
+ border-radius: 5px;
14634
+ background: var(--squisq-input-bg, #fff);
14635
+ color: var(--squisq-text, #1e293b);
14636
+ font: inherit;
14637
+ padding: 5px 7px;
14638
+ }
14639
+ .squisq-ascii-timeline-inspector input:focus,
14640
+ .squisq-ascii-timeline-inspector textarea:focus,
14641
+ .squisq-ascii-timeline-inspector select:focus {
14642
+ border-color: var(--squisq-ascii-timeline-accent);
14643
+ outline: 2px solid color-mix(in srgb, var(--squisq-ascii-timeline-accent) 22%, transparent);
14644
+ }
14645
+ .squisq-ascii-timeline-inspector-description textarea {
14646
+ resize: vertical;
14647
+ }
14648
+ .squisq-ascii-timeline-inspector .squisq-ascii-timeline-checkbox {
14649
+ grid-column: 1 / 2;
14650
+ flex-direction: row;
14651
+ align-items: center;
14652
+ align-self: center;
14653
+ color: var(--squisq-text, #1e293b);
14654
+ }
14655
+ .squisq-ascii-timeline-checkbox input {
14656
+ width: auto;
14657
+ }
14658
+ .squisq-ascii-timeline-delete {
14659
+ grid-column: 4 / 5;
14660
+ display: inline-flex;
14661
+ align-items: center;
14662
+ justify-content: center;
14663
+ gap: 5px;
14664
+ align-self: end;
14665
+ padding: 5px 8px;
14666
+ border: 1px solid color-mix(in srgb, #ef4444 45%, var(--squisq-border, #e2e8f0));
14667
+ border-radius: 5px;
14668
+ background: transparent;
14669
+ color: #dc2626;
14670
+ cursor: pointer;
14671
+ }
14672
+ .squisq-ascii-timeline-delete:disabled {
14673
+ opacity: 0.45;
14674
+ cursor: not-allowed;
14675
+ }
14676
+ .squisq-ascii-timeline-warnings {
14677
+ padding: 0 10px 8px;
14678
+ color: var(--squisq-text-muted, #64748b);
14679
+ font-size: 11px;
14680
+ }
14681
+ .squisq-sr-only {
14682
+ position: absolute;
14683
+ width: 1px;
14684
+ height: 1px;
14685
+ padding: 0;
14686
+ margin: -1px;
14687
+ overflow: hidden;
14688
+ clip: rect(0, 0, 0, 0);
14689
+ white-space: nowrap;
14690
+ border: 0;
14691
+ }
14692
+ @media (max-width: 760px) {
14693
+ .squisq-ascii-timeline-editor {
14694
+ --squisq-ascii-timeline-label-width: 132px;
14695
+ }
14696
+ .squisq-ascii-timeline-inspector {
14697
+ grid-template-columns: 1fr 1fr;
14698
+ }
14699
+ .squisq-ascii-timeline-inspector-description,
14700
+ .squisq-ascii-timeline-inspector legend {
14701
+ grid-column: 1 / -1;
14702
+ }
14703
+ .squisq-ascii-timeline-delete {
14704
+ grid-column: 2 / 3;
14705
+ }
14706
+ .squisq-ascii-timeline-header-actions small {
14707
+ display: none;
14708
+ }
14709
+ }
14710
+ @media (prefers-reduced-motion: reduce) {
14711
+ .squisq-ascii-timeline-gap-add {
14712
+ transition: none;
14713
+ }
14714
+ }
14715
+ @media (forced-colors: active) {
14716
+ .squisq-ascii-timeline-marker::before,
14717
+ .squisq-ascii-timeline-gap-add,
14718
+ .squisq-ascii-timeline-add-ghost {
14719
+ border-color: ButtonText;
14720
+ forced-color-adjust: none;
14721
+ }
14722
+ .squisq-ascii-timeline-rail-line,
14723
+ .squisq-ascii-timeline-branches path {
14724
+ background: CanvasText;
14725
+ stroke: CanvasText;
14726
+ }
14727
+ }
14728
+
14729
+ /* src/scene/scene.css */
14730
+ .squisq-scene-root {
14731
+ position: relative;
14732
+ width: 100%;
14733
+ height: 100%;
14734
+ background: var(--squisq-surface, #ffffff);
14735
+ border: 1px solid var(--squisq-border, #e2e8f0);
14736
+ border-radius: 8px;
14737
+ overflow: hidden;
14738
+ }
14739
+ .squisq-editor-shell[data-theme=dark] .squisq-scene-shell {
14740
+ --squisq-surface: #0f172a;
14741
+ --squisq-surface-hover: #1e293b;
14742
+ --squisq-border: #475569;
14743
+ --squisq-text: #f8fafc;
14744
+ --squisq-text-muted: #94a3b8;
14745
+ }
14746
+ .squisq-editor-shell[data-theme=dark] .squisq-scene-root,
14747
+ .squisq-editor-shell[data-theme=dark] .squisq-scene-inline,
14748
+ .squisq-editor-shell[data-theme=dark] .squisq-diagram-inline {
14749
+ background: #0f172a;
14750
+ border-color: #475569;
14751
+ }
14752
+ .squisq-editor-shell[data-theme=dark] .squisq-scene-layer--shape,
14753
+ .squisq-editor-shell[data-theme=dark] .squisq-scene-layer--path,
14754
+ .squisq-editor-shell[data-theme=dark] .squisq-scene-layer--text {
14755
+ filter: invert(1) hue-rotate(180deg) saturate(0.9);
14756
+ }
14757
+ .squisq-scene-viewport {
14758
+ display: block;
14759
+ width: 100%;
14760
+ height: 100%;
14761
+ touch-action: none;
13450
14762
  background: transparent;
13451
14763
  user-select: none;
13452
14764
  outline: none;
@@ -14045,6 +15357,56 @@
14045
15357
  }
14046
15358
 
14047
15359
  /* src/customTemplates/designer.css */
15360
+ .squisq-template-designer-overlay,
15361
+ .squisq-layout-manager-overlay {
15362
+ color-scheme: light;
15363
+ --squisq-layout-panel: #ffffff;
15364
+ --squisq-layout-chrome: #f9fafb;
15365
+ --squisq-layout-subtle: #fafafa;
15366
+ --squisq-layout-workspace: #f3f4f6;
15367
+ --squisq-layout-input: #ffffff;
15368
+ --squisq-layout-border: #e5e7eb;
15369
+ --squisq-layout-border-strong: #d1d5db;
15370
+ --squisq-layout-text: #111827;
15371
+ --squisq-layout-text-soft: #1f2937;
15372
+ --squisq-layout-muted: #6b7280;
15373
+ --squisq-layout-faint: #9ca3af;
15374
+ --squisq-layout-hover: #f1f5f9;
15375
+ --squisq-layout-accent-text: #4338ca;
15376
+ --squisq-layout-accent-bg: #4f46e5;
15377
+ --squisq-layout-accent-bg-hover: #4338ca;
15378
+ --squisq-layout-accent-border: #6366f1;
15379
+ --squisq-layout-accent-soft: #eef2ff;
15380
+ --squisq-layout-accent-soft-hover: #e0e7ff;
15381
+ --squisq-layout-accent-soft-border: #c7d2fe;
15382
+ --squisq-layout-accent-hover-border: #a5b4fc;
15383
+ --squisq-layout-thumb: #f8fafc;
15384
+ }
15385
+ .squisq-template-designer-overlay[data-theme=dark],
15386
+ .squisq-layout-manager-overlay[data-theme=dark] {
15387
+ color-scheme: dark;
15388
+ --squisq-layout-panel: #111827;
15389
+ --squisq-layout-chrome: #1f2937;
15390
+ --squisq-layout-subtle: #18212f;
15391
+ --squisq-layout-workspace: #0f172a;
15392
+ --squisq-layout-input: #111827;
15393
+ --squisq-layout-border: #374151;
15394
+ --squisq-layout-border-strong: #4b5563;
15395
+ --squisq-layout-text: #f3f4f6;
15396
+ --squisq-layout-text-soft: #e5e7eb;
15397
+ --squisq-layout-muted: #9ca3af;
15398
+ --squisq-layout-faint: #6b7280;
15399
+ --squisq-layout-hover: #334155;
15400
+ --squisq-layout-accent-text: #c7d2fe;
15401
+ --squisq-layout-accent-bg: #4f46e5;
15402
+ --squisq-layout-accent-bg-hover: #6366f1;
15403
+ --squisq-layout-accent-border: #818cf8;
15404
+ --squisq-layout-accent-soft: #312e81;
15405
+ --squisq-layout-accent-soft-hover: #3730a3;
15406
+ --squisq-layout-accent-soft-border: #4f46e5;
15407
+ --squisq-layout-accent-hover-border: #6366f1;
15408
+ --squisq-layout-thumb: #0f172a;
15409
+ }
14048
15410
  .squisq-template-designer-overlay {
14049
15411
  position: fixed;
14050
15412
  inset: 0;
@@ -14060,7 +15422,8 @@
14060
15422
  flex-direction: column;
14061
15423
  width: min(1200px, 100%);
14062
15424
  height: min(800px, 100%);
14063
- background: #ffffff;
15425
+ color: var(--squisq-layout-text-soft);
15426
+ background: var(--squisq-layout-panel);
14064
15427
  border-radius: 12px;
14065
15428
  box-shadow: 0 24px 60px rgba(0, 0, 0, 0.3);
14066
15429
  overflow: hidden;
@@ -14083,14 +15446,14 @@
14083
15446
  align-items: center;
14084
15447
  justify-content: space-between;
14085
15448
  padding: 14px 20px;
14086
- border-bottom: 1px solid #e5e7eb;
14087
- background: #f9fafb;
15449
+ border-bottom: 1px solid var(--squisq-layout-border);
15450
+ background: var(--squisq-layout-chrome);
14088
15451
  }
14089
15452
  .squisq-template-designer-title {
14090
15453
  margin: 0;
14091
15454
  font-size: 16px;
14092
15455
  font-weight: 600;
14093
- color: #111827;
15456
+ color: var(--squisq-layout-text);
14094
15457
  }
14095
15458
  .squisq-template-designer-close {
14096
15459
  width: 32px;
@@ -14100,24 +15463,24 @@
14100
15463
  justify-content: center;
14101
15464
  font-size: 24px;
14102
15465
  line-height: 1;
14103
- color: #6b7280;
15466
+ color: var(--squisq-layout-muted);
14104
15467
  background: transparent;
14105
15468
  border: 1px solid transparent;
14106
15469
  border-radius: 6px;
14107
15470
  cursor: pointer;
14108
15471
  }
14109
15472
  .squisq-template-designer-close:hover {
14110
- color: #111827;
14111
- background: #f1f5f9;
14112
- border-color: #cbd5e1;
15473
+ color: var(--squisq-layout-text);
15474
+ background: var(--squisq-layout-hover);
15475
+ border-color: var(--squisq-layout-border-strong);
14113
15476
  }
14114
15477
  .squisq-template-designer-meta {
14115
15478
  display: grid;
14116
15479
  grid-template-columns: minmax(160px, 1fr) minmax(160px, 1fr) minmax(240px, 2fr);
14117
15480
  gap: 12px;
14118
15481
  padding: 12px 20px;
14119
- border-bottom: 1px solid #e5e7eb;
14120
- background: #fdfdfd;
15482
+ border-bottom: 1px solid var(--squisq-layout-border);
15483
+ background: var(--squisq-layout-panel);
14121
15484
  }
14122
15485
  .squisq-template-designer-field {
14123
15486
  display: flex;
@@ -14129,19 +15492,19 @@
14129
15492
  font-weight: 600;
14130
15493
  text-transform: uppercase;
14131
15494
  letter-spacing: 0.04em;
14132
- color: #6b7280;
15495
+ color: var(--squisq-layout-muted);
14133
15496
  }
14134
15497
  .squisq-template-designer-field input {
14135
15498
  padding: 6px 10px;
14136
15499
  font-size: 13px;
14137
- color: #111827;
14138
- background: #ffffff;
14139
- border: 1px solid #d1d5db;
15500
+ color: var(--squisq-layout-text);
15501
+ background: var(--squisq-layout-input);
15502
+ border: 1px solid var(--squisq-layout-border-strong);
14140
15503
  border-radius: 6px;
14141
15504
  outline: none;
14142
15505
  }
14143
15506
  .squisq-template-designer-field input:focus {
14144
- border-color: #6366f1;
15507
+ border-color: var(--squisq-layout-accent-border);
14145
15508
  box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.15);
14146
15509
  }
14147
15510
  .squisq-template-designer-field span.squisq-template-designer-field-hint {
@@ -14149,7 +15512,7 @@
14149
15512
  font-weight: 400;
14150
15513
  text-transform: none;
14151
15514
  letter-spacing: normal;
14152
- color: #9ca3af;
15515
+ color: var(--squisq-layout-faint);
14153
15516
  }
14154
15517
  .squisq-template-designer-body {
14155
15518
  flex: 1;
@@ -14160,8 +15523,8 @@
14160
15523
  width: 220px;
14161
15524
  flex-shrink: 0;
14162
15525
  padding: 16px;
14163
- border-right: 1px solid #e5e7eb;
14164
- background: #fafafa;
15526
+ border-right: 1px solid var(--squisq-layout-border);
15527
+ background: var(--squisq-layout-subtle);
14165
15528
  overflow-y: auto;
14166
15529
  }
14167
15530
  .squisq-template-designer-palette-title {
@@ -14170,12 +15533,12 @@
14170
15533
  font-weight: 700;
14171
15534
  text-transform: uppercase;
14172
15535
  letter-spacing: 0.06em;
14173
- color: #4338ca;
15536
+ color: var(--squisq-layout-accent-text);
14174
15537
  }
14175
15538
  .squisq-template-designer-palette-hint {
14176
15539
  margin: 0 0 12px;
14177
15540
  font-size: 11px;
14178
- color: #6b7280;
15541
+ color: var(--squisq-layout-muted);
14179
15542
  line-height: 1.4;
14180
15543
  }
14181
15544
  .squisq-template-designer-palette-list {
@@ -14195,7 +15558,7 @@
14195
15558
  font-weight: 700;
14196
15559
  text-transform: uppercase;
14197
15560
  letter-spacing: 0.06em;
14198
- color: #6b7280;
15561
+ color: var(--squisq-layout-muted);
14199
15562
  }
14200
15563
  .squisq-template-designer-palette-shapes {
14201
15564
  display: grid;
@@ -14208,23 +15571,23 @@
14208
15571
  justify-content: center;
14209
15572
  aspect-ratio: 1 / 1;
14210
15573
  padding: 4px;
14211
- background: #ffffff;
14212
- border: 1px solid #e5e7eb;
15574
+ background: var(--squisq-layout-input);
15575
+ border: 1px solid var(--squisq-layout-border);
14213
15576
  border-radius: 6px;
14214
15577
  cursor: grab;
14215
- color: #475569;
15578
+ color: var(--squisq-layout-muted);
14216
15579
  transition: background 0.1s, border-color 0.1s;
14217
15580
  }
14218
15581
  .squisq-template-designer-shape-item:active {
14219
15582
  cursor: grabbing;
14220
15583
  }
14221
15584
  .squisq-template-designer-shape-item:hover {
14222
- background: #eef2ff;
14223
- border-color: #c7d2fe;
15585
+ background: var(--squisq-layout-accent-soft);
15586
+ border-color: var(--squisq-layout-accent-soft-border);
14224
15587
  }
14225
15588
  .squisq-template-designer-shape-item--active {
14226
- background: #eef2ff;
14227
- border-color: #6366f1;
15589
+ background: var(--squisq-layout-accent-soft);
15590
+ border-color: var(--squisq-layout-accent-border);
14228
15591
  }
14229
15592
  .squisq-template-designer-palette-media-add {
14230
15593
  width: 100%;
@@ -14232,20 +15595,20 @@
14232
15595
  padding: 8px 10px;
14233
15596
  font-size: 12px;
14234
15597
  font-weight: 600;
14235
- color: #4338ca;
14236
- background: #eef2ff;
14237
- border: 1px dashed #c7d2fe;
15598
+ color: var(--squisq-layout-accent-text);
15599
+ background: var(--squisq-layout-accent-soft);
15600
+ border: 1px dashed var(--squisq-layout-accent-soft-border);
14238
15601
  border-radius: 6px;
14239
15602
  cursor: pointer;
14240
15603
  }
14241
15604
  .squisq-template-designer-palette-media-add:hover:not(:disabled) {
14242
- background: #e0e7ff;
14243
- border-color: #a5b4fc;
15605
+ background: var(--squisq-layout-accent-soft-hover);
15606
+ border-color: var(--squisq-layout-accent-hover-border);
14244
15607
  }
14245
15608
  .squisq-template-designer-palette-media-add:disabled {
14246
- color: #9ca3af;
14247
- background: #f3f4f6;
14248
- border-color: #e5e7eb;
15609
+ color: var(--squisq-layout-faint);
15610
+ background: var(--squisq-layout-workspace);
15611
+ border-color: var(--squisq-layout-border);
14249
15612
  cursor: not-allowed;
14250
15613
  }
14251
15614
  .squisq-template-designer-palette-item {
@@ -14254,8 +15617,9 @@
14254
15617
  align-items: flex-start;
14255
15618
  gap: 2px;
14256
15619
  padding: 8px 10px;
14257
- background: #ffffff;
14258
- border: 1px solid #e5e7eb;
15620
+ color: var(--squisq-layout-text-soft);
15621
+ background: var(--squisq-layout-input);
15622
+ border: 1px solid var(--squisq-layout-border);
14259
15623
  border-radius: 6px;
14260
15624
  cursor: grab;
14261
15625
  text-align: left;
@@ -14265,12 +15629,12 @@
14265
15629
  cursor: grabbing;
14266
15630
  }
14267
15631
  .squisq-template-designer-palette-item:hover {
14268
- background: #eef2ff;
14269
- border-color: #c7d2fe;
15632
+ background: var(--squisq-layout-accent-soft);
15633
+ border-color: var(--squisq-layout-accent-soft-border);
14270
15634
  }
14271
15635
  .squisq-template-designer-palette-item--active {
14272
- background: #eef2ff;
14273
- border-color: #6366f1;
15636
+ background: var(--squisq-layout-accent-soft);
15637
+ border-color: var(--squisq-layout-accent-border);
14274
15638
  }
14275
15639
  .squisq-template-designer-palette-item-preview {
14276
15640
  font-family:
@@ -14279,11 +15643,11 @@
14279
15643
  "Menlo",
14280
15644
  monospace;
14281
15645
  font-size: 12px;
14282
- color: #4338ca;
15646
+ color: var(--squisq-layout-accent-text);
14283
15647
  }
14284
15648
  .squisq-template-designer-palette-item-label {
14285
15649
  font-size: 11px;
14286
- color: #6b7280;
15650
+ color: var(--squisq-layout-muted);
14287
15651
  }
14288
15652
  .squisq-template-designer-stage {
14289
15653
  flex: 1;
@@ -14292,7 +15656,7 @@
14292
15656
  min-width: 0;
14293
15657
  padding: 12px;
14294
15658
  gap: 8px;
14295
- background: #f3f4f6;
15659
+ background: var(--squisq-layout-workspace);
14296
15660
  }
14297
15661
  .squisq-template-designer-stage-bar {
14298
15662
  display: flex;
@@ -14300,8 +15664,8 @@
14300
15664
  align-items: center;
14301
15665
  gap: 5px;
14302
15666
  padding: 6px 8px;
14303
- background: #ffffff;
14304
- border: 1px solid #e5e7eb;
15667
+ background: var(--squisq-layout-panel);
15668
+ border: 1px solid var(--squisq-layout-border);
14305
15669
  border-radius: 6px;
14306
15670
  align-self: stretch;
14307
15671
  overflow-x: auto;
@@ -14312,7 +15676,7 @@
14312
15676
  font-weight: 600;
14313
15677
  text-transform: uppercase;
14314
15678
  letter-spacing: 0.04em;
14315
- color: #6b7280;
15679
+ color: var(--squisq-layout-muted);
14316
15680
  }
14317
15681
  .squisq-layer-toolbar {
14318
15682
  display: flex;
@@ -14338,27 +15702,27 @@
14338
15702
  width: 28px;
14339
15703
  height: 28px;
14340
15704
  font-size: 13px;
14341
- color: #374151;
15705
+ color: var(--squisq-layout-text-soft);
14342
15706
  background: transparent;
14343
15707
  border: 1px solid transparent;
14344
15708
  border-radius: 4px;
14345
15709
  cursor: pointer;
14346
15710
  }
14347
15711
  .squisq-layer-toolbar-btn:hover {
14348
- background: #f1f5f9;
15712
+ background: var(--squisq-layout-hover);
14349
15713
  }
14350
15714
  .squisq-layer-toolbar-btn--active {
14351
- background: #eef2ff;
14352
- border-color: #6366f1;
14353
- color: #4338ca;
15715
+ background: var(--squisq-layout-accent-soft);
15716
+ border-color: var(--squisq-layout-accent-border);
15717
+ color: var(--squisq-layout-accent-text);
14354
15718
  }
14355
15719
  .squisq-layer-toolbar-select {
14356
15720
  height: 28px;
14357
15721
  padding: 0 6px;
14358
15722
  font-size: 12px;
14359
- color: #1f2937;
14360
- background: #ffffff;
14361
- border: 1px solid #d1d5db;
15723
+ color: var(--squisq-layout-text-soft);
15724
+ background: var(--squisq-layout-input);
15725
+ border: 1px solid var(--squisq-layout-border-strong);
14362
15726
  border-radius: 4px;
14363
15727
  cursor: pointer;
14364
15728
  }
@@ -14367,9 +15731,9 @@
14367
15731
  height: 28px;
14368
15732
  padding: 0 4px 0 6px;
14369
15733
  font-size: 12px;
14370
- color: #1f2937;
14371
- background: #ffffff;
14372
- border: 1px solid #d1d5db;
15734
+ color: var(--squisq-layout-text-soft);
15735
+ background: var(--squisq-layout-input);
15736
+ border: 1px solid var(--squisq-layout-border-strong);
14373
15737
  border-radius: 4px;
14374
15738
  }
14375
15739
  .squisq-layer-toolbar-opacity {
@@ -14383,7 +15747,7 @@
14383
15747
  .squisq-layer-toolbar-label {
14384
15748
  display: inline-flex;
14385
15749
  align-items: center;
14386
- color: #6b7280;
15750
+ color: var(--squisq-layout-muted);
14387
15751
  font-size: 13px;
14388
15752
  }
14389
15753
  .squisq-layer-toolbar-color {
@@ -14395,22 +15759,22 @@
14395
15759
  width: 28px;
14396
15760
  height: 28px;
14397
15761
  padding: 0;
14398
- border: 1px solid #d1d5db;
15762
+ border: 1px solid var(--squisq-layout-border-strong);
14399
15763
  border-radius: 4px;
14400
- background: #ffffff;
15764
+ background: var(--squisq-layout-input);
14401
15765
  cursor: pointer;
14402
15766
  }
14403
15767
  .squisq-layer-toolbar-sep {
14404
15768
  width: 1px;
14405
15769
  align-self: stretch;
14406
15770
  margin: 2px 2px;
14407
- background: #e5e7eb;
15771
+ background: var(--squisq-layout-border);
14408
15772
  }
14409
15773
  .squisq-template-designer-scene {
14410
15774
  flex: 1;
14411
15775
  min-height: 0;
14412
- background: #ffffff;
14413
- border: 1px solid #e5e7eb;
15776
+ background: var(--squisq-layout-panel);
15777
+ border: 1px solid var(--squisq-layout-border);
14414
15778
  border-radius: 8px;
14415
15779
  overflow: hidden;
14416
15780
  }
@@ -14419,13 +15783,13 @@
14419
15783
  align-items: center;
14420
15784
  justify-content: space-between;
14421
15785
  padding: 12px 20px;
14422
- border-top: 1px solid #e5e7eb;
14423
- background: #f9fafb;
15786
+ border-top: 1px solid var(--squisq-layout-border);
15787
+ background: var(--squisq-layout-chrome);
14424
15788
  gap: 12px;
14425
15789
  }
14426
15790
  .squisq-template-designer-footer-hint {
14427
15791
  font-size: 11px;
14428
- color: #6b7280;
15792
+ color: var(--squisq-layout-muted);
14429
15793
  flex: 1;
14430
15794
  min-width: 0;
14431
15795
  }
@@ -14437,23 +15801,23 @@
14437
15801
  padding: 6px 14px;
14438
15802
  font-size: 13px;
14439
15803
  font-weight: 500;
14440
- color: #1f2937;
14441
- background: #ffffff;
14442
- border: 1px solid #d1d5db;
15804
+ color: var(--squisq-layout-text-soft);
15805
+ background: var(--squisq-layout-input);
15806
+ border: 1px solid var(--squisq-layout-border-strong);
14443
15807
  border-radius: 6px;
14444
15808
  cursor: pointer;
14445
15809
  transition: background 0.1s;
14446
15810
  }
14447
15811
  .squisq-template-designer-btn:hover {
14448
- background: #f1f5f9;
15812
+ background: var(--squisq-layout-hover);
14449
15813
  }
14450
15814
  .squisq-template-designer-btn--primary {
14451
15815
  color: #ffffff;
14452
- background: #4f46e5;
14453
- border-color: #4338ca;
15816
+ background: var(--squisq-layout-accent-bg);
15817
+ border-color: var(--squisq-layout-accent-bg-hover);
14454
15818
  }
14455
15819
  .squisq-template-designer-btn--primary:hover {
14456
- background: #4338ca;
15820
+ background: var(--squisq-layout-accent-bg-hover);
14457
15821
  }
14458
15822
  .squisq-layout-manager-overlay {
14459
15823
  position: fixed;
@@ -14470,7 +15834,8 @@
14470
15834
  flex-direction: column;
14471
15835
  width: min(1600px, 96vw);
14472
15836
  height: 92vh;
14473
- background: #ffffff;
15837
+ color: var(--squisq-layout-text-soft);
15838
+ background: var(--squisq-layout-panel);
14474
15839
  border-radius: 12px;
14475
15840
  box-shadow: 0 24px 60px rgba(0, 0, 0, 0.3);
14476
15841
  overflow: hidden;
@@ -14480,14 +15845,14 @@
14480
15845
  align-items: center;
14481
15846
  justify-content: space-between;
14482
15847
  padding: 14px 20px;
14483
- border-bottom: 1px solid #e5e7eb;
14484
- background: #f9fafb;
15848
+ border-bottom: 1px solid var(--squisq-layout-border);
15849
+ background: var(--squisq-layout-chrome);
14485
15850
  }
14486
15851
  .squisq-layout-manager-title {
14487
15852
  margin: 0;
14488
15853
  font-size: 16px;
14489
15854
  font-weight: 600;
14490
- color: #111827;
15855
+ color: var(--squisq-layout-text);
14491
15856
  }
14492
15857
  .squisq-layout-manager-body {
14493
15858
  flex: 1;
@@ -14501,28 +15866,28 @@
14501
15866
  flex-direction: column;
14502
15867
  gap: 8px;
14503
15868
  padding: 16px;
14504
- border-right: 1px solid #e5e7eb;
14505
- background: #fafafa;
15869
+ border-right: 1px solid var(--squisq-layout-border);
15870
+ background: var(--squisq-layout-subtle);
14506
15871
  overflow-y: auto;
14507
15872
  }
14508
15873
  .squisq-layout-manager-new {
14509
15874
  padding: 10px 12px;
14510
15875
  font-size: 13px;
14511
15876
  font-weight: 600;
14512
- color: #4338ca;
14513
- background: #eef2ff;
14514
- border: 1px dashed #c7d2fe;
15877
+ color: var(--squisq-layout-accent-text);
15878
+ background: var(--squisq-layout-accent-soft);
15879
+ border: 1px dashed var(--squisq-layout-accent-soft-border);
14515
15880
  border-radius: 8px;
14516
15881
  cursor: pointer;
14517
15882
  text-align: center;
14518
15883
  }
14519
15884
  .squisq-layout-manager-new:hover {
14520
- background: #e0e7ff;
14521
- border-color: #a5b4fc;
15885
+ background: var(--squisq-layout-accent-soft-hover);
15886
+ border-color: var(--squisq-layout-accent-hover-border);
14522
15887
  }
14523
15888
  .squisq-layout-manager-new--active {
14524
15889
  border-style: solid;
14525
- border-color: #6366f1;
15890
+ border-color: var(--squisq-layout-accent-border);
14526
15891
  }
14527
15892
  .squisq-layout-manager-section-title {
14528
15893
  margin-top: 6px;
@@ -14530,7 +15895,7 @@
14530
15895
  font-weight: 700;
14531
15896
  text-transform: uppercase;
14532
15897
  letter-spacing: 0.06em;
14533
- color: #6b7280;
15898
+ color: var(--squisq-layout-muted);
14534
15899
  }
14535
15900
  .squisq-layout-manager-list {
14536
15901
  display: flex;
@@ -14542,30 +15907,31 @@
14542
15907
  align-items: center;
14543
15908
  gap: 10px;
14544
15909
  padding: 8px;
14545
- background: #ffffff;
14546
- border: 1px solid #e5e7eb;
15910
+ color: var(--squisq-layout-text-soft);
15911
+ background: var(--squisq-layout-input);
15912
+ border: 1px solid var(--squisq-layout-border);
14547
15913
  border-radius: 8px;
14548
15914
  cursor: pointer;
14549
15915
  text-align: left;
14550
15916
  transition: background 0.1s, border-color 0.1s;
14551
15917
  }
14552
15918
  .squisq-layout-manager-item:hover {
14553
- background: #eef2ff;
14554
- border-color: #c7d2fe;
15919
+ background: var(--squisq-layout-accent-soft);
15920
+ border-color: var(--squisq-layout-accent-soft-border);
14555
15921
  }
14556
15922
  .squisq-layout-manager-item--active {
14557
- background: #eef2ff;
14558
- border-color: #6366f1;
15923
+ background: var(--squisq-layout-accent-soft);
15924
+ border-color: var(--squisq-layout-accent-border);
14559
15925
  }
14560
15926
  .squisq-layout-manager-item-thumb {
14561
15927
  flex-shrink: 0;
14562
15928
  display: inline-flex;
14563
15929
  width: 56px;
14564
15930
  height: 40px;
14565
- border: 1px solid #e5e7eb;
15931
+ border: 1px solid var(--squisq-layout-border);
14566
15932
  border-radius: 4px;
14567
15933
  overflow: hidden;
14568
- background: #f8fafc;
15934
+ background: var(--squisq-layout-thumb);
14569
15935
  }
14570
15936
  .squisq-layout-manager-item-text {
14571
15937
  display: flex;
@@ -14576,7 +15942,7 @@
14576
15942
  .squisq-layout-manager-item-label {
14577
15943
  font-size: 13px;
14578
15944
  font-weight: 600;
14579
- color: #111827;
15945
+ color: var(--squisq-layout-text);
14580
15946
  white-space: nowrap;
14581
15947
  overflow: hidden;
14582
15948
  text-overflow: ellipsis;
@@ -14588,7 +15954,7 @@
14588
15954
  "Menlo",
14589
15955
  monospace;
14590
15956
  font-size: 11px;
14591
- color: #6b7280;
15957
+ color: var(--squisq-layout-muted);
14592
15958
  white-space: nowrap;
14593
15959
  overflow: hidden;
14594
15960
  text-overflow: ellipsis;
@@ -14597,7 +15963,7 @@
14597
15963
  margin: 8px 2px;
14598
15964
  font-size: 12px;
14599
15965
  line-height: 1.5;
14600
- color: #6b7280;
15966
+ color: var(--squisq-layout-muted);
14601
15967
  }
14602
15968
  .squisq-layout-manager-main {
14603
15969
  flex: 1;