@charcoal-ui/react 6.0.0-rc.9 → 6.0.1

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