@charcoal-ui/react 6.1.0 → 6.1.1-beta.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.
package/dist/index.css CHANGED
@@ -6,943 +6,995 @@
6
6
  box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
7
7
  transition: 0.2s box-shadow;
8
8
  }
9
- .charcoal-clickable {
10
- cursor: pointer;
11
-
12
- /* Reset button appearance */
13
- -webkit-appearance: none;
14
- -moz-appearance: none;
15
- appearance: none;
16
- background: transparent;
17
- padding: 0;
18
- border-style: none;
19
- outline: none;
20
- color: inherit;
21
- text-rendering: inherit;
22
- letter-spacing: inherit;
23
- word-spacing: inherit;
24
- text-decoration: none;
25
-
26
- /* Change the font styles in all browsers. */
27
- font: inherit;
28
-
29
- /* Remove the margin in Firefox and Safari. */
30
- margin: 0;
31
-
32
- /* Show the overflow in Edge. */
33
- overflow: visible;
34
-
35
- /* Remove the inheritance of text transform in Firefox. */
36
- text-transform: none;
9
+ .charcoal-loading-spinner {
10
+ box-sizing: content-box;
11
+ margin: auto;
12
+ padding: 16px;
13
+ border-radius: 8px;
14
+ font-size: 48px;
15
+ width: 48px;
16
+ height: 48px;
17
+ opacity: 0.84;
18
+ color: var(--charcoal-color-icon-tertiary-default);
19
+ background-color: var(--charcoal-color-background-default);
37
20
  }
38
21
 
39
- .charcoal-clickable:disabled,
40
- .charcoal-clickable[aria-disabled]:not([aria-disabled='false']) {
41
- cursor: default;
22
+ .charcoal-loading-spinner[data-transparent='true'] {
23
+ background-color: transparent;
42
24
  }
43
25
 
44
- .charcoal-clickable:focus {
45
- outline: none;
26
+ @keyframes charcoal-loading-spinner-icon-scale-out {
27
+ from {
28
+ transform: scale(0);
29
+ opacity: 1;
46
30
  }
47
-
48
- .charcoal-clickable::-moz-focus-inner {
49
- border-style: none;
50
- padding: 0;
31
+ to {
32
+ transform: scale(1);
33
+ opacity: 0;
51
34
  }
52
- .charcoal-button {
53
- -webkit-appearance: none;
54
- -moz-appearance: none;
55
- appearance: none;
56
- background-image: none;
57
- box-sizing: border-box;
58
- padding: 0 24px;
59
- border-style: none;
60
- outline: none;
61
- text-rendering: inherit;
62
- letter-spacing: inherit;
63
- word-spacing: inherit;
64
- text-decoration: none;
65
- font-family: inherit;
66
- font-style: inherit;
67
- font-variant: inherit;
68
- margin: 0;
69
- overflow: visible;
70
- text-transform: none;
71
- width: -moz-min-content;
72
- width: min-content;
73
- display: inline-grid;
74
- align-items: center;
75
- justify-content: center;
76
- cursor: pointer;
77
- -webkit-user-select: none;
78
- -moz-user-select: none;
79
- user-select: none;
80
- white-space: nowrap;
81
- border-radius: 999999px;
82
- font-size: 14px;
83
- line-height: 22px;
84
- font-weight: bold;
85
- color: var(--charcoal-color-text-default);
86
- background-color: var(
87
- --charcoal-color-container-secondary-default-a,
88
- transparent
89
- );
90
- transition:
91
- 0.2s color,
92
- 0.2s background-color,
93
- 0.2s box-shadow;
94
- height: 40px;
95
35
  }
96
36
 
97
- .charcoal-button:disabled,
98
- .charcoal-button[aria-disabled]:not([aria-disabled='false']) {
99
- cursor: default;
100
- opacity: 0.32;
101
- }
102
-
103
- .charcoal-button:not(:disabled):not([aria-disabled]):focus-visible,
104
- .charcoal-button[aria-disabled='false']:focus-visible {
105
- outline: none;
106
- box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
107
- }
37
+ .charcoal-loading-spinner-icon {
38
+ width: 1em;
39
+ height: 1em;
40
+ border-radius: 1em;
41
+ background-color: currentColor;
42
+ animation: charcoal-loading-spinner-icon-scale-out 1s infinite both ease-out;
43
+ }
108
44
 
109
- .charcoal-button:not(:disabled):not([aria-disabled]):hover,
110
- .charcoal-button[aria-disabled='false']:hover {
111
- color: var(--charcoal-color-text-hover);
112
- background-color: var(--charcoal-color-container-secondary-hover-a);
45
+ .charcoal-loading-spinner-icon[data-reset-animation] {
46
+ animation: none;
113
47
  }
114
48
 
115
- .charcoal-button:not(:disabled):not([aria-disabled]):active,
116
- .charcoal-button[aria-disabled='false']:active,
117
- .charcoal-button[data-active='true'] {
118
- color: var(--charcoal-color-text-press);
119
- background-color: var(--charcoal-color-container-secondary-press-a);
49
+ .charcoal-loading-spinner-icon[data-once='true'] {
50
+ animation-iteration-count: 1;
120
51
  }
52
+ .charcoal-dropdown-selector-root {
53
+ display: grid;
54
+ grid-template-columns: 1fr;
55
+ grid-gap: 4px;
56
+ width: 100%;
57
+ }
121
58
 
122
- .charcoal-button[data-variant='Primary'] {
123
- color: var(--charcoal-color-text-on-primary-default);
124
- background-color: var(--charcoal-color-container-primary-default);
59
+ .charcoal-dropdown-selector-root[aria-disabled='true'] {
60
+ cursor: default;
61
+ opacity: 0.32;
125
62
  }
126
63
 
127
- .charcoal-button[data-variant='Primary']:hover:not(:disabled):not([aria-disabled]),
128
- .charcoal-button[data-variant='Primary']:hover[aria-disabled='false'] {
129
- color: var(--charcoal-color-text-on-primary-hover);
130
- background-color: var(--charcoal-color-container-primary-hover);
131
- }
132
-
133
- .charcoal-button[data-variant='Primary']:active:not(:disabled):not([aria-disabled]),
134
- .charcoal-button[data-variant='Primary']:active[aria-disabled='false'],
135
- .charcoal-button[data-variant='Primary'][data-active='true'] {
136
- color: var(--charcoal-color-text-on-primary-press);
137
- background-color: var(--charcoal-color-container-primary-press);
138
- }
64
+ .charcoal-dropdown-selector-button {
65
+ display: grid;
66
+ grid-template-columns: 1fr auto;
67
+ justify-content: space-between;
68
+ align-items: center;
139
69
 
140
- .charcoal-button[data-variant='Overlay'] {
141
- color: var(--charcoal-color-text-on-on-img-default);
142
- background-color: var(--charcoal-color-container-on-img-default);
143
- }
70
+ height: 40px;
71
+ width: 100%;
72
+ box-sizing: border-box;
73
+ border: none;
74
+ cursor: pointer;
75
+ gap: 4px;
144
76
 
145
- .charcoal-button[data-variant='Overlay']:hover:not(:disabled):not([aria-disabled]),
146
- .charcoal-button[data-variant='Overlay']:hover[aria-disabled='false'] {
147
- color: var(--charcoal-color-text-on-on-img-hover);
148
- background-color: var(--charcoal-color-container-on-img-hover);
149
- }
77
+ padding-right: 8px;
78
+ padding-left: 8px;
79
+ background-color: var(--charcoal-color-container-secondary-default-a);
80
+ border-radius: 4px;
150
81
 
151
- .charcoal-button[data-variant='Overlay']:active:not(:disabled):not([aria-disabled]),
152
- .charcoal-button[data-variant='Overlay']:active[aria-disabled='false'],
153
- .charcoal-button[data-variant='Overlay'][data-active='true'] {
154
- color: var(--charcoal-color-text-on-on-img-press);
155
- background-color: var(--charcoal-color-container-on-img-press);
156
- }
82
+ transition:
83
+ 0.2s box-shadow,
84
+ 0.2s background-color;
85
+ }
157
86
 
158
- .charcoal-button[data-variant='Navigation'] {
159
- color: var(--charcoal-color-text-on-hud-default);
160
- background-color: var(--charcoal-color-container-hud-default);
87
+ .charcoal-dropdown-selector-button:disabled {
88
+ cursor: default;
161
89
  }
162
90
 
163
- .charcoal-button[data-variant='Navigation']:hover:not(:disabled):not([aria-disabled]),
164
- .charcoal-button[data-variant='Navigation']:hover[aria-disabled='false'] {
165
- color: var(--charcoal-color-text-on-hud-hover);
166
- background-color: var(--charcoal-color-container-hud-hover);
91
+ .charcoal-dropdown-selector-button:not(:disabled):focus {
92
+ outline: none;
93
+ box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
167
94
  }
168
95
 
169
- .charcoal-button[data-variant='Navigation']:active:not(:disabled):not([aria-disabled]),
170
- .charcoal-button[data-variant='Navigation']:active[aria-disabled='false'],
171
- .charcoal-button[data-variant='Navigation'][data-active='true'] {
172
- color: var(--charcoal-color-text-on-hud-press);
173
- background-color: var(--charcoal-color-container-hud-press);
96
+ .charcoal-dropdown-selector-button:not(:disabled):focus-visible {
97
+ box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
174
98
  }
175
99
 
176
- .charcoal-button[data-variant='Danger'] {
177
- color: var(--charcoal-color-text-on-negative-default);
178
- background-color: var(--charcoal-color-container-negative-default);
179
- }
180
-
181
- .charcoal-button[data-variant='Danger']:hover:not(:disabled):not([aria-disabled]),
182
- .charcoal-button[data-variant='Danger']:hover[aria-disabled='false'] {
183
- color: var(--charcoal-color-text-on-negative-hover);
184
- background-color: var(--charcoal-color-container-negative-hover);
100
+ .charcoal-dropdown-selector-button:not(:disabled)[data-active='true'],
101
+ .charcoal-dropdown-selector-button:not(:disabled):active {
102
+ background-color: var(--charcoal-color-container-secondary-press-a);
185
103
  }
186
104
 
187
- .charcoal-button[data-variant='Danger']:active:not(:disabled):not([aria-disabled]),
188
- .charcoal-button[data-variant='Danger']:active[aria-disabled='false'],
189
- .charcoal-button[data-variant='Danger'][data-active='true'] {
190
- color: var(--charcoal-color-text-on-negative-press);
191
- background-color: var(--charcoal-color-container-negative-press);
105
+ .charcoal-dropdown-selector-button:not(:disabled):hover {
106
+ background-color: var(--charcoal-color-container-secondary-hover-a);
192
107
  }
193
108
 
194
- .charcoal-button[data-size='S'] {
195
- padding: 0 16px;
196
- height: 32px;
197
- }
198
-
199
- .charcoal-button[data-full-width='true'] {
200
- width: 100%;
201
- }
202
- .charcoal-radio__label {
203
- display: grid;
204
- grid-template-columns: auto 1fr;
205
- grid-gap: 4px;
206
- align-items: center;
207
- cursor: pointer;
208
- }
109
+ .charcoal-dropdown-selector-button:not(:disabled):focus:not(:focus-visible) {
110
+ box-shadow: none;
111
+ }
209
112
 
210
- .charcoal-radio__label[aria-disabled]:not([aria-disabled='false']) {
211
- opacity: 0.32;
212
- cursor: default;
113
+ .charcoal-dropdown-selector-button[aria-invalid='true'],
114
+ .charcoal-dropdown-selector-button:not(:disabled)[aria-invalid='true']:focus:not(:focus-visible) {
115
+ box-shadow: 0 0 0 4px rgba(255, 43, 0, 0.32);
213
116
  }
214
117
 
215
- .charcoal-radio__label_div {
118
+ .charcoal-ui-dropdown-selector-text {
119
+ text-align: left;
216
120
  font-size: 14px;
217
121
  line-height: 22px;
122
+ display: flow-root;
218
123
  color: var(--charcoal-color-text-default);
124
+ overflow: hidden;
125
+ text-overflow: ellipsis;
126
+ white-space: nowrap;
219
127
  }
220
- .charcoal-radio-group {
221
- display: grid;
222
- grid-template-columns: 1fr;
223
- grid-gap: 8px;
224
- }
225
- .charcoal-icon-button {
226
- cursor: pointer;
227
- -webkit-appearance: none;
228
- -moz-appearance: none;
229
- appearance: none;
230
- background: transparent;
231
- padding: 0;
232
- border-style: none;
233
- outline: none;
234
- color: inherit;
235
- text-rendering: inherit;
236
- letter-spacing: inherit;
237
- word-spacing: inherit;
238
- text-decoration: none;
239
- font: inherit;
240
- margin: 0;
241
- overflow: visible;
242
- text-transform: none;
243
128
 
244
- -webkit-user-select: none;
129
+ .charcoal-ui-dropdown-selector-text[data-placeholder='true'] {
130
+ color: var(--charcoal-color-text-placeholder-default);
131
+ }
245
132
 
246
- -moz-user-select: none;
133
+ .charcoal-ui-dropdown-selector-icon {
134
+ color: var(--charcoal-color-icon-secondary-default);
135
+ }
136
+ .charcoal-dropdown-selector-menu-item {
137
+ font-size: 14px;
138
+ line-height: 22px;
139
+ color: var(--charcoal-color-text-secondary-default);
140
+ padding: 9px 0;
247
141
 
248
- user-select: none;
249
142
  display: flex;
250
143
  align-items: center;
251
- justify-content: center;
252
- border-radius: 999999px;
253
- transition:
254
- 0.2s background-color,
255
- 0.2s box-shadow;
144
+ width: 100%;
145
+ margin-left: 20px;
256
146
  }
257
147
 
258
- .charcoal-icon-button:disabled,
259
- .charcoal-icon-button[aria-disabled]:not([aria-disabled='false']) {
260
- cursor: default;
261
- opacity: 0.32;
262
- }
148
+ .charcoal-dropdown-selector-menu-item[data-selected='true'] {
149
+ margin-left: 0px;
150
+ }
263
151
 
264
- .charcoal-icon-button:focus {
265
- outline: none;
266
- }
152
+ .charcoal-dropdown-selector-menu-item-icon {
153
+ color: var(--charcoal-color-text-secondary-default);
154
+ padding-right: 4px;
155
+ }
267
156
 
268
- .charcoal-icon-button::-moz-focus-inner {
269
- border-style: none;
270
- padding: 0;
271
- }
157
+ .charcoal-dropdown-selector-menu-item-container {
158
+ display: flex;
159
+ align-items: center;
160
+ }
272
161
 
273
- .charcoal-icon-button[data-size='XS'] {
274
- width: 20px;
275
- height: 20px;
276
- }
162
+ .charcoal-dropdown-selector-menu-secondary {
163
+ font-size: 12px;
164
+ line-height: 20px;
165
+ color: var(--charcoal-color-text-tertiary-default);
166
+ padding-bottom: 9px;
277
167
 
278
- .charcoal-icon-button[data-size='S'] {
279
- width: 32px;
280
- height: 32px;
281
- }
168
+ display: flex;
169
+ align-items: center;
170
+ margin-left: 20px;
171
+ }
282
172
 
283
- .charcoal-icon-button[data-size='M'] {
284
- width: 40px;
285
- height: 40px;
286
- }
173
+ .charcoal-dropdown-selector-menu-fullwidth {
174
+ width: 100%;
175
+ }
176
+ .charcoal-text-ellipsis {
177
+ /* Runtime variables overridden by the React component. */
178
+ --charcoal-text-ellipsis-line-limit: 1;
179
+ --charcoal-text-ellipsis-line-height: inherit;
287
180
 
288
- .charcoal-icon-button[data-variant='Default'] {
289
- color: var(--charcoal-color-icon-tertiary-default);
290
- background-color: transparent;
291
- }
181
+ overflow: hidden;
182
+ overflow-wrap: break-word;
183
+ display: -webkit-box;
184
+ -webkit-box-orient: vertical;
185
+ -webkit-line-clamp: var(--charcoal-text-ellipsis-line-limit);
186
+ }
292
187
 
293
- .charcoal-icon-button[data-variant='Default'][data-active='true']:not(:disabled):not([aria-disabled]),
294
- .charcoal-icon-button[data-variant='Default'][data-active='true'][aria-disabled='false'] {
295
- color: var(--charcoal-color-icon-tertiary-press);
296
- background-color: var(--charcoal-color-container-press-a);
297
- }
188
+ .charcoal-text-ellipsis[data-has-line-height='true'] {
189
+ line-height: var(--charcoal-text-ellipsis-line-height);
190
+ }
298
191
 
299
- .charcoal-icon-button[data-variant='Default'][data-active='false']:not(:disabled):not([aria-disabled]):hover,
300
- .charcoal-icon-button[data-variant='Default'][data-active='false'][aria-disabled='false']:hover {
301
- color: var(--charcoal-color-icon-tertiary-hover);
302
- background-color: var(--charcoal-color-container-hover-a);
303
- }
192
+ .charcoal-text-ellipsis[data-has-line-height='false'] {
193
+ line-height: inherit;
194
+ }
304
195
 
305
- .charcoal-icon-button[data-variant='Default'][data-active='false']:not(:disabled):not([aria-disabled]):active,
306
- .charcoal-icon-button[data-variant='Default'][data-active='false'][aria-disabled='false']:active {
307
- color: var(--charcoal-color-icon-tertiary-press);
308
- background-color: var(--charcoal-color-container-press-a);
309
- }
196
+ .charcoal-text-ellipsis[data-line-limit='1'][data-use-nowrap='true'] {
197
+ text-overflow: ellipsis;
198
+ white-space: nowrap;
199
+ }
200
+ .charcoal-checkbox__label {
201
+ position: relative;
202
+ cursor: pointer;
203
+ display: flex;
204
+ gap: 4px;
205
+ }
310
206
 
311
- .charcoal-icon-button[data-variant='Overlay'] {
312
- color: var(--charcoal-color-icon-on-on-img-default);
313
- background-color: var(--charcoal-color-container-on-img-default);
207
+ .charcoal-checkbox__label[aria-disabled='true'] {
208
+ cursor: default;
209
+ opacity: 0.32;
314
210
  }
315
211
 
316
- .charcoal-icon-button[data-variant='Overlay'][data-active='true']:not(:disabled):not([aria-disabled]),
317
- .charcoal-icon-button[data-variant='Overlay'][data-active='true'][aria-disabled='false'] {
318
- color: var(--charcoal-color-icon-on-on-img-press);
319
- background-color: var(--charcoal-color-container-on-img-press);
212
+ .charcoal-checkbox__label[aria-disabled='true'] > input {
213
+ opacity: 1;
320
214
  }
321
215
 
322
- .charcoal-icon-button[data-variant='Overlay'][data-active='false']:not(:disabled):not([aria-disabled]):hover,
323
- .charcoal-icon-button[data-variant='Overlay'][data-active='false'][aria-disabled='false']:hover {
324
- color: var(--charcoal-color-icon-on-on-img-hover);
325
- background-color: var(--charcoal-color-container-on-img-hover);
326
- }
216
+ .charcoal-checkbox__label_div {
217
+ flex: 1;
218
+ color: var(--charcoal-color-text-default);
219
+ font-size: 14px;
220
+ line-height: 20px;
221
+ }
222
+ .charcoal-segmented-control {
223
+ display: inline-flex;
224
+ align-items: center;
327
225
 
328
- .charcoal-icon-button[data-variant='Overlay'][data-active='false']:not(:disabled):not([aria-disabled]):active,
329
- .charcoal-icon-button[data-variant='Overlay'][data-active='false'][aria-disabled='false']:active {
330
- color: var(--charcoal-color-icon-on-on-img-press);
331
- background-color: var(--charcoal-color-container-on-img-press);
332
- }
226
+ background-color: var(--charcoal-color-container-secondary-default-a);
227
+ border-radius: 16px;
228
+ }
333
229
 
334
- .charcoal-icon-button:not(:disabled):not([aria-disabled]):focus,
335
- .charcoal-icon-button[aria-disabled='false']:focus {
336
- outline: none;
337
- box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
230
+ .charcoal-segmented-control[data-uniform-segment-width='true'],
231
+ .charcoal-segmented-control[data-full-width='true'] {
232
+ display: inline-grid;
233
+ grid-auto-columns: minmax(80px, 1fr);
234
+ grid-auto-rows: 32px;
235
+ grid-auto-flow: column;
338
236
  }
339
237
 
340
- .charcoal-icon-button:not(:disabled):not([aria-disabled]):focus-visible,
341
- .charcoal-icon-button[aria-disabled='false']:focus-visible {
342
- box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
238
+ .charcoal-segmented-control[data-full-width='true'] {
239
+ width: 100%;
343
240
  }
344
241
 
345
- .charcoal-icon-button:not(:disabled):not([aria-disabled]):focus:not(:focus-visible),
346
- .charcoal-icon-button[aria-disabled='false']:focus:not(:focus-visible) {
347
- box-shadow: none;
348
- }
349
- .charcoal-multi-select {
350
- display: grid;
351
- grid-template-columns: auto 1fr;
352
- align-items: center;
242
+ .charcoal-segmented-control-radio__label {
353
243
  position: relative;
244
+ display: flex;
245
+ align-items: center;
246
+ justify-content: center;
354
247
  cursor: pointer;
355
- gap: 4px;
356
- }
248
+ height: 32px;
357
249
 
358
- .charcoal-multi-select:disabled,
359
- .charcoal-multi-select[aria-disabled]:not([aria-disabled='false']) {
360
- opacity: 0.32;
361
- cursor: default;
362
- }
250
+ padding-right: 16px;
251
+ padding-left: 16px;
252
+ border-radius: 16px;
253
+ color: var(--charcoal-color-text-secondary-default);
363
254
 
364
- .charcoal-multi-select-label {
365
- display: flow-root;
366
- align-items: center;
367
255
  font-size: 14px;
368
256
  line-height: 22px;
369
- color: var(--charcoal-color-text-default);
370
257
  }
371
258
 
372
- .charcoal-multi-select-label::before {
373
- display: block;
374
- width: 0;
375
- height: 0;
376
- content: '';
377
- margin-top: -4px;
259
+ .charcoal-segmented-control-radio__label[aria-disabled]:not([aria-disabled='false']) {
260
+ cursor: default;
261
+ opacity: 0.32;
378
262
  }
379
263
 
380
- .charcoal-multi-select-label::after {
381
- display: block;
382
- width: 0;
383
- height: 0;
384
- content: '';
385
- margin-bottom: -4px;
264
+ .charcoal-segmented-control-radio__label[data-checked='true'] {
265
+ background-color: var(--charcoal-color-container-primary-default);
266
+ color: var(--charcoal-color-text-on-primary-default);
386
267
  }
387
268
 
388
- .charcoal-multi-select-input[type='checkbox'] {
269
+ .charcoal-segmented-control-radio__label[data-uniform-segment-width='true'],
270
+ .charcoal-segmented-control-radio__label[data-full-width='true'] {
271
+ justify-content: center;
272
+ white-space: nowrap;
273
+ }
274
+
275
+ .charcoal-segmented-control-radio__input {
276
+ position: absolute;
277
+
278
+ height: 0px;
279
+ width: 0px;
280
+ padding: 0;
281
+ margin: 0;
282
+
389
283
  -webkit-appearance: none;
284
+
390
285
  -moz-appearance: none;
286
+
391
287
  appearance: none;
392
- display: block;
393
- width: 20px;
394
- height: 20px;
395
- margin: 0;
396
- background-color: var(--charcoal-color-container-neutral-default);
397
- border-radius: 999999px;
398
- transition:
399
- 0.2s background-color,
400
- 0.2s box-shadow;
288
+ box-sizing: border-box;
289
+ overflow: hidden;
290
+ white-space: nowrap;
291
+ opacity: 0;
401
292
  }
293
+ .charcoal-tag-item {
294
+ --charcoal-tag-item-color: var(--charcoal-color-text-on-primary-default);
295
+ --charcoal-tag-item-size: 40px;
296
+ --charcoal-tag-item-padding-left: 24px;
297
+ --charcoal-tag-item-padding-right: 24px;
298
+ --charcoal-tag-item-bg: ;
402
299
 
403
- .charcoal-multi-select-input[type='checkbox']:checked {
404
- background-color: var(--charcoal-color-container-primary-default);
405
- }
300
+ isolation: isolate;
301
+ position: relative;
406
302
 
407
- .charcoal-multi-select-input[type='checkbox']:focus {
408
- outline: none;
409
- box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
410
- }
303
+ -webkit-appearance: none;
411
304
 
412
- .charcoal-multi-select-input[type='checkbox']:focus-visible {
413
- box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
305
+ -moz-appearance: none;
306
+
307
+ appearance: none;
308
+ outline: none;
309
+ border-style: none;
310
+
311
+ display: inline-flex;
312
+ gap: 8px;
313
+ align-items: center;
314
+ justify-content: center;
315
+
316
+ text-decoration: none;
317
+ cursor: pointer;
318
+ overflow: hidden;
319
+
320
+ color: var(--charcoal-tag-item-color);
321
+ height: var(--charcoal-tag-item-size);
322
+ padding-top: 4px;
323
+ padding-bottom: 4px;
324
+ padding-left: var(--charcoal-tag-item-padding-left);
325
+ padding-right: var(--charcoal-tag-item-padding-right);
326
+ box-sizing: border-box;
327
+ border-radius: 4px;
328
+
329
+ transition: 0.2s box-shadow;
330
+ }
331
+
332
+ .charcoal-tag-item[data-size='M'] {
333
+ --charcoal-tag-item-size: 40px;
334
+ --charcoal-tag-item-padding-left: 24px;
335
+ --charcoal-tag-item-padding-right: 24px;
414
336
  }
415
337
 
416
- .charcoal-multi-select-input[type='checkbox']:focus:not(:focus-visible) {
417
- box-shadow: none;
338
+ .charcoal-tag-item[data-size='S'] {
339
+ --charcoal-tag-item-size: 32px;
340
+ --charcoal-tag-item-padding-left: 16px;
341
+ --charcoal-tag-item-padding-right: 16px;
418
342
  }
419
343
 
420
- .charcoal-multi-select-input[type='checkbox']:hover:not(:disabled):not([aria-disabled]),
421
- .charcoal-multi-select-input[type='checkbox']:hover[aria-disabled='false'] {
422
- background-color: var(--charcoal-color-container-neutral-hover);
344
+ .charcoal-tag-item[data-state='inactive'] {
345
+ --charcoal-tag-item-color: var(--charcoal-color-text-secondary-default);
423
346
  }
424
347
 
425
- .charcoal-multi-select-input[type='checkbox']:active:not(:disabled):not([aria-disabled]),
426
- .charcoal-multi-select-input[type='checkbox']:active[aria-disabled='false'] {
427
- background-color: var(--charcoal-color-container-neutral-press);
348
+ .charcoal-tag-item[data-state='active'] {
349
+ --charcoal-tag-item-padding-left: 16px;
350
+ --charcoal-tag-item-padding-right: 8px;
428
351
  }
429
352
 
430
- .charcoal-multi-select-input[type='checkbox']:checked:hover:not(:disabled):not([aria-disabled]),
431
- .charcoal-multi-select-input[type='checkbox']:checked:hover[aria-disabled='false'] {
432
- background-color: var(--charcoal-color-container-primary-hover);
353
+ .charcoal-tag-item:disabled,
354
+ .charcoal-tag-item[aria-disabled]:not([aria-disabled='false']) {
355
+ opacity: 0.32;
356
+ cursor: default;
433
357
  }
434
358
 
435
- .charcoal-multi-select-input[type='checkbox']:checked:active:not(:disabled):not([aria-disabled]),
436
- .charcoal-multi-select-input[type='checkbox']:checked:active[aria-disabled='false'] {
437
- background-color: var(--charcoal-color-container-primary-press);
359
+ .charcoal-tag-item:not(:disabled):not([aria-disabled]):focus-visible,
360
+ .charcoal-tag-item[aria-disabled='false']:focus-visible {
361
+ outline: none;
362
+ box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
438
363
  }
439
364
 
440
- .charcoal-multi-select-input[type='checkbox'][aria-invalid='true'][data-overlay='false']:not(:disabled):not(
441
- [aria-disabled]
442
- ) {
443
- box-shadow: 0 0 0 4px rgba(255, 43, 0, 0.32);
365
+ .charcoal-tag-item:not(:disabled):not([aria-disabled]):focus,
366
+ .charcoal-tag-item[aria-disabled='false']:focus {
367
+ outline: none;
368
+ box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
444
369
  }
445
370
 
446
- .charcoal-multi-select-input[type='checkbox'][aria-invalid='true'][data-overlay='false'][aria-disabled='false'] {
447
- box-shadow: 0 0 0 4px rgba(255, 43, 0, 0.32);
371
+ .charcoal-tag-item:not(:disabled):not([aria-disabled]):focus:not(:focus-visible),
372
+ .charcoal-tag-item[aria-disabled='false']:focus:not(:focus-visible) {
373
+ box-shadow: none;
448
374
  }
449
375
 
450
- .charcoal-multi-select-input[type='checkbox'][data-overlay='true'] {
376
+ .charcoal-tag-item__bg {
377
+ background-color: var(--charcoal-tag-item-bg);
378
+ }
379
+
380
+ .charcoal-tag-item__bg[data-bg-variant='image'] {
451
381
  background-color: var(--charcoal-color-container-on-img-default);
452
382
  }
453
383
 
454
- .charcoal-multi-select-overlay {
455
- position: absolute;
456
- top: -2px;
457
- left: -2px;
458
- box-sizing: border-box;
384
+ .charcoal-tag-item__bg[data-bg-variant='image']::before {
385
+ content: '';
386
+ position: absolute;
387
+ z-index: 1;
388
+ top: 0;
389
+ left: 0;
390
+ width: 100%;
391
+ height: 100%;
392
+ background-position: center;
393
+ background-size: cover;
394
+ background-image: var(--charcoal-tag-item-bg);
395
+ mix-blend-mode: overlay;
396
+ }
397
+
398
+ .charcoal-tag-item__bg[data-state='inactive'] {
399
+ background-color: var(--charcoal-color-container-secondary-default);
400
+ }
401
+
402
+ .charcoal-tag-item__label {
403
+ height: 100%;
459
404
  display: flex;
405
+ flex-direction: column;
460
406
  align-items: center;
461
407
  justify-content: center;
462
- width: 24px;
463
- height: 24px;
464
- border-radius: 999999px;
465
- color: var(--charcoal-color-icon-on-primary-default);
466
- transition: 0.2s box-shadow;
467
408
  }
468
409
 
469
- .charcoal-multi-select-overlay[aria-invalid='true'][data-overlay='true']:not(:disabled):not(
470
- [aria-disabled]
471
- ) {
472
- box-shadow: 0 0 0 4px rgba(255, 43, 0, 0.32);
410
+ .charcoal-tag-item__label[data-has-translate='true'] {
411
+ justify-content: space-between;
473
412
  }
474
413
 
475
- .charcoal-multi-select-overlay[aria-invalid='true'][data-overlay='true'][aria-disabled='false'] {
476
- box-shadow: 0 0 0 4px rgba(255, 43, 0, 0.32);
477
- }
414
+ .charcoal-tag-item__label__translated {
415
+ --charcoal-tag-item-text-font-size: 12px;
416
+ --charcoal-tag-item-text-line-height: 20px;
417
+ font-weight: bold;
418
+ }
478
419
 
479
- .charcoal-multi-select-overlay[data-overlay='true'] {
480
- border-color: var(--charcoal-color-border-hud);
481
- border-width: 2px;
482
- border-style: solid;
420
+ .charcoal-tag-item__label__translated::before {
421
+ display: none;
483
422
  }
484
- .charcoal-text-field-root {
485
- display: grid;
486
- grid-template-columns: 1fr;
487
- grid-gap: 4px;
423
+
424
+ .charcoal-tag-item__label__text {
425
+ --charcoal-tag-item-text-font-size: 14px;
426
+ --charcoal-tag-item-text-line-height: 22px;
427
+
428
+ max-width: 152px;
429
+ overflow: hidden;
430
+ font-weight: bold;
431
+
432
+ color: inherit;
433
+ white-space: nowrap;
434
+ text-overflow: ellipsis;
488
435
  }
489
436
 
490
- .charcoal-text-field-root[aria-disabled='true'] {
491
- opacity: 0.32;
437
+ .charcoal-tag-item__label__text[data-has-translate='true'] {
438
+ --charcoal-tag-item-text-font-size: 10px;
439
+ --charcoal-tag-item-text-line-height: 14px;
440
+ font-weight: normal;
492
441
  }
493
442
 
494
- .charcoal-text-field-container {
443
+ /* Kept flat: different class name from .charcoal-tag-item__label__text (note: "labe" typo in original) */
444
+ .charcoal-tag-item__labe__text[data-has-translate='true']::after {
445
+ display: none;
446
+ }
447
+ .charcoal-hint-text {
448
+ background-color: var(--charcoal-color-container-secondary-default);
449
+ border-radius: 8px;
450
+ padding: 12px 16px;
495
451
  display: flex;
496
- height: 40px;
497
- transition:
498
- 0.2s background-color,
499
- 0.2s box-shadow;
500
- color: var(--charcoal-color-text-secondary-default);
501
- background-color: var(--charcoal-color-container-secondary-default-a);
502
- border-radius: 4px;
503
- padding: 0 8px;
504
- line-height: 22px;
505
- font-size: 14px;
452
+ align-items: flex-start;
506
453
  }
507
454
 
508
- .charcoal-text-field-container[data-invalid='true'] {
509
- box-shadow: 0 0 0 4px rgba(255, 43, 0, 0.32);
510
- }
511
-
512
- .charcoal-text-field-container:not([aria-disabled='true']):hover {
513
- background-color: var(--charcoal-color-container-secondary-hover-a);
455
+ .charcoal-hint-text[data-context='page'] {
456
+ justify-content: center;
514
457
  }
515
458
 
516
- .charcoal-text-field-container:not([aria-disabled='true']):focus-within {
517
- outline: none;
518
- box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
519
- }
459
+ @media (min-width: 744px) {
520
460
 
521
- .charcoal-text-field-container:not([aria-disabled='true'])[data-invalid='true']:focus-within {
522
- box-shadow: 0 0 0 4px rgba(255, 43, 0, 0.32);
461
+ .charcoal-hint-text[data-context='page'] {
462
+ padding: 20px 40px
523
463
  }
464
+ }
524
465
 
525
- .charcoal-text-field-prefix {
526
- display: flex;
527
- align-items: center;
528
- margin-right: 4px;
529
- }
530
-
531
- .charcoal-text-field-suffix {
466
+ .charcoal-hint-text-icon {
532
467
  display: flex;
533
468
  align-items: center;
534
- gap: 8px;
535
- margin-left: 4px;
469
+ color: var(--charcoal-color-icon-tertiary-default);
470
+ height: 22px;
471
+ margin: 0 4px 0 0;
536
472
  }
537
473
 
538
- .charcoal-text-field-input-root {
539
- flex: 1;
474
+ .charcoal-hint-text-message {
475
+ color: var(--charcoal-color-text-secondary-default);
476
+ font-size: 14px;
477
+ line-height: 22px;
478
+ display: flow-root;
479
+ margin: 0;
540
480
  min-width: 0;
541
- overflow: hidden;
481
+ overflow-wrap: break-word;
542
482
  }
483
+ .charcoal-clickable {
484
+ cursor: pointer;
543
485
 
544
- .charcoal-text-field-input {
545
- border: none;
546
- box-sizing: border-box;
486
+ /* Reset button appearance */
487
+ -webkit-appearance: none;
488
+ -moz-appearance: none;
489
+ appearance: none;
490
+ background: transparent;
491
+ padding: 0;
492
+ border-style: none;
547
493
  outline: none;
548
- font-family: inherit;
549
-
550
- /* Prevent zooming for iOS Safari */
551
- transform-origin: top left;
552
- transform: scale(0.875);
553
- width: calc(100% / 0.875);
554
- height: calc(100% / 0.875);
555
- font-size: calc(14px / 0.875);
556
- line-height: calc(22px / 0.875);
557
- padding-left: 0;
558
- padding-right: 0;
559
- border-radius: calc(4px / 0.875);
560
-
561
- /* Display box-shadow for iOS Safari */
562
- -webkit-appearance: none;
563
- -moz-appearance: none;
564
- appearance: none;
565
- background: transparent;
494
+ color: inherit;
495
+ text-rendering: inherit;
496
+ letter-spacing: inherit;
497
+ word-spacing: inherit;
498
+ text-decoration: none;
566
499
 
567
- color: var(--charcoal-color-text-secondary-default);
568
- }
500
+ /* Change the font styles in all browsers. */
501
+ font: inherit;
569
502
 
570
- .charcoal-text-field-input::-moz-placeholder {
571
- color: var(--charcoal-color-text-placeholder-default);
572
- }
503
+ /* Remove the margin in Firefox and Safari. */
504
+ margin: 0;
573
505
 
574
- .charcoal-text-field-input::placeholder {
575
- color: var(--charcoal-color-text-placeholder-default);
576
- }
506
+ /* Show the overflow in Edge. */
507
+ overflow: visible;
577
508
 
578
- .charcoal-text-field-line-counter {
579
- line-height: 22px;
580
- font-size: 14px;
581
- color: var(--charcoal-color-text-tertiary-default);
582
- }
583
- .charcoal-loading-spinner {
584
- box-sizing: content-box;
585
- margin: auto;
586
- padding: 16px;
587
- border-radius: 8px;
588
- font-size: 48px;
589
- width: 48px;
590
- height: 48px;
591
- opacity: 0.84;
592
- color: var(--charcoal-color-icon-tertiary-default);
593
- background-color: var(--charcoal-color-background-default);
509
+ /* Remove the inheritance of text transform in Firefox. */
510
+ text-transform: none;
594
511
  }
595
512
 
596
- .charcoal-loading-spinner[data-transparent='true'] {
597
- background-color: transparent;
513
+ .charcoal-clickable:disabled,
514
+ .charcoal-clickable[aria-disabled]:not([aria-disabled='false']) {
515
+ cursor: default;
598
516
  }
599
517
 
600
- @keyframes charcoal-loading-spinner-icon-scale-out {
601
- from {
602
- transform: scale(0);
603
- opacity: 1;
518
+ .charcoal-clickable:focus {
519
+ outline: none;
604
520
  }
605
- to {
606
- transform: scale(1);
607
- opacity: 0;
521
+
522
+ .charcoal-clickable::-moz-focus-inner {
523
+ border-style: none;
524
+ padding: 0;
608
525
  }
526
+ .charcoal-modal-header-root {
527
+ height: 64px;
528
+ display: grid;
529
+ align-content: center;
530
+ justify-content: center;
609
531
  }
610
532
 
611
- .charcoal-loading-spinner-icon {
612
- width: 1em;
613
- height: 1em;
614
- border-radius: 1em;
615
- background-color: currentColor;
616
- animation: charcoal-loading-spinner-icon-scale-out 1s infinite both ease-out;
533
+ @media (max-width: 743px) {
534
+ .charcoal-modal-header-root[data-bottom-sheet='true'],
535
+ .charcoal-modal-header-root[data-bottom-sheet='full'] {
536
+ height: 48px;
537
+ }
617
538
  }
618
539
 
619
- .charcoal-loading-spinner-icon[data-reset-animation] {
620
- animation: none;
621
- }
540
+ .charcoal-modal-header-title {
541
+ color: var(--charcoal-color-text-default);
542
+ font-size: 16px;
543
+ line-height: 24px;
544
+ font-weight: bold;
545
+ display: flow-root;
546
+ }
622
547
 
623
- .charcoal-loading-spinner-icon[data-once='true'] {
624
- animation-iteration-count: 1;
625
- }
626
- .charcoal-menu-item-group {
627
- display: block;
548
+ .charcoal-modal-align {
549
+ padding-left: 16px;
550
+ padding-right: 16px;
628
551
  }
629
552
 
630
- .charcoal-menu-item-group > span {
631
- display: block;
632
- color: var(--charcoal-color-text-tertiary-default);
633
- font-size: 12px;
634
- font-weight: bold;
635
- padding: 12px 0 8px 16px;
553
+ .charcoal-modal-body {
554
+ padding-bottom: 40px;
636
555
  }
637
556
 
638
- .charcoal-menu-item-group > ul {
639
- padding-left: 0;
640
- margin: 0;
641
- box-sizing: border-box;
642
- list-style: none;
643
- overflow: hidden;
557
+ .charcoal-modal-buttons {
558
+ display: grid;
559
+ grid-auto-flow: row;
560
+ grid-row-gap: 8px;
561
+
562
+ padding-top: 16px;
563
+ padding-left: 16px;
564
+ padding-right: 16px;
644
565
  }
645
- .charcoal-text-area-root {
566
+ .charcoal-radio-group {
646
567
  display: grid;
647
568
  grid-template-columns: 1fr;
648
- grid-gap: 4px;
569
+ grid-gap: 8px;
649
570
  }
650
-
651
- .charcoal-text-area-root[aria-disabled='true'] {
652
- opacity: 0.32;
653
- }
654
-
655
- .charcoal-text-area-container {
656
- /* Runtime variable overridden by the React component. */
657
- --charcoal-text-area-rows: 4;
658
-
659
- position: relative;
660
- overflow: hidden;
661
-
662
- color: var(--charcoal-color-text-secondary-default);
663
- background-color: var(--charcoal-color-container-secondary-default-a);
664
- border-radius: 4px;
571
+ .charcoal-button {
572
+ -webkit-appearance: none;
573
+ -moz-appearance: none;
574
+ appearance: none;
575
+ background-image: none;
576
+ box-sizing: border-box;
577
+ padding: 0 24px;
578
+ border-style: none;
579
+ outline: none;
580
+ text-rendering: inherit;
581
+ letter-spacing: inherit;
582
+ word-spacing: inherit;
583
+ text-decoration: none;
584
+ font-family: inherit;
585
+ font-style: inherit;
586
+ font-variant: inherit;
587
+ margin: 0;
588
+ overflow: visible;
589
+ text-transform: none;
590
+ width: -moz-min-content;
591
+ width: min-content;
592
+ display: inline-grid;
593
+ align-items: center;
594
+ justify-content: center;
595
+ cursor: pointer;
596
+ -webkit-user-select: none;
597
+ -moz-user-select: none;
598
+ user-select: none;
599
+ white-space: nowrap;
600
+ border-radius: 999999px;
601
+ font-size: 14px;
602
+ line-height: 22px;
603
+ font-weight: bold;
604
+ color: var(--charcoal-color-text-default);
605
+ background-color: var(
606
+ --charcoal-color-container-secondary-default-a,
607
+ transparent
608
+ );
665
609
  transition:
610
+ 0.2s color,
666
611
  0.2s background-color,
667
612
  0.2s box-shadow;
668
- height: calc(22px * var(--charcoal-text-area-rows) + 18px);
613
+ height: 40px;
669
614
  }
670
615
 
671
- .charcoal-text-area-container[aria-invalid='true'] {
672
- box-shadow: 0 0 0 4px rgba(255, 43, 0, 0.32);
616
+ .charcoal-button:disabled,
617
+ .charcoal-button[aria-disabled]:not([aria-disabled='false']) {
618
+ cursor: default;
619
+ opacity: 0.32;
673
620
  }
674
621
 
675
- .charcoal-text-area-container:focus-within {
622
+ .charcoal-button:not(:disabled):not([aria-disabled]):focus-visible,
623
+ .charcoal-button[aria-disabled='false']:focus-visible {
676
624
  outline: none;
677
625
  box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
678
626
  }
679
627
 
680
- .charcoal-text-area-container:has([data-no-bottom-padding='true']) {
681
- height: calc(22px * (var(--charcoal-text-area-rows) + 1) + 18px);
628
+ .charcoal-button:not(:disabled):not([aria-disabled]):hover,
629
+ .charcoal-button[aria-disabled='false']:hover {
630
+ color: var(--charcoal-color-text-hover);
631
+ background-color: var(--charcoal-color-container-secondary-hover-a);
682
632
  }
683
633
 
684
- .charcoal-text-area-container:not([aria-disabled='true']):hover {
685
- background-color: var(--charcoal-color-container-secondary-hover-a);
634
+ .charcoal-button:not(:disabled):not([aria-disabled]):active,
635
+ .charcoal-button[aria-disabled='false']:active,
636
+ .charcoal-button[data-active='true'] {
637
+ color: var(--charcoal-color-text-press);
638
+ background-color: var(--charcoal-color-container-secondary-press-a);
686
639
  }
687
640
 
688
- .charcoal-text-area-container[aria-invalid='true']:focus-within {
689
- box-shadow: 0 0 0 4px rgba(255, 43, 0, 0.32);
641
+ .charcoal-button[data-variant='Primary'] {
642
+ color: var(--charcoal-color-text-on-primary-default);
643
+ background-color: var(--charcoal-color-container-primary-default);
690
644
  }
691
645
 
692
- .charcoal-text-area-textarea {
693
- border: none;
694
- outline: none;
695
- resize: none;
696
- font-family: inherit;
697
- color: inherit;
698
- box-sizing: border-box;
646
+ .charcoal-button[data-variant='Primary']:hover:not(:disabled):not([aria-disabled]),
647
+ .charcoal-button[data-variant='Primary']:hover[aria-disabled='false'] {
648
+ color: var(--charcoal-color-text-on-primary-hover);
649
+ background-color: var(--charcoal-color-container-primary-hover);
650
+ }
699
651
 
700
- /* Prevent zooming for iOS Safari */
701
- --charcoal-textarea-safari-prevent-zoom-scale: 0.875;
702
- --charcoal-textarea-line-height: calc(
703
- 22px / var(--charcoal-textarea-safari-prevent-zoom-scale)
704
- );
705
- --charcoal-textarea-padding-y: calc(
706
- 8px / var(--charcoal-textarea-safari-prevent-zoom-scale)
707
- );
708
- --charcoal-textarea-padding-x: calc(
709
- 9px / var(--charcoal-textarea-safari-prevent-zoom-scale)
710
- );
652
+ .charcoal-button[data-variant='Primary']:active:not(:disabled):not([aria-disabled]),
653
+ .charcoal-button[data-variant='Primary']:active[aria-disabled='false'],
654
+ .charcoal-button[data-variant='Primary'][data-active='true'] {
655
+ color: var(--charcoal-color-text-on-primary-press);
656
+ background-color: var(--charcoal-color-container-primary-press);
657
+ }
711
658
 
712
- transform-origin: top left;
713
- transform: scale(var(--charcoal-textarea-safari-prevent-zoom-scale));
714
- width: calc(100% / var(--charcoal-textarea-safari-prevent-zoom-scale));
715
- font-size: calc(14px / var(--charcoal-textarea-safari-prevent-zoom-scale));
716
- line-height: var(--charcoal-textarea-line-height);
717
- padding: var(--charcoal-textarea-padding-y) var(--charcoal-textarea-padding-x);
718
- height: calc(
719
- var(--charcoal-textarea-line-height) * var(--charcoal-text-area-rows) +
720
- var(--charcoal-textarea-padding-y) * 2
721
- );
659
+ .charcoal-button[data-variant='Overlay'] {
660
+ color: var(--charcoal-color-text-on-on-img-default);
661
+ background-color: var(--charcoal-color-container-on-img-default);
662
+ }
722
663
 
723
- /* Display box-shadow for iOS Safari */
724
- -webkit-appearance: none;
725
- -moz-appearance: none;
726
- appearance: none;
664
+ .charcoal-button[data-variant='Overlay']:hover:not(:disabled):not([aria-disabled]),
665
+ .charcoal-button[data-variant='Overlay']:hover[aria-disabled='false'] {
666
+ color: var(--charcoal-color-text-on-on-img-hover);
667
+ background-color: var(--charcoal-color-container-on-img-hover);
668
+ }
727
669
 
728
- background: none;
729
- }
670
+ .charcoal-button[data-variant='Overlay']:active:not(:disabled):not([aria-disabled]),
671
+ .charcoal-button[data-variant='Overlay']:active[aria-disabled='false'],
672
+ .charcoal-button[data-variant='Overlay'][data-active='true'] {
673
+ color: var(--charcoal-color-text-on-on-img-press);
674
+ background-color: var(--charcoal-color-container-on-img-press);
675
+ }
730
676
 
731
- .charcoal-text-area-textarea[data-no-bottom-padding='true'] {
732
- padding: var(--charcoal-textarea-padding-y)
733
- var(--charcoal-textarea-padding-x) 0;
734
- height: calc(
735
- var(--charcoal-textarea-line-height) * var(--charcoal-text-area-rows) +
736
- var(--charcoal-textarea-padding-y)
737
- );
677
+ .charcoal-button[data-variant='Navigation'] {
678
+ color: var(--charcoal-color-text-on-hud-default);
679
+ background-color: var(--charcoal-color-container-hud-default);
738
680
  }
739
681
 
740
- .charcoal-text-area-textarea::-moz-placeholder {
741
- color: var(--charcoal-color-text-placeholder-default);
742
- }
682
+ .charcoal-button[data-variant='Navigation']:hover:not(:disabled):not([aria-disabled]),
683
+ .charcoal-button[data-variant='Navigation']:hover[aria-disabled='false'] {
684
+ color: var(--charcoal-color-text-on-hud-hover);
685
+ background-color: var(--charcoal-color-container-hud-hover);
686
+ }
743
687
 
744
- .charcoal-text-area-textarea::placeholder {
745
- color: var(--charcoal-color-text-placeholder-default);
688
+ .charcoal-button[data-variant='Navigation']:active:not(:disabled):not([aria-disabled]),
689
+ .charcoal-button[data-variant='Navigation']:active[aria-disabled='false'],
690
+ .charcoal-button[data-variant='Navigation'][data-active='true'] {
691
+ color: var(--charcoal-color-text-on-hud-press);
692
+ background-color: var(--charcoal-color-container-hud-press);
693
+ }
694
+
695
+ .charcoal-button[data-variant='Danger'] {
696
+ color: var(--charcoal-color-text-on-negative-default);
697
+ background-color: var(--charcoal-color-container-negative-default);
746
698
  }
747
699
 
748
- .charcoal-text-area-counter {
749
- position: absolute;
750
- bottom: 9px;
751
- right: 8px;
700
+ .charcoal-button[data-variant='Danger']:hover:not(:disabled):not([aria-disabled]),
701
+ .charcoal-button[data-variant='Danger']:hover[aria-disabled='false'] {
702
+ color: var(--charcoal-color-text-on-negative-hover);
703
+ background-color: var(--charcoal-color-container-negative-hover);
704
+ }
752
705
 
753
- line-height: 22px;
754
- font-size: 14px;
755
- color: var(--charcoal-color-text-tertiary-default);
756
- }
757
- .charcoal-dropdown-selector-root {
706
+ .charcoal-button[data-variant='Danger']:active:not(:disabled):not([aria-disabled]),
707
+ .charcoal-button[data-variant='Danger']:active[aria-disabled='false'],
708
+ .charcoal-button[data-variant='Danger'][data-active='true'] {
709
+ color: var(--charcoal-color-text-on-negative-press);
710
+ background-color: var(--charcoal-color-container-negative-press);
711
+ }
712
+
713
+ .charcoal-button[data-size='S'] {
714
+ padding: 0 16px;
715
+ height: 32px;
716
+ }
717
+
718
+ .charcoal-button[data-full-width='true'] {
719
+ width: 100%;
720
+ }
721
+ .charcoal-radio__label {
758
722
  display: grid;
759
- grid-template-columns: 1fr;
723
+ grid-template-columns: auto 1fr;
760
724
  grid-gap: 4px;
761
- width: 100%;
725
+ align-items: center;
726
+ cursor: pointer;
762
727
  }
763
728
 
764
- .charcoal-dropdown-selector-root[aria-disabled='true'] {
765
- cursor: default;
729
+ .charcoal-radio__label[aria-disabled]:not([aria-disabled='false']) {
766
730
  opacity: 0.32;
731
+ cursor: default;
767
732
  }
768
733
 
769
- .charcoal-dropdown-selector-button {
770
- display: grid;
771
- grid-template-columns: 1fr auto;
772
- justify-content: space-between;
773
- align-items: center;
774
-
775
- height: 40px;
776
- width: 100%;
777
- box-sizing: border-box;
778
- border: none;
734
+ .charcoal-radio__label_div {
735
+ font-size: 14px;
736
+ line-height: 22px;
737
+ color: var(--charcoal-color-text-default);
738
+ }
739
+ .charcoal-icon-button {
779
740
  cursor: pointer;
780
- gap: 4px;
741
+ -webkit-appearance: none;
742
+ -moz-appearance: none;
743
+ appearance: none;
744
+ background: transparent;
745
+ padding: 0;
746
+ border-style: none;
747
+ outline: none;
748
+ color: inherit;
749
+ text-rendering: inherit;
750
+ letter-spacing: inherit;
751
+ word-spacing: inherit;
752
+ text-decoration: none;
753
+ font: inherit;
754
+ margin: 0;
755
+ overflow: visible;
756
+ text-transform: none;
781
757
 
782
- padding-right: 8px;
783
- padding-left: 8px;
784
- background-color: var(--charcoal-color-container-secondary-default-a);
785
- border-radius: 4px;
758
+ -webkit-user-select: none;
759
+
760
+ -moz-user-select: none;
786
761
 
762
+ user-select: none;
763
+ display: flex;
764
+ align-items: center;
765
+ justify-content: center;
766
+ border-radius: 999999px;
787
767
  transition:
788
- 0.2s box-shadow,
789
- 0.2s background-color;
768
+ 0.2s background-color,
769
+ 0.2s box-shadow;
790
770
  }
791
771
 
792
- .charcoal-dropdown-selector-button:disabled {
772
+ .charcoal-icon-button:disabled,
773
+ .charcoal-icon-button[aria-disabled]:not([aria-disabled='false']) {
793
774
  cursor: default;
775
+ opacity: 0.32;
794
776
  }
795
777
 
796
- .charcoal-dropdown-selector-button:not(:disabled):focus {
797
- outline: none;
798
- box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
778
+ .charcoal-icon-button:focus {
779
+ outline: none;
780
+ }
781
+
782
+ .charcoal-icon-button::-moz-focus-inner {
783
+ border-style: none;
784
+ padding: 0;
785
+ }
786
+
787
+ .charcoal-icon-button[data-size='XS'] {
788
+ width: 20px;
789
+ height: 20px;
790
+ }
791
+
792
+ .charcoal-icon-button[data-size='S'] {
793
+ width: 32px;
794
+ height: 32px;
795
+ }
796
+
797
+ .charcoal-icon-button[data-size='M'] {
798
+ width: 40px;
799
+ height: 40px;
800
+ }
801
+
802
+ .charcoal-icon-button[data-variant='Default'] {
803
+ color: var(--charcoal-color-icon-tertiary-default);
804
+ background-color: transparent;
805
+ }
806
+
807
+ .charcoal-icon-button[data-variant='Default'][data-active='true']:not(:disabled):not([aria-disabled]),
808
+ .charcoal-icon-button[data-variant='Default'][data-active='true'][aria-disabled='false'] {
809
+ color: var(--charcoal-color-icon-tertiary-press);
810
+ background-color: var(--charcoal-color-container-press-a);
799
811
  }
800
812
 
801
- .charcoal-dropdown-selector-button:not(:disabled):focus-visible {
802
- box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
813
+ .charcoal-icon-button[data-variant='Default'][data-active='false']:not(:disabled):not([aria-disabled]):hover,
814
+ .charcoal-icon-button[data-variant='Default'][data-active='false'][aria-disabled='false']:hover {
815
+ color: var(--charcoal-color-icon-tertiary-hover);
816
+ background-color: var(--charcoal-color-container-hover-a);
803
817
  }
804
818
 
805
- .charcoal-dropdown-selector-button:not(:disabled)[data-active='true'],
806
- .charcoal-dropdown-selector-button:not(:disabled):active {
807
- background-color: var(--charcoal-color-container-secondary-press-a);
819
+ .charcoal-icon-button[data-variant='Default'][data-active='false']:not(:disabled):not([aria-disabled]):active,
820
+ .charcoal-icon-button[data-variant='Default'][data-active='false'][aria-disabled='false']:active {
821
+ color: var(--charcoal-color-icon-tertiary-press);
822
+ background-color: var(--charcoal-color-container-press-a);
808
823
  }
809
824
 
810
- .charcoal-dropdown-selector-button:not(:disabled):hover {
811
- background-color: var(--charcoal-color-container-secondary-hover-a);
825
+ .charcoal-icon-button[data-variant='Overlay'] {
826
+ color: var(--charcoal-color-icon-on-on-img-default);
827
+ background-color: var(--charcoal-color-container-on-img-default);
828
+ }
829
+
830
+ .charcoal-icon-button[data-variant='Overlay'][data-active='true']:not(:disabled):not([aria-disabled]),
831
+ .charcoal-icon-button[data-variant='Overlay'][data-active='true'][aria-disabled='false'] {
832
+ color: var(--charcoal-color-icon-on-on-img-press);
833
+ background-color: var(--charcoal-color-container-on-img-press);
812
834
  }
813
835
 
814
- .charcoal-dropdown-selector-button:not(:disabled):focus:not(:focus-visible) {
815
- box-shadow: none;
836
+ .charcoal-icon-button[data-variant='Overlay'][data-active='false']:not(:disabled):not([aria-disabled]):hover,
837
+ .charcoal-icon-button[data-variant='Overlay'][data-active='false'][aria-disabled='false']:hover {
838
+ color: var(--charcoal-color-icon-on-on-img-hover);
839
+ background-color: var(--charcoal-color-container-on-img-hover);
816
840
  }
817
841
 
818
- .charcoal-dropdown-selector-button[aria-invalid='true'],
819
- .charcoal-dropdown-selector-button:not(:disabled)[aria-invalid='true']:focus:not(:focus-visible) {
820
- box-shadow: 0 0 0 4px rgba(255, 43, 0, 0.32);
821
- }
842
+ .charcoal-icon-button[data-variant='Overlay'][data-active='false']:not(:disabled):not([aria-disabled]):active,
843
+ .charcoal-icon-button[data-variant='Overlay'][data-active='false'][aria-disabled='false']:active {
844
+ color: var(--charcoal-color-icon-on-on-img-press);
845
+ background-color: var(--charcoal-color-container-on-img-press);
846
+ }
822
847
 
823
- .charcoal-ui-dropdown-selector-text {
824
- text-align: left;
825
- font-size: 14px;
826
- line-height: 22px;
827
- display: flow-root;
828
- color: var(--charcoal-color-text-default);
829
- overflow: hidden;
830
- text-overflow: ellipsis;
831
- white-space: nowrap;
832
- }
848
+ .charcoal-icon-button:not(:disabled):not([aria-disabled]):focus,
849
+ .charcoal-icon-button[aria-disabled='false']:focus {
850
+ outline: none;
851
+ box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
852
+ }
833
853
 
834
- .charcoal-ui-dropdown-selector-text[data-placeholder='true'] {
835
- color: var(--charcoal-color-text-placeholder-default);
854
+ .charcoal-icon-button:not(:disabled):not([aria-disabled]):focus-visible,
855
+ .charcoal-icon-button[aria-disabled='false']:focus-visible {
856
+ box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
836
857
  }
837
858
 
838
- .charcoal-ui-dropdown-selector-icon {
839
- color: var(--charcoal-color-icon-secondary-default);
840
- }
841
- .charcoal-checkbox__label {
859
+ .charcoal-icon-button:not(:disabled):not([aria-disabled]):focus:not(:focus-visible),
860
+ .charcoal-icon-button[aria-disabled='false']:focus:not(:focus-visible) {
861
+ box-shadow: none;
862
+ }
863
+ .charcoal-multi-select {
864
+ display: grid;
865
+ grid-template-columns: auto 1fr;
866
+ align-items: center;
842
867
  position: relative;
843
868
  cursor: pointer;
844
- display: flex;
845
869
  gap: 4px;
846
870
  }
847
871
 
848
- .charcoal-checkbox__label[aria-disabled='true'] {
849
- cursor: default;
872
+ .charcoal-multi-select:disabled,
873
+ .charcoal-multi-select[aria-disabled]:not([aria-disabled='false']) {
850
874
  opacity: 0.32;
875
+ cursor: default;
851
876
  }
852
877
 
853
- .charcoal-checkbox__label[aria-disabled='true'] > input {
854
- opacity: 1;
855
- }
856
-
857
- .charcoal-checkbox__label_div {
858
- flex: 1;
859
- color: var(--charcoal-color-text-default);
878
+ .charcoal-multi-select-label {
879
+ display: flow-root;
880
+ align-items: center;
860
881
  font-size: 14px;
861
- line-height: 20px;
862
- }
863
- .charcoal-icon {
864
- display: inline-flex;
865
- width: var(--charcoal-icon-size);
866
- height: var(--charcoal-icon-size);
882
+ line-height: 22px;
883
+ color: var(--charcoal-color-text-default);
867
884
  }
868
885
 
869
- pixiv-icon:not(:defined) {
870
- --pixiv-icon-base: 24px;
871
- --pixiv-icon-scale: 1;
872
- --pixiv-icon-size: calc(var(--pixiv-icon-base) * var(--pixiv-icon-scale));
886
+ .charcoal-multi-select-label::before {
887
+ display: block;
888
+ width: 0;
889
+ height: 0;
890
+ content: '';
891
+ margin-top: -4px;
892
+ }
873
893
 
874
- display: inline-flex;
875
- /* --charcoal-icon-size がセットされていればそれを優先、
876
- なければ name / scale から導出した --pixiv-icon-size をフォールバック */
877
- width: var(--charcoal-icon-size, var(--pixiv-icon-size));
878
- height: var(--charcoal-icon-size, var(--pixiv-icon-size));
894
+ .charcoal-multi-select-label::after {
895
+ display: block;
896
+ width: 0;
897
+ height: 0;
898
+ content: '';
899
+ margin-bottom: -4px;
900
+ }
901
+
902
+ .charcoal-multi-select-input[type='checkbox'] {
903
+ -webkit-appearance: none;
904
+ -moz-appearance: none;
905
+ appearance: none;
906
+ display: block;
907
+ width: 20px;
908
+ height: 20px;
909
+ margin: 0;
910
+ background-color: var(--charcoal-color-container-neutral-default);
911
+ border-radius: 999999px;
912
+ transition:
913
+ 0.2s background-color,
914
+ 0.2s box-shadow;
879
915
  }
880
916
 
881
- pixiv-icon:not(:defined)[name^='16/'] {
882
- --pixiv-icon-base: 16px;
883
- --pixiv-icon-size: 16px;
917
+ .charcoal-multi-select-input[type='checkbox']:checked {
918
+ background-color: var(--charcoal-color-container-primary-default);
884
919
  }
885
920
 
886
- pixiv-icon:not(:defined)[name^='24/'][scale='2'] {
887
- --pixiv-icon-scale: 2;
888
- }
921
+ .charcoal-multi-select-input[type='checkbox']:focus {
922
+ outline: none;
923
+ box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
924
+ }
889
925
 
890
- pixiv-icon:not(:defined)[name^='24/'][scale='3'] {
891
- --pixiv-icon-scale: 3;
892
- }
926
+ .charcoal-multi-select-input[type='checkbox']:focus-visible {
927
+ box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
928
+ }
893
929
 
894
- pixiv-icon:not(:defined)[name^='32/'] {
895
- --pixiv-icon-base: 32px;
896
- --pixiv-icon-size: 32px;
930
+ .charcoal-multi-select-input[type='checkbox']:focus:not(:focus-visible) {
931
+ box-shadow: none;
897
932
  }
898
933
 
899
- pixiv-icon:not(:defined)[name^='Inline/'] {
900
- --pixiv-icon-base: 16px;
934
+ .charcoal-multi-select-input[type='checkbox']:hover:not(:disabled):not([aria-disabled]),
935
+ .charcoal-multi-select-input[type='checkbox']:hover[aria-disabled='false'] {
936
+ background-color: var(--charcoal-color-container-neutral-hover);
901
937
  }
902
938
 
903
- pixiv-icon:not(:defined)[name^='Inline/'][scale='2'] {
904
- --pixiv-icon-scale: 2;
905
- }
906
- .charcoal-dropdown-selector-menu-item {
907
- font-size: 14px;
908
- line-height: 22px;
909
- color: var(--charcoal-color-text-secondary-default);
910
- padding: 9px 0;
939
+ .charcoal-multi-select-input[type='checkbox']:active:not(:disabled):not([aria-disabled]),
940
+ .charcoal-multi-select-input[type='checkbox']:active[aria-disabled='false'] {
941
+ background-color: var(--charcoal-color-container-neutral-press);
942
+ }
911
943
 
912
- display: flex;
913
- align-items: center;
914
- width: 100%;
915
- margin-left: 20px;
916
- }
944
+ .charcoal-multi-select-input[type='checkbox']:checked:hover:not(:disabled):not([aria-disabled]),
945
+ .charcoal-multi-select-input[type='checkbox']:checked:hover[aria-disabled='false'] {
946
+ background-color: var(--charcoal-color-container-primary-hover);
947
+ }
917
948
 
918
- .charcoal-dropdown-selector-menu-item[data-selected='true'] {
919
- margin-left: 0px;
920
- }
949
+ .charcoal-multi-select-input[type='checkbox']:checked:active:not(:disabled):not([aria-disabled]),
950
+ .charcoal-multi-select-input[type='checkbox']:checked:active[aria-disabled='false'] {
951
+ background-color: var(--charcoal-color-container-primary-press);
952
+ }
921
953
 
922
- .charcoal-dropdown-selector-menu-item-icon {
923
- color: var(--charcoal-color-text-secondary-default);
924
- padding-right: 4px;
925
- }
954
+ .charcoal-multi-select-input[type='checkbox'][aria-invalid='true'][data-overlay='false']:not(:disabled):not(
955
+ [aria-disabled]
956
+ ) {
957
+ box-shadow: 0 0 0 4px rgba(255, 43, 0, 0.32);
958
+ }
926
959
 
927
- .charcoal-dropdown-selector-menu-item-container {
928
- display: flex;
929
- align-items: center;
930
- }
960
+ .charcoal-multi-select-input[type='checkbox'][aria-invalid='true'][data-overlay='false'][aria-disabled='false'] {
961
+ box-shadow: 0 0 0 4px rgba(255, 43, 0, 0.32);
962
+ }
931
963
 
932
- .charcoal-dropdown-selector-menu-secondary {
933
- font-size: 12px;
934
- line-height: 20px;
935
- color: var(--charcoal-color-text-tertiary-default);
936
- padding-bottom: 9px;
964
+ .charcoal-multi-select-input[type='checkbox'][data-overlay='true'] {
965
+ background-color: var(--charcoal-color-container-on-img-default);
966
+ }
937
967
 
968
+ .charcoal-multi-select-overlay {
969
+ position: absolute;
970
+ top: -2px;
971
+ left: -2px;
972
+ box-sizing: border-box;
938
973
  display: flex;
939
974
  align-items: center;
940
- margin-left: 20px;
975
+ justify-content: center;
976
+ width: 24px;
977
+ height: 24px;
978
+ border-radius: 999999px;
979
+ color: var(--charcoal-color-icon-on-primary-default);
980
+ transition: 0.2s box-shadow;
941
981
  }
942
982
 
943
- .charcoal-dropdown-selector-menu-fullwidth {
944
- width: 100%;
945
- }
983
+ .charcoal-multi-select-overlay[aria-invalid='true'][data-overlay='true']:not(:disabled):not(
984
+ [aria-disabled]
985
+ ) {
986
+ box-shadow: 0 0 0 4px rgba(255, 43, 0, 0.32);
987
+ }
988
+
989
+ .charcoal-multi-select-overlay[aria-invalid='true'][data-overlay='true'][aria-disabled='false'] {
990
+ box-shadow: 0 0 0 4px rgba(255, 43, 0, 0.32);
991
+ }
992
+
993
+ .charcoal-multi-select-overlay[data-overlay='true'] {
994
+ border-color: var(--charcoal-color-border-hud);
995
+ border-width: 2px;
996
+ border-style: solid;
997
+ }
946
998
  .charcoal-switch__label {
947
999
  display: inline-grid;
948
1000
  grid-template-columns: auto 1fr;
@@ -966,77 +1018,167 @@ pixiv-icon:not(:defined)[name^='Inline/'][scale='2'] {
966
1018
  line-height: 22px;
967
1019
  color: var(--charcoal-color-text-default);
968
1020
  }
969
- .charcoal-segmented-control {
970
- display: inline-flex;
971
- align-items: center;
1021
+ .charcoal-menu-item-group {
1022
+ display: block;
1023
+ }
972
1024
 
973
- background-color: var(--charcoal-color-container-secondary-default-a);
974
- border-radius: 16px;
1025
+ .charcoal-menu-item-group > span {
1026
+ display: block;
1027
+ color: var(--charcoal-color-text-tertiary-default);
1028
+ font-size: 12px;
1029
+ font-weight: bold;
1030
+ padding: 12px 0 8px 16px;
975
1031
  }
976
1032
 
977
- .charcoal-segmented-control[data-uniform-segment-width='true'],
978
- .charcoal-segmented-control[data-full-width='true'] {
979
- display: inline-grid;
980
- grid-auto-columns: minmax(80px, 1fr);
981
- grid-auto-rows: 32px;
982
- grid-auto-flow: column;
983
- }
1033
+ .charcoal-menu-item-group > ul {
1034
+ padding-left: 0;
1035
+ margin: 0;
1036
+ box-sizing: border-box;
1037
+ list-style: none;
1038
+ overflow: hidden;
1039
+ }
1040
+ .charcoal-text-field-root {
1041
+ display: grid;
1042
+ grid-template-columns: 1fr;
1043
+ grid-gap: 4px;
1044
+ }
984
1045
 
985
- .charcoal-segmented-control[data-full-width='true'] {
986
- width: 100%;
1046
+ .charcoal-text-field-root[aria-disabled='true'] {
1047
+ opacity: 0.32;
987
1048
  }
988
1049
 
989
- .charcoal-segmented-control-radio__label {
990
- position: relative;
1050
+ .charcoal-text-field-container {
991
1051
  display: flex;
992
- align-items: center;
993
- justify-content: center;
994
- cursor: pointer;
995
- height: 32px;
996
-
997
- padding-right: 16px;
998
- padding-left: 16px;
999
- border-radius: 16px;
1052
+ height: 40px;
1053
+ transition:
1054
+ 0.2s background-color,
1055
+ 0.2s box-shadow;
1000
1056
  color: var(--charcoal-color-text-secondary-default);
1001
-
1002
- font-size: 14px;
1057
+ background-color: var(--charcoal-color-container-secondary-default-a);
1058
+ border-radius: 4px;
1059
+ padding: 0 8px;
1003
1060
  line-height: 22px;
1061
+ font-size: 14px;
1004
1062
  }
1005
1063
 
1006
- .charcoal-segmented-control-radio__label[aria-disabled]:not([aria-disabled='false']) {
1007
- cursor: default;
1008
- opacity: 0.32;
1064
+ .charcoal-text-field-container[data-invalid='true'] {
1065
+ box-shadow: 0 0 0 4px rgba(255, 43, 0, 0.32);
1009
1066
  }
1010
1067
 
1011
- .charcoal-segmented-control-radio__label[data-checked='true'] {
1012
- background-color: var(--charcoal-color-container-primary-default);
1013
- color: var(--charcoal-color-text-on-primary-default);
1068
+ .charcoal-text-field-container:not([aria-disabled='true']):hover {
1069
+ background-color: var(--charcoal-color-container-secondary-hover-a);
1014
1070
  }
1015
1071
 
1016
- .charcoal-segmented-control-radio__label[data-uniform-segment-width='true'],
1017
- .charcoal-segmented-control-radio__label[data-full-width='true'] {
1018
- justify-content: center;
1019
- white-space: nowrap;
1072
+ .charcoal-text-field-container:not([aria-disabled='true']):focus-within {
1073
+ outline: none;
1074
+ box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
1020
1075
  }
1021
1076
 
1022
- .charcoal-segmented-control-radio__input {
1023
- position: absolute;
1077
+ .charcoal-text-field-container:not([aria-disabled='true'])[data-invalid='true']:focus-within {
1078
+ box-shadow: 0 0 0 4px rgba(255, 43, 0, 0.32);
1079
+ }
1024
1080
 
1025
- height: 0px;
1026
- width: 0px;
1027
- padding: 0;
1028
- margin: 0;
1081
+ .charcoal-text-field-prefix {
1082
+ display: flex;
1083
+ align-items: center;
1084
+ margin-right: 4px;
1085
+ }
1029
1086
 
1030
- -webkit-appearance: none;
1087
+ .charcoal-text-field-suffix {
1088
+ display: flex;
1089
+ align-items: center;
1090
+ gap: 8px;
1091
+ margin-left: 4px;
1092
+ }
1031
1093
 
1032
- -moz-appearance: none;
1094
+ .charcoal-text-field-input-root {
1095
+ flex: 1;
1096
+ min-width: 0;
1097
+ overflow: hidden;
1098
+ }
1033
1099
 
1034
- appearance: none;
1100
+ .charcoal-text-field-input {
1101
+ border: none;
1035
1102
  box-sizing: border-box;
1036
- overflow: hidden;
1037
- white-space: nowrap;
1038
- opacity: 0;
1103
+ outline: none;
1104
+ font-family: inherit;
1105
+
1106
+ /* Prevent zooming for iOS Safari */
1107
+ transform-origin: top left;
1108
+ transform: scale(0.875);
1109
+ width: calc(100% / 0.875);
1110
+ height: calc(100% / 0.875);
1111
+ font-size: calc(14px / 0.875);
1112
+ line-height: calc(22px / 0.875);
1113
+ padding-left: 0;
1114
+ padding-right: 0;
1115
+ border-radius: calc(4px / 0.875);
1116
+
1117
+ /* Display box-shadow for iOS Safari */
1118
+ -webkit-appearance: none;
1119
+ -moz-appearance: none;
1120
+ appearance: none;
1121
+ background: transparent;
1122
+
1123
+ color: var(--charcoal-color-text-secondary-default);
1124
+ }
1125
+
1126
+ .charcoal-text-field-input::-moz-placeholder {
1127
+ color: var(--charcoal-color-text-placeholder-default);
1128
+ }
1129
+
1130
+ .charcoal-text-field-input::placeholder {
1131
+ color: var(--charcoal-color-text-placeholder-default);
1132
+ }
1133
+
1134
+ .charcoal-text-field-line-counter {
1135
+ line-height: 22px;
1136
+ font-size: 14px;
1137
+ color: var(--charcoal-color-text-tertiary-default);
1138
+ }
1139
+ .charcoal-icon {
1140
+ display: inline-flex;
1141
+ width: var(--charcoal-icon-size);
1142
+ height: var(--charcoal-icon-size);
1143
+ }
1144
+
1145
+ pixiv-icon:not(:defined) {
1146
+ --pixiv-icon-base: 24px;
1147
+ --pixiv-icon-scale: 1;
1148
+ --pixiv-icon-size: calc(var(--pixiv-icon-base) * var(--pixiv-icon-scale));
1149
+
1150
+ display: inline-flex;
1151
+ /* --charcoal-icon-size がセットされていればそれを優先、
1152
+ なければ name / scale から導出した --pixiv-icon-size をフォールバック */
1153
+ width: var(--charcoal-icon-size, var(--pixiv-icon-size));
1154
+ height: var(--charcoal-icon-size, var(--pixiv-icon-size));
1039
1155
  }
1156
+
1157
+ pixiv-icon:not(:defined)[name^='16/'] {
1158
+ --pixiv-icon-base: 16px;
1159
+ --pixiv-icon-size: 16px;
1160
+ }
1161
+
1162
+ pixiv-icon:not(:defined)[name^='24/'][scale='2'] {
1163
+ --pixiv-icon-scale: 2;
1164
+ }
1165
+
1166
+ pixiv-icon:not(:defined)[name^='24/'][scale='3'] {
1167
+ --pixiv-icon-scale: 3;
1168
+ }
1169
+
1170
+ pixiv-icon:not(:defined)[name^='32/'] {
1171
+ --pixiv-icon-base: 32px;
1172
+ --pixiv-icon-size: 32px;
1173
+ }
1174
+
1175
+ pixiv-icon:not(:defined)[name^='Inline/'] {
1176
+ --pixiv-icon-base: 16px;
1177
+ }
1178
+
1179
+ pixiv-icon:not(:defined)[name^='Inline/'][scale='2'] {
1180
+ --pixiv-icon-scale: 2;
1181
+ }
1040
1182
  .charcoal-modal-background {
1041
1183
  overflow: auto;
1042
1184
  display: flex;
@@ -1107,275 +1249,452 @@ pixiv-icon:not(:defined)[name^='Inline/'][scale='2'] {
1107
1249
  font-weight: inherit;
1108
1250
  font-size: inherit;
1109
1251
  }
1110
- .charcoal-tag-item {
1111
- --charcoal-tag-item-color: var(--charcoal-color-text-on-primary-default);
1112
- --charcoal-tag-item-size: 40px;
1113
- --charcoal-tag-item-padding-left: 24px;
1114
- --charcoal-tag-item-padding-right: 24px;
1115
- --charcoal-tag-item-bg: ;
1116
-
1117
- isolation: isolate;
1118
- position: relative;
1119
-
1120
- -webkit-appearance: none;
1121
-
1122
- -moz-appearance: none;
1252
+ .charcoal-text-area-root {
1253
+ display: grid;
1254
+ grid-template-columns: 1fr;
1255
+ grid-gap: 4px;
1256
+ }
1123
1257
 
1124
- appearance: none;
1125
- outline: none;
1126
- border-style: none;
1258
+ .charcoal-text-area-root[aria-disabled='true'] {
1259
+ opacity: 0.32;
1260
+ }
1127
1261
 
1128
- display: inline-flex;
1129
- gap: 8px;
1130
- align-items: center;
1131
- justify-content: center;
1262
+ .charcoal-text-area-container {
1263
+ /* Runtime variable overridden by the React component. */
1264
+ --charcoal-text-area-rows: 4;
1132
1265
 
1133
- text-decoration: none;
1134
- cursor: pointer;
1266
+ position: relative;
1135
1267
  overflow: hidden;
1136
1268
 
1137
- color: var(--charcoal-tag-item-color);
1138
- height: var(--charcoal-tag-item-size);
1139
- padding-top: 4px;
1140
- padding-bottom: 4px;
1141
- padding-left: var(--charcoal-tag-item-padding-left);
1142
- padding-right: var(--charcoal-tag-item-padding-right);
1143
- box-sizing: border-box;
1269
+ color: var(--charcoal-color-text-secondary-default);
1270
+ background-color: var(--charcoal-color-container-secondary-default-a);
1144
1271
  border-radius: 4px;
1145
-
1146
- transition: 0.2s box-shadow;
1272
+ transition:
1273
+ 0.2s background-color,
1274
+ 0.2s box-shadow;
1275
+ height: calc(22px * var(--charcoal-text-area-rows) + 18px);
1147
1276
  }
1148
1277
 
1149
- .charcoal-tag-item[data-size='M'] {
1150
- --charcoal-tag-item-size: 40px;
1151
- --charcoal-tag-item-padding-left: 24px;
1152
- --charcoal-tag-item-padding-right: 24px;
1278
+ .charcoal-text-area-container[aria-invalid='true'] {
1279
+ box-shadow: 0 0 0 4px rgba(255, 43, 0, 0.32);
1153
1280
  }
1154
1281
 
1155
- .charcoal-tag-item[data-size='S'] {
1156
- --charcoal-tag-item-size: 32px;
1157
- --charcoal-tag-item-padding-left: 16px;
1158
- --charcoal-tag-item-padding-right: 16px;
1282
+ .charcoal-text-area-container:focus-within {
1283
+ outline: none;
1284
+ box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
1159
1285
  }
1160
1286
 
1161
- .charcoal-tag-item[data-state='inactive'] {
1162
- --charcoal-tag-item-color: var(--charcoal-color-text-secondary-default);
1287
+ .charcoal-text-area-container:has([data-no-bottom-padding='true']) {
1288
+ height: calc(22px * (var(--charcoal-text-area-rows) + 1) + 18px);
1163
1289
  }
1164
1290
 
1165
- .charcoal-tag-item[data-state='active'] {
1166
- --charcoal-tag-item-padding-left: 16px;
1167
- --charcoal-tag-item-padding-right: 8px;
1291
+ .charcoal-text-area-container:not([aria-disabled='true']):hover {
1292
+ background-color: var(--charcoal-color-container-secondary-hover-a);
1168
1293
  }
1169
1294
 
1170
- .charcoal-tag-item:disabled,
1171
- .charcoal-tag-item[aria-disabled]:not([aria-disabled='false']) {
1172
- opacity: 0.32;
1173
- cursor: default;
1295
+ .charcoal-text-area-container[aria-invalid='true']:focus-within {
1296
+ box-shadow: 0 0 0 4px rgba(255, 43, 0, 0.32);
1174
1297
  }
1175
1298
 
1176
- .charcoal-tag-item:not(:disabled):not([aria-disabled]):focus-visible,
1177
- .charcoal-tag-item[aria-disabled='false']:focus-visible {
1178
- outline: none;
1179
- box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
1180
- }
1299
+ .charcoal-text-area-textarea {
1300
+ border: none;
1301
+ outline: none;
1302
+ resize: none;
1303
+ font-family: inherit;
1304
+ color: inherit;
1305
+ box-sizing: border-box;
1181
1306
 
1182
- .charcoal-tag-item:not(:disabled):not([aria-disabled]):focus,
1183
- .charcoal-tag-item[aria-disabled='false']:focus {
1184
- outline: none;
1185
- box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
1186
- }
1307
+ /* Prevent zooming for iOS Safari */
1308
+ --charcoal-textarea-safari-prevent-zoom-scale: 0.875;
1309
+ --charcoal-textarea-line-height: calc(
1310
+ 22px / var(--charcoal-textarea-safari-prevent-zoom-scale)
1311
+ );
1312
+ --charcoal-textarea-padding-y: calc(
1313
+ 8px / var(--charcoal-textarea-safari-prevent-zoom-scale)
1314
+ );
1315
+ --charcoal-textarea-padding-x: calc(
1316
+ 9px / var(--charcoal-textarea-safari-prevent-zoom-scale)
1317
+ );
1187
1318
 
1188
- .charcoal-tag-item:not(:disabled):not([aria-disabled]):focus:not(:focus-visible),
1189
- .charcoal-tag-item[aria-disabled='false']:focus:not(:focus-visible) {
1190
- box-shadow: none;
1191
- }
1319
+ transform-origin: top left;
1320
+ transform: scale(var(--charcoal-textarea-safari-prevent-zoom-scale));
1321
+ width: calc(100% / var(--charcoal-textarea-safari-prevent-zoom-scale));
1322
+ font-size: calc(14px / var(--charcoal-textarea-safari-prevent-zoom-scale));
1323
+ line-height: var(--charcoal-textarea-line-height);
1324
+ padding: var(--charcoal-textarea-padding-y) var(--charcoal-textarea-padding-x);
1325
+ height: calc(
1326
+ var(--charcoal-textarea-line-height) * var(--charcoal-text-area-rows) +
1327
+ var(--charcoal-textarea-padding-y) * 2
1328
+ );
1192
1329
 
1193
- .charcoal-tag-item__bg {
1194
- background-color: var(--charcoal-tag-item-bg);
1330
+ /* Display box-shadow for iOS Safari */
1331
+ -webkit-appearance: none;
1332
+ -moz-appearance: none;
1333
+ appearance: none;
1334
+
1335
+ background: none;
1195
1336
  }
1196
1337
 
1197
- .charcoal-tag-item__bg[data-bg-variant='image'] {
1198
- background-color: var(--charcoal-color-container-on-img-default);
1338
+ .charcoal-text-area-textarea[data-no-bottom-padding='true'] {
1339
+ padding: var(--charcoal-textarea-padding-y)
1340
+ var(--charcoal-textarea-padding-x) 0;
1341
+ height: calc(
1342
+ var(--charcoal-textarea-line-height) * var(--charcoal-text-area-rows) +
1343
+ var(--charcoal-textarea-padding-y)
1344
+ );
1199
1345
  }
1200
1346
 
1201
- .charcoal-tag-item__bg[data-bg-variant='image']::before {
1202
- content: '';
1203
- position: absolute;
1204
- z-index: 1;
1205
- top: 0;
1206
- left: 0;
1207
- width: 100%;
1208
- height: 100%;
1209
- background-position: center;
1210
- background-size: cover;
1211
- background-image: var(--charcoal-tag-item-bg);
1212
- mix-blend-mode: overlay;
1213
- }
1214
-
1215
- .charcoal-tag-item__bg[data-state='inactive'] {
1216
- background-color: var(--charcoal-color-container-secondary-default);
1347
+ .charcoal-text-area-textarea::-moz-placeholder {
1348
+ color: var(--charcoal-color-text-placeholder-default);
1217
1349
  }
1218
1350
 
1219
- .charcoal-tag-item__label {
1220
- height: 100%;
1221
- display: flex;
1222
- flex-direction: column;
1223
- align-items: center;
1224
- justify-content: center;
1225
- }
1226
-
1227
- .charcoal-tag-item__label[data-has-translate='true'] {
1228
- justify-content: space-between;
1351
+ .charcoal-text-area-textarea::placeholder {
1352
+ color: var(--charcoal-color-text-placeholder-default);
1229
1353
  }
1230
1354
 
1231
- .charcoal-tag-item__label__translated {
1232
- --charcoal-tag-item-text-font-size: 12px;
1233
- --charcoal-tag-item-text-line-height: 20px;
1234
- font-weight: bold;
1235
- }
1236
-
1237
- .charcoal-tag-item__label__translated::before {
1238
- display: none;
1239
- }
1240
-
1241
- .charcoal-tag-item__label__text {
1242
- --charcoal-tag-item-text-font-size: 14px;
1243
- --charcoal-tag-item-text-line-height: 22px;
1355
+ .charcoal-text-area-counter {
1356
+ position: absolute;
1357
+ bottom: 9px;
1358
+ right: 8px;
1244
1359
 
1245
- max-width: 152px;
1246
- overflow: hidden;
1247
- font-weight: bold;
1360
+ line-height: 22px;
1361
+ font-size: 14px;
1362
+ color: var(--charcoal-color-text-tertiary-default);
1363
+ }
1364
+ .charcoal-carousel {
1365
+ --charcoal-carousel-gap: 0px;
1248
1366
 
1249
- color: inherit;
1250
- white-space: nowrap;
1251
- text-overflow: ellipsis;
1367
+ position: relative;
1368
+ display: block;
1252
1369
  }
1253
1370
 
1254
- .charcoal-tag-item__label__text[data-has-translate='true'] {
1255
- --charcoal-tag-item-text-font-size: 10px;
1256
- --charcoal-tag-item-text-line-height: 14px;
1257
- font-weight: normal;
1371
+ .charcoal-carousel[data-full-width='true'] {
1372
+ width: 100vw;
1373
+ margin-inline: calc(50% - 50vw);
1258
1374
  }
1259
1375
 
1260
- /* Kept flat: different class name from .charcoal-tag-item__label__text (note: "labe" typo in original) */
1261
- .charcoal-tag-item__labe__text[data-has-translate='true']::after {
1262
- display: none;
1376
+ .charcoal-carousel__viewport {
1377
+ position: relative;
1263
1378
  }
1264
- .charcoal-text-ellipsis {
1265
- /* Runtime variables overridden by the React component. */
1266
- --charcoal-text-ellipsis-line-limit: 1;
1267
- --charcoal-text-ellipsis-line-height: inherit;
1268
1379
 
1269
- overflow: hidden;
1270
- overflow-wrap: break-word;
1271
- display: -webkit-box;
1272
- -webkit-box-orient: vertical;
1273
- -webkit-line-clamp: var(--charcoal-text-ellipsis-line-limit);
1274
- }
1380
+ /* フォーカスリングは scroller ではなく viewport に描く。scroller に置くと
1381
+ hasGradient の mask(mask-clip: border-box)で外側の box-shadow ごと消えるため。 */
1275
1382
 
1276
- .charcoal-text-ellipsis[data-has-line-height='true'] {
1277
- line-height: var(--charcoal-text-ellipsis-line-height);
1383
+ .charcoal-carousel__viewport[data-focus-visible] {
1384
+ box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
1278
1385
  }
1279
1386
 
1280
- .charcoal-text-ellipsis[data-has-line-height='false'] {
1281
- line-height: inherit;
1387
+ /* スライド間隔は gap prop(--charcoal-carousel-gap)で注入する。
1388
+ スライド寸法は sandbox 同様、利用者が children 側で持つ。 */
1389
+ .charcoal-carousel__scroller {
1390
+ position: relative;
1391
+ display: flex;
1392
+ gap: var(--charcoal-carousel-gap);
1393
+ overflow-x: auto;
1394
+ overflow-y: hidden;
1395
+ overscroll-behavior-x: contain;
1396
+ scroll-behavior: smooth;
1397
+ scrollbar-width: none;
1398
+ outline: none;
1399
+ }
1400
+ .charcoal-carousel__scroller::-webkit-scrollbar {
1401
+ display: none;
1282
1402
  }
1283
1403
 
1284
- .charcoal-text-ellipsis[data-line-limit='1'][data-use-nowrap='true'] {
1285
- text-overflow: ellipsis;
1286
- white-space: nowrap;
1287
- }
1288
- .charcoal-modal-header-root {
1289
- height: 64px;
1290
- display: grid;
1291
- align-content: center;
1292
- justify-content: center;
1404
+ /* スクロールスナップ type は prop(scrollSnap.type)で scroller に出し分ける。
1405
+ align は基底 .charcoal-carousel__item の後(後述)に置く(no-descending-specificity 回避)。
1406
+ 未指定時の既定(M=none / S=mandatory / align=center)は JS 側で data 属性に解決する。 */
1407
+ .charcoal-carousel[data-scroll-snap-type='none'] .charcoal-carousel__scroller {
1408
+ scroll-snap-type: none;
1293
1409
  }
1294
1410
 
1295
- @media (max-width: 743px) {
1296
- .charcoal-modal-header-root[data-bottom-sheet='true'],
1297
- .charcoal-modal-header-root[data-bottom-sheet='full'] {
1298
- height: 48px;
1299
- }
1411
+ .charcoal-carousel[data-scroll-snap-type='proximity']
1412
+ .charcoal-carousel__scroller {
1413
+ scroll-snap-type: x proximity;
1300
1414
  }
1301
1415
 
1302
- .charcoal-modal-header-title {
1303
- color: var(--charcoal-color-text-default);
1304
- font-size: 16px;
1305
- line-height: 24px;
1306
- font-weight: bold;
1307
- display: flow-root;
1416
+ .charcoal-carousel[data-scroll-snap-type='mandatory']
1417
+ .charcoal-carousel__scroller {
1418
+ scroll-snap-type: x mandatory;
1308
1419
  }
1309
1420
 
1310
- .charcoal-modal-align {
1311
- padding-left: 16px;
1312
- padding-right: 16px;
1421
+ /* グラデーション: mask で端のアイテム自体を透明へフェードさせる(下の背景色を
1422
+ 問わない)。mask の色はアルファとしてだけ効く(#000=表示 / transparent=透過)。
1423
+ 左フェード・右フェードの 2 レイヤーを intersect で合成し、はみ出して
1424
+ スクロール可能な側のみ data-can-prev/next で 72px のフェード帯を枠内に置く。
1425
+ 無効な側はフェード帯ごと枠外へスライドして隠す(mask-image と違い
1426
+ mask-position は補間可能なので、切替が 0.2s のフェードになる)。 */
1427
+ .charcoal-carousel[data-has-gradient='true'] .charcoal-carousel__scroller {
1428
+ -webkit-mask-image:
1429
+ linear-gradient(to right, transparent, #000 72px),
1430
+ linear-gradient(to left, transparent, #000 72px);
1431
+ mask-image:
1432
+ linear-gradient(to right, transparent, #000 72px),
1433
+ linear-gradient(to left, transparent, #000 72px);
1434
+ /* 枠外へ 72px スライドしても反対側の端が欠けないよう、レイヤー幅に 72px 足す */
1435
+ -webkit-mask-size: calc(100% + 72px) 100%;
1436
+ mask-size: calc(100% + 72px) 100%;
1437
+ -webkit-mask-repeat: no-repeat;
1438
+ mask-repeat: no-repeat;
1439
+ -webkit-mask-composite: source-in, xor;
1440
+ mask-composite: intersect;
1441
+ -webkit-mask-position:
1442
+ -72px 0,
1443
+ 0 0;
1444
+ mask-position:
1445
+ -72px 0,
1446
+ 0 0;
1447
+ /* 0.2s ease-in は react-sandbox の LeftGradient と同じ値 */
1448
+ transition: 0.2s ease-in mask-position;
1313
1449
  }
1314
1450
 
1315
- .charcoal-modal-body {
1316
- padding-bottom: 40px;
1451
+ .charcoal-carousel[data-has-gradient='true'][data-can-prev='true']
1452
+ .charcoal-carousel__scroller {
1453
+ -webkit-mask-position:
1454
+ 0 0,
1455
+ 0 0;
1456
+ mask-position:
1457
+ 0 0,
1458
+ 0 0;
1317
1459
  }
1318
1460
 
1319
- .charcoal-modal-buttons {
1320
- display: grid;
1321
- grid-auto-flow: row;
1322
- grid-row-gap: 8px;
1461
+ .charcoal-carousel[data-has-gradient='true'][data-can-next='true']
1462
+ .charcoal-carousel__scroller {
1463
+ -webkit-mask-position:
1464
+ -72px 0,
1465
+ -72px 0;
1466
+ mask-position:
1467
+ -72px 0,
1468
+ -72px 0;
1469
+ }
1323
1470
 
1324
- padding-top: 16px;
1325
- padding-left: 16px;
1326
- padding-right: 16px;
1471
+ .charcoal-carousel[data-has-gradient='true'][data-can-prev='true'][data-can-next='true']
1472
+ .charcoal-carousel__scroller {
1473
+ -webkit-mask-position:
1474
+ 0 0,
1475
+ -72px 0;
1476
+ mask-position:
1477
+ 0 0,
1478
+ -72px 0;
1327
1479
  }
1328
- .charcoal-hint-text {
1329
- background-color: var(--charcoal-color-container-secondary-default);
1330
- border-radius: 8px;
1331
- padding: 12px 16px;
1332
- display: flex;
1333
- align-items: flex-start;
1480
+
1481
+ .charcoal-carousel__item {
1482
+ flex: 0 0 auto;
1483
+ min-width: 0;
1334
1484
  }
1335
1485
 
1336
- .charcoal-hint-text[data-context='page'] {
1337
- justify-content: center;
1338
- }
1486
+ .charcoal-carousel[data-size='S'] .charcoal-carousel__item {
1487
+ flex: 0 0 100%;
1488
+ }
1339
1489
 
1340
- @media (min-width: 744px) {
1490
+ /* scroll-snap-align prop(scrollSnap.align)で出し分ける。基底 .charcoal-carousel__item
1491
+ より後に置くことで no-descending-specificity を回避する。 */
1492
+ .charcoal-carousel[data-scroll-snap-align='center'] .charcoal-carousel__item {
1493
+ scroll-snap-align: center;
1494
+ }
1341
1495
 
1342
- .charcoal-hint-text[data-context='page'] {
1343
- padding: 20px 40px
1344
- }
1345
- }
1496
+ .charcoal-carousel[data-scroll-snap-align='start'] .charcoal-carousel__item {
1497
+ scroll-snap-align: start;
1498
+ }
1346
1499
 
1347
- .charcoal-hint-text-icon {
1348
- display: flex;
1500
+ /* ── Navigation Buttons (charcoal IconButton, variant=Overlay size=S) ── */
1501
+
1502
+ /* マスクの透過域と同じ 72px 1fr 72px グリッド。各ボタンは 72px ゾーンの中央に置く。 */
1503
+ .charcoal-carousel__navigation {
1504
+ position: absolute;
1505
+ inset: 0;
1506
+ pointer-events: none;
1507
+ display: grid;
1508
+ grid-template-columns: 72px 1fr 72px;
1349
1509
  align-items: center;
1350
- color: var(--charcoal-color-icon-tertiary-default);
1351
- height: 22px;
1352
- margin: 0 4px 0 0;
1510
+ /* アイテム内のコンテンツより上にボタンを表示する */
1511
+ z-index: 1;
1512
+ /* sandbox 同様、通常は隠してカルーセル hover 時にフェードイン表示する。 */
1513
+ opacity: 0;
1514
+ transition: 0.4s opacity;
1353
1515
  }
1516
+ .charcoal-carousel__navigation[data-visible='false'] {
1517
+ display: none;
1518
+ }
1354
1519
 
1355
- .charcoal-hint-text-message {
1356
- color: var(--charcoal-color-text-secondary-default);
1357
- font-size: 14px;
1358
- line-height: 22px;
1359
- display: flow-root;
1360
- margin: 0;
1361
- min-width: 0;
1362
- overflow-wrap: break-word;
1363
- }
1364
- .charcoal-pagination {
1365
- display: flex;
1366
- justify-content: center;
1367
- align-items: center;
1520
+ /* hover で表示。キーボード操作でも到達できるよう、キーボード由来のフォーカスが
1521
+ カルーセル内にある間も表示する(:focus-within だとクリックで残ったフォーカスでも
1522
+ 表示され続けるため、react-aria が付与する data 属性で判定する)。 */
1523
+ .charcoal-carousel:hover .charcoal-carousel__navigation,
1524
+ .charcoal-carousel[data-focus-visible-within] .charcoal-carousel__navigation {
1525
+ opacity: 1;
1368
1526
  }
1369
1527
 
1370
- .charcoal-pagination[data-size='S'] .charcoal-pagination-button {
1371
- min-width: 32px;
1372
- min-height: 32px;
1373
- }
1528
+ .charcoal-carousel__navigation__item {
1529
+ pointer-events: auto;
1530
+ }
1374
1531
 
1375
- .charcoal-pagination[data-size='M'] .charcoal-pagination-button {
1376
- min-width: 40px;
1377
- min-height: 40px;
1378
- }
1532
+ /* ヒットエリアをグリッド端列(= mask のフェード帯と同じ 72px)全体へ広げる。
1533
+ 擬似要素上のクリックは元の button に届くため、帯のどこを押してもページ送りになる。
1534
+ position: absolute の基準は positioned な .charcoal-carousel__navigation(inset: 0)。 */
1535
+
1536
+ .charcoal-carousel__navigation__item::after {
1537
+ content: '';
1538
+ position: absolute;
1539
+ top: 0;
1540
+ bottom: 0;
1541
+ width: 72px;
1542
+ }
1543
+
1544
+ .charcoal-carousel__navigation__item[data-direction='prev'] {
1545
+ grid-column: 1;
1546
+ justify-self: center;
1547
+ }
1548
+
1549
+ .charcoal-carousel__navigation__item[data-direction='prev']::after {
1550
+ left: 0;
1551
+ }
1552
+
1553
+ .charcoal-carousel__navigation__item[data-direction='next'] {
1554
+ grid-column: 3;
1555
+ justify-self: center;
1556
+ }
1557
+
1558
+ .charcoal-carousel__navigation__item[data-direction='next']::after {
1559
+ right: 0;
1560
+ }
1561
+
1562
+ /* スクロール端では非表示。IconButton の disabled スタイル(opacity:0.32)より
1563
+ 高い詳細度で打ち消すため、ルートを前置する。 */
1564
+ .charcoal-carousel .charcoal-carousel__navigation__item[data-hidden='true'] {
1565
+ opacity: 0;
1566
+ pointer-events: none;
1567
+ }
1568
+
1569
+ /* タッチデバイスではナビゲーションボタンを出さず、スワイプ操作に委ねる。 */
1570
+ @media (hover: none) and (pointer: coarse) {
1571
+ .charcoal-carousel__navigation {
1572
+ display: none;
1573
+ }
1574
+ }
1575
+
1576
+ /* ── Indicator: JS Fallback ── */
1577
+
1578
+ .charcoal-carousel__indicator {
1579
+ display: flex;
1580
+ justify-content: center;
1581
+ align-items: center;
1582
+ height: 40px;
1583
+ gap: 8px;
1584
+ }
1585
+
1586
+ .charcoal-carousel__indicator[data-visible='false'] {
1587
+ display: none;
1588
+ }
1589
+
1590
+ .charcoal-carousel__indicator__item {
1591
+ -webkit-appearance: none;
1592
+ -moz-appearance: none;
1593
+ appearance: none;
1594
+ box-sizing: border-box;
1595
+ width: 8px;
1596
+ height: 8px;
1597
+ padding: 0;
1598
+ border: 0;
1599
+ border-radius: 50%;
1600
+ background-color: var(--charcoal-color-text-tertiary-default);
1601
+ cursor: pointer;
1602
+ transition: 0.2s background-color;
1603
+ }
1604
+
1605
+ .charcoal-carousel__indicator__item:hover {
1606
+ background-color: var(--charcoal-color-text-secondary-default);
1607
+ }
1608
+
1609
+ .charcoal-carousel__indicator__item:focus-visible {
1610
+ outline: 2px solid rgba(0, 150, 250, 0.56);
1611
+ outline-offset: 2px;
1612
+ }
1613
+
1614
+ .charcoal-carousel__indicator__item[data-active='true'] {
1615
+ background-color: var(--charcoal-color-text-default);
1616
+ }
1617
+
1618
+ /* ── CSS Scroll Markers (progressive enhancement) ── */
1619
+
1620
+ /* CSS Scroll Markers / Anchor Positioning の擬似要素・擬似クラスは新しい仕様のため、
1621
+ この @supports ブロックでは該当ルールを無効化する。 */
1622
+ /* stylelint-disable selector-pseudo-class-no-unknown */
1623
+ @supports (scroll-marker-group: after) {
1624
+ .charcoal-carousel[data-indicator='true'] {
1625
+ padding-bottom: 40px;
1626
+ }
1627
+
1628
+ .charcoal-carousel__scroller {
1629
+ anchor-name: --charcoal-carousel;
1630
+ scroll-marker-group: after;
1631
+ }
1632
+
1633
+ .charcoal-carousel__scroller::scroll-button(*) {
1634
+ content: none;
1635
+ }
1636
+
1637
+ .charcoal-carousel__scroller::scroll-marker-group {
1638
+ display: flex;
1639
+ justify-content: center;
1640
+ align-items: center;
1641
+ height: 40px;
1642
+ gap: 8px;
1643
+
1644
+ position: absolute;
1645
+ position-anchor: --charcoal-carousel;
1646
+ top: anchor(bottom);
1647
+ justify-self: anchor-center;
1648
+ }
1649
+
1650
+ .charcoal-carousel[data-indicator='false'] .charcoal-carousel__scroller {
1651
+ scroll-marker-group: none;
1652
+ }
1653
+
1654
+ .charcoal-carousel__item::scroll-marker {
1655
+ content: '';
1656
+ width: 8px;
1657
+ height: 8px;
1658
+ border: 0;
1659
+ border-radius: 50%;
1660
+ background-color: var(--charcoal-color-text-tertiary-default);
1661
+ cursor: pointer;
1662
+ transition: 0.2s background-color;
1663
+ }
1664
+
1665
+ .charcoal-carousel__item::scroll-marker:hover {
1666
+ background-color: var(--charcoal-color-text-secondary-default);
1667
+ }
1668
+
1669
+ .charcoal-carousel__item::scroll-marker:focus {
1670
+ outline: 2px solid rgba(0, 150, 250, 0.56);
1671
+ outline-offset: 2px;
1672
+ }
1673
+
1674
+ .charcoal-carousel__item::scroll-marker:target-current {
1675
+ background-color: var(--charcoal-color-text-default);
1676
+ }
1677
+
1678
+ .charcoal-carousel__indicator {
1679
+ display: none;
1680
+ }
1681
+ }
1682
+ /* stylelint-enable selector-pseudo-class-no-unknown */
1683
+ .charcoal-pagination {
1684
+ display: flex;
1685
+ justify-content: center;
1686
+ align-items: center;
1687
+ }
1688
+
1689
+ .charcoal-pagination[data-size='S'] .charcoal-pagination-button {
1690
+ min-width: 32px;
1691
+ min-height: 32px;
1692
+ }
1693
+
1694
+ .charcoal-pagination[data-size='M'] .charcoal-pagination-button {
1695
+ min-width: 40px;
1696
+ min-height: 40px;
1697
+ }
1379
1698
 
1380
1699
  /* stylelint-disable no-descending-specificity */
1381
1700
  .charcoal-pagination-button {
@@ -1456,524 +1775,205 @@ pixiv-icon:not(:defined)[name^='Inline/'][scale='2'] {
1456
1775
  }
1457
1776
  .charcoal-pagination-button[aria-current]:not(:disabled):not([aria-disabled]):hover,
1458
1777
  .charcoal-pagination-button[aria-current]:not(:disabled):not([aria-disabled]):active {
1459
- background-color: var(--charcoal-color-container-hud-default);
1460
- color: var(--charcoal-color-text-on-hud-default);
1461
- }
1462
- /* stylelint-enable no-descending-specificity */
1463
-
1464
- .charcoal-pagination-nav-button[data-hidden] {
1465
- visibility: hidden;
1466
- }
1467
-
1468
- .charcoal-pagination-spacer,
1469
- .charcoal-pagination-spacer:hover,
1470
- .charcoal-pagination-spacer:active {
1471
- cursor: default;
1472
- color: var(--charcoal-color-text-tertiary-default);
1473
- background: none;
1474
- }
1475
-
1476
- .charcoal-pagination-spacer.charcoal-icon-button:disabled {
1477
- opacity: 1;
1478
- }
1479
- .charcoal-notification-region {
1480
- left: 0;
1481
- right: 0;
1482
- box-sizing: border-box;
1483
- position: absolute;
1484
- width: 100%;
1485
- height: 100%;
1486
- display: flex;
1487
- flex-direction: column;
1488
- align-items: center;
1489
- pointer-events: none;
1490
- top: 0;
1491
- }
1492
-
1493
- .charcoal-notification {
1494
- box-sizing: border-box;
1495
- border-radius: var(--charcoal-radius-oval);
1496
- width: -moz-fit-content;
1497
- width: fit-content;
1498
- max-width: calc(100vw - var(--charcoal-space-46));
1499
- display: flex;
1500
- align-items: center;
1501
- justify-content: center;
1502
- gap: var(--charcoal-space-20);
1503
- pointer-events: auto;
1504
- }
1505
-
1506
- .charcoal-notification-content {
1507
- display: flex;
1508
- align-items: center;
1509
- min-width: 0;
1510
- }
1511
-
1512
- .charcoal-notification-label {
1513
- min-width: 0;
1514
- overflow: hidden;
1515
- overflow-wrap: break-word;
1516
- display: -webkit-box;
1517
- -webkit-box-orient: vertical;
1518
- -webkit-line-clamp: 2;
1519
- font-size: var(--charcoal-text-font-size-caption-m);
1520
- font-weight: var(--charcoal-text-font-weight-bold);
1521
- line-height: var(--charcoal-text-line-height-caption-m);
1522
- }
1523
-
1524
- @media (prefers-reduced-motion: reduce) {
1525
- .charcoal-notification,
1526
- .charcoal-notification[data-exiting='true'] {
1527
- animation: none;
1528
- }
1529
- }
1530
- .charcoal-notification-region {
1531
- --charcoal-snackbar-offset: 16px;
1532
- }
1533
-
1534
- .charcoal-snackbar-region[data-position='top'] {
1535
- --charcoal-snackbar-enter-offset: calc(-1 * var(--charcoal-space-30));
1536
-
1537
- position: sticky;
1538
- top: calc(env(safe-area-inset-top, 0px) + var(--charcoal-snackbar-offset));
1539
- }
1540
-
1541
- .charcoal-snackbar-region[data-position='bottom'] {
1542
- --charcoal-snackbar-enter-offset: var(--charcoal-space-30);
1543
-
1544
- position: fixed;
1545
- bottom: calc(
1546
- env(safe-area-inset-bottom, 0px) + var(--charcoal-snackbar-offset)
1547
- );
1548
- }
1549
-
1550
- .charcoal-snackbar {
1551
- min-height: 44px;
1552
- padding: var(--charcoal-space-25) var(--charcoal-space-40);
1553
- background-color: var(--charcoal-color-container-default);
1554
- color: var(--charcoal-color-text-default);
1555
- border: var(--charcoal-border-width-m) solid
1556
- var(--charcoal-color-border-secondary);
1557
- animation: charcoal-snackbar-enter 0.3s ease-out both;
1558
- }
1559
-
1560
- .charcoal-snackbar[data-exiting='true'] {
1561
- animation: charcoal-snackbar-exit 0.3s ease-out both;
1562
- }
1563
-
1564
- .charcoal-snackbar[data-with-action='true'] {
1565
- min-height: 56px;
1566
- padding: var(--charcoal-space-25) var(--charcoal-space-30)
1567
- var(--charcoal-space-25) var(--charcoal-space-40);
1568
- }
1569
-
1570
- .charcoal-snackbar[data-dim='true'] {
1571
- background-color: var(--charcoal-color-container-hud-default);
1572
- color: var(--charcoal-color-text-on-hud-default);
1573
- border-color: var(--charcoal-color-border-hud);
1574
- }
1575
-
1576
- @keyframes charcoal-snackbar-enter {
1577
- from {
1578
- opacity: 0;
1579
- transform: translateY(var(--charcoal-snackbar-enter-offset));
1580
- }
1581
-
1582
- to {
1583
- opacity: 1;
1584
- transform: translateY(0);
1585
- }
1586
- }
1587
-
1588
- @keyframes charcoal-snackbar-exit {
1589
- from {
1590
- opacity: 1;
1591
- }
1592
-
1593
- to {
1594
- opacity: 0;
1595
- }
1596
- }
1597
- .charcoal-notification-region {
1598
- --charcoal-toast-offset: 16px;
1599
- }
1600
-
1601
- .charcoal-toast-region[data-position='top'] {
1602
- position: sticky;
1603
- --charcoal-toast-enter-offset: calc(-1 * var(--charcoal-space-30));
1604
-
1605
- top: calc(env(safe-area-inset-top, 0px) + var(--charcoal-toast-offset));
1606
- }
1607
-
1608
- .charcoal-toast-region[data-position='bottom'] {
1609
- position: fixed;
1610
- --charcoal-toast-enter-offset: var(--charcoal-space-30);
1611
-
1612
- bottom: calc(
1613
- env(safe-area-inset-bottom, 0px) + var(--charcoal-toast-offset)
1614
- );
1615
- }
1616
-
1617
- .charcoal-toast {
1618
- min-height: 40px;
1619
- padding: var(--charcoal-space-20) var(--charcoal-space-40);
1620
- color: var(--charcoal-color-text-on-positive-default);
1621
- border: var(--charcoal-border-width-m) solid var(--charcoal-color-border-hud);
1622
- animation: charcoal-toast-enter 0.3s ease-out both;
1623
- }
1624
-
1625
- .charcoal-toast[data-exiting='true'] {
1626
- animation: charcoal-toast-exit 0.3s ease-out both;
1627
- }
1628
-
1629
- .charcoal-toast[data-type='success'] {
1630
- background-color: var(--charcoal-color-container-positive-default);
1631
- }
1632
-
1633
- .charcoal-toast[data-type='error'] {
1634
- background-color: var(--charcoal-color-container-negative-default);
1635
- }
1636
-
1637
- @keyframes charcoal-toast-enter {
1638
- from {
1639
- opacity: 0;
1640
- transform: translateY(var(--charcoal-toast-enter-offset));
1641
- }
1642
-
1643
- to {
1644
- opacity: 1;
1645
- transform: translateY(0);
1646
- }
1647
- }
1648
-
1649
- @keyframes charcoal-toast-exit {
1650
- from {
1651
- opacity: 1;
1652
- }
1653
-
1654
- to {
1655
- opacity: 0;
1656
- }
1657
- }
1658
- .charcoal-carousel {
1659
- --charcoal-carousel-gap: 0px;
1660
-
1661
- position: relative;
1662
- display: block;
1663
- }
1664
-
1665
- .charcoal-carousel[data-full-width='true'] {
1666
- width: 100vw;
1667
- margin-inline: calc(50% - 50vw);
1668
- }
1669
-
1670
- .charcoal-carousel__viewport {
1671
- position: relative;
1672
- }
1673
-
1674
- /* フォーカスリングは scroller ではなく viewport に描く。scroller に置くと
1675
- hasGradient の mask(mask-clip: border-box)で外側の box-shadow ごと消えるため。 */
1676
-
1677
- .charcoal-carousel__viewport[data-focus-visible] {
1678
- box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
1679
- }
1680
-
1681
- /* スライド間隔は gap prop(--charcoal-carousel-gap)で注入する。
1682
- スライド寸法は sandbox 同様、利用者が children 側で持つ。 */
1683
- .charcoal-carousel__scroller {
1684
- position: relative;
1685
- display: flex;
1686
- gap: var(--charcoal-carousel-gap);
1687
- overflow-x: auto;
1688
- overflow-y: hidden;
1689
- overscroll-behavior-x: contain;
1690
- scroll-behavior: smooth;
1691
- scrollbar-width: none;
1692
- outline: none;
1693
- }
1694
- .charcoal-carousel__scroller::-webkit-scrollbar {
1695
- display: none;
1696
- }
1697
-
1698
- /* スクロールスナップ type は prop(scrollSnap.type)で scroller に出し分ける。
1699
- align は基底 .charcoal-carousel__item の後(後述)に置く(no-descending-specificity 回避)。
1700
- 未指定時の既定(M=none / S=mandatory / align=center)は JS 側で data 属性に解決する。 */
1701
- .charcoal-carousel[data-scroll-snap-type='none'] .charcoal-carousel__scroller {
1702
- scroll-snap-type: none;
1703
- }
1704
-
1705
- .charcoal-carousel[data-scroll-snap-type='proximity']
1706
- .charcoal-carousel__scroller {
1707
- scroll-snap-type: x proximity;
1708
- }
1709
-
1710
- .charcoal-carousel[data-scroll-snap-type='mandatory']
1711
- .charcoal-carousel__scroller {
1712
- scroll-snap-type: x mandatory;
1713
- }
1714
-
1715
- /* グラデーション: mask で端のアイテム自体を透明へフェードさせる(下の背景色を
1716
- 問わない)。mask の色はアルファとしてだけ効く(#000=表示 / transparent=透過)。
1717
- 左フェード・右フェードの 2 レイヤーを intersect で合成し、はみ出して
1718
- スクロール可能な側のみ data-can-prev/next で 72px のフェード帯を枠内に置く。
1719
- 無効な側はフェード帯ごと枠外へスライドして隠す(mask-image と違い
1720
- mask-position は補間可能なので、切替が 0.2s のフェードになる)。 */
1721
- .charcoal-carousel[data-has-gradient='true'] .charcoal-carousel__scroller {
1722
- -webkit-mask-image:
1723
- linear-gradient(to right, transparent, #000 72px),
1724
- linear-gradient(to left, transparent, #000 72px);
1725
- mask-image:
1726
- linear-gradient(to right, transparent, #000 72px),
1727
- linear-gradient(to left, transparent, #000 72px);
1728
- /* 枠外へ 72px スライドしても反対側の端が欠けないよう、レイヤー幅に 72px 足す */
1729
- -webkit-mask-size: calc(100% + 72px) 100%;
1730
- mask-size: calc(100% + 72px) 100%;
1731
- -webkit-mask-repeat: no-repeat;
1732
- mask-repeat: no-repeat;
1733
- -webkit-mask-composite: source-in, xor;
1734
- mask-composite: intersect;
1735
- -webkit-mask-position:
1736
- -72px 0,
1737
- 0 0;
1738
- mask-position:
1739
- -72px 0,
1740
- 0 0;
1741
- /* 0.2s ease-in は react-sandbox の LeftGradient と同じ値 */
1742
- transition: 0.2s ease-in mask-position;
1743
- }
1744
-
1745
- .charcoal-carousel[data-has-gradient='true'][data-can-prev='true']
1746
- .charcoal-carousel__scroller {
1747
- -webkit-mask-position:
1748
- 0 0,
1749
- 0 0;
1750
- mask-position:
1751
- 0 0,
1752
- 0 0;
1753
- }
1754
-
1755
- .charcoal-carousel[data-has-gradient='true'][data-can-next='true']
1756
- .charcoal-carousel__scroller {
1757
- -webkit-mask-position:
1758
- -72px 0,
1759
- -72px 0;
1760
- mask-position:
1761
- -72px 0,
1762
- -72px 0;
1763
- }
1764
-
1765
- .charcoal-carousel[data-has-gradient='true'][data-can-prev='true'][data-can-next='true']
1766
- .charcoal-carousel__scroller {
1767
- -webkit-mask-position:
1768
- 0 0,
1769
- -72px 0;
1770
- mask-position:
1771
- 0 0,
1772
- -72px 0;
1773
- }
1778
+ background-color: var(--charcoal-color-container-hud-default);
1779
+ color: var(--charcoal-color-text-on-hud-default);
1780
+ }
1781
+ /* stylelint-enable no-descending-specificity */
1774
1782
 
1775
- .charcoal-carousel__item {
1776
- flex: 0 0 auto;
1777
- min-width: 0;
1783
+ .charcoal-pagination-nav-button[data-hidden] {
1784
+ visibility: hidden;
1778
1785
  }
1779
1786
 
1780
- .charcoal-carousel[data-size='S'] .charcoal-carousel__item {
1781
- flex: 0 0 100%;
1782
- }
1787
+ .charcoal-pagination-spacer,
1788
+ .charcoal-pagination-spacer:hover,
1789
+ .charcoal-pagination-spacer:active {
1790
+ cursor: default;
1791
+ color: var(--charcoal-color-text-tertiary-default);
1792
+ background: none;
1793
+ }
1783
1794
 
1784
- /* scroll-snap-align は prop(scrollSnap.align)で出し分ける。基底 .charcoal-carousel__item
1785
- より後に置くことで no-descending-specificity を回避する。 */
1786
- .charcoal-carousel[data-scroll-snap-align='center'] .charcoal-carousel__item {
1787
- scroll-snap-align: center;
1795
+ .charcoal-pagination-spacer.charcoal-icon-button:disabled {
1796
+ opacity: 1;
1797
+ }
1798
+ .charcoal-notification-region {
1799
+ left: 0;
1800
+ right: 0;
1801
+ box-sizing: border-box;
1802
+ position: absolute;
1803
+ width: 100%;
1804
+ height: 100%;
1805
+ display: flex;
1806
+ flex-direction: column;
1807
+ align-items: center;
1808
+ pointer-events: none;
1809
+ top: 0;
1788
1810
  }
1789
1811
 
1790
- .charcoal-carousel[data-scroll-snap-align='start'] .charcoal-carousel__item {
1791
- scroll-snap-align: start;
1812
+ .charcoal-notification {
1813
+ box-sizing: border-box;
1814
+ border-radius: var(--charcoal-radius-oval);
1815
+ width: -moz-fit-content;
1816
+ width: fit-content;
1817
+ max-width: calc(100vw - var(--charcoal-space-46));
1818
+ display: flex;
1819
+ align-items: center;
1820
+ justify-content: center;
1821
+ gap: var(--charcoal-space-20);
1822
+ pointer-events: auto;
1792
1823
  }
1793
1824
 
1794
- /* ── Navigation Buttons (charcoal IconButton, variant=Overlay size=S) ── */
1795
-
1796
- /* マスクの透過域と同じ 72px 1fr 72px グリッド。各ボタンは 72px ゾーンの中央に置く。 */
1797
- .charcoal-carousel__navigation {
1798
- position: absolute;
1799
- inset: 0;
1800
- pointer-events: none;
1801
- display: grid;
1802
- grid-template-columns: 72px 1fr 72px;
1825
+ .charcoal-notification-content {
1826
+ display: flex;
1803
1827
  align-items: center;
1804
- /* アイテム内のコンテンツより上にボタンを表示する */
1805
- z-index: 1;
1806
- /* sandbox 同様、通常は隠してカルーセル hover 時にフェードイン表示する。 */
1807
- opacity: 0;
1808
- transition: 0.4s opacity;
1828
+ min-width: 0;
1809
1829
  }
1810
- .charcoal-carousel__navigation[data-visible='false'] {
1811
- display: none;
1812
- }
1813
1830
 
1814
- /* hover で表示。キーボード操作でも到達できるよう、キーボード由来のフォーカスが
1815
- カルーセル内にある間も表示する(:focus-within だとクリックで残ったフォーカスでも
1816
- 表示され続けるため、react-aria が付与する data 属性で判定する)。 */
1817
- .charcoal-carousel:hover .charcoal-carousel__navigation,
1818
- .charcoal-carousel[data-focus-visible-within] .charcoal-carousel__navigation {
1819
- opacity: 1;
1831
+ .charcoal-notification-label {
1832
+ min-width: 0;
1833
+ overflow: hidden;
1834
+ overflow-wrap: break-word;
1835
+ display: -webkit-box;
1836
+ -webkit-box-orient: vertical;
1837
+ -webkit-line-clamp: 2;
1838
+ font-size: var(--charcoal-text-font-size-caption-m);
1839
+ font-weight: var(--charcoal-text-font-weight-bold);
1840
+ line-height: var(--charcoal-text-line-height-caption-m);
1820
1841
  }
1821
1842
 
1822
- .charcoal-carousel__navigation__item {
1823
- pointer-events: auto;
1843
+ @media (prefers-reduced-motion: reduce) {
1844
+ .charcoal-notification,
1845
+ .charcoal-notification[data-exiting='true'] {
1846
+ animation: none;
1847
+ }
1848
+ }
1849
+ .charcoal-notification-region {
1850
+ --charcoal-snackbar-offset: 16px;
1824
1851
  }
1825
1852
 
1826
- /* ヒットエリアをグリッド端列(= mask のフェード帯と同じ 72px)全体へ広げる。
1827
- 擬似要素上のクリックは元の button に届くため、帯のどこを押してもページ送りになる。
1828
- position: absolute の基準は positioned な .charcoal-carousel__navigation(inset: 0)。 */
1829
-
1830
- .charcoal-carousel__navigation__item::after {
1831
- content: '';
1832
- position: absolute;
1833
- top: 0;
1834
- bottom: 0;
1835
- width: 72px;
1836
- }
1853
+ .charcoal-snackbar-region[data-position='top'] {
1854
+ --charcoal-snackbar-enter-offset: calc(-1 * var(--charcoal-space-30));
1837
1855
 
1838
- .charcoal-carousel__navigation__item[data-direction='prev'] {
1839
- grid-column: 1;
1840
- justify-self: center;
1856
+ position: sticky;
1857
+ top: calc(env(safe-area-inset-top, 0px) + var(--charcoal-snackbar-offset));
1841
1858
  }
1842
1859
 
1843
- .charcoal-carousel__navigation__item[data-direction='prev']::after {
1844
- left: 0;
1845
- }
1860
+ .charcoal-snackbar-region[data-position='bottom'] {
1861
+ --charcoal-snackbar-enter-offset: var(--charcoal-space-30);
1846
1862
 
1847
- .charcoal-carousel__navigation__item[data-direction='next'] {
1848
- grid-column: 3;
1849
- justify-self: center;
1863
+ position: fixed;
1864
+ bottom: calc(
1865
+ env(safe-area-inset-bottom, 0px) + var(--charcoal-snackbar-offset)
1866
+ );
1850
1867
  }
1851
1868
 
1852
- .charcoal-carousel__navigation__item[data-direction='next']::after {
1853
- right: 0;
1854
- }
1855
-
1856
- /* スクロール端では非表示。IconButton の disabled スタイル(opacity:0.32)より
1857
- 高い詳細度で打ち消すため、ルートを前置する。 */
1858
- .charcoal-carousel .charcoal-carousel__navigation__item[data-hidden='true'] {
1859
- opacity: 0;
1860
- pointer-events: none;
1869
+ .charcoal-snackbar {
1870
+ min-height: 44px;
1871
+ padding: var(--charcoal-space-25) var(--charcoal-space-40);
1872
+ background-color: var(--charcoal-color-container-default);
1873
+ color: var(--charcoal-color-text-default);
1874
+ border: var(--charcoal-border-width-m) solid
1875
+ var(--charcoal-color-border-secondary);
1876
+ animation: charcoal-snackbar-enter 0.3s ease-out both;
1861
1877
  }
1862
1878
 
1863
- /* タッチデバイスではナビゲーションボタンを出さず、スワイプ操作に委ねる。 */
1864
- @media (hover: none) and (pointer: coarse) {
1865
- .charcoal-carousel__navigation {
1866
- display: none;
1879
+ .charcoal-snackbar[data-exiting='true'] {
1880
+ animation: charcoal-snackbar-exit 0.3s ease-out both;
1867
1881
  }
1868
- }
1869
-
1870
- /* ── Indicator: JS Fallback ── */
1871
1882
 
1872
- .charcoal-carousel__indicator {
1873
- display: flex;
1874
- justify-content: center;
1875
- align-items: center;
1876
- height: 40px;
1877
- gap: 8px;
1878
- }
1883
+ .charcoal-snackbar[data-with-action='true'] {
1884
+ min-height: 56px;
1885
+ padding: var(--charcoal-space-25) var(--charcoal-space-30)
1886
+ var(--charcoal-space-25) var(--charcoal-space-40);
1887
+ }
1879
1888
 
1880
- .charcoal-carousel__indicator[data-visible='false'] {
1881
- display: none;
1889
+ .charcoal-snackbar[data-dim='true'] {
1890
+ background-color: var(--charcoal-color-container-hud-default);
1891
+ color: var(--charcoal-color-text-on-hud-default);
1892
+ border-color: var(--charcoal-color-border-hud);
1882
1893
  }
1883
1894
 
1884
- .charcoal-carousel__indicator__item {
1885
- -webkit-appearance: none;
1886
- -moz-appearance: none;
1887
- appearance: none;
1888
- box-sizing: border-box;
1889
- width: 8px;
1890
- height: 8px;
1891
- padding: 0;
1892
- border: 0;
1893
- border-radius: 50%;
1894
- background-color: var(--charcoal-color-text-tertiary-default);
1895
- cursor: pointer;
1896
- transition: 0.2s background-color;
1897
- }
1895
+ @keyframes charcoal-snackbar-enter {
1896
+ from {
1897
+ opacity: 0;
1898
+ transform: translateY(var(--charcoal-snackbar-enter-offset));
1899
+ }
1898
1900
 
1899
- .charcoal-carousel__indicator__item:hover {
1900
- background-color: var(--charcoal-color-text-secondary-default);
1901
+ to {
1902
+ opacity: 1;
1903
+ transform: translateY(0);
1901
1904
  }
1905
+ }
1902
1906
 
1903
- .charcoal-carousel__indicator__item:focus-visible {
1904
- outline: 2px solid rgba(0, 150, 250, 0.56);
1905
- outline-offset: 2px;
1907
+ @keyframes charcoal-snackbar-exit {
1908
+ from {
1909
+ opacity: 1;
1906
1910
  }
1907
1911
 
1908
- .charcoal-carousel__indicator__item[data-active='true'] {
1909
- background-color: var(--charcoal-color-text-default);
1912
+ to {
1913
+ opacity: 0;
1910
1914
  }
1915
+ }
1916
+ .charcoal-notification-region {
1917
+ --charcoal-toast-offset: 16px;
1918
+ }
1911
1919
 
1912
- /* ── CSS Scroll Markers (progressive enhancement) ── */
1920
+ .charcoal-toast-region[data-position='top'] {
1921
+ position: sticky;
1922
+ --charcoal-toast-enter-offset: calc(-1 * var(--charcoal-space-30));
1913
1923
 
1914
- /* CSS Scroll Markers / Anchor Positioning の擬似要素・擬似クラスは新しい仕様のため、
1915
- この @supports ブロックでは該当ルールを無効化する。 */
1916
- /* stylelint-disable selector-pseudo-class-no-unknown */
1917
- @supports (scroll-marker-group: after) {
1918
- .charcoal-carousel[data-indicator='true'] {
1919
- padding-bottom: 40px;
1924
+ top: calc(env(safe-area-inset-top, 0px) + var(--charcoal-toast-offset));
1920
1925
  }
1921
1926
 
1922
- .charcoal-carousel__scroller {
1923
- anchor-name: --charcoal-carousel;
1924
- scroll-marker-group: after;
1925
- }
1927
+ .charcoal-toast-region[data-position='bottom'] {
1928
+ position: fixed;
1929
+ --charcoal-toast-enter-offset: var(--charcoal-space-30);
1926
1930
 
1927
- .charcoal-carousel__scroller::scroll-button(*) {
1928
- content: none;
1929
- }
1931
+ bottom: calc(
1932
+ env(safe-area-inset-bottom, 0px) + var(--charcoal-toast-offset)
1933
+ );
1934
+ }
1930
1935
 
1931
- .charcoal-carousel__scroller::scroll-marker-group {
1932
- display: flex;
1933
- justify-content: center;
1934
- align-items: center;
1935
- height: 40px;
1936
- gap: 8px;
1936
+ .charcoal-toast {
1937
+ min-height: 40px;
1938
+ padding: var(--charcoal-space-20) var(--charcoal-space-40);
1939
+ color: var(--charcoal-color-text-on-positive-default);
1940
+ border: var(--charcoal-border-width-m) solid var(--charcoal-color-border-hud);
1941
+ animation: charcoal-toast-enter 0.3s ease-out both;
1942
+ }
1937
1943
 
1938
- position: absolute;
1939
- position-anchor: --charcoal-carousel;
1940
- top: anchor(bottom);
1941
- justify-self: anchor-center;
1942
- }
1944
+ .charcoal-toast[data-exiting='true'] {
1945
+ animation: charcoal-toast-exit 0.3s ease-out both;
1946
+ }
1943
1947
 
1944
- .charcoal-carousel[data-indicator='false'] .charcoal-carousel__scroller {
1945
- scroll-marker-group: none;
1948
+ .charcoal-toast[data-type='success'] {
1949
+ background-color: var(--charcoal-color-container-positive-default);
1946
1950
  }
1947
1951
 
1948
- .charcoal-carousel__item::scroll-marker {
1949
- content: '';
1950
- width: 8px;
1951
- height: 8px;
1952
- border: 0;
1953
- border-radius: 50%;
1954
- background-color: var(--charcoal-color-text-tertiary-default);
1955
- cursor: pointer;
1956
- transition: 0.2s background-color;
1952
+ .charcoal-toast[data-type='error'] {
1953
+ background-color: var(--charcoal-color-container-negative-default);
1957
1954
  }
1958
1955
 
1959
- .charcoal-carousel__item::scroll-marker:hover {
1960
- background-color: var(--charcoal-color-text-secondary-default);
1961
- }
1956
+ @keyframes charcoal-toast-enter {
1957
+ from {
1958
+ opacity: 0;
1959
+ transform: translateY(var(--charcoal-toast-enter-offset));
1960
+ }
1962
1961
 
1963
- .charcoal-carousel__item::scroll-marker:focus {
1964
- outline: 2px solid rgba(0, 150, 250, 0.56);
1965
- outline-offset: 2px;
1966
- }
1962
+ to {
1963
+ opacity: 1;
1964
+ transform: translateY(0);
1965
+ }
1966
+ }
1967
1967
 
1968
- .charcoal-carousel__item::scroll-marker:target-current {
1969
- background-color: var(--charcoal-color-text-default);
1970
- }
1968
+ @keyframes charcoal-toast-exit {
1969
+ from {
1970
+ opacity: 1;
1971
+ }
1971
1972
 
1972
- .charcoal-carousel__indicator {
1973
- display: none;
1973
+ to {
1974
+ opacity: 0;
1974
1975
  }
1975
1976
  }
1976
- /* stylelint-enable selector-pseudo-class-no-unknown */
1977
1977
  .charcoal-text-field-assistive-text {
1978
1978
  font-size: 14px;
1979
1979
  line-height: 22px;
@@ -1984,6 +1984,34 @@ pixiv-icon:not(:defined)[name^='Inline/'][scale='2'] {
1984
1984
  .charcoal-text-field-assistive-text[data-invalid='true'] {
1985
1985
  color: var(--charcoal-color-text-negative-default);
1986
1986
  }
1987
+ .charcoal-list-item {
1988
+ list-style: none;
1989
+ display: flex;
1990
+ align-items: center;
1991
+ min-height: 40px;
1992
+ cursor: pointer;
1993
+ outline: none;
1994
+
1995
+ padding-right: 16px;
1996
+ padding-left: 16px;
1997
+
1998
+ transition: background-color 0.2s;
1999
+ }
2000
+
2001
+ .charcoal-list-item:not([aria-disabled='true']):hover,
2002
+ .charcoal-list-item:not([aria-disabled='true']):focus,
2003
+ .charcoal-list-item:not([aria-disabled='true']):focus-within {
2004
+ background-color: var(--charcoal-color-container-secondary-default);
2005
+ }
2006
+
2007
+ .charcoal-list-item[aria-disabled='true'] {
2008
+ opacity: 0.32;
2009
+ cursor: default;
2010
+ }
2011
+ .charcoal-menu-list {
2012
+ padding: 0;
2013
+ margin: 0;
2014
+ }
1987
2015
  .charcoal-field-label {
1988
2016
  font-size: 14px;
1989
2017
  line-height: 22px;
@@ -2021,94 +2049,6 @@ pixiv-icon:not(:defined)[name^='Inline/'][scale='2'] {
2021
2049
  .charcoal-field-label-root > .charcoal-field-label-sub-label {
2022
2050
  margin-left: auto;
2023
2051
  }
2024
- .charcoal-radio-input {
2025
- -webkit-appearance: none;
2026
- -moz-appearance: none;
2027
- appearance: none;
2028
- display: block;
2029
- box-sizing: border-box;
2030
-
2031
- margin: 0;
2032
- padding: 6px;
2033
-
2034
- width: 20px;
2035
- height: 20px;
2036
- cursor: pointer;
2037
- border-radius: 999999px;
2038
- background-color: var(--charcoal-color-container-default);
2039
- transition:
2040
- 0.2s background-color,
2041
- 0.2s box-shadow;
2042
- }
2043
-
2044
- .charcoal-radio-input:checked {
2045
- background-color: var(--charcoal-color-container-primary-default);
2046
- }
2047
-
2048
- .charcoal-radio-input:checked::after {
2049
- content: '';
2050
- display: block;
2051
- width: 8px;
2052
- height: 8px;
2053
- pointer-events: none;
2054
- background-color: var(--charcoal-color-icon-on-primary-default);
2055
- border-radius: 999999px;
2056
- transition:
2057
- 0.2s background-color,
2058
- 0.2s box-shadow;
2059
- }
2060
-
2061
- .charcoal-radio-input:not(:checked) {
2062
- border-width: 2px;
2063
- border-style: solid;
2064
- border-color: var(--charcoal-color-border-default);
2065
- }
2066
-
2067
- .charcoal-radio-input:disabled {
2068
- cursor: default;
2069
- }
2070
-
2071
- .charcoal-radio-input:not(:disabled):hover {
2072
- background-color: var(--charcoal-color-container-hover);
2073
- }
2074
-
2075
- .charcoal-radio-input:not(:disabled):active {
2076
- background-color: var(--charcoal-color-container-press);
2077
- }
2078
-
2079
- .charcoal-radio-input:not(:disabled):focus {
2080
- outline: none;
2081
- box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
2082
- }
2083
-
2084
- .charcoal-radio-input:not(:disabled):focus-visible {
2085
- box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
2086
- }
2087
-
2088
- .charcoal-radio-input:not(:disabled):focus:not(:focus-visible) {
2089
- box-shadow: none;
2090
- }
2091
-
2092
- .charcoal-radio-input:not(:disabled)[aria-invalid='true'],
2093
- .charcoal-radio-input:not(:disabled)[aria-invalid='true']:focus {
2094
- box-shadow: 0 0 0 4px rgba(255, 43, 0, 0.32);
2095
- }
2096
-
2097
- .charcoal-radio-input:checked:not(:disabled):hover {
2098
- background-color: var(--charcoal-color-container-primary-hover);
2099
- }
2100
-
2101
- .charcoal-radio-input:checked:not(:disabled):hover::after {
2102
- background-color: var(--charcoal-color-icon-on-primary-hover);
2103
- }
2104
-
2105
- .charcoal-radio-input:checked:not(:disabled):active {
2106
- background-color: var(--charcoal-color-container-primary-press);
2107
- }
2108
-
2109
- .charcoal-radio-input:checked:not(:disabled):active::after {
2110
- background-color: var(--charcoal-color-icon-on-primary-press);
2111
- }
2112
2052
  .charcoal-checkbox-input {
2113
2053
  -webkit-appearance: none;
2114
2054
  -moz-appearance: none;
@@ -2223,34 +2163,94 @@ pixiv-icon:not(:defined)[name^='Inline/'][scale='2'] {
2223
2163
  border: 2px solid #fff;
2224
2164
  box-sizing: border-box;
2225
2165
  }
2226
- .charcoal-menu-list {
2227
- padding: 0;
2166
+ .charcoal-radio-input {
2167
+ -webkit-appearance: none;
2168
+ -moz-appearance: none;
2169
+ appearance: none;
2170
+ display: block;
2171
+ box-sizing: border-box;
2172
+
2228
2173
  margin: 0;
2229
- }
2230
- .charcoal-list-item {
2231
- list-style: none;
2232
- display: flex;
2233
- align-items: center;
2234
- min-height: 40px;
2174
+ padding: 6px;
2175
+
2176
+ width: 20px;
2177
+ height: 20px;
2235
2178
  cursor: pointer;
2236
- outline: none;
2179
+ border-radius: 999999px;
2180
+ background-color: var(--charcoal-color-container-default);
2181
+ transition:
2182
+ 0.2s background-color,
2183
+ 0.2s box-shadow;
2184
+ }
2237
2185
 
2238
- padding-right: 16px;
2239
- padding-left: 16px;
2186
+ .charcoal-radio-input:checked {
2187
+ background-color: var(--charcoal-color-container-primary-default);
2188
+ }
2240
2189
 
2241
- transition: background-color 0.2s;
2190
+ .charcoal-radio-input:checked::after {
2191
+ content: '';
2192
+ display: block;
2193
+ width: 8px;
2194
+ height: 8px;
2195
+ pointer-events: none;
2196
+ background-color: var(--charcoal-color-icon-on-primary-default);
2197
+ border-radius: 999999px;
2198
+ transition:
2199
+ 0.2s background-color,
2200
+ 0.2s box-shadow;
2242
2201
  }
2243
2202
 
2244
- .charcoal-list-item:not([aria-disabled='true']):hover,
2245
- .charcoal-list-item:not([aria-disabled='true']):focus,
2246
- .charcoal-list-item:not([aria-disabled='true']):focus-within {
2247
- background-color: var(--charcoal-color-container-secondary-default);
2203
+ .charcoal-radio-input:not(:checked) {
2204
+ border-width: 2px;
2205
+ border-style: solid;
2206
+ border-color: var(--charcoal-color-border-default);
2248
2207
  }
2249
2208
 
2250
- .charcoal-list-item[aria-disabled='true'] {
2251
- opacity: 0.32;
2209
+ .charcoal-radio-input:disabled {
2252
2210
  cursor: default;
2253
2211
  }
2212
+
2213
+ .charcoal-radio-input:not(:disabled):hover {
2214
+ background-color: var(--charcoal-color-container-hover);
2215
+ }
2216
+
2217
+ .charcoal-radio-input:not(:disabled):active {
2218
+ background-color: var(--charcoal-color-container-press);
2219
+ }
2220
+
2221
+ .charcoal-radio-input:not(:disabled):focus {
2222
+ outline: none;
2223
+ box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
2224
+ }
2225
+
2226
+ .charcoal-radio-input:not(:disabled):focus-visible {
2227
+ box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
2228
+ }
2229
+
2230
+ .charcoal-radio-input:not(:disabled):focus:not(:focus-visible) {
2231
+ box-shadow: none;
2232
+ }
2233
+
2234
+ .charcoal-radio-input:not(:disabled)[aria-invalid='true'],
2235
+ .charcoal-radio-input:not(:disabled)[aria-invalid='true']:focus {
2236
+ box-shadow: 0 0 0 4px rgba(255, 43, 0, 0.32);
2237
+ }
2238
+
2239
+ .charcoal-radio-input:checked:not(:disabled):hover {
2240
+ background-color: var(--charcoal-color-container-primary-hover);
2241
+ }
2242
+
2243
+ .charcoal-radio-input:checked:not(:disabled):hover::after {
2244
+ background-color: var(--charcoal-color-icon-on-primary-hover);
2245
+ }
2246
+
2247
+ .charcoal-radio-input:checked:not(:disabled):active {
2248
+ background-color: var(--charcoal-color-container-primary-press);
2249
+ }
2250
+
2251
+ .charcoal-radio-input:checked:not(:disabled):active::after {
2252
+ background-color: var(--charcoal-color-icon-on-primary-press);
2253
+ }
2254
2254
  .charcoal-switch-input {
2255
2255
  cursor: pointer;
2256
2256
  -webkit-appearance: none;