@yewdiel21/motion-kit 0.9.0 → 0.10.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 (399) hide show
  1. package/NOTICE +3 -35
  2. package/README.md +93 -81
  3. package/dist/auto/index.d.ts +22 -3
  4. package/dist/auto/index.js +43 -5
  5. package/dist/auto/index.js.map +1 -1
  6. package/dist/{chunk-KLY5BRRI.js → chunk-34EZ7DF4.js} +1 -1
  7. package/dist/chunk-34EZ7DF4.js.map +1 -0
  8. package/dist/{chunk-RFDIZYFX.js → chunk-DOOMULVV.js} +20 -20
  9. package/dist/chunk-DOOMULVV.js.map +1 -0
  10. package/dist/{chunk-ABNRDDO7.js → chunk-I3DXF2KQ.js} +2 -2
  11. package/dist/{chunk-Q4LVFNLN.js → chunk-IKQ5FODN.js} +4 -4
  12. package/dist/chunk-IKQ5FODN.js.map +1 -0
  13. package/dist/{chunk-2BQGFOA7.js → chunk-J6OCFNGU.js} +2 -2
  14. package/dist/chunk-J6OCFNGU.js.map +1 -0
  15. package/dist/{chunk-6OJAP6ZL.js → chunk-QFBOHPWZ.js} +3 -3
  16. package/dist/chunk-QFBOHPWZ.js.map +1 -0
  17. package/dist/{chunk-J27KH2A2.js → chunk-RVSKEBIC.js} +1 -1
  18. package/dist/chunk-RVSKEBIC.js.map +1 -0
  19. package/dist/{chunk-34XYOXHG.js → chunk-TFNRIZHU.js} +1615 -12
  20. package/dist/chunk-TFNRIZHU.js.map +1 -0
  21. package/dist/{chunk-FS2HJVVY.js → chunk-XAKC2QY7.js} +1204 -5
  22. package/dist/chunk-XAKC2QY7.js.map +1 -0
  23. package/dist/css/components/calendar.css +159 -0
  24. package/dist/css/components/chat-background.css +2 -2
  25. package/dist/css/components/chat.css +1 -1
  26. package/dist/css/components/cursor.css +3 -3
  27. package/dist/css/components/dialog.css +3 -3
  28. package/dist/css/components/hover-card.css +14 -0
  29. package/dist/css/components/input-otp.css +10 -0
  30. package/dist/css/components/island.css +1 -1
  31. package/dist/css/components/menu.css +1 -1
  32. package/dist/css/components/nav.css +1 -5
  33. package/dist/css/components/pagination.css +11 -0
  34. package/dist/css/components/quantity.css +16 -0
  35. package/dist/css/components/slot-picker.css +126 -0
  36. package/dist/css/components/steps.css +2 -2
  37. package/dist/css/components/studio-dock.css +35 -0
  38. package/dist/css/components/theme-picker.css +1 -1
  39. package/dist/css/components/toast.css +1 -1
  40. package/dist/css/components/trailer.css +37 -0
  41. package/dist/css/controls.css +78 -13
  42. package/dist/css/effects.css +8 -8
  43. package/dist/css/fonts.css +1 -1
  44. package/dist/css/themes/black-green.css +1 -1
  45. package/dist/css/themes/black.css +1 -1
  46. package/dist/css/themes/blue.css +1 -1
  47. package/dist/css/themes/brown.css +1 -1
  48. package/dist/css/themes/cold-blue.css +1 -1
  49. package/dist/css/themes/funny.css +1 -1
  50. package/dist/css/themes/gray.css +1 -1
  51. package/dist/css/themes/green.css +1 -1
  52. package/dist/css/themes/modern-1.css +1 -1
  53. package/dist/css/themes/neogreen.css +1 -1
  54. package/dist/css/themes/new.css +1 -1
  55. package/dist/css/themes/new2.css +1 -1
  56. package/dist/css/themes/oled.css +1 -1
  57. package/dist/css/themes/orange.css +1 -1
  58. package/dist/css/themes/pastel-pink.css +1 -1
  59. package/dist/css/themes/pink.css +1 -1
  60. package/dist/css/themes/purple.css +1 -1
  61. package/dist/css/themes/red.css +1 -1
  62. package/dist/css/themes/super-blue.css +1 -1
  63. package/dist/css/themes.css +19 -19
  64. package/dist/css/tokens.css +9 -9
  65. package/dist/elements/index.d.ts +75 -7
  66. package/dist/elements/index.js +172 -6
  67. package/dist/elements/index.js.map +1 -1
  68. package/dist/{engine-CUr9QijM.d.ts → engine-GDGwQnJE.d.ts} +2 -2
  69. package/dist/gl/index.js +3 -3
  70. package/dist/index.css +1076 -63
  71. package/dist/index.d.ts +17 -17
  72. package/dist/index.js +49 -7
  73. package/dist/index.js.map +1 -1
  74. package/dist/react/index.d.ts +139 -40
  75. package/dist/react/index.js +355 -8
  76. package/dist/react/index.js.map +1 -1
  77. package/dist/{reduced-BM4Ls0g5.d.ts → reduced-BmBzKH94.d.ts} +215 -18
  78. package/dist/{reveal-WFUWDrei.d.ts → reveal-jsX-uwUz.d.ts} +233 -24
  79. package/dist/{store-Bqy_obnD.d.ts → store-DYb3tTsZ.d.ts} +5 -5
  80. package/dist/theme/generate.d.ts +1 -1
  81. package/dist/theme/generate.js +2 -2
  82. package/dist/theme/generate.js.map +1 -1
  83. package/dist/theme/index.d.ts +2 -2
  84. package/dist/theme/index.js +2 -2
  85. package/dist/{theme-BFMoCzi6.d.ts → theme-Bjf9qIIy.d.ts} +1 -1
  86. package/package.json +2 -2
  87. package/registry.json +230 -156
  88. package/skills/motion-kit/SKILL.md +209 -189
  89. package/skills/motion-kit/reference/components.md +5 -5
  90. package/skills/motion-kit/reference/design.md +14 -14
  91. package/skills/motion-kit/reference/recipes.md +48 -49
  92. package/src/auto/auto-init.ts +38 -0
  93. package/src/components/calendar/README.md +82 -0
  94. package/src/components/calendar/calendar.css +158 -0
  95. package/src/components/calendar/element.ts +27 -0
  96. package/src/components/calendar/engine.ts +412 -0
  97. package/src/components/calendar/react.tsx +69 -0
  98. package/src/components/chat/README.md +1 -3
  99. package/src/components/chat/chat.css +1 -1
  100. package/src/components/chat/engine.ts +1 -1
  101. package/src/components/chat/react.tsx +1 -1
  102. package/src/components/chat-background/README.md +1 -3
  103. package/src/components/chat-background/audio.ts +1 -1
  104. package/src/components/chat-background/chat-background.css +2 -2
  105. package/src/components/chat-background/engine.ts +1 -1
  106. package/src/components/chat-background/react.tsx +1 -1
  107. package/src/components/cursor/README.md +3 -5
  108. package/src/components/cursor/cursor.css +3 -3
  109. package/src/components/cursor/element.ts +2 -2
  110. package/src/components/cursor/engine.ts +5 -5
  111. package/src/components/cursor/react.tsx +1 -1
  112. package/src/components/dialog/README.md +4 -8
  113. package/src/components/dialog/dialog.css +3 -3
  114. package/src/components/dialog/engine.ts +2 -2
  115. package/src/components/dialog/react.tsx +1 -1
  116. package/src/components/hover-card/README.md +16 -0
  117. package/src/components/hover-card/element.ts +8 -0
  118. package/src/components/hover-card/engine.ts +69 -0
  119. package/src/components/hover-card/hover-card.css +13 -0
  120. package/src/components/hover-card/react.tsx +19 -0
  121. package/src/components/input-otp/README.md +18 -0
  122. package/src/components/input-otp/element.ts +14 -0
  123. package/src/components/input-otp/engine.ts +106 -0
  124. package/src/components/input-otp/input-otp.css +9 -0
  125. package/src/components/input-otp/react.tsx +21 -0
  126. package/src/components/island/README.md +7 -7
  127. package/src/components/island/engine.ts +3 -3
  128. package/src/components/island/island.css +1 -1
  129. package/src/components/island/react.tsx +3 -3
  130. package/src/components/menu/README.md +2 -4
  131. package/src/components/menu/engine.ts +1 -1
  132. package/src/components/menu/menu.css +1 -1
  133. package/src/components/menu/react.tsx +1 -1
  134. package/src/components/nav/README.md +12 -14
  135. package/src/components/nav/engine.ts +5 -5
  136. package/src/components/nav/nav.css +1 -5
  137. package/src/components/nav/react.tsx +3 -3
  138. package/src/components/pagination/README.md +17 -0
  139. package/src/components/pagination/element.ts +14 -0
  140. package/src/components/pagination/engine.ts +102 -0
  141. package/src/components/pagination/pagination.css +10 -0
  142. package/src/components/pagination/react.tsx +22 -0
  143. package/src/components/quantity/README.md +20 -0
  144. package/src/components/quantity/element.ts +14 -0
  145. package/src/components/quantity/engine.ts +85 -0
  146. package/src/components/quantity/quantity.css +15 -0
  147. package/src/components/quantity/react.tsx +21 -0
  148. package/src/components/slot-picker/README.md +68 -0
  149. package/src/components/slot-picker/element.ts +27 -0
  150. package/src/components/slot-picker/engine.ts +412 -0
  151. package/src/components/slot-picker/react.tsx +76 -0
  152. package/src/components/slot-picker/slot-picker.css +125 -0
  153. package/src/components/steps/README.md +1 -3
  154. package/src/components/steps/engine.ts +3 -3
  155. package/src/components/steps/react.tsx +2 -2
  156. package/src/components/steps/steps.css +2 -2
  157. package/src/components/studio-dock/README.md +44 -0
  158. package/src/components/studio-dock/element.ts +11 -0
  159. package/src/components/studio-dock/engine.ts +212 -0
  160. package/src/components/studio-dock/react.tsx +23 -0
  161. package/src/components/studio-dock/studio-dock.css +34 -0
  162. package/src/components/theme-picker/README.md +3 -5
  163. package/src/components/theme-picker/engine.ts +2 -2
  164. package/src/components/theme-picker/react.tsx +1 -1
  165. package/src/components/theme-picker/theme-picker.css +1 -1
  166. package/src/components/toast/README.md +1 -3
  167. package/src/components/toast/engine.ts +2 -2
  168. package/src/components/toast/react.tsx +1 -1
  169. package/src/components/toast/store.ts +1 -2
  170. package/src/components/toast/toast.css +1 -1
  171. package/src/components/trailer/README.md +28 -0
  172. package/src/components/trailer/element.ts +13 -0
  173. package/src/components/trailer/engine.ts +189 -0
  174. package/src/components/trailer/react.tsx +16 -0
  175. package/src/components/trailer/trailer.css +36 -0
  176. package/src/core/channels.ts +3 -3
  177. package/src/core/curves.ts +3 -3
  178. package/src/core/dates.ts +98 -0
  179. package/src/core/gsap.ts +2 -2
  180. package/src/core/loop.ts +1 -1
  181. package/src/core/math.ts +1 -1
  182. package/src/core/physics-spring.ts +2 -2
  183. package/src/core/scroll-track.ts +2 -4
  184. package/src/core/spring.ts +1 -1
  185. package/src/core/timing.ts +21 -22
  186. package/src/css/controls/README.md +24 -20
  187. package/src/css/controls/burger.css +1 -1
  188. package/src/css/controls/button.css +4 -4
  189. package/src/css/controls/checkbox.css +1 -1
  190. package/src/css/controls/chip.css +1 -1
  191. package/src/css/controls/field.css +2 -2
  192. package/src/css/controls/glass.css +4 -4
  193. package/src/css/controls/status.css +63 -0
  194. package/src/css/default-theme.css +1 -1
  195. package/src/css/effects/README.md +19 -21
  196. package/src/css/effects/anim.css +1 -1
  197. package/src/css/effects/fade.css +1 -1
  198. package/src/css/effects/float.css +1 -1
  199. package/src/css/effects/frost.css +1 -1
  200. package/src/css/effects/grain.css +1 -1
  201. package/src/css/effects/loading.css +1 -1
  202. package/src/css/effects/success.css +1 -1
  203. package/src/css/effects/text.css +1 -1
  204. package/src/css/fonts.css +1 -1
  205. package/src/css/states.css +1 -1
  206. package/src/css/themes/black-green.css +1 -1
  207. package/src/css/themes/black.css +1 -1
  208. package/src/css/themes/blue.css +1 -1
  209. package/src/css/themes/brown.css +1 -1
  210. package/src/css/themes/cold-blue.css +1 -1
  211. package/src/css/themes/funny.css +1 -1
  212. package/src/css/themes/gray.css +1 -1
  213. package/src/css/themes/green.css +1 -1
  214. package/src/css/themes/modern-1.css +1 -1
  215. package/src/css/themes/neogreen.css +1 -1
  216. package/src/css/themes/new.css +1 -1
  217. package/src/css/themes/new2.css +1 -1
  218. package/src/css/themes/oled.css +1 -1
  219. package/src/css/themes/orange.css +1 -1
  220. package/src/css/themes/pastel-pink.css +1 -1
  221. package/src/css/themes/pink.css +1 -1
  222. package/src/css/themes/purple.css +1 -1
  223. package/src/css/themes/red.css +1 -1
  224. package/src/css/themes/super-blue.css +1 -1
  225. package/src/css/tokens.css +8 -8
  226. package/src/elements/index.ts +24 -0
  227. package/src/gl/liquid-blend/README.md +3 -3
  228. package/src/gl/matcap/README.md +3 -3
  229. package/src/gl/particle-hero/README.md +1 -1
  230. package/src/gl/particle-hero/create-particle-hero.ts +3 -5
  231. package/src/gl/particle-hero/shaders.ts +1 -1
  232. package/src/gl/shader-blur/README.md +3 -3
  233. package/src/gl/shader-grain/README.md +3 -3
  234. package/src/index.ts +25 -0
  235. package/src/motion/chat.ts +2 -2
  236. package/src/motion/confetti.ts +1 -1
  237. package/src/motion/count.ts +1 -1
  238. package/src/motion/details.ts +1 -1
  239. package/src/motion/drag-dismiss.ts +1 -1
  240. package/src/motion/effects.ts +1 -1
  241. package/src/motion/entrances.ts +1 -1
  242. package/src/motion/floating.ts +1 -1
  243. package/src/motion/flow.ts +2 -2
  244. package/src/motion/indicator.ts +1 -1
  245. package/src/motion/layout.ts +1 -1
  246. package/src/motion/liquid.ts +1 -1
  247. package/src/motion/morph.ts +2 -2
  248. package/src/motion/reveal.ts +1 -1
  249. package/src/motion/sheet.ts +1 -1
  250. package/src/motion/surface.ts +1 -1
  251. package/src/react/animated-number.tsx +2 -2
  252. package/src/react/flip-group.tsx +1 -1
  253. package/src/react/frost.tsx +1 -1
  254. package/src/react/index.ts +21 -0
  255. package/src/react/slot-text.tsx +1 -1
  256. package/src/react/use-action-button.ts +6 -0
  257. package/src/react/use-card-dock.ts +1 -1
  258. package/src/react/use-cascade.ts +1 -1
  259. package/src/react/use-contrast.ts +1 -1
  260. package/src/react/use-depth-grid.ts +1 -1
  261. package/src/react/use-editorial-reveal.ts +7 -0
  262. package/src/react/use-fill-text.ts +1 -1
  263. package/src/react/use-film-hero.ts +6 -0
  264. package/src/react/use-font-cycle.ts +7 -0
  265. package/src/react/use-frame-zoom.ts +1 -1
  266. package/src/react/use-image-zoom.ts +5 -0
  267. package/src/react/use-joined-cta.ts +5 -0
  268. package/src/react/use-letters.ts +1 -1
  269. package/src/react/use-local-clock.ts +5 -0
  270. package/src/react/use-marquee.ts +1 -1
  271. package/src/react/use-mask-text.ts +1 -1
  272. package/src/react/use-parallax.ts +1 -1
  273. package/src/react/use-particle-hero.ts +1 -1
  274. package/src/react/use-scroll-dock.ts +5 -0
  275. package/src/react/use-snap-strip.ts +1 -1
  276. package/src/react/use-sticker.ts +5 -0
  277. package/src/react/use-studio-dock.ts +8 -0
  278. package/src/react/use-text-roll.ts +1 -1
  279. package/src/react/use-thumbnail-nav.ts +7 -0
  280. package/src/react/use-trailer.ts +6 -0
  281. package/src/react/use-weight-hover.ts +5 -0
  282. package/src/recipes/action-button/README.md +31 -0
  283. package/src/recipes/action-button/action-button.css +113 -0
  284. package/src/recipes/action-button/create-action-button.ts +56 -0
  285. package/src/recipes/card-dock/README.md +1 -1
  286. package/src/recipes/card-dock/card-dock.css +1 -1
  287. package/src/recipes/card-dock/create-card-dock.ts +2 -2
  288. package/src/recipes/cascade/README.md +1 -3
  289. package/src/recipes/cascade/create-cascade.ts +3 -3
  290. package/src/recipes/contrast/README.md +0 -2
  291. package/src/recipes/contrast/create-contrast.ts +1 -1
  292. package/src/recipes/counter/README.md +0 -2
  293. package/src/recipes/counter/create-counter.ts +1 -1
  294. package/src/recipes/curved-carousel/README.md +0 -2
  295. package/src/recipes/curved-carousel/create-curved-carousel.ts +2 -2
  296. package/src/recipes/curved-carousel/curved-carousel.css +1 -1
  297. package/src/recipes/depth-grid/README.md +0 -2
  298. package/src/recipes/depth-grid/create-depth-grid.ts +3 -4
  299. package/src/recipes/details/README.md +0 -2
  300. package/src/recipes/details/create-details.ts +1 -1
  301. package/src/recipes/dock-pill/README.md +3 -3
  302. package/src/recipes/drag-ruler/README.md +3 -3
  303. package/src/recipes/editorial-reveal/README.md +35 -0
  304. package/src/recipes/editorial-reveal/create-editorial-reveal.ts +91 -0
  305. package/src/recipes/editorial-reveal/editorial-reveal.css +17 -0
  306. package/src/recipes/fill-text/README.md +1 -1
  307. package/src/recipes/fill-text/create-fill-text.ts +1 -1
  308. package/src/recipes/film-hero/README.md +23 -0
  309. package/src/recipes/film-hero/create-film-hero.ts +65 -0
  310. package/src/recipes/film-hero/film-hero.css +29 -0
  311. package/src/recipes/fit-text/README.md +0 -2
  312. package/src/recipes/flow/README.md +0 -2
  313. package/src/recipes/flow/create-flow.ts +1 -1
  314. package/src/recipes/font-cycle/README.md +11 -0
  315. package/src/recipes/font-cycle/create-font-cycle.ts +126 -0
  316. package/src/recipes/font-cycle/font-cycle.css +36 -0
  317. package/src/recipes/frame-zoom/README.md +1 -3
  318. package/src/recipes/frame-zoom/create-frame-zoom.ts +2 -2
  319. package/src/recipes/image-zoom/README.md +16 -0
  320. package/src/recipes/image-zoom/create-image-zoom.ts +27 -0
  321. package/src/recipes/image-zoom/image-zoom.css +7 -0
  322. package/src/recipes/infinite-reel/README.md +3 -3
  323. package/src/recipes/joined-cta/README.md +13 -0
  324. package/src/recipes/joined-cta/create-joined-cta.ts +22 -0
  325. package/src/recipes/joined-cta/joined-cta.css +17 -0
  326. package/src/recipes/letters/README.md +2 -4
  327. package/src/recipes/letters/create-letters.ts +3 -3
  328. package/src/recipes/local-clock/README.md +31 -0
  329. package/src/recipes/local-clock/create-local-clock.ts +61 -0
  330. package/src/recipes/marquee/README.md +0 -2
  331. package/src/recipes/marquee/create-marquee.ts +3 -3
  332. package/src/recipes/marquee/marquee.css +1 -1
  333. package/src/recipes/mask-text/README.md +3 -5
  334. package/src/recipes/mask-text/create-mask-text.ts +4 -4
  335. package/src/recipes/parallax/README.md +1 -3
  336. package/src/recipes/parallax/create-parallax.ts +1 -1
  337. package/src/recipes/pile/README.md +0 -2
  338. package/src/recipes/pile/create-pile.ts +1 -1
  339. package/src/recipes/pile/pile-math.ts +1 -1
  340. package/src/recipes/pile/pile.css +1 -1
  341. package/src/recipes/pill/README.md +0 -2
  342. package/src/recipes/pill/pill.css +2 -2
  343. package/src/recipes/pop/README.md +0 -2
  344. package/src/recipes/pop/create-pop.ts +1 -1
  345. package/src/recipes/radial-menu/README.md +0 -2
  346. package/src/recipes/radial-menu/create-radial-menu.ts +1 -1
  347. package/src/recipes/radial-menu/radial-menu.css +1 -1
  348. package/src/recipes/reflow/README.md +3 -5
  349. package/src/recipes/reflow/create-reflow.ts +1 -1
  350. package/src/recipes/repel-bento/README.md +3 -3
  351. package/src/recipes/reveal/README.md +0 -2
  352. package/src/recipes/reveal/create-reveal.ts +1 -1
  353. package/src/recipes/rotator/README.md +3 -3
  354. package/src/recipes/scroll-dock/README.md +46 -0
  355. package/src/recipes/scroll-dock/create-scroll-dock.ts +72 -0
  356. package/src/recipes/scroll-dock/scroll-dock.css +70 -0
  357. package/src/recipes/slot-text/README.md +0 -2
  358. package/src/recipes/slot-text/create-slot-text.ts +1 -1
  359. package/src/recipes/snap-strip/README.md +1 -1
  360. package/src/recipes/snap-strip/create-snap-strip.ts +5 -6
  361. package/src/recipes/snap-strip/snap-strip.css +1 -1
  362. package/src/recipes/sortable/README.md +3 -5
  363. package/src/recipes/sortable/create-sortable.ts +4 -4
  364. package/src/recipes/sortable/sortable.css +1 -1
  365. package/src/recipes/spring-cards/README.md +0 -2
  366. package/src/recipes/spring-cards/create-spring-cards.ts +1 -1
  367. package/src/recipes/spring-cards/spring-cards.css +1 -1
  368. package/src/recipes/sticker/README.md +59 -0
  369. package/src/recipes/sticker/create-sticker.ts +490 -0
  370. package/src/recipes/sticker/sticker.css +112 -0
  371. package/src/recipes/stretch-footer/README.md +0 -2
  372. package/src/recipes/stretch-footer/create-stretch-footer.ts +1 -1
  373. package/src/recipes/stretch-footer/stretch-footer.css +1 -1
  374. package/src/recipes/tabs/README.md +0 -2
  375. package/src/recipes/tabs/create-tabs.ts +1 -1
  376. package/src/recipes/text-roll/README.md +1 -3
  377. package/src/recipes/text-roll/create-text-roll.ts +3 -3
  378. package/src/recipes/text-roll/text-roll.css +1 -1
  379. package/src/recipes/thumbnail-nav/README.md +16 -0
  380. package/src/recipes/thumbnail-nav/create-thumbnail-nav.ts +165 -0
  381. package/src/recipes/thumbnail-nav/thumbnail-nav.css +108 -0
  382. package/src/recipes/ticket-menu/README.md +3 -3
  383. package/src/recipes/weight-hover/README.md +37 -0
  384. package/src/recipes/weight-hover/create-weight-hover.ts +136 -0
  385. package/src/recipes/weight-hover/weight-hover.css +7 -0
  386. package/src/recipes/words/README.md +0 -2
  387. package/src/recipes/words/create-words.ts +1 -1
  388. package/src/theme/generate.ts +1 -1
  389. package/src/theme/presets.ts +2 -2
  390. package/src/theme/theme.ts +1 -2
  391. package/dist/chunk-2BQGFOA7.js.map +0 -1
  392. package/dist/chunk-34XYOXHG.js.map +0 -1
  393. package/dist/chunk-6OJAP6ZL.js.map +0 -1
  394. package/dist/chunk-FS2HJVVY.js.map +0 -1
  395. package/dist/chunk-J27KH2A2.js.map +0 -1
  396. package/dist/chunk-KLY5BRRI.js.map +0 -1
  397. package/dist/chunk-Q4LVFNLN.js.map +0 -1
  398. package/dist/chunk-RFDIZYFX.js.map +0 -1
  399. /package/dist/{chunk-ABNRDDO7.js.map → chunk-I3DXF2KQ.js.map} +0 -0
