@threadlabs/looma 0.6.0 → 0.6.2

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 (71) hide show
  1. package/components/ui-avatar/ui-avatar.html +13 -0
  2. package/components/ui-avatar-group/ui-avatar-group.html +7 -2
  3. package/components/ui-avatar-group/ui-avatar-group.js +3 -3
  4. package/components/ui-badge/ui-badge.html +14 -0
  5. package/components/ui-button/ui-button.html +2 -2
  6. package/components/ui-cluster/ui-cluster.html +1 -1
  7. package/components/ui-combobox/ui-combobox.html +112 -46
  8. package/components/ui-combobox/ui-combobox.js +14 -2
  9. package/components/ui-editor-insert-table-grid/ui-editor-insert-table-grid.html +3 -3
  10. package/components/ui-editor-table-context-menu/ui-editor-table-context-menu.html +2 -2
  11. package/components/ui-editor-table-toolbar/ui-editor-table-toolbar.html +2 -2
  12. package/components/ui-editor-toolbar/ui-editor-toolbar.html +5 -3
  13. package/components/ui-menu-item/ui-menu-item.html +13 -0
  14. package/components/ui-stack/ui-stack.html +1 -1
  15. package/components/ui-tabs/ui-tabs.html +13 -0
  16. package/components/ui-toast-region/ui-toast-region.html +2 -2
  17. package/components/ui-tooltip/ui-tooltip.html +3 -0
  18. package/components/ui-tooltip/ui-tooltip.js +24 -3
  19. package/dist/index.js +1 -1
  20. package/package.json +1 -1
  21. package/styles/ui-avatar-group.css +7 -2
  22. package/styles/ui-avatar.css +19 -0
  23. package/styles/ui-badge.css +21 -1
  24. package/styles/ui-cluster.css +1 -1
  25. package/styles/ui-combobox.css +52 -1
  26. package/styles/ui-editor-insert-table-grid.css +2 -2
  27. package/styles/ui-editor-table-context-menu.css +1 -1
  28. package/styles/ui-editor-table-toolbar.css +1 -1
  29. package/styles/ui-editor-toolbar.css +5 -3
  30. package/styles/ui-menu-item.css +20 -1
  31. package/styles/ui-stack.css +1 -1
  32. package/styles/ui-tabs.css +19 -0
  33. package/styles/ui-toast-region.css +2 -2
  34. package/tokens.css +4 -0
  35. package/vanilla/UiCombobox.js +141 -119
  36. package/vanilla/UiEditorInsertTableGrid.js +1 -1
  37. package/vanilla/UiEditorTableContextMenu.js +1 -1
  38. package/vanilla/UiEditorTableToolbar.js +1 -1
  39. package/vanilla/UiTooltip.d.ts +1 -0
  40. package/vanilla/UiTooltip.js +1 -1
  41. package/vue/UiAvatar.vue +13 -0
  42. package/vue/UiAvatarGroup.vue +7 -2
  43. package/vue/UiBadge.vue +14 -0
  44. package/vue/UiCluster.vue +1 -1
  45. package/vue/UiCombobox.vue +135 -53
  46. package/vue/UiEditorInsertTableGrid.vue +3 -3
  47. package/vue/UiEditorTableContextMenu.vue +2 -2
  48. package/vue/UiEditorTableToolbar.vue +2 -2
  49. package/vue/UiEditorToolbar.vue +5 -3
  50. package/vue/UiMenuItem.vue +13 -0
  51. package/vue/UiStack.vue +1 -1
  52. package/vue/UiTabs.vue +13 -0
  53. package/vue/UiToastRegion.vue +2 -2
  54. package/vue/UiTooltip.d.ts +4 -0
  55. package/vue/UiTooltip.vue +6 -0
  56. package/vue/chunks/UiAvatar.js +1 -1
  57. package/vue/chunks/UiAvatarGroup.js +1 -1
  58. package/vue/chunks/UiBadge.js +1 -1
  59. package/vue/chunks/UiCluster.js +1 -1
  60. package/vue/chunks/UiCombobox.js +66 -41
  61. package/vue/chunks/UiEditorInsertTableGrid.js +3 -3
  62. package/vue/chunks/UiEditorTableContextMenu.js +2 -2
  63. package/vue/chunks/UiEditorTableToolbar.js +2 -2
  64. package/vue/chunks/UiEditorToolbar.js +1 -1
  65. package/vue/chunks/UiMenuItem.js +1 -1
  66. package/vue/chunks/UiStack.js +1 -1
  67. package/vue/chunks/UiTabs.js +1 -1
  68. package/vue/chunks/UiToastRegion.js +1 -1
  69. package/vue/chunks/UiTooltip.js +5 -2
  70. package/vue/components.css +322 -211
  71. package/vue/editor/index.js +2 -1
@@ -12,7 +12,7 @@
12
12
  display: none;
13
13
  }
14
14
 
