@yewdiel21/motion-kit 0.0.0-stage → 0.9.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 (391) hide show
  1. package/NOTICE +38 -0
  2. package/README.md +80 -2
  3. package/bin/motion-kit.mjs +242 -0
  4. package/css.d.ts +2 -0
  5. package/dist/auto/index.d.ts +63 -0
  6. package/dist/auto/index.js +207 -0
  7. package/dist/auto/index.js.map +1 -0
  8. package/dist/chunk-2BQGFOA7.js +177 -0
  9. package/dist/chunk-2BQGFOA7.js.map +1 -0
  10. package/dist/chunk-34XYOXHG.js +2374 -0
  11. package/dist/chunk-34XYOXHG.js.map +1 -0
  12. package/dist/chunk-6OJAP6ZL.js +832 -0
  13. package/dist/chunk-6OJAP6ZL.js.map +1 -0
  14. package/dist/chunk-ABNRDDO7.js +28 -0
  15. package/dist/chunk-ABNRDDO7.js.map +1 -0
  16. package/dist/chunk-FS2HJVVY.js +3320 -0
  17. package/dist/chunk-FS2HJVVY.js.map +1 -0
  18. package/dist/chunk-J27KH2A2.js +157 -0
  19. package/dist/chunk-J27KH2A2.js.map +1 -0
  20. package/dist/chunk-KLY5BRRI.js +18 -0
  21. package/dist/chunk-KLY5BRRI.js.map +1 -0
  22. package/dist/chunk-Q4LVFNLN.js +1617 -0
  23. package/dist/chunk-Q4LVFNLN.js.map +1 -0
  24. package/dist/chunk-RFDIZYFX.js +304 -0
  25. package/dist/chunk-RFDIZYFX.js.map +1 -0
  26. package/dist/chunk-TGV27ZWM.js +17 -0
  27. package/dist/chunk-TGV27ZWM.js.map +1 -0
  28. package/dist/confetti-BSX1CLLV.d.ts +41 -0
  29. package/dist/css/components/chat-background.css +87 -0
  30. package/dist/css/components/chat.css +237 -0
  31. package/dist/css/components/cursor.css +178 -0
  32. package/dist/css/components/dialog.css +259 -0
  33. package/dist/css/components/island.css +301 -0
  34. package/dist/css/components/menu.css +105 -0
  35. package/dist/css/components/nav.css +1054 -0
  36. package/dist/css/components/steps.css +50 -0
  37. package/dist/css/components/theme-picker.css +115 -0
  38. package/dist/css/components/toast.css +115 -0
  39. package/dist/css/controls.css +950 -0
  40. package/dist/css/effects.css +587 -0
  41. package/dist/css/fonts.css +3 -0
  42. package/dist/css/themes/black-green.css +126 -0
  43. package/dist/css/themes/black.css +126 -0
  44. package/dist/css/themes/blue.css +126 -0
  45. package/dist/css/themes/brown.css +126 -0
  46. package/dist/css/themes/cold-blue.css +126 -0
  47. package/dist/css/themes/funny.css +126 -0
  48. package/dist/css/themes/gray.css +126 -0
  49. package/dist/css/themes/green.css +126 -0
  50. package/dist/css/themes/modern-1.css +126 -0
  51. package/dist/css/themes/neogreen.css +126 -0
  52. package/dist/css/themes/new.css +126 -0
  53. package/dist/css/themes/new2.css +126 -0
  54. package/dist/css/themes/oled.css +126 -0
  55. package/dist/css/themes/orange.css +126 -0
  56. package/dist/css/themes/pastel-pink.css +126 -0
  57. package/dist/css/themes/pink.css +126 -0
  58. package/dist/css/themes/purple.css +126 -0
  59. package/dist/css/themes/red.css +126 -0
  60. package/dist/css/themes/super-blue.css +126 -0
  61. package/dist/css/themes.css +2431 -0
  62. package/dist/css/tokens.css +452 -0
  63. package/dist/elements/index.d.ts +183 -0
  64. package/dist/elements/index.js +472 -0
  65. package/dist/elements/index.js.map +1 -0
  66. package/dist/engine-CUr9QijM.d.ts +46 -0
  67. package/dist/gl/index.d.ts +61 -0
  68. package/dist/gl/index.js +18 -0
  69. package/dist/gl/index.js.map +1 -0
  70. package/dist/index.css +5296 -0
  71. package/dist/index.d.ts +440 -0
  72. package/dist/index.js +390 -0
  73. package/dist/index.js.map +1 -0
  74. package/dist/react/index.d.ts +476 -0
  75. package/dist/react/index.js +969 -0
  76. package/dist/react/index.js.map +1 -0
  77. package/dist/reduced-BM4Ls0g5.d.ts +566 -0
  78. package/dist/reveal-WFUWDrei.d.ts +416 -0
  79. package/dist/store-Bqy_obnD.d.ts +195 -0
  80. package/dist/theme/generate.d.ts +18 -0
  81. package/dist/theme/generate.js +64 -0
  82. package/dist/theme/generate.js.map +1 -0
  83. package/dist/theme/index.d.ts +17 -0
  84. package/dist/theme/index.js +32 -0
  85. package/dist/theme/index.js.map +1 -0
  86. package/dist/theme-BFMoCzi6.d.ts +158 -0
  87. package/dist/types-BkS_raL8.d.ts +7 -0
  88. package/package.json +114 -3
  89. package/registry.json +469 -0
  90. package/skills/motion-kit/SKILL.md +189 -0
  91. package/skills/motion-kit/reference/components.md +86 -0
  92. package/skills/motion-kit/reference/design.md +92 -0
  93. package/skills/motion-kit/reference/recipes.md +172 -0
  94. package/src/auto/auto-init.ts +151 -0
  95. package/src/auto/index.ts +3 -0
  96. package/src/auto/parse-options.ts +68 -0
  97. package/src/components/chat/README.md +90 -0
  98. package/src/components/chat/chat.css +236 -0
  99. package/src/components/chat/element.ts +98 -0
  100. package/src/components/chat/engine.ts +295 -0
  101. package/src/components/chat/react.tsx +196 -0
  102. package/src/components/chat-background/README.md +50 -0
  103. package/src/components/chat-background/audio.ts +56 -0
  104. package/src/components/chat-background/chat-background.css +86 -0
  105. package/src/components/chat-background/element.ts +31 -0
  106. package/src/components/chat-background/engine.ts +108 -0
  107. package/src/components/chat-background/react.tsx +36 -0
  108. package/src/components/cursor/README.md +53 -0
  109. package/src/components/cursor/cursor.css +177 -0
  110. package/src/components/cursor/element.ts +23 -0
  111. package/src/components/cursor/engine.ts +254 -0
  112. package/src/components/cursor/react.tsx +26 -0
  113. package/src/components/dialog/README.md +106 -0
  114. package/src/components/dialog/dialog.css +258 -0
  115. package/src/components/dialog/element.ts +118 -0
  116. package/src/components/dialog/engine.ts +432 -0
  117. package/src/components/dialog/react.tsx +200 -0
  118. package/src/components/icon.tsx +10 -0
  119. package/src/components/icons.ts +24 -0
  120. package/src/components/island/README.md +91 -0
  121. package/src/components/island/element.ts +45 -0
  122. package/src/components/island/engine.ts +200 -0
  123. package/src/components/island/island.css +300 -0
  124. package/src/components/island/react.tsx +115 -0
  125. package/src/components/menu/README.md +67 -0
  126. package/src/components/menu/element.ts +55 -0
  127. package/src/components/menu/engine.ts +142 -0
  128. package/src/components/menu/menu.css +104 -0
  129. package/src/components/menu/react.tsx +82 -0
  130. package/src/components/nav/README.md +85 -0
  131. package/src/components/nav/element.ts +39 -0
  132. package/src/components/nav/engine.ts +164 -0
  133. package/src/components/nav/nav.css +1053 -0
  134. package/src/components/nav/react.tsx +90 -0
  135. package/src/components/steps/README.md +70 -0
  136. package/src/components/steps/element.ts +43 -0
  137. package/src/components/steps/engine.ts +185 -0
  138. package/src/components/steps/react.tsx +91 -0
  139. package/src/components/steps/steps.css +49 -0
  140. package/src/components/theme-picker/README.md +57 -0
  141. package/src/components/theme-picker/element.ts +20 -0
  142. package/src/components/theme-picker/engine.ts +91 -0
  143. package/src/components/theme-picker/react.tsx +31 -0
  144. package/src/components/theme-picker/theme-picker.css +114 -0
  145. package/src/components/toast/README.md +60 -0
  146. package/src/components/toast/element.ts +25 -0
  147. package/src/components/toast/engine.ts +483 -0
  148. package/src/components/toast/react.tsx +22 -0
  149. package/src/components/toast/store.ts +122 -0
  150. package/src/components/toast/toast.css +114 -0
  151. package/src/core/channels.ts +165 -0
  152. package/src/core/curves.ts +35 -0
  153. package/src/core/frame.ts +12 -0
  154. package/src/core/gsap.ts +65 -0
  155. package/src/core/loop.ts +44 -0
  156. package/src/core/math.ts +9 -0
  157. package/src/core/physics-spring.ts +59 -0
  158. package/src/core/pointer.ts +63 -0
  159. package/src/core/reduced.ts +21 -0
  160. package/src/core/scope.ts +70 -0
  161. package/src/core/scroll-track.ts +106 -0
  162. package/src/core/split.ts +68 -0
  163. package/src/core/spring.ts +22 -0
  164. package/src/core/styles.ts +31 -0
  165. package/src/core/timing.ts +204 -0
  166. package/src/core/types.ts +20 -0
  167. package/src/core/visible.ts +19 -0
  168. package/src/css/base.css +142 -0
  169. package/src/css/controls/README.md +122 -0
  170. package/src/css/controls/burger.css +67 -0
  171. package/src/css/controls/button.css +226 -0
  172. package/src/css/controls/checkbox.css +53 -0
  173. package/src/css/controls/chip.css +85 -0
  174. package/src/css/controls/field.css +124 -0
  175. package/src/css/controls/glass.css +220 -0
  176. package/src/css/controls/icon.css +26 -0
  177. package/src/css/controls/segmented.css +60 -0
  178. package/src/css/controls/switch.css +72 -0
  179. package/src/css/default-theme.css +123 -0
  180. package/src/css/effects/README.md +134 -0
  181. package/src/css/effects/anim.css +224 -0
  182. package/src/css/effects/fade.css +15 -0
  183. package/src/css/effects/float.css +64 -0
  184. package/src/css/effects/frost.css +62 -0
  185. package/src/css/effects/grain.css +58 -0
  186. package/src/css/effects/loading.css +60 -0
  187. package/src/css/effects/success.css +22 -0
  188. package/src/css/effects/text.css +67 -0
  189. package/src/css/fonts.css +3 -0
  190. package/src/css/states.css +51 -0
  191. package/src/css/themes/black-green.css +126 -0
  192. package/src/css/themes/black.css +126 -0
  193. package/src/css/themes/blue.css +126 -0
  194. package/src/css/themes/brown.css +126 -0
  195. package/src/css/themes/cold-blue.css +126 -0
  196. package/src/css/themes/funny.css +126 -0
  197. package/src/css/themes/gray.css +126 -0
  198. package/src/css/themes/green.css +126 -0
  199. package/src/css/themes/modern-1.css +126 -0
  200. package/src/css/themes/neogreen.css +126 -0
  201. package/src/css/themes/new.css +126 -0
  202. package/src/css/themes/new2.css +126 -0
  203. package/src/css/themes/oled.css +126 -0
  204. package/src/css/themes/orange.css +126 -0
  205. package/src/css/themes/pastel-pink.css +126 -0
  206. package/src/css/themes/pink.css +126 -0
  207. package/src/css/themes/purple.css +126 -0
  208. package/src/css/themes/red.css +126 -0
  209. package/src/css/themes/super-blue.css +126 -0
  210. package/src/css/tokens.css +182 -0
  211. package/src/elements/base.ts +76 -0
  212. package/src/elements/index.ts +48 -0
  213. package/src/gl/index.ts +15 -0
  214. package/src/gl/liquid-blend/README.md +23 -0
  215. package/src/gl/liquid-blend/create-liquid-blend.ts +7 -0
  216. package/src/gl/liquid-blend/shader.ts +9 -0
  217. package/src/gl/matcap/README.md +23 -0
  218. package/src/gl/matcap/create-matcap.ts +7 -0
  219. package/src/gl/matcap/shader.ts +16 -0
  220. package/src/gl/particle-hero/README.md +41 -0
  221. package/src/gl/particle-hero/create-particle-hero.ts +544 -0
  222. package/src/gl/particle-hero/particle-hero.css +19 -0
  223. package/src/gl/particle-hero/shaders.ts +84 -0
  224. package/src/gl/shader-blur/README.md +23 -0
  225. package/src/gl/shader-blur/create-shader-blur.ts +7 -0
  226. package/src/gl/shader-blur/shader.ts +11 -0
  227. package/src/gl/shader-grain/README.md +23 -0
  228. package/src/gl/shader-grain/create-shader-grain.ts +7 -0
  229. package/src/gl/shader-grain/shader.ts +6 -0
  230. package/src/gl/shared/create-shader-effect.ts +186 -0
  231. package/src/gl/shared/shader.css +3 -0
  232. package/src/gl/shared/shaders.ts +30 -0
  233. package/src/index.ts +177 -0
  234. package/src/motion/anchor.ts +45 -0
  235. package/src/motion/chat.ts +97 -0
  236. package/src/motion/confetti.ts +130 -0
  237. package/src/motion/count.ts +95 -0
  238. package/src/motion/details.ts +70 -0
  239. package/src/motion/drag-dismiss.ts +231 -0
  240. package/src/motion/effects.ts +81 -0
  241. package/src/motion/entrances.ts +27 -0
  242. package/src/motion/floating.ts +389 -0
  243. package/src/motion/flow.ts +115 -0
  244. package/src/motion/indicator.ts +44 -0
  245. package/src/motion/layout.ts +39 -0
  246. package/src/motion/liquid.ts +227 -0
  247. package/src/motion/morph.ts +540 -0
  248. package/src/motion/reveal.ts +112 -0
  249. package/src/motion/sheet.ts +65 -0
  250. package/src/motion/surface.ts +108 -0
  251. package/src/react/animated-number.tsx +30 -0
  252. package/src/react/flip-group.tsx +44 -0
  253. package/src/react/frost.tsx +33 -0
  254. package/src/react/index.ts +80 -0
  255. package/src/react/slot-text.tsx +44 -0
  256. package/src/react/theme-provider.tsx +42 -0
  257. package/src/react/use-card-dock.ts +9 -0
  258. package/src/react/use-cascade.ts +9 -0
  259. package/src/react/use-contrast.ts +9 -0
  260. package/src/react/use-counter.ts +8 -0
  261. package/src/react/use-curved-carousel.ts +10 -0
  262. package/src/react/use-depth-grid.ts +9 -0
  263. package/src/react/use-details.ts +7 -0
  264. package/src/react/use-dock-pill.ts +10 -0
  265. package/src/react/use-drag-ruler.ts +10 -0
  266. package/src/react/use-fill-text.ts +9 -0
  267. package/src/react/use-fit-text.ts +8 -0
  268. package/src/react/use-flow.ts +8 -0
  269. package/src/react/use-frame-zoom.ts +9 -0
  270. package/src/react/use-infinite-reel.ts +8 -0
  271. package/src/react/use-letters.ts +9 -0
  272. package/src/react/use-liquid-blend.ts +8 -0
  273. package/src/react/use-marquee.ts +9 -0
  274. package/src/react/use-mask-text.ts +9 -0
  275. package/src/react/use-matcap.ts +8 -0
  276. package/src/react/use-parallax.ts +9 -0
  277. package/src/react/use-particle-hero.ts +9 -0
  278. package/src/react/use-pile.ts +8 -0
  279. package/src/react/use-pop.ts +8 -0
  280. package/src/react/use-radial-menu.ts +10 -0
  281. package/src/react/use-recipe.ts +38 -0
  282. package/src/react/use-reflow.ts +9 -0
  283. package/src/react/use-repel-bento.ts +8 -0
  284. package/src/react/use-reveal.ts +8 -0
  285. package/src/react/use-rotator.ts +10 -0
  286. package/src/react/use-shader-blur.ts +8 -0
  287. package/src/react/use-shader-grain.ts +8 -0
  288. package/src/react/use-slot-text.ts +17 -0
  289. package/src/react/use-snap-strip.ts +9 -0
  290. package/src/react/use-sortable.ts +14 -0
  291. package/src/react/use-spring-cards.ts +8 -0
  292. package/src/react/use-stretch-footer.ts +20 -0
  293. package/src/react/use-tabs.ts +10 -0
  294. package/src/react/use-text-roll.ts +9 -0
  295. package/src/react/use-ticket-menu.ts +15 -0
  296. package/src/react/use-words.ts +8 -0
  297. package/src/recipes/card-dock/README.md +36 -0
  298. package/src/recipes/card-dock/card-dock.css +178 -0
  299. package/src/recipes/card-dock/create-card-dock.ts +97 -0
  300. package/src/recipes/cascade/README.md +33 -0
  301. package/src/recipes/cascade/create-cascade.ts +111 -0
  302. package/src/recipes/contrast/README.md +29 -0
  303. package/src/recipes/contrast/create-contrast.ts +68 -0
  304. package/src/recipes/counter/README.md +42 -0
  305. package/src/recipes/counter/create-counter.ts +84 -0
  306. package/src/recipes/curved-carousel/README.md +50 -0
  307. package/src/recipes/curved-carousel/carousel-math.ts +20 -0
  308. package/src/recipes/curved-carousel/create-curved-carousel.ts +257 -0
  309. package/src/recipes/curved-carousel/curved-carousel.css +50 -0
  310. package/src/recipes/depth-grid/README.md +30 -0
  311. package/src/recipes/depth-grid/create-depth-grid.ts +120 -0
  312. package/src/recipes/details/README.md +31 -0
  313. package/src/recipes/details/create-details.ts +27 -0
  314. package/src/recipes/dock-pill/README.md +23 -0
  315. package/src/recipes/dock-pill/create-dock-pill.ts +68 -0
  316. package/src/recipes/dock-pill/dock-pill.css +5 -0
  317. package/src/recipes/drag-ruler/README.md +21 -0
  318. package/src/recipes/drag-ruler/create-drag-ruler.ts +95 -0
  319. package/src/recipes/drag-ruler/drag-ruler.css +16 -0
  320. package/src/recipes/fill-text/README.md +27 -0
  321. package/src/recipes/fill-text/create-fill-text.ts +93 -0
  322. package/src/recipes/fit-text/README.md +37 -0
  323. package/src/recipes/fit-text/create-fit-text.ts +55 -0
  324. package/src/recipes/fit-text/fit-text.css +6 -0
  325. package/src/recipes/flow/README.md +46 -0
  326. package/src/recipes/flow/create-flow.ts +55 -0
  327. package/src/recipes/frame-zoom/README.md +29 -0
  328. package/src/recipes/frame-zoom/create-frame-zoom.ts +91 -0
  329. package/src/recipes/infinite-reel/README.md +23 -0
  330. package/src/recipes/infinite-reel/create-infinite-reel.ts +140 -0
  331. package/src/recipes/infinite-reel/infinite-reel.css +8 -0
  332. package/src/recipes/letters/README.md +30 -0
  333. package/src/recipes/letters/create-letters.ts +113 -0
  334. package/src/recipes/marquee/README.md +32 -0
  335. package/src/recipes/marquee/create-marquee.ts +74 -0
  336. package/src/recipes/marquee/marquee.css +41 -0
  337. package/src/recipes/mask-text/README.md +39 -0
  338. package/src/recipes/mask-text/create-mask-text.ts +134 -0
  339. package/src/recipes/parallax/README.md +31 -0
  340. package/src/recipes/parallax/create-parallax.ts +74 -0
  341. package/src/recipes/pile/README.md +48 -0
  342. package/src/recipes/pile/create-pile.ts +50 -0
  343. package/src/recipes/pile/pile-math.ts +27 -0
  344. package/src/recipes/pile/pile.css +63 -0
  345. package/src/recipes/pill/README.md +30 -0
  346. package/src/recipes/pill/pill.css +48 -0
  347. package/src/recipes/pop/README.md +36 -0
  348. package/src/recipes/pop/create-pop.ts +52 -0
  349. package/src/recipes/radial-menu/README.md +44 -0
  350. package/src/recipes/radial-menu/create-radial-menu.ts +96 -0
  351. package/src/recipes/radial-menu/radial-menu.css +45 -0
  352. package/src/recipes/reflow/README.md +47 -0
  353. package/src/recipes/reflow/create-reflow.ts +49 -0
  354. package/src/recipes/repel-bento/README.md +21 -0
  355. package/src/recipes/repel-bento/create-repel-bento.ts +65 -0
  356. package/src/recipes/repel-bento/repel-bento.css +3 -0
  357. package/src/recipes/reveal/README.md +36 -0
  358. package/src/recipes/reveal/create-reveal.ts +48 -0
  359. package/src/recipes/rotator/README.md +21 -0
  360. package/src/recipes/rotator/create-rotator.ts +66 -0
  361. package/src/recipes/rotator/rotator.css +3 -0
  362. package/src/recipes/slot-text/README.md +44 -0
  363. package/src/recipes/slot-text/create-slot-text.ts +244 -0
  364. package/src/recipes/slot-text/slot-text.css +42 -0
  365. package/src/recipes/snap-strip/README.md +31 -0
  366. package/src/recipes/snap-strip/create-snap-strip.ts +133 -0
  367. package/src/recipes/snap-strip/snap-strip.css +23 -0
  368. package/src/recipes/sortable/README.md +88 -0
  369. package/src/recipes/sortable/create-sortable.ts +863 -0
  370. package/src/recipes/sortable/sortable.css +40 -0
  371. package/src/recipes/spring-cards/README.md +48 -0
  372. package/src/recipes/spring-cards/create-spring-cards.ts +140 -0
  373. package/src/recipes/spring-cards/spring-cards.css +23 -0
  374. package/src/recipes/stretch-footer/README.md +44 -0
  375. package/src/recipes/stretch-footer/create-stretch-footer.ts +69 -0
  376. package/src/recipes/stretch-footer/stretch-footer.css +28 -0
  377. package/src/recipes/tabs/README.md +39 -0
  378. package/src/recipes/tabs/create-tabs.ts +91 -0
  379. package/src/recipes/tabs/tabs.css +19 -0
  380. package/src/recipes/text-roll/README.md +35 -0
  381. package/src/recipes/text-roll/create-text-roll.ts +137 -0
  382. package/src/recipes/text-roll/text-roll.css +21 -0
  383. package/src/recipes/ticket-menu/README.md +24 -0
  384. package/src/recipes/ticket-menu/create-ticket-menu.ts +6 -0
  385. package/src/recipes/words/README.md +43 -0
  386. package/src/recipes/words/create-words.ts +114 -0
  387. package/src/theme/css-format.ts +32 -0
  388. package/src/theme/generate.ts +72 -0
  389. package/src/theme/index.ts +15 -0
  390. package/src/theme/presets.ts +79 -0
  391. package/src/theme/theme.ts +119 -0
