@threadlabs/looma 0.7.3 → 0.8.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 (50) hide show
  1. package/components/ui-avatar/ui-avatar.html +1 -1
  2. package/components/ui-avatar-group/ui-avatar-group.html +1 -1
  3. package/components/ui-badge/ui-badge.html +20 -0
  4. package/components/ui-button/ui-button.html +38 -15
  5. package/components/ui-combobox/ui-combobox.html +1 -1
  6. package/components/ui-editor-slash-menu/ui-editor-slash-menu.html +1 -1
  7. package/components/ui-editor-table-context-menu/ui-editor-table-context-menu.html +1 -1
  8. package/components/ui-editor-table-toolbar/ui-editor-table-toolbar.html +1 -1
  9. package/components/ui-form-field/ui-form-field.html +3 -3
  10. package/components/ui-tree-item/ui-tree-item.html +1 -1
  11. package/dist/index.js +1 -1
  12. package/package.json +1 -1
  13. package/styles/ui-avatar-group.css +1 -1
  14. package/styles/ui-avatar.css +1 -1
  15. package/styles/ui-badge.css +22 -0
  16. package/styles/ui-button.css +20 -14
  17. package/styles/ui-combobox.css +1 -1
  18. package/styles/ui-editor-slash-menu.css +1 -1
  19. package/styles/ui-editor-table-context-menu.css +1 -1
  20. package/styles/ui-editor-table-toolbar.css +1 -1
  21. package/styles/ui-form-field.css +3 -3
  22. package/styles/ui-tree-item.css +1 -1
  23. package/tokens.css +2 -3
  24. package/vanilla/UiBadge.d.ts +1 -0
  25. package/vanilla/UiBadge.js +4 -2
  26. package/vanilla/UiButton.d.ts +5 -0
  27. package/vanilla/UiButton.js +8 -6
  28. package/vue/UiAvatar.vue +1 -1
  29. package/vue/UiAvatarGroup.vue +1 -1
  30. package/vue/UiBadge.d.ts +2 -0
  31. package/vue/UiBadge.vue +29 -0
  32. package/vue/UiButton.d.ts +9 -2
  33. package/vue/UiButton.vue +48 -18
  34. package/vue/UiCombobox.vue +1 -1
  35. package/vue/UiEditorSlashMenu.vue +1 -1
  36. package/vue/UiEditorTableContextMenu.vue +1 -1
  37. package/vue/UiEditorTableToolbar.vue +1 -1
  38. package/vue/UiFormField.vue +3 -3
  39. package/vue/UiTreeItem.vue +1 -1
  40. package/vue/chunks/UiAvatar.js +1 -1
  41. package/vue/chunks/UiAvatarGroup.js +1 -1
  42. package/vue/chunks/UiBadge.js +7 -2
  43. package/vue/chunks/UiButton.js +52 -10
  44. package/vue/chunks/UiCombobox.js +1 -1
  45. package/vue/chunks/UiEditorSlashMenu.js +1 -1
  46. package/vue/chunks/UiEditorTableContextMenu.js +1 -1
  47. package/vue/chunks/UiEditorTableToolbar.js +1 -1
  48. package/vue/chunks/UiFormField.js +1 -1
  49. package/vue/chunks/UiTreeItem.js +1 -1
  50. package/vue/components.css +270 -241
@@ -12,7 +12,7 @@
12
12
  display: none;
13
13
  }
14
14
 
