@transferwise/neptune-css 0.0.0-experimental-1181467

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 (180) hide show
  1. package/LICENSE.md +13 -0
  2. package/README.md +45 -0
  3. package/dist/css/accordion.css +1 -0
  4. package/dist/css/alerts.css +1 -0
  5. package/dist/css/background.css +1 -0
  6. package/dist/css/badge.css +1 -0
  7. package/dist/css/border-radius.css +1 -0
  8. package/dist/css/breadcrumbs.css +1 -0
  9. package/dist/css/button-groups.css +1 -0
  10. package/dist/css/buttons.css +1 -0
  11. package/dist/css/chevron.css +1 -0
  12. package/dist/css/circles.css +1 -0
  13. package/dist/css/close.css +1 -0
  14. package/dist/css/column-layout.css +1 -0
  15. package/dist/css/currency-flags.css +1 -0
  16. package/dist/css/decision.css +1 -0
  17. package/dist/css/dropdowns.css +1 -0
  18. package/dist/css/droppable.css +1 -0
  19. package/dist/css/flex.css +1 -0
  20. package/dist/css/footer.css +1 -0
  21. package/dist/css/grid.css +1 -0
  22. package/dist/css/input-groups.css +1 -0
  23. package/dist/css/link-callout.css +1 -0
  24. package/dist/css/list-group.css +1 -0
  25. package/dist/css/loaders.css +1 -0
  26. package/dist/css/media.css +1 -0
  27. package/dist/css/modals.css +1 -0
  28. package/dist/css/navbar-base.css +1 -0
  29. package/dist/css/navbar.css +1 -0
  30. package/dist/css/navs.css +1 -0
  31. package/dist/css/neptune-addons.css +1 -0
  32. package/dist/css/neptune-core.css +1 -0
  33. package/dist/css/neptune-social-media.css +1 -0
  34. package/dist/css/neptune.css +1 -0
  35. package/dist/css/panels.css +1 -0
  36. package/dist/css/popovers.css +1 -0
  37. package/dist/css/process.css +1 -0
  38. package/dist/css/progress-bars.css +1 -0
  39. package/dist/css/ring.css +1 -0
  40. package/dist/css/select.css +1 -0
  41. package/dist/css/sequences.css +1 -0
  42. package/dist/css/table.css +1 -0
  43. package/dist/css/tick.css +1 -0
  44. package/dist/css/tooltip.css +1 -0
  45. package/dist/css/utilities.css +1 -0
  46. package/dist/css/wells.css +1 -0
  47. package/dist/fonts/TW-Averta-Bold.woff +0 -0
  48. package/dist/fonts/TW-Averta-Bold.woff2 +0 -0
  49. package/dist/fonts/TW-Averta-Regular.woff +0 -0
  50. package/dist/fonts/TW-Averta-Regular.woff2 +0 -0
  51. package/dist/fonts/TW-Averta-Semibold.woff +0 -0
  52. package/dist/fonts/TW-Averta-Semibold.woff2 +0 -0
  53. package/dist/fonts/TransferWise-IconFont.svg +81 -0
  54. package/dist/fonts/TransferWise-IconFont.woff +0 -0
  55. package/dist/fonts/WorldwiseSans-Heavy.woff2 +0 -0
  56. package/dist/fonts/inter-cyrillic-ext-variable-wghtOnly-normal.woff2 +0 -0
  57. package/dist/fonts/inter-cyrillic-variable-wghtOnly-normal.woff2 +0 -0
  58. package/dist/fonts/inter-greek-ext-variable-wghtOnly-normal.woff2 +0 -0
  59. package/dist/fonts/inter-greek-variable-wghtOnly-normal.woff2 +0 -0
  60. package/dist/fonts/inter-latin-ext-variable-wghtOnly-normal.woff2 +0 -0
  61. package/dist/fonts/inter-latin-variable-wghtOnly-normal.woff2 +0 -0
  62. package/dist/fonts/inter-vietnamese-variable-wghtOnly-normal.woff2 +0 -0
  63. package/dist/img/bg-dark.svg +31 -0
  64. package/dist/img/bg-light.svg +26 -0
  65. package/dist/less/legacy-variables.less +1299 -0
  66. package/dist/less/neptune-tokens.less +272 -0
  67. package/dist/less/zindex.less +17 -0
  68. package/dist/props/custom-media.css +9 -0
  69. package/dist/props/legacy-custom-props.css +69 -0
  70. package/dist/props/neptune-tokens.css +150 -0
  71. package/package.json +59 -0
  72. package/scripts/neptune-css-upgrader.js +106 -0
  73. package/src/fonts/TW-Averta-Bold.woff +0 -0
  74. package/src/fonts/TW-Averta-Bold.woff2 +0 -0
  75. package/src/fonts/TW-Averta-Regular.woff +0 -0
  76. package/src/fonts/TW-Averta-Regular.woff2 +0 -0
  77. package/src/fonts/TW-Averta-Semibold.woff +0 -0
  78. package/src/fonts/TW-Averta-Semibold.woff2 +0 -0
  79. package/src/fonts/TransferWise-IconFont.svg +81 -0
  80. package/src/fonts/TransferWise-IconFont.woff +0 -0
  81. package/src/fonts/WorldwiseSans-Heavy.woff2 +0 -0
  82. package/src/fonts/inter-cyrillic-ext-variable-wghtOnly-normal.woff2 +0 -0
  83. package/src/fonts/inter-cyrillic-variable-wghtOnly-normal.woff2 +0 -0
  84. package/src/fonts/inter-greek-ext-variable-wghtOnly-normal.woff2 +0 -0
  85. package/src/fonts/inter-greek-variable-wghtOnly-normal.woff2 +0 -0
  86. package/src/fonts/inter-latin-ext-variable-wghtOnly-normal.woff2 +0 -0
  87. package/src/fonts/inter-latin-variable-wghtOnly-normal.woff2 +0 -0
  88. package/src/fonts/inter-vietnamese-variable-wghtOnly-normal.woff2 +0 -0
  89. package/src/img/bg-dark.svg +31 -0
  90. package/src/img/bg-light.svg +26 -0
  91. package/src/less/accordion.less +15 -0
  92. package/src/less/addons/_background-utilities.less +82 -0
  93. package/src/less/addons/_border.less +3 -0
  94. package/src/less/addons/_display-utilities.less +159 -0
  95. package/src/less/addons/_spacing-utilities.less +49 -0
  96. package/src/less/addons/_utilities.less +147 -0
  97. package/src/less/alerts.less +253 -0
  98. package/src/less/background.less +24 -0
  99. package/src/less/badge.less +85 -0
  100. package/src/less/border-radius.less +3 -0
  101. package/src/less/breadcrumbs.less +27 -0
  102. package/src/less/button-groups.less +424 -0
  103. package/src/less/buttons.less +714 -0
  104. package/src/less/chevron.less +39 -0
  105. package/src/less/circles.less +223 -0
  106. package/src/less/close.less +48 -0
  107. package/src/less/column-layout.less +167 -0
  108. package/src/less/components/_component-animations.less +43 -0
  109. package/src/less/core/_fonts.less +97 -0
  110. package/src/less/core/_scaffolding.less +473 -0
  111. package/src/less/core/_typography-utilities.less +269 -0
  112. package/src/less/core/_typography.less +794 -0
  113. package/src/less/currency-flags.less +41 -0
  114. package/src/less/decision.less +98 -0
  115. package/src/less/dropdowns.less +374 -0
  116. package/src/less/droppable.less +280 -0
  117. package/src/less/flex.less +113 -0
  118. package/src/less/footer.less +113 -0
  119. package/src/less/forms/bootstrap-forms.less +1227 -0
  120. package/src/less/forms/checkbox-radio.less +303 -0
  121. package/src/less/grid.less +187 -0
  122. package/src/less/input-groups.less +299 -0
  123. package/src/less/link-callout.less +17 -0
  124. package/src/less/list-group.less +260 -0
  125. package/src/less/loaders.less +91 -0
  126. package/src/less/media.less +61 -0
  127. package/src/less/mixins/_alerts.less +35 -0
  128. package/src/less/mixins/_arrows.less +52 -0
  129. package/src/less/mixins/_border-radius.less +11 -0
  130. package/src/less/mixins/_buttons.less +82 -0
  131. package/src/less/mixins/_center-block.less +7 -0
  132. package/src/less/mixins/_circle.less +11 -0
  133. package/src/less/mixins/_clearfix.less +23 -0
  134. package/src/less/mixins/_flex.less +105 -0
  135. package/src/less/mixins/_forms.less +128 -0
  136. package/src/less/mixins/_grid-framework.less +104 -0
  137. package/src/less/mixins/_grid.less +158 -0
  138. package/src/less/mixins/_hide-text.less +20 -0
  139. package/src/less/mixins/_links.less +7 -0
  140. package/src/less/mixins/_list-group.less +23 -0
  141. package/src/less/mixins/_logical-properties-IE-friendly.less +381 -0
  142. package/src/less/mixins/_logical-properties-modern-browsers.less +226 -0
  143. package/src/less/mixins/_logical-properties.less +5 -0
  144. package/src/less/mixins/_nav-vertical-align.less +10 -0
  145. package/src/less/mixins/_panels.less +23 -0
  146. package/src/less/mixins/_physical-properties.less +110 -0
  147. package/src/less/mixins/_reset-text.less +22 -0
  148. package/src/less/mixins/_sequence.less +203 -0
  149. package/src/less/mixins/_spacing.less +122 -0
  150. package/src/less/mixins/_tab-focus.less +5 -0
  151. package/src/less/mixins/_table-row.less +47 -0
  152. package/src/less/mixins/_text-emphasis.less +39 -0
  153. package/src/less/mixins/_theming.less +7 -0
  154. package/src/less/modals.less +239 -0
  155. package/src/less/navbar-base.less +1333 -0
  156. package/src/less/navbar.less +106 -0
  157. package/src/less/navs.less +341 -0
  158. package/src/less/neptune-addons.less +4 -0
  159. package/src/less/neptune-core.less +4 -0
  160. package/src/less/neptune-social-media.less +57 -0
  161. package/src/less/neptune.bundle.less +44 -0
  162. package/src/less/panels.less +410 -0
  163. package/src/less/popovers.less +381 -0
  164. package/src/less/process.less +395 -0
  165. package/src/less/progress-bars.less +70 -0
  166. package/src/less/ring.less +51 -0
  167. package/src/less/select.less +88 -0
  168. package/src/less/sequences.less +515 -0
  169. package/src/less/table.less +385 -0
  170. package/src/less/tick.less +37 -0
  171. package/src/less/tooltip.less +132 -0
  172. package/src/less/utilities.less +153 -0
  173. package/src/less/wells.less +37 -0
  174. package/src/props/custom-media.css +9 -0
  175. package/src/props/legacy-custom-props.css +69 -0
  176. package/src/props/neptune-tokens.css +11 -0
  177. package/src/variables/legacy-variables.less +1299 -0
  178. package/src/variables/neptune-tokens.less +12 -0
  179. package/src/variables/zindex.less +17 -0
  180. package/upgrades/scripts/2021-11-v11-v12.js +61 -0
