luxen-ui 0.3.0 → 0.5.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 (385) hide show
  1. package/cdn/chunks/decorate.js +1 -1
  2. package/cdn/chunks/decorate.js.map +1 -1
  3. package/cdn/chunks/map.js +2 -0
  4. package/cdn/chunks/map.js.map +1 -0
  5. package/cdn/custom-elements.json +6707 -4242
  6. package/cdn/elements/avatar/avatar.d.ts +1 -1
  7. package/cdn/elements/avatar/avatar.d.ts.map +1 -1
  8. package/cdn/elements/avatar/avatar.js +3 -3
  9. package/cdn/elements/avatar/avatar.js.map +1 -1
  10. package/cdn/elements/avatar/index.d.ts +2 -2
  11. package/cdn/elements/avatar/index.d.ts.map +1 -1
  12. package/cdn/elements/avatar/index.js +1 -1
  13. package/cdn/elements/avatar/index.js.map +1 -1
  14. package/cdn/elements/badge/badge.d.ts +1 -1
  15. package/cdn/elements/badge/badge.d.ts.map +1 -1
  16. package/cdn/elements/badge/badge.js +1 -1
  17. package/cdn/elements/badge/badge.js.map +1 -1
  18. package/cdn/elements/badge/index.d.ts +2 -2
  19. package/cdn/elements/badge/index.d.ts.map +1 -1
  20. package/cdn/elements/badge/index.js +1 -1
  21. package/cdn/elements/badge/index.js.map +1 -1
  22. package/cdn/elements/carousel/carousel.d.ts +18 -11
  23. package/cdn/elements/carousel/carousel.d.ts.map +1 -1
  24. package/cdn/elements/carousel/carousel.js +21 -20
  25. package/cdn/elements/carousel/carousel.js.map +1 -1
  26. package/cdn/elements/carousel/index.d.ts +2 -2
  27. package/cdn/elements/carousel/index.d.ts.map +1 -1
  28. package/cdn/elements/carousel/index.js +1 -1
  29. package/cdn/elements/carousel/index.js.map +1 -1
  30. package/cdn/elements/carousel-item/carousel-item.d.ts +1 -1
  31. package/cdn/elements/carousel-item/carousel-item.d.ts.map +1 -1
  32. package/cdn/elements/carousel-item/carousel-item.js +1 -1
  33. package/cdn/elements/carousel-item/carousel-item.js.map +1 -1
  34. package/cdn/elements/carousel-item/index.d.ts +2 -2
  35. package/cdn/elements/carousel-item/index.d.ts.map +1 -1
  36. package/cdn/elements/carousel-item/index.js +1 -1
  37. package/cdn/elements/carousel-item/index.js.map +1 -1
  38. package/cdn/elements/dialog/dialog.d.ts +1 -1
  39. package/cdn/elements/dialog/dialog.d.ts.map +1 -1
  40. package/cdn/elements/dialog/dialog.js +2 -2
  41. package/cdn/elements/dialog/dialog.js.map +1 -1
  42. package/cdn/elements/dialog/dialog.styles.js.map +1 -1
  43. package/cdn/elements/dialog/index.d.ts +2 -2
  44. package/cdn/elements/dialog/index.d.ts.map +1 -1
  45. package/cdn/elements/dialog/index.js +1 -1
  46. package/cdn/elements/dialog/index.js.map +1 -1
  47. package/cdn/elements/divider/divider.d.ts +1 -1
  48. package/cdn/elements/divider/divider.d.ts.map +1 -1
  49. package/cdn/elements/divider/divider.js +1 -1
  50. package/cdn/elements/divider/divider.js.map +1 -1
  51. package/cdn/elements/divider/index.d.ts +2 -2
  52. package/cdn/elements/divider/index.d.ts.map +1 -1
  53. package/cdn/elements/divider/index.js +1 -1
  54. package/cdn/elements/divider/index.js.map +1 -1
  55. package/cdn/elements/drawer/drawer.d.ts +2 -2
  56. package/cdn/elements/drawer/drawer.d.ts.map +1 -1
  57. package/cdn/elements/drawer/drawer.js +1 -1
  58. package/cdn/elements/drawer/drawer.js.map +1 -1
  59. package/cdn/elements/drawer/index.d.ts +2 -2
  60. package/cdn/elements/drawer/index.d.ts.map +1 -1
  61. package/cdn/elements/drawer/index.js +1 -1
  62. package/cdn/elements/drawer/index.js.map +1 -1
  63. package/cdn/elements/dropdown/dropdown.d.ts +7 -4
  64. package/cdn/elements/dropdown/dropdown.d.ts.map +1 -1
  65. package/cdn/elements/dropdown/dropdown.js +7 -4
  66. package/cdn/elements/dropdown/dropdown.js.map +1 -1
  67. package/cdn/elements/dropdown/index.d.ts +2 -2
  68. package/cdn/elements/dropdown/index.d.ts.map +1 -1
  69. package/cdn/elements/dropdown/index.js +1 -1
  70. package/cdn/elements/dropdown/index.js.map +1 -1
  71. package/cdn/elements/dropdown-item/dropdown-item.d.ts +1 -1
  72. package/cdn/elements/dropdown-item/dropdown-item.d.ts.map +1 -1
  73. package/cdn/elements/dropdown-item/dropdown-item.js +2 -2
  74. package/cdn/elements/dropdown-item/dropdown-item.js.map +1 -1
  75. package/cdn/elements/dropdown-item/index.d.ts +2 -2
  76. package/cdn/elements/dropdown-item/index.d.ts.map +1 -1
  77. package/cdn/elements/dropdown-item/index.js +1 -1
  78. package/cdn/elements/dropdown-item/index.js.map +1 -1
  79. package/cdn/elements/icon/icon.d.ts +1 -1
  80. package/cdn/elements/icon/icon.d.ts.map +1 -1
  81. package/cdn/elements/icon/icon.js +2 -2
  82. package/cdn/elements/icon/icon.js.map +1 -1
  83. package/cdn/elements/icon/index.d.ts +2 -2
  84. package/cdn/elements/icon/index.d.ts.map +1 -1
  85. package/cdn/elements/icon/index.js +1 -1
  86. package/cdn/elements/icon/index.js.map +1 -1
  87. package/cdn/elements/input-otp/index.d.ts +2 -2
  88. package/cdn/elements/input-otp/index.d.ts.map +1 -1
  89. package/cdn/elements/input-otp/index.js +1 -1
  90. package/cdn/elements/input-otp/index.js.map +1 -1
  91. package/cdn/elements/input-otp/input-otp.d.ts +1 -1
  92. package/cdn/elements/input-otp/input-otp.d.ts.map +1 -1
  93. package/cdn/elements/input-otp/input-otp.js +1 -1
  94. package/cdn/elements/input-otp/input-otp.js.map +1 -1
  95. package/cdn/elements/input-stepper/index.d.ts +2 -2
  96. package/cdn/elements/input-stepper/index.d.ts.map +1 -1
  97. package/cdn/elements/input-stepper/index.js +1 -1
  98. package/cdn/elements/input-stepper/index.js.map +1 -1
  99. package/cdn/elements/input-stepper/input-stepper.d.ts +1 -1
  100. package/cdn/elements/input-stepper/input-stepper.d.ts.map +1 -1
  101. package/cdn/elements/input-stepper/input-stepper.js +1 -1
  102. package/cdn/elements/input-stepper/input-stepper.js.map +1 -1
  103. package/cdn/elements/popover/index.d.ts +2 -2
  104. package/cdn/elements/popover/index.d.ts.map +1 -1
  105. package/cdn/elements/popover/index.js +1 -1
  106. package/cdn/elements/popover/index.js.map +1 -1
  107. package/cdn/elements/popover/popover.d.ts +1 -1
  108. package/cdn/elements/popover/popover.d.ts.map +1 -1
  109. package/cdn/elements/popover/popover.js +2 -2
  110. package/cdn/elements/popover/popover.js.map +1 -1
  111. package/cdn/elements/rating/index.d.ts +2 -2
  112. package/cdn/elements/rating/index.d.ts.map +1 -1
  113. package/cdn/elements/rating/index.js +1 -1
  114. package/cdn/elements/rating/index.js.map +1 -1
  115. package/cdn/elements/rating/rating.d.ts +1 -1
  116. package/cdn/elements/rating/rating.d.ts.map +1 -1
  117. package/cdn/elements/rating/rating.js +2 -2
  118. package/cdn/elements/rating/rating.js.map +1 -1
  119. package/cdn/elements/skeleton/index.d.ts +2 -2
  120. package/cdn/elements/skeleton/index.d.ts.map +1 -1
  121. package/cdn/elements/skeleton/index.js +1 -1
  122. package/cdn/elements/skeleton/index.js.map +1 -1
  123. package/cdn/elements/skeleton/skeleton.d.ts +1 -1
  124. package/cdn/elements/skeleton/skeleton.d.ts.map +1 -1
  125. package/cdn/elements/skeleton/skeleton.js +1 -1
  126. package/cdn/elements/skeleton/skeleton.js.map +1 -1
  127. package/cdn/elements/spinner/index.d.ts +2 -2
  128. package/cdn/elements/spinner/index.d.ts.map +1 -1
  129. package/cdn/elements/spinner/index.js +1 -1
  130. package/cdn/elements/spinner/index.js.map +1 -1
  131. package/cdn/elements/spinner/spinner.d.ts +1 -1
  132. package/cdn/elements/spinner/spinner.d.ts.map +1 -1
  133. package/cdn/elements/spinner/spinner.js +1 -1
  134. package/cdn/elements/spinner/spinner.js.map +1 -1
  135. package/cdn/elements/sticky-bar/index.d.ts +8 -0
  136. package/cdn/elements/sticky-bar/index.d.ts.map +1 -0
  137. package/cdn/elements/sticky-bar/index.js +2 -0
  138. package/cdn/elements/sticky-bar/index.js.map +1 -0
  139. package/cdn/elements/sticky-bar/sticky-bar.d.ts +46 -0
  140. package/cdn/elements/sticky-bar/sticky-bar.d.ts.map +1 -0
  141. package/cdn/elements/sticky-bar/sticky-bar.js +2 -0
  142. package/cdn/elements/sticky-bar/sticky-bar.js.map +1 -0
  143. package/cdn/elements/stories/index.d.ts +8 -0
  144. package/cdn/elements/stories/index.d.ts.map +1 -0
  145. package/cdn/elements/stories/index.js +2 -0
  146. package/cdn/elements/stories/index.js.map +1 -0
  147. package/cdn/elements/stories/stories.d.ts +50 -0
  148. package/cdn/elements/stories/stories.d.ts.map +1 -0
  149. package/cdn/elements/stories/stories.js +2 -0
  150. package/cdn/elements/stories/stories.js.map +1 -0
  151. package/cdn/elements/stories-viewer/index.d.ts +8 -0
  152. package/cdn/elements/stories-viewer/index.d.ts.map +1 -0
  153. package/cdn/elements/stories-viewer/index.js +2 -0
  154. package/cdn/elements/stories-viewer/index.js.map +1 -0
  155. package/cdn/elements/stories-viewer/stories-viewer.d.ts +136 -0
  156. package/cdn/elements/stories-viewer/stories-viewer.d.ts.map +1 -0
  157. package/cdn/elements/stories-viewer/stories-viewer.js +160 -0
  158. package/cdn/elements/stories-viewer/stories-viewer.js.map +1 -0
  159. package/cdn/elements/story/index.d.ts +8 -0
  160. package/cdn/elements/story/index.d.ts.map +1 -0
  161. package/cdn/elements/story/index.js +2 -0
  162. package/cdn/elements/story/index.js.map +1 -0
  163. package/cdn/elements/story/story.d.ts +48 -0
  164. package/cdn/elements/story/story.d.ts.map +1 -0
  165. package/cdn/elements/story/story.js +35 -0
  166. package/cdn/elements/story/story.js.map +1 -0
  167. package/cdn/elements/tabs/index.d.ts +2 -2
  168. package/cdn/elements/tabs/index.d.ts.map +1 -1
  169. package/cdn/elements/tabs/index.js +1 -1
  170. package/cdn/elements/tabs/index.js.map +1 -1
  171. package/cdn/elements/tabs/tabs.d.ts +1 -1
  172. package/cdn/elements/tabs/tabs.d.ts.map +1 -1
  173. package/cdn/elements/tabs/tabs.js +1 -1
  174. package/cdn/elements/tabs/tabs.js.map +1 -1
  175. package/cdn/elements/toast/index.d.ts +3 -3
  176. package/cdn/elements/toast/index.d.ts.map +1 -1
  177. package/cdn/elements/toast/index.js +1 -1
  178. package/cdn/elements/toast/index.js.map +1 -1
  179. package/cdn/elements/toast/toast.d.ts +2 -2
  180. package/cdn/elements/toast/toast.d.ts.map +1 -1
  181. package/cdn/elements/toast/toast.js +1 -1
  182. package/cdn/elements/toast/toast.js.map +1 -1
  183. package/cdn/elements/tooltip/index.d.ts +2 -2
  184. package/cdn/elements/tooltip/index.d.ts.map +1 -1
  185. package/cdn/elements/tooltip/index.js +1 -1
  186. package/cdn/elements/tooltip/index.js.map +1 -1
  187. package/cdn/elements/tooltip/tooltip.d.ts +4 -4
  188. package/cdn/elements/tooltip/tooltip.d.ts.map +1 -1
  189. package/cdn/elements/tooltip/tooltip.js +2 -2
  190. package/cdn/elements/tooltip/tooltip.js.map +1 -1
  191. package/cdn/elements/tree/index.d.ts +2 -2
  192. package/cdn/elements/tree/index.d.ts.map +1 -1
  193. package/cdn/elements/tree/index.js +1 -1
  194. package/cdn/elements/tree/index.js.map +1 -1
  195. package/cdn/elements/tree/tree.d.ts +5 -5
  196. package/cdn/elements/tree/tree.d.ts.map +1 -1
  197. package/cdn/elements/tree/tree.js +2 -2
  198. package/cdn/elements/tree/tree.js.map +1 -1
  199. package/cdn/elements/tree-item/index.d.ts +2 -2
  200. package/cdn/elements/tree-item/index.d.ts.map +1 -1
  201. package/cdn/elements/tree-item/index.js +1 -1
  202. package/cdn/elements/tree-item/index.js.map +1 -1
  203. package/cdn/elements/tree-item/tree-item.d.ts +2 -2
  204. package/cdn/elements/tree-item/tree-item.d.ts.map +1 -1
  205. package/cdn/elements/tree-item/tree-item.js +2 -2
  206. package/cdn/elements/tree-item/tree-item.js.map +1 -1
  207. package/cdn/registry.d.ts +1 -1
  208. package/cdn/registry.d.ts.map +1 -1
  209. package/cdn/registry.js.map +1 -1
  210. package/cdn/shared/controllers/popover.js.map +1 -1
  211. package/cdn/shared/luxen-form-associated-element.js +1 -1
  212. package/cdn/shared/styles/host.styles.js.map +1 -1
  213. package/cdn/styles/elements/divider.css +7 -0
  214. package/cdn/styles/elements/select.css +3 -3
  215. package/cdn/styles/elements/stories.css +63 -0
  216. package/cdn/styles/elements/story.css +192 -0
  217. package/cdn/styles/index.css +3 -0
  218. package/dist/css/elements/divider.css +7 -0
  219. package/dist/css/elements/select.css +3 -3
  220. package/dist/css/elements/stories.css +63 -0
  221. package/dist/css/elements/story.css +192 -0
  222. package/dist/css/index.css +3 -0
  223. package/dist/custom-elements.json +6707 -4242
  224. package/dist/elements/avatar/avatar.css +13 -7
  225. package/dist/elements/avatar/avatar.d.ts +1 -1
  226. package/dist/elements/avatar/avatar.d.ts.map +1 -1
  227. package/dist/elements/avatar/avatar.js +11 -11
  228. package/dist/elements/avatar/index.d.ts +2 -2
  229. package/dist/elements/avatar/index.d.ts.map +1 -1
  230. package/dist/elements/avatar/index.js +2 -2
  231. package/dist/elements/badge/badge.d.ts +1 -1
  232. package/dist/elements/badge/badge.d.ts.map +1 -1
  233. package/dist/elements/badge/badge.js +5 -5
  234. package/dist/elements/badge/index.d.ts +2 -2
  235. package/dist/elements/badge/index.d.ts.map +1 -1
  236. package/dist/elements/badge/index.js +2 -2
  237. package/dist/elements/carousel/carousel.css +7 -0
  238. package/dist/elements/carousel/carousel.d.ts +18 -11
  239. package/dist/elements/carousel/carousel.d.ts.map +1 -1
  240. package/dist/elements/carousel/carousel.js +193 -167
  241. package/dist/elements/carousel/index.d.ts +2 -2
  242. package/dist/elements/carousel/index.d.ts.map +1 -1
  243. package/dist/elements/carousel/index.js +2 -2
  244. package/dist/elements/carousel-item/carousel-item.d.ts +1 -1
  245. package/dist/elements/carousel-item/carousel-item.d.ts.map +1 -1
  246. package/dist/elements/carousel-item/carousel-item.js +2 -2
  247. package/dist/elements/carousel-item/index.d.ts +2 -2
  248. package/dist/elements/carousel-item/index.d.ts.map +1 -1
  249. package/dist/elements/carousel-item/index.js +2 -2
  250. package/dist/elements/dialog/dialog.d.ts +1 -1
  251. package/dist/elements/dialog/dialog.d.ts.map +1 -1
  252. package/dist/elements/dialog/dialog.js +9 -9
  253. package/dist/elements/dialog/index.d.ts +2 -2
  254. package/dist/elements/dialog/index.d.ts.map +1 -1
  255. package/dist/elements/dialog/index.js +2 -2
  256. package/dist/elements/divider/divider.d.ts +1 -1
  257. package/dist/elements/divider/divider.d.ts.map +1 -1
  258. package/dist/elements/divider/divider.js +3 -3
  259. package/dist/elements/divider/index.d.ts +2 -2
  260. package/dist/elements/divider/index.d.ts.map +1 -1
  261. package/dist/elements/divider/index.js +2 -2
  262. package/dist/elements/drawer/drawer.d.ts +2 -2
  263. package/dist/elements/drawer/drawer.d.ts.map +1 -1
  264. package/dist/elements/drawer/drawer.js +4 -4
  265. package/dist/elements/drawer/index.d.ts +2 -2
  266. package/dist/elements/drawer/index.d.ts.map +1 -1
  267. package/dist/elements/drawer/index.js +2 -2
  268. package/dist/elements/dropdown/dropdown.css +14 -3
  269. package/dist/elements/dropdown/dropdown.d.ts +7 -4
  270. package/dist/elements/dropdown/dropdown.d.ts.map +1 -1
  271. package/dist/elements/dropdown/dropdown.js +41 -29
  272. package/dist/elements/dropdown/index.d.ts +2 -2
  273. package/dist/elements/dropdown/index.d.ts.map +1 -1
  274. package/dist/elements/dropdown/index.js +2 -2
  275. package/dist/elements/dropdown-item/dropdown-item.d.ts +1 -1
  276. package/dist/elements/dropdown-item/dropdown-item.d.ts.map +1 -1
  277. package/dist/elements/dropdown-item/dropdown-item.js +20 -20
  278. package/dist/elements/dropdown-item/index.d.ts +2 -2
  279. package/dist/elements/dropdown-item/index.d.ts.map +1 -1
  280. package/dist/elements/dropdown-item/index.js +2 -2
  281. package/dist/elements/icon/icon.d.ts +1 -1
  282. package/dist/elements/icon/icon.d.ts.map +1 -1
  283. package/dist/elements/icon/icon.js +4 -4
  284. package/dist/elements/icon/index.d.ts +2 -2
  285. package/dist/elements/icon/index.d.ts.map +1 -1
  286. package/dist/elements/icon/index.js +2 -2
  287. package/dist/elements/input-otp/index.d.ts +2 -2
  288. package/dist/elements/input-otp/index.d.ts.map +1 -1
  289. package/dist/elements/input-otp/index.js +2 -2
  290. package/dist/elements/input-otp/input-otp.d.ts +1 -1
  291. package/dist/elements/input-otp/input-otp.d.ts.map +1 -1
  292. package/dist/elements/input-otp/input-otp.js +2 -2
  293. package/dist/elements/input-stepper/index.d.ts +2 -2
  294. package/dist/elements/input-stepper/index.d.ts.map +1 -1
  295. package/dist/elements/input-stepper/index.js +2 -2
  296. package/dist/elements/input-stepper/input-stepper.d.ts +1 -1
  297. package/dist/elements/input-stepper/input-stepper.d.ts.map +1 -1
  298. package/dist/elements/input-stepper/input-stepper.js +8 -8
  299. package/dist/elements/popover/index.d.ts +2 -2
  300. package/dist/elements/popover/index.d.ts.map +1 -1
  301. package/dist/elements/popover/index.js +2 -2
  302. package/dist/elements/popover/popover.d.ts +1 -1
  303. package/dist/elements/popover/popover.d.ts.map +1 -1
  304. package/dist/elements/popover/popover.js +33 -33
  305. package/dist/elements/rating/index.d.ts +2 -2
  306. package/dist/elements/rating/index.d.ts.map +1 -1
  307. package/dist/elements/rating/index.js +2 -2
  308. package/dist/elements/rating/rating.d.ts +1 -1
  309. package/dist/elements/rating/rating.d.ts.map +1 -1
  310. package/dist/elements/rating/rating.js +48 -48
  311. package/dist/elements/skeleton/index.d.ts +2 -2
  312. package/dist/elements/skeleton/index.d.ts.map +1 -1
  313. package/dist/elements/skeleton/index.js +2 -2
  314. package/dist/elements/skeleton/skeleton.d.ts +1 -1
  315. package/dist/elements/skeleton/skeleton.d.ts.map +1 -1
  316. package/dist/elements/skeleton/skeleton.js +1 -1
  317. package/dist/elements/spinner/index.d.ts +2 -2
  318. package/dist/elements/spinner/index.d.ts.map +1 -1
  319. package/dist/elements/spinner/index.js +2 -2
  320. package/dist/elements/spinner/spinner.d.ts +1 -1
  321. package/dist/elements/spinner/spinner.d.ts.map +1 -1
  322. package/dist/elements/spinner/spinner.js +2 -2
  323. package/dist/elements/sticky-bar/index.d.ts +8 -0
  324. package/dist/elements/sticky-bar/index.d.ts.map +1 -0
  325. package/dist/elements/sticky-bar/index.js +4 -0
  326. package/dist/elements/sticky-bar/sticky-bar.css +56 -0
  327. package/dist/elements/sticky-bar/sticky-bar.d.ts +46 -0
  328. package/dist/elements/sticky-bar/sticky-bar.d.ts.map +1 -0
  329. package/dist/elements/sticky-bar/sticky-bar.js +146 -0
  330. package/dist/elements/stories/index.d.ts +8 -0
  331. package/dist/elements/stories/index.d.ts.map +1 -0
  332. package/dist/elements/stories/index.js +4 -0
  333. package/dist/elements/stories/stories.d.ts +50 -0
  334. package/dist/elements/stories/stories.d.ts.map +1 -0
  335. package/dist/elements/stories/stories.js +113 -0
  336. package/dist/elements/stories-viewer/index.d.ts +8 -0
  337. package/dist/elements/stories-viewer/index.d.ts.map +1 -0
  338. package/dist/elements/stories-viewer/index.js +4 -0
  339. package/dist/elements/stories-viewer/stories-viewer.css +337 -0
  340. package/dist/elements/stories-viewer/stories-viewer.d.ts +136 -0
  341. package/dist/elements/stories-viewer/stories-viewer.d.ts.map +1 -0
  342. package/dist/elements/stories-viewer/stories-viewer.js +719 -0
  343. package/dist/elements/story/index.d.ts +8 -0
  344. package/dist/elements/story/index.d.ts.map +1 -0
  345. package/dist/elements/story/index.js +4 -0
  346. package/dist/elements/story/story.d.ts +48 -0
  347. package/dist/elements/story/story.d.ts.map +1 -0
  348. package/dist/elements/story/story.js +161 -0
  349. package/dist/elements/tabs/index.d.ts +2 -2
  350. package/dist/elements/tabs/index.d.ts.map +1 -1
  351. package/dist/elements/tabs/index.js +2 -2
  352. package/dist/elements/tabs/tabs.d.ts +1 -1
  353. package/dist/elements/tabs/tabs.d.ts.map +1 -1
  354. package/dist/elements/tabs/tabs.js +5 -5
  355. package/dist/elements/toast/index.d.ts +3 -3
  356. package/dist/elements/toast/index.d.ts.map +1 -1
  357. package/dist/elements/toast/index.js +3 -3
  358. package/dist/elements/toast/toast.d.ts +2 -2
  359. package/dist/elements/toast/toast.d.ts.map +1 -1
  360. package/dist/elements/toast/toast.js +5 -5
  361. package/dist/elements/tooltip/index.d.ts +2 -2
  362. package/dist/elements/tooltip/index.d.ts.map +1 -1
  363. package/dist/elements/tooltip/index.js +2 -2
  364. package/dist/elements/tooltip/tooltip.css +15 -7
  365. package/dist/elements/tooltip/tooltip.d.ts +4 -4
  366. package/dist/elements/tooltip/tooltip.d.ts.map +1 -1
  367. package/dist/elements/tooltip/tooltip.js +32 -32
  368. package/dist/elements/tree/index.d.ts +2 -2
  369. package/dist/elements/tree/index.d.ts.map +1 -1
  370. package/dist/elements/tree/index.js +2 -2
  371. package/dist/elements/tree/tree.d.ts +5 -5
  372. package/dist/elements/tree/tree.d.ts.map +1 -1
  373. package/dist/elements/tree/tree.js +14 -16
  374. package/dist/elements/tree-item/index.d.ts +2 -2
  375. package/dist/elements/tree-item/index.d.ts.map +1 -1
  376. package/dist/elements/tree-item/index.js +2 -2
  377. package/dist/elements/tree-item/tree-item.d.ts +2 -2
  378. package/dist/elements/tree-item/tree-item.d.ts.map +1 -1
  379. package/dist/elements/tree-item/tree-item.js +28 -28
  380. package/dist/registry.d.ts +1 -1
  381. package/dist/registry.d.ts.map +1 -1
  382. package/dist/skills/luxen-ui/SKILL.md +1 -0
  383. package/dist/skills/luxen-ui/references/select.md +1 -1
  384. package/dist/skills/luxen-ui/references/sticky-bar.md +148 -0
  385. package/package.json +4 -4
