@usgb/forms 0.1.0 → 1.0.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 (61) hide show
  1. package/README.md +256 -71
  2. package/dist/forms-manifest.json +249 -0
  3. package/dist/index.js +1032 -31
  4. package/dist/src/contract/collectContext.d.ts +9 -0
  5. package/dist/src/contract/collectContext.d.ts.map +1 -0
  6. package/dist/src/contract/createStubAdapter.d.ts +9 -0
  7. package/dist/src/contract/createStubAdapter.d.ts.map +1 -0
  8. package/dist/src/contract/types.d.ts +90 -0
  9. package/dist/src/contract/types.d.ts.map +1 -0
  10. package/dist/src/definitions/consents.d.ts +37 -0
  11. package/dist/src/definitions/consents.d.ts.map +1 -0
  12. package/dist/src/definitions/fields.d.ts +19 -0
  13. package/dist/src/definitions/fields.d.ts.map +1 -0
  14. package/dist/src/definitions/index.d.ts +7 -0
  15. package/dist/src/definitions/index.d.ts.map +1 -0
  16. package/dist/src/definitions/manifest.d.ts +8 -0
  17. package/dist/src/definitions/manifest.d.ts.map +1 -0
  18. package/dist/src/definitions/types.d.ts +77 -0
  19. package/dist/src/definitions/types.d.ts.map +1 -0
  20. package/dist/src/form/FormShell.d.ts +10 -0
  21. package/dist/src/form/FormShell.d.ts.map +1 -0
  22. package/dist/src/form/RegisteredTextField.d.ts +14 -0
  23. package/dist/src/form/RegisteredTextField.d.ts.map +1 -0
  24. package/dist/src/form/UsgbForm.d.ts +25 -0
  25. package/dist/src/form/UsgbForm.d.ts.map +1 -0
  26. package/dist/src/form/chunkFields.d.ts +17 -0
  27. package/dist/src/form/chunkFields.d.ts.map +1 -0
  28. package/dist/src/form/kinds/LeadKindForm.d.ts +4 -0
  29. package/dist/src/form/kinds/LeadKindForm.d.ts.map +1 -0
  30. package/dist/src/form/kinds/NewsletterKindForm.d.ts +4 -0
  31. package/dist/src/form/kinds/NewsletterKindForm.d.ts.map +1 -0
  32. package/dist/src/form/kinds/index.d.ts +6 -0
  33. package/dist/src/form/kinds/index.d.ts.map +1 -0
  34. package/dist/src/form/kinds/types.d.ts +11 -0
  35. package/dist/src/form/kinds/types.d.ts.map +1 -0
  36. package/dist/src/form/useUsgbFormSession.d.ts +41 -0
  37. package/dist/src/form/useUsgbFormSession.d.ts.map +1 -0
  38. package/dist/src/index.d.ts +14 -0
  39. package/dist/src/index.d.ts.map +1 -0
  40. package/dist/src/ui/Button.d.ts +7 -0
  41. package/dist/src/ui/Button.d.ts.map +1 -0
  42. package/dist/src/ui/ConsentField.d.ts +9 -0
  43. package/dist/src/ui/ConsentField.d.ts.map +1 -0
  44. package/dist/src/ui/FieldError.d.ts +8 -0
  45. package/dist/src/ui/FieldError.d.ts.map +1 -0
  46. package/dist/src/ui/FieldLabel.d.ts +9 -0
  47. package/dist/src/ui/FieldLabel.d.ts.map +1 -0
  48. package/dist/src/ui/TextField.d.ts +19 -0
  49. package/dist/src/ui/TextField.d.ts.map +1 -0
  50. package/dist/src/ui/icons.d.ts +4 -0
  51. package/dist/src/ui/icons.d.ts.map +1 -0
  52. package/dist/usgb-forms.1.0.0.js +44 -0
  53. package/dist/usgb-forms.css +574 -0
  54. package/dist/usgb-forms.js +44 -0
  55. package/forms-manifest.json +249 -0
  56. package/package.json +51 -46
  57. package/dist/index.cjs +0 -64
  58. package/dist/index.cjs.map +0 -1
  59. package/dist/index.d.cts +0 -15
  60. package/dist/index.d.ts +0 -15
  61. package/dist/index.js.map +0 -1
