gbs-add-block 2.1.0 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/.gbs/skills/gbs-components/SKILL.md +190 -134
  2. package/.gbs/skills/gbs-components/references/install.md +25 -3
  3. package/.gbs/skills/gbs-components/references/styling.md +246 -207
  4. package/CHANGELOG.md +74 -0
  5. package/README.md +154 -23
  6. package/index.cjs +212 -3
  7. package/package.json +41 -10
  8. package/schema/passport-v1.schema.json +204 -0
  9. package/source/beta-components/accordion/passport.json +259 -0
  10. package/source/beta-components/accordion/styles.css +207 -208
  11. package/source/beta-components/alert/passport.json +250 -0
  12. package/source/beta-components/alert/styles.css +154 -155
  13. package/source/beta-components/avatar/passport.json +294 -0
  14. package/source/beta-components/avatar/styles.css +225 -226
  15. package/source/beta-components/badge/passport.json +332 -0
  16. package/source/beta-components/badge/styles.css +203 -204
  17. package/source/beta-components/breadcrumb/passport.json +243 -0
  18. package/source/beta-components/breadcrumb/styles.css +138 -140
  19. package/source/beta-components/button/passport.json +402 -0
  20. package/source/beta-components/button/passport.manual.json +31 -0
  21. package/source/beta-components/button/styles.css +232 -234
  22. package/source/beta-components/card/passport.json +337 -0
  23. package/source/beta-components/card/styles.css +230 -232
  24. package/source/beta-components/checkbox/passport.json +456 -0
  25. package/source/beta-components/checkbox/styles.css +211 -213
  26. package/source/beta-components/combobox/passport.json +456 -0
  27. package/source/beta-components/combobox/styles.css +419 -417
  28. package/source/beta-components/data-grid/agent/coerce.ts +368 -0
  29. package/source/beta-components/data-grid/agent/contract.ts +410 -0
  30. package/source/beta-components/data-grid/agent/dataset.ts +92 -0
  31. package/source/beta-components/data-grid/agent/engine.ts +470 -0
  32. package/source/beta-components/data-grid/agent/executors.ts +155 -0
  33. package/source/beta-components/data-grid/agent/index.ts +79 -0
  34. package/source/beta-components/data-grid/agent/intent.ts +324 -0
  35. package/source/beta-components/data-grid/agent/operations.ts +335 -0
  36. package/source/beta-components/data-grid/agent/validate.ts +630 -0
  37. package/source/beta-components/data-grid/agent/webmcp.ts +107 -0
  38. package/source/beta-components/data-grid/index.ts +14 -7
  39. package/source/beta-components/data-grid/passport.json +1051 -0
  40. package/source/beta-components/data-grid/passport.manual.json +255 -0
  41. package/source/beta-components/data-grid/react/AskGrid.tsx +164 -0
  42. package/source/beta-components/data-grid/react/DataGrid.tsx +39 -0
  43. package/source/beta-components/data-grid/styles.css +874 -716
  44. package/source/beta-components/date-picker/passport.json +407 -0
  45. package/source/beta-components/date-picker/styles.css +445 -446
  46. package/source/beta-components/dialog/passport.json +344 -0
  47. package/source/beta-components/dialog/styles.css +280 -279
  48. package/source/beta-components/file-uploader/passport.json +518 -0
  49. package/source/beta-components/file-uploader/styles.css +394 -396
  50. package/source/beta-components/input/passport.json +536 -0
  51. package/source/beta-components/input/styles.css +295 -297
  52. package/source/beta-components/menu/passport.json +322 -0
  53. package/source/beta-components/menu/styles.css +224 -223
  54. package/source/beta-components/modal/passport.json +289 -0
  55. package/source/beta-components/modal/styles.css +241 -240
  56. package/source/beta-components/number-input/passport.json +541 -0
  57. package/source/beta-components/number-input/styles.css +230 -231
  58. package/source/beta-components/popover/passport.json +238 -0
  59. package/source/beta-components/popover/styles.css +148 -147
  60. package/source/beta-components/progress/passport.json +270 -0
  61. package/source/beta-components/progress/styles.css +200 -201
  62. package/source/beta-components/radio-group/passport.json +477 -0
  63. package/source/beta-components/radio-group/styles.css +269 -270
  64. package/source/beta-components/shared/core/agent/adapter.ts +65 -0
  65. package/source/beta-components/shared/core/agent/history.ts +120 -0
  66. package/source/beta-components/shared/core/agent/index.ts +46 -0
  67. package/source/beta-components/shared/core/agent/numbers.ts +217 -0
  68. package/source/beta-components/shared/core/agent/schema.ts +180 -0
  69. package/source/beta-components/shared/core/agent/types.ts +169 -0
  70. package/source/beta-components/shared/core/agent/webmcp.ts +328 -0
  71. package/source/beta-components/shared/index.ts +9 -0
  72. package/source/beta-components/shared/react/GramproAIProvider.tsx +50 -0
  73. package/source/beta-components/shared/react/useAskAgent.ts +217 -0
  74. package/source/beta-components/shared/styles.css +79 -0
  75. package/source/beta-components/shared/version.json +4 -4
  76. package/source/beta-components/shared/version.ts +6 -6
  77. package/source/beta-components/skeleton/passport.json +251 -0
  78. package/source/beta-components/skeleton/styles.css +185 -187
  79. package/source/beta-components/spinner/passport.json +245 -0
  80. package/source/beta-components/spinner/styles.css +173 -174
  81. package/source/beta-components/switch/passport.json +421 -0
  82. package/source/beta-components/switch/styles.css +227 -229
  83. package/source/beta-components/tabs/passport.json +315 -0
  84. package/source/beta-components/tabs/styles.css +263 -264
  85. package/source/beta-components/textarea/passport.json +382 -0
  86. package/source/beta-components/textarea/styles.css +158 -160
  87. package/source/beta-components/toaster/passport.json +221 -0
  88. package/source/beta-components/toaster/styles.css +282 -282
  89. package/source/beta-components/tooltip/passport.json +170 -0
  90. package/source/beta-components/tooltip/styles.css +71 -73
  91. package/tools/env.cjs +61 -0
  92. package/tools/passport/cli.cjs +79 -0
  93. package/tools/passport/extract.cjs +493 -0
  94. package/tools/passport/index.cjs +185 -0
  95. package/tools/passport/merge.cjs +131 -0
  96. package/tools/passport/policy.cjs +65 -0
  97. package/tools/passport/validate.cjs +277 -0
  98. package/tools/ts-require.cjs +79 -0
  99. package/source/beta-components/accordion/__tests__/core.test.ts +0 -58
  100. package/source/beta-components/alert/__tests__/core.test.ts +0 -17
  101. package/source/beta-components/avatar/__tests__/core.test.ts +0 -88
  102. package/source/beta-components/badge/__tests__/core.test.ts +0 -46
  103. package/source/beta-components/breadcrumb/__tests__/core.test.ts +0 -58
  104. package/source/beta-components/button/__tests__/core.test.ts +0 -31
  105. package/source/beta-components/card/__tests__/core.test.ts +0 -57
  106. package/source/beta-components/checkbox/__tests__/core.test.ts +0 -40
  107. package/source/beta-components/combobox/__tests__/core.test.ts +0 -134
  108. package/source/beta-components/data-grid/__tests__/core.test.ts +0 -356
  109. package/source/beta-components/data-grid/__tests__/export.test.ts +0 -70
  110. package/source/beta-components/data-grid/__tests__/pdf.test.ts +0 -209
  111. package/source/beta-components/date-picker/__tests__/core.test.ts +0 -273
  112. package/source/beta-components/dialog/__tests__/core.test.ts +0 -86
  113. package/source/beta-components/file-uploader/__tests__/core.test.ts +0 -395
  114. package/source/beta-components/input/__tests__/core.test.ts +0 -75
  115. package/source/beta-components/menu/__tests__/core.test.ts +0 -120
  116. package/source/beta-components/modal/__tests__/core.test.ts +0 -55
  117. package/source/beta-components/number-input/__tests__/core.test.ts +0 -151
  118. package/source/beta-components/progress/__tests__/core.test.ts +0 -56
  119. package/source/beta-components/radio-group/__tests__/core.test.ts +0 -64
  120. package/source/beta-components/shared/__tests__/boundaries.test.ts +0 -95
  121. package/source/beta-components/shared/__tests__/core.test.ts +0 -55
  122. package/source/beta-components/shared/__tests__/position.test.ts +0 -143
  123. package/source/beta-components/skeleton/__tests__/core.test.ts +0 -41
  124. package/source/beta-components/spinner/__tests__/core.test.ts +0 -48
  125. package/source/beta-components/switch/__tests__/core.test.ts +0 -64
  126. package/source/beta-components/tabs/__tests__/core.test.ts +0 -51
  127. package/source/beta-components/textarea/__tests__/core.test.ts +0 -38
  128. package/source/beta-components/toaster/__tests__/core.test.ts +0 -256
  129. package/source/beta-components/tooltip/__tests__/core.test.ts +0 -42