15
- [data-component~="ui-avatar"][data-v-038b6eb1] {
15
+ [data-component~="ui-avatar"][data-v-3a27ff1d] {
16
16
  display: inline-grid;
17
17
  place-items: center;
18
18
  overflow: hidden;
@@ -27,13 +27,13 @@
27
27
  font-weight: 600;
28
28
  text-transform: uppercase;
29
29
  }
30
- .image[data-v-038b6eb1],img[data-v-038b6eb1-s] {
30
+ .image[data-v-3a27ff1d],img[data-v-3a27ff1d-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-038b6eb1] {
36
+ .fallback[data-v-3a27ff1d] {
37
37
  grid-area: 1 / 1;
38
38
  display: inline-flex;
39
39
  align-items: center;
@@ -41,16 +41,34 @@
41
41
  inline-size: 100%;
42
42
  block-size: 100%;
43
43
  }
44
- [hidden][data-v-038b6eb1] {
44
+
45
+ /* Centre the glyphs, not the line box: a label without descenders otherwise reads high. */
46
+ /* Centre the glyphs, not the line box: a label without descenders otherwise reads high.
47
+ * Trimming applies to block containers, so the box is a block with centred content. */
48
+ @supports (text-box-trim: trim-both) {
49
+ .fallback[data-v-3a27ff1d] {
50
+ display: block;
51
+ text-align: center;
52
+ align-content: center;
53
+ text-box-trim: trim-both;
54
+ text-box-edge: cap alphabetic;
55
+ }
56
+ }
57
+ [hidden][data-v-3a27ff1d] {
45
58
  display: none;
46
59
  }
47
60
 
48
61
  /* A component that sets its display still honours the hidden attribute on its root. */
49
- [data-component~="ui-avatar"][hidden][data-v-038b6eb1] {
62
+ [data-component~="ui-avatar"][hidden][data-v-3a27ff1d] {
50
63
  display: none;
51
64
  }
52
65
 
53
- [data-component~="ui-avatar-group"][data-v-6029679e] {
66
+ [data-component~="ui-avatar-group"][data-v-2ad5d86f] {
67
+ /* Avatars separate with a tight, crisp edge, matching Looma's 1px borders rather than the
68
+ * diffuse elevation overlays use. */
69
+ --_overlap-shadow: -2px 0 2px -1px rgba(0, 0, 0, 0.22);
70
+ --_edge-ring: 0 0 0 1px rgba(0, 0, 0, 0.08);
71
+
54
72
  display: flex;
55
73
  align-items: center;
56
74
  flex-direction: row;
@@ -59,15 +77,15 @@
59
77
 
60
78
  /* Overlap and the separating shadow are applied by the controller: slotted avatars are nested
61
79
  * component roots outside this style scope. */
62
- [data-v-6029679e-s] {
80
+ [data-v-2ad5d86f-s] {
63
81
  margin-inline-start: -0.625rem;
64
82
  flex-shrink: 0;
65
83
  border-radius: 999px;
66
84
  }
67
- [data-v-6029679e-s]:first-child {
85
+ [data-v-2ad5d86f-s]:first-child {
68
86
  margin-inline-start: 0;
69
87
  }
70
- .overflow[data-v-6029679e] {
88
+ .overflow[data-v-2ad5d86f] {
71
89
  margin-inline-start: -0.625rem;
72
90
  display: inline-flex;
73
91
  align-items: center;
@@ -79,23 +97,23 @@
79
97
  background: var(--ui-surface-elevated);
80
98
  color: var(--ui-text-primary);
81
99
  box-shadow:
82
- var(--ui-avatar-group-overlap-shadow, -2px 0 5px -1px rgb(0 0 0 / 0.28)),
83
- 0 0 0 1px rgb(0 0 0 / 0.06);
100
+ var(--ui-avatar-group-overlap-shadow, var(--_overlap-shadow)),
101
+ var(--ui-avatar-group-edge-ring, var(--_edge-ring));
84
102
  font: inherit;
85
103
  font-size: 0.75rem;
86
104
  font-weight: 600;
87
105
  flex-shrink: 0;
88
106
  }
89
- .overflow[hidden][data-v-6029679e] {
107
+ .overflow[hidden][data-v-2ad5d86f] {
90
108
  display: none;
91
109
  }
92
110
 
93
111
  /* A component that sets its display still honours the hidden attribute on its root. */
94
- [data-component~="ui-avatar-group"][hidden][data-v-6029679e] {
112
+ [data-component~="ui-avatar-group"][hidden][data-v-2ad5d86f] {
95
113
  display: none;
96
114
  }
97
115
 
98
- [data-component~="ui-badge"][data-v-43aa138f] {
116
+ [data-component~="ui-badge"][data-v-7e9b5784] {
99
117
  --_badge-surface: var(--ui-surface-subtle);
100
118
  --_badge-text: var(--ui-text-secondary);
101
119
  --_badge-border: color-mix(in srgb, var(--ui-text-secondary) 30%, transparent);
@@ -116,59 +134,73 @@
116
134
  line-height: var(--ui-badge-line-height, var(--ui-line-height-tight));
117
135
  white-space: nowrap;
118
136
  }
119
- [data-component~="ui-badge"][data-ui-badge-state~="tone=accent"][data-v-43aa138f] {
137
+
138
+ /* Centre the glyphs, not the line box: a label without descenders otherwise reads high. */
139
+ /* Centre the glyphs, not the line box: a label without descenders otherwise reads high.
140
+ * Trimming applies to block containers, so the box is a block with centred content. */
141
+ @supports (text-box-trim: trim-both) {
142
+ [data-component~="ui-badge"][data-v-7e9b5784] {
143
+ display: block;
144
+ min-block-size: var(--ui-badge-min-block-size, 1.5rem);
145
+ text-align: center;
146
+ align-content: center;
147
+ text-box-trim: trim-both;
148
+ text-box-edge: cap alphabetic;
149
+ }
150
+ }
151
+ [data-component~="ui-badge"][data-ui-badge-state~="tone=accent"][data-v-7e9b5784] {
120
152
  --_badge-surface: var(--ui-accent-strong-surface, var(--ui-accent-solid));
121
153
  --_badge-border: var(--ui-accent-strong-surface, var(--ui-accent-solid));
122
154
  --_badge-text: var(--ui-accent-on-strong, var(--ui-text-on-accent));
123
155
  }
124
- [data-component~="ui-badge"][data-ui-badge-state~="tone=danger"][data-v-43aa138f] {
156
+ [data-component~="ui-badge"][data-ui-badge-state~="tone=danger"][data-v-7e9b5784] {
125
157
  --_badge-surface: var(--ui-danger-strong-surface, var(--ui-danger-solid));
126
158
  --_badge-border: var(--ui-danger-strong-surface, var(--ui-danger-solid));
127
159
  --_badge-text: var(--ui-danger-on-strong, var(--ui-text-on-accent));
128
160
  }
129
- [data-component~="ui-badge"][data-ui-badge-state~="tone=success"][data-v-43aa138f] {
161
+ [data-component~="ui-badge"][data-ui-badge-state~="tone=success"][data-v-7e9b5784] {
130
162
  --_badge-surface: var(--ui-success-strong-surface, var(--ui-success-solid));
131
163
  --_badge-border: var(--ui-success-strong-surface, var(--ui-success-solid));
132
164
  --_badge-text: var(--ui-success-on-strong, var(--ui-text-on-accent));
133
165
  }
134
- [data-component~="ui-badge"][data-ui-badge-state~="tone=warning"][data-v-43aa138f] {
166
+ [data-component~="ui-badge"][data-ui-badge-state~="tone=warning"][data-v-7e9b5784] {
135
167
  --_badge-surface: var(--ui-warning-strong-surface, var(--ui-warning-solid));
136
168
  --_badge-border: var(--ui-warning-strong-surface, var(--ui-warning-solid));
137
169
  --_badge-text: var(--ui-warning-on-strong, var(--ui-text-on-accent));
138
170
  }
139
- [data-component~="ui-badge"][data-ui-badge-state~="tone=info"][data-v-43aa138f] {
171
+ [data-component~="ui-badge"][data-ui-badge-state~="tone=info"][data-v-7e9b5784] {
140
172
  --_badge-surface: var(--ui-info-strong-surface, var(--ui-info-solid));
141
173
  --_badge-border: var(--ui-info-strong-surface, var(--ui-info-solid));
142
174
  --_badge-text: var(--ui-info-on-strong, var(--ui-text-on-accent));
143
175
  }
144
- [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=accent"][data-v-43aa138f] {
176
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=accent"][data-v-7e9b5784] {
145
177
  --_badge-surface: var(--ui-accent-soft);
146
178
  --_badge-border: var(--ui-accent-soft);
147
179
  --_badge-text: var(--ui-accent-subtle-text, var(--ui-accent-solid));
148
180
  }
149
- [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=danger"][data-v-43aa138f] {
181
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=danger"][data-v-7e9b5784] {
150
182
  --_badge-surface: var(--ui-danger-soft);
151
183
  --_badge-border: var(--ui-danger-soft);
152
184
  --_badge-text: var(--ui-danger-subtle-text, var(--ui-danger-solid));
153
185
  }
154
- [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=success"][data-v-43aa138f] {
186
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=success"][data-v-7e9b5784] {
155
187
  --_badge-surface: var(--ui-success-soft);
156
188
  --_badge-border: var(--ui-success-soft);
157
189
  --_badge-text: var(--ui-success-subtle-text, var(--ui-success-solid));
158
190
  }
159
- [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=warning"][data-v-43aa138f] {
191
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=warning"][data-v-7e9b5784] {
160
192
  --_badge-surface: var(--ui-warning-soft);
161
193
  --_badge-border: var(--ui-warning-soft);
162
194
  --_badge-text: var(--ui-warning-subtle-text, var(--ui-warning-solid));
163
195
  }
164
- [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=info"][data-v-43aa138f] {
196
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=info"][data-v-7e9b5784] {
165
197
  --_badge-surface: var(--ui-info-soft);
166
198
  --_badge-border: var(--ui-info-soft);
167
199
  --_badge-text: var(--ui-info-subtle-text, var(--ui-info-solid));
168
200
  }
169
201
 
170
202
  /* A component that sets its display still honours the hidden attribute on its root. */
171
- [data-component~="ui-badge"][hidden][data-v-43aa138f] {
203
+ [data-component~="ui-badge"][hidden][data-v-7e9b5784] {
172
204
  display: none;
173
205
  }
174
206
 
@@ -556,47 +588,47 @@ input[data-v-acf71232]:focus-visible {
556
588
  display: none;
557
589
  }
558
590
 
559
- [data-component~="ui-cluster"][data-v-06d4310a] {
591
+ [data-component~="ui-cluster"][data-v-6de2f2e4] {
560
592
  --_layout-gap: var(--ui-space-3);
561
593
  display: flex;
562
594
  flex-wrap: wrap;
563
595
  align-items: center;
564
- gap: var(--ui-layout-gap, var(--_layout-gap));
596
+ gap: var(--ui-cluster-gap, var(--_layout-gap));
565
597
  min-inline-size: 0;
566
598
  max-inline-size: 100%;
567
599
  margin: 0;
568
600
  }
569
- [data-component~="ui-cluster"][data-ui-cluster-state~="gap=xs"][data-v-06d4310a] {
601
+ [data-component~="ui-cluster"][data-ui-cluster-state~="gap=xs"][data-v-6de2f2e4] {
570
602
  --_layout-gap: var(--ui-space-2);
571
603
  }
572
- [data-component~="ui-cluster"][data-ui-cluster-state~="gap=s"][data-v-06d4310a] {
604
+ [data-component~="ui-cluster"][data-ui-cluster-state~="gap=s"][data-v-6de2f2e4] {
573
605
  --_layout-gap: var(--ui-space-3);
574
606
  }
575
- [data-component~="ui-cluster"][data-ui-cluster-state~="gap=m"][data-v-06d4310a] {
607
+ [data-component~="ui-cluster"][data-ui-cluster-state~="gap=m"][data-v-6de2f2e4] {
576
608
  --_layout-gap: var(--ui-space-4);
577
609
  }
578
- [data-component~="ui-cluster"][data-ui-cluster-state~="gap=l"][data-v-06d4310a] {
610
+ [data-component~="ui-cluster"][data-ui-cluster-state~="gap=l"][data-v-6de2f2e4] {
579
611
  --_layout-gap: var(--ui-space-5);
580
612
  }
581
- [data-component~="ui-cluster"][data-ui-cluster-state~="gap=xl"][data-v-06d4310a] {
613
+ [data-component~="ui-cluster"][data-ui-cluster-state~="gap=xl"][data-v-6de2f2e4] {
582
614
  --_layout-gap: var(--ui-space-6);
583
615
  }
584
- [data-component~="ui-cluster"][data-ui-cluster-state~="align=start"][data-v-06d4310a] {
616
+ [data-component~="ui-cluster"][data-ui-cluster-state~="align=start"][data-v-6de2f2e4] {
585
617
  align-items: flex-start;
586
618
  }
587
- [data-component~="ui-cluster"][data-ui-cluster-state~="align=end"][data-v-06d4310a] {
619
+ [data-component~="ui-cluster"][data-ui-cluster-state~="align=end"][data-v-6de2f2e4] {
588
620
  align-items: flex-end;
589
621
  }
590
- [data-component~="ui-cluster"][data-ui-cluster-state~="align=stretch"][data-v-06d4310a] {
622
+ [data-component~="ui-cluster"][data-ui-cluster-state~="align=stretch"][data-v-6de2f2e4] {
591
623
  align-items: stretch;
592
624
  }
593
625
 
594
626
  /* A component that sets its display still honours the hidden attribute on its root. */
595
- [data-component~="ui-cluster"][hidden][data-v-06d4310a] {
627
+ [data-component~="ui-cluster"][hidden][data-v-6de2f2e4] {
596
628
  display: none;
597
629
  }
598
630
 
599
- [data-component~="ui-tooltip"][data-v-3099b119] {
631
+ [data-component~="ui-tooltip"][data-v-3af2132e] {
600
632
  position: fixed;
601
633
  inset: auto;
602
634
  margin: 0;
@@ -617,7 +649,7 @@ input[data-v-acf71232]:focus-visible {
617
649
  display var(--ui-motion-fast) allow-discrete,
618
650
  overlay var(--ui-motion-fast) allow-discrete;
619
651
  }
620
- .surface[data-v-3099b119] {
652
+ .surface[data-v-3af2132e] {
621
653
  --_tooltip-line: var(--ui-tooltip-border, var(--ui-border-default));
622
654
  position: relative;
623
655
  box-sizing: border-box;
@@ -632,7 +664,7 @@ input[data-v-acf71232]:focus-visible {
632
664
  line-height: var(--ui-line-height-tight);
633
665
  box-shadow: var(--ui-tooltip-shadow, var(--ui-elevation-tooltip, var(--ui-shadow-md)));
634
666
  }
635
- [data-component~="ui-tooltip"][data-ui-tooltip-state~="inverse"] .surface[data-v-3099b119] {
667
+ [data-component~="ui-tooltip"][data-ui-tooltip-state~="inverse"] .surface[data-v-3af2132e] {
636
668
  --_tooltip-line: var(--ui-tooltip-inverse-surface, var(--ui-text-primary));
637
669
  background: var(--ui-tooltip-inverse-surface, var(--ui-text-primary));
638
670
  color: var(--ui-tooltip-inverse-text, var(--ui-surface-default));
@@ -640,7 +672,7 @@ input[data-v-acf71232]:focus-visible {
640
672
 
641
673
  /* A rotated square shares the surface fill and draws the two outward border edges. Its centre sits on
642
674
  * the surface border line, so the fill covers that stretch of border and the outline runs unbroken. */
643
- .surface[data-v-3099b119]::after {
675
+ .surface[data-v-3af2132e]::after {
644
676
  content: "";
645
677
  position: absolute;
646
678
  z-index: 1;
@@ -657,7 +689,7 @@ input[data-v-acf71232]:focus-visible {
657
689
  transform: rotate(45deg);
658
690
  }
659
691
  :is([data-component~="ui-tooltip"][data-ui-tooltip-state~="placement=bottom"], [data-component~="ui-tooltip"][data-ui-tooltip-state~="placement=bottom-start"], [data-component~="ui-tooltip"][data-ui-tooltip-state~="placement=bottom-end"])
660
- .surface[data-v-3099b119]::after {
692
+ .surface[data-v-3af2132e]::after {
661
693
  inset-block-start: calc(var(--ui-tooltip-arrow-size, 0.5rem) / -2 - 0.5px);
662
694
  inset-block-end: auto;
663
695
  border-inline-end-width: 0;
@@ -668,42 +700,51 @@ input[data-v-acf71232]:focus-visible {
668
700
  border-start-start-radius: 1px;
669
701
  }
670
702
  :is([data-component~="ui-tooltip"][data-ui-tooltip-state~="placement=top-end"], [data-component~="ui-tooltip"][data-ui-tooltip-state~="placement=bottom-end"])
671
- .surface[data-v-3099b119]::after {
703
+ .surface[data-v-3af2132e]::after {
672
704
  inset-inline-start: auto;
673
705
  inset-inline-end: var(--ui-space-3);
674
706
  }
675
- [data-component~="ui-tooltip"][data-v-3099b119]:popover-open {
707
+ [data-component~="ui-tooltip"][data-v-3af2132e]:popover-open {
676
708
  opacity: 1;
677
709
  transform: translateY(0);
678
710
  }
679
711
  @starting-style {
680
- [data-component~="ui-tooltip"][data-v-3099b119]:popover-open {
712
+ [data-component~="ui-tooltip"][data-v-3af2132e]:popover-open {
681
713
  opacity: 0;
682
714
  transform: translateY(4px);
683
715
  }
684
716
  }
685
- [data-component~="ui-tooltip"][hidden][data-v-3099b119] {
717
+ [data-component~="ui-tooltip"][hidden][data-v-3af2132e] {
686
718
  display: none;
687
719
  }
688
720
  @media (prefers-reduced-motion: reduce) {
689
- [data-component~="ui-tooltip"][data-v-3099b119] {
721
+ [data-component~="ui-tooltip"][data-v-3af2132e] {
690
722
  transition: none;
691
723
  }
692
724
  }
693
725
 
694
- [data-component~="ui-combobox"][data-v-147b231f] {
726
+ [data-component~="ui-combobox"][data-v-f1d9bb8a] {
695
727
  display: grid;
696
728
  gap: var(--ui-space-1);
697
729
  min-inline-size: 0;
698
730
  color: var(--ui-text-primary);
699
731
  font: inherit;
700
732
  }
701
- label[data-v-147b231f] {
733
+ label[data-v-f1d9bb8a] {
702
734
  color: var(--ui-combobox-label-text, var(--ui-text-primary));
703
735
  font-size: var(--ui-combobox-label-font-size, 0.875rem);
704
736
  font-weight: 500;
705
737
  }
706
- .field[data-v-147b231f] {
738
+ /* The field and anything that annotates it sit on one row; the help button is beside the box,
739
+ not inside it, because a control's box holds its value. */
740
+ .control[data-v-f1d9bb8a] {
741
+ display: flex;
742
+ align-items: center;
743
+ gap: var(--ui-space-2);
744
+ min-inline-size: 0;
745
+ }
746
+ .field[data-v-f1d9bb8a] {
747
+ flex: 1 1 auto;
707
748
  display: flex;
708
749
  min-inline-size: 0;
709
750
  border: 1px solid var(--ui-control-border, var(--ui-border-default));
@@ -714,17 +755,52 @@ label[data-v-147b231f] {
714
755
  border-color var(--ui-motion-fast) var(--ui-motion-ease),
715
756
  box-shadow var(--ui-motion-fast) var(--ui-motion-ease);
716
757
  }
717
- .field[data-v-147b231f]:focus-within {
758
+ .field[data-v-f1d9bb8a]:focus-within {
718
759
  border-color: var(--ui-control-focus, var(--ui-accent-solid));
719
760
  box-shadow:
720
761
  var(--ui-control-inset),
721
762
  var(--ui-control-focus-halo-shadow);
722
763
  }
723
- input[data-v-147b231f]::selection {
764
+ /* A ghost icon button: the affordance is the mark, not a box around it. */
765
+ .help[data-v-f1d9bb8a] {
766
+ flex: none;
767
+ display: inline-flex;
768
+ align-items: center;
769
+ justify-content: center;
770
+ inline-size: var(--ui-control-size-sm);
771
+ block-size: var(--ui-control-size-sm);
772
+ padding: 0;
773
+ border: 0;
774
+ border-radius: var(--ui-radius-round);
775
+ background: transparent;
776
+ color: var(--ui-text-secondary);
777
+ cursor: pointer;
778
+ transition:
779
+ background-color var(--ui-motion-fast) var(--ui-motion-ease),
780
+ color var(--ui-motion-fast) var(--ui-motion-ease);
781
+ }
782
+ .help[data-v-f1d9bb8a]:hover:enabled,
783
+ .help[aria-expanded="true"][data-v-f1d9bb8a] {
784
+ background: color-mix(in srgb, currentColor 8%, transparent);
785
+ color: var(--ui-text-primary);
786
+ }
787
+ .help[data-v-f1d9bb8a]:focus-visible {
788
+ outline: none;
789
+ box-shadow: var(--ui-focus-halo);
790
+ }
791
+ .help[data-v-f1d9bb8a]:disabled {
792
+ color: var(--ui-disabled-text);
793
+ cursor: not-allowed;
794
+ }
795
+ .help-icon[data-v-f1d9bb8a] {
796
+ inline-size: var(--ui-icon-size-sm);
797
+ block-size: var(--ui-icon-size-sm);
798
+ }
799
+ input[data-v-f1d9bb8a]::selection {
724
800
  background: color-mix(in srgb, var(--ui-accent-solid) 20%, transparent);
725
801
  color: inherit;
726
802
  }
727
- input[data-v-147b231f] {
803
+ input[data-v-f1d9bb8a] {
728
804
  appearance: none;
729
805
  width: 100%;
730
806
  min-inline-size: 0;
@@ -740,11 +816,11 @@ input[data-v-147b231f] {
740
816
  margin: 0;
741
817
  outline: none;
742
818
  }
743
- [data-component~="ui-combobox"][data-ui-combobox-state~="size=sm"] input[data-v-147b231f] {
819
+ [data-component~="ui-combobox"][data-ui-combobox-state~="size=sm"] input[data-v-f1d9bb8a] {
744
820
  min-block-size: calc(var(--ui-control-size-sm) - 2px);
745
821
  padding: var(--ui-space-1) var(--ui-space-2);
746
822
  }
747
- button[data-v-147b231f] {
823
+ button[data-v-f1d9bb8a] {
748
824
  appearance: none;
749
825
  display: inline-grid;
750
826
  place-items: center;
@@ -759,31 +835,31 @@ button[data-v-147b231f] {
759
835
  padding: 0 var(--ui-space-1);
760
836
  cursor: pointer;
761
837
  }
762
- .affordance-icon[data-v-147b231f] {
838
+ .affordance-icon[data-v-f1d9bb8a] {
763
839
  display: block;
764
840
  inline-size: var(--ui-icon-size-sm);
765
841
  block-size: var(--ui-icon-size-sm);
766
842
  }
767
- button[data-v-147b231f]:hover:enabled {
843
+ button[data-v-f1d9bb8a]:hover:enabled {
768
844
  background: var(--ui-surface-muted);
769
845
  color: var(--ui-text-primary);
770
846
  }
771
- button[data-v-147b231f]:focus-visible {
847
+ button[data-v-f1d9bb8a]:focus-visible {
772
848
  outline: none;
773
849
  background: var(--ui-surface-muted);
774
850
  box-shadow: inset 0 0 0 2px color-mix(in srgb, var(--ui-focus-ring) 45%, transparent);
775
851
  }
776
- input[data-v-147b231f]:disabled, button[data-v-147b231f]:disabled {
852
+ input[data-v-f1d9bb8a]:disabled, button[data-v-f1d9bb8a]:disabled {
777
853
  color: var(--ui-text-muted);
778
854
  cursor: not-allowed;
779
855
  }
780
- .field[data-v-147b231f]:has(input:disabled) {
856
+ .field[data-v-f1d9bb8a]:has(input:disabled) {
781
857
  background: var(--ui-control-surface-disabled, var(--ui-surface-muted));
782
858
  }
783
- [data-component~="ui-combobox"][data-ui-combobox-state~="validationStatus=error"] .field[data-v-147b231f] {
859
+ [data-component~="ui-combobox"][data-ui-combobox-state~="validationStatus=error"] .field[data-v-f1d9bb8a] {
784
860
  border-color: var(--ui-danger-solid, var(--ui-accent-active));
785
861
  }
786
- .popup[data-v-147b231f] {
862
+ .popup[data-v-f1d9bb8a] {
787
863
  box-sizing: border-box;
788
864
  min-inline-size: 12rem;
789
865
  max-inline-size: calc(100vw - 1rem);
@@ -797,40 +873,40 @@ input[data-v-147b231f]:disabled, button[data-v-147b231f]:disabled {
797
873
  color: var(--ui-text-primary);
798
874
  box-shadow: var(--ui-elevation-overlay, var(--ui-shadow-lg));
799
875
  }
800
- [hidden][data-v-147b231f] {
876
+ [hidden][data-v-f1d9bb8a] {
801
877
  display: none;
802
878
  }
803
- .option[data-v-147b231f] {
879
+ .option[data-v-f1d9bb8a] {
804
880
  padding: var(--ui-space-2) var(--ui-space-3);
805
881
  border-radius: var(--ui-radius-sm);
806
882
  cursor: pointer;
807
883
  overflow-wrap: anywhere;
808
884
  }
809
- .option[data-v-147b231f]:hover, .option.active[data-v-147b231f] {
885
+ .option[data-v-f1d9bb8a]:hover, .option.active[data-v-f1d9bb8a] {
810
886
  background: var(--ui-surface-muted);
811
887
  outline: 1px solid var(--ui-focus-ring);
812
888
  outline-offset: -1px;
813
889
  }
814
- .option[aria-disabled="true"][data-v-147b231f] {
890
+ .option[aria-disabled="true"][data-v-f1d9bb8a] {
815
891
  color: var(--ui-text-muted);
816
892
  cursor: not-allowed;
817
893
  }
818
- .primary[data-v-147b231f] {
894
+ .primary[data-v-f1d9bb8a] {
819
895
  display: block;
820
896
  color: var(--ui-combobox-option-text, var(--ui-text-primary));
821
897
  font-weight: 500;
822
898
  }
823
- .message[data-v-147b231f], .group[data-v-147b231f] {
899
+ .message[data-v-f1d9bb8a], .group[data-v-f1d9bb8a] {
824
900
  color: var(--ui-combobox-message-text, var(--ui-text-secondary));
825
901
  font-weight: 400;
826
902
  font-size: var(--ui-font-size-sm);
827
903
  line-height: var(--ui-line-height-md);
828
904
  overflow-wrap: anywhere;
829
905
  }
830
- .group[data-v-147b231f], .popup .message[data-v-147b231f] {
906
+ .group[data-v-f1d9bb8a], .popup .message[data-v-f1d9bb8a] {
831
907
  padding: var(--ui-space-2) var(--ui-space-3);
832
908
  }
833
- .sr-only[data-v-147b231f] {
909
+ .sr-only[data-v-f1d9bb8a] {
834
910
  position: absolute;
835
911
  inline-size: 1px;
836
912
  block-size: 1px;
@@ -839,35 +915,35 @@ input[data-v-147b231f]:disabled, button[data-v-147b231f]:disabled {
839
915
  white-space: nowrap;
840
916
  }
841
917
  @media (pointer: coarse) {
842
- button[data-v-147b231f] {
918
+ button[data-v-f1d9bb8a] {
843
919
  min-inline-size: 2.75rem;
844
920
  min-block-size: 2.75rem;
845
921
  }
846
922
  }
847
923
  @media (forced-colors: active) {
848
- .field[data-v-147b231f], .popup[data-v-147b231f] {
924
+ .field[data-v-f1d9bb8a], .popup[data-v-f1d9bb8a] {
849
925
  border-color: CanvasText;
850
926
  }
851
- .option.active[data-v-147b231f] {
927
+ .option.active[data-v-f1d9bb8a] {
852
928
  outline-color: Highlight;
853
929
  }
854
930
  }
855
931
 
856
932
  /* Multiple mode: chips wrap before the cursor on one flexible field line. */
857
- [data-component~="ui-combobox"][data-ui-combobox-state~="multiple"] .field[data-v-147b231f] {
933
+ [data-component~="ui-combobox"][data-ui-combobox-state~="multiple"] .field[data-v-f1d9bb8a] {
858
934
  flex-wrap: wrap;
859
935
  align-items: center;
860
936
  gap: var(--ui-space-1);
861
937
  min-block-size: var(--ui-combobox-item-min-block-size, 2.5rem);
862
938
  padding: var(--ui-space-1);
863
939
  }
864
- [data-component~="ui-combobox"][data-ui-combobox-state~="multiple"] input[data-v-147b231f] {
940
+ [data-component~="ui-combobox"][data-ui-combobox-state~="multiple"] input[data-v-f1d9bb8a] {
865
941
  flex: 1 0 var(--ui-combobox-item-input-min-inline-size, 5rem);
866
942
  width: auto;
867
943
  min-block-size: 1.75rem;
868
944
  padding: var(--ui-space-0-5) var(--ui-space-1);
869
945
  }
870
- .item[data-v-147b231f] {
946
+ .item[data-v-f1d9bb8a] {
871
947
  appearance: none;
872
948
  display: inline-flex;
873
949
  min-inline-size: 0;
@@ -881,16 +957,16 @@ button[data-v-147b231f] {
881
957
  font: inherit;
882
958
  cursor: default;
883
959
  }
884
- .item[data-v-147b231f]:focus-visible {
960
+ .item[data-v-f1d9bb8a]:focus-visible {
885
961
  outline: 2px solid var(--ui-focus-ring);
886
962
  outline-offset: 1px;
887
963
  }
888
- .item[data-v-147b231f]:disabled {
964
+ .item[data-v-f1d9bb8a]:disabled {
889
965
  opacity: 0.6;
890
966
  }
891
967
 
892
968
  /* A component that sets its display still honours the hidden attribute on its root. */
893
- [data-component~="ui-combobox"][hidden][data-v-147b231f] {
969
+ [data-component~="ui-combobox"][hidden][data-v-f1d9bb8a] {
894
970
  display: none;
895
971
  }
896
972
 
@@ -1339,26 +1415,26 @@ from {
1339
1415
  display: none;
1340
1416
  }
1341
1417
 
1342
- [data-component~="ui-editor-insert-table-grid"][data-v-c4064690] {
1418
+ [data-component~="ui-editor-insert-table-grid"][data-v-00e6602a] {
1343
1419
  padding: var(--ui-space-3);
1344
1420
  background: var(--ui-surface);
1345
1421
  border: 1px solid var(--ui-border);
1346
1422
  border-radius: var(--ui-radius-md);
1347
1423
  box-shadow: var(--ui-shadow-lg, 0 10px 15px -3px rgb(0 0 0 / 0.1));
1348
1424
  }
1349
- .hint[data-v-c4064690] {
1425
+ .hint[data-v-00e6602a] {
1350
1426
  margin: 0 0 var(--ui-space-2);
1351
1427
  font-size: var(--ui-font-size-sm);
1352
1428
  color: var(--ui-text-muted);
1353
1429
  }
1354
- .grid[data-v-c4064690] {
1430
+ .grid[data-v-00e6602a] {
1355
1431
  display: grid;
1356
- grid-template-columns: repeat(var(--ui-editor-table-grid-cols, 8), 1.25rem);
1357
- grid-template-rows: repeat(var(--ui-editor-table-grid-rows, 8), 1.25rem);
1432
+ grid-template-columns: repeat(var(--_cols, 8), 1.25rem);
1433
+ grid-template-rows: repeat(var(--_rows, 8), 1.25rem);
1358
1434
  gap: 2px;
1359
1435
  margin-bottom: var(--ui-space-2);
1360
1436
  }
1361
- .cell[data-v-c4064690] {
1437
+ .cell[data-v-00e6602a] {
1362
1438
  width: 1.25rem;
1363
1439
  height: 1.25rem;
1364
1440
  padding: 0;
@@ -1367,17 +1443,17 @@ from {
1367
1443
  background: var(--ui-surface);
1368
1444
  cursor: pointer;
1369
1445
  }
1370
- .cell.selected[data-v-c4064690] {
1446
+ .cell.selected[data-v-00e6602a] {
1371
1447
  background: var(--ui-accent-solid, var(--ui-accent));
1372
1448
  border-color: var(--ui-accent-solid, var(--ui-accent));
1373
1449
  }
1374
- .header[data-v-c4064690] {
1450
+ .header[data-v-00e6602a] {
1375
1451
  display: block;
1376
1452
  margin-bottom: var(--ui-space-2);
1377
1453
  font-size: var(--ui-font-size-sm);
1378
1454
  cursor: pointer;
1379
1455
  }
1380
- [data-component~="ui-editor-insert-table-grid"] .insert[data-v-c4064690] {
1456
+ [data-component~="ui-editor-insert-table-grid"] .insert[data-v-00e6602a] {
1381
1457
  width: 100%;
1382
1458
  padding: var(--ui-space-2) var(--ui-space-3);
1383
1459
  border: 1px solid var(--ui-border);
@@ -1387,10 +1463,10 @@ from {
1387
1463
  font-size: var(--ui-font-size-sm);
1388
1464
  cursor: pointer;
1389
1465
  }
1390
- [data-component~="ui-editor-insert-table-grid"] .insert[data-v-c4064690]:hover {
1466
+ [data-component~="ui-editor-insert-table-grid"] .insert[data-v-00e6602a]:hover {
1391
1467
  filter: brightness(1.05);
1392
1468
  }
1393
- [data-component~="ui-editor-insert-table-grid"][hidden][data-v-c4064690] {
1469
+ [data-component~="ui-editor-insert-table-grid"][hidden][data-v-00e6602a] {
1394
1470
  display: none;
1395
1471
  }
1396
1472
 
@@ -1656,7 +1732,7 @@ svg[data-v-b2b50d17] {
1656
1732
  display: none;
1657
1733
  }
1658
1734
 
1659
- [data-component~="ui-editor-table-context-menu"][data-v-7c984caf] {
1735
+ [data-component~="ui-editor-table-context-menu"][data-v-9cbdf038] {
1660
1736
  min-width: 14rem;
1661
1737
  max-width: min(17rem, calc(100vw - 24px));
1662
1738
  max-height: min(28rem, calc(100vh - 24px));
@@ -1672,12 +1748,12 @@ svg[data-v-b2b50d17] {
1672
1748
  overscroll-behavior: contain;
1673
1749
  scrollbar-width: thin;
1674
1750
  }
1675
- .section[data-v-7c984caf] {
1751
+ .section[data-v-9cbdf038] {
1676
1752
  display: flex;
1677
1753
  flex-direction: column;
1678
1754
  gap: 3px;
1679
1755
  }
1680
- [data-component~="ui-editor-table-context-menu"] button[data-v-7c984caf] {
1756
+ [data-component~="ui-editor-table-context-menu"] button[data-v-9cbdf038] {
1681
1757
  display: flex;
1682
1758
  align-items: center;
1683
1759
  gap: var(--ui-space-2);
@@ -1692,40 +1768,40 @@ svg[data-v-b2b50d17] {
1692
1768
  cursor: pointer;
1693
1769
  color: var(--ui-text);
1694
1770
  }
1695
- [data-component~="ui-editor-table-context-menu"] button[data-v-7c984caf] {
1771
+ [data-component~="ui-editor-table-context-menu"] button[data-v-9cbdf038] {
1696
1772
  --ui-icon-size: 1rem;
1697
1773
  --ui-icon-stroke-width: var(--ui-editor-toolbar-icon-stroke-width, 1.75);
1698
1774
  }
1699
- [data-component~="ui-editor-table-context-menu"] button[data-v-7c984caf]:hover:not(:disabled) {
1775
+ [data-component~="ui-editor-table-context-menu"] button[data-v-9cbdf038]:hover:not(:disabled) {
1700
1776
  background: var(--ui-surface-hover);
1701
1777
  }
1702
- [data-component~="ui-editor-table-context-menu"] button.selected[data-v-7c984caf] {
1778
+ [data-component~="ui-editor-table-context-menu"] button.selected[data-v-9cbdf038] {
1703
1779
  background: var(--ui-accent-subtle, rgb(59 130 246 / 0.1));
1704
1780
  }
1705
- [data-component~="ui-editor-table-context-menu"] button.danger[data-v-7c984caf] {
1781
+ [data-component~="ui-editor-table-context-menu"] button.danger[data-v-9cbdf038] {
1706
1782
  color: var(--ui-danger);
1707
1783
  }
1708
- .swatches[data-v-7c984caf] {
1784
+ .swatches[data-v-9cbdf038] {
1709
1785
  display: grid;
1710
1786
  grid-template-columns: repeat(3, minmax(0, 1fr));
1711
1787
  gap: 3px;
1712
1788
  }
1713
- .swatch-button[data-v-7c984caf] {
1789
+ .swatch-button[data-v-9cbdf038] {
1714
1790
  display: inline-flex;
1715
1791
  align-items: center;
1716
1792
  gap: var(--ui-space-2);
1717
1793
  }
1718
- .swatch[data-v-7c984caf] {
1794
+ .swatch[data-v-9cbdf038] {
1719
1795
  display: inline-flex;
1720
1796
  width: 1rem;
1721
1797
  height: 1rem;
1722
1798
  border-radius: 999px;
1723
1799
  border: 1px solid var(--ui-border);
1724
- background: var(--ui-editor-table-context-swatch, #fff);
1800
+ background: var(--_swatch, #fff);
1725
1801
  box-shadow: inset 0 0 0 1px rgb(255 255 255 / 0.35);
1726
1802
  flex-shrink: 0;
1727
1803
  }
1728
- .swatch.default[data-v-7c984caf] {
1804
+ .swatch.default[data-v-9cbdf038] {
1729
1805
  position: relative;
1730
1806
  background:
1731
1807
  linear-gradient(
@@ -1737,11 +1813,11 @@ svg[data-v-b2b50d17] {
1737
1813
  ),
1738
1814
  var(--ui-surface);
1739
1815
  }
1740
- .swatch-label[data-v-7c984caf] {
1816
+ .swatch-label[data-v-9cbdf038] {
1741
1817
  min-width: 0;
1742
1818
  white-space: nowrap;
1743
1819
  }
1744
- .heading[data-v-7c984caf] {
1820
+ .heading[data-v-9cbdf038] {
1745
1821
  padding: var(--ui-space-1) var(--ui-space-2);
1746
1822
  font-size: 0.6875rem;
1747
1823
  font-weight: 700;
@@ -1749,12 +1825,12 @@ svg[data-v-b2b50d17] {
1749
1825
  text-transform: uppercase;
1750
1826
  color: var(--ui-text-muted);
1751
1827
  }
1752
- .sep[data-v-7c984caf] {
1828
+ .sep[data-v-9cbdf038] {
1753
1829
  height: 1px;
1754
1830
  background: var(--ui-border);
1755
1831
  margin: var(--ui-space-1) 0;
1756
1832
  }
1757
- [data-component~="ui-editor-table-context-menu"][hidden][data-v-7c984caf] {
1833
+ [data-component~="ui-editor-table-context-menu"][hidden][data-v-9cbdf038] {
1758
1834
  display: none;
1759
1835
  }
1760
1836
 
@@ -2029,7 +2105,7 @@ svg[data-v-b2b50d17] {
2029
2105
  display: none;
2030
2106
  }
2031
2107
 
2032
- .looma-editor__mobile-toolbar-shell [data-component~="ui-editor-table-toolbar"][data-v-c7ed049b] {
2108
+ .looma-editor__mobile-toolbar-shell [data-component~="ui-editor-table-toolbar"][data-v-1066cfb2] {
2033
2109
  min-width: max-content;
2034
2110
  min-height: 100%;
2035
2111
  padding: 0;
@@ -2039,15 +2115,15 @@ svg[data-v-b2b50d17] {
2039
2115
  box-shadow: none;
2040
2116
  backdrop-filter: none;
2041
2117
  }
2042
- .looma-editor__mobile-toolbar-shell [data-component~="ui-editor-table-toolbar"] button[data-v-c7ed049b] {
2118
+ .looma-editor__mobile-toolbar-shell [data-component~="ui-editor-table-toolbar"] button[data-v-1066cfb2] {
2043
2119
  min-height: 44px;
2044
2120
  background: transparent;
2045
2121
  }
2046
- .looma-editor__mobile-toolbar-shell [data-component~="ui-editor-table-toolbar"] button.active[data-v-c7ed049b],
2047
- .looma-editor__mobile-toolbar-shell [data-component~="ui-editor-table-toolbar"] button.selected[data-v-c7ed049b] {
2122
+ .looma-editor__mobile-toolbar-shell [data-component~="ui-editor-table-toolbar"] button.active[data-v-1066cfb2],
2123
+ .looma-editor__mobile-toolbar-shell [data-component~="ui-editor-table-toolbar"] button.selected[data-v-1066cfb2] {
2048
2124
  background: var(--ui-accent-soft, var(--ui-accent-subtle));
2049
2125
  }
2050
- .looma-editor__mobile-toolbar-shell [data-component~="ui-editor-table-toolbar"] .menu[data-v-c7ed049b] {
2126
+ .looma-editor__mobile-toolbar-shell [data-component~="ui-editor-table-toolbar"] .menu[data-v-1066cfb2] {
2051
2127
  top: auto;
2052
2128
  right: 0;
2053
2129
  bottom: calc(100% + var(--ui-space-2));
@@ -2055,7 +2131,7 @@ svg[data-v-b2b50d17] {
2055
2131
  overflow-y: auto;
2056
2132
  overscroll-behavior: contain;
2057
2133
  }
2058
- [data-component~="ui-editor-table-toolbar"][data-v-c7ed049b] {
2134
+ [data-component~="ui-editor-table-toolbar"][data-v-1066cfb2] {
2059
2135
  display: inline-flex;
2060
2136
  align-items: center;
2061
2137
  gap: var(--ui-space-1);
@@ -2066,21 +2142,21 @@ svg[data-v-b2b50d17] {
2066
2142
  box-shadow: var(--ui-shadow-lg, 0 10px 15px -3px rgb(0 0 0 / 0.1));
2067
2143
  backdrop-filter: blur(10px);
2068
2144
  }
2069
- .group[data-v-c7ed049b] {
2145
+ .group[data-v-1066cfb2] {
2070
2146
  display: inline-flex;
2071
2147
  align-items: center;
2072
2148
  gap: 2px;
2073
2149
  overflow: hidden;
2074
2150
  }
2075
- .sep[data-v-c7ed049b] {
2151
+ .sep[data-v-1066cfb2] {
2076
2152
  width: 1px;
2077
2153
  align-self: stretch;
2078
2154
  background: var(--ui-border);
2079
2155
  }
2080
- .overflow[data-v-c7ed049b] {
2156
+ .overflow[data-v-1066cfb2] {
2081
2157
  position: relative;
2082
2158
  }
2083
- [data-component~="ui-editor-table-toolbar"] button[data-v-c7ed049b] {
2159
+ [data-component~="ui-editor-table-toolbar"] button[data-v-1066cfb2] {
2084
2160
  display: inline-flex;
2085
2161
  align-items: center;
2086
2162
  justify-content: center;
@@ -2097,39 +2173,39 @@ svg[data-v-b2b50d17] {
2097
2173
  padding: var(--ui-space-2) var(--ui-space-2);
2098
2174
  white-space: nowrap;
2099
2175
  }
2100
- [data-component~="ui-editor-table-toolbar"] button[data-v-c7ed049b]:hover {
2176
+ [data-component~="ui-editor-table-toolbar"] button[data-v-1066cfb2]:hover {
2101
2177
  background: var(--ui-surface-hover);
2102
2178
  }
2103
- [data-component~="ui-editor-table-toolbar"] button.active[data-v-c7ed049b] {
2179
+ [data-component~="ui-editor-table-toolbar"] button.active[data-v-1066cfb2] {
2104
2180
  background: var(--ui-accent-soft, var(--ui-accent-subtle));
2105
2181
  color: var(--ui-accent-active);
2106
2182
  }
2107
- .group button[data-v-c7ed049b] {
2183
+ .group button[data-v-1066cfb2] {
2108
2184
  border-radius: var(--ui-radius-sm);
2109
2185
  }
2110
- .group button + button[data-v-c7ed049b] {
2186
+ .group button + button[data-v-1066cfb2] {
2111
2187
  border-left: 0;
2112
2188
  }
2113
- [data-component~="ui-editor-table-toolbar"] .more[data-v-c7ed049b] {
2189
+ [data-component~="ui-editor-table-toolbar"] .more[data-v-1066cfb2] {
2114
2190
  border: 0;
2115
2191
  border-radius: var(--ui-radius-sm);
2116
2192
  }
2117
- [data-component~="ui-editor-table-toolbar"] button.danger[data-v-c7ed049b] {
2193
+ [data-component~="ui-editor-table-toolbar"] button.danger[data-v-1066cfb2] {
2118
2194
  color: var(--ui-danger);
2119
2195
  }
2120
- [data-component~="ui-editor-table-toolbar"][data-v-c7ed049b] {
2196
+ [data-component~="ui-editor-table-toolbar"][data-v-1066cfb2] {
2121
2197
  --ui-icon-size: var(--ui-editor-toolbar-icon-size, 1rem);
2122
2198
  --ui-icon-stroke-width: var(--ui-editor-toolbar-icon-stroke-width, 1.75);
2123
2199
  }
2124
- .chevron[data-v-c7ed049b] {
2200
+ .chevron[data-v-1066cfb2] {
2125
2201
  display: inline-flex;
2126
2202
  --ui-icon-size: 0.875rem;
2127
2203
  }
2128
- [data-component~="ui-editor-table-toolbar"] .icon-button[data-v-c7ed049b] {
2204
+ [data-component~="ui-editor-table-toolbar"] .icon-button[data-v-1066cfb2] {
2129
2205
  width: 32px;
2130
2206
  padding-inline: 0;
2131
2207
  }
2132
- .menu[data-v-c7ed049b] {
2208
+ .menu[data-v-1066cfb2] {
2133
2209
  position: absolute;
2134
2210
  top: calc(100% + var(--ui-space-2));
2135
2211
  right: 0;
@@ -2144,12 +2220,12 @@ svg[data-v-b2b50d17] {
2144
2220
  gap: 2px;
2145
2221
  z-index: 2;
2146
2222
  }
2147
- .menu-section + .menu-section[data-v-c7ed049b] {
2223
+ .menu-section + .menu-section[data-v-1066cfb2] {
2148
2224
  margin-top: var(--ui-space-1);
2149
2225
  padding-top: var(--ui-space-1);
2150
2226
  border-top: 1px solid color-mix(in srgb, var(--ui-border) 80%, transparent);
2151
2227
  }
2152
- .menu-heading[data-v-c7ed049b] {
2228
+ .menu-heading[data-v-1066cfb2] {
2153
2229
  padding: var(--ui-space-1) var(--ui-space-2);
2154
2230
  font-size: 0.6875rem;
2155
2231
  font-weight: 700;
@@ -2157,42 +2233,42 @@ svg[data-v-b2b50d17] {
2157
2233
  text-transform: uppercase;
2158
2234
  color: var(--ui-text-muted);
2159
2235
  }
2160
- .menu button[data-v-c7ed049b] {
2236
+ .menu button[data-v-1066cfb2] {
2161
2237
  display: flex;
2162
2238
  justify-content: flex-start;
2163
2239
  width: 100%;
2164
2240
  text-align: left;
2165
2241
  }
2166
- .swatches[data-v-c7ed049b] {
2242
+ .swatches[data-v-1066cfb2] {
2167
2243
  display: grid;
2168
2244
  grid-template-columns: repeat(3, minmax(0, 1fr));
2169
2245
  gap: 2px;
2170
2246
  }
2171
- [data-component~="ui-editor-table-toolbar"] .swatch-button[data-v-c7ed049b] {
2247
+ [data-component~="ui-editor-table-toolbar"] .swatch-button[data-v-1066cfb2] {
2172
2248
  gap: var(--ui-space-1);
2173
2249
  justify-content: flex-start;
2174
2250
  }
2175
- .swatch[data-v-c7ed049b] {
2251
+ .swatch[data-v-1066cfb2] {
2176
2252
  width: 14px;
2177
2253
  height: 14px;
2178
2254
  flex: 0 0 14px;
2179
2255
  border: 1px solid color-mix(in srgb, var(--ui-border) 80%, #000);
2180
2256
  border-radius: 3px;
2181
- background: var(--ui-editor-table-toolbar-swatch);
2257
+ background: var(--_swatch);
2182
2258
  }
2183
- .swatch.default[data-v-c7ed049b] {
2259
+ .swatch.default[data-v-1066cfb2] {
2184
2260
  background:
2185
2261
  linear-gradient(135deg, transparent 44%, var(--ui-danger) 46% 54%, transparent 56%),
2186
2262
  var(--ui-surface);
2187
2263
  }
2188
- .swatch-button.selected[data-v-c7ed049b] {
2264
+ .swatch-button.selected[data-v-1066cfb2] {
2189
2265
  background: var(--ui-accent-soft, var(--ui-accent-subtle));
2190
2266
  }
2191
- [data-component~="ui-editor-table-toolbar"][hidden][data-v-c7ed049b] {
2267
+ [data-component~="ui-editor-table-toolbar"][hidden][data-v-1066cfb2] {
2192
2268
  display: none;
2193
2269
  }
2194
2270
 
2195
- [data-component~="ui-editor-toolbar"][data-v-472b5c16] {
2271
+ [data-component~="ui-editor-toolbar"][data-v-0da1a114] {
2196
2272
  position: sticky;
2197
2273
  top: 0;
2198
2274
  z-index: var(--ui-editor-toolbar-z-index, 10);
@@ -2203,26 +2279,28 @@ svg[data-v-b2b50d17] {
2203
2279
  padding: var(--ui-editor-toolbar-padding-block, 6px)
2204
2280
  var(--ui-editor-toolbar-padding-inline, 12px);
2205
2281
  min-height: var(--ui-editor-toolbar-min-height, 48px);
2206
- overflow-x: auto;
2207
- scrollbar-width: none;
2208
- white-space: nowrap;
2282
+ /* More controls than the column is wide is normal at a readable measure, so the row wraps.
2283
+ Scrolling hid the tail behind an invisible scrollbar. */
2284
+ flex-wrap: wrap;
2285
+ row-gap: var(--ui-editor-toolbar-row-gap, var(--ui-editor-toolbar-gap, 2px));
2209
2286
  background: var(--ui-editor-toolbar-surface, var(--ui-surface));
2210
2287
  border-bottom: 1px solid var(--ui-editor-toolbar-border, var(--ui-border));
2211
2288
  }
2212
- [data-component~="ui-editor-toolbar"][data-v-472b5c16]::-webkit-scrollbar {
2289
+ [data-component~="ui-editor-toolbar"][data-v-0da1a114]::-webkit-scrollbar {
2213
2290
  display: none;
2214
2291
  }
2215
- [data-component~="ui-editor-toolbar"] > [data-v-472b5c16-s] {
2292
+ [data-component~="ui-editor-toolbar"] > [data-v-0da1a114-s] {
2216
2293
  flex: 0 0 auto;
2217
2294
  }
2218
- .divider[data-v-472b5c16-s] {
2295
+ .divider[data-v-0da1a114-s] {
2219
2296
  width: 1px;
2220
2297
  height: 20px;
2221
2298
  background: var(--ui-editor-toolbar-divider, var(--ui-border));
2222
2299
  flex-shrink: 0;
2223
2300
  margin: 0 var(--ui-editor-toolbar-divider-margin, 4px);
2224
2301
  }
2225
- [data-component~="ui-editor-toolbar"][data-ui-editor-toolbar-state~="floating"][data-v-472b5c16] {
2302
+ [data-component~="ui-editor-toolbar"][data-ui-editor-toolbar-state~="floating"][data-v-0da1a114] {
2303
+ flex-wrap: nowrap;
2226
2304
  position: static;
2227
2305
  top: auto;
2228
2306
  width: max-content;
@@ -2244,7 +2322,7 @@ svg[data-v-b2b50d17] {
2244
2322
  backdrop-filter: blur(10px);
2245
2323
  }
2246
2324
  @media (max-width: 767px) {
2247
- [data-component~="ui-editor-toolbar"][data-v-472b5c16] {
2325
+ [data-component~="ui-editor-toolbar"][data-v-0da1a114] {
2248
2326
  position: fixed;
2249
2327
  top: auto;
2250
2328
  bottom: env(safe-area-inset-bottom);
@@ -2255,7 +2333,7 @@ svg[data-v-b2b50d17] {
2255
2333
  border-bottom: none;
2256
2334
  box-shadow: var(--ui-editor-toolbar-mobile-shadow, 0 -2px 8px rgb(0 0 0 / 0.06));
2257
2335
  }
2258
- [data-component~="ui-editor-toolbar"][data-ui-editor-toolbar-state~="floating"][data-v-472b5c16] {
2336
+ [data-component~="ui-editor-toolbar"][data-ui-editor-toolbar-state~="floating"][data-v-0da1a114] {
2259
2337
  position: static;
2260
2338
  inset: auto;
2261
2339
  min-height: auto;
@@ -2269,7 +2347,7 @@ svg[data-v-b2b50d17] {
2269
2347
  }
2270
2348
 
2271
2349
  /* Inside LoomaEditor's sticky shell, the shell is the sticky surface. */
2272
- .looma-editor__sticky-toolbar-shell [data-component~="ui-editor-toolbar"][data-v-472b5c16] {
2350
+ .looma-editor__sticky-toolbar-shell [data-component~="ui-editor-toolbar"][data-v-0da1a114] {
2273
2351
  position: static;
2274
2352
  min-height: var(--ui-editor-toolbar-min-height, 48px);
2275
2353
  overscroll-behavior-inline: contain;
@@ -2280,7 +2358,7 @@ svg[data-v-b2b50d17] {
2280
2358
 
2281
2359
  /* Inside LoomaEditor's mobile shell, the toolbar is a scroll-snapping strip. */
2282
2360
  .looma-editor__mobile-toolbar-shell
2283
- [data-component~="ui-editor-toolbar"][data-ui-editor-toolbar-state~="floating"][data-v-472b5c16] {
2361
+ [data-component~="ui-editor-toolbar"][data-ui-editor-toolbar-state~="floating"][data-v-0da1a114] {
2284
2362
  width: 100%;
2285
2363
  max-width: none;
2286
2364
  min-height: 100%;
@@ -2297,7 +2375,7 @@ svg[data-v-b2b50d17] {
2297
2375
  }
2298
2376
 
2299
2377
  /* A component that sets its display still honours the hidden attribute on its root. */
2300
- [data-component~="ui-editor-toolbar"][hidden][data-v-472b5c16] {
2378
+ [data-component~="ui-editor-toolbar"][hidden][data-v-0da1a114] {
2301
2379
  display: none;
2302
2380
  }
2303
2381
 
@@ -2761,7 +2839,7 @@ svg[data-v-80722d12-s] {
2761
2839
  }
2762
2840
  }
2763
2841
 
2764
- [data-component~="ui-menu-item"][data-v-deb5a674] {
2842
+ [data-component~="ui-menu-item"][data-v-69407da9] {
2765
2843
  display: block;
2766
2844
  box-sizing: border-box;
2767
2845
  width: 100%;
@@ -2778,16 +2856,29 @@ svg[data-v-80722d12-s] {
2778
2856
  background-color var(--ui-motion-fast) var(--ui-motion-ease),
2779
2857
  color var(--ui-motion-fast) var(--ui-motion-ease);
2780
2858
  }
2781
- [data-component~="ui-menu-item"][data-v-deb5a674]:is(:hover, :focus-visible):not([aria-disabled="true"]) {
2859
+
2860
+ /* Centre the glyphs, not the line box: a label without descenders otherwise reads high. */
2861
+ /* Centre the glyphs, not the line box: a label without descenders otherwise reads high.
2862
+ * Trimming applies to block containers, so the box is a block with centred content. */
2863
+ @supports (text-box-trim: trim-both) {
2864
+ [data-component~="ui-menu-item"][data-v-69407da9] {
2865
+ display: block;
2866
+ min-block-size: var(--ui-menu-item-min-block-size, var(--ui-control-size-md, 2.5rem));
2867
+ align-content: center;
2868
+ text-box-trim: trim-both;
2869
+ text-box-edge: cap alphabetic;
2870
+ }
2871
+ }
2872
+ [data-component~="ui-menu-item"][data-v-69407da9]:is(:hover, :focus-visible):not([aria-disabled="true"]) {
2782
2873
  background: var(--ui-menu-item-hover-surface, var(--ui-surface-subtle));
2783
2874
  }
2784
- [data-component~="ui-menu-item"][aria-disabled="true"][data-v-deb5a674] {
2875
+ [data-component~="ui-menu-item"][aria-disabled="true"][data-v-69407da9] {
2785
2876
  opacity: 0.6;
2786
2877
  cursor: not-allowed;
2787
2878
  }
2788
2879
 
2789
2880
  /* A component that sets its display still honours the hidden attribute on its root. */
2790
- [data-component~="ui-menu-item"][hidden][data-v-deb5a674] {
2881
+ [data-component~="ui-menu-item"][hidden][data-v-69407da9] {
2791
2882
  display: none;
2792
2883
  }
2793
2884
 
@@ -3394,52 +3485,52 @@ hr[aria-orientation="vertical"][data-v-f0034397] {
3394
3485
  display: none;
3395
3486
  }
3396
3487
 
3397
- [data-component~="ui-stack"][data-v-aa8062a9] {
3488
+ [data-component~="ui-stack"][data-v-9a903e2b] {
3398
3489
  --_layout-gap: var(--ui-space-4);
3399
3490
  display: flex;
3400
3491
  flex-direction: column;
3401
3492
  align-items: stretch;
3402
- gap: var(--ui-layout-gap, var(--_layout-gap));
3493
+ gap: var(--ui-stack-gap, var(--_layout-gap));
3403
3494
  min-inline-size: 0;
3404
3495
  max-inline-size: 100%;
3405
3496
  margin: 0;
3406
3497
  }
3407
- [data-component~="ui-stack"][data-ui-stack-state~="gap=xs"][data-v-aa8062a9] {
3498
+ [data-component~="ui-stack"][data-ui-stack-state~="gap=xs"][data-v-9a903e2b] {
3408
3499
  --_layout-gap: var(--ui-space-2);
3409
3500
  }
3410
- [data-component~="ui-stack"][data-ui-stack-state~="gap=s"][data-v-aa8062a9] {
3501
+ [data-component~="ui-stack"][data-ui-stack-state~="gap=s"][data-v-9a903e2b] {
3411
3502
  --_layout-gap: var(--ui-space-3);
3412
3503
  }
3413
- [data-component~="ui-stack"][data-ui-stack-state~="gap=m"][data-v-aa8062a9] {
3504
+ [data-component~="ui-stack"][data-ui-stack-state~="gap=m"][data-v-9a903e2b] {
3414
3505
  --_layout-gap: var(--ui-space-4);
3415
3506
  }
3416
- [data-component~="ui-stack"][data-ui-stack-state~="gap=l"][data-v-aa8062a9] {
3507
+ [data-component~="ui-stack"][data-ui-stack-state~="gap=l"][data-v-9a903e2b] {
3417
3508
  --_layout-gap: var(--ui-space-5);
3418
3509
  }
3419
- [data-component~="ui-stack"][data-ui-stack-state~="gap=xl"][data-v-aa8062a9] {
3510
+ [data-component~="ui-stack"][data-ui-stack-state~="gap=xl"][data-v-9a903e2b] {
3420
3511
  --_layout-gap: var(--ui-space-6);
3421
3512
  }
3422
- [data-component~="ui-stack"][data-ui-stack-state~="align=start"][data-v-aa8062a9] {
3513
+ [data-component~="ui-stack"][data-ui-stack-state~="align=start"][data-v-9a903e2b] {
3423
3514
  align-items: flex-start;
3424
3515
  }
3425
- [data-component~="ui-stack"][data-ui-stack-state~="align=center"][data-v-aa8062a9] {
3516
+ [data-component~="ui-stack"][data-ui-stack-state~="align=center"][data-v-9a903e2b] {
3426
3517
  align-items: center;
3427
3518
  }
3428
- [data-component~="ui-stack"][data-ui-stack-state~="align=end"][data-v-aa8062a9] {
3519
+ [data-component~="ui-stack"][data-ui-stack-state~="align=end"][data-v-9a903e2b] {
3429
3520
  align-items: flex-end;
3430
3521
  }
3431
- [data-component~="ui-stack"][data-ui-stack-state~="justify=center"][data-v-aa8062a9] {
3522
+ [data-component~="ui-stack"][data-ui-stack-state~="justify=center"][data-v-9a903e2b] {
3432
3523
  justify-content: center;
3433
3524
  }
3434
- [data-component~="ui-stack"][data-ui-stack-state~="justify=end"][data-v-aa8062a9] {
3525
+ [data-component~="ui-stack"][data-ui-stack-state~="justify=end"][data-v-9a903e2b] {
3435
3526
  justify-content: flex-end;
3436
3527
  }
3437
- [data-component~="ui-stack"][data-ui-stack-state~="justify=between"][data-v-aa8062a9] {
3528
+ [data-component~="ui-stack"][data-ui-stack-state~="justify=between"][data-v-9a903e2b] {
3438
3529
  justify-content: space-between;
3439
3530
  }
3440
3531
 
3441
3532
  /* A component that sets its display still honours the hidden attribute on its root. */
3442
- [data-component~="ui-stack"][hidden][data-v-aa8062a9] {
3533
+ [data-component~="ui-stack"][hidden][data-v-9a903e2b] {
3443
3534
  display: none;
3444
3535
  }
3445
3536
 
@@ -3572,22 +3663,22 @@ input[data-v-44eb48fd], input[data-v-44eb48fd]::after {
3572
3663
  }
3573
3664
 
3574
3665
  /* Density resolves into the tab row's own values; the public tokens still override them. */
3575
- [data-component~="ui-tabs"][data-v-b9e876c6] {
3666
+ [data-component~="ui-tabs"][data-v-3e89baea] {
3576
3667
  --_tab-min-block-size: var(--ui-control-size);
3577
3668
  --_tab-padding-block: var(--ui-space-2);
3578
3669
  --_tab-padding-inline: var(--ui-space-3);
3579
3670
  }
3580
- [data-component~="ui-tabs"][data-ui-tabs-state~="density=compact"][data-v-b9e876c6] {
3671
+ [data-component~="ui-tabs"][data-ui-tabs-state~="density=compact"][data-v-3e89baea] {
3581
3672
  --_tab-min-block-size: var(--ui-control-size-sm);
3582
3673
  --_tab-padding-block: var(--ui-space-1);
3583
3674
  --_tab-padding-inline: var(--ui-space-2);
3584
3675
  }
3585
- [data-component~="ui-tabs"][data-v-b9e876c6] {
3676
+ [data-component~="ui-tabs"][data-v-3e89baea] {
3586
3677
  display: grid;
3587
3678
  inline-size: 100%;
3588
3679
  min-inline-size: 0;
3589
3680
  }
3590
- .list[data-v-b9e876c6] {
3681
+ .list[data-v-3e89baea] {
3591
3682
  display: grid;
3592
3683
  grid-auto-flow: column;
3593
3684
  grid-auto-columns: max-content;
@@ -3603,7 +3694,7 @@ input[data-v-44eb48fd], input[data-v-44eb48fd]::after {
3603
3694
  scrollbar-width: thin;
3604
3695
  border-block-end: 1px solid var(--ui-border-default);
3605
3696
  }
3606
- .list button[data-v-b9e876c6] {
3697
+ .list button[data-v-3e89baea] {
3607
3698
  min-block-size: var(--ui-tabs-tab-min-block-size, var(--_tab-min-block-size));
3608
3699
  margin: 0 0 -1px;
3609
3700
  padding: var(--ui-tabs-tab-padding-block, var(--_tab-padding-block))
@@ -3621,43 +3712,56 @@ input[data-v-44eb48fd], input[data-v-44eb48fd]::after {
3621
3712
  background-color var(--ui-motion-fast) var(--ui-motion-ease),
3622
3713
  border-color var(--ui-motion-fast) var(--ui-motion-ease);
3623
3714
  }
3624
- [data-component~="ui-tabs"][data-ui-tabs-state~="stretch"] .list[data-v-b9e876c6] {
3715
+
3716
+ /* Centre the glyphs, not the line box: a label without descenders otherwise reads high. */
3717
+ /* Centre the glyphs, not the line box: a label without descenders otherwise reads high.
3718
+ * Trimming applies to block containers, so the box is a block with centred content. */
3719
+ @supports (text-box-trim: trim-both) {
3720
+ .list button[data-v-3e89baea] {
3721
+ display: block;
3722
+ text-align: center;
3723
+ align-content: center;
3724
+ text-box-trim: trim-both;
3725
+ text-box-edge: cap alphabetic;
3726
+ }
3727
+ }
3728
+ [data-component~="ui-tabs"][data-ui-tabs-state~="stretch"] .list[data-v-3e89baea] {
3625
3729
  grid-auto-columns: minmax(max-content, 1fr);
3626
3730
  }
3627
- .list button[data-v-b9e876c6] {
3731
+ .list button[data-v-3e89baea] {
3628
3732
  white-space: nowrap;
3629
3733
  }
3630
- .list button[data-v-b9e876c6]:hover {
3734
+ .list button[data-v-3e89baea]:hover {
3631
3735
  color: var(--ui-text-primary);
3632
3736
  background: var(--ui-surface-muted);
3633
3737
  }
3634
- .list button[aria-selected="true"][data-v-b9e876c6] {
3738
+ .list button[aria-selected="true"][data-v-3e89baea] {
3635
3739
  color: var(--ui-accent-solid);
3636
3740
  border-block-end-color: var(--ui-accent-solid);
3637
3741
  }
3638
- .list button[data-v-b9e876c6]:focus-visible {
3742
+ .list button[data-v-3e89baea]:focus-visible {
3639
3743
  position: relative;
3640
3744
  outline: none;
3641
3745
  box-shadow: inset 0 0 0 2px color-mix(in srgb, var(--ui-focus-ring) 45%, transparent);
3642
3746
  border-radius: var(--ui-radius-sm);
3643
3747
  }
3644
- .panels[data-v-b9e876c6] {
3748
+ .panels[data-v-3e89baea] {
3645
3749
  min-inline-size: 0;
3646
3750
  }
3647
- [data-v-b9e876c6-s] {
3751
+ [data-v-3e89baea-s] {
3648
3752
  padding: var(--ui-space-4);
3649
3753
  }
3650
- [data-component~="ui-tabs"][data-ui-tabs-state~="orientation=vertical"][data-v-b9e876c6] {
3754
+ [data-component~="ui-tabs"][data-ui-tabs-state~="orientation=vertical"][data-v-3e89baea] {
3651
3755
  grid-template-columns: max-content minmax(0, 1fr);
3652
3756
  align-items: start;
3653
3757
  }
3654
- [data-component~="ui-tabs"][data-ui-tabs-state~="orientation=vertical"] .list[data-v-b9e876c6] {
3758
+ [data-component~="ui-tabs"][data-ui-tabs-state~="orientation=vertical"] .list[data-v-3e89baea] {
3655
3759
  grid-auto-flow: row;
3656
3760
  grid-auto-columns: auto;
3657
3761
  border-block-end: 0;
3658
3762
  border-inline-end: 1px solid var(--ui-border-default);
3659
3763
  }
3660
- [data-component~="ui-tabs"][data-ui-tabs-state~="orientation=vertical"] .list button[data-v-b9e876c6] {
3764
+ [data-component~="ui-tabs"][data-ui-tabs-state~="orientation=vertical"] .list button[data-v-3e89baea] {
3661
3765
  margin: 0 -1px 0 0;
3662
3766
  border-block-end: 0;
3663
3767
  border-inline-end: 2px solid transparent;
@@ -3665,17 +3769,17 @@ input[data-v-44eb48fd], input[data-v-44eb48fd]::after {
3665
3769
  }
3666
3770
  [data-component~="ui-tabs"][data-ui-tabs-state~="orientation=vertical"]
3667
3771
  .list
3668
- button[aria-selected="true"][data-v-b9e876c6] {
3772
+ button[aria-selected="true"][data-v-3e89baea] {
3669
3773
  border-inline-end-color: var(--ui-accent-solid);
3670
3774
  }
3671
3775
  @media (prefers-reduced-motion: reduce) {
3672
- .list button[data-v-b9e876c6] {
3776
+ .list button[data-v-3e89baea] {
3673
3777
  transition: none;
3674
3778
  }
3675
3779
  }
3676
3780
 
3677
3781
  /* A component that sets its display still honours the hidden attribute on its root. */
3678
- [data-component~="ui-tabs"][hidden][data-v-b9e876c6] {
3782
+ [data-component~="ui-tabs"][hidden][data-v-3e89baea] {
3679
3783
  display: none;
3680
3784
  }
3681
3785
 
@@ -3746,7 +3850,7 @@ input[data-v-44eb48fd], input[data-v-44eb48fd]::after {
3746
3850
  display: none;
3747
3851
  }
3748
3852
 
3749
- [data-component~="ui-toast-region"][data-v-7d8dab78] {
3853
+ [data-component~="ui-toast-region"][data-v-660faa24] {
3750
3854
  position: fixed;
3751
3855
  top: calc(var(--ui-space-4) + env(safe-area-inset-top));
3752
3856
  right: auto;
@@ -3768,14 +3872,14 @@ input[data-v-44eb48fd], input[data-v-44eb48fd]::after {
3768
3872
  box-shadow: none;
3769
3873
  pointer-events: none;
3770
3874
  }
3771
- [data-component~="ui-toast-region"][data-v-7d8dab78]:not(:popover-open) {
3875
+ [data-component~="ui-toast-region"][data-v-660faa24]:not(:popover-open) {
3772
3876
  display: none;
3773
3877
  }
3774
- [data-component~="ui-toast-region"] > .toast[data-v-7d8dab78],
3775
- [data-component~="ui-toast-region"] > [data-v-7d8dab78-s] {
3878
+ [data-component~="ui-toast-region"] > .toast[data-v-660faa24],
3879
+ [data-component~="ui-toast-region"] > [data-v-660faa24-s] {
3776
3880
  pointer-events: auto;
3777
3881
  }
3778
- .toast[data-v-7d8dab78] {
3882
+ .toast[data-v-660faa24] {
3779
3883
  display: grid;
3780
3884
  grid-template-columns: 1fr auto;
3781
3885
  gap: var(--ui-space-2);
@@ -3786,16 +3890,16 @@ input[data-v-44eb48fd], input[data-v-44eb48fd]::after {
3786
3890
  background: var(--ui-surface-elevated);
3787
3891
  color: var(--ui-text-primary);
3788
3892
  box-shadow: var(--ui-elevation-overlay, var(--ui-shadow-lg));
3789
- animation: ui-toast-enter-7d8dab78 var(--ui-toast-enter-duration, 0.32s)
3893
+ animation: ui-toast-enter-660faa24 var(--ui-toast-region-enter-duration, 0.32s)
3790
3894
  var(--ui-motion-ease-out, cubic-bezier(0.16, 1, 0.3, 1)) both;
3791
3895
  }
3792
3896
 
3793
3897
  /* Leaving slides on down and fades; the controller removes the toast when this ends. */
3794
- .toast.closing[data-v-7d8dab78] {
3795
- animation: ui-toast-exit-7d8dab78 var(--ui-toast-exit-duration, 0.22s) var(--ui-motion-ease) both;
3898
+ .toast.closing[data-v-660faa24] {
3899
+ animation: ui-toast-exit-660faa24 var(--ui-toast-region-exit-duration, 0.22s) var(--ui-motion-ease) both;
3796
3900
  pointer-events: none;
3797
3901
  }
3798
- @keyframes ui-toast-enter-7d8dab78 {
3902
+ @keyframes ui-toast-enter-660faa24 {
3799
3903
  from {
3800
3904
  opacity: 0;
3801
3905
  transform: translateY(-1rem);
@@ -3805,7 +3909,7 @@ to {
3805
3909
  transform: translateY(0);
3806
3910
  }
3807
3911
  }
3808
- @keyframes ui-toast-exit-7d8dab78 {
3912
+ @keyframes ui-toast-exit-660faa24 {
3809
3913
  from {
3810
3914
  opacity: 1;
3811
3915
  transform: translateY(0);
@@ -3816,21 +3920,21 @@ to {
3816
3920
  }
3817
3921
  }
3818
3922
  @media (prefers-reduced-motion: reduce) {
3819
- .toast[data-v-7d8dab78], .toast.closing[data-v-7d8dab78] {
3923
+ .toast[data-v-660faa24], .toast.closing[data-v-660faa24] {
3820
3924
  animation: none;
3821
3925
  }
3822
3926
  }
3823
- .message[data-v-7d8dab78] {
3927
+ .message[data-v-660faa24] {
3824
3928
  min-inline-size: 0;
3825
3929
  align-self: center;
3826
3930
  }
3827
- .dismiss[data-v-7d8dab78] {
3931
+ .dismiss[data-v-660faa24] {
3828
3932
  align-self: center;
3829
3933
  margin-inline-end: calc(var(--ui-space-2) * -1);
3830
3934
  }
3831
3935
 
3832
3936
  /* A component that sets its display still honours the hidden attribute on its root. */
3833
- [data-component~="ui-toast-region"][hidden][data-v-7d8dab78] {
3937
+ [data-component~="ui-toast-region"][hidden][data-v-660faa24] {
3834
3938
  display: none;
3835
3939
  }
3836
3940
 
@@ -4237,7 +4341,7 @@ html[data-ui-input-modality="touch"] [data-component~="ui-tree-item"] .drag-hand
4237
4341
  padding: var(--ui-callout-padding-block) var(--ui-callout-padding-inline);
4238
4342
  border: var(--ui-callout-border-width) solid color-mix(in srgb, var(--ui-callout-border) 35%, transparent);
4239
4343
  border-inline-start: var(--ui-callout-leading-border-width) solid var(--ui-callout-border);
4240
- border-radius: var(--ui-radius-2);
4344
+ border-radius: var(--ui-radius-md);
4241
4345
  background: var(--ui-callout-surface);
4242
4346
  color: var(--ui-callout-text);
4243
4347
  }
@@ -4285,7 +4389,7 @@ html[data-ui-input-modality="touch"] [data-component~="ui-tree-item"] .drag-hand
4285
4389
  padding: var(--ui-space-4);
4286
4390
  overflow-x: auto;
4287
4391
  border: 1px solid var(--ui-border-default);
4288
- border-radius: var(--ui-radius-2);
4392
+ border-radius: var(--ui-radius-md);
4289
4393
  background: var(--ui-surface-muted);
4290
4394
  font-family: var(--ui-font-family-mono, ui-monospace, monospace);
4291
4395
  font-size: var(--ui-font-size-sm);
@@ -4293,7 +4397,7 @@ html[data-ui-input-modality="touch"] [data-component~="ui-tree-item"] .drag-hand
4293
4397
 
4294
4398
  .looma-editor .ProseMirror code {
4295
4399
  padding: 0.1em 0.3em;
4296
- border-radius: var(--ui-radius-1);
4400
+ border-radius: var(--ui-radius-sm);
4297
4401
  background: var(--ui-surface-subtle);
4298
4402
  font-family: var(--ui-font-family-mono, ui-monospace, monospace);
4299
4403
  font-size: 0.9em;
@@ -4311,7 +4415,7 @@ html[data-ui-input-modality="touch"] [data-component~="ui-tree-item"] .drag-hand
4311
4415
  }
4312
4416
 
4313
4417
  .looma-editor .ProseMirror mark {
4314
- border-radius: var(--ui-radius-1);
4418
+ border-radius: var(--ui-radius-sm);
4315
4419
  background: var(--ui-editor-highlight-bg, var(--ui-warning-soft));
4316
4420
  }
4317
4421
 
@@ -4354,7 +4458,7 @@ html[data-ui-input-modality="touch"] [data-component~="ui-tree-item"] .drag-hand
4354
4458
  max-width: 100%;
4355
4459
  height: auto;
4356
4460
  margin: var(--ui-space-3) 0;
4357
- border-radius: var(--ui-radius-2);
4461
+ border-radius: var(--ui-radius-md);
4358
4462
  }
4359
4463
 
4360
4464
  .looma-editor .ProseMirror img[data-looma-image]:focus-visible {
@@ -4378,7 +4482,7 @@ html[data-ui-input-modality="touch"] [data-component~="ui-tree-item"] .drag-hand
4378
4482
  margin-top: var(--ui-space-3);
4379
4483
  padding: var(--ui-space-2) var(--ui-space-3);
4380
4484
  border: 1px solid var(--ui-danger-solid);
4381
- border-radius: var(--ui-radius-2);
4485
+ border-radius: var(--ui-radius-md);
4382
4486
  background: var(--ui-danger-soft);
4383
4487
  color: var(--ui-text);
4384
4488
  font-size: var(--ui-font-size-sm);
@@ -4388,7 +4492,7 @@ html[data-ui-input-modality="touch"] [data-component~="ui-tree-item"] .drag-hand
4388
4492
  min-height: 2rem;
4389
4493
  padding: 0 var(--ui-space-3);
4390
4494
  border: 0;
4391
- border-radius: var(--ui-radius-1);
4495
+ border-radius: var(--ui-radius-sm);
4392
4496
  background: var(--ui-danger-solid);
4393
4497
  color: var(--ui-text-on-accent);
4394
4498
  cursor: pointer;
@@ -4416,7 +4520,7 @@ html[data-ui-input-modality="touch"] [data-component~="ui-tree-item"] .drag-hand
4416
4520
  justify-content: center;
4417
4521
  gap: var(--ui-space-3);
4418
4522
  border: 2px dashed var(--ui-accent-solid);
4419
- border-radius: var(--ui-radius-2);
4523
+ border-radius: var(--ui-radius-md);
4420
4524
  background: color-mix(in srgb, var(--ui-accent-soft) 92%, transparent);
4421
4525
  color: var(--ui-accent-active);
4422
4526
  font-size: var(--ui-font-size-sm);
@@ -4432,10 +4536,17 @@ html[data-ui-input-modality="touch"] [data-component~="ui-tree-item"] .drag-hand
4432
4536
 
4433
4537
  .looma-editor__toolbar-button {
4434
4538
  --ui-icon-button-size: var(--ui-editor-toolbar-button-size, 2rem);
4435
- --ui-icon-button-radius: var(--ui-editor-toolbar-button-radius, var(--ui-radius-1));
4539
+ --ui-icon-button-radius: var(--ui-editor-toolbar-button-radius, var(--ui-radius-sm));
4436
4540
  --ui-icon-button-icon-size: var(--ui-editor-toolbar-icon-size, 1rem);
4437
4541
  }
4438
4542
 
4543
+ .looma-editor__toolbar-button[data-active="true"] {
4544
+ --ui-icon-button-surface: var(--ui-editor-toolbar-active-surface, var(--ui-accent-subtle));
4545
+ --ui-icon-button-text: var(--ui-editor-toolbar-active-text, var(--ui-accent-active));
4546
+ color: var(--ui-editor-toolbar-active-text, var(--ui-accent-active));
4547
+ box-shadow: inset 0 0 0 1px var(--ui-editor-toolbar-active-border, color-mix(in srgb, var(--ui-accent) 40%, transparent));
4548
+ }
4549
+
4439
4550
  .looma-editor__toolbar-button > .looma-icon {
4440
4551
  width: var(--ui-editor-toolbar-icon-size, 1rem);
4441
4552
  height: var(--ui-editor-toolbar-icon-size, 1rem);
@@ -4447,7 +4558,7 @@ html[data-ui-input-modality="touch"] [data-component~="ui-tree-item"] .drag-hand
4447
4558
  top: var(--ui-editor-sticky-toolbar-top, 0);
4448
4559
  z-index: var(--ui-editor-toolbar-z-index, 10);
4449
4560
  min-width: 0;
4450
- background: var(--ui-editor-toolbar-bg, var(--ui-surface, #fff));
4561
+ background: var(--ui-editor-toolbar-surface, var(--ui-surface, #fff));
4451
4562
  border-bottom: 1px solid var(--ui-editor-toolbar-border, var(--ui-border, #e5e7eb));
4452
4563
  }
4453
4564
 
@@ -4485,7 +4596,7 @@ html[data-ui-input-modality="touch"] [data-component~="ui-tree-item"] .drag-hand
4485
4596
  -webkit-overflow-scrolling: touch;
4486
4597
  scroll-snap-type: x mandatory;
4487
4598
  scrollbar-width: none;
4488
- background: var(--ui-editor-toolbar-bg, var(--ui-surface, #fff));
4599
+ background: var(--ui-editor-toolbar-surface, var(--ui-surface, #fff));
4489
4600
  border-top: 1px solid var(--ui-editor-toolbar-border, var(--ui-border, #e5e7eb));
4490
4601
  box-shadow: var(--ui-editor-toolbar-mobile-shadow, 0 -2px 8px rgb(0 0 0 / 0.06));
4491
4602
  }
@@ -4508,7 +4619,7 @@ html[data-ui-input-modality="touch"] [data-component~="ui-tree-item"] .drag-hand
4508
4619
  display: inline-flex;
4509
4620
  align-items: center;
4510
4621
  justify-content: center;
4511
- gap: var(--ui-space-1-5, 6px);
4622
+ gap: var(--ui-space-2);
4512
4623
  min-width: 44px;
4513
4624
  min-height: 44px;
4514
4625
  padding: 0 var(--ui-space-3, 12px);
@@ -4642,7 +4753,7 @@ html[data-ui-input-modality="touch"] [data-component~="ui-tree-item"] .drag-hand
4642
4753
  left: calc(100% + 6px);
4643
4754
  width: max-content;
4644
4755
  padding: var(--ui-space-1, 4px) var(--ui-space-2, 8px);
4645
- border-radius: var(--ui-radius-1, 4px);
4756
+ border-radius: var(--ui-radius-sm, 4px);
4646
4757
  background: var(--ui-text-primary, #1a1a1a);
4647
4758
  color: var(--ui-surface-elevated, #fff);
4648
4759
  font-size: var(--ui-font-size-xs, 0.75rem);