@@ -0,0 +1,574 @@
1
+ /* Ported PWA form design tokens — used subset from magento-frontend
2
+ styles/variables.css. Hosts override semantic --usgb-* vars or classes
3
+ on .usgb-form (see README). */
4
+
5
+ .usgb-form {
6
+ --usgb-primary: #ffffff;
7
+ --usgb-secondary: #000000;
8
+ --usgb-text-base: #001f3d;
9
+ --usgb-grey-1: #4d4d4d;
10
+ --usgb-grey-2: #7d7d7d;
11
+ --usgb-grey-3: #aba9a9;
12
+ --usgb-grey-4: #d9d9d9;
13
+ --usgb-grey-6: #f2f2f2;
14
+ --usgb-grey-9: #828282;
15
+ /* Figma calls this "Gray 4"; renamed to avoid colliding with
16
+ "Greyscale/Grey 4" (--usgb-grey-4), which is a different value. */
17
+ --usgb-disabled: #bdbdbd;
18
+ --usgb-gold-1: #6d4b0f;
19
+ --usgb-gold-2: #f4e08e;
20
+ --usgb-alert-danger: #e61b1b;
21
+ --usgb-blue-1: #001f3d;
22
+ --usgb-hover: #5caad6;
23
+ --usgb-sidebar-field-text: #333333;
24
+ --usgb-sidebar-link: #275582;
25
+ --usgb-font-primary: 'Montserrat', -apple-system, BlinkMacSystemFont,
26
+ 'Helvetica Neue', Helvetica, sans-serif;
27
+ --usgb-font-secondary: 'Kameron', Georgia, 'Times New Roman', serif;
28
+ --usgb-outline-focused: 2px solid var(--usgb-gold-1);
29
+
30
+ --usgb-form-surface: transparent;
31
+ --usgb-form-content: var(--usgb-text-base);
32
+ --usgb-form-muted: var(--usgb-grey-1);
33
+ --usgb-field-label: var(--usgb-grey-1);
34
+ --usgb-field-background: var(--usgb-primary);
35
+ --usgb-field-border: var(--usgb-secondary);
36
+ --usgb-field-text: var(--usgb-secondary);
37
+ --usgb-field-placeholder: var(--usgb-grey-3);
38
+ --usgb-link: var(--usgb-blue-1);
39
+ --usgb-link-hover: var(--usgb-hover);
40
+ --usgb-checkbox-background: var(--usgb-primary);
41
+ --usgb-checkbox-border: var(--usgb-secondary);
42
+ --usgb-checkbox-mark: var(--usgb-gold-1);
43
+ --usgb-button-background: var(--usgb-blue-1);
44
+ --usgb-button-text: var(--usgb-primary);
45
+ --usgb-button-hover-background: var(--usgb-hover);
46
+ --usgb-button-disabled-background: var(--usgb-disabled);
47
+ --usgb-button-disabled-text: var(--usgb-primary);
48
+ --usgb-newsletter-underline: var(--usgb-blue-1);
49
+
50
+ --usgb-group-gap: 1.5rem;
51
+ --usgb-grid-gap: 1rem;
52
+ --usgb-grid-margin-bottom: 0;
53
+ --usgb-heading-font-size: 1.75rem;
54
+ --usgb-heading-font-weight: 700;
55
+ --usgb-heading-line-height: 1.2;
56
+ --usgb-heading-letter-spacing: 0;
57
+ --usgb-heading-transform: none;
58
+ --usgb-heading-margin: 0 0 0.75rem;
59
+ --usgb-body-font-size: 0.875rem;
60
+ --usgb-body-line-height: 1.5rem;
61
+ --usgb-body-margin: 0 0 1.25rem;
62
+ --usgb-label-margin-bottom: 0.375rem;
63
+ --usgb-label-font-size: 0.75rem;
64
+ --usgb-label-font-weight: 700;
65
+ --usgb-label-letter-spacing: 0.5px;
66
+ --usgb-label-line-height: 0.875rem;
67
+ --usgb-label-transform: uppercase;
68
+ --usgb-field-padding: 0.875rem 0.9375rem;
69
+ --usgb-field-font-size: 0.75rem;
70
+ --usgb-field-font-weight: 500;
71
+ --usgb-field-line-height: 1.125rem;
72
+ --usgb-field-letter-spacing: -0.25px;
73
+ --usgb-field-margin-bottom: 0.375rem;
74
+ --usgb-field-radius: 0;
75
+ --usgb-field-min-height: auto;
76
+ --usgb-field-transform: none;
77
+ --usgb-placeholder-transform: none;
78
+ --usgb-error-font-size: 0.75rem;
79
+ --usgb-error-line-height: 1.125rem;
80
+ --usgb-error-margin-top: 0;
81
+ --usgb-consent-gap: 0;
82
+ --usgb-consent-margin-bottom: 0.75rem;
83
+ --usgb-checkbox-size: 1.25rem;
84
+ --usgb-checkbox-margin: 0.125rem 0.625rem 0 0;
85
+ --usgb-consent-font-size: 0.875rem;
86
+ --usgb-consent-font-weight: 400;
87
+ --usgb-consent-line-height: 1.5rem;
88
+ --usgb-consent-color: var(--usgb-form-content);
89
+ --usgb-consent-transform: none;
90
+ --usgb-button-padding: 0.625rem 1.875rem;
91
+ --usgb-button-min-height: 2.1875rem;
92
+ --usgb-button-radius: 3.125rem;
93
+ --usgb-button-font-size: 0.75rem;
94
+ --usgb-button-font-weight: 700;
95
+ --usgb-button-line-height: 0.875rem;
96
+ --usgb-button-letter-spacing: 0.5px;
97
+ --usgb-button-width: 100%;
98
+
99
+ box-sizing: border-box;
100
+ font-family: var(--usgb-font-primary);
101
+ color: var(--usgb-form-content);
102
+ background: var(--usgb-form-surface);
103
+ width: 100%;
104
+
105
+ /* Hosts drop this form into sidebars and multi-column blocks, so its own
106
+ width — not the viewport's — decides how many fields fit per row. */
107
+ container: usgb-form / inline-size;
108
+ }
109
+
110
+ .usgb-form *,
111
+ .usgb-form *::before,
112
+ .usgb-form *::after {
113
+ box-sizing: border-box;
114
+ }
115
+
116
+ /* Layout */
117
+
118
+ .usgb-form .usgb-form-group {
119
+ margin-bottom: var(--usgb-group-gap);
120
+ }
121
+
122
+ .usgb-form .usgb-form-grid {
123
+ display: grid;
124
+ grid-template-columns: 1fr;
125
+ gap: var(--usgb-grid-gap);
126
+ margin-bottom: var(--usgb-grid-margin-bottom);
127
+ }
128
+
129
+ /* Name row only — do not stack form-group margin on top of grid gap. */
130
+ .usgb-form .usgb-form-grid > .usgb-form-group {
131
+ margin-bottom: 0;
132
+ }
133
+
134
+ @container usgb-form (min-width: 20rem) {
135
+ .usgb-form[data-variant~='two-column'] .usgb-form-grid {
136
+ grid-template-columns: 1fr 1fr;
137
+ }
138
+ }
139
+
140
+ /* Safari < 16 / Firefox < 110 have no container queries; fall back to the
141
+ viewport so those browsers still get a two-up name row on desktop. */
142
+ @supports not (container-type: inline-size) {
143
+ @media (min-width: 768px) {
144
+ .usgb-form[data-variant~='two-column'] .usgb-form-grid {
145
+ grid-template-columns: 1fr 1fr;
146
+ }
147
+ }
148
+ }
149
+
150
+ /* Heading, body, status */
151
+
152
+ .usgb-form .usgb-form-heading {
153
+ font-family: var(--usgb-font-secondary);
154
+ font-size: var(--usgb-heading-font-size);
155
+ font-weight: var(--usgb-heading-font-weight);
156
+ line-height: var(--usgb-heading-line-height);
157
+ letter-spacing: var(--usgb-heading-letter-spacing);
158
+ text-transform: var(--usgb-heading-transform);
159
+ margin: var(--usgb-heading-margin);
160
+ color: var(--usgb-form-content);
161
+ }
162
+
163
+ .usgb-form .usgb-form-body {
164
+ font-size: var(--usgb-body-font-size);
165
+ line-height: var(--usgb-body-line-height);
166
+ margin: var(--usgb-body-margin);
167
+ color: var(--usgb-form-muted);
168
+ }
169
+
170
+ .usgb-form .usgb-form-status {
171
+ margin-top: 1rem;
172
+ font-size: 0.875rem;
173
+ line-height: 1.5rem;
174
+ }
175
+
176
+ .usgb-form .usgb-form-status-success {
177
+ color: var(--usgb-form-content);
178
+ }
179
+
180
+ .usgb-form .usgb-form-status-error {
181
+ color: var(--usgb-alert-danger);
182
+ }
183
+
184
+ /* Field label */
185
+
186
+ .usgb-form .usgb-field-label {
187
+ display: block;
188
+ margin-bottom: var(--usgb-label-margin-bottom);
189
+ color: var(--usgb-field-label);
190
+ font-size: var(--usgb-label-font-size);
191
+ letter-spacing: var(--usgb-label-letter-spacing);
192
+ line-height: var(--usgb-label-line-height);
193
+ font-weight: var(--usgb-label-font-weight);
194
+ text-transform: var(--usgb-label-transform);
195
+ }
196
+
197
+ .usgb-form .usgb-field-label-asterisk {
198
+ margin-left: 0.125rem;
199
+ color: var(--usgb-alert-danger);
200
+ }
201
+
202
+ /* Dense: no visible field labels; labels stay in the a11y tree via sr-only. */
203
+ .usgb-form .usgb-field-label--sr-only {
204
+ position: absolute;
205
+ width: 1px;
206
+ height: 1px;
207
+ padding: 0;
208
+ margin: -1px;
209
+ overflow: hidden;
210
+ clip: rect(0, 0, 0, 0);
211
+ white-space: nowrap;
212
+ border: 0;
213
+ }
214
+
215
+ /* Text inputs */
216
+
217
+ .usgb-form .usgb-field-control {
218
+ appearance: none;
219
+ width: 100%;
220
+ border: 1px solid var(--usgb-field-border);
221
+ background: var(--usgb-field-background);
222
+ color: var(--usgb-field-text);
223
+ padding: var(--usgb-field-padding);
224
+ font-family: inherit;
225
+ font-weight: var(--usgb-field-font-weight);
226
+ font-size: var(--usgb-field-font-size);
227
+ line-height: var(--usgb-field-line-height);
228
+ letter-spacing: var(--usgb-field-letter-spacing);
229
+ margin-bottom: var(--usgb-field-margin-bottom);
230
+ border-radius: var(--usgb-field-radius);
231
+ min-height: var(--usgb-field-min-height);
232
+ text-transform: var(--usgb-field-transform);
233
+ }
234
+
235
+ @media (pointer: coarse) {
236
+ .usgb-form .usgb-field-control {
237
+ font-size: max(1rem, var(--usgb-field-font-size));
238
+ }
239
+ }
240
+
241
+ .usgb-form .usgb-field-control::placeholder {
242
+ color: var(--usgb-field-placeholder);
243
+ text-transform: var(--usgb-placeholder-transform);
244
+ }
245
+
246
+ /* Inset shadow rather than a wider border, so thickening the focus ring to
247
+ the designed 2px does not shift the field by a pixel. */
248
+ .usgb-form .usgb-field-control:focus {
249
+ border-color: var(--usgb-gold-1);
250
+ box-shadow: inset 0 0 0 1px var(--usgb-gold-1);
251
+ outline: none;
252
+ }
253
+
254
+ .usgb-form .usgb-field-control.usgb-field-invalid {
255
+ border-color: var(--usgb-alert-danger);
256
+ box-shadow: none;
257
+ outline: none;
258
+ }
259
+
260
+ .usgb-form .usgb-field-control:disabled {
261
+ outline: none;
262
+ border-color: var(--usgb-grey-9);
263
+ }
264
+
265
+ /* Errors */
266
+
267
+ .usgb-form .usgb-field-error {
268
+ color: var(--usgb-form-muted);
269
+ font-size: var(--usgb-error-font-size);
270
+ font-weight: 500;
271
+ line-height: var(--usgb-error-line-height);
272
+ letter-spacing: -0.015625rem;
273
+ display: inline-flex;
274
+ align-items: center;
275
+ gap: 0.625rem;
276
+ margin-top: var(--usgb-error-margin-top);
277
+ }
278
+
279
+ .usgb-form .usgb-field-error-icon {
280
+ width: 0.75rem;
281
+ height: 0.75rem;
282
+ min-width: 0.75rem;
283
+ flex-shrink: 0;
284
+ color: var(--usgb-alert-danger);
285
+ }
286
+
287
+ /* Consent checkboxes and clickwrap notices */
288
+
289
+ .usgb-form .usgb-consent-row {
290
+ display: flex;
291
+ align-items: flex-start;
292
+ gap: var(--usgb-consent-gap);
293
+ margin-bottom: var(--usgb-consent-margin-bottom);
294
+ }
295
+
296
+ .usgb-form .usgb-form-checkbox-wrap {
297
+ position: relative;
298
+ display: inline-flex;
299
+ flex-shrink: 0;
300
+ align-self: flex-start;
301
+ margin: var(--usgb-checkbox-margin);
302
+ }
303
+
304
+ .usgb-form .usgb-form-checkbox {
305
+ min-width: var(--usgb-checkbox-size);
306
+ height: var(--usgb-checkbox-size);
307
+ width: var(--usgb-checkbox-size);
308
+ appearance: none;
309
+ border: 1px solid var(--usgb-checkbox-border);
310
+ background-color: var(--usgb-checkbox-background);
311
+ border-radius: 0;
312
+ margin: 0;
313
+ flex-shrink: 0;
314
+ }
315
+
316
+ .usgb-form .usgb-form-checkbox-mark {
317
+ position: absolute;
318
+ inset: 0;
319
+ margin: auto;
320
+ width: 0.625rem;
321
+ height: 0.4375rem;
322
+ color: var(--usgb-checkbox-mark);
323
+ pointer-events: none;
324
+ opacity: 0;
325
+ }
326
+
327
+ .usgb-form .usgb-form-checkbox:checked + .usgb-form-checkbox-mark {
328
+ opacity: 1;
329
+ }
330
+
331
+ .usgb-form .usgb-consent-copy {
332
+ font-size: var(--usgb-consent-font-size);
333
+ font-weight: var(--usgb-consent-font-weight);
334
+ line-height: var(--usgb-consent-line-height);
335
+ color: var(--usgb-consent-color);
336
+ text-transform: var(--usgb-consent-transform);
337
+ }
338
+
339
+ .usgb-form .usgb-consent-notice {
340
+ margin: 0 0 var(--usgb-consent-margin-bottom);
341
+ }
342
+
343
+ .usgb-form .usgb-consent-copy a {
344
+ color: var(--usgb-link);
345
+ text-decoration: underline;
346
+ }
347
+
348
+ .usgb-form .usgb-consent-copy a:hover {
349
+ color: var(--usgb-link-hover);
350
+ }
351
+
352
+ /* Primary button (ported from pylot-ui Button primary) */
353
+
354
+ .usgb-form .usgb-btn {
355
+ cursor: pointer;
356
+ display: inline-flex;
357
+ padding: var(--usgb-button-padding);
358
+ min-height: var(--usgb-button-min-height);
359
+ border-radius: var(--usgb-button-radius);
360
+ line-height: var(--usgb-button-line-height);
361
+ transition: background-color 150ms ease-in-out, color 150ms ease-in-out,
362
+ border-color 150ms ease-in-out;
363
+ font-weight: var(--usgb-button-font-weight);
364
+ text-align: center;
365
+ justify-content: center;
366
+ align-items: center;
367
+ text-transform: uppercase;
368
+ letter-spacing: var(--usgb-button-letter-spacing);
369
+ border: 1px solid transparent;
370
+ font-family: inherit;
371
+ font-size: var(--usgb-button-font-size);
372
+ width: var(--usgb-button-width);
373
+ }
374
+
375
+ .usgb-form .usgb-btn-primary {
376
+ background: var(--usgb-button-background);
377
+ color: var(--usgb-button-text);
378
+ border-color: var(--usgb-button-background);
379
+ }
380
+
381
+ .usgb-form .usgb-btn-primary:hover:not(:disabled) {
382
+ background: var(--usgb-button-hover-background);
383
+ color: var(--usgb-button-text);
384
+ border-color: var(--usgb-button-hover-background);
385
+ }
386
+
387
+ .usgb-form .usgb-btn:focus {
388
+ outline: none;
389
+ }
390
+
391
+ .usgb-form .usgb-btn:focus-visible {
392
+ outline: var(--usgb-outline-focused);
393
+ }
394
+
395
+ .usgb-form .usgb-btn:disabled {
396
+ cursor: not-allowed;
397
+ pointer-events: none;
398
+ }
399
+
400
+ .usgb-form .usgb-btn-primary:disabled {
401
+ background: var(--usgb-button-disabled-background);
402
+ color: var(--usgb-button-disabled-text);
403
+ border-color: var(--usgb-button-disabled-background);
404
+ }
405
+
406
+ /* Appearances */
407
+
408
+ .usgb-form[data-appearance='navy'] {
409
+ --usgb-form-surface: var(--usgb-blue-1);
410
+ --usgb-form-content: var(--usgb-primary);
411
+ --usgb-form-muted: var(--usgb-primary);
412
+ --usgb-field-label: var(--usgb-primary);
413
+ --usgb-field-border: var(--usgb-grey-3);
414
+ --usgb-link: var(--usgb-primary);
415
+ --usgb-link-hover: var(--usgb-primary);
416
+ --usgb-checkbox-border: var(--usgb-grey-4);
417
+ --usgb-button-background: var(--usgb-gold-2);
418
+ --usgb-button-text: var(--usgb-blue-1);
419
+ --usgb-button-hover-background: var(--usgb-primary);
420
+ --usgb-button-disabled-background: var(--usgb-grey-2);
421
+ --usgb-button-disabled-text: var(--usgb-grey-6);
422
+ --usgb-newsletter-underline: var(--usgb-primary);
423
+
424
+ padding: 2rem;
425
+ border-radius: 0.75rem;
426
+ }
427
+
428
+ /* Variants */
429
+
430
+ .usgb-form[data-variant~='dense'] {
431
+ --usgb-group-gap: 1.25rem;
432
+ --usgb-grid-gap: 1rem;
433
+ --usgb-grid-margin-bottom: 1.25rem;
434
+ }
435
+
436
+ /* Compact blog/sidebar kit — match live HubSpot density, design-sheet tokens. */
437
+ .usgb-form[data-variant~='sidebar'] {
438
+ --usgb-field-text: var(--usgb-sidebar-field-text);
439
+ --usgb-group-gap: 0.625rem;
440
+ --usgb-grid-gap: 0.625rem;
441
+ --usgb-grid-margin-bottom: 0.625rem;
442
+ --usgb-heading-font-size: 1.25rem;
443
+ --usgb-heading-line-height: 1.25;
444
+ --usgb-heading-margin: 0 0 0.5rem;
445
+ --usgb-body-font-size: 0.75rem;
446
+ --usgb-body-line-height: 1.25rem;
447
+ --usgb-body-margin: 0 0 0.625rem;
448
+ --usgb-field-min-height: 1.875rem;
449
+ --usgb-field-padding: 0.25rem 0.9375rem;
450
+ --usgb-field-font-size: 0.8125rem;
451
+ --usgb-field-font-weight: 400;
452
+ --usgb-field-line-height: 1.25rem;
453
+ --usgb-field-letter-spacing: 0;
454
+ --usgb-field-margin-bottom: 0;
455
+ --usgb-error-font-size: 0.6875rem;
456
+ --usgb-error-line-height: 1rem;
457
+ --usgb-error-margin-top: 0.125rem;
458
+ --usgb-consent-gap: 0.5rem;
459
+ --usgb-consent-margin-bottom: 0.125rem;
460
+ --usgb-checkbox-size: 1.125rem;
461
+ --usgb-checkbox-margin: 0.125rem 0 0;
462
+ --usgb-consent-font-size: 0.6875rem;
463
+ --usgb-consent-line-height: 1.4;
464
+ --usgb-consent-color: var(--usgb-grey-1);
465
+ }
466
+
467
+ .usgb-form[data-variant~='sidebar'][data-appearance='light'] {
468
+ --usgb-field-border: var(--usgb-grey-4);
469
+ --usgb-link: var(--usgb-sidebar-link);
470
+ }
471
+
472
+ .usgb-form[data-variant~='sidebar'][data-appearance='navy'] {
473
+ --usgb-consent-color: var(--usgb-form-muted);
474
+ }
475
+
476
+ .usgb-form[data-variant~='sidebar'] .usgb-consent-copy {
477
+ flex: 1;
478
+ min-width: 0;
479
+ }
480
+
481
+ .usgb-form[data-variant~='large'] {
482
+ --usgb-group-gap: 1.25rem;
483
+ --usgb-grid-gap: 1.25rem;
484
+ --usgb-grid-margin-bottom: 1.25rem;
485
+ --usgb-heading-font-size: 2rem;
486
+ --usgb-heading-font-weight: 700;
487
+ --usgb-heading-line-height: 3rem;
488
+ --usgb-heading-letter-spacing: -0.03125rem;
489
+ --usgb-heading-transform: uppercase;
490
+ --usgb-label-margin-bottom: 0.125rem;
491
+ --usgb-label-font-size: 1rem;
492
+ --usgb-label-font-weight: 400;
493
+ --usgb-label-letter-spacing: 0;
494
+ --usgb-label-line-height: 1.32;
495
+ --usgb-label-transform: none;
496
+ --usgb-field-padding: 1rem 1.25rem;
497
+ --usgb-field-font-size: 1rem;
498
+ --usgb-field-font-weight: 400;
499
+ --usgb-field-line-height: 1.32;
500
+ --usgb-field-letter-spacing: 0;
501
+ --usgb-field-radius: 0.25rem;
502
+ --usgb-consent-gap: 0.5rem;
503
+ --usgb-checkbox-size: 1.5rem;
504
+ --usgb-checkbox-margin: 0;
505
+ --usgb-consent-font-size: 1.125rem;
506
+ --usgb-consent-line-height: 1.75rem;
507
+ --usgb-button-min-height: 3.4375rem;
508
+ --usgb-button-font-size: 1rem;
509
+ }
510
+
511
+ /* Newsletter kind: underline email + side CTA */
512
+
513
+ .usgb-form[data-kind='newsletter'] {
514
+ --usgb-heading-font-size: 1.5rem;
515
+ --usgb-heading-font-weight: 700;
516
+ --usgb-heading-line-height: 1.2;
517
+ --usgb-heading-margin: 0 0 0.625rem;
518
+ --usgb-heading-transform: none;
519
+ --usgb-body-margin: 0 0 1.25rem;
520
+ --usgb-error-margin-top: 0.5rem;
521
+ }
522
+
523
+ .usgb-form[data-kind='newsletter'] .usgb-form-inline {
524
+ display: flex;
525
+ align-items: center;
526
+ gap: 0.75rem;
527
+ width: 100%;
528
+ }
529
+
530
+ .usgb-form[data-kind='newsletter'] .usgb-form-inline .usgb-form-group {
531
+ flex: 1 1 auto;
532
+ min-width: 0;
533
+ margin-bottom: 0;
534
+ }
535
+
536
+ .usgb-form[data-kind='newsletter'] .usgb-form-inline .usgb-field-control {
537
+ border: 0;
538
+ border-bottom: 1px solid var(--usgb-newsletter-underline);
539
+ background: transparent;
540
+ color: var(--usgb-form-content);
541
+ border-radius: 0;
542
+ padding: 0.375rem 0;
543
+ margin-bottom: 0;
544
+ box-shadow: none;
545
+ }
546
+
547
+ .usgb-form[data-kind='newsletter']
548
+ .usgb-form-inline
549
+ .usgb-field-control::placeholder {
550
+ color: var(--usgb-grey-9);
551
+ text-transform: none;
552
+ }
553
+
554
+ .usgb-form[data-kind='newsletter'] .usgb-form-inline .usgb-field-control:focus {
555
+ border-color: var(--usgb-gold-1);
556
+ box-shadow: none;
557
+ outline: none;
558
+ }
559
+
560
+ .usgb-form[data-kind='newsletter']
561
+ .usgb-form-inline
562
+ .usgb-field-control.usgb-field-invalid {
563
+ border-color: var(--usgb-alert-danger);
564
+ box-shadow: none;
565
+ }
566
+
567
+ .usgb-form[data-kind='newsletter'] .usgb-form-inline .usgb-btn {
568
+ width: auto;
569
+ flex: 0 0 auto;
570
+ min-height: 1.8125rem;
571
+ padding: 0 1.5625rem;
572
+ font-size: 0.875rem;
573
+ line-height: 1.8125rem;
574
+ }