@bendyline/squisq-editor-react 1.6.2 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (200) hide show
  1. package/README.md +12 -3
  2. package/dist/index.d.ts +1229 -179
  3. package/dist/index.js +18017 -11231
  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 +1471 -245
  9. package/package.json +9 -5
  10. package/src/BlockPropertiesPopover.tsx +30 -15
  11. package/src/DocumentSettingsDialog.tsx +13 -21
  12. package/src/EditorContext.tsx +199 -42
  13. package/src/EditorShell.tsx +348 -260
  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 +309 -69
  20. package/src/PreviewPanel.tsx +312 -78
  21. package/src/RawEditor.tsx +13 -2
  22. package/src/StatusBar.tsx +5 -2
  23. package/src/TemplateAnnotation.ts +12 -3
  24. package/src/TemplatePicker.tsx +75 -21
  25. package/src/ThemeCustomizerPanel.tsx +8 -0
  26. package/src/ThemePicker.tsx +10 -5
  27. package/src/TimelineBlockPreview.tsx +1 -1
  28. package/src/Toolbar.tsx +202 -41
  29. package/src/TransitionPicker.tsx +36 -4
  30. package/src/ViewMenuPanel.tsx +12 -14
  31. package/src/WysiwygEditor.tsx +124 -91
  32. package/src/__tests__/blockPropertiesPopoverTheme.test.tsx +33 -0
  33. package/src/__tests__/blockTagActivity.test.ts +183 -0
  34. package/src/__tests__/buildDocumentPreviewMarkdown.test.ts +75 -0
  35. package/src/__tests__/buildPreviewDocContent.test.ts +48 -0
  36. package/src/__tests__/buildPreviewDocTransition.test.ts +21 -1
  37. package/src/__tests__/canvasSurfaceTextEditing.test.tsx +60 -0
  38. package/src/__tests__/customLayoutManagerTheme.test.tsx +34 -0
  39. package/src/__tests__/documentSettingsDialog.test.tsx +29 -1
  40. package/src/__tests__/editorScrollHandoff.test.tsx +102 -0
  41. package/src/__tests__/editorScrollSync.test.ts +65 -0
  42. package/src/__tests__/editorShellProps.test.tsx +123 -1
  43. package/src/__tests__/emojiPicker.test.tsx +2 -42
  44. package/src/__tests__/headingTransition.test.ts +0 -12
  45. package/src/__tests__/imageEditAffordance.test.tsx +5 -1
  46. package/src/__tests__/imageEditModalContract.test.tsx +119 -0
  47. package/src/__tests__/imageEditorShell.test.tsx +15 -1
  48. package/src/__tests__/jsonEditor.test.tsx +56 -1
  49. package/src/__tests__/layersPanel.test.tsx +75 -5
  50. package/src/__tests__/majorApiTypes.test.ts +26 -0
  51. package/src/__tests__/mediaBinDrop.test.tsx +90 -0
  52. package/src/__tests__/narrationSave.test.ts +148 -0
  53. package/src/__tests__/outlinePanel.test.tsx +93 -3
  54. package/src/__tests__/outlineSource.test.ts +217 -0
  55. package/src/__tests__/plainHtmlPreview.test.tsx +17 -1
  56. package/src/__tests__/presentationMode.test.tsx +290 -0
  57. package/src/__tests__/previewControls.test.tsx +218 -5
  58. package/src/__tests__/previewPanelAudioFailure.test.tsx +46 -0
  59. package/src/__tests__/previewPanelPresentation.test.tsx +126 -0
  60. package/src/__tests__/previewPanelTransforms.test.tsx +117 -0
  61. package/src/__tests__/rawEditorModelIsolation.test.ts +19 -0
  62. package/src/__tests__/resolveBlockVisual.test.ts +43 -0
  63. package/src/__tests__/statusBar.test.tsx +27 -0
  64. package/src/__tests__/teleprompter.test.tsx +190 -0
  65. package/src/__tests__/templateAnnotationRoundTrip.test.ts +26 -0
  66. package/src/__tests__/templatePickerPortal.test.tsx +62 -0
  67. package/src/__tests__/tiptapBridge.test.ts +23 -0
  68. package/src/__tests__/tiptapCodeBlockRoundTrip.test.ts +109 -0
  69. package/src/__tests__/transformStyleId.test.ts +13 -0
  70. package/src/__tests__/useImageEditor.test.tsx +67 -0
  71. package/src/__tests__/useMediaRecorder.test.ts +75 -0
  72. package/src/__tests__/viewMenuPanel.test.tsx +130 -0
  73. package/src/__tests__/wysiwygImageUpload.test.ts +69 -0
  74. package/src/__tests__/wysiwygTemplateBadgeFocus.test.tsx +56 -0
  75. package/src/asciiDiagram/AsciiDiagramExtension.ts +343 -0
  76. package/src/asciiDiagram/AsciiDiagramWidget.tsx +224 -0
  77. package/src/asciiDiagram/RepairableDiagramExtension.ts +200 -0
  78. package/src/asciiDiagram/__tests__/AsciiDiagramExtension.test.ts +145 -0
  79. package/src/asciiDiagram/__tests__/RepairableDiagramExtension.test.ts +159 -0
  80. package/src/asciiDiagram/__tests__/asciiDiagramCommands.test.ts +227 -0
  81. package/src/asciiDiagram/__tests__/asciiDiagramOps.test.ts +114 -0
  82. package/src/asciiDiagram/__tests__/asciiPaste.test.ts +43 -0
  83. package/src/asciiDiagram/asciiDiagramCommands.ts +148 -0
  84. package/src/asciiDiagram/asciiDiagramData.ts +116 -0
  85. package/src/asciiDiagram/asciiDiagramOps.ts +219 -0
  86. package/src/asciiDiagram/asciiPaste.ts +19 -0
  87. package/src/blockTagActivity.ts +233 -0
  88. package/src/buildDocumentPreviewMarkdown.ts +168 -0
  89. package/src/buildPreviewDoc.ts +19 -12
  90. package/src/customTemplates/CustomLayoutManager.tsx +3 -2
  91. package/src/customTemplates/CustomTemplateContext.tsx +6 -0
  92. package/src/customTemplates/TemplateDesigner.tsx +7 -4
  93. package/src/customTemplates/__tests__/library.test.ts +8 -0
  94. package/src/customTemplates/designer.css +158 -99
  95. package/src/customTemplates/library.ts +16 -3
  96. package/src/customThemes/CustomThemeContext.tsx +6 -0
  97. package/src/customThemes/CustomThemeDialog.tsx +35 -5
  98. package/src/customThemes/ImportThemeSection.tsx +178 -0
  99. package/src/customThemes/__tests__/customThemeLibrary.test.ts +9 -0
  100. package/src/customThemes/__tests__/importThemeSection.test.tsx +192 -0
  101. package/src/customThemes/customThemeLibrary.ts +7 -4
  102. package/src/customThemes/index.ts +7 -1
  103. package/src/customThemes/themeDraft.ts +23 -7
  104. package/src/diagram/DiagramCanvas.tsx +9 -4
  105. package/src/diagram/types.ts +35 -0
  106. package/src/editorScrollSync.ts +73 -0
  107. package/src/emojiData.ts +3 -23
  108. package/src/headingTransition.ts +0 -15
  109. package/src/imageEditor/CanvasSurface.tsx +29 -23
  110. package/src/imageEditor/LayersPanel.tsx +78 -3
  111. package/src/imageEditor/Toolbar.tsx +5 -1
  112. package/src/imageEditor/icons.tsx +4 -0
  113. package/src/imageEditor/image-editor.css +75 -0
  114. package/src/imageEditor/layers/SelectionHandles.tsx +1 -1
  115. package/src/imageEditor/useImageEditor.ts +71 -14
  116. package/src/index.ts +191 -19
  117. package/src/jsonEditor/JsonEditorContext.tsx +12 -6
  118. package/src/jsonEditor/RenderNode.tsx +24 -3
  119. package/src/jsonEditor/editors.tsx +86 -19
  120. package/src/mediaEntries.ts +12 -0
  121. package/src/monaco.ts +35 -0
  122. package/src/monacoWorkers.ts +89 -0
  123. package/src/outlineSource.ts +171 -0
  124. package/src/presentation/PresentationMode.tsx +596 -0
  125. package/src/rawEditorIsolation.ts +18 -0
  126. package/src/recorder/hooks/useMediaRecorder.ts +97 -53
  127. package/src/resolveBlockVisual.ts +10 -4
  128. package/src/scene/Scene.tsx +48 -18
  129. package/src/scene/SceneBlockExtension.ts +17 -10
  130. package/src/scene/SceneBlockWidget.tsx +5 -1
  131. package/src/scene/SceneViewport.tsx +7 -3
  132. package/src/scene/ShapePalette.tsx +17 -2
  133. package/src/scene/__tests__/DiagramAdapter.test.ts +86 -0
  134. package/src/scene/__tests__/SceneBlockExtension.test.ts +33 -0
  135. package/src/scene/__tests__/sceneIsolation.test.tsx +93 -0
  136. package/src/scene/adapters/DiagramAdapter.ts +12 -101
  137. package/src/scene/commands/SceneCommand.ts +4 -1
  138. package/src/scene/index.ts +1 -6
  139. package/src/scene/layers/DiagramEdges.tsx +21 -7
  140. package/src/scene/layers/edgeGeometry.ts +9 -1
  141. package/src/scene/layers/nodeCard.tsx +27 -8
  142. package/src/scene/scene.css +5 -2
  143. package/src/scene/text/SceneTextOverlay.tsx +5 -5
  144. package/src/scene/text/sceneTextChannel.ts +26 -20
  145. package/src/scene/text/sceneTextConfig.ts +4 -0
  146. package/src/scene/tools/ConnectTool.ts +13 -4
  147. package/src/scene/tools/SceneTool.ts +8 -0
  148. package/src/scene/tools/SelectTool.ts +34 -18
  149. package/src/scene/tools/ShapeTool.ts +2 -3
  150. package/src/styles/ascii-diagram.css +79 -0
  151. package/src/styles/ascii-timeline.css +499 -0
  152. package/src/styles/editor.css +706 -120
  153. package/src/styles/index.css +3 -0
  154. package/src/styles/tree-view.css +139 -0
  155. package/src/teleprompter/TeleprompterControls.tsx +218 -0
  156. package/src/teleprompter/TeleprompterSelfView.tsx +22 -0
  157. package/src/teleprompter/TeleprompterSurface.tsx +267 -0
  158. package/src/teleprompter/TeleprompterView.tsx +338 -0
  159. package/src/teleprompter/canvasRenderer.ts +161 -0
  160. package/src/teleprompter/floatingWindow.ts +352 -0
  161. package/src/teleprompter/index.ts +61 -0
  162. package/src/teleprompter/pcmWorklet.ts +62 -0
  163. package/src/teleprompter/recording/insertPreamble.ts +80 -0
  164. package/src/teleprompter/recording/narrationSave.ts +134 -0
  165. package/src/teleprompter/recording/useNarrationRecorder.ts +367 -0
  166. package/src/teleprompter/scrollModel.ts +85 -0
  167. package/src/teleprompter/teleprompterTheme.ts +303 -0
  168. package/src/teleprompter/types.ts +38 -0
  169. package/src/teleprompter/useFloatingWindow.ts +74 -0
  170. package/src/teleprompter/useMicAnalysis.ts +211 -0
  171. package/src/teleprompter/useTeleprompter.ts +421 -0
  172. package/src/templateContentPreviewResolver.ts +12 -5
  173. package/src/timeline/TimelineEditorWidget.tsx +702 -0
  174. package/src/timeline/TimelineViewExtension.ts +252 -0
  175. package/src/timeline/__tests__/TimelineEditorWidget.test.tsx +355 -0
  176. package/src/timeline/__tests__/TimelineViewExtension.test.ts +163 -0
  177. package/src/timeline/__tests__/timelineCommands.test.ts +327 -0
  178. package/src/timeline/__tests__/timelineOps.test.ts +222 -0
  179. package/src/timeline/__tests__/timelinePaste.test.ts +34 -0
  180. package/src/timeline/timelineCommands.ts +367 -0
  181. package/src/timeline/timelineData.ts +54 -0
  182. package/src/timeline/timelineOps.ts +277 -0
  183. package/src/timeline/timelinePaste.ts +8 -0
  184. package/src/tiptapBridge.ts +24 -16
  185. package/src/transformStyleId.ts +17 -0
  186. package/src/treeview/TreeOutlineWidget.tsx +240 -0
  187. package/src/treeview/TreeViewExtension.ts +250 -0
  188. package/src/treeview/__tests__/TreeViewExtension.test.ts +122 -0
  189. package/src/treeview/__tests__/treeOps.test.ts +125 -0
  190. package/src/treeview/__tests__/treePaste.test.ts +40 -0
  191. package/src/treeview/__tests__/treeViewCommands.test.ts +163 -0
  192. package/src/treeview/treeOps.ts +172 -0
  193. package/src/treeview/treePaste.ts +13 -0
  194. package/src/treeview/treeViewCommands.ts +94 -0
  195. package/src/treeview/treeViewData.ts +41 -0
  196. package/src/useMonacoLoader.ts +11 -34
  197. package/src/wysiwygImageUpload.ts +113 -0
  198. package/src/diagram/DiagramExtension.ts +0 -209
  199. package/src/diagram/DiagramWidget.tsx +0 -272
  200. 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);
@@ -8170,7 +8349,7 @@
8170
8349
  border: 0;
8171
8350
  border-radius: 0;
