morya-ui 0.3.0 → 0.3.2

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 (309) hide show
  1. package/CHANGELOG.md +64 -0
  2. package/dist/Button-dMqRmoYa.js +222 -0
  3. package/dist/{Card-Dsmnzong.js → Card-B1CB9Trm.js} +3 -5
  4. package/dist/Empty-C5tndBOm.js +147 -0
  5. package/dist/Icon-od9Ob-Ay.js +393 -0
  6. package/dist/Loading-BSsRs6v9.js +420 -0
  7. package/dist/Pagination-CqpC5EAs.js +166 -0
  8. package/dist/Select-CKGrSoaC.js +572 -0
  9. package/dist/Skeleton-DCYdXAH2.js +59 -0
  10. package/dist/accordion/style.css +20 -71
  11. package/dist/auto-complete/index.js +118 -120
  12. package/dist/auto-complete/style.css +24 -88
  13. package/dist/avatar/index.js +1 -1
  14. package/dist/avatar/style.css +10 -67
  15. package/dist/badge/style.css +10 -68
  16. package/dist/block-ui/style.css +10 -68
  17. package/dist/breadcrumb/style.css +10 -61
  18. package/dist/button/index.js +1 -1
  19. package/dist/button/style.css +72 -78
  20. package/dist/card/index.js +1 -1
  21. package/dist/card/style.css +30 -67
  22. package/dist/carousel/index.js +72 -64
  23. package/dist/carousel/style.css +36 -82
  24. package/dist/cascade-select/index.js +1 -1
  25. package/dist/cascade-select/style.css +24 -81
  26. package/dist/checkbox/style.css +10 -61
  27. package/dist/chip/index.js +1 -1
  28. package/dist/chip/style.css +10 -67
  29. package/dist/command-menu/index.js +37 -39
  30. package/dist/command-menu/style.css +10 -75
  31. package/dist/components/Accordion/styles.css +10 -10
  32. package/dist/components/AutoComplete/AutoComplete.vue.d.ts.map +1 -1
  33. package/dist/components/AutoComplete/styles.css +0 -7
  34. package/dist/components/Badge/styles.css +0 -7
  35. package/dist/components/BlockUI/styles.css +0 -7
  36. package/dist/components/Button/Button.vue.d.ts +2 -0
  37. package/dist/components/Button/Button.vue.d.ts.map +1 -1
  38. package/dist/components/Button/styles.css +62 -11
  39. package/dist/components/Button/types.d.ts +4 -0
  40. package/dist/components/Button/types.d.ts.map +1 -1
  41. package/dist/components/Card/Card.vue.d.ts +2 -2
  42. package/dist/components/Card/Card.vue.d.ts.map +1 -1
  43. package/dist/components/Card/index.d.ts +1 -1
  44. package/dist/components/Card/index.d.ts.map +1 -1
  45. package/dist/components/Card/styles.css +20 -6
  46. package/dist/components/Card/types.d.ts +4 -2
  47. package/dist/components/Card/types.d.ts.map +1 -1
  48. package/dist/components/Carousel/Carousel.vue.d.ts.map +1 -1
  49. package/dist/components/Carousel/styles.css +26 -15
  50. package/dist/components/CommandMenu/CommandMenu.vue.d.ts.map +1 -1
  51. package/dist/components/ConfigProvider/ConfigProvider.vue.d.ts +2 -2
  52. package/dist/components/DataView/DataView.vue.d.ts +7 -7
  53. package/dist/components/DataView/DataView.vue.d.ts.map +1 -1
  54. package/dist/components/DataView/styles.css +0 -20
  55. package/dist/components/Dialog/styles.css +3 -46
  56. package/dist/components/Dock/styles.css +0 -10
  57. package/dist/components/Drawer/styles.css +2 -51
  58. package/dist/components/Dropdown/Dropdown.vue.d.ts +2 -2
  59. package/dist/components/Dropdown/Dropdown.vue.d.ts.map +1 -1
  60. package/dist/components/Dropdown/DropdownNodes.vue.d.ts +8 -9
  61. package/dist/components/Dropdown/DropdownNodes.vue.d.ts.map +1 -1
  62. package/dist/components/Dropdown/styles.css +24 -5
  63. package/dist/components/Fieldset/styles.css +0 -7
  64. package/dist/components/FileUpload/FileUpload.vue.d.ts.map +1 -1
  65. package/dist/components/FileUpload/fileUtils.d.ts +8 -0
  66. package/dist/components/FileUpload/fileUtils.d.ts.map +1 -0
  67. package/dist/components/Gallery/styles.css +0 -8
  68. package/dist/components/Icon/Icon.vue.d.ts.map +1 -1
  69. package/dist/components/Icon/icon-categories.d.ts.map +1 -1
  70. package/dist/components/Icon/icons-types.d.ts +4 -2
  71. package/dist/components/Icon/icons-types.d.ts.map +1 -1
  72. package/dist/components/Icon/icons.d.ts +250 -561
  73. package/dist/components/Icon/icons.d.ts.map +1 -1
  74. package/dist/components/Icon/index.d.ts +2 -2
  75. package/dist/components/Icon/index.d.ts.map +1 -1
  76. package/dist/components/Icon/styles.css +0 -6
  77. package/dist/components/Knob/styles.css +0 -6
  78. package/dist/components/Layout/styles.css +5 -14
  79. package/dist/components/Listbox/Listbox.vue.d.ts.map +1 -1
  80. package/dist/components/Loading/styles.css +0 -16
  81. package/dist/components/Menu/Menu.vue.d.ts.map +1 -1
  82. package/dist/components/Menu/styles.css +6 -7
  83. package/dist/components/Menubar/Menubar.vue.d.ts.map +1 -1
  84. package/dist/components/Menubar/styles.css +4 -0
  85. package/dist/components/Message/styles.css +0 -13
  86. package/dist/components/Page/PageContent.vue.d.ts +2 -1
  87. package/dist/components/Page/PageContent.vue.d.ts.map +1 -1
  88. package/dist/components/Page/PageFilterChips.vue.d.ts +16 -0
  89. package/dist/components/Page/PageFilterChips.vue.d.ts.map +1 -0
  90. package/dist/components/Page/PageFilters.vue.d.ts +15 -3
  91. package/dist/components/Page/PageFilters.vue.d.ts.map +1 -1
  92. package/dist/components/Page/PageHeader.vue.d.ts +8 -4
  93. package/dist/components/Page/PageHeader.vue.d.ts.map +1 -1
  94. package/dist/components/Page/PagePlaceholder.vue.d.ts +6 -2
  95. package/dist/components/Page/PagePlaceholder.vue.d.ts.map +1 -1
  96. package/dist/components/Page/PageSection.vue.d.ts +8 -2
  97. package/dist/components/Page/PageSection.vue.d.ts.map +1 -1
  98. package/dist/components/Page/PageStat.vue.d.ts +8 -3
  99. package/dist/components/Page/PageStat.vue.d.ts.map +1 -1
  100. package/dist/components/Page/index.d.ts +2 -1
  101. package/dist/components/Page/index.d.ts.map +1 -1
  102. package/dist/components/Page/styles.css +239 -44
  103. package/dist/components/Page/types.d.ts +40 -0
  104. package/dist/components/Page/types.d.ts.map +1 -1
  105. package/dist/components/Pagination/Pagination.vue.d.ts.map +1 -1
  106. package/dist/components/Pagination/styles.css +7 -10
  107. package/dist/components/Pagination/types.d.ts +1 -1
  108. package/dist/components/Pagination/types.d.ts.map +1 -1
  109. package/dist/components/Panel/styles.css +0 -7
  110. package/dist/components/Popover/styles.css +20 -17
  111. package/dist/components/ProgressBar/styles.css +0 -9
  112. package/dist/components/ProgressSpinner/styles.css +0 -7
  113. package/dist/components/ScrollTop/styles.css +0 -7
  114. package/dist/components/Scrollbar/Scrollbar.vue.d.ts +1 -1
  115. package/dist/components/Scrollbar/styles.css +0 -8
  116. package/dist/components/Select/Select.vue.d.ts +10 -8
  117. package/dist/components/Select/Select.vue.d.ts.map +1 -1
  118. package/dist/components/Select/selectOptions.d.ts +46 -0
  119. package/dist/components/Select/selectOptions.d.ts.map +1 -0
  120. package/dist/components/Select/styles.css +35 -8
  121. package/dist/components/Select/types.d.ts +11 -1
  122. package/dist/components/Select/types.d.ts.map +1 -1
  123. package/dist/components/Sidebar/styles.css +0 -6
  124. package/dist/components/Skeleton/styles.css +0 -6
  125. package/dist/components/Slider/styles.css +9 -0
  126. package/dist/components/SplitButton/styles.css +5 -0
  127. package/dist/components/Status/styles.css +0 -7
  128. package/dist/components/Switch/styles.css +0 -7
  129. package/dist/components/Table/Table.vue.d.ts +26 -26
  130. package/dist/components/Table/Table.vue.d.ts.map +1 -1
  131. package/dist/components/Table/TableLoadingLine.vue.d.ts.map +1 -1
  132. package/dist/components/Table/hooks/useExpandableRow.d.ts.map +1 -1
  133. package/dist/components/Table/hooks/useTotalItems.d.ts.map +1 -1
  134. package/dist/components/Table/styles.css +61 -44
  135. package/dist/components/Table/tableQuery.d.ts +30 -0
  136. package/dist/components/Table/tableQuery.d.ts.map +1 -0
  137. package/dist/components/Tree/Tree.vue.d.ts.map +1 -1
  138. package/dist/components/Tree/treeQuery.d.ts +31 -0
  139. package/dist/components/Tree/treeQuery.d.ts.map +1 -0
  140. package/dist/components/TreeSelect/TreeSelect.vue.d.ts.map +1 -1
  141. package/dist/components/TreeSelect/styles.css +1 -1
  142. package/dist/config-provider/index.js +1 -1
  143. package/dist/config-provider/style.css +72 -72
  144. package/dist/confirm-dialog/index.js +2 -2
  145. package/dist/confirm-dialog/style.css +75 -124
  146. package/dist/confirm-popup/index.js +2 -2
  147. package/dist/confirm-popup/style.css +72 -78
  148. package/dist/context-menu/index.js +2 -2
  149. package/dist/context-menu/style.css +10 -75
  150. package/dist/data-view/index.js +47 -47
  151. package/dist/data-view/style.css +393 -174
  152. package/dist/data-view/style.js +1 -1
  153. package/dist/date-picker/index.js +1 -1
  154. package/dist/date-picker/style.css +10 -67
  155. package/dist/dialog/index.js +2 -2
  156. package/dist/dialog/style.css +75 -124
  157. package/dist/divider/style.css +10 -61
  158. package/dist/dock/index.js +2 -2
  159. package/dist/dock/style.css +10 -77
  160. package/dist/drawer/index.js +1 -1
  161. package/dist/drawer/style.css +12 -118
  162. package/dist/dropdown/index.js +110 -91
  163. package/dist/dropdown/style.css +34 -80
  164. package/dist/empty/index.js +5 -150
  165. package/dist/empty/style.css +10 -67
  166. package/dist/fieldset/index.js +1 -1
  167. package/dist/fieldset/style.css +10 -74
  168. package/dist/file-upload/index.js +148 -146
  169. package/dist/file-upload/style.css +10 -67
  170. package/dist/filterByQuery-Bczaxzih.js +17 -0
  171. package/dist/flex/style.css +10 -61
  172. package/dist/float-label/style.css +10 -61
  173. package/dist/fluid/style.css +10 -61
  174. package/dist/form/style.css +10 -61
  175. package/dist/gallery/index.js +1 -1
  176. package/dist/gallery/style.css +10 -83
  177. package/dist/grid/style.css +10 -61
  178. package/dist/icon/index.js +93 -39
  179. package/dist/icon/style.css +10 -67
  180. package/dist/icon-COrt_N8A.js +18 -0
  181. package/dist/icon-field/style.css +10 -61
  182. package/dist/index.d.ts +3 -2
  183. package/dist/index.d.ts.map +1 -1
  184. package/dist/index.js +5400 -5145
  185. package/dist/inplace/style.css +10 -61
  186. package/dist/input/index.js +1 -1
  187. package/dist/input/style.css +10 -67
  188. package/dist/input-color/style.css +10 -61
  189. package/dist/input-group/style.css +10 -61
  190. package/dist/input-number/index.js +1 -1
  191. package/dist/input-number/style.css +10 -67
  192. package/dist/input-otp/style.css +10 -61
  193. package/dist/input-password/index.js +1 -1
  194. package/dist/input-password/style.css +10 -67
  195. package/dist/input-tags/index.js +1 -1
  196. package/dist/input-tags/style.css +10 -67
  197. package/dist/knob/style.css +10 -67
  198. package/dist/label/style.css +10 -61
  199. package/dist/layout/index.js +1 -1
  200. package/dist/layout/style.css +15 -89
  201. package/dist/listbox/index.js +30 -32
  202. package/dist/listbox/style.css +10 -69
  203. package/dist/loading/index.js +32 -446
  204. package/dist/loading/style.css +10 -77
  205. package/dist/mega-menu/index.js +2 -2
  206. package/dist/mega-menu/style.css +10 -67
  207. package/dist/menu/index.js +265 -255
  208. package/dist/menu/style.css +36 -99
  209. package/dist/menubar/index.js +6 -3
  210. package/dist/menubar/style.css +14 -75
  211. package/dist/message/index.js +1 -1
  212. package/dist/message/style.css +10 -80
  213. package/dist/meter-group/style.css +10 -61
  214. package/dist/order-list/index.js +1 -1
  215. package/dist/order-list/style.css +10 -67
  216. package/dist/page/index.js +229 -70
  217. package/dist/page/style.css +1186 -113
  218. package/dist/page/style.js +3 -0
  219. package/dist/pagination/index.js +1 -1
  220. package/dist/pagination/style.css +210 -77
  221. package/dist/pagination/style.js +1 -0
  222. package/dist/panel/index.js +1 -1
  223. package/dist/panel/style.css +10 -74
  224. package/dist/pick-list/index.js +1 -1
  225. package/dist/pick-list/style.css +10 -67
  226. package/dist/popover/style.css +30 -78
  227. package/dist/progress-bar/style.css +10 -70
  228. package/dist/progress-spinner/index.js +105 -2
  229. package/dist/progress-spinner/style.css +10 -68
  230. package/dist/radio/style.css +10 -61
  231. package/dist/rating/index.js +1 -1
  232. package/dist/rating/style.css +10 -67
  233. package/dist/resolver-map.d.ts.map +1 -1
  234. package/dist/resolver.js +1 -0
  235. package/dist/result/index.js +1 -1
  236. package/dist/result/style.css +10 -67
  237. package/dist/scroll-top/index.js +1 -1
  238. package/dist/scroll-top/style.css +10 -82
  239. package/dist/scrollbar/style.css +10 -69
  240. package/dist/select/index.js +2 -478
  241. package/dist/select/style.css +59 -89
  242. package/dist/select-button/style.css +10 -61
  243. package/dist/shared/config.d.ts +2 -2
  244. package/dist/shared/filterByQuery.d.ts +14 -0
  245. package/dist/shared/filterByQuery.d.ts.map +1 -0
  246. package/dist/shared/menu/expand.d.ts +38 -0
  247. package/dist/shared/menu/expand.d.ts.map +1 -0
  248. package/dist/shared/menu/icon.d.ts.map +1 -1
  249. package/dist/shared/menu/index.d.ts +2 -0
  250. package/dist/shared/menu/index.d.ts.map +1 -1
  251. package/dist/shared/styles/select-overlay.css +14 -6
  252. package/dist/sidebar/index.js +2 -2
  253. package/dist/sidebar/style.css +10 -73
  254. package/dist/skeleton/index.js +2 -59
  255. package/dist/skeleton/style.css +10 -67
  256. package/dist/slider/style.css +19 -61
  257. package/dist/space/style.css +10 -61
  258. package/dist/speed-dial/index.js +2 -2
  259. package/dist/speed-dial/style.css +10 -67
  260. package/dist/split-button/index.js +1 -1
  261. package/dist/split-button/style.css +77 -78
  262. package/dist/splitter/style.css +10 -61
  263. package/dist/status/index.js +1 -1
  264. package/dist/status/style.css +10 -74
  265. package/dist/stepper/index.js +1 -1
  266. package/dist/stepper/style.css +10 -67
  267. package/dist/styles/base.css +5 -50
  268. package/dist/styles.css +1 -1
  269. package/dist/switch/style.css +10 -68
  270. package/dist/table/index.js +409 -373
  271. package/dist/table/style.css +457 -215
  272. package/dist/table/style.js +1 -1
  273. package/dist/tabs/index.js +1 -1
  274. package/dist/tabs/style.css +10 -75
  275. package/dist/tag/index.js +1 -1
  276. package/dist/tag/style.css +10 -67
  277. package/dist/terminal/style.css +10 -61
  278. package/dist/textarea/index.js +1 -1
  279. package/dist/textarea/style.css +10 -67
  280. package/dist/theme/styles.css +5 -11
  281. package/dist/theme/useMotion.d.ts +5 -1
  282. package/dist/theme/useMotion.d.ts.map +1 -1
  283. package/dist/tiered-menu/index.js +1 -1
  284. package/dist/tiered-menu/style.css +10 -75
  285. package/dist/timeline/index.js +1 -1
  286. package/dist/timeline/style.css +10 -75
  287. package/dist/toast/index.js +1 -1
  288. package/dist/toast/style.css +10 -67
  289. package/dist/toggle-button/index.js +2 -2
  290. package/dist/toggle-button/style.css +10 -67
  291. package/dist/toolbar/style.css +10 -61
  292. package/dist/tooltip/style.css +10 -61
  293. package/dist/tree/index.js +159 -173
  294. package/dist/tree/style.css +10 -67
  295. package/dist/tree-select/index.js +200 -213
  296. package/dist/tree-select/style.css +25 -82
  297. package/dist/tree-table/index.js +1 -1
  298. package/dist/tree-table/style.css +10 -67
  299. package/dist/treeQuery-CnHkyYOA.js +107 -0
  300. package/dist/virtual-scroller/style.css +10 -69
  301. package/package.json +1 -1
  302. package/dist/Button-B5X_R4Md.js +0 -156
  303. package/dist/Icon-lcN1rS87.js +0 -610
  304. package/dist/Pagination-CVrH8Ypi.js +0 -158
  305. package/dist/ProgressSpinner-BeWVF6Jv.js +0 -105
  306. package/dist/checkStrategy-CZzuUKDI.js +0 -63
  307. package/dist/components/Icon/icons-tabler.d.ts +0 -77
  308. package/dist/components/Icon/icons-tabler.d.ts.map +0 -1
  309. package/dist/icon-DWXkh-RM.js +0 -27
