microui-wc 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (609) hide show
  1. package/.github/ISSUE_TEMPLATE/bug_report.md +40 -0
  2. package/.github/ISSUE_TEMPLATE/feature_request.md +33 -0
  3. package/.github/PULL_REQUEST_TEMPLATE.md +28 -0
  4. package/.github/workflows/ci.yml +42 -0
  5. package/.github/workflows/deploy-pages.yml +112 -0
  6. package/AGENTS.md +2366 -0
  7. package/CHANGELOG.md +47 -0
  8. package/CODE_OF_CONDUCT.md +59 -0
  9. package/CONTRIBUTING.md +156 -0
  10. package/LICENSE +190 -0
  11. package/README.md +254 -0
  12. package/SECURITY.md +58 -0
  13. package/app/.generated/routes/alerts.js +8 -0
  14. package/app/.generated/routes/avatars.js +8 -0
  15. package/app/.generated/routes/badges.js +8 -0
  16. package/app/.generated/routes/buttons.js +10 -0
  17. package/app/.generated/routes/cards.js +10 -0
  18. package/app/.generated/routes/checkboxes.js +9 -0
  19. package/app/.generated/routes/chips.js +8 -0
  20. package/app/.generated/routes/dropdowns.js +9 -0
  21. package/app/.generated/routes/home.js +7 -0
  22. package/app/.generated/routes/icons.js +9 -0
  23. package/app/.generated/routes/inputs.js +10 -0
  24. package/app/.generated/routes/installation.js +7 -0
  25. package/app/.generated/routes/layout.js +9 -0
  26. package/app/.generated/routes/modals.js +9 -0
  27. package/app/.generated/routes/navbar.js +7 -0
  28. package/app/.generated/routes/progress.js +9 -0
  29. package/app/.generated/routes/radios.js +9 -0
  30. package/app/.generated/routes/switches.js +9 -0
  31. package/app/.generated/routes/tabs.js +8 -0
  32. package/app/.generated/routes/toasts.js +9 -0
  33. package/app/index.html +67 -0
  34. package/app/pages/alerts.html +23 -0
  35. package/app/pages/avatars.html +22 -0
  36. package/app/pages/badges.html +22 -0
  37. package/app/pages/buttons.html +71 -0
  38. package/app/pages/cards.html +54 -0
  39. package/app/pages/checkboxes.html +39 -0
  40. package/app/pages/chips.html +23 -0
  41. package/app/pages/dropdowns.html +41 -0
  42. package/app/pages/home.html +59 -0
  43. package/app/pages/icons.html +29 -0
  44. package/app/pages/inputs.html +66 -0
  45. package/app/pages/installation.html +34 -0
  46. package/app/pages/layout.html +30 -0
  47. package/app/pages/modals.html +21 -0
  48. package/app/pages/navbar.html +22 -0
  49. package/app/pages/progress.html +35 -0
  50. package/app/pages/radios.html +40 -0
  51. package/app/pages/switches.html +39 -0
  52. package/app/pages/tabs.html +30 -0
  53. package/app/pages/toasts.html +22 -0
  54. package/app-dist/index.html +67 -0
  55. package/app-dist/pages/alerts.html +23 -0
  56. package/app-dist/pages/avatars.html +22 -0
  57. package/app-dist/pages/badges.html +22 -0
  58. package/app-dist/pages/buttons.html +71 -0
  59. package/app-dist/pages/cards.html +54 -0
  60. package/app-dist/pages/checkboxes.html +39 -0
  61. package/app-dist/pages/chips.html +23 -0
  62. package/app-dist/pages/dropdowns.html +41 -0
  63. package/app-dist/pages/home.html +59 -0
  64. package/app-dist/pages/icons.html +29 -0
  65. package/app-dist/pages/inputs.html +66 -0
  66. package/app-dist/pages/installation.html +34 -0
  67. package/app-dist/pages/layout.html +30 -0
  68. package/app-dist/pages/modals.html +21 -0
  69. package/app-dist/pages/navbar.html +22 -0
  70. package/app-dist/pages/progress.html +35 -0
  71. package/app-dist/pages/radios.html +40 -0
  72. package/app-dist/pages/switches.html +39 -0
  73. package/app-dist/pages/tabs.html +30 -0
  74. package/app-dist/pages/toasts.html +22 -0
  75. package/app-dist/pages.json +217 -0
  76. package/app-dist/routes/alerts.js +5 -0
  77. package/app-dist/routes/avatars.js +1 -0
  78. package/app-dist/routes/badges.js +1 -0
  79. package/app-dist/routes/buttons.js +1 -0
  80. package/app-dist/routes/cards.js +1 -0
  81. package/app-dist/routes/checkboxes.js +9 -0
  82. package/app-dist/routes/chips.js +4 -0
  83. package/app-dist/routes/chunk-019e5e2f.js +5 -0
  84. package/app-dist/routes/chunk-0m4j19yd.js +2 -0
  85. package/app-dist/routes/chunk-0tmmp5q0.js +1 -0
  86. package/app-dist/routes/chunk-10xn709r.js +1 -0
  87. package/app-dist/routes/chunk-15m2qcda.js +2 -0
  88. package/app-dist/routes/chunk-1bh8g23n.js +1 -0
  89. package/app-dist/routes/chunk-1vg0v937.js +1 -0
  90. package/app-dist/routes/chunk-1zvcgy3j.js +1 -0
  91. package/app-dist/routes/chunk-2afb0861.js +1 -0
  92. package/app-dist/routes/chunk-2c6ttpzt.js +5 -0
  93. package/app-dist/routes/chunk-3dy30fhs.js +1 -0
  94. package/app-dist/routes/chunk-426dnces.js +13 -0
  95. package/app-dist/routes/chunk-44kgxery.js +1 -0
  96. package/app-dist/routes/chunk-47fdnejd.js +33 -0
  97. package/app-dist/routes/chunk-49a6t2vq.js +1 -0
  98. package/app-dist/routes/chunk-4fe1rm5b.js +1 -0
  99. package/app-dist/routes/chunk-4ggmvkta.js +33 -0
  100. package/app-dist/routes/chunk-4vkz81q7.js +33 -0
  101. package/app-dist/routes/chunk-4w4tmj8f.js +31 -0
  102. package/app-dist/routes/chunk-532s62kr.js +31 -0
  103. package/app-dist/routes/chunk-5hm3bssy.js +33 -0
  104. package/app-dist/routes/chunk-5vrh24hc.js +1 -0
  105. package/app-dist/routes/chunk-61pcg25a.js +1 -0
  106. package/app-dist/routes/chunk-6nfhygvf.js +1 -0
  107. package/app-dist/routes/chunk-700e7je6.js +33 -0
  108. package/app-dist/routes/chunk-7fsn17kg.js +1 -0
  109. package/app-dist/routes/chunk-7k789b32.js +1 -0
  110. package/app-dist/routes/chunk-7r46q0ys.js +36 -0
  111. package/app-dist/routes/chunk-86fmc1fr.js +5 -0
  112. package/app-dist/routes/chunk-8qth37vw.js +1 -0
  113. package/app-dist/routes/chunk-924wv8n0.js +1 -0
  114. package/app-dist/routes/chunk-9mbhgxk9.js +1 -0
  115. package/app-dist/routes/chunk-a216hyd9.js +1 -0
  116. package/app-dist/routes/chunk-akzxykh9.js +33 -0
  117. package/app-dist/routes/chunk-b3dcvy8c.js +1 -0
  118. package/app-dist/routes/chunk-b74zahz5.js +31 -0
  119. package/app-dist/routes/chunk-bftj53p2.js +5 -0
  120. package/app-dist/routes/chunk-c01hnz3e.js +1 -0
  121. package/app-dist/routes/chunk-d8pvv5km.js +1 -0
  122. package/app-dist/routes/chunk-dev0aezr.js +2 -0
  123. package/app-dist/routes/chunk-dh6vnv0e.js +1 -0
  124. package/app-dist/routes/chunk-dn2cbpva.js +36 -0
  125. package/app-dist/routes/chunk-dvn0my90.js +1 -0
  126. package/app-dist/routes/chunk-dvq8mnve.js +36 -0
  127. package/app-dist/routes/chunk-e8c2gc4d.js +5 -0
  128. package/app-dist/routes/chunk-ejf9ak2x.js +1 -0
  129. package/app-dist/routes/chunk-f083m55s.js +1 -0
  130. package/app-dist/routes/chunk-fnrj28s1.js +31 -0
  131. package/app-dist/routes/chunk-fvg3yjdp.js +31 -0
  132. package/app-dist/routes/chunk-g7k381n1.js +1 -0
  133. package/app-dist/routes/chunk-h01kq2ae.js +13 -0
  134. package/app-dist/routes/chunk-h4dk761v.js +5 -0
  135. package/app-dist/routes/chunk-hmx91z2x.js +5 -0
  136. package/app-dist/routes/chunk-hxbg4m42.js +36 -0
  137. package/app-dist/routes/chunk-jbjnfp2b.js +2 -0
  138. package/app-dist/routes/chunk-jxtz5vv6.js +36 -0
  139. package/app-dist/routes/chunk-jxzcs0ey.js +36 -0
  140. package/app-dist/routes/chunk-kt7wwhcx.js +1 -0
  141. package/app-dist/routes/chunk-kzptszyc.js +33 -0
  142. package/app-dist/routes/chunk-mhgca4w4.js +2 -0
  143. package/app-dist/routes/chunk-mhswxa20.js +1 -0
  144. package/app-dist/routes/chunk-n8zfeex6.js +1 -0
  145. package/app-dist/routes/chunk-pee47b2r.js +1 -0
  146. package/app-dist/routes/chunk-pesmw829.js +1 -0
  147. package/app-dist/routes/chunk-pgc4c6f3.js +36 -0
  148. package/app-dist/routes/chunk-q8egegm1.js +1 -0
  149. package/app-dist/routes/chunk-q9mn2qyq.js +36 -0
  150. package/app-dist/routes/chunk-qh0rtaf3.js +5 -0
  151. package/app-dist/routes/chunk-qqhmk6ye.js +2 -0
  152. package/app-dist/routes/chunk-qrxygmf7.js +33 -0
  153. package/app-dist/routes/chunk-r46yzksx.js +36 -0
  154. package/app-dist/routes/chunk-rgpbw2w0.js +5 -0
  155. package/app-dist/routes/chunk-rnpzv3d8.js +2 -0
  156. package/app-dist/routes/chunk-s5v8cv05.js +2 -0
  157. package/app-dist/routes/chunk-sbwn5bpc.js +1 -0
  158. package/app-dist/routes/chunk-sqbg8jbt.js +33 -0
  159. package/app-dist/routes/chunk-sv8dqnf7.js +1 -0
  160. package/app-dist/routes/chunk-t67sw3za.js +1 -0
  161. package/app-dist/routes/chunk-tjdpqwdf.js +31 -0
  162. package/app-dist/routes/chunk-tq2mfghg.js +1 -0
  163. package/app-dist/routes/chunk-ttn10vt6.js +1 -0
  164. package/app-dist/routes/chunk-v2hzpjxr.js +1 -0
  165. package/app-dist/routes/chunk-wfjjkw9y.js +1 -0
  166. package/app-dist/routes/chunk-wt8cxzmf.js +31 -0
  167. package/app-dist/routes/chunk-x45d372k.js +5 -0
  168. package/app-dist/routes/chunk-y3wsazkt.js +1 -0
  169. package/app-dist/routes/chunk-y7pmgc7t.js +33 -0
  170. package/app-dist/routes/chunk-zefdt2q3.js +31 -0
  171. package/app-dist/routes/dropdowns.js +6 -0
  172. package/app-dist/routes/home.js +1 -0
  173. package/app-dist/routes/icons.js +1 -0
  174. package/app-dist/routes/inputs.js +12 -0
  175. package/app-dist/routes/installation.js +1 -0
  176. package/app-dist/routes/layout.js +1 -0
  177. package/app-dist/routes/modals.js +7 -0
  178. package/app-dist/routes/navbar.js +1 -0
  179. package/app-dist/routes/progress.js +1 -0
  180. package/app-dist/routes/radios.js +6 -0
  181. package/app-dist/routes/switches.js +6 -0
  182. package/app-dist/routes/tabs.js +1 -0
  183. package/app-dist/routes/toasts.js +16 -0
  184. package/assets/fonts/material-symbols-mini.woff2 +0 -0
  185. package/assets/fonts/material-symbols.woff2 +0 -0
  186. package/assets/fonts/roboto-400.woff2 +0 -0
  187. package/assets/fonts/roboto-500.woff2 +0 -0
  188. package/assets/fonts/roboto-700.woff2 +0 -0
  189. package/assets/logo-banner-400.jpg +0 -0
  190. package/assets/logo-banner-400.webp +0 -0
  191. package/assets/logo-banner-800.webp +0 -0
  192. package/assets/logo-banner.jpg +0 -0
  193. package/assets/logo-icon-64.jpg +0 -0
  194. package/assets/logo-icon-64.webp +0 -0
  195. package/assets/logo-icon.jpg +0 -0
  196. package/assets/logo-square.jpg +0 -0
  197. package/bun.lock +312 -0
  198. package/bunfig.toml +4 -0
  199. package/custom-elements.json +1916 -0
  200. package/demo/api/sample-data.json +38 -0
  201. package/demo/content/alerts.html +115 -0
  202. package/demo/content/avatars.html +70 -0
  203. package/demo/content/badges.html +65 -0
  204. package/demo/content/buttons.html +188 -0
  205. package/demo/content/callouts.html +91 -0
  206. package/demo/content/cards.html +121 -0
  207. package/demo/content/checkboxes.html +178 -0
  208. package/demo/content/chips.html +67 -0
  209. package/demo/content/codeblocks.html +101 -0
  210. package/demo/content/confirms.html +115 -0
  211. package/demo/content/datatables.html +149 -0
  212. package/demo/content/dividers.html +119 -0
  213. package/demo/content/dropdowns.html +89 -0
  214. package/demo/content/enterprise.html +252 -0
  215. package/demo/content/home.html +149 -0
  216. package/demo/content/icons.html +89 -0
  217. package/demo/content/inputs.html +135 -0
  218. package/demo/content/installation.html +16 -0
  219. package/demo/content/layout.html +136 -0
  220. package/demo/content/modals.html +141 -0
  221. package/demo/content/navbar.html +70 -0
  222. package/demo/content/progress.html +119 -0
  223. package/demo/content/radios.html +88 -0
  224. package/demo/content/skeletons.html +109 -0
  225. package/demo/content/spinners.html +96 -0
  226. package/demo/content/switches.html +84 -0
  227. package/demo/content/tables.html +124 -0
  228. package/demo/content/tabs.html +85 -0
  229. package/demo/content/toasts.html +116 -0
  230. package/demo/content/tooltips.html +107 -0
  231. package/demo/content/virtual-lists.html +233 -0
  232. package/demo/favicon.ico +0 -0
  233. package/demo/favicon.png +0 -0
  234. package/demo/full.html +52 -0
  235. package/demo/iife.html +46 -0
  236. package/demo/manifest.json +34 -0
  237. package/demo/pages/datatable-demo.html +237 -0
  238. package/demo/pages/prompt-ui-demo.html +218 -0
  239. package/demo/pages/responsive-demo.html +122 -0
  240. package/demo/pages/schema-form-demo.html +270 -0
  241. package/demo/robots.txt +6 -0
  242. package/demo/shell.html +712 -0
  243. package/demo/sw.js +387 -0
  244. package/dist/AGENTS.md +2366 -0
  245. package/dist/README.md +254 -0
  246. package/dist/chunks/advanced.js +174 -0
  247. package/dist/chunks/chunk-1nhr1wrq.js +14 -0
  248. package/dist/chunks/chunk-hssyjbr0.js +2 -0
  249. package/dist/chunks/chunk-k8etzx0z.js +2 -0
  250. package/dist/chunks/chunk-rr1et8fg.js +2 -0
  251. package/dist/chunks/chunk-sjcx4fd5.js +6 -0
  252. package/dist/chunks/chunk-v1c777xh.js +5 -0
  253. package/dist/chunks/chunk-w5k5vwjd.js +13 -0
  254. package/dist/chunks/core.js +10 -0
  255. package/dist/chunks/display.js +17 -0
  256. package/dist/chunks/feedback.js +15 -0
  257. package/dist/chunks/forms.js +48 -0
  258. package/dist/chunks/layout.js +9 -0
  259. package/dist/components/chunk-4tezav8r.js +2 -0
  260. package/dist/components/chunk-fqyb2pms.js +2 -0
  261. package/dist/components/chunk-h7cdbhxw.js +13 -0
  262. package/dist/components/chunk-mzd8jwrs.js +2 -0
  263. package/dist/components/chunk-qwmxyn8e.js +2 -0
  264. package/dist/components/chunk-redtk47a.js +14 -0
  265. package/dist/components/mu-alert.js +5 -0
  266. package/dist/components/mu-api-table.js +33 -0
  267. package/dist/components/mu-avatar.js +1 -0
  268. package/dist/components/mu-badge.js +1 -0
  269. package/dist/components/mu-bottom-nav.js +1 -0
  270. package/dist/components/mu-button.js +1 -0
  271. package/dist/components/mu-callout.js +1 -0
  272. package/dist/components/mu-card.js +1 -0
  273. package/dist/components/mu-checkbox.js +9 -0
  274. package/dist/components/mu-chip.js +4 -0
  275. package/dist/components/mu-code.js +48 -0
  276. package/dist/components/mu-confirm.js +10 -0
  277. package/dist/components/mu-container.js +1 -0
  278. package/dist/components/mu-datatable.js +96 -0
  279. package/dist/components/mu-divider.js +1 -0
  280. package/dist/components/mu-doc-page.js +26 -0
  281. package/dist/components/mu-drawer-item.js +9 -0
  282. package/dist/components/mu-drawer.js +1 -0
  283. package/dist/components/mu-dropdown.js +6 -0
  284. package/dist/components/mu-error-boundary.js +10 -0
  285. package/dist/components/mu-example.js +38 -0
  286. package/dist/components/mu-fetch.js +1 -0
  287. package/dist/components/mu-form.js +1 -0
  288. package/dist/components/mu-grid.js +1 -0
  289. package/dist/components/mu-icon.js +5 -0
  290. package/dist/components/mu-input.js +12 -0
  291. package/dist/components/mu-layout.js +1 -0
  292. package/dist/components/mu-lazy.js +1 -0
  293. package/dist/components/mu-modal.js +7 -0
  294. package/dist/components/mu-navbar.js +1 -0
  295. package/dist/components/mu-page.js +1 -0
  296. package/dist/components/mu-progress.js +1 -0
  297. package/dist/components/mu-prompt-ui.js +20 -0
  298. package/dist/components/mu-radio.js +6 -0
  299. package/dist/components/mu-repeat.js +1 -0
  300. package/dist/components/mu-router.js +6 -0
  301. package/dist/components/mu-schema-form.js +76 -0
  302. package/dist/components/mu-sidebar.js +1 -0
  303. package/dist/components/mu-skeleton.js +13 -0
  304. package/dist/components/mu-spinner.js +1 -0
  305. package/dist/components/mu-stack.js +1 -0
  306. package/dist/components/mu-switch.js +6 -0
  307. package/dist/components/mu-table.js +1 -0
  308. package/dist/components/mu-tabs.js +1 -0
  309. package/dist/components/mu-textarea.js +11 -0
  310. package/dist/components/mu-theme-toggle.js +5 -0
  311. package/dist/components/mu-toast.js +4 -0
  312. package/dist/components/mu-tooltip.js +10 -0
  313. package/dist/components/mu-virtual-list.js +33 -0
  314. package/dist/components.css +1 -0
  315. package/dist/microui.css +1 -0
  316. package/dist/microui.d.ts +234 -0
  317. package/dist/microui.esm.js +549 -0
  318. package/dist/microui.esm.js.map +79 -0
  319. package/dist/microui.min.js +549 -0
  320. package/dist/microui.min.js.map +79 -0
  321. package/dist/routes/alerts.js +1 -0
  322. package/dist/routes/avatars.js +1 -0
  323. package/dist/routes/badges.js +1 -0
  324. package/dist/routes/buttons.js +1 -0
  325. package/dist/routes/callouts.js +1 -0
  326. package/dist/routes/cards.js +1 -0
  327. package/dist/routes/checkboxes.js +9 -0
  328. package/dist/routes/chips.js +4 -0
  329. package/dist/routes/chunk-19wgcncm.js +2 -0
  330. package/dist/routes/chunk-1khyr3v1.js +33 -0
  331. package/dist/routes/chunk-4rhxe97g.js +1 -0
  332. package/dist/routes/chunk-5qah04bh.js +2 -0
  333. package/dist/routes/chunk-7gfxy70n.js +5 -0
  334. package/dist/routes/chunk-e86zbeta.js +1 -0
  335. package/dist/routes/chunk-fagt36h6.js +2 -0
  336. package/dist/routes/chunk-fed7zr7m.js +1 -0
  337. package/dist/routes/chunk-hwj7pfwp.js +1 -0
  338. package/dist/routes/chunk-mhvcs2f8.js +5 -0
  339. package/dist/routes/chunk-nv3bddmj.js +13 -0
  340. package/dist/routes/chunk-q3f2aeqe.js +7 -0
  341. package/dist/routes/chunk-qxxa8trk.js +1 -0
  342. package/dist/routes/chunk-rw15y9zh.js +1 -0
  343. package/dist/routes/chunk-sfb7x11v.js +5 -0
  344. package/dist/routes/chunk-swyhghrm.js +48 -0
  345. package/dist/routes/chunk-sxddjs2d.js +2 -0
  346. package/dist/routes/chunk-vby0zg5w.js +17 -0
  347. package/dist/routes/chunk-w6zqjqqs.js +9 -0
  348. package/dist/routes/chunk-z960rexd.js +38 -0
  349. package/dist/routes/codeblocks.js +1 -0
  350. package/dist/routes/confirms.js +10 -0
  351. package/dist/routes/datatables.js +96 -0
  352. package/dist/routes/dividers.js +1 -0
  353. package/dist/routes/dropdowns.js +6 -0
  354. package/dist/routes/enterprise.js +15 -0
  355. package/dist/routes/home.js +1 -0
  356. package/dist/routes/icons.js +1 -0
  357. package/dist/routes/inputs.js +22 -0
  358. package/dist/routes/installation.js +1 -0
  359. package/dist/routes/layout.js +1 -0
  360. package/dist/routes/modals.js +1 -0
  361. package/dist/routes/navbar.js +1 -0
  362. package/dist/routes/page-components.json +316 -0
  363. package/dist/routes/progress.js +1 -0
  364. package/dist/routes/radios.js +6 -0
  365. package/dist/routes/route-deps.json +156 -0
  366. package/dist/routes/shell-critical.js +1 -0
  367. package/dist/routes/shell-deferred.js +1 -0
  368. package/dist/routes/shell.js +20 -0
  369. package/dist/routes/skeletons.js +13 -0
  370. package/dist/routes/spinners.js +1 -0
  371. package/dist/routes/src/chunks/core.js +36 -0
  372. package/dist/routes/switches.js +6 -0
  373. package/dist/routes/tables.js +1 -0
  374. package/dist/routes/tabs.js +1 -0
  375. package/dist/routes/toasts.js +1 -0
  376. package/dist/routes/tooltips.js +10 -0
  377. package/dist/routes/virtual-lists.js +33 -0
  378. package/dist/styles/common.css +1 -0
  379. package/dist/styles/components/animations.css +1 -0
  380. package/dist/styles/components/avatar.css +1 -0
  381. package/dist/styles/components/badge.css +1 -0
  382. package/dist/styles/components/bottom-nav.css +1 -0
  383. package/dist/styles/components/button.css +1 -0
  384. package/dist/styles/components/card.css +1 -0
  385. package/dist/styles/components/checkbox.css +1 -0
  386. package/dist/styles/components/chip.css +1 -0
  387. package/dist/styles/components/datatable.css +1 -0
  388. package/dist/styles/components/divider.css +1 -0
  389. package/dist/styles/components/drawer-item.css +1 -0
  390. package/dist/styles/components/drawer.css +1 -0
  391. package/dist/styles/components/grid.css +1 -0
  392. package/dist/styles/components/icon.css +1 -0
  393. package/dist/styles/components/input.css +1 -0
  394. package/dist/styles/components/layout.css +1 -0
  395. package/dist/styles/components/navbar.css +1 -0
  396. package/dist/styles/components/overlays.css +1 -0
  397. package/dist/styles/components/progress.css +1 -0
  398. package/dist/styles/components/prompt-ui.css +1 -0
  399. package/dist/styles/components/radio.css +1 -0
  400. package/dist/styles/components/schema-form.css +1 -0
  401. package/dist/styles/components/switch.css +1 -0
  402. package/dist/styles/components/tabs.css +1 -0
  403. package/dist/styles/components/tooltip.css +1 -0
  404. package/dist/styles/components/virtual-list.css +1 -0
  405. package/dist/tokens.css +1 -0
  406. package/docs/api-reference.md +175 -0
  407. package/docs/component-schema.md +231 -0
  408. package/docs/components.md +269 -0
  409. package/docs/design-system.md +183 -0
  410. package/docs/getting-started.md +198 -0
  411. package/docs/message-protocol.md +262 -0
  412. package/docs/utility-classes.md +205 -0
  413. package/lighthouse-audit.mjs +113 -0
  414. package/package.json +45 -0
  415. package/scripts/analyze-components.js +105 -0
  416. package/scripts/build-app.js +193 -0
  417. package/scripts/build-framework.js +444 -0
  418. package/scripts/build-utils.js +101 -0
  419. package/scripts/test-isolated.js +151 -0
  420. package/server.js +256 -0
  421. package/src/chunks/advanced.js +27 -0
  422. package/src/chunks/core.js +61 -0
  423. package/src/chunks/display.js +25 -0
  424. package/src/chunks/feedback.js +15 -0
  425. package/src/chunks/forms.js +25 -0
  426. package/src/chunks/layout.js +27 -0
  427. package/src/components/mu-alert.js +96 -0
  428. package/src/components/mu-api-table.js +167 -0
  429. package/src/components/mu-avatar.js +94 -0
  430. package/src/components/mu-badge.js +32 -0
  431. package/src/components/mu-bottom-nav.js +115 -0
  432. package/src/components/mu-button.js +61 -0
  433. package/src/components/mu-callout.js +71 -0
  434. package/src/components/mu-card.js +36 -0
  435. package/src/components/mu-checkbox.js +186 -0
  436. package/src/components/mu-chip.js +125 -0
  437. package/src/components/mu-code.js +534 -0
  438. package/src/components/mu-confirm.js +268 -0
  439. package/src/components/mu-container.js +53 -0
  440. package/src/components/mu-datatable.js +517 -0
  441. package/src/components/mu-divider.js +40 -0
  442. package/src/components/mu-doc-page.js +100 -0
  443. package/src/components/mu-drawer-item.js +158 -0
  444. package/src/components/mu-drawer.js +305 -0
  445. package/src/components/mu-dropdown.js +239 -0
  446. package/src/components/mu-error-boundary.js +191 -0
  447. package/src/components/mu-example.js +335 -0
  448. package/src/components/mu-fetch.js +256 -0
  449. package/src/components/mu-form.js +133 -0
  450. package/src/components/mu-grid.js +63 -0
  451. package/src/components/mu-icon.js +211 -0
  452. package/src/components/mu-input.js +142 -0
  453. package/src/components/mu-layout.js +129 -0
  454. package/src/components/mu-lazy.js +94 -0
  455. package/src/components/mu-modal.js +160 -0
  456. package/src/components/mu-navbar.js +71 -0
  457. package/src/components/mu-page.js +77 -0
  458. package/src/components/mu-progress.js +54 -0
  459. package/src/components/mu-prompt-ui.js +382 -0
  460. package/src/components/mu-radio.js +200 -0
  461. package/src/components/mu-repeat.js +135 -0
  462. package/src/components/mu-router.js +169 -0
  463. package/src/components/mu-schema-form.js +441 -0
  464. package/src/components/mu-sidebar.js +81 -0
  465. package/src/components/mu-skeleton.js +69 -0
  466. package/src/components/mu-spinner.js +30 -0
  467. package/src/components/mu-stack.js +59 -0
  468. package/src/components/mu-switch.js +150 -0
  469. package/src/components/mu-table.js +80 -0
  470. package/src/components/mu-tabs.js +112 -0
  471. package/src/components/mu-textarea.js +96 -0
  472. package/src/components/mu-theme-toggle.js +52 -0
  473. package/src/components/mu-toast.js +151 -0
  474. package/src/components/mu-tooltip.js +182 -0
  475. package/src/components/mu-virtual-list.js +184 -0
  476. package/src/core/MuElement.js +562 -0
  477. package/src/core/agent-api.js +771 -0
  478. package/src/core/breakpoints.js +195 -0
  479. package/src/core/bus.js +378 -0
  480. package/src/core/component-schema.js +287 -0
  481. package/src/core/feature-registry.js +241 -0
  482. package/src/core/form-state.js +252 -0
  483. package/src/core/http.js +104 -0
  484. package/src/core/keyboard.js +105 -0
  485. package/src/core/layers.js +71 -0
  486. package/src/core/render.js +201 -0
  487. package/src/core/ripple.js +158 -0
  488. package/src/core/router.js +100 -0
  489. package/src/core/scheduler.js +109 -0
  490. package/src/core/signals.js +164 -0
  491. package/src/core/store.js +268 -0
  492. package/src/core/theme.js +68 -0
  493. package/src/core/transitions.js +72 -0
  494. package/src/core/utils.js +30 -0
  495. package/src/index.d.ts +234 -0
  496. package/src/index.js +308 -0
  497. package/src/styles/animations.css +252 -0
  498. package/src/styles/common.css +82 -0
  499. package/src/styles/components/animations.css +129 -0
  500. package/src/styles/components/avatar.css +83 -0
  501. package/src/styles/components/badge.css +80 -0
  502. package/src/styles/components/bottom-nav.css +37 -0
  503. package/src/styles/components/button.css +348 -0
  504. package/src/styles/components/card.css +138 -0
  505. package/src/styles/components/checkbox.css +201 -0
  506. package/src/styles/components/chip.css +93 -0
  507. package/src/styles/components/datatable.css +180 -0
  508. package/src/styles/components/divider.css +49 -0
  509. package/src/styles/components/drawer-item.css +123 -0
  510. package/src/styles/components/drawer.css +273 -0
  511. package/src/styles/components/grid.css +189 -0
  512. package/src/styles/components/icon.css +40 -0
  513. package/src/styles/components/input.css +203 -0
  514. package/src/styles/components/layout.css +121 -0
  515. package/src/styles/components/navbar.css +91 -0
  516. package/src/styles/components/overlays.css +329 -0
  517. package/src/styles/components/progress.css +79 -0
  518. package/src/styles/components/prompt-ui.css +286 -0
  519. package/src/styles/components/radio.css +17 -0
  520. package/src/styles/components/schema-form.css +85 -0
  521. package/src/styles/components/switch.css +69 -0
  522. package/src/styles/components/tabs.css +145 -0
  523. package/src/styles/components/tooltip.css +93 -0
  524. package/src/styles/components/virtual-list.css +36 -0
  525. package/src/styles/components.css +3677 -0
  526. package/src/styles/routes/home.css +97 -0
  527. package/src/styles/tokens.css +675 -0
  528. package/tests/agents/agent-integration.test.js +76 -0
  529. package/tests/benchmark.html +296 -0
  530. package/tests/build/scan-components.test.js +173 -0
  531. package/tests/components/all-components.test.js +245 -0
  532. package/tests/components/all-missing-components.test.js +574 -0
  533. package/tests/components/mu-alert.test.js +113 -0
  534. package/tests/components/mu-avatar.test.js +148 -0
  535. package/tests/components/mu-badge.test.js +92 -0
  536. package/tests/components/mu-button.test.js +112 -0
  537. package/tests/components/mu-card.test.js +89 -0
  538. package/tests/components/mu-checkbox.test.js +158 -0
  539. package/tests/components/mu-chip.test.js +118 -0
  540. package/tests/components/mu-container.test.js +120 -0
  541. package/tests/components/mu-divider.test.js +98 -0
  542. package/tests/components/mu-drawer-item.test.js +199 -0
  543. package/tests/components/mu-drawer.test.js +96 -0
  544. package/tests/components/mu-dropdown.test.js +125 -0
  545. package/tests/components/mu-form.test.js +138 -0
  546. package/tests/components/mu-grid.test.js +135 -0
  547. package/tests/components/mu-icon.test.js +110 -0
  548. package/tests/components/mu-input.test.js +131 -0
  549. package/tests/components/mu-lazy.test.js +103 -0
  550. package/tests/components/mu-modal.test.js +275 -0
  551. package/tests/components/mu-navbar.test.js +101 -0
  552. package/tests/components/mu-progress.test.js +115 -0
  553. package/tests/components/mu-radio.test.js +114 -0
  554. package/tests/components/mu-repeat.test.js +106 -0
  555. package/tests/components/mu-sidebar.test.js +126 -0
  556. package/tests/components/mu-skeleton.test.js +162 -0
  557. package/tests/components/mu-stack.test.js +143 -0
  558. package/tests/components/mu-switch.test.js +292 -0
  559. package/tests/components/mu-table.test.js +124 -0
  560. package/tests/components/mu-tabs.test.js +104 -0
  561. package/tests/components/mu-textarea.test.js +115 -0
  562. package/tests/components/mu-toast.test.js +321 -0
  563. package/tests/components/mu-tooltip.test.js +133 -0
  564. package/tests/components/mu-virtual-list.test.js +109 -0
  565. package/tests/core/MuElement.test.js +120 -0
  566. package/tests/core/agent-api.test.js +125 -0
  567. package/tests/core/all-core-modules.test.js +442 -0
  568. package/tests/core/bus.test.js +364 -0
  569. package/tests/core/component-schema.test.js +160 -0
  570. package/tests/core/feature-registry.test.js +198 -0
  571. package/tests/core/form-state.test.js +167 -0
  572. package/tests/core/http.test.js +119 -0
  573. package/tests/core/keyboard.test.js +319 -0
  574. package/tests/core/layers.test.js +129 -0
  575. package/tests/core/namespaced-stores.test.js +114 -0
  576. package/tests/core/render.test.js +121 -0
  577. package/tests/core/ripple.test.js +131 -0
  578. package/tests/core/router.test.js +89 -0
  579. package/tests/core/scheduler.test.js +121 -0
  580. package/tests/core/signals.test.js +128 -0
  581. package/tests/core/store.test.js +171 -0
  582. package/tests/core/transitions.test.js +82 -0
  583. package/tests/e2e/accessibility-harness.html +58 -0
  584. package/tests/e2e/accessibility.test.js +401 -0
  585. package/tests/e2e/agent-features.test.js +372 -0
  586. package/tests/e2e/card-spacing.test.js +287 -0
  587. package/tests/e2e/components.test.js +439 -0
  588. package/tests/e2e/demo-routes.test.js +478 -0
  589. package/tests/e2e/layout-css-fallback.test.js +334 -0
  590. package/tests/e2e/mu-alert.e2e.test.js +111 -0
  591. package/tests/e2e/mu-checkbox.test.js +489 -0
  592. package/tests/e2e/mu-chip.test.js +347 -0
  593. package/tests/e2e/mu-form.test.js +499 -0
  594. package/tests/e2e/mu-icon.test.js +114 -0
  595. package/tests/e2e/mu-radio.test.js +113 -0
  596. package/tests/e2e/mu-skeleton.test.js +140 -0
  597. package/tests/e2e/mu-switch.test.js +415 -0
  598. package/tests/e2e/mu-tabs.test.js +494 -0
  599. package/tests/e2e/mu-textarea.test.js +242 -0
  600. package/tests/e2e/mu-virtual-list.test.js +427 -0
  601. package/tests/e2e/perf-memory.test.js +161 -0
  602. package/tests/e2e/puppeteer-helper.js +137 -0
  603. package/tests/e2e/puppeteer.test.js +226 -0
  604. package/tests/e2e/pwa.test.js +261 -0
  605. package/tests/e2e/test-harness.html +319 -0
  606. package/tests/manual/test-components.html +120 -0
  607. package/tests/memory-test.html +309 -0
  608. package/tests/setup-dom.js +93 -0
  609. package/tests/visual-test.html +301 -0
