@threadlabs/looma 0.12.5 → 0.12.7

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 (53) hide show
  1. package/components/ui-avatar/ui-avatar.html +18 -0
  2. package/components/ui-checkbox/ui-checkbox.html +1 -1
  3. package/components/ui-combobox/ui-combobox.html +2 -2
  4. package/components/ui-disclosure/ui-disclosure.html +1 -1
  5. package/components/ui-editable/ui-editable.html +1 -1
  6. package/components/ui-input/ui-input.html +1 -1
  7. package/components/ui-radio/ui-radio.html +1 -1
  8. package/components/ui-select/ui-select.html +1 -1
  9. package/components/ui-switch/ui-switch.html +1 -1
  10. package/components/ui-textarea/ui-textarea.html +1 -1
  11. package/dist/index.js +1 -1
  12. package/package.json +1 -1
  13. package/styles/ui-avatar.css +17 -1
  14. package/styles/ui-checkbox.css +1 -1
  15. package/styles/ui-combobox.css +2 -2
  16. package/styles/ui-disclosure.css +1 -1
  17. package/styles/ui-editable.css +1 -1
  18. package/styles/ui-input.css +1 -1
  19. package/styles/ui-radio.css +1 -1
  20. package/styles/ui-select.css +1 -1
  21. package/styles/ui-switch.css +1 -1
  22. package/styles/ui-textarea.css +1 -1
  23. package/theme-dark.css +1 -1
  24. package/theme-light.css +1 -1
  25. package/tokens.css +8 -6
  26. package/vanilla/UiAvatar.d.ts +2 -0
  27. package/vanilla/UiAvatar.js +1 -1
  28. package/vue/UiAvatar.d.ts +4 -0
  29. package/vue/UiAvatar.vue +32 -2
  30. package/vue/UiButton.d.ts +1 -1
  31. package/vue/UiCheckbox.vue +1 -1
  32. package/vue/UiCombobox.d.ts +1 -1
  33. package/vue/UiCombobox.vue +2 -2
  34. package/vue/UiDisclosure.vue +1 -1
  35. package/vue/UiEditable.vue +1 -1
  36. package/vue/UiIconButton.d.ts +1 -1
  37. package/vue/UiInput.vue +1 -1
  38. package/vue/UiRadio.vue +1 -1
  39. package/vue/UiSelect.vue +1 -1
  40. package/vue/UiSwitch.vue +1 -1
  41. package/vue/UiText.d.ts +1 -1
  42. package/vue/UiTextarea.vue +1 -1
  43. package/vue/chunks/UiAvatar.js +16 -7
  44. package/vue/chunks/UiCheckbox.js +1 -1
  45. package/vue/chunks/UiCombobox.js +1 -1
  46. package/vue/chunks/UiDisclosure.js +1 -1
  47. package/vue/chunks/UiEditable.js +1 -1
  48. package/vue/chunks/UiInput.js +1 -1
  49. package/vue/chunks/UiRadio.js +1 -1
  50. package/vue/chunks/UiSelect.js +1 -1
  51. package/vue/chunks/UiSwitch.js +1 -1
  52. package/vue/chunks/UiTextarea.js +1 -1
  53. package/vue/components.css +177 -165
@@ -68,7 +68,7 @@
68
68
  display: none;
69
69
  }
70
70
 
