@neuravision/construct 1.1.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 (57) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +227 -0
  3. package/components/README.md +566 -0
  4. package/components/_keyframes.css +23 -0
  5. package/components/_shared.css +120 -0
  6. package/components/accordion.css +124 -0
  7. package/components/alert.css +67 -0
  8. package/components/avatar.css +127 -0
  9. package/components/badge.css +67 -0
  10. package/components/banner.css +247 -0
  11. package/components/breadcrumbs.css +152 -0
  12. package/components/button.css +145 -0
  13. package/components/card.css +76 -0
  14. package/components/checkbox.css +120 -0
  15. package/components/chip.css +361 -0
  16. package/components/combobox.css +385 -0
  17. package/components/components.css +2 -0
  18. package/components/data-table.css +93 -0
  19. package/components/datepicker.css +268 -0
  20. package/components/divider.css +73 -0
  21. package/components/drawer.css +167 -0
  22. package/components/dropdown.css +401 -0
  23. package/components/empty-state.css +97 -0
  24. package/components/field.css +42 -0
  25. package/components/file-upload.css +111 -0
  26. package/components/icon.css +31 -0
  27. package/components/index.css +49 -0
  28. package/components/input.css +64 -0
  29. package/components/list.css +474 -0
  30. package/components/modal.css +164 -0
  31. package/components/navbar.css +587 -0
  32. package/components/pagination.css +131 -0
  33. package/components/popover.css +231 -0
  34. package/components/progress-bar.css +56 -0
  35. package/components/select-menu.css +267 -0
  36. package/components/select.css +30 -0
  37. package/components/sidebar.css +183 -0
  38. package/components/skeleton.css +38 -0
  39. package/components/skip-link.css +38 -0
  40. package/components/slider.css +305 -0
  41. package/components/spinner.css +72 -0
  42. package/components/switch.css +82 -0
  43. package/components/table.css +139 -0
  44. package/components/tabs.css +147 -0
  45. package/components/textarea.css +16 -0
  46. package/components/toast.css +71 -0
  47. package/components/toggle-group.css +196 -0
  48. package/components/toolbar.css +222 -0
  49. package/components/tooltip.css +124 -0
  50. package/docs/guidelines.md +141 -0
  51. package/foundations.css +299 -0
  52. package/package.json +66 -0
  53. package/tokens/README.md +179 -0
  54. package/tokens/tokens.css +434 -0
  55. package/tokens/tokens.js +1188 -0
  56. package/tokens/tokens.json +810 -0
  57. package/tokens/tokens.ts +1188 -0