8172
8351
  vertical-align: baseline;
8173
- transform: translateY(2px);
8352
+ transform: translate(3px, 0);
8174
8353
  user-select: none;
8175
8354
  line-height: 1;
8176
8355
  cursor: pointer;
@@ -8258,6 +8437,14 @@
8258
8437
  .squisq-wysiwyg-container[data-block-tags=hidden] .squisq-props-badge {
8259
8438
  display: none;
8260
8439
  }
8440
+ .squisq-wysiwyg-container[data-block-tags=active] .squisq-template-badge,
8441
+ .squisq-wysiwyg-container[data-block-tags=active] .squisq-props-badge {
8442
+ display: none;
8443
+ }
8444
+ .squisq-wysiwyg-container[data-block-tags=active] .squisq-wysiwyg-editor.ProseMirror-focused :is(.squisq-block-tags--selected, .squisq-block-tags--hovered) > .squisq-template-badge,
8445
+ .squisq-wysiwyg-container[data-block-tags=active] .squisq-wysiwyg-editor.ProseMirror-focused :is(.squisq-block-tags--selected, .squisq-block-tags--hovered) > .squisq-props-badge {
8446
+ display: inline-flex;
8447
+ }
8261
8448
  .squisq-props-badge {
8262
8449
  display: inline-flex;
8263
8450
  align-items: center;
@@ -8276,6 +8463,7 @@
8276
8463
  border: 1px solid #d1d5db;
8277
8464
  border-radius: 10px;
8278
8465
  vertical-align: middle;
8466
+ transform: translate(3px, -2px);
8279
8467
  user-select: none;
8280
8468
  cursor: pointer;
8281
8469
  opacity: 0.5;
@@ -8286,16 +8474,16 @@
8286
8474
  }
8287
8475
  .squisq-props-badge::before {
8288
8476
  content: "\f1de";
8289
- font-family: "Font Awesome 6 Free";
8477
+ font-family: var(--fa-family-classic, "Font Awesome 7 Free");
8290
8478
  font-weight: 900;
8291
8479
  font-size: 10px;
8292
8480
  line-height: 1;
8293
8481
  }
8294
8482
  .squisq-props-badge[data-props-summary] {
8295
8483
  opacity: 1;
8296
- color: #6d28d9;
8297
- background: #f5f3ff;
8298
- border-color: #c4b5fd;
8484
+ color: var(--squisq-block-props-accent, inherit);
8485
+ background: color-mix(in oklch, currentColor 12%, transparent);
8486
+ border-color: color-mix(in oklch, currentColor 35%, transparent);
8299
8487
  }
8300
8488
  .squisq-props-badge[data-props-summary]::after {
8301
8489
  content: attr(data-props-summary);
@@ -8309,11 +8497,31 @@
8309
8497
  .squisq-props-badge:hover,
8310
8498
  .squisq-props-badge:focus-visible {
8311
8499
  opacity: 1;
8312
- color: #6d28d9;
8313
- background: #ede9fe;
8314
- border-color: #c4b5fd;
8500
+ color: var(--squisq-block-props-accent, inherit);
8501
+ background: color-mix(in oklch, currentColor 16%, transparent);
8502
+ border-color: color-mix(in oklch, currentColor 42%, transparent);
8315
8503
  outline: none;
8316
8504
  }
8505
+ :is(.squisq-block-props-popover, .squisq-transition-picker, .squisq-transition-flyout) {
8506
+ --squisq-block-props-surface: #ffffff;
8507
+ --squisq-block-props-surface-hover: #f3f4f6;
8508
+ --squisq-block-props-input: #ffffff;
8509
+ --squisq-block-props-text: #111827;
8510
+ --squisq-block-props-muted: #6b7280;
8511
+ --squisq-block-props-quiet: #9ca3af;
8512
+ --squisq-block-props-border: #d1d5db;
8513
+ --squisq-block-props-divider: #e5e7eb;
8514
+ }
8515
+ :is(.squisq-block-props-popover, .squisq-transition-picker, .squisq-transition-flyout)[data-theme=dark] {
8516
+ --squisq-block-props-surface: #1f2937;
8517
+ --squisq-block-props-surface-hover: #374151;
8518
+ --squisq-block-props-input: #111827;
8519
+ --squisq-block-props-text: #f9fafb;
8520
+ --squisq-block-props-muted: #d1d5db;
8521
+ --squisq-block-props-quiet: #9ca3af;
8522
+ --squisq-block-props-border: #4b5563;
8523
+ --squisq-block-props-divider: #374151;
8524
+ }
8317
8525
  .squisq-block-props-popover {
8318
8526
  width: 280px;
8319
8527
  max-width: calc(100vw - 24px);
@@ -8321,8 +8529,9 @@
8321
8529
  display: flex;
8322
8530
  flex-direction: column;
8323
8531
  gap: 10px;
8324
- background: #fff;
8325
- border: 1px solid #e5e7eb;
8532
+ color: var(--squisq-block-props-text);
8533
+ background: var(--squisq-block-props-surface);
8534
+ border: 1px solid var(--squisq-block-props-divider);
8326
8535
  border-radius: 10px;
8327
8536
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12), 0 2px 6px rgba(0, 0, 0, 0.08);
8328
8537
  }
@@ -8335,7 +8544,7 @@
8335
8544
  .squisq-block-props-label {
8336
8545
  font-size: 11px;
8337
8546
  font-weight: 600;
8338
- color: #6b7280;
8547
+ color: var(--squisq-block-props-muted);
8339
8548
  flex-shrink: 0;
8340
8549
  }
8341
8550
  .squisq-block-props-numfield {
@@ -8347,43 +8556,37 @@
8347
8556
  width: 72px;
8348
8557
  padding: 4px 6px;
8349
8558
  font-size: 12px;
8350
- color: #111827;
8351
- border: 1px solid #d1d5db;
8559
+ color: var(--squisq-block-props-text);
8560
+ background: var(--squisq-block-props-input);
8561
+ border: 1px solid var(--squisq-block-props-border);
8352
8562
  border-radius: 5px;
8353
8563
  outline: none;
8354
8564
  }
