@dodlhuat/basix 1.1.0 → 1.2.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 (274) hide show
  1. package/README.md +651 -482
  2. package/css/badge.scss +104 -0
  3. package/css/bottom-sheet.scss +192 -0
  4. package/css/breadcrumb.scss +158 -0
  5. package/css/context-menu.scss +182 -0
  6. package/css/editor.scss +628 -461
  7. package/css/form.scss +139 -0
  8. package/css/stepper.scss +212 -0
  9. package/css/style.css +1495 -70
  10. package/css/style.css.map +1 -1
  11. package/css/style.min.css +1 -1
  12. package/css/style.scss +7 -1
  13. package/css/typography.scss +194 -161
  14. package/js/bottom-sheet.js +173 -0
  15. package/js/bottom-sheet.ts +222 -0
  16. package/js/carousel.js +26 -13
  17. package/js/context-menu.js +212 -0
  18. package/js/context-menu.ts +252 -0
  19. package/js/editor.js +46 -32
  20. package/js/editor.ts +56 -37
  21. package/js/gallery.js +11 -10
  22. package/js/index.js +472 -374
  23. package/js/index.ts +116 -2
  24. package/js/push-menu.js +113 -113
  25. package/js/stepper.js +80 -0
  26. package/js/stepper.ts +104 -0
  27. package/js/timepicker.js +21 -8
  28. package/package.json +3 -2
  29. package/fonts/Outfit-VariableFont_wght.woff +0 -0
  30. package/fonts/material-icons.woff2 +0 -0
  31. package/icons/activity-outline.svg +0 -1
  32. package/icons/alert-circle-outline.svg +0 -1
  33. package/icons/alert-triangle-outline.svg +0 -1
  34. package/icons/archive-outline.svg +0 -1
  35. package/icons/arrow-back-outline.svg +0 -1
  36. package/icons/arrow-circle-down-outline.svg +0 -1
  37. package/icons/arrow-circle-left-outline.svg +0 -1
  38. package/icons/arrow-circle-right-outline.svg +0 -1
  39. package/icons/arrow-circle-up-outline.svg +0 -1
  40. package/icons/arrow-down-outline.svg +0 -1
  41. package/icons/arrow-downward-outline.svg +0 -1
  42. package/icons/arrow-forward-outline.svg +0 -1
  43. package/icons/arrow-ios-back-outline.svg +0 -1
  44. package/icons/arrow-ios-downward-outline.svg +0 -1
  45. package/icons/arrow-ios-forward-outline.svg +0 -1
  46. package/icons/arrow-ios-upward-outline.svg +0 -1
  47. package/icons/arrow-left-outline.svg +0 -1
  48. package/icons/arrow-right-outline.svg +0 -1
  49. package/icons/arrow-up-outline.svg +0 -1
  50. package/icons/arrow-upward-outline.svg +0 -1
  51. package/icons/arrowhead-down-outline.svg +0 -1
  52. package/icons/arrowhead-left-outline.svg +0 -1
  53. package/icons/arrowhead-right-outline.svg +0 -1
  54. package/icons/arrowhead-up-outline.svg +0 -1
  55. package/icons/at-outline.svg +0 -1
  56. package/icons/attach-2-outline.svg +0 -1
  57. package/icons/attach-outline.svg +0 -1
  58. package/icons/award-outline.svg +0 -1
  59. package/icons/backspace-outline.svg +0 -1
  60. package/icons/bar-chart-2-outline.svg +0 -1
  61. package/icons/bar-chart-outline.svg +0 -1
  62. package/icons/battery-outline.svg +0 -1
  63. package/icons/behance-outline.svg +0 -1
  64. package/icons/bell-off-outline.svg +0 -1
  65. package/icons/bell-outline.svg +0 -1
  66. package/icons/bluetooth-outline.svg +0 -1
  67. package/icons/book-open-outline.svg +0 -1
  68. package/icons/book-outline.svg +0 -1
  69. package/icons/bookmark-outline.svg +0 -1
  70. package/icons/briefcase-outline.svg +0 -1
  71. package/icons/browser-outline.svg +0 -1
  72. package/icons/brush-outline.svg +0 -1
  73. package/icons/bulb-outline.svg +0 -1
  74. package/icons/calendar-outline.svg +0 -1
  75. package/icons/camera-outline.svg +0 -1
  76. package/icons/car-outline.svg +0 -1
  77. package/icons/cast-outline.svg +0 -1
  78. package/icons/charging-outline.svg +0 -1
  79. package/icons/checkmark-circle-2-outline.svg +0 -1
  80. package/icons/checkmark-circle-outline.svg +0 -1
  81. package/icons/checkmark-outline.svg +0 -1
  82. package/icons/checkmark-square-2-outline.svg +0 -1
  83. package/icons/checkmark-square-outline.svg +0 -1
  84. package/icons/chevron-down-outline.svg +0 -1
  85. package/icons/chevron-left-outline.svg +0 -1
  86. package/icons/chevron-right-outline.svg +0 -1
  87. package/icons/chevron-up-outline.svg +0 -1
  88. package/icons/clipboard-outline.svg +0 -1
  89. package/icons/clock-outline.svg +0 -1
  90. package/icons/close-circle-outline.svg +0 -1
  91. package/icons/close-outline.svg +0 -1
  92. package/icons/close-square-outline.svg +0 -1
  93. package/icons/cloud-download-outline.svg +0 -1
  94. package/icons/cloud-upload-outline.svg +0 -1
  95. package/icons/code-download-outline.svg +0 -1
  96. package/icons/code-outline.svg +0 -1
  97. package/icons/collapse-outline.svg +0 -1
  98. package/icons/color-palette-outline.svg +0 -1
  99. package/icons/color-picker-outline.svg +0 -1
  100. package/icons/compass-outline.svg +0 -1
  101. package/icons/copy-outline.svg +0 -1
  102. package/icons/corner-down-left-outline.svg +0 -1
  103. package/icons/corner-down-right-outline.svg +0 -1
  104. package/icons/corner-left-down-outline.svg +0 -1
  105. package/icons/corner-left-up-outline.svg +0 -1
  106. package/icons/corner-right-down-outline.svg +0 -1
  107. package/icons/corner-right-up-outline.svg +0 -1
  108. package/icons/corner-up-left-outline.svg +0 -1
  109. package/icons/corner-up-right-outline.svg +0 -1
  110. package/icons/credit-card-outline.svg +0 -1
  111. package/icons/crop-outline.svg +0 -1
  112. package/icons/cube-outline.svg +0 -1
  113. package/icons/diagonal-arrow-left-down-outline.svg +0 -1
  114. package/icons/diagonal-arrow-left-up-outline.svg +0 -1
  115. package/icons/diagonal-arrow-right-down-outline.svg +0 -1
  116. package/icons/diagonal-arrow-right-up-outline.svg +0 -1
  117. package/icons/done-all-outline.svg +0 -1
  118. package/icons/download-outline.svg +0 -1
  119. package/icons/droplet-off-outline.svg +0 -1
  120. package/icons/droplet-outline.svg +0 -1
  121. package/icons/edit-2-outline.svg +0 -1
  122. package/icons/edit-outline.svg +0 -1
  123. package/icons/email-outline.svg +0 -1
  124. package/icons/expand-outline.svg +0 -1
  125. package/icons/external-link-outline.svg +0 -1
  126. package/icons/eye-off-2-outline.svg +0 -1
  127. package/icons/eye-off-outline.svg +0 -1
  128. package/icons/eye-outline.svg +0 -1
  129. package/icons/facebook-outline.svg +0 -1
  130. package/icons/file-add-outline.svg +0 -1
  131. package/icons/file-outline.svg +0 -1
  132. package/icons/file-remove-outline.svg +0 -1
  133. package/icons/file-text-outline.svg +0 -1
  134. package/icons/film-outline.svg +0 -1
  135. package/icons/flag-outline.svg +0 -1
  136. package/icons/flash-off-outline.svg +0 -1
  137. package/icons/flash-outline.svg +0 -1
  138. package/icons/flip-2-outline.svg +0 -1
  139. package/icons/flip-outline.svg +0 -1
  140. package/icons/folder-add-outline.svg +0 -1
  141. package/icons/folder-outline.svg +0 -1
  142. package/icons/folder-remove-outline.svg +0 -1
  143. package/icons/funnel-outline.svg +0 -1
  144. package/icons/gift-outline.svg +0 -1
  145. package/icons/github-outline.svg +0 -1
  146. package/icons/globe-2-outline.svg +0 -1
  147. package/icons/globe-outline.svg +0 -1
  148. package/icons/google-outline.svg +0 -1
  149. package/icons/grid-outline.svg +0 -1
  150. package/icons/hard-drive-outline.svg +0 -1
  151. package/icons/hash-outline.svg +0 -1
  152. package/icons/headphones-outline.svg +0 -1
  153. package/icons/heart-outline.svg +0 -1
  154. package/icons/home-outline.svg +0 -1
  155. package/icons/image-outline.svg +0 -1
  156. package/icons/inbox-outline.svg +0 -1
  157. package/icons/info-outline.svg +0 -1
  158. package/icons/keypad-outline.svg +0 -1
  159. package/icons/layers-outline.svg +0 -1
  160. package/icons/layout-outline.svg +0 -1
  161. package/icons/link-2-outline.svg +0 -1
  162. package/icons/link-outline.svg +0 -1
  163. package/icons/linkedin-outline.svg +0 -1
  164. package/icons/list-outline.svg +0 -1
  165. package/icons/loader-outline.svg +0 -1
  166. package/icons/lock-outline.svg +0 -1
  167. package/icons/log-in-outline.svg +0 -1
  168. package/icons/log-out-outline.svg +0 -1
  169. package/icons/map-outline.svg +0 -1
  170. package/icons/maximize-outline.svg +0 -1
  171. package/icons/menu-2-outline.svg +0 -1
  172. package/icons/menu-arrow-outline.svg +0 -1
  173. package/icons/menu-outline.svg +0 -1
  174. package/icons/message-circle-outline.svg +0 -1
  175. package/icons/message-square-outline.svg +0 -1
  176. package/icons/mic-off-outline.svg +0 -1
  177. package/icons/mic-outline.svg +0 -1
  178. package/icons/minimize-outline.svg +0 -1
  179. package/icons/minus-circle-outline.svg +0 -1
  180. package/icons/minus-outline.svg +0 -1
  181. package/icons/minus-square-outline.svg +0 -1
  182. package/icons/monitor-outline.svg +0 -1
  183. package/icons/moon-outline.svg +0 -1
  184. package/icons/more-horizontal-outline.svg +0 -1
  185. package/icons/more-vertical-outline.svg +0 -1
  186. package/icons/move-outline.svg +0 -1
  187. package/icons/music-outline.svg +0 -1
  188. package/icons/navigation-2-outline.svg +0 -1
  189. package/icons/navigation-outline.svg +0 -1
  190. package/icons/npm-outline.svg +0 -1
  191. package/icons/options-2-outline.svg +0 -1
  192. package/icons/options-outline.svg +0 -1
  193. package/icons/pantone-outline.svg +0 -1
  194. package/icons/paper-plane-outline.svg +0 -1
  195. package/icons/pause-circle-outline.svg +0 -1
  196. package/icons/people-outline.svg +0 -1
  197. package/icons/percent-outline.svg +0 -1
  198. package/icons/person-add-outline.svg +0 -1
  199. package/icons/person-delete-outline.svg +0 -1
  200. package/icons/person-done-outline.svg +0 -1
  201. package/icons/person-outline.svg +0 -1
  202. package/icons/person-remove-outline.svg +0 -1
  203. package/icons/phone-call-outline.svg +0 -1
  204. package/icons/phone-missed-outline.svg +0 -1
  205. package/icons/phone-off-outline.svg +0 -1
  206. package/icons/phone-outline.svg +0 -1
  207. package/icons/pie-chart-outline.svg +0 -1
  208. package/icons/pin-outline.svg +0 -1
  209. package/icons/play-circle-outline.svg +0 -1
  210. package/icons/plus-circle-outline.svg +0 -1
  211. package/icons/plus-outline.svg +0 -1
  212. package/icons/plus-square-outline.svg +0 -1
  213. package/icons/power-outline.svg +0 -1
  214. package/icons/pricetags-outline.svg +0 -1
  215. package/icons/printer-outline.svg +0 -1
  216. package/icons/question-mark-circle-outline.svg +0 -1
  217. package/icons/question-mark-outline.svg +0 -1
  218. package/icons/radio-button-off-outline.svg +0 -1
  219. package/icons/radio-button-on-outline.svg +0 -1
  220. package/icons/radio-outline.svg +0 -1
  221. package/icons/recording-outline.svg +0 -1
  222. package/icons/refresh-outline.svg +0 -1
  223. package/icons/repeat-outline.svg +0 -1
  224. package/icons/rewind-left-outline.svg +0 -1
  225. package/icons/rewind-right-outline.svg +0 -1
  226. package/icons/save-outline.svg +0 -1
  227. package/icons/scissors-outline.svg +0 -1
  228. package/icons/search-outline.svg +0 -1
  229. package/icons/settings-2-outline.svg +0 -1
  230. package/icons/settings-outline.svg +0 -1
  231. package/icons/shake-outline.svg +0 -1
  232. package/icons/share-outline.svg +0 -1
  233. package/icons/shield-off-outline.svg +0 -1
  234. package/icons/shield-outline.svg +0 -1
  235. package/icons/shopping-bag-outline.svg +0 -1
  236. package/icons/shopping-cart-outline.svg +0 -1
  237. package/icons/shuffle-2-outline.svg +0 -1
  238. package/icons/shuffle-outline.svg +0 -1
  239. package/icons/skip-back-outline.svg +0 -1
  240. package/icons/skip-forward-outline.svg +0 -1
  241. package/icons/slash-outline.svg +0 -1
  242. package/icons/smartphone-outline.svg +0 -1
  243. package/icons/smiling-face-outline.svg +0 -1
  244. package/icons/speaker-outline.svg +0 -1
  245. package/icons/square-outline.svg +0 -1
  246. package/icons/star-outline.svg +0 -1
  247. package/icons/stop-circle-outline.svg +0 -1
  248. package/icons/sun-outline.svg +0 -1
  249. package/icons/swap-outline.svg +0 -1
  250. package/icons/sync-outline.svg +0 -1
  251. package/icons/text-outline.svg +0 -1
  252. package/icons/thermometer-minus-outline.svg +0 -1
  253. package/icons/thermometer-outline.svg +0 -1
  254. package/icons/thermometer-plus-outline.svg +0 -1
  255. package/icons/toggle-left-outline.svg +0 -1
  256. package/icons/toggle-right-outline.svg +0 -1
  257. package/icons/trash-2-outline.svg +0 -1
  258. package/icons/trash-outline.svg +0 -1
  259. package/icons/trending-down-outline.svg +0 -1
  260. package/icons/trending-up-outline.svg +0 -1
  261. package/icons/tv-outline.svg +0 -1
  262. package/icons/twitter-outline.svg +0 -1
  263. package/icons/umbrella-outline.svg +0 -1
  264. package/icons/undo-outline.svg +0 -1
  265. package/icons/unlock-outline.svg +0 -1
  266. package/icons/upload-outline.svg +0 -1
  267. package/icons/video-off-outline.svg +0 -1
  268. package/icons/video-outline.svg +0 -1
  269. package/icons/volume-down-outline.svg +0 -1
  270. package/icons/volume-mute-outline.svg +0 -1
  271. package/icons/volume-off-outline.svg +0 -1
  272. package/icons/volume-up-outline.svg +0 -1
  273. package/icons/wifi-off-outline.svg +0 -1
  274. package/icons/wifi-outline.svg +0 -1
