@bendyline/docblocks-react 2.0.0 → 2.1.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 (300) hide show
  1. package/README.md +6 -0
  2. package/dist/{ExportDialog-MEUISWZX.js → ExportDialog-7LDIXJZ3.js} +3 -2
  3. package/dist/{ExportToolbarControls-D2YDWOXW.js → ExportToolbarControls-GHAOJMH6.js} +147 -12
  4. package/dist/ExportToolbarControls-GHAOJMH6.js.map +1 -0
  5. package/dist/{GitToolbarControl-LMIR4R7I.js → GitToolbarControl-GNMRVKWQ.js} +62 -43
  6. package/dist/GitToolbarControl-GNMRVKWQ.js.map +1 -0
  7. package/dist/{GitUI-KGF5MSNV.js → GitUI-VHOBQY43.js} +225 -140
  8. package/dist/GitUI-VHOBQY43.js.map +1 -0
  9. package/dist/ShareDialog-63ENBEDZ.js +213 -0
  10. package/dist/ShareDialog-63ENBEDZ.js.map +1 -0
  11. package/dist/chunk-57ZJJOC5.js +89 -0
  12. package/dist/chunk-57ZJJOC5.js.map +1 -0
  13. package/dist/chunk-FEWQUQML.js +256 -0
  14. package/dist/chunk-FEWQUQML.js.map +1 -0
  15. package/dist/chunk-FMGTHSTX.js +110 -0
  16. package/dist/chunk-FMGTHSTX.js.map +1 -0
  17. package/dist/chunk-UNYZQXWR.js +324 -0
  18. package/dist/chunk-UNYZQXWR.js.map +1 -0
  19. package/dist/editor.d.ts +5 -4
  20. package/dist/editor.js +8 -69
  21. package/dist/editor.js.map +1 -1
  22. package/dist/export/index.d.ts +7 -1
  23. package/dist/export/index.js +2 -1
  24. package/dist/index.d.ts +346 -21
  25. package/dist/index.js +6169 -20
  26. package/dist/index.js.map +1 -1
  27. package/dist/settings/index.d.ts +9 -1
  28. package/dist/settings/index.js +6 -4
  29. package/package.json +18 -13
  30. package/src/styles/docblocks.css +537 -26
  31. package/dist/AppMenu/AppMenu.d.ts +0 -53
  32. package/dist/AppMenu/AppMenu.d.ts.map +0 -1
  33. package/dist/AppMenu/AppMenu.js +0 -67
  34. package/dist/AppMenu/AppMenu.js.map +0 -1
  35. package/dist/AppMenu/index.d.ts +0 -3
  36. package/dist/AppMenu/index.d.ts.map +0 -1
  37. package/dist/AppMenu/index.js +0 -2
  38. package/dist/AppMenu/index.js.map +0 -1
  39. package/dist/DocBlocksShell/DocBlocksShell.d.ts +0 -49
  40. package/dist/DocBlocksShell/DocBlocksShell.d.ts.map +0 -1
  41. package/dist/DocBlocksShell/DocBlocksShell.js +0 -2730
  42. package/dist/DocBlocksShell/DocBlocksShell.js.map +0 -1
  43. package/dist/DocBlocksShell/LazyEditorShell.d.ts +0 -3
  44. package/dist/DocBlocksShell/LazyEditorShell.d.ts.map +0 -1
  45. package/dist/DocBlocksShell/LazyEditorShell.js +0 -3
  46. package/dist/DocBlocksShell/LazyEditorShell.js.map +0 -1
  47. package/dist/DocBlocksShell/UpdateAvailableNotice.d.ts +0 -13
  48. package/dist/DocBlocksShell/UpdateAvailableNotice.d.ts.map +0 -1
  49. package/dist/DocBlocksShell/UpdateAvailableNotice.js +0 -16
  50. package/dist/DocBlocksShell/UpdateAvailableNotice.js.map +0 -1
  51. package/dist/DocBlocksShell/document-title.d.ts +0 -3
  52. package/dist/DocBlocksShell/document-title.d.ts.map +0 -1
  53. package/dist/DocBlocksShell/document-title.js +0 -17
  54. package/dist/DocBlocksShell/document-title.js.map +0 -1
  55. package/dist/DocBlocksShell/index.d.ts +0 -3
  56. package/dist/DocBlocksShell/index.d.ts.map +0 -1
  57. package/dist/DocBlocksShell/index.js +0 -2
  58. package/dist/DocBlocksShell/index.js.map +0 -1
  59. package/dist/DocBlocksShell/workspace-authority-barrier.d.ts +0 -14
  60. package/dist/DocBlocksShell/workspace-authority-barrier.d.ts.map +0 -1
  61. package/dist/DocBlocksShell/workspace-authority-barrier.js +0 -23
  62. package/dist/DocBlocksShell/workspace-authority-barrier.js.map +0 -1
  63. package/dist/Export/DeferredExportToolbarControls.d.ts +0 -5
  64. package/dist/Export/DeferredExportToolbarControls.d.ts.map +0 -1
  65. package/dist/Export/DeferredExportToolbarControls.js +0 -10
  66. package/dist/Export/DeferredExportToolbarControls.js.map +0 -1
  67. package/dist/Export/ExportDialog.d.ts +0 -25
  68. package/dist/Export/ExportDialog.d.ts.map +0 -1
  69. package/dist/Export/ExportDialog.js +0 -160
  70. package/dist/Export/ExportDialog.js.map +0 -1
  71. package/dist/Export/ExportToolbarControls.d.ts +0 -37
  72. package/dist/Export/ExportToolbarControls.d.ts.map +0 -1
  73. package/dist/Export/ExportToolbarControls.js +0 -285
  74. package/dist/Export/ExportToolbarControls.js.map +0 -1
  75. package/dist/Export/export-destination.d.ts +0 -3
  76. package/dist/Export/export-destination.d.ts.map +0 -1
  77. package/dist/Export/export-destination.js +0 -32
  78. package/dist/Export/export-destination.js.map +0 -1
  79. package/dist/Export/export-options.d.ts +0 -53
  80. package/dist/Export/export-options.d.ts.map +0 -1
  81. package/dist/Export/export-options.js +0 -49
  82. package/dist/Export/export-options.js.map +0 -1
  83. package/dist/Export/index.d.ts +0 -10
  84. package/dist/Export/index.d.ts.map +0 -1
  85. package/dist/Export/index.js +0 -6
  86. package/dist/Export/index.js.map +0 -1
  87. package/dist/Export/public-api.d.ts +0 -12
  88. package/dist/Export/public-api.d.ts.map +0 -1
  89. package/dist/Export/public-api.js +0 -9
  90. package/dist/Export/public-api.js.map +0 -1
  91. package/dist/Export/run-export.d.ts +0 -10
  92. package/dist/Export/run-export.d.ts.map +0 -1
  93. package/dist/Export/run-export.js +0 -313
  94. package/dist/Export/run-export.js.map +0 -1
  95. package/dist/Export/transform-summaries.d.ts +0 -7
  96. package/dist/Export/transform-summaries.d.ts.map +0 -1
  97. package/dist/Export/transform-summaries.js +0 -6
  98. package/dist/Export/transform-summaries.js.map +0 -1
  99. package/dist/ExportToolbarControls-D2YDWOXW.js.map +0 -1
  100. package/dist/FileExplorer/FileExplorer.d.ts +0 -43
  101. package/dist/FileExplorer/FileExplorer.d.ts.map +0 -1
  102. package/dist/FileExplorer/FileExplorer.js +0 -315
  103. package/dist/FileExplorer/FileExplorer.js.map +0 -1
  104. package/dist/FileExplorer/FileTreeNode.d.ts +0 -39
  105. package/dist/FileExplorer/FileTreeNode.d.ts.map +0 -1
  106. package/dist/FileExplorer/FileTreeNode.js +0 -131
  107. package/dist/FileExplorer/FileTreeNode.js.map +0 -1
  108. package/dist/FileExplorer/index.d.ts +0 -6
  109. package/dist/FileExplorer/index.d.ts.map +0 -1
  110. package/dist/FileExplorer/index.js +0 -4
  111. package/dist/FileExplorer/index.js.map +0 -1
  112. package/dist/FileExplorer/useFileTree.d.ts +0 -37
  113. package/dist/FileExplorer/useFileTree.d.ts.map +0 -1
  114. package/dist/FileExplorer/useFileTree.js +0 -284
  115. package/dist/FileExplorer/useFileTree.js.map +0 -1
  116. package/dist/Git/GitAuthGuidanceDialog.d.ts +0 -18
  117. package/dist/Git/GitAuthGuidanceDialog.d.ts.map +0 -1
  118. package/dist/Git/GitAuthGuidanceDialog.js +0 -27
  119. package/dist/Git/GitAuthGuidanceDialog.js.map +0 -1
  120. package/dist/Git/GitBranchesDialog.d.ts +0 -13
  121. package/dist/Git/GitBranchesDialog.d.ts.map +0 -1
  122. package/dist/Git/GitBranchesDialog.js +0 -59
  123. package/dist/Git/GitBranchesDialog.js.map +0 -1
  124. package/dist/Git/GitCloneDialog.d.ts +0 -14
  125. package/dist/Git/GitCloneDialog.d.ts.map +0 -1
  126. package/dist/Git/GitCloneDialog.js +0 -79
  127. package/dist/Git/GitCloneDialog.js.map +0 -1
  128. package/dist/Git/GitCommitDialog.d.ts +0 -12
  129. package/dist/Git/GitCommitDialog.d.ts.map +0 -1
  130. package/dist/Git/GitCommitDialog.js +0 -38
  131. package/dist/Git/GitCommitDialog.js.map +0 -1
  132. package/dist/Git/GitConflictsDialog.d.ts +0 -12
  133. package/dist/Git/GitConflictsDialog.d.ts.map +0 -1
  134. package/dist/Git/GitConflictsDialog.js +0 -17
  135. package/dist/Git/GitConflictsDialog.js.map +0 -1
  136. package/dist/Git/GitContext.d.ts +0 -89
  137. package/dist/Git/GitContext.d.ts.map +0 -1
  138. package/dist/Git/GitContext.js +0 -15
  139. package/dist/Git/GitContext.js.map +0 -1
  140. package/dist/Git/GitDiffDialog.d.ts +0 -20
  141. package/dist/Git/GitDiffDialog.d.ts.map +0 -1
  142. package/dist/Git/GitDiffDialog.js +0 -100
  143. package/dist/Git/GitDiffDialog.js.map +0 -1
  144. package/dist/Git/GitDiffView.d.ts +0 -23
  145. package/dist/Git/GitDiffView.d.ts.map +0 -1
  146. package/dist/Git/GitDiffView.js +0 -77
  147. package/dist/Git/GitDiffView.js.map +0 -1
  148. package/dist/Git/GitHistoryDialog.d.ts +0 -15
  149. package/dist/Git/GitHistoryDialog.d.ts.map +0 -1
  150. package/dist/Git/GitHistoryDialog.js +0 -107
  151. package/dist/Git/GitHistoryDialog.js.map +0 -1
  152. package/dist/Git/GitStatusBar.d.ts +0 -8
  153. package/dist/Git/GitStatusBar.d.ts.map +0 -1
  154. package/dist/Git/GitStatusBar.js +0 -49
  155. package/dist/Git/GitStatusBar.js.map +0 -1
  156. package/dist/Git/GitToolbarControl.d.ts +0 -15
  157. package/dist/Git/GitToolbarControl.d.ts.map +0 -1
  158. package/dist/Git/GitToolbarControl.js +0 -51
  159. package/dist/Git/GitToolbarControl.js.map +0 -1
  160. package/dist/Git/GitUI.d.ts +0 -14
  161. package/dist/Git/GitUI.d.ts.map +0 -1
  162. package/dist/Git/GitUI.js +0 -21
  163. package/dist/Git/GitUI.js.map +0 -1
  164. package/dist/Git/commit-selection.d.ts +0 -22
  165. package/dist/Git/commit-selection.d.ts.map +0 -1
  166. package/dist/Git/commit-selection.js +0 -47
  167. package/dist/Git/commit-selection.js.map +0 -1
  168. package/dist/Git/git-clone-utils.d.ts +0 -8
  169. package/dist/Git/git-clone-utils.d.ts.map +0 -1
  170. package/dist/Git/git-clone-utils.js +0 -26
  171. package/dist/Git/git-clone-utils.js.map +0 -1
  172. package/dist/Git/git-status.d.ts +0 -24
  173. package/dist/Git/git-status.d.ts.map +0 -1
  174. package/dist/Git/git-status.js +0 -105
  175. package/dist/Git/git-status.js.map +0 -1
  176. package/dist/Git/useGit.d.ts +0 -15
  177. package/dist/Git/useGit.d.ts.map +0 -1
  178. package/dist/Git/useGit.js +0 -206
  179. package/dist/Git/useGit.js.map +0 -1
  180. package/dist/Git/useGitStatus.d.ts +0 -17
  181. package/dist/Git/useGitStatus.d.ts.map +0 -1
  182. package/dist/Git/useGitStatus.js +0 -63
  183. package/dist/Git/useGitStatus.js.map +0 -1
  184. package/dist/GitToolbarControl-LMIR4R7I.js.map +0 -1
  185. package/dist/GitUI-KGF5MSNV.js.map +0 -1
  186. package/dist/Settings/Settings.d.ts +0 -23
  187. package/dist/Settings/Settings.d.ts.map +0 -1
  188. package/dist/Settings/Settings.js +0 -22
  189. package/dist/Settings/Settings.js.map +0 -1
  190. package/dist/Settings/public-api.d.ts +0 -3
  191. package/dist/Settings/public-api.d.ts.map +0 -1
  192. package/dist/Settings/public-api.js +0 -2
  193. package/dist/Settings/public-api.js.map +0 -1
  194. package/dist/WorkspacePicker/WorkspacePicker.d.ts +0 -22
  195. package/dist/WorkspacePicker/WorkspacePicker.d.ts.map +0 -1
  196. package/dist/WorkspacePicker/WorkspacePicker.js +0 -74
  197. package/dist/WorkspacePicker/WorkspacePicker.js.map +0 -1
  198. package/dist/WorkspacePicker/WorkspaceSettingsButton.d.ts +0 -11
  199. package/dist/WorkspacePicker/WorkspaceSettingsButton.d.ts.map +0 -1
  200. package/dist/WorkspacePicker/WorkspaceSettingsButton.js +0 -27
  201. package/dist/WorkspacePicker/WorkspaceSettingsButton.js.map +0 -1
  202. package/dist/WorkspacePicker/WorkspaceSettingsDialog.d.ts +0 -20
  203. package/dist/WorkspacePicker/WorkspaceSettingsDialog.d.ts.map +0 -1
  204. package/dist/WorkspacePicker/WorkspaceSettingsDialog.js +0 -36
  205. package/dist/WorkspacePicker/WorkspaceSettingsDialog.js.map +0 -1
  206. package/dist/WorkspacePicker/index.d.ts +0 -3
  207. package/dist/WorkspacePicker/index.d.ts.map +0 -1
  208. package/dist/WorkspacePicker/index.js +0 -2
  209. package/dist/WorkspacePicker/index.js.map +0 -1
  210. package/dist/chunk-3SAXDU2U.js +0 -157
  211. package/dist/chunk-3SAXDU2U.js.map +0 -1
  212. package/dist/chunk-AOVTHZU7.js +0 -321
  213. package/dist/chunk-AOVTHZU7.js.map +0 -1
  214. package/dist/chunk-GSNZSCIK.js +0 -55
  215. package/dist/chunk-GSNZSCIK.js.map +0 -1
  216. package/dist/components/Dialog.d.ts +0 -22
  217. package/dist/components/Dialog.d.ts.map +0 -1
  218. package/dist/components/Dialog.js +0 -33
  219. package/dist/components/Dialog.js.map +0 -1
  220. package/dist/editor.d.ts.map +0 -1
  221. package/dist/hooks/index.d.ts +0 -3
  222. package/dist/hooks/index.d.ts.map +0 -1
  223. package/dist/hooks/index.js +0 -2
  224. package/dist/hooks/index.js.map +0 -1
  225. package/dist/hooks/useDocumentSession.d.ts +0 -16
  226. package/dist/hooks/useDocumentSession.d.ts.map +0 -1
  227. package/dist/hooks/useDocumentSession.js +0 -18
  228. package/dist/hooks/useDocumentSession.js.map +0 -1
  229. package/dist/icons.d.ts +0 -12
  230. package/dist/icons.d.ts.map +0 -1
  231. package/dist/icons.js +0 -28
  232. package/dist/icons.js.map +0 -1
  233. package/dist/index.d.ts.map +0 -1
  234. package/dist/preferences/theme.d.ts +0 -18
  235. package/dist/preferences/theme.d.ts.map +0 -1
  236. package/dist/preferences/theme.js +0 -63
  237. package/dist/preferences/theme.js.map +0 -1
  238. package/dist/preferences/versioning.d.ts +0 -27
  239. package/dist/preferences/versioning.d.ts.map +0 -1
  240. package/dist/preferences/versioning.js +0 -62
  241. package/dist/preferences/versioning.js.map +0 -1
  242. package/dist/provider-lease.d.ts +0 -10
  243. package/dist/provider-lease.d.ts.map +0 -1
  244. package/dist/provider-lease.js +0 -42
  245. package/dist/provider-lease.js.map +0 -1
  246. package/src/AppMenu/AppMenu.tsx +0 -334
  247. package/src/AppMenu/index.ts +0 -2
  248. package/src/DocBlocksShell/DocBlocksShell.tsx +0 -3398
  249. package/src/DocBlocksShell/LazyEditorShell.ts +0 -2
  250. package/src/DocBlocksShell/UpdateAvailableNotice.tsx +0 -60
  251. package/src/DocBlocksShell/document-title.ts +0 -19
  252. package/src/DocBlocksShell/index.ts +0 -2
  253. package/src/DocBlocksShell/workspace-authority-barrier.ts +0 -26
  254. package/src/Export/DeferredExportToolbarControls.tsx +0 -23
  255. package/src/Export/ExportDialog.tsx +0 -437
  256. package/src/Export/ExportToolbarControls.tsx +0 -511
  257. package/src/Export/export-destination.ts +0 -30
  258. package/src/Export/export-options.ts +0 -99
  259. package/src/Export/index.ts +0 -19
  260. package/src/Export/public-api.ts +0 -17
  261. package/src/Export/run-export.ts +0 -374
  262. package/src/Export/transform-summaries.ts +0 -14
  263. package/src/FileExplorer/FileExplorer.tsx +0 -528
  264. package/src/FileExplorer/FileTreeNode.tsx +0 -306
  265. package/src/FileExplorer/index.ts +0 -5
  266. package/src/FileExplorer/useFileTree.ts +0 -352
  267. package/src/Git/GitAuthGuidanceDialog.tsx +0 -84
  268. package/src/Git/GitBranchesDialog.tsx +0 -144
  269. package/src/Git/GitCloneDialog.tsx +0 -200
  270. package/src/Git/GitCommitDialog.tsx +0 -119
  271. package/src/Git/GitConflictsDialog.tsx +0 -62
  272. package/src/Git/GitContext.tsx +0 -88
  273. package/src/Git/GitDiffDialog.tsx +0 -147
  274. package/src/Git/GitDiffView.tsx +0 -105
  275. package/src/Git/GitHistoryDialog.tsx +0 -195
  276. package/src/Git/GitStatusBar.tsx +0 -157
  277. package/src/Git/GitToolbarControl.tsx +0 -123
  278. package/src/Git/GitUI.tsx +0 -68
  279. package/src/Git/commit-selection.ts +0 -63
  280. package/src/Git/git-clone-utils.ts +0 -23
  281. package/src/Git/git-status.ts +0 -113
  282. package/src/Git/useGit.ts +0 -279
  283. package/src/Git/useGitStatus.ts +0 -78
  284. package/src/Settings/Settings.tsx +0 -118
  285. package/src/Settings/public-api.ts +0 -8
  286. package/src/WorkspacePicker/WorkspacePicker.tsx +0 -191
  287. package/src/WorkspacePicker/WorkspaceSettingsButton.tsx +0 -88
  288. package/src/WorkspacePicker/WorkspaceSettingsDialog.tsx +0 -121
  289. package/src/WorkspacePicker/index.ts +0 -2
  290. package/src/components/Dialog.tsx +0 -81
  291. package/src/editor.ts +0 -72
  292. package/src/hooks/index.ts +0 -2
  293. package/src/hooks/useDocumentSession.ts +0 -37
  294. package/src/icons.tsx +0 -48
  295. package/src/index.ts +0 -61
  296. package/src/preferences/theme.ts +0 -67
  297. package/src/preferences/versioning.ts +0 -69
  298. package/src/provider-lease.ts +0 -52
  299. package/src/types/pwa-dom.d.ts +0 -31
  300. /package/dist/{ExportDialog-MEUISWZX.js.map → ExportDialog-7LDIXJZ3.js.map} +0 -0