@@ -0,0 +1,6 @@
1
+ import{f as V}from"./chunk-fqyb2pms.js";import{j as O,k as Q}from"./chunk-4tezav8r.js";class W extends O{static baseClass="mu-router";static observedAttributes=["base","default"];#q=new Map;#v=null;connectedCallback(){super.connectedCallback(),this.listen(window,"hashchange",()=>this.#w()),this.#w()}render(){this.innerHTML='<div class="mu-router__content"></div>'}get#z(){return this.attr("base","/app/pages")}get#B(){return this.attr("default","home")}get#F(){return this.querySelector(".mu-router__content")}async#w(){let q=window.location.hash.slice(1)||this.#B;if(q===this.#v)return;this.#v=q,this.emit("mu-route-change",{route:q}),await this.#G(q)}async#G(q){let w=this.#F;if(!w)return;w.innerHTML="<mu-spinner></mu-spinner>";try{if(this.#q.has(q)){w.innerHTML=this.#q.get(q),this.emit("mu-page-loaded",{route:q});return}let v=`${this.#z}/${q}.html`,B=await fetch(v);if(!B.ok)throw Error(`Page not found: ${q}`);let F=await B.text(),z=new DOMParser().parseFromString(F,"text/html").querySelector("mu-page");if(z){let G=z.querySelector("template"),J=G?G.innerHTML:z.innerHTML;this.#q.set(q,J),w.innerHTML=J;let K=z.querySelector('script[type="x-dependencies"]');if(K)await this.#J(K.textContent);let N=z.getAttribute("title");if(N)document.title=`${N} | microUI`}else w.innerHTML=F;this.emit("mu-page-loaded",{route:q})}catch(v){w.innerHTML=`
2
+ <mu-alert variant="error">
3
+ <strong>Page not found</strong>
4
+ <p>Could not load page: ${V(q)}</p>
5
+ </mu-alert>
6
+ `,this.emit("mu-page-error",{route:q,error:v})}}async#J(q){let w=q.split(/[\n,]/).map((v)=>v.trim()).filter((v)=>v&&v.startsWith("mu-"));for(let v of w){if(customElements.get(v))continue;try{await import(`/dist/components/${v}.js`)}catch(B){console.warn(`[mu-router] Could not load: ${v}`,B)}}}navigate(q){window.location.hash=q}get currentRoute(){return this.#v}}Q("mu-router",W);export{W as MuRouter};
@@ -0,0 +1,76 @@
1
+ import{f as J}from"./chunk-fqyb2pms.js";import{j as $}from"./chunk-4tezav8r.js";class g extends ${static get observedAttributes(){return["submit-label","reset-label","inline","readonly","disabled"]}static baseClass="mu-schema-form";static cssFile="schema-form";constructor(){super();this._schema=null,this._values={},this._errors={},this._touched={}}get schema(){return this._schema}set schema(B){if(this._schema=B,this._initializeValues(),this.isConnected)this.render()}get submitLabel(){return this.getAttribute("submit-label")||"Submit"}get resetLabel(){return this.getAttribute("reset-label")||"Reset"}get inline(){return this.hasAttribute("inline")}get readonly(){return this.hasAttribute("readonly")}get disabled(){return this.hasAttribute("disabled")}connectedCallback(){super.connectedCallback(),this.render()}attributeChangedCallback(B,k,A){if(this.isConnected&&k!==A)this.render()}getValues(){return{...this._values}}setValues(B){this._values={...this._values,...B},this.render()}validate(){if(!this._schema||!this._schema.properties)return!0;this._errors={};let B=this._schema.required||[];for(let[k,A]of Object.entries(this._schema.properties)){let I=this._values[k],C=this._validateField(k,I,A,B.includes(k));if(C.length>0)this._errors[k]=C}return this.render(),Object.keys(this._errors).length===0}getErrors(){return{...this._errors}}reset(){this._initializeValues(),this._errors={},this._touched={},this.render(),this.emit("mu-reset",{values:this.getValues()},{bubbles:!0})}submit(){if(this.validate())this.emit("mu-submit",this.getValues(),{bubbles:!0})}_initializeValues(){if(this._values={},!this._schema||!this._schema.properties)return;for(let[B,k]of Object.entries(this._schema.properties))if(k.default!==void 0)this._values[B]=k.default;else if(k.type==="boolean")this._values[B]=!1;else if(k.type==="number"||k.type==="integer")this._values[B]=null;else this._values[B]=""}_validateField(B,k,A,I){let C=[];if(I&&(k===""||k===null||k===void 0))return C.push(`${A.title||B} is required`),C;if(k===""||k===null||k===void 0)return C;if(A.type==="string"){if(A.minLength&&k.length<A.minLength)C.push(`Minimum ${A.minLength} characters`);if(A.maxLength&&k.length>A.maxLength)C.push(`Maximum ${A.maxLength} characters`);if(A.pattern&&!new RegExp(A.pattern).test(k))C.push(A.patternError||"Invalid format");if(A.format==="email"&&!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(k))C.push("Invalid email address");if(A.format==="url"&&!/^https?:\/\/.+/.test(k))C.push("Invalid URL")}if(A.type==="number"||A.type==="integer"){let G=Number(k);if(isNaN(G))C.push("Must be a number");else{if(A.minimum!==void 0&&G<A.minimum)C.push(`Minimum value is ${A.minimum}`);if(A.maximum!==void 0&&G>A.maximum)C.push(`Maximum value is ${A.maximum}`)}}return C}_getInputType(B){if(B.format==="email")return"email";if(B.format==="password")return"password";if(B.format==="date")return"date";if(B.format==="time")return"time";if(B.format==="datetime-local")return"datetime-local";if(B.format==="url")return"url";if(B.format==="tel")return"tel";if(B.type==="number"||B.type==="integer")return"number";return"text"}_renderField(B,k,A){let I=this._values[B]??"",C=this._errors[B]||[],G=C.length>0,K=J(B),Q=J(k.title||B),Z=J(k.placeholder||""),N=J(k.description||""),W=J(String(I)),X=G?J(C[0]):"",U=this.disabled||k.readOnly,_=this.readonly;if(k.type==="boolean")return`
2
+ <div class="mu-schema-form-field" data-field="${K}">
3
+ <div class="mu-schema-form-switch-row">
4
+ <mu-switch
5
+ ${I?"checked":""}
6
+ ${U?"disabled":""}
7
+ data-field="${K}"
8
+ ></mu-switch>
9
+ <label class="mu-schema-form-switch-label">${Q}</label>
10
+ </div>
11
+ ${N?`<div class="mu-schema-form-description">${N}</div>`:""}
12
+ </div>
13
+ `;if(k.enum){let j=k.enum.map((Y,O)=>{let P=J(String(Y)),S=J(k.enumLabels?.[O]||String(Y));return`<mu-option value="${P}" ${I===Y?"selected":""}>${S}</mu-option>`}).join("");return`
14
+ <div class="mu-schema-form-field ${G?"mu-schema-form-field-error":""}" data-field="${K}">
15
+ <mu-dropdown
16
+ label="${Q}${A?" *":""}"
17
+ value="${W}"
18
+ ${U?"disabled":""}
19
+ ${A?"required":""}
20
+ data-field="${K}"
21
+ >
22
+ ${j}
23
+ </mu-dropdown>
24
+ ${N?`<div class="mu-schema-form-description">${N}</div>`:""}
25
+ ${G?`<div class="mu-schema-form-error">${X}</div>`:""}
26
+ </div>
27
+ `}if(k.type==="string"&&k.multiline)return`
28
+ <div class="mu-schema-form-field ${G?"mu-schema-form-field-error":""}" data-field="${K}">
29
+ <mu-textarea
30
+ label="${Q}${A?" *":""}"
31
+ placeholder="${Z}"
32
+ ${U?"disabled":""}
33
+ ${_?"readonly":""}
34
+ ${A?"required":""}
35
+ data-field="${K}"
36
+ >${W}</mu-textarea>
37
+ ${N?`<div class="mu-schema-form-description">${N}</div>`:""}
38
+ ${G?`<div class="mu-schema-form-error">${X}</div>`:""}
39
+ </div>
40
+ `;let z=this._getInputType(k);return`
41
+ <div class="mu-schema-form-field ${G?"mu-schema-form-field-error":""}" data-field="${K}">
42
+ <mu-input
43
+ type="${z}"
44
+ label="${Q}${A?" *":""}"
45
+ placeholder="${Z}"
46
+ value="${W}"
47
+ ${U?"disabled":""}
48
+ ${_?"readonly":""}
49
+ ${A?"required":""}
50
+ ${k.minimum!==void 0?`min="${k.minimum}"`:""}
51
+ ${k.maximum!==void 0?`max="${k.maximum}"`:""}
52
+ ${k.minLength?`minlength="${k.minLength}"`:""}
53
+ ${k.maxLength?`maxlength="${k.maxLength}"`:""}
54
+ data-field="${K}"
55
+ ></mu-input>
56
+ ${N?`<div class="mu-schema-form-description">${N}</div>`:""}
57
+ ${G?`<div class="mu-schema-form-error">${X}</div>`:""}
58
+ </div>
59
+ `}render(){if(!this._schema||!this._schema.properties){this.innerHTML=`
60
+ <div class="mu-schema-form-empty-state">
61
+ Set the <code>schema</code> property to generate a form
62
+ </div>
63
+ `;return}let B=this._schema.required||[],k=Object.entries(this._schema.properties).map(([A,I])=>this._renderField(A,I,B.includes(A))).join("");this.innerHTML=`
64
+ <div class="mu-schema-form ${this.inline?"mu-schema-form-inline":""}">
65
+ ${k}
66
+
67
+ <div class="mu-schema-form-actions">
68
+ <mu-button variant="filled" data-action="submit" ${this.disabled?"disabled":""}>
69
+ ${this.submitLabel}
70
+ </mu-button>
71
+ <mu-button variant="text" data-action="reset" ${this.disabled?"disabled":""}>
72
+ ${this.resetLabel}
73
+ </mu-button>
74
+ </div>
75
+ </div>
76
+ `,this._attachEventListeners()}_attachEventListeners(){this.querySelectorAll("mu-input").forEach((B)=>{this.listen(B,"mu-input",(k)=>{let A=B.dataset.field;if(this._values[A]=k.detail.value,this._touched[A]=!0,this._errors[A])delete this._errors[A],B.closest(".mu-schema-form-field").classList.remove("mu-schema-form-field-error"),B.closest(".mu-schema-form-field").querySelector(".mu-schema-form-error")?.remove();this.emit("mu-change",{field:A,value:k.detail.value,values:this.getValues()},{bubbles:!0})})}),this.querySelectorAll("mu-textarea").forEach((B)=>{this.listen(B,"mu-input",(k)=>{let A=B.dataset.field;this._values[A]=k.detail.value,this._touched[A]=!0,this.emit("mu-change",{field:A,value:k.detail.value,values:this.getValues()},{bubbles:!0})})}),this.querySelectorAll("mu-dropdown").forEach((B)=>{this.listen(B,"mu-change",(k)=>{let A=B.dataset.field;this._values[A]=k.detail.value,this._touched[A]=!0,this.emit("mu-change",{field:A,value:k.detail.value,values:this.getValues()},{bubbles:!0})})}),this.querySelectorAll("mu-switch").forEach((B)=>{this.listen(B,"mu-change",(k)=>{let A=B.dataset.field;this._values[A]=k.detail.checked,this._touched[A]=!0,this.emit("mu-change",{field:A,value:k.detail.checked,values:this.getValues()},{bubbles:!0})})})}handleAction(B,k,A){if(B==="submit")this.submit();else if(B==="reset")this.reset()}}if(!customElements.get("mu-schema-form"))customElements.define("mu-schema-form",g);export{g as MuSchemaForm};
@@ -0,0 +1 @@
1
+ import"../../chunk-redtk47a.js";import{j as e,k as s}from"./chunk-4tezav8r.js";class a extends e{static baseClass="mu-sidebar";static observedAttributes=["open","width"];render(){let t=this.attr("width","250px");this.style.width=this.has("open")?t:"64px",this.style.height="100vh",this.style.background="var(--md-sys-color-surface-container)",this.style.borderRight="1px solid var(--md-sys-color-outline-variant)",this.style.transition="width var(--md-sys-motion-duration-medium2) var(--md-sys-motion-easing-emphasized)",this.style.overflow="hidden",this.style.display="flex",this.style.flexDirection="column"}update(t,i,o){this.render()}toggle(){if(this.has("open"))this.removeAttribute("open");else this.setAttribute("open","");this.emit("mu-sidebar-toggle",{open:this.has("open")})}}class r extends e{static baseClass="mu-sidebar__item";static observedAttributes=["icon","active"];connectedCallback(){super.connectedCallback(),this.listen(this,"click",()=>{this.emit("mu-sidebar-select",{item:this})})}render(){let t=this.attr("icon",""),i=this.textContent;if(this.style.display="flex",this.style.alignItems="center",this.style.gap="var(--md-sys-spacing-md, 16px)",this.style.padding="12px 16px",this.style.cursor="pointer",this.style.borderRadius="var(--md-sys-shape-corner-medium, 8px)",this.style.margin="4px 8px",this.style.transition="background var(--md-sys-motion-duration-short4) var(--md-sys-motion-easing-standard)",this.has("active"))this.style.background="var(--md-sys-color-primary-container)",this.style.color="var(--md-sys-color-on-primary-container)"}update(t,i,o){this.render()}}s("mu-sidebar",a);s("mu-sidebar-item",r);export{r as MuSidebarItem,a as MuSidebar};
@@ -0,0 +1,13 @@
1
+ import{j as G,k as H}from"./chunk-4tezav8r.js";class J extends G{static baseClass="mu-skeleton";static observedAttributes=["variant","width","height","size","lines"];render(){if(this.querySelector(".mu-skeleton__line")||this.style.animation)return;let b=this.attr("variant","rect"),C=this.attr("width","100%"),D=this.attr("height","20px"),F=this.attr("size","40px"),B=parseInt(this.attr("lines","1"));if(this.style.display="block",b==="text"&&B>1)this.innerHTML=Array(B).fill(0).map((q,K)=>`<div class="mu-skeleton__line" style="
2
+ height: 16px;
3
+ margin-bottom: 8px;
4
+ width: ${K===B-1?"70%":"100%"};
5
+ background: var(--md-sys-color-surface-container-highest);
6
+ border-radius: 4px;
7
+ animation: mu-skeleton-pulse 1.5s ease-in-out infinite;
8
+ "></div>`).join("");else this.style.width=b==="circle"?F:C,this.style.height=b==="circle"?F:D,this.style.borderRadius=b==="circle"?"50%":"4px",this.style.background="var(--md-sys-color-surface-container-highest)",this.style.animation="mu-skeleton-pulse 1.5s ease-in-out infinite";if(!document.getElementById("mu-skeleton-styles")){let q=document.createElement("style");q.id="mu-skeleton-styles",q.textContent=`
9
+ @keyframes mu-skeleton-pulse {
10
+ 0%, 100% { opacity: 1; }
11
+ 50% { opacity: 0.5; }
12
+ }
13
+ `,document.head.appendChild(q)}}update(b,C,D){this.render()}}H("mu-skeleton",J);export{J as MuSkeleton};
@@ -0,0 +1 @@
1
+ import{j as h,k as q}from"./chunk-4tezav8r.js";class v extends h{static baseClass="mu-spinner";static observedAttributes=["size","color"];render(){if(this.querySelector(".mu-spinner__circle"))return;this.innerHTML='<span class="mu-spinner__circle"></span>',this.#b()}update(b,g,w){this.#b()}#b(){let b=this.attr("size","md"),g=this.attr("color","primary");this.className=`mu-spinner mu-spinner--${b} mu-spinner--${g}`}}q("mu-spinner",v);export{v as MuSpinner};
@@ -0,0 +1 @@
1
+ import{j as x,k as z}from"./chunk-4tezav8r.js";class A extends x{static baseClass="mu-stack";static observedAttributes=["direction","gap","align","justify","wrap","nowrap"];render(){this.#b()}update(b,q,v){this.#b()}#b(){let b=this.attr("direction","column"),q=this.attr("gap","md"),v=this.attr("align","stretch"),B=this.attr("justify","flex-start"),C=this.has("wrap"),D=this.has("nowrap"),F=b==="row"||b==="row-reverse"?!D:C,G={none:"0",xs:"var(--md-sys-spacing-xs, 4px)",sm:"var(--md-sys-spacing-sm, 8px)",md:"var(--md-sys-spacing-md, 16px)",lg:"var(--md-sys-spacing-lg, 24px)",xl:"var(--md-sys-spacing-xl, 32px)"};this.style.display="flex",this.style.flexDirection=b,this.style.gap=G[q]||q,this.style.alignItems=v,this.style.justifyContent=B,this.style.flexWrap=F?"wrap":"nowrap",this.style.boxSizing="border-box",this.style.maxWidth="100%",this.style.minWidth="0",this.style.flexShrink="1"}}z("mu-stack",A);export{A as MuStack};
@@ -0,0 +1,6 @@
1
+ import{e as N}from"./chunk-h7cdbhxw.js";import{f as K}from"./chunk-fqyb2pms.js";import{j as I,k as J}from"./chunk-4tezav8r.js";class O extends I{static baseClass="mu-switch";static cssFile="switch";static observedAttributes=["checked","disabled","label"];connectedCallback(){super.connectedCallback(),this.setAttribute("role","switch"),this.setupActivation(()=>this.toggle()),this.listen(this,"pointerdown",(g)=>{if(!this.isDisabled)N(this,g)}),this.listen(this,"click",()=>{if(!this.isDisabled)this.toggle()})}render(){if(this.querySelector(".mu-switch__track")){this.#g();return}let g=K(this.attr("label","")||this.textContent);this.innerHTML=`
2
+ <span class="mu-switch__track">
3
+ <span class="mu-switch__thumb"></span>
4
+ </span>
5
+ ${g?`<span class="mu-switch__label">${g}</span>`:""}
6
+ `,this.style.display="inline-flex",this.style.alignItems="center",this.style.gap="12px",this.style.cursor=this.has("disabled")?"not-allowed":"pointer",this.#g()}update(g,q,y){this.#g()}#g(){let g=this.querySelector(".mu-switch__track"),q=this.querySelector(".mu-switch__thumb"),y=this.has("checked"),A=this.has("disabled");if(this.style.cursor=A?"not-allowed":"pointer",g)if(g.style.width="52px",g.style.height="32px",g.style.borderRadius="16px",g.style.position="relative",g.style.transition="background var(--md-sys-motion-duration-short4) var(--md-sys-motion-easing-standard)",A)g.style.background="color-mix(in srgb, var(--md-sys-color-on-surface) 12%, transparent)";else g.style.background=y?"var(--md-sys-color-primary)":"var(--md-sys-color-surface-container-highest)";if(q){let F=y?24:16,P=y?4:8,Q=y?24:6;if(q.style.width=`${F}px`,q.style.height=`${F}px`,q.style.borderRadius=`${F/2}px`,q.style.position="absolute",q.style.top=`${P}px`,q.style.left=`${Q}px`,q.style.transition="all var(--md-sys-motion-duration-short4) var(--md-sys-motion-easing-emphasized)",A)q.style.background="color-mix(in srgb, var(--md-sys-color-on-surface) 38%, transparent)",q.style.boxShadow="none";else q.style.background=y?"var(--md-sys-color-on-primary)":"var(--md-sys-color-outline)",q.style.boxShadow="var(--md-sys-elevation-level1)"}let B=this.querySelector(".mu-switch__label");if(B)B.style.color=A?"color-mix(in srgb, var(--md-sys-color-on-surface) 38%, transparent)":"var(--md-sys-color-on-surface)";this.setAttribute("aria-checked",String(y)),this.setAttribute("aria-disabled",String(A)),this.setAttribute("tabindex",A?"-1":"0");let G=B?.textContent||this.attr("label","");if(G)this.setAttribute("aria-label",G)}toggle(){if(this.has("checked"))this.removeAttribute("checked");else this.setAttribute("checked","");this.emit("mu-change",{checked:this.has("checked")})}get checked(){return this.has("checked")}set checked(g){if(g)this.setAttribute("checked","");else this.removeAttribute("checked")}}J("mu-switch",O);export{O as MuSwitch};
@@ -0,0 +1 @@
1
+ import{j as t,k as e}from"./chunk-4tezav8r.js";class s extends t{static baseClass="mu-table";static observedAttributes=["striped","hover"];render(){this.style.display="table",this.style.width="100%",this.style.borderCollapse="collapse",this.style.fontSize="var(--md-sys-typescale-body-medium-size, 14px)"}}class a extends t{static baseClass="mu-table__head";render(){this.style.display="table-header-group",this.style.background="var(--md-sys-color-surface-container)"}}class l extends t{static baseClass="mu-table__body";render(){this.style.display="table-row-group"}}class d extends t{static baseClass="mu-table__row";render(){this.style.display="table-row",this.style.borderBottom="1px solid var(--md-sys-color-outline-variant)"}}class r extends t{static baseClass="mu-table__header";render(){this.style.display="table-cell",this.style.padding="12px 16px",this.style.fontWeight="600",this.style.textAlign="left"}}class i extends t{static baseClass="mu-table__cell";render(){this.style.display="table-cell",this.style.padding="12px 16px"}}e("mu-table",s);e("mu-thead",a);e("mu-tbody",l);e("mu-tr",d);e("mu-th",r);e("mu-td",i);export{d as MuTr,a as MuThead,r as MuTh,i as MuTd,l as MuTbody,s as MuTable};
@@ -0,0 +1 @@
1
+ import{j as z,k as B}from"./chunk-4tezav8r.js";class F extends z{static baseClass="mu-tabs";static cssFile="tabs";static observedAttributes=["active"];#k=[];#g=null;connectedCallback(){super.connectedCallback(),this.listen(this,"click",(g)=>{let q=g.target.closest("mu-tab");if(q){let k=this.querySelector(".mu-tabs__list"),D=(k?Array.from(k.querySelectorAll("mu-tab")):Array.from(this.querySelectorAll("mu-tab"))).indexOf(q);if(D!==-1)this.setAttribute("active",D.toString())}})}render(){if(this.querySelector(".mu-tabs__list")){this.#k=Array.from(this.querySelectorAll("mu-tab")),this.#g=this.querySelector(".mu-tabs__list"),this.#q();return}this.#g=document.createElement("div"),this.#g.className="mu-tabs__list",this.#g.setAttribute("role","tablist"),this.#k=Array.from(this.querySelectorAll("mu-tab")),this.#k.forEach((g)=>{g.setAttribute("role","tab"),this.#g.appendChild(g)}),this.appendChild(this.#g),this.#q()}update(g,q,k){if(g==="active")this.#q(),this.emit("mu-tab-change",{index:parseInt(q)||0})}#q(){let g=parseInt(this.attr("active","0")),q=this.#k.length;if(this.#k.forEach((k,y)=>{k.classList.toggle("is-active",y===g),k.setAttribute("aria-selected",y===g?"true":"false")}),this.#g&&q>0){let k=100/q;this.#g.style.setProperty("--indicator-width",`${k}%`),this.#g.style.setProperty("--indicator-left",`${g*k}%`)}}}class G extends z{static baseClass="mu-tabs__tab";connectedCallback(){super.connectedCallback(),this.setAttribute("tabindex","0")}render(){}}B("mu-tabs",F);B("mu-tab",G);export{F as MuTabs,G as MuTab};
@@ -0,0 +1,11 @@
1
+ import{f as k}from"./chunk-fqyb2pms.js";import{j as q,k as z}from"./chunk-4tezav8r.js";class B extends q{static baseClass="mu-textarea";static cssFile="input";static observedAttributes=["placeholder","rows","disabled","readonly","name"];#g=null;render(){if(!this.querySelector(".mu-textarea__field")){let g=k(this.attr("placeholder","")),D=this.attr("rows","4"),G=this.has("disabled")?"disabled":"",I=this.has("readonly")?"readonly":"",J=k(this.attr("name",""));this.innerHTML=`
2
+ <textarea
3
+ class="mu-textarea__field"
4
+ placeholder="${g}"
5
+ aria-label="${g||"Text area"}"
6
+ rows="${D}"
7
+ name="${J}"
8
+ ${G}
9
+ ${I}
10
+ ></textarea>
11
+ `,this.style.display="block",this.style.position="relative"}this.#g=this.querySelector("textarea"),this.#g.style.width="100%",this.#g.style.padding="12px 16px",this.#g.style.fontSize="var(--md-sys-typescale-body-large-size, 16px)",this.#g.style.fontFamily="inherit",this.#g.style.border="1px solid var(--md-sys-color-outline)",this.#g.style.borderRadius="var(--md-sys-shape-corner-small, 4px)",this.#g.style.background="var(--md-sys-color-surface)",this.#g.style.color="var(--md-sys-color-on-surface)",this.#g.style.resize="vertical",this.#g.style.transition="border-color var(--md-sys-motion-duration-short4) var(--md-sys-motion-easing-standard)",this.#g.style.outline="none",this.#g.style.boxSizing="border-box",this.listen(this.#g,"focus",()=>{this.#g.style.borderColor="var(--md-sys-color-primary)",this.#g.style.boxShadow="inset 0 0 0 1px var(--md-sys-color-primary)"}),this.listen(this.#g,"blur",()=>{this.#g.style.borderColor="var(--md-sys-color-outline)",this.#g.style.boxShadow="none"}),this.listen(this.#g,"input",(g)=>{this.emit("mu-input",{value:g.target.value})}),this.listen(this.#g,"change",(g)=>{this.emit("mu-change",{value:g.target.value})})}get value(){return this.#g?.value||""}set value(g){if(this.#g)this.#g.value=g}focus(){this.#g?.focus()}}z("mu-textarea",B);export{B as MuTextarea};
@@ -0,0 +1,5 @@
1
+ import{g as z,h as x,i as H}from"./chunk-redtk47a.js";import{j as F,k as G}from"./chunk-4tezav8r.js";var B={set(q){if(q==="auto"){let w=window.matchMedia("(prefers-color-scheme: dark)").matches;document.documentElement.setAttribute("data-theme",w?"dark":"light")}else document.documentElement.setAttribute("data-theme",q);localStorage.setItem("mu-theme",q),z.emit(x.THEME_CHANGE,{theme:q})},get(){return document.documentElement.getAttribute("data-theme")||"light"},toggle(){let q=this.get();this.set(q==="dark"?"light":"dark")},init(){let q=localStorage.getItem("mu-theme");if(q)this.set(q);else this.set("auto");window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",(w)=>{if(localStorage.getItem("mu-theme")==="auto")document.documentElement.setAttribute("data-theme",w.matches?"dark":"light")})}};if(typeof window<"u")B.init();class J extends F{static baseClass="mu-theme-toggle";connectedCallback(){super.connectedCallback(),this.listen(this,"click",()=>B.toggle()),z.on(x.THEME_CHANGE,()=>this.#q())}render(){this.innerHTML=`
2
+ <button class="mu-theme-toggle__button" aria-label="Toggle theme">
3
+ <span class="mu-theme-toggle__icon"></span>
4
+ </button>
5
+ `,this.#q()}#q(){let q=B.get()==="dark",w=this.querySelector(".mu-theme-toggle__icon");if(w)w.textContent=q?"☀️":"\uD83C\uDF19"}}G("mu-theme-toggle",J);H("mu-theme-toggle",{signals:[x.THEME_CHANGE],options:{themes:["light","dark"],emits:["click"]},description:"Theme toggle button that switches between light/dark modes"});export{J as MuThemeToggle};
@@ -0,0 +1,4 @@
1
+ import{g as z,h as x,i as G}from"./chunk-redtk47a.js";import{j as D,k as F}from"./chunk-4tezav8r.js";class H extends D{static baseClass="mu-toast";static cssFile="snackbar";static observedAttributes=["severity","duration","position"];#q=null;#h=null;connectedCallback(){if(!this.#h&&!this.querySelector(".mu-toast__content"))this.#h=this.innerHTML;super.connectedCallback(),this.listen(this,"click",(k)=>{if(k.target.classList.contains("mu-toast__close"))this.dismiss()});let h=parseInt(this.attr("duration","3000"));if(h>0)this.#q=this.setTimeout(()=>this.dismiss(),h)}disconnectedCallback(){super.disconnectedCallback()}render(){if(this.querySelector(".mu-toast__content")){this.#k();return}let h=this.#h||"";this.innerHTML=`
2
+ <span class="mu-toast__content">${h}</span>
3
+ <button class="mu-toast__close" aria-label="Dismiss">✕</button>
4
+ `,this.#k()}update(h,k,B){this.#k()}#k(){let h=this.attr("severity","info"),k=this.attr("position","bottom-center");this.className=`mu-toast mu-toast--${h} mu-toast--${k}`}dismiss(){this.emit("mu-dismiss"),this.classList.add("is-exiting");let h=!1,k=()=>{if(!h)h=!0,this.remove()};this.addEventListener("animationend",k,{once:!0}),this.setTimeout(k,200)}}F("mu-toast",H);class J extends D{static baseClass="mu-toast-container";connectedCallback(){super.connectedCallback(),this.setAttribute("role","status"),this.setAttribute("aria-live","polite")}}F("mu-toast-container",J);var K={show(h,k={}){let B=k.position||"bottom-center",q=document.querySelector(`mu-toast-container[position="${B}"]`);if(!q)q=document.createElement("mu-toast-container"),q.setAttribute("position",B),document.body.appendChild(q);let w=document.createElement("mu-toast");if(w.textContent=h,k.severity)w.setAttribute("severity",k.severity);if(k.duration)w.setAttribute("duration",k.duration.toString());return q.appendChild(w),w}};if(typeof window<"u"&&z&&!z.hasListeners(x.TOAST_SHOW))z.on(x.TOAST_SHOW,(h)=>{K.show(h.message,h)});G("mu-toast",{signals:[x.TOAST_SHOW,x.TOAST_DISMISS],options:{severities:["info","success","warning","error"],positions:["top-left","top-center","top-right","bottom-left","bottom-center","bottom-right"],defaultDuration:3000},description:"MD3 Snackbar/Toast Notification component"});export{K as Toast,J as MuToastContainer,H as MuToast};
@@ -0,0 +1,10 @@
1
+ import{j as N,k as Q}from"./chunk-4tezav8r.js";var D=8;class S extends N{static baseClass="mu-tooltip";static cssFile="tooltip";static observedAttributes=["content","position"];#b=null;connectedCallback(){super.connectedCallback(),this.listen(this,"mouseenter",()=>this.show()),this.listen(this,"mouseleave",()=>this.hide()),this.listen(this,"focus",()=>this.show(),{capture:!0}),this.listen(this,"blur",()=>this.hide(),{capture:!0})}render(){let z=this.attr("position","top");this.className=`mu-tooltip mu-tooltip--${z}`,this.style.position="relative",this.style.display="inline-block"}update(z,b,k){if(z==="position"){let q=this.attr("position","top");this.className=`mu-tooltip mu-tooltip--${q}`}}show(){if(this.#b)return;let z=this.attr("content","");if(!z)return;let b=this.attr("position","top");this.#b=document.createElement("div"),this.#b.className=`mu-tooltip__content mu-tooltip__content--${b}`,this.#b.textContent=z,this.#b.setAttribute("role","tooltip"),this.#b.style.cssText=`
2
+ position: fixed !important;
3
+ top: 0 !important;
4
+ left: 0 !important;
5
+ transform: none !important;
6
+ visibility: hidden;
7
+ z-index: var(--mu-z-tooltip, 9999);
8
+ pointer-events: none;
9
+ margin: 0 !important;
10
+ `,document.body.appendChild(this.#b),this.#q(b),requestAnimationFrame(()=>{if(this.#b)this.#b.style.visibility="visible",this.#b.style.opacity="1"})}#q(z){let b=this.getBoundingClientRect(),k=this.#b.getBoundingClientRect(),{x:q,y:B}=this.#k(z,b,k),J=this.#z(z,q,B,k,b);if(J!==z)({x:q,y:B}=this.#k(J,b,k));let{innerWidth:K,innerHeight:U}=window;q=Math.max(4,Math.min(q,K-k.width-4)),B=Math.max(4,Math.min(B,U-k.height-4)),this.#b.style.setProperty("left",`${q}px`,"important"),this.#b.style.setProperty("top",`${B}px`,"important")}#k(z,b,k){let q,B;switch(z){case"top":q=b.left+(b.width-k.width)/2,B=b.top-k.height-D;break;case"bottom":q=b.left+(b.width-k.width)/2,B=b.bottom+D;break;case"left":q=b.left-k.width-D,B=b.top+(b.height-k.height)/2;break;case"right":q=b.right+D,B=b.top+(b.height-k.height)/2;break;default:q=b.left+(b.width-k.width)/2,B=b.top-k.height-D}return{x:q,y:B}}#z(z,b,k,q,B){let{innerWidth:J,innerHeight:K}=window;switch(z){case"top":if(k<0)return"bottom";break;case"bottom":if(k+q.height>K)return"top";break;case"left":if(b<0)return"right";break;case"right":if(b+q.width>J)return"left";break}return z}hide(){if(this.#b)this.#b.remove(),this.#b=null}disconnectedCallback(){super.disconnectedCallback(),this.hide()}}Q("mu-tooltip",S);export{S as MuTooltip};
@@ -0,0 +1,33 @@
1
+ import{c as Q}from"./chunk-mzd8jwrs.js";import{j as O,k as P}from"./chunk-4tezav8r.js";class U extends O{static baseClass="mu-virtual-list";static cssFile="virtual-list";static observedAttributes=["item-height","buffer"];#k=[];#D=(k)=>`<div>${k}</div>`;#G=0;#y=0;#F=0;#q=null;#J=null;set items(k){this.#k=k||[],this.#z()}get items(){return this.#k}set renderItem(k){this.#D=k,this.#z()}connectedCallback(){super.connectedCallback()}render(){let k=parseInt(this.attr("item-height","50"));this.innerHTML=`
2
+ <div class="mu-virtual-list__viewport" style="
3
+ height: 100%;
4
+ overflow-y: auto;
5
+ position: relative;
6
+ ">
7
+ <div class="mu-virtual-list__content" style="
8
+ position: relative;
9
+ ">
10
+ <div class="mu-virtual-list__items"></div>
11
+ </div>
12
+ </div>
13
+ `,this.#q=this.querySelector(".mu-virtual-list__viewport"),this.#J=this.querySelector(".mu-virtual-list__content");let y=Q(()=>{this.#G=this.#q.scrollTop,this.#z()},16);this.listen(this.#q,"scroll",y),this.style.display="block",this.style.height="400px",this.style.overflow="hidden",this.#z()}#z(){if(!this.#q||!this.#k.length)return;let k=parseInt(this.attr("item-height","50")),y=parseInt(this.attr("buffer","5")),z=this.#q.clientHeight,D=this.#k.length*k;this.#J.style.height=`${D}px`;let J=Math.max(0,Math.floor(this.#G/k)-y),F=Math.ceil(z/k)+y*2,q=Math.min(this.#k.length,J+F);if(J!==this.#y||q!==this.#F)this.#y=J,this.#F=q,this.#K()}async#K(){let k=parseInt(this.attr("item-height","50")),y=this.querySelector(".mu-virtual-list__items");if(!y)return;let z=this.#k.slice(this.#y,this.#F),D=50;if(z.length>D&&"scheduler"in window){let F=[];for(let q=0;q<z.length;q+=D){let G=z.slice(q,q+D);if(F.push(...G.map((N,W)=>{let K=this.#y+q+W;return`
14
+ <div class="mu-virtual-list__item" style="
15
+ position: absolute;
16
+ top: ${K*k}px;
17
+ left: 0;
18
+ right: 0;
19
+ height: ${k}px;
20
+ " data-index="${K}" data-mu-state="visible">
21
+ ${this.#D(N,K)}
22
+ </div>
23
+ `})),q+D<z.length)await scheduler.yield()}y.innerHTML=F.join("")}else y.innerHTML=z.map((F,q)=>{let G=this.#y+q;return`
24
+ <div class="mu-virtual-list__item" style="
25
+ position: absolute;
26
+ top: ${G*k}px;
27
+ left: 0;
28
+ right: 0;
29
+ height: ${k}px;
30
+ " data-index="${G}" data-mu-state="visible">
31
+ ${this.#D(F,G)}
32
+ </div>
33
+ `}).join("")}scrollToIndex(k){let y=parseInt(this.attr("item-height","50"));this.#q.scrollTop=k*y}}P("mu-virtual-list",U);export{U as MuVirtualList};
@@ -0,0 +1 @@
1
+ *,*::before,*::after{box-sizing:border-box}.mu-state-layer{position:relative;overflow:hidden}.mu-state-layer::before{content:'';position:absolute;inset:0;border-radius:inherit;opacity:0;transition:opacity var(--md-sys-motion-duration-short2) var(--md-sys-motion-easing-standard);pointer-events:none}.mu-state-layer--surface::before,.mu-state-layer:not([class*="mu-state-layer--"])::before{background:var(--md-sys-color-on-surface)}.mu-state-layer--on-primary::before{background:var(--md-sys-color-on-primary)}.mu-state-layer--on-secondary::before{background:var(--md-sys-color-on-secondary-container)}.mu-state-layer--on-error::before{background:var(--md-sys-color-on-error)}.mu-state-layer:hover:not(:disabled)::before{opacity:var(--md-sys-state-hover-opacity)}.mu-state-layer:focus-visible:not(:disabled)::before{opacity:var(--md-sys-state-focus-opacity)}.mu-state-layer:active:not(:disabled)::before{opacity:var(--md-sys-state-pressed-opacity)}.mu-state-layer:disabled::before,.mu-state-layer.is-disabled::before{display:none}mu-icon,.mu-icon{display:inline-flex;align-items:center;justify-content:center;line-height:1;vertical-align:middle}mu-icon .material-symbols-outlined{font-family:'Material Symbols Outlined',sans-serif;font-weight:normal;font-style:normal;font-size:24px;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility;font-feature-settings:'liga'}mu-icon svg{display:block}.mu-button{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:8px;min-width:48px;height:40px;padding:0 24px;font-family:var(--md-sys-typescale-font);font-size:var(--md-sys-typescale-label-large-size);font-weight:var(--md-sys-typescale-label-large-weight);line-height:var(--md-sys-typescale-label-large-line-height);letter-spacing:0.1px;text-decoration:none;white-space:nowrap;border:none;border-radius:var(--md-sys-shape-corner-full);cursor:pointer;overflow:hidden}.mu-button::before{content:'';position:absolute;inset:0;border-radius:inherit;opacity:0;transition:opacity var(--md-sys-motion-duration-short2) var(--md-sys-motion-easing-standard)}.mu-button--sm{height:32px;padding:0 16px;font-size:var(--md-sys-typescale-label-medium-size)}.mu-button--md{height:40px;padding:0 24px}.mu-button--lg{height:48px;padding:0 32px;font-size:var(--md-sys-typescale-body-large-size)}.mu-button--primary{background:var(--md-sys-color-primary);color:var(--md-sys-color-on-primary)}.mu-button--primary::before{background:var(--md-sys-color-on-primary)}.mu-button--primary:hover:not(:disabled)::before{opacity:var(--md-sys-state-hover-opacity)}.mu-button--primary:focus-visible:not(:disabled)::before{opacity:var(--md-sys-state-focus-opacity)}.mu-button--primary:active:not(:disabled)::before{opacity:var(--md-sys-state-pressed-opacity)}.mu-button--primary:hover:not(:disabled){box-shadow:var(--md-sys-elevation-level1)}.mu-button--secondary{background:var(--md-sys-color-secondary-container);color:var(--md-sys-color-on-secondary-container)}.mu-button--secondary::before{background:var(--md-sys-color-on-secondary-container)}.mu-button--secondary:hover:not(:disabled)::before{opacity:var(--md-sys-state-hover-opacity)}.mu-button--secondary:focus-visible:not(:disabled)::before{opacity:var(--md-sys-state-focus-opacity)}.mu-button--secondary:active:not(:disabled)::before{opacity:var(--md-sys-state-pressed-opacity)}.mu-button--secondary:hover:not(:disabled){box-shadow:var(--md-sys-elevation-level1)}.mu-button--ghost{background:transparent;color:var(--md-sys-color-primary);border:1px solid var(--md-sys-color-outline)}.mu-button--ghost::before{background:var(--md-sys-color-primary)}.mu-button--ghost:hover:not(:disabled)::before{opacity:var(--md-sys-state-hover-opacity)}.mu-button--ghost:focus-visible:not(:disabled)::before{opacity:var(--md-sys-state-focus-opacity)}.mu-button--danger{background:var(--md-sys-color-error);color:var(--md-sys-color-on-error)}.mu-button--danger::before{background:var(--md-sys-color-on-error)}.mu-button--danger:hover:not(:disabled)::before{opacity:var(--md-sys-state-hover-opacity)}.mu-button--danger:hover:not(:disabled){box-shadow:var(--md-sys-elevation-level1)}.mu-button:disabled,.mu-button.is-disabled{background:color-mix(in srgb,var(--md-sys-color-on-surface) 12%,transparent);color:color-mix(in srgb,var(--md-sys-color-on-surface) 38%,transparent);cursor:not-allowed;box-shadow:none}.mu-button:disabled::before,.mu-button.is-disabled::before{display:none}.mu-button--elevated{background:var(--md-sys-color-surface-container-low);color:var(--md-sys-color-primary);box-shadow:var(--md-sys-elevation-level1)}.mu-button--elevated::before{background:var(--md-sys-color-primary)}.mu-button--elevated:hover:not(:disabled)::before{opacity:var(--md-sys-state-hover-opacity)}.mu-button--elevated:hover:not(:disabled){box-shadow:var(--md-sys-elevation-level2)}.mu-button--elevated:focus-visible:not(:disabled)::before{opacity:var(--md-sys-state-focus-opacity)}.mu-button--elevated:active:not(:disabled)::before{opacity:var(--md-sys-state-pressed-opacity)}.mu-button--filled{background:var(--md-sys-color-primary);color:var(--md-sys-color-on-primary)}.mu-button--filled::before{background:var(--md-sys-color-on-primary)}.mu-button--filled:hover:not(:disabled)::before{opacity:var(--md-sys-state-hover-opacity)}.mu-button--filled:hover:not(:disabled){box-shadow:var(--md-sys-elevation-level1)}.mu-button--filled:focus-visible:not(:disabled)::before{opacity:var(--md-sys-state-focus-opacity)}.mu-button--filled:active:not(:disabled)::before{opacity:var(--md-sys-state-pressed-opacity)}.mu-button--tonal{background:var(--md-sys-color-secondary-container);color:var(--md-sys-color-on-secondary-container)}.mu-button--tonal::before{background:var(--md-sys-color-on-secondary-container)}.mu-button--tonal:hover:not(:disabled)::before{opacity:var(--md-sys-state-hover-opacity)}.mu-button--tonal:hover:not(:disabled){box-shadow:var(--md-sys-elevation-level1)}.mu-button--tonal:focus-visible:not(:disabled)::before{opacity:var(--md-sys-state-focus-opacity)}.mu-button--tonal:active:not(:disabled)::before{opacity:var(--md-sys-state-pressed-opacity)}.mu-button--outlined{background:transparent;color:var(--md-sys-color-primary);border:1px solid var(--md-sys-color-outline)}.mu-button--outlined::before{background:var(--md-sys-color-primary)}.mu-button--outlined:hover:not(:disabled)::before{opacity:var(--md-sys-state-hover-opacity)}.mu-button--outlined:focus-visible:not(:disabled)::before{opacity:var(--md-sys-state-focus-opacity)}.mu-button--outlined:active:not(:disabled)::before{opacity:var(--md-sys-state-pressed-opacity)}.mu-button--text{background:transparent;color:var(--md-sys-color-primary);padding:0 12px}.mu-button--text::before{background:var(--md-sys-color-primary)}.mu-button--text:hover:not(:disabled)::before{opacity:var(--md-sys-state-hover-opacity)}.mu-button--text:focus-visible:not(:disabled)::before{opacity:var(--md-sys-state-focus-opacity)}.mu-button--text:active:not(:disabled)::before{opacity:var(--md-sys-state-pressed-opacity)}@keyframes md-ripple{from{transform:scale(0);opacity:0.12}to{transform:scale(2.5);opacity:0}}@keyframes mu-ripple-expand{from{transform:scale(0);opacity:0.20}to{transform:scale(1);opacity:0}}.mu-button.ripple::after{content:'';position:absolute;width:100%;height:100%;border-radius:50%;background:currentColor;transform:scale(0);animation:md-ripple var(--md-sys-motion-duration-medium2) var(--md-sys-motion-easing-standard);pointer-events:none}.mu-button.is-loading{color:transparent}.mu-button.is-loading::after{content:'';position:absolute;width:20px;height:20px;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:spin 0.75s linear infinite}.mu-input{position:relative;display:block;width:100%}.mu-input__label{position:absolute;left:16px;top:50%;transform:translateY(-50%) scale(1);transform-origin:left center;font-size:16px;color:var(--md-sys-color-on-surface-variant);pointer-events:none;transition:top var(--md-sys-motion-duration-short3) var(--md-sys-motion-easing-emphasized),transform var(--md-sys-motion-duration-short3) var(--md-sys-motion-easing-emphasized),color var(--md-sys-motion-duration-short3) var(--md-sys-motion-easing-standard);z-index:1}.mu-input:focus-within .mu-input__label,.mu-input.has-value .mu-input__label{top:6px;transform:translateY(0) scale(0.75)}.mu-input:focus-within .mu-input__label{color:var(--md-sys-color-primary)}.mu-input--outlined .mu-input__label{background:var(--md-sys-color-surface,#fff);padding:0 4px;margin-left:-4px}.mu-input:has(.mu-input__label) .mu-input__field{padding-top:24px;padding-bottom:8px}.mu-input::after{content:'';position:absolute;bottom:0;left:50%;width:0;height:2px;background:var(--md-sys-color-primary);transition:width var(--md-sys-motion-duration-short4) var(--md-sys-motion-easing-emphasized),left var(--md-sys-motion-duration-short4) var(--md-sys-motion-easing-emphasized)}.mu-input.is-focused::after,.mu-input:focus-within::after{width:100%;left:0}.mu-input__field{display:block;width:100%;height:56px;padding:16px;font-family:var(--md-sys-typescale-font);font-size:var(--md-sys-typescale-body-large-size);line-height:var(--md-sys-typescale-body-large-line-height);color:var(--md-sys-color-on-surface);background:var(--md-sys-color-surface-container-highest);border:none;border-bottom:1px solid var(--md-sys-color-on-surface-variant);border-radius:var(--md-sys-shape-corner-extra-small) var(--md-sys-shape-corner-extra-small) 0 0;caret-color:var(--md-sys-color-primary);transition:background-color var(--md-sys-motion-duration-short2) var(--md-sys-motion-easing-standard),border-color var(--md-sys-motion-duration-short2) var(--md-sys-motion-easing-standard)}.mu-input__field::placeholder{color:var(--md-sys-color-on-surface-variant);transition:opacity var(--md-sys-motion-duration-short2)}.mu-input__field:focus::placeholder{opacity:0.6}.mu-input__field:hover:not(:disabled):not(:focus){background:color-mix(in srgb,var(--md-sys-color-surface-container-highest) 95%,var(--md-sys-color-on-surface) 5%);border-bottom-color:var(--md-sys-color-on-surface)}.mu-input--outlined:has(.mu-input__field:hover:not(:disabled):not(:focus)) .mu-input__label{background:color-mix(in srgb,var(--md-sys-color-surface-container-highest) 95%,var(--md-sys-color-on-surface) 5%)}.mu-input__field:focus{outline:none;border-bottom-color:transparent}.mu-input--sm .mu-input__field{height:40px;padding:8px 12px;font-size:var(--md-sys-typescale-body-medium-size)}.mu-input--md .mu-input__field{height:56px;padding:16px}.mu-input--lg .mu-input__field{height:64px;padding:20px;font-size:18px}.mu-input--filled .mu-input__field{background:var(--md-sys-color-surface-container-highest)}.mu-input--outlined .mu-input__field{height:56px;padding:16px;background:transparent;border:1px solid var(--md-sys-color-outline);border-radius:var(--md-sys-shape-corner-extra-small);transition:border-color var(--md-sys-motion-duration-short2) var(--md-sys-motion-easing-standard),box-shadow var(--md-sys-motion-duration-short2) var(--md-sys-motion-easing-standard)}.mu-input--outlined .mu-input__field:hover:not(:disabled):not(:focus){border-color:var(--md-sys-color-on-surface)}.mu-input--outlined .mu-input__field:focus{border-color:var(--md-sys-color-primary);box-shadow:inset 0 0 0 1px var(--md-sys-color-primary);outline:none}.mu-input--outlined::after{display:none}.mu-input.is-disabled .mu-input__field,.mu-input__field:disabled{color:color-mix(in srgb,var(--md-sys-color-on-surface) 38%,transparent);background:color-mix(in srgb,var(--md-sys-color-on-surface) 4%,transparent);border-bottom-color:color-mix(in srgb,var(--md-sys-color-on-surface) 12%,transparent);cursor:not-allowed}.mu-input__field[type="number"]::-webkit-inner-spin-button,.mu-input__field[type="number"]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.mu-input__field[type="number"]{-moz-appearance:textfield;appearance:textfield}.mu-card{display:block;border-radius:var(--md-sys-shape-corner-medium);overflow:hidden;padding:20px}.mu-card--flat,.mu-card--filled{background:var(--md-sys-color-surface-container-highest);box-shadow:none}.mu-card--elevated{background:var(--md-sys-color-surface-container-low);box-shadow:var(--md-sys-elevation-level1);transition:transform var(--md-sys-motion-duration-short2) var(--md-sys-motion-easing-standard)}.mu-card--elevated:hover{transform:translateY(-2px)}.mu-card--outlined{background:var(--md-sys-color-surface);border:1px solid var(--md-sys-color-outline-variant);box-shadow:none}.mu-card--padding-none{padding:0}.mu-card--padding-sm{padding:12px}.mu-card--padding-md{padding:20px}.mu-card--padding-lg{padding:28px}.mu-card--radius-none{border-radius:0}.mu-card--radius-sm{border-radius:var(--md-sys-shape-corner-small)}.mu-card--radius-md{border-radius:var(--md-sys-shape-corner-medium)}.mu-card--radius-lg{border-radius:var(--md-sys-shape-corner-large)}.mu-card--radius-full{border-radius:var(--md-sys-shape-corner-full)}.mu-card--clickable{cursor:pointer;position:relative}.mu-card--clickable::before{content:'';position:absolute;inset:0;border-radius:inherit;background:var(--md-sys-color-on-surface);opacity:0;transition:opacity var(--md-sys-motion-duration-short2);pointer-events:none}.mu-card--clickable:hover::before{opacity:var(--md-sys-state-hover-opacity)}.mu-card--clickable:active::before{opacity:var(--md-sys-state-pressed-opacity)}.mu-card__header{padding:16px;padding-bottom:0}.mu-card__body{padding:16px}.mu-card__footer{padding:16px;padding-top:0}.mu-card h3{margin:0 0 8px;font-size:var(--md-sys-typescale-title-medium-size);font-weight:var(--md-sys-typescale-title-medium-weight)}.mu-card p{margin:0;color:var(--md-sys-color-on-surface-variant);font-size:var(--md-sys-typescale-body-medium-size)}mu-stack{display:flex;flex-direction:column;gap:var(--md-sys-spacing-md,16px)}mu-stack[direction="row"]{flex-direction:row}mu-stack[direction="column"]{flex-direction:column}mu-stack[direction="row-reverse"]{flex-direction:row-reverse}mu-stack[direction="column-reverse"]{flex-direction:column-reverse}mu-stack[gap="none"]{gap:0}mu-stack[gap="xs"]{gap:var(--md-sys-spacing-xs,4px)}mu-stack[gap="sm"]{gap:var(--md-sys-spacing-sm,8px)}mu-stack[gap="md"]{gap:var(--md-sys-spacing-md,16px)}mu-stack[gap="lg"]{gap:var(--md-sys-spacing-lg,24px)}mu-stack[gap="xl"]{gap:var(--md-sys-spacing-xl,32px)}mu-stack[align="start"]{align-items:flex-start}mu-stack[align="center"]{align-items:center}mu-stack[align="end"]{align-items:flex-end}mu-stack[align="stretch"]{align-items:stretch}mu-stack[justify="start"]{justify-content:flex-start}mu-stack[justify="center"]{justify-content:center}mu-stack[justify="end"]{justify-content:flex-end}mu-stack[justify="between"]{justify-content:space-between}mu-stack[wrap]{flex-wrap:wrap}mu-grid{display:grid;gap:var(--md-sys-spacing-md,16px)}mu-grid[cols="1"]{grid-template-columns:repeat(1,1fr)}mu-grid[cols="2"]{grid-template-columns:repeat(2,1fr)}mu-grid[cols="3"]{grid-template-columns:repeat(3,1fr)}mu-grid[cols="4"]{grid-template-columns:repeat(4,1fr)}mu-grid[cols="6"]{grid-template-columns:repeat(6,1fr)}mu-grid[cols="12"]{grid-template-columns:repeat(12,1fr)}mu-grid[gap="none"]{gap:0}mu-grid[gap="xs"]{gap:var(--md-sys-spacing-xs,4px)}mu-grid[gap="sm"]{gap:var(--md-sys-spacing-sm,8px)}mu-grid[gap="md"]{gap:var(--md-sys-spacing-md,16px)}mu-grid[gap="lg"]{gap:var(--md-sys-spacing-lg,24px)}mu-grid[gap="xl"]{gap:var(--md-sys-spacing-xl,32px)}@media (max-width:599px){mu-grid[cols="2"],mu-grid[cols="3"],mu-grid[cols="4"],mu-grid[cols="6"]{grid-template-columns:1fr !important}}.mu-stack{display:flex}.mu-stack--row{flex-direction:row}.mu-stack--column{flex-direction:column}.mu-stack--row-reverse{flex-direction:row-reverse}.mu-stack--column-reverse{flex-direction:column-reverse}.mu-stack--gap-0{gap:0}.mu-stack--gap-1{gap:4px}.mu-stack--gap-2{gap:8px}.mu-stack--gap-3{gap:12px}.mu-stack--gap-4{gap:16px}.mu-stack--gap-5{gap:20px}.mu-stack--gap-6{gap:24px}.mu-stack--gap-8{gap:32px}.mu-stack--gap-10{gap:40px}.mu-stack--gap-12{gap:48px}.mu-stack--gap-16{gap:64px}.mu-stack--align-start{align-items:flex-start}.mu-stack--align-center{align-items:center}.mu-stack--align-end{align-items:flex-end}.mu-stack--align-stretch{align-items:stretch}.mu-stack--align-baseline{align-items:baseline}.mu-stack--justify-start{justify-content:flex-start}.mu-stack--justify-center{justify-content:center}.mu-stack--justify-end{justify-content:flex-end}.mu-stack--justify-between{justify-content:space-between}.mu-stack--justify-around{justify-content:space-around}.mu-stack--justify-evenly{justify-content:space-evenly}.mu-stack--wrap{flex-wrap:wrap}.mu-alert,mu-alert{display:flex;align-items:center;gap:12px;padding:16px;border-radius:var(--md-sys-shape-corner-medium,12px);font-size:var(--md-sys-typescale-body-medium-size,14px);line-height:var(--md-sys-typescale-body-medium-line-height,20px);border:1px solid transparent}.mu-alert--info,mu-alert[severity="info"]{background:var(--md-sys-color-surface-container-high,#E6E0E9);color:var(--md-sys-color-on-surface,#1D1B20);border-color:var(--md-sys-color-outline-variant,#CAC4D0)}.mu-alert--info .mu-alert__icon,mu-alert[severity="info"] mu-icon{color:var(--md-sys-color-primary,#6750A4)}.mu-alert--success,mu-alert[severity="success"]{background:var(--md-sys-color-success-container,#C8E6C9);color:var(--md-sys-color-on-success-container,#1B5E20);border-color:var(--md-sys-color-success,#2E7D32)}.mu-alert--success .mu-alert__icon,mu-alert[severity="success"] mu-icon{color:var(--md-sys-color-success,#2E7D32)}.mu-alert--warning,mu-alert[severity="warning"]{background:var(--md-sys-color-warning-container,#FFF3E0);color:var(--md-sys-color-on-warning-container,#5D4037);border-color:var(--md-sys-color-warning,#FF9800)}.mu-alert--warning .mu-alert__icon,mu-alert[severity="warning"] mu-icon{color:var(--md-sys-color-warning,#FF9800)}.mu-alert--error,mu-alert[severity="error"]{background:var(--md-sys-color-error-container,#F9DEDC);color:var(--md-sys-color-on-error-container,#410E0B);border-color:var(--md-sys-color-error,#B3261E)}.mu-alert--error .mu-alert__icon,mu-alert[severity="error"] mu-icon{color:var(--md-sys-color-error,#B3261E)}.mu-alert__icon,mu-alert mu-icon:first-child{flex-shrink:0;display:flex;align-items:center;justify-content:center}.mu-alert__content{flex:1;min-width:0}.mu-alert__title{display:block;font-weight:var(--md-sys-typescale-title-small-weight,500);margin-bottom:4px}.mu-alert__close{display:flex;align-items:center;justify-content:center;width:32px;height:32px;margin:-8px -8px -8px 0;background:transparent;border:none;border-radius:var(--md-sys-shape-corner-full,50%);cursor:pointer;color:currentColor;opacity:0.7;transition:opacity 0.2s,background 0.2s}.mu-alert__close:hover{opacity:1;background:var(--md-sys-color-on-surface-variant,rgba(0,0,0,0.08))}.mu-alert__close:focus-visible{outline:2px solid var(--md-sys-color-primary,#6750A4);outline-offset:2px}.mu-badge{display:inline-flex;align-items:center;justify-content:center;min-width:16px;height:16px;padding:0 4px;font-family:var(--md-sys-typescale-font);font-size:var(--md-sys-typescale-label-small-size);font-weight:var(--md-sys-typescale-label-small-weight);line-height:1;border-radius:var(--md-sys-shape-corner-full)}.mu-badge--sm{min-width:16px;height:16px;font-size:10px}.mu-badge--md{min-width:20px;height:20px;padding:0 6px}.mu-badge--lg{min-width:24px;height:24px;padding:0 8px;font-size:13px}.mu-badge--primary{background:var(--md-sys-color-error);color:var(--md-sys-color-on-error)}.mu-badge--secondary{background:var(--md-sys-color-secondary);color:var(--md-sys-color-on-secondary)}.mu-badge--success{background:#1B5E20;color:white}.mu-badge--warning{background:#E65100;color:white}.mu-badge--error{background:var(--md-sys-color-error);color:var(--md-sys-color-on-error)}.mu-badge--neutral{background:var(--md-sys-color-surface-container-highest);color:var(--md-sys-color-on-surface)}.mu-badge--dot{min-width:6px;width:6px;height:6px;padding:0}.mu-skeleton{display:block;background:var(--md-sys-color-surface-container-highest);border-radius:var(--md-sys-shape-corner-extra-small);animation:mu-skeleton-pulse var(--md-sys-motion-duration-extra-long4) var(--md-sys-motion-easing-standard) infinite}.mu-skeleton--circle{border-radius:50%}.mu-skeleton--text{height:16px;margin-bottom:8px}.mu-skeleton--text:last-child{width:70%}.mu-skeleton__line{height:16px;margin-bottom:8px;background:var(--md-sys-color-surface-container-highest);border-radius:var(--md-sys-shape-corner-extra-small);animation:mu-skeleton-pulse var(--md-sys-motion-duration-extra-long4) var(--md-sys-motion-easing-standard) infinite}@keyframes mu-skeleton-pulse{0%,100%{opacity:1}50%{opacity:0.4}}.mu-spinner{display:inline-block}.mu-spinner__circle{display:block;border:3px solid transparent;border-top-color:currentColor;border-radius:50%;animation:spin var(--md-sys-motion-duration-extra-long1) linear infinite}.mu-spinner--xs .mu-spinner__circle{width:16px;height:16px;border-width:2px}.mu-spinner--sm .mu-spinner__circle{width:20px;height:20px;border-width:2px}.mu-spinner--md .mu-spinner__circle{width:48px;height:48px;border-width:4px}.mu-spinner--lg .mu-spinner__circle{width:40px;height:40px;border-width:4px}.mu-spinner--xl .mu-spinner__circle{width:48px;height:48px;border-width:4px}.mu-spinner--primary{color:var(--md-sys-color-primary)}.mu-spinner--secondary{color:var(--md-sys-color-secondary)}.mu-spinner--current{color:currentColor}.mu-spinner--white{color:white}.mu-progress{position:relative;width:100%;height:8px;background:var(--md-sys-color-surface-container-highest);border-radius:4px;overflow:hidden}.mu-progress--sm{height:4px;border-radius:2px}.mu-progress--md{height:8px;border-radius:4px}.mu-progress--lg{height:12px;border-radius:6px}.mu-progress__bar{display:block;height:100%;background:var(--md-sys-color-primary);border-radius:inherit;transition:width var(--md-sys-motion-duration-medium2) var(--md-sys-motion-easing-standard)}.mu-progress--success .mu-progress__bar{background:#1B5E20}.mu-progress--warning .mu-progress__bar{background:#E65100}.mu-progress--error .mu-progress__bar{background:var(--md-sys-color-error)}.mu-progress[indeterminate] .mu-progress__bar{width:50% !important;animation:mu-progress-indeterminate 1.5s infinite ease-in-out}@keyframes mu-progress-indeterminate{0%{transform:translateX(-100%)}100%{transform:translateX(300%)}}.mu-progress__label{position:absolute;right:8px;top:50%;transform:translateY(-50%);font-size:var(--md-sys-typescale-label-small-size);color:var(--md-sys-color-on-surface)}.mu-tabs{display:block;width:100%;position:relative;margin-bottom:24px}.mu-tabs__list{display:flex;position:relative;border-bottom:1px solid var(--md-sys-color-surface-variant)}.mu-tabs__tab{position:relative;display:flex;align-items:center;justify-content:center;flex:1;min-width:90px;height:48px;padding:0 16px;background:transparent;border:none;font-family:var(--md-sys-typescale-font);font-size:var(--md-sys-typescale-title-small-size);font-weight:var(--md-sys-typescale-title-small-weight);color:var(--md-sys-color-on-surface-variant);cursor:pointer;overflow:hidden;transition:color var(--md-sys-motion-duration-short4) var(--md-sys-motion-easing-standard),background-color var(--md-sys-motion-duration-short2) var(--md-sys-motion-easing-standard)}.mu-tabs__tab::before{content:'';position:absolute;inset:0;background:var(--md-sys-color-primary);opacity:0;transition:opacity var(--md-sys-motion-duration-short2) var(--md-sys-motion-easing-standard)}.mu-tabs__tab:hover::before{opacity:var(--md-sys-state-hover-opacity)}.mu-tabs__tab:active::before{opacity:var(--md-sys-state-pressed-opacity)}.mu-tabs__tab.is-active{color:var(--md-sys-color-primary)}.mu-tabs__tab::after{display:none}.mu-tabs__list::after{content:'';position:absolute;bottom:0;height:3px;background:var(--md-sys-color-primary);border-radius:3px 3px 0 0;width:var(--indicator-width,33.3333%);left:var(--indicator-left,0);transition:left var(--md-sys-motion-duration-medium2) var(--md-sys-motion-easing-emphasized),width var(--md-sys-motion-duration-medium2) var(--md-sys-motion-easing-emphasized)}.mu-tabs__indicator{display:none}.mu-tabs__panel,mu-tab-panel{display:block;padding:16px 0;animation:fadeIn var(--md-sys-motion-duration-short4) var(--md-sys-motion-easing-standard)}mu-tab-panel:not([active]),.mu-tab-panel:not(.active),.doc-tab-content:not(:first-of-type){display:none}.mu-tabs--pills .mu-tabs__list{border-bottom:none;gap:8px;padding:4px;background:var(--md-sys-color-surface-container);border-radius:var(--md-sys-shape-corner-full);width:fit-content}.mu-tabs--pills .mu-tabs__tab{flex:none;height:36px;min-width:auto;border-radius:var(--md-sys-shape-corner-full);transition:color var(--md-sys-motion-duration-short2) var(--md-sys-motion-easing-standard),background-color var(--md-sys-motion-duration-short4) var(--md-sys-motion-easing-emphasized)}.mu-tabs--pills .mu-tabs__indicator{display:none}.mu-tabs--pills .mu-tabs__tab.is-active{background:var(--md-sys-color-secondary-container);color:var(--md-sys-color-on-secondary-container)}.mu-tabs--underline .mu-tabs__indicator{height:2px}.mu-dropdown{position:relative;display:inline-block}.mu-dropdown__trigger{position:relative;display:flex;align-items:center;justify-content:space-between;gap:8px;min-width:200px;height:56px;padding:0 16px;background:var(--md-sys-color-surface);border:1px solid var(--md-sys-color-outline);border-radius:var(--md-sys-shape-corner-extra-small);font-family:var(--md-sys-typescale-font);font-size:var(--md-sys-typescale-body-large-size);color:var(--md-sys-color-on-surface);cursor:pointer;overflow:hidden;transition:border-color var(--md-sys-motion-duration-short3) var(--md-sys-motion-easing-standard),background-color var(--md-sys-motion-duration-short2) var(--md-sys-motion-easing-standard)}.mu-dropdown__trigger::before{content:'';position:absolute;inset:0;background:var(--md-sys-color-on-surface);opacity:0;transition:opacity var(--md-sys-motion-duration-short2) var(--md-sys-motion-easing-standard);pointer-events:none;border-radius:inherit}.mu-dropdown__trigger:hover::before{opacity:var(--md-sys-state-hover-opacity,0.08)}.mu-dropdown__trigger:active::before{opacity:var(--md-sys-state-pressed-opacity,0.12)}.mu-dropdown__trigger:focus-visible{outline:none;border-color:var(--md-sys-color-primary);border-width:2px}.mu-dropdown__trigger:disabled{opacity:0.38;cursor:not-allowed;background:var(--md-sys-color-surface-container)}.mu-dropdown__trigger:disabled::before{display:none}.mu-dropdown__arrow{flex-shrink:0;color:var(--md-sys-color-on-surface-variant);transition:transform var(--md-sys-motion-duration-short4) var(--md-sys-motion-easing-emphasized)}.mu-dropdown.is-open .mu-dropdown__arrow{transform:rotate(180deg)}.mu-dropdown.is-open .mu-dropdown__trigger{border-color:var(--md-sys-color-primary);border-width:2px}.mu-dropdown__menu{position:fixed;min-width:160px;max-height:280px;overflow-y:auto;padding:8px 0;margin:0;background:var(--md-sys-color-surface-container);border-radius:var(--md-sys-shape-corner-extra-small);box-shadow:var(--md-sys-elevation-level2);list-style:none;border:none;inset:unset;opacity:0;visibility:hidden;transform:scaleY(0.92) translateY(-8px);transform-origin:top center;transition:opacity var(--md-sys-motion-duration-short4) var(--md-sys-motion-easing-emphasized-decelerate),visibility var(--md-sys-motion-duration-short4),transform var(--md-sys-motion-duration-short4) var(--md-sys-motion-easing-emphasized-decelerate);pointer-events:none}.mu-dropdown__menu:popover-open{opacity:1;visibility:visible;transform:scaleY(1) translateY(0);pointer-events:auto}.mu-dropdown__menu.is-open{opacity:1 !important;visibility:visible !important;transform:scaleY(1) translateY(0);pointer-events:auto}.mu-dropdown__item,.mu-dropdown__option{position:relative;display:flex;align-items:center;height:48px;padding:0 16px;font-size:var(--md-sys-typescale-body-large-size);color:var(--md-sys-color-on-surface);cursor:pointer;overflow:hidden;transition:background var(--md-sys-motion-duration-short2) var(--md-sys-motion-easing-standard)}.mu-dropdown__item::before,.mu-dropdown__option::before{content:'';position:absolute;inset:0;background:var(--md-sys-color-on-surface);opacity:0;transition:opacity var(--md-sys-motion-duration-short2) var(--md-sys-motion-easing-standard);pointer-events:none}.mu-dropdown__item:hover::before,.mu-dropdown__option:hover::before{opacity:var(--md-sys-state-hover-opacity,0.08)}.mu-dropdown__item:active::before,.mu-dropdown__option:active::before{opacity:var(--md-sys-state-pressed-opacity,0.12)}.mu-dropdown__item:focus-visible,.mu-dropdown__option:focus-visible{outline:none}.mu-dropdown__item:focus-visible::before,.mu-dropdown__option:focus-visible::before{opacity:var(--md-sys-state-focus-opacity,0.12)}.mu-dropdown__item.is-selected,.mu-dropdown__option.is-active{background:var(--md-sys-color-secondary-container);color:var(--md-sys-color-on-secondary-container)}.mu-dropdown__item.is-selected::before,.mu-dropdown__option.is-active::before{background:var(--md-sys-color-on-secondary-container)}.mu-toast-container{position:fixed;z-index:9999;padding:24px;display:flex;flex-direction:column;gap:8px;pointer-events:none;max-width:100%;bottom:0;left:50%;transform:translateX(-50%);align-items:center}.mu-toast-container[position="bottom-center"]{bottom:0;left:50%;transform:translateX(-50%);align-items:center}.mu-toast-container[position="top-center"]{top:0;left:50%;transform:translateX(-50%);flex-direction:column-reverse;align-items:center}.mu-toast-container[position="top-right"]{top:0;right:0;left:auto;transform:none;flex-direction:column-reverse;align-items:flex-end}.mu-toast-container[position="top-left"]{top:0;left:0;right:auto;transform:none;flex-direction:column-reverse;align-items:flex-start}.mu-toast-container[position="bottom-right"]{bottom:0;right:0;left:auto;transform:none;align-items:flex-end}.mu-toast-container[position="bottom-left"]{bottom:0;left:0;right:auto;transform:none;align-items:flex-start}.mu-toast{position:relative;pointer-events:auto;display:flex;align-items:center;gap:12px;min-height:48px;padding:14px 16px;background:var(--md-sys-color-inverse-surface);color:var(--md-sys-color-inverse-on-surface);border-radius:var(--md-sys-shape-corner-extra-small);box-shadow:var(--md-sys-elevation-level3);font-size:var(--md-sys-typescale-body-medium-size);min-width:288px;max-width:560px;animation:toastEnter 0.3s cubic-bezier(0.2,0,0,1) forwards}@keyframes toastEnter{from{opacity:0;transform:scale(0.9)}to{opacity:1;transform:scale(1)}}.mu-toast.is-exiting{animation:toastExit 0.2s cubic-bezier(0.4,0,1,1) forwards}@keyframes toastExit{to{opacity:0;transform:scale(0.9)}}.mu-toast--info,.mu-toast--success,.mu-toast--warning,.mu-toast--error{border-left:none}.mu-toast__icon{font-size:24px}.mu-toast__content{flex:1}.mu-toast__title{display:block;font-weight:500;margin-bottom:4px}.mu-toast__close{display:flex;align-items:center;justify-content:center;width:32px;height:32px;background:transparent;border:none;border-radius:var(--md-sys-shape-corner-full);color:var(--md-sys-color-inverse-primary);cursor:pointer}.mu-toast__close:hover{background:rgba(255,255,255,0.08)}.mu-tooltip{position:relative;display:inline-block;cursor:pointer}.mu-tooltip__content{position:absolute;padding:8px 12px;background:var(--md-sys-color-inverse-surface);color:var(--md-sys-color-inverse-on-surface);font-family:var(--md-sys-typescale-font);font-size:var(--md-sys-typescale-body-small-size);line-height:var(--md-sys-typescale-body-small-line-height);border-radius:var(--md-sys-shape-corner-extra-small);white-space:nowrap;z-index:var(--mu-z-tooltip);pointer-events:none;opacity:0;visibility:hidden;transform:translateX(-50%) scale(0.9);transition:opacity var(--md-sys-motion-duration-short3) var(--md-sys-motion-easing-standard),visibility var(--md-sys-motion-duration-short3),transform var(--md-sys-motion-duration-short3) var(--md-sys-motion-easing-emphasized)}.mu-tooltip:hover .mu-tooltip__content,.mu-tooltip:focus-within .mu-tooltip__content{opacity:1;visibility:visible;transform:translateX(-50%) scale(1)}.mu-tooltip--top .mu-tooltip__content{bottom:100%;left:50%;transform:translateX(-50%) translateY(4px) scale(0.9);margin-bottom:8px}.mu-tooltip--top:hover .mu-tooltip__content{transform:translateX(-50%) translateY(0) scale(1)}.mu-tooltip--bottom .mu-tooltip__content{top:100%;left:50%;transform:translateX(-50%) translateY(-4px) scale(0.9);margin-top:8px}.mu-tooltip--bottom:hover .mu-tooltip__content{transform:translateX(-50%) translateY(0) scale(1)}.mu-tooltip--left .mu-tooltip__content{right:100%;top:50%;transform:translateY(-50%) translateX(4px) scale(0.9);margin-right:8px}.mu-tooltip--left:hover .mu-tooltip__content{transform:translateY(-50%) translateX(0) scale(1)}.mu-tooltip--right .mu-tooltip__content{left:100%;top:50%;transform:translateY(-50%) translateX(-4px) scale(0.9);margin-left:8px}.mu-tooltip--right:hover .mu-tooltip__content{transform:translateY(-50%) translateX(0) scale(1)}@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}@keyframes fadeIn{from{opacity:0}to{opacity:1}}@keyframes fadeOut{from{opacity:1}to{opacity:0}}@keyframes slideUp{from{opacity:0;transform:translateY(16px) scale(0.95)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes slideDown{from{opacity:0;transform:translateY(-16px) scale(0.95)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes slideInRight{from{transform:translateX(100%);opacity:0}to{transform:translateX(0);opacity:1}}@keyframes slideInLeft{from{transform:translateX(-100%);opacity:0}to{transform:translateX(0);opacity:1}}@keyframes scaleIn{from{opacity:0;transform:scale(0.85)}to{opacity:1;transform:scale(1)}}@keyframes ripple{from{transform:scale(0);opacity:0.4}to{transform:scale(4);opacity:0}}.mu-button::after{content:'';position:absolute;inset:0;background:radial-gradient(circle,currentColor 10%,transparent 10.01%);transform:scale(10,10);opacity:0;transition:transform 0.3s,opacity 0.5s}.mu-button:active::after{transform:scale(0,0);opacity:0.2;transition:0s}.mu-modal{display:contents}dialog.mu-modal__dialog{border:none;padding:24px;margin:auto;background:var(--md-sys-color-surface-container-high,var(--md-sys-color-surface));border-radius:var(--md-sys-shape-corner-extra-large,28px);width:fit-content;min-width:280px;max-width:min(560px,calc(100vw - 96px));max-height:min(560px,calc(100vh - 96px));overflow-y:auto;box-shadow:var(--md-sys-elevation-3);color:var(--md-sys-color-on-surface);transform:scale(0.9);opacity:0;transition:transform var(--md-sys-motion-duration-medium3,300ms) var(--md-sys-motion-easing-emphasized-decelerate,cubic-bezier(0.05,0.7,0.1,1)),opacity var(--md-sys-motion-duration-medium2,200ms) var(--md-sys-motion-easing-standard,cubic-bezier(0.2,0,0,1))}dialog.mu-modal__dialog::backdrop{background:rgba(0,0,0,0.32);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);opacity:0;transition:opacity var(--md-sys-motion-duration-medium2,200ms) var(--md-sys-motion-easing-standard,cubic-bezier(0.2,0,0,1))}.mu-modal.is-visible dialog.mu-modal__dialog{transform:scale(1);opacity:1}.mu-modal.is-visible dialog.mu-modal__dialog::backdrop{opacity:1}dialog.mu-modal__dialog[open]{display:flex;flex-direction:column}.mu-modal__close{position:absolute;top:12px;right:12px;width:40px;height:40px;border:none;background:transparent;border-radius:50%;font-size:20px;cursor:pointer;color:var(--md-sys-color-on-surface-variant);transition:background-color var(--md-sys-motion-duration-short2)}.mu-modal__close:hover{background:var(--md-sys-color-on-surface-variant-opacity-08,rgba(0,0,0,0.08))}.mu-modal__body{color:var(--md-sys-color-on-surface)}dialog.mu-modal__dialog.mu-modal--sm{max-width:400px}dialog.mu-modal__dialog.mu-modal--lg{max-width:720px}dialog.mu-modal__dialog.mu-modal--xl{max-width:900px}dialog.mu-modal__dialog.mu-modal--full{width:95vw;max-width:95vw;height:95vh;max-height:95vh}.mu-modal__header{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px;font-size:var(--md-sys-typescale-headline-small-size,24px);font-weight:var(--md-sys-typescale-headline-small-weight,400);line-height:var(--md-sys-typescale-headline-small-line-height,32px);color:var(--md-sys-color-on-surface)}.mu-modal__footer{display:flex;justify-content:flex-end;gap:8px;margin-top:24px}.mu-button:focus-visible,.mu-tabs__tab:focus-visible,.mu-dropdown__trigger:focus-visible,.mu-input:focus-visible{outline:2px solid var(--md-sys-color-primary);outline-offset:2px}.mu-card,.mu-alert,.mu-badge,.mu-progress__bar{transition:transform var(--md-sys-motion-duration-short4) var(--md-sys-motion-easing-standard),opacity var(--md-sys-motion-duration-short4) var(--md-sys-motion-easing-standard),box-shadow var(--md-sys-motion-duration-short4) var(--md-sys-motion-easing-standard)}.mu-button,.mu-tabs__tab,.mu-dropdown__item{transition:background-color var(--md-sys-motion-duration-short2) var(--md-sys-motion-easing-standard),box-shadow var(--md-sys-motion-duration-short2) var(--md-sys-motion-easing-standard),transform var(--md-sys-motion-duration-short2) var(--md-sys-motion-easing-standard)}.mu-button:active:not(:disabled){transform:scale(0.98)}.mu-tabs__tab:active,.mu-dropdown__item:active{transform:scale(0.98)}.mu-theme-toggle{display:inline-flex}.mu-theme-toggle__button{position:relative;display:flex;align-items:center;justify-content:center;width:48px;height:48px;background:linear-gradient(135deg,var(--md-sys-color-primary-container) 0%,var(--md-sys-color-secondary-container) 100%);border:2px solid var(--md-sys-color-outline-variant);border-radius:var(--md-sys-shape-corner-full);cursor:pointer;overflow:hidden;transition:transform var(--md-sys-motion-duration-medium2) var(--md-sys-motion-easing-emphasized),box-shadow var(--md-sys-motion-duration-short4) var(--md-sys-motion-easing-standard),border-color var(--md-sys-motion-duration-short4) var(--md-sys-motion-easing-standard)}.mu-theme-toggle__button:hover{transform:scale(1.1);box-shadow:0 4px 16px rgba(0,0,0,0.2),0 0 24px var(--md-sys-color-primary);border-color:var(--md-sys-color-primary)}.mu-theme-toggle__button:active{transform:scale(0.95)}.mu-theme-toggle__icon{font-size:22px;transition:transform var(--md-sys-motion-duration-medium3) var(--md-sys-motion-easing-emphasized-decelerate);filter:drop-shadow(0 2px 4px rgba(0,0,0,0.3))}.mu-theme-toggle__button:hover .mu-theme-toggle__icon{transform:rotate(20deg) scale(1.1)}[data-theme="dark"] .mu-theme-toggle__button{background:linear-gradient(135deg,rgba(255,200,50,0.15) 0%,rgba(255,150,0,0.1) 100%);border-color:rgba(255,200,50,0.3)}[data-theme="dark"] .mu-theme-toggle__button:hover{box-shadow:0 4px 16px rgba(0,0,0,0.4),0 0 32px rgba(255,200,50,0.4);border-color:rgba(255,200,50,0.6)}[data-theme="light"] .mu-theme-toggle__button{background:linear-gradient(135deg,rgba(100,100,200,0.1) 0%,rgba(50,50,150,0.05) 100%)}[data-theme="light"] .mu-theme-toggle__button:hover{box-shadow:0 4px 16px rgba(0,0,0,0.15),0 0 24px rgba(100,100,200,0.3)}.mu-navbar__links{display:flex;align-items:center;gap:4px;margin-left:24px}.mu-navbar__links a{position:relative;display:inline-flex;align-items:center;justify-content:center;height:40px;padding:0 16px;border-radius:var(--md-sys-shape-corner-full);color:var(--md-sys-color-on-surface-variant);text-decoration:none;font-family:var(--md-sys-typescale-font);font-size:var(--md-sys-typescale-label-large-size);font-weight:var(--md-sys-typescale-label-large-weight);overflow:hidden;cursor:pointer;transition:color var(--md-sys-motion-duration-short2) var(--md-sys-motion-easing-standard)}.mu-navbar__links a::before{content:'';position:absolute;inset:0;border-radius:inherit;background:var(--md-sys-color-on-surface);opacity:0;transition:opacity var(--md-sys-motion-duration-short2) var(--md-sys-motion-easing-standard);pointer-events:none}.mu-navbar__links a:hover{color:var(--md-sys-color-on-surface)}.mu-navbar__links a:hover::before{opacity:var(--md-sys-state-hover-opacity)}.mu-navbar__links a:focus-visible{outline:none}.mu-navbar__links a:focus-visible::before{opacity:var(--md-sys-state-focus-opacity)}.mu-navbar__links a:focus-visible::after{content:'';position:absolute;inset:-2px;border:2px solid var(--md-sys-color-primary);border-radius:calc(var(--md-sys-shape-corner-full)+2px);pointer-events:none}.mu-navbar__links a:active::before{opacity:var(--md-sys-state-pressed-opacity)}.mu-navbar__links a.active,.mu-navbar__links a[aria-current="page"]{background:var(--md-sys-color-secondary-container);color:var(--md-sys-color-on-secondary-container)}.mu-navbar__links a.active::before,.mu-navbar__links a[aria-current="page"]::before{background:var(--md-sys-color-on-secondary-container)}mu-confirm{display:none;position:fixed;inset:0;z-index:1000}mu-confirm.is-open{display:flex;align-items:center;justify-content:center}.mu-confirm__overlay{position:absolute;inset:0;background:rgba(0,0,0,0.32);opacity:0;transition:opacity 200ms var(--md-sys-motion-easing-standard)}mu-confirm.is-visible .mu-confirm__overlay{opacity:1}.mu-confirm__dialog{position:relative;min-width:280px;max-width:400px;background:var(--md-sys-color-surface);border-radius:var(--md-sys-shape-corner-extra-large);box-shadow:var(--md-sys-elevation-level3);padding:24px;transform:scale(0.9);opacity:0;transition:transform 250ms var(--md-sys-motion-easing-emphasized),opacity 150ms var(--md-sys-motion-easing-standard)}mu-confirm.is-visible .mu-confirm__dialog{transform:scale(1);opacity:1}.mu-confirm__title{margin:0 0 16px;font-size:var(--md-sys-typescale-headline-small-size);font-weight:var(--md-sys-typescale-headline-small-weight);color:var(--md-sys-color-on-surface)}.mu-confirm__message{margin:0 0 24px;font-size:var(--md-sys-typescale-body-medium-size);color:var(--md-sys-color-on-surface-variant);line-height:1.5}.mu-confirm__actions{display:flex;justify-content:flex-end;gap:8px}mu-fetch{display:block}.mu-fetch__loading{display:flex;align-items:center;justify-content:center;min-height:100px}.mu-fetch__error{margin:16px 0}.mu-fetch__empty{display:flex;align-items:center;justify-content:center;min-height:100px;color:var(--md-sys-color-on-surface-variant)}.mu-fetch__data{display:block}.page{display:none}.page.active{display:block}.page-title{font-size:var(--md-sys-typescale-headline-medium-size,28px);line-height:var(--md-sys-typescale-headline-medium-line-height,36px);margin-bottom:8px}.page-subtitle{color:var(--md-sys-color-on-surface-variant);margin-bottom:32px;line-height:1.5}.component-section{background:var(--md-sys-color-surface-container);padding:24px;border-radius:var(--md-sys-shape-corner-large,16px);margin-bottom:24px}.section-title{font-size:var(--md-sys-typescale-title-medium-size,16px);font-weight:var(--md-sys-typescale-title-medium-weight,500);margin-top:32px;margin-bottom:16px}.section-title:first-child,.component-section>.section-title:first-child{margin-top:0}.demo-row{display:flex;gap:16px;flex-wrap:wrap;align-items:center;margin-bottom:16px}.demo-label{font-size:var(--md-sys-typescale-label-small-size,11px);color:var(--md-sys-color-on-surface-variant);margin-bottom:8px;width:100%}.code-block{background:var(--md-sys-color-surface-container-highest);padding:16px;border-radius:var(--md-sys-shape-corner-medium,12px);font-family:'Fira Code','Cascadia Code','SF Mono',Consolas,monospace;font-size:13px;overflow-x:auto;margin-top:16px}.doc-tab-content{display:none}.doc-tab-content:first-of-type,.doc-tab-content.active{display:block}mu-drawer-item,mu-nav-item{display:block}.mu-drawer-item-link{display:flex;align-items:center;gap:12px;padding:0 24px 0 16px;min-height:56px;width:100%;border:none;background:transparent;color:var(--md-sys-color-on-surface-variant);text-decoration:none;cursor:pointer;border-radius:28px;font-family:var(--md-sys-typescale-font);font-size:var(--md-sys-typescale-label-large-size,14px);font-weight:var(--md-sys-typescale-label-large-weight,500);line-height:var(--md-sys-typescale-label-large-line-height,20px);transition:background-color var(--md-sys-motion-duration-short2) var(--md-sys-motion-easing-standard),color var(--md-sys-motion-duration-short2) var(--md-sys-motion-easing-standard);position:relative;box-sizing:border-box}mu-drawer-item[layout="vertical"] .mu-drawer-item-link,mu-nav-item .mu-drawer-item-link{flex-direction:column;justify-content:center;gap:4px;padding:12px 16px;border-radius:var(--md-sys-shape-corner-large)}.mu-drawer-item-link:hover:not([disabled]):not([aria-disabled="true"]){background:color-mix(in srgb,var(--md-sys-color-on-surface) calc(var(--md-sys-state-hover-opacity,0.08) * 100%),transparent)}.mu-drawer-item-link:focus-visible{outline:2px solid var(--md-sys-color-primary);outline-offset:2px}.mu-drawer-item-link:active:not([disabled]):not([aria-disabled="true"]){background:color-mix(in srgb,var(--md-sys-color-on-surface) calc(var(--md-sys-state-pressed-opacity,0.12) * 100%),transparent)}mu-drawer-item[active] .mu-drawer-item-link{background:var(--md-sys-color-secondary-container);color:var(--md-sys-color-on-secondary-container)}mu-drawer-item[active] .mu-drawer-item-link:hover{background:color-mix(in srgb,var(--md-sys-color-on-secondary-container) calc(var(--md-sys-state-hover-opacity,0.08) * 100%),var(--md-sys-color-secondary-container))}mu-drawer-item[layout="vertical"][active] .mu-drawer-item-link,mu-nav-item[active] .mu-drawer-item-link{background:transparent;color:var(--md-sys-color-on-secondary-container)}mu-drawer-item[layout="vertical"][active] .mu-drawer-item-icon,mu-nav-item[active] .mu-drawer-item-icon{background:var(--md-sys-color-secondary-container)}.mu-drawer-item-link[disabled],.mu-drawer-item-link[aria-disabled="true"]{opacity:0.38;cursor:not-allowed}.mu-drawer-item-icon{display:flex;align-items:center;justify-content:center;flex-shrink:0;width:24px;height:24px;position:relative;transition:background-color var(--md-sys-motion-duration-short2) var(--md-sys-motion-easing-standard)}mu-drawer-item[layout="vertical"] .mu-drawer-item-icon,mu-nav-item .mu-drawer-item-icon{width:56px;height:32px;border-radius:var(--md-sys-shape-corner-full)}.mu-drawer-item-icon mu-icon{display:flex;align-items:center;justify-content:center}.mu-drawer-item-label{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-align:left}mu-drawer-item[layout="vertical"] .mu-drawer-item-label,mu-nav-item .mu-drawer-item-label{flex:none;text-align:center;font-size:var(--md-sys-typescale-label-medium-size,12px);font-weight:var(--md-sys-typescale-label-medium-weight,500)}mu-drawer-item[hide-label] .mu-drawer-item-label{display:none}mu-drawer-item[hide-label] .mu-drawer-item-link{width:auto;padding:12px;min-width:48px;min-height:48px;border-radius:var(--md-sys-shape-corner-full);background:transparent;justify-content:center}mu-drawer-item[hide-label][active] .mu-drawer-item-link{background:transparent}mu-drawer-item[hide-label][active] .mu-drawer-item-icon{background:var(--md-sys-color-secondary-container);width:56px;height:32px;border-radius:var(--md-sys-shape-corner-full)}mu-drawer-item[hide-label] .mu-drawer-item-link:hover:not([disabled]){background:transparent}mu-drawer-item[hide-label] .mu-drawer-item-icon:hover{background:color-mix(in srgb,var(--md-sys-color-on-surface) calc(var(--md-sys-state-hover-opacity,0.08) * 100%),transparent);border-radius:var(--md-sys-shape-corner-full)}.mu-drawer-item-badge{min-width:16px;height:16px;padding:0 4px;border-radius:var(--md-sys-shape-corner-full);background:var(--md-sys-color-error);color:var(--md-sys-color-on-error);font-size:11px;font-weight:500;display:flex;align-items:center;justify-content:center;flex-shrink:0}mu-drawer-item[layout="vertical"] .mu-drawer-item-badge,mu-nav-item .mu-drawer-item-badge{position:absolute;top:0;right:8px}mu-bottom-nav{display:block;position:fixed;bottom:0;left:0;right:0;z-index:var(--mu-z-bottom-nav,150)}.mu-bottom-nav-nav{display:flex;align-items:stretch;justify-content:space-around;height:var(--mu-bottom-nav-height,80px);background:var(--md-sys-color-surface-container);border-top:1px solid var(--md-sys-color-outline-variant);padding:0 8px;padding-bottom:env(safe-area-inset-bottom,0)}.mu-bottom-nav-nav>mu-nav-item,.mu-bottom-nav-nav>mu-drawer-item{flex:1;max-width:120px}mu-layout{display:flex;flex-direction:column;height:100vh;background:var(--md-sys-color-background);color:var(--md-sys-color-on-background);overflow:hidden}.mu-layout-wrapper{display:flex;flex-direction:column;flex:1;height:100vh;overflow:hidden}.mu-layout-header{flex-shrink:0;width:100%;z-index:var(--z-sticky,100)}.mu-layout-body{display:flex;flex:1;overflow:hidden;min-height:0}.mu-layout-drawer{flex-shrink:0;height:100%;overflow-y:auto;overflow-x:hidden}@media (max-width:599px){.mu-layout-drawer{position:fixed;top:0;left:0;height:100vh;z-index:var(--mu-z-drawer,250)}}.mu-layout-main{flex:1;display:flex;flex-direction:column;min-width:0;height:100%;overflow-y:auto}.mu-layout-content{flex:1;padding:16px}mu-layout[has-bottom-nav] .mu-layout-content{padding-bottom:calc(var(--mu-bottom-nav-height,80px)+16px+env(safe-area-inset-bottom,0))}@media (max-width:599px){.mu-layout-content{padding:8px}mu-layout[has-bottom-nav] .mu-layout-content{padding-bottom:calc(var(--mu-bottom-nav-height,80px)+8px+env(safe-area-inset-bottom,0))}}.mu-layout-footer{flex-shrink:0;width:100%}.mu-layout-bottom{}mu-layout.mu-loading .mu-layout-content::before{content:'';position:fixed;top:0;left:0;right:0;height:4px;background:linear-gradient(90deg,var(--md-sys-color-primary) 0%,var(--md-sys-color-primary-container) 50%,var(--md-sys-color-primary) 100%);background-size:200% 100%;animation:loading-bar 1.5s ease-in-out infinite;z-index:var(--z-overlay,9999)}@keyframes loading-bar{0%{background-position:200% 0}100%{background-position:-200% 0}}mu-drawer{display:block;position:relative;z-index:var(--mu-z-drawer,250)}.mu-drawer-scrim{position:fixed;inset:0;background:rgba(0,0,0,0.32);opacity:0;visibility:hidden;transition:opacity var(--md-sys-motion-duration-medium2) var(--md-sys-motion-easing-standard),visibility var(--md-sys-motion-duration-medium2);z-index:var(--mu-z-drawer-scrim,240)}.mu-drawer-scrim.mu-drawer-scrim-visible{opacity:1;visibility:visible}.mu-drawer-nav{display:flex;flex-direction:column;background:var(--md-sys-color-surface-container-low);border-right:1px solid var(--md-sys-color-outline-variant);height:100%;overflow-y:auto;overflow-x:hidden;transition:width var(--md-sys-motion-duration-short3,150ms) var(--md-sys-motion-easing-emphasized-accelerate,cubic-bezier(0.3,0,0.8,0.15)),transform var(--md-sys-motion-duration-short3,150ms) var(--md-sys-motion-easing-emphasized-accelerate,cubic-bezier(0.3,0,0.8,0.15))}mu-drawer[position="end"] .mu-drawer-nav{border-right:none;border-left:1px solid var(--md-sys-color-outline-variant)}.mu-drawer-nav.mu-drawer-mode-expanded{width:var(--mu-drawer-standard-width,256px)}.mu-drawer-nav.mu-drawer-mode-rail{width:var(--mu-drawer-rail-width,80px)}.mu-drawer-nav.mu-drawer-mode-rail.mu-drawer-expanded-hover{width:var(--mu-drawer-standard-width,256px);box-shadow:var(--md-sys-elevation-level2);transition:width var(--md-sys-motion-duration-medium2,300ms) var(--md-sys-motion-easing-emphasized-decelerate,cubic-bezier(0.05,0.7,0.1,1)),transform var(--md-sys-motion-duration-medium2,300ms) var(--md-sys-motion-easing-emphasized-decelerate,cubic-bezier(0.05,0.7,0.1,1)),box-shadow var(--md-sys-motion-duration-medium2,300ms) var(--md-sys-motion-easing-emphasized-decelerate,cubic-bezier(0.05,0.7,0.1,1))}.mu-drawer-nav.mu-drawer-mode-hidden{position:fixed;top:0;left:0;bottom:0;width:var(--mu-drawer-expanded-width,360px);max-width:calc(100vw - 56px);transform:translateX(-100%);box-shadow:var(--md-sys-elevation-level3);z-index:var(--mu-z-drawer,250)}mu-drawer[position="end"] .mu-drawer-nav.mu-drawer-mode-hidden{left:auto;right:0;transform:translateX(100%)}.mu-drawer-nav.mu-drawer-mode-hidden.mu-drawer-open{transform:translateX(0)}.mu-drawer-header{padding:16px;border-bottom:1px solid var(--md-sys-color-outline-variant);transition:opacity var(--md-sys-motion-duration-short2,100ms) var(--md-sys-motion-easing-standard),padding var(--md-sys-motion-duration-short2,100ms) var(--md-sys-motion-easing-standard)}.mu-drawer-nav.mu-drawer-mode-rail:not(.mu-drawer-expanded-hover) .mu-drawer-header{opacity:0;padding:8px;height:0;overflow:hidden;border-bottom:none}.mu-drawer-content{flex:1;padding:8px 12px;display:flex;flex-direction:column;gap:4px}.mu-drawer-nav.mu-drawer-mode-rail:not(.mu-drawer-expanded-hover) .mu-drawer-content{align-items:center;padding:8px 0}mu-datatable{display:block;font-family:var(--md-sys-typescale-font)}.mu-datatable-wrapper{background:var(--md-sys-color-surface);border-radius:var(--md-sys-shape-corner-medium);border:1px solid var(--md-sys-color-outline-variant);overflow:hidden}.mu-datatable-toolbar{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;border-bottom:1px solid var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface-container-low)}.mu-datatable-search{display:flex;align-items:center;gap:8px;flex:1;max-width:300px}.mu-datatable-search input{flex:1;padding:8px 12px;border:1px solid var(--md-sys-color-outline);border-radius:var(--md-sys-shape-corner-small);font-size:var(--md-sys-typescale-body-medium-size);background:var(--md-sys-color-surface);color:var(--md-sys-color-on-surface)}.mu-datatable-search input:focus{outline:2px solid var(--md-sys-color-primary);outline-offset:-1px;border-color:var(--md-sys-color-primary)}.mu-datatable-info{font-size:var(--md-sys-typescale-body-small-size);color:var(--md-sys-color-on-surface-variant)}.mu-datatable-table{width:100%;border-collapse:collapse}.mu-datatable-table thead{background:var(--md-sys-color-surface-container)}.mu-datatable-table th{padding:12px 16px;text-align:left;font-weight:500;font-size:var(--md-sys-typescale-label-large-size);color:var(--md-sys-color-on-surface);border-bottom:1px solid var(--md-sys-color-outline-variant);user-select:none}.mu-datatable-table th.mu-datatable-sortable{cursor:pointer;transition:background-color 0.15s}.mu-datatable-table th.mu-datatable-sortable:hover{background:var(--md-sys-color-surface-container-high)}.mu-datatable-sort-icon{margin-left:4px;opacity:0.5;font-size:16px}.mu-datatable-table th.mu-datatable-sorted .mu-datatable-sort-icon{opacity:1;color:var(--md-sys-color-primary)}.mu-datatable-table tbody tr{border-bottom:1px solid var(--md-sys-color-outline-variant);transition:background-color 0.15s}.mu-datatable-table tbody tr:hover{background:color-mix(in srgb,var(--md-sys-color-on-surface) 4%,transparent)}.mu-datatable-table tbody tr.mu-datatable-selected{background:color-mix(in srgb,var(--md-sys-color-primary) 8%,transparent)}.mu-datatable-table td{padding:12px 16px;font-size:var(--md-sys-typescale-body-medium-size);color:var(--md-sys-color-on-surface)}.mu-datatable-checkbox-cell{width:48px;text-align:center}.mu-datatable-checkbox-cell input{width:18px;height:18px;accent-color:var(--md-sys-color-primary);cursor:pointer}.mu-datatable-empty-state{padding:48px 16px;text-align:center;color:var(--md-sys-color-on-surface-variant)}.mu-datatable-pagination{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;border-top:1px solid var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface-container-low)}.mu-datatable-pagination-info{font-size:var(--md-sys-typescale-body-small-size);color:var(--md-sys-color-on-surface-variant)}.mu-datatable-pagination-controls{display:flex;gap:4px}.mu-datatable-pagination-btn{padding:8px 12px;border:1px solid var(--md-sys-color-outline);border-radius:var(--md-sys-shape-corner-small);background:var(--md-sys-color-surface);color:var(--md-sys-color-on-surface);cursor:pointer;font-size:var(--md-sys-typescale-body-small-size);transition:background-color 0.15s}.mu-datatable-pagination-btn:hover:not(:disabled){background:var(--md-sys-color-surface-container)}.mu-datatable-pagination-btn:disabled{opacity:0.5;cursor:not-allowed}.mu-datatable-pagination-btn.mu-datatable-pagination-btn-active{background:var(--md-sys-color-primary);color:var(--md-sys-color-on-primary);border-color:var(--md-sys-color-primary)}mu-schema-form{display:block;font-family:var(--md-sys-typescale-font)}.mu-schema-form{display:flex;flex-direction:column;gap:20px}.mu-schema-form.mu-schema-form-inline{flex-direction:row;flex-wrap:wrap}.mu-schema-form.mu-schema-form-inline .mu-schema-form-field{flex:1;min-width:200px}.mu-schema-form-field{display:flex;flex-direction:column;gap:4px}.mu-schema-form-field.mu-schema-form-field-error mu-input,.mu-schema-form-field.mu-schema-form-field-error mu-dropdown,.mu-schema-form-field.mu-schema-form-field-error mu-textarea{--md-sys-color-outline:var(--md-sys-color-error)}.mu-schema-form-description{font-size:var(--md-sys-typescale-body-small-size);color:var(--md-sys-color-on-surface-variant);margin-top:2px}.mu-schema-form-error{font-size:var(--md-sys-typescale-body-small-size);color:var(--md-sys-color-error);margin-top:2px}.mu-schema-form-switch-row{display:flex;align-items:center;gap:12px}.mu-schema-form-switch-label{font-size:var(--md-sys-typescale-body-medium-size);color:var(--md-sys-color-on-surface)}.mu-schema-form-actions{display:flex;gap:12px;margin-top:8px;padding-top:16px;border-top:1px solid var(--md-sys-color-outline-variant)}.mu-schema-form-actions mu-button{flex:0 0 auto}.mu-schema-form-empty-state{padding:24px;text-align:center;color:var(--md-sys-color-on-surface-variant);background:var(--md-sys-color-surface-container);border-radius:var(--md-sys-shape-corner-medium)}mu-prompt-input{display:block;font-family:var(--md-sys-typescale-font)}.mu-prompt-input-container{display:flex;gap:8px;background:var(--md-sys-color-surface-container);border:1px solid var(--md-sys-color-outline-variant);border-radius:var(--md-sys-shape-corner-large);padding:12px 16px;transition:border-color 0.2s var(--md-sys-motion-easing-standard)}.mu-prompt-input-container:focus-within{border-color:var(--md-sys-color-primary);box-shadow:0 0 0 1px var(--md-sys-color-primary)}.mu-prompt-input-loading{opacity:0.7;pointer-events:none}.mu-prompt-input-field{flex:1;border:none;background:transparent;color:var(--md-sys-color-on-surface);font-size:var(--md-sys-typescale-body-large-size);font-family:inherit;resize:none;outline:none;min-height:24px}textarea.mu-prompt-input-field{min-height:80px}.mu-prompt-input-field::placeholder{color:var(--md-sys-color-on-surface-variant)}.mu-prompt-input-submit{display:flex;align-items:center;justify-content:center;width:40px;height:40px;border:none;border-radius:50%;background:var(--md-sys-color-primary);color:var(--md-sys-color-on-primary);cursor:pointer;transition:background 0.2s,transform 0.1s;flex-shrink:0;align-self:flex-end}.mu-prompt-input-submit:hover:not(:disabled){background:var(--md-sys-color-primary-container);color:var(--md-sys-color-on-primary-container)}.mu-prompt-input-submit:active:not(:disabled){transform:scale(0.95)}.mu-prompt-input-submit:disabled{background:var(--md-sys-color-surface-container-high);color:var(--md-sys-color-on-surface-variant);cursor:not-allowed}.mu-prompt-input-submit svg{width:20px;height:20px}.mu-prompt-input-spinner{width:20px;height:20px;border:2px solid transparent;border-top-color:currentColor;border-radius:50%;animation:mu-prompt-spin 0.8s linear infinite}@keyframes mu-prompt-spin{to{transform:rotate(360deg)}}mu-code-block{display:block;margin:12px 0;font-family:'SF Mono','Monaco','Consolas',monospace}.mu-code-block-container{background:var(--md-sys-color-surface-container-highest);border-radius:var(--md-sys-shape-corner-medium);overflow:hidden}.mu-code-block-header{display:flex;justify-content:space-between;align-items:center;padding:8px 12px;background:var(--md-sys-color-surface-container-high);border-bottom:1px solid var(--md-sys-color-outline-variant)}.mu-code-block-language{font-size:12px;color:var(--md-sys-color-on-surface-variant);text-transform:uppercase;font-weight:500}.mu-code-block-filename{font-size:12px;color:var(--md-sys-color-on-surface)}.mu-code-block-copy-btn{font-size:12px;padding:4px 8px;border:none;border-radius:4px;background:transparent;color:var(--md-sys-color-primary);cursor:pointer;transition:background 0.2s}.mu-code-block-copy-btn:hover{background:var(--md-sys-color-primary-container)}.mu-code-block-pre{margin:0;padding:16px;overflow-x:auto;font-size:13px;line-height:1.5;color:var(--md-sys-color-on-surface)}.mu-code-block-pre code{font-family:inherit}mu-agent-toolbar{display:flex;gap:4px;margin-top:8px}.mu-agent-toolbar-btn{display:flex;align-items:center;justify-content:center;width:32px;height:32px;border:none;border-radius:8px;background:transparent;cursor:pointer;font-size:16px;opacity:0.6;transition:opacity 0.2s,background 0.2s}.mu-agent-toolbar-btn:hover{opacity:1;background:var(--md-sys-color-surface-container-high)}.mu-agent-toolbar-btn:active{transform:scale(0.95)}mu-message-bubble{display:block;margin:16px 0;font-family:var(--md-sys-typescale-font)}.mu-message-bubble-message{display:flex;gap:12px}.mu-message-bubble-message.mu-message-bubble-user{flex-direction:row-reverse}.mu-message-bubble-avatar{width:36px;height:36px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:18px;flex-shrink:0}.mu-message-bubble-avatar.mu-message-bubble-user{background:var(--md-sys-color-primary-container);color:var(--md-sys-color-on-primary-container)}.mu-message-bubble-avatar.mu-message-bubble-assistant{background:var(--md-sys-color-secondary-container);color:var(--md-sys-color-on-secondary-container)}.mu-message-bubble-avatar img{width:100%;height:100%;border-radius:50%;object-fit:cover}.mu-message-bubble-content{flex:1;max-width:80%}.mu-message-bubble-header{display:flex;gap:8px;align-items:center;margin-bottom:4px}.mu-message-bubble-header.mu-message-bubble-user{flex-direction:row-reverse}.mu-message-bubble-name{font-size:var(--md-sys-typescale-label-medium-size);font-weight:600;color:var(--md-sys-color-on-surface)}.mu-message-bubble-timestamp{font-size:var(--md-sys-typescale-label-small-size);color:var(--md-sys-color-on-surface-variant)}.mu-message-bubble-bubble{padding:12px 16px;line-height:1.5}.mu-message-bubble-bubble.mu-message-bubble-user{border-radius:16px 16px 4px 16px;background:var(--md-sys-color-primary);color:var(--md-sys-color-on-primary)}.mu-message-bubble-bubble.mu-message-bubble-assistant{border-radius:16px 16px 16px 4px;background:var(--md-sys-color-surface-container);color:var(--md-sys-color-on-surface)}mu-example{content-visibility:auto;contain-intrinsic-size:auto 300px}mu-modal,mu-confirm,dialog.mu-modal__dialog,dialog.mu-confirm__dialog{contain:layout style paint}