morya-ui 0.3.1 → 0.3.3

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 (255) hide show
  1. package/CHANGELOG.md +62 -0
  2. package/dist/Button-gBiRj7wz.js +227 -0
  3. package/dist/{Card-Dsmnzong.js → Card-B1CB9Trm.js} +3 -5
  4. package/dist/Empty-C5tndBOm.js +147 -0
  5. package/dist/{FlyoutSubmenu-BrUPmJa1.js → FlyoutSubmenu-H_741alW.js} +2 -2
  6. package/dist/{Loading-BSsRs6v9.js → Loading-qS2Yv_gm.js} +1 -1
  7. package/dist/Pagination-Bvv2qvEK.js +166 -0
  8. package/dist/{Popover-BQ07q4VV.js → Popover-rnZG_ap0.js} +3 -3
  9. package/dist/Select-CiXd074W.js +572 -0
  10. package/dist/Skeleton-DCYdXAH2.js +59 -0
  11. package/dist/{Tooltip-D5DO0B3z.js → Tooltip-B02o9BOW.js} +3 -3
  12. package/dist/accordion/style.css +16 -71
  13. package/dist/auto-complete/index.js +120 -122
  14. package/dist/auto-complete/style.css +6 -82
  15. package/dist/avatar/style.css +6 -67
  16. package/dist/badge/style.css +6 -68
  17. package/dist/block-ui/index.js +1 -1
  18. package/dist/block-ui/style.css +6 -68
  19. package/dist/breadcrumb/style.css +6 -61
  20. package/dist/button/index.js +1 -1
  21. package/dist/button/style.css +345 -118
  22. package/dist/card/index.js +1 -1
  23. package/dist/card/style.css +26 -67
  24. package/dist/carousel/style.css +6 -73
  25. package/dist/cascade-select/index.js +3 -3
  26. package/dist/cascade-select/style.css +6 -75
  27. package/dist/checkbox/style.css +6 -61
  28. package/dist/chip/style.css +6 -67
  29. package/dist/command-menu/index.js +37 -39
  30. package/dist/command-menu/style.css +6 -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 +3 -0
  37. package/dist/components/Button/Button.vue.d.ts.map +1 -1
  38. package/dist/components/Button/styles.css +339 -51
  39. package/dist/components/Button/types.d.ts +11 -2
  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/styles.css +0 -6
  49. package/dist/components/CommandMenu/CommandMenu.vue.d.ts.map +1 -1
  50. package/dist/components/ConfigProvider/ConfigProvider.vue.d.ts +2 -2
  51. package/dist/components/ContextMenu/ContextMenu.vue.d.ts.map +1 -1
  52. package/dist/components/ContextMenu/styles.css +19 -14
  53. package/dist/components/Dialog/styles.css +3 -46
  54. package/dist/components/Dock/styles.css +0 -10
  55. package/dist/components/Drawer/styles.css +2 -51
  56. package/dist/components/Fieldset/styles.css +0 -7
  57. package/dist/components/FileUpload/FileUpload.vue.d.ts.map +1 -1
  58. package/dist/components/FileUpload/fileUtils.d.ts +8 -0
  59. package/dist/components/FileUpload/fileUtils.d.ts.map +1 -0
  60. package/dist/components/Gallery/styles.css +0 -8
  61. package/dist/components/Icon/styles.css +0 -6
  62. package/dist/components/Knob/styles.css +0 -6
  63. package/dist/components/Layout/styles.css +0 -12
  64. package/dist/components/Listbox/Listbox.vue.d.ts.map +1 -1
  65. package/dist/components/Loading/styles.css +0 -16
  66. package/dist/components/Menu/Menu.vue.d.ts.map +1 -1
  67. package/dist/components/Menu/styles.css +4 -11
  68. package/dist/components/Message/styles.css +0 -13
  69. package/dist/components/Page/PageContent.vue.d.ts +2 -1
  70. package/dist/components/Page/PageContent.vue.d.ts.map +1 -1
  71. package/dist/components/Page/PageFilterChips.vue.d.ts +16 -0
  72. package/dist/components/Page/PageFilterChips.vue.d.ts.map +1 -0
  73. package/dist/components/Page/PageFilters.vue.d.ts +15 -3
  74. package/dist/components/Page/PageFilters.vue.d.ts.map +1 -1
  75. package/dist/components/Page/PageHeader.vue.d.ts +8 -4
  76. package/dist/components/Page/PageHeader.vue.d.ts.map +1 -1
  77. package/dist/components/Page/PagePlaceholder.vue.d.ts +6 -2
  78. package/dist/components/Page/PagePlaceholder.vue.d.ts.map +1 -1
  79. package/dist/components/Page/PageSection.vue.d.ts +8 -2
  80. package/dist/components/Page/PageSection.vue.d.ts.map +1 -1
  81. package/dist/components/Page/PageStat.vue.d.ts +8 -3
  82. package/dist/components/Page/PageStat.vue.d.ts.map +1 -1
  83. package/dist/components/Page/index.d.ts +2 -1
  84. package/dist/components/Page/index.d.ts.map +1 -1
  85. package/dist/components/Page/styles.css +239 -44
  86. package/dist/components/Page/types.d.ts +40 -0
  87. package/dist/components/Page/types.d.ts.map +1 -1
  88. package/dist/components/Pagination/Pagination.vue.d.ts.map +1 -1
  89. package/dist/components/Pagination/styles.css +7 -10
  90. package/dist/components/Pagination/types.d.ts +1 -1
  91. package/dist/components/Pagination/types.d.ts.map +1 -1
  92. package/dist/components/Panel/styles.css +0 -7
  93. package/dist/components/Popover/styles.css +21 -79
  94. package/dist/components/ProgressBar/styles.css +0 -9
  95. package/dist/components/ProgressSpinner/styles.css +0 -7
  96. package/dist/components/ScrollTop/styles.css +0 -7
  97. package/dist/components/Scrollbar/styles.css +0 -8
  98. package/dist/components/Select/Select.vue.d.ts +1 -3
  99. package/dist/components/Select/Select.vue.d.ts.map +1 -1
  100. package/dist/components/Select/selectOptions.d.ts +46 -0
  101. package/dist/components/Select/selectOptions.d.ts.map +1 -0
  102. package/dist/components/Select/styles.css +5 -7
  103. package/dist/components/Sidebar/styles.css +0 -6
  104. package/dist/components/Skeleton/styles.css +0 -6
  105. package/dist/components/Status/styles.css +0 -7
  106. package/dist/components/Switch/styles.css +0 -7
  107. package/dist/components/Table/hooks/useExpandableRow.d.ts.map +1 -1
  108. package/dist/components/Table/hooks/useTotalItems.d.ts.map +1 -1
  109. package/dist/components/Table/styles.css +7 -10
  110. package/dist/components/Table/tableQuery.d.ts +30 -0
  111. package/dist/components/Table/tableQuery.d.ts.map +1 -0
  112. package/dist/components/Tree/Tree.vue.d.ts.map +1 -1
  113. package/dist/components/Tree/treeQuery.d.ts +31 -0
  114. package/dist/components/Tree/treeQuery.d.ts.map +1 -0
  115. package/dist/components/TreeSelect/TreeSelect.vue.d.ts.map +1 -1
  116. package/dist/config-provider/index.js +1 -1
  117. package/dist/config-provider/style.css +345 -112
  118. package/dist/confirm-dialog/index.js +2 -2
  119. package/dist/confirm-dialog/style.css +348 -164
  120. package/dist/confirm-popup/index.js +5 -5
  121. package/dist/confirm-popup/style.css +345 -118
  122. package/dist/context-menu/index.js +105 -96
  123. package/dist/context-menu/style.css +25 -89
  124. package/dist/data-view/index.js +2 -2
  125. package/dist/data-view/style.css +13 -87
  126. package/dist/date-picker/index.js +3 -3
  127. package/dist/date-picker/style.css +6 -67
  128. package/dist/dialog/index.js +2 -2
  129. package/dist/dialog/style.css +348 -164
  130. package/dist/divider/style.css +6 -61
  131. package/dist/dock/style.css +6 -77
  132. package/dist/drawer/index.js +1 -1
  133. package/dist/drawer/style.css +8 -118
  134. package/dist/dropdown/index.js +4 -4
  135. package/dist/dropdown/style.css +6 -75
  136. package/dist/empty/index.js +5 -150
  137. package/dist/empty/style.css +6 -67
  138. package/dist/fieldset/style.css +6 -74
  139. package/dist/file-upload/index.js +147 -145
  140. package/dist/file-upload/style.css +6 -67
  141. package/dist/filterByQuery-Bczaxzih.js +17 -0
  142. package/dist/flex/style.css +6 -61
  143. package/dist/float-label/style.css +6 -61
  144. package/dist/fluid/style.css +6 -61
  145. package/dist/form/style.css +6 -61
  146. package/dist/gallery/style.css +6 -83
  147. package/dist/grid/style.css +6 -61
  148. package/dist/icon/style.css +6 -67
  149. package/dist/icon-field/style.css +6 -61
  150. package/dist/index.d.ts +3 -2
  151. package/dist/index.d.ts.map +1 -1
  152. package/dist/index.js +9135 -8796
  153. package/dist/inplace/style.css +6 -61
  154. package/dist/input/style.css +6 -67
  155. package/dist/input-color/style.css +6 -61
  156. package/dist/input-group/style.css +6 -61
  157. package/dist/input-number/style.css +6 -67
  158. package/dist/input-otp/style.css +6 -61
  159. package/dist/input-password/style.css +6 -67
  160. package/dist/input-tags/style.css +6 -67
  161. package/dist/knob/style.css +6 -67
  162. package/dist/label/style.css +6 -61
  163. package/dist/layout/style.css +6 -87
  164. package/dist/listbox/index.js +30 -32
  165. package/dist/listbox/style.css +6 -69
  166. package/dist/loading/index.js +1 -1
  167. package/dist/loading/style.css +6 -77
  168. package/dist/mega-menu/index.js +3 -3
  169. package/dist/mega-menu/style.css +6 -67
  170. package/dist/menu/index.js +268 -258
  171. package/dist/menu/style.css +31 -165
  172. package/dist/menubar/index.js +3 -3
  173. package/dist/menubar/style.css +6 -75
  174. package/dist/message/index.js +1 -1
  175. package/dist/message/style.css +6 -80
  176. package/dist/meter-group/style.css +6 -61
  177. package/dist/order-list/style.css +6 -67
  178. package/dist/{overlayPlacement-Cd20JTD_.js → overlayPlacement-qwEJPVS4.js} +8 -8
  179. package/dist/page/index.js +228 -69
  180. package/dist/page/style.css +1605 -299
  181. package/dist/page/style.js +3 -0
  182. package/dist/pagination/index.js +1 -1
  183. package/dist/pagination/style.css +206 -77
  184. package/dist/pagination/style.js +1 -0
  185. package/dist/panel/style.css +6 -74
  186. package/dist/pick-list/style.css +6 -67
  187. package/dist/popover/index.js +1 -1
  188. package/dist/popover/style.css +27 -140
  189. package/dist/progress-bar/style.css +6 -70
  190. package/dist/progress-spinner/style.css +6 -68
  191. package/dist/radio/style.css +6 -61
  192. package/dist/rating/style.css +6 -67
  193. package/dist/resolver-map.d.ts.map +1 -1
  194. package/dist/resolver.js +1 -0
  195. package/dist/result/style.css +6 -67
  196. package/dist/scroll-top/style.css +6 -82
  197. package/dist/scrollbar/style.css +6 -69
  198. package/dist/select/index.js +2 -545
  199. package/dist/select/style.css +11 -82
  200. package/dist/select-button/style.css +6 -61
  201. package/dist/shared/config.d.ts +2 -2
  202. package/dist/shared/filterByQuery.d.ts +14 -0
  203. package/dist/shared/filterByQuery.d.ts.map +1 -0
  204. package/dist/shared/menu/expand.d.ts +38 -0
  205. package/dist/shared/menu/expand.d.ts.map +1 -0
  206. package/dist/shared/menu/index.d.ts +2 -0
  207. package/dist/shared/menu/index.d.ts.map +1 -1
  208. package/dist/shared/overlayPlacement.d.ts.map +1 -1
  209. package/dist/sidebar/style.css +6 -73
  210. package/dist/skeleton/index.js +2 -59
  211. package/dist/skeleton/style.css +6 -67
  212. package/dist/slider/style.css +6 -61
  213. package/dist/space/style.css +6 -61
  214. package/dist/speed-dial/index.js +3 -3
  215. package/dist/speed-dial/style.css +6 -67
  216. package/dist/split-button/index.js +3 -3
  217. package/dist/split-button/style.css +345 -118
  218. package/dist/splitter/style.css +6 -61
  219. package/dist/status/style.css +6 -74
  220. package/dist/stepper/style.css +6 -67
  221. package/dist/styles/base.css +1 -50
  222. package/dist/styles.css +1 -1
  223. package/dist/switch/style.css +6 -68
  224. package/dist/table/index.js +343 -313
  225. package/dist/table/style.css +20 -111
  226. package/dist/tabs/style.css +6 -75
  227. package/dist/tag/style.css +6 -67
  228. package/dist/terminal/style.css +6 -61
  229. package/dist/textarea/style.css +6 -67
  230. package/dist/theme/motionPresets.d.ts.map +1 -1
  231. package/dist/theme/styles.css +5 -11
  232. package/dist/theme/useMotion.d.ts +5 -1
  233. package/dist/theme/useMotion.d.ts.map +1 -1
  234. package/dist/tiered-menu/index.js +4 -4
  235. package/dist/tiered-menu/style.css +6 -75
  236. package/dist/timeline/style.css +6 -75
  237. package/dist/toast/index.js +1 -1
  238. package/dist/toast/style.css +6 -67
  239. package/dist/toggle-button/style.css +6 -67
  240. package/dist/toolbar/style.css +6 -61
  241. package/dist/tooltip/index.js +1 -1
  242. package/dist/tooltip/style.css +6 -61
  243. package/dist/tree/index.js +158 -172
  244. package/dist/tree/style.css +6 -67
  245. package/dist/tree-select/index.js +201 -215
  246. package/dist/tree-select/style.css +6 -75
  247. package/dist/tree-table/style.css +6 -67
  248. package/dist/treeQuery-CnHkyYOA.js +107 -0
  249. package/dist/{useFloatingViewportSync-DZdJ7W8n.js → useFloatingViewportSync-wLLKIGUA.js} +4 -1
  250. package/dist/{useMotionTransition-Bxnnb_9u.js → useMotionTransition-95Y79FoL.js} +1 -1
  251. package/dist/virtual-scroller/style.css +6 -69
  252. package/package.json +2 -1
  253. package/dist/Button-smoDleh0.js +0 -156
  254. package/dist/Pagination-DrXmzcEy.js +0 -158
  255. package/dist/checkStrategy-CZzuUKDI.js +0 -63
