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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.css CHANGED
@@ -6,49 +6,6 @@
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
- }
52
9
  .charcoal-button {
53
10
  -webkit-appearance: none;
54
11
  -moz-appearance: none;
@@ -199,29 +156,6 @@
199
156
  .charcoal-button[data-full-width='true'] {
200
157
  width: 100%;
201
158
  }
202
- .charcoal-radio__label {
203
- display: grid;
204
- grid-template-columns: auto 1fr;
205
- grid-gap: 4px;
206
- align-items: center;
207
- cursor: pointer;
208
- }
209
-
210
- .charcoal-radio__label[aria-disabled]:not([aria-disabled='false']) {
211
- opacity: 0.32;
212
- cursor: default;
213
- }
214
-
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
- }
225
159
  .charcoal-icon-button {
226
160
  cursor: pointer;
227
161
  -webkit-appearance: none;
@@ -346,6 +280,95 @@
346
280
  .charcoal-icon-button[aria-disabled='false']:focus:not(:focus-visible) {
347
281
  box-shadow: none;
348
282
  }
283
+ .charcoal-clickable {
284
+ cursor: pointer;
285
+
286
+ /* Reset button appearance */
287
+ -webkit-appearance: none;
288
+ -moz-appearance: none;
289
+ appearance: none;
290
+ background: transparent;
291
+ padding: 0;
292
+ border-style: none;
293
+ outline: none;
294
+ color: inherit;
295
+ text-rendering: inherit;
296
+ letter-spacing: inherit;
297
+ word-spacing: inherit;
298
+ text-decoration: none;
299
+
300
+ /* Change the font styles in all browsers. */
301
+ font: inherit;
302
+
303
+ /* Remove the margin in Firefox and Safari. */
304
+ margin: 0;
305
+
306
+ /* Show the overflow in Edge. */
307
+ overflow: visible;
308
+
309
+ /* Remove the inheritance of text transform in Firefox. */
310
+ text-transform: none;
311
+ }
312
+
313
+ .charcoal-clickable:disabled,
314
+ .charcoal-clickable[aria-disabled]:not([aria-disabled='false']) {
315
+ cursor: default;
316
+ }
317
+
318
+ .charcoal-clickable:focus {
319
+ outline: none;
320
+ }
321
+
322
+ .charcoal-clickable::-moz-focus-inner {
323
+ border-style: none;
324
+ padding: 0;
325
+ }
326
+ .charcoal-radio-group {
327
+ display: grid;
328
+ grid-template-columns: 1fr;
329
+ grid-gap: 8px;
330
+ }
331
+ .charcoal-radio__label {
332
+ display: grid;
333
+ grid-template-columns: auto 1fr;
334
+ grid-gap: 4px;
335
+ align-items: center;
336
+ cursor: pointer;
337
+ }
338
+
339
+ .charcoal-radio__label[aria-disabled]:not([aria-disabled='false']) {
340
+ opacity: 0.32;
341
+ cursor: default;
342
+ }
343
+
344
+ .charcoal-radio__label_div {
345
+ font-size: 14px;
346
+ line-height: 22px;
347
+ color: var(--charcoal-color-text-default);
348
+ }
349
+ .charcoal-switch__label {
350
+ display: inline-grid;
351
+ grid-template-columns: auto 1fr;
352
+ align-items: center;
353
+ cursor: pointer;
354
+ outline: 0;
355
+ gap: 4px;
356
+ }
357
+
358
+ .charcoal-switch__label[aria-disabled='true'] {
359
+ opacity: 0.32;
360
+ cursor: default;
361
+ }
362
+
363
+ .charcoal-switch__label[aria-disabled='true'] > input {
364
+ opacity: 1;
365
+ }
366
+
367
+ .charcoal-switch__label_div {
368
+ font-size: 14px;
369
+ line-height: 22px;
370
+ color: var(--charcoal-color-text-default);
371
+ }
349
372
  .charcoal-multi-select {
350
373
  display: grid;
351
374
  grid-template-columns: auto 1fr;
@@ -481,6 +504,76 @@
481
504
  border-width: 2px;
482
505
  border-style: solid;
483
506
  }
507
+ .charcoal-modal-background {
508
+ overflow: auto;
509
+ display: flex;
510
+ position: fixed;
511
+ top: 0;
512
+ left: 0;
513
+ width: 100%;
514
+ height: 100%;
515
+ justify-content: center;
516
+ padding: 40px 0;
517
+ box-sizing: border-box;
518
+
519
+ background-color: var(--charcoal-color-background-overlay);
520
+ }
521
+
522
+ @media (max-width: 743px) {
523
+ .charcoal-modal-background[data-bottom-sheet='true'],
524
+ .charcoal-modal-background[data-bottom-sheet='full'] {
525
+ padding: 0;
526
+ }
527
+ }
528
+
529
+ /* easeOutQuart。duration は useTransitionPresence の MODAL_TRANSITION_DURATION_MS と一致させること。
530
+ transition は entering / exiting に限定し、開いたままテーマ切り替え等で
531
+ 色や transform が変わってもアニメーションしないようにする */
532
+ .charcoal-modal-background[data-animation] {
533
+ overflow: hidden;
534
+ }
535
+
536
+ .charcoal-modal-background[data-animation='entering'],
537
+ .charcoal-modal-background[data-animation='exiting'] {
538
+ transition: background-color 400ms cubic-bezier(0.25, 1, 0.5, 1);
539
+ }
540
+
541
+ /* 閉じアニメーション中はクリックを下のページへ通す(transitionend が来ない環境で
542
+ 透明なオーバーレイがタップを奪い続けるのも防ぐ) */
543
+ .charcoal-modal-background[data-animation='exited'],
544
+ .charcoal-modal-background[data-animation='exiting'] {
545
+ background-color: transparent;
546
+ pointer-events: none;
547
+ }
548
+
549
+ .charcoal-modal-background[data-animation='entered'] {
550
+ overflow: auto;
551
+ }
552
+
553
+ .charcoal-modal-background[data-animation='entering'] > .charcoal-modal-dialog,
554
+ .charcoal-modal-background[data-animation='exiting'] > .charcoal-modal-dialog {
555
+ transition: transform 400ms cubic-bezier(0.25, 1, 0.5, 1);
556
+ }
557
+
558
+ .charcoal-modal-background[data-animation='exited'] > .charcoal-modal-dialog,
559
+ .charcoal-modal-background[data-animation='exiting'] > .charcoal-modal-dialog {
560
+ transform: translateY(100%);
561
+ }
562
+
563
+ .charcoal-modal-close-button {
564
+ position: absolute;
565
+ top: 8px;
566
+ right: 8px;
567
+
568
+ color: var(--charcoal-color-text-tertiary-default);
569
+ transition: 0.2s color;
570
+ }
571
+
572
+ .charcoal-modal-title {
573
+ margin: 0;
574
+ font-weight: inherit;
575
+ font-size: inherit;
576
+ }
484
577
  .charcoal-text-field-root {
485
578
  display: grid;
486
579
  grid-template-columns: 1fr;
@@ -580,68 +673,49 @@
580
673
  font-size: 14px;
581
674
  color: var(--charcoal-color-text-tertiary-default);
582
675
  }
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);
676
+ .charcoal-icon {
677
+ display: inline-flex;
678
+ width: var(--charcoal-icon-size);
679
+ height: var(--charcoal-icon-size);
594
680
  }