@@ -52,6 +52,13 @@
52
52
  padding-inline: var(--spacing-2, 0.5rem);
53
53
  }
54
54
 
55
+ /* Compact form when slotted into <l-dropdown>: bleed to panel edges, tighten spacing. */
56
+ l-dropdown l-divider:not([orientation='vertical']) {
57
+ margin-block: var(--padding, 0.25rem);
58
+ margin-inline: calc(var(--padding, 0.25rem) * -1);
59
+ width: auto;
60
+ }
61
+
55
62
  /*
56
63
  ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
57
64
  vertical
@@ -1,6 +1,6 @@
1
1
  @layer components {
2
2
  .l-select {
3
- --radius: 4px;
3
+ --border-radius: 4px;
4
4
  --border-color: light-dark(var(--color-gray-200), var(--color-gray-800));
5
5
 
6
6
  &,
@@ -14,7 +14,7 @@
14
14
 
15
15
  &::picker(select) {
16
16
  border: 1px solid var(--border-color);
17
- border-radius: var(--radius);
17
+ border-radius: var(--border-radius);
18
18
  min-width: 180px;
19
19
  margin-block-start: 0.25rem;
20
20
  padding: 4px;
@@ -50,7 +50,7 @@
50
50
  padding-block: 6px;
51
51
  isolation: isolate;
52
52
  cursor: pointer;
53
- border-radius: var(--radius);
53
+ border-radius: var(--border-radius);
54
54
 
55
55
  &::checkmark {
56
56
  background-color: currentColor;
@@ -0,0 +1,63 @@
1
+ @layer components {
2
+ /*
3
+ ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
4
+ 🆂🆃🅾🆁🅸🅴🆂 (the row)
5
+ ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
6
+ */
7
+
8
+ l-stories {
9
+ /* Per-appearance defaults — each appearance overrides these below. */
10
+ --size: 80px;
11
+ --aspect-ratio: 1;
12
+ --radius: var(--radius-full);
13
+ --gap: 1rem;
14
+
15
+ --ring-color: var(--l-color-bg-fill-brand);
16
+ /* Same as `--ring-color` by default — no visual distinction for "seen" stories. Override `--ring-color-seen` (e.g. `color-mix(in oklab, var(--ring-color), transparent 65%)`) to fade viewed thumbnails Instagram-style. */
17
+ --ring-color-seen: var(--ring-color);
18
+ --ring-width: 2px;
19
+ /* Default 3 px gap between the image and the ring — matches the Instagram Stories pattern that consumers expect from this widget. Filled with `--ring-offset-color` (defaults to the page surface color). For pages with a non-default background, override `--ring-offset-color` to match. */
20
+ --ring-offset: 3px;
21
+ --ring-offset-color: var(--l-color-surface);
22
+ --label-color: var(--l-color-text-primary);
23
+
24
+ display: flex;
25
+ flex-wrap: nowrap;
26
+ gap: var(--gap);
27
+ /* The row itself has no overflow viewport — items stay flush at the edges and the focus ring is free to extend into the surrounding container's padding. Consumers wrap in a scroll container if they need horizontal scrolling. */
28
+
29
+ /* Squared appearance — no ring, no offset, image edge-to-edge. */
30
+ &[appearance='squared'] {
31
+ --size: 100px;
32
+ --radius: 0.75rem;
33
+ --ring-color: transparent;
34
+ --ring-width: 0;
35
+ --ring-offset: 0px;
36
+ }
37
+
38
+ /* Portrait card appearance (Image #19) — no ring, no offset. */
39
+ &[appearance='portrait'] {
40
+ --size: 160px;
41
+ --aspect-ratio: 9 / 16;
42
+ --radius: 1rem;
43
+ --ring-color: transparent;
44
+ --ring-width: 0;
45
+ --ring-offset: 0px;
46
+ }
47
+
48
+ /* Landscape appearance — no ring, no offset. */
49
+ &[appearance='landscape'] {
50
+ --size: 200px;
51
+ --aspect-ratio: 16 / 9;
52
+ --radius: 0.75rem;
53
+ --ring-color: transparent;
54
+ --ring-width: 0;
55
+ --ring-offset: 0px;
56
+ }
57
+ }
58
+
59
+ /* Hide labels when the row opts out. */
60
+ l-stories[with-labels='false'] l-story .l-story-label {
61
+ display: none;
62
+ }
63
+ }
@@ -0,0 +1,192 @@
1
+ @layer components {
2
+ /*
3
+ ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
4
+ 🆂🆃🅾🆁🆈 (a single thumbnail)
5
+ ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
6
+ */
7
+
8
+ l-story {
9
+ display: inline-flex;
10
+ flex: 0 0 auto;
11
+ scroll-snap-align: start;
12
+
13
+ /* Inherit row tokens; these can also be set directly per-story. */
14
+ --size: inherit;
15
+ --aspect-ratio: inherit;
16
+ --radius: inherit;
17
+ }
18
+
19
+ /* Slot-marked children of l-story are data (cta, header) carried by the story for the viewer to pick up. They must not render in the row. */
20
+ l-story > [slot] {
21
+ display: none;
22
+ }
23
+
24
+ .l-story-trigger {
25
+ display: flex;
26
+ flex-direction: column;
27
+ align-items: center;
28
+ gap: 0.5rem;
29
+ /* `--size` is the outer thumbnail diameter (image + ring + offset gap). The image inside is `--size − 2×(--ring-width + --ring-offset)`. Matches the convention of avatar/badge libraries: layout footprint stays fixed regardless of ring config. */
30
+ width: var(--size);
31
+ padding: 0;
32
+ border: 0;
33
+ background: transparent;
34
+ color: inherit;
35
+ font: inherit;
36
+ cursor: pointer;
37
+ text-align: center;
38
+ outline: none;
39
+ }
40
+
41
+ .l-story-thumb {
42
+ position: relative;
43
+ display: block;
44
+ width: 100%;
45
+ aspect-ratio: var(--aspect-ratio);
46
+ border-radius: var(--radius);
47
+ /* Multi-layer background composition (no pseudo-element):
48
+ - border-box layer: ring color (solid, linear-gradient, conic-gradient, image…)
49
+ - padding-box layer: gap color (a `linear-gradient` wrapper on the offset color so it's a valid background-image and works in non-final layers)
50
+ The image fills content-box and covers the inner area. */
51
+ border: var(--ring-width) solid transparent;
52
+ padding: var(--ring-offset);
53
+ box-sizing: border-box;
54
+ background:
55
+ linear-gradient(var(--ring-offset-color), var(--ring-offset-color)) padding-box,
56
+ var(--ring-color) border-box;
57
+ transition: transform 150ms cubic-bezier(0.44, 0.36, 0.04, 1);
58
+ isolation: isolate;
59
+ }
60
+
61
+ l-story[seen] .l-story-thumb {
62
+ --ring-color: var(--ring-color-seen);
63
+ }
64
+
65
+ /* Focus ring hugs the thumbnail shape (circle, portrait, etc.) — label stays outside the ring. */
66
+ .l-story-trigger:focus-visible .l-story-thumb {
67
+ outline: 2px solid var(--l-focus-ring);
68
+ outline-offset: 3px;
69
+ }
70
+
71
+ .l-story-trigger:hover .l-story-thumb {
72
+ transform: scale(1.03);
73
+ }
74
+
75
+ .l-story-thumb img,
76
+ .l-story-thumb video {
77
+ position: absolute;
78
+ /* Inset by the offset to position the image in the thumb's content-box, leaving the padding visible as the gap. */
79
+ inset: var(--ring-offset);
80
+ width: calc(100% - 2 * var(--ring-offset));
81
+ height: calc(100% - 2 * var(--ring-offset));
82
+ object-fit: cover;
83
+ border-radius: inherit;
84
+ }
85
+
86
+ .l-story-play {
87
+ position: absolute;
88
+ inset: 0;
89
+ z-index: 1;
90
+ display: grid;
91
+ place-items: center;
92
+
93
+ & l-icon {
94
+ display: grid;
95
+ place-items: center;
96
+ width: clamp(24px, 28%, 36px);
97
+ aspect-ratio: 1;
98
+ border-radius: 999px;
99
+ background: rgb(0 0 0 / 35%);
100
+ color: white;
101
+ font-size: clamp(14px, 18%, 22px);
102
+ }
103
+ }
104
+
105
+ .l-story-label {
106
+ display: block;
107
+ width: 100%;
108
+ color: var(--label-color);
109
+ font-size: 0.8125rem;
110
+ font-weight: 500;
111
+ line-height: 1.2;
112
+ /* Wrap onto multiple lines, centered. `text-wrap: balance` evens out the line lengths (e.g. "Questions / fréquentes" instead of "Questions fréquentes / "). */
113
+ text-align: center;
114
+ text-wrap: balance;
115
+ }
116
+
117
+ /*
118
+ ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
119
+ 🅿🆄🅻🆂🅴 (attention halo + breathing scale on the thumbnail)
120
+ ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
121
+ */
122
+
123
+ l-story[pulse] {
124
+ /* Local pulse customization knobs. */
125
+ --pulse-color: var(--l-color-bg-fill-brand);
126
+ --pulse-spread: 12px;
127
+ --pulse-duration: 1.6s;
128
+ }
129
+
130
+ l-story[pulse] .l-story-thumb {
131
+ animation: l-story-pulse-thumb var(--pulse-duration) ease-in-out infinite;
132
+ }
133
+
134
+ /* Halo expands outward and fades. Matches the thumb shape via inherited radius. */
135
+ l-story[pulse] .l-story-thumb::after {
136
+ content: '';
137
+ position: absolute;
138
+ inset: 0;
139
+ border-radius: inherit;
140
+ pointer-events: none;
141
+ animation: l-story-pulse-halo var(--pulse-duration) cubic-bezier(0.4, 0, 0.6, 1) infinite;
142
+ }
143
+
144
+ /* On hover, freeze the breathing animation and use the regular hover scale so the two motions don't compound. */
145
+ l-story[pulse] .l-story-trigger:hover .l-story-thumb {
146
+ animation-play-state: paused;
147
+ transform: scale(1.05);
148
+ }
149
+ l-story[pulse] .l-story-trigger:hover .l-story-thumb::after {
150
+ animation-play-state: paused;
151
+ box-shadow: none;
152
+ }
153
+
154
+ @keyframes l-story-pulse-thumb {
155
+ 0%,
156
+ 100% {
157
+ transform: scale(1);
158
+ }
159
+ 50% {
160
+ transform: scale(1.04);
161
+ }
162
+ }
163
+
164
+ @keyframes l-story-pulse-halo {
165
+ 0% {
166
+ box-shadow: 0 0 0 0 var(--pulse-color);
167
+ opacity: 1;
168
+ }
169
+ 70% {
170
+ box-shadow: 0 0 0 var(--pulse-spread) var(--pulse-color);
171
+ opacity: 0;
172
+ }
173
+ 100% {
174
+ box-shadow: 0 0 0 var(--pulse-spread) var(--pulse-color);
175
+ opacity: 0;
176
+ }
177
+ }
178
+
179
+ /* Reduced motion */
180
+ @media (prefers-reduced-motion: reduce) {
181
+ .l-story-thumb {
182
+ transition: none;
183
+ }
184
+ .l-story-trigger:hover .l-story-thumb {
185
+ transform: none;
186
+ }
187
+ l-story[pulse] .l-story-thumb,
188
+ l-story[pulse] .l-story-thumb::after {
189
+ animation: none;
190
+ }
191
+ }
192
+ }
@@ -767,6 +767,9 @@ In dark mode, mixes the base color with black (default 15% black).
767
767
  /* Semi-transparent backdrop behind modals, dialogs, drawers, and any overlay that dims the page content. Darker in dark mode for better contrast against dark surfaces. */