@@ -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,
@@ -615,7 +609,7 @@
615
609
  .m-zoom-enter-from,
616
610
  .m-zoom-leave-to {
617
611
  opacity: 0;
618
- transform: scale(0.9);
612
+ transform: scale(0.95);
619
613
  }
620
614
 
621
615
  .m-slide-up-enter-active,
@@ -660,44 +654,6 @@
660
654
  transform: translateX(calc(var(--m-motion-distance) * -1));
661
655
  }
662
656
 
663
- @media (prefers-reduced-motion: reduce) {
664
- html:not([data-m-ignore-reduced-motion]) .m-fade-enter-active,
665
- html:not([data-m-ignore-reduced-motion]) .m-fade-leave-active,
666
- html:not([data-m-ignore-reduced-motion]) .m-scale-fade-enter-active,
667
- html:not([data-m-ignore-reduced-motion]) .m-scale-fade-leave-active,
668
- html:not([data-m-ignore-reduced-motion]) .m-slide-fade-enter-active,
669
- html:not([data-m-ignore-reduced-motion]) .m-slide-fade-leave-active,
670
- html:not([data-m-ignore-reduced-motion]) .m-zoom-enter-active,
671
- html:not([data-m-ignore-reduced-motion]) .m-zoom-leave-active,
672
- html:not([data-m-ignore-reduced-motion]) .m-slide-up-enter-active,
673
- html:not([data-m-ignore-reduced-motion]) .m-slide-up-leave-active,
674
- html:not([data-m-ignore-reduced-motion]) .m-slide-down-enter-active,
675
- html:not([data-m-ignore-reduced-motion]) .m-slide-down-leave-active,
676
- html:not([data-m-ignore-reduced-motion]) .m-slide-left-enter-active,
677
- html:not([data-m-ignore-reduced-motion]) .m-slide-left-leave-active,
678
- html:not([data-m-ignore-reduced-motion]) .m-slide-right-enter-active,
679
- html:not([data-m-ignore-reduced-motion]) .m-slide-right-leave-active {
680
- transition: none;
681
- }
682
-
683
- html:not([data-m-ignore-reduced-motion]) .m-scale-fade-enter-from,
684
- html:not([data-m-ignore-reduced-motion]) .m-scale-fade-leave-to,
685
- html:not([data-m-ignore-reduced-motion]) .m-slide-fade-enter-from,
686
- html:not([data-m-ignore-reduced-motion]) .m-slide-fade-leave-to,
687
- html:not([data-m-ignore-reduced-motion]) .m-zoom-enter-from,
688
- html:not([data-m-ignore-reduced-motion]) .m-zoom-leave-to,
689
- html:not([data-m-ignore-reduced-motion]) .m-slide-up-enter-from,
690
- html:not([data-m-ignore-reduced-motion]) .m-slide-up-leave-to,
691
- html:not([data-m-ignore-reduced-motion]) .m-slide-down-enter-from,
692
- html:not([data-m-ignore-reduced-motion]) .m-slide-down-leave-to,
693
- html:not([data-m-ignore-reduced-motion]) .m-slide-left-enter-from,
694
- html:not([data-m-ignore-reduced-motion]) .m-slide-left-leave-to,
695
- html:not([data-m-ignore-reduced-motion]) .m-slide-right-enter-from,
696
- html:not([data-m-ignore-reduced-motion]) .m-slide-right-leave-to {
697
- transform: none;
698
- }
699
- }
700
-
701
657
  [data-m-motion="reduced"] .m-fade-enter-active,
702
658
  [data-m-motion="reduced"] .m-fade-leave-active,
703
659
  [data-m-motion="reduced"] .m-scale-fade-enter-active,
@@ -1192,307 +1148,1619 @@
1192
1148
  animation: none !important;
1193
1149
  }
1194
1150
 
1195
- @media (prefers-reduced-motion: reduce) {
1196
- html:not([data-m-ignore-reduced-motion]) *,
1197
- html:not([data-m-ignore-reduced-motion]) *::before,
1198
- html:not([data-m-ignore-reduced-motion]) *::after {
1199
- animation-duration: 0.01ms !important;
1200
- animation-iteration-count: 1 !important;
1201
- scroll-behavior: auto !important;
1202
- transition-duration: 0.01ms !important;
1203
- }
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;
1204
1200
  }
1205
1201
 
