@charcoal-ui/react 6.1.0-beta.0 → 6.1.0-beta.1

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