@@ -50,6 +50,10 @@
50
50
  --m-font-size-sm: 0.8125rem;
51
51
  --m-font-size-md: 0.875rem;
52
52
  --m-font-size-lg: 1.125rem;
53
+ /* Display scale (page titles, KPI figures) */
54
+ --m-font-size-xl: 1.25rem;
55
+ --m-font-size-2xl: 1.5rem;
56
+ --m-font-size-3xl: 1.75rem;
53
57
  --m-opacity-disabled: 0.55;
54
58
  /* Layering: override --m-z-base via ConfigProvider / createMoryaUI */
55
59
  --m-z-base: 1000;
@@ -192,20 +196,10 @@
192
196
 
193
197
  /*
194
198
  * Global motion policy (complements per-component rules):
195
- * - `reduced` / OS prefers-reduced-motion: keep short paint transitions; stop loops
199
+ * - `reduced`: keep short paint transitions; stop loops
196
200
  * and layout/transform size animation.
197
201
  * - `none`: zero all transition/animation durations.
198
202
  */
199
- @media (prefers-reduced-motion: reduce) {
200
- html:not([data-m-ignore-reduced-motion]) *,
201
- html:not([data-m-ignore-reduced-motion]) *::before,
202
- html:not([data-m-ignore-reduced-motion]) *::after {
203
- animation-duration: 0.01ms !important;
204
- animation-iteration-count: 1 !important;
205
- transition-property: background-color, border-color, color, opacity, box-shadow,
206
- outline, fill, stroke, stroke-dashoffset !important;
207
- }
208
- }
209
203
 