1206
- .m-card {
1207
- background: var(--m-color-surface);
1208
- border: var(--m-border-width) solid var(--m-color-border);
1209
- border-radius: var(--m-radius-lg);
1210
- color: var(--m-color-text);
1211
- overflow: hidden;
1212
- }
1213
-
1214
- .m-card__header,
1215
- .m-card__body,
1216
- .m-card__footer {
1217
- padding: var(--m-space-4);
1218
- }
1219
-
1220
- .m-card__header,
1221
- .m-card__footer {
1222
- border-bottom: var(--m-border-width) solid var(--m-color-border);
1223
- }
1224
-
1225
- .m-card__footer {
1226
- border-bottom: 0;
1227
- border-top: var(--m-border-width) solid var(--m-color-border);
1228
- }
1229
-
1230
- .m-card__title {
1231
- font-family: var(--m-font-sans);
1232
- font-size: var(--m-font-size-lg);
1233
- font-weight: 600;
1234
- margin: 0;
1235
- }
1236
-
1237
- .m-card__subtitle {
1238
- color: var(--m-color-text-muted);
1239
- font-size: var(--m-font-size-md);
1240
- margin: var(--m-space-1) 0 0;
1241
- }
1242
-
1243
- .m-card--borderless {
1244
- border-color: transparent;
1245
- }
1246
-
1247
- .m-card--hoverable {
1248
- transition: box-shadow var(--m-motion-fast) var(--m-motion-ease), border-color var(--m-motion-fast) var(--m-motion-ease);
1249
- }
1250
-
1251
- .m-card--hoverable:hover {
1252
- border-color: color-mix(in srgb, var(--m-color-primary) 35%, var(--m-color-border));
1253
- box-shadow: var(--m-shadow-md);
1254
- }
1255
-
1256
- .m-card--hoverable:focus-within {
1257
- border-color: var(--m-color-primary-hover);
1258
- box-shadow: var(--m-focus-shadow);
1259
- }
1260
-
1261
- .m-card--small .m-card__header,
1262
- .m-card--small .m-card__body,
1263
- .m-card--small .m-card__footer {
1264
- padding: var(--m-space-3);
1265
- }
1266
-
1267
- .m-card--large .m-card__header,
1268
- .m-card--large .m-card__body,
1269
- .m-card--large .m-card__footer {
1270
- padding: var(--m-space-5);
1271
- }
1272
-
1273
- .m-card__cover {
1274
- display: block;
1275
- overflow: hidden;
1276
- }
1277
-
1278
- .m-card__cover img {
1279
- display: block;
1280
- width: 100%;
1281
- }
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);
1207
+ }
1208
+ }
1282
1209
 
1283
- .m-icon {
1284
- color: currentColor;
1285
- display: inline-flex;
1286
- flex-shrink: 0;
1287
- height: 1rem;
1288
- line-height: 0;
1289
- vertical-align: middle;
1290
- width: 1rem;
1291
- }
1292
-
1293
- .m-icon svg {
1294
- display: block;
1295
- height: 100%;
1296
- width: 100%;
1297
- }
1298
-
1299
- .m-icon--sm,
1300
- .m-icon--small {
1301
- height: 0.875rem;
1302
- width: 0.875rem;
1303
- }
1304
-
1305
- .m-icon--md,
1306
- .m-icon--normal {
1307
- height: 1rem;
1308
- width: 1rem;
1309
- }
1310
-
1311
- .m-icon--lg,
1312
- .m-icon--large {
1313
- height: 1.25rem;
1314
- width: 1.25rem;
1315
- }
1316
-
1317
- .m-icon--spin svg {
1318
- animation: m-icon-spin var(--m-motion-spin-fast) linear infinite;
1319
- }
1320
-
1321
- @keyframes m-icon-spin {
1322
- to {
1323
- transform: rotate(360deg);
1324
- }
1325
- }
1326
-
1327
- @media (prefers-reduced-motion: reduce) {
1328
- html:not([data-m-ignore-reduced-motion]) .m-icon--spin svg {
1329
- animation: none;
1330
- }
1331
- }
1332
-
1333
- :root[data-m-motion='none'] .m-icon--spin svg,
1334
- :root[data-m-motion='reduced'] .m-icon--spin svg {
1335
- animation: none;
1336
- }
1210
+ .m-button:active:not(:disabled) {
1211
+ background: var(--m-button-active-bg);
1212
+ }
1337
1213
 
1338
- /* —— Layout: Page —— */
1339
- .m-page-content {
1340
- box-sizing: border-box;
1341
- display: flex;
1342
- flex-direction: column;
1343
- font-family: var(--m-font-sans);
1344
- gap: var(--m-page-content-gap, var(--m-space-4));
1345
- padding: var(--m-page-content-padding, var(--m-space-6));
1346
- width: 100%;
1214
+ .m-button--press:active:not(:disabled) {
1215
+ transform: scale(0.97);
1347
1216
  }
1348
1217
 
1349
- .m-page-content--compact {
1350
- --m-page-content-padding: var(--m-space-4);
1218
+ /* Naive-style focus: soft glow, not outline-offset ring */
1219
+ .m-button:focus {
1220
+ outline: none;
1351
1221
  }
1352
1222
 
1353
- .m-page-content--spacious {
1354
- --m-page-content-gap: var(--m-space-6);
1223
+ .m-button:focus-visible {
1224
+ box-shadow: var(--m-focus-shadow);
1225
+ outline: none;
1355
1226
  }
1356
1227
 
1357
- .m-page-content--narrow {
1358
- max-width: 42rem;
1228
+ .m-button:disabled {
1229
+ cursor: not-allowed;
1230
+ opacity: var(--m-opacity-disabled);
1359
1231
  }
1360
1232
 
1361
- .m-page-filters {
1362
- background: color-mix(in srgb, var(--m-color-border) 25%, transparent);
1363
- border: var(--m-border-width) solid var(--m-color-border);
1364
- border-radius: var(--m-radius-md);
1365
- box-sizing: border-box;
1366
- padding: var(--m-space-4);
1367
- width: 100%;
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
+ );
1368
1245
  }
1369
1246
 
1370
- .m-page-toolbar {
1371
- align-items: center;
1372
- box-sizing: border-box;
1373
- display: flex;
1374
- flex-wrap: wrap;
1375
- gap: var(--m-space-4);
1376
- justify-content: space-between;
1377
- width: 100%;
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
+ );
1378
1267
  }
1379
1268
 
1380
- .m-page-toolbar__title {
1381
- color: var(--m-color-text);
1382
- font-family: var(--m-font-sans);
1383
- font-size: var(--m-font-size-lg);
1384
- font-weight: 600;
1385
- margin: 0;
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
+ );
1386
1289
  }
1387
1290
 
1388
- .m-page-toolbar__actions {
1389
- align-items: center;
1390
- display: flex;
1391
- flex-wrap: wrap;
1392
- gap: var(--m-space-3);
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
+ );
1393
1349
  }
1394
1350
 
1395
- .m-page-header {
1396
- box-sizing: border-box;
1397
- display: flex;
1398
- flex-wrap: wrap;
1399
- gap: var(--m-space-4);
1400
- justify-content: space-between;
1401
- width: 100%;
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);
1402
1359
  }
1403
1360
 
1404
- .m-page-header__main {
1405
- display: grid;
1406
- gap: var(--m-space-2);
1407
- min-width: 0;
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
+ );
1408
1376
  }
1409
1377
 
