@neo-design/foundations 1.0.0-rc.4

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 (50) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +18 -0
  3. package/css/alert.css +133 -0
  4. package/css/aspect-ratio.css +32 -0
  5. package/css/badge.css +57 -0
  6. package/css/banner.css +220 -0
  7. package/css/button-icon.css +14 -0
  8. package/css/button.css +174 -0
  9. package/css/checkbox.css +124 -0
  10. package/css/chips-group.css +26 -0
  11. package/css/chips.css +88 -0
  12. package/css/combobox.css +229 -0
  13. package/css/empty-state.css +149 -0
  14. package/css/index.css +36 -0
  15. package/css/link.css +39 -0
  16. package/css/menu.css +112 -0
  17. package/css/modal-dialog.css +204 -0
  18. package/css/modal-fullscreen.css +145 -0
  19. package/css/radio-button.css +132 -0
  20. package/css/select.css +181 -0
  21. package/css/snackbar.css +85 -0
  22. package/css/spinner.css +21 -0
  23. package/css/tabs.css +126 -0
  24. package/css/tag.css +38 -0
  25. package/css/text-field.css +224 -0
  26. package/css/toggle.css +53 -0
  27. package/css/tooltip.css +32 -0
  28. package/icon-aliases.mjs +57 -0
  29. package/icons/README.md +84 -0
  30. package/icons/icons.css +16 -0
  31. package/icons/index.json +843 -0
  32. package/icons/sprite.mjs +2 -0
  33. package/package.json +44 -0
  34. package/tokens/_brand.mjs +3 -0
  35. package/tokens/_primitives.mjs +44 -0
  36. package/tokens/_util.mjs +12 -0
  37. package/tokens/api-js.mjs +11 -0
  38. package/tokens/breakpoints.mjs +8 -0
  39. package/tokens/color-semantic.mjs +47 -0
  40. package/tokens/color.mjs +58 -0
  41. package/tokens/component-tokens.mjs +24 -0
  42. package/tokens/container.mjs +8 -0
  43. package/tokens/iconSize.mjs +18 -0
  44. package/tokens/neo-color.css +97 -0
  45. package/tokens/neo-foundations.css +250 -0
  46. package/tokens/radius.mjs +18 -0
  47. package/tokens/shadows.mjs +14 -0
  48. package/tokens/spacing.mjs +21 -0
  49. package/tokens/stroke.mjs +15 -0
  50. package/tokens/typography.mjs +59 -0