15
- [data-component~="ui-avatar"][data-v-64e52bdd] {
15
+ [data-component~="ui-avatar"][data-v-eb16b513] {
16
16
  display: inline-grid;
17
17
  place-items: center;
18
18
  overflow: hidden;
@@ -23,17 +23,17 @@
23
23
  background: var(--ui-avatar-surface, var(--ui-accent-soft));
24
24
  color: var(--ui-avatar-text, var(--ui-accent-solid));
25
25
  font: inherit;
26
- font-size: 0.875rem;
26
+ font-size: var(--ui-font-size-sm);
27
27
  font-weight: 600;
28
28
  text-transform: uppercase;
29
29
  }
30
- .image[data-v-64e52bdd],img[data-v-64e52bdd-s] {
30
+ .image[data-v-eb16b513],img[data-v-eb16b513-s] {
31
31
  grid-area: 1 / 1;
32
32
  inline-size: 100%;
33
33
  block-size: 100%;
34
34
  object-fit: cover;
35
35
  }
36
- .fallback[data-v-64e52bdd] {
36
+ .fallback[data-v-eb16b513] {
37
37
  grid-area: 1 / 1;
38
38
  display: inline-flex;
39
39
  align-items: center;
@@ -46,7 +46,7 @@
46
46
  /* Centre the glyphs, not the line box: a label without descenders otherwise reads high.
47
47
  * Trimming applies to block containers, so the box is a block with centred content. */
48
48
  @supports (text-box-trim: trim-both) {
49
- .fallback[data-v-64e52bdd] {
49
+ .fallback[data-v-eb16b513] {
50
50
  display: block;
51
51
  text-align: center;
52
52
  align-content: center;
@@ -54,16 +54,16 @@
54
54
  text-box-edge: cap alphabetic;
55
55
  }
56
56
  }
57
- [hidden][data-v-64e52bdd] {
57
+ [hidden][data-v-eb16b513] {
58
58
  display: none;
59
59
  }
60
60
 
61
61
  /* A component that sets its display still honours the hidden attribute on its root. */
62
- [data-component~="ui-avatar"][hidden][data-v-64e52bdd] {
62
+ [data-component~="ui-avatar"][hidden][data-v-eb16b513] {
63
63
  display: none;
64
64
  }
65
65
 
66
- [data-component~="ui-avatar-group"][data-v-cbb93f58] {
66
+ [data-component~="ui-avatar-group"][data-v-9e8e1291] {
67
67
  /* Avatars separate with a tight, crisp edge, matching Looma's 1px borders rather than the
68
68
  * diffuse elevation overlays use. */
69
69
  --_overlap-shadow: -2px 0 2px -1px rgba(0, 0, 0, 0.22);
@@ -77,15 +77,15 @@
77
77
 
78
78
  /* Overlap and the separating shadow are applied by the controller: slotted avatars are nested
79
79
  * component roots outside this style scope. */
80
- [data-v-cbb93f58-s] {
80
+ [data-v-9e8e1291-s] {
81
81
  margin-inline-start: -0.625rem;
82
82
  flex-shrink: 0;
83
83
  border-radius: 999px;
84
84
  }
85
- [data-v-cbb93f58-s]:first-child {
85
+ [data-v-9e8e1291-s]:first-child {
86
86
  margin-inline-start: 0;
87
87
  }
88
- .overflow[data-v-cbb93f58] {
88
+ .overflow[data-v-9e8e1291] {
89
89
  margin-inline-start: -0.625rem;
90
90
  display: inline-flex;
91
91
  align-items: center;
@@ -100,20 +100,20 @@
100
100
  var(--ui-avatar-group-overlap-shadow, var(--_overlap-shadow)),
101
101
  var(--ui-avatar-group-edge-ring, var(--_edge-ring));
102
102
  font: inherit;
103
- font-size: 0.75rem;
103
+ font-size: var(--ui-font-size-xs);
104
104
  font-weight: 600;
105
105
  flex-shrink: 0;
106
106
  }
107
- .overflow[hidden][data-v-cbb93f58] {
107
+ .overflow[hidden][data-v-9e8e1291] {
108
108
  display: none;
109
109
  }
110
110
 
111
111
  /* A component that sets its display still honours the hidden attribute on its root. */
112
- [data-component~="ui-avatar-group"][hidden][data-v-cbb93f58] {
112
+ [data-component~="ui-avatar-group"][hidden][data-v-9e8e1291] {
113
113
  display: none;
114
114
  }
115
115
 
116
- [data-component~="ui-badge"][data-v-90c7d1bb] {
116
+ [data-component~="ui-badge"][data-v-c0ffc4d8] {
117
117
  --_badge-surface: var(--ui-surface-subtle);
118
118
  --_badge-text: var(--ui-text-secondary);
119
119
  --_badge-border: color-mix(in srgb, var(--ui-text-secondary) 30%, transparent);
@@ -139,7 +139,7 @@
139
139
  /* Centre the glyphs, not the line box: a label without descenders otherwise reads high.
140
140
  * Trimming applies to block containers, so the box is a block with centred content. */
141
141
  @supports (text-box-trim: trim-both) {
142
- [data-component~="ui-badge"][data-v-90c7d1bb] {
142
+ [data-component~="ui-badge"][data-v-c0ffc4d8] {
143
143
  display: block;
144
144
  min-block-size: var(--ui-badge-min-block-size, 1.5rem);
145
145
  text-align: center;
@@ -148,63 +148,88 @@
148
148
  text-box-edge: cap alphabetic;
149
149
  }
150
150
  }
151
- [data-component~="ui-badge"][data-ui-badge-state~="tone=accent"][data-v-90c7d1bb] {
151
+ [data-component~="ui-badge"][data-ui-badge-state~="tone=accent"][data-v-c0ffc4d8] {
152
152
  --_badge-surface: var(--ui-accent-strong-surface, var(--ui-accent-solid));
153
153
  --_badge-border: var(--ui-accent-strong-surface, var(--ui-accent-solid));
154
154
  --_badge-text: var(--ui-accent-on-strong, var(--ui-text-on-accent));
155
155
  }
156
- [data-component~="ui-badge"][data-ui-badge-state~="tone=danger"][data-v-90c7d1bb] {
156
+ [data-component~="ui-badge"][data-ui-badge-state~="tone=danger"][data-v-c0ffc4d8] {
157
157
  --_badge-surface: var(--ui-danger-strong-surface, var(--ui-danger-solid));
158
158
  --_badge-border: var(--ui-danger-strong-surface, var(--ui-danger-solid));
159
159
  --_badge-text: var(--ui-danger-on-strong, var(--ui-text-on-accent));
160
160
  }
161
- [data-component~="ui-badge"][data-ui-badge-state~="tone=success"][data-v-90c7d1bb] {
161
+ [data-component~="ui-badge"][data-ui-badge-state~="tone=success"][data-v-c0ffc4d8] {
162
162
  --_badge-surface: var(--ui-success-strong-surface, var(--ui-success-solid));
163
163
  --_badge-border: var(--ui-success-strong-surface, var(--ui-success-solid));
164
164
  --_badge-text: var(--ui-success-on-strong, var(--ui-text-on-accent));
165
165
  }
166
- [data-component~="ui-badge"][data-ui-badge-state~="tone=warning"][data-v-90c7d1bb] {
166
+ [data-component~="ui-badge"][data-ui-badge-state~="tone=warning"][data-v-c0ffc4d8] {
167
167
  --_badge-surface: var(--ui-warning-strong-surface, var(--ui-warning-solid));
168
168
  --_badge-border: var(--ui-warning-strong-surface, var(--ui-warning-solid));
169
169
  --_badge-text: var(--ui-warning-on-strong, var(--ui-text-on-accent));
170
170
  }
171
- [data-component~="ui-badge"][data-ui-badge-state~="tone=info"][data-v-90c7d1bb] {
171
+ [data-component~="ui-badge"][data-ui-badge-state~="tone=info"][data-v-c0ffc4d8] {
172
172
  --_badge-surface: var(--ui-info-strong-surface, var(--ui-info-solid));
173
173
  --_badge-border: var(--ui-info-strong-surface, var(--ui-info-solid));
174
174
  --_badge-text: var(--ui-info-on-strong, var(--ui-text-on-accent));
175
175
  }
176
- [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=accent"][data-v-90c7d1bb] {
176
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=accent"][data-v-c0ffc4d8] {
177
177
  --_badge-surface: var(--ui-accent-soft);
178
178
  --_badge-border: var(--ui-accent-soft);
179
179
  --_badge-text: var(--ui-accent-subtle-text, var(--ui-accent-solid));
180
180
  }
181
- [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=danger"][data-v-90c7d1bb] {
181
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=danger"][data-v-c0ffc4d8] {
182
182
  --_badge-surface: var(--ui-danger-soft);
183
183
  --_badge-border: var(--ui-danger-soft);
184
184
  --_badge-text: var(--ui-danger-subtle-text, var(--ui-danger-solid));
185
185
  }
186
- [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=success"][data-v-90c7d1bb] {
186
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=success"][data-v-c0ffc4d8] {
187
187
  --_badge-surface: var(--ui-success-soft);
188
188
  --_badge-border: var(--ui-success-soft);
189
189
  --_badge-text: var(--ui-success-subtle-text, var(--ui-success-solid));
190
190
  }
191
- [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=warning"][data-v-90c7d1bb] {
191
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=warning"][data-v-c0ffc4d8] {
192
192
  --_badge-surface: var(--ui-warning-soft);
193
193
  --_badge-border: var(--ui-warning-soft);
194
194
  --_badge-text: var(--ui-warning-subtle-text, var(--ui-warning-solid));
195
195
  }
196
- [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=info"][data-v-90c7d1bb] {
196
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=info"][data-v-c0ffc4d8] {
197
197
  --_badge-surface: var(--ui-info-soft);
198
198
  --_badge-border: var(--ui-info-soft);
199
199
  --_badge-text: var(--ui-info-subtle-text, var(--ui-info-solid));
200
200
  }
201
201
 
202
+ /* A tag is flat at the start and points at the end. The point is cut from the box, so it has no
203
+ outline to follow: the edge is the fill. The end padding grows by the point's depth so the
204
+ label never runs into it. */
205
+ [data-component~="ui-badge"][data-ui-badge-state~="shape=tag"][data-v-c0ffc4d8] {
206
+ --_badge-point: var(--ui-badge-point, var(--ui-space-2));
207
+
208
+ border-color: transparent;
209
+ border-radius: 0;
210
+ padding-inline-end: calc(var(--ui-badge-padding-inline, var(--ui-space-2)) + var(--_badge-point));
211
+ clip-path: polygon(
212
+ 0 0,
213
+ calc(100% - var(--_badge-point)) 0,
214
+ 100% 50%,
215
+ calc(100% - var(--_badge-point)) 100%,
216
+ 0 100%
217
+ );
218
+ }
219
+ [data-component~="ui-badge"][data-ui-badge-state~="shape=tag"][data-v-c0ffc4d8]:dir(rtl) {
220
+ padding-inline-end: var(--ui-badge-padding-inline, var(--ui-space-2));
221
+ padding-inline-start: calc(
222
+ var(--ui-badge-padding-inline, var(--ui-space-2)) + var(--_badge-point)
223
+ );
224
+ clip-path: polygon(var(--_badge-point) 0, 100% 0, 100% 100%, var(--_badge-point) 100%, 0 50%);
225
+ }
226
+
202
227
  /* A component that sets its display still honours the hidden attribute on its root. */
203
- [data-component~="ui-badge"][hidden][data-v-90c7d1bb] {
228
+ [data-component~="ui-badge"][hidden][data-v-c0ffc4d8] {
204
229
  display: none;
205
230
  }
206
231
 
207
- [data-component~="ui-button"][data-v-c6ef4679] {
232
+ [data-component~="ui-button"][data-v-1cd0b390] {
208
233
  --_hue: var(--ui-accent);
209
234
  --_hue-hover: var(--ui-accent-hover);
210
235
  --_hue-active: var(--ui-accent-active);
@@ -223,15 +248,15 @@
223
248
  vertical-align: middle;
224
249
  color: var(--_tone-text);
225
250
  }
226
- [data-component~="ui-button"][data-ui-button-state~="align=start"][data-v-c6ef4679] {
251
+ [data-component~="ui-button"][data-ui-button-state~="align=start"][data-v-1cd0b390] {
227
252
  justify-content: flex-start;
228
253
  text-align: start;
229
254
  }
230
- [data-component~="ui-button"][data-ui-button-state~="stretch"][data-v-c6ef4679] {
255
+ [data-component~="ui-button"][data-ui-button-state~="stretch"][data-v-1cd0b390] {
231
256
  display: flex;
232
257
  inline-size: 100%;
233
258
  }
234
- [data-component~="ui-button"][data-v-c6ef4679] {
259
+ [data-component~="ui-button"][data-v-1cd0b390] {
235
260
  appearance: none;
236
261
  min-block-size: var(--ui-button-min-block-size, var(--ui-control-size-md));
237
262
  border-style: solid;
@@ -242,6 +267,7 @@
242
267
  color: var(--ui-button-text, var(--_tone-text));
243
268
  font: inherit;
244
269
  font-weight: var(--ui-font-medium);
270
+ text-decoration: none;
245
271
  line-height: var(--ui-line-height-tight);
246
272
  padding: var(--ui-space-2) var(--ui-space-3);
247
273
  background-image: var(--ui-raised-highlight);
@@ -255,44 +281,47 @@
255
281
  margin: 0;
256
282
  }
257
283
  @supports (text-box-trim: trim-both) {
258
- [data-component~="ui-button"][data-v-c6ef4679] {
284
+ [data-component~="ui-button"][data-v-1cd0b390] {
259
285
  text-box-trim: trim-both;
260
286
  text-box-edge: cap alphabetic;
261
287
  }
262
288
  }
263
- [data-component~="ui-button"][data-ui-button-state~="size=sm"][data-v-c6ef4679] {
289
+ [data-component~="ui-button"][data-ui-button-state~="size=sm"][data-v-1cd0b390] {
264
290
  min-block-size: var(--ui-control-size-sm);
265
291
  padding: var(--ui-space-1) var(--ui-space-2);
266
- font-size: 0.875rem;
292
+ font-size: var(--ui-font-size-sm);
267
293
  }
268
- [data-component~="ui-button"][data-ui-button-state~="size=lg"][data-v-c6ef4679] {
294
+ [data-component~="ui-button"][data-ui-button-state~="size=lg"][data-v-1cd0b390] {
269
295
  min-block-size: var(--ui-control-size-lg);
270
296
  padding: var(--ui-space-3) var(--ui-space-4);
271
- font-size: 1rem;
297
+ font-size: var(--ui-font-size-md);
272
298
  }
273
- [data-component~="ui-button"][data-v-c6ef4679]:hover:enabled {
299
+
300
+ /* A link is never :enabled, so interactive states test "not unavailable" instead: for a button that
301
+ is exactly :enabled, at the same specificity, and it also matches a link that can be followed. */
302
+ [data-component~="ui-button"][data-v-1cd0b390]:hover:not(:disabled, [aria-disabled="true"]) {
274
303
  border-color: var(--ui-button-hover-border, var(--_tone-hover));
275
304
  background-color: var(--ui-button-hover-surface, oklch(from var(--_tone) l c h / 12%));
276
305
  }
277
306
 
278
307
  /* Pressed reads as pressed in: the highlight goes, and the shadow moves inside. */
279
- [data-component~="ui-button"][data-v-c6ef4679]:active:enabled {
308
+ [data-component~="ui-button"][data-v-1cd0b390]:active:not(:disabled, [aria-disabled="true"]) {
280
309
  background-color: var(--ui-button-active-surface, oklch(from var(--_tone) l c h / 18%));
281
310
  background-image: none;
282
311
  box-shadow: var(--ui-pressed);
283
312
  }
284
- [data-component~="ui-button"][data-ui-button-state~="variant=solid"][data-v-c6ef4679],
285
- [data-component~="ui-button"][data-ui-button-state~="variant=danger"][data-v-c6ef4679] {
313
+ [data-component~="ui-button"][data-ui-button-state~="variant=solid"][data-v-1cd0b390],
314
+ [data-component~="ui-button"][data-ui-button-state~="variant=danger"][data-v-1cd0b390] {
286
315
  border-color: var(--_tone);
287
316
  background-color: var(--_tone);
288
317
  color: var(--_on-tone);
289
318
  box-shadow: var(--ui-button-solid-shadow, var(--ui-raised));
290
319
  }
291
- :is([data-component~="ui-button"][data-ui-button-state~="variant=solid"][data-v-c6ef4679], [data-component~="ui-button"][data-ui-button-state~="variant=danger"][data-v-c6ef4679]):hover:enabled {
320
+ :is([data-component~="ui-button"][data-ui-button-state~="variant=solid"][data-v-1cd0b390], [data-component~="ui-button"][data-ui-button-state~="variant=danger"][data-v-1cd0b390]):hover:not(:disabled, [aria-disabled="true"]) {
292
321
  background-color: var(--_tone-hover);
293
322
  border-color: var(--_tone-hover);
294
323
  }
295
- :is([data-component~="ui-button"][data-ui-button-state~="variant=solid"][data-v-c6ef4679], [data-component~="ui-button"][data-ui-button-state~="variant=danger"][data-v-c6ef4679]):active:enabled {
324
+ :is([data-component~="ui-button"][data-ui-button-state~="variant=solid"][data-v-1cd0b390], [data-component~="ui-button"][data-ui-button-state~="variant=danger"][data-v-1cd0b390]):active:not(:disabled, [aria-disabled="true"]) {
296
325
  background-color: var(--_tone-active);
297
326
  border-color: var(--_tone-active);
298
327
  background-image: none;
@@ -301,43 +330,43 @@
301
330
 
302
331
  /* Tone is the colour, variant is the volume. Every pairing works: a danger outline is a
303
332
  destructive secondary action, not a special case. */
304
- [data-component~="ui-button"][data-ui-button-state~="tone=neutral"][data-v-c6ef4679] {
333
+ [data-component~="ui-button"][data-ui-button-state~="tone=neutral"][data-v-1cd0b390] {
305
334
  --_hue: var(--ui-text);
306
335
  --_hue-hover: var(--ui-text);
307
336
  --_hue-active: var(--ui-text);
308
337
  --_hue-text: var(--ui-text);
309
338
  --_on-hue: var(--ui-surface);
310
339
  }
311
- [data-component~="ui-button"][data-ui-button-state~="tone=danger"][data-v-c6ef4679],
312
- [data-component~="ui-button"][data-ui-button-state~="variant=danger"][data-v-c6ef4679] {
340
+ [data-component~="ui-button"][data-ui-button-state~="tone=danger"][data-v-1cd0b390],
341
+ [data-component~="ui-button"][data-ui-button-state~="variant=danger"][data-v-1cd0b390] {
313
342
  --_hue: var(--ui-danger);
314
343
  --_hue-hover: var(--ui-danger-hover);
315
344
  --_hue-active: var(--ui-danger-hover);
316
345
  --_hue-text: var(--ui-danger-hover);
317
346
  --_on-hue: var(--ui-on-danger);
318
347
  }
319
- [data-component~="ui-button"][data-ui-button-state~="tone=success"][data-v-c6ef4679] {
348
+ [data-component~="ui-button"][data-ui-button-state~="tone=success"][data-v-1cd0b390] {
320
349
  --_hue: var(--ui-success);
321
350
  --_hue-hover: color-mix(in srgb, var(--ui-success) 85%, #000);
322
351
  --_hue-active: color-mix(in srgb, var(--ui-success) 75%, #000);
323
352
  --_hue-text: color-mix(in srgb, var(--ui-success) 85%, #000);
324
353
  --_on-hue: var(--ui-surface);
325
354
  }
326
- [data-component~="ui-button"][data-ui-button-state~="tone=warning"][data-v-c6ef4679] {
355
+ [data-component~="ui-button"][data-ui-button-state~="tone=warning"][data-v-1cd0b390] {
327
356
  --_hue: var(--ui-warning);
328
357
  --_hue-hover: color-mix(in srgb, var(--ui-warning) 85%, #000);
329
358
  --_hue-active: color-mix(in srgb, var(--ui-warning) 75%, #000);
330
359
  --_hue-text: color-mix(in srgb, var(--ui-warning) 85%, #000);
331
360
  --_on-hue: var(--ui-surface);
332
361
  }
333
- [data-component~="ui-button"][data-ui-button-state~="tone=info"][data-v-c6ef4679] {
362
+ [data-component~="ui-button"][data-ui-button-state~="tone=info"][data-v-1cd0b390] {
334
363
  --_hue: var(--ui-info);
335
364
  --_hue-hover: color-mix(in srgb, var(--ui-info) 85%, #000);
336
365
  --_hue-active: color-mix(in srgb, var(--ui-info) 75%, #000);
337
366
  --_hue-text: color-mix(in srgb, var(--ui-info) 85%, #000);
338
367
  --_on-hue: var(--ui-surface);
339
368
  }
340
- [data-component~="ui-button"][data-ui-button-state~="variant=ghost"][data-v-c6ef4679] {
369
+ [data-component~="ui-button"][data-ui-button-state~="variant=ghost"][data-v-1cd0b390] {
341
370
  border-color: transparent;
342
371
  background: transparent;
343
372
  box-shadow: none;
@@ -345,24 +374,24 @@
345
374
  }
346
375
 
347
376
  /* Tints derive from the text colour, not a surface token, so hover and press show on any background. */
348
- [data-component~="ui-button"][data-ui-button-state~="variant=ghost"][data-v-c6ef4679]:hover:enabled {
377
+ [data-component~="ui-button"][data-ui-button-state~="variant=ghost"][data-v-1cd0b390]:hover:not(:disabled, [aria-disabled="true"]) {
349
378
  background-color: var(--ui-button-ghost-hover-surface, oklch(from var(--_tone) l c h / 10%));
350
379
  border-color: transparent;
351
380
  }
352
- [data-component~="ui-button"][data-ui-button-state~="variant=ghost"][data-v-c6ef4679]:active:enabled {
381
+ [data-component~="ui-button"][data-ui-button-state~="variant=ghost"][data-v-1cd0b390]:active:not(:disabled, [aria-disabled="true"]) {
353
382
  background-color: var(--ui-button-ghost-active-surface, oklch(from var(--_tone) l c h / 16%));
354
383
  border-color: transparent;
355
384
  box-shadow: var(--ui-pressed);
356
385
  }
357
386
 
358
387
  /* A soft halo that transitions in with the other box-shadow changes, layered on the raised shadow. */
359
- [data-component~="ui-button"][data-v-c6ef4679]:focus-visible {
388
+ [data-component~="ui-button"][data-v-1cd0b390]:focus-visible {
360
389
  outline: none;
361
390
  box-shadow:
362
391
  var(--ui-button-shadow, var(--ui-raised)),
363
392
  var(--ui-focus-halo);
364
393
  }
365
- [data-component~="ui-button"][data-ui-button-state~="variant=solid"][data-v-c6ef4679]:focus-visible {
394
+ [data-component~="ui-button"][data-ui-button-state~="variant=solid"][data-v-1cd0b390]:focus-visible {
366
395
  box-shadow:
367
396
  var(--ui-button-solid-shadow, var(--ui-raised)),
368
397
  var(--ui-focus-halo);
@@ -372,7 +401,7 @@
372
401
  disabled outline is still an outline and a disabled ghost still has no edge. Intent goes — an
373
402
  unavailable action says "unavailable", not "unavailable, and destructive" — and so do the
374
403
  highlight and shadow, because nothing that cannot be pressed should look raised. */
375
- [data-component~="ui-button"][data-v-c6ef4679]:disabled {
404
+ [data-component~="ui-button"][data-v-1cd0b390]:is(:disabled, [aria-disabled="true"]) {
376
405
  /* Derived from the tone itself, not from a separate disabled palette: faded toward the
377
406
  page, which desaturates it at the same time. Toward the page rather than toward white,
378
407
  so a dark theme dims where a light one lightens — the same rule, both schemes. */
@@ -389,7 +418,7 @@
389
418
  }
390
419
 
391
420
  /* A filled button keeps its fill, faded further so its text stays legible on it. */
392
- :is([data-component~="ui-button"][data-ui-button-state~="variant=solid"][data-v-c6ef4679], [data-component~="ui-button"][data-ui-button-state~="variant=danger"][data-v-c6ef4679]):disabled {
421
+ :is([data-component~="ui-button"][data-ui-button-state~="variant=solid"][data-v-1cd0b390], [data-component~="ui-button"][data-ui-button-state~="variant=danger"][data-v-1cd0b390]):is(:disabled, [aria-disabled="true"]) {
393
422
  --_tone: color-mix(in oklab, var(--_hue) 34%, var(--ui-surface));
394
423
  }
395
424
 
@@ -397,19 +426,19 @@
397
426
  it takes a surface rather than reading as plain text. The surface is a wash of the faded tone,
398
427
  the way hover washes the live one, so it stays light in every tone. An opaque mix toward the
399
428
  hue came out a mid-grey slab for neutral, whose hue is the ink: louder than the enabled button. */
400
- [data-component~="ui-button"][data-ui-button-state~="variant=ghost"][data-v-c6ef4679]:disabled {
429
+ [data-component~="ui-button"][data-ui-button-state~="variant=ghost"][data-v-1cd0b390]:is(:disabled, [aria-disabled="true"]) {
401
430
  background-color: oklch(from var(--_tone) l c h / 14%);
402
431
  border-color: transparent;
403
432
  }
404
433
  @media (pointer: coarse) {
405
- [data-component~="ui-button"][data-v-c6ef4679] {
434
+ [data-component~="ui-button"][data-v-1cd0b390] {
406
435
  min-block-size: var(--ui-control-min-block-size);
407
436
  }
408
437
  }
409
438
 
410
439
  /* Link: an inline text action. No box, padding, or minimum height (inline targets are exempt under
411
440
  WCAG 2.5.8); the inherited font; an underline that strengthens on hover; a visible focus ring. */
412
- [data-component~="ui-button"][data-ui-button-state~="variant=link"][data-v-c6ef4679] {
441
+ [data-component~="ui-button"][data-ui-button-state~="variant=link"][data-v-1cd0b390] {
413
442
  display: inline;
414
443
  min-block-size: 0;
415
444
  padding: 0;
@@ -427,22 +456,22 @@
427
456
  color var(--ui-motion-fast) var(--ui-motion-ease),
428
457
  text-decoration-color var(--ui-motion-fast) var(--ui-motion-ease);
429
458
  }
430
- [data-component~="ui-button"][data-ui-button-state~="variant=link"][data-v-c6ef4679]:hover:enabled {
459
+ [data-component~="ui-button"][data-ui-button-state~="variant=link"][data-v-1cd0b390]:hover:not(:disabled, [aria-disabled="true"]) {
431
460
  color: var(--ui-button-link-hover-text, var(--ui-text-primary));
432
461
  text-decoration-color: currentColor;
433
462
  background: none;
434
463
  transform: none;
435
464
  }
436
- [data-component~="ui-button"][data-ui-button-state~="variant=link"][data-v-c6ef4679]:active:enabled {
465
+ [data-component~="ui-button"][data-ui-button-state~="variant=link"][data-v-1cd0b390]:active:not(:disabled, [aria-disabled="true"]) {
437
466
  background: none;
438
467
  transform: none;
439
468
  }
440
- [data-component~="ui-button"][data-ui-button-state~="variant=link"][data-v-c6ef4679]:disabled {
469
+ [data-component~="ui-button"][data-ui-button-state~="variant=link"][data-v-1cd0b390]:is(:disabled, [aria-disabled="true"]) {
441
470
  background: none;
442
471
  border-color: transparent;
443
472
  color: var(--ui-button-disabled-text, var(--ui-disabled-text));
444
473
  }
445
- [data-component~="ui-button"][data-ui-button-state~="variant=link"][data-v-c6ef4679]:focus-visible {
474
+ [data-component~="ui-button"][data-ui-button-state~="variant=link"][data-v-1cd0b390]:focus-visible {
446
475
  box-shadow: none;
447
476
  /* Fallback keeps the ring if the token is missing: an unresolved var() would void the outline. */
448
477
  outline: 2px solid var(--ui-focus-ring);
@@ -450,7 +479,7 @@
450
479
  }
451
480
 
452
481
  /* A component that sets its display still honours the hidden attribute on its root. */
453
- [data-component~="ui-button"][hidden][data-v-c6ef4679] {
482
+ [data-component~="ui-button"][hidden][data-v-1cd0b390] {
454
483
  display: none;
455
484
  }
456
485
 
@@ -741,27 +770,27 @@ input[data-v-964081a0]:focus-visible {
741
770
  }
742
771
  }
743
772
 
744
- [data-component~="ui-combobox"][data-v-1aba7b21] {
773
+ [data-component~="ui-combobox"][data-v-3b8b0ecf] {
745
774
  display: grid;
746
775
  gap: var(--ui-space-1);
747
776
  min-inline-size: 0;
748
777
  color: var(--ui-text-primary);
749
778
  font: inherit;
750
779
  }
751
- label[data-v-1aba7b21] {
780
+ label[data-v-3b8b0ecf] {
752
781
  color: var(--ui-combobox-label-text, var(--ui-text-primary));
753
- font-size: var(--ui-combobox-label-font-size, 0.875rem);
782
+ font-size: var(--ui-combobox-label-font-size, var(--ui-font-size-sm));
754
783
  font-weight: 500;
755
784
  }
756
785
  /* The field and anything that annotates it sit on one row; the help button is beside the box,
757
786
  not inside it, because a control's box holds its value. */
758
- .control[data-v-1aba7b21] {
787
+ .control[data-v-3b8b0ecf] {
759
788
  display: flex;
760
789
  align-items: center;
761
790
  gap: var(--ui-space-2);
762
791
  min-inline-size: 0;
763
792
  }
764
- .field[data-v-1aba7b21] {
793
+ .field[data-v-3b8b0ecf] {
765
794
  flex: 1 1 auto;
766
795
  display: flex;
767
796
  min-inline-size: 0;
@@ -773,14 +802,14 @@ label[data-v-1aba7b21] {
773
802
  border-color var(--ui-motion-fast) var(--ui-motion-ease),
774
803
  box-shadow var(--ui-motion-fast) var(--ui-motion-ease);
775
804
  }
776
- .field[data-v-1aba7b21]:focus-within {
805
+ .field[data-v-3b8b0ecf]:focus-within {
777
806
  border-color: var(--ui-control-focus, var(--ui-accent-solid));
778
807
  box-shadow:
779
808
  var(--ui-control-inset),
780
809
  var(--ui-control-focus-halo-shadow);
781
810
  }
782
811
  /* A ghost icon button: the affordance is the mark, not a box around it. */
783
- .help[data-v-1aba7b21] {
812
+ .help[data-v-3b8b0ecf] {
784
813
  flex: none;
785
814
  display: inline-flex;
786
815
  align-items: center;
@@ -797,28 +826,28 @@ label[data-v-1aba7b21] {
797
826
  background-color var(--ui-motion-fast) var(--ui-motion-ease),
798
827
  color var(--ui-motion-fast) var(--ui-motion-ease);
799
828
  }
800
- .help[data-v-1aba7b21]:hover:enabled,
801
- .help[aria-expanded="true"][data-v-1aba7b21] {
829
+ .help[data-v-3b8b0ecf]:hover:enabled,
830
+ .help[aria-expanded="true"][data-v-3b8b0ecf] {
802
831
  background: color-mix(in srgb, currentColor 8%, transparent);
803
832
  color: var(--ui-text-primary);
804
833
  }
805
- .help[data-v-1aba7b21]:focus-visible {
834
+ .help[data-v-3b8b0ecf]:focus-visible {
806
835
  outline: none;
807
836
  box-shadow: var(--ui-focus-halo);
808
837
  }
809
- .help[data-v-1aba7b21]:disabled {
838
+ .help[data-v-3b8b0ecf]:disabled {
810
839
  color: var(--ui-disabled-text);
811
840
  cursor: not-allowed;
812
841
  }
813
- .help-icon[data-v-1aba7b21] {
842
+ .help-icon[data-v-3b8b0ecf] {
814
843
  inline-size: var(--ui-icon-size-sm);
815
844
  block-size: var(--ui-icon-size-sm);
816
845
  }
817
- input[data-v-1aba7b21]::selection {
846
+ input[data-v-3b8b0ecf]::selection {
818
847
  background: color-mix(in srgb, var(--ui-accent-solid) 20%, transparent);
819
848
  color: inherit;
820
849
  }
821
- input[data-v-1aba7b21] {
850
+ input[data-v-3b8b0ecf] {
822
851
  appearance: none;
823
852
  width: 100%;
824
853
  min-inline-size: 0;
@@ -834,11 +863,11 @@ input[data-v-1aba7b21] {
834
863
  margin: 0;
835
864
  outline: none;
836
865
  }
837
- [data-component~="ui-combobox"][data-ui-combobox-state~="size=sm"] input[data-v-1aba7b21] {
866
+ [data-component~="ui-combobox"][data-ui-combobox-state~="size=sm"] input[data-v-3b8b0ecf] {
838
867
  min-block-size: calc(var(--ui-control-size-sm) - 2px);
839
868
  padding: var(--ui-space-1) var(--ui-space-2);
840
869
  }
841
- button[data-v-1aba7b21] {
870
+ button[data-v-3b8b0ecf] {
842
871
  appearance: none;
843
872
  display: inline-grid;
844
873
  place-items: center;
@@ -853,31 +882,31 @@ button[data-v-1aba7b21] {
853
882
  padding: 0 var(--ui-space-1);
854
883
  cursor: pointer;
855
884
  }
856
- .affordance-icon[data-v-1aba7b21] {
885
+ .affordance-icon[data-v-3b8b0ecf] {
857
886
  display: block;
858
887
  inline-size: var(--ui-icon-size-sm);
859
888
  block-size: var(--ui-icon-size-sm);
860
889
  }
861
- button[data-v-1aba7b21]:hover:enabled {
890
+ button[data-v-3b8b0ecf]:hover:enabled {
862
891
  background: var(--ui-surface-muted);
863
892
  color: var(--ui-text-primary);
864
893
  }
865
- button[data-v-1aba7b21]:focus-visible {
894
+ button[data-v-3b8b0ecf]:focus-visible {
866
895
  outline: none;
867
896
  background: var(--ui-surface-muted);
868
897
  box-shadow: inset 0 0 0 2px color-mix(in srgb, var(--ui-focus-ring) 45%, transparent);
869
898
  }
870
- input[data-v-1aba7b21]:disabled, button[data-v-1aba7b21]:disabled {
899
+ input[data-v-3b8b0ecf]:disabled, button[data-v-3b8b0ecf]:disabled {
871
900
  color: var(--ui-text-muted);
872
901
  cursor: not-allowed;
873
902
  }
874
- .field[data-v-1aba7b21]:has(input:disabled) {
903
+ .field[data-v-3b8b0ecf]:has(input:disabled) {
875
904
  background: var(--ui-control-surface-disabled, var(--ui-surface-muted));
876
905
  }
877
- [data-component~="ui-combobox"][data-ui-combobox-state~="validationStatus=error"] .field[data-v-1aba7b21] {
906
+ [data-component~="ui-combobox"][data-ui-combobox-state~="validationStatus=error"] .field[data-v-3b8b0ecf] {
878
907
  border-color: var(--ui-danger-solid, var(--ui-accent-active));
879
908
  }
880
- .popup[data-v-1aba7b21] {
909
+ .popup[data-v-3b8b0ecf] {
881
910
  box-sizing: border-box;
882
911
  min-inline-size: 12rem;
883
912
  max-inline-size: calc(100vw - 1rem);
@@ -891,40 +920,40 @@ input[data-v-1aba7b21]:disabled, button[data-v-1aba7b21]:disabled {
891
920
  color: var(--ui-text-primary);
892
921
  box-shadow: var(--ui-elevation-overlay, var(--ui-shadow-lg));
893
922
  }
894
- [hidden][data-v-1aba7b21] {
923
+ [hidden][data-v-3b8b0ecf] {
895
924
  display: none;
896
925
  }
897
- .option[data-v-1aba7b21] {
926
+ .option[data-v-3b8b0ecf] {
898
927
  padding: var(--ui-space-2) var(--ui-space-3);
899
928
  border-radius: var(--ui-radius-sm);
900
929
  cursor: pointer;
901
930
  overflow-wrap: anywhere;
902
931
  }
903
- .option[data-v-1aba7b21]:hover, .option.active[data-v-1aba7b21] {
932
+ .option[data-v-3b8b0ecf]:hover, .option.active[data-v-3b8b0ecf] {
904
933
  background: var(--ui-surface-muted);
905
934
  outline: 1px solid var(--ui-focus-ring);
906
935
  outline-offset: -1px;
907
936
  }
908
- .option[aria-disabled="true"][data-v-1aba7b21] {
937
+ .option[aria-disabled="true"][data-v-3b8b0ecf] {
909
938
  color: var(--ui-text-muted);
910
939
  cursor: not-allowed;
911
940
  }
912
- .primary[data-v-1aba7b21] {
941
+ .primary[data-v-3b8b0ecf] {
913
942
  display: block;
914
943
  color: var(--ui-combobox-option-text, var(--ui-text-primary));
915
944
  font-weight: 500;
916
945
  }
917
- .message[data-v-1aba7b21], .group[data-v-1aba7b21] {
946
+ .message[data-v-3b8b0ecf], .group[data-v-3b8b0ecf] {
918
947
  color: var(--ui-combobox-message-text, var(--ui-text-secondary));
919
948
  font-weight: 400;
920
949
  font-size: var(--ui-font-size-sm);
921
950
  line-height: var(--ui-line-height-md);
922
951
  overflow-wrap: anywhere;
923
952
  }
924
- .group[data-v-1aba7b21], .popup .message[data-v-1aba7b21] {
953
+ .group[data-v-3b8b0ecf], .popup .message[data-v-3b8b0ecf] {
925
954
  padding: var(--ui-space-2) var(--ui-space-3);
926
955
  }
927
- .sr-only[data-v-1aba7b21] {
956
+ .sr-only[data-v-3b8b0ecf] {
928
957
  position: absolute;
929
958
  inline-size: 1px;
930
959
  block-size: 1px;
@@ -933,16 +962,16 @@ input[data-v-1aba7b21]:disabled, button[data-v-1aba7b21]:disabled {
933
962
  white-space: nowrap;
934
963
  }
935
964
  @media (pointer: coarse) {
936
- button[data-v-1aba7b21] {
965
+ button[data-v-3b8b0ecf] {
937
966
  min-inline-size: 2.75rem;
938
967
  min-block-size: 2.75rem;
939
968
  }
940
969
  }
941
970
  @media (forced-colors: active) {
942
- .field[data-v-1aba7b21], .popup[data-v-1aba7b21] {
971
+ .field[data-v-3b8b0ecf], .popup[data-v-3b8b0ecf] {
943
972
  border-color: CanvasText;
944
973
  }
945
- .option.active[data-v-1aba7b21] {
974
+ .option.active[data-v-3b8b0ecf] {
946
975
  outline-color: Highlight;
947
976
  }
948
977
  }
@@ -950,12 +979,12 @@ button[data-v-1aba7b21] {
950
979
  /* Multiple mode: every option carries a checkbox, so a list that takes several answers says so
951
980
  before anything is picked. aria-selected is the state; this draws it.
952
981
  Longhands, not shorthands: lowering drops a shorthand that omits a component. */
953
- [data-component~="ui-combobox"][data-ui-combobox-state~="multiple"] .option[data-v-1aba7b21] {
982
+ [data-component~="ui-combobox"][data-ui-combobox-state~="multiple"] .option[data-v-3b8b0ecf] {
954
983
  display: flex;
955
984
  gap: var(--ui-space-2);
956
985
  align-items: center;
957
986
  }
958
- [data-component~="ui-combobox"][data-ui-combobox-state~="multiple"] .option[data-v-1aba7b21]::before {
987
+ [data-component~="ui-combobox"][data-ui-combobox-state~="multiple"] .option[data-v-3b8b0ecf]::before {
959
988
  content: "";
960
989
  flex: none;
961
990
  inline-size: 1.125rem;
@@ -970,7 +999,7 @@ button[data-v-1aba7b21] {
970
999
  background-size: 0.7rem;
971
1000
  }
972
1001
  [data-component~="ui-combobox"][data-ui-combobox-state~="multiple"]
973
- .option[aria-selected="true"][data-v-1aba7b21]::before {
1002
+ .option[aria-selected="true"][data-v-3b8b0ecf]::before {
974
1003
  border-color: var(--ui-accent-solid);
975
1004
  background-color: var(--ui-accent-solid);
976
1005
  background-image: var(
@@ -980,20 +1009,20 @@ button[data-v-1aba7b21] {
980
1009
  }
981
1010
 
982
1011
  /* Multiple mode: chips wrap before the cursor on one flexible field line. */
983
- [data-component~="ui-combobox"][data-ui-combobox-state~="multiple"] .field[data-v-1aba7b21] {
1012
+ [data-component~="ui-combobox"][data-ui-combobox-state~="multiple"] .field[data-v-3b8b0ecf] {
984
1013
  flex-wrap: wrap;
985
1014
  align-items: center;
986
1015
  gap: var(--ui-space-1);
987
1016
  min-block-size: var(--ui-combobox-item-min-block-size, 2.5rem);
988
1017
  padding: var(--ui-space-1);
989
1018
  }
990
- [data-component~="ui-combobox"][data-ui-combobox-state~="multiple"] input[data-v-1aba7b21] {
1019
+ [data-component~="ui-combobox"][data-ui-combobox-state~="multiple"] input[data-v-3b8b0ecf] {
991
1020
  flex: 1 0 var(--ui-combobox-item-input-min-inline-size, 5rem);
992
1021
  width: auto;
993
1022
  min-block-size: 1.75rem;
994
1023
  padding: var(--ui-space-0-5) var(--ui-space-1);
995
1024
  }
996
- .item[data-v-1aba7b21] {
1025
+ .item[data-v-3b8b0ecf] {
997
1026
  appearance: none;
998
1027
  display: inline-flex;
999
1028
  min-inline-size: 0;
@@ -1007,16 +1036,16 @@ button[data-v-1aba7b21] {
1007
1036
  font: inherit;
1008
1037
  cursor: default;
1009
1038
  }
1010
- .item[data-v-1aba7b21]:focus-visible {
1039
+ .item[data-v-3b8b0ecf]:focus-visible {
1011
1040
  outline: 2px solid var(--ui-focus-ring);
1012
1041
  outline-offset: 1px;
1013
1042
  }
1014
- .item[data-v-1aba7b21]:disabled {
1043
+ .item[data-v-3b8b0ecf]:disabled {
1015
1044
  opacity: 0.6;
1016
1045
  }
1017
1046
 
1018
1047
  /* A component that sets its display still honours the hidden attribute on its root. */
1019
- [data-component~="ui-combobox"][hidden][data-v-1aba7b21] {
1048
+ [data-component~="ui-combobox"][hidden][data-v-3b8b0ecf] {
1020
1049
  display: none;
1021
1050
  }
1022
1051
 
@@ -1637,10 +1666,10 @@ svg[data-v-7b1048a0] {
1637
1666
  display: none;
1638
1667
  }
1639
1668
 
1640
- [data-component~="ui-editor-slash-menu"][data-v-346835f7] {
1669
+ [data-component~="ui-editor-slash-menu"][data-v-e7d0f904] {
1641
1670
  user-select: none;
1642
1671
  }
1643
- [data-component~="ui-editor-slash-menu"][data-v-346835f7] {
1672
+ [data-component~="ui-editor-slash-menu"][data-v-e7d0f904] {
1644
1673
  background: var(--ui-surface);
1645
1674
  border: 1px solid var(--ui-border);
1646
1675
  border-radius: var(--ui-radius-dialog);
@@ -1650,12 +1679,12 @@ svg[data-v-7b1048a0] {
1650
1679
  flex-direction: column;
1651
1680
  }
1652
1681
  @media (max-width: 767px) {
1653
- [data-component~="ui-editor-slash-menu"][data-v-346835f7] {
1682
+ [data-component~="ui-editor-slash-menu"][data-v-e7d0f904] {
1654
1683
  border-radius: var(--ui-radius-dialog) var(--ui-radius-dialog) 0 0;
1655
1684
  border-bottom: none;
1656
1685
  }
1657
1686
  }
1658
- .header[data-v-346835f7] {
1687
+ .header[data-v-e7d0f904] {
1659
1688
  display: none;
1660
1689
  align-items: center;
1661
1690
  gap: var(--ui-space-2);
@@ -1668,11 +1697,11 @@ svg[data-v-7b1048a0] {
1668
1697
  letter-spacing: 0.05em;
1669
1698
  }
1670
1699
  @media (max-width: 767px) {
1671
- .header[data-v-346835f7] {
1700
+ .header[data-v-e7d0f904] {
1672
1701
  display: flex;
1673
1702
  }
1674
1703
  }
1675
- .header-query[data-v-346835f7] {
1704
+ .header-query[data-v-e7d0f904] {
1676
1705
  background: var(--ui-surface-hover);
1677
1706
  border-radius: var(--ui-radius-sm);
1678
1707
  padding: 0.1em 0.4em;
@@ -1682,7 +1711,7 @@ svg[data-v-7b1048a0] {
1682
1711
  text-transform: none;
1683
1712
  letter-spacing: 0;
1684
1713
  }
1685
- .list[data-v-346835f7] {
1714
+ .list[data-v-e7d0f904] {
1686
1715
  list-style: none;
1687
1716
  margin: 0;
1688
1717
  padding: var(--ui-space-1) 0;
@@ -1691,12 +1720,12 @@ svg[data-v-7b1048a0] {
1691
1720
  overscroll-behavior: contain;
1692
1721
  }
1693
1722
  @media (max-width: 767px) {
1694
- .list[data-v-346835f7] {
1723
+ .list[data-v-e7d0f904] {
1695
1724
  max-height: calc(60dvh - 80px);
1696
1725
  padding: var(--ui-space-1) 0 var(--ui-space-2);
1697
1726
  }
1698
1727
  }
1699
- .item[data-v-346835f7] {
1728
+ .item[data-v-e7d0f904] {
1700
1729
  display: flex;
1701
1730
  align-items: center;
1702
1731
  gap: var(--ui-space-3);
@@ -1705,10 +1734,10 @@ svg[data-v-7b1048a0] {
1705
1734
  cursor: pointer;
1706
1735
  transition: background-color 120ms ease;
1707
1736
  }
1708
- .item.active[data-v-346835f7] {
1737
+ .item.active[data-v-e7d0f904] {
1709
1738
  background: var(--ui-accent-subtle, rgb(59 130 246 / 0.1));
1710
1739
  }
1711
- .icon[data-v-346835f7] {
1740
+ .icon[data-v-e7d0f904] {
1712
1741
  display: flex;
1713
1742
  align-items: center;
1714
1743
  justify-content: center;
@@ -1724,22 +1753,22 @@ svg[data-v-7b1048a0] {
1724
1753
  flex-shrink: 0;
1725
1754
  line-height: 1;
1726
1755
  }
1727
- .item.active .icon[data-v-346835f7] {
1756
+ .item.active .icon[data-v-e7d0f904] {
1728
1757
  background: var(--ui-accent);
1729
1758
  border-color: var(--ui-accent);
1730
1759
  color: var(--ui-accent-contrast);
1731
1760
  }
1732
- .icon[data-v-346835f7] {
1761
+ .icon[data-v-e7d0f904] {
1733
1762
  --ui-icon-size: 1rem;
1734
1763
  --ui-icon-stroke-width: var(--ui-editor-toolbar-icon-stroke-width, 1.75);
1735
1764
  }
1736
- .body[data-v-346835f7] {
1765
+ .body[data-v-e7d0f904] {
1737
1766
  display: flex;
1738
1767
  min-width: 0;
1739
1768
  flex-direction: column;
1740
1769
  gap: 1px;
1741
1770
  }
1742
- .title[data-v-346835f7] {
1771
+ .title[data-v-e7d0f904] {
1743
1772
  font-size: var(--ui-font-size-sm);
1744
1773
  font-weight: var(--ui-font-medium);
1745
1774
  color: var(--ui-text);
@@ -1747,14 +1776,14 @@ svg[data-v-7b1048a0] {
1747
1776
  overflow: hidden;
1748
1777
  text-overflow: ellipsis;
1749
1778
  }
1750
- .description[data-v-346835f7] {
1779
+ .description[data-v-e7d0f904] {
1751
1780
  font-size: var(--ui-font-size-xs);
1752
1781
  color: var(--ui-text-muted);
1753
1782
  white-space: nowrap;
1754
1783
  overflow: hidden;
1755
1784
  text-overflow: ellipsis;
1756
1785
  }
1757
- .footer[data-v-346835f7] {
1786
+ .footer[data-v-e7d0f904] {
1758
1787
  display: none;
1759
1788
  padding: var(--ui-space-2) var(--ui-space-3);
1760
1789
  border-top: 1px solid var(--ui-border);
@@ -1762,27 +1791,27 @@ svg[data-v-7b1048a0] {
1762
1791
  color: var(--ui-text-muted);
1763
1792
  }
1764
1793
  @media (min-width: 768px) {
1765
- .footer[data-v-346835f7] {
1794
+ .footer[data-v-e7d0f904] {
1766
1795
  display: block;
1767
1796
  }
1768
1797
  }
1769
- [data-component~="ui-editor-slash-menu"] kbd[data-v-346835f7] {
1798
+ [data-component~="ui-editor-slash-menu"] kbd[data-v-e7d0f904] {
1770
1799
  display: inline-flex;
1771
1800
  align-items: center;
1772
1801
  justify-content: center;
1773
1802
  font-family: var(--ui-font-family-mono, ui-monospace, monospace);
1774
- font-size: 10px;
1803
+ font-size: var(--ui-font-size-2xs);
1775
1804
  background: var(--ui-surface-hover);
1776
1805
  border: 1px solid var(--ui-border);
1777
1806
  border-radius: 3px;
1778
1807
  padding: 0 3px;
1779
1808
  color: var(--ui-text-secondary);
1780
1809
  }
1781
- [data-component~="ui-editor-slash-menu"][hidden][data-v-346835f7] {
1810
+ [data-component~="ui-editor-slash-menu"][hidden][data-v-e7d0f904] {
1782
1811
  display: none;
1783
1812
  }
1784
1813
 
1785
- [data-component~="ui-editor-table-context-menu"][data-v-ae062630] {
1814
+ [data-component~="ui-editor-table-context-menu"][data-v-2d9eb67c] {
1786
1815
  /* The max-width is a promise about the menu's footprint, so it counts padding and border. */
1787
1816
  box-sizing: border-box;
1788
1817
  min-width: 14rem;
@@ -1800,12 +1829,12 @@ svg[data-v-7b1048a0] {
1800
1829
  overscroll-behavior: contain;
1801
1830
  scrollbar-width: thin;
1802
1831
  }
1803
- .section[data-v-ae062630] {
1832
+ .section[data-v-2d9eb67c] {
1804
1833
  display: flex;
1805
1834
  flex-direction: column;
1806
1835
  gap: 3px;
1807
1836
  }
1808
- [data-component~="ui-editor-table-context-menu"] button[data-v-ae062630] {
1837
+ [data-component~="ui-editor-table-context-menu"] button[data-v-2d9eb67c] {
1809
1838
  display: flex;
1810
1839
  align-items: center;
1811
1840
  gap: var(--ui-space-2);
@@ -1820,30 +1849,30 @@ svg[data-v-7b1048a0] {
1820
1849
  cursor: pointer;
1821
1850
  color: var(--ui-text);
1822
1851
  }
1823
- [data-component~="ui-editor-table-context-menu"] button[data-v-ae062630] {
1852
+ [data-component~="ui-editor-table-context-menu"] button[data-v-2d9eb67c] {
1824
1853
  --ui-icon-size: 1rem;
1825
1854
  --ui-icon-stroke-width: var(--ui-editor-toolbar-icon-stroke-width, 1.75);
1826
1855
  }
1827
- [data-component~="ui-editor-table-context-menu"] button[data-v-ae062630]:hover:not(:disabled) {
1856
+ [data-component~="ui-editor-table-context-menu"] button[data-v-2d9eb67c]:hover:not(:disabled) {
1828
1857
  background: var(--ui-surface-hover);
1829
1858
  }
1830
- [data-component~="ui-editor-table-context-menu"] button.selected[data-v-ae062630] {
1859
+ [data-component~="ui-editor-table-context-menu"] button.selected[data-v-2d9eb67c] {
1831
1860
  background: var(--ui-accent-subtle, rgb(59 130 246 / 0.1));
1832
1861
  }
1833
- [data-component~="ui-editor-table-context-menu"] button.danger[data-v-ae062630] {
1862
+ [data-component~="ui-editor-table-context-menu"] button.danger[data-v-2d9eb67c] {
1834
1863
  color: var(--ui-danger);
1835
1864
  }
1836
- .swatches[data-v-ae062630] {
1865
+ .swatches[data-v-2d9eb67c] {
1837
1866
  display: grid;
1838
1867
  grid-template-columns: repeat(3, minmax(0, 1fr));
1839
1868
  gap: 3px;
1840
1869
  }
1841
- .swatch-button[data-v-ae062630] {
1870
+ .swatch-button[data-v-2d9eb67c] {
1842
1871
  display: inline-flex;
1843
1872
  align-items: center;
1844
1873
  gap: var(--ui-space-2);
1845
1874
  }
1846
- .swatch[data-v-ae062630] {
1875
+ .swatch[data-v-2d9eb67c] {
1847
1876
  display: inline-flex;
1848
1877
  width: 1rem;
1849
1878
  height: 1rem;
@@ -1853,7 +1882,7 @@ svg[data-v-7b1048a0] {
1853
1882
  box-shadow: inset 0 0 0 1px rgb(255 255 255 / 0.35);
1854
1883
  flex-shrink: 0;
1855
1884
  }
1856
- .swatch.default[data-v-ae062630] {
1885
+ .swatch.default[data-v-2d9eb67c] {
1857
1886
  position: relative;
1858
1887
  background:
1859
1888
  linear-gradient(
@@ -1865,24 +1894,24 @@ svg[data-v-7b1048a0] {
1865
1894
  ),
1866
1895
  var(--ui-surface);
1867
1896
  }
1868
- .swatch-label[data-v-ae062630] {
1897
+ .swatch-label[data-v-2d9eb67c] {
1869
1898
  min-width: 0;
1870
1899
  white-space: nowrap;
1871
1900
  }
1872
- .heading[data-v-ae062630] {
1901
+ .heading[data-v-2d9eb67c] {
1873
1902
  padding: var(--ui-space-1) var(--ui-space-2);
1874
- font-size: 0.6875rem;
1903
+ font-size: var(--ui-font-size-2xs);
1875
1904
  font-weight: 700;
1876
1905
  letter-spacing: 0.05em;
1877
1906
  text-transform: uppercase;
1878
1907
  color: var(--ui-text-muted);
1879
1908
  }
1880
- .sep[data-v-ae062630] {
1909
+ .sep[data-v-2d9eb67c] {
1881
1910
  height: 1px;
1882
1911
  background: var(--ui-border);
1883
1912
  margin: var(--ui-space-1) 0;
1884
1913
  }
1885
- [data-component~="ui-editor-table-context-menu"][hidden][data-v-ae062630] {
1914
+ [data-component~="ui-editor-table-context-menu"][hidden][data-v-2d9eb67c] {
1886
1915
  display: none;
1887
1916
  }
1888
1917
 
@@ -2157,7 +2186,7 @@ svg[data-v-7b1048a0] {
2157
2186
  display: none;
2158
2187
  }
2159
2188
 
2160
- .looma-editor__mobile-toolbar-shell [data-component~="ui-editor-table-toolbar"][data-v-31b70e7c] {
2189
+ .looma-editor__mobile-toolbar-shell [data-component~="ui-editor-table-toolbar"][data-v-1b253cb1] {
2161
2190
  min-width: max-content;
2162
2191
  min-height: 100%;
2163
2192
  padding: 0;
@@ -2167,15 +2196,15 @@ svg[data-v-7b1048a0] {
2167
2196
  box-shadow: none;
2168
2197
  backdrop-filter: none;
2169
2198
  }
2170
- .looma-editor__mobile-toolbar-shell [data-component~="ui-editor-table-toolbar"] button[data-v-31b70e7c] {
2199
+ .looma-editor__mobile-toolbar-shell [data-component~="ui-editor-table-toolbar"] button[data-v-1b253cb1] {
2171
2200
  min-height: 44px;
2172
2201
  background: transparent;
2173
2202
  }
2174
- .looma-editor__mobile-toolbar-shell [data-component~="ui-editor-table-toolbar"] button.active[data-v-31b70e7c],
2175
- .looma-editor__mobile-toolbar-shell [data-component~="ui-editor-table-toolbar"] button.selected[data-v-31b70e7c] {
2203
+ .looma-editor__mobile-toolbar-shell [data-component~="ui-editor-table-toolbar"] button.active[data-v-1b253cb1],
2204
+ .looma-editor__mobile-toolbar-shell [data-component~="ui-editor-table-toolbar"] button.selected[data-v-1b253cb1] {
2176
2205
  background: var(--ui-accent-soft, var(--ui-accent-subtle));
2177
2206
  }
2178
- .looma-editor__mobile-toolbar-shell [data-component~="ui-editor-table-toolbar"] .menu[data-v-31b70e7c] {
2207
+ .looma-editor__mobile-toolbar-shell [data-component~="ui-editor-table-toolbar"] .menu[data-v-1b253cb1] {
2179
2208
  top: auto;
2180
2209
  right: 0;
2181
2210
  bottom: calc(100% + var(--ui-space-2));
@@ -2183,7 +2212,7 @@ svg[data-v-7b1048a0] {
2183
2212
  overflow-y: auto;
2184
2213
  overscroll-behavior: contain;
2185
2214
  }
2186
- [data-component~="ui-editor-table-toolbar"][data-v-31b70e7c] {
2215
+ [data-component~="ui-editor-table-toolbar"][data-v-1b253cb1] {
2187
2216
  display: inline-flex;
2188
2217
  align-items: center;
2189
2218
  gap: var(--ui-space-1);
@@ -2194,21 +2223,21 @@ svg[data-v-7b1048a0] {
2194
2223
  box-shadow: var(--ui-shadow-lg, 0 10px 15px -3px rgb(0 0 0 / 0.1));
2195
2224
  backdrop-filter: blur(10px);
2196
2225
  }
2197
- .group[data-v-31b70e7c] {
2226
+ .group[data-v-1b253cb1] {
2198
2227
  display: inline-flex;
2199
2228
  align-items: center;
2200
2229
  gap: 2px;
2201
2230
  overflow: hidden;
2202
2231
  }
2203
- .sep[data-v-31b70e7c] {
2232
+ .sep[data-v-1b253cb1] {
2204
2233
  width: 1px;
2205
2234
  align-self: stretch;
2206
2235
  background: var(--ui-border);
2207
2236
  }
2208
- .overflow[data-v-31b70e7c] {
2237
+ .overflow[data-v-1b253cb1] {
2209
2238
  position: relative;
2210
2239
  }
2211
- [data-component~="ui-editor-table-toolbar"] button[data-v-31b70e7c] {
2240
+ [data-component~="ui-editor-table-toolbar"] button[data-v-1b253cb1] {
2212
2241
  display: inline-flex;
2213
2242
  align-items: center;
2214
2243
  justify-content: center;
@@ -2225,39 +2254,39 @@ svg[data-v-7b1048a0] {
2225
2254
  padding: var(--ui-space-2) var(--ui-space-2);
2226
2255
  white-space: nowrap;
2227
2256
  }
2228
- [data-component~="ui-editor-table-toolbar"] button[data-v-31b70e7c]:hover {
2257
+ [data-component~="ui-editor-table-toolbar"] button[data-v-1b253cb1]:hover {
2229
2258
  background: var(--ui-surface-hover);
2230
2259
  }
2231
- [data-component~="ui-editor-table-toolbar"] button.active[data-v-31b70e7c] {
2260
+ [data-component~="ui-editor-table-toolbar"] button.active[data-v-1b253cb1] {
2232
2261
  background: var(--ui-accent-soft, var(--ui-accent-subtle));
2233
2262
  color: var(--ui-accent-active);
2234
2263
  }
2235
- .group button[data-v-31b70e7c] {
2264
+ .group button[data-v-1b253cb1] {
2236
2265
  border-radius: var(--ui-radius-sm);
2237
2266
  }
2238
- .group button + button[data-v-31b70e7c] {
2267
+ .group button + button[data-v-1b253cb1] {
2239
2268
  border-left: 0;
2240
2269
  }
2241
- [data-component~="ui-editor-table-toolbar"] .more[data-v-31b70e7c] {
2270
+ [data-component~="ui-editor-table-toolbar"] .more[data-v-1b253cb1] {
2242
2271
  border: 0;
2243
2272
  border-radius: var(--ui-radius-sm);
2244
2273
  }
2245
- [data-component~="ui-editor-table-toolbar"] button.danger[data-v-31b70e7c] {
2274
+ [data-component~="ui-editor-table-toolbar"] button.danger[data-v-1b253cb1] {
2246
2275
  color: var(--ui-danger);
2247
2276
  }
2248
- [data-component~="ui-editor-table-toolbar"][data-v-31b70e7c] {
2277
+ [data-component~="ui-editor-table-toolbar"][data-v-1b253cb1] {
2249
2278
  --ui-icon-size: var(--ui-editor-toolbar-icon-size, 1rem);
2250
2279
  --ui-icon-stroke-width: var(--ui-editor-toolbar-icon-stroke-width, 1.75);
2251
2280
  }
2252
- .chevron[data-v-31b70e7c] {
2281
+ .chevron[data-v-1b253cb1] {
2253
2282
  display: inline-flex;
2254
2283
  --ui-icon-size: 0.875rem;
2255
2284
  }
2256
- [data-component~="ui-editor-table-toolbar"] .icon-button[data-v-31b70e7c] {
2285
+ [data-component~="ui-editor-table-toolbar"] .icon-button[data-v-1b253cb1] {
2257
2286
  width: 32px;
2258
2287
  padding-inline: 0;
2259
2288
  }
2260
- .menu[data-v-31b70e7c] {
2289
+ .menu[data-v-1b253cb1] {
2261
2290
  position: absolute;
2262
2291
  top: calc(100% + var(--ui-space-2));
2263
2292
  right: 0;
@@ -2272,35 +2301,35 @@ svg[data-v-7b1048a0] {
2272
2301
  gap: 2px;
2273
2302
  z-index: 2;
2274
2303
  }
2275
- .menu-section + .menu-section[data-v-31b70e7c] {
2304
+ .menu-section + .menu-section[data-v-1b253cb1] {
2276
2305
  margin-top: var(--ui-space-1);
2277
2306
  padding-top: var(--ui-space-1);
2278
2307
  border-top: 1px solid color-mix(in srgb, var(--ui-border) 80%, transparent);
2279
2308
  }
2280
- .menu-heading[data-v-31b70e7c] {
2309
+ .menu-heading[data-v-1b253cb1] {
2281
2310
  padding: var(--ui-space-1) var(--ui-space-2);
2282
- font-size: 0.6875rem;
2311
+ font-size: var(--ui-font-size-2xs);
2283
2312
  font-weight: 700;
2284
2313
  letter-spacing: 0.05em;
2285
2314
  text-transform: uppercase;
2286
2315
  color: var(--ui-text-muted);
2287
2316
  }
2288
- .menu button[data-v-31b70e7c] {
2317
+ .menu button[data-v-1b253cb1] {
2289
2318
  display: flex;
2290
2319
  justify-content: flex-start;
2291
2320
  width: 100%;
2292
2321
  text-align: left;
2293
2322
  }
2294
- .swatches[data-v-31b70e7c] {
2323
+ .swatches[data-v-1b253cb1] {
2295
2324
  display: grid;
2296
2325
  grid-template-columns: repeat(3, minmax(0, 1fr));
2297
2326
  gap: 2px;
2298
2327
  }
2299
- [data-component~="ui-editor-table-toolbar"] .swatch-button[data-v-31b70e7c] {
2328
+ [data-component~="ui-editor-table-toolbar"] .swatch-button[data-v-1b253cb1] {
2300
2329
  gap: var(--ui-space-1);
2301
2330
  justify-content: flex-start;
2302
2331
  }
2303
- .swatch[data-v-31b70e7c] {
2332
+ .swatch[data-v-1b253cb1] {
2304
2333
  width: 14px;
2305
2334
  height: 14px;
2306
2335
  flex: 0 0 14px;
@@ -2308,15 +2337,15 @@ svg[data-v-7b1048a0] {
2308
2337
  border-radius: 3px;
2309
2338
  background: var(--_swatch);
2310
2339
  }
2311
- .swatch.default[data-v-31b70e7c] {
2340
+ .swatch.default[data-v-1b253cb1] {
2312
2341
  background:
2313
2342
  linear-gradient(135deg, transparent 44%, var(--ui-danger) 46% 54%, transparent 56%),
2314
2343
  var(--ui-surface);
2315
2344
  }
2316
- .swatch-button.selected[data-v-31b70e7c] {
2345
+ .swatch-button.selected[data-v-1b253cb1] {
2317
2346
  background: var(--ui-accent-soft, var(--ui-accent-subtle));
2318
2347
  }
2319
- [data-component~="ui-editor-table-toolbar"][hidden][data-v-31b70e7c] {
2348
+ [data-component~="ui-editor-table-toolbar"][hidden][data-v-1b253cb1] {
2320
2349
  display: none;
2321
2350
  }
2322
2351
 
@@ -2495,7 +2524,7 @@ svg[data-v-62b77471-s] {
2495
2524
  display: none;
2496
2525
  }
2497
2526
 
2498
- [data-component~="ui-form-field"][data-v-605db5c0] {
2527
+ [data-component~="ui-form-field"][data-v-13b85af2] {
2499
2528
  display: grid;
2500
2529
  gap: var(--ui-space-2);
2501
2530
  min-inline-size: 0;
@@ -2505,30 +2534,30 @@ svg[data-v-62b77471-s] {
2505
2534
 
2506
2535
  /* Each named region styles whatever fills it, however it was slotted (slot="…" in HTML, #label
2507
2536
  in Vue), and generates no box of its own, so an empty region adds no gap. */
2508
- .label[data-v-605db5c0],
2509
- .help[data-v-605db5c0],
2510
- .error[data-v-605db5c0] {
2537
+ .label[data-v-13b85af2],
2538
+ .help[data-v-13b85af2],
2539
+ .error[data-v-13b85af2] {
2511
2540
  display: contents;
2512
2541
  }
2513
- .label[data-v-605db5c0] {
2542
+ .label[data-v-13b85af2] {
2514
2543
  color: var(--ui-text-secondary);
2515
- font-size: 0.95rem;
2544
+ font-size: var(--ui-font-size-sm);
2516
2545
  }
2517
- .help[data-v-605db5c0] {
2546
+ .help[data-v-13b85af2] {
2518
2547
  color: var(--ui-text-muted);
2519
- font-size: 0.875rem;
2548
+ font-size: var(--ui-font-size-sm);
2520
2549
  line-height: var(--ui-line-height-md);
2521
2550
  }
2522
- .help > [data-v-605db5c0-s] {
2551
+ .help > [data-v-13b85af2-s] {
2523
2552
  min-block-size: var(--ui-form-field-help-min-block-size, 0);
2524
2553
  }
2525
- .error[data-v-605db5c0],[role="alert"][data-v-605db5c0-s] {
2554
+ .error[data-v-13b85af2],[role="alert"][data-v-13b85af2-s] {
2526
2555
  color: var(--ui-accent-active);
2527
- font-size: 0.875rem;
2556
+ font-size: var(--ui-font-size-sm);
2528
2557
  }
2529
2558
 
2530
2559
  /* A component that sets its display still honours the hidden attribute on its root. */
2531
- [data-component~="ui-form-field"][hidden][data-v-605db5c0] {
2560
+ [data-component~="ui-form-field"][hidden][data-v-13b85af2] {
2532
2561
  display: none;
2533
2562
  }
2534
2563
 
@@ -4052,7 +4081,7 @@ to {
4052
4081
  display: none;
4053
4082
  }
4054
4083
 
4055
- [data-component~="ui-tree-item"][data-v-9b8fd08d] {
4084
+ [data-component~="ui-tree-item"][data-v-d093d318] {
4056
4085
  --_tree-row-min-height: 32px;
4057
4086
  --_tree-disclosure-size: 16px;
4058
4087
 
@@ -4061,14 +4090,14 @@ to {
4061
4090
  min-inline-size: 0;
4062
4091
  margin-inline-start: calc(var(--ui-tree-item-depth, 0) * var(--ui-tree-indent, 16px));
4063
4092
  }
4064
- .row[data-v-9b8fd08d] {
4093
+ .row[data-v-d093d318] {
4065
4094
  position: relative;
4066
4095
  display: grid;
4067
4096
  grid-template-columns: var(--_tree-disclosure-size) auto minmax(0, 1fr);
4068
4097
  align-items: center;
4069
4098
  min-block-size: var(--ui-tree-item-min-block-size, var(--_tree-row-min-height));
4070
4099
  min-inline-size: 0;
4071
- font-size: var(--ui-tree-item-font-size, var(--ui-font-size-ui));
4100
+ font-size: var(--ui-tree-item-font-size, var(--ui-font-size-sm));
4072
4101
  border-radius: var(--ui-radius-md);
4073
4102
  color: var(--ui-text-secondary);
4074
4103
  transition:
@@ -4078,38 +4107,38 @@ to {
4078
4107
  box-shadow var(--ui-motion-fast) var(--ui-motion-ease),
4079
4108
  min-block-size var(--ui-motion-base) var(--ui-motion-ease);
4080
4109
  }
4081
- .row[data-v-9b8fd08d]:hover,
4082
- [data-component~="ui-tree-item"][data-ui-tree-item-state~="selected"] .row[data-v-9b8fd08d],
4083
- .row[data-v-9b8fd08d]:focus-within {
4110
+ .row[data-v-d093d318]:hover,
4111
+ [data-component~="ui-tree-item"][data-ui-tree-item-state~="selected"] .row[data-v-d093d318],
4112
+ .row[data-v-d093d318]:focus-within {
4084
4113
  color: var(--ui-text-primary);
4085
4114
  background: var(--ui-surface-muted);
4086
4115
  }
4087
- [data-component~="ui-tree-item"][data-ui-tree-item-state~="disabled"] .row[data-v-9b8fd08d] {
4116
+ [data-component~="ui-tree-item"][data-ui-tree-item-state~="disabled"] .row[data-v-d093d318] {
4088
4117
  opacity: 0.55;
4089
4118
  }
4090
- [data-component~="ui-tree-item"][data-dragging] .row[data-v-9b8fd08d] {
4119
+ [data-component~="ui-tree-item"][data-dragging] .row[data-v-d093d318] {
4091
4120
  opacity: 0.42;
4092
4121
  }
4093
- [data-component~="ui-tree-item"][data-v-9b8fd08d]:focus {
4122
+ [data-component~="ui-tree-item"][data-v-d093d318]:focus {
4094
4123
  outline: none;
4095
4124
  }
4096
- [data-component~="ui-tree-item"]:focus-visible .row[data-v-9b8fd08d] {
4125
+ [data-component~="ui-tree-item"]:focus-visible .row[data-v-d093d318] {
4097
4126
  box-shadow: 0 0 0 2px var(--ui-focus-ring);
4098
4127
  }
4099
4128
 
4100
4129
  /* Child combinators: drop feedback belongs to this item's own row, not the rows nested in it. */
4101
- [data-component~="ui-tree-item"][data-drop-position="inside"] > .row[data-v-9b8fd08d] {
4130
+ [data-component~="ui-tree-item"][data-drop-position="inside"] > .row[data-v-d093d318] {
4102
4131
  background: var(--ui-accent-subtle);
4103
4132
  box-shadow: inset 0 0 0 1px var(--ui-tree-drop-color, var(--ui-accent-solid));
4104
4133
  }
4105
- .disclosure[data-v-9b8fd08d],
4106
- .disclosure-spacer[data-v-9b8fd08d] {
4134
+ .disclosure[data-v-d093d318],
4135
+ .disclosure-spacer[data-v-d093d318] {
4107
4136
  grid-column: 1;
4108
4137
  grid-row: 1;
4109
4138
  inline-size: var(--_tree-disclosure-size);
4110
4139
  block-size: 28px;
4111
4140
  }
4112
- .disclosure[data-v-9b8fd08d] {
4141
+ .disclosure[data-v-d093d318] {
4113
4142
  display: grid;
4114
4143
  /* Start-aligned: the chevron's ink, not its hit area, aligns with the content above it. */
4115
4144
  place-items: center start;
@@ -4120,14 +4149,14 @@ to {
4120
4149
  border-radius: var(--ui-radius-sm);
4121
4150
  cursor: pointer;
4122
4151
  }
4123
- .disclosure[hidden][data-v-9b8fd08d] {
4152
+ .disclosure[hidden][data-v-d093d318] {
4124
4153
  display: none;
4125
4154
  }
4126
- .disclosure[data-v-9b8fd08d]:hover {
4155
+ .disclosure[data-v-d093d318]:hover {
4127
4156
  color: var(--ui-text-primary);
4128
4157
  background: var(--ui-surface-elevated);
4129
4158
  }
4130
- .disclosure-icon[data-v-9b8fd08d] {
4159
+ .disclosure-icon[data-v-d093d318] {
4131
4160
  display: grid;
4132
4161
  place-items: center;
4133
4162
  inline-size: 12px;
@@ -4135,7 +4164,7 @@ to {
4135
4164
  transform: rotate(-90deg);
4136
4165
  transition: transform var(--ui-motion-fast) var(--ui-motion-ease);
4137
4166
  }
4138
- .disclosure-icon[data-v-9b8fd08d]::before {
4167
+ .disclosure-icon[data-v-d093d318]::before {
4139
4168
  display: block;
4140
4169
  inline-size: 0.375rem;
4141
4170
  block-size: 0.375rem;
@@ -4145,19 +4174,19 @@ to {
4145
4174
  /* A chevron's ink sits below its box centre; lift it so it centres optically (in either rotation). */
4146
4175
  transform: translateY(-20%) rotate(45deg);
4147
4176
  }
4148
- [data-component~="ui-tree-item"][aria-expanded="true"] .disclosure-icon[data-v-9b8fd08d] {
4177
+ [data-component~="ui-tree-item"][aria-expanded="true"] .disclosure-icon[data-v-d093d318] {
4149
4178
  transform: rotate(0deg);
4150
4179
  }
4151
4180
 
4152
4181
  /* Lucide grip-vertical, filling the handle as in Looma 0.2. */
4153
- .drag-handle svg[data-v-9b8fd08d] {
4182
+ .drag-handle svg[data-v-d093d318] {
4154
4183
  display: block;
4155
4184
  inline-size: 100%;
4156
4185
  block-size: 100%;
4157
4186
  }
4158
4187
 
4159
4188
  /* Slotted content is outside this scope, so :has() cannot see it; hide only a truly empty slot. */
4160
- .leading[data-v-9b8fd08d] {
4189
+ .leading[data-v-d093d318] {
4161
4190
  display: inline-grid;
4162
4191
  place-items: center;
4163
4192
  grid-column: 2;
@@ -4167,12 +4196,12 @@ to {
4167
4196
  margin-inline-start: var(--ui-space-1);
4168
4197
  color: var(--ui-text-muted);
4169
4198
  }
4170
- .leading[data-v-9b8fd08d]:empty {
4199
+ .leading[data-v-d093d318]:empty {
4171
4200
  display: none;
4172
4201
  }
4173
4202
 
4174
4203
  /* Icons match the label's size (as in Knit's tree): an unsized SVG would otherwise render 300×150. */
4175
- svg[data-v-9b8fd08d-s],img[data-v-9b8fd08d-s] {
4204
+ svg[data-v-d093d318-s],img[data-v-d093d318-s] {
4176
4205
  display: block;
4177
4206
  inline-size: 1em;
4178
4207
  block-size: 1em;
@@ -4181,7 +4210,7 @@ svg[data-v-9b8fd08d-s],img[data-v-9b8fd08d-s] {
4181
4210
 
4182
4211
  /* The label spans the row's height and centres its content, so slotted content (a link) can
4183
4212
  stretch to fill the row as its own hit area; the padding tokens remove the inset. */
4184
- .label[data-v-9b8fd08d] {
4213
+ .label[data-v-d093d318] {
4185
4214
  grid-column: 3;
4186
4215
  grid-row: 1;
4187
4216
  align-self: stretch;
@@ -4194,15 +4223,15 @@ svg[data-v-9b8fd08d-s],img[data-v-9b8fd08d-s] {
4194
4223
 
4195
4224
  /* Slotted label content fills the cell, so a link is the row's hit area rather than sizing to
4196
4225
  its own text and reading as overflow. */
4197
- .label > [data-v-9b8fd08d-s] {
4226
+ .label > [data-v-d093d318-s] {
4198
4227
  flex: 1 1 auto;
4199
4228
  min-inline-size: 0;
4200
4229
  }
4201
4230
 
4202
4231
  /* The controls sit over the label's end, so the text fades out where they begin. The fade is
4203
4232
  the truncation mark while it shows: an ellipsis under it would read as a second one. */
4204
- .row:hover > .label[data-v-9b8fd08d],
4205
- .row:focus-within > .label[data-v-9b8fd08d] {
4233
+ .row:hover > .label[data-v-d093d318],
4234
+ .row:focus-within > .label[data-v-d093d318] {
4206
4235
  text-overflow: clip;
4207
4236
  mask-image: linear-gradient(
4208
4237
  to right,
@@ -4210,19 +4239,19 @@ svg[data-v-9b8fd08d-s],img[data-v-9b8fd08d-s] {
4210
4239
  transparent calc(100% - var(--_tree-actions-width, 1.75rem))
4211
4240
  );
4212
4241
  }
4213
- .row:hover > .label[data-v-9b8fd08d]:dir(rtl),
4214
- .row:focus-within > .label[data-v-9b8fd08d]:dir(rtl) {
4242
+ .row:hover > .label[data-v-d093d318]:dir(rtl),
4243
+ .row:focus-within > .label[data-v-d093d318]:dir(rtl) {
4215
4244
  mask-image: linear-gradient(
4216
4245
  to left,
4217
4246
  #000 calc(100% - var(--_tree-actions-width, 1.75rem) - var(--ui-space-3)),
4218
4247
  transparent calc(100% - var(--_tree-actions-width, 1.75rem))
4219
4248
  );
4220
4249
  }
4221
- .row:hover > .label > [data-v-9b8fd08d-s],
4222
- .row:focus-within > .label > [data-v-9b8fd08d-s] {
4250
+ .row:hover > .label > [data-v-d093d318-s],
4251
+ .row:focus-within > .label > [data-v-d093d318-s] {
4223
4252
  text-overflow: clip;
4224
4253
  }
4225
- .actions[data-v-9b8fd08d] {
4254
+ .actions[data-v-d093d318] {
4226
4255
  position: absolute;
4227
4256
  z-index: 1;
4228
4257
  inset-block: 0;
@@ -4234,18 +4263,18 @@ svg[data-v-9b8fd08d-s],img[data-v-9b8fd08d-s] {
4234
4263
  pointer-events: none;
4235
4264
  transition: opacity var(--ui-motion-fast) var(--ui-motion-ease);
4236
4265
  }
4237
- .row:hover > .actions[data-v-9b8fd08d],
4238
- .row:focus-within > .actions[data-v-9b8fd08d] {
4266
+ .row:hover > .actions[data-v-d093d318],
4267
+ .row:focus-within > .actions[data-v-d093d318] {
4239
4268
  opacity: 1;
4240
4269
  pointer-events: auto;
4241
4270
  }
4242
4271
 
4243
4272
  /* Without hover there is no reveal, so the controls keep their own column. */
4244
4273
  @media (hover: none) {
4245
- .row[data-v-9b8fd08d] {
4274
+ .row[data-v-d093d318] {
4246
4275
  grid-template-columns: var(--_tree-disclosure-size) auto minmax(0, 1fr) auto;
4247
4276
  }
4248
- .actions[data-v-9b8fd08d] {
4277
+ .actions[data-v-d093d318] {
4249
4278
  position: static;
4250
4279
  grid-column: 4;
4251
4280
  grid-row: 1;
@@ -4255,7 +4284,7 @@ svg[data-v-9b8fd08d-s],img[data-v-9b8fd08d-s] {
4255
4284
  pointer-events: auto;
4256
4285
  }
4257
4286
  }
4258
- .drag-handle[data-v-9b8fd08d] {
4287
+ .drag-handle[data-v-d093d318] {
4259
4288
  position: absolute;
4260
4289
  z-index: 2;
4261
4290
  inset-block-start: 50%;
@@ -4276,16 +4305,16 @@ svg[data-v-9b8fd08d-s],img[data-v-9b8fd08d-s] {
4276
4305
  transform: translateY(-50%);
4277
4306
  transition: opacity var(--ui-motion-fast) var(--ui-motion-ease);
4278
4307
  }
4279
- .row:hover .drag-handle[data-v-9b8fd08d],
4280
- .drag-handle[data-v-9b8fd08d]:hover,
4281
- .drag-handle[data-v-9b8fd08d]:focus-visible,
4282
- [data-component~="ui-tree-item"][data-dragging] > .row > .drag-handle[data-v-9b8fd08d] {
4308
+ .row:hover .drag-handle[data-v-d093d318],
4309
+ .drag-handle[data-v-d093d318]:hover,
4310
+ .drag-handle[data-v-d093d318]:focus-visible,
4311
+ [data-component~="ui-tree-item"][data-dragging] > .row > .drag-handle[data-v-d093d318] {
4283
4312
  opacity: 1;
4284
4313
  }
4285
- .drag-handle[data-v-9b8fd08d]:active {
4314
+ .drag-handle[data-v-d093d318]:active {
4286
4315
  cursor: grabbing;
4287
4316
  }
4288
- .drop-indicator[data-v-9b8fd08d] {
4317
+ .drop-indicator[data-v-d093d318] {
4289
4318
  position: absolute;
4290
4319
  z-index: 3;
4291
4320
  inset-inline: 1px;
@@ -4295,8 +4324,8 @@ svg[data-v-9b8fd08d-s],img[data-v-9b8fd08d-s] {
4295
4324
  background: var(--ui-tree-drop-color, var(--ui-accent-solid));
4296
4325
  pointer-events: none;
4297
4326
  }
4298
- .drop-indicator[data-v-9b8fd08d]::before,
4299
- .drop-indicator[data-v-9b8fd08d]::after {
4327
+ .drop-indicator[data-v-d093d318]::before,
4328
+ .drop-indicator[data-v-d093d318]::after {
4300
4329
  content: "";
4301
4330
  position: absolute;
4302
4331
  inset-block-start: 50%;
@@ -4307,39 +4336,39 @@ svg[data-v-9b8fd08d-s],img[data-v-9b8fd08d-s] {
4307
4336
  background: var(--ui-surface-elevated);
4308
4337
  transform: translateY(-50%);
4309
4338
  }
4310
- .drop-indicator[data-v-9b8fd08d]::before {
4339
+ .drop-indicator[data-v-d093d318]::before {
4311
4340
  inset-inline-start: -1px;
4312
4341
  }
4313
- .drop-indicator[data-v-9b8fd08d]::after {
4342
+ .drop-indicator[data-v-d093d318]::after {
4314
4343
  inset-inline-end: -1px;
4315
4344
  }
4316
- [data-component~="ui-tree-item"][data-drop-position="before"] > .row > .row-drop-indicator[data-v-9b8fd08d] {
4345
+ [data-component~="ui-tree-item"][data-drop-position="before"] > .row > .row-drop-indicator[data-v-d093d318] {
4317
4346
  display: block;
4318
4347
  inset-block-start: -1px;
4319
4348
  }
4320
- [data-component~="ui-tree-item"][data-drop-position="after"] > .subtree-drop-indicator[data-v-9b8fd08d] {
4349
+ [data-component~="ui-tree-item"][data-drop-position="after"] > .subtree-drop-indicator[data-v-d093d318] {
4321
4350
  display: block;
4322
4351
  inset-block-end: -1px;
4323
4352
  }
4324
- .children[hidden][data-v-9b8fd08d] {
4353
+ .children[hidden][data-v-d093d318] {
4325
4354
  display: none;
4326
4355
  }
4327
- html[data-ui-input-modality="touch"] [data-component~="ui-tree-item"][data-v-9b8fd08d] {
4356
+ html[data-ui-input-modality="touch"] [data-component~="ui-tree-item"][data-v-d093d318] {
4328
4357
  --_tree-row-min-height: 44px;
4329
4358
  }
4330
- html[data-ui-input-modality="touch"] [data-component~="ui-tree-item"] .drag-handle[data-v-9b8fd08d] {
4359
+ html[data-ui-input-modality="touch"] [data-component~="ui-tree-item"] .drag-handle[data-v-d093d318] {
4331
4360
  display: none;
4332
4361
  }
4333
4362
  @media (prefers-reduced-motion: reduce) {
4334
- .row[data-v-9b8fd08d],
4335
- .disclosure-icon[data-v-9b8fd08d],
4336
- .drag-handle[data-v-9b8fd08d] {
4363
+ .row[data-v-d093d318],
4364
+ .disclosure-icon[data-v-d093d318],
4365
+ .drag-handle[data-v-d093d318] {
4337
4366
  transition: none;
4338
4367
  }
4339
4368
  }
4340
4369
 
4341
4370
  /* A component that sets its display still honours the hidden attribute on its root. */
4342
- [data-component~="ui-tree-item"][hidden][data-v-9b8fd08d] {
4371
+ [data-component~="ui-tree-item"][hidden][data-v-d093d318] {
4343
4372
  display: none;
4344
4373
  }
4345
4374
  /**