@charcoal-ui/react 6.1.0-beta.6 → 6.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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,29 @@
156
199
  .charcoal-button[data-full-width='true'] {
157
200
  width: 100%;
158
201
  }
159
- .charcoal-clickable {
202
+ .charcoal-radio__label {
203
+ display: grid;
204
+ grid-template-columns: auto 1fr;
205
+ grid-gap: 4px;
206
+ align-items: center;
160
207
  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
208
  }
188
209
 
189
- .charcoal-clickable:disabled,
190
- .charcoal-clickable[aria-disabled]:not([aria-disabled='false']) {
210
+ .charcoal-radio__label[aria-disabled]:not([aria-disabled='false']) {
211
+ opacity: 0.32;
191
212
  cursor: default;
192
213
  }
193
214
 
194
- .charcoal-clickable:focus {
195
- outline: none;
196
- }
197
-
198
- .charcoal-clickable::-moz-focus-inner {
199
- border-style: none;
200
- padding: 0;
201
- }
215
+ .charcoal-radio__label_div {
216
+ font-size: 14px;
217
+ line-height: 22px;
218
+ color: var(--charcoal-color-text-default);
219
+ }
220
+ .charcoal-radio-group {
221
+ display: grid;
222
+ grid-template-columns: 1fr;
223
+ grid-gap: 8px;
224
+ }
202
225
  .charcoal-icon-button {
203
226
  cursor: pointer;
204
227
  -webkit-appearance: none;
@@ -323,29 +346,6 @@
323
346
  .charcoal-icon-button[aria-disabled='false']:focus:not(:focus-visible) {
324
347
  box-shadow: none;
325
348
  }
326
- .charcoal-radio__label {
327
- display: grid;
328
- grid-template-columns: auto 1fr;
329
- grid-gap: 4px;
330
- align-items: center;
331
- cursor: pointer;
332
- }
333
-
334
- .charcoal-radio__label[aria-disabled]:not([aria-disabled='false']) {
335
- opacity: 0.32;
336
- cursor: default;
337
- }
338
-
339
- .charcoal-radio__label_div {
340
- font-size: 14px;
341
- line-height: 22px;
342
- color: var(--charcoal-color-text-default);
343
- }
344
- .charcoal-radio-group {
345
- display: grid;
346
- grid-template-columns: 1fr;
347
- grid-gap: 8px;
348
- }
349
349
  .charcoal-multi-select {
350
350
  display: grid;
351
351
  grid-template-columns: auto 1fr;
@@ -481,29 +481,6 @@
481
481
  border-width: 2px;
482
482
  border-style: solid;
483
483
  }
484
- .charcoal-switch__label {
485
- display: inline-grid;
486
- grid-template-columns: auto 1fr;
487
- align-items: center;
488
- cursor: pointer;
489
- outline: 0;
490
- gap: 4px;
491
- }
492
-
493
- .charcoal-switch__label[aria-disabled='true'] {
494
- opacity: 0.32;
495
- cursor: default;
496
- }
497
-
498
- .charcoal-switch__label[aria-disabled='true'] > input {
499
- opacity: 1;
500
- }
501
-
502
- .charcoal-switch__label_div {
503
- font-size: 14px;
504
- line-height: 22px;
505
- color: var(--charcoal-color-text-default);
506
- }
507
484
  .charcoal-text-field-root {
508
485
  display: grid;
509
486
  grid-template-columns: 1fr;
@@ -603,6 +580,68 @@
603
580
  font-size: 14px;
604
581
  color: var(--charcoal-color-text-tertiary-default);
605
582
  }
583
+ .charcoal-loading-spinner {
584
+ box-sizing: content-box;
585
+ margin: auto;
586
+ padding: 16px;
587
+ border-radius: 8px;
588
+ font-size: 48px;
589
+ width: 48px;
590
+ height: 48px;
591
+ opacity: 0.84;
592
+ color: var(--charcoal-color-icon-tertiary-default);
593
+ background-color: var(--charcoal-color-background-default);
594
+ }
595
+
596
+ .charcoal-loading-spinner[data-transparent='true'] {
597
+ background-color: transparent;
598
+ }
599
+
600
+ @keyframes charcoal-loading-spinner-icon-scale-out {
601
+ from {
602
+ transform: scale(0);
603
+ opacity: 1;
604
+ }
605
+ to {
606
+ transform: scale(1);
607
+ opacity: 0;
608
+ }
609
+ }
610
+
611
+ .charcoal-loading-spinner-icon {
612
+ width: 1em;
613
+ height: 1em;
614
+ border-radius: 1em;
615
+ background-color: currentColor;
616
+ animation: charcoal-loading-spinner-icon-scale-out 1s infinite both ease-out;
617
+ }
618
+
619
+ .charcoal-loading-spinner-icon[data-reset-animation] {
620
+ animation: none;
621
+ }
622
+
623
+ .charcoal-loading-spinner-icon[data-once='true'] {
624
+ animation-iteration-count: 1;
625
+ }
626
+ .charcoal-menu-item-group {
627
+ display: block;
628
+ }
629
+
630
+ .charcoal-menu-item-group > span {
631
+ display: block;
632
+ color: var(--charcoal-color-text-tertiary-default);
633
+ font-size: 12px;
634
+ font-weight: bold;
635
+ padding: 12px 0 8px 16px;
636
+ }
637
+
638
+ .charcoal-menu-item-group > ul {
639
+ padding-left: 0;
640
+ margin: 0;
641
+ box-sizing: border-box;
642
+ list-style: none;
643
+ overflow: hidden;
644
+ }
606
645
  .charcoal-text-area-root {
607
646
  display: grid;
608
647
  grid-template-columns: 1fr;
@@ -715,32 +754,138 @@
715
754
  font-size: 14px;
716
755
  color: var(--charcoal-color-text-tertiary-default);
717
756
  }
718
- .charcoal-icon {
719
- display: inline-flex;
720
- width: var(--charcoal-icon-size);
721
- height: var(--charcoal-icon-size);
757
+ .charcoal-dropdown-selector-root {
758
+ display: grid;
759
+ grid-template-columns: 1fr;
760
+ grid-gap: 4px;
761
+ width: 100%;
722
762
  }
723
763
 
724
- pixiv-icon:not(:defined) {
725
- --pixiv-icon-base: 24px;
726
- --pixiv-icon-scale: 1;
727
- --pixiv-icon-size: calc(var(--pixiv-icon-base) * var(--pixiv-icon-scale));
764
+ .charcoal-dropdown-selector-root[aria-disabled='true'] {
765
+ cursor: default;
766
+ opacity: 0.32;
767
+ }
728
768
 
729
- display: inline-flex;
730
- /* --charcoal-icon-size がセットされていればそれを優先、
731
- なければ name / scale から導出した --pixiv-icon-size をフォールバック */
732
- width: var(--charcoal-icon-size, var(--pixiv-icon-size));
733
- height: var(--charcoal-icon-size, var(--pixiv-icon-size));
769
+ .charcoal-dropdown-selector-button {
770
+ display: grid;
771
+ grid-template-columns: 1fr auto;
772
+ justify-content: space-between;
773
+ align-items: center;
774
+
775
+ height: 40px;
776
+ width: 100%;
777
+ box-sizing: border-box;
778
+ border: none;
779
+ cursor: pointer;
780
+ gap: 4px;
781
+
782
+ padding-right: 8px;
783
+ padding-left: 8px;
784
+ background-color: var(--charcoal-color-container-secondary-default-a);
785
+ border-radius: 4px;
786
+
787
+ transition:
788
+ 0.2s box-shadow,
789
+ 0.2s background-color;
734
790
  }
735
791
 
736
- pixiv-icon:not(:defined)[name^='16/'] {
737
- --pixiv-icon-base: 16px;
738
- --pixiv-icon-size: 16px;
792
+ .charcoal-dropdown-selector-button:disabled {
793
+ cursor: default;
739
794
  }
740
795
 
741
- pixiv-icon:not(:defined)[name^='24/'][scale='2'] {
742
- --pixiv-icon-scale: 2;
743
- }
796
+ .charcoal-dropdown-selector-button:not(:disabled):focus {
797
+ outline: none;
798
+ box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
799
+ }
800
+
801
+ .charcoal-dropdown-selector-button:not(:disabled):focus-visible {
802
+ box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
803
+ }
804
+
805
+ .charcoal-dropdown-selector-button:not(:disabled)[data-active='true'],
806
+ .charcoal-dropdown-selector-button:not(:disabled):active {
807
+ background-color: var(--charcoal-color-container-secondary-press-a);
808
+ }
809
+
810
+ .charcoal-dropdown-selector-button:not(:disabled):hover {
811
+ background-color: var(--charcoal-color-container-secondary-hover-a);
812
+ }
813
+
814
+ .charcoal-dropdown-selector-button:not(:disabled):focus:not(:focus-visible) {
815
+ box-shadow: none;
816
+ }
817
+
818
+ .charcoal-dropdown-selector-button[aria-invalid='true'],
819
+ .charcoal-dropdown-selector-button:not(:disabled)[aria-invalid='true']:focus:not(:focus-visible) {
820
+ box-shadow: 0 0 0 4px rgba(255, 43, 0, 0.32);
821
+ }
822
+
823
+ .charcoal-ui-dropdown-selector-text {
824
+ text-align: left;
825
+ font-size: 14px;
826
+ line-height: 22px;
827
+ display: flow-root;
828
+ color: var(--charcoal-color-text-default);
829
+ overflow: hidden;
830
+ text-overflow: ellipsis;
831
+ white-space: nowrap;
832
+ }
833
+
834
+ .charcoal-ui-dropdown-selector-text[data-placeholder='true'] {
835
+ color: var(--charcoal-color-text-placeholder-default);
836
+ }
837
+
838
+ .charcoal-ui-dropdown-selector-icon {
839
+ color: var(--charcoal-color-icon-secondary-default);
840
+ }
841
+ .charcoal-checkbox__label {
842
+ position: relative;
843
+ cursor: pointer;
844
+ display: flex;
845
+ gap: 4px;
846
+ }
847
+
848
+ .charcoal-checkbox__label[aria-disabled='true'] {
849
+ cursor: default;
850
+ opacity: 0.32;
851
+ }
852
+
853
+ .charcoal-checkbox__label[aria-disabled='true'] > input {
854
+ opacity: 1;
855
+ }
856
+
857
+ .charcoal-checkbox__label_div {
858
+ flex: 1;
859
+ color: var(--charcoal-color-text-default);
860
+ font-size: 14px;
861
+ line-height: 20px;
862
+ }
863
+ .charcoal-icon {
864
+ display: inline-flex;
865
+ width: var(--charcoal-icon-size);
866
+ height: var(--charcoal-icon-size);
867
+ }
868
+
869
+ pixiv-icon:not(:defined) {
870
+ --pixiv-icon-base: 24px;
871
+ --pixiv-icon-scale: 1;
872
+ --pixiv-icon-size: calc(var(--pixiv-icon-base) * var(--pixiv-icon-scale));
873
+
874
+ display: inline-flex;
875
+ /* --charcoal-icon-size がセットされていればそれを優先、
876
+ なければ name / scale から導出した --pixiv-icon-size をフォールバック */
877
+ width: var(--charcoal-icon-size, var(--pixiv-icon-size));
878
+ height: var(--charcoal-icon-size, var(--pixiv-icon-size));
879
+ }
880
+
881
+ pixiv-icon:not(:defined)[name^='16/'] {
882
+ --pixiv-icon-base: 16px;
883
+ --pixiv-icon-size: 16px;
884
+ }
885
+
886
+ pixiv-icon:not(:defined)[name^='24/'][scale='2'] {
887
+ --pixiv-icon-scale: 2;
888
+ }
744
889
 
745
890
  pixiv-icon:not(:defined)[name^='24/'][scale='3'] {
746
891
  --pixiv-icon-scale: 3;
@@ -758,6 +903,140 @@ pixiv-icon:not(:defined)[name^='Inline/'] {
758
903
  pixiv-icon:not(:defined)[name^='Inline/'][scale='2'] {
759
904
  --pixiv-icon-scale: 2;
760
905
  }
906
+ .charcoal-dropdown-selector-menu-item {
907
+ font-size: 14px;
908
+ line-height: 22px;
909
+ color: var(--charcoal-color-text-secondary-default);
910
+ padding: 9px 0;
911
+
912
+ display: flex;
913
+ align-items: center;
914
+ width: 100%;
915
+ margin-left: 20px;
916
+ }
917
+
918
+ .charcoal-dropdown-selector-menu-item[data-selected='true'] {
919
+ margin-left: 0px;
920
+ }
921
+
922
+ .charcoal-dropdown-selector-menu-item-icon {
923
+ color: var(--charcoal-color-text-secondary-default);
924
+ padding-right: 4px;
925
+ }
926
+
927
+ .charcoal-dropdown-selector-menu-item-container {
928
+ display: flex;
929
+ align-items: center;
930
+ }
931
+
932
+ .charcoal-dropdown-selector-menu-secondary {
933
+ font-size: 12px;
934
+ line-height: 20px;
935
+ color: var(--charcoal-color-text-tertiary-default);
936
+ padding-bottom: 9px;
937
+
938
+ display: flex;
939
+ align-items: center;
940
+ margin-left: 20px;
941
+ }
942
+
943
+ .charcoal-dropdown-selector-menu-fullwidth {
944
+ width: 100%;
945
+ }
946
+ .charcoal-switch__label {
947
+ display: inline-grid;
948
+ grid-template-columns: auto 1fr;
949
+ align-items: center;
950
+ cursor: pointer;
951
+ outline: 0;
952
+ gap: 4px;
953
+ }
954
+
955
+ .charcoal-switch__label[aria-disabled='true'] {
956
+ opacity: 0.32;
957
+ cursor: default;
958
+ }
959
+
960
+ .charcoal-switch__label[aria-disabled='true'] > input {
961
+ opacity: 1;
962
+ }
963
+
964
+ .charcoal-switch__label_div {
965
+ font-size: 14px;
966
+ line-height: 22px;
967
+ color: var(--charcoal-color-text-default);
968
+ }
969
+ .charcoal-segmented-control {
970
+ display: inline-flex;
971
+ align-items: center;
972
+
973
+ background-color: var(--charcoal-color-container-secondary-default-a);
974
+ border-radius: 16px;
975
+ }
976
+
977
+ .charcoal-segmented-control[data-uniform-segment-width='true'],
978
+ .charcoal-segmented-control[data-full-width='true'] {
979
+ display: inline-grid;
980
+ grid-auto-columns: minmax(80px, 1fr);
981
+ grid-auto-rows: 32px;
982
+ grid-auto-flow: column;
983
+ }
984
+
985
+ .charcoal-segmented-control[data-full-width='true'] {
986
+ width: 100%;
987
+ }
988
+
989
+ .charcoal-segmented-control-radio__label {
990
+ position: relative;
991
+ display: flex;
992
+ align-items: center;
993
+ justify-content: center;
994
+ cursor: pointer;
995
+ height: 32px;
996
+
997
+ padding-right: 16px;
998
+ padding-left: 16px;
999
+ border-radius: 16px;
1000
+ color: var(--charcoal-color-text-secondary-default);
1001
+
1002
+ font-size: 14px;
1003
+ line-height: 22px;
1004
+ }
1005
+
1006
+ .charcoal-segmented-control-radio__label[aria-disabled]:not([aria-disabled='false']) {
1007
+ cursor: default;
1008
+ opacity: 0.32;
1009
+ }
1010
+
1011
+ .charcoal-segmented-control-radio__label[data-checked='true'] {
1012
+ background-color: var(--charcoal-color-container-primary-default);
1013
+ color: var(--charcoal-color-text-on-primary-default);
1014
+ }
1015
+
1016
+ .charcoal-segmented-control-radio__label[data-uniform-segment-width='true'],
1017
+ .charcoal-segmented-control-radio__label[data-full-width='true'] {
1018
+ justify-content: center;
1019
+ white-space: nowrap;
1020
+ }
1021
+
1022
+ .charcoal-segmented-control-radio__input {
1023
+ position: absolute;
1024
+
1025
+ height: 0px;
1026
+ width: 0px;
1027
+ padding: 0;
1028
+ margin: 0;
1029
+
1030
+ -webkit-appearance: none;
1031
+
1032
+ -moz-appearance: none;
1033
+
1034
+ appearance: none;
1035
+ box-sizing: border-box;
1036
+ overflow: hidden;
1037
+ white-space: nowrap;
1038
+ opacity: 0;
1039
+ }
761
1040
  .charcoal-modal-background {
762
1041
  overflow: auto;
763
1042
  display: flex;
@@ -828,834 +1107,375 @@ pixiv-icon:not(:defined)[name^='Inline/'][scale='2'] {
828
1107
  font-weight: inherit;
829
1108
  font-size: inherit;
830
1109
  }
831
- .charcoal-modal-header-root {
832
- height: 64px;
833
- display: grid;
834
- align-content: center;
835
- justify-content: center;
836
- }
1110
+ .charcoal-tag-item {
1111
+ --charcoal-tag-item-color: var(--charcoal-color-text-on-primary-default);
1112
+ --charcoal-tag-item-size: 40px;
1113
+ --charcoal-tag-item-padding-left: 24px;
1114
+ --charcoal-tag-item-padding-right: 24px;
1115
+ --charcoal-tag-item-bg: ;
837
1116
 
838
- @media (max-width: 743px) {
839
- .charcoal-modal-header-root[data-bottom-sheet='true'],
840
- .charcoal-modal-header-root[data-bottom-sheet='full'] {
841
- height: 48px;
842
- }
843
- }
1117
+ isolation: isolate;
1118
+ position: relative;
844
1119
 
845
- .charcoal-modal-header-title {
846
- color: var(--charcoal-color-text-default);
847
- font-size: 16px;
848
- line-height: 24px;
849
- font-weight: bold;
850
- display: flow-root;
851
- }
1120
+ -webkit-appearance: none;
852
1121
 
853
- .charcoal-modal-align {
854
- padding-left: 16px;
855
- padding-right: 16px;
856
- }
1122
+ -moz-appearance: none;
857
1123
 
858
- .charcoal-modal-body {
859
- padding-bottom: 40px;
860
- }
1124
+ appearance: none;
1125
+ outline: none;
1126
+ border-style: none;
861
1127
 
862
- .charcoal-modal-buttons {
863
- display: grid;
864
- grid-auto-flow: row;
865
- grid-row-gap: 8px;
1128
+ display: inline-flex;
1129
+ gap: 8px;
1130
+ align-items: center;
1131
+ justify-content: center;
866
1132
 
867
- padding-top: 16px;
868
- padding-left: 16px;
869
- padding-right: 16px;
870
- }
871
- .charcoal-loading-spinner {
872
- box-sizing: content-box;
873
- margin: auto;
874
- padding: 16px;
875
- border-radius: 8px;
876
- font-size: 48px;
877
- width: 48px;
878
- height: 48px;
879
- opacity: 0.84;
880
- color: var(--charcoal-color-icon-tertiary-default);
881
- background-color: var(--charcoal-color-background-default);
1133
+ text-decoration: none;
1134
+ cursor: pointer;
1135
+ overflow: hidden;
1136
+
1137
+ color: var(--charcoal-tag-item-color);
1138
+ height: var(--charcoal-tag-item-size);
1139
+ padding-top: 4px;
1140
+ padding-bottom: 4px;
1141
+ padding-left: var(--charcoal-tag-item-padding-left);
1142
+ padding-right: var(--charcoal-tag-item-padding-right);
1143
+ box-sizing: border-box;
1144
+ border-radius: 4px;
1145
+
1146
+ transition: 0.2s box-shadow;
882
1147
  }
883
1148
 
884
- .charcoal-loading-spinner[data-transparent='true'] {
885
- background-color: transparent;
1149
+ .charcoal-tag-item[data-size='M'] {
1150
+ --charcoal-tag-item-size: 40px;
1151
+ --charcoal-tag-item-padding-left: 24px;
1152
+ --charcoal-tag-item-padding-right: 24px;
886
1153
  }
887
1154
 
888
- @keyframes charcoal-loading-spinner-icon-scale-out {
889
- from {
890
- transform: scale(0);
891
- opacity: 1;
892
- }
893
- to {
894
- transform: scale(1);
895
- opacity: 0;
1155
+ .charcoal-tag-item[data-size='S'] {
1156
+ --charcoal-tag-item-size: 32px;
1157
+ --charcoal-tag-item-padding-left: 16px;
1158
+ --charcoal-tag-item-padding-right: 16px;
896
1159
  }
897
- }
898
-
899
- .charcoal-loading-spinner-icon {
900
- width: 1em;
901
- height: 1em;
902
- border-radius: 1em;
903
- background-color: currentColor;
904
- animation: charcoal-loading-spinner-icon-scale-out 1s infinite both ease-out;
905
- }
906
1160
 
907
- .charcoal-loading-spinner-icon[data-reset-animation] {
908
- animation: none;
1161
+ .charcoal-tag-item[data-state='inactive'] {
1162
+ --charcoal-tag-item-color: var(--charcoal-color-text-secondary-default);
909
1163
  }
910
1164
 
911
- .charcoal-loading-spinner-icon[data-once='true'] {
912
- animation-iteration-count: 1;
1165
+ .charcoal-tag-item[data-state='active'] {
1166
+ --charcoal-tag-item-padding-left: 16px;
1167
+ --charcoal-tag-item-padding-right: 8px;
913
1168
  }
914
- .charcoal-dropdown-selector-root {
915
- display: grid;
916
- grid-template-columns: 1fr;
917
- grid-gap: 4px;
918
- width: 100%;
919
- }
920
1169
 
921
- .charcoal-dropdown-selector-root[aria-disabled='true'] {
922
- cursor: default;
1170
+ .charcoal-tag-item:disabled,
1171
+ .charcoal-tag-item[aria-disabled]:not([aria-disabled='false']) {
923
1172
  opacity: 0.32;
1173
+ cursor: default;
924
1174
  }
925
1175
 
926
- .charcoal-dropdown-selector-button {
927
- display: grid;
928
- grid-template-columns: 1fr auto;
929
- justify-content: space-between;
930
- align-items: center;
1176
+ .charcoal-tag-item:not(:disabled):not([aria-disabled]):focus-visible,
1177
+ .charcoal-tag-item[aria-disabled='false']:focus-visible {
1178
+ outline: none;
1179
+ box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
1180
+ }
931
1181
 
932
- height: 40px;
933
- width: 100%;
934
- box-sizing: border-box;
935
- border: none;
936
- cursor: pointer;
937
- gap: 4px;
1182
+ .charcoal-tag-item:not(:disabled):not([aria-disabled]):focus,
1183
+ .charcoal-tag-item[aria-disabled='false']:focus {
1184
+ outline: none;
1185
+ box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
1186
+ }
938
1187
 
939
- padding-right: 8px;
940
- padding-left: 8px;
941
- background-color: var(--charcoal-color-container-secondary-default-a);
942
- border-radius: 4px;
1188
+ .charcoal-tag-item:not(:disabled):not([aria-disabled]):focus:not(:focus-visible),
1189
+ .charcoal-tag-item[aria-disabled='false']:focus:not(:focus-visible) {
1190
+ box-shadow: none;
1191
+ }
943
1192
 
944
- transition:
945
- 0.2s box-shadow,
946
- 0.2s background-color;
1193
+ .charcoal-tag-item__bg {
1194
+ background-color: var(--charcoal-tag-item-bg);
947
1195
  }
948
1196
 
949
- .charcoal-dropdown-selector-button:disabled {
950
- cursor: default;
1197
+ .charcoal-tag-item__bg[data-bg-variant='image'] {
1198
+ background-color: var(--charcoal-color-container-on-img-default);
951
1199
  }
952
1200
 
953
- .charcoal-dropdown-selector-button:not(:disabled):focus {
954
- outline: none;
955
- box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
1201
+ .charcoal-tag-item__bg[data-bg-variant='image']::before {
1202
+ content: '';
1203
+ position: absolute;
1204
+ z-index: 1;
1205
+ top: 0;
1206
+ left: 0;
1207
+ width: 100%;
1208
+ height: 100%;
1209
+ background-position: center;
1210
+ background-size: cover;
1211
+ background-image: var(--charcoal-tag-item-bg);
1212
+ mix-blend-mode: overlay;
956
1213
  }
957
1214
 
958
- .charcoal-dropdown-selector-button:not(:disabled):focus-visible {
959
- box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
960
- }
1215
+ .charcoal-tag-item__bg[data-state='inactive'] {
1216
+ background-color: var(--charcoal-color-container-secondary-default);
1217
+ }
961
1218
 
962
- .charcoal-dropdown-selector-button:not(:disabled)[data-active='true'],
963
- .charcoal-dropdown-selector-button:not(:disabled):active {
964
- background-color: var(--charcoal-color-container-secondary-press-a);
965
- }
1219
+ .charcoal-tag-item__label {
1220
+ height: 100%;
1221
+ display: flex;
1222
+ flex-direction: column;
1223
+ align-items: center;
1224
+ justify-content: center;
1225
+ }
966
1226
 
967
- .charcoal-dropdown-selector-button:not(:disabled):hover {
968
- background-color: var(--charcoal-color-container-secondary-hover-a);
969
- }
1227
+ .charcoal-tag-item__label[data-has-translate='true'] {
1228
+ justify-content: space-between;
1229
+ }
970
1230
 
971
- .charcoal-dropdown-selector-button:not(:disabled):focus:not(:focus-visible) {
972
- box-shadow: none;
973
- }
1231
+ .charcoal-tag-item__label__translated {
1232
+ --charcoal-tag-item-text-font-size: 12px;
1233
+ --charcoal-tag-item-text-line-height: 20px;
1234
+ font-weight: bold;
1235
+ }
974
1236
 
975
- .charcoal-dropdown-selector-button[aria-invalid='true'],
976
- .charcoal-dropdown-selector-button:not(:disabled)[aria-invalid='true']:focus:not(:focus-visible) {
977
- box-shadow: 0 0 0 4px rgba(255, 43, 0, 0.32);
1237
+ .charcoal-tag-item__label__translated::before {
1238
+ display: none;
978
1239
  }
979
1240
 
980
- .charcoal-ui-dropdown-selector-text {
981
- text-align: left;
982
- font-size: 14px;
983
- line-height: 22px;
984
- display: flow-root;
985
- color: var(--charcoal-color-text-default);
1241
+ .charcoal-tag-item__label__text {
1242
+ --charcoal-tag-item-text-font-size: 14px;
1243
+ --charcoal-tag-item-text-line-height: 22px;
1244
+
1245
+ max-width: 152px;
986
1246
  overflow: hidden;
987
- text-overflow: ellipsis;
1247
+ font-weight: bold;
1248
+
1249
+ color: inherit;
988
1250
  white-space: nowrap;
1251
+ text-overflow: ellipsis;
989
1252
  }
990
1253
 
991
- .charcoal-ui-dropdown-selector-text[data-placeholder='true'] {
992
- color: var(--charcoal-color-text-placeholder-default);
1254
+ .charcoal-tag-item__label__text[data-has-translate='true'] {
1255
+ --charcoal-tag-item-text-font-size: 10px;
1256
+ --charcoal-tag-item-text-line-height: 14px;
1257
+ font-weight: normal;
993
1258
  }
994
1259
 
995
- .charcoal-ui-dropdown-selector-icon {
996
- color: var(--charcoal-color-icon-secondary-default);
1260
+ /* Kept flat: different class name from .charcoal-tag-item__label__text (note: "labe" typo in original) */
1261
+ .charcoal-tag-item__labe__text[data-has-translate='true']::after {
1262
+ display: none;
997
1263
  }
998
- .charcoal-dropdown-selector-menu-item {
999
- font-size: 14px;
1000
- line-height: 22px;
1001
- color: var(--charcoal-color-text-secondary-default);
1002
- padding: 9px 0;
1264
+ .charcoal-text-ellipsis {
1265
+ /* Runtime variables overridden by the React component. */
1266
+ --charcoal-text-ellipsis-line-limit: 1;
1267
+ --charcoal-text-ellipsis-line-height: inherit;
1003
1268
 
1004
- display: flex;
1005
- align-items: center;
1006
- width: 100%;
1007
- margin-left: 20px;
1269
+ overflow: hidden;
1270
+ overflow-wrap: break-word;
1271
+ display: -webkit-box;
1272
+ -webkit-box-orient: vertical;
1273
+ -webkit-line-clamp: var(--charcoal-text-ellipsis-line-limit);
1008
1274
  }
1009
1275
 
1010
- .charcoal-dropdown-selector-menu-item[data-selected='true'] {
1011
- margin-left: 0px;
1012
- }
1276
+ .charcoal-text-ellipsis[data-has-line-height='true'] {
1277
+ line-height: var(--charcoal-text-ellipsis-line-height);
1278
+ }
1013
1279
 
1014
- .charcoal-dropdown-selector-menu-item-icon {
1015
- color: var(--charcoal-color-text-secondary-default);
1016
- padding-right: 4px;
1017
- }
1280
+ .charcoal-text-ellipsis[data-has-line-height='false'] {
1281
+ line-height: inherit;
1282
+ }
1018
1283
 
1019
- .charcoal-dropdown-selector-menu-item-container {
1020
- display: flex;
1021
- align-items: center;
1284
+ .charcoal-text-ellipsis[data-line-limit='1'][data-use-nowrap='true'] {
1285
+ text-overflow: ellipsis;
1286
+ white-space: nowrap;
1287
+ }
1288
+ .charcoal-modal-header-root {
1289
+ height: 64px;
1290
+ display: grid;
1291
+ align-content: center;
1292
+ justify-content: center;
1022
1293
  }
1023
1294
 
1024
- .charcoal-dropdown-selector-menu-secondary {
1025
- font-size: 12px;
1026
- line-height: 20px;
1027
- color: var(--charcoal-color-text-tertiary-default);
1028
- padding-bottom: 9px;
1029
-
1030
- display: flex;
1031
- align-items: center;
1032
- margin-left: 20px;
1295
+ @media (max-width: 743px) {
1296
+ .charcoal-modal-header-root[data-bottom-sheet='true'],
1297
+ .charcoal-modal-header-root[data-bottom-sheet='full'] {
1298
+ height: 48px;
1299
+ }
1033
1300
  }
1034
1301
 
1035
- .charcoal-dropdown-selector-menu-fullwidth {
1036
- width: 100%;
1302
+ .charcoal-modal-header-title {
1303
+ color: var(--charcoal-color-text-default);
1304
+ font-size: 16px;
1305
+ line-height: 24px;
1306
+ font-weight: bold;
1307
+ display: flow-root;
1037
1308
  }
1038
- .charcoal-segmented-control {
1039
- display: inline-flex;
1040
- align-items: center;
1041
1309
 
1042
- background-color: var(--charcoal-color-container-secondary-default-a);
1043
- border-radius: 16px;
1310
+ .charcoal-modal-align {
1311
+ padding-left: 16px;
1312
+ padding-right: 16px;
1044
1313
  }
1045
1314
 
1046
- .charcoal-segmented-control[data-uniform-segment-width='true'],
1047
- .charcoal-segmented-control[data-full-width='true'] {
1048
- display: inline-grid;
1049
- grid-auto-columns: minmax(80px, 1fr);
1050
- grid-auto-rows: 32px;
1051
- grid-auto-flow: column;
1052
- }
1053
-
1054
- .charcoal-segmented-control[data-full-width='true'] {
1055
- width: 100%;
1056
- }
1315
+ .charcoal-modal-body {
1316
+ padding-bottom: 40px;
1317
+ }
1057
1318
 
1058
- .charcoal-segmented-control-radio__label {
1059
- position: relative;
1060
- display: flex;
1061
- align-items: center;
1062
- justify-content: center;
1063
- cursor: pointer;
1064
- height: 32px;
1319
+ .charcoal-modal-buttons {
1320
+ display: grid;
1321
+ grid-auto-flow: row;
1322
+ grid-row-gap: 8px;
1065
1323
 
1066
- padding-right: 16px;
1324
+ padding-top: 16px;
1067
1325
  padding-left: 16px;
1068
- border-radius: 16px;
1069
- color: var(--charcoal-color-text-secondary-default);
1070
-
1071
- font-size: 14px;
1072
- line-height: 22px;
1326
+ padding-right: 16px;
1327
+ }
1328
+ .charcoal-hint-text {
1329
+ background-color: var(--charcoal-color-container-secondary-default);
1330
+ border-radius: 8px;
1331
+ padding: 12px 16px;
1332
+ display: flex;
1333
+ align-items: flex-start;
1073
1334
  }
1074
1335
 
1075
- .charcoal-segmented-control-radio__label[aria-disabled]:not([aria-disabled='false']) {
1076
- cursor: default;
1077
- opacity: 0.32;
1336
+ .charcoal-hint-text[data-context='page'] {
1337
+ justify-content: center;
1078
1338
  }
1079
1339
 
1080
- .charcoal-segmented-control-radio__label[data-checked='true'] {
1081
- background-color: var(--charcoal-color-container-primary-default);
1082
- color: var(--charcoal-color-text-on-primary-default);
1083
- }
1340
+ @media (min-width: 744px) {
1084
1341
 
1085
- .charcoal-segmented-control-radio__label[data-uniform-segment-width='true'],
1086
- .charcoal-segmented-control-radio__label[data-full-width='true'] {
1087
- justify-content: center;
1088
- white-space: nowrap;
1342
+ .charcoal-hint-text[data-context='page'] {
1343
+ padding: 20px 40px
1089
1344
  }
1345
+ }
1090
1346
 
1091
- .charcoal-segmented-control-radio__input {
1092
- position: absolute;
1347
+ .charcoal-hint-text-icon {
1348
+ display: flex;
1349
+ align-items: center;
1350
+ color: var(--charcoal-color-icon-tertiary-default);
1351
+ height: 22px;
1352
+ margin: 0 4px 0 0;
1353
+ }
1093
1354
 
1094
- height: 0px;
1095
- width: 0px;
1096
- padding: 0;
1355
+ .charcoal-hint-text-message {
1356
+ color: var(--charcoal-color-text-secondary-default);
1357
+ font-size: 14px;
1358
+ line-height: 22px;
1359
+ display: flow-root;
1097
1360
  margin: 0;
1098
-
1099
- -webkit-appearance: none;
1100
-
1101
- -moz-appearance: none;
1102
-
1103
- appearance: none;
1104
- box-sizing: border-box;
1105
- overflow: hidden;
1106
- white-space: nowrap;
1107
- opacity: 0;
1108
- }
1109
- .charcoal-menu-item-group {
1110
- display: block;
1361
+ min-width: 0;
1362
+ overflow-wrap: break-word;
1111
1363
  }
1112
-
1113
- .charcoal-menu-item-group > span {
1114
- display: block;
1115
- color: var(--charcoal-color-text-tertiary-default);
1116
- font-size: 12px;
1117
- font-weight: bold;
1118
- padding: 12px 0 8px 16px;
1364
+ .charcoal-pagination {
1365
+ display: flex;
1366
+ justify-content: center;
1367
+ align-items: center;
1119
1368
  }
1120
1369
 
1121
- .charcoal-menu-item-group > ul {
1122
- padding-left: 0;
1123
- margin: 0;
1124
- box-sizing: border-box;
1125
- list-style: none;
1126
- overflow: hidden;
1127
- }
1128
- .charcoal-tag-item {
1129
- --charcoal-tag-item-color: var(--charcoal-color-text-on-primary-default);
1130
- --charcoal-tag-item-size: 40px;
1131
- --charcoal-tag-item-padding-left: 24px;
1132
- --charcoal-tag-item-padding-right: 24px;
1133
- --charcoal-tag-item-bg: ;
1370
+ .charcoal-pagination[data-size='S'] .charcoal-pagination-button {
1371
+ min-width: 32px;
1372
+ min-height: 32px;
1373
+ }
1134
1374
 
1135
- isolation: isolate;
1136
- position: relative;
1375
+ .charcoal-pagination[data-size='M'] .charcoal-pagination-button {
1376
+ min-width: 40px;
1377
+ min-height: 40px;
1378
+ }
1137
1379
 
1380
+ /* stylelint-disable no-descending-specificity */
1381
+ .charcoal-pagination-button {
1382
+ cursor: pointer;
1138
1383
  -webkit-appearance: none;
1139
-
1140
1384
  -moz-appearance: none;
1141
-
1142
1385
  appearance: none;
1143
- outline: none;
1386
+ padding: 0;
1144
1387
  border-style: none;
1388
+ outline: none;
1389
+ text-decoration: none;
1390
+ font-family: inherit;
1391
+ font-style: inherit;
1392
+ font-variant: inherit;
1393
+ margin: 0;
1394
+ -webkit-user-select: none;
1395
+ -moz-user-select: none;
1396
+ user-select: none;
1145
1397
 
1146
- display: inline-flex;
1147
- gap: 8px;
1398
+ display: flex;
1148
1399
  align-items: center;
1149
1400
  justify-content: center;
1401
+ font-size: 14px;
1402
+ font-weight: 700;
1403
+ line-height: 22px;
1150
1404
 
1151
- text-decoration: none;
1152
- cursor: pointer;
1153
- overflow: hidden;
1154
-
1155
- color: var(--charcoal-tag-item-color);
1156
- height: var(--charcoal-tag-item-size);
1157
- padding-top: 4px;
1158
- padding-bottom: 4px;
1159
- padding-left: var(--charcoal-tag-item-padding-left);
1160
- padding-right: var(--charcoal-tag-item-padding-right);
1161
- box-sizing: border-box;
1162
- border-radius: 4px;
1405
+ /* HACK:
1406
+ * Safari doesn't correctly repaint the elements when they're reordered in response to interaction.
1407
+ * This forces it to repaint them. This doesn't work if put on the parents either, has to be here.
1408
+ */
1409
+ -webkit-transform: translateZ(0);
1163
1410
 
1164
- transition: 0.2s box-shadow;
1411
+ color: var(--charcoal-color-text-tertiary-default);
1412
+ background-color: transparent;
1413
+ border-radius: 20px;
1414
+ transition:
1415
+ 0.2s background-color,
1416
+ 0.2s box-shadow;
1165
1417
  }
1166
-
1167
- .charcoal-tag-item[data-size='M'] {
1168
- --charcoal-tag-item-size: 40px;
1169
- --charcoal-tag-item-padding-left: 24px;
1170
- --charcoal-tag-item-padding-right: 24px;
1418
+ .charcoal-pagination-button:focus {
1419
+ outline: none;
1171
1420
  }
1172
-
1173
- .charcoal-tag-item[data-size='S'] {
1174
- --charcoal-tag-item-size: 32px;
1175
- --charcoal-tag-item-padding-left: 16px;
1176
- --charcoal-tag-item-padding-right: 16px;
1421
+ .charcoal-pagination-button::-moz-focus-inner {
1422
+ border-style: none;
1423
+ padding: 0;
1177
1424
  }
1178
-
1179
- .charcoal-tag-item[data-state='inactive'] {
1180
- --charcoal-tag-item-color: var(--charcoal-color-text-secondary-default);
1425
+ .charcoal-pagination-button[hidden] {
1426
+ visibility: hidden;
1427
+ display: block;
1181
1428
  }
1182
-
1183
- .charcoal-tag-item[data-state='active'] {
1184
- --charcoal-tag-item-padding-left: 16px;
1185
- --charcoal-tag-item-padding-right: 8px;
1429
+ .charcoal-pagination-button:not(:disabled):not([aria-disabled]):hover,
1430
+ .charcoal-pagination-button[aria-disabled='false']:hover {
1431
+ color: var(--charcoal-color-text-tertiary-default);
1432
+ background-color: var(--charcoal-color-container-secondary-default);
1186
1433
  }
1187
-
1188
- .charcoal-tag-item:disabled,
1189
- .charcoal-tag-item[aria-disabled]:not([aria-disabled='false']) {
1190
- opacity: 0.32;
1191
- cursor: default;
1434
+ .charcoal-pagination-button:not(:disabled):not([aria-disabled]):active,
1435
+ .charcoal-pagination-button[aria-disabled='false']:active {
1436
+ color: var(--charcoal-color-text-tertiary-press);
1437
+ background-color: var(--charcoal-color-container-tertiary-press);
1192
1438
  }
1193
-
1194
- .charcoal-tag-item:not(:disabled):not([aria-disabled]):focus-visible,
1195
- .charcoal-tag-item[aria-disabled='false']:focus-visible {
1439
+ .charcoal-pagination-button:not(:disabled):not([aria-disabled]):focus,
1440
+ .charcoal-pagination-button[aria-disabled='false']:focus {
1196
1441
  outline: none;
1197
1442
  box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
1198
1443
  }
1199
-
1200
- .charcoal-tag-item:not(:disabled):not([aria-disabled]):focus,
1201
- .charcoal-tag-item[aria-disabled='false']:focus {
1202
- outline: none;
1444
+ .charcoal-pagination-button:not(:disabled):not([aria-disabled]):focus-visible,
1445
+ .charcoal-pagination-button[aria-disabled='false']:focus-visible {
1203
1446
  box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
1204
1447
  }
1205
-
1206
- .charcoal-tag-item:not(:disabled):not([aria-disabled]):focus:not(:focus-visible),
1207
- .charcoal-tag-item[aria-disabled='false']:focus:not(:focus-visible) {
1448
+ .charcoal-pagination-button:not(:disabled):not([aria-disabled]):focus:not(:focus-visible),
1449
+ .charcoal-pagination-button[aria-disabled='false']:focus:not(:focus-visible) {
1208
1450
  box-shadow: none;
1209
1451
  }
1210
-
1211
- .charcoal-tag-item__bg {
1212
- background-color: var(--charcoal-tag-item-bg);
1213
- }
1214
-
1215
- .charcoal-tag-item__bg[data-bg-variant='image'] {
1216
- background-color: var(--charcoal-color-container-on-img-default);
1217
- }
1218
-
1219
- .charcoal-tag-item__bg[data-bg-variant='image']::before {
1220
- content: '';
1221
- position: absolute;
1222
- z-index: 1;
1223
- top: 0;
1224
- left: 0;
1225
- width: 100%;
1226
- height: 100%;
1227
- background-position: center;
1228
- background-size: cover;
1229
- background-image: var(--charcoal-tag-item-bg);
1230
- mix-blend-mode: overlay;
1231
- }
1232
-
1233
- .charcoal-tag-item__bg[data-state='inactive'] {
1234
- background-color: var(--charcoal-color-container-secondary-default);
1235
- }
1236
-
1237
- .charcoal-tag-item__label {
1238
- height: 100%;
1239
- display: flex;
1240
- flex-direction: column;
1241
- align-items: center;
1242
- justify-content: center;
1243
- }
1244
-
1245
- .charcoal-tag-item__label[data-has-translate='true'] {
1246
- justify-content: space-between;
1247
- }
1248
-
1249
- .charcoal-tag-item__label__translated {
1250
- --charcoal-tag-item-text-font-size: 12px;
1251
- --charcoal-tag-item-text-line-height: 20px;
1252
- font-weight: bold;
1253
- }
1254
-
1255
- .charcoal-tag-item__label__translated::before {
1256
- display: none;
1257
- }
1258
-
1259
- .charcoal-tag-item__label__text {
1260
- --charcoal-tag-item-text-font-size: 14px;
1261
- --charcoal-tag-item-text-line-height: 22px;
1262
-
1263
- max-width: 152px;
1264
- overflow: hidden;
1265
- font-weight: bold;
1266
-
1267
- color: inherit;
1268
- white-space: nowrap;
1269
- text-overflow: ellipsis;
1270
- }
1271
-
1272
- .charcoal-tag-item__label__text[data-has-translate='true'] {
1273
- --charcoal-tag-item-text-font-size: 10px;
1274
- --charcoal-tag-item-text-line-height: 14px;
1275
- font-weight: normal;
1276
- }
1277
-
1278
- /* Kept flat: different class name from .charcoal-tag-item__label__text (note: "labe" typo in original) */
1279
- .charcoal-tag-item__labe__text[data-has-translate='true']::after {
1280
- display: none;
1281
- }
1282
- .charcoal-hint-text {
1283
- background-color: var(--charcoal-color-container-secondary-default);
1284
- border-radius: 8px;
1285
- padding: 12px 16px;
1286
- display: flex;
1287
- align-items: flex-start;
1288
- }
1289
-
1290
- .charcoal-hint-text[data-context='page'] {
1291
- justify-content: center;
1292
- }
1293
-
1294
- @media (min-width: 744px) {
1295
-
1296
- .charcoal-hint-text[data-context='page'] {
1297
- padding: 20px 40px
1298
- }
1299
- }
1300
-
1301
- .charcoal-hint-text-icon {
1302
- display: flex;
1303
- align-items: center;
1304
- color: var(--charcoal-color-icon-tertiary-default);
1305
- height: 22px;
1306
- margin: 0 4px 0 0;
1307
- }
1308
-
1309
- .charcoal-hint-text-message {
1310
- color: var(--charcoal-color-text-secondary-default);
1311
- font-size: 14px;
1312
- line-height: 22px;
1313
- display: flow-root;
1314
- margin: 0;
1315
- min-width: 0;
1316
- overflow-wrap: break-word;
1317
- }
1318
- .charcoal-checkbox__label {
1319
- position: relative;
1320
- cursor: pointer;
1321
- display: flex;
1322
- gap: 4px;
1323
- }
1324
-
1325
- .charcoal-checkbox__label[aria-disabled='true'] {
1452
+ .charcoal-pagination-button[aria-current] {
1326
1453
  cursor: default;
1327
- opacity: 0.32;
1328
- }
1329
-
1330
- .charcoal-checkbox__label[aria-disabled='true'] > input {
1331
- opacity: 1;
1332
- }
1333
-
1334
- .charcoal-checkbox__label_div {
1335
- flex: 1;
1336
- color: var(--charcoal-color-text-default);
1337
- font-size: 14px;
1338
- line-height: 20px;
1339
- }
1340
- .charcoal-carousel {
1341
- --charcoal-carousel-gap: 0px;
1342
-
1343
- position: relative;
1344
- display: block;
1345
- }
1346
-
1347
- .charcoal-carousel[data-full-width='true'] {
1348
- width: 100vw;
1349
- margin-inline: calc(50% - 50vw);
1350
- }
1351
-
1352
- .charcoal-carousel__viewport {
1353
- position: relative;
1354
- }
1355
-
1356
- /* フォーカスリングは scroller ではなく viewport に描く。scroller に置くと
1357
- hasGradient の mask(mask-clip: border-box)で外側の box-shadow ごと消えるため。 */
1358
-
1359
- .charcoal-carousel__viewport[data-focus-visible] {
1360
- box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
1361
- }
1362
-
1363
- /* スライド間隔は gap prop(--charcoal-carousel-gap)で注入する。
1364
- スライド寸法は sandbox 同様、利用者が children 側で持つ。 */
1365
- .charcoal-carousel__scroller {
1366
- position: relative;
1367
- display: flex;
1368
- gap: var(--charcoal-carousel-gap);
1369
- overflow-x: auto;
1370
- overflow-y: hidden;
1371
- overscroll-behavior-x: contain;
1372
- scroll-behavior: smooth;
1373
- scrollbar-width: none;
1374
- outline: none;
1375
- }
1376
- .charcoal-carousel__scroller::-webkit-scrollbar {
1377
- display: none;
1378
- }
1379
-
1380
- /* スクロールスナップ type は prop(scrollSnap.type)で scroller に出し分ける。
1381
- align は基底 .charcoal-carousel__item の後(後述)に置く(no-descending-specificity 回避)。
1382
- 未指定時の既定(M=none / S=mandatory / align=center)は JS 側で data 属性に解決する。 */
1383
- .charcoal-carousel[data-scroll-snap-type='none'] .charcoal-carousel__scroller {
1384
- scroll-snap-type: none;
1385
- }
1386
-
1387
- .charcoal-carousel[data-scroll-snap-type='proximity']
1388
- .charcoal-carousel__scroller {
1389
- scroll-snap-type: x proximity;
1390
- }
1391
-
1392
- .charcoal-carousel[data-scroll-snap-type='mandatory']
1393
- .charcoal-carousel__scroller {
1394
- scroll-snap-type: x mandatory;
1395
- }
1396
-
1397
- /* グラデーション: mask で端のアイテム自体を透明へフェードさせる(下の背景色を
1398
- 問わない)。mask の色はアルファとしてだけ効く(#000=表示 / transparent=透過)。
1399
- 左フェード・右フェードの 2 レイヤーを intersect で合成し、はみ出して
1400
- スクロール可能な側のみ data-can-prev/next で 72px のフェード帯を枠内に置く。
1401
- 無効な側はフェード帯ごと枠外へスライドして隠す(mask-image と違い
1402
- mask-position は補間可能なので、切替が 0.2s のフェードになる)。 */
1403
- .charcoal-carousel[data-has-gradient='true'] .charcoal-carousel__scroller {
1404
- -webkit-mask-image:
1405
- linear-gradient(to right, transparent, #000 72px),
1406
- linear-gradient(to left, transparent, #000 72px);
1407
- mask-image:
1408
- linear-gradient(to right, transparent, #000 72px),
1409
- linear-gradient(to left, transparent, #000 72px);
1410
- /* 枠外へ 72px スライドしても反対側の端が欠けないよう、レイヤー幅に 72px 足す */
1411
- -webkit-mask-size: calc(100% + 72px) 100%;
1412
- mask-size: calc(100% + 72px) 100%;
1413
- -webkit-mask-repeat: no-repeat;
1414
- mask-repeat: no-repeat;
1415
- -webkit-mask-composite: source-in, xor;
1416
- mask-composite: intersect;
1417
- -webkit-mask-position:
1418
- -72px 0,
1419
- 0 0;
1420
- mask-position:
1421
- -72px 0,
1422
- 0 0;
1423
- /* 0.2s ease-in は react-sandbox の LeftGradient と同じ値 */
1424
- transition: 0.2s ease-in mask-position;
1425
- }
1426
-
1427
- .charcoal-carousel[data-has-gradient='true'][data-can-prev='true']
1428
- .charcoal-carousel__scroller {
1429
- -webkit-mask-position:
1430
- 0 0,
1431
- 0 0;
1432
- mask-position:
1433
- 0 0,
1434
- 0 0;
1435
- }
1436
-
1437
- .charcoal-carousel[data-has-gradient='true'][data-can-next='true']
1438
- .charcoal-carousel__scroller {
1439
- -webkit-mask-position:
1440
- -72px 0,
1441
- -72px 0;
1442
- mask-position:
1443
- -72px 0,
1444
- -72px 0;
1445
- }
1446
-
1447
- .charcoal-carousel[data-has-gradient='true'][data-can-prev='true'][data-can-next='true']
1448
- .charcoal-carousel__scroller {
1449
- -webkit-mask-position:
1450
- 0 0,
1451
- -72px 0;
1452
- mask-position:
1453
- 0 0,
1454
- -72px 0;
1455
- }
1456
-
1457
- .charcoal-carousel__item {
1458
- flex: 0 0 auto;
1459
- min-width: 0;
1460
- }
1461
-
1462
- .charcoal-carousel[data-size='S'] .charcoal-carousel__item {
1463
- flex: 0 0 100%;
1464
- }
1465
-
1466
- /* scroll-snap-align は prop(scrollSnap.align)で出し分ける。基底 .charcoal-carousel__item
1467
- より後に置くことで no-descending-specificity を回避する。 */
1468
- .charcoal-carousel[data-scroll-snap-align='center'] .charcoal-carousel__item {
1469
- scroll-snap-align: center;
1470
- }
1471
-
1472
- .charcoal-carousel[data-scroll-snap-align='start'] .charcoal-carousel__item {
1473
- scroll-snap-align: start;
1474
- }
1475
-
1476
- /* ── Navigation Buttons (charcoal IconButton, variant=Overlay size=S) ── */
1477
-
1478
- /* マスクの透過域と同じ 72px 1fr 72px グリッド。各ボタンは 72px ゾーンの中央に置く。 */
1479
- .charcoal-carousel__navigation {
1480
- position: absolute;
1481
- inset: 0;
1482
- pointer-events: none;
1483
- display: grid;
1484
- grid-template-columns: 72px 1fr 72px;
1485
- align-items: center;
1486
- /* アイテム内のコンテンツより上にボタンを表示する */
1487
- z-index: 1;
1488
- /* sandbox 同様、通常は隠してカルーセル hover 時にフェードイン表示する。 */
1489
- opacity: 0;
1490
- transition: 0.4s opacity;
1491
- }
1492
- .charcoal-carousel__navigation[data-visible='false'] {
1493
- display: none;
1494
- }
1495
-
1496
- /* hover で表示。キーボード操作でも到達できるよう、キーボード由来のフォーカスが
1497
- カルーセル内にある間も表示する(:focus-within だとクリックで残ったフォーカスでも
1498
- 表示され続けるため、react-aria が付与する data 属性で判定する)。 */
1499
- .charcoal-carousel:hover .charcoal-carousel__navigation,
1500
- .charcoal-carousel[data-focus-visible-within] .charcoal-carousel__navigation {
1501
- opacity: 1;
1502
- }
1503
-
1504
- .charcoal-carousel__navigation__item {
1505
- pointer-events: auto;
1506
- }
1507
-
1508
- /* ヒットエリアをグリッド端列(= mask のフェード帯と同じ 72px)全体へ広げる。
1509
- 擬似要素上のクリックは元の button に届くため、帯のどこを押してもページ送りになる。
1510
- position: absolute の基準は positioned な .charcoal-carousel__navigation(inset: 0)。 */
1511
-
1512
- .charcoal-carousel__navigation__item::after {
1513
- content: '';
1514
- position: absolute;
1515
- top: 0;
1516
- bottom: 0;
1517
- width: 72px;
1518
- }
1519
-
1520
- .charcoal-carousel__navigation__item[data-direction='prev'] {
1521
- grid-column: 1;
1522
- justify-self: center;
1523
- }
1524
-
1525
- .charcoal-carousel__navigation__item[data-direction='prev']::after {
1526
- left: 0;
1527
- }
1528
-
1529
- .charcoal-carousel__navigation__item[data-direction='next'] {
1530
- grid-column: 3;
1531
- justify-self: center;
1454
+ background-color: var(--charcoal-color-container-hud-default);
1455
+ color: var(--charcoal-color-text-on-hud-default);
1532
1456
  }
1533
-
1534
- .charcoal-carousel__navigation__item[data-direction='next']::after {
1535
- right: 0;
1457
+ .charcoal-pagination-button[aria-current]:not(:disabled):not([aria-disabled]):hover,
1458
+ .charcoal-pagination-button[aria-current]:not(:disabled):not([aria-disabled]):active {
1459
+ background-color: var(--charcoal-color-container-hud-default);
1460
+ color: var(--charcoal-color-text-on-hud-default);
1536
1461
  }
1462
+ /* stylelint-enable no-descending-specificity */
1537
1463
 
1538
- /* スクロール端では非表示。IconButton の disabled スタイル(opacity:0.32)より
1539
- 高い詳細度で打ち消すため、ルートを前置する。 */
1540
- .charcoal-carousel .charcoal-carousel__navigation__item[data-hidden='true'] {
1541
- opacity: 0;
1542
- pointer-events: none;
1543
- }
1544
-
1545
- /* タッチデバイスではナビゲーションボタンを出さず、スワイプ操作に委ねる。 */
1546
- @media (hover: none) and (pointer: coarse) {
1547
- .charcoal-carousel__navigation {
1548
- display: none;
1549
- }
1550
- }
1551
-
1552
- /* ── Indicator: JS Fallback ── */
1553
-
1554
- .charcoal-carousel__indicator {
1555
- display: flex;
1556
- justify-content: center;
1557
- align-items: center;
1558
- height: 40px;
1559
- gap: 8px;
1560
- }
1561
-
1562
- .charcoal-carousel__indicator[data-visible='false'] {
1563
- display: none;
1564
- }
1565
-
1566
- .charcoal-carousel__indicator__item {
1567
- -webkit-appearance: none;
1568
- -moz-appearance: none;
1569
- appearance: none;
1570
- box-sizing: border-box;
1571
- width: 8px;
1572
- height: 8px;
1573
- padding: 0;
1574
- border: 0;
1575
- border-radius: 50%;
1576
- background-color: var(--charcoal-color-text-tertiary-default);
1577
- cursor: pointer;
1578
- transition: 0.2s background-color;
1464
+ .charcoal-pagination-nav-button[data-hidden] {
1465
+ visibility: hidden;
1579
1466
  }
1580
1467
 
1581
- .charcoal-carousel__indicator__item:hover {
1582
- background-color: var(--charcoal-color-text-secondary-default);
1583
- }
1584
-
1585
- .charcoal-carousel__indicator__item:focus-visible {
1586
- outline: 2px solid rgba(0, 150, 250, 0.56);
1587
- outline-offset: 2px;
1588
- }
1589
-
1590
- .charcoal-carousel__indicator__item[data-active='true'] {
1591
- background-color: var(--charcoal-color-text-default);
1592
- }
1593
-
1594
- /* ── CSS Scroll Markers (progressive enhancement) ── */
1595
-
1596
- /* CSS Scroll Markers / Anchor Positioning の擬似要素・擬似クラスは新しい仕様のため、
1597
- この @supports ブロックでは該当ルールを無効化する。 */
1598
- /* stylelint-disable selector-pseudo-class-no-unknown */
1599
- @supports (scroll-marker-group: after) {
1600
- .charcoal-carousel[data-indicator='true'] {
1601
- padding-bottom: 40px;
1602
- }
1603
-
1604
- .charcoal-carousel__scroller {
1605
- anchor-name: --charcoal-carousel;
1606
- scroll-marker-group: after;
1607
- }
1608
-
1609
- .charcoal-carousel__scroller::scroll-button(*) {
1610
- content: none;
1611
- }
1612
-
1613
- .charcoal-carousel__scroller::scroll-marker-group {
1614
- display: flex;
1615
- justify-content: center;
1616
- align-items: center;
1617
- height: 40px;
1618
- gap: 8px;
1619
-
1620
- position: absolute;
1621
- position-anchor: --charcoal-carousel;
1622
- top: anchor(bottom);
1623
- justify-self: anchor-center;
1624
- }
1625
-
1626
- .charcoal-carousel[data-indicator='false'] .charcoal-carousel__scroller {
1627
- scroll-marker-group: none;
1628
- }
1629
-
1630
- .charcoal-carousel__item::scroll-marker {
1631
- content: '';
1632
- width: 8px;
1633
- height: 8px;
1634
- border: 0;
1635
- border-radius: 50%;
1636
- background-color: var(--charcoal-color-text-tertiary-default);
1637
- cursor: pointer;
1638
- transition: 0.2s background-color;
1468
+ .charcoal-pagination-spacer,
1469
+ .charcoal-pagination-spacer:hover,
1470
+ .charcoal-pagination-spacer:active {
1471
+ cursor: default;
1472
+ color: var(--charcoal-color-text-tertiary-default);
1473
+ background: none;
1639
1474
  }
1640
1475
 
1641
- .charcoal-carousel__item::scroll-marker:hover {
1642
- background-color: var(--charcoal-color-text-secondary-default);
1643
- }
1644
-
1645
- .charcoal-carousel__item::scroll-marker:focus {
1646
- outline: 2px solid rgba(0, 150, 250, 0.56);
1647
- outline-offset: 2px;
1648
- }
1649
-
1650
- .charcoal-carousel__item::scroll-marker:target-current {
1651
- background-color: var(--charcoal-color-text-default);
1652
- }
1653
-
1654
- .charcoal-carousel__indicator {
1655
- display: none;
1476
+ .charcoal-pagination-spacer.charcoal-icon-button:disabled {
1477
+ opacity: 1;
1656
1478
  }
1657
- }
1658
- /* stylelint-enable selector-pseudo-class-no-unknown */
1659
1479
  .charcoal-notification-region {
1660
1480
  left: 0;
1661
1481
  right: 0;
@@ -1707,26 +1527,23 @@ pixiv-icon:not(:defined)[name^='Inline/'][scale='2'] {
1707
1527
  animation: none;
1708
1528
  }
1709
1529
  }
1710
- .charcoal-snackbar-region {
1530
+ .charcoal-notification-region {
1711
1531
  --charcoal-snackbar-offset: 16px;
1712
1532
  }
1713
1533
 
1714
- .charcoal-snackbar-region[data-position='top'] {
1534
+ .charcoal-snackbar-region[data-position='top'] {
1715
1535
  --charcoal-snackbar-enter-offset: calc(-1 * var(--charcoal-space-30));
1716
1536
 
1717
1537
  position: sticky;
1718
- top: calc(
1719
- env(safe-area-inset-top, 0px) + max(var(--charcoal-snackbar-offset), 16px)
1720
- );
1538
+ top: calc(env(safe-area-inset-top, 0px) + var(--charcoal-snackbar-offset));
1721
1539
  }
1722
1540
 
1723
- .charcoal-snackbar-region[data-position='bottom'] {
1541
+ .charcoal-snackbar-region[data-position='bottom'] {
1724
1542
  --charcoal-snackbar-enter-offset: var(--charcoal-space-30);
1725
1543
 
1726
1544
  position: fixed;
1727
1545
  bottom: calc(
1728
- env(safe-area-inset-bottom, 0px) +
1729
- max(var(--charcoal-snackbar-offset), 16px)
1546
+ env(safe-area-inset-bottom, 0px) + var(--charcoal-snackbar-offset)
1730
1547
  );
1731
1548
  }
1732
1549
 
@@ -1777,25 +1594,23 @@ pixiv-icon:not(:defined)[name^='Inline/'][scale='2'] {
1777
1594
  opacity: 0;
1778
1595
  }
1779
1596
  }
1780
- .charcoal-toast-region {
1597
+ .charcoal-notification-region {
1781
1598
  --charcoal-toast-offset: 16px;
1782
1599
  }
1783
1600
 
1784
- .charcoal-toast-region[data-position='top'] {
1601
+ .charcoal-toast-region[data-position='top'] {
1785
1602
  position: sticky;
1786
1603
  --charcoal-toast-enter-offset: calc(-1 * var(--charcoal-space-30));
1787
1604
 
1788
- top: calc(
1789
- env(safe-area-inset-top, 0px) + max(var(--charcoal-toast-offset), 16px)
1790
- );
1605
+ top: calc(env(safe-area-inset-top, 0px) + var(--charcoal-toast-offset));
1791
1606
  }
1792
1607
 
1793
- .charcoal-toast-region[data-position='bottom'] {
1608
+ .charcoal-toast-region[data-position='bottom'] {
1794
1609
  position: fixed;
1795
1610
  --charcoal-toast-enter-offset: var(--charcoal-space-30);
1796
1611
 
1797
1612
  bottom: calc(
1798
- env(safe-area-inset-bottom, 0px) + max(var(--charcoal-toast-offset), 16px)
1613
+ env(safe-area-inset-bottom, 0px) + var(--charcoal-toast-offset)
1799
1614
  );
1800
1615
  }
1801
1616
 
@@ -1840,145 +1655,325 @@ pixiv-icon:not(:defined)[name^='Inline/'][scale='2'] {
1840
1655
  opacity: 0;
1841
1656
  }
1842
1657
  }
1843
- .charcoal-pagination {
1844
- display: flex;
1845
- justify-content: center;
1846
- align-items: center;
1658
+ .charcoal-carousel {
1659
+ --charcoal-carousel-gap: 0px;
1660
+
1661
+ position: relative;
1662
+ display: block;
1847
1663
  }
1848
1664
 
1849
- .charcoal-pagination[data-size='S'] .charcoal-pagination-button {
1850
- min-width: 32px;
1851
- min-height: 32px;
1665
+ .charcoal-carousel[data-full-width='true'] {
1666
+ width: 100vw;
1667
+ margin-inline: calc(50% - 50vw);
1852
1668
  }
1853
1669
 
1854
- .charcoal-pagination[data-size='M'] .charcoal-pagination-button {
1855
- min-width: 40px;
1856
- min-height: 40px;
1670
+ .charcoal-carousel__viewport {
1671
+ position: relative;
1672
+ }
1673
+
1674
+ /* フォーカスリングは scroller ではなく viewport に描く。scroller に置くと
1675
+ hasGradient の mask(mask-clip: border-box)で外側の box-shadow ごと消えるため。 */
1676
+
1677
+ .charcoal-carousel__viewport[data-focus-visible] {
1678
+ box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
1857
1679
  }
1858
1680
 
1859
- /* stylelint-disable no-descending-specificity */
1860
- .charcoal-pagination-button {
1861
- cursor: pointer;
1862
- -webkit-appearance: none;
1863
- -moz-appearance: none;
1864
- appearance: none;
1865
- padding: 0;
1866
- border-style: none;
1681
+ /* スライド間隔は gap prop(--charcoal-carousel-gap)で注入する。
1682
+ スライド寸法は sandbox 同様、利用者が children 側で持つ。 */
1683
+ .charcoal-carousel__scroller {
1684
+ position: relative;
1685
+ display: flex;
1686
+ gap: var(--charcoal-carousel-gap);
1687
+ overflow-x: auto;
1688
+ overflow-y: hidden;
1689
+ overscroll-behavior-x: contain;
1690
+ scroll-behavior: smooth;
1691
+ scrollbar-width: none;
1867
1692
  outline: none;
1868
- text-decoration: none;
1869
- font-family: inherit;
1870
- font-style: inherit;
1871
- font-variant: inherit;
1872
- margin: 0;
1873
- -webkit-user-select: none;
1874
- -moz-user-select: none;
1875
- user-select: none;
1693
+ }
1694
+ .charcoal-carousel__scroller::-webkit-scrollbar {
1695
+ display: none;
1696
+ }
1876
1697
 
1877
- display: flex;
1878
- align-items: center;
1879
- justify-content: center;
1880
- font-size: 14px;
1881
- font-weight: 700;
1882
- line-height: 22px;
1698
+ /* スクロールスナップ type は prop(scrollSnap.type)で scroller に出し分ける。
1699
+ align は基底 .charcoal-carousel__item の後(後述)に置く(no-descending-specificity 回避)。
1700
+ 未指定時の既定(M=none / S=mandatory / align=center)は JS 側で data 属性に解決する。 */
1701
+ .charcoal-carousel[data-scroll-snap-type='none'] .charcoal-carousel__scroller {
1702
+ scroll-snap-type: none;
1703
+ }
1883
1704
 
1884
- /* HACK:
1885
- * Safari doesn't correctly repaint the elements when they're reordered in response to interaction.
1886
- * This forces it to repaint them. This doesn't work if put on the parents either, has to be here.
1887
- */
1888
- -webkit-transform: translateZ(0);
1705
+ .charcoal-carousel[data-scroll-snap-type='proximity']
1706
+ .charcoal-carousel__scroller {
1707
+ scroll-snap-type: x proximity;
1708
+ }
1889
1709
 
1890
- color: var(--charcoal-color-text-tertiary-default);
1891
- background-color: transparent;
1892
- border-radius: 20px;
1893
- transition:
1894
- 0.2s background-color,
1895
- 0.2s box-shadow;
1710
+ .charcoal-carousel[data-scroll-snap-type='mandatory']
1711
+ .charcoal-carousel__scroller {
1712
+ scroll-snap-type: x mandatory;
1896
1713
  }
1897
- .charcoal-pagination-button:focus {
1898
- outline: none;
1714
+
1715
+ /* グラデーション: mask で端のアイテム自体を透明へフェードさせる(下の背景色を
1716
+ 問わない)。mask の色はアルファとしてだけ効く(#000=表示 / transparent=透過)。
1717
+ 左フェード・右フェードの 2 レイヤーを intersect で合成し、はみ出して
1718
+ スクロール可能な側のみ data-can-prev/next で 72px のフェード帯を枠内に置く。
1719
+ 無効な側はフェード帯ごと枠外へスライドして隠す(mask-image と違い
1720
+ mask-position は補間可能なので、切替が 0.2s のフェードになる)。 */
1721
+ .charcoal-carousel[data-has-gradient='true'] .charcoal-carousel__scroller {
1722
+ -webkit-mask-image:
1723
+ linear-gradient(to right, transparent, #000 72px),
1724
+ linear-gradient(to left, transparent, #000 72px);
1725
+ mask-image:
1726
+ linear-gradient(to right, transparent, #000 72px),
1727
+ linear-gradient(to left, transparent, #000 72px);
1728
+ /* 枠外へ 72px スライドしても反対側の端が欠けないよう、レイヤー幅に 72px 足す */
1729
+ -webkit-mask-size: calc(100% + 72px) 100%;
1730
+ mask-size: calc(100% + 72px) 100%;
1731
+ -webkit-mask-repeat: no-repeat;
1732
+ mask-repeat: no-repeat;
1733
+ -webkit-mask-composite: source-in, xor;
1734
+ mask-composite: intersect;
1735
+ -webkit-mask-position:
1736
+ -72px 0,
1737
+ 0 0;
1738
+ mask-position:
1739
+ -72px 0,
1740
+ 0 0;
1741
+ /* 0.2s ease-in は react-sandbox の LeftGradient と同じ値 */
1742
+ transition: 0.2s ease-in mask-position;
1743
+ }
1744
+
1745
+ .charcoal-carousel[data-has-gradient='true'][data-can-prev='true']
1746
+ .charcoal-carousel__scroller {
1747
+ -webkit-mask-position:
1748
+ 0 0,
1749
+ 0 0;
1750
+ mask-position:
1751
+ 0 0,
1752
+ 0 0;
1753
+ }
1754
+
1755
+ .charcoal-carousel[data-has-gradient='true'][data-can-next='true']
1756
+ .charcoal-carousel__scroller {
1757
+ -webkit-mask-position:
1758
+ -72px 0,
1759
+ -72px 0;
1760
+ mask-position:
1761
+ -72px 0,
1762
+ -72px 0;
1763
+ }
1764
+
1765
+ .charcoal-carousel[data-has-gradient='true'][data-can-prev='true'][data-can-next='true']
1766
+ .charcoal-carousel__scroller {
1767
+ -webkit-mask-position:
1768
+ 0 0,
1769
+ -72px 0;
1770
+ mask-position:
1771
+ 0 0,
1772
+ -72px 0;
1773
+ }
1774
+
1775
+ .charcoal-carousel__item {
1776
+ flex: 0 0 auto;
1777
+ min-width: 0;
1778
+ }
1779
+
1780
+ .charcoal-carousel[data-size='S'] .charcoal-carousel__item {
1781
+ flex: 0 0 100%;
1782
+ }
1783
+
1784
+ /* scroll-snap-align は prop(scrollSnap.align)で出し分ける。基底 .charcoal-carousel__item
1785
+ より後に置くことで no-descending-specificity を回避する。 */
1786
+ .charcoal-carousel[data-scroll-snap-align='center'] .charcoal-carousel__item {
1787
+ scroll-snap-align: center;
1788
+ }
1789
+
1790
+ .charcoal-carousel[data-scroll-snap-align='start'] .charcoal-carousel__item {
1791
+ scroll-snap-align: start;
1792
+ }
1793
+
1794
+ /* ── Navigation Buttons (charcoal IconButton, variant=Overlay size=S) ── */
1795
+
1796
+ /* マスクの透過域と同じ 72px 1fr 72px グリッド。各ボタンは 72px ゾーンの中央に置く。 */
1797
+ .charcoal-carousel__navigation {
1798
+ position: absolute;
1799
+ inset: 0;
1800
+ pointer-events: none;
1801
+ display: grid;
1802
+ grid-template-columns: 72px 1fr 72px;
1803
+ align-items: center;
1804
+ /* アイテム内のコンテンツより上にボタンを表示する */
1805
+ z-index: 1;
1806
+ /* sandbox 同様、通常は隠してカルーセル hover 時にフェードイン表示する。 */
1807
+ opacity: 0;
1808
+ transition: 0.4s opacity;
1809
+ }
1810
+ .charcoal-carousel__navigation[data-visible='false'] {
1811
+ display: none;
1899
1812
  }
1900
- .charcoal-pagination-button::-moz-focus-inner {
1901
- border-style: none;
1902
- padding: 0;
1813
+
1814
+ /* hover で表示。キーボード操作でも到達できるよう、キーボード由来のフォーカスが
1815
+ カルーセル内にある間も表示する(:focus-within だとクリックで残ったフォーカスでも
1816
+ 表示され続けるため、react-aria が付与する data 属性で判定する)。 */
1817
+ .charcoal-carousel:hover .charcoal-carousel__navigation,
1818
+ .charcoal-carousel[data-focus-visible-within] .charcoal-carousel__navigation {
1819
+ opacity: 1;
1820
+ }
1821
+
1822
+ .charcoal-carousel__navigation__item {
1823
+ pointer-events: auto;
1824
+ }
1825
+
1826
+ /* ヒットエリアをグリッド端列(= mask のフェード帯と同じ 72px)全体へ広げる。
1827
+ 擬似要素上のクリックは元の button に届くため、帯のどこを押してもページ送りになる。
1828
+ position: absolute の基準は positioned な .charcoal-carousel__navigation(inset: 0)。 */
1829
+
1830
+ .charcoal-carousel__navigation__item::after {
1831
+ content: '';
1832
+ position: absolute;
1833
+ top: 0;
1834
+ bottom: 0;
1835
+ width: 72px;
1903
1836
  }
1904
- .charcoal-pagination-button[hidden] {
1905
- visibility: hidden;
1906
- display: block;
1837
+
1838
+ .charcoal-carousel__navigation__item[data-direction='prev'] {
1839
+ grid-column: 1;
1840
+ justify-self: center;
1907
1841
  }
1908
- .charcoal-pagination-button:not(:disabled):not([aria-disabled]):hover,
1909
- .charcoal-pagination-button[aria-disabled='false']:hover {
1910
- color: var(--charcoal-color-text-tertiary-default);
1911
- background-color: var(--charcoal-color-container-secondary-default);
1842
+
1843
+ .charcoal-carousel__navigation__item[data-direction='prev']::after {
1844
+ left: 0;
1845
+ }
1846
+
1847
+ .charcoal-carousel__navigation__item[data-direction='next'] {
1848
+ grid-column: 3;
1849
+ justify-self: center;
1912
1850
  }
1913
- .charcoal-pagination-button:not(:disabled):not([aria-disabled]):active,
1914
- .charcoal-pagination-button[aria-disabled='false']:active {
1915
- color: var(--charcoal-color-text-tertiary-press);
1916
- background-color: var(--charcoal-color-container-tertiary-press);
1851
+
1852
+ .charcoal-carousel__navigation__item[data-direction='next']::after {
1853
+ right: 0;
1854
+ }
1855
+
1856
+ /* スクロール端では非表示。IconButton の disabled スタイル(opacity:0.32)より
1857
+ 高い詳細度で打ち消すため、ルートを前置する。 */
1858
+ .charcoal-carousel .charcoal-carousel__navigation__item[data-hidden='true'] {
1859
+ opacity: 0;
1860
+ pointer-events: none;
1861
+ }
1862
+
1863
+ /* タッチデバイスではナビゲーションボタンを出さず、スワイプ操作に委ねる。 */
1864
+ @media (hover: none) and (pointer: coarse) {
1865
+ .charcoal-carousel__navigation {
1866
+ display: none;
1917
1867
  }
1918
- .charcoal-pagination-button:not(:disabled):not([aria-disabled]):focus,
1919
- .charcoal-pagination-button[aria-disabled='false']:focus {
1920
- outline: none;
1921
- box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
1868
+ }
1869
+
1870
+ /* ── Indicator: JS Fallback ── */
1871
+
1872
+ .charcoal-carousel__indicator {
1873
+ display: flex;
1874
+ justify-content: center;
1875
+ align-items: center;
1876
+ height: 40px;
1877
+ gap: 8px;
1878
+ }
1879
+
1880
+ .charcoal-carousel__indicator[data-visible='false'] {
1881
+ display: none;
1922
1882
  }
1923
- .charcoal-pagination-button:not(:disabled):not([aria-disabled]):focus-visible,
1924
- .charcoal-pagination-button[aria-disabled='false']:focus-visible {
1925
- box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
1883
+
1884
+ .charcoal-carousel__indicator__item {
1885
+ -webkit-appearance: none;
1886
+ -moz-appearance: none;
1887
+ appearance: none;
1888
+ box-sizing: border-box;
1889
+ width: 8px;
1890
+ height: 8px;
1891
+ padding: 0;
1892
+ border: 0;
1893
+ border-radius: 50%;
1894
+ background-color: var(--charcoal-color-text-tertiary-default);
1895
+ cursor: pointer;
1896
+ transition: 0.2s background-color;
1897
+ }
1898
+
1899
+ .charcoal-carousel__indicator__item:hover {
1900
+ background-color: var(--charcoal-color-text-secondary-default);
1926
1901
  }
1927
- .charcoal-pagination-button:not(:disabled):not([aria-disabled]):focus:not(:focus-visible),
1928
- .charcoal-pagination-button[aria-disabled='false']:focus:not(:focus-visible) {
1929
- box-shadow: none;
1902
+
1903
+ .charcoal-carousel__indicator__item:focus-visible {
1904
+ outline: 2px solid rgba(0, 150, 250, 0.56);
1905
+ outline-offset: 2px;
1930
1906
  }
1931
- .charcoal-pagination-button[aria-current] {
1932
- cursor: default;
1933
- background-color: var(--charcoal-color-container-hud-default);
1934
- color: var(--charcoal-color-text-on-hud-default);
1907
+
1908
+ .charcoal-carousel__indicator__item[data-active='true'] {
1909
+ background-color: var(--charcoal-color-text-default);
1935
1910
  }
1936
- .charcoal-pagination-button[aria-current]:not(:disabled):not([aria-disabled]):hover,
1937
- .charcoal-pagination-button[aria-current]:not(:disabled):not([aria-disabled]):active {
1938
- background-color: var(--charcoal-color-container-hud-default);
1939
- color: var(--charcoal-color-text-on-hud-default);
1940
- }
1941
- /* stylelint-enable no-descending-specificity */
1942
1911
 
1943
- .charcoal-pagination-nav-button[data-hidden] {
1944
- visibility: hidden;
1945
- }
1912
+ /* ── CSS Scroll Markers (progressive enhancement) ── */
1946
1913
 
1947
- .charcoal-pagination-spacer,
1948
- .charcoal-pagination-spacer:hover,
1949
- .charcoal-pagination-spacer:active {
1950
- cursor: default;
1951
- color: var(--charcoal-color-text-tertiary-default);
1952
- background: none;
1914
+ /* CSS Scroll Markers / Anchor Positioning の擬似要素・擬似クラスは新しい仕様のため、
1915
+ この @supports ブロックでは該当ルールを無効化する。 */
1916
+ /* stylelint-disable selector-pseudo-class-no-unknown */
1917
+ @supports (scroll-marker-group: after) {
1918
+ .charcoal-carousel[data-indicator='true'] {
1919
+ padding-bottom: 40px;
1953
1920
  }
1954
1921
 
1955
- .charcoal-pagination-spacer.charcoal-icon-button:disabled {
1956
- opacity: 1;
1922
+ .charcoal-carousel__scroller {
1923
+ anchor-name: --charcoal-carousel;
1924
+ scroll-marker-group: after;
1957
1925
  }
1958
- .charcoal-text-ellipsis {
1959
- /* Runtime variables overridden by the React component. */
1960
- --charcoal-text-ellipsis-line-limit: 1;
1961
- --charcoal-text-ellipsis-line-height: inherit;
1962
1926
 
1963
- overflow: hidden;
1964
- overflow-wrap: break-word;
1965
- display: -webkit-box;
1966
- -webkit-box-orient: vertical;
1967
- -webkit-line-clamp: var(--charcoal-text-ellipsis-line-limit);
1968
- }
1927
+ .charcoal-carousel__scroller::scroll-button(*) {
1928
+ content: none;
1929
+ }
1969
1930
 
1970
- .charcoal-text-ellipsis[data-has-line-height='true'] {
1971
- line-height: var(--charcoal-text-ellipsis-line-height);
1931
+ .charcoal-carousel__scroller::scroll-marker-group {
1932
+ display: flex;
1933
+ justify-content: center;
1934
+ align-items: center;
1935
+ height: 40px;
1936
+ gap: 8px;
1937
+
1938
+ position: absolute;
1939
+ position-anchor: --charcoal-carousel;
1940
+ top: anchor(bottom);
1941
+ justify-self: anchor-center;
1942
+ }
1943
+
1944
+ .charcoal-carousel[data-indicator='false'] .charcoal-carousel__scroller {
1945
+ scroll-marker-group: none;
1972
1946
  }
1973
1947
 
1974
- .charcoal-text-ellipsis[data-has-line-height='false'] {
1975
- line-height: inherit;
1948
+ .charcoal-carousel__item::scroll-marker {
1949
+ content: '';
1950
+ width: 8px;
1951
+ height: 8px;
1952
+ border: 0;
1953
+ border-radius: 50%;
1954
+ background-color: var(--charcoal-color-text-tertiary-default);
1955
+ cursor: pointer;
1956
+ transition: 0.2s background-color;
1976
1957
  }
1977
1958
 
1978
- .charcoal-text-ellipsis[data-line-limit='1'][data-use-nowrap='true'] {
1979
- text-overflow: ellipsis;
1980
- white-space: nowrap;
1959
+ .charcoal-carousel__item::scroll-marker:hover {
1960
+ background-color: var(--charcoal-color-text-secondary-default);
1961
+ }
1962
+
1963
+ .charcoal-carousel__item::scroll-marker:focus {
1964
+ outline: 2px solid rgba(0, 150, 250, 0.56);
1965
+ outline-offset: 2px;
1966
+ }
1967
+
1968
+ .charcoal-carousel__item::scroll-marker:target-current {
1969
+ background-color: var(--charcoal-color-text-default);
1970
+ }
1971
+
1972
+ .charcoal-carousel__indicator {
1973
+ display: none;
1981
1974
  }
1975
+ }
1976
+ /* stylelint-enable selector-pseudo-class-no-unknown */
1982
1977
  .charcoal-text-field-assistive-text {
1983
1978
  font-size: 14px;
1984
1979
  line-height: 22px;
@@ -1989,6 +1984,43 @@ pixiv-icon:not(:defined)[name^='Inline/'][scale='2'] {
1989
1984
  .charcoal-text-field-assistive-text[data-invalid='true'] {
1990
1985
  color: var(--charcoal-color-text-negative-default);
1991
1986
  }
1987
+ .charcoal-field-label {
1988
+ font-size: 14px;
1989
+ line-height: 22px;
1990
+ font-weight: bold;
1991
+ display: flow-root;
1992
+ color: var(--charcoal-color-text-default-text1);
1993
+ }
1994
+
1995
+ .charcoal-field-label-required-text {
1996
+ font-size: 14px;
1997
+ line-height: 22px;
1998
+ display: flow-root;
1999
+ color: var(--charcoal-color-text-secondary-default);
2000
+ }
2001
+
2002
+ .charcoal-field-label-sub-label {
2003
+ font-size: 14px;
2004
+ line-height: 22px;
2005
+ display: flow-root;
2006
+ color: var(--charcoal-color-text-tertiary-default);
2007
+ transition:
2008
+ 0.2s color,
2009
+ 0.2s box-shadow;
2010
+ }
2011
+
2012
+ .charcoal-field-label-root {
2013
+ display: inline-flex;
2014
+ align-items: center;
2015
+ }
2016
+
2017
+ .charcoal-field-label-root > .charcoal-field-label-required-text {
2018
+ margin-left: 4px;
2019
+ }
2020
+
2021
+ .charcoal-field-label-root > .charcoal-field-label-sub-label {
2022
+ margin-left: auto;
2023
+ }
1992
2024
  .charcoal-radio-input {
1993
2025
  -webkit-appearance: none;
1994
2026
  -moz-appearance: none;
@@ -2044,76 +2076,181 @@ pixiv-icon:not(:defined)[name^='Inline/'][scale='2'] {
2044
2076
  background-color: var(--charcoal-color-container-press);
2045
2077
  }
2046
2078
 
2047
- .charcoal-radio-input:not(:disabled):focus {
2079
+ .charcoal-radio-input:not(:disabled):focus {
2080
+ outline: none;
2081
+ box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
2082
+ }
2083
+
2084
+ .charcoal-radio-input:not(:disabled):focus-visible {
2085
+ box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
2086
+ }
2087
+
2088
+ .charcoal-radio-input:not(:disabled):focus:not(:focus-visible) {
2089
+ box-shadow: none;
2090
+ }
2091
+
2092
+ .charcoal-radio-input:not(:disabled)[aria-invalid='true'],
2093
+ .charcoal-radio-input:not(:disabled)[aria-invalid='true']:focus {
2094
+ box-shadow: 0 0 0 4px rgba(255, 43, 0, 0.32);
2095
+ }
2096
+
2097
+ .charcoal-radio-input:checked:not(:disabled):hover {
2098
+ background-color: var(--charcoal-color-container-primary-hover);
2099
+ }
2100
+
2101
+ .charcoal-radio-input:checked:not(:disabled):hover::after {
2102
+ background-color: var(--charcoal-color-icon-on-primary-hover);
2103
+ }
2104
+
2105
+ .charcoal-radio-input:checked:not(:disabled):active {
2106
+ background-color: var(--charcoal-color-container-primary-press);
2107
+ }
2108
+
2109
+ .charcoal-radio-input:checked:not(:disabled):active::after {
2110
+ background-color: var(--charcoal-color-icon-on-primary-press);
2111
+ }
2112
+ .charcoal-checkbox-input {
2113
+ -webkit-appearance: none;
2114
+ -moz-appearance: none;
2115
+ appearance: none;
2116
+ display: flex;
2117
+ cursor: pointer;
2118
+ margin: 0;
2119
+ width: 20px;
2120
+ height: 20px;
2121
+ border-radius: 4px;
2122
+ transition:
2123
+ 0.2s box-shadow,
2124
+ 0.2s background-color;
2125
+ position: relative;
2126
+ box-sizing: border-box;
2127
+ }
2128
+
2129
+ .charcoal-checkbox-input:disabled,
2130
+ .charcoal-checkbox-input[readonly] {
2131
+ opacity: 0.32;
2132
+ cursor: default;
2133
+ }
2134
+
2135
+ .charcoal-checkbox-input:checked {
2136
+ background-color: var(--charcoal-color-container-primary-default);
2137
+ }
2138
+
2139
+ .charcoal-checkbox-input:checked::after {
2140
+ content: '';
2141
+ background-color: white;
2142
+ display: flex;
2143
+ margin: auto;
2144
+ width: 16px;
2145
+ height: 16px;
2146
+ clip-path: path(
2147
+ 'M10.6 5a1.3 1.3 0 0 1 1.8 1.9l-5.7 5.6-3-2.9a1.3 1.3 0 1 1 2-1.9l1 1z'
2148
+ );
2149
+ }
2150
+
2151
+ .charcoal-checkbox-input:not(:checked) {
2152
+ border-width: 2px;
2153
+ border-style: solid;
2154
+ border-color: var(--charcoal-color-border-default);
2155
+ }
2156
+
2157
+ .charcoal-checkbox-input:not(:disabled):focus {
2048
2158
  outline: none;
2049
2159
  box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
2050
2160
  }
2051
-
2052
- .charcoal-radio-input:not(:disabled):focus-visible {
2161
+ .charcoal-checkbox-input:not(:disabled):focus-visible {
2053
2162
  box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
2054
2163
  }
2055
-
2056
- .charcoal-radio-input:not(:disabled):focus:not(:focus-visible) {
2164
+ .charcoal-checkbox-input:not(:disabled):focus:not(:focus-visible) {
2057
2165
  box-shadow: none;
2058
2166
  }
2059
2167
 
2060
- .charcoal-radio-input:not(:disabled)[aria-invalid='true'],
2061
- .charcoal-radio-input:not(:disabled)[aria-invalid='true']:focus {
2062
- box-shadow: 0 0 0 4px rgba(255, 43, 0, 0.32);
2168
+ .charcoal-checkbox-input:checked:not(:disabled):hover {
2169
+ background-color: var(--charcoal-color-container-primary-hover);
2170
+ }
2171
+ .charcoal-checkbox-input:checked:not(:disabled):active {
2172
+ background-color: var(--charcoal-color-container-primary-press);
2063
2173
  }
2064
2174
 
2065
- .charcoal-radio-input:checked:not(:disabled):hover {
2066
- background-color: var(--charcoal-color-container-primary-hover);
2175
+ .charcoal-checkbox-input[aria-invalid='true'],
2176
+ .charcoal-checkbox-input[aria-invalid='true']:not(:disabled):focus {
2177
+ box-shadow: 0 0 0 4px rgba(255, 43, 0, 0.32);
2067
2178
  }
2068
2179
 
2069
- .charcoal-radio-input:checked:not(:disabled):hover::after {
2070
- background-color: var(--charcoal-color-icon-on-primary-hover);
2180
+ .charcoal-checkbox-input[data-rounded='true'] {
2181
+ border-radius: 10px;
2182
+ background-color: var(--charcoal-color-container-secondary-default);
2183
+ border: 2px solid transparent;
2071
2184
  }
2072
2185
 
2073
- .charcoal-radio-input:checked:not(:disabled):active {
2074
- background-color: var(--charcoal-color-container-primary-press);
2186
+ .charcoal-checkbox-input[data-rounded='true']:checked {
2187
+ background-color: var(--charcoal-color-container-primary-default);
2075
2188
  }
2076
2189
 
2077
- .charcoal-radio-input:checked:not(:disabled):active::after {
2078
- background-color: var(--charcoal-color-icon-on-primary-press);
2190
+ .charcoal-checkbox-input[data-rounded='true']:not(:disabled):hover {
2191
+ background-color: var(--charcoal-color-container-secondary-hover);
2079
2192
  }
2080
- .charcoal-field-label {
2081
- font-size: 14px;
2082
- line-height: 22px;
2083
- font-weight: bold;
2084
- display: flow-root;
2085
- color: var(--charcoal-color-text-default-text1);
2193
+ .charcoal-checkbox-input[data-rounded='true']:not(:disabled):active {
2194
+ background-color: var(--charcoal-color-container-secondary-press);
2086
2195
  }
2087
2196
 
2088
- .charcoal-field-label-required-text {
2089
- font-size: 14px;
2090
- line-height: 22px;
2091
- display: flow-root;
2092
- color: var(--charcoal-color-text-secondary-default);
2197
+ .charcoal-checkbox-input[data-rounded='true']:not(:disabled):focus-visible {
2198
+ box-shadow: 0 0 0 6px rgba(0, 150, 250, 0.32);
2093
2199
  }
2094
2200
 
2095
- .charcoal-field-label-sub-label {
2096
- font-size: 14px;
2097
- line-height: 22px;
2098
- display: flow-root;
2099
- color: var(--charcoal-color-text-tertiary-default);
2100
- transition:
2101
- 0.2s color,
2102
- 0.2s box-shadow;
2201
+ .charcoal-checkbox-input[data-rounded='true']:checked:not(:disabled):hover {
2202
+ background-color: var(--charcoal-color-container-primary-hover);
2203
+ }
2204
+ .charcoal-checkbox-input[data-rounded='true']:checked:not(:disabled):active {
2205
+ background-color: var(--charcoal-color-container-primary-press);
2103
2206
  }
2104
2207
 
2105
- .charcoal-field-label-root {
2106
- display: inline-flex;
2208
+ .charcoal-checkbox-input[data-rounded='true'][aria-invalid='true'],
2209
+ .charcoal-checkbox-input[data-rounded='true'][aria-invalid='true']:not(
2210
+ :disabled
2211
+ ):focus {
2212
+ box-shadow: 0 0 0 6px rgba(255, 43, 0, 0.32);
2213
+ }
2214
+
2215
+ .charcoal-checkbox-input[data-rounded='true']::before {
2216
+ content: '';
2217
+ width: 24px;
2218
+ height: 24px;
2219
+ position: absolute;
2220
+ top: -4px;
2221
+ left: -4px;
2222
+ border-radius: 12px;
2223
+ border: 2px solid #fff;
2224
+ box-sizing: border-box;
2225
+ }
2226
+ .charcoal-menu-list {
2227
+ padding: 0;
2228
+ margin: 0;
2229
+ }
2230
+ .charcoal-list-item {
2231
+ list-style: none;
2232
+ display: flex;
2107
2233
  align-items: center;
2234
+ min-height: 40px;
2235
+ cursor: pointer;
2236
+ outline: none;
2237
+
2238
+ padding-right: 16px;
2239
+ padding-left: 16px;
2240
+
2241
+ transition: background-color 0.2s;
2108
2242
  }
2109
2243
 
2110
- .charcoal-field-label-root > .charcoal-field-label-required-text {
2111
- margin-left: 4px;
2112
- }
2244
+ .charcoal-list-item:not([aria-disabled='true']):hover,
2245
+ .charcoal-list-item:not([aria-disabled='true']):focus,
2246
+ .charcoal-list-item:not([aria-disabled='true']):focus-within {
2247
+ background-color: var(--charcoal-color-container-secondary-default);
2248
+ }
2113
2249
 
2114
- .charcoal-field-label-root > .charcoal-field-label-sub-label {
2115
- margin-left: auto;
2116
- }
2250
+ .charcoal-list-item[aria-disabled='true'] {
2251
+ opacity: 0.32;
2252
+ cursor: default;
2253
+ }
2117
2254
  .charcoal-switch-input {
2118
2255
  cursor: pointer;
2119
2256
  -webkit-appearance: none;
@@ -2243,148 +2380,6 @@ pixiv-icon:not(:defined)[name^='Inline/'][scale='2'] {
2243
2380
  .charcoal-modal-dialog:focus {
2244
2381
  outline: none;
2245
2382
  }
2246
- .charcoal-list-item {
2247
- list-style: none;
2248
- display: flex;
2249
- align-items: center;
2250
- min-height: 40px;
2251
- cursor: pointer;
2252
- outline: none;
2253
-
2254
- padding-right: 16px;
2255
- padding-left: 16px;
2256
-
2257
- transition: background-color 0.2s;
2258
- }
2259
-
2260
- .charcoal-list-item:not([aria-disabled='true']):hover,
2261
- .charcoal-list-item:not([aria-disabled='true']):focus,
2262
- .charcoal-list-item:not([aria-disabled='true']):focus-within {
2263
- background-color: var(--charcoal-color-container-secondary-default);
2264
- }
2265
-
2266
- .charcoal-list-item[aria-disabled='true'] {
2267
- opacity: 0.32;
2268
- cursor: default;
2269
- }
2270
- .charcoal-menu-list {
2271
- padding: 0;
2272
- margin: 0;
2273
- }
2274
- .charcoal-checkbox-input {
2275
- -webkit-appearance: none;
2276
- -moz-appearance: none;
2277
- appearance: none;
2278
- display: flex;
2279
- cursor: pointer;
2280
- margin: 0;
2281
- width: 20px;
2282
- height: 20px;
2283
- border-radius: 4px;
2284
- transition:
2285
- 0.2s box-shadow,
2286
- 0.2s background-color;
2287
- position: relative;
2288
- box-sizing: border-box;
2289
- }
2290
-
2291
- .charcoal-checkbox-input:disabled,
2292
- .charcoal-checkbox-input[readonly] {
2293
- opacity: 0.32;
2294
- cursor: default;
2295
- }
2296
-
2297
- .charcoal-checkbox-input:checked {
2298
- background-color: var(--charcoal-color-container-primary-default);
2299
- }
2300
-
2301
- .charcoal-checkbox-input:checked::after {
2302
- content: '';
2303
- background-color: white;
2304
- display: flex;
2305
- margin: auto;
2306
- width: 16px;
2307
- height: 16px;
2308
- clip-path: path(
2309
- 'M10.6 5a1.3 1.3 0 0 1 1.8 1.9l-5.7 5.6-3-2.9a1.3 1.3 0 1 1 2-1.9l1 1z'
2310
- );
2311
- }
2312
-
2313
- .charcoal-checkbox-input:not(:checked) {
2314
- border-width: 2px;
2315
- border-style: solid;
2316
- border-color: var(--charcoal-color-border-default);
2317
- }
2318
-
2319
- .charcoal-checkbox-input:not(:disabled):focus {
2320
- outline: none;
2321
- box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
2322
- }
2323
- .charcoal-checkbox-input:not(:disabled):focus-visible {
2324
- box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
2325
- }
2326
- .charcoal-checkbox-input:not(:disabled):focus:not(:focus-visible) {
2327
- box-shadow: none;
2328
- }
2329
-
2330
- .charcoal-checkbox-input:checked:not(:disabled):hover {
2331
- background-color: var(--charcoal-color-container-primary-hover);
2332
- }
2333
- .charcoal-checkbox-input:checked:not(:disabled):active {
2334
- background-color: var(--charcoal-color-container-primary-press);
2335
- }
2336
-
2337
- .charcoal-checkbox-input[aria-invalid='true'],
2338
- .charcoal-checkbox-input[aria-invalid='true']:not(:disabled):focus {
2339
- box-shadow: 0 0 0 4px rgba(255, 43, 0, 0.32);
2340
- }
2341
-
2342
- .charcoal-checkbox-input[data-rounded='true'] {
2343
- border-radius: 10px;
2344
- background-color: var(--charcoal-color-container-secondary-default);
2345
- border: 2px solid transparent;
2346
- }
2347
-
2348
- .charcoal-checkbox-input[data-rounded='true']:checked {
2349
- background-color: var(--charcoal-color-container-primary-default);
2350
- }
2351
-
2352
- .charcoal-checkbox-input[data-rounded='true']:not(:disabled):hover {
2353
- background-color: var(--charcoal-color-container-secondary-hover);
2354
- }
2355
- .charcoal-checkbox-input[data-rounded='true']:not(:disabled):active {
2356
- background-color: var(--charcoal-color-container-secondary-press);
2357
- }
2358
-
2359
- .charcoal-checkbox-input[data-rounded='true']:not(:disabled):focus-visible {
2360
- box-shadow: 0 0 0 6px rgba(0, 150, 250, 0.32);
2361
- }
2362
-
2363
- .charcoal-checkbox-input[data-rounded='true']:checked:not(:disabled):hover {
2364
- background-color: var(--charcoal-color-container-primary-hover);
2365
- }
2366
- .charcoal-checkbox-input[data-rounded='true']:checked:not(:disabled):active {
2367
- background-color: var(--charcoal-color-container-primary-press);
2368
- }
2369
-
2370
- .charcoal-checkbox-input[data-rounded='true'][aria-invalid='true'],
2371
- .charcoal-checkbox-input[data-rounded='true'][aria-invalid='true']:not(
2372
- :disabled
2373
- ):focus {
2374
- box-shadow: 0 0 0 6px rgba(255, 43, 0, 0.32);
2375
- }
2376
-
2377
- .charcoal-checkbox-input[data-rounded='true']::before {
2378
- content: '';
2379
- width: 24px;
2380
- height: 24px;
2381
- position: absolute;
2382
- top: -4px;
2383
- left: -4px;
2384
- border-radius: 12px;
2385
- border: 2px solid #fff;
2386
- box-sizing: border-box;
2387
- }
2388
2383
  .charcoal-popover {
2389
2384
  margin: 4px 0;
2390
2385
  list-style: none;