595
681
 
596
- .charcoal-loading-spinner[data-transparent='true'] {
597
- background-color: transparent;
598
- }
682
+ pixiv-icon:not(:defined) {
683
+ --pixiv-icon-base: 24px;
684
+ --pixiv-icon-scale: 1;
685
+ --pixiv-icon-size: calc(var(--pixiv-icon-base) * var(--pixiv-icon-scale));
599
686
 
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;
687
+ display: inline-flex;
688
+ /* --charcoal-icon-size がセットされていればそれを優先、
689
+ なければ name / scale から導出した --pixiv-icon-size をフォールバック */
690
+ width: var(--charcoal-icon-size, var(--pixiv-icon-size));
691
+ height: var(--charcoal-icon-size, var(--pixiv-icon-size));
617
692
  }
618
693
 
619
- .charcoal-loading-spinner-icon[data-reset-animation] {
620
- animation: none;
694
+ pixiv-icon:not(:defined)[name^='16/'] {
695
+ --pixiv-icon-base: 16px;
696
+ --pixiv-icon-size: 16px;
621
697
  }
622
698
 
623
- .charcoal-loading-spinner-icon[data-once='true'] {
624
- animation-iteration-count: 1;
699
+ pixiv-icon:not(:defined)[name^='24/'][scale='2'] {
700
+ --pixiv-icon-scale: 2;
701
+ }
702
+
703
+ pixiv-icon:not(:defined)[name^='24/'][scale='3'] {
704
+ --pixiv-icon-scale: 3;
705
+ }
706
+
707
+ pixiv-icon:not(:defined)[name^='32/'] {
708
+ --pixiv-icon-base: 32px;
709
+ --pixiv-icon-size: 32px;
625
710
  }
626
- .charcoal-menu-item-group {
627
- display: block;
628
- }
629
711
 
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
- }
712
+ pixiv-icon:not(:defined)[name^='Inline/'] {
713
+ --pixiv-icon-base: 16px;
714
+ }
637
715
 
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
- }
716
+ pixiv-icon:not(:defined)[name^='Inline/'][scale='2'] {
717
+ --pixiv-icon-scale: 2;
718
+ }
645
719
  .charcoal-text-area-root {
646
720
  display: grid;
647
721
  grid-template-columns: 1fr;
@@ -754,6 +828,160 @@
754
828
  font-size: 14px;
755
829
  color: var(--charcoal-color-text-tertiary-default);
756
830
  }