210
204
  [data-m-motion="reduced"] *,
211
205
  [data-m-motion="reduced"] *::before,
@@ -529,9 +523,13 @@
529
523
  border-radius: var(--m-radius-md);
530
524
  box-shadow: var(--m-shadow-md);
531
525
  max-height: var(--m-dropdown-submenu-max-height);
526
+ max-width: calc(100vw - 2 * var(--m-space-4));
532
527
  min-width: 10rem;
533
528
  overflow: hidden;
534
529
  padding: var(--m-space-1);
530
+ /* Same as .m-dropdown__menu: size to content instead of being clamped
531
+ by the space left of the anchor in the viewport. */
532
+ width: max-content;
535
533
  }
536
534
 
537
535
  .m-dropdown__submenu--teleported {
@@ -611,7 +609,7 @@
611
609
  .m-zoom-enter-from,
612
610
  .m-zoom-leave-to {
613
611
  opacity: 0;
614
- transform: scale(0.9);
612
+ transform: scale(0.95);
615
613
  }
616
614
 
617
615
  .m-slide-up-enter-active,
@@ -656,44 +654,6 @@
656
654
  transform: translateX(calc(var(--m-motion-distance) * -1));
657
655
  }
658
656
 
659
- @media (prefers-reduced-motion: reduce) {
660
- html:not([data-m-ignore-reduced-motion]) .m-fade-enter-active,
661
- html:not([data-m-ignore-reduced-motion]) .m-fade-leave-active,
662
- html:not([data-m-ignore-reduced-motion]) .m-scale-fade-enter-active,
663
- html:not([data-m-ignore-reduced-motion]) .m-scale-fade-leave-active,
664
- html:not([data-m-ignore-reduced-motion]) .m-slide-fade-enter-active,
665
- html:not([data-m-ignore-reduced-motion]) .m-slide-fade-leave-active,
666
- html:not([data-m-ignore-reduced-motion]) .m-zoom-enter-active,
667
- html:not([data-m-ignore-reduced-motion]) .m-zoom-leave-active,
668
- html:not([data-m-ignore-reduced-motion]) .m-slide-up-enter-active,
669
- html:not([data-m-ignore-reduced-motion]) .m-slide-up-leave-active,
670
- html:not([data-m-ignore-reduced-motion]) .m-slide-down-enter-active,
671
- html:not([data-m-ignore-reduced-motion]) .m-slide-down-leave-active,
672
- html:not([data-m-ignore-reduced-motion]) .m-slide-left-enter-active,
673
- html:not([data-m-ignore-reduced-motion]) .m-slide-left-leave-active,
674
- html:not([data-m-ignore-reduced-motion]) .m-slide-right-enter-active,
675
- html:not([data-m-ignore-reduced-motion]) .m-slide-right-leave-active {
676
- transition: none;
677
- }
678
-
679
- html:not([data-m-ignore-reduced-motion]) .m-scale-fade-enter-from,
680
- html:not([data-m-ignore-reduced-motion]) .m-scale-fade-leave-to,
681
- html:not([data-m-ignore-reduced-motion]) .m-slide-fade-enter-from,
682
- html:not([data-m-ignore-reduced-motion]) .m-slide-fade-leave-to,
683
- html:not([data-m-ignore-reduced-motion]) .m-zoom-enter-from,
684
- html:not([data-m-ignore-reduced-motion]) .m-zoom-leave-to,
685
- html:not([data-m-ignore-reduced-motion]) .m-slide-up-enter-from,
686
- html:not([data-m-ignore-reduced-motion]) .m-slide-up-leave-to,
687
- html:not([data-m-ignore-reduced-motion]) .m-slide-down-enter-from,
688
- html:not([data-m-ignore-reduced-motion]) .m-slide-down-leave-to,
689
- html:not([data-m-ignore-reduced-motion]) .m-slide-left-enter-from,
690
- html:not([data-m-ignore-reduced-motion]) .m-slide-left-leave-to,
691
- html:not([data-m-ignore-reduced-motion]) .m-slide-right-enter-from,
692
- html:not([data-m-ignore-reduced-motion]) .m-slide-right-leave-to {
693
- transform: none;
694
- }
695
- }
696
-
697
657
  [data-m-motion="reduced"] .m-fade-enter-active,
698
658
  [data-m-motion="reduced"] .m-fade-leave-active,
699
659
  [data-m-motion="reduced"] .m-scale-fade-enter-active,
@@ -1188,22 +1148,743 @@
1188
1148
  animation: none !important;
1189
1149
  }
1190
1150
 