@@ -0,0 +1,159 @@
1
+ /* components/calendar/calendar.css */
2
+ /* calendar — Melon Mind's month/week grid on the --mk-* tokens; parts are .mk-calendar__*. */
3
+ .mk-calendar,
4
+ mk-calendar {
5
+ --mk-calendar-gap: 6px;
6
+ --mk-calendar-radius: var(--mk-radius-lg);
7
+ --mk-calendar-day-height: 112px;
8
+ display: flex;
9
+ flex-direction: column;
10
+ gap: var(--mk-space-3);
11
+ color: var(--mk-text);
12
+ }
13
+ .mk-calendar__header {
14
+ display: flex;
15
+ flex-wrap: wrap;
16
+ align-items: center;
17
+ gap: var(--mk-space-2);
18
+ }
19
+ .mk-calendar__title { margin: 0 auto 0 0; font-size: clamp(1.4rem, 2.6vw, 2rem); font-weight: 400; letter-spacing: -0.01em; }
20
+ .mk-calendar__views { display: inline-flex; padding: 4px; gap: 2px; border-radius: var(--mk-radius-full); background: var(--mk-surface-3); }
21
+ .mk-calendar__views button,
22
+ .mk-calendar__nav {
23
+ display: inline-grid;
24
+ place-items: center;
25
+ min-width: 44px;
26
+ height: 44px;
27
+ padding: 0 12px;
28
+ border: 0;
29
+ border-radius: var(--mk-radius-full);
30
+ background: transparent;
31
+ color: var(--mk-muted);
32
+ font: inherit;
33
+ cursor: pointer;
34
+ transition: background 0.2s, color 0.2s, transform 0.3s var(--mk-ease-nav-move);
35
+ }
36
+ .mk-calendar__views button[aria-pressed='true'] { background: var(--mk-surface-5); color: var(--mk-text); }
37
+ .mk-calendar__nav { background: var(--mk-surface-3); color: var(--mk-text); }
38
+ .mk-calendar__nav:active { transform: scale(0.92); }
39
+ :is(.mk-calendar__views button, .mk-calendar__nav):focus-visible { outline: 2px solid var(--mk-accent); outline-offset: 2px; }
40
+
41
+ [data-mk-calendar-grid] { position: relative; display: flex; flex-direction: column; gap: var(--mk-calendar-gap); }
42
+ .mk-calendar__head,
43
+ .mk-calendar__week { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: var(--mk-calendar-gap); }
44
+ .mk-calendar__body { display: flex; flex-direction: column; gap: var(--mk-calendar-gap); }
45
+ .mk-calendar__body--leaving { position: absolute; left: 0; right: 0; pointer-events: none; }
46
+ .mk-calendar__weekday {
47
+ padding: 8px 4px;
48
+ border-radius: var(--mk-radius-md);
49
+ background: var(--mk-surface-2);
50
+ text-align: center;
51
+ font-size: 0.95rem;
52
+ }
53
+ .mk-calendar__weekday-narrow { display: none; }
54
+
55
+ .mk-calendar__day {
56
+ position: relative;
57
+ display: flex;
58
+ flex-direction: column;
59
+ gap: 4px;
60
+ min-width: 0;
61
+ min-height: var(--mk-calendar-day-height);
62
+ padding: 6px;
63
+ border-radius: var(--mk-calendar-radius);
64
+ background: var(--mk-surface-3);
65
+ transition: background 0.3s, box-shadow 0.3s;
66
+ container-type: inline-size;
67
+ }
68
+ .mk-calendar__body[data-view='week'] .mk-calendar__day { min-height: calc(var(--mk-calendar-day-height) * 3); }
69
+ .mk-calendar__day[data-outside] { background: var(--mk-surface-1); color: var(--mk-muted); }
70
+ .mk-calendar__day:hover { background: var(--mk-surface-4); }
71
+ .mk-calendar__day[aria-selected='true'] { box-shadow: inset 0 0 0 2px var(--mk-accent); }
72
+ .mk-calendar__number {
73
+ align-self: flex-end;
74
+ min-width: 2.2rem;
75
+ height: 2.2rem;
76
+ padding: 0 0.4rem;
77
+ border: 0;
78
+ border-radius: var(--mk-radius-full);
79
+ background: transparent;
80
+ color: inherit;
81
+ font: inherit;
82
+ font-size: 1.15rem;
83
+ cursor: pointer;
84
+ transition: background 0.3s, color 0.3s, border-radius 0.3s var(--mk-ease-nav-radius), transform 0.3s var(--mk-ease-nav-radius);
85
+ }
86
+ .mk-calendar__number:hover { background: var(--mk-surface-5); }
87
+ .mk-calendar__number:active { transform: scale(0.9); }
88
+ .mk-calendar__number:focus-visible { outline: 2px solid var(--mk-accent); outline-offset: 2px; }
89
+ .mk-calendar__day[data-today] .mk-calendar__number { background: var(--mk-accent); color: var(--mk-on-accent); }
90
+
91
+ .mk-calendar__events { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
92
+ .mk-calendar__event,
93
+ .mk-calendar__more {
94
+ --mk-calendar-event-color: var(--mk-accent);
95
+ display: flex;
96
+ align-items: center;
97
+ gap: 6px;
98
+ width: 100%;
99
+ min-width: 0;
100
+ padding: 5px 8px;
101
+ border: 0;
102
+ border-radius: 10px;
103
+ background: var(--mk-surface-4);
104
+ color: var(--mk-text);
105
+ font: inherit;
106
+ font-size: 0.85rem;
107
+ text-align: left;
108
+ cursor: pointer;
109
+ transition: background 0.2s, transform 0.3s var(--mk-ease-nav-move);
110
+ }
111
+ .mk-calendar__event[data-state='pending'] {
112
+ background: color-mix(in srgb, var(--mk-calendar-event-color) 30%, var(--mk-surface-3));
113
+ }
114
+ .mk-calendar__event:hover,
115
+ .mk-calendar__more:hover { transform: translateY(-1px); background: var(--mk-surface-5); }
116
+ .mk-calendar__event:focus-visible,
117
+ .mk-calendar__more:focus-visible { outline: 2px solid var(--mk-accent); outline-offset: 1px; }
118
+ .mk-calendar__status {
119
+ flex: none;
120
+ width: 0.8rem;
121
+ height: 0.8rem;
122
+ border: 2px solid currentColor;
123
+ border-radius: 50%;
124
+ }
125
+ .mk-calendar__event[data-state='done'] .mk-calendar__status { background: currentColor; box-shadow: inset 0 0 0 2px var(--mk-surface-4); }
126
+ .mk-calendar__event[data-state='cancelled'] .mk-calendar__event-title { text-decoration: line-through; opacity: 0.6; }
127
+ .mk-calendar__event-title { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
128
+ .mk-calendar__event-time { flex: none; font-variant-numeric: tabular-nums; opacity: 0.85; }
129
+ .mk-calendar__more { justify-content: center; background: transparent; color: var(--mk-muted); }
130
+
131
+ /* Narrow day cells: the month keeps the title (the time stays in the label); the week stacks the time under it. */
132
+ @container (max-width: 150px) {
133
+ .mk-calendar__body[data-view='month'] .mk-calendar__event-time { display: none; }
134
+ .mk-calendar__body[data-view='week'] .mk-calendar__event { flex-wrap: wrap; column-gap: 5px; row-gap: 1px; }
135
+ .mk-calendar__body[data-view='week'] .mk-calendar__event-title { flex: 1 1 0; }
136
+ .mk-calendar__body[data-view='week'] .mk-calendar__event-time { flex-basis: 100%; padding-left: calc(0.8rem + 5px); font-size: 0.72rem; }
137
+ }
138
+ @media (max-width: 680px) {
139
+ .mk-calendar,
140
+ mk-calendar { --mk-calendar-day-height: 64px; --mk-calendar-gap: 4px; --mk-calendar-radius: var(--mk-radius-sm); }
141
+ .mk-calendar__weekday-long { display: none; }
142
+ .mk-calendar__weekday-narrow { display: inline; }
143
+ .mk-calendar__number { align-self: center; font-size: 0.95rem; }
144
+ .mk-calendar__body[data-view='month'] .mk-calendar__events { flex-direction: row; flex-wrap: wrap; justify-content: center; gap: 3px; }
145
+ .mk-calendar__body[data-view='month'] :is(.mk-calendar__event, .mk-calendar__more) {
146
+ width: 7px;
147
+ height: 7px;
148
+ padding: 0;
149
+ border-radius: 50%;
150
+ background: var(--mk-calendar-event-color);
151
+ font-size: 0;
152
+ }
153
+ .mk-calendar__body[data-view='month'] .mk-calendar__status { display: none; }
154
+ .mk-calendar__body[data-view='week'] .mk-calendar__event-time { display: none; }
155
+ }
156
+ @media (prefers-reduced-motion: reduce) {
157
+ .mk-calendar *,
158
+ mk-calendar * { transition: none !important; }
159
+ }
@@ -1,5 +1,5 @@
1
1
  /* components/chat-background/chat-background.css */
2
- /* chat-background — Stepbro's PrettyBackground: two orbiting blobs and a grain, driven by energy. */
2
+ /* chat-background — Chat background: two orbiting blobs and a grain, driven by energy. */
3
3
  .mk-chat-background,
4
4
  mk-chat-background {
5
5
  --mk-chat-orbit-1: 10s;
@@ -47,7 +47,7 @@ mk-chat-background::after {
47
47
  animation: mk-chat-blob-2 var(--mk-chat-orbit-2) linear infinite;
48
48
  }
49
49
 
50
- /* Grain on top (Stepbro ships a PNG; this is SVG turbulence at the same 30 %). */
50
+ /* Grain overlay using SVG turbulence at 30 %. */
51
51
  .mk-chat-background__noise {
52
52
  position: absolute;
53
53
  inset: 0;
@@ -1,5 +1,5 @@
1
1
  /* components/chat/chat.css */
2
- /* chat — Stepbro's PrettyChat: glass bubbles over the live background, a soft fade at the bottom, a 64 px composer. */
2
+ /* chat — Chat: glass bubbles over the live background, a soft fade at the bottom, a 64 px composer. */
3
3
  .mk-chat,
4
4
  mk-chat {
5
5
  --mk-chat-radius: var(--mk-radius-2xl);
@@ -1,5 +1,5 @@
1
1
  /* components/cursor/cursor.css */
2
- /* cursor — Dousan's glass chip and Siena's dot. The layer follows the pointer; the engine writes its transform. */
2
+ /* cursor — glass chip and dot. The layer follows the pointer; the engine writes its transform. */
3
3
  .mk-cursor {
4
4
  position: fixed;
5
5
  top: 0;
@@ -9,7 +9,7 @@
9
9
  will-change: transform;
10
10
  }
11
11
 
12
- /* chip (Dousan): a .mk-glass label; ink follows the background under it. */
12
+ /* chip: a .mk-glass label; ink follows the background under it. */
13
13
  .mk-cursor__chip {
14
14
  --mk-glass-fg: #fff;
15
15
  display: inline-flex;
@@ -47,7 +47,7 @@
47
47
  display: none;
48
48
  }
49
49
 
50
- /* dot (Siena): a disc with a word and two arrows that slide in when pressed. */
50
+ /* dot: a disc with a word and two arrows that slide in when pressed. */
51
51
  .mk-cursor--dot {
52
52
  --mk-cursor-size: 88px;
53
53
  transition: opacity 0.15s var(--mk-ease-quint);
@@ -1,5 +1,5 @@
1
1
  /* components/dialog/dialog.css */
2
- /* dialog — Stepbro's modal surface: 400 px, radius 40, tonal surface; full screen under 680 px. */
2
+ /* dialog — modal surface: 400 px, radius 40, tonal surface; full screen under 680 px. */
3
3
  .mk-dialog {
4
4
  --mk-dialog-bg: var(--mk-surface-2);
5
5
  --mk-dialog-radius: var(--mk-radius-dialog);
@@ -219,7 +219,7 @@ mk-dialog:not(:defined) {
219
219
  display: none;
220
220
  }
221
221
 
222
- /* Phones: dialogs take the whole screen with square corners (Stepbro's responsive rules). */
222
+ /* Phones: dialogs take the whole screen with square corners. */
223
223
  @media (max-width: 679px) {
224
224
  .mk-dialog:not([data-mk-placement='anchor']) {
225
225
  width: 100vw;
@@ -239,7 +239,7 @@ mk-dialog:not(:defined) {
239
239
  }
240
240
  }
241
241
 
242
- /* Sheet (Dousan): pinned to the bottom, up to 720 px wide, rises from below. Also on phones. */
242
+ /* Sheet: pinned to the bottom, up to 720 px wide, rises from below. Also on phones. */
243
243
  .mk-dialog[data-mk-variant='sheet'] {
244
244
  --mk-dialog-width: var(--mk-sheet-max-width, 720px);
245
245
  /* A modal <dialog> is inset: 0 — anchored only to the bottom, it takes its content's height. */
@@ -0,0 +1,14 @@
1
+ /* components/hover-card/hover-card.css */
2
+ .mk-hover-card, mk-hover-card { position: relative; display: inline-flex; }
3
+ .mk-hover-card [data-mk-hover-panel], mk-hover-card [data-mk-hover-panel] {
4
+ position: absolute; z-index: 10; bottom: calc(100% + .75rem); left: 0;
5
+ width: min(19rem, calc(100vw - 3rem)); padding: 1.25rem; border-radius: var(--mk-radius-lg);
6
+ color: var(--mk-text); background: var(--mk-surface-3); border: 1px solid var(--mk-outline-soft);
7
+ box-shadow: 0 12px 40px color-mix(in srgb, var(--mk-shadow-color) 20%, transparent);
8
+ animation: mk-hover-card-in .28s cubic-bezier(.2,.8,.2,1) both;
9
+ }
10
+ .mk-hover-card [data-mk-hover-panel]::after, mk-hover-card [data-mk-hover-panel]::after { content: ''; position: absolute; inset: -1rem 0; z-index: -1; }
11
+ .mk-hover-card[data-mk-placement=bottom] [data-mk-hover-panel], mk-hover-card[data-mk-placement=bottom] [data-mk-hover-panel] { top: calc(100% + .75rem); bottom: auto; }
12
+ .mk-hover-card [hidden], mk-hover-card [hidden] { display: none !important; }
13
+ @keyframes mk-hover-card-in { from { opacity: 0; transform: translateY(7px) scale(.97); } to { opacity: 1; transform: none; } }
14
+ @media (prefers-reduced-motion: reduce) { .mk-hover-card [data-mk-hover-panel], mk-hover-card [data-mk-hover-panel] { animation: none; } }
@@ -0,0 +1,10 @@
1
+ /* components/input-otp/input-otp.css */
2
+ .mk-input-otp, mk-input-otp { --mk-otp-size: 2.75rem; --mk-otp-gap: .4rem; display: inline-block; position: relative; max-width: 100%; }
3
+ .mk-input-otp [data-mk-otp-slots], mk-input-otp [data-mk-otp-slots] { display: flex; flex-wrap: wrap; gap: var(--mk-otp-gap); }
4
+ .mk-input-otp__slot { box-sizing: border-box; width: var(--mk-otp-size); height: 3.5rem; display: grid; place-items: center; border: 1px solid var(--mk-outline-soft); border-radius: var(--mk-radius-sm); color: var(--mk-text); background: var(--mk-surface-1); font: 1.5rem var(--mk-font-mono, monospace); transition: border-color .2s, background .2s, transform .2s; }
5
+ .mk-input-otp__slot[data-mk-active] { outline: 2px solid var(--mk-accent); outline-offset: 2px; background: var(--mk-accent-soft); color: var(--mk-on-accent-soft); transform: translateY(-2px); }
6
+ .mk-input-otp [data-mk-otp-input], mk-input-otp [data-mk-otp-input] { position: absolute; inset: 0; box-sizing: border-box; width: 100%; height: 100%; border: 0; background: transparent; color: transparent; caret-color: transparent; outline: 0; font: 1.5rem var(--mk-font-mono, monospace); letter-spacing: calc(var(--mk-otp-size) + var(--mk-otp-gap) - 1ch); padding: 0 0 0 calc((var(--mk-otp-size) - 1ch) / 2); }
7
+ .mk-input-otp:has([aria-invalid=true]) .mk-input-otp__slot, mk-input-otp:has([aria-invalid=true]) .mk-input-otp__slot { border-color: var(--mk-error); }
8
+ .mk-input-otp:has(:disabled), mk-input-otp:has(:disabled) { opacity: .45; }
9
+ @media (max-width: 420px) { .mk-input-otp, mk-input-otp { --mk-otp-size: 2.25rem; --mk-otp-gap: .3rem; } }
10
+ @media (prefers-reduced-motion: reduce) { .mk-input-otp__slot { transition: none; transform: none !important; } }
@@ -1,6 +1,6 @@
1
1
  /* components/island/island.css */
2
2
  /*
3
- * iyo.ai's floating navbar: frosted glass pill at the top that grows into a
3
+ * floating navbar: frosted glass pill at the top that grows into a
4
4
  * panel. Fixed over the page by default; .mk-island--contained keeps it (and its
5
5
  * backdrop) inside a positioned parent, for previews.
6
6
  */
@@ -1,5 +1,5 @@
1
1
  /* components/menu/menu.css */
2
- /* menu — Stepbro's translucent options panel that grows out of its button (an anchored .mk-dialog). */
2
+ /* menu — translucent options panel that grows out of its button (an anchored .mk-dialog). */
3
3
  .mk-menu {
4
4
  --mk-menu-bg: color-mix(in srgb, var(--mk-surface-3) 78%, transparent);
5
5
  --mk-menu-radius: 28px;
@@ -1,10 +1,6 @@
1
1
  /* components/nav/nav.css */
2
2
  /*
3
- * nav — Stepbro's navigation (Money and Tasks): seven desktop styles and one
4
- * mobile bar under 680 px, inside an app shell. Ported from Stepbro's
5
- * `.app-nav.style-N` rules: .app-container → .mk-shell, .app-view → .mk-shell__view,
6
- * .nav-button → .mk-nav__button, [active=true] → [aria-current="page"],
7
- * variant-1 → .mk-nav--accent.
3
+ * nav — seven desktop styles and one mobile bar under 680 px, inside an app shell.
8
4
  */
9
5
 
10
6
  /* Shell: the view and the nav side by side (the nav first), stacked on phones. */
@@ -0,0 +1,11 @@
1
+ /* components/pagination/pagination.css */
2
+ .mk-pagination, mk-pagination { display: flex; flex-wrap: wrap; justify-content: center; align-items: center; gap: .35rem; }
3
+ .mk-pagination [data-mk-pagination-pages], mk-pagination [data-mk-pagination-pages] { display: flex; align-items: center; gap: .25rem; }
4
+ .mk-pagination button, mk-pagination button { min-width: 2.5rem; height: 2.5rem; border: 0; border-radius: var(--mk-radius-full); background: var(--mk-surface-2); color: var(--mk-text); font: inherit; cursor: pointer; transition: transform .3s, background .3s, color .3s; }
5
+ .mk-pagination button[aria-current], mk-pagination button[aria-current] { background: var(--mk-accent); color: var(--mk-on-accent); }
6
+ .mk-pagination button:hover:not(:disabled), mk-pagination button:hover:not(:disabled) { transform: translateY(-3px); }
7
+ .mk-pagination button:active:not(:disabled), mk-pagination button:active:not(:disabled) { transform: scale(.9); }
8
+ .mk-pagination button:focus-visible, mk-pagination button:focus-visible { outline: 2px solid var(--mk-accent); outline-offset: 3px; }
9
+ .mk-pagination button:disabled, mk-pagination button:disabled { opacity: .35; cursor: default; }
10
+ .mk-pagination__gap { padding: 0 .15rem; color: var(--mk-muted); }
11
+ @media (prefers-reduced-motion: reduce) { .mk-pagination button, mk-pagination button { transition: none; transform: none !important; } }
@@ -0,0 +1,16 @@
1
+ /* components/quantity/quantity.css */
2
+ .mk-quantity, mk-quantity { display: inline-flex; align-items: center; gap: .5rem; --mk-quantity-size: 3rem; }
3
+ .mk-quantity [data-mk-quantity-decrease], .mk-quantity [data-mk-quantity-increase], mk-quantity button {
4
+ width: var(--mk-quantity-size); height: var(--mk-quantity-size); border: 0; border-radius: 50%;
5
+ background: var(--mk-secondary-soft); color: var(--mk-on-secondary-soft); font: inherit; font-size: 1.65rem;
6
+ cursor: pointer; transition: transform .4s cubic-bezier(.28,.71,0,.98), opacity .2s;
7
+ }
8
+ .mk-quantity [data-mk-quantity-increase], mk-quantity [data-mk-quantity-increase] { background: var(--mk-accent-soft); color: var(--mk-on-accent-soft); }
9
+ .mk-quantity button:is(:hover,:focus-visible):not(:disabled), mk-quantity button:is(:hover,:focus-visible):not(:disabled) {
10
+ transform: rotate(15deg); mask-image: radial-gradient(circle at 100% 0, transparent 22%, #000 23%);
11
+ }
12
+ .mk-quantity button:focus-visible, mk-quantity button:focus-visible { outline: 2px solid var(--mk-accent); outline-offset: 4px; }
13
+ .mk-quantity button:disabled, mk-quantity button:disabled { opacity: .4; cursor: default; }
14
+ .mk-quantity input, mk-quantity input { width: 3.5rem; padding: .4rem 0; border: 0; border-radius: var(--mk-radius-sm); text-align: center; font: inherit; font-variant-numeric: tabular-nums; background: transparent; color: var(--mk-text); appearance: textfield; }
15
+ .mk-quantity input::-webkit-inner-spin-button, mk-quantity input::-webkit-inner-spin-button { appearance: none; }
16
+ @media (prefers-reduced-motion: reduce) { .mk-quantity button, mk-quantity button { transition: none; transform: none !important; } }
@@ -0,0 +1,126 @@
1
+ /* components/slot-picker/slot-picker.css */
2
+ /* slot-picker — Melon Mind's appointment picker on the --mk-* tokens; parts are .mk-slot-picker__*. */
3
+ .mk-slot-picker,
4
+ mk-slot-picker {
5
+ --mk-slot-picker-radius: var(--mk-radius-md);
6
+ display: grid;
7
+ grid-template-columns: minmax(0, 1.15fr) minmax(0, 1fr);
8
+ overflow: hidden;
9
+ border-radius: var(--mk-radius-xl);
10
+ background: var(--mk-surface);
11
+ color: var(--mk-text);
12
+ }
13
+ .mk-slot-picker__calendar { padding: var(--mk-space-5); }
14
+ .mk-slot-picker__panel {
15
+ display: flex;
16
+ flex-direction: column;
17
+ gap: var(--mk-space-3);
18
+ min-height: 100%;
19
+ padding: var(--mk-space-5);
20
+ background: var(--mk-surface-2);
21
+ }
22
+ .mk-slot-picker__month { display: flex; align-items: center; gap: var(--mk-space-2); margin-bottom: var(--mk-space-3); }
23
+ .mk-slot-picker__title { margin: 0 auto 0 0; font-size: 1.35rem; font-weight: 400; }
24
+ .mk-slot-picker__nav {
25
+ display: grid;
26
+ place-items: center;
27
+ width: 42px;
28
+ height: 42px;
29
+ border: 0;
30
+ border-radius: 50%;
31
+ background: var(--mk-surface-2);
32
+ color: var(--mk-text);
33
+ font: inherit;
34
+ cursor: pointer;
35
+ transition: transform 0.3s var(--mk-ease-nav-move), opacity 0.2s;
36
+ }
37
+ .mk-slot-picker__nav:active { transform: scale(0.9); }
38
+ .mk-slot-picker__nav:disabled { opacity: 0.35; cursor: default; }
39
+ [data-mk-slot-days],
40
+ [data-mk-slot-times] { position: relative; }
41
+ .mk-slot-picker__days { display: flex; flex-direction: column; gap: 6px; }
42
+ .mk-slot-picker__weekdays,
43
+ .mk-slot-picker__week { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 6px; }
44
+ .mk-slot-picker__weekdays span {
45
+ padding: 6px 0;
46
+ border-radius: var(--mk-radius-sm);
47
+ background: color-mix(in srgb, var(--mk-surface-2) 70%, transparent);
48
+ text-align: center;
49
+ font-size: 0.9rem;
50
+ }
51
+ .mk-slot-picker__week > [role='gridcell'] { display: grid; }
52
+ .mk-slot-picker__day {
53
+ aspect-ratio: 1.15;
54
+ border: 0;
55
+ border-radius: var(--mk-slot-picker-radius);
56
+ background: var(--mk-surface-3);
57
+ color: var(--mk-text);
58
+ font: inherit;
59
+ font-size: 0.95rem;
60
+ cursor: pointer;
61
+ transition: background 0.25s, color 0.25s, border-radius 0.3s var(--mk-ease-nav-radius), transform 0.3s var(--mk-ease-nav-radius);
62
+ }
63
+ .mk-slot-picker__day:hover:not(:disabled) { background: var(--mk-surface-5); border-radius: var(--mk-radius-full); }
64
+ .mk-slot-picker__day:active:not(:disabled) { transform: scale(0.92); }
65
+ .mk-slot-picker__day:disabled { opacity: 0.35; cursor: default; }
66
+ .mk-slot-picker__day[aria-current='date'] { box-shadow: inset 0 0 0 1.5px var(--mk-outline); }
67
+ [aria-selected='true'] > .mk-slot-picker__day,
68
+ [aria-selected='true'] > .mk-slot-picker__day:hover:not(:disabled) { background: var(--mk-accent); color: var(--mk-on-accent); }
69
+ :is(.mk-slot-picker__day, .mk-slot-picker__time, .mk-slot-picker__nav):focus-visible { outline: 2px solid var(--mk-accent); outline-offset: 2px; }
70
+
71
+ .mk-slot-picker__heading {
72
+ margin: 0;
73
+ padding: 8px;
74
+ border-radius: var(--mk-radius-md);
75
+ background: var(--mk-surface);
76
+ font-weight: 600;
77
+ }
78
+ .mk-slot-picker__heading:not([data-mk-shown]) { display: none; }
79
+ .mk-slot-picker__heading[data-mk-shown] { animation: mk-slot-heading-in 0.5s cubic-bezier(0.38, 0.49, 0, 1.4); }
80
+ @keyframes mk-slot-heading-in {
81
+ 0% { max-height: 0; min-height: 0; padding-block: 0; opacity: 0; }
82
+ 100% { max-height: 56px; min-height: 40px; opacity: 1; }
83
+ }
84
+ .mk-slot-picker__list { display: grid; grid-template-columns: repeat(auto-fill, minmax(5.5rem, 1fr)); gap: 8px; align-content: start; }
85
+ .mk-slot-picker__leaving { position: absolute; left: 0; right: 0; pointer-events: none; }
86
+ .mk-slot-picker__note { grid-column: 1 / -1; margin: 2rem 0; color: var(--mk-muted); text-align: center; }
87
+ .mk-slot-picker__time {
88
+ position: relative;
89
+ isolation: isolate;
90
+ height: 44px;
91
+ border: 0;
92
+ border-radius: var(--mk-radius-sm);
93
+ background: var(--mk-surface-4);
94
+ color: var(--mk-text);
95
+ font: inherit;
96
+ font-variant-numeric: tabular-nums;
97
+ cursor: pointer;
98
+ transition: background 0.2s, color 0.2s, transform 0.3s var(--mk-ease-nav-move);
99
+ }
100
+ .mk-slot-picker__time:hover { transform: translateY(-2px); }
101
+ .mk-slot-picker__time[aria-checked='true'] { color: var(--mk-on-accent); }
102
+ .mk-slot-picker__time[aria-checked='true']::before {
103
+ content: '';
104
+ position: absolute;
105
+ inset: 0;
106
+ z-index: -1;
107
+ border-radius: inherit;
108
+ background: var(--mk-accent);
109
+ animation: mk-slot-highlight 0.7s cubic-bezier(0.38, 0.49, 0, 1.1);
110
+ }
111
+ @keyframes mk-slot-highlight {
112
+ 0% { transform: scale(0.8); opacity: 0; filter: blur(16px); box-shadow: 0 0 0 1px var(--mk-surface-2); }
113
+ 100% { transform: scale(1); opacity: 1; filter: blur(0); }
114
+ }
115
+ .mk-slot-picker__actions { margin-top: auto; display: flex; justify-content: flex-end; }
116
+
117
+ @media (max-width: 680px) {
118
+ .mk-slot-picker,
119
+ mk-slot-picker { grid-template-columns: 1fr; }
120
+ .mk-slot-picker__calendar,
121
+ .mk-slot-picker__panel { padding: var(--mk-space-4); }
122
+ }
123
+ @media (prefers-reduced-motion: reduce) {
124
+ .mk-slot-picker *,
125
+ mk-slot-picker * { transition: none !important; animation: none !important; }
126
+ }
@@ -1,5 +1,5 @@
1
1
  /* components/steps/steps.css */
2
- /* steps — Stepbro's onboarding: one step at a time, centred in a column up to 600 px wide. */
2
+ /* steps — onboarding: one step at a time, centred in a column up to 600 px wide. */
3
3
  .mk-steps,
4
4
  mk-steps {
5
5
  position: relative;
@@ -12,7 +12,7 @@ mk-steps {
12
12
  font-family: var(--mk-font);
13
13
  }
14
14
 
15
- /* Stepbro's onboarding background runs at 20 %. */
15
+ /* onboarding background runs at 20 %. */
16
16
  :is(.mk-steps, mk-steps) > :is(.mk-chat-background, mk-chat-background) {
17
17
  --mk-chat-background-opacity: 0.2;
18
18
  }
@@ -0,0 +1,35 @@
1
+ /* components/studio-dock/studio-dock.css */
2
+ .mk-studio-dock { position: relative; isolation: isolate; width: min(343px, 100%); color: var(--mk-text); font: inherit; }
3
+ .mk-studio-dock--fixed { position: fixed; z-index: 70; inset-block-end: 24px; inset-inline-start: 50%; translate: -50% 0; width: min(343px, calc(100vw - 32px)); }
4
+ .mk-studio-dock__bar { display: flex; align-items: center; gap: 16px; min-height: 64px; padding: 12px; border-radius: 18px; background: var(--mk-surface-2); }
5
+ .mk-studio-dock__brand, .mk-studio-dock__toggle { display: grid; place-items: center; inline-size: 40px; block-size: 40px; flex: none; border: 0; border-radius: 10px; background: var(--mk-surface); color: inherit; text-decoration: none; font: inherit; }
6
+ .mk-studio-dock__label { flex: 1; font-size: .9rem; }
7
+ .mk-studio-dock__toggle { cursor: pointer; }
8
+ .mk-studio-dock__toggle span { transition: transform .4s; }
9
+ .mk-studio-dock[data-mk-studio-open] .mk-studio-dock__toggle span { transform: rotate(45deg); }
10
+ .mk-studio-dock__panel { position: absolute; z-index: 2; inset-inline: 0; inset-block-end: var(--mk-studio-dock-offset, 76px); max-height: min(660px, 75dvh, var(--mk-studio-dock-space, 660px)); overflow: auto; overscroll-behavior: contain; padding: 12px; border: 1px solid var(--mk-outline-soft); border-radius: 18px; background: var(--mk-surface-2); box-shadow: 0 16px 60px #0002; }
11
+ /* Not enough room above the bar: the engine opens the sheet below it. */
12
+ .mk-studio-dock[data-mk-studio-below] .mk-studio-dock__panel { inset-block: var(--mk-studio-dock-offset, 76px) auto; }
13
+ .mk-studio-dock [hidden] { display: none !important; }
14
+ .mk-studio-dock__grid, .mk-studio-dock__page { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; }
15
+ .mk-studio-dock__tile { min-height: 130px; display: flex; flex-direction: column; justify-content: flex-end; gap: 4px; padding: 12px; border-radius: 10px; background: var(--mk-surface); color: inherit; text-decoration: none; transition: transform .4s cubic-bezier(.2, 1.4, .4, 1); }
16
+ .mk-studio-dock__tile small { color: var(--mk-muted); }
17
+ .mk-studio-dock__tile:is(:hover, :focus-visible) { transform: scale(.94); }
18
+ .mk-studio-dock__reel { display: flex; justify-content: space-between; align-items: end; min-height: 154px; margin-block: 12px; padding: 16px; border-radius: 10px; background: var(--mk-accent); color: var(--mk-on-accent); }
19
+ .mk-studio-dock__reel button { border: 1px solid currentColor; border-radius: 50%; padding: 14px; background: transparent; color: inherit; font: inherit; cursor: pointer; }
20
+ .mk-studio-dock__slide-track { position: relative; display: flex; align-items: center; height: 64px; padding: 4px; margin-block: 12px; border-radius: 48px; background: var(--mk-surface-3, var(--mk-surface)); }
21
+ .mk-studio-dock__slide-track > span { position: absolute; inset-inline: 60px 12px; text-align: center; font-size: .75rem; pointer-events: none; }
22
+ .mk-studio-dock [data-mk-studio-slide] { position: relative; display: grid; place-items: center; width: 56px; height: 56px; border: 0; border-radius: 50%; background: var(--mk-surface); color: inherit; font-size: 20px; cursor: pointer; touch-action: pan-y; transform: translateX(var(--mk-studio-drag, 0px)); }
23
+ .mk-studio-dock__clock { position: relative; aspect-ratio: 1; display: grid; place-content: center; gap: 4px; text-align: center; border: 10px solid var(--mk-surface); border-radius: 50%; background: var(--mk-surface-2); }
24
+ .mk-studio-dock__clock::after { content: ''; position: absolute; inset: 8px; border: 1px solid var(--mk-outline-soft); border-radius: 50%; }
25
+ .mk-studio-dock__clock small { color: var(--mk-muted); }
26
+ .mk-studio-dock__pages { margin-block-start: 12px; }
27
+ .mk-studio-dock__pagination { display: flex; justify-content: center; gap: 8px; margin-block-start: 12px; }
28
+ .mk-studio-dock__pagination button { width: 32px; height: 32px; padding: 0; border: 0; border-radius: 50%; background: var(--mk-surface); color: inherit; font: inherit; cursor: pointer; }
29
+ .mk-studio-dock__pagination [aria-current] { background: var(--mk-accent); color: var(--mk-on-accent); }
30
+ .mk-studio-dock__view { display: grid; gap: 16px; padding: 12px 0; }
31
+ .mk-studio-dock__view input, .mk-studio-dock__view textarea { width: 100%; padding: 12px; border: 1px solid var(--mk-outline-soft); border-radius: 8px; background: var(--mk-surface); color: inherit; font: inherit; }
32
+ .mk-studio-dock__view label { display: grid; gap: 6px; }
33
+ .mk-studio-dock__view video { width: 100%; border-radius: 10px; }
34
+ .mk-studio-dock :is(button,a,input,textarea):focus-visible { outline: 2px solid var(--mk-accent); outline-offset: 3px; }
35
+ @media (prefers-reduced-motion: reduce) { .mk-studio-dock *, .mk-studio-dock *::after { transition: none !important; animation: none !important; } }
@@ -1,5 +1,5 @@
1
1
  /* components/theme-picker/theme-picker.css */
2
- /* theme-picker — Stepbro's colour balls (from Kayro's accent swatches). */
2
+ /* theme-picker — colour balls. */
3
3
  .mk-theme-picker,
4
4
  mk-theme-picker {
5
5
  --mk-swatch-size: 72px;
@@ -1,5 +1,5 @@
1
1
  /* components/toast/toast.css */
2
- /* toast — Stepbro's deck at the top of the screen, above dialogs (top layer when popovers exist). */
2
+ /* toast — deck at the top of the screen, above dialogs (top layer when popovers exist). */
3
3
  .mk-toaster {
4
4
  position: fixed;
5
5
  inset: 16px 0 auto;
@@ -0,0 +1,37 @@
1
+ /* components/trailer/trailer.css */
2
+ .mk-trailer {
3
+ --mk-trailer-ink: #f6f3e8;
4
+ --mk-trailer-paper: #131816;
5
+ width: min(1100px, calc(100vw - 32px));
6
+ max-width: none;
7
+ max-height: calc(100dvh - 32px);
8
+ padding: 0;
9
+ border: 0;
10
+ border-radius: 0;
11
+ color: var(--mk-trailer-ink);
12
+ background: var(--mk-trailer-paper);
13
+ overflow: auto;
14
+ margin: auto;
15
+ }
16
+ .mk-trailer::backdrop { background: rgb(4 10 7 / .8); }
17
+ .mk-trailer__header { display: flex; align-items: center; justify-content: space-between; gap: 20px; padding: 16px 20px; }
18
+ .mk-trailer__title { font: 500 .75rem/1.5 var(--mk-font-mono, monospace); text-transform: uppercase; letter-spacing: .16em; margin: 0; }
19
+ .mk-trailer video { display: block; width: 100%; aspect-ratio: 16 / 9; object-fit: contain; background: #060b08; }
20
+ .mk-trailer [data-mk-trailer-stage]:fullscreen { display: flex; flex-direction: column; justify-content: center; width: 100%; height: 100%; background: var(--mk-trailer-paper); color: var(--mk-trailer-ink); }
21
+ .mk-trailer [data-mk-trailer-stage]:fullscreen video { max-height: calc(100dvh - 90px); }
22
+ .mk-trailer__controls { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; padding: 10px 20px 16px; font: .7rem/1.5 var(--mk-font-mono, monospace); }
23
+ .mk-trailer button { display: grid; place-items: center; min-width: 44px; min-height: 44px; border: 1px solid currentColor; color: inherit; background: transparent; cursor: pointer; font: inherit; }
24
+ .mk-trailer button:hover { background: rgb(255 255 255 / .12); }
25
+ .mk-trailer button:focus-visible, .mk-trailer input:focus-visible { outline: 2px solid #e5ff96; outline-offset: 4px; }
26
+ .mk-trailer button svg { width: 18px; height: 18px; fill: currentColor; }
27
+ .mk-trailer [data-mk-trailer-seek] { flex: 1; min-width: 70px; accent-color: #d6f2ac; }
28
+ .mk-trailer [data-mk-trailer-volume] { width: 72px; accent-color: #d6f2ac; }
29
+ .mk-trailer [data-mk-trailer-time] { white-space: nowrap; }
30
+ .mk-trailer [data-mk-trailer-status] { padding: 0 20px; font: .8rem/1.5 var(--mk-font, sans-serif); }
31
+ .mk-trailer [data-mk-trailer-status]:empty { display: none; }
32
+ .mk-trailer__pause-icon, .mk-trailer__sound-off { display: none; }
33
+ .mk-trailer [data-mk-trailer-play][aria-pressed="true"] .mk-trailer__play-icon,
34
+ .mk-trailer [data-mk-trailer-mute][aria-pressed="true"] .mk-trailer__sound-on { display: none; }
35
+ .mk-trailer [data-mk-trailer-play][aria-pressed="true"] .mk-trailer__pause-icon,
36
+ .mk-trailer [data-mk-trailer-mute][aria-pressed="true"] .mk-trailer__sound-off { display: block; }
37
+ @media (max-width: 540px) { .mk-trailer [data-mk-trailer-volume] { display: none; } .mk-trailer__controls { gap: 8px; padding-inline: 12px; } .mk-trailer [data-mk-trailer-seek] { flex-basis: 100%; order: -1; } }