package/css/style.css CHANGED
@@ -249,6 +249,7 @@ code.code .code-content {
249
249
  @font-face {
250
250
  font-family: "Outfit";
251
251
  src: url("../fonts/Outfit-VariableFont_wght.woff2") format("woff2");
252
+ font-display: swap;
252
253
  }
253
254
  body {
254
255
  font-family: "Outfit", helvetica, arial, sans-serif;
@@ -264,13 +265,14 @@ p, li, td, th, div {
264
265
  }
265
266
 
266
267
  p {
267
- padding-bottom: 0.5rem;
268
+ margin-bottom: 0.5rem;
268
269
  }
269
270
 
270
271
  code {
271
272
  font-family: "Courier New", Courier, monospace;
272
273
  font-size: 0.875em;
273
274
  background: var(--secondary-background);
275
+ border: 1px solid var(--divider);
274
276
  padding: 0.15em 0.4em;
275
277
  border-radius: 0.2rem;
276
278
  }
@@ -281,6 +283,7 @@ pre code {
281
283
  overflow-x: auto;
282
284
  border-radius: 0.4rem;
283
285
  line-height: 1.5;
286
+ border: none;
284
287
  }
285
288
 
286
289
  strong {
@@ -295,9 +298,7 @@ h1, .h1,
295
298
  h2, .h2,
296
299
  h3, .h3,
297
300
  h4, .h4,
298
- h5 {
299
- margin: 0.5rem 0 0.6666666667rem 0;
300
- line-height: 1.15;
301
+ h5, .h5 {
301
302
  font-weight: 700;
302
303
  color: var(--primary-text);
303
304
  letter-spacing: -0.02em;
@@ -307,20 +308,36 @@ h1, .h1 {
307
308
  font-size: 2rem;
308
309
  font-weight: 800;
309
310
  letter-spacing: -0.03em;
311
+ line-height: 1.1;
312
+ margin: 1.5rem 0 0.6666666667rem 0;
310
313
  }
311
314
 
312
315
  h2, .h2 {
313
316
  font-size: 1.625rem;
314
317
  font-weight: 750;
318
+ line-height: 1.12;
319
+ margin: 1.5rem 0 0.6666666667rem 0;
315
320
  }
316
321
 
317
322
  h3, .h3 {
318
323
  font-size: 1.375rem;
324
+ line-height: 1.2;
325
+ margin: 1rem 0 0.5rem 0;
319
326
  }
320
327
 
321
328
  h4, .h4 {
322
329
  font-size: 1.125rem;
323
330
  letter-spacing: -0.01em;
331
+ line-height: 1.25;
332
+ margin: 1rem 0 0.5rem 0;
333
+ }
334
+
335
+ h5, .h5 {
336
+ font-size: 1rem;
337
+ font-weight: 600;
338
+ letter-spacing: 0;
339
+ line-height: 1.3;
340
+ margin: 0.5rem 0 0.25rem 0;
324
341
  }
325
342
 
326
343
  small, .text-small {
@@ -347,8 +364,24 @@ small, .text-small {
347
364
  color: var(--secondary-text);
348
365
  }
349
366
 
367
+ blockquote {
368
+ border-left: 3px solid var(--divider);
369
+ padding: 0.5rem 1rem;
370
+ margin-block: 0.5rem;
371
+ color: var(--secondary-text);
372
+ font-style: italic;
373
+ }
374
+
375
+ mark {
376
+ background-color: color-mix(in srgb, var(--accent-color) 18%, transparent);
377
+ color: var(--primary-text);
378
+ border-radius: 0.1rem;
379
+ padding: 0 0.2em;
380
+ }
381
+
350
382
  ul, ol {
351
- list-style-position: inside;
383
+ list-style-position: outside;
384
+ padding-left: 1.5rem;
352
385
  margin-bottom: 0.6666666667rem;
353
386
  }
354
387
 
@@ -942,6 +975,120 @@ select {
942
975
  }
943
976
  }
944
977
 
978
+ .form-group {
979
+ display: flex;
980
+ flex-direction: column;
981
+ gap: 0.3rem;
982
+ }
983
+ .form-group label {
984
+ font-size: 0.8125rem;
985
+ font-weight: 500;
986
+ color: var(--primary-text);
987
+ letter-spacing: 0.01em;
988
+ }
989
+ .form-group .form-hint {
990
+ display: flex;
991
+ align-items: flex-start;
992
+ gap: 0.3rem;
993
+ font-size: 0.75rem;
994
+ line-height: 1.45;
995
+ color: var(--secondary-text);
996
+ margin-top: 0.125rem;
997
+ }
998
+ .form-group .form-hint::before {
999
+ content: "";
1000
+ display: block;
1001
+ width: 4px;
1002
+ height: 4px;
1003
+ border-radius: 50%;
1004
+ background: currentColor;
1005
+ flex-shrink: 0;
1006
+ margin-top: 0.38em;
1007
+ opacity: 0.55;
1008
+ }
1009
+ .form-group.error input, .form-group.error textarea, .form-group.error select {
1010
+ border-color: var(--error);
1011
+ background-color: color-mix(in srgb, var(--error) 4%, var(--background));
1012
+ }
1013
+ .form-group.error input:focus, .form-group.error textarea:focus, .form-group.error select:focus {
1014
+ border-color: var(--error);
1015
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--error) 15%, transparent);
1016
+ }
1017
+ .form-group.error .form-hint {
1018
+ color: var(--error);
1019
+ }
1020
+ .form-group.error .form-hint::before {
1021
+ opacity: 1;
1022
+ }
1023
+ .form-group.success input, .form-group.success textarea, .form-group.success select {
1024
+ border-color: var(--success);
1025
+ }
1026
+ .form-group.success input:focus, .form-group.success textarea:focus, .form-group.success select:focus {
1027
+ border-color: var(--success);
1028
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--success) 15%, transparent);
1029
+ }
1030
+ .form-group.success .form-hint {
1031
+ color: var(--success);
1032
+ }
1033
+ .form-group.success .form-hint::before {
1034
+ opacity: 1;
1035
+ }
1036
+
1037
+ .input-group {
1038
+ display: flex;
1039
+ }
1040
+ .input-group input {
1041
+ flex: 1;
1042
+ min-width: 0;
1043
+ }
1044
+ .input-group .input-addon {
1045
+ display: flex;
1046
+ align-items: center;
1047
+ padding: 0 0.5rem;
1048
+ background-color: var(--secondary-background);
1049
+ border: 1px solid var(--divider);
1050
+ color: var(--secondary-text);
1051
+ font-size: 1rem;
1052
+ white-space: nowrap;
1053
+ box-shadow: 0 1px 2px rgba(56, 65, 74, 0.15);
1054
+ }
1055
+ .input-group .input-addon:first-child {
1056
+ border-right: none;
1057
+ border-radius: 0.2rem 0 0 0.2rem;
1058
+ }
1059
+ .input-group .input-addon:first-child + input {
1060
+ border-top-left-radius: 0;
1061
+ border-bottom-left-radius: 0;
1062
+ }
1063
+ .input-group .input-addon:last-child {
1064
+ border-left: none;
1065
+ border-radius: 0 0.2rem 0.2rem 0;
1066
+ }
1067
+ .input-group input:not(:last-child) {
1068
+ border-right: none;
1069
+ border-top-right-radius: 0;
1070
+ border-bottom-right-radius: 0;
1071
+ }
1072
+
1073
+ input[readonly], textarea[readonly] {
1074
+ background-color: var(--secondary-background);
1075
+ color: var(--secondary-text);
1076
+ cursor: default;
1077
+ box-shadow: none;
1078
+ }
1079
+
1080
+ input.input-sm, textarea.input-sm {
1081
+ min-height: 1.6rem;
1082
+ font-size: 0.875rem;
1083
+ padding: 0.25rem 0.5rem;
1084
+ }
1085
+
1086
+ input.input-lg, textarea.input-lg {
1087
+ min-height: 2.8rem;
1088
+ font-size: 1.125rem;
1089
+ padding: 0.6rem 0.5rem;
1090
+ }
1091
+
945
1092
  @font-face {
946
1093
  font-family: "Material Symbols Outlined 24pt";
947
1094
  src: url("../fonts/MaterialSymbolsOutlined.woff2") format("woff2");
@@ -2231,6 +2378,131 @@ nav.pushed {
2231
2378
  border-radius: 0.2rem;
2232
2379
  }
2233
2380
 
2381
+ .breadcrumb ol {
2382
+ display: flex;
2383
+ align-items: center;
2384
+ flex-wrap: wrap;
2385
+ row-gap: 0.25rem;
2386
+ list-style: none;
2387
+ margin: 0;
2388
+ padding: 0;
2389
+ }
2390
+ .breadcrumb li {
2391
+ display: flex;
2392
+ align-items: center;
2393
+ min-width: 0;
2394
+ }
2395
+ .breadcrumb li + li::before {
2396
+ content: "\e409";
2397
+ font-family: "Material Symbols Outlined 24pt";
2398
+ font-size: 1.125rem;
2399
+ line-height: 1;
2400
+ color: var(--divider);
2401
+ flex-shrink: 0;
2402
+ user-select: none;
2403
+ pointer-events: none;
2404
+ }
2405
+ .breadcrumb li a {
2406
+ display: flex;
2407
+ align-items: center;
2408
+ gap: 0.3rem;
2409
+ font-size: 0.8125rem;
2410
+ font-weight: 450;
2411
+ color: var(--secondary-text);
2412
+ text-decoration: none;
2413
+ padding: 0.25rem 0.375rem;
2414
+ border-radius: 0.2rem;
2415
+ white-space: nowrap;
2416
+ transition: color 0.15s ease, background 0.15s ease;
2417
+ }
2418
+ .breadcrumb li a .icon {
2419
+ font-size: 1rem;
2420
+ }
2421
+ .breadcrumb li a:hover {
2422
+ color: var(--primary-text);
2423
+ background: var(--secondary-background);
2424
+ }
2425
+ .breadcrumb li a:focus-visible {
2426
+ outline: 2px solid var(--accent-color);
2427
+ outline-offset: -1px;
2428
+ border-radius: 0.2rem;
2429
+ }
2430
+ .breadcrumb li[aria-current=page] > span {
2431
+ display: block;
2432
+ font-size: 0.8125rem;
2433
+ font-weight: 550;
2434
+ color: var(--primary-text);
2435
+ padding: 0.25rem 0.375rem;
2436
+ white-space: nowrap;
2437
+ overflow: hidden;
2438
+ text-overflow: ellipsis;
2439
+ max-width: 28ch;
2440
+ }
2441
+ @media (max-width: 600px) {
2442
+ .breadcrumb--collapse li:not(:nth-last-child(-n+2)) {
2443
+ display: none;
2444
+ }
2445
+ .breadcrumb--collapse li:nth-last-child(2):not(:first-child)::before {
2446
+ content: "···";
2447
+ font-family: inherit;
2448
+ font-size: 0.875rem;
2449
+ letter-spacing: 0.04em;
2450
+ color: var(--divider);
2451
+ padding: 0 0.125rem;
2452
+ }
2453
+ }
2454
+
2455
+ .page-header {
2456
+ padding-block: 1.25rem 1rem;
2457
+ }
2458
+ .page-header .breadcrumb {
2459
+ margin-bottom: 0.5rem;
2460
+ }
2461
+ .page-header__title-row {
2462
+ display: flex;
2463
+ align-items: flex-start;
2464
+ gap: 1rem;
2465
+ }
2466
+ .page-header__title-row h1, .page-header__title-row h2, .page-header__title-row h3, .page-header__title-row h4,
2467
+ .page-header__title-row .h1, .page-header__title-row .h2, .page-header__title-row .h3, .page-header__title-row .h4 {
2468
+ margin: 0;
2469
+ flex: 1;
2470
+ min-width: 0;
2471
+ }
2472
+ .page-header__actions {
2473
+ display: flex;
2474
+ align-items: center;
2475
+ gap: 0.5rem;
2476
+ flex-shrink: 0;
2477
+ padding-top: 0.3rem;
2478
+ }
2479
+ .page-header__description {
2480
+ margin: 0.375rem 0 0;
2481
+ padding-bottom: 0;
2482
+ font-size: 0.875rem;
2483
+ line-height: 1.55;
2484
+ color: var(--secondary-text);
2485
+ }
2486
+ .page-header--bordered {
2487
+ border-bottom: 1px solid var(--divider);
2488
+ padding-bottom: 1.25rem;
2489
+ margin-bottom: 1.5rem;
2490
+ }
2491
+ @media (max-width: 540px) {
2492
+ .page-header__title-row {
2493
+ flex-wrap: wrap;
2494
+ }
2495
+ .page-header__actions {
2496
+ width: 100%;
2497
+ padding-top: 0.25rem;
2498
+ }
2499
+ .page-header__actions button,
2500
+ .page-header__actions .button {
2501
+ flex: 1;
2502
+ justify-content: center;
2503
+ }
2504
+ }
2505
+
2234
2506
  .chips .chip {
2235
2507
  margin: 0 0.25rem 0.2rem 0;
2236
2508
  display: inline-block;
@@ -2272,85 +2544,360 @@ nav.pushed {
2272
2544
  position: relative;
2273
2545
  }
2274
2546
 
2275
- ul.tree {
2276
- list-style: none;
2277
- }
2278
- ul.tree li {
2279
- list-style: none;
2280
- }
2281
-
2282
- .tree-node {
2283
- position: relative;
2284
- margin: 0.25rem 0;
2285
- }
2286
-
2287
- .tree-item {
2288
- position: relative;
2289
- display: flex;
2547
+ .badge {
2548
+ display: inline-flex;
2290
2549
  align-items: center;
2291
- min-height: 3rem;
2292
- padding: 0.875rem 1rem;
2293
- cursor: pointer;
2294
- user-select: none;
2295
- overflow: hidden;
2550
+ gap: 0.3rem;
2551
+ padding: 0.15rem 0.5rem;
2552
+ border-radius: 1.6rem;
2553
+ font-size: 0.75rem;
2554
+ font-weight: 500;
2555
+ line-height: 1.4;
2556
+ letter-spacing: 0.01em;
2557
+ white-space: nowrap;
2558
+ vertical-align: middle;
2296
2559
  border: 1px solid transparent;
2297
- border-radius: 0.8rem;
2298
- transition: background 0.2s ease, border-color 0.2s ease;
2299
- -webkit-tap-highlight-color: transparent;
2300
- }
2301
- .tree-item::before {
2302
- content: "";
2303
- position: absolute;
2304
- inset: 0;
2305
2560
  background: var(--secondary-background);
2306
- opacity: 0;
2307
- transition: opacity 0.2s ease;
2561
+ color: var(--secondary-text);
2308
2562
  }
2309
- .tree-item:hover:not(.selected)::before {
2310
- opacity: 1;
2563
+ .badge-info {
2564
+ background: color-mix(in srgb, var(--accent-color) 12%, var(--background));
2565
+ color: var(--accent-color);
2566
+ border-color: color-mix(in srgb, var(--accent-color) 20%, transparent);
2311
2567
  }
2312
- .tree-item.selected {
2568
+ .badge-success {
2569
+ background: color-mix(in srgb, var(--success) 12%, var(--background));
2570
+ color: var(--success);
2571
+ border-color: color-mix(in srgb, var(--success) 20%, transparent);
2572
+ }
2573
+ .badge-warning {
2574
+ background: color-mix(in srgb, var(--warning) 12%, var(--background));
2575
+ color: var(--warning);
2576
+ border-color: color-mix(in srgb, var(--warning) 20%, transparent);
2577
+ }
2578
+ .badge-error {
2579
+ background: color-mix(in srgb, var(--error) 12%, var(--background));
2580
+ color: var(--error);
2581
+ border-color: color-mix(in srgb, var(--error) 20%, transparent);
2582
+ }
2583
+ .badge-solid.badge-info {
2313
2584
  background: var(--accent-color);
2314
- border-color: var(--accent-color);
2585
+ color: #fff;
2586
+ border-color: transparent;
2315
2587
  }
2316
- .tree-item.selected .tree-label {
2317
- color: var(--accent-color-text);
2588
+ .badge-solid.badge-success {
2589
+ background: var(--success);
2590
+ color: #fff;
2591
+ border-color: transparent;
2318
2592
  }
2319
- .tree-item.selected .tree-icon svg {
2320
- stroke: var(--accent-color-text);
2593
+ .badge-solid.badge-warning {
2594
+ background: var(--warning);
2595
+ color: #fff;
2596
+ border-color: transparent;
2321
2597
  }
2322
- .tree-item.expanded > .tree-icon svg.chevron {
2323
- transform: rotate(90deg);
2598
+ .badge-solid.badge-error {
2599
+ background: var(--error);
2600
+ color: #fff;
2601
+ border-color: transparent;
2324
2602
  }
2325
- .tree-item.file .tree-label {
2603
+ .badge-outline {
2604
+ background: transparent;
2605
+ border-color: var(--divider);
2326
2606
  color: var(--secondary-text);
2327
- font-weight: 400;
2328
2607
  }
2329
-
2330
- .tree-icon {
2331
- position: relative;
2332
- z-index: 1;
2333
- width: 24px;
2334
- height: 24px;
2335
- margin-right: 0.75rem;
2336
- display: flex;
2337
- align-items: center;
2338
- justify-content: center;
2339
- flex-shrink: 0;
2608
+ .badge-outline.badge-info {
2609
+ border-color: var(--accent-color);
2610
+ color: var(--accent-color);
2340
2611
  }
2341
- .tree-icon svg {
2342
- width: 100%;
2343
- height: 100%;
2344
- stroke: var(--primary-text);
2345
- stroke-width: 2;
2346
- fill: none;
2347
- transition: transform 0.3s cubic-bezier(0.16, 1, 0.3, 1);
2612
+ .badge-outline.badge-success {
2613
+ border-color: var(--success);
2614
+ color: var(--success);
2348
2615
  }
2349
-
2350
- .tree-label {
2351
- position: relative;
2352
- z-index: 1;
2353
- flex: 1;
2616
+ .badge-outline.badge-warning {
2617
+ border-color: var(--warning);
2618
+ color: var(--warning);
2619
+ }
2620
+ .badge-outline.badge-error {
2621
+ border-color: var(--error);
2622
+ color: var(--error);
2623
+ }
2624
+ .badge-sm {
2625
+ padding: 0.1rem 0.35rem;
2626
+ font-size: 0.6875rem;
2627
+ }
2628
+ .badge-lg {
2629
+ padding: 0.25rem 0.65rem;
2630
+ font-size: 0.875rem;
2631
+ }
2632
+ .badge-dot {
2633
+ width: 0.5rem;
2634
+ height: 0.5rem;
2635
+ padding: 0;
2636
+ border-radius: 50%;
2637
+ background: var(--divider);
2638
+ border: none;
2639
+ }
2640
+ .badge-dot.badge-info {
2641
+ background: var(--accent-color);
2642
+ }
2643
+ .badge-dot.badge-success {
2644
+ background: var(--success);
2645
+ }
2646
+ .badge-dot.badge-warning {
2647
+ background: var(--warning);
2648
+ }
2649
+ .badge-dot.badge-error {
2650
+ background: var(--error);
2651
+ }
2652
+
2653
+ @keyframes stepper-pulse {
2654
+ 0% {
2655
+ box-shadow: 0 0 0 0 color-mix(in srgb, var(--accent-color) 35%, transparent);
2656
+ }
2657
+ 65% {
2658
+ box-shadow: 0 0 0 5px transparent;
2659
+ }
2660
+ 100% {
2661
+ box-shadow: 0 0 0 0 transparent;
2662
+ }
2663
+ }
2664
+ .stepper {
2665
+ display: flex;
2666
+ align-items: flex-start;
2667
+ }
2668
+
2669
+ .stepper-step {
2670
+ display: flex;
2671
+ flex-direction: column;
2672
+ align-items: center;
2673
+ gap: 0.4rem;
2674
+ flex-shrink: 0;
2675
+ }
2676
+
2677
+ .stepper-indicator {
2678
+ width: 2rem;
2679
+ height: 2rem;
2680
+ border-radius: 50%;
2681
+ display: flex;
2682
+ align-items: center;
2683
+ justify-content: center;
2684
+ flex-shrink: 0;
2685
+ font-size: 0.8125rem;
2686
+ font-weight: 600;
2687
+ line-height: 1;
2688
+ border: 2px solid var(--divider);
2689
+ background: var(--background);
2690
+ color: var(--secondary-text);
2691
+ transition: background 0.25s ease, border-color 0.25s ease, color 0.25s ease;
2692
+ position: relative;
2693
+ z-index: 1;
2694
+ }
2695
+ .stepper-indicator .icon-svg {
2696
+ width: 1rem;
2697
+ height: 1rem;
2698
+ }
2699
+
2700
+ .stepper-label {
2701
+ display: flex;
2702
+ flex-direction: column;
2703
+ align-items: center;
2704
+ text-align: center;
2705
+ gap: 0.125rem;
2706
+ }
2707
+
2708
+ .stepper-title {
2709
+ font-size: 0.8125rem;
2710
+ font-weight: 500;
2711
+ color: var(--secondary-text);
2712
+ transition: color 0.2s ease;
2713
+ white-space: nowrap;
2714
+ }
2715
+
2716
+ .stepper-desc {
2717
+ font-size: 0.6875rem;
2718
+ color: var(--secondary-text);
2719
+ opacity: 0.6;
2720
+ white-space: nowrap;
2721
+ }
2722
+
2723
+ .stepper-connector {
2724
+ flex: 1;
2725
+ height: 2px;
2726
+ margin-top: calc(2rem / 2 - 2px / 2);
2727
+ min-width: 1rem;
2728
+ background: var(--divider);
2729
+ position: relative;
2730
+ overflow: hidden;
2731
+ }
2732
+ .stepper-connector::after {
2733
+ content: "";
2734
+ position: absolute;
2735
+ inset: 0;
2736
+ background: var(--accent-color);
2737
+ transform: scaleX(0);
2738
+ transform-origin: left;
2739
+ transition: transform 0.38s cubic-bezier(0.4, 0, 0.2, 1);
2740
+ }
2741
+ .stepper-connector.completed::after {
2742
+ transform: scaleX(1);
2743
+ }
2744
+
2745
+ .stepper-step.active .stepper-indicator {
2746
+ border-color: var(--accent-color);
2747
+ background: color-mix(in srgb, var(--accent-color) 10%, var(--background));
2748
+ color: var(--accent-color);
2749
+ animation: stepper-pulse 2.4s ease-out infinite;
2750
+ }
2751
+ .stepper-step.active .stepper-title {
2752
+ color: var(--accent-color);
2753
+ font-weight: 600;
2754
+ }
2755
+ .stepper-step.completed .stepper-indicator {
2756
+ border-color: var(--accent-color);
2757
+ background: var(--accent-color);
2758
+ color: #fff;
2759
+ }
2760
+ .stepper-step.completed .stepper-title {
2761
+ color: var(--primary-text);
2762
+ }
2763
+ .stepper-step.error .stepper-indicator {
2764
+ border-color: var(--error);
2765
+ background: color-mix(in srgb, var(--error) 10%, var(--background));
2766
+ color: var(--error);
2767
+ animation: none;
2768
+ }
2769
+ .stepper-step.error .stepper-title {
2770
+ color: var(--error);
2771
+ }
2772
+
2773
+ .stepper-vertical {
2774
+ flex-direction: column;
2775
+ }
2776
+ .stepper-vertical .stepper-step {
2777
+ flex-direction: row;
2778
+ align-items: flex-start;
2779
+ gap: 1rem;
2780
+ }
2781
+ .stepper-vertical .stepper-label {
2782
+ align-items: flex-start;
2783
+ text-align: left;
2784
+ padding-top: calc((2rem - 1.15rem) / 2);
2785
+ }
2786
+ .stepper-vertical .stepper-connector {
2787
+ width: 2px;
2788
+ height: auto;
2789
+ min-height: 1.5rem;
2790
+ min-width: unset;
2791
+ flex: unset;
2792
+ margin-top: 0;
2793
+ margin-left: calc(2rem / 2 - 2px / 2);
2794
+ align-self: flex-start;
2795
+ }
2796
+ .stepper-vertical .stepper-connector::after {
2797
+ transform: scaleY(0);
2798
+ transform-origin: top;
2799
+ }
2800
+ .stepper-vertical .stepper-connector.completed::after {
2801
+ transform: scaleY(1);
2802
+ }
2803
+
2804
+ .stepper-clickable .stepper-step.completed, .stepper-clickable .stepper-step.active {
2805
+ cursor: pointer;
2806
+ }
2807
+ .stepper-clickable .stepper-step.completed .stepper-indicator, .stepper-clickable .stepper-step.active .stepper-indicator {
2808
+ transition: background 0.25s ease, border-color 0.25s ease, color 0.25s ease, transform 0.15s ease;
2809
+ }
2810
+ .stepper-clickable .stepper-step.completed:hover .stepper-indicator, .stepper-clickable .stepper-step.active:hover .stepper-indicator {
2811
+ transform: scale(1.1);
2812
+ }
2813
+
2814
+ @media (max-width: 480px) {
2815
+ .stepper:not(.stepper-vertical) .stepper-label {
2816
+ display: none;
2817
+ }
2818
+ .stepper:not(.stepper-vertical) .stepper-connector {
2819
+ min-width: 0.5rem;
2820
+ }
2821
+ }
2822
+ ul.tree {
2823
+ list-style: none;
2824
+ }
2825
+ ul.tree li {
2826
+ list-style: none;
2827
+ }
2828
+
2829
+ .tree-node {
2830
+ position: relative;
2831
+ margin: 0.25rem 0;
2832
+ }
2833
+
2834
+ .tree-item {
2835
+ position: relative;
2836
+ display: flex;
2837
+ align-items: center;
2838
+ min-height: 3rem;
2839
+ padding: 0.875rem 1rem;
2840
+ cursor: pointer;
2841
+ user-select: none;
2842
+ overflow: hidden;
2843
+ border: 1px solid transparent;
2844
+ border-radius: 0.8rem;
2845
+ transition: background 0.2s ease, border-color 0.2s ease;
2846
+ -webkit-tap-highlight-color: transparent;
2847
+ }
2848
+ .tree-item::before {
2849
+ content: "";
2850
+ position: absolute;
2851
+ inset: 0;
2852
+ background: var(--secondary-background);
2853
+ opacity: 0;
2854
+ transition: opacity 0.2s ease;
2855
+ }
2856
+ .tree-item:hover:not(.selected)::before {
2857
+ opacity: 1;
2858
+ }
2859
+ .tree-item.selected {
2860
+ background: var(--accent-color);
2861
+ border-color: var(--accent-color);
2862
+ }
2863
+ .tree-item.selected .tree-label {
2864
+ color: var(--accent-color-text);
2865
+ }
2866
+ .tree-item.selected .tree-icon svg {
2867
+ stroke: var(--accent-color-text);
2868
+ }
2869
+ .tree-item.expanded > .tree-icon svg.chevron {
2870
+ transform: rotate(90deg);
2871
+ }
2872
+ .tree-item.file .tree-label {
2873
+ color: var(--secondary-text);
2874
+ font-weight: 400;
2875
+ }
2876
+
2877
+ .tree-icon {
2878
+ position: relative;
2879
+ z-index: 1;
2880
+ width: 24px;
2881
+ height: 24px;
2882
+ margin-right: 0.75rem;
2883
+ display: flex;
2884
+ align-items: center;
2885
+ justify-content: center;
2886
+ flex-shrink: 0;
2887
+ }
2888
+ .tree-icon svg {
2889
+ width: 100%;
2890
+ height: 100%;
2891
+ stroke: var(--primary-text);
2892
+ stroke-width: 2;
2893
+ fill: none;
2894
+ transition: transform 0.3s cubic-bezier(0.16, 1, 0.3, 1);
2895
+ }
2896
+
2897
+ .tree-label {
2898
+ position: relative;
2899
+ z-index: 1;
2900
+ flex: 1;
2354
2901
  font-family: "JetBrains Mono", ui-monospace, "Cascadia Code", "Fira Code", monospace;
2355
2902
  font-size: 0.9375rem;
2356
2903
  font-weight: 500;
@@ -4348,4 +4895,882 @@ body {
4348
4895
  cursor: not-allowed;
4349
4896
  }
4350
4897
 
4898
+ /* ── Editor Component ───────────────────────────────────────────────── */
4899
+ .editor {
4900
+ background: var(--secondary-background);
4901
+ border: 1px solid var(--divider);
4902
+ border-radius: 0.4rem;
4903
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06), 0 1px 2px rgba(0, 0, 0, 0.04);
4904
+ display: flex;
4905
+ flex-direction: column;
4906
+ overflow: hidden;
4907
+ }
4908
+
4909
+ /* ── Toolbar ───────────────────────────────────────────────────────── */
4910
+ .editor-toolbar {
4911
+ display: flex;
4912
+ align-items: center;
4913
+ gap: 0.25rem;
4914
+ padding: 0.375rem 0.5rem;
4915
+ border-bottom: 1px solid var(--divider);
4916
+ background: var(--secondary-background);
4917
+ overflow-x: auto;
4918
+ -webkit-overflow-scrolling: touch;
4919
+ scrollbar-width: none;
4920
+ }
4921
+ .editor-toolbar::-webkit-scrollbar {
4922
+ display: none;
4923
+ }
4924
+
4925
+ /* SVG icon sizing */
4926
+ .editor-toolbar .icon-svg {
4927
+ fill: currentColor;
4928
+ display: block;
4929
+ width: 1.125rem;
4930
+ height: 1.125rem;
4931
+ pointer-events: none;
4932
+ flex-shrink: 0;
4933
+ }
4934
+
4935
+ /* Button base */
4936
+ .editor-toolbar button {
4937
+ display: inline-flex;
4938
+ align-items: center;
4939
+ justify-content: center;
4940
+ width: 2rem;
4941
+ height: 2rem;
4942
+ padding: 0;
4943
+ border: none;
4944
+ border-radius: 0.24rem;
4945
+ background: transparent;
4946
+ color: var(--secondary-text);
4947
+ cursor: pointer;
4948
+ font-size: 0.75rem;
4949
+ font-weight: 800;
4950
+ letter-spacing: -0.03em;
4951
+ transition: background 0.1s ease, color 0.1s ease;
4952
+ flex-shrink: 0;
4953
+ position: relative;
4954
+ }
4955
+ .editor-toolbar button:hover {
4956
+ background: var(--divider);
4957
+ color: var(--primary-text);
4958
+ }
4959
+ .editor-toolbar button:active {
4960
+ opacity: 0.75;
4961
+ }
4962
+ .editor-toolbar button.active {
4963
+ background: color-mix(in srgb, var(--accent-color) 12%, transparent);
4964
+ color: var(--accent-color);
4965
+ }
4966
+ .editor-toolbar button.active::after {
4967
+ content: "";
4968
+ position: absolute;
4969
+ bottom: 2px;
4970
+ left: 50%;
4971
+ translate: -50% 0;
4972
+ width: 3px;
4973
+ height: 3px;
4974
+ border-radius: 50%;
4975
+ background: var(--accent-color);
4976
+ }
4977
+
4978
+ /* Button clusters — pill-shaped groups */
4979
+ .toolbar-group {
4980
+ display: flex;
4981
+ align-items: center;
4982
+ gap: 1px;
4983
+ background: color-mix(in srgb, var(--divider) 55%, transparent);
4984
+ border-radius: 0.3rem;
4985
+ padding: 2px;
4986
+ flex-shrink: 0;
4987
+ }
4988
+ .toolbar-group button {
4989
+ border-radius: 0.18rem;
4990
+ }
4991
+
4992
+ /* Separators: invisible spacers — visual grouping comes from .toolbar-group */
4993
+ .toolbar-separator {
4994
+ width: 0.35rem;
4995
+ flex-shrink: 0;
4996
+ }
4997
+
4998
+ /* Right-pinned actions */
4999
+ .toolbar-end {
5000
+ display: flex;
5001
+ align-items: center;
5002
+ gap: 3px;
5003
+ margin-left: auto;
5004
+ padding-left: 0.5rem;
5005
+ flex-shrink: 0;
5006
+ }
5007
+ .toolbar-end:empty {
5008
+ display: none;
5009
+ }
5010
+
5011
+ /* Variant button states — scoped to avoid !important */
5012
+ .editor-toolbar button.toolbar-btn-accent {
5013
+ background: color-mix(in srgb, var(--accent-color) 10%, transparent);
5014
+ color: var(--accent-color);
5015
+ }
5016
+ .editor-toolbar button.toolbar-btn-accent:hover {
5017
+ background: color-mix(in srgb, var(--accent-color) 20%, transparent);
5018
+ }
5019
+
5020
+ .editor-toolbar button.toolbar-btn-danger:hover {
5021
+ background: color-mix(in srgb, var(--error) 12%, transparent);
5022
+ color: var(--error);
5023
+ }
5024
+
5025
+ /* ── Editor Body ───────────────────────────────────────────────────── */
5026
+ .editor-body {
5027
+ display: flex;
5028
+ flex: 1;
5029
+ min-height: 0;
5030
+ }
5031
+
5032
+ .editor-main {
5033
+ flex: 1;
5034
+ display: flex;
5035
+ flex-direction: column;
5036
+ min-width: 0;
5037
+ }
5038
+
5039
+ .editable {
5040
+ flex: 1;
5041
+ padding: 1.5rem 1.75rem;
5042
+ outline: none;
5043
+ overflow-y: auto;
5044
+ min-height: 360px;
5045
+ max-height: 70vh;
5046
+ color: var(--primary-text);
5047
+ line-height: 1.75;
5048
+ font-size: 1rem;
5049
+ background: var(--background);
5050
+ caret-color: var(--accent-color);
5051
+ transition: box-shadow 0.15s ease;
5052
+ }
5053
+ .editable:focus {
5054
+ box-shadow: inset 2px 0 0 var(--accent-color);
5055
+ }
5056
+ .editable:empty::before {
5057
+ content: "Start writing…";
5058
+ color: var(--disabled);
5059
+ pointer-events: none;
5060
+ }
5061
+ .editable h1 {
5062
+ font-size: 1.75rem;
5063
+ font-weight: 700;
5064
+ margin: 0.75rem 0 0.4rem;
5065
+ line-height: 1.2;
5066
+ letter-spacing: -0.025em;
5067
+ color: var(--primary-text);
5068
+ }
5069
+ .editable h2 {
5070
+ font-size: 1.3rem;
5071
+ font-weight: 600;
5072
+ margin: 0.625rem 0 0.35rem;
5073
+ line-height: 1.3;
5074
+ letter-spacing: -0.015em;
5075
+ }
5076
+ .editable p {
5077
+ margin-bottom: 0.6rem;
5078
+ }
5079
+ .editable ul, .editable ol {
5080
+ margin-left: 1.5rem;
5081
+ margin-bottom: 0.5rem;
5082
+ }
5083
+ .editable ul {
5084
+ list-style: disc;
5085
+ }
5086
+ .editable ol {
5087
+ list-style: decimal;
5088
+ }
5089
+ .editable li {
5090
+ margin-bottom: 0.2rem;
5091
+ line-height: 1.65;
5092
+ }
5093
+ .editable img {
5094
+ max-width: 100%;
5095
+ height: auto;
5096
+ border-radius: 0.35rem;
5097
+ margin: 0.75rem 0;
5098
+ display: block;
5099
+ }
5100
+ .editable a {
5101
+ color: var(--accent-color);
5102
+ text-decoration: underline;
5103
+ text-underline-offset: 3px;
5104
+ text-decoration-thickness: 1px;
5105
+ }
5106
+ .editable blockquote {
5107
+ border-left: 3px solid var(--accent-color);
5108
+ background: color-mix(in srgb, var(--accent-color) 5%, transparent);
5109
+ padding: 0.5rem 0.75rem 0.5rem 1rem;
5110
+ margin: 0.75rem 0;
5111
+ border-radius: 0 0.2rem 0.2rem 0;
5112
+ color: var(--secondary-text);
5113
+ font-style: italic;
5114
+ }
5115
+ .editable strong {
5116
+ font-weight: 700;
5117
+ }
5118
+
5119
+ /* ── Side Panel ────────────────────────────────────────────────────── */
5120
+ .editor-side {
5121
+ width: 320px;
5122
+ min-width: 240px;
5123
+ border-left: 1px solid var(--divider);
5124
+ display: flex;
5125
+ flex-direction: column;
5126
+ background: var(--secondary-background);
5127
+ }
5128
+ .editor-side.hidden {
5129
+ display: none;
5130
+ }
5131
+ .editor-side textarea {
5132
+ flex: 1;
5133
+ font-family: ui-monospace, "Cascadia Code", "SF Mono", monospace;
5134
+ font-size: 0.78rem;
5135
+ line-height: 1.6;
5136
+ resize: none;
5137
+ border: 1px solid var(--divider);
5138
+ background: var(--background);
5139
+ color: var(--primary-text);
5140
+ border-radius: 0.3rem;
5141
+ padding: 0.625rem;
5142
+ tab-size: 2;
5143
+ outline: none;
5144
+ transition: border-color 0.12s ease;
5145
+ }
5146
+ .editor-side textarea:focus {
5147
+ border-color: color-mix(in srgb, var(--accent-color) 50%, transparent);
5148
+ }
5149
+ .editor-side textarea::placeholder {
5150
+ color: var(--disabled);
5151
+ }
5152
+
5153
+ .side-tabs {
5154
+ display: flex;
5155
+ border-bottom: 1px solid var(--divider);
5156
+ padding: 0 0.375rem;
5157
+ }
5158
+
5159
+ .side-tab {
5160
+ padding: 0.4rem 0.75rem;
5161
+ font-size: 0.75rem;
5162
+ font-weight: 500;
5163
+ color: var(--secondary-text);
5164
+ background: none;
5165
+ border: none;
5166
+ border-bottom: 2px solid transparent;
5167
+ cursor: pointer;
5168
+ transition: color 0.12s ease, border-color 0.12s ease;
5169
+ }
5170
+ .side-tab:hover {
5171
+ color: var(--primary-text);
5172
+ }
5173
+ .side-tab.active {
5174
+ color: var(--accent-color);
5175
+ border-bottom-color: var(--accent-color);
5176
+ font-weight: 600;
5177
+ }
5178
+
5179
+ .side-panels {
5180
+ flex: 1;
5181
+ overflow: hidden;
5182
+ display: flex;
5183
+ flex-direction: column;
5184
+ }
5185
+
5186
+ .side-panel {
5187
+ display: none;
5188
+ flex-direction: column;
5189
+ flex: 1;
5190
+ padding: 0.5rem;
5191
+ overflow: hidden;
5192
+ gap: 0.4rem;
5193
+ }
5194
+ .side-panel.active {
5195
+ display: flex;
5196
+ }
5197
+
5198
+ .code-actions {
5199
+ display: flex;
5200
+ gap: 0.3rem;
5201
+ }
5202
+ .code-actions button {
5203
+ flex: 1;
5204
+ padding: 0.3rem 0.5rem;
5205
+ font-size: 0.72rem;
5206
+ font-weight: 600;
5207
+ border-radius: 0.24rem;
5208
+ background: var(--divider);
5209
+ color: var(--secondary-text);
5210
+ border: none;
5211
+ cursor: pointer;
5212
+ transition: background 0.1s, color 0.1s;
5213
+ }
5214
+ .code-actions button:hover {
5215
+ background: color-mix(in srgb, var(--divider) 70%, var(--primary-text) 30%);
5216
+ color: var(--primary-text);
5217
+ }
5218
+
5219
+ .preview-content {
5220
+ flex: 1;
5221
+ overflow-y: auto;
5222
+ padding: 0.75rem 1rem;
5223
+ background: var(--background);
5224
+ border: 1px solid var(--divider);
5225
+ border-radius: 0.3rem;
5226
+ line-height: 1.65;
5227
+ font-size: 0.9rem;
5228
+ color: var(--primary-text);
5229
+ }
5230
+ .preview-content h1 {
5231
+ font-size: 1.4rem;
5232
+ font-weight: 700;
5233
+ margin-bottom: 0.35rem;
5234
+ letter-spacing: -0.02em;
5235
+ }
5236
+ .preview-content h2 {
5237
+ font-size: 1.1rem;
5238
+ font-weight: 600;
5239
+ margin-bottom: 0.3rem;
5240
+ }
5241
+ .preview-content p {
5242
+ margin-bottom: 0.4rem;
5243
+ }
5244
+ .preview-content ul, .preview-content ol {
5245
+ margin-left: 1.25rem;
5246
+ margin-bottom: 0.4rem;
5247
+ }
5248
+ .preview-content ul {
5249
+ list-style: disc;
5250
+ }
5251
+ .preview-content ol {
5252
+ list-style: decimal;
5253
+ }
5254
+ .preview-content img {
5255
+ max-width: 100%;
5256
+ height: auto;
5257
+ border-radius: 0.3rem;
5258
+ }
5259
+ .preview-content a {
5260
+ color: var(--accent-color);
5261
+ text-decoration: underline;
5262
+ text-underline-offset: 2px;
5263
+ }
5264
+
5265
+ /* ── Footer ────────────────────────────────────────────────────────── */
5266
+ .editor-footer {
5267
+ display: flex;
5268
+ align-items: center;
5269
+ justify-content: space-between;
5270
+ padding: 0.35rem 0.875rem;
5271
+ border-top: 1px solid var(--divider);
5272
+ background: var(--secondary-background);
5273
+ font-size: 0.72rem;
5274
+ color: var(--secondary-text);
5275
+ gap: 1rem;
5276
+ }
5277
+
5278
+ .editor-wordcount {
5279
+ white-space: nowrap;
5280
+ font-variant-numeric: tabular-nums;
5281
+ font-weight: 500;
5282
+ }
5283
+
5284
+ .editor-shortcuts {
5285
+ display: flex;
5286
+ align-items: center;
5287
+ gap: 0.75rem;
5288
+ overflow: hidden;
5289
+ }
5290
+ .editor-shortcuts span {
5291
+ display: flex;
5292
+ align-items: center;
5293
+ gap: 0.25rem;
5294
+ white-space: nowrap;
5295
+ }
5296
+ .editor-shortcuts kbd {
5297
+ display: inline-block;
5298
+ padding: 0.1rem 0.3rem;
5299
+ font-family: inherit;
5300
+ font-size: 0.65rem;
5301
+ font-weight: 600;
5302
+ color: var(--secondary-text);
5303
+ background: var(--background);
5304
+ border: 1px solid var(--divider);
5305
+ border-radius: 0.2rem;
5306
+ box-shadow: 0 1px 0 var(--divider);
5307
+ }
5308
+
5309
+ /* ── Responsive ────────────────────────────────────────────────────── */
5310
+ @media screen and (max-width: 768px) {
5311
+ .editor-body {
5312
+ flex-direction: column;
5313
+ }
5314
+ .editor-side {
5315
+ width: 100%;
5316
+ min-width: 0;
5317
+ border-left: none;
5318
+ border-top: 1px solid var(--divider);
5319
+ max-height: 48vh;
5320
+ }
5321
+ .editable {
5322
+ min-height: 240px;
5323
+ max-height: 50vh;
5324
+ padding: 1rem 1.125rem;
5325
+ }
5326
+ .editable:focus {
5327
+ box-shadow: inset 0 2px 0 var(--accent-color);
5328
+ }
5329
+ .editor-toolbar {
5330
+ padding: 0.3rem 0.375rem;
5331
+ gap: 0.2rem;
5332
+ mask-image: linear-gradient(to right, black 85%, transparent 100%);
5333
+ }
5334
+ .editor-toolbar button {
5335
+ width: 2.25rem;
5336
+ height: 2.25rem;
5337
+ }
5338
+ .editor-toolbar .icon-svg {
5339
+ width: 1.25rem;
5340
+ height: 1.25rem;
5341
+ }
5342
+ .toolbar-group {
5343
+ gap: 2px;
5344
+ padding: 2px;
5345
+ }
5346
+ .toolbar-separator {
5347
+ width: 0.2rem;
5348
+ }
5349
+ .editor-shortcuts {
5350
+ display: none;
5351
+ }
5352
+ }
5353
+ /* ── Link Popover ──────────────────────────────────────────────────── */
5354
+ .editor-link-popover {
5355
+ display: flex;
5356
+ flex-direction: column;
5357
+ gap: 0.4rem;
5358
+ padding: 0.625rem 0.75rem;
5359
+ border-bottom: 1px solid var(--divider);
5360
+ background: var(--secondary-background);
5361
+ }
5362
+ .editor-link-popover[hidden] {
5363
+ display: none;
5364
+ }
5365
+
5366
+ .link-popover-row {
5367
+ display: flex;
5368
+ align-items: center;
5369
+ gap: 0.5rem;
5370
+ }
5371
+
5372
+ .link-popover-input {
5373
+ flex: 1;
5374
+ height: 2rem;
5375
+ padding: 0 0.625rem;
5376
+ border: 1px solid var(--divider);
5377
+ border-radius: 0.24rem;
5378
+ background: var(--background);
5379
+ color: var(--primary-text);
5380
+ font-size: 0.8125rem;
5381
+ outline: none;
5382
+ transition: border-color 0.12s ease;
5383
+ }
5384
+ .link-popover-input:focus {
5385
+ border-color: color-mix(in srgb, var(--accent-color) 60%, transparent);
5386
+ box-shadow: 0 0 0 2px color-mix(in srgb, var(--accent-color) 12%, transparent);
5387
+ }
5388
+ .link-popover-input::placeholder {
5389
+ color: var(--disabled, var(--secondary-text));
5390
+ opacity: 0.7;
5391
+ }
5392
+
5393
+ .link-popover-actions {
5394
+ justify-content: space-between;
5395
+ }
5396
+
5397
+ .link-popover-check {
5398
+ display: flex;
5399
+ align-items: center;
5400
+ gap: 0.35rem;
5401
+ font-size: 0.78rem;
5402
+ color: var(--secondary-text);
5403
+ cursor: pointer;
5404
+ user-select: none;
5405
+ }
5406
+ .link-popover-check input[type=checkbox] {
5407
+ accent-color: var(--accent-color);
5408
+ width: 0.875rem;
5409
+ height: 0.875rem;
5410
+ cursor: pointer;
5411
+ }
5412
+
5413
+ .link-popover-btns {
5414
+ display: flex;
5415
+ gap: 0.3rem;
5416
+ }
5417
+ .link-popover-btns button {
5418
+ height: 1.875rem;
5419
+ padding: 0 0.75rem;
5420
+ border: none;
5421
+ border-radius: 0.24rem;
5422
+ font-size: 0.78rem;
5423
+ font-weight: 600;
5424
+ cursor: pointer;
5425
+ transition: background 0.1s ease, color 0.1s ease;
5426
+ }
5427
+ .link-popover-btns button[hidden] {
5428
+ display: none;
5429
+ }
5430
+
5431
+ .link-popover-cancel {
5432
+ background: var(--divider);
5433
+ color: var(--secondary-text);
5434
+ }
5435
+ .link-popover-cancel:hover {
5436
+ background: color-mix(in srgb, var(--divider) 70%, var(--primary-text) 30%);
5437
+ color: var(--primary-text);
5438
+ }
5439
+
5440
+ .link-popover-confirm {
5441
+ background: var(--accent-color);
5442
+ color: #fff;
5443
+ }
5444
+ .link-popover-confirm:hover {
5445
+ opacity: 0.88;
5446
+ }
5447
+
5448
+ .link-popover-remove {
5449
+ background: color-mix(in srgb, var(--error) 10%, transparent);
5450
+ color: var(--error);
5451
+ border: 1px solid color-mix(in srgb, var(--error) 30%, transparent) !important;
5452
+ }
5453
+ .link-popover-remove:hover {
5454
+ background: color-mix(in srgb, var(--error) 18%, transparent);
5455
+ }
5456
+
5457
+ @media screen and (max-width: 480px) {
5458
+ .editor-toolbar button {
5459
+ width: 2.125rem;
5460
+ height: 2.125rem;
5461
+ }
5462
+ .editor-footer {
5463
+ padding: 0.3rem 0.625rem;
5464
+ }
5465
+ }
5466
+ .bottom-sheet-wrapper {
5467
+ position: fixed;
5468
+ inset: 0;
5469
+ z-index: 999;
5470
+ pointer-events: none;
5471
+ }
5472
+ .bottom-sheet-wrapper.is-visible {
5473
+ pointer-events: auto;
5474
+ }
5475
+ .bottom-sheet-wrapper.is-visible .bottom-sheet-backdrop {
5476
+ opacity: 1;
5477
+ }
5478
+ .bottom-sheet-wrapper.is-visible .bottom-sheet {
5479
+ transform: translateY(0);
5480
+ }
5481
+
5482
+ .bottom-sheet-backdrop {
5483
+ position: absolute;
5484
+ inset: 0;
5485
+ background: rgba(0, 0, 0, 0.5);
5486
+ backdrop-filter: blur(6px);
5487
+ -webkit-backdrop-filter: blur(6px);
5488
+ opacity: 0;
5489
+ transition: opacity 0.32s ease;
5490
+ }
5491
+
5492
+ .bottom-sheet {
5493
+ position: fixed;
5494
+ bottom: 0;
5495
+ left: 0;
5496
+ right: 0;
5497
+ z-index: 1;
5498
+ background: var(--background);
5499
+ border: 1px solid var(--divider);
5500
+ border-bottom: none;
5501
+ border-radius: 1.6rem 1.6rem 0 0;
5502
+ box-shadow: 0 -2px 0 rgba(255, 255, 255, 0.06) inset, 0 -8px 40px rgba(0, 0, 0, 0.18), 0 -2px 12px rgba(0, 0, 0, 0.1), 0 -1px 3px rgba(0, 0, 0, 0.08);
5503
+ max-height: 90vh;
5504
+ overflow: hidden;
5505
+ display: flex;
5506
+ flex-direction: column;
5507
+ transform: translateY(100%);
5508
+ transition: transform 0.42s cubic-bezier(0.32, 0.72, 0, 1);
5509
+ will-change: transform;
5510
+ overscroll-behavior: contain;
5511
+ }
5512
+ .bottom-sheet.snap-half {
5513
+ height: 50vh;
5514
+ }
5515
+ .bottom-sheet.snap-full {
5516
+ height: calc(100dvh - env(safe-area-inset-top) - 1rem);
5517
+ max-height: none;
5518
+ }
5519
+
5520
+ .bottom-sheet-handle {
5521
+ flex-shrink: 0;
5522
+ display: flex;
5523
+ align-items: center;
5524
+ justify-content: center;
5525
+ padding: 0.75rem 1rem 0.5rem;
5526
+ cursor: grab;
5527
+ touch-action: none;
5528
+ user-select: none;
5529
+ }
5530
+ .bottom-sheet-handle:active {
5531
+ cursor: grabbing;
5532
+ }
5533
+ .bottom-sheet-handle::after {
5534
+ content: "";
5535
+ display: block;
5536
+ width: 40px;
5537
+ height: 4px;
5538
+ border-radius: 2px;
5539
+ background: var(--divider);
5540
+ transition: background 0.15s ease, width 0.15s ease;
5541
+ }
5542
+ .bottom-sheet-handle:hover::after, .bottom-sheet-handle:active::after {
5543
+ background: var(--secondary-text);
5544
+ width: 48px;
5545
+ }
5546
+
5547
+ .bottom-sheet-body {
5548
+ flex: 1;
5549
+ overflow-x: hidden;
5550
+ overflow-y: auto;
5551
+ overscroll-behavior: contain;
5552
+ padding: 0 1rem 1rem;
5553
+ padding-bottom: calc(1rem + env(safe-area-inset-bottom));
5554
+ mask-image: linear-gradient(to bottom, black calc(100% - 2rem), transparent 100%);
5555
+ -webkit-mask-image: linear-gradient(to bottom, black calc(100% - 2rem), transparent 100%);
5556
+ }
5557
+ .bottom-sheet-body:not(.is-scrollable) {
5558
+ mask-image: none;
5559
+ -webkit-mask-image: none;
5560
+ }
5561
+
5562
+ .bottom-sheet-header {
5563
+ flex-shrink: 0;
5564
+ display: flex;
5565
+ align-items: center;
5566
+ gap: 0.5rem;
5567
+ padding: 0.25rem 1rem 0.75rem;
5568
+ }
5569
+ .bottom-sheet-header.has-divider {
5570
+ border-bottom: 1px solid var(--divider);
5571
+ margin-bottom: 0.5rem;
5572
+ padding-bottom: 0.75rem;
5573
+ }
5574
+ .bottom-sheet-header .title {
5575
+ flex: 1;
5576
+ font-weight: 600;
5577
+ font-size: 1rem;
5578
+ color: var(--primary-text);
5579
+ line-height: 1.3;
5580
+ }
5581
+ .bottom-sheet-header .subtitle {
5582
+ flex: 1;
5583
+ font-size: 0.8125rem;
5584
+ color: var(--secondary-text);
5585
+ margin-top: 0.125rem;
5586
+ }
5587
+ .bottom-sheet-header .close {
5588
+ cursor: pointer;
5589
+ color: var(--secondary-text);
5590
+ transition: color 0.15s ease;
5591
+ }
5592
+ .bottom-sheet-header .close:hover {
5593
+ color: var(--primary-text);
5594
+ }
5595
+
5596
+ .bottom-sheet-footer {
5597
+ flex-shrink: 0;
5598
+ border-top: 1px solid var(--divider);
5599
+ padding: 1rem;
5600
+ padding-bottom: calc(1rem + env(safe-area-inset-bottom));
5601
+ display: flex;
5602
+ justify-content: flex-end;
5603
+ }
5604
+ .bottom-sheet-footer .buttons {
5605
+ display: flex;
5606
+ gap: 0.5rem;
5607
+ }
5608
+
5609
+ @media (min-width: 768px) {
5610
+ .bottom-sheet {
5611
+ left: 50%;
5612
+ right: auto;
5613
+ width: 480px;
5614
+ bottom: 1rem;
5615
+ border: 1px solid var(--divider);
5616
+ border-radius: 1.6rem;
5617
+ transform: translateX(-50%) translateY(calc(100% + 1rem));
5618
+ max-height: 80vh;
5619
+ }
5620
+ .bottom-sheet .bottom-sheet-footer {
5621
+ border-radius: 0 0 1.6rem 1.6rem;
5622
+ }
5623
+ .bottom-sheet-wrapper.is-visible .bottom-sheet {
5624
+ transform: translateX(-50%) translateY(0);
5625
+ }
5626
+ }
5627
+ .context-menu {
5628
+ position: fixed;
5629
+ z-index: 9999;
5630
+ min-width: 200px;
5631
+ padding: 0.375rem 0;
5632
+ background: var(--background);
5633
+ border: 1px solid var(--divider);
5634
+ border-radius: 1rem;
5635
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.12), 0 2px 8px rgba(0, 0, 0, 0.08), 0 1px 2px rgba(0, 0, 0, 0.04);
5636
+ list-style: none;
5637
+ margin: 0;
5638
+ opacity: 0;
5639
+ transform: scale(0.94);
5640
+ transform-origin: top left;
5641
+ transition: opacity 0.14s ease, transform 0.14s ease;
5642
+ pointer-events: none;
5643
+ }
5644
+ .context-menu.is-visible {
5645
+ opacity: 1;
5646
+ transform: scale(1);
5647
+ pointer-events: auto;
5648
+ }
5649
+
5650
+ .context-menu-item {
5651
+ display: flex;
5652
+ align-items: center;
5653
+ gap: 0.55rem;
5654
+ padding: 0.45rem 0.75rem;
5655
+ font-size: 0.875rem;
5656
+ color: var(--primary-text);
5657
+ cursor: pointer;
5658
+ user-select: none;
5659
+ white-space: nowrap;
5660
+ transition: background 0.1s ease, color 0.1s ease;
5661
+ position: relative;
5662
+ }
5663
+ .context-menu-item .context-menu-icon {
5664
+ flex-shrink: 0;
5665
+ width: 1rem;
5666
+ height: 1rem;
5667
+ display: flex;
5668
+ align-items: center;
5669
+ justify-content: center;
5670
+ color: var(--secondary-text);
5671
+ transition: color 0.1s ease;
5672
+ }
5673
+ .context-menu-item .context-menu-icon .icon-svg {
5674
+ width: 1rem;
5675
+ height: 1rem;
5676
+ }
5677
+ .context-menu-item .context-menu-label {
5678
+ flex: 1;
5679
+ }
5680
+ .context-menu-item .context-menu-shortcut {
5681
+ padding-left: 1.5rem;
5682
+ font-size: 0.75rem;
5683
+ color: var(--secondary-text);
5684
+ opacity: 0.6;
5685
+ letter-spacing: 0.02em;
5686
+ flex-shrink: 0;
5687
+ }
5688
+ .context-menu-item .context-menu-chevron {
5689
+ flex-shrink: 0;
5690
+ width: 0.35rem;
5691
+ height: 0.35rem;
5692
+ border-right: 1.5px solid currentColor;
5693
+ border-bottom: 1.5px solid currentColor;
5694
+ transform: rotate(-45deg);
5695
+ opacity: 0.5;
5696
+ margin-left: 0.25rem;
5697
+ color: var(--secondary-text);
5698
+ }
5699
+ .context-menu-item:hover, .context-menu-item.is-focused {
5700
+ background: var(--secondary-background);
5701
+ color: var(--accent-color);
5702
+ }
5703
+ .context-menu-item:hover .context-menu-icon, .context-menu-item.is-focused .context-menu-icon {
5704
+ color: var(--accent-color);
5705
+ }
5706
+ .context-menu-item:hover .context-menu-chevron, .context-menu-item.is-focused .context-menu-chevron {
5707
+ color: var(--accent-color);
5708
+ opacity: 0.8;
5709
+ }
5710
+ .context-menu-item.is-active {
5711
+ background: var(--secondary-background);
5712
+ color: var(--accent-color);
5713
+ }
5714
+ .context-menu-item.is-active .context-menu-icon {
5715
+ color: var(--accent-color);
5716
+ }
5717
+ .context-menu-item.is-active .context-menu-chevron {
5718
+ color: var(--accent-color);
5719
+ opacity: 0.8;
5720
+ }
5721
+ .context-menu-item.is-destructive {
5722
+ color: var(--error);
5723
+ }
5724
+ .context-menu-item.is-destructive .context-menu-icon {
5725
+ color: var(--error);
5726
+ }
5727
+ .context-menu-item.is-destructive:hover, .context-menu-item.is-destructive.is-focused {
5728
+ background: color-mix(in srgb, var(--error) 8%, var(--background));
5729
+ color: var(--error);
5730
+ }
5731
+ .context-menu-item.is-destructive:hover .context-menu-icon, .context-menu-item.is-destructive.is-focused .context-menu-icon {
5732
+ color: var(--error);
5733
+ }
5734
+ .context-menu-item.is-disabled {
5735
+ opacity: 0.38;
5736
+ cursor: default;
5737
+ pointer-events: none;
5738
+ }
5739
+ .context-menu-item.has-submenu > .context-menu {
5740
+ position: absolute;
5741
+ top: -0.375rem;
5742
+ left: 100%;
5743
+ margin-left: 4px;
5744
+ transform-origin: top left;
5745
+ }
5746
+ .context-menu-item.has-submenu.is-active > .context-menu {
5747
+ opacity: 1;
5748
+ transform: scale(1);
5749
+ pointer-events: auto;
5750
+ }
5751
+ .context-menu-item.has-submenu.submenu-flip > .context-menu {
5752
+ left: auto;
5753
+ right: 100%;
5754
+ margin-left: 0;
5755
+ margin-right: 4px;
5756
+ transform-origin: top right;
5757
+ }
5758
+
5759
+ .context-menu-separator {
5760
+ height: 1px;
5761
+ background: var(--divider);
5762
+ margin: 0.375rem 0;
5763
+ }
5764
+
5765
+ .context-menu-group-label {
5766
+ padding: 0.3rem 0.75rem;
5767
+ font-size: 0.6875rem;
5768
+ font-weight: 600;
5769
+ text-transform: uppercase;
5770
+ letter-spacing: 0.07em;
5771
+ color: var(--secondary-text);
5772
+ opacity: 0.55;
5773
+ user-select: none;
5774
+ }
5775
+
4351
5776
  /*# sourceMappingURL=style.css.map */