@@ -27,6 +27,11 @@
27
27
  --db-accent-hover: #5e4f37;
28
28
  --db-text-on-accent: #ffffff;
29
29
  --db-text-on-selected: #ffffff;
30
+ /* Keyboard focus ring. Deliberately darker than --db-accent: the accent
31
+ is also the *selected row* fill, so an accent ring vanished against
32
+ it. Any surface that paints itself --db-bg-selected re-points this
33
+ token at a contrasting value (see .db-tree-row--selected). */
34
+ --db-focus: #3d3220;
30
35
  --db-accent-soft-08: rgba(125, 105, 72, 0.08);
31
36
  --db-accent-soft-10: rgba(125, 105, 72, 0.1);
32
37
  --db-accent-soft-12: rgba(125, 105, 72, 0.12);
@@ -45,6 +50,7 @@
45
50
  --db-input-border: #c4b693;
46
51
  --db-danger: #b22b1b;
47
52
  --db-danger-bg: #fdf0ee;
53
+ --db-text-on-danger: #ffffff;
48
54
  --db-shadow: rgba(40, 30, 15, 0.12);
49
55
  /* Git status colors — file badges, sync chips. Deleted/conflicted reuse
50
56
  the danger hue on purpose; renamed gets the one cool accent. */
@@ -72,6 +78,7 @@
72
78
  --db-accent-hover: #dec79d;