@@ -0,0 +1,231 @@
1
+ /* ─── Popover ─────────────────────────────────────────────────────── */
2
+
3
+ .ct-popover {
4
+ position: relative;
5
+ display: inline-flex;
6
+ }
7
+
8
+ .ct-popover__content {
9
+ --_po-offset: calc(100% + var(--space-3));
10
+ --_po-width: min(var(--ct-popover-width), calc(100vw - var(--space-8)));
11
+ --_po-arrow-size: 8px;
12
+
13
+ position: absolute;
14
+ z-index: var(--z-dropdown);
15
+ width: var(--_po-width);
16
+ border-radius: var(--ct-popover-radius);
17
+ border: var(--border-thin) solid var(--ct-popover-border);
18
+ background: var(--ct-popover-bg);
19
+ box-shadow: var(--ct-popover-shadow);
20
+ opacity: 0;
21
+ visibility: hidden;
22
+ pointer-events: none;
23
+ transition: opacity var(--duration-fast) var(--easing-standard),
24
+ transform var(--duration-fast) var(--easing-standard),
25
+ visibility 0s linear var(--duration-fast);
26
+ }
27
+
28
+ .ct-popover[data-state='open'] .ct-popover__content {
29
+ opacity: 1;
30
+ visibility: visible;
31
+ pointer-events: auto;
32
+ transition: opacity var(--duration-fast) var(--easing-standard),
33
+ transform var(--duration-fast) var(--easing-standard),
34
+ visibility 0s linear 0s;
35
+ }
36
+
37
+ /* Size variants */
38
+
39
+ .ct-popover--sm .ct-popover__content {
40
+ --_po-width: min(240px, calc(100vw - var(--space-8)));
41
+ }
42
+
43
+ .ct-popover--lg .ct-popover__content {
44
+ --_po-width: min(480px, calc(100vw - var(--space-8)));
45
+ }
46
+
47
+ /* ── Side positioning ─────────────────────────────────────────────── */
48
+
49
+ .ct-popover[data-side='bottom'] .ct-popover__content {
50
+ inset-block-start: var(--_po-offset);
51
+ }
52
+
53
+ .ct-popover[data-side='top'] .ct-popover__content {
54
+ inset-block-end: var(--_po-offset);
55
+ }
56
+
57
+ .ct-popover[data-side='left'] .ct-popover__content {
58
+ inset-inline-end: var(--_po-offset);
59
+ inset-block-start: 50%;
60
+ }
61
+
62
+ .ct-popover[data-side='right'] .ct-popover__content {
63
+ inset-inline-start: var(--_po-offset);
64
+ inset-block-start: 50%;
65
+ }
66
+
67
+ /* ── Alignment (top / bottom sides) ───────────────────────────────── */
68
+
69
+ .ct-popover[data-side='top'][data-align='center'] .ct-popover__content,
70
+ .ct-popover[data-side='bottom'][data-align='center'] .ct-popover__content {
71
+ inset-inline-start: 50%;
72
+ transform: translate(-50%, 4px);
73
+ }
74
+
75
+ .ct-popover[data-side='top'][data-align='start'] .ct-popover__content,
76
+ .ct-popover[data-side='bottom'][data-align='start'] .ct-popover__content {
77
+ inset-inline-start: 0;
78
+ transform: translateY(4px);
79
+ }
80
+
81
+ .ct-popover[data-side='top'][data-align='end'] .ct-popover__content,
82
+ .ct-popover[data-side='bottom'][data-align='end'] .ct-popover__content {
83
+ inset-inline-end: 0;
84
+ transform: translateY(4px);
85
+ }
86
+
87
+ /* top side: slide up */
88
+
89
+ .ct-popover[data-side='top'][data-align='center'] .ct-popover__content {
90
+ transform: translate(-50%, -4px);
91
+ }
92
+
93
+ .ct-popover[data-side='top'][data-align='start'] .ct-popover__content,
94
+ .ct-popover[data-side='top'][data-align='end'] .ct-popover__content {
95
+ transform: translateY(-4px);
96
+ }
97
+
98
+ /* ── Alignment (left / right sides) ───────────────────────────────── */
99
+
100
+ .ct-popover[data-side='left'][data-align='center'] .ct-popover__content,
101
+ .ct-popover[data-side='right'][data-align='center'] .ct-popover__content {
102
+ transform: translate(-4px, -50%);
103
+ }
104
+
105
+ .ct-popover[data-side='left'][data-align='start'] .ct-popover__content,
106
+ .ct-popover[data-side='right'][data-align='start'] .ct-popover__content {
107
+ inset-block-start: 0;
108
+ transform: translateX(-4px);
109
+ }
110
+
111
+ .ct-popover[data-side='left'][data-align='end'] .ct-popover__content,
112
+ .ct-popover[data-side='right'][data-align='end'] .ct-popover__content {
113
+ inset-block-start: auto;
114
+ inset-block-end: 0;
115
+ transform: translateX(-4px);
116
+ }
117
+
118
+ /* right side: slide right */
119
+
120
+ .ct-popover[data-side='right'][data-align='center'] .ct-popover__content {
121
+ transform: translate(4px, -50%);
122
+ }
123
+
124
+ .ct-popover[data-side='right'][data-align='start'] .ct-popover__content,
125
+ .ct-popover[data-side='right'][data-align='end'] .ct-popover__content {
126
+ transform: translateX(4px);
127
+ }
128
+
129
+ /* ── Open state: resolve transforms ──────────────────────────────── */
130
+
131
+ .ct-popover[data-state='open'][data-side='top'][data-align='center'] .ct-popover__content,
132
+ .ct-popover[data-state='open'][data-side='bottom'][data-align='center'] .ct-popover__content {
133
+ transform: translate(-50%, 0);
134
+ }
135
+
136
+ .ct-popover[data-state='open'][data-side='top'][data-align='start'] .ct-popover__content,
137
+ .ct-popover[data-state='open'][data-side='top'][data-align='end'] .ct-popover__content,
138
+ .ct-popover[data-state='open'][data-side='bottom'][data-align='start'] .ct-popover__content,
139
+ .ct-popover[data-state='open'][data-side='bottom'][data-align='end'] .ct-popover__content {
140
+ transform: translateY(0);
141
+ }
142
+
143
+ .ct-popover[data-state='open'][data-side='left'][data-align='center'] .ct-popover__content,
144
+ .ct-popover[data-state='open'][data-side='right'][data-align='center'] .ct-popover__content {
145
+ transform: translate(0, -50%);
146
+ }
147
+
148
+ .ct-popover[data-state='open'][data-side='left'][data-align='start'] .ct-popover__content,
149
+ .ct-popover[data-state='open'][data-side='left'][data-align='end'] .ct-popover__content,
150
+ .ct-popover[data-state='open'][data-side='right'][data-align='start'] .ct-popover__content,
151
+ .ct-popover[data-state='open'][data-side='right'][data-align='end'] .ct-popover__content {
152
+ transform: translateX(0);
153
+ }
154
+
155
+ /* ── Arrow ────────────────────────────────────────────────────────── */
156
+
157
+ .ct-popover__arrow {
158
+ position: absolute;
159
+ width: var(--_po-arrow-size);
160
+ height: var(--_po-arrow-size);
161
+ background: var(--ct-popover-bg);
162
+ border: var(--border-thin) solid var(--ct-popover-border);
163
+ transform: rotate(45deg);
164
+ z-index: -1;
165
+ }
166
+
167
+ .ct-popover[data-side='bottom'] .ct-popover__arrow {
168
+ inset-block-start: calc(var(--_po-arrow-size) / -2);
169
+ inset-inline-start: calc(50% - var(--_po-arrow-size) / 2);
170
+ border-block-end: none;
171
+ border-inline-end: none;
172
+ }
173
+
174
+ .ct-popover[data-side='top'] .ct-popover__arrow {
175
+ inset-block-end: calc(var(--_po-arrow-size) / -2);
176
+ inset-inline-start: calc(50% - var(--_po-arrow-size) / 2);
177
+ border-block-start: none;
178
+ border-inline-start: none;
179
+ }
180
+
181
+ .ct-popover[data-side='left'] .ct-popover__arrow {
182
+ inset-inline-end: calc(var(--_po-arrow-size) / -2);
183
+ inset-block-start: calc(50% - var(--_po-arrow-size) / 2);
184
+ border-inline-start: none;
185
+ border-block-end: none;
186
+ }
187
+
188
+ .ct-popover[data-side='right'] .ct-popover__arrow {
189
+ inset-inline-start: calc(var(--_po-arrow-size) / -2);
190
+ inset-block-start: calc(50% - var(--_po-arrow-size) / 2);
191
+ border-inline-end: none;
192
+ border-block-start: none;
193
+ }
194
+
195
+ /* ── Content sections ─────────────────────────────────────────────── */
196
+
197
+ .ct-popover__header {
198
+ display: flex;
199
+ align-items: center;
200
+ justify-content: space-between;
201
+ padding: var(--space-4) var(--space-5);
202
+ border-bottom: var(--border-thin) solid var(--color-border-subtle);
203
+ }
204
+
205
+ .ct-popover__header h3 {
206
+ margin: 0;
207
+ font-size: var(--font-size-sm);
208
+ font-weight: var(--font-weight-semibold);
209
+ line-height: var(--line-height-sm);
210
+ }
211
+
212
+ .ct-popover__body {
213
+ padding: var(--space-4) var(--space-5);
214
+ display: grid;
215
+ gap: var(--space-4);
216
+ }
217
+
218
+ .ct-popover__footer {
219
+ display: flex;
220
+ align-items: center;
221
+ justify-content: flex-end;
222
+ gap: var(--space-3);
223
+ padding: var(--space-4) var(--space-5);
224
+ border-top: var(--border-thin) solid var(--color-border-subtle);
225
+ }
226
+
227
+ @media (prefers-reduced-motion: reduce) {
228
+ .ct-popover__content {
229
+ transition: none;
230
+ }
231
+ }
@@ -0,0 +1,56 @@
1
+ /* ── Progress Bar ── */
2
+
3
+ .ct-progress-bar {
4
+ --ct-progress-height: 8px;
5
+ --ct-progress-radius: var(--radius-pill);
6
+ --ct-progress-bg: var(--color-bg-muted);
7
+ --ct-progress-fill: var(--color-brand-primary);
8
+
9
+ width: 100%;
10
+ height: var(--ct-progress-height);
11
+ border-radius: var(--ct-progress-radius);
12
+ background: var(--ct-progress-bg);
13
+ overflow: hidden;
14
+ }
15
+
16
+ .ct-progress-bar__track {
17
+ height: 100%;
18
+ border-radius: inherit;
19
+ background: var(--ct-progress-fill);
20
+ transition: width var(--duration-normal) var(--easing-standard);
21
+ }
22
+
23
+ .ct-progress-bar--indeterminate .ct-progress-bar__track {
24
+ width: 30%;
25
+ animation: ct-progress-indeterminate var(--ct-progress-duration) var(--easing-standard) infinite;
26
+ }
27
+
28
+ .ct-progress-bar--sm {
29
+ --ct-progress-height: 4px;
30
+ }
31
+
32
+ .ct-progress-bar--lg {
33
+ --ct-progress-height: 12px;
34
+ }
35
+
36
+ .ct-progress-bar--info {
37
+ --ct-progress-fill: var(--color-state-info);
38
+ }
39
+
40
+ .ct-progress-bar--success {
41
+ --ct-progress-fill: var(--color-state-success);
42
+ }
43
+
44
+ .ct-progress-bar--warning {
45
+ --ct-progress-fill: var(--color-state-warning);
46
+ }
47
+
48
+ .ct-progress-bar--danger {
49
+ --ct-progress-fill: var(--color-state-danger);
50
+ }
51
+
52
+ @media (prefers-reduced-motion: reduce) {
53
+ .ct-progress-bar--indeterminate .ct-progress-bar__track {
54
+ animation: none;
55
+ }
56
+ }
@@ -0,0 +1,267 @@
1
+ /* ─── Select Menu (Custom Dropdown Select) ──────────────────────── */
2
+
3
+ .ct-select-menu {
4
+ --ct-select-menu-height: var(--control-height-md);
5
+ --ct-select-menu-font-size: var(--font-size-md);
6
+ --ct-select-menu-line-height: var(--line-height-md);
7
+ --ct-select-menu-padding-x: var(--space-5);
8
+ --ct-select-menu-content-max-height: 280px;
9
+ --ct-select-menu-option-padding-x: var(--space-4);
10
+ --ct-select-menu-option-padding-y: var(--space-3);
11
+
12
+ position: relative;
13
+ display: inline-flex;
14
+ flex-direction: column;
15
+ }
16
+
17
+ /* ── Trigger ────────────────────────────────────────────────────── */
18
+
19
+ .ct-select-menu__trigger {
20
+ appearance: none;
21
+ display: inline-flex;
22
+ align-items: center;
23
+ justify-content: space-between;
24
+ gap: var(--space-3);
25
+ width: 100%;
26
+ height: var(--ct-select-menu-height);
27
+ padding: 0 var(--ct-select-menu-padding-x);
28
+ border: var(--border-thin) solid var(--ct-control-border);
29
+ border-radius: var(--ct-control-radius);
30
+ background: var(--ct-control-bg);
31
+ color: var(--ct-control-text);
32
+ font-size: var(--ct-select-menu-font-size);
33
+ line-height: var(--ct-select-menu-line-height);
34
+ cursor: pointer;
35
+ text-align: start;
36
+ transition: var(--ct-control-transition);
37
+ }
38
+
39
+ @media (hover: hover) {
40
+ .ct-select-menu__trigger:hover {
41
+ border-color: var(--ct-control-border-hover);
42
+ }
43
+ }
44
+
45
+ .ct-select-menu__trigger:focus-visible {
46
+ border-color: var(--ct-control-border-focus);
47
+ outline: 2px solid var(--color-focus-ring);
48
+ outline-offset: 2px;
49
+ }
50
+
51
+ .ct-select-menu__trigger:disabled,
52
+ .ct-select-menu__trigger[aria-disabled='true'] {
53
+ background: var(--ct-control-bg-disabled);
54
+ border-color: var(--color-border-subtle);
55
+ color: var(--color-text-muted);
56
+ pointer-events: none;
57
+ }
58
+
59
+ .ct-select-menu__trigger[aria-invalid='true'] {
60
+ border-color: var(--color-state-danger);
61
+ }
62
+
63
+ .ct-select-menu__trigger[aria-invalid='true']:focus-visible {
64
+ outline-color: var(--color-state-danger);
65
+ }
66
+
67
+ /* ── Value display ──────────────────────────────────────────────── */
68
+
69
+ .ct-select-menu__value {
70
+ flex: 1;
71
+ min-width: 0;
72
+ overflow: hidden;
73
+ text-overflow: ellipsis;
74
+ white-space: nowrap;
75
+ }
76
+
77
+ .ct-select-menu__value[data-placeholder] {
78
+ color: var(--ct-control-placeholder);
79
+ }
80
+
81
+ /* ── Trigger icon (chevron) ─────────────────────────────────────── */
82
+
83
+ .ct-select-menu__icon {
84
+ flex-shrink: 0;
85
+ width: var(--icon-sm);
86
+ height: var(--icon-sm);
87
+ color: var(--color-text-muted);
88
+ transition: transform var(--duration-fast) var(--easing-standard);
89
+ }
90
+
91
+ .ct-select-menu[data-state='open'] .ct-select-menu__icon {
92
+ transform: rotate(180deg);
93
+ }
94
+
95
+ /* ── Content (dropdown panel) ───────────────────────────────────── */
96
+
97
+ .ct-select-menu__content {
98
+ position: absolute;
99
+ inset-inline-start: 0;
100
+ inset-inline-end: 0;
101
+ inset-block-start: calc(100% + var(--space-2));
102
+ z-index: var(--z-dropdown);
103
+ max-height: var(--ct-select-menu-content-max-height);
104
+ overflow-y: auto;
105
+ padding: var(--space-2);
106
+ border-radius: var(--radius-md);
107
+ border: var(--border-thin) solid var(--color-border-subtle);
108
+ background: var(--color-bg-elevated);
109
+ box-shadow: var(--shadow-dropdown);
110
+ opacity: 0;
111
+ visibility: hidden;
112
+ transform: translateY(4px);
113
+ transition: opacity var(--duration-fast) var(--easing-standard),
114
+ transform var(--duration-fast) var(--easing-standard),
115
+ visibility 0s linear var(--duration-fast);
116
+ }
117
+
118
+ .ct-select-menu[data-state='open'] .ct-select-menu__content {
119
+ opacity: 1;
120
+ visibility: visible;
121
+ transform: translateY(0);
122
+ transition: opacity var(--duration-fast) var(--easing-standard),
123
+ transform var(--duration-fast) var(--easing-standard),
124
+ visibility 0s linear 0s;
125
+ }
126
+
127
+ /* Flip above when data-side="top" */
128
+
129
+ .ct-select-menu[data-side='top'] .ct-select-menu__content {
130
+ inset-block-start: auto;
131
+ inset-block-end: calc(100% + var(--space-2));
132
+ transform: translateY(-4px);
133
+ }
134
+
135
+ .ct-select-menu[data-side='top'][data-state='open'] .ct-select-menu__content {
136
+ transform: translateY(0);
137
+ }
138
+
139
+ /* ── Option ─────────────────────────────────────────────────────── */
140
+
141
+ .ct-select-menu__option {
142
+ display: flex;
143
+ align-items: center;
144
+ gap: var(--space-3);
145
+ padding: var(--ct-select-menu-option-padding-y) var(--ct-select-menu-option-padding-x);
146
+ border-radius: var(--radius-sm);
147
+ color: var(--color-text-primary);
148
+ font-size: var(--ct-select-menu-font-size);
149
+ line-height: var(--ct-select-menu-line-height);
150
+ cursor: pointer;
151
+ transition: background var(--duration-fast) var(--easing-standard),
152
+ color var(--duration-fast) var(--easing-standard);
153
+ }
154
+
155
+ @media (hover: hover) {
156
+ .ct-select-menu__option:hover {
157
+ background: var(--color-bg-muted);
158
+ }
159
+ }
160
+
161
+ .ct-select-menu__option[data-highlighted] {
162
+ background: var(--color-bg-muted);
163
+ outline: var(--border-medium) solid var(--color-brand-primary);
164
+ outline-offset: -2px;
165
+ }
166
+
167
+ .ct-select-menu__option[aria-selected='true'] {
168
+ color: var(--color-brand-primary);
169
+ font-weight: var(--font-weight-medium);
170
+ }
171
+
172
+ .ct-select-menu__option[aria-selected='true'] .ct-select-menu__option-check {
173
+ opacity: 1;
174
+ }
175
+
176
+ .ct-select-menu__option[aria-disabled='true'] {
177
+ opacity: var(--opacity-disabled);
178
+ pointer-events: none;
179
+ cursor: not-allowed;
180
+ }
181
+
182
+ /* ── Option parts ───────────────────────────────────────────────── */
183
+
184
+ .ct-select-menu__option-check {
185
+ width: var(--icon-sm);
186
+ height: var(--icon-sm);
187
+ flex-shrink: 0;
188
+ opacity: 0;
189
+ color: var(--color-brand-primary);
190
+ display: inline-flex;
191
+ align-items: center;
192
+ justify-content: center;
193
+ }
194
+
195
+ .ct-select-menu__option-icon {
196
+ width: var(--icon-sm);
197
+ height: var(--icon-sm);
198
+ flex-shrink: 0;
199
+ color: var(--color-text-secondary);
200
+ display: inline-flex;
201
+ align-items: center;
202
+ justify-content: center;
203
+ }
204
+
205
+ .ct-select-menu__option-label {
206
+ flex: 1;
207
+ min-width: 0;
208
+ }
209
+
210
+ .ct-select-menu__option-description {
211
+ font-size: var(--font-size-xs);
212
+ color: var(--color-text-muted);
213
+ }
214
+
215
+ /* ── Group ──────────────────────────────────────────────────────── */
216
+
217
+ .ct-select-menu__group {
218
+ padding: var(--space-1) 0;
219
+ }
220
+
221
+ .ct-select-menu__group + .ct-select-menu__group {
222
+ border-top: var(--border-thin) solid var(--color-border-subtle);
223
+ }
224
+
225
+ .ct-select-menu__group-label {
226
+ padding: var(--space-2) var(--ct-select-menu-option-padding-x);
227
+ font-size: var(--font-size-xs);
228
+ font-weight: var(--font-weight-semibold);
229
+ color: var(--color-text-muted);
230
+ text-transform: uppercase;
231
+ letter-spacing: var(--letter-spacing-wide);
232
+ }
233
+
234
+ /* ── Separator ──────────────────────────────────────────────────── */
235
+
236
+ .ct-select-menu__separator {
237
+ height: 1px;
238
+ background: var(--color-border-subtle);
239
+ margin: var(--space-2) 0;
240
+ }
241
+
242
+ /* ── Sizes ──────────────────────────────────────────────────────── */
243
+
244
+ .ct-select-menu--sm {
245
+ --ct-select-menu-height: var(--control-height-sm);
246
+ --ct-select-menu-font-size: var(--font-size-sm);
247
+ --ct-select-menu-line-height: var(--line-height-sm);
248
+ --ct-select-menu-padding-x: var(--space-4);
249
+ --ct-select-menu-option-padding-y: var(--space-2);
250
+ }
251
+
252
+ .ct-select-menu--lg {
253
+ --ct-select-menu-height: var(--control-height-lg);
254
+ --ct-select-menu-font-size: var(--font-size-lg);
255
+ --ct-select-menu-line-height: var(--line-height-lg);
256
+ --ct-select-menu-padding-x: var(--space-6);
257
+ --ct-select-menu-option-padding-y: var(--space-4);
258
+ }
259
+
260
+ /* ── Reduced motion ─────────────────────────────────────────────── */
261
+
262
+ @media (prefers-reduced-motion: reduce) {
263
+ .ct-select-menu__content,
264
+ .ct-select-menu__icon {
265
+ transition: none;
266
+ }
267
+ }
@@ -0,0 +1,30 @@
1
+ .ct-select-wrap {
2
+ position: relative;
3
+ display: inline-flex;
4
+ }
5
+
6
+ .ct-select-wrap::after {
7
+ content: '';
8
+ position: absolute;
9
+ inset-inline-end: var(--space-4);
10
+ top: 50%;
11
+ transform: translateY(-50%);
12
+ width: 0.75em;
13
+ height: 0.5em;
14
+ background-color: var(--color-text-muted);
15
+ --_chevron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 8'%3E%3Cpath d='M1.4 0L6 4.6 10.6 0 12 1.4l-6 6-6-6z'/%3E%3C/svg%3E");
16
+ -webkit-mask-image: var(--_chevron);
17
+ mask-image: var(--_chevron);
18
+ mask-size: contain;
19
+ mask-repeat: no-repeat;
20
+ pointer-events: none;
21
+ }
22
+
23
+ .ct-select-wrap > .ct-select {
24
+ width: 100%;
25
+ }
26
+
27
+ .ct-select {
28
+ appearance: none;
29
+ padding-inline-end: calc(var(--space-4) + 0.75em + var(--space-4));
30
+ }