@@ -1,231 +1,230 @@
1
- /*
2
- * NumberInput styles.
3
- *
4
- * The field is a text input, so it looks and sizes exactly like the Input
5
- * component; the spinner is two buttons the stylesheet owns rather than the
6
- * browser's, which cannot be styled. Tokens read the shared --gbs-* variables
7
- * when they are set on an ancestor (set them on :root to theme every
8
- * component at once). Rules live in the `gbs` layer. Declare where that sits
9
- * in your global CSS — e.g. `@layer reset, gbs, app, utilities;` — and
10
- * anything in a later layer, Tailwind utilities included, overrides them.
11
- */
12
-
13
- @layer gbs {
14
- .nm-root {
15
- --nm-fg: var(--gbs-fg, var(--dg-fg, light-dark(#18181b, #f4f4f5)));
16
- --nm-muted: var(--gbs-muted, var(--dg-muted, light-dark(#71717a, #a1a1aa)));
17
- --nm-border: var(--gbs-border, var(--dg-border, light-dark(#e4e4e7, #27272a)));
18
- --nm-input-bg: var(--gbs-input-bg, var(--dg-input-bg, light-dark(#ffffff, #121216)));
19
- --nm-readonly-bg: var(--gbs-readonly-bg, light-dark(#fafafa, #0e0e12));
20
- --nm-hover: var(--gbs-hover, var(--dg-hover, light-dark(#f4f4f5, #1f1f23)));
21
- --nm-accent: var(--gbs-accent, var(--dg-accent, light-dark(#2563eb, #60a5fa)));
22
- --nm-focus: var(--gbs-focus, var(--dg-focus, light-dark(#2563eb, #60a5fa)));
23
- --nm-danger: var(--gbs-danger, var(--dg-danger, light-dark(#dc2626, #f87171)));
24
- --nm-radius: var(--gbs-radius, var(--dg-radius, 8px));
25
- --nm-font-size: var(--gbs-font-size, var(--dg-font-size, 13px));
26
- --nm-height: 36px;
27
- --nm-px: 10px;
28
-
29
- color-scheme: inherit;
30
- display: flex;
31
- flex-direction: column;
32
- gap: 4px;
33
- min-width: 0;
34
- font-size: var(--nm-font-size);
35
- line-height: 1.4;
36
- color: var(--nm-fg);
37
- }
38
-
39
- :where(.dark, [data-theme="dark"]) .nm-root {
40
- color-scheme: dark;
41
- }
42
- :where(.light, [data-theme="light"]) .nm-root {
43
- color-scheme: light;
44
- }
45
-
46
- :where(.nm-root) *,
47
- :where(.nm-root) *::before,
48
- :where(.nm-root) *::after {
49
- box-sizing: border-box;
50
- }
51
-
52
- .nm-root[data-size="sm"] {
53
- --nm-height: 30px;
54
- --nm-px: 8px;
55
- --nm-font-size: 12px;
56
- }
57
- .nm-root[data-size="lg"] {
58
- --nm-height: 44px;
59
- --nm-px: 12px;
60
- --nm-font-size: 14px;
61
- }
62
-
63
- .nm-label {
64
- font-weight: 500;
65
- }
66
- .nm-label[data-required]::after {
67
- content: " *";
68
- color: var(--nm-danger);
69
- }
70
-
71
- /* -------------------------------------------------------------- control */
72
-
73
- .nm-control {
74
- display: flex;
75
- align-items: stretch;
76
- gap: 6px;
77
- min-width: 0;
78
- height: var(--nm-height);
79
- padding-inline-start: var(--nm-px);
80
- border: 1px solid var(--nm-border);
81
- border-radius: var(--nm-radius);
82
- background: var(--nm-input-bg);
83
- transition:
84
- border-color 120ms ease,
85
- box-shadow 120ms ease;
86
- }
87
- .nm-control:hover:not([data-disabled]) {
88
- border-color: color-mix(in oklab, var(--nm-border) 60%, var(--nm-fg));
89
- }
90
- .nm-control:has(.nm-input:focus-visible) {
91
- border-color: var(--nm-focus);
92
- box-shadow: 0 0 0 1px var(--nm-focus);
93
- }
94
- .nm-control[data-invalid] {
95
- border-color: var(--nm-danger);
96
- }
97
- .nm-control[data-invalid]:has(.nm-input:focus-visible) {
98
- box-shadow: 0 0 0 1px var(--nm-danger);
99
- }
100
- .nm-control[data-disabled] {
101
- opacity: 0.6;
102
- cursor: not-allowed;
103
- }
104
- .nm-control[data-readonly] {
105
- background: var(--nm-readonly-bg);
106
- }
107
-
108
- .nm-input {
109
- flex: 1 1 auto;
110
- min-width: 0;
111
- padding: 0;
112
- padding-inline-end: var(--nm-px);
113
- border: 0;
114
- background: none;
115
- color: inherit;
116
- font: inherit;
117
- /* Figures of the same width, so a column of amounts lines up and the
118
- number does not jitter as it is typed. */
119
- font-variant-numeric: tabular-nums;
120
- outline: none;
121
- }
122
- .nm-input::placeholder {
123
- color: var(--nm-muted);
124
- }
125
- .nm-input:disabled {
126
- cursor: not-allowed;
127
- }
128
-
129
- .nm-adornment {
130
- display: inline-flex;
131
- flex: none;
132
- align-items: center;
133
- color: var(--nm-muted);
134
- white-space: nowrap;
135
- }
136
- .nm-adornment[data-side="trailing"] {
137
- padding-inline-end: 2px;
138
- }
139
-
140
- .nm-icon-button {
141
- display: inline-flex;
142
- flex: none;
143
- align-self: center;
144
- align-items: center;
145
- justify-content: center;
146
- width: 20px;
147
- height: 20px;
148
- padding: 0;
149
- border: 0;
150
- border-radius: 4px;
151
- background: none;
152
- color: var(--nm-muted);
153
- cursor: pointer;
154
- }
155
- .nm-icon-button:hover {
156
- background: var(--nm-hover);
157
- color: var(--nm-fg);
158
- }
159
-
160
- /* -------------------------------------------------------------- stepper */
161
-
162
- .nm-stepper {
163
- display: flex;
164
- flex: none;
165
- flex-direction: column;
166
- width: 22px;
167
- border-inline-start: 1px solid var(--nm-border);
168
- }
169
-
170
- .nm-step {
171
- display: flex;
172
- flex: 1 1 50%;
173
- align-items: center;
174
- justify-content: center;
175
- min-height: 0;
176
- padding: 0;
177
- border: 0;
178
- background: none;
179
- color: var(--nm-muted);
180
- cursor: pointer;
181
- /* The buttons repeat while held, so the browser must not read the hold as
182
- a scroll gesture or a text selection. */
183
- touch-action: none;
184
- user-select: none;
185
- }
186
- .nm-step:first-child {
187
- border-start-end-radius: calc(var(--nm-radius) - 1px);
188
- border-block-end: 1px solid var(--nm-border);
189
- }
190
- .nm-step:last-child {
191
- border-end-end-radius: calc(var(--nm-radius) - 1px);
192
- }
193
- .nm-step:hover:not(:disabled) {
194
- background: var(--nm-hover);
195
- color: var(--nm-fg);
196
- }
197
- .nm-step:active:not(:disabled) {
198
- background: color-mix(in oklab, var(--nm-hover) 70%, var(--nm-accent));
199
- }
200
- .nm-step:disabled {
201
- opacity: 0.4;
202
- cursor: not-allowed;
203
- }
204
-
205
- /* ----------------------------------------------------------------- text */
206
-
207
- .nm-description {
208
- color: var(--nm-muted);
209
- text-wrap: pretty;
210
- }
211
- .nm-error {
212
- color: var(--nm-danger);
213
- text-wrap: pretty;
214
- }
215
-
216
- @media (prefers-reduced-motion: reduce) {
217
- .nm-control {
218
- transition: none;
219
- }
220
- }
221
-
222
- @media (forced-colors: active) {
223
- .nm-control {
224
- border: 1px solid CanvasText;
225
- }
226
- .nm-stepper,
227
- .nm-step:first-child {
228
- border-color: CanvasText;
229
- }
230
- }
231
- }
1
+ /*
2
+ * NumberInput styles.
3
+ *
4
+ * The field is a text input, so it looks and sizes exactly like the Input
5
+ * component; the spinner is two buttons the stylesheet owns rather than the
6
+ * browser's, which cannot be styled. Tokens read the shared --gbs-* variables
7
+ * when they are set on an ancestor (set them on :root to theme every component
8
+ * at once). Rules are unlayered: they beat a framework reset on specificity,
9
+ * and lose to anything you pass through `className`. With Tailwind v4, import
10
+ * this file after the framework and inside its components layer - see the
11
+ * README.
12
+ */
13
+
14
+ .nm-root {
15
+ --nm-fg: var(--gbs-fg, var(--dg-fg, light-dark(#18181b, #f4f4f5)));
16
+ --nm-muted: var(--gbs-muted, var(--dg-muted, light-dark(#71717a, #a1a1aa)));
17
+ --nm-border: var(--gbs-border, var(--dg-border, light-dark(#e4e4e7, #27272a)));
18
+ --nm-input-bg: var(--gbs-input-bg, var(--dg-input-bg, light-dark(#ffffff, #121216)));
19
+ --nm-readonly-bg: var(--gbs-readonly-bg, light-dark(#fafafa, #0e0e12));
20
+ --nm-hover: var(--gbs-hover, var(--dg-hover, light-dark(#f4f4f5, #1f1f23)));
21
+ --nm-accent: var(--gbs-accent, var(--dg-accent, light-dark(#2563eb, #60a5fa)));
22
+ --nm-focus: var(--gbs-focus, var(--dg-focus, light-dark(#2563eb, #60a5fa)));
23
+ --nm-danger: var(--gbs-danger, var(--dg-danger, light-dark(#dc2626, #f87171)));
24
+ --nm-radius: var(--gbs-radius, var(--dg-radius, 8px));
25
+ --nm-font-size: var(--gbs-font-size, var(--dg-font-size, 13px));
26
+ --nm-height: 36px;
27
+ --nm-px: 10px;
28
+
29
+ color-scheme: inherit;
30
+ display: flex;
31
+ flex-direction: column;
32
+ gap: 4px;
33
+ min-width: 0;
34
+ font-size: var(--nm-font-size);
35
+ line-height: 1.4;
36
+ color: var(--nm-fg);
37
+ }
38
+
39
+ :where(.dark, [data-theme="dark"]) .nm-root {
40
+ color-scheme: dark;
41
+ }
42
+ :where(.light, [data-theme="light"]) .nm-root {
43
+ color-scheme: light;
44
+ }
45
+
46
+ :where(.nm-root) *,
47
+ :where(.nm-root) *::before,
48
+ :where(.nm-root) *::after {
49
+ box-sizing: border-box;
50
+ }
51
+
52
+ .nm-root[data-size="sm"] {
53
+ --nm-height: 30px;
54
+ --nm-px: 8px;
55
+ --nm-font-size: 12px;
56
+ }
57
+ .nm-root[data-size="lg"] {
58
+ --nm-height: 44px;
59
+ --nm-px: 12px;
60
+ --nm-font-size: 14px;
61
+ }
62
+
63
+ .nm-label {
64
+ font-weight: 500;
65
+ }
66
+ .nm-label[data-required]::after {
67
+ content: " *";
68
+ color: var(--nm-danger);
69
+ }
70
+
71
+ /* -------------------------------------------------------------- control */
72
+
73
+ .nm-control {
74
+ display: flex;
75
+ align-items: stretch;
76
+ gap: 6px;
77
+ min-width: 0;
78
+ height: var(--nm-height);
79
+ padding-inline-start: var(--nm-px);
80
+ border: 1px solid var(--nm-border);
81
+ border-radius: var(--nm-radius);
82
+ background: var(--nm-input-bg);
83
+ transition:
84
+ border-color 120ms ease,
85
+ box-shadow 120ms ease;
86
+ }
87
+ .nm-control:hover:not([data-disabled]) {
88
+ border-color: color-mix(in oklab, var(--nm-border) 60%, var(--nm-fg));
89
+ }
90
+ .nm-control:has(.nm-input:focus-visible) {
91
+ border-color: var(--nm-focus);
92
+ box-shadow: 0 0 0 1px var(--nm-focus);
93
+ }
94
+ .nm-control[data-invalid] {
95
+ border-color: var(--nm-danger);
96
+ }
97
+ .nm-control[data-invalid]:has(.nm-input:focus-visible) {
98
+ box-shadow: 0 0 0 1px var(--nm-danger);
99
+ }
100
+ .nm-control[data-disabled] {
101
+ opacity: 0.6;
102
+ cursor: not-allowed;
103
+ }
104
+ .nm-control[data-readonly] {
105
+ background: var(--nm-readonly-bg);
106
+ }
107
+
108
+ .nm-input {
109
+ flex: 1 1 auto;
110
+ min-width: 0;
111
+ padding: 0;
112
+ padding-inline-end: var(--nm-px);
113
+ border: 0;
114
+ background: none;
115
+ color: inherit;
116
+ font: inherit;
117
+ /* Figures of the same width, so a column of amounts lines up and the
118
+ number does not jitter as it is typed. */
119
+ font-variant-numeric: tabular-nums;
120
+ outline: none;
121
+ }
122
+ .nm-input::placeholder {
123
+ color: var(--nm-muted);
124
+ }
125
+ .nm-input:disabled {
126
+ cursor: not-allowed;
127
+ }
128
+
129
+ .nm-adornment {
130
+ display: inline-flex;
131
+ flex: none;
132
+ align-items: center;
133
+ color: var(--nm-muted);
134
+ white-space: nowrap;
135
+ }
136
+ .nm-adornment[data-side="trailing"] {
137
+ padding-inline-end: 2px;
138
+ }
139
+
140
+ .nm-icon-button {
141
+ display: inline-flex;
142
+ flex: none;
143
+ align-self: center;
144
+ align-items: center;
145
+ justify-content: center;
146
+ width: 20px;
147
+ height: 20px;
148
+ padding: 0;
149
+ border: 0;
150
+ border-radius: 4px;
151
+ background: none;
152
+ color: var(--nm-muted);
153
+ cursor: pointer;
154
+ }
155
+ .nm-icon-button:hover {
156
+ background: var(--nm-hover);
157
+ color: var(--nm-fg);
158
+ }
159
+
160
+ /* -------------------------------------------------------------- stepper */
161
+
162
+ .nm-stepper {
163
+ display: flex;
164
+ flex: none;
165
+ flex-direction: column;
166
+ width: 22px;
167
+ border-inline-start: 1px solid var(--nm-border);
168
+ }
169
+
170
+ .nm-step {
171
+ display: flex;
172
+ flex: 1 1 50%;
173
+ align-items: center;
174
+ justify-content: center;
175
+ min-height: 0;
176
+ padding: 0;
177
+ border: 0;
178
+ background: none;
179
+ color: var(--nm-muted);
180
+ cursor: pointer;
181
+ /* The buttons repeat while held, so the browser must not read the hold as
182
+ a scroll gesture or a text selection. */
183
+ touch-action: none;
184
+ user-select: none;
185
+ }
186
+ .nm-step:first-child {
187
+ border-start-end-radius: calc(var(--nm-radius) - 1px);
188
+ border-block-end: 1px solid var(--nm-border);
189
+ }
190
+ .nm-step:last-child {
191
+ border-end-end-radius: calc(var(--nm-radius) - 1px);
192
+ }
193
+ .nm-step:hover:not(:disabled) {
194
+ background: var(--nm-hover);
195
+ color: var(--nm-fg);
196
+ }
197
+ .nm-step:active:not(:disabled) {
198
+ background: color-mix(in oklab, var(--nm-hover) 70%, var(--nm-accent));
199
+ }
200
+ .nm-step:disabled {
201
+ opacity: 0.4;
202
+ cursor: not-allowed;
203
+ }
204
+
205
+ /* ----------------------------------------------------------------- text */
206
+
207
+ .nm-description {
208
+ color: var(--nm-muted);
209
+ text-wrap: pretty;
210
+ }
211
+ .nm-error {
212
+ color: var(--nm-danger);
213
+ text-wrap: pretty;
214
+ }
215
+
216
+ @media (prefers-reduced-motion: reduce) {
217
+ .nm-control {
218
+ transition: none;
219
+ }
220
+ }
221
+
222
+ @media (forced-colors: active) {
223
+ .nm-control {
224
+ border: 1px solid CanvasText;
225
+ }
226
+ .nm-stepper,
227
+ .nm-step:first-child {
228
+ border-color: CanvasText;
229
+ }
230
+ }