move.gl 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (463) hide show
  1. package/README.md +185 -11
  2. package/dist/LICENSE +21 -0
  3. package/dist/README.md +212 -0
  4. package/dist/css/move.gl.css +43859 -0
  5. package/dist/css/move.gl.min.css +19 -0
  6. package/dist/js/index.cjs +1171 -0
  7. package/dist/js/index.cjs.map +1 -0
  8. package/dist/js/index.d.cts +184 -0
  9. package/dist/js/index.d.ts +184 -0
  10. package/dist/js/index.mjs +1135 -0
  11. package/dist/js/index.mjs.map +1 -0
  12. package/dist/package.json +68 -0
  13. package/{scss → dist/scss}/classes/_animations.scss +33 -14
  14. package/dist/scss/classes/_controls.scss +314 -0
  15. package/dist/scss/classes/_effects.scss +283 -0
  16. package/dist/scss/classes/_index.scss +28 -0
  17. package/dist/scss/classes/_loaders.scss +779 -0
  18. package/dist/scss/classes/_transforms.scss +138 -0
  19. package/dist/scss/classes/_transitions.scss +264 -0
  20. package/{scss → dist/scss}/dev/_deprecation.scss +6 -3
  21. package/{scss → dist/scss}/dev/_modules.scss +5 -6
  22. package/dist/scss/docs.scss +2344 -0
  23. package/dist/scss/docs.scss.bak +3133 -0
  24. package/dist/scss/functions/_index.scss +22 -0
  25. package/dist/scss/functions/scenes/_bubble.scss +32 -0
  26. package/dist/scss/functions/scenes/_index.scss +21 -0
  27. package/dist/scss/index.scss +17 -0
  28. package/dist/scss/maps/_controls.scss +85 -0
  29. package/dist/scss/maps/_index.scss +22 -0
  30. package/{scss → dist/scss}/mixins/_accessibility.scss +24 -3
  31. package/{scss → dist/scss}/mixins/_boot.scss +4 -4
  32. package/dist/scss/mixins/_index.scss +41 -0
  33. package/dist/scss/mixins/_screensaver.scss +228 -0
  34. package/dist/scss/mixins/_shape.scss +315 -0
  35. package/dist/scss/mixins/animations/_base.scss +403 -0
  36. package/dist/scss/mixins/animations/_beat.scss +137 -0
  37. package/{scss → dist/scss}/mixins/animations/_blink.scss +60 -52
  38. package/dist/scss/mixins/animations/_bounce.scss +306 -0
  39. package/{scss → dist/scss}/mixins/animations/_elastic.scss +26 -22
  40. package/dist/scss/mixins/animations/_fade.scss +393 -0
  41. package/{scss → dist/scss}/mixins/animations/_flash.scss +53 -61
  42. package/dist/scss/mixins/animations/_flip.scss +251 -0
  43. package/{scss → dist/scss}/mixins/animations/_float.scss +47 -32
  44. package/{scss → dist/scss}/mixins/animations/_glow.scss +69 -58
  45. package/dist/scss/mixins/animations/_heartbeat.scss +195 -0
  46. package/dist/scss/mixins/animations/_hinge.scss +118 -0
  47. package/dist/scss/mixins/animations/_index.scss +97 -0
  48. package/dist/scss/mixins/animations/_jello.scss +123 -0
  49. package/dist/scss/mixins/animations/_jiggle.scss +162 -0
  50. package/dist/scss/mixins/animations/_lightspeed.scss +135 -0
  51. package/{scss → dist/scss}/mixins/animations/_nod.scss +57 -65
  52. package/dist/scss/mixins/animations/_pop.scss +153 -0
  53. package/dist/scss/mixins/animations/_pulse.scss +275 -0
  54. package/{scss → dist/scss}/mixins/animations/_ripple.scss +47 -55
  55. package/dist/scss/mixins/animations/_roll.scss +217 -0
  56. package/dist/scss/mixins/animations/_rotate.scss +728 -0
  57. package/dist/scss/mixins/animations/_rubber.scss +115 -0
  58. package/dist/scss/mixins/animations/_scale.scss +382 -0
  59. package/dist/scss/mixins/animations/_shake.scss +233 -0
  60. package/dist/scss/mixins/animations/_slide.scss +501 -0
  61. package/dist/scss/mixins/animations/_spin.scss +322 -0
  62. package/{scss → dist/scss}/mixins/animations/_sway.scss +32 -49
  63. package/{scss → dist/scss}/mixins/animations/_swing.scss +47 -49
  64. package/{scss → dist/scss}/mixins/animations/_tada.scss +44 -42
  65. package/{scss → dist/scss}/mixins/animations/_twist.scss +40 -55
  66. package/{scss → dist/scss}/mixins/animations/_wave.scss +36 -53
  67. package/dist/scss/mixins/animations/_wobble.scss +283 -0
  68. package/dist/scss/mixins/animations/_zoom.scss +394 -0
  69. package/{scss/mixins/mouse → dist/scss/mixins/controls}/_cursor.scss +60 -39
  70. package/dist/scss/mixins/controls/_hover.scss +625 -0
  71. package/dist/scss/mixins/controls/_index.scss +30 -0
  72. package/dist/scss/mixins/controls/_keyboard.scss +300 -0
  73. package/{scss/mixins/mouse → dist/scss/mixins/controls}/_pointer.scss +81 -72
  74. package/dist/scss/mixins/controls/_scroll.scss +460 -0
  75. package/{scss/mixins/scroll → dist/scss/mixins/controls}/_scrollbar.scss +50 -16
  76. package/dist/scss/mixins/controls/_selection.scss +208 -0
  77. package/dist/scss/mixins/controls/_touch.scss +401 -0
  78. package/dist/scss/mixins/effects/_blend.scss +128 -0
  79. package/dist/scss/mixins/effects/_filter.scss +470 -0
  80. package/dist/scss/mixins/effects/_focus.scss +83 -0
  81. package/dist/scss/mixins/effects/_gradient.scss +130 -0
  82. package/dist/scss/mixins/effects/_index.scss +28 -0
  83. package/dist/scss/mixins/effects/_mask.scss +76 -0
  84. package/dist/scss/mixins/effects/_opacity.scss +376 -0
  85. package/dist/scss/mixins/effects/_shadow.scss +429 -0
  86. package/dist/scss/mixins/keyframes/_base.scss +199 -0
  87. package/dist/scss/mixins/keyframes/_index.scss +24 -0
  88. package/dist/scss/mixins/keyframes/animations/_beat.scss +280 -0
  89. package/dist/scss/mixins/keyframes/animations/_blink.scss +82 -0
  90. package/dist/scss/mixins/keyframes/animations/_bounce.scss +292 -0
  91. package/dist/scss/mixins/keyframes/animations/_fade.scss +311 -0
  92. package/dist/scss/mixins/keyframes/animations/_flash.scss +165 -0
  93. package/dist/scss/mixins/keyframes/animations/_flip.scss +266 -0
  94. package/{scss/mixins → dist/scss/mixins/keyframes}/animations/_index.scss +19 -10
  95. package/dist/scss/mixins/keyframes/animations/_jiggle.scss +85 -0
  96. package/dist/scss/mixins/keyframes/animations/_lightspeed.scss +73 -0
  97. package/dist/scss/mixins/keyframes/animations/_nod.scss +79 -0
  98. package/dist/scss/mixins/keyframes/animations/_pop.scss +78 -0
  99. package/dist/scss/mixins/keyframes/animations/_pulse.scss +225 -0
  100. package/dist/scss/mixins/keyframes/animations/_ripple.scss +94 -0
  101. package/dist/scss/mixins/keyframes/animations/_roll.scss +124 -0
  102. package/dist/scss/mixins/keyframes/animations/_rotate.scss +360 -0
  103. package/dist/scss/mixins/keyframes/animations/_rubber.scss +81 -0
  104. package/dist/scss/mixins/keyframes/animations/_scale.scss +308 -0
  105. package/dist/scss/mixins/keyframes/animations/_shake.scss +270 -0
  106. package/dist/scss/mixins/keyframes/animations/_slide.scss +345 -0
  107. package/dist/scss/mixins/keyframes/animations/_spin.scss +270 -0
  108. package/dist/scss/mixins/keyframes/animations/_sway.scss +83 -0
  109. package/dist/scss/mixins/keyframes/animations/_twist.scss +89 -0
  110. package/dist/scss/mixins/keyframes/animations/_wave.scss +90 -0
  111. package/dist/scss/mixins/keyframes/animations/_wobble.scss +293 -0
  112. package/dist/scss/mixins/keyframes/animations/_zoom.scss +345 -0
  113. package/dist/scss/mixins/loaders/_bars.scss +128 -0
  114. package/dist/scss/mixins/loaders/_base.scss +39 -0
  115. package/dist/scss/mixins/loaders/_bubble.scss +395 -0
  116. package/dist/scss/mixins/loaders/_circle.scss +456 -0
  117. package/dist/scss/mixins/loaders/_dots.scss +248 -0
  118. package/dist/scss/mixins/loaders/_graph.scss +542 -0
  119. package/dist/scss/mixins/loaders/_index.scss +77 -0
  120. package/dist/scss/mixins/loaders/_line.scss +471 -0
  121. package/dist/scss/mixins/loaders/_objects.scss +563 -0
  122. package/dist/scss/mixins/loaders/_progress.scss +477 -0
  123. package/dist/scss/mixins/loaders/_rect.scss +480 -0
  124. package/dist/scss/mixins/loaders/_rings.scss +377 -0
  125. package/dist/scss/mixins/loaders/_skeleton.scss +461 -0
  126. package/dist/scss/mixins/loaders/_special.scss +611 -0
  127. package/dist/scss/mixins/loaders/_spinner.scss +175 -0
  128. package/dist/scss/mixins/loaders/_text.scss +446 -0
  129. package/{scss → dist/scss}/mixins/transforms/_flip.scss +16 -18
  130. package/dist/scss/mixins/transforms/_index.scss +28 -0
  131. package/dist/scss/mixins/transforms/_matrix.scss +18 -0
  132. package/{scss → dist/scss}/mixins/transforms/_perspective.scss +18 -1
  133. package/{scss → dist/scss}/mixins/transforms/_rotate.scss +9 -14
  134. package/{scss → dist/scss}/mixins/transforms/_scale.scss +16 -1
  135. package/{scss → dist/scss}/mixins/transforms/_skew.scss +16 -2
  136. package/{scss → dist/scss}/mixins/transforms/_translate.scss +16 -2
  137. package/dist/scss/mixins/transitions/_index.scss +22 -0
  138. package/dist/scss/mixins/transitions/_transition.scss +43 -0
  139. package/dist/scss/variables/_animations.scss +300 -0
  140. package/dist/scss/variables/_controls.scss +178 -0
  141. package/dist/scss/variables/_effects.scss +87 -0
  142. package/dist/scss/variables/_index.scss +27 -0
  143. package/dist/scss/variables/_keyframes.scss +28 -0
  144. package/dist/scss/variables/_loaders.scss +75 -0
  145. package/dist/scss/variables/_transforms.scss +85 -0
  146. package/dist/scss/variables/_transitions.scss +80 -0
  147. package/dist/ts/Draggable.ts +143 -0
  148. package/dist/ts/Gesture.ts +226 -0
  149. package/dist/ts/Keyboard.ts +195 -0
  150. package/dist/ts/LoaderManager.ts +662 -0
  151. package/dist/ts/Screensaver.ts +192 -0
  152. package/dist/ts/VideoOverlay.ts +205 -0
  153. package/dist/ts/demo.ts +1108 -0
  154. package/dist/ts/index.ts +58 -0
  155. package/package.json +90 -53
  156. package/src/html/_base.html +138 -0
  157. package/src/html/base.html +147 -0
  158. package/src/html/core-concepts.html +282 -0
  159. package/src/html/demo_base.html +171 -0
  160. package/src/html/demo_draggable.html +250 -0
  161. package/src/html/demo_gesture.html +264 -0
  162. package/src/html/demo_keyboard.html +224 -0
  163. package/src/html/demo_screensaver.html +258 -0
  164. package/src/html/demo_video_overlay.html +291 -0
  165. package/src/html/getting-started.html +242 -0
  166. package/src/html/index.html +400 -0
  167. package/src/html/keyboard.html +14 -0
  168. package/src/html/partials/_demo_links.html +21 -0
  169. package/src/html/partials/_footer.html +18 -0
  170. package/src/html/partials/_head.html +21 -0
  171. package/src/html/partials/_nav.html +84 -0
  172. package/src/html/partials/_theme_toggle.html +11 -0
  173. package/src/html/screensaver.html +20 -0
  174. package/src/html/test_animations.html +813 -0
  175. package/src/html/test_attention.html +281 -0
  176. package/src/html/test_bounce.html +201 -0
  177. package/src/html/test_effects.html +1348 -0
  178. package/src/html/test_fade.html +213 -0
  179. package/src/html/test_flip.html +208 -0
  180. package/src/html/test_keyframes.html +415 -0
  181. package/src/html/test_loaders.html +1489 -0
  182. package/src/html/test_mouse.html +516 -0
  183. package/src/html/test_overview.html +1444 -0
  184. package/src/html/test_pulse.html +212 -0
  185. package/src/html/test_scale.html +204 -0
  186. package/src/html/test_shake.html +232 -0
  187. package/src/html/test_slide.html +212 -0
  188. package/src/html/test_special.html +257 -0
  189. package/src/html/test_spin.html +216 -0
  190. package/src/html/test_transforms.html +332 -0
  191. package/src/html/test_transitions.html +245 -0
  192. package/src/html/test_zoom.html +188 -0
  193. package/src/html/video_overlay.html +27 -0
  194. package/src/jinja/_base.html.jinja +50 -0
  195. package/src/jinja/base.html.jinja +48 -0
  196. package/src/jinja/core-concepts.html.jinja +148 -0
  197. package/src/jinja/demo_draggable.html.jinja +114 -0
  198. package/src/jinja/demo_gesture.html.jinja +128 -0
  199. package/src/jinja/demo_keyboard.html.jinja +88 -0
  200. package/src/jinja/demo_screensaver.html.jinja +122 -0
  201. package/src/jinja/demo_video_overlay.html.jinja +155 -0
  202. package/src/jinja/getting-started.html.jinja +108 -0
  203. package/src/jinja/index.html.jinja +268 -0
  204. package/src/jinja/index.json +5 -0
  205. package/src/jinja/move.gl.css +7741 -0
  206. package/src/jinja/partials/_code_block.html.jinja +17 -0
  207. package/src/jinja/partials/_demo_links.html.jinja +41 -0
  208. package/src/jinja/partials/_feature_card.html.jinja +20 -0
  209. package/src/jinja/partials/_footer.html.jinja +22 -0
  210. package/src/jinja/partials/_head.html.jinja +27 -0
  211. package/src/jinja/partials/_nav.html.jinja +79 -0
  212. package/src/jinja/partials/_theme_toggle.html.jinja +15 -0
  213. package/src/jinja/test_animations.html.jinja +679 -0
  214. package/src/jinja/test_attention.html.jinja +147 -0
  215. package/src/jinja/test_bounce.html.jinja +67 -0
  216. package/src/jinja/test_effects.html.jinja +1218 -0
  217. package/src/jinja/test_fade.html.jinja +79 -0
  218. package/src/jinja/test_flip.html.jinja +74 -0
  219. package/src/jinja/test_keyframes.html.jinja +281 -0
  220. package/src/jinja/test_loaders.html.jinja +1358 -0
  221. package/src/jinja/test_mouse.html.jinja +382 -0
  222. package/src/jinja/test_overview.html.jinja +1313 -0
  223. package/src/jinja/test_pulse.html.jinja +78 -0
  224. package/src/jinja/test_scale.html.jinja +70 -0
  225. package/src/jinja/test_shake.html.jinja +98 -0
  226. package/src/jinja/test_slide.html.jinja +78 -0
  227. package/src/jinja/test_special.html.jinja +123 -0
  228. package/src/jinja/test_spin.html.jinja +82 -0
  229. package/src/jinja/test_transforms.html.jinja +198 -0
  230. package/src/jinja/test_transitions.html.jinja +111 -0
  231. package/src/jinja/test_zoom.html.jinja +54 -0
  232. package/src/scss/classes/_animations.scss +595 -0
  233. package/src/scss/classes/_controls.scss +314 -0
  234. package/src/scss/classes/_effects.scss +283 -0
  235. package/src/scss/classes/_index.scss +28 -0
  236. package/src/scss/classes/_loaders.scss +779 -0
  237. package/src/scss/classes/_transforms.scss +138 -0
  238. package/src/scss/classes/_transitions.scss +264 -0
  239. package/src/scss/dev/_banner.scss +36 -0
  240. package/src/scss/dev/_debug.scss +18 -0
  241. package/src/scss/dev/_deprecation.scss +13 -0
  242. package/src/scss/dev/_index.scss +8 -0
  243. package/src/scss/dev/_modules.scss +23 -0
  244. package/src/scss/docs.scss +2344 -0
  245. package/src/scss/docs.scss.bak +3133 -0
  246. package/src/scss/functions/_index.scss +22 -0
  247. package/src/scss/functions/scenes/_bubble.scss +32 -0
  248. package/src/scss/functions/scenes/_index.scss +21 -0
  249. package/src/scss/index.scss +17 -0
  250. package/src/scss/maps/_controls.scss +85 -0
  251. package/src/scss/maps/_index.scss +22 -0
  252. package/src/scss/mixins/_accessibility.scss +91 -0
  253. package/src/scss/mixins/_boot.scss +51 -0
  254. package/src/scss/mixins/_index.scss +41 -0
  255. package/src/scss/mixins/_screensaver.scss +228 -0
  256. package/src/scss/mixins/_shape.scss +315 -0
  257. package/src/scss/mixins/animations/_base.scss +403 -0
  258. package/src/scss/mixins/animations/_beat.scss +137 -0
  259. package/src/scss/mixins/animations/_blink.scss +159 -0
  260. package/src/scss/mixins/animations/_bounce.scss +306 -0
  261. package/src/scss/mixins/animations/_elastic.scss +69 -0
  262. package/src/scss/mixins/animations/_fade.scss +393 -0
  263. package/src/scss/mixins/animations/_flash.scss +169 -0
  264. package/src/scss/mixins/animations/_flip.scss +251 -0
  265. package/src/scss/mixins/animations/_float.scss +141 -0
  266. package/src/scss/mixins/animations/_glow.scss +190 -0
  267. package/src/scss/mixins/animations/_heartbeat.scss +195 -0
  268. package/src/scss/mixins/animations/_hinge.scss +118 -0
  269. package/src/scss/mixins/animations/_index.scss +97 -0
  270. package/src/scss/mixins/animations/_jello.scss +123 -0
  271. package/src/scss/mixins/animations/_jiggle.scss +162 -0
  272. package/src/scss/mixins/animations/_lightspeed.scss +135 -0
  273. package/src/scss/mixins/animations/_nod.scss +153 -0
  274. package/src/scss/mixins/animations/_pop.scss +153 -0
  275. package/src/scss/mixins/animations/_pulse.scss +275 -0
  276. package/src/scss/mixins/animations/_ripple.scss +161 -0
  277. package/src/scss/mixins/animations/_roll.scss +217 -0
  278. package/src/scss/mixins/animations/_rotate.scss +728 -0
  279. package/src/scss/mixins/animations/_rubber.scss +115 -0
  280. package/src/scss/mixins/animations/_scale.scss +382 -0
  281. package/src/scss/mixins/animations/_shake.scss +233 -0
  282. package/src/scss/mixins/animations/_slide.scss +501 -0
  283. package/src/scss/mixins/animations/_spin.scss +322 -0
  284. package/src/scss/mixins/animations/_sway.scss +150 -0
  285. package/src/scss/mixins/animations/_swing.scss +245 -0
  286. package/src/scss/mixins/animations/_tada.scss +235 -0
  287. package/src/scss/mixins/animations/_twist.scss +162 -0
  288. package/src/scss/mixins/animations/_wave.scss +149 -0
  289. package/src/scss/mixins/animations/_wobble.scss +283 -0
  290. package/src/scss/mixins/animations/_zoom.scss +394 -0
  291. package/src/scss/mixins/controls/_cursor.scss +203 -0
  292. package/src/scss/mixins/controls/_hover.scss +625 -0
  293. package/src/scss/mixins/controls/_index.scss +30 -0
  294. package/src/scss/mixins/controls/_keyboard.scss +300 -0
  295. package/src/scss/mixins/controls/_pointer.scss +267 -0
  296. package/src/scss/mixins/controls/_scroll.scss +460 -0
  297. package/src/scss/mixins/controls/_scrollbar.scss +283 -0
  298. package/src/scss/mixins/controls/_selection.scss +208 -0
  299. package/src/scss/mixins/controls/_touch.scss +401 -0
  300. package/src/scss/mixins/effects/_blend.scss +128 -0
  301. package/src/scss/mixins/effects/_filter.scss +470 -0
  302. package/src/scss/mixins/effects/_focus.scss +83 -0
  303. package/src/scss/mixins/effects/_gradient.scss +130 -0
  304. package/src/scss/mixins/effects/_index.scss +28 -0
  305. package/src/scss/mixins/effects/_mask.scss +76 -0
  306. package/src/scss/mixins/effects/_opacity.scss +376 -0
  307. package/src/scss/mixins/effects/_shadow.scss +429 -0
  308. package/src/scss/mixins/keyframes/_base.scss +199 -0
  309. package/src/scss/mixins/keyframes/_index.scss +24 -0
  310. package/src/scss/mixins/keyframes/animations/_beat.scss +280 -0
  311. package/src/scss/mixins/keyframes/animations/_blink.scss +82 -0
  312. package/src/scss/mixins/keyframes/animations/_bounce.scss +292 -0
  313. package/src/scss/mixins/keyframes/animations/_fade.scss +311 -0
  314. package/src/scss/mixins/keyframes/animations/_flash.scss +165 -0
  315. package/src/scss/mixins/keyframes/animations/_flip.scss +266 -0
  316. package/src/scss/mixins/keyframes/animations/_index.scss +46 -0
  317. package/src/scss/mixins/keyframes/animations/_jiggle.scss +85 -0
  318. package/src/scss/mixins/keyframes/animations/_lightspeed.scss +73 -0
  319. package/src/scss/mixins/keyframes/animations/_nod.scss +79 -0
  320. package/src/scss/mixins/keyframes/animations/_pop.scss +78 -0
  321. package/src/scss/mixins/keyframes/animations/_pulse.scss +225 -0
  322. package/src/scss/mixins/keyframes/animations/_ripple.scss +94 -0
  323. package/src/scss/mixins/keyframes/animations/_roll.scss +124 -0
  324. package/src/scss/mixins/keyframes/animations/_rotate.scss +360 -0
  325. package/src/scss/mixins/keyframes/animations/_rubber.scss +81 -0
  326. package/src/scss/mixins/keyframes/animations/_scale.scss +308 -0
  327. package/src/scss/mixins/keyframes/animations/_shake.scss +270 -0
  328. package/src/scss/mixins/keyframes/animations/_slide.scss +345 -0
  329. package/src/scss/mixins/keyframes/animations/_spin.scss +270 -0
  330. package/src/scss/mixins/keyframes/animations/_sway.scss +83 -0
  331. package/src/scss/mixins/keyframes/animations/_twist.scss +89 -0
  332. package/src/scss/mixins/keyframes/animations/_wave.scss +90 -0
  333. package/src/scss/mixins/keyframes/animations/_wobble.scss +293 -0
  334. package/src/scss/mixins/keyframes/animations/_zoom.scss +345 -0
  335. package/src/scss/mixins/loaders/_bars.scss +128 -0
  336. package/src/scss/mixins/loaders/_base.scss +39 -0
  337. package/src/scss/mixins/loaders/_bubble.scss +395 -0
  338. package/src/scss/mixins/loaders/_circle.scss +456 -0
  339. package/src/scss/mixins/loaders/_dots.scss +248 -0
  340. package/src/scss/mixins/loaders/_graph.scss +542 -0
  341. package/src/scss/mixins/loaders/_index.scss +77 -0
  342. package/src/scss/mixins/loaders/_line.scss +471 -0
  343. package/src/scss/mixins/loaders/_objects.scss +563 -0
  344. package/src/scss/mixins/loaders/_progress.scss +477 -0
  345. package/src/scss/mixins/loaders/_rect.scss +480 -0
  346. package/src/scss/mixins/loaders/_rings.scss +377 -0
  347. package/src/scss/mixins/loaders/_skeleton.scss +461 -0
  348. package/src/scss/mixins/loaders/_special.scss +611 -0
  349. package/src/scss/mixins/loaders/_spinner.scss +175 -0
  350. package/src/scss/mixins/loaders/_text.scss +446 -0
  351. package/src/scss/mixins/transforms/_flip.scss +74 -0
  352. package/src/scss/mixins/transforms/_index.scss +28 -0
  353. package/src/scss/mixins/transforms/_matrix.scss +18 -0
  354. package/src/scss/mixins/transforms/_perspective.scss +28 -0
  355. package/src/scss/mixins/transforms/_rotate.scss +96 -0
  356. package/src/scss/mixins/transforms/_scale.scss +26 -0
  357. package/src/scss/mixins/transforms/_skew.scss +27 -0
  358. package/src/scss/mixins/transforms/_translate.scss +27 -0
  359. package/src/scss/mixins/transitions/_index.scss +22 -0
  360. package/src/scss/mixins/transitions/_transition.scss +43 -0
  361. package/src/scss/variables/_animations.scss +300 -0
  362. package/src/scss/variables/_controls.scss +178 -0
  363. package/src/scss/variables/_effects.scss +87 -0
  364. package/src/scss/variables/_index.scss +27 -0
  365. package/src/scss/variables/_keyframes.scss +28 -0
  366. package/src/scss/variables/_loaders.scss +75 -0
  367. package/src/scss/variables/_transforms.scss +85 -0
  368. package/src/scss/variables/_transitions.scss +80 -0
  369. package/src/ts/Draggable.ts +143 -0
  370. package/src/ts/Gesture.ts +226 -0
  371. package/src/ts/Keyboard.ts +195 -0
  372. package/src/ts/LoaderManager.ts +662 -0
  373. package/src/ts/Screensaver.ts +192 -0
  374. package/src/ts/VideoOverlay.ts +205 -0
  375. package/src/ts/demo.ts +1108 -0
  376. package/src/ts/index.ts +58 -0
  377. package/css/move.gl.css +0 -2
  378. package/css/move.gl.min.css +0 -2
  379. package/scss/classes/_transforms.scss +0 -124
  380. package/scss/classes/keyboard.scss +0 -18
  381. package/scss/classes/screensaver.scss +0 -15
  382. package/scss/effects/_filter.scss +0 -176
  383. package/scss/effects/_index.scss +0 -23
  384. package/scss/effects/_opacity.scss +0 -62
  385. package/scss/effects/_shadow.scss +0 -175
  386. package/scss/functions/scenes/_bubble.scss +0 -19
  387. package/scss/functions/scenes/_index.scss +0 -20
  388. package/scss/index.scss +0 -0
  389. package/scss/keyframes/_beat.scss +0 -26
  390. package/scss/keyframes/_index.scss +0 -0
  391. package/scss/maps/_index.scss +0 -0
  392. package/scss/maps/_mouse.scss +0 -96
  393. package/scss/mixins/_hover.scss +0 -51
  394. package/scss/mixins/_index.scss +0 -0
  395. package/scss/mixins/_selection.scss +0 -321
  396. package/scss/mixins/_shape.scss +0 -44
  397. package/scss/mixins/_touch.scss +0 -95
  398. package/scss/mixins/animations/--hover.scss +0 -107
  399. package/scss/mixins/animations/_base.scss +0 -337
  400. package/scss/mixins/animations/_beat.scss +0 -119
  401. package/scss/mixins/animations/_bounce.scss +0 -192
  402. package/scss/mixins/animations/_fade.scss +0 -154
  403. package/scss/mixins/animations/_flip.scss +0 -72
  404. package/scss/mixins/animations/_heartbeat.scss +0 -175
  405. package/scss/mixins/animations/_hinge.scss +0 -119
  406. package/scss/mixins/animations/_jello.scss +0 -129
  407. package/scss/mixins/animations/_jiggle.scss +0 -163
  408. package/scss/mixins/animations/_lightspeed.scss +0 -130
  409. package/scss/mixins/animations/_pop.scss +0 -150
  410. package/scss/mixins/animations/_pulse.scss +0 -213
  411. package/scss/mixins/animations/_roll.scss +0 -261
  412. package/scss/mixins/animations/_rotate.scss +0 -428
  413. package/scss/mixins/animations/_rubber.scss +0 -116
  414. package/scss/mixins/animations/_scale.scss +0 -113
  415. package/scss/mixins/animations/_shake.scss +0 -182
  416. package/scss/mixins/animations/_slide.scss +0 -294
  417. package/scss/mixins/animations/_spin.scss +0 -219
  418. package/scss/mixins/animations/_wobble.scss +0 -254
  419. package/scss/mixins/animations/_zoom.scss +0 -166
  420. package/scss/mixins/effects/_filter.scss +0 -148
  421. package/scss/mixins/effects/_index.scss +0 -0
  422. package/scss/mixins/effects/_shadow.scss +0 -21
  423. package/scss/mixins/loaders/_index.scss +0 -0
  424. package/scss/mixins/loaders/_progress.scss +0 -174
  425. package/scss/mixins/loaders/_spinner.scss +0 -101
  426. package/scss/mixins/loaders/circle_01.scss +0 -22
  427. package/scss/mixins/loaders/circle_02.scss +0 -19
  428. package/scss/mixins/loaders/circle_03.scss +0 -29
  429. package/scss/mixins/loaders/circle_inner_01.scss +0 -33
  430. package/scss/mixins/loaders/circle_inner_02.scss +0 -33
  431. package/scss/mixins/loaders/circle_inner_03.scss +0 -34
  432. package/scss/mixins/mouse/_index.scss +0 -0
  433. package/scss/mixins/scroll/_index.scss +0 -0
  434. package/scss/mixins/scroll/_scroll.scss +0 -104
  435. package/scss/mixins/transforms/_index.scss +0 -23
  436. package/scss/mixins/transforms/_matrix.scss +0 -1
  437. package/scss/mixins/transitions/_index.scss +0 -0
  438. package/scss/mixins/transitions/_transition.scss +0 -13
  439. package/scss/variables/_animation.scss +0 -91
  440. package/scss/variables/_index.scss +0 -0
  441. package/ts/ARContent.ts +0 -27
  442. package/ts/ARInteraction.ts +0 -34
  443. package/ts/AdaptiveUI.ts +0 -25
  444. package/ts/ContentStreaming.ts +0 -20
  445. package/ts/Draggable.ts +0 -71
  446. package/ts/DynamicEnvironment.ts +0 -60
  447. package/ts/Gesture.ts +0 -168
  448. package/ts/ImmersiveAudio.ts +0 -40
  449. package/ts/InteractiveCanvas.ts +0 -177
  450. package/ts/InteractiveVideo.ts +0 -29
  451. package/ts/Keyboard.ts +0 -162
  452. package/ts/RealTimeCollaboration.ts +0 -25
  453. package/ts/Screensaver.ts +0 -140
  454. package/ts/SpatialNavigation.ts +0 -38
  455. package/ts/UserProfile.ts +0 -27
  456. package/ts/VRExperience.ts +0 -58
  457. package/ts/VideoOverlay.ts +0 -116
  458. package/ts/index.ts +0 -0
  459. /package/{scss → dist/scss}/dev/_banner.scss +0 -0
  460. /package/{scss → dist/scss}/dev/_debug.scss +0 -0
  461. /package/{scss → dist/scss}/dev/_index.scss +0 -0
  462. /package/{scss/classes/_index.scss → src/html/partials/_code_block.html} +0 -0
  463. /package/{scss/functions/_index.scss → src/html/partials/_feature_card.html} +0 -0