@@ -0,0 +1,220 @@
1
+ /*
2
+ * .mk-glass — Dousan Miao's glass in one element: a translucent surface with a
3
+ * 4 px backdrop blur, an optical ring (::before) whose conic highlight turns
4
+ * from −75° to −125° on hover, and a specular band (::after) that slides and
5
+ * tilts when pressed. <span class="mk-glass__shadow" aria-hidden="true"> inside
6
+ * adds Dousan's gradient shadow. Colours follow the theme's scheme (light-dark()).
7
+ */
8
+ @property --mk-glass-angle-1 {
9
+ syntax: '<angle>';
10
+ inherits: false;
11
+ initial-value: -75deg;
12
+ }
13
+
14
+ @property --mk-glass-angle-2 {
15
+ syntax: '<angle>';
16
+ inherits: false;
17
+ initial-value: -45deg;
18
+ }
19
+
20
+ .mk-glass {
21
+ --mk-glass-blur: 4px;
22
+ --mk-glass-border: clamp(1px, 0.0625em, 4px);
23
+ --mk-glass-tint: rgb(255 255 255 / 55%);
24
+ --mk-glass-edge: light-dark(rgb(255 255 255 / 5%), rgb(255 255 255 / 2%));
25
+ --mk-glass-middle: light-dark(rgb(255 255 255 / 22%), rgb(255 255 255 / 8%));
26
+ --mk-glass-ring: light-dark(rgb(0 0 0 / 50%), rgb(255 255 255 / 70%));
27
+ --mk-glass-ring-top: light-dark(rgb(255 255 255 / 50%), rgb(255 255 255 / 20%));
28
+ --mk-glass-ring-bottom: light-dark(rgb(255 255 255 / 50%), rgb(255 255 255 / 10%));
29
+ --mk-glass-shadow:
30
+ inset 0 0.125em 0.125em light-dark(rgb(0 0 0 / 5%), rgb(255 255 255 / 5%)),
31
+ inset 0 -0.125em 0.125em light-dark(rgb(255 255 255 / 50%), rgb(255 255 255 / 25%)),
32
+ 0 0.25em 0.125em -0.125em light-dark(rgb(0 0 0 / 20%), rgb(0 0 0 / 70%)),
33
+ 0 0 0.1em 0.25em inset light-dark(rgb(255 255 255 / 20%), rgb(255 255 255 / 15%)),
34
+ 0 0 0 0 light-dark(rgb(255 255 255), rgb(255 255 255 / 10%));
35
+ --mk-glass-shadow-hover:
36
+ inset 0 0.125em 0.125em light-dark(rgb(0 0 0 / 5%), rgb(255 255 255 / 8%)),
37
+ inset 0 -0.125em 0.125em light-dark(rgb(255 255 255 / 50%), rgb(255 255 255 / 35%)),
38
+ 0 0.15em 0.05em -0.1em light-dark(rgb(0 0 0 / 25%), rgb(0 0 0 / 90%)),
39
+ 0 0 0.05em 0.1em inset light-dark(rgb(255 255 255 / 50%), rgb(255 255 255 / 35%)),
40
+ 0 0 0 0 light-dark(rgb(255 255 255), rgb(255 255 255 / 20%));
41
+ --mk-glass-shadow-active:
42
+ inset 0 0.125em 0.125em rgb(0 0 0 / 5%), inset 0 -0.125em 0.125em rgb(255 255 255 / 50%), 0 0.125em 0.125em -0.125em rgb(0 0 0 / 20%),
43
+ 0 0 0.1em 0.25em inset rgb(255 255 255 / 20%), 0 0.225em 0.05em 0 rgb(0 0 0 / 5%), 0 0.25em 0 0 rgb(255 255 255 / 75%),
44
+ inset 0 0.25em 0.05em 0 rgb(0 0 0 / 15%);
45
+ position: relative;
46
+ isolation: isolate;
47
+ border: 0;
48
+ border-radius: 999vw;
49
+ /* Dousan: dark text on light, white on dark. */
50
+ color: var(--mk-glass-fg, light-dark(#121212, #fff));
51
+ background: linear-gradient(-75deg, var(--mk-glass-edge), var(--mk-glass-middle), var(--mk-glass-edge));
52
+ box-shadow: var(--mk-glass-shadow);
53
+ -webkit-backdrop-filter: blur(var(--mk-glass-blur));
54
+ backdrop-filter: blur(var(--mk-glass-blur));
55
+ transition:
56
+ transform var(--mk-dur-press) var(--mk-ease-press),
57
+ box-shadow 0.4s var(--mk-ease-glass),
58
+ -webkit-backdrop-filter 0.4s var(--mk-ease-glass),
59
+ backdrop-filter 0.4s var(--mk-ease-glass);
60
+ }
61
+
62
+ /* Optical ring: a conic highlight masked to the border. Also replaces .mk-button's state layer. */
63
+ .mk-glass::before,
64
+ .mk-glass:is(:hover, :focus-visible, :active)::before {
65
+ position: absolute;
66
+ inset: calc(var(--mk-glass-border) / -2);
67
+ z-index: 1;
68
+ box-sizing: border-box;
69
+ padding: var(--mk-glass-border);
70
+ border-radius: inherit;
71
+ background:
72
+ conic-gradient(
73
+ from var(--mk-glass-angle-1) at 50% 50%,
74
+ var(--mk-glass-ring),
75
+ transparent 5% 40%,
76
+ var(--mk-glass-ring) 50%,
77
+ transparent 60% 95%,
78
+ var(--mk-glass-ring)
79
+ ),
80
+ linear-gradient(180deg, var(--mk-glass-ring-top), var(--mk-glass-ring-bottom));
81
+ box-shadow: inset 0 0 0 calc(var(--mk-glass-border) / 2) rgb(255 255 255 / 50%);
82
+ content: '';
83
+ opacity: 1;
84
+ pointer-events: none;
85
+ -webkit-mask-image: linear-gradient(#000 0 0), linear-gradient(#000 0 0);
86
+ mask-image: linear-gradient(#000 0 0), linear-gradient(#000 0 0);
87
+ -webkit-mask-clip: content-box, border-box;
88
+ mask-clip: content-box, border-box;
89
+ -webkit-mask-composite: xor;
90
+ mask-composite: exclude;
91
+ transition: --mk-glass-angle-1 0.5s;
92
+ }
93
+
94
+ /* Specular band, screened over the content. */
95
+ .mk-glass::after {
96
+ position: absolute;
97
+ inset: calc(var(--mk-glass-border) / 2);
98
+ z-index: 1;
99
+ border-radius: inherit;
100
+ background: linear-gradient(var(--mk-glass-angle-2), transparent 0%, var(--mk-glass-tint) 40% 50%, transparent 55%) 0% 50% / 200% 200%
101
+ no-repeat;
102
+ content: '';
103
+ mix-blend-mode: screen;
104
+ pointer-events: none;
105
+ transition:
106
+ background-position 0.5s var(--mk-ease-glass),
107
+ --mk-glass-angle-2 0.5s var(--mk-ease-glass);
108
+ }
109
+
110
+ /* Dousan's gradient shadow (optional child). Only its lower part shows: it sits under the button. */
111
+ .mk-glass__shadow {
112
+ --mk-glass-cut: 2em;
113
+ position: absolute;
114
+ top: calc(var(--mk-glass-cut) / -2);
115
+ left: calc(var(--mk-glass-cut) / -2);
116
+ z-index: -1;
117
+ width: calc(100% + var(--mk-glass-cut));
118
+ height: calc(100% + var(--mk-glass-cut));
119
+ overflow: visible;
120
+ filter: blur(clamp(2px, 0.125em, 12px));
121
+ pointer-events: none;
122
+ -webkit-mask-image: linear-gradient(transparent 55%, #000);
123
+ mask-image: linear-gradient(transparent 55%, #000);
124
+ transition: filter 0.4s var(--mk-ease-glass);
125
+ }
126
+
127
+ .mk-glass__shadow::after {
128
+ position: absolute;
129
+ top: calc(var(--mk-glass-cut) - 0.5em);
130
+ left: calc(var(--mk-glass-cut) - 0.875em);
131
+ box-sizing: border-box;
132
+ width: calc(100% - var(--mk-glass-cut) - 0.25em);
133
+ height: calc(100% - var(--mk-glass-cut) - 0.25em);
134
+ padding: 0.125em;
135
+ border-radius: 999vw;
136
+ background: linear-gradient(180deg, light-dark(rgb(0 0 0 / 22%), rgb(0 0 0 / 85%)), light-dark(rgb(0 0 0 / 10%), rgb(0 0 0 / 55%)));
137
+ content: '';
138
+ -webkit-mask-image: linear-gradient(#000 0 0), linear-gradient(#000 0 0);
139
+ mask-image: linear-gradient(#000 0 0), linear-gradient(#000 0 0);
140
+ -webkit-mask-clip: content-box, border-box;
141
+ mask-clip: content-box, border-box;
142
+ -webkit-mask-composite: xor;
143
+ mask-composite: exclude;
144
+ transition:
145
+ top 0.4s var(--mk-ease-glass),
146
+ opacity 0.4s var(--mk-ease-glass);
147
+ }
148
+
149
+ @media (hover: hover) {
150
+ .mk-glass:hover {
151
+ box-shadow: var(--mk-glass-shadow-hover);
152
+ -webkit-backdrop-filter: blur(0.01em);
153
+ backdrop-filter: blur(0.01em);
154
+ }
155
+
156
+ .mk-glass:hover::before {
157
+ --mk-glass-angle-1: -125deg;
158
+ }
159
+
160
+ .mk-glass:hover::after {
161
+ background-position: 25% 50%;
162
+ }
163
+
164
+ .mk-glass:hover .mk-glass__shadow {
165
+ filter: blur(clamp(2px, 0.0625em, 6px));
166
+ }
167
+
168
+ .mk-glass:hover .mk-glass__shadow::after {
169
+ top: calc(var(--mk-glass-cut) - 0.875em);
170
+ }
171
+ }
172
+
173
+ .mk-glass:active {
174
+ box-shadow: var(--mk-glass-shadow-active);
175
+ transform: scale(0.95);
176
+ }
177
+
178
+ .mk-glass:active::after {
179
+ --mk-glass-angle-2: -15deg;
180
+ background-position: 50% 15%;
181
+ }
182
+
183
+ .mk-glass:active .mk-glass__shadow {
184
+ filter: blur(clamp(2px, 0.125em, 12px));
185
+ }
186
+
187
+ .mk-glass:active .mk-glass__shadow::after {
188
+ top: calc(var(--mk-glass-cut) - 0.5em);
189
+ opacity: 0.75;
190
+ }
191
+
192
+ /* The glass presses with its own spring: no squash. */
193
+ .mk-button.mk-glass:focus {
194
+ animation: none;
195
+ }
196
+
197
+ .mk-glass:focus-visible {
198
+ outline: 2px solid var(--mk-accent);
199
+ outline-offset: 3px;
200
+ }
201
+
202
+ @supports not ((-webkit-backdrop-filter: blur(1px)) or (backdrop-filter: blur(1px))) {
203
+ .mk-glass {
204
+ background: color-mix(in srgb, var(--mk-bg) 80%, transparent);
205
+ }
206
+ }
207
+
208
+ @media (prefers-reduced-motion: reduce) {
209
+ .mk-glass,
210
+ .mk-glass::before,
211
+ .mk-glass::after,
212
+ .mk-glass__shadow,
213
+ .mk-glass__shadow::after {
214
+ transition: none;
215
+ }
216
+
217
+ .mk-glass:active {
218
+ transform: none;
219
+ }
220
+ }
@@ -0,0 +1,26 @@
1
+ /* .mk-icon — Material Symbols Rounded by ligature (<span class="mk-icon">home</span>); css/fonts.css loads the font. */
2
+ .mk-icon {
3
+ display: inline-block;
4
+ font-family: 'Material Symbols Rounded';
5
+ font-size: 24px;
6
+ font-style: normal;
7
+ font-weight: normal;
8
+ line-height: 1;
9
+ letter-spacing: normal;
10
+ text-transform: none;
11
+ white-space: nowrap;
12
+ overflow-wrap: normal;
13
+ direction: ltr;
14
+ font-feature-settings: 'liga';
15
+ font-variation-settings:
16
+ 'FILL' var(--mk-icon-fill, 0),
17
+ 'wght' var(--mk-icon-weight, 400),
18
+ 'GRAD' 0,
19
+ 'opsz' 24;
20
+ -webkit-font-smoothing: antialiased;
21
+ user-select: none;
22
+ }
23
+
24
+ .mk-icon--fill {
25
+ --mk-icon-fill: 1;
26
+ }
@@ -0,0 +1,60 @@
1
+ /*
2
+ * .mk-segmented — a capsule group whose indicator slides (pair it with the `tabs` recipe:
3
+ * data-mk="tabs", [data-mk-tab] buttons and a [data-mk-indicator]).
4
+ */
5
+ .mk-segmented {
6
+ position: relative;
7
+ display: inline-flex;
8
+ width: fit-content;
9
+ max-width: 100%;
10
+ padding: 4px;
11
+ overflow-x: auto;
12
+ border-radius: var(--mk-radius-full);
13
+ background: var(--mk-surface-3);
14
+ isolation: isolate;
15
+ scrollbar-width: none;
16
+ }
17
+
18
+ .mk-segmented > :is(button, a, [data-mk-tab]) {
19
+ position: relative;
20
+ z-index: 1;
21
+ flex: none;
22
+ height: 40px;
23
+ padding: 0 16px;
24
+ border: 0;
25
+ border-radius: var(--mk-radius-full);
26
+ background: transparent;
27
+ color: var(--mk-muted);
28
+ font-family: var(--md-sys-typescale-label-large-font);
29
+ font-size: var(--md-sys-typescale-label-large-size);
30
+ font-weight: var(--md-sys-typescale-label-large-weight);
31
+ letter-spacing: var(--md-sys-typescale-label-large-tracking);
32
+ text-decoration: none;
33
+ cursor: pointer;
34
+ transition: color 0.25s ease;
35
+ }
36
+
37
+ .mk-segmented > [aria-selected='true'] {
38
+ color: var(--mk-on-accent-soft);
39
+ }
40
+
41
+ .mk-segmented > :is(button, a, [data-mk-tab]):focus-visible {
42
+ outline: 2px solid var(--mk-accent);
43
+ outline-offset: -2px;
44
+ }
45
+
46
+ .mk-segmented > [data-mk-indicator] {
47
+ position: absolute;
48
+ top: 0;
49
+ left: 0;
50
+ z-index: 0;
51
+ border-radius: var(--mk-radius-full);
52
+ background: var(--mk-accent-soft);
53
+ pointer-events: none;
54
+ }
55
+
56
+ @media (prefers-reduced-motion: reduce) {
57
+ .mk-segmented > * {
58
+ transition: none;
59
+ }
60
+ }
@@ -0,0 +1,72 @@
1
+ /* .mk-switch — <input type="checkbox" role="switch" class="mk-switch">. The thumb grows from 16 to 24 px when on. */
2
+ .mk-switch {
3
+ position: relative;
4
+ flex: none;
5
+ width: 52px;
6
+ height: 32px;
7
+ margin: 0;
8
+ border-radius: var(--mk-radius-full);
9
+ background: var(--mk-surface-5);
10
+ box-shadow: inset 0 0 0 2px var(--mk-outline);
11
+ cursor: pointer;
12
+ appearance: none;
13
+ -webkit-tap-highlight-color: transparent;
14
+ transition:
15
+ background-color 0.3s var(--mk-ease-signature),
16
+ box-shadow 0.3s ease;
17
+ }
18
+
19
+ .mk-switch::before {
20
+ position: absolute;
21
+ top: 50%;
22
+ left: 8px;
23
+ width: 16px;
24
+ height: 16px;
25
+ border-radius: 50%;
26
+ background: var(--mk-outline);
27
+ content: '';
28
+ translate: 0 -50%;
29
+ transition:
30
+ left 0.3s var(--mk-ease-signature),
31
+ width 0.3s var(--mk-ease-signature),
32
+ height 0.3s var(--mk-ease-signature),
33
+ background-color 0.3s ease;
34
+ }
35
+
36
+ .mk-switch:checked {
37
+ background: var(--mk-accent);
38
+ box-shadow: none;
39
+ }
40
+
41
+ .mk-switch:checked::before {
42
+ left: 24px;
43
+ width: 24px;
44
+ height: 24px;
45
+ background: var(--mk-on-accent);
46
+ }
47
+
48
+ .mk-switch:active::before {
49
+ width: 28px;
50
+ height: 28px;
51
+ }
52
+
53
+ .mk-switch:checked:active::before {
54
+ left: 22px;
55
+ }
56
+
57
+ .mk-switch:focus-visible {
58
+ outline: 2px solid var(--mk-accent);
59
+ outline-offset: 2px;
60
+ }
61
+
62
+ .mk-switch:disabled {
63
+ opacity: 0.38;
64
+ cursor: default;
65
+ }
66
+
67
+ @media (prefers-reduced-motion: reduce) {
68
+ .mk-switch,
69
+ .mk-switch::before {
70
+ transition: none;
71
+ }
72
+ }
@@ -0,0 +1,123 @@
1
+ /* Default palette (Stepbro "neogreen") with zero specificity: any [data-mk-theme] wins.
2
+ Generated by scripts/import-themes.mjs; do not edit. */
3
+ :where(:root) {
4
+ --md-sys-color-background: #f1fded;
5
+ --md-sys-color-on-background: #141e14;
6
+ --md-sys-color-surface: #f1fded;
7
+ --md-sys-color-surface-dim: #d2ddce;
8
+ --md-sys-color-surface-bright: #f1fded;
9
+ --md-sys-color-surface-container-lowest: #ffffff;
10
+ --md-sys-color-surface-container-low: #ebf7e7;
11
+ --md-sys-color-surface-container: #e6f1e1;
12
+ --md-sys-color-surface-container-high: #e0ecdc;
13
+ --md-sys-color-surface-container-highest: #dae6d6;
14
+ --md-sys-color-on-surface: #141e14;
15
+ --md-sys-color-surface-variant: #d5e8d2;
16
+ --md-sys-color-on-surface-variant: #3b4b3b;
17
+ --md-sys-color-inverse-surface: #293328;
18
+ --md-sys-color-inverse-on-surface: #e8f4e4;
19
+ --md-sys-color-outline: #6b7b69;
20
+ --md-sys-color-outline-variant: #b9cbb7;
21
+ --md-sys-color-shadow: #000000;
22
+ --md-sys-color-scrim: #000000;
23
+ --md-sys-color-surface-tint: #006e2c;
24
+ --md-sys-color-primary: #006e2c;
25
+ --md-sys-color-on-primary: #ffffff;
26
+ --md-sys-color-primary-container: #4dff7e;
27
+ --md-sys-color-on-primary-container: #00521f;
28
+ --md-sys-color-inverse-primary: #00e563;
29
+ --md-sys-color-secondary: #006e2c;
30
+ --md-sys-color-on-secondary: #ffffff;
31
+ --md-sys-color-secondary-container: #9afda6;
32
+ --md-sys-color-on-secondary-container: #005721;
33
+ --md-sys-color-tertiary: #006972;
34
+ --md-sys-color-on-tertiary: #ffffff;
35
+ --md-sys-color-tertiary-container: #7ef1ff;
36
+ --md-sys-color-on-tertiary-container: #004f56;
37
+ --md-sys-color-error: #ba1a1a;
38
+ --md-sys-color-on-error: #ffffff;
39
+ --md-sys-color-error-container: #ffdad6;
40
+ --md-sys-color-on-error-container: #410002;
41
+ }
42
+
43
+ @media (prefers-color-scheme: dark) {
44
+ :where(:root:not([data-mk-mode="light"])) {
45
+ --md-sys-color-background: #0c160d;
46
+ --md-sys-color-on-background: #dae6d6;
47
+ --md-sys-color-surface: #0c160d;
48
+ --md-sys-color-surface-dim: #0c160d;
49
+ --md-sys-color-surface-bright: #313c31;
50
+ --md-sys-color-surface-container-lowest: #071008;
51
+ --md-sys-color-surface-container-low: #141e14;
52
+ --md-sys-color-surface-container: #182218;
53
+ --md-sys-color-surface-container-high: #222c22;
54
+ --md-sys-color-surface-container-highest: #2d372d;
55
+ --md-sys-color-on-surface: #dae6d6;
56
+ --md-sys-color-surface-variant: #3b4b3b;
57
+ --md-sys-color-on-surface-variant: #b9cbb7;
58
+ --md-sys-color-inverse-surface: #dae6d6;
59
+ --md-sys-color-inverse-on-surface: #293328;
60
+ --md-sys-color-outline: #849582;
61
+ --md-sys-color-outline-variant: #3b4b3b;
62
+ --md-sys-color-shadow: #000000;
63
+ --md-sys-color-scrim: #000000;
64
+ --md-sys-color-surface-tint: #00e563;
65
+ --md-sys-color-primary: #ffffff;
66
+ --md-sys-color-on-primary: #003913;
67
+ --md-sys-color-primary-container: #00f46b;
68
+ --md-sys-color-on-primary-container: #004a1b;
69
+ --md-sys-color-inverse-primary: #006e2c;
70
+ --md-sys-color-secondary: #7adb88;
71
+ --md-sys-color-on-secondary: #003913;
72
+ --md-sys-color-secondary-container: #006a2a;
73
+ --md-sys-color-on-secondary-container: #ffffff;
74
+ --md-sys-color-tertiary: #ffffff;
75
+ --md-sys-color-on-tertiary: #00363c;
76
+ --md-sys-color-tertiary-container: #4be8f9;
77
+ --md-sys-color-on-tertiary-container: #00474d;
78
+ --md-sys-color-error: #ffb4ab;
79
+ --md-sys-color-on-error: #690005;
80
+ --md-sys-color-error-container: #93000a;
81
+ --md-sys-color-on-error-container: #ffdad6;
82
+ }
83
+ }
84
+
85
+ :where(:root[data-mk-mode="dark"]) {
86
+ --md-sys-color-background: #0c160d;
87
+ --md-sys-color-on-background: #dae6d6;
88
+ --md-sys-color-surface: #0c160d;
89
+ --md-sys-color-surface-dim: #0c160d;
90
+ --md-sys-color-surface-bright: #313c31;
91
+ --md-sys-color-surface-container-lowest: #071008;
92
+ --md-sys-color-surface-container-low: #141e14;
93
+ --md-sys-color-surface-container: #182218;
94
+ --md-sys-color-surface-container-high: #222c22;
95
+ --md-sys-color-surface-container-highest: #2d372d;
96
+ --md-sys-color-on-surface: #dae6d6;
97
+ --md-sys-color-surface-variant: #3b4b3b;
98
+ --md-sys-color-on-surface-variant: #b9cbb7;
99
+ --md-sys-color-inverse-surface: #dae6d6;
100
+ --md-sys-color-inverse-on-surface: #293328;
101
+ --md-sys-color-outline: #849582;
102
+ --md-sys-color-outline-variant: #3b4b3b;
103
+ --md-sys-color-shadow: #000000;
104
+ --md-sys-color-scrim: #000000;
105
+ --md-sys-color-surface-tint: #00e563;
106
+ --md-sys-color-primary: #ffffff;
107
+ --md-sys-color-on-primary: #003913;
108
+ --md-sys-color-primary-container: #00f46b;
109
+ --md-sys-color-on-primary-container: #004a1b;
110
+ --md-sys-color-inverse-primary: #006e2c;
111
+ --md-sys-color-secondary: #7adb88;
112
+ --md-sys-color-on-secondary: #003913;
113
+ --md-sys-color-secondary-container: #006a2a;
114
+ --md-sys-color-on-secondary-container: #ffffff;
115
+ --md-sys-color-tertiary: #ffffff;
116
+ --md-sys-color-on-tertiary: #00363c;
117
+ --md-sys-color-tertiary-container: #4be8f9;
118
+ --md-sys-color-on-tertiary-container: #00474d;
119
+ --md-sys-color-error: #ffb4ab;
120
+ --md-sys-color-on-error: #690005;
121
+ --md-sys-color-error-container: #93000a;
122
+ --md-sys-color-on-error-container: #ffdad6;
123
+ }
@@ -0,0 +1,134 @@
1
+ # effects
2
+
3
+ Efectos sueltos para cualquier elemento: las utilidades de animación de la hoja común de Stepbro y, de Dousan Miao, el blur progresivo, la flotación y el confeti de éxito, más un grano de película en CSS. Se usan con clases; dos funciones (`animate`, `leave`) las reproducen desde código.
4
+
5
+ | Pieza | Qué hace | Origen |
6
+ |---|---|---|
7
+ | `.mk-anim-*` | Salidas, colapso, resaltado, sacudidas, aparición, barrido, entrada de progreso | Stepbro (hoja común): `item-out*`, `today-appt-item-out`, `animation-highlight-2`, `shake`, `asyncstate-fade`, `entry-animation-1`, `progress-indicator-in`; Dousan: `shake` fuerte |
8
+ | `.mk-loading`, `.mk-loading--soft`, `.mk-shimmer` | Barridos de carga y brillo al pasar | Stepbro `animation-loading-1/2`, `hover-magic-1` |
9
+ | `.mk-text-gradient`, `.mk-text-rainbow` | Texto con degradado en movimiento | Stepbro `text-gradient-pretty-animated`, `text-gradient-rainbow-animated` |
10
+ | `.mk-frost` | Blur que crece hacia un borde | Dousan `bottom-gradient-blur` |
11
+ | `.mk-float`, `.mk-float-group` | Vaivén lento de etiquetas | Dousan, etiquetas de cristal flotantes |
12
+ | `.mk-grain` | Grano de película | Aproximación en CSS del ruido de Siena (allí es un shader) |
13
+ | `.mk-success` + `confetti()` | Marca de éxito y confeti | Dousan, éxito del formulario |
14
+ | `.mk-fade-x`, `.mk-fade-x-soft`, `.mk-fade-y` | Bordes que se desvanecen con máscara | Siena |
15
+
16
+ Stepbro declara también `card-enter`, `animation-general-in`, `animation-general-in-2` y `search-result-item-in`, pero ninguna regla ni script los usa y no tienen duración: no se portan.
17
+
18
+ ## Animaciones (`.mk-anim-*`)
19
+
20
+ | Nombre | Movimiento | Tiempo |
21
+ |---|---|---|
22
+ | `out` | Sube 20 px, blur 16, se apaga | 0.5 s `ease` |
23
+ | `out-left` | 64 px a la izquierda, blur 16, se apaga | 0.5 s `ease` |
24
+ | `out-bottom` | Baja 24 px, blur 16, se apaga | 0.5 s `ease` |
25
+ | `collapse` | Se pliega (altura, padding y margen) mientras se desenfoca | 0.25 s |
26
+ | `highlight` | Anillo interior de 4 px en `primary-container` que aparece y se va | 1 s |
27
+ | `shake` | ±4 px | 0.5 s `cubic-bezier(.6,.6,.12,1.26)` |
28
+ | `shake-strong` | ±10 px (Dousan, proyecto no compartible) | 0.4 s `ease-in-out` |
29
+ | `fade` | Aparece | 0.3 s `ease` |
30
+ | `wipe` | Un velo del color de la superficie se retira hacia la derecha | 0.7 s `cubic-bezier(.38,.49,0,1)` |
31
+ | `progress-in` | Aparece con una curva que espera y luego llega | 1 s `cubic-bezier(.75,0,.41,-.06)` |
32
+
33
+ ```html
34
+ <li class="mk-anim-fade">Nueva tarea</li>
35
+ ```
36
+
37
+ ```js
38
+ import { animate, leave } from '@yewdiel21/motion-kit';
39
+
40
+ await animate(field, 'shake'); // se puede repetir: vuelve a empezar
41
+ await animate(card, 'highlight');
42
+ await leave(row, 'out-left'); // anima y quita la fila
43
+ await leave(row, 'collapse'); // se pliega y la quita
44
+ await leave(row, 'out', { remove: false }); // anima y la deja con hidden
45
+ ```
46
+
47
+ - `animate(el, nombre, { signal })` → promesa que se cumple cuando termina la animación (o la corta `signal`). Quita la clase al terminar, salvo en las salidas, que dejan el estado final. Si el elemento no anima (por ejemplo, está oculto), se cumple de todos modos tras la duración.
48
+ - `leave(el, salida, { remove })` → anima `out`, `out-left`, `out-bottom` o `collapse` y quita el elemento (o le pone `hidden`). Si el foco estaba dentro, lo suelta.
49
+ - `collapse` parte de la altura actual (`animate` la escribe en `--mk-collapse-from`; en CSS puro vale 94 px).
50
+ - En React, cuando la lista la pinta tu estado: `await leave(fila, 'out', { remove: false })` y después quítala del estado.
51
+
52
+ ## Carga y brillo
53
+
54
+ ```html
55
+ <div class="mk-card mk-loading">…</div>
56
+ <div class="mk-card mk-loading mk-loading--soft">…</div>
57
+ <button class="mk-button mk-shimmer">Pro</button>
58
+ ```
59
+
60
+ `.mk-loading` desactiva el puntero mientras barre (1 s); `--soft` barre con el color de fondo (`--mk-loading-color` para otras superficies). `.mk-shimmer` barre cada 2 s.
61
+
62
+ ## Texto con degradado
63
+
64
+ ```html
65
+ <h1><span class="mk-text-gradient">Tu asistente</span></h1>
66
+ <span class="mk-text-rainbow">Nuevo</span>
67
+ ```
68
+
69
+ `mk-text-gradient` usa los colores del tema (primary, secondary, tertiary y sus contenedores) en 8 s; `mk-text-rainbow`, siete colores con variante clara y oscura, en 6 s.
70
+
71
+ ## Frost
72
+
73
+ ```html
74
+ <div style="position: relative; overflow: auto">
75
+ …contenido que pasa por debajo…
76
+ <div class="mk-frost" aria-hidden="true"><i></i><i></i><i></i><i></i><i></i></div>
77
+ </div>
78
+ ```
79
+
80
+ Cinco capas con `backdrop-filter` de 1, 1, 1.5, 2 y 2.5 px, cada una con una máscara que empieza más abajo (0, 25, 45, 65 y 80 %): el desenfoque crece hacia el borde. `.mk-frost--top` lo pone arriba; `.mk-frost--fixed`, fijo a la ventana como en Dousan. Variables: `--mk-frost-height` (60px), `--mk-frost-strength` (multiplica los blurs).
81
+
82
+ Dentro de un contenedor que hace scroll, para que se quede en el borde visible: `.mk-frost { position: sticky; bottom: 0; margin-top: calc(var(--mk-frost-height, 60px) * -1) }` como último hijo.
83
+
84
+ React: `<Frost position="bottom" fixed={false} height={60} strength={1} />`.
85
+
86
+ ## Flotación
87
+
88
+ ```html
89
+ <div class="mk-float-group">
90
+ <span class="mk-chip mk-glass">Shipped</span>
91
+ <span class="mk-chip mk-glass">Design</span>
92
+ </div>
93
+ <span class="mk-float" style="--mk-float-y: 6px">Suelto</span>
94
+ ```
95
+
96
+ Cada hijo de `.mk-float-group` sigue uno de los cinco recorridos de Dousan (±3.5–5 px en 5–6.2 s). Al pasar crece a 1.05 y al presionar baja a .98 con el resorte de Dousan. Variables: `--mk-float-y`, `--mk-float-duration`.
97
+
98
+ ## Grano
99
+
100
+ ```html
101
+ <section class="hero mk-grain">…</section>
102
+ ```
103
+
104
+ Una capa de ruido en `overlay` con opacidad `--mk-grain` (.07) que salta entre 8 posiciones en 0.8 s. Si el elemento no está posicionado, pasa a `position: relative`.
105
+
106
+ ## Éxito y confeti
107
+
108
+ ```html
109
+ <span class="mk-success" hidden><span class="mk-icon">check</span></span>
110
+ ```
111
+
112
+ ```js
113
+ import { confetti } from '@yewdiel21/motion-kit';
114
+ mark.hidden = false;
115
+ const shot = confetti(button); // { stop(), finished }
116
+ ```
117
+
118
+ `.mk-success` crece de 0 y se endereza (−45°) con el resorte 260/18 de Dousan tras 0.15 s. `confetti(origen, { count, colors, container })`: 45 papelitos salen del centro del origen (2–8 px por frame, un poco hacia arriba), caen con gravedad .15, frenan .98, giran y se apagan (.015–.03 por frame). Sin `colors`, usa los del tema. El canvas no recibe puntero, está oculto a lectores de pantalla y se retira solo.
119
+
120
+ ## Bordes que se desvanecen
121
+
122
+ ```html
123
+ <div class="mk-fade-x">…una banda o un carrusel…</div>
124
+ ```
125
+
126
+ `.mk-fade-x` (transparente → negro al 20 % y desde el 80 %), `.mk-fade-x-soft` (15 / 30 / 70 / 85 %), `.mk-fade-y` (vertical). Son máscaras: el contenido se desvanece sobre cualquier fondo.
127
+
128
+ ## Variables CSS
129
+
130
+ `--mk-wipe-color`, `--mk-loading-color`, `--mk-collapse-from`, `--mk-frost-height`, `--mk-frost-strength`, `--mk-float-y`, `--mk-float-duration`, `--mk-grain`. Resortes: `--mk-ease-press` / `--mk-dur-press` (400/10), `--mk-ease-success` / `--mk-dur-success` (260/18).
131
+
132
+ ## Accesibilidad y movimiento reducido
133
+
134
+ El frost, el grano y el canvas del confeti son decorativos (`aria-hidden`, sin puntero). Con `prefers-reduced-motion: reduce` se paran la flotación, el grano, los degradados y los barridos; las salidas saltan a su estado final; `animate` y `leave` terminan al instante y `confetti` no dibuja.