71
- [data-component~="ui-avatar"][data-v-ebb1bbbb] {
71
+ [data-component~="ui-avatar"][data-v-a5e0e48e] {
72
72
  display: inline-grid;
73
73
  place-items: center;
74
74
  overflow: hidden;
@@ -83,13 +83,25 @@
83
83
  font-weight: 600;
84
84
  text-transform: uppercase;
85
85
  }
86
- .image[data-v-ebb1bbbb],img[data-v-ebb1bbbb-s] {
86
+ [data-component~="ui-avatar"][data-ui-avatar-state~="size=sm"][data-v-a5e0e48e] {
87
+ inline-size: 1.75rem;
88
+ block-size: 1.75rem;
89
+ font-size: var(--ui-font-size-xs);
90
+ }
91
+
92
+ /* An outline, not a dot: the avatar clips its content to the circle, and an outline is drawn
93
+ outside the box, so the ring survives the clip and the overlap in an Avatar Group. */
94
+ [data-component~="ui-avatar"][data-ui-avatar-state~="active"][data-v-a5e0e48e] {
95
+ outline: 2px solid var(--ui-avatar-active-ring, var(--ui-success));
96
+ outline-offset: 1px;
97
+ }
98
+ .image[data-v-a5e0e48e],img[data-v-a5e0e48e-s] {
87
99
  grid-area: 1 / 1;
88
100
  inline-size: 100%;
89
101
  block-size: 100%;
90
102
  object-fit: cover;
91
103
  }
92
- .fallback[data-v-ebb1bbbb] {
104
+ .fallback[data-v-a5e0e48e] {
93
105
  grid-area: 1 / 1;
94
106
  display: inline-flex;
95
107
  align-items: center;
@@ -102,7 +114,7 @@
102
114
  /* Centre the glyphs, not the line box: a label without descenders otherwise reads high.
103
115
  * Trimming applies to block containers, so the box is a block with centred content. */
104
116
  @supports (text-box-trim: trim-both) {
105
- .fallback[data-v-ebb1bbbb] {
117
+ .fallback[data-v-a5e0e48e] {
106
118
  display: block;
107
119
  text-align: center;
108
120
  align-content: center;
@@ -110,12 +122,12 @@
110
122
  text-box-edge: cap alphabetic;
111
123
  }
112
124
  }
113
- [hidden][data-v-ebb1bbbb] {
125
+ [hidden][data-v-a5e0e48e] {
114
126
  display: none;
115
127
  }
116
128
 
117
129
  /* A component that sets its display still honours the hidden attribute on its root. */
118
- [data-component~="ui-avatar"][hidden][data-v-ebb1bbbb] {
130
+ [data-component~="ui-avatar"][hidden][data-v-a5e0e48e] {
119
131
  display: none;
120
132
  }
121
133
 
@@ -740,7 +752,7 @@ html[data-ui-input-modality="touch"]
740
752
  display: none;
741
753
  }
742
754
 
743
- [data-component~="ui-checkbox"][data-v-4d65c3b0] {
755
+ [data-component~="ui-checkbox"][data-v-cc7306ec] {
744
756
  display: inline-flex;
745
757
  align-items: flex-start;
746
758
  gap: var(--ui-checkbox-gap, var(--ui-space-2));
@@ -750,25 +762,25 @@ html[data-ui-input-modality="touch"]
750
762
  }
751
763
 
752
764
  /* The label, and under it an optional line saying what the choice means. */
753
- .text[data-v-4d65c3b0] {
765
+ .text[data-v-cc7306ec] {
754
766
  display: flex;
755
767
  flex-direction: column;
756
768
  gap: var(--ui-space-1);
757
769
  min-inline-size: 0;
758
770
  }
759
- .label[data-v-4d65c3b0] {
771
+ .label[data-v-cc7306ec] {
760
772
  min-inline-size: 0;
761
773
  line-height: var(--ui-line-height-md);
762
774
  }
763
- .description[data-v-4d65c3b0] {
775
+ .description[data-v-cc7306ec] {
764
776
  color: var(--ui-text-secondary);
765
777
  font-size: var(--ui-font-size-sm);
766
778
  line-height: var(--ui-line-height);
767
779
  }
768
- .description[data-v-4d65c3b0]:empty {
780
+ .description[data-v-cc7306ec]:empty {
769
781
  display: none;
770
782
  }
771
- input[data-v-4d65c3b0] {
783
+ input[data-v-cc7306ec] {
772
784
  appearance: none;
773
785
  -webkit-appearance: none;
774
786
  position: relative;
@@ -786,20 +798,20 @@ input[data-v-4d65c3b0] {
786
798
  border-color var(--ui-motion-fast) var(--ui-motion-ease),
787
799
  box-shadow var(--ui-motion-fast) var(--ui-motion-ease);
788
800
  }
789
- input[data-v-4d65c3b0]::after {
801
+ input[data-v-cc7306ec]::after {
790
802
  content: "";
791
803
  position: absolute;
792
804
  opacity: 0;
793
805
  }
794
- input[data-v-4d65c3b0]:checked,
795
- input[data-v-4d65c3b0]:indeterminate {
806
+ input[data-v-cc7306ec]:checked,
807
+ input[data-v-cc7306ec]:indeterminate {
796
808
  border-color: var(--ui-accent-solid);
797
809
  background: var(--ui-accent-solid);
798
810
  box-shadow: inset 0 1px 2px color-mix(in srgb, #000 16%, transparent);
799
811
  }
800
812
 
801
813
  /* Centre the tick's box, then lift it: a rotated L's ink sits ~0.11rem below its box centre. */
802
- input[data-v-4d65c3b0]:checked::after {
814
+ input[data-v-cc7306ec]:checked::after {
803
815
  inset: 0;
804
816
  margin: auto;
805
817
  inline-size: 0.32rem;
@@ -812,7 +824,7 @@ input[data-v-4d65c3b0]:checked::after {
812
824
  opacity: 1;
813
825
  transform: translateY(-0.11rem) rotate(45deg);
814
826
  }
815
- input[data-v-4d65c3b0]:indeterminate::after {
827
+ input[data-v-cc7306ec]:indeterminate::after {
816
828
  inset: 50% 0.23rem auto;
817
829
  block-size: 0.125rem;
818
830
  border-radius: var(--ui-radius-round);
@@ -820,25 +832,25 @@ input[data-v-4d65c3b0]:indeterminate::after {
820
832
  opacity: 1;
821
833
  transform: translateY(-50%);
822
834
  }
823
- input[data-v-4d65c3b0]:hover:enabled {
835
+ input[data-v-cc7306ec]:hover:enabled {
824
836
  border-color: var(--ui-accent-solid);
825
837
  }
826
- input[data-v-4d65c3b0]:focus-visible {
838
+ input[data-v-cc7306ec]:focus-visible {
827
839
  outline: 2px solid var(--ui-focus-ring, var(--ui-accent-solid));
828
840
  outline-offset: 2px;
829
841
  }
830
- [data-component~="ui-checkbox"][data-ui-checkbox-state~="disabled"][data-v-4d65c3b0] {
831
- color: var(--ui-text-muted);
842
+ [data-component~="ui-checkbox"][data-ui-checkbox-state~="disabled"][data-v-cc7306ec] {
843
+ color: var(--ui-disabled-text);
832
844
  cursor: not-allowed;
833
845
  }
834
- [data-component~="ui-checkbox"][data-ui-checkbox-state~="disabled"] input[data-v-4d65c3b0] {
846
+ [data-component~="ui-checkbox"][data-ui-checkbox-state~="disabled"] input[data-v-cc7306ec] {
835
847
  border-color: var(--ui-border-default);
836
848
  background: var(--ui-control-surface-disabled, var(--ui-surface-muted));
837
849
  cursor: not-allowed;
838
850
  }
839
851
 
840
852
  /* A component that sets its display still honours the hidden attribute on its root. */
841
- [data-component~="ui-checkbox"][hidden][data-v-4d65c3b0] {
853
+ [data-component~="ui-checkbox"][hidden][data-v-cc7306ec] {
842
854
  display: none;
843
855
  }
844
856
 
@@ -977,27 +989,27 @@ input[data-v-4d65c3b0]:focus-visible {
977
989
  }
978
990
  }
979
991
 
980
- [data-component~="ui-combobox"][data-v-0bd7ecc4] {
992
+ [data-component~="ui-combobox"][data-v-b3cdd263] {
981
993
  display: grid;
982
994
  gap: var(--ui-space-1);
983
995
  min-inline-size: 0;
984
996
  color: var(--ui-text-primary);
985
997
  font: inherit;
986
998
  }
987
- label[data-v-0bd7ecc4] {
999
+ label[data-v-b3cdd263] {
988
1000
  color: var(--ui-combobox-label-text, var(--ui-text-primary));
989
1001
  font-size: var(--ui-combobox-label-font-size, var(--ui-font-size-sm));
990
1002
  font-weight: 500;
991
1003
  }
992
1004
  /* The field and anything that annotates it sit on one row; the help button is beside the box,
993
1005
  not inside it, because a control's box holds its value. */
994
- .control[data-v-0bd7ecc4] {
1006
+ .control[data-v-b3cdd263] {
995
1007
  display: flex;
996
1008
  align-items: center;
997
1009
  gap: var(--ui-space-2);
998
1010
  min-inline-size: 0;
999
1011
  }
1000
- .field[data-v-0bd7ecc4] {
1012
+ .field[data-v-b3cdd263] {
1001
1013
  flex: 1 1 auto;
1002
1014
  display: flex;
1003
1015
  min-inline-size: 0;
@@ -1009,14 +1021,14 @@ label[data-v-0bd7ecc4] {
1009
1021
  border-color var(--ui-motion-fast) var(--ui-motion-ease),
1010
1022
  box-shadow var(--ui-motion-fast) var(--ui-motion-ease);
1011
1023
  }
1012
- .field[data-v-0bd7ecc4]:focus-within {
1024
+ .field[data-v-b3cdd263]:focus-within {
1013
1025
  border-color: var(--ui-control-focus, var(--ui-accent-solid));
1014
1026
  box-shadow:
1015
1027
  var(--ui-control-inset),
1016
1028
  var(--ui-control-focus-halo-shadow);
1017
1029
  }
1018
1030
  /* A ghost icon button: the affordance is the mark, not a box around it. */
1019
- .help[data-v-0bd7ecc4] {
1031
+ .help[data-v-b3cdd263] {
1020
1032
  flex: none;
1021
1033
  display: inline-flex;
1022
1034
  align-items: center;
@@ -1033,28 +1045,28 @@ label[data-v-0bd7ecc4] {
1033
1045
  background-color var(--ui-motion-fast) var(--ui-motion-ease),
1034
1046
  color var(--ui-motion-fast) var(--ui-motion-ease);
1035
1047
  }
1036
- .help[data-v-0bd7ecc4]:hover:enabled,
1037
- .help[aria-expanded="true"][data-v-0bd7ecc4] {
1048
+ .help[data-v-b3cdd263]:hover:enabled,
1049
+ .help[aria-expanded="true"][data-v-b3cdd263] {
1038
1050
  background: color-mix(in srgb, currentColor 8%, transparent);
1039
1051
  color: var(--ui-text-primary);
1040
1052
  }
1041
- .help[data-v-0bd7ecc4]:focus-visible {
1053
+ .help[data-v-b3cdd263]:focus-visible {
1042
1054
  outline: none;
1043
1055
  box-shadow: var(--ui-focus-halo);
1044
1056
  }
1045
- .help[data-v-0bd7ecc4]:disabled {
1057
+ .help[data-v-b3cdd263]:disabled {
1046
1058
  color: var(--ui-disabled-text);
1047
1059
  cursor: not-allowed;
1048
1060
  }
1049
- .help-icon[data-v-0bd7ecc4] {
1061
+ .help-icon[data-v-b3cdd263] {
1050
1062
  inline-size: var(--ui-icon-size-sm);
1051
1063
  block-size: var(--ui-icon-size-sm);
1052
1064
  }
1053
- input[data-v-0bd7ecc4]::selection {
1065
+ input[data-v-b3cdd263]::selection {
1054
1066
  background: color-mix(in srgb, var(--ui-accent-solid) 20%, transparent);
1055
1067
  color: inherit;
1056
1068
  }
1057
- input[data-v-0bd7ecc4] {
1069
+ input[data-v-b3cdd263] {
1058
1070
  appearance: none;
1059
1071
  width: 100%;
1060
1072
  min-inline-size: 0;
@@ -1070,11 +1082,11 @@ input[data-v-0bd7ecc4] {
1070
1082
  margin: 0;
1071
1083
  outline: none;
1072
1084
  }
1073
- [data-component~="ui-combobox"][data-ui-combobox-state~="size=sm"] input[data-v-0bd7ecc4] {
1085
+ [data-component~="ui-combobox"][data-ui-combobox-state~="size=sm"] input[data-v-b3cdd263] {
1074
1086
  min-block-size: calc(var(--ui-control-size-sm) - 2px);
1075
1087
  padding: var(--ui-space-1) var(--ui-space-2);
1076
1088
  }
1077
- button[data-v-0bd7ecc4] {
1089
+ button[data-v-b3cdd263] {
1078
1090
  appearance: none;
1079
1091
  display: inline-grid;
1080
1092
  place-items: center;
@@ -1089,31 +1101,31 @@ button[data-v-0bd7ecc4] {
1089
1101
  padding: 0 var(--ui-space-1);
1090
1102
  cursor: pointer;
1091
1103
  }
1092
- .affordance-icon[data-v-0bd7ecc4] {
1104
+ .affordance-icon[data-v-b3cdd263] {
1093
1105
  display: block;
1094
1106
  inline-size: var(--ui-icon-size-sm);
1095
1107
  block-size: var(--ui-icon-size-sm);
1096
1108
  }
1097
- button[data-v-0bd7ecc4]:hover:enabled {
1109
+ button[data-v-b3cdd263]:hover:enabled {
1098
1110
  background: var(--ui-surface-muted);
1099
1111
  color: var(--ui-text-primary);
1100
1112
  }
1101
- button[data-v-0bd7ecc4]:focus-visible {
1113
+ button[data-v-b3cdd263]:focus-visible {
1102
1114
  outline: none;
1103
1115
  background: var(--ui-surface-muted);
1104
1116
  box-shadow: inset 0 0 0 2px color-mix(in srgb, var(--ui-focus-ring) 45%, transparent);
1105
1117
  }
1106
- input[data-v-0bd7ecc4]:disabled, button[data-v-0bd7ecc4]:disabled {
1107
- color: var(--ui-text-muted);
1118
+ input[data-v-b3cdd263]:disabled, button[data-v-b3cdd263]:disabled {
1119
+ color: var(--ui-disabled-text);
1108
1120
  cursor: not-allowed;
1109
1121
  }
1110
- .field[data-v-0bd7ecc4]:has(input:disabled) {
1122
+ .field[data-v-b3cdd263]:has(input:disabled) {
1111
1123
  background: var(--ui-control-surface-disabled, var(--ui-surface-muted));
1112
1124
  }
1113
- [data-component~="ui-combobox"][data-ui-combobox-state~="validationStatus=error"] .field[data-v-0bd7ecc4] {
1125
+ [data-component~="ui-combobox"][data-ui-combobox-state~="validationStatus=error"] .field[data-v-b3cdd263] {
1114
1126
  border-color: var(--ui-danger-solid, var(--ui-accent-active));
1115
1127
  }
1116
- .popup[data-v-0bd7ecc4] {
1128
+ .popup[data-v-b3cdd263] {
1117
1129
  box-sizing: border-box;
1118
1130
  min-inline-size: 12rem;
1119
1131
  max-inline-size: calc(100vw - 1rem);
@@ -1127,40 +1139,40 @@ input[data-v-0bd7ecc4]:disabled, button[data-v-0bd7ecc4]:disabled {
1127
1139
  color: var(--ui-text-primary);
1128
1140
  box-shadow: var(--ui-elevation-overlay, var(--ui-shadow-lg));
1129
1141
  }
1130
- [hidden][data-v-0bd7ecc4] {
1142
+ [hidden][data-v-b3cdd263] {
1131
1143
  display: none;
1132
1144
  }
1133
- .option[data-v-0bd7ecc4] {
1145
+ .option[data-v-b3cdd263] {
1134
1146
  padding: var(--ui-space-2) var(--ui-space-3);
1135
1147
  border-radius: var(--ui-radius-sm);
1136
1148
  cursor: pointer;
1137
1149
  overflow-wrap: anywhere;
1138
1150
  }
1139
- .option[data-v-0bd7ecc4]:hover, .option.active[data-v-0bd7ecc4] {
1151
+ .option[data-v-b3cdd263]:hover, .option.active[data-v-b3cdd263] {
1140
1152
  background: var(--ui-surface-muted);
1141
1153
  outline: 1px solid var(--ui-focus-ring);
1142
1154
  outline-offset: -1px;
1143
1155
  }
1144
- .option[aria-disabled="true"][data-v-0bd7ecc4] {
1145
- color: var(--ui-text-muted);
1156
+ .option[aria-disabled="true"][data-v-b3cdd263] {
1157
+ color: var(--ui-disabled-text);
1146
1158
  cursor: not-allowed;
1147
1159
  }
1148
- .primary[data-v-0bd7ecc4] {
1160
+ .primary[data-v-b3cdd263] {
1149
1161
  display: block;
1150
1162
  color: var(--ui-combobox-option-text, var(--ui-text-primary));
1151
1163
  font-weight: 500;
1152
1164
  }
1153
- .message[data-v-0bd7ecc4], .group[data-v-0bd7ecc4] {
1165
+ .message[data-v-b3cdd263], .group[data-v-b3cdd263] {
1154
1166
  color: var(--ui-combobox-message-text, var(--ui-text-secondary));
1155
1167
  font-weight: 400;
1156
1168
  font-size: var(--ui-font-size-sm);
1157
1169
  line-height: var(--ui-line-height-md);
1158
1170
  overflow-wrap: anywhere;
1159
1171
  }
1160
- .group[data-v-0bd7ecc4], .popup .message[data-v-0bd7ecc4] {
1172
+ .group[data-v-b3cdd263], .popup .message[data-v-b3cdd263] {
1161
1173
  padding: var(--ui-space-2) var(--ui-space-3);
1162
1174
  }
1163
- .sr-only[data-v-0bd7ecc4] {
1175
+ .sr-only[data-v-b3cdd263] {
1164
1176
  position: absolute;
1165
1177
  inline-size: 1px;
1166
1178
  block-size: 1px;
@@ -1169,16 +1181,16 @@ input[data-v-0bd7ecc4]:disabled, button[data-v-0bd7ecc4]:disabled {
1169
1181
  white-space: nowrap;
1170
1182
  }
1171
1183
  @media (pointer: coarse) {
1172
- button[data-v-0bd7ecc4] {
1184
+ button[data-v-b3cdd263] {
1173
1185
  min-inline-size: 2.75rem;
1174
1186
  min-block-size: 2.75rem;
1175
1187
  }
1176
1188
  }
1177
1189
  @media (forced-colors: active) {
1178
- .field[data-v-0bd7ecc4], .popup[data-v-0bd7ecc4] {
1190
+ .field[data-v-b3cdd263], .popup[data-v-b3cdd263] {
1179
1191
  border-color: CanvasText;
1180
1192
  }
1181
- .option.active[data-v-0bd7ecc4] {
1193
+ .option.active[data-v-b3cdd263] {
1182
1194
  outline-color: Highlight;
1183
1195
  }
1184
1196
  }
@@ -1186,12 +1198,12 @@ button[data-v-0bd7ecc4] {
1186
1198
  /* Multiple mode: every option carries a checkbox, so a list that takes several answers says so
1187
1199
  before anything is picked. aria-selected is the state; this draws it.
1188
1200
  Longhands, not shorthands: lowering drops a shorthand that omits a component. */
1189
- [data-component~="ui-combobox"][data-ui-combobox-state~="multiple"] .option[data-v-0bd7ecc4] {
1201
+ [data-component~="ui-combobox"][data-ui-combobox-state~="multiple"] .option[data-v-b3cdd263] {
1190
1202
  display: flex;
1191
1203
  gap: var(--ui-space-2);
1192
1204
  align-items: center;
1193
1205
  }
1194
- [data-component~="ui-combobox"][data-ui-combobox-state~="multiple"] .option[data-v-0bd7ecc4]::before {
1206
+ [data-component~="ui-combobox"][data-ui-combobox-state~="multiple"] .option[data-v-b3cdd263]::before {
1195
1207
  content: "";
1196
1208
  flex: none;
1197
1209
  inline-size: 1.125rem;
@@ -1206,7 +1218,7 @@ button[data-v-0bd7ecc4] {
1206
1218
  background-size: 0.7rem;
1207
1219
  }
1208
1220
  [data-component~="ui-combobox"][data-ui-combobox-state~="multiple"]
1209
- .option[aria-selected="true"][data-v-0bd7ecc4]::before {
1221
+ .option[aria-selected="true"][data-v-b3cdd263]::before {
1210
1222
  border-color: var(--ui-accent-solid);
1211
1223
  background-color: var(--ui-accent-solid);
1212
1224
  background-image: var(
@@ -1216,20 +1228,20 @@ button[data-v-0bd7ecc4] {
1216
1228
  }
1217
1229
 
1218
1230
  /* Multiple mode: chips wrap before the cursor on one flexible field line. */
1219
- [data-component~="ui-combobox"][data-ui-combobox-state~="multiple"] .field[data-v-0bd7ecc4] {
1231
+ [data-component~="ui-combobox"][data-ui-combobox-state~="multiple"] .field[data-v-b3cdd263] {
1220
1232
  flex-wrap: wrap;
1221
1233
  align-items: center;
1222
1234
  gap: var(--ui-space-1);
1223
1235
  min-block-size: var(--ui-combobox-item-min-block-size, 2.5rem);
1224
1236
  padding: var(--ui-space-1);
1225
1237
  }
1226
- [data-component~="ui-combobox"][data-ui-combobox-state~="multiple"] input[data-v-0bd7ecc4] {
1238
+ [data-component~="ui-combobox"][data-ui-combobox-state~="multiple"] input[data-v-b3cdd263] {
1227
1239
  flex: 1 0 var(--ui-combobox-item-input-min-inline-size, 5rem);
1228
1240
  width: auto;
1229
1241
  min-block-size: 1.75rem;
1230
1242
  padding: var(--ui-space-0-5) var(--ui-space-1);
1231
1243
  }
1232
- .item[data-v-0bd7ecc4] {
1244
+ .item[data-v-b3cdd263] {
1233
1245
  appearance: none;
1234
1246
  display: inline-flex;
1235
1247
  min-inline-size: 0;
@@ -1243,16 +1255,16 @@ button[data-v-0bd7ecc4] {
1243
1255
  font: inherit;
1244
1256
  cursor: default;
1245
1257
  }
1246
- .item[data-v-0bd7ecc4]:focus-visible {
1258
+ .item[data-v-b3cdd263]:focus-visible {
1247
1259
  outline: 2px solid var(--ui-focus-ring);
1248
1260
  outline-offset: 1px;
1249
1261
  }
1250
- .item[data-v-0bd7ecc4]:disabled {
1262
+ .item[data-v-b3cdd263]:disabled {
1251
1263
  opacity: 0.6;
1252
1264
  }
1253
1265
 
1254
1266
  /* A component that sets its display still honours the hidden attribute on its root. */
1255
- [data-component~="ui-combobox"][hidden][data-v-0bd7ecc4] {
1267
+ [data-component~="ui-combobox"][hidden][data-v-b3cdd263] {
1256
1268
  display: none;
1257
1269
  }
1258
1270
 
@@ -1603,12 +1615,12 @@ from {
1603
1615
  }
1604
1616
 
1605
1617
  /* Density resolves into the summary row's own values; the public tokens still override them. */
1606
- [data-component~="ui-disclosure"][data-v-54a22a7e] {
1618
+ [data-component~="ui-disclosure"][data-v-af289043] {
1607
1619
  --_trigger-min-block-size: var(--ui-control-size);
1608
1620
  --_trigger-padding-block: var(--ui-space-2);
1609
1621
  --_trigger-padding-inline: var(--ui-space-3);
1610
1622
  }
1611
- [data-component~="ui-disclosure"][data-ui-disclosure-state~="density=compact"][data-v-54a22a7e] {
1623
+ [data-component~="ui-disclosure"][data-ui-disclosure-state~="density=compact"][data-v-af289043] {
1612
1624
  --_trigger-min-block-size: var(--ui-control-size-sm);
1613
1625
  --_trigger-padding-block: var(--ui-space-1);
1614
1626
  --_trigger-padding-inline: var(--ui-space-2);
@@ -1616,14 +1628,14 @@ from {
1616
1628
 
1617
1629
  /* An accordion row, not a field: no enclosing box, just a divider, so it never reads as a
1618
1630
  * select or combobox. Stacked disclosures share their dividers. */
1619
- [data-component~="ui-disclosure"][data-v-54a22a7e] {
1631
+ [data-component~="ui-disclosure"][data-v-af289043] {
1620
1632
  display: block;
1621
1633
  inline-size: 100%;
1622
1634
  overflow: clip;
1623
1635
  border-block-end: 1px solid var(--ui-border-default);
1624
1636
  color: var(--ui-text-primary);
1625
1637
  }
1626
- .trigger[data-v-54a22a7e] {
1638
+ .trigger[data-v-af289043] {
1627
1639
  display: grid;
1628
1640
  grid-template-columns: minmax(0, 1fr) auto;
1629
1641
  gap: var(--ui-space-3);
@@ -1642,18 +1654,18 @@ from {
1642
1654
  border-radius: var(--ui-radius-sm);
1643
1655
  transition: background-color var(--ui-motion-fast) var(--ui-motion-ease);
1644
1656
  }
1645
- .trigger[data-v-54a22a7e]:hover:not(:disabled) {
1657
+ .trigger[data-v-af289043]:hover:not(:disabled) {
1646
1658
  background: var(--ui-surface-muted);
1647
1659
  }
1648
- .trigger[data-v-54a22a7e]:focus-visible {
1660
+ .trigger[data-v-af289043]:focus-visible {
1649
1661
  outline: none;
1650
1662
  box-shadow: inset 0 0 0 2px color-mix(in srgb, var(--ui-focus-ring) 45%, transparent);
1651
1663
  }
1652
- .trigger[data-v-54a22a7e]:disabled {
1653
- color: var(--ui-text-muted);
1664
+ .trigger[data-v-af289043]:disabled {
1665
+ color: var(--ui-disabled-text);
1654
1666
  cursor: not-allowed;
1655
1667
  }
1656
- .chevron[data-v-54a22a7e] {
1668
+ .chevron[data-v-af289043] {
1657
1669
  inline-size: 0.5rem;
1658
1670
  block-size: 0.5rem;
1659
1671
  border-inline-end: 2px solid currentColor;
@@ -1661,39 +1673,39 @@ from {
1661
1673
  transform: rotate(45deg) translate(-1px, -1px);
1662
1674
  transition: transform var(--ui-motion-fast) var(--ui-motion-ease);
1663
1675
  }
1664
- .panel[data-v-54a22a7e] {
1676
+ .panel[data-v-af289043] {
1665
1677
  display: grid;
1666
1678
  grid-template-rows: 0fr;
1667
1679
  transition: grid-template-rows var(--ui-motion-fast)
1668
1680
  var(--ui-motion-ease-out, var(--ui-motion-ease));
1669
1681
  }
1670
- .panel-inner[data-v-54a22a7e] {
1682
+ .panel-inner[data-v-af289043] {
1671
1683
  min-block-size: 0;
1672
1684
  overflow: hidden;
1673
1685
  padding-inline: var(--ui-space-3);
1674
1686
  }
1675
- [data-component~="ui-disclosure"][data-ui-disclosure-state~="internalOpen"] .panel[data-v-54a22a7e] {
1687
+ [data-component~="ui-disclosure"][data-ui-disclosure-state~="internalOpen"] .panel[data-v-af289043] {
1676
1688
  grid-template-rows: 1fr;
1677
1689
  }
1678
- [data-component~="ui-disclosure"][data-ui-disclosure-state~="internalOpen"] .panel-inner[data-v-54a22a7e] {
1690
+ [data-component~="ui-disclosure"][data-ui-disclosure-state~="internalOpen"] .panel-inner[data-v-af289043] {
1679
1691
  padding-block: 0 var(--ui-space-3);
1680
1692
  }
1681
- [data-component~="ui-disclosure"][data-ui-disclosure-state~="internalOpen"] .chevron[data-v-54a22a7e] {
1693
+ [data-component~="ui-disclosure"][data-ui-disclosure-state~="internalOpen"] .chevron[data-v-af289043] {
1682
1694
  transform: rotate(225deg) translate(-1px, -1px);
1683
1695
  }
1684
1696
  @media (prefers-reduced-motion: reduce) {
1685
- .panel[data-v-54a22a7e],
1686
- .chevron[data-v-54a22a7e] {
1697
+ .panel[data-v-af289043],
1698
+ .chevron[data-v-af289043] {
1687
1699
  transition: none;
1688
1700
  }
1689
1701
  }
1690
1702
 
1691
1703
  /* A component that sets its display still honours the hidden attribute on its root. */
1692
- [data-component~="ui-disclosure"][hidden][data-v-54a22a7e] {
1704
+ [data-component~="ui-disclosure"][hidden][data-v-af289043] {
1693
1705
  display: none;
1694
1706
  }
1695
1707
 
1696
- [data-component~="ui-editable"][data-v-8fe1c571] {
1708
+ [data-component~="ui-editable"][data-v-3b785d66] {
1697
1709
  display: flex;
1698
1710
  flex-wrap: wrap;
1699
1711
  align-items: center;
@@ -1704,13 +1716,13 @@ from {
1704
1716
 
1705
1717
  /* The value and the input share one grid cell with identical box metrics, so switching between
1706
1718
  * display and edit never changes the control's size or moves the text. */
1707
- .field[data-v-8fe1c571] {
1719
+ .field[data-v-3b785d66] {
1708
1720
  display: inline-grid;
1709
1721
  min-inline-size: 8rem;
1710
1722
  max-inline-size: 100%;
1711
1723
  }
1712
- .preview[data-v-8fe1c571],
1713
- .input[data-v-8fe1c571] {
1724
+ .preview[data-v-3b785d66],
1725
+ .input[data-v-3b785d66] {
1714
1726
  grid-area: 1 / 1;
1715
1727
  box-sizing: border-box;
1716
1728
  min-block-size: var(--ui-control-size-sm);
@@ -1726,7 +1738,7 @@ from {
1726
1738
  border-color var(--ui-motion-fast) var(--ui-motion-ease),
1727
1739
  box-shadow var(--ui-motion-fast) var(--ui-motion-ease);
1728
1740
  }
1729
- .preview[data-v-8fe1c571] {
1741
+ .preview[data-v-3b785d66] {
1730
1742
  display: inline-flex;
1731
1743
  gap: var(--ui-space-2);
1732
1744
  align-items: center;
@@ -1734,50 +1746,50 @@ from {
1734
1746
  text-align: start;
1735
1747
  cursor: pointer;
1736
1748
  }
1737
- .preview[data-v-8fe1c571]:hover:not(:disabled) {
1749
+ .preview[data-v-3b785d66]:hover:not(:disabled) {
1738
1750
  background: var(--ui-surface-muted);
1739
1751
  }
1740
- .preview[data-v-8fe1c571]:focus-visible {
1752
+ .preview[data-v-3b785d66]:focus-visible {
1741
1753
  outline: none;
1742
1754
  box-shadow: var(--ui-focus-halo);
1743
1755
  }
1744
- .hint[data-v-8fe1c571] {
1756
+ .hint[data-v-3b785d66] {
1745
1757
  color: var(--ui-text-secondary);
1746
1758
  font-size: var(--ui-font-size-sm);
1747
1759
  }
1748
1760
 
1749
1761
  /* Contained so it takes the value's width instead of its own default input width. */
1750
- .input[data-v-8fe1c571] {
1762
+ .input[data-v-3b785d66] {
1751
1763
  contain: inline-size;
1752
1764
  inline-size: 100%;
1753
1765
  min-inline-size: 0;
1754
1766
  visibility: hidden;
1755
1767
  background: var(--ui-control-surface, var(--ui-surface-elevated));
1756
1768
  }
1757
- .input[data-v-8fe1c571]:focus {
1769
+ .input[data-v-3b785d66]:focus {
1758
1770
  outline: none;
1759
1771
  border-color: var(--ui-control-focus, var(--ui-accent-solid));
1760
1772
  box-shadow:
1761
1773
  var(--ui-control-inset),
1762
1774
  var(--ui-control-focus-halo-shadow);
1763
1775
  }
1764
- .input[data-v-8fe1c571]::selection {
1776
+ .input[data-v-3b785d66]::selection {
1765
1777
  background: color-mix(in srgb, var(--ui-accent-solid) 20%, transparent);
1766
1778
  }
1767
- [data-component~="ui-editable"][data-ui-editable-state~="internalEdit"] .preview[data-v-8fe1c571] {
1779
+ [data-component~="ui-editable"][data-ui-editable-state~="internalEdit"] .preview[data-v-3b785d66] {
1768
1780
  visibility: hidden;
1769
1781
  }
1770
- [data-component~="ui-editable"][data-ui-editable-state~="internalEdit"] .input[data-v-8fe1c571] {
1782
+ [data-component~="ui-editable"][data-ui-editable-state~="internalEdit"] .input[data-v-3b785d66] {
1771
1783
  visibility: visible;
1772
1784
  }
1773
- .actions[data-v-8fe1c571] {
1785
+ .actions[data-v-3b785d66] {
1774
1786
  display: none;
1775
1787
  gap: var(--ui-space-1);
1776
1788
  }
1777
- [data-component~="ui-editable"][data-ui-editable-state~="internalEdit"] .actions[data-v-8fe1c571] {
1789
+ [data-component~="ui-editable"][data-ui-editable-state~="internalEdit"] .actions[data-v-3b785d66] {
1778
1790
  display: inline-flex;
1779
1791
  }
1780
- .actions button[data-v-8fe1c571] {
1792
+ .actions button[data-v-3b785d66] {
1781
1793
  min-block-size: var(--ui-control-size-sm);
1782
1794
  padding: 0 var(--ui-space-3);
1783
1795
  border: 1px solid var(--ui-border-strong);
@@ -1790,22 +1802,22 @@ from {
1790
1802
  font-size: var(--ui-font-size-sm);
1791
1803
  cursor: pointer;
1792
1804
  }
1793
- .actions .save[data-v-8fe1c571] {
1805
+ .actions .save[data-v-3b785d66] {
1794
1806
  border-color: var(--ui-accent-solid);
1795
1807
  background: var(--ui-accent-solid);
1796
1808
  color: var(--ui-text-on-accent);
1797
1809
  }
1798
- .actions button[data-v-8fe1c571]:focus-visible {
1810
+ .actions button[data-v-3b785d66]:focus-visible {
1799
1811
  outline: none;
1800
1812
  box-shadow: var(--ui-focus-halo);
1801
1813
  }
1802
- [data-component~="ui-editable"][data-ui-editable-state~="disabled"] .preview[data-v-8fe1c571] {
1803
- color: var(--ui-text-muted);
1814
+ [data-component~="ui-editable"][data-ui-editable-state~="disabled"] .preview[data-v-3b785d66] {
1815
+ color: var(--ui-disabled-text);
1804
1816
  cursor: not-allowed;
1805
1817
  }
1806
1818
 
1807
1819
  /* A component that sets its display still honours the hidden attribute on its root. */
1808
- [data-component~="ui-editable"][hidden][data-v-8fe1c571] {
1820
+ [data-component~="ui-editable"][hidden][data-v-3b785d66] {
1809
1821
  display: none;
1810
1822
  }
1811
1823
 
@@ -3147,7 +3159,7 @@ svg[data-v-c322b7ed-s] {
3147
3159
  display: none;
3148
3160
  }
3149
3161
 
3150
- [data-component~="ui-input"][data-v-e7c851a2] {
3162
+ [data-component~="ui-input"][data-v-08811f22] {
3151
3163
  box-sizing: border-box;
3152
3164
  display: inline-block;
3153
3165
  inline-size: 100%;
@@ -3171,21 +3183,21 @@ svg[data-v-c322b7ed-s] {
3171
3183
  }
3172
3184
 
3173
3185
  /* Tabbing into a field selects its text; tint that selection softly instead of the page highlight. */
3174
- [data-component~="ui-input"][data-v-e7c851a2]::selection {
3186
+ [data-component~="ui-input"][data-v-08811f22]::selection {
3175
3187
  background: color-mix(in srgb, var(--ui-accent-solid) 20%, transparent);
3176
3188
  color: inherit;
3177
3189
  }
3178
- [data-component~="ui-input"][data-v-e7c851a2]::placeholder {
3190
+ [data-component~="ui-input"][data-v-08811f22]::placeholder {
3179
3191
  color: var(--ui-control-placeholder, var(--ui-text-secondary));
3180
3192
  opacity: 1;
3181
3193
  }
3182
- [data-component~="ui-input"][data-v-e7c851a2]:hover:not(:focus):not(:disabled) {
3194
+ [data-component~="ui-input"][data-v-08811f22]:hover:not(:focus):not(:disabled) {
3183
3195
  border-color: var(
3184
3196
  --ui-input-border-hover,
3185
3197
  var(--ui-control-border-hover, var(--ui-text-secondary))
3186
3198
  );
3187
3199
  }
3188
- [data-component~="ui-input"][data-v-e7c851a2]:focus-visible {
3200
+ [data-component~="ui-input"][data-v-08811f22]:focus-visible {
3189
3201
  border-color: var(--ui-input-focus-border, var(--ui-control-focus, var(--ui-accent-solid)));
3190
3202
  outline: none;
3191
3203
  box-shadow: var(
@@ -3196,27 +3208,27 @@ svg[data-v-c322b7ed-s] {
3196
3208
  }
3197
3209
 
3198
3210
  /* The app's invalid flag, or the browser's own verdict once the user has left an invalid field. */
3199
- [data-component~="ui-input"][aria-invalid="true"][data-v-e7c851a2],
3200
- [data-component~="ui-input"][data-v-e7c851a2]:is(:user-invalid, [data-user-invalid]) {
3211
+ [data-component~="ui-input"][aria-invalid="true"][data-v-08811f22],
3212
+ [data-component~="ui-input"][data-v-08811f22]:is(:user-invalid, [data-user-invalid]) {
3201
3213
  border-color: var(--ui-input-invalid-border, var(--ui-danger-solid));
3202
3214
  }
3203
- [data-component~="ui-input"][data-v-e7c851a2]:is([aria-invalid="true"], :is(:user-invalid, [data-user-invalid])):focus-visible {
3215
+ [data-component~="ui-input"][data-v-08811f22]:is([aria-invalid="true"], :is(:user-invalid, [data-user-invalid])):focus-visible {
3204
3216
  box-shadow: var(
3205
3217
  --ui-input-invalid-focus-shadow,
3206
3218
  var(--ui-control-inset),
3207
3219
  0 0 0 3px color-mix(in srgb, var(--ui-danger-solid) 22%, transparent)
3208
3220
  );
3209
3221
  }
3210
- [data-component~="ui-input"][data-v-e7c851a2]:disabled {
3222
+ [data-component~="ui-input"][data-v-08811f22]:disabled {
3211
3223
  background: var(--ui-control-surface-disabled, var(--ui-surface-muted));
3212
- color: var(--ui-text-muted);
3224
+ color: var(--ui-disabled-text);
3213
3225
  box-shadow: none;
3214
3226
  cursor: not-allowed;
3215
3227
  }
3216
3228
 
3217
3229
  /* Forced colors drop box shadows, so the focus ring becomes an outline. */
3218
3230
  @media (forced-colors: active) {
3219
- [data-component~="ui-input"][data-v-e7c851a2]:focus-visible {
3231
+ [data-component~="ui-input"][data-v-08811f22]:focus-visible {
3220
3232
  outline: var(--ui-input-focus-outline, 2px solid Highlight);
3221
3233
  outline-offset: 1px;
3222
3234
  }
@@ -3226,7 +3238,7 @@ svg[data-v-c322b7ed-s] {
3226
3238
  * scroll vertically inside the field. Native inputs already center their single line. */
3227
3239
 
3228
3240
  /* A component that sets its display still honours the hidden attribute on its root. */
3229
- [data-component~="ui-input"][hidden][data-v-e7c851a2] {
3241
+ [data-component~="ui-input"][hidden][data-v-08811f22] {
3230
3242
  display: none;
3231
3243
  }
3232
3244
 
@@ -3853,7 +3865,7 @@ svg[data-v-c322b7ed-s] {
3853
3865
  }
3854
3866
  }
3855
3867
 
3856
- [data-component~="ui-radio"][data-v-f9c61d50] {
3868
+ [data-component~="ui-radio"][data-v-c4f88d99] {
3857
3869
  display: inline-flex;
3858
3870
  align-items: flex-start;
3859
3871
  gap: var(--ui-radio-gap, var(--ui-space-2));
@@ -3863,25 +3875,25 @@ svg[data-v-c322b7ed-s] {
3863
3875
  }
3864
3876
 
3865
3877
  /* The label, and under it an optional line saying what the choice means. */
3866
- .text[data-v-f9c61d50] {
3878
+ .text[data-v-c4f88d99] {
3867
3879
  display: flex;
3868
3880
  flex-direction: column;
3869
3881
  gap: var(--ui-space-1);
3870
3882
  min-inline-size: 0;
3871
3883
  }
3872
- .label[data-v-f9c61d50] {
3884
+ .label[data-v-c4f88d99] {
3873
3885
  min-inline-size: 0;
3874
3886
  line-height: var(--ui-line-height-md);
3875
3887
  }
3876
- .description[data-v-f9c61d50] {
3888
+ .description[data-v-c4f88d99] {
3877
3889
  color: var(--ui-text-secondary);
3878
3890
  font-size: var(--ui-font-size-sm);
3879
3891
  line-height: var(--ui-line-height);
3880
3892
  }
3881
- .description[data-v-f9c61d50]:empty {
3893
+ .description[data-v-c4f88d99]:empty {
3882
3894
  display: none;
3883
3895
  }
3884
- input[data-v-f9c61d50] {
3896
+ input[data-v-c4f88d99] {
3885
3897
  flex: 0 0 auto;
3886
3898
  inline-size: var(--ui-radio-size, 1.125rem);
3887
3899
  block-size: var(--ui-radio-size, 1.125rem);
@@ -3889,20 +3901,20 @@ input[data-v-f9c61d50] {
3889
3901
  accent-color: var(--ui-accent-solid);
3890
3902
  cursor: pointer;
3891
3903
  }
3892
- input[data-v-f9c61d50]:focus-visible {
3904
+ input[data-v-c4f88d99]:focus-visible {
3893
3905
  outline: 2px solid var(--ui-focus-ring, var(--ui-accent-solid));
3894
3906
  outline-offset: 2px;
3895
3907
  }
3896
- [data-component~="ui-radio"][data-ui-radio-state~="disabled"][data-v-f9c61d50] {
3897
- color: var(--ui-text-muted);
3908
+ [data-component~="ui-radio"][data-ui-radio-state~="disabled"][data-v-c4f88d99] {
3909
+ color: var(--ui-disabled-text);
3898
3910
  cursor: not-allowed;
3899
3911
  }
3900
- [data-component~="ui-radio"][data-ui-radio-state~="disabled"] input[data-v-f9c61d50] {
3912
+ [data-component~="ui-radio"][data-ui-radio-state~="disabled"] input[data-v-c4f88d99] {
3901
3913
  cursor: not-allowed;
3902
3914
  }
3903
3915
 
3904
3916
  /* A component that sets its display still honours the hidden attribute on its root. */
3905
- [data-component~="ui-radio"][hidden][data-v-f9c61d50] {
3917
+ [data-component~="ui-radio"][hidden][data-v-c4f88d99] {
3906
3918
  display: none;
3907
3919
  }
3908
3920
 
@@ -4356,7 +4368,7 @@ dialog[data-v-2ba71171] {
4356
4368
  display: none;
4357
4369
  }
4358
4370
 
4359
- [data-component~="ui-select"][data-v-f9be4ab9] {
4371
+ [data-component~="ui-select"][data-v-e15c964d] {
4360
4372
  box-sizing: border-box;
4361
4373
  display: inline-block;
4362
4374
  inline-size: 100%;
@@ -4380,7 +4392,7 @@ dialog[data-v-2ba71171] {
4380
4392
 
4381
4393
  /* The select draws its own chevron: the native caret cannot be inset or sized consistently.
4382
4394
  * The root stays a native <s-lect>, so the icon is a background image rather than an element. */
4383
- [data-component~="ui-select"][data-v-f9be4ab9] {
4395
+ [data-component~="ui-select"][data-v-e15c964d] {
4384
4396
  appearance: none;
4385
4397
  padding-inline-end: calc(var(--ui-space-3) + 1.5rem);
4386
4398
  background-image: var(
@@ -4391,10 +4403,10 @@ dialog[data-v-2ba71171] {
4391
4403
  background-position: right var(--ui-space-3) center;
4392
4404
  background-size: 1.125rem 1.125rem;
4393
4405
  }
4394
- [data-component~="ui-select"][data-v-f9be4ab9]:hover:not(:focus):not(:disabled) {
4406
+ [data-component~="ui-select"][data-v-e15c964d]:hover:not(:focus):not(:disabled) {
4395
4407
  border-color: var(--ui-control-border-hover, var(--ui-text-secondary));
4396
4408
  }
4397
- [data-component~="ui-select"][data-v-f9be4ab9]:focus-visible {
4409
+ [data-component~="ui-select"][data-v-e15c964d]:focus-visible {
4398
4410
  border-color: var(--ui-control-focus, var(--ui-accent-solid));
4399
4411
  outline: none;
4400
4412
  box-shadow: var(
@@ -4405,28 +4417,28 @@ dialog[data-v-2ba71171] {
4405
4417
  }
4406
4418
 
4407
4419
  /* The app's invalid flag, or the browser's own verdict once the user has left an invalid field. */
4408
- [data-component~="ui-select"][aria-invalid="true"][data-v-f9be4ab9],
4409
- [data-component~="ui-select"][data-v-f9be4ab9]:is(:user-invalid, [data-user-invalid]) {
4420
+ [data-component~="ui-select"][aria-invalid="true"][data-v-e15c964d],
4421
+ [data-component~="ui-select"][data-v-e15c964d]:is(:user-invalid, [data-user-invalid]) {
4410
4422
  border-color: var(--ui-danger-solid);
4411
4423
  }
4412
- [data-component~="ui-select"][data-v-f9be4ab9]:is([aria-invalid="true"], :is(:user-invalid, [data-user-invalid])):focus-visible {
4424
+ [data-component~="ui-select"][data-v-e15c964d]:is([aria-invalid="true"], :is(:user-invalid, [data-user-invalid])):focus-visible {
4413
4425
  box-shadow:
4414
4426
  var(--ui-control-inset),
4415
4427
  0 0 0 3px color-mix(in srgb, var(--ui-danger-solid) 22%, transparent);
4416
4428
  }
4417
- [data-component~="ui-select"][data-v-f9be4ab9]:disabled {
4429
+ [data-component~="ui-select"][data-v-e15c964d]:disabled {
4418
4430
  background-color: var(--ui-control-surface-disabled, var(--ui-surface-muted));
4419
- color: var(--ui-text-muted);
4431
+ color: var(--ui-disabled-text);
4420
4432
  box-shadow: none;
4421
4433
  cursor: not-allowed;
4422
4434
  }
4423
- [data-component~="ui-select"][size][data-v-f9be4ab9]:not([size="1"]) {
4435
+ [data-component~="ui-select"][size][data-v-e15c964d]:not([size="1"]) {
4424
4436
  min-block-size: 7rem;
4425
4437
  padding: var(--ui-space-2);
4426
4438
  }
4427
4439
 
4428
4440
  /* A component that sets its display still honours the hidden attribute on its root. */
4429
- [data-component~="ui-select"][hidden][data-v-f9be4ab9] {
4441
+ [data-component~="ui-select"][hidden][data-v-e15c964d] {
4430
4442
  display: none;
4431
4443
  }
4432
4444
 
@@ -4739,7 +4751,7 @@ to {
4739
4751
  display: none;
4740
4752
  }
4741
4753
 
4742
- [data-component~="ui-switch"][data-v-85cb3260] {
4754
+ [data-component~="ui-switch"][data-v-afb9ea1d] {
4743
4755
  display: inline-flex;
4744
4756
  align-items: flex-start;
4745
4757
  gap: var(--ui-switch-gap, var(--ui-space-2));
@@ -4749,25 +4761,25 @@ to {
4749
4761
  }
4750
4762
 
4751
4763
  /* The label, and under it an optional line saying what the choice means. */
4752
- .text[data-v-85cb3260] {
4764
+ .text[data-v-afb9ea1d] {
4753
4765
  display: flex;
4754
4766
  flex-direction: column;
4755
4767
  gap: var(--ui-space-1);
4756
4768
  min-inline-size: 0;
4757
4769
  }
4758
- .label[data-v-85cb3260] {
4770
+ .label[data-v-afb9ea1d] {
4759
4771
  min-inline-size: 0;
4760
4772
  line-height: var(--ui-line-height-md);
4761
4773
  }
4762
- .description[data-v-85cb3260] {
4774
+ .description[data-v-afb9ea1d] {
4763
4775
  color: var(--ui-text-secondary);
4764
4776
  font-size: var(--ui-font-size-sm);
4765
4777
  line-height: var(--ui-line-height);
4766
4778
  }
4767
- .description[data-v-85cb3260]:empty {
4779
+ .description[data-v-afb9ea1d]:empty {
4768
4780
  display: none;
4769
4781
  }
4770
- input[data-v-85cb3260] {
4782
+ input[data-v-afb9ea1d] {
4771
4783
  appearance: none;
4772
4784
  -webkit-appearance: none;
4773
4785
  position: relative;
@@ -4785,7 +4797,7 @@ input[data-v-85cb3260] {
4785
4797
  border-color var(--ui-motion-fast) var(--ui-motion-ease);
4786
4798
  margin: 0;
4787
4799
  }
4788
- input[data-v-85cb3260]::after {
4800
+ input[data-v-afb9ea1d]::after {
4789
4801
  content: "";
4790
4802
  position: absolute;
4791
4803
  top: 3px;
@@ -4797,35 +4809,35 @@ input[data-v-85cb3260]::after {
4797
4809
  box-shadow: var(--ui-shadow-xs);
4798
4810
  transition: transform var(--ui-motion-fast) var(--ui-motion-ease);
4799
4811
  }
4800
- input[data-v-85cb3260]:checked {
4812
+ input[data-v-afb9ea1d]:checked {
4801
4813
  background: var(--ui-accent-solid);
4802
4814
  border-color: var(--ui-accent-solid);
4803
4815
  }
4804
- input[data-v-85cb3260]:checked::after {
4816
+ input[data-v-afb9ea1d]:checked::after {
4805
4817
  transform: translateX(1rem);
4806
4818
  background: var(--ui-text-on-accent);
4807
4819
  }
4808
- input[data-v-85cb3260]:focus-visible {
4820
+ input[data-v-afb9ea1d]:focus-visible {
4809
4821
  outline: 2px solid var(--ui-focus-ring, var(--ui-accent-solid));
4810
4822
  outline-offset: 2px;
4811
4823
  }
4812
- [data-component~="ui-switch"][data-ui-switch-state~="disabled"][data-v-85cb3260] {
4813
- color: var(--ui-text-muted);
4824
+ [data-component~="ui-switch"][data-ui-switch-state~="disabled"][data-v-afb9ea1d] {
4825
+ color: var(--ui-disabled-text);
4814
4826
  cursor: not-allowed;
4815
4827
  }
4816
- [data-component~="ui-switch"][data-ui-switch-state~="disabled"] input[data-v-85cb3260] {
4828
+ [data-component~="ui-switch"][data-ui-switch-state~="disabled"] input[data-v-afb9ea1d] {
4817
4829
  border-color: var(--ui-border-default);
4818
4830
  background: var(--ui-control-surface-disabled, var(--ui-surface-muted));
4819
4831
  cursor: not-allowed;
4820
4832
  }
4821
4833
  @media (prefers-reduced-motion: reduce) {
4822
- input[data-v-85cb3260], input[data-v-85cb3260]::after {
4834
+ input[data-v-afb9ea1d], input[data-v-afb9ea1d]::after {
4823
4835
  transition: none;
4824
4836
  }
4825
4837
  }
4826
4838
 
4827
4839
  /* A component that sets its display still honours the hidden attribute on its root. */
4828
- [data-component~="ui-switch"][hidden][data-v-85cb3260] {
4840
+ [data-component~="ui-switch"][hidden][data-v-afb9ea1d] {
4829
4841
  display: none;
4830
4842
  }
4831
4843
 
@@ -5084,7 +5096,7 @@ input[data-v-85cb3260], input[data-v-85cb3260]::after {
5084
5096
  display: none;
5085
5097
  }
5086
5098
 
5087
- [data-component~="ui-textarea"][data-v-0352d397] {
5099
+ [data-component~="ui-textarea"][data-v-860b69d7] {
5088
5100
  box-sizing: border-box;
5089
5101
  display: inline-block;
5090
5102
  inline-size: 100%;
@@ -5108,18 +5120,18 @@ input[data-v-85cb3260], input[data-v-85cb3260]::after {
5108
5120
  }
5109
5121
 
5110
5122
  /* Tabbing into a field selects its text; tint that selection softly instead of the page highlight. */
5111
- [data-component~="ui-textarea"][data-v-0352d397]::selection {
5123
+ [data-component~="ui-textarea"][data-v-860b69d7]::selection {
5112
5124
  background: color-mix(in srgb, var(--ui-accent-solid) 20%, transparent);
5113
5125
  color: inherit;
5114
5126
  }
5115
- [data-component~="ui-textarea"][data-v-0352d397]::placeholder {
5127
+ [data-component~="ui-textarea"][data-v-860b69d7]::placeholder {
5116
5128
  color: var(--ui-control-placeholder, var(--ui-text-secondary));
5117
5129
  opacity: 1;
5118
5130
  }
5119
- [data-component~="ui-textarea"][data-v-0352d397]:hover:not(:focus):not(:disabled) {
5131
+ [data-component~="ui-textarea"][data-v-860b69d7]:hover:not(:focus):not(:disabled) {
5120
5132
  border-color: var(--ui-control-border-hover, var(--ui-text-secondary));
5121
5133
  }
5122
- [data-component~="ui-textarea"][data-v-0352d397]:focus-visible {
5134
+ [data-component~="ui-textarea"][data-v-860b69d7]:focus-visible {
5123
5135
  border-color: var(--ui-control-focus, var(--ui-accent-solid));
5124
5136
  outline: none;
5125
5137
  box-shadow: var(
@@ -5130,24 +5142,24 @@ input[data-v-85cb3260], input[data-v-85cb3260]::after {
5130
5142
  }
5131
5143
 
5132
5144
  /* The app's invalid flag, or the browser's own verdict once the user has left an invalid field. */
5133
- [data-component~="ui-textarea"][aria-invalid="true"][data-v-0352d397],
5134
- [data-component~="ui-textarea"][data-v-0352d397]:is(:user-invalid, [data-user-invalid]) {
5145
+ [data-component~="ui-textarea"][aria-invalid="true"][data-v-860b69d7],
5146
+ [data-component~="ui-textarea"][data-v-860b69d7]:is(:user-invalid, [data-user-invalid]) {
5135
5147
  border-color: var(--ui-danger-solid);
5136
5148
  }
5137
- [data-component~="ui-textarea"][data-v-0352d397]:is([aria-invalid="true"], :is(:user-invalid, [data-user-invalid])):focus-visible {
5149
+ [data-component~="ui-textarea"][data-v-860b69d7]:is([aria-invalid="true"], :is(:user-invalid, [data-user-invalid])):focus-visible {
5138
5150
  box-shadow:
5139
5151
  var(--ui-control-inset),
5140
5152
  0 0 0 3px color-mix(in srgb, var(--ui-danger-solid) 22%, transparent);
5141
5153
  }
5142
- [data-component~="ui-textarea"][data-v-0352d397]:disabled {
5154
+ [data-component~="ui-textarea"][data-v-860b69d7]:disabled {
5143
5155
  background: var(--ui-control-surface-disabled, var(--ui-surface-muted));
5144
- color: var(--ui-text-muted);
5156
+ color: var(--ui-disabled-text);
5145
5157
  box-shadow: none;
5146
5158
  cursor: not-allowed;
5147
5159
  }
5148
5160
 
5149
5161
  /* A component that sets its display still honours the hidden attribute on its root. */
5150
- [data-component~="ui-textarea"][hidden][data-v-0352d397] {
5162
+ [data-component~="ui-textarea"][hidden][data-v-860b69d7] {
5151
5163
  display: none;
5152
5164
  }
5153
5165