1191
- @media (prefers-reduced-motion: reduce) {
1192
- html:not([data-m-ignore-reduced-motion]) *,
1193
- html:not([data-m-ignore-reduced-motion]) *::before,
1194
- html:not([data-m-ignore-reduced-motion]) *::after {
1195
- animation-duration: 0.01ms !important;
1196
- animation-iteration-count: 1 !important;
1197
- scroll-behavior: auto !important;
1198
- transition-duration: 0.01ms !important;
1151
+ .m-button {
1152
+ --m-button-padding-x-small: var(--m-control-padding-x-small);
1153
+ --m-button-padding-x-medium: calc(
1154
+ var(--m-control-padding-x-medium) + var(--m-space-1)
1155
+ );
1156
+ --m-button-padding-x-large: calc(
1157
+ var(--m-control-padding-x-large) + var(--m-space-1)
1158
+ );
1159
+ --m-button-icon-stack-min-height: 3.25rem;
1160
+ --m-button-badge-min-width: 1.15rem;
1161
+ --m-button-spinner-size: 0.875rem;
1162
+ --m-button-icon-size: 1rem;
1163
+ --m-button-bg: var(--m-color-primary);
1164
+ --m-button-fg: var(--m-color-on-emphasis);
1165
+ --m-button-border: var(--m-color-primary);
1166
+ --m-button-hover-bg: var(--m-color-primary-hover);
1167
+ --m-button-hover-fg: var(--m-color-on-emphasis);
1168
+ --m-button-hover-border: var(--m-color-primary-hover);
1169
+ --m-button-active-bg: color-mix(
1170
+ in srgb,
1171
+ var(--m-color-primary) 82%,
1172
+ black
1173
+ );
1174
+ align-items: center;
1175
+ background: var(--m-button-bg);
1176
+ border: var(--m-border-width) solid var(--m-button-border);
1177
+ border-radius: var(--m-radius-control);
1178
+ color: var(--m-button-fg);
1179
+ cursor: pointer;
1180
+ display: inline-flex;
1181
+ flex-direction: row;
1182
+ font-family: var(--m-font-sans);
1183
+ font-size: var(--m-control-font-medium);
1184
+ font-weight: 600;
1185
+ gap: var(--m-space-2);
1186
+ justify-content: center;
1187
+ line-height: 1;
1188
+ min-height: var(--m-control-height-medium);
1189
+ padding: 0 var(--m-button-padding-x-medium);
1190
+ position: relative;
1191
+ transition:
1192
+ background-color var(--m-motion-fast) var(--m-motion-ease),
1193
+ border-color var(--m-motion-fast) var(--m-motion-ease),
1194
+ color var(--m-motion-fast) var(--m-motion-ease),
1195
+ box-shadow var(--m-motion-fast) var(--m-motion-ease),
1196
+ opacity var(--m-motion-fast) var(--m-motion-ease),
1197
+ transform 160ms var(--m-motion-ease);
1198
+ vertical-align: middle;
1199
+ white-space: nowrap;
1200
+ }
1201
+
1202
+ @media (hover: hover) and (pointer: fine) {
1203
+ .m-button:hover:not(:disabled) {
1204
+ background: var(--m-button-hover-bg);
1205
+ border-color: var(--m-button-hover-border);
1206
+ color: var(--m-button-hover-fg);
1199
1207
  }
1200
1208
  }
1201
1209
 
1210
+ .m-button:active:not(:disabled) {
1211
+ background: var(--m-button-active-bg);
1212
+ }
1213
+
1214
+ .m-button--press:active:not(:disabled) {
1215
+ transform: scale(0.97);
1216
+ }
1217
+
1218
+ /* Naive-style focus: soft glow, not outline-offset ring */
1219
+ .m-button:focus {
1220
+ outline: none;
1221
+ }
1222
+
1223
+ .m-button:focus-visible {
1224
+ box-shadow: var(--m-focus-shadow);
1225
+ outline: none;
1226
+ }
1227
+
1228
+ .m-button:disabled {
1229
+ cursor: not-allowed;
1230
+ opacity: var(--m-opacity-disabled);
1231
+ }
1232
+
1233
+ .m-button--primary {
1234
+ --m-button-bg: var(--m-color-primary);
1235
+ --m-button-fg: var(--m-color-on-emphasis);
1236
+ --m-button-border: var(--m-color-primary);
1237
+ --m-button-hover-bg: var(--m-color-primary-hover);
1238
+ --m-button-hover-fg: var(--m-color-on-emphasis);
1239
+ --m-button-hover-border: var(--m-color-primary-hover);
1240
+ --m-button-active-bg: color-mix(
1241
+ in srgb,
1242
+ var(--m-color-primary) 82%,
1243
+ black
1244
+ );
1245
+ }
1246
+
1247
+ .m-button--secondary {
1248
+ --m-button-bg: color-mix(
1249
+ in srgb,
1250
+ var(--m-color-text-muted) 16%,
1251
+ var(--m-color-surface)
1252
+ );
1253
+ --m-button-fg: var(--m-color-text);
1254
+ --m-button-border: transparent;
1255
+ --m-button-hover-bg: color-mix(
1256
+ in srgb,
1257
+ var(--m-color-text-muted) 24%,
1258
+ var(--m-color-surface)
1259
+ );
1260
+ --m-button-hover-fg: var(--m-color-text);
1261
+ --m-button-hover-border: transparent;
1262
+ --m-button-active-bg: color-mix(
1263
+ in srgb,
1264
+ var(--m-color-text-muted) 32%,
1265
+ var(--m-color-surface)
1266
+ );
1267
+ }
1268
+
1269
+ .m-button--success {
1270
+ --m-button-bg: var(--m-color-success);
1271
+ --m-button-fg: var(--m-color-on-emphasis);
1272
+ --m-button-border: var(--m-color-success);
1273
+ --m-button-hover-bg: color-mix(
1274
+ in srgb,
1275
+ var(--m-color-success) 85%,
1276
+ black
1277
+ );
1278
+ --m-button-hover-fg: var(--m-color-on-emphasis);
1279
+ --m-button-hover-border: color-mix(
1280
+ in srgb,
1281
+ var(--m-color-success) 85%,
1282
+ black
1283
+ );
1284
+ --m-button-active-bg: color-mix(
1285
+ in srgb,
1286
+ var(--m-color-success) 75%,
1287
+ black
1288
+ );
1289
+ }
1290
+
1291
+ .m-button--info {
1292
+ --m-button-bg: var(--m-color-info);
1293
+ --m-button-fg: var(--m-color-on-emphasis);
1294
+ --m-button-border: var(--m-color-info);
1295
+ --m-button-hover-bg: color-mix(in srgb, var(--m-color-info) 85%, black);
1296
+ --m-button-hover-fg: var(--m-color-on-emphasis);
1297
+ --m-button-hover-border: color-mix(
1298
+ in srgb,
1299
+ var(--m-color-info) 85%,
1300
+ black
1301
+ );
1302
+ --m-button-active-bg: color-mix(in srgb, var(--m-color-info) 75%, black);
1303
+ }
1304
+
1305
+ .m-button--warn {
1306
+ --m-button-bg: var(--m-color-warn);
1307
+ --m-button-fg: var(--m-color-on-emphasis);
1308
+ --m-button-border: var(--m-color-warn);
1309
+ --m-button-hover-bg: color-mix(in srgb, var(--m-color-warn) 85%, black);
1310
+ --m-button-hover-fg: var(--m-color-on-emphasis);
1311
+ --m-button-hover-border: color-mix(
1312
+ in srgb,
1313
+ var(--m-color-warn) 85%,
1314
+ black
1315
+ );
1316
+ --m-button-active-bg: color-mix(in srgb, var(--m-color-warn) 75%, black);
1317
+ }
1318
+
1319
+ .m-button--help {
1320
+ --m-button-bg: var(--m-color-help);
1321
+ --m-button-fg: var(--m-color-on-emphasis);
1322
+ --m-button-border: var(--m-color-help);
1323
+ --m-button-hover-bg: color-mix(in srgb, var(--m-color-help) 85%, black);
1324
+ --m-button-hover-fg: var(--m-color-on-emphasis);
1325
+ --m-button-hover-border: color-mix(
1326
+ in srgb,
1327
+ var(--m-color-help) 85%,
1328
+ black
1329
+ );
1330
+ --m-button-active-bg: color-mix(in srgb, var(--m-color-help) 75%, black);
1331
+ }
1332
+
1333
+ .m-button--danger {
1334
+ --m-button-bg: var(--m-color-danger);
1335
+ --m-button-fg: var(--m-color-on-emphasis);
1336
+ --m-button-border: var(--m-color-danger);
1337
+ --m-button-hover-bg: color-mix(in srgb, var(--m-color-danger) 85%, black);
1338
+ --m-button-hover-fg: var(--m-color-on-emphasis);
1339
+ --m-button-hover-border: color-mix(
1340
+ in srgb,
1341
+ var(--m-color-danger) 85%,
1342
+ black
1343
+ );
1344
+ --m-button-active-bg: color-mix(
1345
+ in srgb,
1346
+ var(--m-color-danger) 75%,
1347
+ black
1348
+ );
1349
+ }
1350
+
1351
+ .m-button--contrast {
1352
+ --m-button-bg: var(--m-color-contrast);
1353
+ --m-button-fg: var(--m-color-contrast-fg);
1354
+ --m-button-border: var(--m-color-contrast);
1355
+ --m-button-hover-bg: var(--m-color-contrast-hover);
1356
+ --m-button-hover-fg: var(--m-color-contrast-fg);
1357
+ --m-button-hover-border: var(--m-color-contrast-hover);
1358
+ --m-button-active-bg: var(--m-color-contrast-active);
1359
+ }
1360
+
1361
+ .m-button--outlined {
1362
+ --m-button-bg: transparent;
1363
+ --m-button-fg: var(--m-button-border);
1364
+ --m-button-hover-bg: color-mix(
1365
+ in srgb,
1366
+ var(--m-button-border) 10%,
1367
+ transparent
1368
+ );
1369
+ --m-button-hover-fg: var(--m-button-border);
1370
+ --m-button-hover-border: var(--m-button-border);
1371
+ --m-button-active-bg: color-mix(
1372
+ in srgb,
1373
+ var(--m-button-border) 16%,
1374
+ transparent
1375
+ );
1376
+ }
1377
+
1378
+ .m-button--secondary.m-button--outlined {
1379
+ --m-button-border: var(--m-color-border);
1380
+ --m-button-fg: var(--m-color-text);
1381
+ --m-button-hover-fg: var(--m-color-text);
1382
+ }
1383
+
1384
+ .m-button--text,
1385
+ .m-button--link {
1386
+ --m-button-bg: transparent;
1387
+ --m-button-border: transparent;
1388
+ --m-button-fg: var(--m-color-primary);
1389
+ --m-button-hover-bg: color-mix(
1390
+ in srgb,
1391
+ var(--m-color-primary) 10%,
1392
+ transparent
1393
+ );
1394
+ --m-button-hover-fg: var(--m-color-primary);
1395
+ --m-button-hover-border: transparent;
1396
+ --m-button-active-bg: color-mix(
1397
+ in srgb,
1398
+ var(--m-color-primary) 16%,
1399
+ transparent
1400
+ );
1401
+ }
1402
+
1403
+ .m-button--secondary.m-button--text,
1404
+ .m-button--secondary.m-button--link {
1405
+ --m-button-fg: var(--m-color-text-muted);
1406
+ --m-button-hover-bg: color-mix(
1407
+ in srgb,
1408
+ var(--m-color-text-muted) 12%,
1409
+ transparent
1410
+ );
1411
+ --m-button-hover-fg: var(--m-color-text);
1412
+ }
1413
+
1414
+ .m-button--success.m-button--text,
1415
+ .m-button--success.m-button--link,
1416
+ .m-button--success.m-button--outlined {
1417
+ --m-button-fg: var(--m-color-success);
1418
+ --m-button-border: var(--m-color-success);
1419
+ --m-button-hover-bg: color-mix(
1420
+ in srgb,
1421
+ var(--m-color-success) 10%,
1422
+ transparent
1423
+ );
1424
+ --m-button-hover-fg: var(--m-color-success);
1425
+ --m-button-hover-border: var(--m-color-success);
1426
+ }
1427
+
1428
+ .m-button--info.m-button--text,
1429
+ .m-button--info.m-button--link,
1430
+ .m-button--info.m-button--outlined {
1431
+ --m-button-fg: var(--m-color-info);
1432
+ --m-button-border: var(--m-color-info);
1433
+ --m-button-hover-bg: color-mix(
1434
+ in srgb,
1435
+ var(--m-color-info) 10%,
1436
+ transparent
1437
+ );
1438
+ --m-button-hover-fg: var(--m-color-info);
1439
+ --m-button-hover-border: var(--m-color-info);
1440
+ }
1441
+
1442
+ .m-button--warn.m-button--text,
1443
+ .m-button--warn.m-button--link,
1444
+ .m-button--warn.m-button--outlined {
1445
+ --m-button-fg: var(--m-color-warn);
1446
+ --m-button-border: var(--m-color-warn);
1447
+ --m-button-hover-bg: color-mix(
1448
+ in srgb,
1449
+ var(--m-color-warn) 10%,
1450
+ transparent
1451
+ );
1452
+ --m-button-hover-fg: var(--m-color-warn);
1453
+ --m-button-hover-border: var(--m-color-warn);
1454
+ }
1455
+
1456
+ .m-button--help.m-button--text,
1457
+ .m-button--help.m-button--link,
1458
+ .m-button--help.m-button--outlined {
1459
+ --m-button-fg: var(--m-color-help);
1460
+ --m-button-border: var(--m-color-help);
1461
+ --m-button-hover-bg: color-mix(
1462
+ in srgb,
1463
+ var(--m-color-help) 10%,
1464
+ transparent
1465
+ );
1466
+ --m-button-hover-fg: var(--m-color-help);
1467
+ --m-button-hover-border: var(--m-color-help);
1468
+ }
1469
+
1470
+ .m-button--danger.m-button--text,
1471
+ .m-button--danger.m-button--link,
1472
+ .m-button--danger.m-button--outlined {
1473
+ --m-button-fg: var(--m-color-danger);
1474
+ --m-button-border: var(--m-color-danger);
1475
+ --m-button-hover-bg: color-mix(
1476
+ in srgb,
1477
+ var(--m-color-danger) 10%,
1478
+ transparent
1479
+ );
1480
+ --m-button-hover-fg: var(--m-color-danger);
1481
+ --m-button-hover-border: var(--m-color-danger);
1482
+ }
1483
+
1484
+ .m-button--contrast.m-button--text,
1485
+ .m-button--contrast.m-button--link,
1486
+ .m-button--contrast.m-button--outlined {
1487
+ --m-button-fg: var(--m-color-contrast);
1488
+ --m-button-border: var(--m-color-contrast);
1489
+ --m-button-hover-bg: color-mix(
1490
+ in srgb,
1491
+ var(--m-color-contrast) 10%,
1492
+ transparent
1493
+ );
1494
+ --m-button-hover-fg: var(--m-color-contrast);
1495
+ --m-button-hover-border: var(--m-color-contrast);
1496
+ }
1497
+
1498
+ .m-button--plain.m-button--text,
1499
+ .m-button--plain.m-button--outlined,
1500
+ .m-button--plain.m-button--link {
1501
+ --m-button-fg: var(--m-color-text-muted);
1502
+ --m-button-border: var(--m-color-border);
1503
+ --m-button-hover-bg: color-mix(
1504
+ in srgb,
1505
+ var(--m-color-text-muted) 12%,
1506
+ transparent
1507
+ );
1508
+ --m-button-hover-fg: var(--m-color-text);
1509
+ --m-button-hover-border: var(--m-color-border);
1510
+ }
1511
+
1512
+ .m-button--link {
1513
+ height: auto;
1514
+ min-height: 0;
1515
+ padding: 0;
1516
+ }
1517
+
1518
+ .m-button--link:hover:not(:disabled) {
1519
+ text-decoration: underline;
1520
+ }
1521
+
1522
+ .m-button--ghost {
1523
+ --m-button-bg: transparent;
1524
+ --m-button-fg: var(--m-button-border);
1525
+ --m-button-hover-bg: color-mix(
1526
+ in srgb,
1527
+ var(--m-button-border) 12%,
1528
+ transparent
1529
+ );
1530
+ --m-button-hover-fg: var(--m-button-border);
1531
+ --m-button-hover-border: var(--m-button-border);
1532
+ --m-button-active-bg: color-mix(
1533
+ in srgb,
1534
+ var(--m-button-border) 18%,
1535
+ transparent
1536
+ );
1537
+ }
1538
+
1539
+ .m-button--secondary.m-button--ghost {
1540
+ --m-button-border: var(--m-color-border);
1541
+ --m-button-fg: var(--m-color-text);
1542
+ --m-button-hover-fg: var(--m-color-text);
1543
+ }
1544
+
1545
+ .m-button--success.m-button--ghost {
1546
+ --m-button-fg: var(--m-color-success);
1547
+ --m-button-border: var(--m-color-success);
1548
+ }
1549
+
1550
+ .m-button--info.m-button--ghost {
1551
+ --m-button-fg: var(--m-color-info);
1552
+ --m-button-border: var(--m-color-info);
1553
+ }
1554
+
1555
+ .m-button--warn.m-button--ghost {
1556
+ --m-button-fg: var(--m-color-warn);
1557
+ --m-button-border: var(--m-color-warn);
1558
+ }
1559
+
1560
+ .m-button--help.m-button--ghost {
1561
+ --m-button-fg: var(--m-color-help);
1562
+ --m-button-border: var(--m-color-help);
1563
+ }
1564
+
1565
+ .m-button--danger.m-button--ghost {
1566
+ --m-button-fg: var(--m-color-danger);
1567
+ --m-button-border: var(--m-color-danger);
1568
+ }
1569
+
1570
+ .m-button--contrast.m-button--ghost {
1571
+ --m-button-fg: var(--m-color-contrast);
1572
+ --m-button-border: var(--m-color-contrast);
1573
+ }
1574
+
1575
+ .m-button--quaternary {
1576
+ --m-button-bg: transparent;
1577
+ --m-button-border: transparent;
1578
+ --m-button-fg: var(--m-color-text);
1579
+ --m-button-hover-bg: color-mix(
1580
+ in srgb,
1581
+ var(--m-color-text-muted) 10%,
1582
+ transparent
1583
+ );
1584
+ --m-button-hover-fg: var(--m-color-text);
1585
+ --m-button-hover-border: transparent;
1586
+ --m-button-active-bg: color-mix(
1587
+ in srgb,
1588
+ var(--m-color-text-muted) 16%,
1589
+ transparent
1590
+ );
1591
+ }
1592
+
1593
+ .m-button--custom {
1594
+ --m-button-bg: var(--m-button-color);
1595
+ --m-button-fg: var(--m-color-on-emphasis);
1596
+ --m-button-border: var(--m-button-color);
1597
+ --m-button-hover-bg: color-mix(in srgb, var(--m-button-color) 85%, black);
1598
+ --m-button-hover-fg: var(--m-color-on-emphasis);
1599
+ --m-button-hover-border: color-mix(
1600
+ in srgb,
1601
+ var(--m-button-color) 85%,
1602
+ black
1603
+ );
1604
+ --m-button-active-bg: color-mix(
1605
+ in srgb,
1606
+ var(--m-button-color) 75%,
1607
+ black
1608
+ );
1609
+ }
1610
+
1611
+ .m-button--custom.m-button--outlined,
1612
+ .m-button--custom.m-button--ghost,
1613
+ .m-button--custom.m-button--text,
1614
+ .m-button--custom.m-button--quaternary,
1615
+ .m-button--custom.m-button--link {
1616
+ --m-button-bg: transparent;
1617
+ --m-button-fg: var(--m-button-color);
1618
+ --m-button-border: var(--m-button-color);
1619
+ --m-button-hover-bg: color-mix(
1620
+ in srgb,
1621
+ var(--m-button-color) 12%,
1622
+ transparent
1623
+ );
1624
+ --m-button-hover-fg: var(--m-button-color);
1625
+ --m-button-hover-border: var(--m-button-color);
1626
+ }
1627
+
1628
+ .m-button--custom.m-button--text,
1629
+ .m-button--custom.m-button--quaternary,
1630
+ .m-button--custom.m-button--link {
1631
+ --m-button-border: transparent;
1632
+ --m-button-hover-border: transparent;
1633
+ }
1634
+
1635
+ .m-button-group {
1636
+ display: inline-flex;
1637
+ vertical-align: middle;
1638
+ }
1639
+
1640
+ .m-button-group--fluid {
1641
+ display: flex;
1642
+ width: 100%;
1643
+ }
1644
+
1645
+ .m-button-group--fluid > .m-button {
1646
+ flex: 1;
1647
+ }
1648
+
1649
+ .m-button-group > .m-button {
1650
+ border-radius: 0;
1651
+ margin: 0;
1652
+ }
1653
+
1654
+ .m-button-group > .m-button + .m-button {
1655
+ margin-left: -1px;
1656
+ }
1657
+
1658
+ .m-button-group > .m-button:first-child {
1659
+ border-top-left-radius: var(--m-radius-control);
1660
+ border-bottom-left-radius: var(--m-radius-control);
1661
+ }
1662
+
1663
+ .m-button-group > .m-button:last-child {
1664
+ border-top-right-radius: var(--m-radius-control);
1665
+ border-bottom-right-radius: var(--m-radius-control);
1666
+ }
1667
+
1668
+ .m-button--raised {
1669
+ box-shadow: var(--m-shadow-raised);
1670
+ }
1671
+
1672
+ .m-button--raised:focus-visible {
1673
+ box-shadow: var(--m-focus-shadow), var(--m-shadow-raised);
1674
+ }
1675
+
1676
+ .m-button--rounded {
1677
+ border-radius: var(--m-radius-full);
1678
+ }
1679
+
1680
+ .m-button--icon-only {
1681
+ gap: 0;
1682
+ min-width: var(--m-control-height-medium);
1683
+ padding: 0;
1684
+ width: var(--m-control-height-medium);
1685
+ }
1686
+
1687
+ .m-button--icon-only.m-button--small {
1688
+ min-width: var(--m-control-height-small);
1689
+ width: var(--m-control-height-small);
1690
+ }
1691
+
1692
+ .m-button--icon-only.m-button--large {
1693
+ min-width: var(--m-control-height-large);
1694
+ width: var(--m-control-height-large);
1695
+ }
1696
+
1697
+ .m-button--icon-right {
1698
+ flex-direction: row-reverse;
1699
+ }
1700
+
1701
+ .m-button--icon-top {
1702
+ flex-direction: column;
1703
+ min-height: var(--m-button-icon-stack-min-height);
1704
+ padding-block: var(--m-space-2);
1705
+ }
1706
+
1707
+ .m-button--icon-bottom {
1708
+ flex-direction: column-reverse;
1709
+ min-height: var(--m-button-icon-stack-min-height);
1710
+ padding-block: var(--m-space-2);
1711
+ }
1712
+
1713
+ .m-button--fluid {
1714
+ display: flex;
1715
+ width: 100%;
1716
+ }
1717
+
1718
+ .m-button--small {
1719
+ --m-button-icon-size: 0.875rem;
1720
+ font-size: var(--m-control-font-small);
1721
+ min-height: var(--m-control-height-small);
1722
+ padding: 0 var(--m-button-padding-x-small);
1723
+ }
1724
+
1725
+ .m-button--large {
1726
+ --m-button-icon-size: 1.25rem;
1727
+ font-size: var(--m-control-font-large);
1728
+ min-height: var(--m-control-height-large);
1729
+ padding: 0 var(--m-button-padding-x-large);
1730
+ }
1731
+
1732
+ .m-button__icon,
1733
+ .m-button__label {
1734
+ align-items: center;
1735
+ display: inline-flex;
1736
+ justify-content: center;
1737
+ }
1738
+
1739
+ .m-button__icon,
1740
+ .m-button__label,
1741
+ .m-button__badge {
1742
+ position: relative;
1743
+ z-index: 1;
1744
+ }
1745
+
1746
+ .m-button__ripple {
1747
+ border-radius: inherit;
1748
+ inset: 0;
1749
+ overflow: hidden;
1750
+ pointer-events: none;
1751
+ position: absolute;
1752
+ z-index: 0;
1753
+ }
1754
+
1755
+ .m-button__ripple-wave {
1756
+ background: currentColor;
1757
+ border-radius: var(--m-radius-full);
1758
+ opacity: 0;
1759
+ pointer-events: none;
1760
+ position: absolute;
1761
+ transform: scale(0);
1762
+ will-change: transform, opacity;
1763
+ }
1764
+
1765
+ /* Used only when Web Animations API is unavailable. */
1766
+ .m-button__ripple-wave--fallback {
1767
+ animation: m-button-ripple 560ms var(--m-motion-ease) forwards;
1768
+ }
1769
+
1770
+ @keyframes m-button-ripple {
1771
+ 0% {
1772
+ opacity: 0.42;
1773
+ transform: scale(0);
1774
+ }
1775
+ 55% {
1776
+ opacity: 0.22;
1777
+ transform: scale(0.55);
1778
+ }
1779
+ 100% {
1780
+ opacity: 0;
1781
+ transform: scale(1);
1782
+ }
1783
+ }
1784
+
1785
+ .m-button__icon {
1786
+ flex: 0 0 auto;
1787
+ width: var(--m-button-icon-size);
1788
+ height: var(--m-button-icon-size);
1789
+ line-height: 0;
1790
+ }
1791
+
1792
+ .m-button__icon :is(.m-icon, .m-button__icon-graphic, svg) {
1793
+ display: block;
1794
+ flex-shrink: 0;
1795
+ width: 100%;
1796
+ height: 100%;
1797
+ }
1798
+
1799
+ .m-button__icon .m-icon {
1800
+ max-width: 100%;
1801
+ max-height: 100%;
1802
+ }
1803
+
1804
+ .m-button__badge {
1805
+ align-items: center;
1806
+ background: var(--m-color-contrast);
1807
+ border-radius: var(--m-radius-full);
1808
+ color: var(--m-color-contrast-fg);
1809
+ display: inline-flex;
1810
+ font-size: var(--m-font-size-xs);
1811
+ font-weight: 700;
1812
+ justify-content: center;
1813
+ line-height: 1;
1814
+ margin-inline-start: var(--m-space-1);
1815
+ min-width: var(--m-button-badge-min-width);
1816
+ padding: var(--m-space-1) var(--m-space-2);
1817
+ }
1818
+
1819
+ .m-button__badge--secondary {
1820
+ background: color-mix(
1821
+ in srgb,
1822
+ var(--m-color-text-muted) 25%,
1823
+ var(--m-color-surface)
1824
+ );
1825
+ color: var(--m-color-text);
1826
+ }
1827
+
1828
+ .m-button__badge--success {
1829
+ background: var(--m-color-success);
1830
+ color: var(--m-color-on-emphasis);
1831
+ }
1832
+
1833
+ .m-button__badge--info {
1834
+ background: var(--m-color-info);
1835
+ color: var(--m-color-on-emphasis);
1836
+ }
1837
+
1838
+ .m-button__badge--warn {
1839
+ background: var(--m-color-warn);
1840
+ color: var(--m-color-on-emphasis);
1841
+ }
1842
+
1843
+ .m-button__badge--danger {
1844
+ background: var(--m-color-danger);
1845
+ color: var(--m-color-on-emphasis);
1846
+ }
1847
+
1848
+ .m-button__badge--contrast {
1849
+ background: var(--m-color-contrast);
1850
+ color: var(--m-color-contrast-fg);
1851
+ }
1852
+
1853
+ .m-button__spinner {
1854
+ animation: m-button-spin var(--m-motion-spin-fast) linear infinite;
1855
+ border: 2px solid currentColor;
1856
+ border-right-color: transparent;
1857
+ border-radius: var(--m-radius-full);
1858
+ height: var(--m-button-spinner-size);
1859
+ width: var(--m-button-spinner-size);
1860
+ }
1861
+
1862
+ @keyframes m-button-spin {
1863
+ to {
1864
+ transform: rotate(360deg);
1865
+ }
1866
+ }
1867
+
1868
+ [data-m-motion="reduced"] .m-button__spinner,
1869
+ [data-m-motion="none"] .m-button__spinner {
1870
+ animation: none;
1871
+ }
1872
+
1873
+ [data-m-motion="none"] .m-button__ripple-wave {
1874
+ display: none;
1875
+ }
1876
+
1202
1877
  .m-card {
1878
+ --m-card-shadow-rest: var(--m-shadow-raised);
1203
1879
  background: var(--m-color-surface);
1204
1880
  border: var(--m-border-width) solid var(--m-color-border);
1205
1881
  border-radius: var(--m-radius-lg);
1882
+ box-shadow: none;
1206
1883
  color: var(--m-color-text);
1884
+ overflow: visible;
1885
+ }
1886
+
1887
+ .m-card:has(> .m-card__cover) {
1207
1888
  overflow: hidden;
1208
1889
  }
1209
1890
 
@@ -1240,16 +1921,23 @@
1240
1921
  border-color: transparent;
1241
1922
  }
1242
1923
 
1243
- .m-card--hoverable {
1244
- transition: box-shadow var(--m-motion-fast) var(--m-motion-ease), border-color var(--m-motion-fast) var(--m-motion-ease);
1924
+ .m-card--shadow-hover,
1925
+ .m-card--shadow-always {
1926
+ transition:
1927
+ box-shadow var(--m-motion-fast) var(--m-motion-ease),
1928
+ border-color var(--m-motion-fast) var(--m-motion-ease);
1245
1929
  }
1246
1930
 
1247
- .m-card--hoverable:hover {
1248
- border-color: color-mix(in srgb, var(--m-color-primary) 35%, var(--m-color-border));
1249
- box-shadow: var(--m-shadow-md);
1931
+ .m-card--shadow-always {
1932
+ box-shadow: var(--m-card-shadow-rest);
1250
1933
  }
1251
1934
 
1252
- .m-card--hoverable:focus-within {
1935
+ .m-card--shadow-hover:hover {
1936
+ box-shadow: var(--m-card-shadow-rest);
1937
+ }
1938
+
1939
+ .m-card--shadow-hover:focus-within,
1940
+ .m-card--shadow-always:focus-within {
1253
1941
  border-color: var(--m-color-primary-hover);
1254
1942
  box-shadow: var(--m-focus-shadow);
1255
1943
  }
@@ -1267,6 +1955,7 @@
1267
1955
  }
1268
1956
 
1269
1957
  .m-card__cover {
1958
+ border-radius: var(--m-radius-lg) var(--m-radius-lg) 0 0;
1270
1959
  display: block;
1271
1960
  overflow: hidden;
1272
1961
  }
@@ -1276,6 +1965,153 @@
1276
1965
  width: 100%;
1277
1966
  }
1278
1967
 
1968
+ /* —— Feedback: Empty —— */
1969
+ .m-empty {
1970
+ --m-empty-illustration-width: 12.5rem;
1971
+ --m-empty-illustration-height: 6.5rem;
1972
+ --m-empty-max-width: 20rem;
1973
+ --m-empty-icon-size: var(--m-space-8);
1974
+ --m-empty-font-size: var(--m-font-size-md);
1975
+ align-items: center;
1976
+ display: flex;
1977
+ flex-direction: column;
1978
+ font-family: var(--m-font-sans);
1979
+ gap: var(--m-space-2);
1980
+ justify-content: center;
1981
+ padding: calc(var(--m-space-8) + var(--m-space-1)) var(--m-space-5);
1982
+ text-align: center;
1983
+ }
1984
+
1985
+ .m-empty__illustration {
1986
+ align-items: center;
1987
+ color: var(--m-color-text-muted);
1988
+ display: grid;
1989
+ flex-shrink: 0;
1990
+ height: var(--m-empty-illustration-height);
1991
+ justify-items: center;
1992
+ place-items: center;
1993
+ width: var(--m-empty-illustration-width);
1994
+ }
1995
+
1996
+ .m-empty__illustration :is(svg, .m-empty__glyph) {
1997
+ display: block;
1998
+ height: 100%;
1999
+ width: 100%;
2000
+ }
2001
+
2002
+ .m-empty__icon :is(.m-icon, svg),
2003
+ .m-empty__default-icon,
2004
+ .m-empty__default-icon svg {
2005
+ color: inherit;
2006
+ display: block;
2007
+ height: var(--m-empty-icon-size);
2008
+ width: var(--m-empty-icon-size);
2009
+ }
2010
+
2011
+ .m-empty--default-icon .m-empty__illustration {
2012
+ height: var(--m-empty-icon-size);
2013
+ width: var(--m-empty-icon-size);
2014
+ }
2015
+
2016
+ .m-empty__image {
2017
+ display: block;
2018
+ height: auto;
2019
+ max-height: 100%;
2020
+ max-width: 100%;
2021
+ object-fit: contain;
2022
+ }
2023
+
2024
+ .m-empty__illustration:has(.m-empty__image),
2025
+ .m-empty__illustration:has(img) {
2026
+ height: auto;
2027
+ max-height: 10rem;
2028
+ max-width: min(16rem, 100%);
2029
+ width: auto;
2030
+ }
2031
+
2032
+ .m-empty__body {
2033
+ align-items: center;
2034
+ display: flex;
2035
+ flex-direction: column;
2036
+ gap: var(--m-space-1);
2037
+ max-width: var(--m-empty-max-width);
2038
+ }
2039
+
2040
+ .m-empty__title {
2041
+ color: var(--m-color-text);
2042
+ font-size: var(--m-empty-font-size);
2043
+ font-weight: 600;
2044
+ line-height: 1.4;
2045
+ margin: 0;
2046
+ }
2047
+
2048
+ .m-empty__description {
2049
+ color: var(--m-color-text-muted);
2050
+ font-size: var(--m-empty-font-size);
2051
+ line-height: 1.55;
2052
+ margin: 0;
2053
+ }
2054
+
2055
+ .m-empty__extra {
2056
+ align-items: center;
2057
+ display: flex;
2058
+ flex-wrap: wrap;
2059
+ gap: var(--m-space-2);
2060
+ justify-content: center;
2061
+ margin-top: var(--m-space-1);
2062
+ }
2063
+
2064
+ .m-empty--small {
2065
+ --m-empty-illustration-width: 9.5rem;
2066
+ --m-empty-illustration-height: 5rem;
2067
+ --m-empty-icon-size: var(--m-space-6);
2068
+ --m-empty-font-size: var(--m-font-size-sm);
2069
+ padding: var(--m-space-6) var(--m-space-4);
2070
+ }
2071
+
2072
+ .m-empty--large {
2073
+ --m-empty-illustration-width: 15rem;
2074
+ --m-empty-illustration-height: 7.75rem;
2075
+ --m-empty-icon-size: calc(var(--m-space-8) + var(--m-space-2));
2076
+ --m-empty-font-size: var(--m-font-size-lg);
2077
+ padding: calc(var(--m-space-8) + var(--m-space-2)) var(--m-space-6);
2078
+ }
2079
+
2080
+ .m-empty--simple {
2081
+ flex-direction: row;
2082
+ gap: var(--m-space-2);
2083
+ justify-content: flex-start;
2084
+ padding: calc(var(--m-space-3) + var(--m-space-1)) var(--m-space-3);
2085
+ text-align: left;
2086
+ }
2087
+
2088
+ .m-empty--simple .m-empty__illustration {
2089
+ height: calc(var(--m-control-height-large) + var(--m-space-1));
2090
+ width: calc(var(--m-control-height-large) + var(--m-space-1));
2091
+ }
2092
+
2093
+ .m-empty--simple .m-empty__icon :is(.m-icon, svg),
2094
+ .m-empty--simple .m-empty__default-icon,
2095
+ .m-empty--simple .m-empty__default-icon svg {
2096
+ height: var(--m-space-6);
2097
+ width: var(--m-space-6);
2098
+ }
2099
+
2100
+ .m-empty--simple .m-empty__body {
2101
+ align-items: flex-start;
2102
+ max-width: none;
2103
+ }
2104
+
2105
+ .m-empty--simple .m-empty__title,
2106
+ .m-empty--simple .m-empty__description {
2107
+ font-size: var(--m-font-size-sm);
2108
+ }
2109
+
2110
+ .m-empty--simple .m-empty__extra {
2111
+ justify-content: flex-start;
2112
+ margin-top: 0;
2113
+ }
2114
+
1279
2115
  .m-icon {
1280
2116
  color: currentColor;
1281
2117
  display: inline-flex;
@@ -1320,19 +2156,69 @@
1320
2156
  }
1321
2157
  }
1322
2158
 
1323
- @media (prefers-reduced-motion: reduce) {
1324
- html:not([data-m-ignore-reduced-motion]) .m-icon--spin svg {
1325
- animation: none;
2159
+ :root[data-m-motion='none'] .m-icon--spin svg,
2160
+ :root[data-m-motion='reduced'] .m-icon--spin svg {
2161
+ animation: none;
2162
+ }
2163
+
2164
+ .m-skeleton {
2165
+ --m-skeleton-bg: color-mix(in srgb, var(--m-color-text-muted) 14%, var(--m-color-surface));
2166
+ background: var(--m-skeleton-bg);
2167
+ border-radius: var(--m-radius-sm);
2168
+ display: block;
2169
+ overflow: hidden;
2170
+ position: relative;
2171
+ }
2172
+
2173
+ .m-skeleton--circle {
2174
+ border-radius: var(--m-radius-full);
2175
+ }
2176
+
2177
+ .m-skeleton--wave::after {
2178
+ animation: m-skeleton-wave var(--m-motion-skeleton) linear infinite;
2179
+ background: linear-gradient(
2180
+ 90deg,
2181
+ transparent,
2182
+ color-mix(in srgb, var(--m-color-surface) 55%, transparent),
2183
+ transparent
2184
+ );
2185
+ content: "";
2186
+ inset: 0;
2187
+ position: absolute;
2188
+ transform: translateX(-100%);
2189
+ }
2190
+
2191
+ @keyframes m-skeleton-wave {
2192
+ 100% {
2193
+ transform: translateX(100%);
1326
2194
  }
1327
2195
  }
1328
2196
 
1329
- :root[data-m-motion='none'] .m-icon--spin svg,
1330
- :root[data-m-motion='reduced'] .m-icon--spin svg {
2197
+ [data-m-motion="reduced"] .m-skeleton--wave::after,
2198
+ [data-m-motion="none"] .m-skeleton--wave::after {
1331
2199
  animation: none;
1332
2200
  }
2201
+
2202
+ .m-skeleton-repeat {
2203
+ display: grid;
2204
+ gap: var(--m-space-2);
2205
+ width: 100%;
2206
+ }
2207
+
2208
+ .m-skeleton--text {
2209
+ height: 0.85em;
2210
+ }
1333
2211
 
1334
- /* —— Layout: Page —— */
2212
+ /* —— Layout: Page ——
2213
+ * Surface contract (kept in sync with Card / Table / controls):
2214
+ * - Page chrome stays flat: whitespace and type hierarchy, not a second kit.
2215
+ * - Recessive bands (filled filters, muted section) = Table-header fill, no radius.
2216
+ * - Elevated surfaces reuse Card: surface + 1px border + radius-lg, same padding.
2217
+ * - Never invent glow, dashed frames, or pill chips on Ops page chrome.
2218
+ */
1335
2219
  .m-page-content {
2220
+ --m-page-content-body-lead: var(--m-space-2);
2221
+ --m-page-content-tools-pull: var(--m-space-2);
1336
2222
  box-sizing: border-box;
1337
2223
  display: flex;
1338
2224
  flex-direction: column;
@@ -1342,33 +2228,120 @@
1342
2228
  width: 100%;
1343
2229
  }
1344
2230
 
2231
+ .m-page-content > .m-page-header + :is(.m-page-filters, .m-page-toolbar) {
2232
+ margin-top: calc(var(--m-space-1) - var(--m-page-content-gap, var(--m-space-4)));
2233
+ }
2234
+
2235
+ .m-page-content > .m-page-filters + .m-page-toolbar {
2236
+ margin-top: calc(var(--m-page-content-tools-pull) * -1);
2237
+ }
2238
+
2239
+ .m-page-content
2240
+ > :is(.m-page-filters, .m-page-toolbar)
2241
+ + :is(.m-table, .m-grid, .m-page-section:not(.m-page-section--actions)) {
2242
+ margin-top: var(--m-page-content-body-lead);
2243
+ }
2244
+
1345
2245
  .m-page-content--compact {
2246
+ --m-page-content-body-lead: var(--m-space-1);
2247
+ --m-page-content-gap: var(--m-space-3);
1346
2248
  --m-page-content-padding: var(--m-space-4);
2249
+ --m-page-content-tools-pull: var(--m-space-1);
1347
2250
  }
1348
2251
 
1349
2252
  .m-page-content--spacious {
2253
+ --m-page-content-body-lead: var(--m-space-4);
1350
2254
  --m-page-content-gap: var(--m-space-6);
2255
+ --m-page-content-tools-pull: var(--m-space-3);
1351
2256
  }
1352
2257
 
1353
2258
  .m-page-content--narrow {
1354
2259
  max-width: 42rem;
1355
2260
  }
1356
2261
 
2262
+ .m-page-content--bands-uniform {
2263
+ --m-page-content-body-lead: 0;
2264
+ --m-page-content-tools-pull: 0;
2265
+ }
2266
+
2267
+ .m-page-content--bands-uniform > .m-page-header + :is(.m-page-filters, .m-page-toolbar) {
2268
+ margin-top: 0;
2269
+ }
2270
+
2271
+ .m-page-content--bands-uniform
2272
+ > :is(.m-page-filters, .m-page-toolbar)
2273
+ + :is(.m-table, .m-grid, .m-page-section:not(.m-page-section--actions)) {
2274
+ margin-top: 0;
2275
+ }
2276
+
1357
2277
  .m-page-filters {
1358
- background: color-mix(in srgb, var(--m-color-border) 25%, transparent);
1359
- border: var(--m-border-width) solid var(--m-color-border);
1360
- border-radius: var(--m-radius-md);
1361
2278
  box-sizing: border-box;
1362
- padding: var(--m-space-4);
2279
+ display: grid;
2280
+ gap: var(--m-space-3);
2281
+ width: 100%;
2282
+ }
2283
+
2284
+ .m-page-filters__row {
2285
+ align-items: flex-start;
2286
+ display: flex;
2287
+ flex-wrap: wrap;
2288
+ gap: var(--m-space-3);
2289
+ justify-content: space-between;
2290
+ width: 100%;
2291
+ }
2292
+
2293
+ .m-page-filters__controls {
2294
+ flex: 1 1 auto;
2295
+ min-width: 0;
2296
+ }
2297
+
2298
+ .m-page-filters__toggle {
2299
+ flex-shrink: 0;
2300
+ }
2301
+
2302
+ .m-page-filters__advanced {
2303
+ width: 100%;
2304
+ }
2305
+
2306
+ .m-page-filters--filled {
2307
+ background: var(--m-color-fill-light);
2308
+ padding: var(--m-space-3) var(--m-space-4);
2309
+ }
2310
+
2311
+ .m-page-filters--filled .m-page-filters__advanced {
2312
+ padding-top: var(--m-space-1);
2313
+ }
2314
+
2315
+ .m-page-filter-chips {
2316
+ align-items: center;
2317
+ display: flex;
2318
+ flex-wrap: wrap;
2319
+ gap: var(--m-space-2);
1363
2320
  width: 100%;
1364
2321
  }
1365
2322
 
2323
+ .m-page-filter-chips__label {
2324
+ color: var(--m-color-text-muted);
2325
+ flex-shrink: 0;
2326
+ font-size: var(--m-font-size-sm);
2327
+ line-height: 1.4;
2328
+ }
2329
+
2330
+ .m-page-filter-chips__items {
2331
+ align-items: center;
2332
+ display: flex;
2333
+ flex: 1 1 auto;
2334
+ flex-wrap: wrap;
2335
+ gap: var(--m-space-2);
2336
+ min-width: 0;
2337
+ }
2338
+
1366
2339
  .m-page-toolbar {
1367
2340
  align-items: center;
1368
2341
  box-sizing: border-box;
1369
2342
  display: flex;
1370
2343
  flex-wrap: wrap;
1371
- gap: var(--m-space-4);
2344
+ gap: var(--m-space-3);
1372
2345
  justify-content: space-between;
1373
2346
  width: 100%;
1374
2347
  }
@@ -1376,8 +2349,9 @@
1376
2349
  .m-page-toolbar__title {
1377
2350
  color: var(--m-color-text);
1378
2351
  font-family: var(--m-font-sans);
1379
- font-size: var(--m-font-size-lg);
2352
+ font-size: var(--m-font-size-md);
1380
2353
  font-weight: 600;
2354
+ line-height: 1.4;
1381
2355
  margin: 0;
1382
2356
  }
1383
2357
 
@@ -1385,20 +2359,34 @@
1385
2359
  align-items: center;
1386
2360
  display: flex;
1387
2361
  flex-wrap: wrap;
1388
- gap: var(--m-space-3);
2362
+ gap: var(--m-space-2);
2363
+ margin-left: auto;
1389
2364
  }
1390
2365
 
1391
2366
  .m-page-header {
2367
+ align-items: flex-start;
1392
2368
  box-sizing: border-box;
1393
2369
  display: flex;
1394
2370
  flex-wrap: wrap;
1395
- gap: var(--m-space-4);
2371
+ gap: var(--m-space-3);
1396
2372
  justify-content: space-between;
1397
2373
  width: 100%;
1398
2374
  }
1399
2375
 
1400
2376
  .m-page-header__main {
1401
2377
  display: grid;
2378
+ gap: var(--m-space-1);
2379
+ min-width: 0;
2380
+ }
2381
+
2382
+ .m-page-header__breadcrumb {
2383
+ margin: 0 0 var(--m-space-1);
2384
+ }
2385
+
2386
+ .m-page-header__heading {
2387
+ align-items: center;
2388
+ display: flex;
2389
+ flex-wrap: wrap;
1402
2390
  gap: var(--m-space-2);
1403
2391
  min-width: 0;
1404
2392
  }
@@ -1406,22 +2394,34 @@
1406
2394
  .m-page-header__title {
1407
2395
  color: var(--m-color-text);
1408
2396
  font-family: var(--m-font-sans);
1409
- font-size: var(--m-font-size-lg);
2397
+ font-size: var(--m-font-size-xl);
1410
2398
  font-weight: 600;
2399
+ letter-spacing: -0.01em;
2400
+ line-height: 1.4;
1411
2401
  margin: 0;
1412
2402
  }
1413
2403
 
2404
+ .m-page-header__tags {
2405
+ align-items: center;
2406
+ display: inline-flex;
2407
+ flex-wrap: wrap;
2408
+ gap: var(--m-space-2);
2409
+ }
2410
+
1414
2411
  .m-page-header__description {
1415
2412
  color: var(--m-color-text-muted);
1416
2413
  font-size: var(--m-font-size-md);
2414
+ line-height: 1.55;
1417
2415
  margin: 0;
2416
+ max-width: 65ch;
1418
2417
  }
1419
2418
 
1420
2419
  .m-page-header__actions {
1421
2420
  align-items: center;
1422
2421
  display: flex;
2422
+ flex-shrink: 0;
1423
2423
  flex-wrap: wrap;
1424
- gap: var(--m-space-3);
2424
+ gap: var(--m-space-2);
1425
2425
  }
1426
2426
 
1427
2427
  .m-page-section {
@@ -1429,66 +2429,101 @@
1429
2429
  width: 100%;
1430
2430
  }
1431
2431
 
2432
+ .m-page-section__header {
2433
+ align-items: center;
2434
+ display: flex;
2435
+ flex-wrap: wrap;
2436
+ gap: var(--m-space-3);
2437
+ justify-content: space-between;
2438
+ margin: 0 0 var(--m-space-3);
2439
+ }
2440
+
1432
2441
  .m-page-section__title {
1433
2442
  color: var(--m-color-text);
1434
2443
  font-size: var(--m-font-size-md);
1435
2444
  font-weight: 600;
1436
- margin: 0 0 var(--m-space-3);
2445
+ line-height: 1.4;
2446
+ margin: 0;
2447
+ }
2448
+
2449
+ .m-page-section__actions {
2450
+ align-items: center;
2451
+ display: flex;
2452
+ flex-wrap: wrap;
2453
+ gap: var(--m-space-2);
1437
2454
  }
1438
2455
 
1439
2456
  .m-page-section--muted {
1440
- background: color-mix(in srgb, var(--m-color-border) 25%, transparent);
1441
- border: var(--m-border-width) solid var(--m-color-border);
1442
- border-radius: var(--m-radius-md);
2457
+ background: var(--m-color-fill-light);
1443
2458
  padding: var(--m-space-4);
1444
2459
  }
1445
2460
 
1446
- .m-page-section--form {
1447
- background: var(--m-color-surface);
1448
- border: var(--m-border-width) solid var(--m-color-border);
1449
- border-radius: var(--m-radius-md);
1450
- box-shadow: var(--m-shadow-sm);
1451
- padding: var(--m-space-6);
2461
+ .m-page-section--form .m-page-section__header {
2462
+ margin: 0;
2463
+ width: 100%;
1452
2464
  }
1453
2465
 
1454
2466
  .m-page-section--actions {
1455
2467
  border-top: var(--m-border-width) solid var(--m-color-border);
1456
- margin-top: var(--m-space-6);
2468
+ margin-top: var(--m-space-4);
1457
2469
  padding-top: var(--m-space-4);
1458
2470
  }
1459
2471
 
1460
- .m-page-stat {
1461
- box-shadow: var(--m-shadow-sm);
1462
- }
1463
-
1464
2472
  .m-page-stat__body {
1465
- align-items: center;
2473
+ align-items: flex-start;
1466
2474
  display: flex;
1467
- gap: var(--m-space-4);
2475
+ gap: var(--m-space-3);
1468
2476
  justify-content: space-between;
1469
2477
  }
1470
2478
 
2479
+ .m-page-stat__content {
2480
+ display: grid;
2481
+ gap: var(--m-space-1);
2482
+ justify-items: start;
2483
+ min-width: 0;
2484
+ }
2485
+
1471
2486
  .m-page-stat__label {
1472
2487
  color: var(--m-color-text-muted);
1473
2488
  font-size: var(--m-font-size-sm);
2489
+ line-height: 1.4;
1474
2490
  margin: 0;
1475
2491
  }
1476
2492
 
1477
2493
  .m-page-stat__value {
1478
- --m-page-stat-value-size: 1.5rem;
2494
+ --m-page-stat-value-size: var(--m-font-size-2xl);
1479
2495
  color: var(--m-color-text);
1480
2496
  font-family: var(--m-font-sans);
1481
2497
  font-size: var(--m-page-stat-value-size);
1482
- font-weight: 700;
1483
- line-height: 1.2;
1484
- margin: var(--m-space-1) 0;
2498
+ font-variant-numeric: tabular-nums;
2499
+ font-weight: 600;
2500
+ letter-spacing: -0.01em;
2501
+ line-height: 1.25;
2502
+ margin: 0;
2503
+ }
2504
+
2505
+ .m-page-stat__meta {
2506
+ align-items: center;
2507
+ display: flex;
2508
+ flex-wrap: wrap;
2509
+ gap: var(--m-space-2);
1485
2510
  }
1486
2511
 
1487
2512
  .m-page-stat__trend {
2513
+ align-items: center;
2514
+ display: inline-flex;
1488
2515
  font-size: var(--m-font-size-sm);
2516
+ font-weight: 500;
2517
+ gap: var(--m-space-1);
2518
+ line-height: 1.25;
1489
2519
  margin: 0;
1490
2520
  }
1491
2521
 
2522
+ .m-page-stat__trend .m-page-stat__trend-icon {
2523
+ height: var(--m-font-size-sm);
2524
+ width: var(--m-font-size-sm);
2525
+ }
2526
+
1492
2527
  .m-page-stat__trend--primary {
1493
2528
  color: var(--m-color-primary);
1494
2529
  }
@@ -1509,24 +2544,62 @@
1509
2544
  color: var(--m-color-text-muted);
1510
2545
  }
1511
2546
 
2547
+ .m-page-stat__trend-label {
2548
+ color: var(--m-color-text-muted);
2549
+ font-size: var(--m-font-size-sm);
2550
+ }
2551
+
1512
2552
  .m-page-stat__icon {
1513
- color: var(--m-color-primary);
2553
+ align-items: center;
2554
+ color: var(--m-color-text-muted);
2555
+ display: inline-flex;
1514
2556
  flex-shrink: 0;
1515
- opacity: 0.85;
2557
+ justify-content: center;
2558
+ }
2559
+
2560
+ .m-page-stat__icon :is(.m-icon, svg) {
2561
+ display: block;
2562
+ height: 1.25rem;
2563
+ width: 1.25rem;
2564
+ }
2565
+
2566
+ .m-page-stat--compact .m-page-stat__value {
2567
+ --m-page-stat-value-size: var(--m-font-size-xl);
2568
+ }
2569
+
2570
+ .m-page-stat--compact .m-page-stat__icon :is(.m-icon, svg) {
2571
+ height: 1rem;
2572
+ width: 1rem;
2573
+ }
2574
+
2575
+ .m-page-stat--plain {
2576
+ padding: var(--m-space-2) 0;
2577
+ }
2578
+
2579
+ .m-page-stat--inline .m-page-stat__content {
2580
+ align-items: baseline;
2581
+ display: flex;
2582
+ flex-wrap: wrap;
2583
+ gap: var(--m-space-2) var(--m-space-3);
2584
+ row-gap: var(--m-space-1);
2585
+ }
2586
+
2587
+ .m-page-stat--inline .m-page-stat__label {
2588
+ margin: 0;
2589
+ }
2590
+
2591
+ .m-page-stat--inline .m-page-stat__meta {
2592
+ flex-basis: 100%;
1516
2593
  }
1517
2594
 
1518
2595
  .m-page-placeholder {
1519
- align-items: center;
1520
- background: color-mix(in srgb, var(--m-color-border) 15%, transparent);
1521
- border: var(--m-border-width) dashed var(--m-color-border);
1522
- border-radius: var(--m-radius-md);
1523
2596
  box-sizing: border-box;
1524
- color: var(--m-color-text-muted);
1525
- display: grid;
1526
- font-size: var(--m-font-size-sm);
1527
- justify-items: center;
2597
+ display: flex;
1528
2598
  min-height: var(--m-page-placeholder-min-height, 12rem);
1529
- padding: var(--m-space-4);
1530
- text-align: center;
1531
2599
  width: 100%;
1532
2600
  }
2601
+
2602
+ .m-page-placeholder__empty {
2603
+ flex: 1;
2604
+ min-width: 0;
2605
+ }