1410
- .m-page-header__title {
1411
- color: var(--m-color-text);
1412
- font-family: var(--m-font-sans);
1413
- font-size: var(--m-font-size-lg);
1414
- font-weight: 600;
1415
- margin: 0;
1378
+ /* Idle matches outlined hover; hover/active deepen the tint. */
1379
+ .m-button--plain {
1380
+ --m-button-bg: color-mix(
1381
+ in srgb,
1382
+ var(--m-button-border) 10%,
1383
+ transparent
1384
+ );
1385
+ --m-button-fg: var(--m-button-border);
1386
+ --m-button-hover-bg: color-mix(
1387
+ in srgb,
1388
+ var(--m-button-border) 16%,
1389
+ transparent
1390
+ );
1391
+ --m-button-hover-fg: var(--m-button-border);
1392
+ --m-button-hover-border: var(--m-button-border);
1393
+ --m-button-active-bg: color-mix(
1394
+ in srgb,
1395
+ var(--m-button-border) 22%,
1396
+ transparent
1397
+ );
1416
1398
  }
1417
1399
 
1418
- .m-page-header__description {
1419
- color: var(--m-color-text-muted);
1420
- font-size: var(--m-font-size-md);
1421
- margin: 0;
1400
+ .m-button--secondary.m-button--outlined,
1401
+ .m-button--secondary.m-button--plain {
1402
+ --m-button-border: var(--m-color-border);
1403
+ --m-button-fg: var(--m-color-text);
1404
+ --m-button-hover-fg: var(--m-color-text);
1422
1405
  }
1423
1406
 
1424
- .m-page-header__actions {
1425
- align-items: center;
1426
- display: flex;
1427
- flex-wrap: wrap;
1428
- gap: var(--m-space-3);
1407
+ .m-button--text,
1408
+ .m-button--link {
1409
+ --m-button-bg: transparent;
1410
+ --m-button-border: transparent;
1411
+ --m-button-fg: var(--m-color-primary);
1412
+ --m-button-hover-fg: var(--m-color-primary);
1413
+ --m-button-hover-border: transparent;
1429
1414
  }
1430
1415
 
1431
- .m-page-section {
1432
- box-sizing: border-box;
1433
- width: 100%;
1416
+ .m-button--text {
1417
+ --m-button-hover-bg: color-mix(
1418
+ in srgb,
1419
+ var(--m-color-primary) 10%,
1420
+ transparent
1421
+ );
1422
+ --m-button-active-bg: color-mix(
1423
+ in srgb,
1424
+ var(--m-color-primary) 16%,
1425
+ transparent
1426
+ );
1434
1427
  }
1435
1428
 
1436
- .m-page-section__title {
1437
- color: var(--m-color-text);
1438
- font-size: var(--m-font-size-md);
1439
- font-weight: 600;
1440
- margin: 0 0 var(--m-space-3);
1429
+ .m-button--link {
1430
+ --m-button-bg: transparent;
1431
+ --m-button-hover-bg: transparent;
1432
+ --m-button-active-bg: transparent;
1433
+ height: auto;
1434
+ min-height: 0;
1435
+ padding: 0;
1441
1436
  }
1442
1437
 
1443
- .m-page-section--muted {
1444
- background: color-mix(in srgb, var(--m-color-border) 25%, transparent);
1445
- border: var(--m-border-width) solid var(--m-color-border);
1446
- border-radius: var(--m-radius-md);
1447
- padding: var(--m-space-4);
1438
+ .m-button--link.m-button--link-underline:hover:not(:disabled) {
1439
+ text-decoration: underline;
1448
1440
  }
1449
1441
 
1450
- .m-page-section--form {
1451
- background: var(--m-color-surface);
1452
- border: var(--m-border-width) solid var(--m-color-border);
1453
- border-radius: var(--m-radius-md);
1454
- box-shadow: var(--m-shadow-sm);
1455
- padding: var(--m-space-6);
1442
+ .m-button--link:not(.m-button--link-underline):hover:not(:disabled) {
1443
+ opacity: 0.8;
1456
1444
  }
1457
1445
 
1458
- .m-page-section--actions {
1459
- border-top: var(--m-border-width) solid var(--m-color-border);
1460
- margin-top: var(--m-space-6);
1461
- padding-top: var(--m-space-4);
1446
+ .m-button--secondary.m-button--text {
1447
+ --m-button-fg: var(--m-color-text-muted);
1448
+ --m-button-hover-bg: color-mix(
1449
+ in srgb,
1450
+ var(--m-color-text-muted) 12%,
1451
+ transparent
1452
+ );
1453
+ --m-button-hover-fg: var(--m-color-text);
1462
1454
  }
1463
1455
 
1464
- .m-page-stat {
1465
- box-shadow: var(--m-shadow-sm);
1456
+ .m-button--secondary.m-button--link {
1457
+ --m-button-fg: var(--m-color-text-muted);
1458
+ --m-button-hover-fg: var(--m-color-text);
1466
1459
  }
1467
1460
 
1468
- .m-page-stat__body {
1461
+ .m-button--success.m-button--text,
1462
+ .m-button--success.m-button--outlined {
1463
+ --m-button-fg: var(--m-color-success);
1464
+ --m-button-border: var(--m-color-success);
1465
+ --m-button-hover-bg: color-mix(
1466
+ in srgb,
1467
+ var(--m-color-success) 10%,
1468
+ transparent
1469
+ );
1470
+ --m-button-hover-fg: var(--m-color-success);
1471
+ --m-button-hover-border: var(--m-color-success);
1472
+ }
1473
+
1474
+ .m-button--success.m-button--link {
1475
+ --m-button-fg: var(--m-color-success);
1476
+ --m-button-hover-fg: var(--m-color-success);
1477
+ }
1478
+
1479
+ .m-button--info.m-button--text,
1480
+ .m-button--info.m-button--outlined {
1481
+ --m-button-fg: var(--m-color-info);
1482
+ --m-button-border: var(--m-color-info);
1483
+ --m-button-hover-bg: color-mix(
1484
+ in srgb,
1485
+ var(--m-color-info) 10%,
1486
+ transparent
1487
+ );
1488
+ --m-button-hover-fg: var(--m-color-info);
1489
+ --m-button-hover-border: var(--m-color-info);
1490
+ }
1491
+
1492
+ .m-button--info.m-button--link {
1493
+ --m-button-fg: var(--m-color-info);
1494
+ --m-button-hover-fg: var(--m-color-info);
1495
+ }
1496
+
1497
+ .m-button--warn.m-button--text,
1498
+ .m-button--warn.m-button--outlined {
1499
+ --m-button-fg: var(--m-color-warn);
1500
+ --m-button-border: var(--m-color-warn);
1501
+ --m-button-hover-bg: color-mix(
1502
+ in srgb,
1503
+ var(--m-color-warn) 10%,
1504
+ transparent
1505
+ );
1506
+ --m-button-hover-fg: var(--m-color-warn);
1507
+ --m-button-hover-border: var(--m-color-warn);
1508
+ }
1509
+
1510
+ .m-button--warn.m-button--link {
1511
+ --m-button-fg: var(--m-color-warn);
1512
+ --m-button-hover-fg: var(--m-color-warn);
1513
+ }
1514
+
1515
+ .m-button--help.m-button--text,
1516
+ .m-button--help.m-button--outlined {
1517
+ --m-button-fg: var(--m-color-help);
1518
+ --m-button-border: var(--m-color-help);
1519
+ --m-button-hover-bg: color-mix(
1520
+ in srgb,
1521
+ var(--m-color-help) 10%,
1522
+ transparent
1523
+ );
1524
+ --m-button-hover-fg: var(--m-color-help);
1525
+ --m-button-hover-border: var(--m-color-help);
1526
+ }
1527
+
1528
+ .m-button--help.m-button--link {
1529
+ --m-button-fg: var(--m-color-help);
1530
+ --m-button-hover-fg: var(--m-color-help);
1531
+ }
1532
+
1533
+ .m-button--danger.m-button--text,
1534
+ .m-button--danger.m-button--outlined {
1535
+ --m-button-fg: var(--m-color-danger);
1536
+ --m-button-border: var(--m-color-danger);
1537
+ --m-button-hover-bg: color-mix(
1538
+ in srgb,
1539
+ var(--m-color-danger) 10%,
1540
+ transparent
1541
+ );
1542
+ --m-button-hover-fg: var(--m-color-danger);
1543
+ --m-button-hover-border: var(--m-color-danger);
1544
+ }
1545
+
1546
+ .m-button--danger.m-button--link {
1547
+ --m-button-fg: var(--m-color-danger);
1548
+ --m-button-hover-fg: var(--m-color-danger);
1549
+ }
1550
+
1551
+ .m-button--contrast.m-button--text,
1552
+ .m-button--contrast.m-button--outlined {
1553
+ --m-button-fg: var(--m-color-contrast);
1554
+ --m-button-border: var(--m-color-contrast);
1555
+ --m-button-hover-bg: color-mix(
1556
+ in srgb,
1557
+ var(--m-color-contrast) 10%,
1558
+ transparent
1559
+ );
1560
+ --m-button-hover-fg: var(--m-color-contrast);
1561
+ --m-button-hover-border: var(--m-color-contrast);
1562
+ }
1563
+
1564
+ .m-button--contrast.m-button--link {
1565
+ --m-button-fg: var(--m-color-contrast);
1566
+ --m-button-hover-fg: var(--m-color-contrast);
1567
+ }
1568
+
1569
+ .m-button--plain.m-button--text,
1570
+ .m-button--plain.m-button--outlined {
1571
+ --m-button-bg: transparent;
1572
+ --m-button-fg: var(--m-color-text-muted);
1573
+ --m-button-border: var(--m-color-border);
1574
+ --m-button-hover-bg: color-mix(
1575
+ in srgb,
1576
+ var(--m-color-text-muted) 12%,
1577
+ transparent
1578
+ );
1579
+ --m-button-hover-fg: var(--m-color-text);
1580
+ --m-button-hover-border: var(--m-color-border);
1581
+ --m-button-active-bg: color-mix(
1582
+ in srgb,
1583
+ var(--m-color-text-muted) 18%,
1584
+ transparent
1585
+ );
1586
+ }
1587
+
1588
+ .m-button--plain.m-button--link {
1589
+ --m-button-fg: var(--m-color-text-muted);
1590
+ --m-button-hover-fg: var(--m-color-text);
1591
+ }
1592
+
1593
+ .m-button--ghost {
1594
+ --m-button-bg: color-mix(
1595
+ in srgb,
1596
+ var(--m-color-primary) 10%,
1597
+ transparent
1598
+ );
1599
+ --m-button-border: transparent;
1600
+ --m-button-fg: var(--m-color-primary);
1601
+ --m-button-hover-bg: color-mix(
1602
+ in srgb,
1603
+ var(--m-color-primary) 16%,
1604
+ transparent
1605
+ );
1606
+ --m-button-hover-fg: var(--m-color-primary);
1607
+ --m-button-hover-border: transparent;
1608
+ --m-button-active-bg: color-mix(
1609
+ in srgb,
1610
+ var(--m-color-primary) 22%,
1611
+ transparent
1612
+ );
1613
+ }
1614
+
1615
+ .m-button--secondary.m-button--ghost {
1616
+ --m-button-bg: color-mix(
1617
+ in srgb,
1618
+ var(--m-color-text-muted) 12%,
1619
+ transparent
1620
+ );
1621
+ --m-button-fg: var(--m-color-text);
1622
+ --m-button-hover-bg: color-mix(
1623
+ in srgb,
1624
+ var(--m-color-text-muted) 18%,
1625
+ transparent
1626
+ );
1627
+ --m-button-hover-fg: var(--m-color-text);
1628
+ --m-button-active-bg: color-mix(
1629
+ in srgb,
1630
+ var(--m-color-text-muted) 24%,
1631
+ transparent
1632
+ );
1633
+ }
1634
+
1635
+ .m-button--success.m-button--ghost {
1636
+ --m-button-bg: color-mix(
1637
+ in srgb,
1638
+ var(--m-color-success) 10%,
1639
+ transparent
1640
+ );
1641
+ --m-button-fg: var(--m-color-success);
1642
+ --m-button-hover-bg: color-mix(
1643
+ in srgb,
1644
+ var(--m-color-success) 16%,
1645
+ transparent
1646
+ );
1647
+ --m-button-hover-fg: var(--m-color-success);
1648
+ --m-button-active-bg: color-mix(
1649
+ in srgb,
1650
+ var(--m-color-success) 22%,
1651
+ transparent
1652
+ );
1653
+ }
1654
+
1655
+ .m-button--info.m-button--ghost {
1656
+ --m-button-bg: color-mix(
1657
+ in srgb,
1658
+ var(--m-color-info) 10%,
1659
+ transparent
1660
+ );
1661
+ --m-button-fg: var(--m-color-info);
1662
+ --m-button-hover-bg: color-mix(
1663
+ in srgb,
1664
+ var(--m-color-info) 16%,
1665
+ transparent
1666
+ );
1667
+ --m-button-hover-fg: var(--m-color-info);
1668
+ --m-button-active-bg: color-mix(
1669
+ in srgb,
1670
+ var(--m-color-info) 22%,
1671
+ transparent
1672
+ );
1673
+ }
1674
+
1675
+ .m-button--warn.m-button--ghost {
1676
+ --m-button-bg: color-mix(
1677
+ in srgb,
1678
+ var(--m-color-warn) 10%,
1679
+ transparent
1680
+ );
1681
+ --m-button-fg: var(--m-color-warn);
1682
+ --m-button-hover-bg: color-mix(
1683
+ in srgb,
1684
+ var(--m-color-warn) 16%,
1685
+ transparent
1686
+ );
1687
+ --m-button-hover-fg: var(--m-color-warn);
1688
+ --m-button-active-bg: color-mix(
1689
+ in srgb,
1690
+ var(--m-color-warn) 22%,
1691
+ transparent
1692
+ );
1693
+ }
1694
+
1695
+ .m-button--help.m-button--ghost {
1696
+ --m-button-bg: color-mix(
1697
+ in srgb,
1698
+ var(--m-color-help) 10%,
1699
+ transparent
1700
+ );
1701
+ --m-button-fg: var(--m-color-help);
1702
+ --m-button-hover-bg: color-mix(
1703
+ in srgb,
1704
+ var(--m-color-help) 16%,
1705
+ transparent
1706
+ );
1707
+ --m-button-hover-fg: var(--m-color-help);
1708
+ --m-button-active-bg: color-mix(
1709
+ in srgb,
1710
+ var(--m-color-help) 22%,
1711
+ transparent
1712
+ );
1713
+ }
1714
+
1715
+ .m-button--danger.m-button--ghost {
1716
+ --m-button-bg: color-mix(
1717
+ in srgb,
1718
+ var(--m-color-danger) 10%,
1719
+ transparent
1720
+ );
1721
+ --m-button-fg: var(--m-color-danger);
1722
+ --m-button-hover-bg: color-mix(
1723
+ in srgb,
1724
+ var(--m-color-danger) 16%,
1725
+ transparent
1726
+ );
1727
+ --m-button-hover-fg: var(--m-color-danger);
1728
+ --m-button-active-bg: color-mix(
1729
+ in srgb,
1730
+ var(--m-color-danger) 22%,
1731
+ transparent
1732
+ );
1733
+ }
1734
+
1735
+ .m-button--contrast.m-button--ghost {
1736
+ --m-button-bg: color-mix(
1737
+ in srgb,
1738
+ var(--m-color-contrast) 10%,
1739
+ transparent
1740
+ );
1741
+ --m-button-fg: var(--m-color-contrast);
1742
+ --m-button-hover-bg: color-mix(
1743
+ in srgb,
1744
+ var(--m-color-contrast) 16%,
1745
+ transparent
1746
+ );
1747
+ --m-button-hover-fg: var(--m-color-contrast);
1748
+ --m-button-active-bg: color-mix(
1749
+ in srgb,
1750
+ var(--m-color-contrast) 22%,
1751
+ transparent
1752
+ );
1753
+ }
1754
+
1755
+ .m-button--quaternary {
1756
+ --m-button-bg: transparent;
1757
+ --m-button-border: transparent;
1758
+ --m-button-fg: var(--m-color-text);
1759
+ --m-button-hover-bg: color-mix(
1760
+ in srgb,
1761
+ var(--m-color-text-muted) 10%,
1762
+ transparent
1763
+ );
1764
+ --m-button-hover-fg: var(--m-color-text);
1765
+ --m-button-hover-border: transparent;
1766
+ --m-button-active-bg: color-mix(
1767
+ in srgb,
1768
+ var(--m-color-text-muted) 16%,
1769
+ transparent
1770
+ );
1771
+ }
1772
+
1773
+ .m-button--custom {
1774
+ --m-button-bg: var(--m-button-color);
1775
+ --m-button-fg: var(--m-color-on-emphasis);
1776
+ --m-button-border: var(--m-button-color);
1777
+ --m-button-hover-bg: color-mix(in srgb, var(--m-button-color) 85%, black);
1778
+ --m-button-hover-fg: var(--m-color-on-emphasis);
1779
+ --m-button-hover-border: color-mix(
1780
+ in srgb,
1781
+ var(--m-button-color) 85%,
1782
+ black
1783
+ );
1784
+ --m-button-active-bg: color-mix(
1785
+ in srgb,
1786
+ var(--m-button-color) 75%,
1787
+ black
1788
+ );
1789
+ }
1790
+
1791
+ .m-button--custom.m-button--outlined {
1792
+ --m-button-bg: transparent;
1793
+ --m-button-fg: var(--m-button-color);
1794
+ --m-button-border: var(--m-button-color);
1795
+ --m-button-hover-bg: color-mix(
1796
+ in srgb,
1797
+ var(--m-button-color) 12%,
1798
+ transparent
1799
+ );
1800
+ --m-button-hover-fg: var(--m-button-color);
1801
+ --m-button-hover-border: var(--m-button-color);
1802
+ }
1803
+
1804
+ .m-button--custom.m-button--ghost {
1805
+ --m-button-bg: color-mix(
1806
+ in srgb,
1807
+ var(--m-button-color) 10%,
1808
+ transparent
1809
+ );
1810
+ --m-button-fg: var(--m-button-color);
1811
+ --m-button-border: transparent;
1812
+ --m-button-hover-bg: color-mix(
1813
+ in srgb,
1814
+ var(--m-button-color) 16%,
1815
+ transparent
1816
+ );
1817
+ --m-button-hover-fg: var(--m-button-color);
1818
+ --m-button-hover-border: transparent;
1819
+ --m-button-active-bg: color-mix(
1820
+ in srgb,
1821
+ var(--m-button-color) 22%,
1822
+ transparent
1823
+ );
1824
+ }
1825
+
1826
+ .m-button--custom.m-button--text,
1827
+ .m-button--custom.m-button--quaternary {
1828
+ --m-button-bg: transparent;
1829
+ --m-button-fg: var(--m-button-color);
1830
+ --m-button-border: transparent;
1831
+ --m-button-hover-bg: color-mix(
1832
+ in srgb,
1833
+ var(--m-button-color) 12%,
1834
+ transparent
1835
+ );
1836
+ --m-button-hover-fg: var(--m-button-color);
1837
+ --m-button-hover-border: transparent;
1838
+ }
1839
+
1840
+ .m-button--custom.m-button--plain {
1841
+ --m-button-bg: color-mix(
1842
+ in srgb,
1843
+ var(--m-button-color) 10%,
1844
+ transparent
1845
+ );
1846
+ --m-button-fg: var(--m-button-color);
1847
+ --m-button-border: var(--m-button-color);
1848
+ --m-button-hover-bg: color-mix(
1849
+ in srgb,
1850
+ var(--m-button-color) 16%,
1851
+ transparent
1852
+ );
1853
+ --m-button-hover-fg: var(--m-button-color);
1854
+ --m-button-hover-border: var(--m-button-color);
1855
+ --m-button-active-bg: color-mix(
1856
+ in srgb,
1857
+ var(--m-button-color) 22%,
1858
+ transparent
1859
+ );
1860
+ }
1861
+
1862
+ .m-button--custom.m-button--link {
1863
+ --m-button-bg: transparent;
1864
+ --m-button-fg: var(--m-button-color);
1865
+ --m-button-border: transparent;
1866
+ --m-button-hover-bg: transparent;
1867
+ --m-button-hover-fg: var(--m-button-color);
1868
+ --m-button-hover-border: transparent;
1869
+ --m-button-active-bg: transparent;
1870
+ }
1871
+
1872
+ .m-button-group {
1873
+ display: inline-flex;
1874
+ vertical-align: middle;
1875
+ }
1876
+
1877
+ .m-button-group--fluid {
1878
+ display: flex;
1879
+ width: 100%;
1880
+ }
1881
+
1882
+ .m-button-group--fluid > .m-button {
1883
+ flex: 1;
1884
+ }
1885
+
1886
+ .m-button-group > .m-button {
1887
+ border-radius: 0;
1888
+ margin: 0;
1889
+ }
1890
+
1891
+ .m-button-group > .m-button + .m-button {
1892
+ margin-left: -1px;
1893
+ }
1894
+
1895
+ .m-button-group > .m-button:first-child {
1896
+ border-top-left-radius: var(--m-radius-control);
1897
+ border-bottom-left-radius: var(--m-radius-control);
1898
+ }
1899
+
1900
+ .m-button-group > .m-button:last-child {
1901
+ border-top-right-radius: var(--m-radius-control);
1902
+ border-bottom-right-radius: var(--m-radius-control);
1903
+ }
1904
+
1905
+ .m-button--raised {
1906
+ box-shadow: var(--m-shadow-raised);
1907
+ }
1908
+
1909
+ .m-button--raised:focus-visible {
1910
+ box-shadow: var(--m-focus-shadow), var(--m-shadow-raised);
1911
+ }
1912
+
1913
+ .m-button--rounded {
1914
+ border-radius: var(--m-radius-full);
1915
+ }
1916
+
1917
+ .m-button--icon-only {
1918
+ gap: 0;
1919
+ min-width: var(--m-control-height-medium);
1920
+ padding: 0;
1921
+ width: var(--m-control-height-medium);
1922
+ }
1923
+
1924
+ .m-button--icon-only.m-button--small {
1925
+ min-width: var(--m-control-height-small);
1926
+ width: var(--m-control-height-small);
1927
+ }
1928
+
1929
+ .m-button--icon-only.m-button--large {
1930
+ min-width: var(--m-control-height-large);
1931
+ width: var(--m-control-height-large);
1932
+ }
1933
+
1934
+ .m-button--icon-right {
1935
+ flex-direction: row-reverse;
1936
+ }
1937
+
1938
+ .m-button--icon-top {
1939
+ flex-direction: column;
1940
+ min-height: var(--m-button-icon-stack-min-height);
1941
+ padding-block: var(--m-space-2);
1942
+ }
1943
+
1944
+ .m-button--icon-bottom {
1945
+ flex-direction: column-reverse;
1946
+ min-height: var(--m-button-icon-stack-min-height);
1947
+ padding-block: var(--m-space-2);
1948
+ }
1949
+
1950
+ .m-button--fluid {
1951
+ display: flex;
1952
+ width: 100%;
1953
+ }
1954
+
1955
+ .m-button--small {
1956
+ --m-button-icon-size: 0.875rem;
1957
+ font-size: var(--m-control-font-small);
1958
+ min-height: var(--m-control-height-small);
1959
+ padding: 0 var(--m-button-padding-x-small);
1960
+ }
1961
+
1962
+ .m-button--large {
1963
+ --m-button-icon-size: 1.25rem;
1964
+ font-size: var(--m-control-font-large);
1965
+ min-height: var(--m-control-height-large);
1966
+ padding: 0 var(--m-button-padding-x-large);
1967
+ }
1968
+
1969
+ .m-button__icon,
1970
+ .m-button__label {
1971
+ align-items: center;
1972
+ display: inline-flex;
1973
+ justify-content: center;
1974
+ }
1975
+
1976
+ .m-button__icon,
1977
+ .m-button__label,
1978
+ .m-button__badge {
1979
+ position: relative;
1980
+ z-index: 1;
1981
+ }
1982
+
1983
+ .m-button__ripple {
1984
+ border-radius: inherit;
1985
+ inset: 0;
1986
+ overflow: hidden;
1987
+ pointer-events: none;
1988
+ position: absolute;
1989
+ z-index: 0;
1990
+ }
1991
+
1992
+ .m-button__ripple-wave {
1993
+ background: currentColor;
1994
+ border-radius: var(--m-radius-full);
1995
+ opacity: 0;
1996
+ pointer-events: none;
1997
+ position: absolute;
1998
+ transform: scale(0);
1999
+ will-change: transform, opacity;
2000
+ }
2001
+
2002
+ /* Used only when Web Animations API is unavailable. */
2003
+ .m-button__ripple-wave--fallback {
2004
+ animation: m-button-ripple 560ms var(--m-motion-ease) forwards;
2005
+ }
2006
+
2007
+ @keyframes m-button-ripple {
2008
+ 0% {
2009
+ opacity: 0.42;
2010
+ transform: scale(0);
2011
+ }
2012
+ 55% {
2013
+ opacity: 0.22;
2014
+ transform: scale(0.55);
2015
+ }
2016
+ 100% {
2017
+ opacity: 0;
2018
+ transform: scale(1);
2019
+ }
2020
+ }
2021
+
2022
+ .m-button__icon {
2023
+ flex: 0 0 auto;
2024
+ width: var(--m-button-icon-size);
2025
+ height: var(--m-button-icon-size);
2026
+ line-height: 0;
2027
+ }
2028
+
2029
+ .m-button__icon :is(.m-icon, .m-button__icon-graphic, svg) {
2030
+ display: block;
2031
+ flex-shrink: 0;
2032
+ width: 100%;
2033
+ height: 100%;
2034
+ }
2035
+
2036
+ .m-button__icon .m-icon {
2037
+ max-width: 100%;
2038
+ max-height: 100%;
2039
+ }
2040
+
2041
+ .m-button__badge {
2042
+ align-items: center;
2043
+ background: var(--m-color-contrast);
2044
+ border-radius: var(--m-radius-full);
2045
+ color: var(--m-color-contrast-fg);
2046
+ display: inline-flex;
2047
+ font-size: var(--m-font-size-xs);
2048
+ font-weight: 700;
2049
+ justify-content: center;
2050
+ line-height: 1;
2051
+ margin-inline-start: var(--m-space-1);
2052
+ min-width: var(--m-button-badge-min-width);
2053
+ padding: var(--m-space-1) var(--m-space-2);
2054
+ }
2055
+
2056
+ .m-button__badge--secondary {
2057
+ background: color-mix(
2058
+ in srgb,
2059
+ var(--m-color-text-muted) 25%,
2060
+ var(--m-color-surface)
2061
+ );
2062
+ color: var(--m-color-text);
2063
+ }
2064
+
2065
+ .m-button__badge--success {
2066
+ background: var(--m-color-success);
2067
+ color: var(--m-color-on-emphasis);
2068
+ }
2069
+
2070
+ .m-button__badge--info {
2071
+ background: var(--m-color-info);
2072
+ color: var(--m-color-on-emphasis);
2073
+ }
2074
+
2075
+ .m-button__badge--warn {
2076
+ background: var(--m-color-warn);
2077
+ color: var(--m-color-on-emphasis);
2078
+ }
2079
+
2080
+ .m-button__badge--danger {
2081
+ background: var(--m-color-danger);
2082
+ color: var(--m-color-on-emphasis);
2083
+ }
2084
+
2085
+ .m-button__badge--contrast {
2086
+ background: var(--m-color-contrast);
2087
+ color: var(--m-color-contrast-fg);
2088
+ }
2089
+
2090
+ .m-button__spinner {
2091
+ animation: m-button-spin var(--m-motion-spin-fast) linear infinite;
2092
+ border: 2px solid currentColor;
2093
+ border-right-color: transparent;
2094
+ border-radius: var(--m-radius-full);
2095
+ height: var(--m-button-spinner-size);
2096
+ width: var(--m-button-spinner-size);
2097
+ }
2098
+
2099
+ @keyframes m-button-spin {
2100
+ to {
2101
+ transform: rotate(360deg);
2102
+ }
2103
+ }
2104
+
2105
+ [data-m-motion="reduced"] .m-button__spinner,
2106
+ [data-m-motion="none"] .m-button__spinner {
2107
+ animation: none;
2108
+ }
2109
+
2110
+ [data-m-motion="none"] .m-button__ripple-wave {
2111
+ display: none;
2112
+ }
2113
+
2114
+ .m-card {
2115
+ --m-card-shadow-rest: var(--m-shadow-raised);
2116
+ background: var(--m-color-surface);
2117
+ border: var(--m-border-width) solid var(--m-color-border);
2118
+ border-radius: var(--m-radius-lg);
2119
+ box-shadow: none;
2120
+ color: var(--m-color-text);
2121
+ overflow: visible;
2122
+ }
2123
+
2124
+ .m-card:has(> .m-card__cover) {
2125
+ overflow: hidden;
2126
+ }
2127
+
2128
+ .m-card__header,
2129
+ .m-card__body,
2130
+ .m-card__footer {
2131
+ padding: var(--m-space-4);
2132
+ }
2133
+
2134
+ .m-card__header,
2135
+ .m-card__footer {
2136
+ border-bottom: var(--m-border-width) solid var(--m-color-border);
2137
+ }
2138
+
2139
+ .m-card__footer {
2140
+ border-bottom: 0;
2141
+ border-top: var(--m-border-width) solid var(--m-color-border);
2142
+ }
2143
+
2144
+ .m-card__title {
2145
+ font-family: var(--m-font-sans);
2146
+ font-size: var(--m-font-size-lg);
2147
+ font-weight: 600;
2148
+ margin: 0;
2149
+ }
2150
+
2151
+ .m-card__subtitle {
2152
+ color: var(--m-color-text-muted);
2153
+ font-size: var(--m-font-size-md);
2154
+ margin: var(--m-space-1) 0 0;
2155
+ }
2156
+
2157
+ .m-card--borderless {
2158
+ border-color: transparent;
2159
+ }
2160
+
2161
+ .m-card--shadow-hover,
2162
+ .m-card--shadow-always {
2163
+ transition:
2164
+ box-shadow var(--m-motion-fast) var(--m-motion-ease),
2165
+ border-color var(--m-motion-fast) var(--m-motion-ease);
2166
+ }
2167
+
2168
+ .m-card--shadow-always {
2169
+ box-shadow: var(--m-card-shadow-rest);
2170
+ }
2171
+
2172
+ .m-card--shadow-hover:hover {
2173
+ box-shadow: var(--m-card-shadow-rest);
2174
+ }
2175
+
2176
+ .m-card--shadow-hover:focus-within,
2177
+ .m-card--shadow-always:focus-within {
2178
+ border-color: var(--m-color-primary-hover);
2179
+ box-shadow: var(--m-focus-shadow);
2180
+ }
2181
+
2182
+ .m-card--small .m-card__header,
2183
+ .m-card--small .m-card__body,
2184
+ .m-card--small .m-card__footer {
2185
+ padding: var(--m-space-3);
2186
+ }
2187
+
2188
+ .m-card--large .m-card__header,
2189
+ .m-card--large .m-card__body,
2190
+ .m-card--large .m-card__footer {
2191
+ padding: var(--m-space-5);
2192
+ }
2193
+
2194
+ .m-card__cover {
2195
+ border-radius: var(--m-radius-lg) var(--m-radius-lg) 0 0;
2196
+ display: block;
2197
+ overflow: hidden;
2198
+ }
2199
+
2200
+ .m-card__cover img {
2201
+ display: block;
2202
+ width: 100%;
2203
+ }
2204
+
2205
+ /* —— Feedback: Empty —— */
2206
+ .m-empty {
2207
+ --m-empty-illustration-width: 12.5rem;
2208
+ --m-empty-illustration-height: 6.5rem;
2209
+ --m-empty-max-width: 20rem;
2210
+ --m-empty-icon-size: var(--m-space-8);
2211
+ --m-empty-font-size: var(--m-font-size-md);
2212
+ align-items: center;
2213
+ display: flex;
2214
+ flex-direction: column;
2215
+ font-family: var(--m-font-sans);
2216
+ gap: var(--m-space-2);
2217
+ justify-content: center;
2218
+ padding: calc(var(--m-space-8) + var(--m-space-1)) var(--m-space-5);
2219
+ text-align: center;
2220
+ }
2221
+
2222
+ .m-empty__illustration {
2223
+ align-items: center;
2224
+ color: var(--m-color-text-muted);
2225
+ display: grid;
2226
+ flex-shrink: 0;
2227
+ height: var(--m-empty-illustration-height);
2228
+ justify-items: center;
2229
+ place-items: center;
2230
+ width: var(--m-empty-illustration-width);
2231
+ }
2232
+
2233
+ .m-empty__illustration :is(svg, .m-empty__glyph) {
2234
+ display: block;
2235
+ height: 100%;
2236
+ width: 100%;
2237
+ }
2238
+
2239
+ .m-empty__icon :is(.m-icon, svg),
2240
+ .m-empty__default-icon,
2241
+ .m-empty__default-icon svg {
2242
+ color: inherit;
2243
+ display: block;
2244
+ height: var(--m-empty-icon-size);
2245
+ width: var(--m-empty-icon-size);
2246
+ }
2247
+
2248
+ .m-empty--default-icon .m-empty__illustration {
2249
+ height: var(--m-empty-icon-size);
2250
+ width: var(--m-empty-icon-size);
2251
+ }
2252
+
2253
+ .m-empty__image {
2254
+ display: block;
2255
+ height: auto;
2256
+ max-height: 100%;
2257
+ max-width: 100%;
2258
+ object-fit: contain;
2259
+ }
2260
+
2261
+ .m-empty__illustration:has(.m-empty__image),
2262
+ .m-empty__illustration:has(img) {
2263
+ height: auto;
2264
+ max-height: 10rem;
2265
+ max-width: min(16rem, 100%);
2266
+ width: auto;
2267
+ }
2268
+
2269
+ .m-empty__body {
2270
+ align-items: center;
2271
+ display: flex;
2272
+ flex-direction: column;
2273
+ gap: var(--m-space-1);
2274
+ max-width: var(--m-empty-max-width);
2275
+ }
2276
+
2277
+ .m-empty__title {
2278
+ color: var(--m-color-text);
2279
+ font-size: var(--m-empty-font-size);
2280
+ font-weight: 600;
2281
+ line-height: 1.4;
2282
+ margin: 0;
2283
+ }
2284
+
2285
+ .m-empty__description {
2286
+ color: var(--m-color-text-muted);
2287
+ font-size: var(--m-empty-font-size);
2288
+ line-height: 1.55;
2289
+ margin: 0;
2290
+ }
2291
+
2292
+ .m-empty__extra {
2293
+ align-items: center;
2294
+ display: flex;
2295
+ flex-wrap: wrap;
2296
+ gap: var(--m-space-2);
2297
+ justify-content: center;
2298
+ margin-top: var(--m-space-1);
2299
+ }
2300
+
2301
+ .m-empty--small {
2302
+ --m-empty-illustration-width: 9.5rem;
2303
+ --m-empty-illustration-height: 5rem;
2304
+ --m-empty-icon-size: var(--m-space-6);
2305
+ --m-empty-font-size: var(--m-font-size-sm);
2306
+ padding: var(--m-space-6) var(--m-space-4);
2307
+ }
2308
+
2309
+ .m-empty--large {
2310
+ --m-empty-illustration-width: 15rem;
2311
+ --m-empty-illustration-height: 7.75rem;
2312
+ --m-empty-icon-size: calc(var(--m-space-8) + var(--m-space-2));
2313
+ --m-empty-font-size: var(--m-font-size-lg);
2314
+ padding: calc(var(--m-space-8) + var(--m-space-2)) var(--m-space-6);
2315
+ }
2316
+
2317
+ .m-empty--simple {
2318
+ flex-direction: row;
2319
+ gap: var(--m-space-2);
2320
+ justify-content: flex-start;
2321
+ padding: calc(var(--m-space-3) + var(--m-space-1)) var(--m-space-3);
2322
+ text-align: left;
2323
+ }
2324
+
2325
+ .m-empty--simple .m-empty__illustration {
2326
+ height: calc(var(--m-control-height-large) + var(--m-space-1));
2327
+ width: calc(var(--m-control-height-large) + var(--m-space-1));
2328
+ }
2329
+
2330
+ .m-empty--simple .m-empty__icon :is(.m-icon, svg),
2331
+ .m-empty--simple .m-empty__default-icon,
2332
+ .m-empty--simple .m-empty__default-icon svg {
2333
+ height: var(--m-space-6);
2334
+ width: var(--m-space-6);
2335
+ }
2336
+
2337
+ .m-empty--simple .m-empty__body {
2338
+ align-items: flex-start;
2339
+ max-width: none;
2340
+ }
2341
+
2342
+ .m-empty--simple .m-empty__title,
2343
+ .m-empty--simple .m-empty__description {
2344
+ font-size: var(--m-font-size-sm);
2345
+ }
2346
+
2347
+ .m-empty--simple .m-empty__extra {
2348
+ justify-content: flex-start;
2349
+ margin-top: 0;
2350
+ }
2351
+
2352
+ .m-icon {
2353
+ color: currentColor;
2354
+ display: inline-flex;
2355
+ flex-shrink: 0;
2356
+ height: 1rem;
2357
+ line-height: 0;
2358
+ vertical-align: middle;
2359
+ width: 1rem;
2360
+ }
2361
+
2362
+ .m-icon svg {
2363
+ display: block;
2364
+ height: 100%;
2365
+ width: 100%;
2366
+ }
2367
+
2368
+ .m-icon--sm,
2369
+ .m-icon--small {
2370
+ height: 0.875rem;
2371
+ width: 0.875rem;
2372
+ }
2373
+
2374
+ .m-icon--md,
2375
+ .m-icon--normal {
2376
+ height: 1rem;
2377
+ width: 1rem;
2378
+ }
2379
+
2380
+ .m-icon--lg,
2381
+ .m-icon--large {
2382
+ height: 1.25rem;
2383
+ width: 1.25rem;
2384
+ }
2385
+
2386
+ .m-icon--spin svg {
2387
+ animation: m-icon-spin var(--m-motion-spin-fast) linear infinite;
2388
+ }
2389
+
2390
+ @keyframes m-icon-spin {
2391
+ to {
2392
+ transform: rotate(360deg);
2393
+ }
2394
+ }
2395
+
2396
+ :root[data-m-motion='none'] .m-icon--spin svg,
2397
+ :root[data-m-motion='reduced'] .m-icon--spin svg {
2398
+ animation: none;
2399
+ }
2400
+
2401
+ .m-skeleton {
2402
+ --m-skeleton-bg: color-mix(in srgb, var(--m-color-text-muted) 14%, var(--m-color-surface));
2403
+ background: var(--m-skeleton-bg);
2404
+ border-radius: var(--m-radius-sm);
2405
+ display: block;
2406
+ overflow: hidden;
2407
+ position: relative;
2408
+ }
2409
+
2410
+ .m-skeleton--circle {
2411
+ border-radius: var(--m-radius-full);
2412
+ }
2413
+
2414
+ .m-skeleton--wave::after {
2415
+ animation: m-skeleton-wave var(--m-motion-skeleton) linear infinite;
2416
+ background: linear-gradient(
2417
+ 90deg,
2418
+ transparent,
2419
+ color-mix(in srgb, var(--m-color-surface) 55%, transparent),
2420
+ transparent
2421
+ );
2422
+ content: "";
2423
+ inset: 0;
2424
+ position: absolute;
2425
+ transform: translateX(-100%);
2426
+ }
2427
+
2428
+ @keyframes m-skeleton-wave {
2429
+ 100% {
2430
+ transform: translateX(100%);
2431
+ }
2432
+ }
2433
+
2434
+ [data-m-motion="reduced"] .m-skeleton--wave::after,
2435
+ [data-m-motion="none"] .m-skeleton--wave::after {
2436
+ animation: none;
2437
+ }
2438
+
2439
+ .m-skeleton-repeat {
2440
+ display: grid;
2441
+ gap: var(--m-space-2);
2442
+ width: 100%;
2443
+ }
2444
+
2445
+ .m-skeleton--text {
2446
+ height: 0.85em;
2447
+ }
2448
+
2449
+ /* —— Layout: Page ——
2450
+ * Surface contract (kept in sync with Card / Table / controls):
2451
+ * - Page chrome stays flat: whitespace and type hierarchy, not a second kit.
2452
+ * - Recessive bands (filled filters, muted section) = Table-header fill, no radius.
2453
+ * - Elevated surfaces reuse Card: surface + 1px border + radius-lg, same padding.
2454
+ * - Never invent glow, dashed frames, or pill chips on Ops page chrome.
2455
+ */
2456
+ .m-page-content {
2457
+ --m-page-content-body-lead: var(--m-space-2);
2458
+ --m-page-content-tools-pull: var(--m-space-2);
2459
+ box-sizing: border-box;
2460
+ display: flex;
2461
+ flex-direction: column;
2462
+ font-family: var(--m-font-sans);
2463
+ gap: var(--m-page-content-gap, var(--m-space-4));
2464
+ padding: var(--m-page-content-padding, var(--m-space-6));
2465
+ width: 100%;
2466
+ }
2467
+
2468
+ .m-page-content > .m-page-header + :is(.m-page-filters, .m-page-toolbar) {
2469
+ margin-top: calc(var(--m-space-1) - var(--m-page-content-gap, var(--m-space-4)));
2470
+ }
2471
+
2472
+ .m-page-content > .m-page-filters + .m-page-toolbar {
2473
+ margin-top: calc(var(--m-page-content-tools-pull) * -1);
2474
+ }
2475
+
2476
+ .m-page-content
2477
+ > :is(.m-page-filters, .m-page-toolbar)
2478
+ + :is(.m-table, .m-grid, .m-page-section:not(.m-page-section--actions)) {
2479
+ margin-top: var(--m-page-content-body-lead);
2480
+ }
2481
+
2482
+ .m-page-content--compact {
2483
+ --m-page-content-body-lead: var(--m-space-1);
2484
+ --m-page-content-gap: var(--m-space-3);
2485
+ --m-page-content-padding: var(--m-space-4);
2486
+ --m-page-content-tools-pull: var(--m-space-1);
2487
+ }
2488
+
2489
+ .m-page-content--spacious {
2490
+ --m-page-content-body-lead: var(--m-space-4);
2491
+ --m-page-content-gap: var(--m-space-6);
2492
+ --m-page-content-tools-pull: var(--m-space-3);
2493
+ }
2494
+
2495
+ .m-page-content--narrow {
2496
+ max-width: 42rem;
2497
+ }
2498
+
2499
+ .m-page-content--bands-uniform {
2500
+ --m-page-content-body-lead: 0;
2501
+ --m-page-content-tools-pull: 0;
2502
+ }
2503
+
2504
+ .m-page-content--bands-uniform > .m-page-header + :is(.m-page-filters, .m-page-toolbar) {
2505
+ margin-top: 0;
2506
+ }
2507
+
2508
+ .m-page-content--bands-uniform
2509
+ > :is(.m-page-filters, .m-page-toolbar)
2510
+ + :is(.m-table, .m-grid, .m-page-section:not(.m-page-section--actions)) {
2511
+ margin-top: 0;
2512
+ }
2513
+
2514
+ .m-page-filters {
2515
+ box-sizing: border-box;
2516
+ display: grid;
2517
+ gap: var(--m-space-3);
2518
+ width: 100%;
2519
+ }
2520
+
2521
+ .m-page-filters__row {
2522
+ align-items: flex-start;
2523
+ display: flex;
2524
+ flex-wrap: wrap;
2525
+ gap: var(--m-space-3);
2526
+ justify-content: space-between;
2527
+ width: 100%;
2528
+ }
2529
+
2530
+ .m-page-filters__controls {
2531
+ flex: 1 1 auto;
2532
+ min-width: 0;
2533
+ }
2534
+
2535
+ .m-page-filters__toggle {
2536
+ flex-shrink: 0;
2537
+ }
2538
+
2539
+ .m-page-filters__advanced {
2540
+ width: 100%;
2541
+ }
2542
+
2543
+ .m-page-filters--filled {
2544
+ background: var(--m-color-fill-light);
2545
+ padding: var(--m-space-3) var(--m-space-4);
2546
+ }
2547
+
2548
+ .m-page-filters--filled .m-page-filters__advanced {
2549
+ padding-top: var(--m-space-1);
2550
+ }
2551
+
2552
+ .m-page-filter-chips {
2553
+ align-items: center;
2554
+ display: flex;
2555
+ flex-wrap: wrap;
2556
+ gap: var(--m-space-2);
2557
+ width: 100%;
2558
+ }
2559
+
2560
+ .m-page-filter-chips__label {
2561
+ color: var(--m-color-text-muted);
2562
+ flex-shrink: 0;
2563
+ font-size: var(--m-font-size-sm);
2564
+ line-height: 1.4;
2565
+ }
2566
+
2567
+ .m-page-filter-chips__items {
2568
+ align-items: center;
2569
+ display: flex;
2570
+ flex: 1 1 auto;
2571
+ flex-wrap: wrap;
2572
+ gap: var(--m-space-2);
2573
+ min-width: 0;
2574
+ }
2575
+
2576
+ .m-page-toolbar {
2577
+ align-items: center;
2578
+ box-sizing: border-box;
2579
+ display: flex;
2580
+ flex-wrap: wrap;
2581
+ gap: var(--m-space-3);
2582
+ justify-content: space-between;
2583
+ width: 100%;
2584
+ }
2585
+
2586
+ .m-page-toolbar__title {
2587
+ color: var(--m-color-text);
2588
+ font-family: var(--m-font-sans);
2589
+ font-size: var(--m-font-size-md);
2590
+ font-weight: 600;
2591
+ line-height: 1.4;
2592
+ margin: 0;
2593
+ }
2594
+
2595
+ .m-page-toolbar__actions {
2596
+ align-items: center;
2597
+ display: flex;
2598
+ flex-wrap: wrap;
2599
+ gap: var(--m-space-2);
2600
+ margin-left: auto;
2601
+ }
2602
+
2603
+ .m-page-header {
2604
+ align-items: flex-start;
2605
+ box-sizing: border-box;
2606
+ display: flex;
2607
+ flex-wrap: wrap;
2608
+ gap: var(--m-space-3);
2609
+ justify-content: space-between;
2610
+ width: 100%;
2611
+ }
2612
+
2613
+ .m-page-header__main {
2614
+ display: grid;
2615
+ gap: var(--m-space-1);
2616
+ min-width: 0;
2617
+ }
2618
+
2619
+ .m-page-header__breadcrumb {
2620
+ margin: 0 0 var(--m-space-1);
2621
+ }
2622
+
2623
+ .m-page-header__heading {
2624
+ align-items: center;
2625
+ display: flex;
2626
+ flex-wrap: wrap;
2627
+ gap: var(--m-space-2);
2628
+ min-width: 0;
2629
+ }
2630
+
2631
+ .m-page-header__title {
2632
+ color: var(--m-color-text);
2633
+ font-family: var(--m-font-sans);
2634
+ font-size: var(--m-font-size-xl);
2635
+ font-weight: 600;
2636
+ letter-spacing: -0.01em;
2637
+ line-height: 1.4;
2638
+ margin: 0;
2639
+ }
2640
+
2641
+ .m-page-header__tags {
2642
+ align-items: center;
2643
+ display: inline-flex;
2644
+ flex-wrap: wrap;
2645
+ gap: var(--m-space-2);
2646
+ }
2647
+
2648
+ .m-page-header__description {
2649
+ color: var(--m-color-text-muted);
2650
+ font-size: var(--m-font-size-md);
2651
+ line-height: 1.55;
2652
+ margin: 0;
2653
+ max-width: 65ch;
2654
+ }
2655
+
2656
+ .m-page-header__actions {
2657
+ align-items: center;
2658
+ display: flex;
2659
+ flex-shrink: 0;
2660
+ flex-wrap: wrap;
2661
+ gap: var(--m-space-2);
2662
+ }
2663
+
2664
+ .m-page-section {
2665
+ box-sizing: border-box;
2666
+ width: 100%;
2667
+ }
2668
+
2669
+ .m-page-section__header {
2670
+ align-items: center;
2671
+ display: flex;
2672
+ flex-wrap: wrap;
2673
+ gap: var(--m-space-3);
2674
+ justify-content: space-between;
2675
+ margin: 0 0 var(--m-space-3);
2676
+ }
2677
+
2678
+ .m-page-section__title {
2679
+ color: var(--m-color-text);
2680
+ font-size: var(--m-font-size-md);
2681
+ font-weight: 600;
2682
+ line-height: 1.4;
2683
+ margin: 0;
2684
+ }
2685
+
2686
+ .m-page-section__actions {
1469
2687
  align-items: center;
1470
2688
  display: flex;
1471
- gap: var(--m-space-4);
2689
+ flex-wrap: wrap;
2690
+ gap: var(--m-space-2);
2691
+ }
2692
+
2693
+ .m-page-section--muted {
2694
+ background: var(--m-color-fill-light);
2695
+ padding: var(--m-space-4);
2696
+ }
2697
+
2698
+ .m-page-section--form .m-page-section__header {
2699
+ margin: 0;
2700
+ width: 100%;
2701
+ }
2702
+
2703
+ .m-page-section--actions {
2704
+ border-top: var(--m-border-width) solid var(--m-color-border);
2705
+ margin-top: var(--m-space-4);
2706
+ padding-top: var(--m-space-4);
2707
+ }
2708
+
2709
+ .m-page-stat__body {
2710
+ align-items: flex-start;
2711
+ display: flex;
2712
+ gap: var(--m-space-3);
1472
2713
  justify-content: space-between;
1473
2714
  }
1474
2715
 
2716
+ .m-page-stat__content {
2717
+ display: grid;
2718
+ gap: var(--m-space-1);
2719
+ justify-items: start;
2720
+ min-width: 0;
2721
+ }
2722
+
1475
2723
  .m-page-stat__label {
1476
2724
  color: var(--m-color-text-muted);
1477
2725
  font-size: var(--m-font-size-sm);
2726
+ line-height: 1.4;
1478
2727
  margin: 0;
1479
2728
  }
1480
2729
 
1481
2730
  .m-page-stat__value {
1482
- --m-page-stat-value-size: 1.5rem;
2731
+ --m-page-stat-value-size: var(--m-font-size-2xl);
1483
2732
  color: var(--m-color-text);
1484
2733
  font-family: var(--m-font-sans);
1485
2734
  font-size: var(--m-page-stat-value-size);
1486
- font-weight: 700;
1487
- line-height: 1.2;
1488
- margin: var(--m-space-1) 0;
2735
+ font-variant-numeric: tabular-nums;
2736
+ font-weight: 600;
2737
+ letter-spacing: -0.01em;
2738
+ line-height: 1.25;
2739
+ margin: 0;
2740
+ }
2741
+
2742
+ .m-page-stat__meta {
2743
+ align-items: center;
2744
+ display: flex;
2745
+ flex-wrap: wrap;
2746
+ gap: var(--m-space-2);
1489
2747
  }
1490
2748
 
1491
2749
  .m-page-stat__trend {
2750
+ align-items: center;
2751
+ display: inline-flex;
1492
2752
  font-size: var(--m-font-size-sm);
2753
+ font-weight: 500;
2754
+ gap: var(--m-space-1);
2755
+ line-height: 1.25;
1493
2756
  margin: 0;
1494
2757
  }
1495
2758
 
2759
+ .m-page-stat__trend .m-page-stat__trend-icon {
2760
+ height: var(--m-font-size-sm);
2761
+ width: var(--m-font-size-sm);
2762
+ }
2763
+
1496
2764
  .m-page-stat__trend--primary {
1497
2765
  color: var(--m-color-primary);
1498
2766
  }
@@ -1513,24 +2781,62 @@
1513
2781
  color: var(--m-color-text-muted);
1514
2782
  }
1515
2783
 
2784
+ .m-page-stat__trend-label {
2785
+ color: var(--m-color-text-muted);
2786
+ font-size: var(--m-font-size-sm);
2787
+ }
2788
+
1516
2789
  .m-page-stat__icon {
1517
- color: var(--m-color-primary);
2790
+ align-items: center;
2791
+ color: var(--m-color-text-muted);
2792
+ display: inline-flex;
1518
2793
  flex-shrink: 0;
1519
- opacity: 0.85;
2794
+ justify-content: center;
2795
+ }
2796
+
2797
+ .m-page-stat__icon :is(.m-icon, svg) {
2798
+ display: block;
2799
+ height: 1.25rem;
2800
+ width: 1.25rem;
2801
+ }
2802
+
2803
+ .m-page-stat--compact .m-page-stat__value {
2804
+ --m-page-stat-value-size: var(--m-font-size-xl);
2805
+ }
2806
+
2807
+ .m-page-stat--compact .m-page-stat__icon :is(.m-icon, svg) {
2808
+ height: 1rem;
2809
+ width: 1rem;
2810
+ }
2811
+
2812
+ .m-page-stat--plain {
2813
+ padding: var(--m-space-2) 0;
2814
+ }
2815
+
2816
+ .m-page-stat--inline .m-page-stat__content {
2817
+ align-items: baseline;
2818
+ display: flex;
2819
+ flex-wrap: wrap;
2820
+ gap: var(--m-space-2) var(--m-space-3);
2821
+ row-gap: var(--m-space-1);
2822
+ }
2823
+
2824
+ .m-page-stat--inline .m-page-stat__label {
2825
+ margin: 0;
2826
+ }
2827
+
2828
+ .m-page-stat--inline .m-page-stat__meta {
2829
+ flex-basis: 100%;
1520
2830
  }
1521
2831
 
1522
2832
  .m-page-placeholder {
1523
- align-items: center;
1524
- background: color-mix(in srgb, var(--m-color-border) 15%, transparent);
1525
- border: var(--m-border-width) dashed var(--m-color-border);
1526
- border-radius: var(--m-radius-md);
1527
2833
  box-sizing: border-box;
1528
- color: var(--m-color-text-muted);
1529
- display: grid;
1530
- font-size: var(--m-font-size-sm);
1531
- justify-items: center;
2834
+ display: flex;
1532
2835
  min-height: var(--m-page-placeholder-min-height, 12rem);
1533
- padding: var(--m-space-4);
1534
- text-align: center;
1535
2836
  width: 100%;
1536
2837
  }
2838
+
2839
+ .m-page-placeholder__empty {
2840
+ flex: 1;
2841
+ min-width: 0;
2842
+ }