831
+ .charcoal-modal-header-root {
832
+ height: 64px;
833
+ display: grid;
834
+ align-content: center;
835
+ justify-content: center;
836
+ }
837
+
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
+ }
844
+
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
+ }
852
+
853
+ .charcoal-modal-align {
854
+ padding-left: 16px;
855
+ padding-right: 16px;
856
+ }
857
+
858
+ .charcoal-modal-body {
859
+ padding-bottom: 40px;
860
+ }
861
+
862
+ .charcoal-modal-buttons {
863
+ display: grid;
864
+ grid-auto-flow: row;
865
+ grid-row-gap: 8px;
866
+
867
+ padding-top: 16px;
868
+ padding-left: 16px;
869
+ padding-right: 16px;
870
+ }
871
+ .charcoal-segmented-control {
872
+ display: inline-flex;
873
+ align-items: center;
874
+
875
+ background-color: var(--charcoal-color-container-secondary-default-a);
876
+ border-radius: 16px;
877
+ }
878
+
879
+ .charcoal-segmented-control[data-uniform-segment-width='true'],
880
+ .charcoal-segmented-control[data-full-width='true'] {
881
+ display: inline-grid;
882
+ grid-auto-columns: minmax(80px, 1fr);
883
+ grid-auto-rows: 32px;
884
+ grid-auto-flow: column;
885
+ }
886
+
887
+ .charcoal-segmented-control[data-full-width='true'] {
888
+ width: 100%;
889
+ }
890
+
891
+ .charcoal-segmented-control-radio__label {
892
+ position: relative;
893
+ display: flex;
894
+ align-items: center;
895
+ justify-content: center;
896
+ cursor: pointer;
897
+ height: 32px;
898
+
899
+ padding-right: 16px;
900
+ padding-left: 16px;
901
+ border-radius: 16px;
902
+ color: var(--charcoal-color-text-secondary-default);
903
+
904
+ font-size: 14px;
905
+ line-height: 22px;
906
+ }
907
+
908
+ .charcoal-segmented-control-radio__label[aria-disabled]:not([aria-disabled='false']) {
909
+ cursor: default;
910
+ opacity: 0.32;
911
+ }
912
+
913
+ .charcoal-segmented-control-radio__label[data-checked='true'] {
914
+ background-color: var(--charcoal-color-container-primary-default);
915
+ color: var(--charcoal-color-text-on-primary-default);
916
+ }
917
+
918
+ .charcoal-segmented-control-radio__label[data-uniform-segment-width='true'],
919
+ .charcoal-segmented-control-radio__label[data-full-width='true'] {
920
+ justify-content: center;
921
+ white-space: nowrap;
922
+ }
923
+
924
+ .charcoal-segmented-control-radio__input {
925
+ position: absolute;
926
+
927
+ height: 0px;
928
+ width: 0px;
929
+ padding: 0;
930
+ margin: 0;
931
+
932
+ -webkit-appearance: none;
933
+
934
+ -moz-appearance: none;
935
+
936
+ appearance: none;
937
+ box-sizing: border-box;
938
+ overflow: hidden;
939
+ white-space: nowrap;
940
+ opacity: 0;
941
+ }
942
+ .charcoal-loading-spinner {
943
+ box-sizing: content-box;
944
+ margin: auto;
945
+ padding: 16px;
946
+ border-radius: 8px;
947
+ font-size: 48px;
948
+ width: 48px;
949
+ height: 48px;
950
+ opacity: 0.84;
951
+ color: var(--charcoal-color-icon-tertiary-default);
952
+ background-color: var(--charcoal-color-background-default);
953
+ }
954
+
955
+ .charcoal-loading-spinner[data-transparent='true'] {
956
+ background-color: transparent;
957
+ }
958
+
959
+ @keyframes charcoal-loading-spinner-icon-scale-out {
960
+ from {
961
+ transform: scale(0);
962
+ opacity: 1;
963
+ }
964
+ to {
965
+ transform: scale(1);
966
+ opacity: 0;
967
+ }
968
+ }
969
+
970
+ .charcoal-loading-spinner-icon {
971
+ width: 1em;
972
+ height: 1em;
973
+ border-radius: 1em;
974
+ background-color: currentColor;
975
+ animation: charcoal-loading-spinner-icon-scale-out 1s infinite both ease-out;
976
+ }
977
+
978
+ .charcoal-loading-spinner-icon[data-reset-animation] {
979
+ animation: none;
980
+ }
981
+
982
+ .charcoal-loading-spinner-icon[data-once='true'] {
983
+ animation-iteration-count: 1;
984
+ }
757
985
  .charcoal-dropdown-selector-root {
758
986
  display: grid;
759
987
  grid-template-columns: 1fr;
@@ -838,90 +1066,25 @@
838
1066
  .charcoal-ui-dropdown-selector-icon {
839
1067
  color: var(--charcoal-color-icon-secondary-default);
840
1068
  }
841
- .charcoal-checkbox__label {
842
- position: relative;
843
- cursor: pointer;
1069
+ .charcoal-dropdown-selector-menu-item {
1070
+ font-size: 14px;
1071
+ line-height: 22px;
1072
+ color: var(--charcoal-color-text-secondary-default);
1073
+ padding: 9px 0;
1074
+
844
1075
  display: flex;
845
- gap: 4px;
1076
+ align-items: center;
1077
+ width: 100%;
1078
+ margin-left: 20px;
846
1079
  }
847
1080
 
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);
1081
+ .charcoal-dropdown-selector-menu-item[data-selected='true'] {
1082
+ margin-left: 0px;
867
1083
  }
868
1084
 
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
- }
889
-
890
- pixiv-icon:not(:defined)[name^='24/'][scale='3'] {
891
- --pixiv-icon-scale: 3;
892
- }
893
-
894
- pixiv-icon:not(:defined)[name^='32/'] {
895
- --pixiv-icon-base: 32px;
896
- --pixiv-icon-size: 32px;
897
- }
898
-
899
- pixiv-icon:not(:defined)[name^='Inline/'] {
900
- --pixiv-icon-base: 16px;
901
- }
902
-
903
- pixiv-icon:not(:defined)[name^='Inline/'][scale='2'] {
904
- --pixiv-icon-scale: 2;
905
- }
906
- .charcoal-dropdown-selector-menu-item {
907
- font-size: 14px;
908
- line-height: 22px;
909
- color: var(--charcoal-color-text-secondary-default);
910
- padding: 9px 0;
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;
1085
+ .charcoal-dropdown-selector-menu-item-icon {
1086
+ color: var(--charcoal-color-text-secondary-default);
1087
+ padding-right: 4px;
925
1088
  }
926
1089
 
927
1090
  .charcoal-dropdown-selector-menu-item-container {
@@ -943,170 +1106,71 @@ pixiv-icon:not(:defined)[name^='Inline/'][scale='2'] {
943
1106
  .charcoal-dropdown-selector-menu-fullwidth {
944
1107
  width: 100%;
945
1108
  }
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;
1109
+ .charcoal-menu-item-group {
1110
+ display: block;
953
1111
  }
954
1112
 
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);
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;
968
1119
  }
969
- .charcoal-segmented-control {
970
- display: inline-flex;
971
- align-items: center;
972
1120
 
973
- background-color: var(--charcoal-color-container-secondary-default-a);
974
- border-radius: 16px;
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;
975
1127
  }
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 {
1128
+ .charcoal-checkbox__label {
990
1129
  position: relative;
991
- display: flex;
992
- align-items: center;
993
- justify-content: center;
994
1130
  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;
1131
+ display: flex;
1132
+ gap: 4px;
1004
1133
  }
1005
1134
 
1006
- .charcoal-segmented-control-radio__label[aria-disabled]:not([aria-disabled='false']) {
1135
+ .charcoal-checkbox__label[aria-disabled='true'] {
1007
1136
  cursor: default;
1008
1137
  opacity: 0.32;
1009
1138
  }
1010
1139
 
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
- }
1040
- .charcoal-modal-background {
1041
- overflow: auto;
1042
- display: flex;
1043
- position: fixed;
1044
- top: 0;
1045
- left: 0;
1046
- width: 100%;
1047
- height: 100%;
1048
- justify-content: center;
1049
- padding: 40px 0;
1050
- box-sizing: border-box;
1051
-
1052
- background-color: var(--charcoal-color-background-overlay);
1053
- }
1054
-
1055
- @media (max-width: 743px) {
1056
- .charcoal-modal-background[data-bottom-sheet='true'],
1057
- .charcoal-modal-background[data-bottom-sheet='full'] {
1058
- padding: 0;
1140
+ .charcoal-checkbox__label[aria-disabled='true'] > input {
1141
+ opacity: 1;
1059
1142
  }
1060
- }
1061
-
1062
- /* easeOutQuart。duration は useTransitionPresence の MODAL_TRANSITION_DURATION_MS と一致させること。
1063
- transition は entering / exiting に限定し、開いたままテーマ切り替え等で
1064
- 色や transform が変わってもアニメーションしないようにする */
1065
- .charcoal-modal-background[data-animation] {
1066
- overflow: hidden;
1067
- }
1068
-
1069
- .charcoal-modal-background[data-animation='entering'],
1070
- .charcoal-modal-background[data-animation='exiting'] {
1071
- transition: background-color 400ms cubic-bezier(0.25, 1, 0.5, 1);
1072
- }
1073
-
1074
- /* 閉じアニメーション中はクリックを下のページへ通す(transitionend が来ない環境で
1075
- 透明なオーバーレイがタップを奪い続けるのも防ぐ) */
1076
- .charcoal-modal-background[data-animation='exited'],
1077
- .charcoal-modal-background[data-animation='exiting'] {
1078
- background-color: transparent;
1079
- pointer-events: none;
1080
- }
1081
-
1082
- .charcoal-modal-background[data-animation='entered'] {
1083
- overflow: auto;
1084
- }
1085
1143
 
1086
- .charcoal-modal-background[data-animation='entering'] > .charcoal-modal-dialog,
1087
- .charcoal-modal-background[data-animation='exiting'] > .charcoal-modal-dialog {
1088
- transition: transform 400ms cubic-bezier(0.25, 1, 0.5, 1);
1144
+ .charcoal-checkbox__label_div {
1145
+ flex: 1;
1146
+ color: var(--charcoal-color-text-default);
1147
+ font-size: 14px;
1148
+ line-height: 20px;
1089
1149
  }
1150
+ .charcoal-text-ellipsis {
1151
+ /* Runtime variables overridden by the React component. */
1152
+ --charcoal-text-ellipsis-line-limit: 1;
1153
+ --charcoal-text-ellipsis-line-height: inherit;
1090
1154
 
1091
- .charcoal-modal-background[data-animation='exited'] > .charcoal-modal-dialog,
1092
- .charcoal-modal-background[data-animation='exiting'] > .charcoal-modal-dialog {
1093
- transform: translateY(100%);
1155
+ overflow: hidden;
1156
+ overflow-wrap: break-word;
1157
+ display: -webkit-box;
1158
+ -webkit-box-orient: vertical;
1159
+ -webkit-line-clamp: var(--charcoal-text-ellipsis-line-limit);
1094
1160
  }
1095
1161
 
1096
- .charcoal-modal-close-button {
1097
- position: absolute;
1098
- top: 8px;
1099
- right: 8px;
1162
+ .charcoal-text-ellipsis[data-has-line-height='true'] {
1163
+ line-height: var(--charcoal-text-ellipsis-line-height);
1164
+ }
1100
1165
 
1101
- color: var(--charcoal-color-text-tertiary-default);
1102
- transition: 0.2s color;
1103
- }
1166
+ .charcoal-text-ellipsis[data-has-line-height='false'] {
1167
+ line-height: inherit;
1168
+ }
1104
1169
 
1105
- .charcoal-modal-title {
1106
- margin: 0;
1107
- font-weight: inherit;
1108
- font-size: inherit;
1109
- }
1170
+ .charcoal-text-ellipsis[data-line-limit='1'][data-use-nowrap='true'] {
1171
+ text-overflow: ellipsis;
1172
+ white-space: nowrap;
1173
+ }
1110
1174
  .charcoal-tag-item {
1111
1175
  --charcoal-tag-item-color: var(--charcoal-color-text-on-primary-default);
1112
1176
  --charcoal-tag-item-size: 40px;
@@ -1261,120 +1325,20 @@ pixiv-icon:not(:defined)[name^='Inline/'][scale='2'] {
1261
1325
  .charcoal-tag-item__labe__text[data-has-translate='true']::after {
1262
1326
  display: none;
1263
1327
  }
1264
- .charcoal-text-ellipsis {
1265
- /* Runtime variables overridden by the React component. */
1266
- --charcoal-text-ellipsis-line-limit: 1;
1267
- --charcoal-text-ellipsis-line-height: inherit;
1268
-
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);
1328
+ .charcoal-pagination {
1329
+ display: flex;
1330
+ justify-content: center;
1331
+ align-items: center;
1274
1332
  }
1275
1333
 
1276
- .charcoal-text-ellipsis[data-has-line-height='true'] {
1277
- line-height: var(--charcoal-text-ellipsis-line-height);
1334
+ .charcoal-pagination[data-size='S'] .charcoal-pagination-button {
1335
+ min-width: 32px;
1336
+ min-height: 32px;
1278
1337
  }
1279
1338
 
1280
- .charcoal-text-ellipsis[data-has-line-height='false'] {
1281
- line-height: inherit;
1282
- }
1283
-
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;
1293
- }
1294
-
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
- }
1300
- }
1301
-
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;
1308
- }
1309
-
1310
- .charcoal-modal-align {
1311
- padding-left: 16px;
1312
- padding-right: 16px;
1313
- }
1314
-
1315
- .charcoal-modal-body {
1316
- padding-bottom: 40px;
1317
- }
1318
-
1319
- .charcoal-modal-buttons {
1320
- display: grid;
1321
- grid-auto-flow: row;
1322
- grid-row-gap: 8px;
1323
-
1324
- padding-top: 16px;
1325
- padding-left: 16px;
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;
1334
- }
1335
-
1336
- .charcoal-hint-text[data-context='page'] {
1337
- justify-content: center;
1338
- }
1339
-
1340
- @media (min-width: 744px) {
1341
-
1342
- .charcoal-hint-text[data-context='page'] {
1343
- padding: 20px 40px
1344
- }
1345
- }
1346
-
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
- }
1354
-
1355
- .charcoal-hint-text-message {
1356
- color: var(--charcoal-color-text-secondary-default);
1357
- font-size: 14px;
1358
- line-height: 22px;
1359
- display: flow-root;
1360
- margin: 0;
1361
- min-width: 0;
1362
- overflow-wrap: break-word;
1363
- }
1364
- .charcoal-pagination {
1365
- display: flex;
1366
- justify-content: center;
1367
- align-items: center;
1368
- }
1369
-
1370
- .charcoal-pagination[data-size='S'] .charcoal-pagination-button {
1371
- min-width: 32px;
1372
- min-height: 32px;
1373
- }
1374
-
1375
- .charcoal-pagination[data-size='M'] .charcoal-pagination-button {
1376
- min-width: 40px;
1377
- min-height: 40px;
1339
+ .charcoal-pagination[data-size='M'] .charcoal-pagination-button {
1340
+ min-width: 40px;
1341
+ min-height: 40px;
1378
1342
  }
1379
1343
 
1380
1344
  /* stylelint-disable no-descending-specificity */
@@ -1476,241 +1440,62 @@ pixiv-icon:not(:defined)[name^='Inline/'][scale='2'] {
1476
1440
  .charcoal-pagination-spacer.charcoal-icon-button:disabled {
1477
1441
  opacity: 1;
1478
1442
  }
1479
- .charcoal-notification-region {
1480
- left: 0;
1481
- right: 0;
1482
- box-sizing: border-box;
1483
- position: absolute;
1484
- width: 100%;
1485
- height: 100%;
1486
- display: flex;
1487
- flex-direction: column;
1488
- align-items: center;
1489
- pointer-events: none;
1490
- top: 0;
1491
- }
1492
-
1493
- .charcoal-notification {
1494
- box-sizing: border-box;
1495
- border-radius: var(--charcoal-radius-oval);
1496
- width: -moz-fit-content;
1497
- width: fit-content;
1498
- max-width: calc(100vw - var(--charcoal-space-46));
1499
- display: flex;
1500
- align-items: center;
1501
- justify-content: center;
1502
- gap: var(--charcoal-space-20);
1503
- pointer-events: auto;
1504
- }
1505
-
1506
- .charcoal-notification-content {
1507
- display: flex;
1508
- align-items: center;
1509
- min-width: 0;
1510
- }
1511
-
1512
- .charcoal-notification-label {
1513
- min-width: 0;
1514
- overflow: hidden;
1515
- overflow-wrap: break-word;
1516
- display: -webkit-box;
1517
- -webkit-box-orient: vertical;
1518
- -webkit-line-clamp: 2;
1519
- font-size: var(--charcoal-text-font-size-caption-m);
1520
- font-weight: var(--charcoal-text-font-weight-bold);
1521
- line-height: var(--charcoal-text-line-height-caption-m);
1522
- }
1443
+ .charcoal-carousel {
1444
+ --charcoal-carousel-gap: 0px;
1523
1445
 
1524
- @media (prefers-reduced-motion: reduce) {
1525
- .charcoal-notification,
1526
- .charcoal-notification[data-exiting='true'] {
1527
- animation: none;
1528
- }
1529
- }
1530
- .charcoal-notification-region {
1531
- --charcoal-snackbar-offset: 16px;
1446
+ position: relative;
1447
+ display: block;
1532
1448
  }
1533
1449
 
1534
- .charcoal-snackbar-region[data-position='top'] {
1535
- --charcoal-snackbar-enter-offset: calc(-1 * var(--charcoal-space-30));
1536
-
1537
- position: sticky;
1538
- top: calc(env(safe-area-inset-top, 0px) + var(--charcoal-snackbar-offset));
1539
- }
1540
-
1541
- .charcoal-snackbar-region[data-position='bottom'] {
1542
- --charcoal-snackbar-enter-offset: var(--charcoal-space-30);
1543
-
1544
- position: fixed;
1545
- bottom: calc(
1546
- env(safe-area-inset-bottom, 0px) + var(--charcoal-snackbar-offset)
1547
- );
1450
+ .charcoal-carousel[data-full-width='true'] {
1451
+ width: 100vw;
1452
+ margin-inline: calc(50% - 50vw);
1548
1453
  }
1549
1454
 
1550
- .charcoal-snackbar {
1551
- min-height: 44px;
1552
- padding: var(--charcoal-space-25) var(--charcoal-space-40);
1553
- background-color: var(--charcoal-color-container-default);
1554
- color: var(--charcoal-color-text-default);
1555
- border: var(--charcoal-border-width-m) solid
1556
- var(--charcoal-color-border-secondary);
1557
- animation: charcoal-snackbar-enter 0.3s ease-out both;
1455
+ .charcoal-carousel__viewport {
1456
+ position: relative;
1558
1457
  }
1559
1458
 
1560
- .charcoal-snackbar[data-exiting='true'] {
1561
- animation: charcoal-snackbar-exit 0.3s ease-out both;
1562
- }
1563
-
1564
- .charcoal-snackbar[data-with-action='true'] {
1565
- min-height: 56px;
1566
- padding: var(--charcoal-space-25) var(--charcoal-space-30)
1567
- var(--charcoal-space-25) var(--charcoal-space-40);
1568
- }
1569
-
1570
- .charcoal-snackbar[data-dim='true'] {
1571
- background-color: var(--charcoal-color-container-hud-default);
1572
- color: var(--charcoal-color-text-on-hud-default);
1573
- border-color: var(--charcoal-color-border-hud);
1574
- }
1459
+ /* フォーカスリングは scroller ではなく viewport に描く。scroller に置くと
1460
+ hasGradient の mask(mask-clip: border-box)で外側の box-shadow ごと消えるため。 */
1575
1461
 
1576
- @keyframes charcoal-snackbar-enter {
1577
- from {
1578
- opacity: 0;
1579
- transform: translateY(var(--charcoal-snackbar-enter-offset));
1462
+ .charcoal-carousel__viewport[data-focus-visible] {
1463
+ box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
1580
1464
  }
1581
1465
 
1582
- to {
1583
- opacity: 1;
1584
- transform: translateY(0);
1585
- }
1466
+ /* スライド間隔は gap prop(--charcoal-carousel-gap)で注入する。
1467
+ スライド寸法は sandbox 同様、利用者が children 側で持つ。 */
1468
+ .charcoal-carousel__scroller {
1469
+ position: relative;
1470
+ display: flex;
1471
+ gap: var(--charcoal-carousel-gap);
1472
+ overflow-x: auto;
1473
+ overflow-y: hidden;
1474
+ overscroll-behavior-x: contain;
1475
+ scroll-behavior: smooth;
1476
+ scrollbar-width: none;
1477
+ outline: none;
1586
1478
  }
1587
-
1588
- @keyframes charcoal-snackbar-exit {
1589
- from {
1590
- opacity: 1;
1479
+ .charcoal-carousel__scroller::-webkit-scrollbar {
1480
+ display: none;
1591
1481
  }
1592
1482
 
1593
- to {
1594
- opacity: 0;
1595
- }
1596
- }
1597
- .charcoal-notification-region {
1598
- --charcoal-toast-offset: 16px;
1483
+ /* スクロールスナップ type は prop(scrollSnap.type)で scroller に出し分ける。
1484
+ align は基底 .charcoal-carousel__item の後(後述)に置く(no-descending-specificity 回避)。
1485
+ 未指定時の既定(M=none / S=mandatory / align=center)は JS 側で data 属性に解決する。 */
1486
+ .charcoal-carousel[data-scroll-snap-type='none'] .charcoal-carousel__scroller {
1487
+ scroll-snap-type: none;
1599
1488
  }
1600
1489
 
1601
- .charcoal-toast-region[data-position='top'] {
1602
- position: sticky;
1603
- --charcoal-toast-enter-offset: calc(-1 * var(--charcoal-space-30));
1604
-
1605
- top: calc(env(safe-area-inset-top, 0px) + var(--charcoal-toast-offset));
1606
- }
1490
+ .charcoal-carousel[data-scroll-snap-type='proximity']
1491
+ .charcoal-carousel__scroller {
1492
+ scroll-snap-type: x proximity;
1493
+ }
1607
1494
 
1608
- .charcoal-toast-region[data-position='bottom'] {
1609
- position: fixed;
1610
- --charcoal-toast-enter-offset: var(--charcoal-space-30);
1611
-
1612
- bottom: calc(
1613
- env(safe-area-inset-bottom, 0px) + var(--charcoal-toast-offset)
1614
- );
1615
- }
1616
-
1617
- .charcoal-toast {
1618
- min-height: 40px;
1619
- padding: var(--charcoal-space-20) var(--charcoal-space-40);
1620
- color: var(--charcoal-color-text-on-positive-default);
1621
- border: var(--charcoal-border-width-m) solid var(--charcoal-color-border-hud);
1622
- animation: charcoal-toast-enter 0.3s ease-out both;
1623
- }
1624
-
1625
- .charcoal-toast[data-exiting='true'] {
1626
- animation: charcoal-toast-exit 0.3s ease-out both;
1627
- }
1628
-
1629
- .charcoal-toast[data-type='success'] {
1630
- background-color: var(--charcoal-color-container-positive-default);
1631
- }
1632
-
1633
- .charcoal-toast[data-type='error'] {
1634
- background-color: var(--charcoal-color-container-negative-default);
1635
- }
1636
-
1637
- @keyframes charcoal-toast-enter {
1638
- from {
1639
- opacity: 0;
1640
- transform: translateY(var(--charcoal-toast-enter-offset));
1641
- }
1642
-
1643
- to {
1644
- opacity: 1;
1645
- transform: translateY(0);
1646
- }
1647
- }
1648
-
1649
- @keyframes charcoal-toast-exit {
1650
- from {
1651
- opacity: 1;
1652
- }
1653
-
1654
- to {
1655
- opacity: 0;
1656
- }
1657
- }
1658
- .charcoal-carousel {
1659
- --charcoal-carousel-gap: 0px;
1660
-
1661
- position: relative;
1662
- display: block;
1663
- }
1664
-
1665
- .charcoal-carousel[data-full-width='true'] {
1666
- width: 100vw;
1667
- margin-inline: calc(50% - 50vw);
1668
- }
1669
-
1670
- .charcoal-carousel__viewport {
1671
- position: relative;
1672
- }
1673
-
1674
- /* フォーカスリングは scroller ではなく viewport に描く。scroller に置くと
1675
- hasGradient の mask(mask-clip: border-box)で外側の box-shadow ごと消えるため。 */
1676
-
1677
- .charcoal-carousel__viewport[data-focus-visible] {
1678
- box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
1679
- }
1680
-
1681
- /* スライド間隔は gap prop(--charcoal-carousel-gap)で注入する。
1682
- スライド寸法は sandbox 同様、利用者が children 側で持つ。 */
1683
- .charcoal-carousel__scroller {
1684
- position: relative;
1685
- display: flex;
1686
- gap: var(--charcoal-carousel-gap);
1687
- overflow-x: auto;
1688
- overflow-y: hidden;
1689
- overscroll-behavior-x: contain;
1690
- scroll-behavior: smooth;
1691
- scrollbar-width: none;
1692
- outline: none;
1693
- }
1694
- .charcoal-carousel__scroller::-webkit-scrollbar {
1695
- display: none;
1696
- }
1697
-
1698
- /* スクロールスナップ type は prop(scrollSnap.type)で scroller に出し分ける。
1699
- align は基底 .charcoal-carousel__item の後(後述)に置く(no-descending-specificity 回避)。
1700
- 未指定時の既定(M=none / S=mandatory / align=center)は JS 側で data 属性に解決する。 */
1701
- .charcoal-carousel[data-scroll-snap-type='none'] .charcoal-carousel__scroller {
1702
- scroll-snap-type: none;
1703
- }
1704
-
1705
- .charcoal-carousel[data-scroll-snap-type='proximity']
1706
- .charcoal-carousel__scroller {
1707
- scroll-snap-type: x proximity;
1708
- }
1709
-
1710
- .charcoal-carousel[data-scroll-snap-type='mandatory']
1711
- .charcoal-carousel__scroller {
1712
- scroll-snap-type: x mandatory;
1713
- }
1495
+ .charcoal-carousel[data-scroll-snap-type='mandatory']
1496
+ .charcoal-carousel__scroller {
1497
+ scroll-snap-type: x mandatory;
1498
+ }
1714
1499
 
1715
1500
  /* グラデーション: mask で端のアイテム自体を透明へフェードさせる(下の背景色を
1716
1501
  問わない)。mask の色はアルファとしてだけ効く(#000=表示 / transparent=透過)。
@@ -1965,24 +1750,323 @@ pixiv-icon:not(:defined)[name^='Inline/'][scale='2'] {
1965
1750
  outline-offset: 2px;
1966
1751
  }
1967
1752
 
1968
- .charcoal-carousel__item::scroll-marker:target-current {
1969
- background-color: var(--charcoal-color-text-default);
1970
- }
1753
+ .charcoal-carousel__item::scroll-marker:target-current {
1754
+ background-color: var(--charcoal-color-text-default);
1755
+ }
1756
+
1757
+ .charcoal-carousel__indicator {
1758
+ display: none;
1759
+ }
1760
+ }
1761
+ /* stylelint-enable selector-pseudo-class-no-unknown */
1762
+ .charcoal-hint-text {
1763
+ background-color: var(--charcoal-color-container-secondary-default);
1764
+ border-radius: 8px;
1765
+ padding: 12px 16px;
1766
+ display: flex;
1767
+ align-items: flex-start;
1768
+ }
1769
+
1770
+ .charcoal-hint-text[data-context='page'] {
1771
+ justify-content: center;
1772
+ }
1773
+
1774
+ @media (min-width: 744px) {
1775
+
1776
+ .charcoal-hint-text[data-context='page'] {
1777
+ padding: 20px 40px
1778
+ }
1779
+ }
1780
+
1781
+ .charcoal-hint-text-icon {
1782
+ display: flex;
1783
+ align-items: center;
1784
+ color: var(--charcoal-color-icon-tertiary-default);
1785
+ height: 22px;
1786
+ margin: 0 4px 0 0;
1787
+ }
1788
+
1789
+ .charcoal-hint-text-message {
1790
+ color: var(--charcoal-color-text-secondary-default);
1791
+ font-size: 14px;
1792
+ line-height: 22px;
1793
+ display: flow-root;
1794
+ margin: 0;
1795
+ min-width: 0;
1796
+ overflow-wrap: break-word;
1797
+ }
1798
+ .charcoal-notification-region {
1799
+ left: 0;
1800
+ right: 0;
1801
+ box-sizing: border-box;
1802
+ position: absolute;
1803
+ width: 100%;
1804
+ height: 100%;
1805
+ display: flex;
1806
+ flex-direction: column;
1807
+ align-items: center;
1808
+ pointer-events: none;
1809
+ top: 0;
1810
+ }
1811
+
1812
+ .charcoal-notification {
1813
+ box-sizing: border-box;
1814
+ border-radius: var(--charcoal-radius-oval);
1815
+ width: -moz-fit-content;
1816
+ width: fit-content;
1817
+ max-width: calc(100vw - var(--charcoal-space-46));
1818
+ display: flex;
1819
+ align-items: center;
1820
+ justify-content: center;
1821
+ gap: var(--charcoal-space-20);
1822
+ pointer-events: auto;
1823
+ }
1824
+
1825
+ .charcoal-notification-content {
1826
+ display: flex;
1827
+ align-items: center;
1828
+ min-width: 0;
1829
+ }
1830
+
1831
+ .charcoal-notification-label {
1832
+ min-width: 0;
1833
+ overflow: hidden;
1834
+ overflow-wrap: break-word;
1835
+ display: -webkit-box;
1836
+ -webkit-box-orient: vertical;
1837
+ -webkit-line-clamp: 2;
1838
+ font-size: var(--charcoal-text-font-size-caption-m);
1839
+ font-weight: var(--charcoal-text-font-weight-bold);
1840
+ line-height: var(--charcoal-text-line-height-caption-m);
1841
+ }
1842
+
1843
+ @media (prefers-reduced-motion: reduce) {
1844
+ .charcoal-notification,
1845
+ .charcoal-notification[data-exiting='true'] {
1846
+ animation: none;
1847
+ }
1848
+ }
1849
+ .charcoal-notification-region {
1850
+ --charcoal-snackbar-offset: 16px;
1851
+ }
1852
+
1853
+ .charcoal-snackbar-region[data-position='top'] {
1854
+ --charcoal-snackbar-enter-offset: calc(-1 * var(--charcoal-space-30));
1855
+
1856
+ position: sticky;
1857
+ top: calc(env(safe-area-inset-top, 0px) + var(--charcoal-snackbar-offset));
1858
+ }
1859
+
1860
+ .charcoal-snackbar-region[data-position='bottom'] {
1861
+ --charcoal-snackbar-enter-offset: var(--charcoal-space-30);
1862
+
1863
+ position: fixed;
1864
+ bottom: calc(
1865
+ env(safe-area-inset-bottom, 0px) + var(--charcoal-snackbar-offset)
1866
+ );
1867
+ }
1868
+
1869
+ .charcoal-snackbar {
1870
+ min-height: 44px;
1871
+ padding: var(--charcoal-space-25) var(--charcoal-space-40);
1872
+ background-color: var(--charcoal-color-container-default);
1873
+ color: var(--charcoal-color-text-default);
1874
+ border: var(--charcoal-border-width-m) solid
1875
+ var(--charcoal-color-border-secondary);
1876
+ animation: charcoal-snackbar-enter 0.3s ease-out both;
1877
+ }
1878
+
1879
+ .charcoal-snackbar[data-exiting='true'] {
1880
+ animation: charcoal-snackbar-exit 0.3s ease-out both;
1881
+ }
1882
+
1883
+ .charcoal-snackbar[data-with-action='true'] {
1884
+ min-height: 56px;
1885
+ padding: var(--charcoal-space-25) var(--charcoal-space-30)
1886
+ var(--charcoal-space-25) var(--charcoal-space-40);
1887
+ }
1888
+
1889
+ .charcoal-snackbar[data-dim='true'] {
1890
+ background-color: var(--charcoal-color-container-hud-default);
1891
+ color: var(--charcoal-color-text-on-hud-default);
1892
+ border-color: var(--charcoal-color-border-hud);
1893
+ }
1894
+
1895
+ @keyframes charcoal-snackbar-enter {
1896
+ from {
1897
+ opacity: 0;
1898
+ transform: translateY(var(--charcoal-snackbar-enter-offset));
1899
+ }
1900
+
1901
+ to {
1902
+ opacity: 1;
1903
+ transform: translateY(0);
1904
+ }
1905
+ }
1906
+
1907
+ @keyframes charcoal-snackbar-exit {
1908
+ from {
1909
+ opacity: 1;
1910
+ }
1911
+
1912
+ to {
1913
+ opacity: 0;
1914
+ }
1915
+ }
1916
+ .charcoal-notification-region {
1917
+ --charcoal-toast-offset: 16px;
1918
+ }
1919
+
1920
+ .charcoal-toast-region[data-position='top'] {
1921
+ position: sticky;
1922
+ --charcoal-toast-enter-offset: calc(-1 * var(--charcoal-space-30));
1923
+
1924
+ top: calc(env(safe-area-inset-top, 0px) + var(--charcoal-toast-offset));
1925
+ }
1926
+
1927
+ .charcoal-toast-region[data-position='bottom'] {
1928
+ position: fixed;
1929
+ --charcoal-toast-enter-offset: var(--charcoal-space-30);
1930
+
1931
+ bottom: calc(
1932
+ env(safe-area-inset-bottom, 0px) + var(--charcoal-toast-offset)
1933
+ );
1934
+ }
1935
+
1936
+ .charcoal-toast {
1937
+ min-height: 40px;
1938
+ padding: var(--charcoal-space-20) var(--charcoal-space-40);
1939
+ color: var(--charcoal-color-text-on-positive-default);
1940
+ border: var(--charcoal-border-width-m) solid var(--charcoal-color-border-hud);
1941
+ animation: charcoal-toast-enter 0.3s ease-out both;
1942
+ }
1943
+
1944
+ .charcoal-toast[data-exiting='true'] {
1945
+ animation: charcoal-toast-exit 0.3s ease-out both;
1946
+ }
1947
+
1948
+ .charcoal-toast[data-type='success'] {
1949
+ background-color: var(--charcoal-color-container-positive-default);
1950
+ }
1951
+
1952
+ .charcoal-toast[data-type='error'] {
1953
+ background-color: var(--charcoal-color-container-negative-default);
1954
+ }
1955
+
1956
+ @keyframes charcoal-toast-enter {
1957
+ from {
1958
+ opacity: 0;
1959
+ transform: translateY(var(--charcoal-toast-enter-offset));
1960
+ }
1961
+
1962
+ to {
1963
+ opacity: 1;
1964
+ transform: translateY(0);
1965
+ }
1966
+ }
1967
+
1968
+ @keyframes charcoal-toast-exit {
1969
+ from {
1970
+ opacity: 1;
1971
+ }
1972
+
1973
+ to {
1974
+ opacity: 0;
1975
+ }
1976
+ }
1977
+ .charcoal-text-field-assistive-text {
1978
+ font-size: 14px;
1979
+ line-height: 22px;
1980
+ margin: 0;
1981
+ color: var(--charcoal-color-text-secondary-default);
1982
+ }
1983
+
1984
+ .charcoal-text-field-assistive-text[data-invalid='true'] {
1985
+ color: var(--charcoal-color-text-negative-default);
1986
+ }
1987
+ .charcoal-switch-input {
1988
+ cursor: pointer;
1989
+ -webkit-appearance: none;
1990
+ -moz-appearance: none;
1991
+ appearance: none;
1992
+ display: inline-flex;
1993
+ position: relative;
1994
+ box-sizing: border-box;
1995
+ width: 28px;
1996
+ border: 2px solid transparent;
1997
+
1998
+ transition-property: background-color, box-shadow;
1999
+ transition-duration: 0.2s;
2000
+
2001
+ outline: none;
2002
+ border-radius: 16px;
2003
+ height: 16px;
2004
+ margin: 0;
2005
+ background-color: var(--charcoal-color-container-neutral-default);
2006
+ }
2007
+
2008
+ .charcoal-switch-input:disabled,
2009
+ .charcoal-switch-input[readonly] {
2010
+ opacity: 0.32;
2011
+ cursor: default;
2012
+ }
2013
+
2014
+ .charcoal-switch-input::after {
2015
+ content: '';
2016
+ position: absolute;
2017
+ display: block;
2018
+ top: 0;
2019
+ left: 0;
2020
+ width: 12px;
2021
+ height: 12px;
2022
+ transform: translateX(0);
2023
+ transition: transform 0.2s;
2024
+ border-radius: 1024px;
2025
+ background-color: var(--charcoal-color-icon-on-primary-default);
2026
+ }
2027
+
2028
+ .charcoal-switch-input:checked::after {
2029
+ transform: translateX(12px);
2030
+ transition: transform 0.2s;
2031
+ }
2032
+
2033
+ .charcoal-switch-input:checked {
2034
+ background-color: var(--charcoal-color-container-primary-default);
2035
+ }
2036
+
2037
+ .charcoal-switch-input:not(:disabled):hover {
2038
+ background-color: var(--charcoal-color-container-neutral-hover);
2039
+ }
2040
+
2041
+ .charcoal-switch-input:not(:disabled):active {
2042
+ background-color: var(--charcoal-color-container-neutral-press);
2043
+ }
2044
+
2045
+ .charcoal-switch-input:not(:disabled):focus {
2046
+ outline: none;
2047
+ box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
2048
+ }
2049
+ .charcoal-switch-input:not(:disabled):focus-visible {
2050
+ box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
2051
+ }
2052
+ .charcoal-switch-input:not(:disabled):focus:not(:focus-visible) {
2053
+ box-shadow: none;
2054
+ }
2055
+
2056
+ .charcoal-switch-input:not(:disabled)::after:hover {
2057
+ background-color: var(--charcoal-color-icon-on-primary-hover);
2058
+ }
1971
2059
 
1972
- .charcoal-carousel__indicator {
1973
- display: none;
1974
- }
2060
+ .charcoal-switch-input:not(:disabled)::after:active {
2061
+ background-color: var(--charcoal-color-icon-on-primary-press);
1975
2062
  }
1976
- /* stylelint-enable selector-pseudo-class-no-unknown */
1977
- .charcoal-text-field-assistive-text {
1978
- font-size: 14px;
1979
- line-height: 22px;
1980
- margin: 0;
1981
- color: var(--charcoal-color-text-secondary-default);
2063
+
2064
+ .charcoal-switch-input:not(:disabled):checked:hover {
2065
+ background-color: var(--charcoal-color-container-primary-hover);
1982
2066
  }
1983
2067
 
1984
- .charcoal-text-field-assistive-text[data-invalid='true'] {
1985
- color: var(--charcoal-color-text-negative-default);
2068
+ .charcoal-switch-input:not(:disabled):checked:active {
2069
+ background-color: var(--charcoal-color-container-primary-press);
1986
2070
  }
1987
2071
  .charcoal-field-label {
1988
2072
  font-size: 14px;
@@ -2021,6 +2105,51 @@ pixiv-icon:not(:defined)[name^='Inline/'][scale='2'] {
2021
2105
  .charcoal-field-label-root > .charcoal-field-label-sub-label {
2022
2106
  margin-left: auto;
2023
2107
  }
2108
+ .charcoal-modal-dialog {
2109
+ margin: auto;
2110
+ position: relative;
2111
+ height: -moz-fit-content;
2112
+ height: fit-content;
2113
+ width: 440px;
2114
+
2115
+ background-color: var(--charcoal-color-container-default);
2116
+ border-radius: 24px;
2117
+ }
2118
+
2119
+ .charcoal-modal-dialog[data-size='S'] {
2120
+ width: 336px;
2121
+ }
2122
+
2123
+ .charcoal-modal-dialog[data-size='M'] {
2124
+ width: 440px;
2125
+ }
2126
+
2127
+ .charcoal-modal-dialog[data-size='L'] {
2128
+ width: 648px;
2129
+ }
2130
+
2131
+ @media (max-width: 743px) {
2132
+ .charcoal-modal-dialog {
2133
+ max-width: 440px;
2134
+ width: calc(100% - 48px);
2135
+ }
2136
+
2137
+ .charcoal-modal-dialog[data-bottom-sheet='true'],
2138
+ .charcoal-modal-dialog[data-bottom-sheet='full'] {
2139
+ max-width: unset;
2140
+ width: 100%;
2141
+ border-radius: 0;
2142
+ margin: auto 0 0 0;
2143
+ }
2144
+
2145
+ .charcoal-modal-dialog[data-bottom-sheet='full'] {
2146
+ min-height: 100%;
2147
+ }
2148
+ }
2149
+
2150
+ .charcoal-modal-dialog:focus {
2151
+ outline: none;
2152
+ }
2024
2153
  .charcoal-radio-input {
2025
2154
  -webkit-appearance: none;
2026
2155
  -moz-appearance: none;
@@ -2109,6 +2238,34 @@ pixiv-icon:not(:defined)[name^='Inline/'][scale='2'] {
2109
2238
  .charcoal-radio-input:checked:not(:disabled):active::after {
2110
2239
  background-color: var(--charcoal-color-icon-on-primary-press);
2111
2240
  }
2241
+ .charcoal-menu-list {
2242
+ padding: 0;
2243
+ margin: 0;
2244
+ }
2245
+ .charcoal-list-item {
2246
+ list-style: none;
2247
+ display: flex;
2248
+ align-items: center;
2249
+ min-height: 40px;
2250
+ cursor: pointer;
2251
+ outline: none;
2252
+
2253
+ padding-right: 16px;
2254
+ padding-left: 16px;
2255
+
2256
+ transition: background-color 0.2s;
2257
+ }
2258
+
2259
+ .charcoal-list-item:not([aria-disabled='true']):hover,
2260
+ .charcoal-list-item:not([aria-disabled='true']):focus,
2261
+ .charcoal-list-item:not([aria-disabled='true']):focus-within {
2262
+ background-color: var(--charcoal-color-container-secondary-default);
2263
+ }
2264
+
2265
+ .charcoal-list-item[aria-disabled='true'] {
2266
+ opacity: 0.32;
2267
+ cursor: default;
2268
+ }
2112
2269
  .charcoal-checkbox-input {
2113
2270
  -webkit-appearance: none;
2114
2271
  -moz-appearance: none;
@@ -2223,163 +2380,6 @@ pixiv-icon:not(:defined)[name^='Inline/'][scale='2'] {
2223
2380
  border: 2px solid #fff;
2224
2381
  box-sizing: border-box;
2225
2382
  }
2226
- .charcoal-menu-list {
2227
- padding: 0;
2228
- margin: 0;
2229
- }
2230
- .charcoal-list-item {
2231
- list-style: none;
2232
- display: flex;
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;
2242
- }
2243
-
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
- }
2249
-
2250
- .charcoal-list-item[aria-disabled='true'] {
2251
- opacity: 0.32;
2252
- cursor: default;
2253
- }
2254
- .charcoal-switch-input {
2255
- cursor: pointer;
2256
- -webkit-appearance: none;
2257
- -moz-appearance: none;
2258
- appearance: none;
2259
- display: inline-flex;
2260
- position: relative;
2261
- box-sizing: border-box;
2262
- width: 28px;
2263
- border: 2px solid transparent;
2264
-
2265
- transition-property: background-color, box-shadow;
2266
- transition-duration: 0.2s;
2267
-
2268
- outline: none;
2269
- border-radius: 16px;
2270
- height: 16px;
2271
- margin: 0;
2272
- background-color: var(--charcoal-color-container-neutral-default);
2273
- }
2274
-
2275
- .charcoal-switch-input:disabled,
2276
- .charcoal-switch-input[readonly] {
2277
- opacity: 0.32;
2278
- cursor: default;
2279
- }
2280
-
2281
- .charcoal-switch-input::after {
2282
- content: '';
2283
- position: absolute;
2284
- display: block;
2285
- top: 0;
2286
- left: 0;
2287
- width: 12px;
2288
- height: 12px;
2289
- transform: translateX(0);
2290
- transition: transform 0.2s;
2291
- border-radius: 1024px;
2292
- background-color: var(--charcoal-color-icon-on-primary-default);
2293
- }
2294
-
2295
- .charcoal-switch-input:checked::after {
2296
- transform: translateX(12px);
2297
- transition: transform 0.2s;
2298
- }
2299
-
2300
- .charcoal-switch-input:checked {
2301
- background-color: var(--charcoal-color-container-primary-default);
2302
- }
2303
-
2304
- .charcoal-switch-input:not(:disabled):hover {
2305
- background-color: var(--charcoal-color-container-neutral-hover);
2306
- }
2307
-
2308
- .charcoal-switch-input:not(:disabled):active {
2309
- background-color: var(--charcoal-color-container-neutral-press);
2310
- }
2311
-
2312
- .charcoal-switch-input:not(:disabled):focus {
2313
- outline: none;
2314
- box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
2315
- }
2316
- .charcoal-switch-input:not(:disabled):focus-visible {
2317
- box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
2318
- }
2319
- .charcoal-switch-input:not(:disabled):focus:not(:focus-visible) {
2320
- box-shadow: none;
2321
- }
2322
-
2323
- .charcoal-switch-input:not(:disabled)::after:hover {
2324
- background-color: var(--charcoal-color-icon-on-primary-hover);
2325
- }
2326
-
2327
- .charcoal-switch-input:not(:disabled)::after:active {
2328
- background-color: var(--charcoal-color-icon-on-primary-press);
2329
- }
2330
-
2331
- .charcoal-switch-input:not(:disabled):checked:hover {
2332
- background-color: var(--charcoal-color-container-primary-hover);
2333
- }
2334
-
2335
- .charcoal-switch-input:not(:disabled):checked:active {
2336
- background-color: var(--charcoal-color-container-primary-press);
2337
- }
2338
- .charcoal-modal-dialog {
2339
- margin: auto;
2340
- position: relative;
2341
- height: -moz-fit-content;
2342
- height: fit-content;
2343
- width: 440px;
2344
-
2345
- background-color: var(--charcoal-color-container-default);
2346
- border-radius: 24px;
2347
- }
2348
-
2349
- .charcoal-modal-dialog[data-size='S'] {
2350
- width: 336px;
2351
- }
2352
-
2353
- .charcoal-modal-dialog[data-size='M'] {
2354
- width: 440px;
2355
- }
2356
-
2357
- .charcoal-modal-dialog[data-size='L'] {
2358
- width: 648px;
2359
- }
2360
-
2361
- @media (max-width: 743px) {
2362
- .charcoal-modal-dialog {
2363
- max-width: 440px;
2364
- width: calc(100% - 48px);
2365
- }
2366
-
2367
- .charcoal-modal-dialog[data-bottom-sheet='true'],
2368
- .charcoal-modal-dialog[data-bottom-sheet='full'] {
2369
- max-width: unset;
2370
- width: 100%;
2371
- border-radius: 0;
2372
- margin: auto 0 0 0;
2373
- }
2374
-
2375
- .charcoal-modal-dialog[data-bottom-sheet='full'] {
2376
- min-height: 100%;
2377
- }
2378
- }
2379
-
2380
- .charcoal-modal-dialog:focus {
2381
- outline: none;
2382
- }
2383
2383
  .charcoal-popover {
2384
2384
  margin: 4px 0;
2385
2385
  list-style: none;