package/css/menu.css ADDED
@@ -0,0 +1,112 @@
1
+ /* packages/foundations/css/menu.css — emitted without comments. The reasoning behind each decision lives in Neo's source repository. */
2
+
3
+ .menu-anchor {
4
+ position: relative;
5
+ display: inline-block;
6
+ }
7
+
8
+
9
+ .menu-list {
10
+ position: absolute;
11
+ top: calc(100% + var(--neo-space-sm-rem));
12
+ left: 0;
13
+ width: 100%;
14
+ min-width: 200px;
15
+ z-index: 10;
16
+ list-style: none;
17
+ margin: 0;
18
+ padding-block: 0;
19
+ padding-inline: 0;
20
+ background: var(--surface--base--default);
21
+ border: var(--neo-stroke-xs) solid var(--border--base--secondary);
22
+ border-radius: var(--neo-radius-sm);
23
+ box-shadow: var(--neo-elevation-md);
24
+ overflow: hidden;
25
+ }
26
+
27
+ .menu-list--scroll {
28
+ max-height: 260px;
29
+ overflow-y: auto;
30
+ }
31
+
32
+ .menu-list--scroll::-webkit-scrollbar {
33
+ width: 4px;
34
+ }
35
+ .menu-list--scroll::-webkit-scrollbar-track {
36
+ background: var(--fill--base--default);
37
+ border-radius: var(--neo-radius-pill);
38
+ }
39
+ .menu-list--scroll::-webkit-scrollbar-thumb {
40
+ background: var(--fill--base--medium);
41
+ border-radius: var(--neo-radius-pill);
42
+ }
43
+
44
+
45
+ .menu-item {
46
+ display: flex;
47
+ align-items: center;
48
+ gap: var(--neo-space-md-rem);
49
+ min-height: 40px;
50
+ padding-block: var(--neo-space-sm-rem);
51
+ padding-inline: var(--neo-space-lg-rem);
52
+ background: var(--fill--tertiary--default);
53
+ cursor: pointer;
54
+ }
55
+
56
+ .menu-item:hover {
57
+ background: var(--fill--tertiary--hover);
58
+ }
59
+
60
+ .menu-item:focus-visible {
61
+ outline: none;
62
+ border-radius: calc(var(--neo-radius-sm) - var(--neo-stroke-xs));
63
+ box-shadow:
64
+ inset 0 0 0 var(--neo-stroke-focus-ring-width) var(--focus--ring--default),
65
+ inset 0 0 0 calc(var(--neo-stroke-focus-ring-width) * 2) var(--focus--gap--default);
66
+ }
67
+
68
+ .menu-item--active {
69
+ background: var(--fill--tertiary--active);
70
+ }
71
+
72
+ .menu-item--disabled {
73
+ background: var(--fill--base--disabled);
74
+ cursor: not-allowed;
75
+ pointer-events: none;
76
+ }
77
+
78
+ .menu-item__label {
79
+ flex: 1;
80
+ font-size: var(--neo-type-body-lg-regular-size-rem);
81
+ font-weight: var(--neo-type-body-lg-regular-weight);
82
+ line-height: var(--neo-type-body-lg-regular-line-height-rem);
83
+ color: var(--text--base--default);
84
+ overflow: hidden;
85
+ text-overflow: ellipsis;
86
+ white-space: nowrap;
87
+ }
88
+
89
+ .menu-item--disabled .menu-item__label {
90
+ color: var(--text--base--disabled);
91
+ }
92
+
93
+ .menu-item__icon {
94
+ flex-shrink: 0;
95
+ width: var(--neo-icon-size-md-rem);
96
+ height: var(--neo-icon-size-md-rem);
97
+ fill: var(--icon--base--default);
98
+ color: var(--icon--base--default);
99
+ }
100
+
101
+ .menu-item--disabled .menu-item__icon {
102
+ fill: var(--icon--base--disabled);
103
+ color: var(--icon--base--disabled);
104
+ }
105
+
106
+
107
+ .menu-divider {
108
+ height: var(--neo-stroke-xs);
109
+ margin: 0;
110
+ border: none;
111
+ background: var(--border--base--secondary);
112
+ }
@@ -0,0 +1,204 @@
1
+ /* packages/foundations/css/modal-dialog.css — emitted without comments. The reasoning behind each decision lives in Neo's source repository. */
2
+
3
+ .modal-overlay {
4
+ position: fixed;
5
+ inset: 0;
6
+ z-index: 1000;
7
+ background: var(--surface--base--overlay);
8
+ }
9
+
10
+ .modal-dialog {
11
+ position: fixed;
12
+ inset: 0;
13
+ margin: auto;
14
+ height: fit-content;
15
+ z-index: 1001;
16
+ display: flex;
17
+ flex-direction: column;
18
+ background: var(--surface--base--default);
19
+ border-radius: var(--neo-radius-xl);
20
+ width: calc(100% - 2 * var(--neo-space-lg-rem));
21
+ overflow: hidden;
22
+ }
23
+
24
+ .modal-dialog--xs { max-width: 440px; max-height: 600px; }
25
+ .modal-dialog--sm { max-width: 600px; max-height: 700px; }
26
+ .modal-dialog--md { max-width: 900px; max-height: 740px; }
27
+ .modal-dialog--lg { max-width: 1200px; max-height: 840px; }
28
+
29
+ .modal-dialog--xs { --modal-dialog-gutter: var(--neo-space-lg-rem); }
30
+ .modal-dialog--sm,
31
+ .modal-dialog--md { --modal-dialog-gutter: var(--neo-space-xl-rem); }
32
+ .modal-dialog--lg { --modal-dialog-gutter: var(--neo-space-2xl-rem); }
33
+
34
+ .modal-dialog--xs { --modal-dialog-close-gutter: var(--neo-space-sm-rem); --modal-dialog-content-top: var(--neo-space-sm-rem); --modal-dialog-content-bottom: var(--neo-space-lg-rem); }
35
+ .modal-dialog--sm { --modal-dialog-close-gutter: var(--neo-space-sm-rem); --modal-dialog-content-top: var(--neo-space-sm-rem); --modal-dialog-content-bottom: var(--neo-space-xl-rem); }
36
+ .modal-dialog--md { --modal-dialog-close-gutter: var(--neo-space-lg-rem); --modal-dialog-content-top: var(--neo-space-none-rem); --modal-dialog-content-bottom: var(--neo-space-xl-rem); }
37
+ .modal-dialog--lg { --modal-dialog-close-gutter: var(--neo-space-lg-rem); --modal-dialog-content-top: var(--neo-space-none-rem); --modal-dialog-content-bottom: var(--neo-space-xl-rem); }
38
+
39
+
40
+ .modal-dialog__header {
41
+ position: relative;
42
+ display: flex;
43
+ align-items: flex-start;
44
+ gap: var(--neo-space-md-rem);
45
+ padding: var(--neo-space-lg-rem) var(--modal-dialog-close-gutter) var(--neo-space-lg-rem) var(--modal-dialog-gutter);
46
+ }
47
+
48
+ .modal-dialog__title {
49
+ flex: 1;
50
+ margin: 0;
51
+ font-size: var(--neo-type-title-sm-bold-size-rem);
52
+ font-weight: var(--neo-type-title-sm-bold-weight);
53
+ line-height: var(--neo-type-title-sm-bold-line-height-rem);
54
+ color: var(--text--base--default);
55
+ min-width: 0;
56
+ display: -webkit-box;
57
+ -webkit-box-orient: vertical;
58
+ -webkit-line-clamp: 2;
59
+ overflow: hidden;
60
+ }
61
+
62
+
63
+ .modal-dialog__close {
64
+ position: absolute;
65
+ top: var(--neo-space-sm-rem);
66
+ right: var(--neo-space-sm-rem);
67
+ padding: 0;
68
+ border: none;
69
+ background: none;
70
+ color: inherit;
71
+ cursor: pointer;
72
+ flex: none;
73
+ display: flex;
74
+ align-items: center;
75
+ justify-content: center;
76
+ width: var(--neo-icon-size-xl-rem);
77
+ height: var(--neo-icon-size-xl-rem);
78
+ border-radius: var(--neo-radius-pill);
79
+ }
80
+
81
+ .modal-dialog__close:focus-visible {
82
+ outline: var(--neo-stroke-focus-ring-width) solid var(--focus--ring--default);
83
+ outline-offset: 2px;
84
+ }
85
+
86
+ .modal-dialog__close svg {
87
+ fill: var(--icon--base--default);
88
+ color: var(--icon--base--default);
89
+ width: var(--neo-icon-size-sm-rem);
90
+ height: var(--neo-icon-size-sm-rem);
91
+ }
92
+
93
+ .modal-dialog--info .modal-dialog__header { background: var(--fill--semantic--info--soft); }
94
+ .modal-dialog--success .modal-dialog__header { background: var(--fill--semantic--success--soft); }
95
+ .modal-dialog--warning .modal-dialog__header { background: var(--fill--semantic--warning--soft); }
96
+ .modal-dialog--error .modal-dialog__header { background: var(--fill--semantic--error--soft); }
97
+
98
+ .modal-dialog--brand .modal-dialog__title,
99
+ .modal-dialog--info .modal-dialog__title,
100
+ .modal-dialog--success .modal-dialog__title,
101
+ .modal-dialog--warning .modal-dialog__title,
102
+ .modal-dialog--error .modal-dialog__title { flex: none; }
103
+
104
+ .modal-dialog--brand .modal-dialog__title { color: var(--text--base--brand); }
105
+ .modal-dialog--info .modal-dialog__title { color: var(--text--semantic--info); }
106
+ .modal-dialog--success .modal-dialog__title { color: var(--text--semantic--success); }
107
+ .modal-dialog--warning .modal-dialog__title { color: var(--text--semantic--warning); }
108
+ .modal-dialog--error .modal-dialog__title { color: var(--text--semantic--error); }
109
+
110
+ .modal-dialog--info .modal-dialog__icon,
111
+ .modal-dialog--success .modal-dialog__icon,
112
+ .modal-dialog--warning .modal-dialog__icon,
113
+ .modal-dialog--error .modal-dialog__icon {
114
+ width: var(--neo-icon-size-3xl-rem);
115
+ height: var(--neo-icon-size-3xl-rem);
116
+ flex: none;
117
+ }
118
+
119
+ .modal-dialog--brand .modal-dialog__icon {
120
+ width: var(--neo-icon-size-4xl-rem);
121
+ height: var(--neo-icon-size-4xl-rem);
122
+ flex: none;
123
+ }
124
+
125
+ .modal-dialog--brand .modal-dialog__header,
126
+ .modal-dialog--info .modal-dialog__header,
127
+ .modal-dialog--success .modal-dialog__header,
128
+ .modal-dialog--warning .modal-dialog__header,
129
+ .modal-dialog--error .modal-dialog__header {
130
+ flex-direction: column;
131
+ align-items: center;
132
+ justify-content: center;
133
+ text-align: center;
134
+ padding: var(--neo-space-2xl-rem) var(--modal-dialog-gutter) var(--neo-space-xl-rem);
135
+ }
136
+
137
+ .modal-dialog--brand .modal-dialog__header {
138
+ padding-bottom: var(--neo-space-md-rem);
139
+ }
140
+
141
+ .modal-dialog--info .modal-dialog__header,
142
+ .modal-dialog--success .modal-dialog__header,
143
+ .modal-dialog--warning .modal-dialog__header,
144
+ .modal-dialog--error .modal-dialog__header {
145
+ border-bottom-left-radius: 50% 14px;
146
+ border-bottom-right-radius: 50% 14px;
147
+ }
148
+
149
+
150
+ .modal-dialog__content {
151
+ flex: 1 1 auto;
152
+ min-height: 0;
153
+ overflow-y: auto;
154
+ display: flex;
155
+ flex-direction: column;
156
+ gap: var(--neo-space-lg-rem);
157
+ padding: var(--modal-dialog-content-top) var(--modal-dialog-gutter) var(--modal-dialog-content-bottom);
158
+ }
159
+ .modal-dialog__content:focus-visible {
160
+ outline: none;
161
+ box-shadow:
162
+ inset 0 0 0 var(--neo-stroke-focus-ring-width) var(--focus--ring--default),
163
+ inset 0 0 0 calc(var(--neo-stroke-focus-ring-width) * 2) var(--focus--gap--default);
164
+ }
165
+
166
+ .modal-dialog__description {
167
+ margin: 0;
168
+ font-size: var(--neo-type-body-lg-regular-size-rem);
169
+ font-weight: var(--neo-type-body-lg-regular-weight);
170
+ line-height: var(--neo-type-body-lg-regular-line-height-rem);
171
+ color: var(--text--base--default);
172
+ }
173
+
174
+ .modal-dialog--brand .modal-dialog__description,
175
+ .modal-dialog--info .modal-dialog__description,
176
+ .modal-dialog--success .modal-dialog__description,
177
+ .modal-dialog--warning .modal-dialog__description,
178
+ .modal-dialog--error .modal-dialog__description {
179
+ text-align: center;
180
+ }
181
+
182
+ .modal-dialog__slot {
183
+ border-radius: var(--neo-radius-xs);
184
+ }
185
+
186
+
187
+ .modal-dialog__actions {
188
+ flex: none;
189
+ display: flex;
190
+ gap: var(--neo-space-md-rem);
191
+ padding: var(--neo-space-lg-rem) var(--modal-dialog-gutter) var(--modal-dialog-gutter);
192
+ }
193
+
194
+ .modal-dialog--xs .modal-dialog__actions {
195
+ flex-direction: column;
196
+ }
197
+ .modal-dialog--xs .modal-dialog__actions > .btn {
198
+ width: 100%;
199
+ }
200
+ .modal-dialog--sm .modal-dialog__actions,
201
+ .modal-dialog--md .modal-dialog__actions,
202
+ .modal-dialog--lg .modal-dialog__actions {
203
+ justify-content: flex-end;
204
+ }
@@ -0,0 +1,145 @@
1
+ /* packages/foundations/css/modal-fullscreen.css — emitted without comments. The reasoning behind each decision lives in Neo's source repository. */
2
+
3
+ .modal-full {
4
+ position: fixed;
5
+ inset: 0;
6
+ z-index: 1300;
7
+ display: grid;
8
+ grid-template-rows: auto 1fr auto;
9
+ height: 100dvh;
10
+ background: var(--surface--base--default);
11
+ }
12
+
13
+ .modal-full__header {
14
+ position: relative;
15
+ display: flex;
16
+ align-items: center;
17
+ gap: var(--neo-space-none-rem);
18
+ height: 104px;
19
+ padding-block: var(--neo-space-xl-rem);
20
+ padding-inline: var(--neo-space-3xl-rem);
21
+ border-bottom: var(--neo-stroke-xs) solid var(--border--base--secondary);
22
+ }
23
+
24
+ .modal-full__title {
25
+ margin: 0;
26
+ flex: 1;
27
+ text-align: center;
28
+ color: var(--text--base--default);
29
+ font-size: var(--neo-type-title-md-bold-size-rem);
30
+ font-weight: var(--neo-type-title-md-bold-weight);
31
+ line-height: var(--neo-type-title-md-bold-line-height-rem);
32
+ }
33
+
34
+ .modal-full__back { position: absolute; left: var(--neo-space-3xl-rem); }
35
+ .modal-full__close { position: absolute; right: var(--neo-space-3xl-rem); }
36
+
37
+ .modal-full__actions .btn { flex: 0 0 auto; width: 240px; }
38
+
39
+ .modal-full__close,
40
+ .modal-full__back {
41
+ display: inline-flex;
42
+ align-items: center;
43
+ justify-content: center;
44
+ width: 48px;
45
+ height: 48px;
46
+ padding: 0;
47
+ border: none;
48
+ background: transparent;
49
+ color: var(--icon--base--default);
50
+ cursor: pointer;
51
+ }
52
+
53
+ .modal-full__close:focus-visible,
54
+ .modal-full__back:focus-visible {
55
+ outline: var(--neo-stroke-focus-ring-width) solid var(--focus--ring--default);
56
+ outline-offset: 2px;
57
+ }
58
+
59
+ .modal-full__close svg,
60
+ .modal-full__back svg { width: 24px; height: 24px; }
61
+
62
+ .modal-full__content {
63
+ display: grid;
64
+ grid-auto-rows: minmax(min-content, 1fr);
65
+ overflow-y: auto;
66
+ padding-inline: var(--neo-space-3xl-rem);
67
+ padding-block: var(--neo-space-none-rem) var(--neo-space-xl-rem);
68
+ }
69
+
70
+ .modal-full__content::-webkit-scrollbar { width: 8px; }
71
+ .modal-full__content::-webkit-scrollbar-track { background: var(--fill--base--default); }
72
+ .modal-full__content::-webkit-scrollbar-thumb { background: var(--fill--base--medium); border-radius: var(--neo-radius-pill); }
73
+ .modal-full__content:focus-visible {
74
+ outline: none;
75
+ box-shadow:
76
+ inset 0 0 0 var(--neo-stroke-focus-ring-width) var(--focus--ring--default),
77
+ inset 0 0 0 calc(var(--neo-stroke-focus-ring-width) * 2) var(--focus--gap--default);
78
+ }
79
+
80
+ .modal-full__actions {
81
+ display: flex;
82
+ justify-content: center;
83
+ align-items: center;
84
+ gap: var(--neo-space-md-rem);
85
+ height: 88px;
86
+ padding-block: var(--neo-space-xl-rem);
87
+ padding-inline: var(--neo-space-3xl-rem);
88
+ border-top: var(--neo-stroke-xs) solid var(--border--base--secondary);
89
+ }
90
+
91
+ @media (max-width: 719px) {
92
+ .modal-full__header {
93
+ height: 60px;
94
+ padding: var(--neo-space-sm-rem);
95
+ border-bottom: none;
96
+ }
97
+
98
+ .modal-full__title {
99
+ font-size: var(--neo-type-body-lg-bold-size-rem);
100
+ font-weight: var(--neo-type-body-lg-bold-weight);
101
+ line-height: var(--neo-type-body-lg-bold-line-height-rem);
102
+ }
103
+
104
+ .modal-full__header {
105
+ justify-content: flex-start;
106
+ gap: var(--neo-space-sm-rem);
107
+ }
108
+
109
+ .modal-full__back,
110
+ .modal-full__close { position: static; }
111
+
112
+ .modal-full__title {
113
+ flex: 1;
114
+ text-align: center;
115
+ margin-inline-end: 0;
116
+ }
117
+
118
+ .modal-full__title:first-child { text-align: start; }
119
+
120
+ .modal-full__close,
121
+ .modal-full__back { width: 40px; height: 40px; }
122
+ .modal-full__close svg,
123
+ .modal-full__back svg { width: 20px; height: 20px; }
124
+
125
+ .modal-full__content[data-scroll="mid"],
126
+ .modal-full__content[data-scroll="bottom"] { border-top: var(--neo-stroke-xs) solid var(--border--base--secondary); }
127
+ .modal-full__content[data-scroll="top"],
128
+ .modal-full__content[data-scroll="mid"] { border-bottom: var(--neo-stroke-xs) solid var(--border--base--secondary); }
129
+
130
+ .modal-full__content {
131
+ padding-inline: var(--neo-space-lg-rem);
132
+ padding-block: var(--neo-space-none-rem) var(--neo-space-lg-rem);
133
+ }
134
+
135
+ .modal-full__actions {
136
+ border-top: none;
137
+ flex-direction: column-reverse;
138
+ justify-content: center;
139
+ height: 128px;
140
+ padding-block: var(--neo-space-md-rem) var(--neo-space-xl-rem);
141
+ padding-inline: var(--neo-space-lg-rem);
142
+ }
143
+
144
+ .modal-full__actions .btn { width: 100%; }
145
+ }
@@ -0,0 +1,132 @@
1
+ /* packages/foundations/css/radio-button.css — emitted without comments. The reasoning behind each decision lives in Neo's source repository. */
2
+
3
+ .radio {
4
+ display: inline-flex;
5
+ align-items: center;
6
+ gap: 0;
7
+ cursor: pointer;
8
+ min-height: 2.75rem;
9
+ }
10
+
11
+ .radio__wrapper {
12
+ position: relative;
13
+ display: flex;
14
+ align-items: center;
15
+ justify-content: center;
16
+ width: 2.5rem;
17
+ height: 2.75rem;
18
+ flex-shrink: 0;
19
+ }
20
+
21
+ .radio__wrapper input[type="radio"] {
22
+ position: absolute;
23
+ inset: 0;
24
+ margin: 0;
25
+ opacity: 0;
26
+ cursor: pointer;
27
+ }
28
+
29
+ .radio__control {
30
+ width: 1.5rem;
31
+ height: 1.5rem;
32
+ border-radius: var(--neo-radius-pill);
33
+ border: var(--neo-stroke-xs) solid var(--border--base--default);
34
+ background: var(--fill--base--default);
35
+ display: flex;
36
+ align-items: center;
37
+ justify-content: center;
38
+ flex-shrink: 0;
39
+ transition: background 100ms ease, border-color 100ms ease;
40
+ position: relative;
41
+ }
42
+
43
+ .radio__dot {
44
+ width: 0.625rem;
45
+ height: 0.625rem;
46
+ border-radius: var(--neo-radius-pill);
47
+ background: var(--icon--base--contrast);
48
+ display: none;
49
+ }
50
+
51
+ .radio__label {
52
+ font-size: var(--neo-type-body-lg-regular-size-rem);
53
+ font-weight: var(--neo-type-body-lg-regular-weight);
54
+ line-height: var(--neo-type-body-lg-regular-line-height-rem);
55
+ color: var(--text--base--default);
56
+ }
57
+
58
+ .radio:hover .radio__control {
59
+ border-color: var(--border--base--focus);
60
+ }
61
+
62
+ .radio--selected .radio__control,
63
+ input[type="radio"]:checked + .radio__control {
64
+ background: var(--icon--base--default);
65
+ border-color: var(--icon--base--default);
66
+ }
67
+
68
+ .radio--selected .radio__dot,
69
+ input[type="radio"]:checked + .radio__control .radio__dot {
70
+ display: block;
71
+ }
72
+
73
+ input[type="radio"]:focus-visible + .radio__control {
74
+ outline: var(--neo-stroke-focus-ring-width) solid var(--focus--ring--default);
75
+ outline-offset: 0.125rem;
76
+ box-shadow: 0 0 0 var(--neo-stroke-focus-ring-width) var(--focus--gap--default);
77
+ }
78
+
79
+ .radio--disabled {
80
+ cursor: not-allowed;
81
+ pointer-events: none;
82
+ }
83
+
84
+ .radio--disabled .radio__control {
85
+ background: var(--fill--base--light);
86
+ border-color: var(--border--base--disabled);
87
+ }
88
+
89
+ .radio--selected.radio--disabled .radio__control {
90
+ background: var(--icon--base--disabled);
91
+ border-color: var(--icon--base--disabled);
92
+ }
93
+
94
+ .radio--disabled .radio__label {
95
+ color: var(--text--base--disabled);
96
+ }
97
+
98
+ .radio-group {
99
+ display: flex;
100
+ flex-direction: column;
101
+ gap: var(--neo-space-xs-rem);
102
+ margin: 0;
103
+ padding: 0;
104
+ border: none;
105
+ min-width: 0;
106
+ }
107
+
108
+ .radio-group__legend {
109
+ margin: 0 0 var(--neo-space-xs-rem);
110
+ padding: 0;
111
+ color: var(--text--base--default);
112
+ font-size: var(--neo-type-body-lg-regular-size-rem);
113
+ font-weight: var(--neo-type-body-lg-regular-weight);
114
+ line-height: var(--neo-type-body-lg-regular-line-height-rem);
115
+ }
116
+
117
+ .radio-group--horizontal {
118
+ flex-direction: row;
119
+ flex-wrap: wrap;
120
+ }
121
+
122
+ .radio--hidden-label .radio__label {
123
+ position: absolute;
124
+ width: 1px;
125
+ height: 1px;
126
+ margin: -1px;
127
+ padding: 0;
128
+ overflow: hidden;
129
+ clip: rect(0 0 0 0);
130
+ white-space: nowrap;
131
+ border: 0;
132
+ }