@@ -0,0 +1,1227 @@
1
+ @import (reference) '../../variables/legacy-variables.less';
2
+ @import (reference) '../../variables/neptune-tokens.less';
3
+ @import (reference) '../mixins/_arrows.less';
4
+ @import (reference) '../mixins/_grid.less';
5
+ @import (reference) '../mixins/_forms.less';
6
+ @import (reference) '../mixins/_tab-focus.less';
7
+ @import (reference) '../mixins/_logical-properties.less';
8
+ @import (reference) '../core/_typography.less';
9
+
10
+ //
11
+ // Forms
12
+ // --------------------------------------------------
13
+
14
+ // Normalize non-controls
15
+ //
16
+ // Restyle and baseline non-control form elements.
17
+ form {
18
+ margin-bottom: 0;
19
+ }
20
+
21
+ fieldset {
22
+ padding: 0;
23
+ margin: 0;
24
+ border: 0;
25
+ // Chrome and Firefox set a `min-width: min-content;` on fieldsets,
26
+ // so we reset that to ensure it behaves more like a standard block element.
27
+ // See https://github.com/twbs/bootstrap/issues/12359.
28
+ min-width: 0;
29
+ }
30
+
31
+ legend {
32
+ display: block;
33
+ width: 100%;
34
+ padding: 32px 0 16px 0;
35
+ margin-bottom: 32px;
36
+ font-size: var(--font-size-16);
37
+ font-weight: var(--font-weight-semi-bold);
38
+ line-height: var(--line-height-title);
39
+ color: var(--color-content-primary);
40
+ border: 0;
41
+ border-bottom: 1px solid var(--color-border-neutral);
42
+ }
43
+
44
+ label {
45
+ display: inline-block;
46
+ max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141)
47
+ margin-bottom: 4px;
48
+ }
49
+
50
+ label,
51
+ .secondary {
52
+ color: var(--color-content-secondary);
53
+ transition: color ease-in-out 0.15s;
54
+ font-size: var(--font-size-14);
55
+ line-height: 20px;
56
+ }
57
+
58
+ // Normalize form controls
59
+ //
60
+ // While most of our form styles require extra classes, some basic normalization
61
+ // is required to ensure optimum display with or without those classes to better
62
+ // address browser inconsistencies.
63
+
64
+ // Override content-box in Normalize (* isn't specific enough)
65
+ input[type='search'] {
66
+ box-sizing: border-box;
67
+ }
68
+
69
+ input[type='number'] {
70
+ appearance: textfield;
71
+ }
72
+
73
+ input[type='number']::-webkit-outer-spin-button,
74
+ input[type='number']::-webkit-inner-spin-button {
75
+ appearance: none;
76
+ margin: 0;
77
+ }
78
+
79
+ // Position radios and checkboxes better
80
+ input[type='radio'],
81
+ input[type='checkbox'] {
82
+ margin: 4px 0 0;
83
+ margin-top: 1px;
84
+ line-height: normal;
85
+ }
86
+
87
+ input[type='file'] {
88
+ display: block;
89
+ }
90
+
91
+ // Make range inputs behave like textual form controls
92
+ input[type='range'] {
93
+ display: block;
94
+ width: 100%;
95
+ }
96
+
97
+ // Make multiple select elements height not fixed
98
+ select[multiple],
99
+ select[size] {
100
+ height: auto;
101
+ }
102
+
103
+ // Focus for file, radio, and checkbox
104
+ input[type='file']:focus,
105
+ input[type='radio']:focus,
106
+ input[type='checkbox']:focus {
107
+ .tab-focus();
108
+ }
109
+
110
+ // Adjust output element
111
+ output {
112
+ display: block;
113
+ padding-top: (@padding-base-vertical + 1);
114
+ font-size: var(--font-size-16);
115
+ line-height: var(--line-height-control);
116
+ color: var(--color-content-primary);
117
+ }
118
+
119
+ // Common form controls
120
+ //
121
+ // Shared size and type resets for form controls. Apply `.form-control` to any
122
+ // of the following form controls:
123
+ //
124
+ // select
125
+ // textarea
126
+ // input[type="text"]
127
+ // input[type="password"]
128
+ // input[type="datetime"]
129
+ // input[type="datetime-local"]
130
+ // input[type="date"]
131
+ // input[type="month"]
132
+ // input[type="time"]
133
+ // input[type="week"]
134
+ // input[type="number"]
135
+ // input[type="email"]
136
+ // input[type="url"]
137
+ // input[type="search"]
138
+ // input[type="tel"]
139
+ // input[type="color"]
140
+
141
+ .form-control {
142
+ display: block;
143
+ width: 100%;
144
+ color: var(--color-content-primary);
145
+ background-color: var(--color-background-screen);
146
+ background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214
147
+ border: 1px solid var(--color-interactive-secondary);
148
+ transition: border-color ease-in-out 0.15s;
149
+ font-size: var(--font-size-16);
150
+
151
+ .input-size(
152
+ @input-height-base,
153
+ var(--input-padding),
154
+ @input-border-radius
155
+ );
156
+ .np-text-body-large;
157
+
158
+ // Remove iOS drop shadow
159
+ background-clip: padding-box;
160
+
161
+ // Customize the `:focus` state to imitate native WebKit styles.
162
+ .form-control-focus(var(--color-interactive-accent-active));
163
+
164
+ &::placeholder {
165
+ color: var(--color-content-tertiary);
166
+ }
167
+
168
+ // Reset height for `textarea`s
169
+ textarea& {
170
+ height: 144px;
171
+ }
172
+
173
+ + .text-muted,
174
+ + .text-primary,
175
+ + .text-success,
176
+ + .text-positive,
177
+ + .text-info,
178
+ + .text-warning,
179
+ + .text-negative,
180
+ + .text-danger {
181
+ margin-top: @padding-base-vertical;
182
+ }
183
+
184
+ &:focus {
185
+ border-color: var(--color-interactive-accent-active);
186
+ }
187
+
188
+ .np-theme-personal & {
189
+ .form-control-focus(var(--color-interactive-primary));
190
+
191
+ &:hover {
192
+ border-color: var(--color-interactive-secondary-hover);
193
+ }
194
+
195
+ &:focus {
196
+ border-color: var(--color-interactive-primary);
197
+ }
198
+ }
199
+ }
200
+
201
+ // Search inputs in iOS
202
+ //
203
+ // This overrides the extra rounded corners on search inputs in iOS so that our
204
+ // `.form-control` class can properly style them. Note that this cannot simply
205
+ // be added to `.form-control` as it's not specific enough. For details, see
206
+ // https://github.com/twbs/bootstrap/issues/11586.
207
+
208
+ input[type='search'] {
209
+ appearance: none;
210
+ }
211
+
212
+ // Special styles for iOS temporal inputs
213
+ //
214
+ // In Mobile Safari, setting `display: block` on temporal inputs causes the
215
+ // text within the input to become vertically misaligned. As a workaround, we
216
+ // set a pixel line-height that matches the given height of the input, but only
217
+ // for Safari. See https://bugs.webkit.org/show_bug.cgi?id=139848
218
+
219
+ @media screen and (min-device-pixel-ratio: 0) {
220
+ input[type='date'],
221
+ input[type='time'],
222
+ input[type='datetime-local'],
223
+ input[type='month'] {
224
+ line-height: @input-height-base;
225
+
226
+ &.input-sm,
227
+ .input-group-sm & {
228
+ line-height: @input-height-small;
229
+ }
230
+
231
+ &.input-lg,
232
+ .input-group-lg & {
233
+ line-height: calc(@input-height-large - var(--line-height-body));
234
+ }
235
+ }
236
+ }
237
+
238
+ // Form groups
239
+ //
240
+ // Designed to help with the organization and spacing of vertical forms. For
241
+ // horizontal forms, use the predefined grid classes.
242
+
243
+ .form-group {
244
+ margin-bottom: @form-group-margin-bottom;
245
+
246
+ label {
247
+ margin-bottom: 2px;
248
+ }
249
+
250
+ &:focus-within {
251
+ .control-label,
252
+ > label {
253
+ color: var(--color-content-accent);
254
+ }
255
+ }
256
+ }
257
+
258
+ .row-equal-height > [class*='col-'] > .form-group {
259
+ width: 100%;
260
+ }
261
+
262
+ // Checkboxes and radios
263
+ //
264
+ // Indent the labels to position radios/checkboxes as hanging controls.
265
+
266
+ .radio,
267
+ .checkbox {
268
+ position: relative;
269
+ display: block;
270
+ margin-top: 0;
271
+ // margin-bottom: (@padding-base-vertical * 1.5);
272
+
273
+ label {
274
+ min-height: @input-height-base;
275
+ margin-bottom: 0;
276
+ cursor: pointer;
277
+ }
278
+ }
279
+
280
+ .radio + .radio,
281
+ .checkbox + .checkbox {
282
+ margin-top: (@padding-base-vertical * 1.5);
283
+ }
284
+
285
+ .radio input[type='radio'],
286
+ .radio-inline input[type='radio'],
287
+ .checkbox input[type='checkbox'],
288
+ .checkbox-inline input[type='checkbox'] {
289
+ position: absolute;
290
+ .margin(left, -20px);
291
+
292
+ margin-top: 4px \9;
293
+ }
294
+
295
+ // Radios and checkboxes on same line
296
+ .radio-inline,
297
+ .checkbox-inline {
298
+ position: relative;
299
+ display: inline-block;
300
+ .padding(left, 20px);
301
+
302
+ margin-bottom: 0;
303
+ vertical-align: middle;
304
+ font-weight: normal;
305
+ cursor: pointer;
306
+
307
+ &.disabled,
308
+ fieldset[disabled] & {
309
+ cursor: @cursor-disabled;
310
+ }
311
+ }
312
+
313
+ .radio-inline + .radio-inline,
314
+ .checkbox-inline + .checkbox-inline {
315
+ margin-top: 0;
316
+ .margin(left, 10px); // space out consecutive inline controls
317
+ }
318
+
319
+ // Apply same disabled cursor tweak as for inputs
320
+ // Some special care is needed because <label>s don't inherit their parent's `cursor`.
321
+ //
322
+ // Note: Neither radios nor checkboxes can be readonly.
323
+ input[type='radio'],
324
+ input[type='checkbox'] {
325
+ &[disabled],
326
+ &.disabled,
327
+ fieldset[disabled] & {
328
+ cursor: @cursor-disabled;
329
+ }
330
+ }
331
+
332
+ // hide native password reveal button for MS Edge
333
+ // docs: https://learn.microsoft.com/en-us/microsoft-edge/web-platform/password-reveal
334
+ input[type="password"] {
335
+ &::-ms-reveal {
336
+ display: none;
337
+ }
338
+ }
339
+
340
+ // These classes are used on elements with <label> descendants
341
+ .radio,
342
+ .checkbox {
343
+ &.disabled,
344
+ fieldset[disabled] & {
345
+ label {
346
+ cursor: @cursor-disabled;
347
+ }
348
+ }
349
+ }
350
+
351
+ // Static form control text
352
+ //
353
+ // Apply class to a `p` element to make any string of text align with labels in
354
+ // a horizontal form layout.
355
+
356
+ .form-control-static {
357
+ // Remove default margin from `p`
358
+ margin-bottom: 0;
359
+ min-height: calc(var(--line-height-control) * 2);
360
+ color: var(--color-content-secondary);
361
+ background-color: var(--color-background-neutral);
362
+ border: 1px solid var(--color-interactive-secondary);
363
+ border-radius: @input-border-radius;
364
+ padding: var(--input-padding);
365
+
366
+ &.input-lg,
367
+ &.input-sm {
368
+ .padding(left, 0);
369
+
370
+ .padding(right, 0);
371
+ }
372
+ }
373
+
374
+ // Form control sizing
375
+ //
376
+ // Build on `.form-control` with modifier classes to decrease or increase the
377
+ // height and font-size of form controls.
378
+ //
379
+ // The `.form-group-* form-control` variations are sadly duplicated to avoid the
380
+ // issue documented in https://github.com/twbs/bootstrap/issues/15074.
381
+
382
+ .input-sm {
383
+ .input-size(
384
+ @input-height-small;
385
+ var(--input-padding-small);
386
+ @input-border-radius-small
387
+ );
388
+ font-size: 14px;
389
+ line-height: 24px;
390
+ .np-text-body-default();
391
+ }
392
+
393
+ .form-group-sm,
394
+ .navbar {
395
+ .form-control {
396
+ height: @input-height-small;
397
+ padding: var(--input-padding-small);
398
+ font-size: var(--font-size-14);
399
+ line-height: @input-line-height-small;
400
+ border-radius: @input-border-radius-small;
401
+ }
402
+
403
+ select.form-control {
404
+ height: @input-height-small;
405
+ line-height: @input-height-small;
406
+ }
407
+
408
+ textarea.form-control,
409
+ select[multiple].form-control {
410
+ height: auto;
411
+ }
412
+
413
+ .form-control-static {
414
+ height: @input-height-small;
415
+ min-height: calc(var(--line-height-control) + @input-font-size-small);
416
+ padding: var(--input-padding-small);
417
+ font-size: var(--font-size-14);
418
+ line-height: @input-line-height-small;
419
+ }
420
+ }
421
+
422
+ .input-lg {
423
+ .input-size(
424
+ @input-height-large;
425
+ var(--input-padding-large);
426
+ @input-border-radius-large
427
+ );
428
+ .np-text-body-large;
429
+ }
430
+
431
+ .form-group-lg {
432
+ position: relative;
433
+
434
+ .input-lg,
435
+ .input-group-lg > .form-control,
436
+ .input-group-lg > .input-group-addon {
437
+ height: @input-height-large;
438
+ padding: calc(@padding-small-vertical + var(--size-24)) @padding-small-horizontal
439
+ @padding-small-vertical;
440
+ font-size: @input-font-size-large;
441
+ line-height: @input-line-height-large;
442
+ }
443
+
444
+ select.form-control {
445
+ line-height: @input-height-large;
446
+ }
447
+
448
+ textarea.form-control,
449
+ select[multiple].form-control {
450
+ height: auto;
451
+ }
452
+
453
+ .form-control-static {
454
+ height: @input-height-large;
455
+ min-height: calc(var(--line-height-control) + @input-font-size-large);
456
+ padding: var(--input-padding-large);
457
+ font-size: @input-font-size-large;
458
+ line-height: @input-line-height-large;
459
+ }
460
+
461
+ .control-label {
462
+ position: absolute;
463
+ top: 12px;
464
+ .left(14px);
465
+
466
+ margin-bottom: 0;
467
+ z-index: 1;
468
+ }
469
+ }
470
+
471
+ // Form control feedback states
472
+ //
473
+ // Apply contextual and semantic states to individual form controls.
474
+
475
+ .has-feedback {
476
+ // Enable absolute positioning
477
+ position: relative;
478
+
479
+ // Ensure icons don't overlap text
480
+ .form-control {
481
+ .padding(right, @input-height-base);
482
+ }
483
+ }
484
+ // Feedback icon (requires .glyphicon classes)
485
+ .form-control-feedback {
486
+ position: absolute;
487
+ top: 0;
488
+ .right(0);
489
+
490
+ z-index: 2; // Ensure icon is above input groups
491
+ display: block;
492
+ width: @input-height-base;
493
+ height: @input-height-base;
494
+ text-align: center;
495
+ pointer-events: none;
496
+ }
497
+
498
+ .input-lg + .form-control-feedback,
499
+ .input-group-lg + .form-control-feedback,
500
+ .form-group-lg .form-control + .form-control-feedback {
501
+ width: @input-height-large;
502
+ height: @input-height-large;
503
+ }
504
+
505
+ .input-sm + .form-control-feedback,
506
+ .input-group-sm + .form-control-feedback,
507
+ .form-group-sm .form-control + .form-control-feedback {
508
+ width: @input-height-small;
509
+ height: @input-height-small;
510
+ }
511
+
512
+ // Focus state
513
+ .focus,
514
+ .has-focus {
515
+ .control-label {
516
+ color: var(--color-content-accent-active);
517
+ }
518
+
519
+ .input-group-addon {
520
+ border-color: var(--color-interactive-secondary);
521
+
522
+ &:active {
523
+ border-color: var(--color-interactive-secondary-active);
524
+ }
525
+ }
526
+ }
527
+
528
+ // Help text
529
+ //
530
+ // Apply to any element you wish to create light text for placement immediately
531
+ // below a form control. Use for general help, formatting, or instructional text.
532
+
533
+ .help-block,
534
+ .error-messages {
535
+ margin-top: 12px;
536
+ margin-bottom: 4px;
537
+ border-width: 0;
538
+ border-style: solid;
539
+ border-radius: var(--radius-small);
540
+ padding: 4px 16px 3px;
541
+ transition: border-color 0.15s ease-in-out, background-color 0.15s ease-in-out;
542
+
543
+ a {
544
+ color: inherit;
545
+ }
546
+ }
547
+
548
+ .help-block {
549
+ color: var(--color-content-secondary);
550
+ border-color: var(--color-interactive-secondary);
551
+ background-color: var(--color-background-neutral);
552
+ display: block;
553
+
554
+ .arrow(10px);
555
+ }
556
+
557
+ .focus, // TODO legacy, remove.
558
+ .has-focus {
559
+ .alert {
560
+ border-color: var(--color-interactive-accent-active);
561
+ }
562
+ }
563
+
564
+ // Feedback states
565
+ .has-success {
566
+ .form-control-validation(
567
+ var(--color-content-positive);
568
+ var(--color-interactive-positive);
569
+ var(--color-interactive-positive-hover);
570
+ );
571
+
572
+ .np-theme-personal & {
573
+ .form-control-validation(
574
+ var(--color-sentiment-positive);
575
+ var(--color-sentiment-positive);
576
+ var(--color-sentiment-positive);
577
+ );
578
+ }
579
+ }
580
+
581
+ .has-info {
582
+ .form-control-validation(
583
+ var(--color-content-accent);
584
+ var(--color-interactive-accent);
585
+ var(--color-interactive-accent-hover);
586
+ );
587
+
588
+ .np-theme-personal & {
589
+ .form-control-validation(
590
+ var(--color-content-primary);
591
+ transparent;
592
+ transparent;
593
+ );
594
+ }
595
+ }
596
+
597
+ .has-warning {
598
+ .form-control-validation(
599
+ var(--color-content-warning);
600
+ var(--color-interactive-warning);
601
+ var(--color-interactive-warning-hover);
602
+ );
603
+
604
+ .np-theme-personal & {
605
+ .form-control-validation(
606
+ var(--color-sentiment-warning);
607
+ var(--color-sentiment-warning);
608
+ var(--color-sentiment-warning);
609
+ );
610
+ }
611
+ }
612
+
613
+ .has-error {
614
+ .form-control-validation(
615
+ var(--color-content-negative);
616
+ var(--color-interactive-negative);
617
+ var(--color-interactive-negative-hover);
618
+ );
619
+
620
+ .np-theme-personal & {
621
+ .form-control-validation(
622
+ var(--color-sentiment-negative);
623
+ var(--color-sentiment-negative);
624
+ var(--color-sentiment-negative-hover);
625
+ );
626
+ }
627
+ }
628
+
629
+ // Reposition feedback icon if input has visible label above
630
+ .has-feedback label {
631
+ & ~ .form-control-feedback {
632
+ top: var(--line-height-control); // Height of the `label` and its margin
633
+ }
634
+
635
+ &.sr-only ~ .form-control-feedback {
636
+ top: 0;
637
+ }
638
+ }
639
+
640
+ // Inline forms
641
+ //
642
+ // Make forms appear inline(-block) by adding the `.form-inline` class. Inline
643
+ // forms begin stacked on extra small (mobile) devices and then go inline when
644
+ // viewports reach <768px.
645
+ //
646
+ // Requires wrapping inputs and labels with `.form-group` for proper display of
647
+ // default HTML form controls and our custom form controls (e.g., input groups).
648
+ //
649
+ // Heads up! This is mixin-ed into `.navbar-form` in navbars.less.
650
+
651
+ .form-inline {
652
+ // Kick in the inline
653
+ @media (min-width: @screen-sm-min) {
654
+ // Inline-block all the things for "inline"
655
+ .form-group {
656
+ display: inline-block;
657
+ margin-bottom: 0;
658
+ vertical-align: middle;
659
+ }
660
+
661
+ // In navbar-form, allow folks to *not* use `.form-group`
662
+ .form-control {
663
+ display: inline-block;
664
+ width: auto; // Prevent labels from stacking above inputs in `.form-group`
665
+ vertical-align: middle;
666
+ }
667
+
668
+ // Make static controls behave like regular ones
669
+ .form-control-static {
670
+ display: inline-block;
671
+ }
672
+
673
+ .input-group {
674
+ display: inline-table;
675
+ vertical-align: middle;
676
+
677
+ .input-group-addon,
678
+ .input-group-btn,
679
+ .form-control {
680
+ width: auto;
681
+ }
682
+ }
683
+
684
+ // Input groups need that 100% width though
685
+ .input-group > .form-control {
686
+ width: 100%;
687
+ }
688
+
689
+ .control-label {
690
+ margin-bottom: 0;
691
+ vertical-align: calc(-2px);
692
+ }
693
+
694
+ // Remove default margin on radios/checkboxes that were used for stacking, and
695
+ // then undo the floating of radios and checkboxes to match.
696
+ .radio,
697
+ .checkbox {
698
+ display: inline-block;
699
+ margin-top: 0;
700
+ margin-bottom: 0;
701
+ vertical-align: middle;
702
+
703
+ label {
704
+ .padding(left, 0);
705
+ }
706
+ }
707
+
708
+ .radio input[type='radio'],
709
+ .checkbox input[type='checkbox'] {
710
+ position: relative;
711
+ .margin(left, 0);
712
+ }
713
+
714
+ // Re-override the feedback icon.
715
+ .has-feedback .form-control-feedback {
716
+ top: 0;
717
+ }
718
+ }
719
+ }
720
+
721
+ // Horizontal forms
722
+ //
723
+ // Horizontal forms are built on grid classes and allow you to create forms with
724
+ // labels on the left and inputs on the right.
725
+
726
+ .form-horizontal {
727
+ // Consistent vertical alignment of radios and checkboxes
728
+ //
729
+ // Labels also get some reset styles, but that is scoped to a media query below.
730
+ .radio,
731
+ .checkbox,
732
+ .radio-inline,
733
+ .checkbox-inline {
734
+ margin-top: 0;
735
+ margin-bottom: 0;
736
+ padding-top: (@padding-base-vertical + 1); // Default padding plus a border
737
+ }
738
+ // Account for padding we're adding to ensure the alignment and of help text
739
+ // and other content below items
740
+ .radio,
741
+ .checkbox {
742
+ min-height: calc(var(--line-height-control) + (@padding-base-vertical + 1));
743
+ }
744
+
745
+ // Make form groups behave like rows
746
+ .form-group {
747
+ .make-row();
748
+ }
749
+
750
+ // Reset spacing and right align labels, but scope to media queries so that
751
+ // labels on narrow viewports stack the same as a default form example.
752
+ @media (min-width: @screen-sm-min) {
753
+ .control-label {
754
+ .text-align(right);
755
+
756
+ margin-bottom: 0;
757
+ padding-top: 14px; // Default padding plus a border
758
+ }
759
+ }
760
+
761
+ // Validation states
762
+ //
763
+ // Reposition the icon because it's now within a grid column and columns have
764
+ // `position: relative;` on them. Also accounts for the grid gutter padding.
765
+ .has-feedback .form-control-feedback {
766
+ .right(floor((@grid-gutter-width / 2)));
767
+ }
768
+
769
+ // Form group sizes
770
+ //
771
+ // Quick utility class for applying `.input-lg` and `.input-sm` styles to the
772
+ // inputs and labels within a `.form-group`.
773
+ .form-group-lg {
774
+ @media (min-width: @screen-sm-min) {
775
+ .control-label {
776
+ padding-top: 17px;
777
+ font-size: var(--font-size-20);
778
+ }
779
+ }
780
+ }
781
+
782
+ .form-group-sm {
783
+ @media (min-width: @screen-sm-min) {
784
+ .control-label {
785
+ padding-top: 8px;
786
+ font-size: var(--font-size-14);
787
+ }
788
+ }
789
+ }
790
+ }
791
+
792
+ @import 'checkbox-radio.less';
793
+
794
+ .input-group .input-group-btn + input {
795
+ .border(left, 0, solid, transparent);
796
+ }
797
+
798
+ .input-group-addon {
799
+ color: var(--color-content-secondary);
800
+ transition: border-color ease-in-out 0.15s;
801
+ }
802
+
803
+ .form-control-feedback,
804
+ .form-control-feedback.icon {
805
+ font-size: 24px;
806
+ line-height: 48px;
807
+ }
808
+
809
+ .label {
810
+ padding-top: 0.25em;
811
+ position: relative;
812
+ top: -3px;
813
+
814
+ .label-default {
815
+ color: var(--color-content-secondary);
816
+ background-color: var(--color-background-neutral);
817
+ }
818
+ }
819
+
820
+ .form-group {
821
+ position: relative;
822
+ font-size: var(--font-size-14);
823
+ }
824
+
825
+ .form-group .row {
826
+ .margin(left, -6px);
827
+
828
+ .margin(right, -6px);
829
+
830
+ [class*='col-'] {
831
+ .padding(left, 6px);
832
+
833
+ .padding(right, 6px);
834
+ }
835
+ }
836
+
837
+ @media (max-width: @screen-xs-max) {
838
+ .form-group .row [class*='col-sm-'] {
839
+ margin-bottom: 0;
840
+
841
+ .form-control,
842
+ .btn-input {
843
+ margin-bottom: (@padding-base-vertical * 1.5);
844
+ }
845
+ }
846
+ }
847
+
848
+ @media (max-width: @screen-sm-max) {
849
+ .form-group .row [class*='col-md-'] {
850
+ margin-bottom: 0;
851
+
852
+ .form-control,
853
+ .btn-input {
854
+ margin-bottom: (@padding-base-vertical * 1.5);
855
+ }
856
+ }
857
+ }
858
+
859
+ @media (max-width: @screen-md-max) {
860
+ .form-group .row [class*='col-lg-'] {
861
+ margin-bottom: 0;
862
+
863
+ .form-control,
864
+ .btn-input {
865
+ margin-bottom: (@padding-base-vertical * 1.5);
866
+ }
867
+ }
868
+ }
869
+
870
+ @media (max-width: @screen-lg-max) {
871
+ .form-group .row [class*='col-xl-'] {
872
+ margin-bottom: 0;
873
+
874
+ .form-control,
875
+ .btn-input {
876
+ margin-bottom: (@padding-base-vertical * 1.5);
877
+ }
878
+ }
879
+ }
880
+
881
+ @media (min-width: @screen-sm-min) {
882
+ fieldset .form-group:nth-of-type(odd) {
883
+ .clear(left);
884
+ }
885
+ }
886
+
887
+ .checkbox,
888
+ .radio {
889
+ > label {
890
+ display: block;
891
+ cursor: pointer;
892
+ padding-top: 12px;
893
+ padding-bottom: 10px;
894
+ .padding(right, 16px);
895
+
896
+ color: var(--color-content-primary);
897
+ background-color: var(--color-background-screen);
898
+ border: 1px solid var(--color-interactive-secondary);
899
+ border-radius: @border-radius-base;
900
+ transition: border 0.15s ease-in-out, background-color 0.15s ease-in-out;
901
+
902
+ .np-theme-personal & {
903
+ border-radius: var(--radius-small);
904
+ }
905
+
906
+ &:not(.disabled, :disabled):hover {
907
+ border-color: var(--color-interactive-secondary-hover);
908
+ }
909
+
910
+ &:not(.disabled, :disabled).focus,
911
+ &:not(.disabled, :disabled).focus:hover,
912
+ &:not(.disabled, :disabled).has-focus,
913
+ &:not(.disabled, :disabled).has-focus:hover,
914
+ &:not(.disabled, :disabled):focus-within {
915
+ border-color: var(--color-interactive-accent-active);
916
+
917
+ .np-theme-personal & {
918
+ border-color: var(--color-interactive-secondary);
919
+ }
920
+ }
921
+ }
922
+
923
+ &.checkbox-lg,
924
+ &.radio-lg {
925
+ > label {
926
+ min-height: 72px;
927
+
928
+ small,
929
+ .small,
930
+ .body-2,
931
+ .np-text-body-default {
932
+ display: block;
933
+ color: var(--color-content-secondary);
934
+ }
935
+ }
936
+ }
937
+ }
938
+
939
+ .error-messages {
940
+ display: none;
941
+ color: var(--color-content-negative);
942
+ background-color: var(--color-background-negative);
943
+ position: relative;
944
+ .arrow-pointer(@alert-arrow-width);
945
+
946
+ .form-group & {
947
+ border-radius: @border-radius-base;
948
+ border-width: 0;
949
+ margin-top: 12px;
950
+ }
951
+
952
+ .has-error & {
953
+ display: block;
954
+
955
+ &:empty,
956
+ &:-moz-only-whitespace {
957
+ display: none;
958
+
959
+ &::before {
960
+ display: none;
961
+ }
962
+ }
963
+ }
964
+ }
965
+
966
+ .error-required,
967
+ .error-pattern,
968
+ .error-minlength,
969
+ .error-maxlength,
970
+ .error-min,
971
+ .error-max,
972
+ .error-async,
973
+ .error-number,
974
+ .error-date,
975
+ .error-time,
976
+ .error-datetime,
977
+ .error-email,
978
+ .error-url,
979
+ .error-week,
980
+ .error-month,
981
+ .error-datetimelocal {
982
+ display: none;
983
+ }
984
+
985
+ .ng-invalid-required ~ .error-messages > .error-required,
986
+ .ng-invalid-pattern ~ .error-messages > .error-pattern,
987
+ .ng-invalid-minlength ~ .error-messages > .error-minlength,
988
+ .ng-invalid-maxlength ~ .error-messages > .error-maxlength,
989
+ .ng-invalid-min ~ .error-messages > .error-min,
990
+ .ng-invalid-max ~ .error-messages > .error-max,
991
+ .ng-invalid-async ~ .error-messages > .error-async,
992
+ .ng-invalid-number ~ .error-messages > .error-number,
993
+ .ng-invalid-date ~ .error-messages > .error-date,
994
+ .ng-invalid-time ~ .error-messages > .error-time,
995
+ .ng-invalid-datetime ~ .error-messages > .error-datetime,
996
+ .ng-invalid-email ~ .error-messages > .error-email,
997
+ .ng-invalid-url ~ .error-messages > .error-url,
998
+ .ng-invalid-week ~ .error-messages > .error-week,
999
+ .ng-invalid-month ~ .error-messages > .error-month,
1000
+ .ng-invalid-datetimelocal ~ .error-messages > .error-datetimelocal {
1001
+ display: block;
1002
+ }
1003
+
1004
+ .ng-invalid-required ~ .alert-danger > .error-required,
1005
+ .ng-invalid-pattern ~ .alert-danger > .error-pattern,
1006
+ .ng-invalid-minlength ~ .alert-danger > .error-minlength,
1007
+ .ng-invalid-maxlength ~ .alert-danger > .error-maxlength,
1008
+ .ng-invalid-min ~ .alert-danger > .error-min,
1009
+ .ng-invalid-max ~ .alert-danger > .error-max,
1010
+ .ng-invalid-async ~ .alert-danger > .error-async,
1011
+ .ng-invalid-number ~ .alert-danger > .error-number,
1012
+ .ng-invalid-date ~ .alert-danger > .error-date,
1013
+ .ng-invalid-time ~ .alert-danger > .error-time,
1014
+ .ng-invalid-datetime ~ .alert-danger > .error-datetime,
1015
+ .ng-invalid-email ~ .alert-danger > .error-email,
1016
+ .ng-invalid-url ~ .alert-danger > .error-url,
1017
+ .ng-invalid-week ~ .alert-danger > .error-week,
1018
+ .ng-invalid-month ~ .alert-danger > .error-month,
1019
+ .ng-invalid-datetimelocal ~ .alert-danger > .error-datetimelocal {
1020
+ display: block;
1021
+ }
1022
+
1023
+ .form-control-placeholder {
1024
+ text-overflow: ellipsis;
1025
+ overflow: hidden;
1026
+ .np-text-body-large;
1027
+ display: block;
1028
+ width: 100%;
1029
+ color: var(--color-content-tertiary);
1030
+ }
1031
+
1032
+ .np-theme-personal {
1033
+ .btn-input,
1034
+ .input-group,
1035
+ .form-control,
1036
+ .input-group-addon,
1037
+ .radio > label,
1038
+ .checkbox > label {
1039
+ background-color: unset;
1040
+ border: none !important;
1041
+ border-radius: var(--radius-small);
1042
+ }
1043
+
1044
+ .btn-input,
1045
+ .input-group,
1046
+ .form-control,
1047
+ .radio > label,
1048
+ .checkbox > label {
1049
+ box-shadow: inset 0 0 0 1px var(--color-interactive-secondary);
1050
+ transition: box-shadow 0.3s ease-in-out;
1051
+ }
1052
+
1053
+ .input-group > .form-control,
1054
+ .input-group > .btn-input,
1055
+ .typeahead__input-container .form-control {
1056
+ box-shadow: none !important;
1057
+ }
1058
+
1059
+ .btn-input:not(.disabled, :disabled),
1060
+ .input-group:not(.disabled, :disabled),
1061
+ .form-control:not(.disabled, :disabled),
1062
+ .radio > label:not(.disabled, :disabled),
1063
+ .checkbox > label:not(.disabled, :disabled) {
1064
+ &:hover {
1065
+ box-shadow: inset 0 0 0 2px var(--color-interactive-secondary-hover);
1066
+ &:has(:checked, .checked) {
1067
+ box-shadow: inset 0 0 0 2px var(--color-interactive-primary-hover);
1068
+ }
1069
+ }
1070
+ }
1071
+
1072
+ .btn-input:not(.disabled, :disabled):focus-visible,
1073
+ .btn-input:not(.disabled, :disabled):has(:focus-visible),
1074
+ .input-group:not(.disabled, :disabled):focus-visible,
1075
+ .input-group:not(.disabled, :disabled):has(.form-control:focus-visible, .btn-input:focus-visible),
1076
+ .form-control:not(.disabled, :disabled):focus-visible,
1077
+ .form-control:not(.disabled, :disabled):has(:focus-visible),
1078
+ .radio > label:not(.disabled, :disabled):focus-visible,
1079
+ .radio > label:not(.disabled, :disabled):has(:focus-visible),
1080
+ .checkbox > label:not(.disabled, :disabled):focus-visible,
1081
+ .checkbox > label:not(.disabled, :disabled):has(:focus-visible) {
1082
+ box-shadow: inset 0 0 0 3px var(--color-interactive-primary);
1083
+ }
1084
+
1085
+ .has-error {
1086
+ .btn-input,
1087
+ .input-group,
1088
+ .form-control,
1089
+ .radio > label,
1090
+ .checkbox > label {
1091
+ box-shadow: inset 0 0 0 2px var(--color-sentiment-negative);
1092
+ }
1093
+
1094
+ .input-group:not(.disabled, :disabled):hover,
1095
+ .form-control:not(.disabled, :disabled):hover,
1096
+ .radio > label:not(.disabled, :disabled):hover,
1097
+ .checkbox > label:not(.disabled, :disabled):hover {
1098
+ box-shadow: inset 0 0 0 2px var(--color-sentiment-negative-hover);
1099
+ }
1100
+
1101
+ .input-group:not(.disabled, :disabled):active,
1102
+ .input-group:not(.disabled, :disabled):focus-visible,
1103
+ .input-group:not(.disabled, :disabled):has(:focus-visible),
1104
+ .form-control:not(.disabled, :disabled):active,
1105
+ .form-control:not(.disabled, :disabled):focus-visible,
1106
+ .form-control:not(.disabled, :disabled):has(:focus-visible),
1107
+ .radio > label:not(.disabled, :disabled):active,
1108
+ .radio > label:not(.disabled, :disabled):focus-visible,
1109
+ .radio > label:not(.disabled, :disabled):has(:focus-visible),
1110
+ .checkbox > label:not(.disabled, :disabled):active,
1111
+ .checkbox > label:not(.disabled, :disabled):focus-visible,
1112
+ .checkbox > label:not(.disabled, :disabled):has(:focus-visible) {
1113
+ box-shadow: inset 0 0 0 3px var(--color-sentiment-negative);
1114
+ }
1115
+
1116
+ .tw-radio-button {
1117
+ border-color: var(--color-sentiment-negative) !important;
1118
+
1119
+ &.checked {
1120
+ box-shadow: inset 0 0 0 1px var(--color-sentiment-negative);
1121
+ }
1122
+
1123
+ &.checked .tw-radio-check {
1124
+ background: var(--color-sentiment-negative) !important;
1125
+ }
1126
+ }
1127
+
1128
+ .checkbox:hover .tw-checkbox-button,
1129
+ .radio:not(.disabled):hover .tw-radio-button,
1130
+ .tw-checkbox-button:not(.disabled,:disabled):hover,
1131
+ input[type=checkbox]:hover+.tw-checkbox-button,
1132
+ input[type=radio]:not(.disabled,:disabled):hover+.tw-radio-button,
1133
+ input[type=checkbox]:not(.disabled,:disabled):hover+.tw-checkbox-button {
1134
+ box-shadow: inset 0 0 0 2px var(--color-sentiment-negative-hover);
1135
+ }
1136
+
1137
+ .tw-checkbox-button.checked,
1138
+ .tw-checkbox-button:checked,
1139
+ input[type=checkbox]:checked+.tw-checkbox-button,
1140
+ .tw-checkbox-button.checked:hover,
1141
+ .tw-checkbox-button:checked:hover,
1142
+ input[type=checkbox]:not(.disabled,:disabled):checked:hover+.tw-checkbox-button {
1143
+ box-shadow: inset 0 0 0 3px var(--color-sentiment-negative);
1144
+ background: var(--color-sentiment-negative);
1145
+ }
1146
+
1147
+ .checkbox>label:not(.disabled,:disabled):active input[type=checkbox]+.tw-checkbox-button,
1148
+ .checkbox>label:not(.disabled,:disabled):focus-visible input[type=checkbox]+.tw-checkbox-button,
1149
+ .checkbox>label:not(.disabled,:disabled):has(:focus-visible) input[type=checkbox]+.tw-checkbox-button {
1150
+ box-shadow: inset 0 0 0 2px var(--color-sentiment-negative-active);
1151
+ }
1152
+ }
1153
+
1154
+ .tw-radio-button,
1155
+ .tw-checkbox-button {
1156
+ background-color: unset;
1157
+ color: unset;
1158
+ transition: background-color 0.3s ease-in-out, box-shadow 0.3s ease-in-out;
1159
+ }
1160
+
1161
+ .btn-input:hover,
1162
+ .btn-input:active,
1163
+ .btn-input:focus,
1164
+ .btn-input:focus,
1165
+ .btn-input:focus-within,
1166
+ &.open .btn-input {
1167
+ background-color: unset !important;
1168
+ }
1169
+
1170
+ .form-group label {
1171
+ margin-bottom: var(--padding-x-small);
1172
+ }
1173
+
1174
+ .form-group .np-upload-input label {
1175
+ margin-bottom: 0;
1176
+ }
1177
+
1178
+ .form-group:focus-within .control-label,
1179
+ .form-group:focus-within > label,
1180
+ .has-warning .control-label,
1181
+ .has-warning label,
1182
+ .has-success .control-label,
1183
+ .has-success label {
1184
+ color: var(--color-content-secondary) !important;
1185
+ }
1186
+
1187
+ .has-error .control-label,
1188
+ .has-error label {
1189
+ color: var(--color-sentiment-negative) !important;
1190
+ }
1191
+
1192
+ .form-group .alert:before,
1193
+ .error-messages:before {
1194
+ content: none;
1195
+ }
1196
+
1197
+ .error-messages,
1198
+ .alert-detach {
1199
+ color: var(--color-content-secondary);
1200
+
1201
+ line-height: var(--line-height-control);
1202
+ margin: var(--padding-x-small) 0;
1203
+ padding: 0;
1204
+ background-color: unset;
1205
+ }
1206
+
1207
+ .has-error .error-messages,
1208
+ .has-error .alert-detach.alert-danger {
1209
+ color: var(--color-sentiment-negative);
1210
+ display: flex;
1211
+
1212
+ .tw-icon {
1213
+ margin-right: var(--padding-x-small);
1214
+ }
1215
+ }
1216
+ }
1217
+
1218
+ .has-required {
1219
+ &::after {
1220
+ content: "\00a0*";
1221
+ color: var(--color-content-negative);
1222
+
1223
+ .np-theme-personal & {
1224
+ color: var(--color-sentiment-negative);
1225
+ }
1226
+ }
1227
+ }