73
79
  --db-text-on-accent: #1a1812;
74
80
  --db-text-on-selected: #e8e2d0;
81
+ --db-focus: #e8e2d0;
75
82
  --db-accent-soft-08: rgba(200, 180, 143, 0.08);
76
83
  --db-accent-soft-10: rgba(200, 180, 143, 0.1);
77
84
  --db-accent-soft-12: rgba(200, 180, 143, 0.12);
@@ -86,6 +93,7 @@
86
93
  --db-input-border: #c8b48f;
87
94
  --db-danger: #f87171;
88
95
  --db-danger-bg: #1c1917;
96
+ --db-text-on-danger: #1c1917;
89
97
  --db-shadow: rgba(0, 0, 0, 0.4);
90
98
  /* In dark mode, "lighter than the toolbar" means brighter — so this
91
99
  sits a step above `--db-accent-tint-strong` instead of between it
@@ -116,6 +124,7 @@
116
124
  --db-accent-hover: #dec79d;
117
125
  --db-text-on-accent: #1a1812;
118
126
  --db-text-on-selected: #e8e2d0;
127
+ --db-focus: #e8e2d0;
119
128
  --db-accent-soft-08: rgba(200, 180, 143, 0.08);
120
129
  --db-accent-soft-12: rgba(200, 180, 143, 0.12);
121
130
  --db-accent-soft-15: rgba(200, 180, 143, 0.18);
@@ -125,6 +134,7 @@
125
134
  --db-input-border: #c8b48f;
126
135
  --db-danger: #f87171;
127
136
  --db-danger-bg: #1c1917;
137
+ --db-text-on-danger: #1c1917;
128
138
  --db-shadow: rgba(0, 0, 0, 0.4);
129
139
  --db-gutter-bg: #4a4538;
130
140
  --db-git-modified: #e5b567;
@@ -202,12 +212,125 @@
202
212
  justify-content: center;
203
213
  }
204
214
 
205
- .db-explorer-btn:hover {
215
+ .db-explorer-btn:hover:not(:disabled) {
206
216
  background: var(--db-bg-hover);
207
217
  border-color: var(--db-border);
208
218
  color: var(--db-text-secondary);
209
219
  }
210
220
 
221
+ .db-explorer-btn:disabled {
222
+ cursor: default;
223
+ opacity: 0.55;
224
+ }
225
+
226
+ /* ── Transient workspace move ────────────────────────────────── */
227
+
228
+ .db-transient-move {
229
+ flex-shrink: 0;
230
+ padding: 8px;
231
+ border-bottom: 1px solid var(--db-border);
232
+ background: var(--db-accent-soft-08);
233
+ }
234
+
235
+ .db-transient-move-trigger {
236
+ width: 100%;
237
+ padding: 7px 9px;
238
+ border: 1px solid var(--db-accent);
239
+ border-radius: 5px;
240
+ background: var(--db-bg);
241
+ color: var(--db-accent-deep);
242
+ font: inherit;
243
+ font-weight: 600;
244
+ text-align: left;
245
+ cursor: pointer;
246
+ }
247
+
248
+ .db-transient-move-trigger:hover {
249
+ background: var(--db-bg-hover);
250
+ }
251
+
252
+ .db-transient-move-trigger:focus-visible,
253
+ .db-transient-move-select:focus-visible,
254
+ .db-transient-move-actions button:focus-visible {
255
+ outline: 2px solid var(--db-focus, var(--db-accent));
256
+ outline-offset: 2px;
257
+ }
258
+
259
+ .db-transient-move-form {
260
+ display: flex;
261
+ flex-direction: column;
262
+ gap: 7px;
263
+ }
264
+
265
+ .db-transient-move-label {
266
+ color: var(--db-text);
267
+ font-size: 12px;
268
+ font-weight: 600;
269
+ }
270
+
271
+ .db-transient-move-select {
272
+ box-sizing: border-box;
273
+ width: 100%;
274
+ min-width: 0;
275
+ padding: 6px 28px 6px 8px;
276
+ border: 1px solid var(--db-input-border);
277
+ border-radius: 4px;
278
+ background: var(--db-bg);
279
+ color: var(--db-text);
280
+ font: inherit;
281
+ }
282
+
283
+ .db-transient-move-hint,
284
+ .db-transient-move-error {
285
+ margin: 0;
286
+ font-size: 11px;
287
+ line-height: 1.4;
288
+ }
289
+
290
+ .db-transient-move-hint {
291
+ color: var(--db-text-muted);
292
+ }
293
+
294
+ .db-transient-move-error {
295
+ color: var(--db-danger);
296
+ }
297
+
298
+ .db-transient-move-actions {
299
+ display: flex;
300
+ justify-content: flex-end;
301
+ gap: 6px;
302
+ }
303
+
304
+ .db-transient-move-actions button {
305
+ padding: 5px 10px;
306
+ border-radius: 4px;
307
+ font: inherit;
308
+ font-weight: 600;
309
+ cursor: pointer;
310
+ }
311
+
312
+ .db-transient-move-actions button:disabled {
313
+ opacity: 0.55;
314
+ cursor: default;
315
+ }
316
+
317
+ .db-transient-move-cancel {
318
+ border: 1px solid var(--db-border-strong);
319
+ background: var(--db-bg);
320
+ color: var(--db-text-secondary);
321
+ }
322
+
323
+ .db-transient-move-submit {
324
+ border: 1px solid var(--db-accent);
325
+ background: var(--db-accent);
326
+ color: var(--db-text-on-accent);
327
+ }
328
+
329
+ .db-transient-move-submit:hover:not(:disabled) {
330
+ border-color: var(--db-accent-hover);
331
+ background: var(--db-accent-hover);
332
+ }
333
+
211
334
  /* ── New Item Input ──────────────────────────────────────────── */