768
768
  --l-backdrop: light-dark(oklch(46% 0.01 260 / 33%), oklch(15% 0.01 260 / 60%));
769
769
 
770
+ /* Stronger backdrop for immersive overlays where the underlying page should fade well into the background — media viewers (`<l-stories-viewer>`), lightboxes, and full-screen players. The page stays barely perceptible but visual focus is unambiguously on the foreground. */
771
+ --l-backdrop-strong: light-dark(oklch(15% 0.01 260 / 78%), oklch(5% 0 0 / 88%));
772
+
770
773
  /* Default border for form controls, secondary buttons, inputs, selects, and any element that needs a thin neutral outline. Visible enough to delimit the element without competing with surrounding content. */
771
774
  --l-color-border: light-dark(var(--color-gray-300), var(--color-gray-600));
772
775
 
@@ -52,6 +52,13 @@
52
52
  padding-inline: var(--spacing-2, 0.5rem);
53
53
  }
54
54
 
55
+ /* Compact form when slotted into <l-dropdown>: bleed to panel edges, tighten spacing. */
56
+ l-dropdown l-divider:not([orientation='vertical']) {
57
+ margin-block: var(--padding, 0.25rem);
58
+ margin-inline: calc(var(--padding, 0.25rem) * -1);
59
+ width: auto;
60
+ }
61
+
55
62
  /*
56
63
  ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
57
64
  vertical
@@ -1,6 +1,6 @@
1
1
  @layer components {
2
2
  .l-select {
3
- --radius: 4px;
3
+ --border-radius: 4px;
4
4
  --border-color: light-dark(var(--color-gray-200), var(--color-gray-800));
5
5
 
6
6
  &,
@@ -14,7 +14,7 @@
14
14
 
15
15
  &::picker(select) {
16
16
  border: 1px solid var(--border-color);
17
- border-radius: var(--radius);
17
+ border-radius: var(--border-radius);
18
18
  min-width: 180px;
19
19
  margin-block-start: 0.25rem;
20
20
  padding: 4px;
@@ -50,7 +50,7 @@
50
50
  padding-block: 6px;
51
51
  isolation: isolate;
52
52
  cursor: pointer;
53
- border-radius: var(--radius);
53
+ border-radius: var(--border-radius);
54
54
 
55
55
  &::checkmark {
56
56
  background-color: currentColor;
@@ -0,0 +1,63 @@
1
+ @layer components {
2
+ /*
3
+ ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
4
+ 🆂🆃🅾🆁🅸🅴🆂 (the row)
5
+ ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
6
+ */
7
+
8
+ l-stories {
9
+ /* Per-appearance defaults — each appearance overrides these below. */
10
+ --size: 80px;
11
+ --aspect-ratio: 1;
12
+ --radius: var(--radius-full);
13
+ --gap: 1rem;
14
+
15
+ --ring-color: var(--l-color-bg-fill-brand);
16
+ /* Same as `--ring-color` by default — no visual distinction for "seen" stories. Override `--ring-color-seen` (e.g. `color-mix(in oklab, var(--ring-color), transparent 65%)`) to fade viewed thumbnails Instagram-style. */
17
+ --ring-color-seen: var(--ring-color);
18
+ --ring-width: 2px;
19
+ /* Default 3 px gap between the image and the ring — matches the Instagram Stories pattern that consumers expect from this widget. Filled with `--ring-offset-color` (defaults to the page surface color). For pages with a non-default background, override `--ring-offset-color` to match. */
20
+ --ring-offset: 3px;
21
+ --ring-offset-color: var(--l-color-surface);
22
+ --label-color: var(--l-color-text-primary);
23
+
24
+ display: flex;
25
+ flex-wrap: nowrap;
26
+ gap: var(--gap);
27
+ /* The row itself has no overflow viewport — items stay flush at the edges and the focus ring is free to extend into the surrounding container's padding. Consumers wrap in a scroll container if they need horizontal scrolling. */
28
+
29
+ /* Squared appearance — no ring, no offset, image edge-to-edge. */
30
+ &[appearance='squared'] {
31
+ --size: 100px;
32
+ --radius: 0.75rem;
33
+ --ring-color: transparent;
34
+ --ring-width: 0;
35
+ --ring-offset: 0px;
36
+ }
37
+
38
+ /* Portrait card appearance (Image #19) — no ring, no offset. */
39
+ &[appearance='portrait'] {
40
+ --size: 160px;
41
+ --aspect-ratio: 9 / 16;
42
+ --radius: 1rem;
43
+ --ring-color: transparent;
44
+ --ring-width: 0;
45
+ --ring-offset: 0px;
46
+ }
47
+
48
+ /* Landscape appearance — no ring, no offset. */
49
+ &[appearance='landscape'] {
50
+ --size: 200px;
51
+ --aspect-ratio: 16 / 9;
52
+ --radius: 0.75rem;
53
+ --ring-color: transparent;
54
+ --ring-width: 0;
55
+ --ring-offset: 0px;
56
+ }
57
+ }
58
+
59
+ /* Hide labels when the row opts out. */
60
+ l-stories[with-labels='false'] l-story .l-story-label {
61
+ display: none;
62
+ }
63
+ }
@@ -0,0 +1,192 @@
1
+ @layer components {
2
+ /*
3
+ ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
4
+ 🆂🆃🅾🆁🆈 (a single thumbnail)
5
+ ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
6
+ */
7
+
8
+ l-story {
9
+ display: inline-flex;
10
+ flex: 0 0 auto;
11
+ scroll-snap-align: start;
12
+
13
+ /* Inherit row tokens; these can also be set directly per-story. */
14
+ --size: inherit;
15
+ --aspect-ratio: inherit;
16
+ --radius: inherit;
17
+ }
18
+
19
+ /* Slot-marked children of l-story are data (cta, header) carried by the story for the viewer to pick up. They must not render in the row. */
20
+ l-story > [slot] {
21
+ display: none;
22
+ }
23
+
24
+ .l-story-trigger {
25
+ display: flex;
26
+ flex-direction: column;
27
+ align-items: center;
28
+ gap: 0.5rem;
29
+ /* `--size` is the outer thumbnail diameter (image + ring + offset gap). The image inside is `--size − 2×(--ring-width + --ring-offset)`. Matches the convention of avatar/badge libraries: layout footprint stays fixed regardless of ring config. */
30
+ width: var(--size);
31
+ padding: 0;
32
+ border: 0;
33
+ background: transparent;
34
+ color: inherit;
35
+ font: inherit;
36
+ cursor: pointer;
37
+ text-align: center;
38
+ outline: none;
39
+ }
40
+
41
+ .l-story-thumb {
42
+ position: relative;
43
+ display: block;
44
+ width: 100%;
45
+ aspect-ratio: var(--aspect-ratio);
46
+ border-radius: var(--radius);
47
+ /* Multi-layer background composition (no pseudo-element):
48
+ - border-box layer: ring color (solid, linear-gradient, conic-gradient, image…)
49
+ - padding-box layer: gap color (a `linear-gradient` wrapper on the offset color so it's a valid background-image and works in non-final layers)
50
+ The image fills content-box and covers the inner area. */
51
+ border: var(--ring-width) solid transparent;
52
+ padding: var(--ring-offset);
53
+ box-sizing: border-box;
54
+ background:
55
+ linear-gradient(var(--ring-offset-color), var(--ring-offset-color)) padding-box,
56
+ var(--ring-color) border-box;
57
+ transition: transform 150ms cubic-bezier(0.44, 0.36, 0.04, 1);
58
+ isolation: isolate;
59
+ }
60
+
61
+ l-story[seen] .l-story-thumb {
62
+ --ring-color: var(--ring-color-seen);
63
+ }
64
+
65
+ /* Focus ring hugs the thumbnail shape (circle, portrait, etc.) — label stays outside the ring. */
66
+ .l-story-trigger:focus-visible .l-story-thumb {
67
+ outline: 2px solid var(--l-focus-ring);
68
+ outline-offset: 3px;
69
+ }
70
+
71
+ .l-story-trigger:hover .l-story-thumb {
72
+ transform: scale(1.03);
73
+ }
74
+
75
+ .l-story-thumb img,
76
+ .l-story-thumb video {
77
+ position: absolute;
78
+ /* Inset by the offset to position the image in the thumb's content-box, leaving the padding visible as the gap. */
79
+ inset: var(--ring-offset);
80
+ width: calc(100% - 2 * var(--ring-offset));
81
+ height: calc(100% - 2 * var(--ring-offset));
82
+ object-fit: cover;
83
+ border-radius: inherit;
84
+ }
85
+
86
+ .l-story-play {
87
+ position: absolute;
88
+ inset: 0;
89
+ z-index: 1;
90
+ display: grid;
91
+ place-items: center;
92
+
93
+ & l-icon {
94
+ display: grid;
95
+ place-items: center;
96
+ width: clamp(24px, 28%, 36px);
97
+ aspect-ratio: 1;
98
+ border-radius: 999px;
99
+ background: rgb(0 0 0 / 35%);
100
+ color: white;
101
+ font-size: clamp(14px, 18%, 22px);
102
+ }
103
+ }
104
+
105
+ .l-story-label {
106
+ display: block;
107
+ width: 100%;
108
+ color: var(--label-color);
109
+ font-size: 0.8125rem;
110
+ font-weight: 500;
111
+ line-height: 1.2;
112
+ /* Wrap onto multiple lines, centered. `text-wrap: balance` evens out the line lengths (e.g. "Questions / fréquentes" instead of "Questions fréquentes / "). */
113
+ text-align: center;
114
+ text-wrap: balance;
115
+ }
116
+
117
+ /*
118
+ ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
119
+ 🅿🆄🅻🆂🅴 (attention halo + breathing scale on the thumbnail)
120
+ ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
121
+ */
122
+
123
+ l-story[pulse] {
124
+ /* Local pulse customization knobs. */
125
+ --pulse-color: var(--l-color-bg-fill-brand);
126
+ --pulse-spread: 12px;
127
+ --pulse-duration: 1.6s;
128
+ }
129
+
130
+ l-story[pulse] .l-story-thumb {
131
+ animation: l-story-pulse-thumb var(--pulse-duration) ease-in-out infinite;
132
+ }
133
+
134
+ /* Halo expands outward and fades. Matches the thumb shape via inherited radius. */
135
+ l-story[pulse] .l-story-thumb::after {
136
+ content: '';
137
+ position: absolute;
138
+ inset: 0;
139
+ border-radius: inherit;
140
+ pointer-events: none;
141
+ animation: l-story-pulse-halo var(--pulse-duration) cubic-bezier(0.4, 0, 0.6, 1) infinite;
142
+ }
143
+
144
+ /* On hover, freeze the breathing animation and use the regular hover scale so the two motions don't compound. */
145
+ l-story[pulse] .l-story-trigger:hover .l-story-thumb {
146
+ animation-play-state: paused;
147
+ transform: scale(1.05);
148
+ }
149
+ l-story[pulse] .l-story-trigger:hover .l-story-thumb::after {
150
+ animation-play-state: paused;
151
+ box-shadow: none;
152
+ }
153
+
154
+ @keyframes l-story-pulse-thumb {
155
+ 0%,
156
+ 100% {
157
+ transform: scale(1);
158
+ }
159
+ 50% {
160
+ transform: scale(1.04);
161
+ }
162
+ }
163
+
164
+ @keyframes l-story-pulse-halo {
165
+ 0% {
166
+ box-shadow: 0 0 0 0 var(--pulse-color);
167
+ opacity: 1;
168
+ }
169
+ 70% {
170
+ box-shadow: 0 0 0 var(--pulse-spread) var(--pulse-color);
171
+ opacity: 0;
172
+ }
173
+ 100% {
174
+ box-shadow: 0 0 0 var(--pulse-spread) var(--pulse-color);
175
+ opacity: 0;
176
+ }
177
+ }
178
+
179
+ /* Reduced motion */
180
+ @media (prefers-reduced-motion: reduce) {
181
+ .l-story-thumb {
182
+ transition: none;
183
+ }
184
+ .l-story-trigger:hover .l-story-thumb {
185
+ transform: none;
186
+ }
187
+ l-story[pulse] .l-story-thumb,
188
+ l-story[pulse] .l-story-thumb::after {
189
+ animation: none;
190
+ }
191
+ }
192
+ }
@@ -767,6 +767,9 @@ In dark mode, mixes the base color with black (default 15% black).
767
767
  /* Semi-transparent backdrop behind modals, dialogs, drawers, and any overlay that dims the page content. Darker in dark mode for better contrast against dark surfaces. */
768
768
  --l-backdrop: light-dark(oklch(46% 0.01 260 / 33%), oklch(15% 0.01 260 / 60%));
769
769
 
770
+ /* Stronger backdrop for immersive overlays where the underlying page should fade well into the background — media viewers (`<l-stories-viewer>`), lightboxes, and full-screen players. The page stays barely perceptible but visual focus is unambiguously on the foreground. */
771
+ --l-backdrop-strong: light-dark(oklch(15% 0.01 260 / 78%), oklch(5% 0 0 / 88%));
772
+
770
773
  /* Default border for form controls, secondary buttons, inputs, selects, and any element that needs a thin neutral outline. Visible enough to delimit the element without competing with surrounding content. */
771
774
  --l-color-border: light-dark(var(--color-gray-300), var(--color-gray-600));
772
775