8355
8565
  .squisq-block-props-input:focus {
8356
- border-color: #6366f1;
8566
+ border-color: var(--squisq-block-props-accent, #6366f1);
8357
8567
  }
8358
8568
  .squisq-block-props-unit {
8359
8569
  font-size: 11px;
8360
- color: #9ca3af;
8570
+ color: var(--squisq-block-props-quiet);
8361
8571
  }
8362
- .squisq-editor-shell[data-theme=dark] .squisq-props-badge {
8572
+ .squisq-editor-shell[data-theme=dark] .squisq-props-badge:not([data-props-summary]) {
8363
8573
  border-color: #4b5563;
8364
8574
  color: #9ca3af;
8365
8575
  }
8366
8576
  .squisq-editor-shell[data-theme=dark] .squisq-props-badge[data-props-summary] {
8367
- color: #ddd6fe;
8368
- background: #3730a3;
8369
- border-color: #6d5fd6;
8577
+ color: var(--squisq-block-props-accent, inherit);
8578
+ background: color-mix(in oklch, currentColor 24%, transparent);
8579
+ border-color: color-mix(in oklch, currentColor 52%, transparent);
8370
8580
  }
8371
8581
  .squisq-editor-shell[data-theme=dark] .squisq-props-badge:hover,
8372
8582
  .squisq-editor-shell[data-theme=dark] .squisq-props-badge:focus-visible {
8373
- color: #ede9fe;
8374
- background: #4c1d95;
8375
- border-color: #7c3aed;
8583
+ color: var(--squisq-block-props-accent, inherit);
8584
+ background: color-mix(in oklch, currentColor 28%, transparent);
8585
+ border-color: color-mix(in oklch, currentColor 58%, transparent);
8376
8586
  }
8377
- .squisq-editor-shell[data-theme=dark] .squisq-block-props-popover {
8378
- background: #1f2937;
8379
- border-color: #374151;
8587
+ .squisq-block-props-popover[data-theme=dark] {
8380
8588
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.4), 0 2px 6px rgba(0, 0, 0, 0.2);
8381
8589
  }
8382
- .squisq-editor-shell[data-theme=dark] .squisq-block-props-input {
8383
- background: #111827;
8384
- color: #f9fafb;
8385
- border-color: #4b5563;
8386
- }
8387
8590
  .squisq-status-bar {
8388
8591
  display: flex;
8389
8592
  align-items: center;
@@ -8451,10 +8654,11 @@
8451
8654
  }
8452
8655
  .squisq-wysiwyg-editor h2 {
8453
8656
  font-size: 1.5em;
8454
- margin: 0.65em 0 0.35em;
8657
+ margin: 0.8em 0 0.25em;
8455
8658
  }
8456
8659
  .squisq-wysiwyg-editor h3 {
8457
8660
  font-size: 1.17em;
8661
+ min-height: 26px;
8458
8662
  margin: 1.3em 0 0.3em;
8459
8663
  }
8460
8664
  .squisq-wysiwyg-editor h4 {
@@ -8474,7 +8678,7 @@
8474
8678
  }
8475
8679
  .squisq-wysiwyg-editor p {
8476
8680
  margin: 0.5em 0;
8477
- line-height: 1.6;
8681
+ line-height: 1.7;
8478
8682
  }
8479
8683
  .squisq-wysiwyg-editor blockquote {
8480
8684
  border-left: 3px solid var(--squisq-theme-text-muted, #d1d5db);
@@ -8490,6 +8694,13 @@
8490
8694
  overflow-x: auto;
8491
8695
  font-size: 13px;
8492
8696
  line-height: 1.5;
8697
+ font-family:
8698
+ ui-monospace,
8699
+ SFMono-Regular,
8700
+ Menlo,
8701
+ Consolas,
8702
+ "Liberation Mono",
8703
+ monospace;
8493
8704
  }
8494
8705
  .squisq-wysiwyg-editor code {
8495
8706
  background: var(--squisq-theme-bg-muted, #f1f5f9);
@@ -8497,6 +8708,13 @@
8497
8708
  padding: 1px 4px;
8498
8709
  border-radius: 3px;
8499
8710
  font-size: 0.9em;
8711
+ font-family:
8712
+ ui-monospace,
8713
+ SFMono-Regular,
8714
+ Menlo,
8715
+ Consolas,
8716
+ "Liberation Mono",
8717
+ monospace;
8500
8718
  }
8501
8719
  .squisq-wysiwyg-editor pre code {
8502
8720
  background: none;
@@ -8751,6 +8969,46 @@
8751
8969
  accent-color: #2563eb;
8752
8970
  cursor: pointer;
8753
8971
  }
8972
+ .squisq-presentation-control {
8973
+ display: inline-flex;
8974
+ align-items: center;
8975
+ flex: 0 0 auto;
8976
+ margin: 0 5px 0 3px;
8977
+ border: 1px solid var(--squisq-border, #d1d5db);
8978
+ border-radius: 5px;
8979
+ background: var(--squisq-input-bg, #fff);
8980
+ overflow: hidden;
8981
+ }
8982
+ .squisq-presentation-control .squisq-presentation-start {
8983
+ width: 30px;
8984
+ border-radius: 0;
8985
+ }
8986
+ .squisq-presentation-menu-trigger {
8987
+ align-self: stretch;
8988
+ display: inline-flex;
8989
+ align-items: center;
8990
+ justify-content: center;
8991
+ width: 18px;
8992
+ padding: 0;
8993
+ border: 0;
8994
+ border-left: 1px solid var(--squisq-border, #d1d5db);
8995
+ background: transparent;
8996
+ color: var(--squisq-text-muted, #6b7280);
8997
+ cursor: pointer;
8998
+ }
8999
+ .squisq-presentation-menu-trigger:hover,
9000
+ .squisq-presentation-menu-trigger--open {
9001
+ background: rgba(107, 114, 128, 0.2);
9002
+ color: var(--squisq-text, #111827);
9003
+ }
9004
+ .squisq-presentation-menu-item:disabled {
9005
+ cursor: not-allowed;
9006
+ opacity: 0.55;
9007
+ }
9008
+ .squisq-presentation-menu-item:disabled:hover {
9009
+ background: transparent;
9010
+ color: inherit;
9011
+ }
8754
9012
  .squisq-wysiwyg-editor a {
8755
9013
  color: color-mix(in srgb, var(--squisq-theme-primary, #2563eb) 65%, var(--squisq-theme-text, #1f2937));
8756
9014
  text-decoration: underline;
@@ -8789,6 +9047,116 @@
8789
9047
  overflow: auto;
8790
9048
  color: #dc2626;
8791
9049
  }
9050
+ .squisq-editor-shell[data-presentation-mode=control],
9051
+ .squisq-editor-shell[data-presentation-mode=fullscreen] {
9052
+ position: relative;
9053
+ background: #000;
9054
+ }
9055
+ .squisq-editor-shell[data-presentation-mode=control] > .squisq-editor-header,
9056
+ .squisq-editor-shell[data-presentation-mode=fullscreen] > .squisq-editor-header,
9057
+ .squisq-editor-shell[data-presentation-mode=control] > .squisq-status-bar,
9058
+ .squisq-editor-shell[data-presentation-mode=fullscreen] > .squisq-status-bar,
9059
+ .squisq-editor-shell[data-presentation-mode=control] > .squisq-timeline,
9060
+ .squisq-editor-shell[data-presentation-mode=fullscreen] > .squisq-timeline {
9061
+ display: none;
9062
+ }
9063
+ .squisq-editor-shell[data-presentation-mode=control] .squisq-media-bin,
9064
+ .squisq-editor-shell[data-presentation-mode=fullscreen] .squisq-media-bin,
9065
+ .squisq-editor-shell[data-presentation-mode=control] .squisq-custom-theme-pane,
9066
+ .squisq-editor-shell[data-presentation-mode=fullscreen] .squisq-custom-theme-pane {
9067
+ display: none;
9068
+ }
9069
+ .squisq-editor-shell[data-presentation-mode=control] .squisq-preview-player,
9070
+ .squisq-editor-shell[data-presentation-mode=fullscreen] .squisq-preview-player {
9071
+ padding: 0;
9072
+ background: #000;
9073
+ }
9074
+ .squisq-editor-shell[data-presentation-mode=fullscreen]:fullscreen {
9075
+ width: 100vw !important;
9076
+ height: 100vh !important;
9077
+ min-width: 0 !important;
9078
+ min-height: 0 !important;
9079
+ max-width: none !important;
9080
+ max-height: none !important;
9081
+ }
9082
+ .squisq-presentation-exit {
9083
+ position: absolute;
9084
+ z-index: 1001;
9085
+ top: 12px;
9086
+ right: 12px;
9087
+ display: inline-flex;
9088
+ align-items: center;
9089
+ gap: 7px;
9090
+ min-height: 34px;
9091
+ padding: 7px 11px;
9092
+ border: 1px solid rgba(255, 255, 255, 0.35);
9093
+ border-radius: 7px;
9094
+ background: rgba(15, 23, 42, 0.78);
9095
+ color: #fff;
9096
+ font: 600 12px/1 var(--squisq-ux-font, sans-serif);
9097
+ cursor: pointer;
9098
+ opacity: 0.72;
9099
+ backdrop-filter: blur(8px);
9100
+ transition: opacity 0.12s ease, background 0.12s ease;
9101
+ }
9102
+ .squisq-presentation-exit:hover,
9103
+ .squisq-presentation-exit:focus-visible {
9104
+ outline: none;
9105
+ background: rgba(15, 23, 42, 0.94);
9106
+ opacity: 1;
9107
+ }
9108
+ .squisq-presentation-window {
9109
+ width: 100%;
9110
+ height: 100%;
9111
+ display: flex;
9112
+ overflow: hidden;
9113
+ background: #000;
9114
+ }
9115
+ .squisq-presentation-window-preview,
9116
+ .squisq-presentation-window-surface,
9117
+ .squisq-presentation-teleprompter {
9118
+ width: 100%;
9119
+ height: 100%;
9120
+ min-width: 0;
9121
+ min-height: 0;
9122
+ }
9123
+ .squisq-presentation-window-preview {
9124
+ display: flex;
9125
+ }
9126
+ .squisq-presentation-window-surface {
9127
+ padding: 0;
9128
+ background: #000;
9129
+ pointer-events: none;
9130
+ }
9131
+ .squisq-presentation-teleprompter {
9132
+ display: flex;
9133
+ overflow: hidden;
9134
+ pointer-events: none;
9135
+ }
9136
+ .squisq-presentation-connecting {
9137
+ color: rgba(255, 255, 255, 0.72);
9138
+ font: 500 14px/1.4 var(--squisq-ux-font, sans-serif);
9139
+ }
9140
+ .squisq-presentation-error {
9141
+ position: fixed;
9142
+ z-index: 10000;
9143
+ top: 16px;
9144
+ left: 50%;
9145
+ max-width: min(420px, calc(100vw - 32px));
9146
+ padding: 10px 14px;
9147
+ border: 1px solid #fecaca;
9148
+ border-radius: 8px;
9149
+ background: #fff1f2;
9150
+ color: #991b1b;
9151
+ box-shadow: 0 10px 30px rgba(15, 23, 42, 0.2);
9152
+ font: 500 13px/1.4 var(--squisq-ux-font, sans-serif);
9153
+ transform: translateX(-50%);
9154
+ }
9155
+ .squisq-presentation-error[data-theme=dark] {
9156
+ border-color: #7f1d1d;
9157
+ background: #3f151b;
9158
+ color: #fecdd3;
9159
+ }
8792
9160
  .squisq-editor-shell {
8793
9161
  --squisq-bg: #f5f5f5;
8794
9162
  --squisq-border: #e0e0e0;
@@ -8839,6 +9207,17 @@
8839
9207
  color: #93c5fd;
8840
9208
  border-bottom-color: #60a5fa;
8841
9209
  }
9210
+ .squisq-editor-shell[data-theme=dark] .squisq-toolbar-use-tab--active {
9211
+ border-bottom-color: #60a5fa;
9212
+ }
9213
+ .squisq-editor-shell[data-theme=dark] .squisq-use-mode-trigger {
9214
+ color: #d1d5db;
9215
+ }
9216
+ .squisq-editor-shell[data-theme=dark] .squisq-use-mode-trigger:hover,
9217
+ .squisq-editor-shell[data-theme=dark] .squisq-use-mode-trigger--open,
9218
+ .squisq-editor-shell[data-theme=dark] .squisq-toolbar-use-tab--active .squisq-use-mode-trigger {
9219
+ color: #93c5fd;
9220
+ }
8842
9221
  .squisq-editor-shell[data-theme=dark] .squisq-toolbar-button {
8843
9222
  color: #d1d5db;
8844
9223
  }
@@ -9135,6 +9514,7 @@
9135
9514
  }
9136
9515
  }
9137
9516
  .squisq-media-bin {
9517
+ position: relative;
9138
9518
  width: 220px;
9139
9519
  border-left: 1px solid #e5e7eb;
9140
9520
  background: #f9fafb;
@@ -9143,20 +9523,56 @@
9143
9523
  flex-shrink: 0;
9144
9524
  overflow: hidden;
9145
9525
  }
9146
- .squisq-media-bin-header {
9526
+ .squisq-media-bin-drop-target {
9527
+ position: absolute;
9528
+ inset: 6px;
9529
+ z-index: 5;
9147
9530
  display: flex;
9531
+ flex-direction: column;
9148
9532
  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 {
9533
+ justify-content: center;
9534
+ gap: 4px;
9535
+ border: 2px dashed #2563eb;
9536
+ border-radius: 6px;
9537
+ background: rgba(239, 246, 255, 0.96);
9538
+ color: #1d4ed8;
9155
9539
  font-size: 12px;
9156
- font-weight: 600;
9157
- color: #374151;
9158
- text-transform: uppercase;
9159
- letter-spacing: 0.05em;
9540
+ text-align: center;
9541
+ pointer-events: none;
9542
+ }
9543
+ .squisq-media-bin-drop-target-icon {
9544
+ display: flex;
9545
+ align-items: center;
9546
+ justify-content: center;
9547
+ width: 28px;
9548
+ height: 28px;
9549
+ border-radius: 999px;
9550
+ background: #2563eb;
9551
+ color: #fff;
9552
+ font-size: 22px;
9553
+ font-weight: 400;
9554
+ line-height: 1;
9555
+ }
9556
+ .squisq-media-bin-drop-target strong {
9557
+ font-size: 13px;
9558
+ }
9559
+ .squisq-media-bin-drop-target span:last-child {
9560
+ color: #64748b;
9561
+ }
9562
+ .squisq-media-bin-header {
9563
+ display: flex;
9564
+ align-items: center;
9565
+ justify-content: space-between;
9566
+ padding: 8px 10px;
9567
+ border-bottom: 1px solid #e5e7eb;
9568
+ flex-shrink: 0;
9569
+ }
9570
+ .squisq-media-bin-title {
9571
+ font-size: 12px;
9572
+ font-weight: 600;
9573
+ color: #374151;
9574
+ text-transform: uppercase;
9575
+ letter-spacing: 0.05em;
9160
9576
  }
9161
9577
  .squisq-media-bin-upload {
9162
9578
  font-size: 11px;
@@ -9302,6 +9718,16 @@
9302
9718
  background: #1e293b;
9303
9719
  border-left-color: #374151;
9304
9720
  }
9721
+ .squisq-media-bin--dark .squisq-media-bin-drop-target,
9722
+ .squisq-editor-shell[data-theme=dark] .squisq-media-bin .squisq-media-bin-drop-target {
9723
+ border-color: #60a5fa;
9724
+ background: rgba(15, 23, 42, 0.96);
9725
+ color: #bfdbfe;
9726
+ }
9727
+ .squisq-media-bin--dark .squisq-media-bin-drop-target span:last-child,
9728
+ .squisq-editor-shell[data-theme=dark] .squisq-media-bin .squisq-media-bin-drop-target span:last-child {
9729
+ color: #94a3b8;
9730
+ }
9305
9731
  .squisq-media-bin--dark .squisq-media-bin-header,
9306
9732
  .squisq-editor-shell[data-theme=dark] .squisq-media-bin .squisq-media-bin-header {
9307
9733
  border-bottom-color: #374151;
@@ -10221,6 +10647,57 @@
10221
10647
  .squisq-theme-customizer-button--primary:hover {
10222
10648
  background: #1d4ed8;
10223
10649
  }
10650
+ .squisq-theme-import {
10651
+ display: flex;
10652
+ flex-direction: column;
10653
+ gap: 6px;
10654
+ }
10655
+ .squisq-theme-import-drop {
10656
+ display: flex;
10657
+ align-items: center;
10658
+ gap: 8px;
10659
+ padding: 8px;
10660
+ border: 1px dashed var(--squisq-border, #d1d5db);
10661
+ border-radius: 6px;
10662
+ background: var(--squisq-input-bg, #f9fafb);
10663
+ }
10664
+ .squisq-theme-import-drop--active {
10665
+ border-color: #2563eb;
10666
+ background: rgba(37, 99, 235, 0.08);
10667
+ }
10668
+ .squisq-theme-import-drop--busy {
10669
+ opacity: 0.7;
10670
+ pointer-events: none;
10671
+ }
10672
+ .squisq-theme-import-hint {
10673
+ font-size: 11px;
10674
+ color: var(--squisq-text-muted, #6b7280);
10675
+ }
10676
+ .squisq-theme-import-status {
10677
+ font-size: 11px;
10678
+ color: var(--squisq-text-muted, #6b7280);
10679
+ }
10680
+ .squisq-theme-import-error {
10681
+ font-size: 11px;
10682
+ color: #dc2626;
10683
+ }
10684
+ .squisq-theme-import-warnings {
10685
+ margin: 0;
10686
+ padding-left: 16px;
10687
+ font-size: 11px;
10688
+ color: var(--squisq-text-muted, #6b7280);
10689
+ }
10690
+ .squisq-editor-shell[data-theme=dark] .squisq-theme-import-drop {
10691
+ border-color: #374151;
10692
+ background: #111827;
10693
+ }
10694
+ .squisq-editor-shell[data-theme=dark] .squisq-theme-import-drop--active {
10695
+ border-color: #3b82f6;
10696
+ background: rgba(59, 130, 246, 0.12);
10697
+ }
10698
+ .squisq-editor-shell[data-theme=dark] .squisq-theme-import-error {
10699
+ color: #f87171;
10700
+ }
10224
10701
  .squisq-editor-shell[data-theme=dark] .squisq-theme-customizer-popover {
10225
10702
  background: #1f2937;
10226
10703
  border-color: #374151;
@@ -10832,6 +11309,7 @@
10832
11309
  padding: 0;
10833
11310
  }
10834
11311
  .squisq-outline-item {
11312
+ position: relative;
10835
11313
  margin: 0;
10836
11314
  }
10837
11315
  .squisq-outline-row {
@@ -10853,6 +11331,46 @@
10853
11331
  .squisq-outline-row:hover {
10854
11332
  background: #f3f4f6;
10855
11333
  }
11334
+ .squisq-outline-row[draggable=true] {
11335
+ cursor: grab;
11336
+ }
11337
+ .squisq-outline-row[draggable=true]:active {
11338
+ cursor: grabbing;
11339
+ }
11340
+ .squisq-outline-drag-handle {
11341
+ display: inline-flex;
11342
+ align-items: center;
11343
+ justify-content: center;
11344
+ flex: 0 0 8px;
11345
+ color: currentColor;
11346
+ opacity: 0.35;
11347
+ transition: opacity 0.1s ease;
11348
+ }
11349
+ .squisq-outline-row:hover .squisq-outline-drag-handle,
11350
+ .squisq-outline-row:focus-visible .squisq-outline-drag-handle {
11351
+ opacity: 0.75;
11352
+ }
11353
+ .squisq-outline-item--dragging {
11354
+ opacity: 0.42;
11355
+ }
11356
+ .squisq-outline-item--drop-before > .squisq-outline-row-wrap::before,
11357
+ .squisq-outline-item--drop-after::after {
11358
+ content: "";
11359
+ position: absolute;
11360
+ z-index: 2;
11361
+ left: 4px;
11362
+ right: 4px;
11363
+ height: 2px;
11364
+ border-radius: 999px;
11365
+ background: var(--squisq-outline-accent, #4338ca);
11366
+ pointer-events: none;
11367
+ }
11368
+ .squisq-outline-item--drop-before > .squisq-outline-row-wrap::before {
11369
+ top: -1px;
11370
+ }
11371
+ .squisq-outline-item--drop-after::after {
11372
+ bottom: -1px;
11373
+ }
10856
11374
  .squisq-outline-row-text {
10857
11375
  overflow: hidden;
10858
11376
  text-overflow: ellipsis;
@@ -10993,9 +11511,6 @@
10993
11511
  --squisq-preview-empty-border: #374151;
10994
11512
  --squisq-preview-empty-text: #94a3b8;
10995
11513
  }
10996
- .squisq-editor-shell[data-theme=dark] .squisq-inline-preview-gutter {
10997
- background: var(--squisq-preview-gutter-bg);
10998
- }
10999
11514
  .squisq-editor-shell[data-theme=dark] .squisq-outline-empty {
11000
11515
  color: #94a3b8;
11001
11516
  }
@@ -11715,36 +12230,36 @@
11715
12230
  padding: 3px 8px;
11716
12231
  font-size: 12px;
11717
12232
  font-weight: 500;
11718
- color: #374151;
11719
- background: #fff;
11720
- border: 1px solid #d1d5db;
12233
+ color: var(--squisq-block-props-text);
12234
+ background: var(--squisq-block-props-surface);
12235
+ border: 1px solid var(--squisq-block-props-border);
11721
12236
  border-radius: 5px;
11722
12237
  cursor: pointer;
11723
12238
  white-space: nowrap;
11724
12239
  transition: background 0.1s, border-color 0.1s;
11725
12240
  }
11726
12241
  .squisq-transition-picker-trigger:hover {
11727
- background: #f3f4f6;
11728
- border-color: #9ca3af;
12242
+ background: var(--squisq-block-props-surface-hover);
12243
+ border-color: var(--squisq-block-props-quiet);
11729
12244
  }
11730
12245
  .squisq-transition-picker-trigger--open {
11731
- background: #f3f4f6;
11732
- border-color: #6366f1;
11733
- outline: 2px solid rgba(99, 102, 241, 0.25);
12246
+ background: var(--squisq-block-props-surface-hover);
12247
+ border-color: var(--squisq-block-props-accent, #6366f1);
12248
+ outline: 2px solid color-mix(in oklch, var(--squisq-block-props-accent, #6366f1) 25%, transparent);
11734
12249
  outline-offset: -1px;
11735
12250
  }
11736
12251
  .squisq-transition-picker-trigger-label {
11737
- color: #6b7280;
12252
+ color: var(--squisq-block-props-muted);
11738
12253
  }
11739
12254
  .squisq-transition-picker-trigger-value {
11740
- color: #111827;
12255
+ color: var(--squisq-block-props-text);
11741
12256
  font-weight: 400;
11742
12257
  max-width: 110px;
11743
12258
  overflow: hidden;
11744
12259
  text-overflow: ellipsis;
11745
12260
  }
11746
12261
  .squisq-transition-picker-trigger svg {
11747
- color: #9ca3af;
12262
+ color: var(--squisq-block-props-quiet);
11748
12263
  flex-shrink: 0;
11749
12264
  }
11750
12265
  @container squisq-toolbar (max-width: 900px) {
@@ -11757,27 +12272,29 @@
11757
12272
  max-width: calc(100vw - 24px);
11758
12273
  display: flex;
11759
12274
  flex-direction: column;
11760
- background: #fff;
11761
- border: 1px solid #e5e7eb;
12275
+ color: var(--squisq-block-props-text);
12276
+ background: var(--squisq-block-props-surface);
12277
+ border: 1px solid var(--squisq-block-props-divider);
11762
12278
  border-radius: 10px;
11763
12279
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12), 0 2px 6px rgba(0, 0, 0, 0.08);
11764
12280
  overflow: hidden;
11765
12281
  }
11766
12282
  .squisq-transition-flyout-search {
11767
12283
  padding: 8px;
11768
- border-bottom: 1px solid #f0f0f0;
12284
+ border-bottom: 1px solid var(--squisq-block-props-divider);
11769
12285
  }
11770
12286
  .squisq-transition-flyout-search-input {
11771
12287
  width: 100%;
11772
12288
  padding: 6px 8px;
11773
12289
  font-size: 13px;
11774
- color: #111827;
11775
- border: 1px solid #d1d5db;
12290
+ color: var(--squisq-block-props-text);
12291
+ background: var(--squisq-block-props-input);
12292
+ border: 1px solid var(--squisq-block-props-border);
11776
12293
  border-radius: 6px;
11777
12294
  outline: none;
11778
12295
  }
11779
12296
  .squisq-transition-flyout-search-input:focus {
11780
- border-color: #6366f1;
12297
+ border-color: var(--squisq-block-props-accent, #6366f1);
11781
12298
  }
11782
12299
  .squisq-transition-flyout-list {
11783
12300
  min-height: 0;
@@ -11793,7 +12310,7 @@
11793
12310
  font-weight: 600;
11794
12311
  letter-spacing: 0.04em;
11795
12312
  text-transform: uppercase;
11796
- color: #9ca3af;
12313
+ color: var(--squisq-block-props-quiet);
11797
12314
  }
11798
12315
  .squisq-transition-flyout-grid {
11799
12316
  display: grid;
@@ -11806,9 +12323,9 @@
11806
12323
  text-align: left;
11807
12324
  padding: 6px 8px;
11808
12325
  font-size: 12px;
11809
- color: #374151;
11810
- background: #fff;
11811
- border: 1px solid #e5e7eb;
12326
+ color: var(--squisq-block-props-text);
12327
+ background: var(--squisq-block-props-surface);
12328
+ border: 1px solid var(--squisq-block-props-divider);
11812
12329
  border-radius: 6px;
11813
12330
  cursor: pointer;
11814
12331
  white-space: nowrap;
@@ -11816,13 +12333,13 @@
11816
12333
  text-overflow: ellipsis;
11817
12334
  }
11818
12335
  .squisq-transition-option:hover {
11819
- background: #f3f4f6;
11820
- border-color: #d1d5db;
12336
+ background: var(--squisq-block-props-surface-hover);
12337
+ border-color: var(--squisq-block-props-border);
11821
12338
  }
11822
12339
  .squisq-transition-option--selected {
11823
- background: #eef2ff;
11824
- border-color: #6366f1;
11825
- color: #4338ca;
12340
+ color: var(--squisq-block-props-accent, #4338ca);
12341
+ background: color-mix(in oklch, var(--squisq-block-props-accent, #6366f1) 14%, transparent);
12342
+ border-color: var(--squisq-block-props-accent, #6366f1);
11826
12343
  font-weight: 600;
11827
12344
  }
11828
12345
  .squisq-transition-option {
@@ -11842,11 +12359,11 @@
11842
12359
  .squisq-transition-flyout-empty {
11843
12360
  padding: 12px 8px;
11844
12361
  font-size: 12px;
11845
- color: #9ca3af;
12362
+ color: var(--squisq-block-props-quiet);
11846
12363
  text-align: center;
11847
12364
  }
11848
12365
  .squisq-transition-flyout-controls {
11849
- border-top: 1px solid #f0f0f0;
12366
+ border-top: 1px solid var(--squisq-block-props-divider);
11850
12367
  padding: 10px 12px;
11851
12368
  display: flex;
11852
12369
  flex-direction: column;
@@ -11861,7 +12378,7 @@
11861
12378
  .squisq-transition-flyout-control-label {
11862
12379
  font-size: 11px;
11863
12380
  font-weight: 600;
11864
- color: #6b7280;
12381
+ color: var(--squisq-block-props-muted);
11865
12382
  }
11866
12383
  .squisq-transition-direction-row {
11867
12384
  display: inline-flex;
@@ -11870,19 +12387,19 @@
11870
12387
  .squisq-transition-direction-button {
11871
12388
  padding: 4px 8px;
11872
12389
  font-size: 11px;
11873
- color: #374151;
11874
- background: #fff;
11875
- border: 1px solid #d1d5db;
12390
+ color: var(--squisq-block-props-text);
12391
+ background: var(--squisq-block-props-surface);
12392
+ border: 1px solid var(--squisq-block-props-border);
11876
12393
  border-radius: 5px;
11877
12394
  cursor: pointer;
11878
12395
  }
11879
12396
  .squisq-transition-direction-button:hover {
11880
- background: #f3f4f6;
12397
+ background: var(--squisq-block-props-surface-hover);
11881
12398
  }
11882
12399
  .squisq-transition-direction-button--selected {
11883
- background: #eef2ff;
11884
- border-color: #6366f1;
11885
- color: #4338ca;
12400
+ color: var(--squisq-block-props-accent, #4338ca);
12401
+ background: color-mix(in oklch, var(--squisq-block-props-accent, #6366f1) 14%, transparent);
12402
+ border-color: var(--squisq-block-props-accent, #6366f1);
11886
12403
  font-weight: 600;
11887
12404
  }
11888
12405
  .squisq-transition-duration-row {
@@ -11894,17 +12411,18 @@
11894
12411
  width: 64px;
11895
12412
  padding: 4px 6px;
11896
12413
  font-size: 12px;
11897
- color: #111827;
11898
- border: 1px solid #d1d5db;
12414
+ color: var(--squisq-block-props-text);
12415
+ background: var(--squisq-block-props-input);
12416
+ border: 1px solid var(--squisq-block-props-border);
11899
12417
  border-radius: 5px;
11900
12418
  outline: none;
11901
12419
  }
11902
12420
  .squisq-transition-duration-input:focus {
11903
- border-color: #6366f1;
12421
+ border-color: var(--squisq-block-props-accent, #6366f1);
11904
12422
  }
11905
12423
  .squisq-transition-duration-unit {
11906
12424
  font-size: 11px;
11907
- color: #9ca3af;
12425
+ color: var(--squisq-block-props-quiet);
11908
12426
  }
11909
12427
  .squisq-editor-shell[data-theme=dark] .squisq-transition-picker-trigger {
11910
12428
  background: #1f2937;
@@ -11917,42 +12435,14 @@
11917
12435
  }
11918
12436
  .squisq-editor-shell[data-theme=dark] .squisq-transition-picker-trigger--open {
11919
12437
  background: #374151;
11920
- border-color: #818cf8;
12438
+ border-color: var(--squisq-block-props-accent, #818cf8);
11921
12439
  }
11922
12440
  .squisq-editor-shell[data-theme=dark] .squisq-transition-picker-trigger-value {
11923
12441
  color: #f9fafb;
11924
12442
  }
11925
- .squisq-editor-shell[data-theme=dark] .squisq-transition-flyout {
11926
- background: #1f2937;
11927
- border-color: #374151;
12443
+ .squisq-transition-flyout[data-theme=dark] {
11928
12444
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.4), 0 2px 6px rgba(0, 0, 0, 0.2);
11929
12445
  }
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
12446
 
11957
12447
  /* src/styles/code-context.css */
11958
12448
  .squisq-ccx-zone {
@@ -12800,6 +13290,73 @@
12800
13290
  .squisq-image-editor-layers {
12801
13291
  border-bottom: 1px solid var(--squisq-image-editor-panel-border);
12802
13292
  }
13293
+ .squisq-image-editor-layers-header {
13294
+ display: flex;
13295
+ align-items: center;
13296
+ justify-content: space-between;
13297
+ min-height: 32px;
13298
+ }
13299
+ .squisq-image-editor-layer-add {
13300
+ position: relative;
13301
+ display: inline-flex;
13302
+ }
13303
+ .squisq-image-editor-layer-add-button {
13304
+ display: inline-flex;
13305
+ align-items: center;
13306
+ justify-content: center;
13307
+ width: 22px;
13308
+ height: 22px;
13309
+ padding: 0;
13310
+ color: inherit;
13311
+ background: transparent;
13312
+ border: 1px solid transparent;
13313
+ border-radius: 3px;
13314
+ cursor: pointer;
13315
+ font: inherit;
13316
+ }
13317
+ .squisq-image-editor-layer-add-button:hover,
13318
+ .squisq-image-editor-layer-add-button[aria-expanded=true] {
13319
+ background: var(--squisq-image-editor-control-bg);
13320
+ border-color: var(--squisq-image-editor-control-border);
13321
+ }
13322
+ .squisq-image-editor-layer-add-menu {
13323
+ position: absolute;
13324
+ top: calc(100% + 4px);
13325
+ right: 0;
13326
+ z-index: 20;
13327
+ min-width: 150px;
13328
+ padding: 4px;
13329
+ background: var(--squisq-image-editor-panel-bg);
13330
+ border: 1px solid var(--squisq-image-editor-panel-border);
13331
+ border-radius: 5px;
13332
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.35);
13333
+ text-transform: none;
13334
+ letter-spacing: normal;
13335
+ }
13336
+ .squisq-image-editor-layer-add-menu-item {
13337
+ display: flex;
13338
+ align-items: center;
13339
+ gap: 8px;
13340
+ width: 100%;
13341
+ padding: 6px 8px;
13342
+ color: inherit;
13343
+ background: transparent;
13344
+ border: 0;
13345
+ border-radius: 3px;
13346
+ cursor: pointer;
13347
+ font: inherit;
13348
+ font-size: 12px;
13349
+ text-align: left;
13350
+ }
13351
+ .squisq-image-editor-layer-add-menu-item:hover,
13352
+ .squisq-image-editor-layer-add-menu-item:focus-visible {
13353
+ background: var(--squisq-image-editor-control-bg);
13354
+ outline: none;
13355
+ }
13356
+ .squisq-image-editor-layer-add-menu-item svg {
13357
+ flex: 0 0 auto;
13358
+ width: 14px;
13359
+ }
12803
13360
  .squisq-image-editor-layer-list {
12804
13361
  list-style: none;
12805
13362
  margin: 0;
@@ -12846,6 +13403,7 @@
12846
13403
  cursor: not-allowed;
12847
13404
  }
12848
13405
  .squisq-image-editor-layer-name {
13406
+ min-width: 0;
12849
13407
  flex: 1 1 auto;
12850
13408
  text-align: left;
12851
13409
  background: transparent;
@@ -12861,7 +13419,14 @@
12861
13419
  text-overflow: ellipsis;
12862
13420
  white-space: nowrap;
12863
13421
  }
13422
+ .squisq-image-editor-layer-name-text {
13423
+ min-width: 0;
13424
+ overflow: hidden;
13425
+ text-overflow: ellipsis;
13426
+ white-space: nowrap;
13427
+ }
12864
13428
  .squisq-image-editor-layer-kind {
13429
+ flex: 0 0 auto;
12865
13430
  margin-left: auto;
12866
13431
  font-size: 10px;
12867
13432
  color: var(--squisq-image-editor-text-muted);
@@ -13413,40 +13978,647 @@
13413
13978
  content: "Diagram open in full screen \2014 press Esc to return";
13414
13979
  }
13415
13980
 
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;
13981
+ /* src/styles/ascii-diagram.css */
13982
+ .squisq-wysiwyg-editor pre.squisq-ascii-fence-hidden {
13983
+ display: none;
13425
13984
  }
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;
13985
+ .squisq-wysiwyg-editor pre.squisq-ascii-fence-source {
13986
+ font-family:
13987
+ ui-monospace,
13988
+ SFMono-Regular,
13989
+ Menlo,
13990
+ Consolas,
13991
+ "Liberation Mono",
13992
+ monospace;
13993
+ white-space: pre;
13994
+ overflow-x: auto;
13995
+ line-height: 1.2;
13996
+ tab-size: 4;
13432
13997
  }
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;
13998
+ .squisq-ascii-diagram-widget-host {
13999
+ margin: 0.75rem 0 1.25rem;
13438
14000
  }
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);
14001
+ .squisq-ascii-diagram-warnings {
14002
+ margin-top: 4px;
14003
+ font-size: 12px;
14004
+ color: var(--squisq-theme-text-muted, #6b7280);
13444
14005
  }
13445
- .squisq-scene-viewport {
13446
- display: block;
13447
- width: 100%;
13448
- height: 100%;
13449
- touch-action: none;
14006
+ .squisq-ascii-diagram-warnings summary {
14007
+ cursor: pointer;
14008
+ user-select: none;
14009
+ }
14010
+ .squisq-ascii-diagram-warnings ul {
14011
+ margin: 4px 0 0;
14012
+ padding-left: 18px;
14013
+ }
14014
+ .squisq-repair-banner {
14015
+ display: flex;
14016
+ align-items: center;
14017
+ gap: 10px;
14018
+ flex-wrap: wrap;
14019
+ margin: 4px 0 1rem;
14020
+ padding: 8px 12px;
14021
+ border: 1px dashed var(--squisq-border, #d1d5db);
14022
+ border-radius: 8px;
14023
+ background: var(--squisq-input-bg, #f9fafb);
14024
+ font-size: 13px;
14025
+ }
14026
+ .squisq-repair-banner-text {
14027
+ color: var(--squisq-text-muted, #6b7280);
14028
+ }
14029
+ .squisq-repair-banner-btn {
14030
+ cursor: pointer;
14031
+ border: 1px solid var(--squisq-accent, #6366f1);
14032
+ border-radius: 6px;
14033
+ background: var(--squisq-accent, #6366f1);
14034
+ color: #fff;
14035
+ padding: 4px 12px;
14036
+ font-size: 13px;
14037
+ font-weight: 500;
14038
+ line-height: 1.4;
14039
+ white-space: nowrap;
14040
+ }
14041
+ .squisq-repair-banner-btn:hover {
14042
+ filter: brightness(1.05);
14043
+ }
14044
+ .squisq-repair-banner-btn:active {
14045
+ filter: brightness(0.95);
14046
+ }
14047
+
14048
+ /* src/styles/tree-view.css */
14049
+ .squisq-wysiwyg-editor pre.squisq-tree-fence-hidden {
14050
+ display: none;
14051
+ }
14052
+ .squisq-tree-widget-host {
14053
+ margin: 0.75rem 0 1.25rem;
14054
+ }
14055
+ .squisq-tree-outline {
14056
+ border: 1px solid var(--squisq-border, #e2e8f0);
14057
+ border-radius: 8px;
14058
+ padding: 8px 10px;
14059
+ background: var(--squisq-input-bg, #ffffff);
14060
+ color: var(--squisq-text, #1e293b);
14061
+ font-size: 14px;
14062
+ }
14063
+ .squisq-tree-toolbar {
14064
+ display: flex;
14065
+ gap: 6px;
14066
+ margin-bottom: 6px;
14067
+ }
14068
+ .squisq-tree-btn {
14069
+ display: inline-flex;
14070
+ align-items: center;
14071
+ gap: 5px;
14072
+ font-size: 12px;
14073
+ padding: 3px 8px;
14074
+ border: 1px solid var(--squisq-border, #e2e8f0);
14075
+ border-radius: 5px;
14076
+ background: var(--squisq-bg, #f8fafc);
14077
+ color: var(--squisq-text, #1e293b);
14078
+ cursor: pointer;
14079
+ }
14080
+ .squisq-tree-btn:hover {
14081
+ border-color: var(--squisq-text-muted, #94a3b8);
14082
+ }
14083
+ .squisq-tree-rows {
14084
+ list-style: none;
14085
+ margin: 0;
14086
+ padding: 0;
14087
+ }
14088
+ .squisq-tree-rows .squisq-tree-rows {
14089
+ border-left: 1px solid var(--squisq-border, #e2e8f0);
14090
+ margin-left: 8px;
14091
+ }
14092
+ .squisq-tree-row {
14093
+ display: flex;
14094
+ align-items: center;
14095
+ gap: 4px;
14096
+ padding: 1px 0;
14097
+ }
14098
+ .squisq-tree-row:hover .squisq-tree-controls {
14099
+ opacity: 1;
14100
+ }
14101
+ .squisq-tree-chevron {
14102
+ flex: 0 0 auto;
14103
+ width: 16px;
14104
+ border: none;
14105
+ background: transparent;
14106
+ cursor: pointer;
14107
+ color: var(--squisq-text-muted, #64748b);
14108
+ padding: 0;
14109
+ font-size: 11px;
14110
+ }
14111
+ .squisq-tree-chevron--empty {
14112
+ cursor: default;
14113
+ }
14114
+ .squisq-tree-icon {
14115
+ flex: 0 0 auto;
14116
+ width: 18px;
14117
+ border: none;
14118
+ background: transparent;
14119
+ cursor: pointer;
14120
+ color: #6366f1;
14121
+ padding: 0;
14122
+ }
14123
+ .squisq-tree-label {
14124
+ flex: 1 1 auto;
14125
+ min-width: 0;
14126
+ border: 1px solid transparent;
14127
+ border-radius: 4px;
14128
+ padding: 1px 4px;
14129
+ font: inherit;
14130
+ color: var(--squisq-text, #1e293b);
14131
+ background: transparent;
14132
+ }
14133
+ .squisq-tree-label:focus {
14134
+ outline: none;
14135
+ border-color: #6366f1;
14136
+ background: var(--squisq-bg, #f8fafc);
14137
+ }
14138
+ .squisq-tree-controls {
14139
+ flex: 0 0 auto;
14140
+ display: inline-flex;
14141
+ gap: 2px;
14142
+ opacity: 0;
14143
+ transition: opacity 0.12s;
14144
+ }
14145
+ .squisq-tree-controls button {
14146
+ border: none;
14147
+ background: transparent;
14148
+ cursor: pointer;
14149
+ color: var(--squisq-text-muted, #64748b);
14150
+ padding: 2px 4px;
14151
+ border-radius: 4px;
14152
+ font-size: 11px;
14153
+ }
14154
+ .squisq-tree-controls button:hover {
14155
+ background: var(--squisq-bg, #f1f5f9);
14156
+ color: var(--squisq-text, #1e293b);
14157
+ }
14158
+ .squisq-tree-controls .squisq-tree-delete:hover {
14159
+ color: #ef4444;
14160
+ }
14161
+ .squisq-tree-warnings {
14162
+ margin-top: 6px;
14163
+ font-size: 12px;
14164
+ color: var(--squisq-text-muted, #6b7280);
14165
+ }
14166
+
14167
+ /* src/styles/ascii-timeline.css */
14168
+ .squisq-wysiwyg-editor pre.squisq-ascii-timeline-fence-hidden {
14169
+ display: none;
14170
+ }
14171
+ .squisq-ascii-timeline-widget-host {
14172
+ margin: 0.75rem 0 1.25rem;
14173
+ }
14174
+ .squisq-ascii-timeline-editor {
14175
+ --squisq-ascii-timeline-accent: var(--squisq-theme-primary, #6366f1);
14176
+ --squisq-ascii-timeline-label-width: 120px;
14177
+ border: 1px solid var(--squisq-border, #e2e8f0);
14178
+ border-radius: 10px;
14179
+ background: var(--squisq-input-bg, #fff);
14180
+ color: var(--squisq-text, #1e293b);
14181
+ overflow: hidden;
14182
+ font-size: 14px;
14183
+ }
14184
+ .squisq-ascii-timeline-header {
14185
+ display: flex;
14186
+ align-items: center;
14187
+ justify-content: space-between;
14188
+ gap: 12px;
14189
+ min-height: 36px;
14190
+ padding: 6px 10px;
14191
+ border-bottom: 1px solid var(--squisq-border, #e2e8f0);
14192
+ background: var(--squisq-bg, #f8fafc);
14193
+ }
14194
+ .squisq-ascii-timeline-header > span {
14195
+ display: inline-flex;
14196
+ align-items: center;
14197
+ gap: 6px;
14198
+ font-weight: 650;
14199
+ }
14200
+ .squisq-ascii-timeline-header small {
14201
+ color: var(--squisq-text-muted, #64748b);
14202
+ }
14203
+ .squisq-ascii-timeline-canvas {
14204
+ position: relative;
14205
+ min-width: 600px;
14206
+ padding: 8px 18px 8px 10px;
14207
+ overflow-x: auto;
14208
+ }
14209
+ .squisq-ascii-timeline-track {
14210
+ display: grid;
14211
+ grid-template-columns: var(--squisq-ascii-timeline-label-width) minmax(420px, 1fr);
14212
+ gap: 12px;
14213
+ height: 96px;
14214
+ align-items: center;
14215
+ }
14216
+ .squisq-ascii-timeline-track-label {
14217
+ display: flex;
14218
+ min-width: 0;
14219
+ align-items: center;
14220
+ justify-content: flex-end;
14221
+ gap: 5px;
14222
+ color: var(--squisq-text-muted, #64748b);
14223
+ font-size: 12px;
14224
+ font-weight: 650;
14225
+ text-align: right;
14226
+ white-space: nowrap;
14227
+ }
14228
+ .squisq-ascii-timeline-track-label > span {
14229
+ overflow: hidden;
14230
+ text-overflow: ellipsis;
14231
+ }
14232
+ .squisq-ascii-timeline-track-add {
14233
+ display: grid;
14234
+ width: 22px;
14235
+ height: 22px;
14236
+ flex: 0 0 22px;
14237
+ place-items: center;
14238
+ padding: 0;
14239
+ border: 1px solid var(--squisq-border, #cbd5e1);
14240
+ border-radius: 50%;
14241
+ background: var(--squisq-input-bg, #fff);
14242
+ color: var(--squisq-ascii-timeline-accent);
14243
+ font: 700 15px/1 system-ui, sans-serif;
14244
+ cursor: pointer;
14245
+ }
14246
+ .squisq-ascii-timeline-track-add:hover,
14247
+ .squisq-ascii-timeline-track-add:focus-visible {
14248
+ border-color: var(--squisq-ascii-timeline-accent);
14249
+ outline: 2px solid color-mix(in srgb, var(--squisq-ascii-timeline-accent) 22%, transparent);
14250
+ }
14251
+ .squisq-ascii-timeline-rail {
14252
+ position: relative;
14253
+ height: 96px;
14254
+ min-width: 420px;
14255
+ outline: none;
14256
+ cursor: crosshair;
14257
+ }
14258
+ .squisq-ascii-timeline-rail--readonly {
14259
+ cursor: default;
14260
+ }
14261
+ .squisq-ascii-timeline-rail-line {
14262
+ position: absolute;
14263
+ z-index: 1;
14264
+ top: 50%;
14265
+ right: 0;
14266
+ left: 0;
14267
+ height: 2px;
14268
+ border-radius: 999px;
14269
+ background: var(--squisq-text-muted, #94a3b8);
14270
+ pointer-events: none;
14271
+ }
14272
+ .squisq-ascii-timeline-rail-line::after {
14273
+ position: absolute;
14274
+ top: 50%;
14275
+ right: -1px;
14276
+ width: 8px;
14277
+ height: 8px;
14278
+ border-top: 2px solid currentColor;
14279
+ border-right: 2px solid currentColor;
14280
+ color: var(--squisq-text-muted, #94a3b8);
14281
+ content: "";
14282
+ transform: translateY(-50%) rotate(45deg);
14283
+ }
14284
+ .squisq-ascii-timeline-add-ghost,
14285
+ .squisq-ascii-timeline-gap-add {
14286
+ position: absolute;
14287
+ z-index: 4;
14288
+ top: 50%;
14289
+ display: grid;
14290
+ width: 22px;
14291
+ height: 22px;
14292
+ place-items: center;
14293
+ border: 1px solid var(--squisq-ascii-timeline-accent);
14294
+ border-radius: 50%;
14295
+ background: var(--squisq-input-bg, #fff);
14296
+ color: var(--squisq-ascii-timeline-accent);
14297
+ font: 700 15px/1 system-ui, sans-serif;
14298
+ transform: translate(-50%, -50%);
14299
+ }
14300
+ .squisq-ascii-timeline-add-ghost {
14301
+ opacity: 0.72;
14302
+ pointer-events: none;
14303
+ }
14304
+ .squisq-ascii-timeline-gap-add {
14305
+ padding: 0;
14306
+ opacity: 0.12;
14307
+ cursor: pointer;
14308
+ transition: opacity 120ms ease, transform 120ms ease;
14309
+ }
14310
+ .squisq-ascii-timeline-rail:hover .squisq-ascii-timeline-gap-add,
14311
+ .squisq-ascii-timeline-gap-add:focus-visible {
14312
+ opacity: 0.9;
14313
+ }
14314
+ .squisq-ascii-timeline-gap-add:hover,
14315
+ .squisq-ascii-timeline-gap-add:focus-visible {
14316
+ outline: none;
14317
+ transform: translate(-50%, -50%) scale(1.12);
14318
+ }
14319
+ .squisq-ascii-timeline-point {
14320
+ position: absolute;
14321
+ z-index: 6;
14322
+ top: 50%;
14323
+ width: 0;
14324
+ height: 0;
14325
+ }
14326
+ .squisq-ascii-timeline-marker {
14327
+ position: absolute;
14328
+ top: 0;
14329
+ left: 0;
14330
+ z-index: 2;
14331
+ width: 36px;
14332
+ height: 36px;
14333
+ padding: 0;
14334
+ border: 0;
14335
+ border-radius: 50%;
14336
+ background: transparent;
14337
+ cursor: grab;
14338
+ touch-action: none;
14339
+ user-select: none;
14340
+ transform: translate(-50%, -50%);
14341
+ }
14342
+ .squisq-ascii-timeline-point--dragging {
14343
+ z-index: 8;
14344
+ }
14345
+ .squisq-ascii-timeline-point--dragging .squisq-ascii-timeline-marker {
14346
+ cursor: grabbing;
14347
+ }
14348
+ .squisq-ascii-timeline-point--dragging .squisq-ascii-timeline-marker::before {
14349
+ 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);
14350
+ }
14351
+ .squisq-ascii-timeline-rail--readonly .squisq-ascii-timeline-marker {
14352
+ cursor: pointer;
14353
+ }
14354
+ .squisq-ascii-timeline-marker::before {
14355
+ display: block;
14356
+ width: 12px;
14357
+ height: 12px;
14358
+ margin: 12px;
14359
+ border: 2px solid var(--squisq-ascii-timeline-accent);
14360
+ border-radius: 50%;
14361
+ background: var(--squisq-ascii-timeline-accent);
14362
+ box-sizing: border-box;
14363
+ content: "";
14364
+ }
14365
+ .squisq-ascii-timeline-marker--hollow::before {
14366
+ background: var(--squisq-input-bg, #fff);
14367
+ }
14368
+ .squisq-ascii-timeline-marker--diamond::before {
14369
+ border-radius: 2px;
14370
+ transform: rotate(45deg);
14371
+ }
14372
+ .squisq-ascii-timeline-marker:hover::before {
14373
+ box-shadow: 0 0 0 5px color-mix(in srgb, var(--squisq-ascii-timeline-accent) 18%, transparent);
14374
+ }
14375
+ .squisq-ascii-timeline-marker:focus-visible {
14376
+ outline: 2px solid var(--squisq-ascii-timeline-accent);
14377
+ outline-offset: 1px;
14378
+ }
14379
+ .squisq-ascii-timeline-marker--selected::before {
14380
+ box-shadow: 0 0 0 3px var(--squisq-input-bg, #fff), 0 0 0 6px var(--squisq-ascii-timeline-accent);
14381
+ }
14382
+ .squisq-ascii-timeline-callout,
14383
+ .squisq-ascii-timeline-description {
14384
+ position: absolute;
14385
+ left: 0;
14386
+ width: 128px;
14387
+ overflow: hidden;
14388
+ color: var(--squisq-text, #1e293b);
14389
+ line-height: 1.2;
14390
+ text-align: center;
14391
+ text-overflow: ellipsis;
14392
+ white-space: nowrap;
14393
+ pointer-events: none;
14394
+ transform: translateX(-50%);
14395
+ }
14396
+ .squisq-ascii-timeline-callout {
14397
+ font-size: 12px;
14398
+ font-weight: 650;
14399
+ }
14400
+ .squisq-ascii-timeline-description {
14401
+ color: var(--squisq-text-muted, #64748b);
14402
+ font-size: 10px;
14403
+ }
14404
+ .squisq-ascii-timeline-callout--above {
14405
+ bottom: 14px;
14406
+ }
14407
+ .squisq-ascii-timeline-callout--below {
14408
+ top: 14px;
14409
+ }
14410
+ .squisq-ascii-timeline-description--above {
14411
+ bottom: 30px;
14412
+ }
14413
+ .squisq-ascii-timeline-description--below {
14414
+ top: 30px;
14415
+ }
14416
+ .squisq-ascii-timeline-end-label {
14417
+ position: absolute;
14418
+ top: calc(50% + 8px);
14419
+ right: 0;
14420
+ max-width: 100px;
14421
+ overflow: hidden;
14422
+ color: var(--squisq-text-muted, #64748b);
14423
+ font-size: 10px;
14424
+ text-overflow: ellipsis;
14425
+ white-space: nowrap;
14426
+ pointer-events: none;
14427
+ }
14428
+ .squisq-ascii-timeline-branches {
14429
+ position: absolute;
14430
+ z-index: 2;
14431
+ top: 8px;
14432
+ right: 18px;
14433
+ bottom: 8px;
14434
+ left: calc(10px + var(--squisq-ascii-timeline-label-width) + 12px);
14435
+ width: calc(100% - var(--squisq-ascii-timeline-label-width) - 40px);
14436
+ height: calc(var(--squisq-ascii-timeline-track-count) * 96px);
14437
+ overflow: visible;
14438
+ pointer-events: none;
14439
+ }
14440
+ .squisq-ascii-timeline-branches path {
14441
+ fill: none;
14442
+ stroke: color-mix(in srgb, var(--squisq-ascii-timeline-accent) 72%, transparent);
14443
+ stroke-width: 2;
14444
+ stroke-dasharray: 4 3;
14445
+ }
14446
+ .squisq-ascii-timeline-link-list {
14447
+ display: flex;
14448
+ flex-wrap: wrap;
14449
+ gap: 4px;
14450
+ margin: 0;
14451
+ padding: 0 10px 8px;
14452
+ list-style: none;
14453
+ }
14454
+ .squisq-ascii-timeline-link-list li {
14455
+ padding: 2px 7px;
14456
+ border-radius: 999px;
14457
+ background: var(--squisq-bg, #f1f5f9);
14458
+ color: var(--squisq-text-muted, #64748b);
14459
+ font-size: 11px;
14460
+ list-style: none;
14461
+ }
14462
+ .squisq-ascii-timeline-inspector {
14463
+ display: grid;
14464
+ grid-template-columns: minmax(150px, 1fr) minmax(190px, 1.5fr) 120px 120px;
14465
+ gap: 8px;
14466
+ margin: 0;
14467
+ padding: 10px;
14468
+ border: 0;
14469
+ border-top: 1px solid var(--squisq-border, #e2e8f0);
14470
+ background: var(--squisq-bg, #f8fafc);
14471
+ }
14472
+ .squisq-ascii-timeline-inspector legend {
14473
+ grid-column: 1 / -1;
14474
+ padding: 0 4px;
14475
+ color: var(--squisq-text, #1e293b);
14476
+ font-size: 12px;
14477
+ font-weight: 700;
14478
+ }
14479
+ .squisq-ascii-timeline-inspector legend span {
14480
+ color: var(--squisq-text-muted, #64748b);
14481
+ font-weight: 500;
14482
+ }
14483
+ .squisq-ascii-timeline-inspector label {
14484
+ display: flex;
14485
+ min-width: 0;
14486
+ flex-direction: column;
14487
+ gap: 3px;
14488
+ color: var(--squisq-text-muted, #64748b);
14489
+ font-size: 11px;
14490
+ }
14491
+ .squisq-ascii-timeline-inspector input,
14492
+ .squisq-ascii-timeline-inspector textarea,
14493
+ .squisq-ascii-timeline-inspector select {
14494
+ min-width: 0;
14495
+ border: 1px solid var(--squisq-border, #cbd5e1);
14496
+ border-radius: 5px;
14497
+ background: var(--squisq-input-bg, #fff);
14498
+ color: var(--squisq-text, #1e293b);
14499
+ font: inherit;
14500
+ padding: 5px 7px;
14501
+ }
14502
+ .squisq-ascii-timeline-inspector input:focus,
14503
+ .squisq-ascii-timeline-inspector textarea:focus,
14504
+ .squisq-ascii-timeline-inspector select:focus {
14505
+ border-color: var(--squisq-ascii-timeline-accent);
14506
+ outline: 2px solid color-mix(in srgb, var(--squisq-ascii-timeline-accent) 22%, transparent);
14507
+ }
14508
+ .squisq-ascii-timeline-inspector-description textarea {
14509
+ resize: vertical;
14510
+ }
14511
+ .squisq-ascii-timeline-inspector .squisq-ascii-timeline-checkbox {
14512
+ grid-column: 1 / 2;
14513
+ flex-direction: row;
14514
+ align-items: center;
14515
+ align-self: center;
14516
+ color: var(--squisq-text, #1e293b);
14517
+ }
14518
+ .squisq-ascii-timeline-checkbox input {
14519
+ width: auto;
14520
+ }
14521
+ .squisq-ascii-timeline-delete {
14522
+ grid-column: 4 / 5;
14523
+ display: inline-flex;
14524
+ align-items: center;
14525
+ justify-content: center;
14526
+ gap: 5px;
14527
+ align-self: end;
14528
+ padding: 5px 8px;
14529
+ border: 1px solid color-mix(in srgb, #ef4444 45%, var(--squisq-border, #e2e8f0));
14530
+ border-radius: 5px;
14531
+ background: transparent;
14532
+ color: #dc2626;
14533
+ cursor: pointer;
14534
+ }
14535
+ .squisq-ascii-timeline-delete:disabled {
14536
+ opacity: 0.45;
14537
+ cursor: not-allowed;
14538
+ }
14539
+ .squisq-ascii-timeline-warnings {
14540
+ padding: 0 10px 8px;
14541
+ color: var(--squisq-text-muted, #64748b);
14542
+ font-size: 11px;
14543
+ }
14544
+ .squisq-sr-only {
14545
+ position: absolute;
14546
+ width: 1px;
14547
+ height: 1px;
14548
+ padding: 0;
14549
+ margin: -1px;
14550
+ overflow: hidden;
14551
+ clip: rect(0, 0, 0, 0);
14552
+ white-space: nowrap;
14553
+ border: 0;
14554
+ }
14555
+ @media (max-width: 760px) {
14556
+ .squisq-ascii-timeline-editor {
14557
+ --squisq-ascii-timeline-label-width: 88px;
14558
+ }
14559
+ .squisq-ascii-timeline-inspector {
14560
+ grid-template-columns: 1fr 1fr;
14561
+ }
14562
+ .squisq-ascii-timeline-inspector-description,
14563
+ .squisq-ascii-timeline-inspector legend {
14564
+ grid-column: 1 / -1;
14565
+ }
14566
+ .squisq-ascii-timeline-delete {
14567
+ grid-column: 2 / 3;
14568
+ }
14569
+ }
14570
+ @media (prefers-reduced-motion: reduce) {
14571
+ .squisq-ascii-timeline-gap-add {
14572
+ transition: none;
14573
+ }
14574
+ }
14575
+ @media (forced-colors: active) {
14576
+ .squisq-ascii-timeline-marker::before,
14577
+ .squisq-ascii-timeline-gap-add,
14578
+ .squisq-ascii-timeline-add-ghost {
14579
+ border-color: ButtonText;
14580
+ forced-color-adjust: none;
14581
+ }
14582
+ .squisq-ascii-timeline-rail-line,
14583
+ .squisq-ascii-timeline-branches path {
14584
+ background: CanvasText;
14585
+ stroke: CanvasText;
14586
+ }
14587
+ }
14588
+
14589
+ /* src/scene/scene.css */
14590
+ .squisq-scene-root {
14591
+ position: relative;
14592
+ width: 100%;
14593
+ height: 100%;
14594
+ background: var(--squisq-surface, #ffffff);
14595
+ border: 1px solid var(--squisq-border, #e2e8f0);
14596
+ border-radius: 8px;
14597
+ overflow: hidden;
14598
+ }
14599
+ .squisq-editor-shell[data-theme=dark] .squisq-scene-shell {
14600
+ --squisq-surface: #0f172a;
14601
+ --squisq-surface-hover: #1e293b;
14602
+ --squisq-border: #475569;
14603
+ --squisq-text: #f8fafc;
14604
+ --squisq-text-muted: #94a3b8;
14605
+ }
14606
+ .squisq-editor-shell[data-theme=dark] .squisq-scene-root,
14607
+ .squisq-editor-shell[data-theme=dark] .squisq-scene-inline,
14608
+ .squisq-editor-shell[data-theme=dark] .squisq-diagram-inline {
14609
+ background: #0f172a;
14610
+ border-color: #475569;
14611
+ }
14612
+ .squisq-editor-shell[data-theme=dark] .squisq-scene-layer--shape,
14613
+ .squisq-editor-shell[data-theme=dark] .squisq-scene-layer--path,
14614
+ .squisq-editor-shell[data-theme=dark] .squisq-scene-layer--text {
14615
+ filter: invert(1) hue-rotate(180deg) saturate(0.9);
14616
+ }
14617
+ .squisq-scene-viewport {
14618
+ display: block;
14619
+ width: 100%;
14620
+ height: 100%;
14621
+ touch-action: none;
13450
14622
  background: transparent;
13451
14623
  user-select: none;
13452
14624
  outline: none;
@@ -14045,6 +15217,56 @@
14045
15217
  }
14046
15218
 
14047
15219
  /* src/customTemplates/designer.css */
15220
+ .squisq-template-designer-overlay,
15221
+ .squisq-layout-manager-overlay {
15222
+ color-scheme: light;
15223
+ --squisq-layout-panel: #ffffff;
15224
+ --squisq-layout-chrome: #f9fafb;
15225
+ --squisq-layout-subtle: #fafafa;
15226
+ --squisq-layout-workspace: #f3f4f6;
15227
+ --squisq-layout-input: #ffffff;
15228
+ --squisq-layout-border: #e5e7eb;
15229
+ --squisq-layout-border-strong: #d1d5db;
15230
+ --squisq-layout-text: #111827;
15231
+ --squisq-layout-text-soft: #1f2937;
15232
+ --squisq-layout-muted: #6b7280;
15233
+ --squisq-layout-faint: #9ca3af;
15234
+ --squisq-layout-hover: #f1f5f9;
15235
+ --squisq-layout-accent-text: #4338ca;
15236
+ --squisq-layout-accent-bg: #4f46e5;
15237
+ --squisq-layout-accent-bg-hover: #4338ca;
15238
+ --squisq-layout-accent-border: #6366f1;
15239
+ --squisq-layout-accent-soft: #eef2ff;
15240
+ --squisq-layout-accent-soft-hover: #e0e7ff;
15241
+ --squisq-layout-accent-soft-border: #c7d2fe;
15242
+ --squisq-layout-accent-hover-border: #a5b4fc;
15243
+ --squisq-layout-thumb: #f8fafc;
15244
+ }
15245
+ .squisq-template-designer-overlay[data-theme=dark],
15246
+ .squisq-layout-manager-overlay[data-theme=dark] {
15247
+ color-scheme: dark;
15248
+ --squisq-layout-panel: #111827;
15249
+ --squisq-layout-chrome: #1f2937;
15250
+ --squisq-layout-subtle: #18212f;
15251
+ --squisq-layout-workspace: #0f172a;
15252
+ --squisq-layout-input: #111827;
15253
+ --squisq-layout-border: #374151;
15254
+ --squisq-layout-border-strong: #4b5563;
15255
+ --squisq-layout-text: #f3f4f6;
15256
+ --squisq-layout-text-soft: #e5e7eb;
15257
+ --squisq-layout-muted: #9ca3af;
15258
+ --squisq-layout-faint: #6b7280;
15259
+ --squisq-layout-hover: #334155;
15260
+ --squisq-layout-accent-text: #c7d2fe;
15261
+ --squisq-layout-accent-bg: #4f46e5;
15262
+ --squisq-layout-accent-bg-hover: #6366f1;
15263
+ --squisq-layout-accent-border: #818cf8;
15264
+ --squisq-layout-accent-soft: #312e81;
15265
+ --squisq-layout-accent-soft-hover: #3730a3;
15266
+ --squisq-layout-accent-soft-border: #4f46e5;
15267
+ --squisq-layout-accent-hover-border: #6366f1;
15268
+ --squisq-layout-thumb: #0f172a;
15269
+ }
14048
15270
  .squisq-template-designer-overlay {
14049
15271
  position: fixed;
14050
15272
  inset: 0;
@@ -14060,7 +15282,8 @@
14060
15282
  flex-direction: column;
14061
15283
  width: min(1200px, 100%);
14062
15284
  height: min(800px, 100%);
14063
- background: #ffffff;
15285
+ color: var(--squisq-layout-text-soft);
15286
+ background: var(--squisq-layout-panel);
14064
15287
  border-radius: 12px;
14065
15288
  box-shadow: 0 24px 60px rgba(0, 0, 0, 0.3);
14066
15289
  overflow: hidden;
@@ -14083,14 +15306,14 @@
14083
15306
  align-items: center;
14084
15307
  justify-content: space-between;
14085
15308
  padding: 14px 20px;
14086
- border-bottom: 1px solid #e5e7eb;
14087
- background: #f9fafb;
15309
+ border-bottom: 1px solid var(--squisq-layout-border);
15310
+ background: var(--squisq-layout-chrome);
14088
15311
  }
14089
15312
  .squisq-template-designer-title {
14090
15313
  margin: 0;
14091
15314
  font-size: 16px;
14092
15315
  font-weight: 600;
14093
- color: #111827;
15316
+ color: var(--squisq-layout-text);
14094
15317
  }
14095
15318
  .squisq-template-designer-close {
14096
15319
  width: 32px;
@@ -14100,24 +15323,24 @@
14100
15323
  justify-content: center;
14101
15324
  font-size: 24px;
14102
15325
  line-height: 1;
14103
- color: #6b7280;
15326
+ color: var(--squisq-layout-muted);
14104
15327
  background: transparent;
14105
15328
  border: 1px solid transparent;
14106
15329
  border-radius: 6px;
14107
15330
  cursor: pointer;
14108
15331
  }
14109
15332
  .squisq-template-designer-close:hover {
14110
- color: #111827;
14111
- background: #f1f5f9;
14112
- border-color: #cbd5e1;
15333
+ color: var(--squisq-layout-text);
15334
+ background: var(--squisq-layout-hover);
15335
+ border-color: var(--squisq-layout-border-strong);
14113
15336
  }
14114
15337
  .squisq-template-designer-meta {
14115
15338
  display: grid;
14116
15339
  grid-template-columns: minmax(160px, 1fr) minmax(160px, 1fr) minmax(240px, 2fr);
14117
15340
  gap: 12px;
14118
15341
  padding: 12px 20px;
14119
- border-bottom: 1px solid #e5e7eb;
14120
- background: #fdfdfd;
15342
+ border-bottom: 1px solid var(--squisq-layout-border);
15343
+ background: var(--squisq-layout-panel);
14121
15344
  }
14122
15345
  .squisq-template-designer-field {
14123
15346
  display: flex;
@@ -14129,19 +15352,19 @@
14129
15352
  font-weight: 600;
14130
15353
  text-transform: uppercase;
14131
15354
  letter-spacing: 0.04em;
14132
- color: #6b7280;
15355
+ color: var(--squisq-layout-muted);
14133
15356
  }
14134
15357
  .squisq-template-designer-field input {
14135
15358
  padding: 6px 10px;
14136
15359
  font-size: 13px;
14137
- color: #111827;
14138
- background: #ffffff;
14139
- border: 1px solid #d1d5db;
15360
+ color: var(--squisq-layout-text);
15361
+ background: var(--squisq-layout-input);
15362
+ border: 1px solid var(--squisq-layout-border-strong);
14140
15363
  border-radius: 6px;
14141
15364
  outline: none;
14142
15365
  }
14143
15366
  .squisq-template-designer-field input:focus {
14144
- border-color: #6366f1;
15367
+ border-color: var(--squisq-layout-accent-border);
14145
15368
  box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.15);
14146
15369
  }
14147
15370
  .squisq-template-designer-field span.squisq-template-designer-field-hint {
@@ -14149,7 +15372,7 @@
14149
15372
  font-weight: 400;
14150
15373
  text-transform: none;
14151
15374
  letter-spacing: normal;
14152
- color: #9ca3af;
15375
+ color: var(--squisq-layout-faint);
14153
15376
  }
14154
15377
  .squisq-template-designer-body {
14155
15378
  flex: 1;
@@ -14160,8 +15383,8 @@
14160
15383
  width: 220px;
14161
15384
  flex-shrink: 0;
14162
15385
  padding: 16px;
14163
- border-right: 1px solid #e5e7eb;
14164
- background: #fafafa;
15386
+ border-right: 1px solid var(--squisq-layout-border);
15387
+ background: var(--squisq-layout-subtle);
14165
15388
  overflow-y: auto;
14166
15389
  }
14167
15390
  .squisq-template-designer-palette-title {
@@ -14170,12 +15393,12 @@
14170
15393
  font-weight: 700;
14171
15394
  text-transform: uppercase;
14172
15395
  letter-spacing: 0.06em;
14173
- color: #4338ca;
15396
+ color: var(--squisq-layout-accent-text);
14174
15397
  }
14175
15398
  .squisq-template-designer-palette-hint {
14176
15399
  margin: 0 0 12px;
14177
15400
  font-size: 11px;
14178
- color: #6b7280;
15401
+ color: var(--squisq-layout-muted);
14179
15402
  line-height: 1.4;
14180
15403
  }
14181
15404
  .squisq-template-designer-palette-list {
@@ -14195,7 +15418,7 @@
14195
15418
  font-weight: 700;
14196
15419
  text-transform: uppercase;
14197
15420
  letter-spacing: 0.06em;
14198
- color: #6b7280;
15421
+ color: var(--squisq-layout-muted);
14199
15422
  }
14200
15423
  .squisq-template-designer-palette-shapes {
14201
15424
  display: grid;
@@ -14208,23 +15431,23 @@
14208
15431
  justify-content: center;
14209
15432
  aspect-ratio: 1 / 1;
14210
15433
  padding: 4px;
14211
- background: #ffffff;
14212
- border: 1px solid #e5e7eb;
15434
+ background: var(--squisq-layout-input);
15435
+ border: 1px solid var(--squisq-layout-border);
14213
15436
  border-radius: 6px;
14214
15437
  cursor: grab;
14215
- color: #475569;
15438
+ color: var(--squisq-layout-muted);
14216
15439
  transition: background 0.1s, border-color 0.1s;
14217
15440
  }
14218
15441
  .squisq-template-designer-shape-item:active {
14219
15442
  cursor: grabbing;
14220
15443
  }
14221
15444
  .squisq-template-designer-shape-item:hover {
14222
- background: #eef2ff;
14223
- border-color: #c7d2fe;
15445
+ background: var(--squisq-layout-accent-soft);
15446
+ border-color: var(--squisq-layout-accent-soft-border);
14224
15447
  }
14225
15448
  .squisq-template-designer-shape-item--active {
14226
- background: #eef2ff;
14227
- border-color: #6366f1;
15449
+ background: var(--squisq-layout-accent-soft);
15450
+ border-color: var(--squisq-layout-accent-border);
14228
15451
  }
14229
15452
  .squisq-template-designer-palette-media-add {
14230
15453
  width: 100%;
@@ -14232,20 +15455,20 @@
14232
15455
  padding: 8px 10px;
14233
15456
  font-size: 12px;
14234
15457
  font-weight: 600;
14235
- color: #4338ca;
14236
- background: #eef2ff;
14237
- border: 1px dashed #c7d2fe;
15458
+ color: var(--squisq-layout-accent-text);
15459
+ background: var(--squisq-layout-accent-soft);
15460
+ border: 1px dashed var(--squisq-layout-accent-soft-border);
14238
15461
  border-radius: 6px;
14239
15462
  cursor: pointer;
14240
15463
  }
14241
15464
  .squisq-template-designer-palette-media-add:hover:not(:disabled) {
14242
- background: #e0e7ff;
14243
- border-color: #a5b4fc;
15465
+ background: var(--squisq-layout-accent-soft-hover);
15466
+ border-color: var(--squisq-layout-accent-hover-border);
14244
15467
  }
14245
15468
  .squisq-template-designer-palette-media-add:disabled {
14246
- color: #9ca3af;
14247
- background: #f3f4f6;
14248
- border-color: #e5e7eb;
15469
+ color: var(--squisq-layout-faint);
15470
+ background: var(--squisq-layout-workspace);
15471
+ border-color: var(--squisq-layout-border);
14249
15472
  cursor: not-allowed;
14250
15473
  }
14251
15474
  .squisq-template-designer-palette-item {
@@ -14254,8 +15477,9 @@
14254
15477
  align-items: flex-start;
14255
15478
  gap: 2px;
14256
15479
  padding: 8px 10px;
14257
- background: #ffffff;
14258
- border: 1px solid #e5e7eb;
15480
+ color: var(--squisq-layout-text-soft);
15481
+ background: var(--squisq-layout-input);
15482
+ border: 1px solid var(--squisq-layout-border);
14259
15483
  border-radius: 6px;
14260
15484
  cursor: grab;
14261
15485
  text-align: left;
@@ -14265,12 +15489,12 @@
14265
15489
  cursor: grabbing;
14266
15490
  }
14267
15491
  .squisq-template-designer-palette-item:hover {
14268
- background: #eef2ff;
14269
- border-color: #c7d2fe;
15492
+ background: var(--squisq-layout-accent-soft);
15493
+ border-color: var(--squisq-layout-accent-soft-border);
14270
15494
  }
14271
15495
  .squisq-template-designer-palette-item--active {
14272
- background: #eef2ff;
14273
- border-color: #6366f1;
15496
+ background: var(--squisq-layout-accent-soft);
15497
+ border-color: var(--squisq-layout-accent-border);
14274
15498
  }
14275
15499
  .squisq-template-designer-palette-item-preview {
14276
15500
  font-family:
@@ -14279,11 +15503,11 @@
14279
15503
  "Menlo",
14280
15504
  monospace;
14281
15505
  font-size: 12px;
14282
- color: #4338ca;
15506
+ color: var(--squisq-layout-accent-text);
14283
15507
  }
14284
15508
  .squisq-template-designer-palette-item-label {
14285
15509
  font-size: 11px;
14286
- color: #6b7280;
15510
+ color: var(--squisq-layout-muted);
14287
15511
  }
14288
15512
  .squisq-template-designer-stage {
14289
15513
  flex: 1;
@@ -14292,7 +15516,7 @@
14292
15516
  min-width: 0;
14293
15517
  padding: 12px;
14294
15518
  gap: 8px;
14295
- background: #f3f4f6;
15519
+ background: var(--squisq-layout-workspace);
14296
15520
  }
14297
15521
  .squisq-template-designer-stage-bar {
14298
15522
  display: flex;
@@ -14300,8 +15524,8 @@
14300
15524
  align-items: center;
14301
15525
  gap: 5px;
14302
15526
  padding: 6px 8px;
14303
- background: #ffffff;
14304
- border: 1px solid #e5e7eb;
15527
+ background: var(--squisq-layout-panel);
15528
+ border: 1px solid var(--squisq-layout-border);
14305
15529
  border-radius: 6px;
14306
15530
  align-self: stretch;
14307
15531
  overflow-x: auto;
@@ -14312,7 +15536,7 @@
14312
15536
  font-weight: 600;
14313
15537
  text-transform: uppercase;
14314
15538
  letter-spacing: 0.04em;
14315
- color: #6b7280;
15539
+ color: var(--squisq-layout-muted);
14316
15540
  }
14317
15541
  .squisq-layer-toolbar {
14318
15542
  display: flex;
@@ -14338,27 +15562,27 @@
14338
15562
  width: 28px;
14339
15563
  height: 28px;
14340
15564
  font-size: 13px;
14341
- color: #374151;
15565
+ color: var(--squisq-layout-text-soft);
14342
15566
  background: transparent;
14343
15567
  border: 1px solid transparent;
14344
15568
  border-radius: 4px;
14345
15569
  cursor: pointer;
14346
15570
  }
14347
15571
  .squisq-layer-toolbar-btn:hover {
14348
- background: #f1f5f9;
15572
+ background: var(--squisq-layout-hover);
14349
15573
  }
14350
15574
  .squisq-layer-toolbar-btn--active {
14351
- background: #eef2ff;
14352
- border-color: #6366f1;
14353
- color: #4338ca;
15575
+ background: var(--squisq-layout-accent-soft);
15576
+ border-color: var(--squisq-layout-accent-border);
15577
+ color: var(--squisq-layout-accent-text);
14354
15578
  }
14355
15579
  .squisq-layer-toolbar-select {
14356
15580
  height: 28px;
14357
15581
  padding: 0 6px;
14358
15582
  font-size: 12px;
14359
- color: #1f2937;
14360
- background: #ffffff;
14361
- border: 1px solid #d1d5db;
15583
+ color: var(--squisq-layout-text-soft);
15584
+ background: var(--squisq-layout-input);
15585
+ border: 1px solid var(--squisq-layout-border-strong);
14362
15586
  border-radius: 4px;
14363
15587
  cursor: pointer;
14364
15588
  }
@@ -14367,9 +15591,9 @@
14367
15591
  height: 28px;
14368
15592
  padding: 0 4px 0 6px;
14369
15593
  font-size: 12px;
14370
- color: #1f2937;
14371
- background: #ffffff;
14372
- border: 1px solid #d1d5db;
15594
+ color: var(--squisq-layout-text-soft);
15595
+ background: var(--squisq-layout-input);
15596
+ border: 1px solid var(--squisq-layout-border-strong);
14373
15597
  border-radius: 4px;
14374
15598
  }
14375
15599
  .squisq-layer-toolbar-opacity {
@@ -14383,7 +15607,7 @@
14383
15607
  .squisq-layer-toolbar-label {
14384
15608
  display: inline-flex;
14385
15609
  align-items: center;
14386
- color: #6b7280;
15610
+ color: var(--squisq-layout-muted);
14387
15611
  font-size: 13px;
14388
15612
  }
14389
15613
  .squisq-layer-toolbar-color {
@@ -14395,22 +15619,22 @@
14395
15619
  width: 28px;
14396
15620
  height: 28px;
14397
15621
  padding: 0;
14398
- border: 1px solid #d1d5db;
15622
+ border: 1px solid var(--squisq-layout-border-strong);
14399
15623
  border-radius: 4px;
14400
- background: #ffffff;
15624
+ background: var(--squisq-layout-input);
14401
15625
  cursor: pointer;
14402
15626
  }
14403
15627
  .squisq-layer-toolbar-sep {
14404
15628
  width: 1px;
14405
15629
  align-self: stretch;
14406
15630
  margin: 2px 2px;
14407
- background: #e5e7eb;
15631
+ background: var(--squisq-layout-border);
14408
15632
  }
14409
15633
  .squisq-template-designer-scene {
14410
15634
  flex: 1;
14411
15635
  min-height: 0;
14412
- background: #ffffff;
14413
- border: 1px solid #e5e7eb;
15636
+ background: var(--squisq-layout-panel);
15637
+ border: 1px solid var(--squisq-layout-border);
14414
15638
  border-radius: 8px;
14415
15639
  overflow: hidden;
14416
15640
  }
@@ -14419,13 +15643,13 @@
14419
15643
  align-items: center;
14420
15644
  justify-content: space-between;
14421
15645
  padding: 12px 20px;
14422
- border-top: 1px solid #e5e7eb;
14423
- background: #f9fafb;
15646
+ border-top: 1px solid var(--squisq-layout-border);
15647
+ background: var(--squisq-layout-chrome);
14424
15648
  gap: 12px;
14425
15649
  }
14426
15650
  .squisq-template-designer-footer-hint {
14427
15651
  font-size: 11px;
14428
- color: #6b7280;
15652
+ color: var(--squisq-layout-muted);
14429
15653
  flex: 1;
14430
15654
  min-width: 0;
14431
15655
  }
@@ -14437,23 +15661,23 @@
14437
15661
  padding: 6px 14px;
14438
15662
  font-size: 13px;
14439
15663
  font-weight: 500;
14440
- color: #1f2937;
14441
- background: #ffffff;
14442
- border: 1px solid #d1d5db;
15664
+ color: var(--squisq-layout-text-soft);
15665
+ background: var(--squisq-layout-input);
15666
+ border: 1px solid var(--squisq-layout-border-strong);
14443
15667
  border-radius: 6px;
14444
15668
  cursor: pointer;
14445
15669
  transition: background 0.1s;
14446
15670
  }
14447
15671
  .squisq-template-designer-btn:hover {
14448
- background: #f1f5f9;
15672
+ background: var(--squisq-layout-hover);
14449
15673
  }
14450
15674
  .squisq-template-designer-btn--primary {
14451
15675
  color: #ffffff;
14452
- background: #4f46e5;
14453
- border-color: #4338ca;
15676
+ background: var(--squisq-layout-accent-bg);
15677
+ border-color: var(--squisq-layout-accent-bg-hover);
14454
15678
  }
14455
15679
  .squisq-template-designer-btn--primary:hover {
14456
- background: #4338ca;
15680
+ background: var(--squisq-layout-accent-bg-hover);
14457
15681
  }
14458
15682
  .squisq-layout-manager-overlay {
14459
15683
  position: fixed;
@@ -14470,7 +15694,8 @@
14470
15694
  flex-direction: column;
14471
15695
  width: min(1600px, 96vw);
14472
15696
  height: 92vh;
14473
- background: #ffffff;
15697
+ color: var(--squisq-layout-text-soft);
15698
+ background: var(--squisq-layout-panel);
14474
15699
  border-radius: 12px;
14475
15700
  box-shadow: 0 24px 60px rgba(0, 0, 0, 0.3);
14476
15701
  overflow: hidden;
@@ -14480,14 +15705,14 @@
14480
15705
  align-items: center;
14481
15706
  justify-content: space-between;
14482
15707
  padding: 14px 20px;
14483
- border-bottom: 1px solid #e5e7eb;
14484
- background: #f9fafb;
15708
+ border-bottom: 1px solid var(--squisq-layout-border);
15709
+ background: var(--squisq-layout-chrome);
14485
15710
  }
14486
15711
  .squisq-layout-manager-title {
14487
15712
  margin: 0;
14488
15713
  font-size: 16px;
14489
15714
  font-weight: 600;
14490
- color: #111827;
15715
+ color: var(--squisq-layout-text);
14491
15716
  }
14492
15717
  .squisq-layout-manager-body {
14493
15718
  flex: 1;
@@ -14501,28 +15726,28 @@
14501
15726
  flex-direction: column;
14502
15727
  gap: 8px;
14503
15728
  padding: 16px;
14504
- border-right: 1px solid #e5e7eb;
14505
- background: #fafafa;
15729
+ border-right: 1px solid var(--squisq-layout-border);
15730
+ background: var(--squisq-layout-subtle);
14506
15731
  overflow-y: auto;
14507
15732
  }
14508
15733
  .squisq-layout-manager-new {
14509
15734
  padding: 10px 12px;
14510
15735
  font-size: 13px;
14511
15736
  font-weight: 600;
14512
- color: #4338ca;
14513
- background: #eef2ff;
14514
- border: 1px dashed #c7d2fe;
15737
+ color: var(--squisq-layout-accent-text);
15738
+ background: var(--squisq-layout-accent-soft);
15739
+ border: 1px dashed var(--squisq-layout-accent-soft-border);
14515
15740
  border-radius: 8px;
14516
15741
  cursor: pointer;
14517
15742
  text-align: center;
14518
15743
  }
14519
15744
  .squisq-layout-manager-new:hover {
14520
- background: #e0e7ff;
14521
- border-color: #a5b4fc;
15745
+ background: var(--squisq-layout-accent-soft-hover);
15746
+ border-color: var(--squisq-layout-accent-hover-border);
14522
15747
  }
14523
15748
  .squisq-layout-manager-new--active {
14524
15749
  border-style: solid;
14525
- border-color: #6366f1;
15750
+ border-color: var(--squisq-layout-accent-border);
14526
15751
  }
14527
15752
  .squisq-layout-manager-section-title {
14528
15753
  margin-top: 6px;
@@ -14530,7 +15755,7 @@
14530
15755
  font-weight: 700;
14531
15756
  text-transform: uppercase;
14532
15757
  letter-spacing: 0.06em;
14533
- color: #6b7280;
15758
+ color: var(--squisq-layout-muted);
14534
15759
  }
14535
15760
  .squisq-layout-manager-list {
14536
15761
  display: flex;
@@ -14542,30 +15767,31 @@
14542
15767
  align-items: center;
14543
15768
  gap: 10px;
14544
15769
  padding: 8px;
14545
- background: #ffffff;
14546
- border: 1px solid #e5e7eb;
15770
+ color: var(--squisq-layout-text-soft);
15771
+ background: var(--squisq-layout-input);
15772
+ border: 1px solid var(--squisq-layout-border);
14547
15773
  border-radius: 8px;
14548
15774
  cursor: pointer;
14549
15775
  text-align: left;
14550
15776
  transition: background 0.1s, border-color 0.1s;
14551
15777
  }
14552
15778
  .squisq-layout-manager-item:hover {
14553
- background: #eef2ff;
14554
- border-color: #c7d2fe;
15779
+ background: var(--squisq-layout-accent-soft);
15780
+ border-color: var(--squisq-layout-accent-soft-border);
14555
15781
  }
14556
15782
  .squisq-layout-manager-item--active {
14557
- background: #eef2ff;
14558
- border-color: #6366f1;
15783
+ background: var(--squisq-layout-accent-soft);
15784
+ border-color: var(--squisq-layout-accent-border);
14559
15785
  }
14560
15786
  .squisq-layout-manager-item-thumb {
14561
15787
  flex-shrink: 0;
14562
15788
  display: inline-flex;
14563
15789
  width: 56px;
14564
15790
  height: 40px;
14565
- border: 1px solid #e5e7eb;
15791
+ border: 1px solid var(--squisq-layout-border);
14566
15792
  border-radius: 4px;
14567
15793
  overflow: hidden;
14568
- background: #f8fafc;
15794
+ background: var(--squisq-layout-thumb);
14569
15795
  }
14570
15796
  .squisq-layout-manager-item-text {
14571
15797
  display: flex;
@@ -14576,7 +15802,7 @@
14576
15802
  .squisq-layout-manager-item-label {
14577
15803
  font-size: 13px;
14578
15804
  font-weight: 600;
14579
- color: #111827;
15805
+ color: var(--squisq-layout-text);
14580
15806
  white-space: nowrap;
14581
15807
  overflow: hidden;
14582
15808
  text-overflow: ellipsis;
@@ -14588,7 +15814,7 @@
14588
15814
  "Menlo",
14589
15815
  monospace;
14590
15816
  font-size: 11px;
14591
- color: #6b7280;
15817
+ color: var(--squisq-layout-muted);
14592
15818
  white-space: nowrap;
14593
15819
  overflow: hidden;
14594
15820
  text-overflow: ellipsis;
@@ -14597,7 +15823,7 @@
14597
15823
  margin: 8px 2px;
14598
15824
  font-size: 12px;
14599
15825
  line-height: 1.5;
14600
- color: #6b7280;
15826
+ color: var(--squisq-layout-muted);
14601
15827
  }
14602
15828
  .squisq-layout-manager-main {
14603
15829
  flex: 1;