212
335
 
213
336
  .db-new-item {
@@ -234,6 +357,25 @@
234
357
  outline: none;
235
358
  }
236
359
 
360
+ /* The UA outline is suppressed above, so this is the *only* focus
361
+ indicator on an input a keyboard user has to type into (WCAG 2.4.7).
362
+ :focus-visible rather than :focus so a pointer user placing a caret
363
+ doesn't get a ring. */
364
+ .db-new-item-input:focus-visible {
365
+ outline: 2px solid var(--db-focus);
366
+ outline-offset: 1px;
367
+ border-color: var(--db-accent);
368
+ }
369
+
370
+ .db-new-item-input[aria-invalid='true'] {
371
+ border-color: var(--db-danger);
372
+ }
373
+
374
+ .db-new-item-add:focus-visible {
375
+ outline: 2px solid var(--db-focus);
376
+ outline-offset: 1px;
377
+ }
378
+
237
379
  .db-new-item-suffix {
238
380
  font-size: 12px;
239
381
  color: var(--db-text-muted);
@@ -251,10 +393,16 @@
251
393
  cursor: pointer;
252
394
  }
253
395
 
254
- .db-new-item-add:hover {
396
+ .db-new-item-add:hover:not(:disabled) {
255
397
  background: var(--db-accent-hover);
256
398
  }
257
399
 
400
+ .db-new-item-input:disabled,
401
+ .db-new-item-add:disabled {
402
+ cursor: default;
403
+ opacity: 0.65;
404
+ }
405
+
258
406
  /* ── Tree ────────────────────────────────────────────────────── */
259
407
 
260
408
  .db-tree {
@@ -279,6 +427,17 @@
279
427
  font-size: 12px;
280
428
  }
281
429
 
430
+ .db-tree-error-retry {
431
+ border: 0;
432
+ padding: 0;
433
+ color: inherit;
434
+ background: transparent;
435
+ font: inherit;
436
+ font-weight: 600;
437
+ text-decoration: underline;
438
+ cursor: pointer;
439
+ }
440
+
282
441
  .db-tree--drop-target {
283
442
  box-shadow: inset 0 0 0 2px var(--db-accent);
284
443
  background: var(--db-accent-soft-08);
@@ -298,6 +457,22 @@
298
457
  background: var(--db-bg-hover);
299
458
  }
300
459
 
460
+ /* The roving-tabindex row is the tree's single tab stop, so its focus ring
461
+ is the only thing telling a keyboard user where they are. Inset offset
462
+ keeps the ring inside the scroll container instead of being clipped. */
463
+ .db-tree-row:focus-visible {
464
+ outline: 2px solid var(--db-focus);
465
+ outline-offset: -2px;
466
+ }
467
+
468
+ /* A selected/drop-target row is filled with --db-bg-selected, which in
469
+ light mode *is* the accent brown — the default ring would disappear
470
+ into it. Re-point the token rather than duplicating the rule. */
471
+ .db-tree-row--selected,
472
+ .db-tree-row--drop-target {
473
+ --db-focus: #ffffff;
474
+ }
475
+
301
476
  .db-tree-row--dragging {
302
477
  opacity: 0.45;
303
478
  }
@@ -348,6 +523,15 @@
348
523
  outline: none;
349
524
  }