@@ -0,0 +1,2344 @@
1
+ // =============================================================================
2
+ // move.gl Docs & Demo Styles
3
+ // =============================================================================
4
+ // Combined styles for the documentation site and interactive demos.
5
+ // This file contains layout, theme, and demo-specific UI styles.
6
+ // All animation, effect, transition, and interaction functionality is
7
+ // imported from the main move.gl library.
8
+
9
+ // Import move.gl library for animations, loaders, effects, etc.
10
+ @use "index" as *;
11
+
12
+ // -----------------------------------------------------------------------------
13
+ // Variables
14
+ // -----------------------------------------------------------------------------
15
+
16
+ :root {
17
+ --color-bg: #ffffff;
18
+ --color-text: #1a1a1a;
19
+ --color-text-muted: #666666;
20
+ --color-border: #e5e5e5;
21
+ --color-primary: #3b82f6;
22
+ --color-primary-hover: #2563eb;
23
+ --color-surface: #f5f5f5;
24
+ --color-code-bg: #1e1e1e;
25
+ --color-code-text: #d4d4d4;
26
+ --nav-height: 60px;
27
+ }
28
+
29
+ [data-theme="dark"] {
30
+ --color-bg: #0a0a0a;
31
+ --color-text: #fafafa;
32
+ --color-text-muted: #a3a3a3;
33
+ --color-border: #262626;
34
+ --color-surface: #171717;
35
+ --color-code-bg: #0d0d0d;
36
+ }
37
+
38
+ // -----------------------------------------------------------------------------
39
+ // Base
40
+ // -----------------------------------------------------------------------------
41
+
42
+ *,
43
+ *::before,
44
+ *::after {
45
+ box-sizing: border-box;
46
+ }
47
+
48
+ html {
49
+ font-size: 16px;
50
+ scroll-behavior: smooth;
51
+ height: auto;
52
+ }
53
+
54
+ body {
55
+ margin: 0;
56
+ padding: 0;
57
+ font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
58
+ font-size: 1rem;
59
+ line-height: 1.6;
60
+ color: var(--color-text);
61
+ background-color: var(--color-bg);
62
+ -webkit-font-smoothing: antialiased;
63
+ // Override unit.gl global styles that prevent scrolling
64
+ position: static;
65
+ height: auto;
66
+ width: auto;
67
+ min-height: 100vh;
68
+ overflow-y: auto;
69
+ }
70
+
71
+ // -----------------------------------------------------------------------------
72
+ // Navigation
73
+ // -----------------------------------------------------------------------------
74
+
75
+ .nav-wrapper {
76
+ position: fixed;
77
+ top: 0;
78
+ left: 0;
79
+ right: 0;
80
+ z-index: 100;
81
+ background: var(--color-bg);
82
+ border-bottom: 1px solid var(--color-border);
83
+ backdrop-filter: blur(10px);
84
+ }
85
+
86
+ .nav {
87
+ max-width: 1200px;
88
+ margin: 0 auto;
89
+ padding: 0 24px;
90
+ }
91
+
92
+ .nav__inner {
93
+ display: flex;
94
+ align-items: center;
95
+ justify-content: space-between;
96
+ height: var(--nav-height);
97
+ }
98
+
99
+ .nav__logo {
100
+ display: flex;
101
+ align-items: center;
102
+ gap: 8px;
103
+ text-decoration: none;
104
+ color: var(--color-text);
105
+ }
106
+
107
+ .nav__logo-text {
108
+ font-weight: 600;
109
+ font-size: 1.125rem;
110
+ }
111
+
112
+ .nav__version {
113
+ font-size: 0.75rem;
114
+ padding: 2px 6px;
115
+ background: var(--color-surface);
116
+ border-radius: 4px;
117
+ color: var(--color-text-muted);
118
+ }
119
+
120
+ .nav__right {
121
+ display: flex;
122
+ align-items: center;
123
+ gap: 16px;
124
+ }
125
+
126
+ .nav__github {
127
+ color: var(--color-text);
128
+ opacity: 0.7;
129
+ transition: opacity 0.2s;
130
+
131
+ &:hover {
132
+ opacity: 1;
133
+ }
134
+ }
135
+
136
+ // Theme toggle
137
+ .theme-toggle {
138
+ display: flex;
139
+ align-items: center;
140
+ justify-content: center;
141
+ width: 36px;
142
+ height: 36px;
143
+ padding: 0;
144
+ background: transparent;
145
+ border: 1px solid var(--color-border);
146
+ border-radius: 8px;
147
+ cursor: pointer;
148
+ color: var(--color-text);
149
+ transition: background 0.2s, border-color 0.2s;
150
+
151
+ &:hover {
152
+ background: var(--color-surface);
153
+ }
154
+ }
155
+
156
+ .theme-icon--dark {
157
+ display: none;
158
+ }
159
+
160
+ [data-theme="dark"] {
161
+ .theme-icon--light { display: none; }
162
+ .theme-icon--dark { display: block; }
163
+ }
164
+
165
+ // Dropdown
166
+ .nav__dropdown {
167
+ position: relative;
168
+ }
169
+
170
+ .nav__dropdown-toggle {
171
+ display: flex;
172
+ align-items: center;
173
+ gap: 6px;
174
+ padding: 8px 12px;
175
+ background: transparent;
176
+ border: 1px solid var(--color-border);
177
+ border-radius: 8px;
178
+ cursor: pointer;
179
+ font-size: 0.875rem;
180
+ color: var(--color-text);
181
+ transition: background 0.2s;
182
+
183
+ &:hover {
184
+ background: var(--color-surface);
185
+ }
186
+ }
187
+
188
+ .nav__dropdown-menu {
189
+ position: absolute;
190
+ top: calc(100% + 8px);
191
+ right: 0;
192
+ min-width: 220px;
193
+ max-height: calc(100vh - var(--nav-height) - 40px);
194
+ overflow-y: auto;
195
+ padding: 8px;
196
+ background: var(--color-bg);
197
+ border: 1px solid var(--color-border);
198
+ border-radius: 12px;
199
+ box-shadow: 0 10px 40px rgba(0,0,0,0.1);
200
+ opacity: 0;
201
+ visibility: hidden;
202
+ transform: translateY(-8px);
203
+ transition: all 0.2s;
204
+
205
+ // Custom scrollbar for dropdown
206
+ &::-webkit-scrollbar {
207
+ width: 6px;
208
+ }
209
+ &::-webkit-scrollbar-track {
210
+ background: transparent;
211
+ }
212
+ &::-webkit-scrollbar-thumb {
213
+ background: var(--color-border);
214
+ border-radius: 3px;
215
+ }
216
+ &::-webkit-scrollbar-thumb:hover {
217
+ background: var(--color-text-muted);
218
+ }
219
+ }
220
+
221
+ .nav__dropdown.open .nav__dropdown-menu {
222
+ opacity: 1;
223
+ visibility: visible;
224
+ transform: translateY(0);
225
+ }
226
+
227
+ .nav__dropdown-section {
228
+ padding: 8px 0;
229
+
230
+ &:not(:last-child) {
231
+ border-bottom: 1px solid var(--color-border);
232
+ }
233
+ }
234
+
235
+ .nav__dropdown-label {
236
+ display: block;
237
+ padding: 4px 12px;
238
+ font-size: 0.75rem;
239
+ font-weight: 600;
240
+ text-transform: uppercase;
241
+ letter-spacing: 0.05em;
242
+ color: var(--color-text-muted);
243
+ }
244
+
245
+ .nav__dropdown-menu a {
246
+ display: block;
247
+ padding: 8px 12px;
248
+ color: var(--color-text);
249
+ text-decoration: none;
250
+ border-radius: 6px;
251
+ font-size: 0.875rem;
252
+ transition: background 0.15s;
253
+
254
+ &:hover {
255
+ background: var(--color-surface);
256
+ }
257
+ }
258
+
259
+ // -----------------------------------------------------------------------------
260
+ // Container & Layout
261
+ // -----------------------------------------------------------------------------
262
+
263
+ .container {
264
+ max-width: 1200px;
265
+ margin: 0 auto;
266
+ padding: calc(var(--nav-height) + 40px) 24px 80px;
267
+ }
268
+
269
+ .header {
270
+ margin-bottom: 48px;
271
+ }
272
+
273
+ .header--hero {
274
+ text-align: center;
275
+ padding: 60px 0;
276
+ }
277
+
278
+ .eyebrow {
279
+ font-size: 0.875rem;
280
+ font-weight: 500;
281
+ text-transform: uppercase;
282
+ letter-spacing: 0.1em;
283
+ color: var(--color-primary);
284
+ margin-bottom: 8px;
285
+ }
286
+
287
+ h1 {
288
+ font-size: 3rem;
289
+ font-weight: 700;
290
+ line-height: 1.1;
291
+ margin: 0 0 16px;
292
+ }
293
+
294
+ .lead {
295
+ font-size: 1.25rem;
296
+ color: var(--color-text-muted);
297
+ max-width: 600px;
298
+ margin: 0 auto 32px;
299
+ }
300
+
301
+ h2 {
302
+ font-size: 1.75rem;
303
+ font-weight: 600;
304
+ margin: 0 0 24px;
305
+ }
306
+
307
+ h3 {
308
+ font-size: 1.25rem;
309
+ font-weight: 600;
310
+ margin: 0 0 12px;
311
+ }
312
+
313
+ h4 {
314
+ font-size: 1rem;
315
+ font-weight: 600;
316
+ margin: 0 0 8px;
317
+ }
318
+
319
+ section {
320
+ margin-bottom: 64px;
321
+ }
322
+
323
+ // -----------------------------------------------------------------------------
324
+ // Page Header (Demo pages)
325
+ // -----------------------------------------------------------------------------
326
+
327
+ .page-header {
328
+ padding: 48px 0 32px;
329
+ border-bottom: 1px solid var(--color-border);
330
+ margin-bottom: 48px;
331
+ }
332
+
333
+ .page-header__badge {
334
+ display: inline-block;
335
+ font-size: 0.75rem;
336
+ font-weight: 600;
337
+ text-transform: uppercase;
338
+ letter-spacing: 0.08em;
339
+ background: var(--color-text);
340
+ color: var(--color-bg);
341
+ padding: 4px 10px;
342
+ margin-bottom: 16px;
343
+ }
344
+
345
+ .page-header__title {
346
+ font-size: 2.5rem;
347
+ font-weight: 700;
348
+ line-height: 1.1;
349
+ margin: 0 0 16px;
350
+ }
351
+
352
+ .page-header__description {
353
+ font-size: 1.125rem;
354
+ color: var(--color-text-muted);
355
+ max-width: 65ch;
356
+ margin: 0;
357
+ line-height: 1.6;
358
+ }
359
+
360
+ // -----------------------------------------------------------------------------
361
+ // Section (Demo pages)
362
+ // -----------------------------------------------------------------------------
363
+
364
+ .section {
365
+ margin-bottom: 64px;
366
+ }
367
+
368
+ .section__title {
369
+ font-size: 1.5rem;
370
+ font-weight: 600;
371
+ margin: 0 0 16px;
372
+ padding-bottom: 12px;
373
+ border-bottom: 2px solid var(--color-text);
374
+ }
375
+
376
+ .section__description {
377
+ font-size: 1rem;
378
+ color: var(--color-text-muted);
379
+ margin: 0 0 24px;
380
+ max-width: 65ch;
381
+ line-height: 1.6;
382
+ }
383
+
384
+ // -----------------------------------------------------------------------------
385
+ // Code Block
386
+ // -----------------------------------------------------------------------------
387
+
388
+ .code-block {
389
+ background: var(--color-code-bg);
390
+ color: var(--color-code-text);
391
+ padding: 24px;
392
+ border-radius: 8px;
393
+ overflow-x: auto;
394
+ margin-bottom: 24px;
395
+ font-family: 'JetBrains Mono', 'SF Mono', monospace;
396
+ font-size: 0.875rem;
397
+ line-height: 1.6;
398
+ }
399
+
400
+ .code-block code {
401
+ display: block;
402
+ white-space: pre;
403
+ }
404
+
405
+ .code-block .keyword {
406
+ color: #c586c0;
407
+ }
408
+
409
+ .code-block .string {
410
+ color: #ce9178;
411
+ }
412
+
413
+ .code-block .function {
414
+ color: #dcdcaa;
415
+ }
416
+
417
+ .code-block .comment {
418
+ color: #6a9955;
419
+ }
420
+
421
+ .code-block .number {
422
+ color: #b5cea8;
423
+ }
424
+
425
+ // -----------------------------------------------------------------------------
426
+ // API Table
427
+ // -----------------------------------------------------------------------------
428
+
429
+ .api-table {
430
+ width: 100%;
431
+ border-collapse: collapse;
432
+ margin-bottom: 24px;
433
+ }
434
+
435
+ .api-table th,
436
+ .api-table td {
437
+ text-align: left;
438
+ padding: 12px 16px;
439
+ border-bottom: 1px solid var(--color-border);
440
+ }
441
+
442
+ .api-table th {
443
+ font-weight: 600;
444
+ font-size: 0.875rem;
445
+ text-transform: uppercase;
446
+ letter-spacing: 0.05em;
447
+ color: var(--color-text-muted);
448
+ background: var(--color-surface);
449
+ }
450
+
451
+ .api-table code {
452
+ font-family: 'JetBrains Mono', monospace;
453
+ font-size: 0.875rem;
454
+ background: var(--color-surface);
455
+ padding: 2px 6px;
456
+ border-radius: 4px;
457
+ }
458
+
459
+ // -----------------------------------------------------------------------------
460
+ // Controls
461
+ // -----------------------------------------------------------------------------
462
+
463
+ .controls {
464
+ display: flex;
465
+ gap: 12px;
466
+ flex-wrap: wrap;
467
+ margin: 24px 0;
468
+ }
469
+
470
+ // -----------------------------------------------------------------------------
471
+ // Demo Links Navigation
472
+ // -----------------------------------------------------------------------------
473
+
474
+ .demo-links {
475
+ margin-top: 64px;
476
+ padding-top: 32px;
477
+ border-top: 1px solid var(--color-border);
478
+ }
479
+
480
+ .demo-links__title {
481
+ font-size: 1rem;
482
+ font-weight: 600;
483
+ text-transform: uppercase;
484
+ letter-spacing: 0.05em;
485
+ color: var(--color-text-muted);
486
+ margin: 0 0 16px;
487
+ }
488
+
489
+ .demo-links__grid {
490
+ display: grid;
491
+ grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
492
+ gap: 12px;
493
+ }
494
+
495
+ .demo-links__item {
496
+ display: flex;
497
+ align-items: center;
498
+ gap: 8px;
499
+ padding: 12px 16px;
500
+ background: var(--color-surface);
501
+ border: 1px solid var(--color-border);
502
+ border-radius: 8px;
503
+ text-decoration: none;
504
+ color: var(--color-text);
505
+ font-weight: 500;
506
+ transition: all 0.2s;
507
+ }
508
+
509
+ .demo-links__item:hover {
510
+ border-color: var(--color-text);
511
+ transform: translateY(-2px);
512
+ box-shadow: 0 4px 12px rgba(0,0,0,0.1);
513
+ }
514
+
515
+ .demo-links__item--active {
516
+ background: var(--color-text);
517
+ color: var(--color-bg);
518
+ border-color: var(--color-text);
519
+ }
520
+
521
+ // -----------------------------------------------------------------------------
522
+ // Buttons
523
+ // -----------------------------------------------------------------------------
524
+
525
+ .btn,
526
+ button.btn {
527
+ display: inline-flex;
528
+ align-items: center;
529
+ justify-content: center;
530
+ gap: 8px;
531
+ padding: 10px 20px;
532
+ font-family: inherit;
533
+ font-size: 0.75rem;
534
+ font-weight: 600;
535
+ text-transform: uppercase;
536
+ letter-spacing: 0.05em;
537
+ text-decoration: none;
538
+ cursor: pointer;
539
+ transition: all 0.2s;
540
+ border: 1px solid var(--color-text);
541
+ background: var(--color-bg);
542
+ color: var(--color-text);
543
+ box-shadow: 0 1px 2px rgba(0,0,0,0.05);
544
+ }
545
+
546
+ .btn:hover,
547
+ button.btn:hover {
548
+ background: var(--color-text);
549
+ color: var(--color-bg);
550
+ transform: translateY(-1px);
551
+ box-shadow: 0 4px 12px rgba(0,0,0,0.1);
552
+ }
553
+
554
+ .btn:active,
555
+ button.btn:active {
556
+ transform: translateY(0);
557
+ box-shadow: 0 1px 2px rgba(0,0,0,0.05);
558
+ }
559
+
560
+ .btn-primary,
561
+ .btn--primary {
562
+ background: var(--color-text);
563
+ color: var(--color-bg);
564
+ border-color: var(--color-text);
565
+ }
566
+
567
+ .btn-primary:hover,
568
+ .btn--primary:hover {
569
+ background: var(--color-primary);
570
+ border-color: var(--color-primary);
571
+ color: white;
572
+ }
573
+
574
+ .btn-secondary,
575
+ .btn--secondary {
576
+ background: transparent;
577
+ color: var(--color-text);
578
+ border-color: var(--color-border);
579
+ }
580
+
581
+ .btn-secondary:hover,
582
+ .btn--secondary:hover {
583
+ background: var(--color-surface);
584
+ border-color: var(--color-text);
585
+ }
586
+
587
+ .btn-danger {
588
+ background: #dc2626;
589
+ color: white;
590
+ border-color: #dc2626;
591
+ }
592
+
593
+ .btn-danger:hover {
594
+ background: #b91c1c;
595
+ border-color: #b91c1c;
596
+ }
597
+
598
+ .hero-actions {
599
+ display: flex;
600
+ gap: 16px;
601
+ justify-content: center;
602
+ flex-wrap: wrap;
603
+ }
604
+
605
+ // -----------------------------------------------------------------------------
606
+ // Feature Grid (Demo pages)
607
+ // -----------------------------------------------------------------------------
608
+
609
+ .feature-grid {
610
+ display: grid;
611
+ grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
612
+ gap: 24px;
613
+ margin-bottom: 24px;
614
+ }
615
+
616
+ .feature-card {
617
+ padding: 24px;
618
+ background: var(--color-bg);
619
+ border: 1px solid var(--color-border);
620
+ position: relative;
621
+ transition: all 0.2s;
622
+ }
623
+
624
+ .feature-card:hover {
625
+ border-color: var(--color-text);
626
+ box-shadow: 0 4px 12px rgba(0,0,0,0.1);
627
+ transform: translateY(-2px);
628
+ }
629
+
630
+ .feature-card::before {
631
+ content: "";
632
+ position: absolute;
633
+ top: 0;
634
+ left: 0;
635
+ right: 0;
636
+ height: 3px;
637
+ background: var(--color-primary);
638
+ opacity: 0;
639
+ transition: opacity 0.2s;
640
+ }
641
+
642
+ .feature-card:hover::before {
643
+ opacity: 1;
644
+ }
645
+
646
+ .feature-card h4 {
647
+ font-size: 1rem;
648
+ font-weight: 600;
649
+ margin: 0 0 8px;
650
+ }
651
+
652
+ .feature-card p {
653
+ font-size: 0.875rem;
654
+ color: var(--color-text-muted);
655
+ margin: 0;
656
+ line-height: 1.5;
657
+ }
658
+
659
+ .feature-card__icon {
660
+ font-size: 2rem;
661
+ margin-bottom: 12px;
662
+ }
663
+
664
+ .feature-card__title {
665
+ font-size: 1.125rem;
666
+ font-weight: 600;
667
+ margin: 0 0 8px;
668
+ }
669
+
670
+ .feature-card__desc {
671
+ font-size: 0.875rem;
672
+ color: var(--color-text-muted);
673
+ margin: 0;
674
+ line-height: 1.5;
675
+ }
676
+
677
+ // -----------------------------------------------------------------------------
678
+ // Demo Grid
679
+ // -----------------------------------------------------------------------------
680
+
681
+ .demo-grid {
682
+ display: grid;
683
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
684
+ gap: 24px;
685
+ }
686
+
687
+ .demo-card {
688
+ padding: 24px;
689
+ background: var(--color-surface);
690
+ border-radius: 12px;
691
+ border: 1px solid var(--color-border);
692
+ text-align: center;
693
+ }
694
+
695
+ .demo-card__preview {
696
+ height: 80px;
697
+ display: flex;
698
+ align-items: center;
699
+ justify-content: center;
700
+ margin-bottom: 16px;
701
+ }
702
+
703
+ .demo-card__title {
704
+ font-size: 1rem;
705
+ margin: 0 0 4px;
706
+ }
707
+
708
+ .demo-card__desc {
709
+ font-size: 0.75rem;
710
+ color: var(--color-text-muted);
711
+ margin: 0 0 12px;
712
+ }
713
+
714
+ .demo-card__link {
715
+ font-size: 0.875rem;
716
+ color: var(--color-primary);
717
+ text-decoration: none;
718
+
719
+ &:hover {
720
+ text-decoration: underline;
721
+ }
722
+ }
723
+
724
+ // -----------------------------------------------------------------------------
725
+ // Demo Row
726
+ // -----------------------------------------------------------------------------
727
+
728
+ .demo-row {
729
+ display: flex;
730
+ flex-wrap: wrap;
731
+ gap: 48px;
732
+ margin-bottom: 32px;
733
+ padding: 24px;
734
+
735
+ // Timing demo row modifier
736
+ &--timing {
737
+ .demo-box.active {
738
+ transform: translateX(100px);
739
+ }
740
+ }
741
+ }
742
+
743
+ .demo-item {
744
+ text-align: center;
745
+ min-width: 100px;
746
+ padding: 20px;
747
+
748
+ p {
749
+ margin: 12px 0 0;
750
+ font-size: 0.875rem;
751
+ color: var(--color-text-muted);
752
+ }
753
+ }
754
+
755
+ .demo-box {
756
+ width: 60px;
757
+ height: 60px;
758
+ background: var(--color-primary);
759
+ border-radius: 8px;
760
+ }
761
+
762
+ // -----------------------------------------------------------------------------
763
+ // Demo Section Headers
764
+ // -----------------------------------------------------------------------------
765
+
766
+ .demo-section-title {
767
+ font-size: 1.5rem;
768
+ font-weight: 700;
769
+ margin: 48px 0 8px;
770
+ color: var(--color-text);
771
+ display: flex;
772
+ align-items: center;
773
+ gap: 8px;
774
+
775
+ &:first-of-type {
776
+ margin-top: 32px;
777
+ }
778
+ }
779
+
780
+ .demo-section-desc {
781
+ font-size: 0.9rem;
782
+ color: var(--color-text-muted);
783
+ margin: 0 0 24px;
784
+ }
785
+
786
+ // -----------------------------------------------------------------------------
787
+ // Demo Grid (Fixed Layout for Loaders/Animations)
788
+ // -----------------------------------------------------------------------------
789
+
790
+ .demo-grid-fixed {
791
+ display: grid;
792
+ grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
793
+ gap: 24px;
794
+ margin-bottom: 48px;
795
+ }
796
+
797
+ .demo-card-fixed {
798
+ display: flex;
799
+ flex-direction: column;
800
+ background: var(--color-surface);
801
+ border: 1px solid var(--color-border);
802
+ border-radius: 12px;
803
+ overflow: hidden;
804
+ transition: border-color 0.2s, box-shadow 0.2s;
805
+
806
+ &:hover {
807
+ border-color: var(--color-text-muted);
808
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
809
+ }
810
+ }
811
+
812
+ .demo-card-fixed__preview {
813
+ display: flex;
814
+ align-items: center;
815
+ justify-content: center;
816
+ height: 120px;
817
+ min-height: 120px;
818
+ max-height: 120px;
819
+ background: var(--color-bg);
820
+ border-bottom: 1px solid var(--color-border);
821
+ overflow: hidden;
822
+ position: relative;
823
+ }
824
+
825
+ .demo-card-fixed__info {
826
+ padding: 16px;
827
+ flex: 1;
828
+ }
829
+
830
+ .demo-card-fixed__title {
831
+ font-size: 0.875rem;
832
+ font-weight: 600;
833
+ margin: 0 0 4px;
834
+ font-family: 'JetBrains Mono', monospace;
835
+ }
836
+
837
+ .demo-card-fixed__desc {
838
+ font-size: 0.75rem;
839
+ color: var(--color-text-muted);
840
+ margin: 0;
841
+ }
842
+
843
+ .demo-card-fixed__code {
844
+ padding: 12px 16px;
845
+ background: var(--color-code-bg);
846
+ border-top: 1px solid var(--color-border);
847
+
848
+ code {
849
+ display: block;
850
+ font-family: 'JetBrains Mono', monospace;
851
+ font-size: 0.7rem;
852
+ color: #9cdcfe;
853
+ background: transparent;
854
+ padding: 0;
855
+ white-space: nowrap;
856
+ overflow-x: auto;
857
+ }
858
+
859
+ .tag { color: #569cd6; }
860
+ .attr { color: #9cdcfe; }
861
+ .string { color: #ce9178; }
862
+ }
863
+
864
+ // Animation demo box within fixed cards
865
+ .demo-card-fixed__preview .demo-box {
866
+ width: 50px;
867
+ height: 50px;
868
+ background: var(--color-primary);
869
+ border-radius: 8px;
870
+ }
871
+
872
+ // -----------------------------------------------------------------------------
873
+ // Loader Demo Styling (Greyscale)
874
+ // -----------------------------------------------------------------------------
875
+
876
+ // Override loader colors for demo display - greyscale only, no white
877
+ .demo-card-fixed__preview {
878
+
879
+ // Set demo background to light grey for visibility
880
+ background: #f0f0f0;
881
+
882
+ [data-theme="dark"] & {
883
+ background: #1a1a1a;
884
+ }
885
+
886
+ // Base loader element styling
887
+ .loader {
888
+ // Apply greyscale colors - use currentColor approach
889
+ color: #333333;
890
+
891
+ [data-theme="dark"] & {
892
+ color: #999999;
893
+ }
894
+ }
895
+
896
+ // Spinner and ring loaders - use border colors
897
+ .loader--spinner,
898
+ .loader--dual-ring,
899
+ .loader--circle-notch,
900
+ .loader--ring,
901
+ .loader--circle-spinner,
902
+ .loader--circle-dual,
903
+ .loader--circle-clip,
904
+ .loader--circle-clip-dual,
905
+ .loader--circle-nested,
906
+ .loader--circle-triple,
907
+ .loader--circle-pulse,
908
+ .loader--hourglass,
909
+ .loader--gradient {
910
+ border-color: #333333 transparent #333333 transparent;
911
+
912
+ &::after, &::before {
913
+ border-color: #333333 transparent #333333 transparent;
914
+ }
915
+
916
+ [data-theme="dark"] & {
917
+ border-color: #999999 transparent #999999 transparent;
918
+
919
+ &::after, &::before {
920
+ border-color: #999999 transparent #999999 transparent;
921
+ }
922
+ }
923
+ }
924
+
925
+ // Dots, bars, bubble loaders - use background color
926
+ .loader--dots > *,
927
+ .loader--dots-bounce > *,
928
+ .loader--dots-wave > *,
929
+ .loader--dots-fade > *,
930
+ .loader--dots-grow > *,
931
+ .loader--ellipsis > *,
932
+ .loader--typing > *,
933
+ .loader--bars > *,
934
+ .loader--wave-bar > *,
935
+ .loader--bar-bounce > *,
936
+ .loader--bar-pulse > *,
937
+ .loader--bar-flash > *,
938
+ .loader--bar-wave > *,
939
+ .loader--bar-equalizer > *,
940
+ .loader--bar-sound-wave > *,
941
+ .loader--bar-shrink > *,
942
+ .loader--bar-matrix > *,
943
+ .loader--bubble-rotate > *,
944
+ .loader--bubble-dots-bounce > *,
945
+ .loader--bubble-dots-flash > *,
946
+ .loader--bubble-dots-pulse > *,
947
+ .loader--bubble-dots-rotate > *,
948
+ .loader--bubble-expand > *,
949
+ .loader--bubble-collision > *,
950
+ .loader--chase > *,
951
+ .loader--pendulum > *,
952
+ .loader--bounce > *,
953
+ .loader--windmill > *,
954
+ .loader--folding > *,
955
+ .loader--wifi > *,
956
+ .loader--atom > *,
957
+ .loader--dna span,
958
+ .loader--progress-dots span,
959
+ .loader--progress-segments span,
960
+ .loader--rect-dual > *,
961
+ .loader--rect-expand > *,
962
+ .loader--rect-alternate > *,
963
+ .loader--rect-walk > *,
964
+ .loader--rect-nested > *,
965
+ .loader--rect-stepped > *,
966
+ .loader--ripple > *,
967
+ .loader--circle-ripple > * {
968
+ background-color: #333333 !important;
969
+
970
+ [data-theme="dark"] & {
971
+ background-color: #999999 !important;
972
+ }
973
+ }
974
+
975
+ // Single element loaders with background
976
+ .loader--pulse,
977
+ .loader--heartbeat,
978
+ .loader--square,
979
+ .loader--cube,
980
+ .loader--rect-flip,
981
+ .loader--rect-fill,
982
+ .loader--rect-shrink,
983
+ .loader--rect-morph,
984
+ .loader--rect-diamond,
985
+ .loader--morph,
986
+ .loader--bubble-flip,
987
+ .loader--circle-dot,
988
+ .loader--circle-orbit,
989
+ .loader--heart,
990
+ .loader--star,
991
+ .loader--coin,
992
+ .loader--seesaw,
993
+ .loader--orbit,
994
+ .loader--infinity {
995
+ background-color: #333333 !important;
996
+
997
+ [data-theme="dark"] & {
998
+ background-color: #999999 !important;
999
+ }
1000
+ }
1001
+
1002
+ // Progress bars
1003
+ .loader--progress,
1004
+ .loader--progress-fill,
1005
+ .loader--progress-indeterminate,
1006
+ .loader--progress-stripe,
1007
+ .loader--progress-stripe-fill,
1008
+ .loader--progress-pulse,
1009
+ .loader--progress-split,
1010
+ .loader--progress-gradient {
1011
+ background-color: #d0d0d0 !important;
1012
+
1013
+ &::after, &::before {
1014
+ background-color: #333333 !important;
1015
+ }
1016
+
1017
+ [data-theme="dark"] & {
1018
+ background-color: #404040 !important;
1019
+
1020
+ &::after, &::before {
1021
+ background-color: #999999 !important;
1022
+ }
1023
+ }
1024
+ }
1025
+
1026
+ // Bar expand and reveal
1027
+ .loader--bar-expand,
1028
+ .loader--bar-reveal {
1029
+ background-color: #d0d0d0 !important;
1030
+
1031
+ &::after {
1032
+ background-color: #333333 !important;
1033
+ }
1034
+
1035
+ [data-theme="dark"] & {
1036
+ background-color: #404040 !important;
1037
+
1038
+ &::after {
1039
+ background-color: #999999 !important;
1040
+ }
1041
+ }
1042
+ }
1043
+
1044
+ // Text loaders
1045
+ .loader--text-fill,
1046
+ .loader--text-dots,
1047
+ .loader--text-pulse,
1048
+ .loader--text-spotlight,
1049
+ .loader--text-typing,
1050
+ .loader--text-shake,
1051
+ .loader--text-gradient,
1052
+ .loader--text-percentage {
1053
+ color: #333333 !important;
1054
+
1055
+ [data-theme="dark"] & {
1056
+ color: #999999 !important;
1057
+ }
1058
+ }
1059
+
1060
+ .loader--text-bounce span,
1061
+ .loader--text-fade span,
1062
+ .loader--text-wave span {
1063
+ color: #333333 !important;
1064
+
1065
+ [data-theme="dark"] & {
1066
+ color: #999999 !important;
1067
+ }
1068
+ }
1069
+
1070
+ // Text spinner icon
1071
+ .loader--text-spinner span {
1072
+ border-color: #333333 transparent #333333 transparent !important;
1073
+
1074
+ [data-theme="dark"] & {
1075
+ border-color: #999999 transparent #999999 transparent !important;
1076
+ }
1077
+ }
1078
+
1079
+ // Skeleton loaders
1080
+ .loader--skeleton-shimmer,
1081
+ .loader--skeleton-pulse,
1082
+ .loader--skeleton-wave,
1083
+ .loader--skeleton-fade {
1084
+ background-color: #d0d0d0 !important;
1085
+
1086
+ [data-theme="dark"] & {
1087
+ background-color: #404040 !important;
1088
+ }
1089
+ }
1090
+
1091
+ // Graphic loaders (icons)
1092
+ .loader--clipboard,
1093
+ .loader--book,
1094
+ .loader--document,
1095
+ .loader--envelope,
1096
+ .loader--search,
1097
+ .loader--clock,
1098
+ .loader--gear {
1099
+ color: #333333 !important;
1100
+
1101
+ &::before, &::after {
1102
+ background-color: #333333 !important;
1103
+ border-color: #333333 !important;
1104
+ }
1105
+
1106
+ [data-theme="dark"] & {
1107
+ color: #999999 !important;
1108
+
1109
+ &::before, &::after {
1110
+ background-color: #999999 !important;
1111
+ border-color: #999999 !important;
1112
+ }
1113
+ }
1114
+ }
1115
+
1116
+ // Object loaders
1117
+ .loader--ping-pong > *,
1118
+ .loader--rolling-rock > *,
1119
+ .loader--bouncing-ball > *,
1120
+ .loader--brackets > *,
1121
+ .loader--flip-card > * {
1122
+ background-color: #333333 !important;
1123
+
1124
+ [data-theme="dark"] & {
1125
+ background-color: #999999 !important;
1126
+ }
1127
+ }
1128
+
1129
+ // Special border-based loaders
1130
+ .loader--brackets::before,
1131
+ .loader--brackets::after {
1132
+ border-color: #333333 !important;
1133
+
1134
+ [data-theme="dark"] & {
1135
+ border-color: #999999 !important;
1136
+ }
1137
+ }
1138
+
1139
+ // Battery loader
1140
+ .loader--battery {
1141
+ border-color: #333333 !important;
1142
+
1143
+ &::before, &::after {
1144
+ background-color: #333333 !important;
1145
+ }
1146
+
1147
+ [data-theme="dark"] & {
1148
+ border-color: #999999 !important;
1149
+
1150
+ &::before, &::after {
1151
+ background-color: #999999 !important;
1152
+ }
1153
+ }
1154
+ }
1155
+
1156
+ // Progress circle SVG
1157
+ .loader--progress-circle svg path {
1158
+ stroke: #333333 !important;
1159
+
1160
+ [data-theme="dark"] & {
1161
+ stroke: #999999 !important;
1162
+ }
1163
+ }
1164
+ }
1165
+
1166
+ // -----------------------------------------------------------------------------
1167
+ // Code Block
1168
+ // -----------------------------------------------------------------------------
1169
+
1170
+ .code-block {
1171
+ background: var(--color-code-bg);
1172
+ color: var(--color-code-text);
1173
+ padding: 24px;
1174
+ border-radius: 12px;
1175
+ font-family: 'JetBrains Mono', monospace;
1176
+ font-size: 0.875rem;
1177
+ line-height: 1.6;
1178
+ overflow-x: auto;
1179
+ white-space: pre;
1180
+ }
1181
+
1182
+ .code-block .comment {
1183
+ color: #6a9955;
1184
+ }
1185
+
1186
+ .code-block .class {
1187
+ color: #4ec9b0;
1188
+ }
1189
+
1190
+ .code-block .keyword {
1191
+ color: #c678dd;
1192
+ }
1193
+
1194
+ .code-block .string {
1195
+ color: #98c379;
1196
+ }
1197
+
1198
+ .code-block .function {
1199
+ color: #61afef;
1200
+ }
1201
+
1202
+ .code-block .number {
1203
+ color: #d19a66;
1204
+ }
1205
+
1206
+ code {
1207
+ font-family: 'JetBrains Mono', monospace;
1208
+ font-size: 0.875em;
1209
+ background: var(--color-surface);
1210
+ padding: 2px 6px;
1211
+ border-radius: 4px;
1212
+ }
1213
+
1214
+ // -----------------------------------------------------------------------------
1215
+ // Documentation Sections
1216
+ // -----------------------------------------------------------------------------
1217
+
1218
+ .doc-sections {
1219
+ display: grid;
1220
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
1221
+ gap: 32px;
1222
+ }
1223
+
1224
+ .doc-section h3 {
1225
+ font-size: 0.875rem;
1226
+ font-weight: 600;
1227
+ text-transform: uppercase;
1228
+ letter-spacing: 0.05em;
1229
+ color: var(--color-text-muted);
1230
+ margin-bottom: 16px;
1231
+ }
1232
+
1233
+ .doc-section ul {
1234
+ list-style: none;
1235
+ padding: 0;
1236
+ margin: 0;
1237
+ }
1238
+
1239
+ .doc-section li {
1240
+ margin-bottom: 8px;
1241
+ }
1242
+
1243
+ .doc-section a {
1244
+ color: var(--color-text);
1245
+ text-decoration: none;
1246
+
1247
+ &:hover {
1248
+ color: var(--color-primary);
1249
+ }
1250
+ }
1251
+
1252
+ // -----------------------------------------------------------------------------
1253
+ // Footer
1254
+ // -----------------------------------------------------------------------------
1255
+
1256
+ .footer {
1257
+ margin-top: 80px;
1258
+ padding: 32px 0;
1259
+ border-top: 1px solid var(--color-border);
1260
+ }
1261
+
1262
+ .footer__content {
1263
+ display: flex;
1264
+ justify-content: space-between;
1265
+ align-items: center;
1266
+ flex-wrap: wrap;
1267
+ gap: 24px;
1268
+ }
1269
+
1270
+ .footer__brand {
1271
+ font-weight: 600;
1272
+ }
1273
+
1274
+ .footer__tagline {
1275
+ color: var(--color-text-muted);
1276
+ margin-left: 8px;
1277
+ }
1278
+
1279
+ .footer__right {
1280
+ display: flex;
1281
+ align-items: center;
1282
+ gap: 24px;
1283
+ }
1284
+
1285
+ .footer__links {
1286
+ display: flex;
1287
+ gap: 16px;
1288
+ }
1289
+
1290
+ .footer__link {
1291
+ color: var(--color-text-muted);
1292
+ text-decoration: none;
1293
+ font-size: 0.875rem;
1294
+
1295
+ &:hover {
1296
+ color: var(--color-text);
1297
+ }
1298
+ }
1299
+
1300
+ .footer__copyright {
1301
+ color: var(--color-text-muted);
1302
+ font-size: 0.75rem;
1303
+ }
1304
+
1305
+ // -----------------------------------------------------------------------------
1306
+ // Demo Animation Wrappers
1307
+ // -----------------------------------------------------------------------------
1308
+ // These classes extend the core move.gl animation classes for use in demos.
1309
+ // The demo uses the actual library classes - no custom keyframes defined here.
1310
+ // This ensures the documentation accurately represents the library's capabilities.
1311
+
1312
+ // Demo wrapper that applies infinite looping for showcase purposes
1313
+ .demo-loop {
1314
+ animation-iteration-count: infinite !important;
1315
+ }
1316
+
1317
+ // Demo wrapper for slower animations (better for showcases)
1318
+ .demo-slow {
1319
+ animation-duration: 2s !important;
1320
+ }
1321
+
1322
+ // Demo wrapper for faster animations
1323
+ .demo-fast {
1324
+ animation-duration: 0.5s !important;
1325
+ }
1326
+
1327
+ // -----------------------------------------------------------------------------
1328
+ // Effect Demo Containers
1329
+ // -----------------------------------------------------------------------------
1330
+
1331
+ .effect-demo {
1332
+ .effect-box {
1333
+ width: 120px;
1334
+ height: 80px;
1335
+ background: #f8fafc;
1336
+ border-radius: 8px;
1337
+ display: flex;
1338
+ align-items: center;
1339
+ justify-content: center;
1340
+ overflow: hidden;
1341
+ font-size: 0.875rem;
1342
+ font-weight: 500;
1343
+ color: #1e293b;
1344
+ border: 1px solid rgba(0, 0, 0, 0.1);
1345
+
1346
+ img {
1347
+ width: 100%;
1348
+ height: 100%;
1349
+ object-fit: cover;
1350
+ }
1351
+ }
1352
+
1353
+ .color-block {
1354
+ width: 100%;
1355
+ height: 100%;
1356
+ background: linear-gradient(135deg, #3b82f6 0%, #8b5cf6 100%);
1357
+ }
1358
+ }
1359
+
1360
+ // Original (no filter) - for comparison
1361
+ .effect--original img {
1362
+ filter: none;
1363
+ border: 2px solid #10b981;
1364
+ }
1365
+
1366
+ // -----------------------------------------------------------------------------
1367
+ // Keyframe Demo Box
1368
+ // -----------------------------------------------------------------------------
1369
+
1370
+ .keyframe-box {
1371
+ width: 80px;
1372
+ height: 80px;
1373
+ background: linear-gradient(135deg, #3b82f6 0%, #8b5cf6 100%);
1374
+ border-radius: 8px;
1375
+ display: flex;
1376
+ align-items: center;
1377
+ justify-content: center;
1378
+ font-size: 1.5rem;
1379
+ color: white;
1380
+ font-weight: 600;
1381
+ }
1382
+
1383
+ // -----------------------------------------------------------------------------
1384
+ // Mouse Demo Box
1385
+ // -----------------------------------------------------------------------------
1386
+
1387
+ .mouse-box {
1388
+ width: 100%;
1389
+ min-width: 100px;
1390
+ height: 80px;
1391
+ background: #f8fafc;
1392
+ border: 1px solid rgba(0, 0, 0, 0.1);
1393
+ border-radius: 8px;
1394
+ display: flex;
1395
+ align-items: center;
1396
+ justify-content: center;
1397
+ font-size: 0.875rem;
1398
+ font-weight: 500;
1399
+ color: #1e293b;
1400
+ transition: all 0.3s ease;
1401
+ }
1402
+
1403
+ button.mouse-box {
1404
+ appearance: none;
1405
+ font-family: inherit;
1406
+ }
1407
+
1408
+ // -----------------------------------------------------------------------------
1409
+ // Scroll Demo
1410
+ // -----------------------------------------------------------------------------
1411
+
1412
+ .scroll-demo {
1413
+ .scroll-container {
1414
+ width: 100%;
1415
+ height: 120px;
1416
+ overflow-y: auto;
1417
+ background: #f8fafc;
1418
+ border: 1px solid rgba(0, 0, 0, 0.1);
1419
+ border-radius: 8px;
1420
+ padding: 12px;
1421
+ }
1422
+
1423
+ .scroll-content p {
1424
+ margin: 0 0 24px 0;
1425
+ color: #64748b;
1426
+ }
1427
+ }
1428
+
1429
+ // Scroll snap demo
1430
+ .scroll--snap {
1431
+ scroll-snap-type: y mandatory;
1432
+
1433
+ .scroll-snap-item {
1434
+ height: 100%;
1435
+ display: flex;
1436
+ align-items: center;
1437
+ justify-content: center;
1438
+ scroll-snap-align: start;
1439
+ background: linear-gradient(135deg, #3b82f6 0%, #8b5cf6 100%);
1440
+ color: white;
1441
+ font-weight: 600;
1442
+ border-radius: 4px;
1443
+ margin-bottom: 8px;
1444
+
1445
+ &:last-child { margin-bottom: 0; }
1446
+ }
1447
+ }
1448
+
1449
+ // Custom scrollbar for demos
1450
+ .scrollbar--custom {
1451
+ &::-webkit-scrollbar {
1452
+ width: 8px;
1453
+ }
1454
+ &::-webkit-scrollbar-track {
1455
+ background: #e2e8f0;
1456
+ border-radius: 4px;
1457
+ }
1458
+ &::-webkit-scrollbar-thumb {
1459
+ background: linear-gradient(135deg, #3b82f6 0%, #8b5cf6 100%);
1460
+ border-radius: 4px;
1461
+ }
1462
+ }
1463
+
1464
+ .scrollbar--hidden {
1465
+ scrollbar-width: none;
1466
+ -ms-overflow-style: none;
1467
+ &::-webkit-scrollbar {
1468
+ display: none;
1469
+ }
1470
+ }
1471
+
1472
+ // Backdrop blur demo container
1473
+ .backdrop-container {
1474
+ position: relative;
1475
+
1476
+ .backdrop-bg {
1477
+ position: absolute;
1478
+ inset: 0;
1479
+ background: linear-gradient(135deg, #f472b6 0%, #8b5cf6 50%, #3b82f6 100%);
1480
+ border-radius: 8px;
1481
+ }
1482
+
1483
+ .backdrop--blur {
1484
+ position: relative;
1485
+ backdrop-filter: blur(8px);
1486
+ -webkit-backdrop-filter: blur(8px);
1487
+ background: rgba(255, 255, 255, 0.2);
1488
+ }
1489
+ }
1490
+
1491
+ // Text selection demo
1492
+ .selection--custom {
1493
+ &::selection {
1494
+ background-color: #8b5cf6;
1495
+ color: white;
1496
+ }
1497
+ }
1498
+
1499
+ // -----------------------------------------------------------------------------
1500
+ // Demo Controls & Buttons
1501
+ // -----------------------------------------------------------------------------
1502
+
1503
+ .controls {
1504
+ display: flex;
1505
+ gap: 1rem;
1506
+ margin-top: 1rem;
1507
+ flex-wrap: wrap;
1508
+ }
1509
+
1510
+ .btn-primary {
1511
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
1512
+ color: white;
1513
+
1514
+ &:hover {
1515
+ transform: translateY(-2px);
1516
+ box-shadow: 0 4px 12px rgba(102, 126, 234, 0.4);
1517
+ }
1518
+ }
1519
+
1520
+ .btn-secondary {
1521
+ background: var(--color-surface);
1522
+ color: var(--color-text);
1523
+
1524
+ &:hover {
1525
+ background: var(--color-border);
1526
+ }
1527
+ }
1528
+
1529
+ // -----------------------------------------------------------------------------
1530
+ // Log Output
1531
+ // -----------------------------------------------------------------------------
1532
+
1533
+ .log-output {
1534
+ background: var(--color-code-bg);
1535
+ color: #00ff88;
1536
+ padding: 1rem;
1537
+ border-radius: 8px;
1538
+ font-family: 'JetBrains Mono', monospace;
1539
+ font-size: 13px;
1540
+ max-height: 200px;
1541
+ overflow-y: auto;
1542
+ margin-top: 1rem;
1543
+
1544
+ .log-entry {
1545
+ padding: 0.25rem 0;
1546
+ border-bottom: 1px solid #333;
1547
+
1548
+ &:last-child {
1549
+ border-bottom: none;
1550
+ }
1551
+ }
1552
+
1553
+ .timestamp {
1554
+ color: #888;
1555
+ margin-right: 0.5rem;
1556
+ }
1557
+ }
1558
+
1559
+ // -----------------------------------------------------------------------------
1560
+ // API Tables
1561
+ // -----------------------------------------------------------------------------
1562
+
1563
+ .api-table {
1564
+ width: 100%;
1565
+ border-collapse: collapse;
1566
+ margin: 1rem 0;
1567
+
1568
+ th,
1569
+ td {
1570
+ padding: 0.75rem;
1571
+ text-align: left;
1572
+ border-bottom: 1px solid var(--color-border);
1573
+ }
1574
+
1575
+ th {
1576
+ background: var(--color-surface);
1577
+ font-weight: 600;
1578
+ }
1579
+
1580
+ code {
1581
+ background: var(--color-border);
1582
+ padding: 0.125rem 0.375rem;
1583
+ border-radius: 4px;
1584
+ font-size: 13px;
1585
+ }
1586
+ }
1587
+
1588
+ // -----------------------------------------------------------------------------
1589
+ // Demo Containers
1590
+ // -----------------------------------------------------------------------------
1591
+
1592
+ .demo-container {
1593
+ position: relative;
1594
+ background: var(--color-surface);
1595
+ border-radius: 12px;
1596
+ padding: 2rem;
1597
+ margin: 1rem 0;
1598
+ overflow: hidden;
1599
+
1600
+ // Specific height for draggable demos
1601
+ &--draggable {
1602
+ height: 400px;
1603
+ border: 2px dashed var(--color-border);
1604
+ }
1605
+
1606
+ [data-theme="dark"] & {
1607
+ background: linear-gradient(135deg, #1a1a2e 0%, #16213e 100%);
1608
+ }
1609
+ }
1610
+
1611
+ .demo-area {
1612
+ min-height: 200px;
1613
+ display: flex;
1614
+ align-items: center;
1615
+ justify-content: center;
1616
+ border: 2px dashed var(--color-border);
1617
+ border-radius: 8px;
1618
+ margin: 1rem 0;
1619
+ }
1620
+
1621
+ // -----------------------------------------------------------------------------
1622
+ // Status Indicators
1623
+ // -----------------------------------------------------------------------------
1624
+
1625
+ .status {
1626
+ display: inline-flex;
1627
+ align-items: center;
1628
+ gap: 0.5rem;
1629
+ padding: 0.25rem 0.75rem;
1630
+ border-radius: 999px;
1631
+ font-size: 13px;
1632
+ font-weight: 500;
1633
+
1634
+ &--active {
1635
+ background: rgba(0, 255, 136, 0.1);
1636
+ color: #00ff88;
1637
+ }
1638
+
1639
+ &--inactive {
1640
+ background: rgba(255, 100, 100, 0.1);
1641
+ color: #ff6464;
1642
+ }
1643
+
1644
+ &--pending {
1645
+ background: rgba(255, 200, 0, 0.1);
1646
+ color: #ffc800;
1647
+ }
1648
+ }
1649
+
1650
+ .status-dot {
1651
+ width: 8px;
1652
+ height: 8px;
1653
+ border-radius: 50%;
1654
+ background: currentColor;
1655
+ }
1656
+
1657
+ // -----------------------------------------------------------------------------
1658
+ // Tabs
1659
+ // -----------------------------------------------------------------------------
1660
+
1661
+ .tabs {
1662
+ display: flex;
1663
+ gap: 0.5rem;
1664
+ border-bottom: 1px solid var(--color-border);
1665
+ margin-bottom: 1rem;
1666
+ }
1667
+
1668
+ .tab {
1669
+ padding: 0.75rem 1rem;
1670
+ border: none;
1671
+ background: none;
1672
+ color: var(--color-text-muted);
1673
+ font-weight: 500;
1674
+ cursor: pointer;
1675
+ border-bottom: 2px solid transparent;
1676
+ margin-bottom: -1px;
1677
+ transition: all 0.2s ease;
1678
+
1679
+ &:hover {
1680
+ color: var(--color-text);
1681
+ }
1682
+
1683
+ &.active {
1684
+ color: var(--color-primary);
1685
+ border-bottom-color: var(--color-primary);
1686
+ }
1687
+ }
1688
+
1689
+ .tab-content {
1690
+ display: none;
1691
+
1692
+ &.active {
1693
+ display: block;
1694
+ }
1695
+ }
1696
+
1697
+ // -----------------------------------------------------------------------------
1698
+ // Range Sliders
1699
+ // -----------------------------------------------------------------------------
1700
+
1701
+ .slider-group {
1702
+ display: flex;
1703
+ flex-direction: column;
1704
+ gap: 0.5rem;
1705
+ margin: 1rem 0;
1706
+ }
1707
+
1708
+ .slider-label {
1709
+ display: flex;
1710
+ justify-content: space-between;
1711
+ font-size: 14px;
1712
+ color: var(--color-text-muted);
1713
+ }
1714
+
1715
+ .slider {
1716
+ -webkit-appearance: none;
1717
+ width: 100%;
1718
+ height: 6px;
1719
+ border-radius: 3px;
1720
+ background: var(--color-border);
1721
+ outline: none;
1722
+
1723
+ &::-webkit-slider-thumb {
1724
+ -webkit-appearance: none;
1725
+ width: 18px;
1726
+ height: 18px;
1727
+ border-radius: 50%;
1728
+ background: var(--color-primary);
1729
+ cursor: pointer;
1730
+ transition: transform 0.2s ease;
1731
+
1732
+ &:hover {
1733
+ transform: scale(1.1);
1734
+ }
1735
+ }
1736
+
1737
+ &::-moz-range-thumb {
1738
+ width: 18px;
1739
+ height: 18px;
1740
+ border-radius: 50%;
1741
+ background: var(--color-primary);
1742
+ cursor: pointer;
1743
+ border: none;
1744
+ }
1745
+ }
1746
+
1747
+ // -----------------------------------------------------------------------------
1748
+ // Tooltips
1749
+ // -----------------------------------------------------------------------------
1750
+
1751
+ .tooltip {
1752
+ position: relative;
1753
+
1754
+ &::after {
1755
+ content: attr(data-tooltip);
1756
+ position: absolute;
1757
+ bottom: 100%;
1758
+ left: 50%;
1759
+ transform: translateX(-50%) translateY(-8px);
1760
+ padding: 0.5rem 0.75rem;
1761
+ background: var(--color-code-bg);
1762
+ color: white;
1763
+ font-size: 12px;
1764
+ border-radius: 4px;
1765
+ white-space: nowrap;
1766
+ opacity: 0;
1767
+ visibility: hidden;
1768
+ transition: all 0.2s ease;
1769
+ }
1770
+
1771
+ &:hover::after {
1772
+ opacity: 1;
1773
+ visibility: visible;
1774
+ transform: translateX(-50%) translateY(-4px);
1775
+ }
1776
+ }
1777
+
1778
+ // -----------------------------------------------------------------------------
1779
+ // Demo: Keyboard
1780
+ // -----------------------------------------------------------------------------
1781
+
1782
+ .keyboard-demo {
1783
+ background: linear-gradient(135deg, #1a1a2e 0%, #16213e 100%);
1784
+ border-radius: 16px;
1785
+ padding: 2rem;
1786
+ margin: 2rem 0;
1787
+ color: white;
1788
+ }
1789
+
1790
+ .keyboard__input {
1791
+ width: 100%;
1792
+ padding: 1rem 1.5rem;
1793
+ font-size: 1.125rem;
1794
+ font-family: inherit;
1795
+ border: 1px solid rgba(255, 255, 255, 0.2);
1796
+ border-radius: 8px;
1797
+ background: rgba(255, 255, 255, 0.1);
1798
+ color: white;
1799
+ margin-bottom: 1.5rem;
1800
+
1801
+ &::placeholder {
1802
+ color: rgba(255, 255, 255, 0.5);
1803
+ }
1804
+
1805
+ &:focus {
1806
+ outline: none;
1807
+ border-color: rgba(255, 255, 255, 0.4);
1808
+ }
1809
+ }
1810
+
1811
+ .mode-buttons {
1812
+ display: flex;
1813
+ gap: 8px;
1814
+ margin-bottom: 1.5rem;
1815
+ }
1816
+
1817
+ .mode-btn {
1818
+ padding: 8px 16px;
1819
+ font-size: 0.875rem;
1820
+ font-weight: 500;
1821
+ border: 1px solid rgba(255, 255, 255, 0.3);
1822
+ border-radius: 6px;
1823
+ background: rgba(255, 255, 255, 0.1);
1824
+ color: white;
1825
+ cursor: pointer;
1826
+ transition: all 0.2s;
1827
+
1828
+ &:hover {
1829
+ background: rgba(255, 255, 255, 0.2);
1830
+ border-color: rgba(255, 255, 255, 0.5);
1831
+ }
1832
+
1833
+ &.active {
1834
+ background: white;
1835
+ color: #1a1a2e;
1836
+ border-color: white;
1837
+ }
1838
+ }
1839
+
1840
+ .keyboard {
1841
+ display: flex;
1842
+ flex-direction: column;
1843
+ gap: 8px;
1844
+ margin-bottom: 1.5rem;
1845
+ }
1846
+
1847
+ .keyboard__row,
1848
+ .keyboard > div {
1849
+ display: flex;
1850
+ gap: 6px;
1851
+ justify-content: center;
1852
+ }
1853
+
1854
+ .key {
1855
+ min-width: 40px;
1856
+ height: 44px;
1857
+ padding: 0 12px;
1858
+ display: flex;
1859
+ align-items: center;
1860
+ justify-content: center;
1861
+ background: rgba(255, 255, 255, 0.15);
1862
+ border: 1px solid rgba(255, 255, 255, 0.2);
1863
+ border-radius: 6px;
1864
+ color: white;
1865
+ font-size: 0.875rem;
1866
+ font-weight: 500;
1867
+ cursor: pointer;
1868
+ transition: all 0.15s ease;
1869
+ user-select: none;
1870
+
1871
+ &:hover {
1872
+ background: rgba(255, 255, 255, 0.25);
1873
+ border-color: rgba(255, 255, 255, 0.4);
1874
+ }
1875
+
1876
+ &:active {
1877
+ background: rgba(255, 255, 255, 0.3);
1878
+ transform: scale(0.95);
1879
+ }
1880
+ }
1881
+
1882
+ .keyboard__stats {
1883
+ display: flex;
1884
+ gap: 2rem;
1885
+ font-size: 0.875rem;
1886
+ color: rgba(255, 255, 255, 0.7);
1887
+
1888
+ span {
1889
+ font-weight: 600;
1890
+ color: white;
1891
+ }
1892
+ }
1893
+
1894
+ // -----------------------------------------------------------------------------
1895
+ // Demo: Draggable
1896
+ // -----------------------------------------------------------------------------
1897
+
1898
+ .drag-container {
1899
+ position: relative;
1900
+ width: 100%;
1901
+ height: 400px;
1902
+ background: linear-gradient(135deg, var(--color-surface) 0%, var(--color-border) 100%);
1903
+ border-radius: 12px;
1904
+ border: 2px dashed var(--color-border);
1905
+ margin: 2rem 0;
1906
+ overflow: hidden;
1907
+ }
1908
+
1909
+ .draggable-box {
1910
+ position: absolute;
1911
+ width: 120px;
1912
+ height: 120px;
1913
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
1914
+ border-radius: 12px;
1915
+ cursor: grab;
1916
+ display: flex;
1917
+ align-items: center;
1918
+ justify-content: center;
1919
+ color: white;
1920
+ font-weight: 600;
1921
+ font-size: 14px;
1922
+ text-align: center;
1923
+ box-shadow: 0 8px 32px rgba(102, 126, 234, 0.3);
1924
+ user-select: none;
1925
+ transition: box-shadow 0.2s ease;
1926
+
1927
+ &:active {
1928
+ cursor: grabbing;
1929
+ box-shadow: 0 12px 48px rgba(102, 126, 234, 0.4);
1930
+ }
1931
+
1932
+ &--pink {
1933
+ background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);
1934
+ box-shadow: 0 8px 32px rgba(240, 147, 251, 0.3);
1935
+ }
1936
+
1937
+ &--cyan {
1938
+ background: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%);
1939
+ box-shadow: 0 8px 32px rgba(79, 172, 254, 0.3);
1940
+ }
1941
+ }
1942
+
1943
+ // -----------------------------------------------------------------------------
1944
+ // Demo: Gesture
1945
+ // -----------------------------------------------------------------------------
1946
+
1947
+ .gesture-area {
1948
+ position: relative;
1949
+ width: 100%;
1950
+ height: 400px;
1951
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
1952
+ border-radius: 16px;
1953
+ margin: 2rem 0;
1954
+ display: flex;
1955
+ flex-direction: column;
1956
+ align-items: center;
1957
+ justify-content: center;
1958
+ color: white;
1959
+ user-select: none;
1960
+ touch-action: none;
1961
+ overflow: hidden;
1962
+
1963
+ &::before {
1964
+ content: '';
1965
+ position: absolute;
1966
+ inset: 0;
1967
+ background: radial-gradient(circle at center, rgba(255, 255, 255, 0.1) 0%, transparent 70%);
1968
+ pointer-events: none;
1969
+ }
1970
+ }
1971
+
1972
+ .gesture-icon {
1973
+ font-size: 80px;
1974
+ margin-bottom: 1rem;
1975
+ transition: transform 0.3s ease;
1976
+ }
1977
+
1978
+ .gesture-label {
1979
+ font-size: 24px;
1980
+ font-weight: 600;
1981
+ margin-bottom: 0.5rem;
1982
+ }
1983
+
1984
+ .gesture-hint {
1985
+ font-size: 14px;
1986
+ opacity: 0.8;
1987
+ }
1988
+
1989
+ .gesture-feedback {
1990
+ position: absolute;
1991
+ bottom: 20px;
1992
+ left: 50%;
1993
+ transform: translateX(-50%);
1994
+ background: rgba(255, 255, 255, 0.2);
1995
+ backdrop-filter: blur(10px);
1996
+ padding: 0.75rem 1.5rem;
1997
+ border-radius: 50px;
1998
+ font-size: 14px;
1999
+ font-weight: 500;
2000
+ opacity: 0;
2001
+ transition: opacity 0.3s ease;
2002
+
2003
+ &.visible {
2004
+ opacity: 1;
2005
+ }
2006
+ }
2007
+
2008
+ .direction-indicator {
2009
+ position: absolute;
2010
+ width: 60px;
2011
+ height: 60px;
2012
+ border: 3px solid rgba(255, 255, 255, 0.3);
2013
+ border-radius: 50%;
2014
+ display: flex;
2015
+ align-items: center;
2016
+ justify-content: center;
2017
+ font-size: 24px;
2018
+ opacity: 0;
2019
+ transition: opacity 0.2s ease, transform 0.2s ease;
2020
+
2021
+ &.active {
2022
+ opacity: 1;
2023
+ transform: scale(1.2);
2024
+ }
2025
+
2026
+ &.left { left: 20px; top: 50%; transform: translateY(-50%); }
2027
+ &.right { right: 20px; top: 50%; transform: translateY(-50%); }
2028
+ &.up { top: 20px; left: 50%; transform: translateX(-50%); }
2029
+ &.down { bottom: 60px; left: 50%; transform: translateX(-50%); }
2030
+ }
2031
+
2032
+ .gesture-log {
2033
+ background: var(--color-code-bg);
2034
+ color: #00ff88;
2035
+ padding: 1rem;
2036
+ border-radius: 8px;
2037
+ font-family: 'JetBrains Mono', monospace;
2038
+ font-size: 13px;
2039
+ max-height: 250px;
2040
+ overflow-y: auto;
2041
+ margin: 1rem 0;
2042
+
2043
+ .entry {
2044
+ padding: 0.25rem 0;
2045
+ border-bottom: 1px solid #333;
2046
+ display: flex;
2047
+ gap: 0.5rem;
2048
+
2049
+ &:last-child {
2050
+ border-bottom: none;
2051
+ }
2052
+ }
2053
+
2054
+ .timestamp { color: #888; min-width: 80px; }
2055
+ .type { color: #61afef; min-width: 80px; font-weight: 600; }
2056
+ .details { color: #e4e8eb; }
2057
+ }
2058
+
2059
+ // -----------------------------------------------------------------------------
2060
+ // Demo: Screensaver
2061
+ // -----------------------------------------------------------------------------
2062
+
2063
+ .screensaver-preview {
2064
+ position: relative;
2065
+ width: 100%;
2066
+ aspect-ratio: 16/9;
2067
+ background: #000;
2068
+ border-radius: 12px;
2069
+ overflow: hidden;
2070
+ margin-bottom: 1.5rem;
2071
+ }
2072
+
2073
+ .screensaver-content {
2074
+ position: absolute;
2075
+ inset: 0;
2076
+ display: flex;
2077
+ flex-direction: column;
2078
+ align-items: center;
2079
+ justify-content: center;
2080
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
2081
+ opacity: 0;
2082
+ transition: opacity 0.5s ease;
2083
+
2084
+ &.active {
2085
+ opacity: 1;
2086
+ }
2087
+
2088
+ .icon {
2089
+ font-size: 80px;
2090
+ margin-bottom: 1rem;
2091
+ animation: screensaver-float 3s ease-in-out infinite;
2092
+ }
2093
+
2094
+ .text {
2095
+ font-size: 24px;
2096
+ font-weight: 600;
2097
+ color: white;
2098
+ }
2099
+
2100
+ .subtext {
2101
+ font-size: 14px;
2102
+ opacity: 0.8;
2103
+ margin-top: 0.5rem;
2104
+ color: white;
2105
+ }
2106
+ }
2107
+
2108
+ @keyframes screensaver-float {
2109
+ 0%, 100% { transform: translateY(0); }
2110
+ 50% { transform: translateY(-20px); }
2111
+ }
2112
+
2113
+ .preview-placeholder {
2114
+ position: absolute;
2115
+ inset: 0;
2116
+ display: flex;
2117
+ flex-direction: column;
2118
+ align-items: center;
2119
+ justify-content: center;
2120
+ color: #666;
2121
+
2122
+ .icon {
2123
+ font-size: 48px;
2124
+ margin-bottom: 1rem;
2125
+ }
2126
+ }
2127
+
2128
+ .status-bar {
2129
+ display: flex;
2130
+ align-items: center;
2131
+ justify-content: space-between;
2132
+ background: rgba(255, 255, 255, 0.1);
2133
+ border-radius: 12px;
2134
+ padding: 1rem 1.5rem;
2135
+ margin-bottom: 1.5rem;
2136
+ }
2137
+
2138
+ .status-indicator {
2139
+ display: flex;
2140
+ align-items: center;
2141
+ gap: 0.75rem;
2142
+ }
2143
+
2144
+ .countdown {
2145
+ font-size: 24px;
2146
+ font-weight: 700;
2147
+ font-family: 'JetBrains Mono', monospace;
2148
+ }
2149
+
2150
+ // -----------------------------------------------------------------------------
2151
+ // Demo: Video Overlay
2152
+ // -----------------------------------------------------------------------------
2153
+
2154
+ .video-preview {
2155
+ position: relative;
2156
+ width: 100%;
2157
+ aspect-ratio: 16/9;
2158
+ background:
2159
+ linear-gradient(45deg, #333 25%, transparent 25%),
2160
+ linear-gradient(-45deg, #333 25%, transparent 25%),
2161
+ linear-gradient(45deg, transparent 75%, #333 75%),
2162
+ linear-gradient(-45deg, transparent 75%, #333 75%);
2163
+ background-size: 20px 20px;
2164
+ background-position: 0 0, 0 10px, 10px -10px, -10px 0px;
2165
+ border-radius: 12px;
2166
+ overflow: hidden;
2167
+ margin-bottom: 1.5rem;
2168
+ }
2169
+
2170
+ .preview-content {
2171
+ position: absolute;
2172
+ inset: 0;
2173
+ display: flex;
2174
+ flex-direction: column;
2175
+ align-items: center;
2176
+ justify-content: center;
2177
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
2178
+ color: white;
2179
+
2180
+ .icon {
2181
+ font-size: 64px;
2182
+ }
2183
+
2184
+ .text {
2185
+ font-size: 24px;
2186
+ font-weight: 600;
2187
+ margin-top: 1rem;
2188
+ }
2189
+ }
2190
+
2191
+ .video-overlay {
2192
+ position: absolute;
2193
+ inset: 0;
2194
+ display: flex;
2195
+ align-items: center;
2196
+ justify-content: center;
2197
+ pointer-events: none;
2198
+ opacity: 0;
2199
+ transition: opacity 0.3s ease;
2200
+
2201
+ &.visible {
2202
+ opacity: 1;
2203
+ }
2204
+ }
2205
+
2206
+ .overlay-effect {
2207
+ position: absolute;
2208
+ inset: 0;
2209
+ background: radial-gradient(circle at center, transparent 30%, rgba(0, 0, 0, 0.8) 100%);
2210
+ }
2211
+
2212
+ // -----------------------------------------------------------------------------
2213
+ // Demo: Stats Cards
2214
+ // -----------------------------------------------------------------------------
2215
+
2216
+ .stats-grid {
2217
+ display: grid;
2218
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
2219
+ gap: 1rem;
2220
+ margin: 2rem 0;
2221
+ }
2222
+
2223
+ .stat-card {
2224
+ background: var(--color-surface);
2225
+ border-radius: 12px;
2226
+ padding: 1.5rem;
2227
+ text-align: center;
2228
+ border: 1px solid var(--color-border);
2229
+ }
2230
+
2231
+ .stat-card__value {
2232
+ font-size: 36px;
2233
+ font-weight: 700;
2234
+ color: var(--color-primary);
2235
+ }
2236
+
2237
+ .stat-card__label {
2238
+ font-size: 14px;
2239
+ color: var(--color-text-muted);
2240
+ margin-top: 0.5rem;
2241
+ }
2242
+
2243
+ // -----------------------------------------------------------------------------
2244
+ // Demo: Control Panels
2245
+ // -----------------------------------------------------------------------------
2246
+
2247
+ .controls-panel {
2248
+ display: grid;
2249
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
2250
+ gap: 1rem;
2251
+ margin-bottom: 1.5rem;
2252
+ }
2253
+
2254
+ .control-group {
2255
+ background: rgba(255, 255, 255, 0.1);
2256
+ border-radius: 12px;
2257
+ padding: 1rem;
2258
+
2259
+ label {
2260
+ display: block;
2261
+ font-size: 12px;
2262
+ text-transform: uppercase;
2263
+ letter-spacing: 0.5px;
2264
+ opacity: 0.7;
2265
+ margin-bottom: 0.5rem;
2266
+ }
2267
+
2268
+ .value {
2269
+ font-size: 24px;
2270
+ font-weight: 700;
2271
+ color: var(--color-primary);
2272
+ }
2273
+
2274
+ input[type="range"] {
2275
+ width: 100%;
2276
+ margin-top: 0.5rem;
2277
+ }
2278
+ }
2279
+
2280
+ .effect-buttons {
2281
+ display: flex;
2282
+ gap: 0.5rem;
2283
+ flex-wrap: wrap;
2284
+ }
2285
+
2286
+ .effect-btn {
2287
+ padding: 0.5rem 1rem;
2288
+ border: 2px solid rgba(255, 255, 255, 0.2);
2289
+ background: transparent;
2290
+ color: white;
2291
+ border-radius: 8px;
2292
+ cursor: pointer;
2293
+ transition: all 0.2s ease;
2294
+
2295
+ &:hover {
2296
+ border-color: var(--color-primary);
2297
+ }
2298
+
2299
+ &.active {
2300
+ border-color: var(--color-primary);
2301
+ background: rgba(102, 126, 234, 0.2);
2302
+ }
2303
+ }
2304
+
2305
+ // Activity log for demos
2306
+ .activity-log {
2307
+ background: #000;
2308
+ color: #00ff88;
2309
+ padding: 1rem;
2310
+ border-radius: 8px;
2311
+ font-family: 'JetBrains Mono', monospace;
2312
+ font-size: 12px;
2313
+ max-height: 150px;
2314
+ overflow-y: auto;
2315
+ margin-top: 1rem;
2316
+ }
2317
+
2318
+ // -----------------------------------------------------------------------------
2319
+ // Responsive
2320
+ // -----------------------------------------------------------------------------
2321
+
2322
+ @media (max-width: 768px) {
2323
+ h1 {
2324
+ font-size: 2rem;
2325
+ }
2326
+
2327
+ .lead {
2328
+ font-size: 1rem;
2329
+ }
2330
+
2331
+ .hero-actions {
2332
+ flex-direction: column;
2333
+ align-items: center;
2334
+ }
2335
+
2336
+ .footer__content {
2337
+ flex-direction: column;
2338
+ text-align: center;
2339
+ }
2340
+
2341
+ .footer__right {
2342
+ flex-direction: column;
2343
+ }
2344
+ }