350
525
 
526
+ /* Same WCAG 2.4.7 gap as .db-new-item-input: the rename input is focused
527
+ programmatically the moment it appears, so with `outline: none` and no
528
+ replacement a keyboard user had no idea where they were typing. */
529
+ .db-tree-rename-input:focus-visible {
530
+ outline: 2px solid var(--db-focus);
531
+ outline-offset: 1px;
532
+ border-color: var(--db-accent);
533
+ }
534
+
351
535
  .db-tree-more {
352
536
  flex-shrink: 0;
353
537
  display: inline-flex;
@@ -379,6 +563,11 @@
379
563
  color: var(--db-text);
380
564
  }
381
565
 
566
+ .db-tree-more:focus-visible {
567
+ outline: 2px solid var(--db-focus);
568
+ outline-offset: -2px;
569
+ }
570
+
382
571
  .db-tree-more--active {
383
572
  background: var(--db-bg-selected);
384
573
  color: var(--db-text-on-selected);
@@ -413,10 +602,18 @@
413
602
  color: var(--db-text-secondary);
414
603
  }
415
604
 
416
- .db-tree-context-item:hover {
605
+ .db-tree-context-item:hover,
606
+ .db-tree-context-item:focus-visible {
417
607
  background: var(--db-bg-hover);
418
608
  }
419
609
 
610
+ /* Menu items are reached with Arrow keys (they are not tab stops), so the
611
+ ring is the only cue to which item Enter will fire. */
612
+ .db-tree-context-item:focus-visible {
613
+ outline: 2px solid var(--db-focus);
614
+ outline-offset: -2px;
615
+ }
616
+
420
617
  .db-tree-context-item--danger {
421
618
  color: var(--db-danger);
422
619
  }
@@ -947,9 +1144,16 @@ body.db-resizing-sidebar * {
947
1144
  background: var(--db-bg-hover);
948
1145
  }
949
1146
 
950
- .db-mobile-back-arrow {
951
- font-size: 18px;
952
- line-height: 1;
1147
+ .db-mobile-files-icon {
1148
+ display: inline-flex;
1149
+ align-items: center;
1150
+ justify-content: center;
1151
+ flex-shrink: 0;
1152
+ }
1153
+
1154
+ .db-mobile-files-icon svg {
1155
+ width: 24px;
1156
+ height: 24px;
953
1157
  }
954
1158
 
955
1159
  /* In folder/empty views, the back button sits as a standalone bar */
@@ -991,16 +1195,23 @@ body.db-resizing-sidebar * {
991
1195
  display: flex;
992
1196
  align-items: center;
993
1197
  justify-content: center;
1198
+ box-sizing: border-box;
1199
+ padding: 16px;
994
1200
  background: rgba(0, 0, 0, 0.4);
995
1201
  }
996
1202
 
997
1203
  .db-dialog {
1204
+ box-sizing: border-box;
998
1205
  background: var(--db-bg);
999
1206
  border: 1px solid var(--db-border);
1000
1207
  border-radius: 8px;
1001
1208
  box-shadow: 0 8px 32px var(--db-shadow);
1002
1209
  width: 380px;
1003
- max-width: 90vw;
1210
+ max-width: 100%;
1211
+ max-height: calc(100vh - 32px);
1212
+ max-height: calc(100dvh - 32px);
1213
+ display: flex;
1214
+ flex-direction: column;
1004
1215
  }
1005
1216
 
1006
1217
  .db-dialog-header {
@@ -1035,6 +1246,8 @@ body.db-resizing-sidebar * {
1035
1246
  }
1036
1247
 
1037
1248
  .db-dialog-body {
1249
+ min-height: 0;
1250
+ overflow-y: auto;
1038
1251
  padding: 16px 20px 20px;
1039
1252
  font-size: 13px;
1040
1253
  line-height: 1.6;
@@ -1135,12 +1348,70 @@ body.db-resizing-sidebar * {
1135
1348
  accent-color: var(--db-accent);
1136
1349
  }
1137
1350
 
1351
+ .db-settings-slider {
1352
+ display: flex;
1353
+ flex-direction: column;
1354
+ gap: 6px;
1355
+ color: var(--db-text);
1356
+ font-size: 13px;
1357
+ }
1358
+
1359
+ .db-settings-slider + .db-settings-slider {
1360
+ margin-top: 14px;
1361
+ }
1362
+
1363
+ .db-settings-slider-header {
1364
+ display: flex;
1365
+ align-items: baseline;
1366
+ justify-content: space-between;
1367
+ gap: 16px;
1368
+ }
1369
+
1370
+ .db-settings-slider-value {
1371
+ color: var(--db-text-muted);
1372
+ font-variant-numeric: tabular-nums;
1373
+ }
1374
+
1375
+ .db-settings-slider input[type='range'] {
1376
+ width: 100%;
1377
+ margin: 0;
1378
+ accent-color: var(--db-accent);
1379
+ cursor: pointer;
1380
+ }
1381
+
1138
1382
  .db-settings-accent-grid {
1139
1383
  display: grid;
1140
- grid-template-columns: repeat(2, minmax(0, 1fr));
1384
+ grid-template-columns: repeat(auto-fit, minmax(104px, 1fr));
1141
1385
  gap: 6px;
1142
1386
  }
1143
1387
 
1388
+ .db-settings-action {
1389
+ margin-top: 4px;
1390
+ padding: 7px 12px;
1391
+ border: 1px solid var(--db-accent);
1392
+ border-radius: 5px;
1393
+ background: var(--db-accent);
1394
+ color: var(--db-text-on-accent);
1395
+ font: inherit;
1396
+ font-weight: 600;
1397
+ cursor: pointer;
1398
+ }
1399
+
1400
+ .db-settings-action:hover:not(:disabled) {
1401
+ border-color: var(--db-accent-hover);
1402
+ background: var(--db-accent-hover);
1403
+ }
1404
+
1405
+ .db-settings-action:focus-visible {
1406
+ outline: 2px solid var(--db-focus, var(--db-accent));
1407
+ outline-offset: 2px;
1408
+ }
1409
+
1410
+ .db-settings-action:disabled {
1411
+ opacity: 0.6;
1412
+ cursor: default;
1413
+ }
1414
+
1144
1415
  .db-settings-accent {
1145
1416
  position: relative;
1146
1417
  display: flex;
@@ -1349,9 +1620,6 @@ body.db-resizing-sidebar * {
1349
1620
  width: 28px;
1350
1621
  height: 28px;
1351
1622
  padding: 0;
1352
- font-size: 16px;
1353
- font-weight: 700;
1354
- letter-spacing: 1px;
1355
1623
  line-height: 1;
1356
1624
  border: 1px solid transparent;
1357
1625
  border-radius: 4px;
@@ -1360,6 +1628,11 @@ body.db-resizing-sidebar * {
1360
1628
  color: var(--db-text-muted);
1361
1629
  }
1362
1630
 
1631
+ .db-toolbar-menu-trigger svg {
1632
+ width: 18px;
1633
+ height: 18px;
1634
+ }
1635
+
1363
1636
  .db-toolbar-menu-trigger:hover {
1364
1637
  background: var(--db-bg-hover);
1365
1638
  border-color: var(--db-border);
@@ -1411,10 +1684,17 @@ body.db-resizing-sidebar * {
1411
1684
  white-space: nowrap;
1412
1685
  }
1413
1686
 
1414
- .db-toolbar-menu-item:hover {
1687
+ .db-toolbar-menu-item:hover,
1688
+ .db-toolbar-menu-item:focus-visible {
1415
1689
  background: var(--db-bg-hover);
1416
1690
  }
1417
1691
 
1692
+ /* Arrow-reachable, not a tab stop — see .db-git-menu-item:focus-visible. */
1693
+ .db-toolbar-menu-item:focus-visible {
1694
+ outline: 2px solid var(--db-focus);
1695
+ outline-offset: -2px;
1696
+ }
1697
+
1418
1698
  .db-toolbar-menu-item:disabled {
1419
1699
  opacity: 0.5;
1420
1700
  cursor: default;
@@ -1627,6 +1907,53 @@ body.db-resizing-sidebar * {
1627
1907
  color: var(--db-text-on-accent);
1628
1908
  }
1629
1909
 
1910
+ /* Shared-document links intentionally resemble export because they package a
1911
+ bounded Markdown-only DBK; the warning is the critical distinction. */
1912
+ .db-share-dialog {
1913
+ width: 480px;
1914
+ }
1915
+
1916
+ .db-share-warning {
1917
+ margin-bottom: 16px;
1918
+ padding: 10px 12px;
1919
+ color: var(--db-text);
1920
+ background: color-mix(in srgb, var(--db-accent) 12%, var(--db-bg-subtle));
1921
+ border: 1px solid var(--db-accent);
1922
+ border-radius: 5px;
1923
+ }
1924
+
1925
+ .db-share-link {
1926
+ display: block;
1927
+ width: 100%;
1928
+ min-height: 72px;
1929
+ box-sizing: border-box;
1930
+ resize: vertical;
1931
+ padding: 8px;
1932
+ font:
1933
+ 11px/1.45 ui-monospace,
1934
+ SFMono-Regular,
1935
+ Consolas,
1936
+ monospace;
1937
+ color: var(--db-text);
1938
+ background: var(--db-bg-subtle);
1939
+ border: 1px solid var(--db-border);
1940
+ border-radius: 4px;
1941
+ outline: none;
1942
+ overflow-wrap: anywhere;
1943
+ }
1944
+
1945
+ .db-share-link:focus {
1946
+ border-color: var(--db-accent);
1947
+ }
1948
+
1949
+ .db-share-length-warning {
1950
+ color: var(--db-danger, #a33a35);
1951
+ }
1952
+
1953
+ .db-share-temporary-note {
1954
+ color: var(--db-text-muted);
1955
+ }
1956
+
1630
1957
  /* ── Squisq editor chrome separators ─────────────────────────── */
1631
1958
  /* Strengthen the dividers so the toolbar, tabs, and editor body
1632
1959
  read as three distinct zones instead of near-identical whites. */
@@ -1656,6 +1983,25 @@ body.db-resizing-sidebar * {
1656
1983
  background: var(--db-editor-canvas);
1657
1984
  }
1658
1985
 
1986
+ /* Bind Squisq's host-facing accent to the active DocBlocks appearance. */
1987
+ .db-shell .squisq-editor-shell {
1988
+ --squisq-accent: var(--db-accent);
1989
+ --squisq-accent-hover: var(--db-accent-hover);
1990
+ --squisq-text-on-accent: var(--db-text-on-accent);
1991
+ }
1992
+
1993
+ /* Simple diagrams, drawings, and layout canvases share Squisq's Scene
1994
+ engine. Keep canvas and raised-control surfaces on the same DocBlocks
1995
+ palette instead of falling back to slate. */
1996
+ .db-shell .squisq-editor-shell .squisq-scene-shell {
1997
+ --squisq-surface: var(--db-editor-canvas);
1998
+ --squisq-surface-raised: var(--db-bg-subtle);
1999
+ --squisq-surface-hover: var(--db-bg-hover);
2000
+ --squisq-border: var(--db-border-strong);
2001
+ --squisq-text: var(--db-text);
2002
+ --squisq-text-muted: var(--db-text-muted);
2003
+ }
2004
+
1659
2005
  /* ── Inline preview gutter: thematic green ──────────────────── */
1660
2006
  /* Rebind squisq's `--squisq-preview-*` custom properties so the
1661
2007
  gutter chrome (vertical bracket, diagonal connector + dots,
@@ -1792,6 +2138,102 @@ body.db-resizing-sidebar * {
1792
2138
  background: var(--db-bg);
1793
2139
  }
1794
2140
 
2141
+ /* Squisq's media bin ships with a fixed blue-slate palette. Bind the full
2142
+ pane to DocBlocks' appearance tokens so its surface and controls follow
2143
+ the selected accent in both light and dark themes. */
2144
+ .db-shell .squisq-editor-shell .squisq-media-bin {
2145
+ background: var(--db-bg-subtle);
2146
+ border-left-color: var(--db-border);
2147
+ color: var(--db-text);
2148
+ scrollbar-color: var(--db-border-strong) var(--db-bg-subtle);
2149
+ }
2150
+
2151
+ .db-shell .squisq-editor-shell .squisq-media-bin .squisq-media-bin-header {
2152
+ border-bottom-color: var(--db-border);
2153
+ }
2154
+
2155
+ .db-shell .squisq-editor-shell .squisq-media-bin .squisq-media-bin-title {
2156
+ color: var(--db-text-secondary);
2157
+ }
2158
+
2159
+ .db-shell .squisq-editor-shell .squisq-media-bin .squisq-media-bin-upload {
2160
+ background: var(--db-accent-tint-strong);
2161
+ border-color: var(--db-border);
2162
+ color: var(--db-text-secondary);
2163
+ }
2164
+
2165
+ .db-shell .squisq-editor-shell .squisq-media-bin .squisq-media-bin-upload:hover {
2166
+ background: var(--db-bg-hover);
2167
+ border-color: var(--db-border-strong);
2168
+ }
2169
+
2170
+ .db-shell .squisq-editor-shell .squisq-media-bin .squisq-media-bin-empty,
2171
+ .db-shell .squisq-editor-shell .squisq-media-bin .squisq-media-bin-size {
2172
+ color: var(--db-text-muted);
2173
+ }
2174
+
2175
+ .db-shell .squisq-editor-shell .squisq-media-bin .squisq-media-bin-item {
2176
+ border-bottom-color: var(--db-border);
2177
+ color: var(--db-text-secondary);
2178
+ }
2179
+
2180
+ .db-shell .squisq-editor-shell .squisq-media-bin .squisq-media-bin-item:hover,
2181
+ .db-shell .squisq-editor-shell .squisq-media-bin .squisq-media-bin-item:focus-visible {
2182
+ background: var(--db-bg-hover);
2183
+ }
2184
+
2185
+ .db-shell .squisq-editor-shell .squisq-media-bin .squisq-media-bin-item:focus-visible {
2186
+ outline-color: var(--db-accent);
2187
+ }
2188
+
2189
+ .db-shell .squisq-editor-shell .squisq-media-bin .squisq-media-bin-thumb,
2190
+ .db-shell .squisq-editor-shell .squisq-media-bin .squisq-media-bin-icon {
2191
+ background: var(--db-accent-tint-strong);
2192
+ }
2193
+
2194
+ .db-shell .squisq-editor-shell .squisq-media-bin .squisq-media-bin-drop-target {
2195
+ background: color-mix(in srgb, var(--db-bg-subtle) 92%, var(--db-accent));
2196
+ border-color: var(--db-accent);
2197
+ color: var(--db-accent-deep);
2198
+ }
2199
+
2200
+ .db-shell .squisq-editor-shell .squisq-media-bin .squisq-media-bin-drop-target-icon {
2201
+ background: var(--db-accent);
2202
+ color: var(--db-text-on-accent);
2203
+ }
2204
+
2205
+ .db-shell .squisq-editor-shell .squisq-media-bin .squisq-media-bin-drop-target span:last-child {
2206
+ color: var(--db-text-muted);
2207
+ }
2208
+
2209
+ .db-shell .squisq-editor-shell .squisq-media-bin .squisq-media-bin-context-menu {
2210
+ background: var(--db-bg);
2211
+ border-color: var(--db-border);
2212
+ box-shadow: 0 12px 28px var(--db-shadow);
2213
+ }
2214
+
2215
+ .db-shell .squisq-editor-shell .squisq-media-bin .squisq-media-bin-context-menu-item {
2216
+ color: var(--db-text-secondary);
2217
+ }
2218
+
2219
+ .db-shell .squisq-editor-shell .squisq-media-bin .squisq-media-bin-context-menu-item:hover,
2220
+ .db-shell .squisq-editor-shell .squisq-media-bin .squisq-media-bin-context-menu-item:focus-visible {
2221
+ background: var(--db-bg-hover);
2222
+ }
2223
+
2224
+ .db-shell .squisq-editor-shell .squisq-media-bin .squisq-media-bin-context-menu-item--danger {
2225
+ color: var(--db-danger);
2226
+ }
2227
+
2228
+ .db-shell .squisq-editor-shell .squisq-media-bin .squisq-media-bin-context-menu-item--danger:hover,
2229
+ .db-shell
2230
+ .squisq-editor-shell
2231
+ .squisq-media-bin
2232
+ .squisq-media-bin-context-menu-item--danger:focus-visible {
2233
+ background: var(--db-danger-bg);
2234
+ color: var(--db-danger);
2235
+ }
2236
+
1795
2237
  /* ── Squisq accent override (blue → thematic green) ──────────── */
1796
2238
 
1797
2239
  .db-shell[data-theme='dark'] .squisq-editor-shell[data-theme='dark'] .squisq-view-tab--active {
@@ -1943,8 +2385,9 @@ html:has(.db-shell[data-theme='dark']) .squisq-tooltip {
1943
2385
  /* The gallery popover renders into document.body via createPortal, so
1944
2386
  neither .db-shell nor .squisq-editor-shell are ancestors. We use
1945
2387
  `html:has(.db-shell[data-theme='dark'])` to detect docblocks' dark
1946
- theme from outside the shell, then style the portaled gallery (its
1947
- root has id="squisq-template-gallery-portal"). */
2388
+ theme from outside the shell, then bind the portaled dialog through
2389
+ Squisq's stable `data-squisq-template-gallery-portal` marker. Dialog
2390
+ and gallery ids are intentionally instance-specific. */
1948
2391
 
1949
2392
  .db-shell[data-theme='dark']
1950
2393
  .squisq-editor-shell[data-theme='dark']
@@ -1968,6 +2411,7 @@ html:has(.db-shell[data-theme='dark']) {
1968
2411
  --db-text-muted: #a89a7c;
1969
2412
  --db-danger: #f87171;
1970
2413
  --db-danger-bg: #1c1917;
2414
+ --db-text-on-danger: #1c1917;
1971
2415
  --db-shadow: rgba(0, 0, 0, 0.4);
1972
2416
  --db-accent: #c8b48f;
1973
2417
  --db-accent-hover: #dec79d;
@@ -1988,6 +2432,7 @@ html:has(.db-shell[data-theme='light']) {
1988
2432
  --db-text-muted: #6b614a;
1989
2433
  --db-danger: #b22b1b;
1990
2434
  --db-danger-bg: #fdf0ee;
2435
+ --db-text-on-danger: #ffffff;
1991
2436
  --db-shadow: rgba(40, 30, 15, 0.12);
1992
2437
  --db-accent: #7d6948;
1993
2438
  --db-accent-hover: #5e4f37;
@@ -2336,7 +2781,7 @@ html:has(.db-shell[data-theme='dark']:not([data-accent='brown'])) .squisq-toolti
2336
2781
  }
2337
2782
 
2338
2783
  html:has(.db-shell[data-theme='dark'])
2339
- #squisq-template-gallery-dialog.squisq-template-gallery-dialog[data-theme='dark'] {
2784
+ .squisq-template-gallery-dialog[data-theme='dark']:has([data-squisq-template-gallery-portal]) {
2340
2785
  --squisq-template-gallery-backdrop: var(--db-gallery-backdrop, rgba(18, 14, 9, 0.58));
2341
2786
  --squisq-template-gallery-panel-bg: var(--db-gallery-panel-bg, var(--db-bg));
2342
2787
  --squisq-template-gallery-panel-border: var(--db-border);
@@ -2390,7 +2835,7 @@ html:has(.db-shell[data-theme='dark'])
2390
2835
  }
2391
2836
 
2392
2837
  html:has(.db-shell[data-theme='light'])
2393
- #squisq-template-gallery-dialog.squisq-template-gallery-dialog[data-theme='light'] {
2838
+ .squisq-template-gallery-dialog[data-theme='light']:has([data-squisq-template-gallery-portal]) {
2394
2839
  --squisq-template-gallery-backdrop: var(--db-gallery-backdrop, rgba(42, 36, 25, 0.24));
2395
2840
  --squisq-template-gallery-panel-bg: var(--db-gallery-panel-bg, #fffdf7);
2396
2841
  --squisq-template-gallery-panel-border: var(--db-border);
@@ -2769,7 +3214,7 @@ html:has(.db-shell[data-theme='dark'])
2769
3214
  }
2770
3215
 
2771
3216
  .db-shell .squisq-props-badge {
2772
- transform: translateY(1px);
3217
+ transform: none;
2773
3218
  }
2774
3219
 
2775
3220
  .db-shell .squisq-template-badge-core::after {
@@ -2965,7 +3410,7 @@ html:has(.db-shell[data-theme='dark'])
2965
3410
 
2966
3411
  /* Status bar "✓ OK" indicator — squisq paints this in saturated emerald
2967
3412
  (#059669 light, #34d399 dark). Re-tone to the sage accent so the
2968
- parse-status indicator harmonizes with the rest of the chrome. */
3413
+ status indicator harmonizes with the rest of the chrome. */
2969
3414
  .db-shell .squisq-status-ok {
2970
3415
  color: var(--db-accent);
2971
3416
  }
@@ -2974,6 +3419,10 @@ html:has(.db-shell[data-theme='dark'])
2974
3419
  color: var(--db-accent-hover);
2975
3420
  }
2976
3421
 
3422
+ .db-autosave-pending {
3423
+ opacity: 0.62;
3424
+ }
3425
+
2977
3426
  /* Outline pane (left of the editor) — squisq paints a warm beige
2978
3427
  (#dcd8d0 light / dark slate in dark mode). Re-tone to `--db-gutter-bg`
2979
3428
  so it matches the inline-preview gutter on the right and reads as
@@ -3232,7 +3681,7 @@ html:has(.db-shell[data-theme='dark'])
3232
3681
  font-size: 13px;
3233
3682
  font-weight: 600;
3234
3683
  background: var(--db-accent);
3235
- color: var(--db-bg);
3684
+ color: var(--db-text-on-accent);
3236
3685
  border: none;
3237
3686
  border-radius: 6px;
3238
3687
  cursor: pointer;
@@ -3266,11 +3715,9 @@ html:has(.db-shell[data-theme='dark'])
3266
3715
 
3267
3716
  @keyframes db-welcome-gateway-in {
3268
3717
  from {
3269
- opacity: 0;
3270
3718
  transform: translate(-50%, 8px);
3271
3719
  }
3272
3720
  to {
3273
- opacity: 1;
3274
3721
  transform: translate(-50%, 0);
3275
3722
  }
3276
3723
  }
@@ -3336,7 +3783,7 @@ html:has(.db-shell[data-theme='dark'])
3336
3783
  }
3337
3784
 
3338
3785
  /* Browser PWA update notice. It is docked over the right side of Squisq's
3339
- status bar, while extra status-bar padding keeps the parse result visible.
3786
+ status bar, while extra status-bar padding keeps its contents visible.
3340
3787
  If the status bar is hidden, it becomes a compact floating badge so the
3341
3788
  waiting update remains reachable. */
3342
3789
  .db-shell-editor-area--has-update .squisq-status-bar {
@@ -3489,7 +3936,7 @@ html:has(.db-shell[data-theme='dark'])
3489
3936
  /* Dialog size modifiers (shared Dialog component) */
3490
3937
  .db-dialog--wide {
3491
3938
  width: 560px;
3492
- max-width: 94vw;
3939
+ max-width: 100%;
3493
3940
  }
3494
3941
 
3495
3942
  .db-dialog--full {
@@ -3536,6 +3983,19 @@ html:has(.db-shell[data-theme='dark'])
3536
3983
  cursor: default;
3537
3984
  }
3538
3985
 
3986
+ /* Destructive confirmation (delete, remove workspace). The foreground comes
3987
+ from a token rather than a literal because the two themes need opposite ink:
3988
+ light's danger is deep red and carries white at ~6.5:1, while dark's is a
3989
+ light red where white would fall to ~2.8:1 and fail WCAG AA. */
3990
+ .db-git-primary-btn--danger {
3991
+ background: var(--db-danger);
3992
+ color: var(--db-text-on-danger);
3993
+ }
3994
+
3995
+ .db-git-primary-btn--danger:hover:not(:disabled) {
3996
+ background: color-mix(in srgb, var(--db-danger) 85%, black);
3997
+ }
3998
+
3539
3999
  .db-git-secondary-btn {
3540
4000
  padding: 6px 14px;
3541
4001
  border: 1px solid var(--db-border-strong);
@@ -3642,10 +4102,18 @@ html:has(.db-shell[data-theme='dark'])
3642
4102
  cursor: pointer;
3643
4103
  }
3644
4104
 
3645
- .db-git-menu-item:hover:not(:disabled) {
4105
+ .db-git-menu-item:hover:not(:disabled),
4106
+ .db-git-menu-item:focus-visible {
3646
4107
  background: var(--db-bg-hover);
3647
4108
  }
3648
4109
 
4110
+ /* Items are arrow-reachable rather than tab stops, so the ring is the only
4111
+ cue to which one Enter will fire. */
4112
+ .db-git-menu-item:focus-visible {
4113
+ outline: 2px solid var(--db-focus);
4114
+ outline-offset: -2px;
4115
+ }
4116
+
3649
4117
  .db-git-menu-item:disabled {
3650
4118
  color: var(--db-text-placeholder);
3651
4119
  cursor: default;
@@ -3814,7 +4282,8 @@ button.db-git-file-row:hover {
3814
4282
  box-sizing: border-box;
3815
4283
  }
3816
4284
 
3817
- .db-git-form-error {
4285
+ .db-git-form-error,
4286
+ .db-export-error {
3818
4287
  margin: 8px 0 0;
3819
4288
  color: var(--db-danger);
3820
4289
  font-size: 12.5px;
@@ -3964,6 +4433,22 @@ button.db-git-file-row:hover {
3964
4433
  color: var(--db-text-muted);
3965
4434
  }
3966
4435
 
4436
+ @media (prefers-reduced-motion: reduce) {
4437
+ .db-workspace-picker-caret,
4438
+ .db-app-menu-caret,
4439
+ .db-ws-settings-btn,
4440
+ .db-shell-sidebar-resizer,
4441
+ .db-export-chip,
4442
+ .db-git-progress-bar > span {
4443
+ transition: none;
4444
+ }
4445
+
4446
+ .db-welcome-gateway,
4447
+ .db-save-toast {
4448
+ animation: none;
4449
+ }
4450
+ }
4451
+
3967
4452
  /* History dialog internals added by the expanded-row layout */
3968
4453
  .db-git-history-toggle {
3969
4454
  display: block;
@@ -4009,7 +4494,7 @@ button.db-git-file-row:hover {
4009
4494
  toggling the overlay chevron flips it with no JS. */
4010
4495
  @media (display-mode: window-controls-overlay) {
4011
4496
  .db-shell {
4012
- --db-wco-titlebar-height: 48px;
4497
+ --db-wco-titlebar-height: env(titlebar-area-height, 32px);
4013
4498
  }
4014
4499
 
4015
4500
  /* The first shell row replaces the native titlebar. Empty space can drag
@@ -4025,10 +4510,36 @@ button.db-git-file-row:hover {
4025
4510
  }
4026
4511
 
4027
4512
  .db-shell .db-shell-sidebar-header {
4513
+ padding-block: 0;
4028
4514
  padding-left: max(4px, calc(env(titlebar-area-x, 0px) + 4px));
4029
4515
  cursor: grab;
4030
4516
  }
4031
4517
 
4518
+ /* Keep the shell controls inside the compact native caption band. These
4519
+ overrides apply only to an installed app using Window Controls Overlay;
4520
+ the regular browser toolbar keeps its roomier metrics. */
4521
+ .db-shell .db-app-menu-btn,
4522
+ .db-shell .db-workspace-picker-btn {
4523
+ padding-block: 3px;
4524
+ }
4525
+
4526
+ .db-shell .squisq-toolbar-view-tab {
4527
+ padding-top: 4px;
4528
+ padding-bottom: 4px;
4529
+ }
4530
+
4531
+ .db-shell .squisq-use-mode-trigger {
4532
+ padding-bottom: 9px;
4533
+ }
4534
+
4535
+ .db-shell .squisq-toolbar-button[aria-label='Insert image'] {
4536
+ height: 28px;
4537
+ }
4538
+
4539
+ .db-shell .squisq-editor-header--image {
4540
+ padding-block: 0;
4541
+ }
4542
+
4032
4543
  /* Make the draggable header space beside the workspace gear discoverable,
4033
4544
  matching the Electron titlebar without introducing another control. */
4034
4545
  .db-shell .db-shell-sidebar-header::after {