@mkbabb/glass-ui 3.12.0 → 4.0.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 (436) hide show
  1. package/dist/CardAction-XH4YBVEK.js +158 -0
  2. package/dist/{CommandShortcut-CefCj5mt.js → CommandShortcut-DdtWXxOK.js} +58 -53
  3. package/dist/{ContextMenuSubContent-Bhg4f5jX.js → ContextMenuSubContent-B0Vs6atR.js} +4 -4
  4. package/dist/{DataTable-CUHMukiQ.js → DataTable-C464Zbqd.js} +99 -97
  5. package/dist/DialogContent-DDE6pQBU.js +103 -0
  6. package/dist/{DialogFooter-Gprw8H_A.js → DialogFooter-8eZbdmPc.js} +2 -2
  7. package/dist/FadingScroll-DwNnvKMs.js +76 -0
  8. package/dist/{HoverPopover-2LOIW34a.js → HoverPopover-Dpzwvc4t.js} +1 -1
  9. package/dist/IconChip-BDw1j5mu.js +54 -0
  10. package/dist/{IconTooltip-Cus0fvK0.js → IconTooltip-DSjasZIt.js} +1 -1
  11. package/dist/MetricBadge-BpC0R_Ec.js +79 -0
  12. package/dist/{Notification-DLMhblXR.js → Notification-DKjKsQq8.js} +10 -10
  13. package/dist/{NumberFieldContent-BbLOh8RU.js → NumberFieldContent-1VtwDSgf.js} +3 -3
  14. package/dist/PopoverContent-BTorlp--.js +127 -0
  15. package/dist/{Progress-iEuD9pxG.js → Progress-hAT4gqGH.js} +97 -77
  16. package/dist/{ScrollingText-BPP84wKo.js → ScrollingText-CUVFTWk2.js} +2 -2
  17. package/dist/{SelectScrollDownButton-T32cVFeM.js → SelectScrollDownButton-C1jb3b3K.js} +24 -8
  18. package/dist/{Switch-Ch-k3Rv-.js → Switch-Dr--uLGH.js} +2 -2
  19. package/dist/{Toaster-1rYWrmAm.js → Toaster-Bm_HQSpc.js} +55 -52
  20. package/dist/{ToggleGroupItem-COu_4IW4.js → ToggleGroupItem-Dzk9hWsF.js} +18 -22
  21. package/dist/animated-digit.js +3 -3
  22. package/dist/api/index.d.ts +10 -4
  23. package/dist/api.js +1 -1
  24. package/dist/aurora.js +113 -98
  25. package/dist/{badge-CaoFJzRb.js → badge-UILT_3pZ.js} +1 -1
  26. package/dist/badge.js +1 -1
  27. package/dist/{button-DN39cGqL.js → button-BNDWhAZb.js} +12 -12
  28. package/dist/button.js +1 -1
  29. package/dist/card.js +1 -1
  30. package/dist/carousel.d.ts +1 -1
  31. package/dist/carousel.js +101 -145
  32. package/dist/{check-BBKKKSTf.js → check-njhk-vfu.js} +1 -1
  33. package/dist/{chevron-down-BSkTP2aL.js → chevron-down-DKkxb4VV.js} +1 -1
  34. package/dist/{chevron-right-sDM0Yvrf.js → chevron-right-CPXbqQQz.js} +1 -1
  35. package/dist/{chevron-up-CCOD_FTz.js → chevron-up-n_24SqI-.js} +1 -1
  36. package/dist/coalesceMetric-5qIeZnTx.js +13 -0
  37. package/dist/collapsible.js +1 -1
  38. package/dist/{color-C5ls_QF7.js → color-DweYl7pE.js} +9 -7
  39. package/dist/color-swatch.d.ts +1 -0
  40. package/dist/color-swatch.js +47 -0
  41. package/dist/color.js +1 -1
  42. package/dist/command.js +1 -1
  43. package/dist/components/custom/animated-digit/AnimatedDigit.vue.d.ts +8 -0
  44. package/dist/components/custom/aurora/constants/presets.d.ts +16 -45
  45. package/dist/components/custom/aurora/constants/renderMode.d.ts +2 -0
  46. package/dist/components/custom/aurora/constants/shaders/mediums.glsl.d.ts +1 -1
  47. package/dist/components/custom/aurora/constants/shaders/vangogh-medium.glsl.d.ts +1 -0
  48. package/dist/components/custom/color-swatch/ColorSwatch.vue.d.ts +22 -0
  49. package/dist/components/custom/color-swatch/index.d.ts +1 -0
  50. package/dist/components/custom/configurator/Configurator.vue.d.ts +19 -8
  51. package/dist/components/custom/configurator/ConfiguratorRow.vue.d.ts +16 -0
  52. package/dist/components/custom/constellation/Constellation.vue.d.ts +23 -143
  53. package/dist/components/custom/constellation/composables/createConstellationField.d.ts +41 -0
  54. package/dist/components/custom/constellation/composables/useConstellation.d.ts +26 -0
  55. package/dist/components/custom/constellation/composables/useConstellationPointer.d.ts +35 -0
  56. package/dist/components/custom/constellation/constants.d.ts +61 -0
  57. package/dist/components/custom/constellation/constellationDraw.d.ts +30 -0
  58. package/dist/components/custom/constellation/constellationField.d.ts +3 -403
  59. package/dist/components/custom/constellation/constellationInteraction.d.ts +132 -0
  60. package/dist/components/custom/constellation/constellationTypes.d.ts +369 -0
  61. package/dist/components/custom/constellation/index.d.ts +5 -2
  62. package/dist/components/custom/controls/DarkModeToggle.vue.d.ts +11 -0
  63. package/dist/components/custom/dock/DockRail.vue.d.ts +89 -0
  64. package/dist/components/custom/dock/DockSection.vue.d.ts +69 -0
  65. package/dist/components/custom/dock/DockSeparator.vue.d.ts +49 -1
  66. package/dist/components/custom/dock/DockTabButton.vue.d.ts +5 -6
  67. package/dist/components/custom/dock/GlassDock.vue.d.ts +5 -118
  68. package/dist/components/custom/dock/composables/dockMorphContext.d.ts +36 -0
  69. package/dist/components/custom/dock/composables/index.d.ts +1 -0
  70. package/dist/components/custom/dock/composables/useDockClickIntegrity.d.ts +23 -0
  71. package/dist/components/custom/dock/composables/useDockMorphWindow.d.ts +15 -0
  72. package/dist/components/custom/dock/composables/useDockOrientationMorph.d.ts +44 -0
  73. package/dist/components/custom/dock/composables/useDockShellProps.d.ts +165 -0
  74. package/dist/components/custom/dock/composables/useLayerTransition.d.ts +44 -0
  75. package/dist/components/custom/dock/constants.d.ts +83 -0
  76. package/dist/components/custom/dock/index.d.ts +5 -0
  77. package/dist/components/custom/expandable-container/ExpandableContainer.vue.d.ts +15 -37
  78. package/dist/components/custom/fading-scroll/FadingScroll.vue.d.ts +25 -0
  79. package/dist/components/custom/fading-scroll/composables/useFadingScroll.d.ts +31 -0
  80. package/dist/components/custom/fading-scroll/constants.d.ts +19 -0
  81. package/dist/components/custom/fading-scroll/index.d.ts +2 -0
  82. package/dist/components/custom/fourier-field/FourierField.vue.d.ts +7 -0
  83. package/dist/components/custom/fourier-field/index.d.ts +1 -1
  84. package/dist/components/custom/fourier-field/math.d.ts +34 -0
  85. package/dist/components/custom/fourier-field/presets.d.ts +54 -0
  86. package/dist/components/custom/glass-panel/GlassPanel.vue.d.ts +8 -0
  87. package/dist/components/custom/goo-blob/composables/buildMetaballProgram.d.ts +18 -0
  88. package/dist/components/custom/goo-blob/composables/uploadBlobUniforms.d.ts +41 -0
  89. package/dist/components/custom/goo-blob/composables/useBlobPointer.d.ts +4 -3
  90. package/dist/components/custom/goo-blob/composables/useMetaballRenderer.d.ts +21 -8
  91. package/dist/components/custom/goo-blob/constants.d.ts +57 -0
  92. package/dist/components/custom/goo-blob/shaders/metaball-uniforms.glsl.d.ts +1 -0
  93. package/dist/components/custom/handmark/brush.d.ts +33 -6
  94. package/dist/components/custom/handmark/{useHandMark.d.ts → composables/useHandMark.d.ts} +6 -4
  95. package/dist/components/custom/handmark/constants.d.ts +39 -0
  96. package/dist/components/custom/handmark/geometry.d.ts +14 -12
  97. package/dist/components/custom/handmark/index.d.ts +8 -2
  98. package/dist/components/custom/handmark/types.d.ts +9 -0
  99. package/dist/components/custom/icon-chip/IconChip.vue.d.ts +4 -0
  100. package/dist/components/custom/icon-chip/index.d.ts +2 -0
  101. package/dist/components/custom/icon-chip/types.d.ts +72 -0
  102. package/dist/components/custom/instrument-chassis/InstrumentChassis.vue.d.ts +17 -4
  103. package/dist/components/custom/labeled-field/LabeledField.vue.d.ts +37 -0
  104. package/dist/components/custom/labeled-field/LabeledSelect.vue.d.ts +6 -0
  105. package/dist/components/custom/labeled-field/LabeledSlider.vue.d.ts +6 -0
  106. package/dist/components/custom/labeled-field/LabeledSwitch.vue.d.ts +6 -0
  107. package/dist/components/custom/metric-badge/MetricBadge.vue.d.ts +11 -18
  108. package/dist/components/custom/metric-badge/index.d.ts +1 -0
  109. package/dist/components/custom/metric-cell/MetricCell.vue.d.ts +15 -4
  110. package/dist/components/custom/metric-stack/MetricRow.vue.d.ts +6 -4
  111. package/dist/components/custom/pager-dots/PagerDots.vue.d.ts +39 -0
  112. package/dist/components/custom/pager-dots/index.d.ts +2 -0
  113. package/dist/components/custom/tabs/SegmentedTabs.vue.d.ts +20 -25
  114. package/dist/components/custom/tabs/composables/useTabIndicator.d.ts +30 -21
  115. package/dist/components/custom/tabs/constants.d.ts +18 -0
  116. package/dist/components/custom/tabs/index.d.ts +1 -1
  117. package/dist/components/custom/watercolor-dot/WatercolorDot.vue.d.ts +14 -0
  118. package/dist/components/ui/_shared/index.d.ts +2 -0
  119. package/dist/components/ui/_shared/menuItemVariants.d.ts +19 -0
  120. package/dist/components/ui/_shared/useSurfaceAxis.d.ts +41 -0
  121. package/dist/components/ui/card/Card.vue.d.ts +16 -4
  122. package/dist/components/ui/carousel/index.d.ts +0 -1
  123. package/dist/components/ui/command/Command.vue.d.ts +3 -0
  124. package/dist/components/ui/dialog/DialogContent.vue.d.ts +8 -3
  125. package/dist/components/ui/drawer/Drawer.vue.d.ts +1 -0
  126. package/dist/components/ui/drawer/DrawerContent.vue.d.ts +5 -0
  127. package/dist/components/ui/dropdown-menu/DropdownMenuSubContent.vue.d.ts +2 -2
  128. package/dist/components/ui/index.d.ts +0 -1
  129. package/dist/components/ui/metric-pill/MetricPill.vue.d.ts +6 -3
  130. package/dist/components/ui/popover/PopoverContent.vue.d.ts +3 -0
  131. package/dist/components/ui/progress/ProgressSectioned.vue.d.ts +14 -3
  132. package/dist/components/ui/select/SelectTrigger.vue.d.ts +27 -4
  133. package/dist/components/ui/sheet/SheetContent.vue.d.ts +6 -0
  134. package/dist/components/ui/skeleton/Skeleton.vue.d.ts +3 -0
  135. package/dist/components/ui/slider/index.d.ts +22 -19
  136. package/dist/components/ui/tabs/TabsIndicator.vue.d.ts +4 -1
  137. package/dist/components/ui/toast/use-toast.d.ts +2 -2
  138. package/dist/components/ui/toggle/Toggle.vue.d.ts +1 -1
  139. package/dist/components/ui/toggle/index.d.ts +1 -1
  140. package/dist/components/ui/toggle-group/ToggleGroup.vue.d.ts +1 -7
  141. package/dist/components/ui/toggle-group/ToggleGroupItem.vue.d.ts +1 -3
  142. package/dist/components/ui/toggle-group/toggleGroupContext.d.ts +0 -13
  143. package/dist/composables/color/index.d.ts +12 -0
  144. package/dist/composables/dark/useGlobalDark.d.ts +14 -12
  145. package/dist/composables/glass/index.d.ts +0 -1
  146. package/dist/composables/glass/useGlassBackdropLuminance.d.ts +59 -0
  147. package/dist/composables/glass/useSpecularTracking.d.ts +12 -3
  148. package/dist/composables/motion/core/index.d.ts +1 -1
  149. package/dist/composables/motion/curves.d.ts +48 -0
  150. package/dist/composables/motion/index.d.ts +2 -0
  151. package/dist/composables/motion/springPresets.d.ts +33 -0
  152. package/dist/composables/motion/suite.d.ts +2 -0
  153. package/dist/composables/motion/useLiquidFlex.d.ts +85 -0
  154. package/dist/composables/motion/useSpringMount.d.ts +1 -1
  155. package/dist/composables/motion/useViewTransition.d.ts +36 -1
  156. package/dist/configurator.js +1 -1
  157. package/dist/confirm-dialog.js +3 -3
  158. package/dist/constellation.js +373 -261
  159. package/dist/context-menu.js +2 -2
  160. package/dist/controls.js +48 -14
  161. package/dist/dark.js +1 -1
  162. package/dist/data-table.js +1 -1
  163. package/dist/dialog.js +2 -2
  164. package/dist/dock.js +901 -372
  165. package/dist/dockContext-Bu1Avy-a.js +17 -0
  166. package/dist/dom.js +5 -5
  167. package/dist/{dropdown-menu-D77jX6Df.js → dropdown-menu-BJ7E9js_.js} +11 -8
  168. package/dist/dropdown-menu.js +1 -1
  169. package/dist/expandable-container.js +44 -81
  170. package/dist/fading-scroll.d.ts +1 -0
  171. package/dist/fading-scroll.js +2 -0
  172. package/dist/forms.js +5 -5
  173. package/dist/fourier-field.js +140 -104
  174. package/dist/fourier-math.js +2 -2
  175. package/dist/glass-panel.js +90 -21
  176. package/dist/glass-ui.css +1 -1
  177. package/dist/glass-ui.js +230 -236
  178. package/dist/goo-blob.js +264 -228
  179. package/dist/handmark.js +203 -159
  180. package/dist/header-ribbon.js +1 -1
  181. package/dist/hover-card.js +1 -1
  182. package/dist/hover-popover.js +1 -1
  183. package/dist/icon-chip.d.ts +1 -0
  184. package/dist/icon-chip.js +2 -0
  185. package/dist/icon-tooltip.js +1 -1
  186. package/dist/index.d.ts +3 -5
  187. package/dist/instrument-chassis.js +1 -1
  188. package/dist/keyboard.js +1 -1
  189. package/dist/label.js +1 -1
  190. package/dist/labeled-field.js +28 -18
  191. package/dist/{math-DTpRVC0e.js → math-DeuJwLFx.js} +26 -2
  192. package/dist/{menuItemVariants-CCoBNkU5.js → menuItemVariants-DWRQXBxJ.js} +10 -4
  193. package/dist/metric-badge.js +1 -1
  194. package/dist/metric-cell.js +29 -22
  195. package/dist/metric-stack.js +35 -34
  196. package/dist/{minimize-2-lcXOuc6V.js → minimize-2-BV31Ob_h.js} +1 -1
  197. package/dist/motion-core.js +32 -136
  198. package/dist/motion-curves.d.ts +1 -0
  199. package/dist/motion-curves.js +130 -0
  200. package/dist/motion.js +38 -37
  201. package/dist/notification.js +1 -1
  202. package/dist/number-field.js +1 -1
  203. package/dist/pager-dots.d.ts +1 -0
  204. package/dist/pager-dots.js +91 -0
  205. package/dist/paper-backdrop.js +1 -1
  206. package/dist/popover.js +1 -1
  207. package/dist/progress.js +1 -1
  208. package/dist/pulse.js +1 -1
  209. package/dist/reactive.js +2 -2
  210. package/dist/scrolling-text.js +1 -1
  211. package/dist/{search-nbkvr2dC.js → search-BSGrf2Sk.js} +1 -1
  212. package/dist/search.js +10 -10
  213. package/dist/select.js +3 -3
  214. package/dist/separator.js +1 -1
  215. package/dist/sheet-CquRYOAw.js +218 -0
  216. package/dist/sheet.js +1 -1
  217. package/dist/{slider-ClgpP7EB.js → slider-DQ95MET2.js} +8 -8
  218. package/dist/slider.js +1 -1
  219. package/dist/sortable-list.js +3 -3
  220. package/dist/springPresets-WXaLbu8u.js +40 -0
  221. package/dist/stacked-icons.js +6 -6
  222. package/dist/styles/animations.css +25 -125
  223. package/dist/styles/cards.css +55 -0
  224. package/dist/styles/components.css +4 -1
  225. package/dist/styles/configurator.css +77 -0
  226. package/dist/styles/dock/density.css +19 -0
  227. package/dist/styles/dock/layer-group.css +83 -25
  228. package/dist/styles/dock/layers.css +23 -1
  229. package/dist/styles/dock/morph-bridge.css +123 -0
  230. package/dist/styles/dock/morph.css +175 -45
  231. package/dist/styles/dock/overflow.css +66 -1
  232. package/dist/styles/dock/rail-extend.css +397 -0
  233. package/dist/styles/dock/section.css +59 -0
  234. package/dist/styles/dock/shell.css +97 -110
  235. package/dist/styles/dock-controls/dark-mode-toggle.css +109 -0
  236. package/dist/styles/dock-controls/icon-button.css +143 -0
  237. package/dist/styles/dock-controls/tab-button.css +143 -0
  238. package/dist/styles/dock-controls/touch-floor.css +94 -0
  239. package/dist/styles/dock-controls/triggers.css +135 -0
  240. package/dist/styles/dock-controls.css +30 -595
  241. package/dist/styles/dock.css +8 -3
  242. package/dist/styles/drawer.css +48 -0
  243. package/dist/styles/feedback-tone.css +104 -0
  244. package/dist/styles/floating-panel.css +17 -0
  245. package/dist/styles/glass/a11y-fallback.css +245 -0
  246. package/dist/styles/glass/ladder.css +383 -0
  247. package/dist/styles/glass/material.css +238 -0
  248. package/dist/styles/glass/progress-rail.css +78 -0
  249. package/dist/styles/glass/squircle.css +66 -0
  250. package/dist/styles/glass/surface-axis.css +113 -0
  251. package/dist/styles/glass/surfaces.css +382 -0
  252. package/dist/styles/glass-refract.css +2 -0
  253. package/dist/styles/glass.css +34 -1188
  254. package/dist/styles/hover-popover.css +2 -0
  255. package/dist/styles/icon-chip.css +149 -0
  256. package/dist/styles/index.css +94 -18
  257. package/dist/styles/instrument-chassis.css +46 -0
  258. package/dist/styles/menu.css +127 -0
  259. package/dist/styles/paper.css +2 -68
  260. package/dist/styles/segmented-tabs.css +346 -0
  261. package/dist/styles/select.css +50 -0
  262. package/dist/styles/theme/bridges.css +347 -0
  263. package/dist/styles/theme/dark.css +7 -0
  264. package/dist/styles/theme/literals.css +94 -0
  265. package/dist/styles/theme/radius.css +95 -0
  266. package/dist/styles/theme.css +26 -529
  267. package/dist/styles/tokens/color-radius.css +287 -0
  268. package/dist/styles/tokens/dark-arm.css +308 -0
  269. package/dist/styles/tokens/glass.css +500 -0
  270. package/dist/styles/tokens/light-dark.css +187 -0
  271. package/dist/styles/tokens/offsets-sizing.css +562 -0
  272. package/dist/styles/tokens/property-regs.css +162 -0
  273. package/dist/styles/tokens/scale-paper.css +409 -0
  274. package/dist/styles/tokens/scheme-motion.css +352 -0
  275. package/dist/styles/tokens/shadow.css +166 -0
  276. package/dist/styles/tokens.css +22 -2360
  277. package/dist/styles/transitions.css +7 -7
  278. package/dist/styles/typography/scale.css +153 -0
  279. package/dist/styles/typography/semantic.css +220 -0
  280. package/dist/styles/typography/utilities.css +159 -0
  281. package/dist/styles/typography.css +23 -453
  282. package/dist/styles/utilities/a11y-overrides.css +169 -0
  283. package/dist/styles/utilities/animate.css +26 -0
  284. package/dist/styles/utilities/base.css +541 -0
  285. package/dist/styles/utilities/btn.css +218 -0
  286. package/dist/styles/utilities/components.css +317 -0
  287. package/dist/styles/utilities.css +19 -1318
  288. package/dist/styles/view-transition.css +4 -52
  289. package/dist/switch.js +1 -1
  290. package/dist/tabs.js +161 -181
  291. package/dist/timeline.js +2 -2
  292. package/dist/toast.js +1 -1
  293. package/dist/toggle-chip.js +3 -1
  294. package/dist/toggle-group.js +1 -1
  295. package/dist/tooltip.js +1 -1
  296. package/dist/typewriter.js +1 -1
  297. package/dist/{useAnimatedNumber-Bcpy5Etf.js → useAnimatedNumber-C_3wZLx4.js} +1 -1
  298. package/dist/useConfiguratorState-kiIlun8I.js +303 -0
  299. package/dist/useLiquidFlex-C12hXwOZ.js +30 -0
  300. package/dist/useRAFLoop-CdwJ7284.js +109 -0
  301. package/dist/{useScrollProgress-CffFGLa5.js → useScrollProgress-D7bYU2RK.js} +1 -1
  302. package/dist/useSpecularTracking-Bo5su68i.js +32 -0
  303. package/dist/useSpringMount-CvopqiFr.js +108 -0
  304. package/dist/useSurfaceAxis-CMnF2zHb.js +7 -0
  305. package/dist/{useTouchGate-WFyJYsth.js → useTouchGate-28Tk2-t2.js} +1 -1
  306. package/dist/useViewTransition-COsPjQVZ.js +47 -0
  307. package/dist/utils/coalesceMetric.d.ts +29 -0
  308. package/dist/utils/index.d.ts +1 -0
  309. package/dist/vReveal-D9k0jADx.js +10 -0
  310. package/dist/watercolor-dot.js +22 -13
  311. package/dist/{x-Dfsegz9Y.js → x-BUwTKe50.js} +1 -1
  312. package/package.json +134 -50
  313. package/src/styles/animations.css +25 -125
  314. package/src/styles/cards.css +53 -0
  315. package/src/styles/configurator.css +77 -0
  316. package/src/styles/dock/density.css +19 -0
  317. package/src/styles/dock/layer-group.css +83 -25
  318. package/src/styles/dock/layers.css +23 -1
  319. package/src/styles/dock/morph-bridge.css +123 -0
  320. package/src/styles/dock/morph.css +175 -45
  321. package/src/styles/dock/overflow.css +66 -1
  322. package/src/styles/dock/rail-extend.css +397 -0
  323. package/src/styles/dock/section.css +59 -0
  324. package/src/styles/dock/shell.css +97 -110
  325. package/src/styles/dock-controls/dark-mode-toggle.css +109 -0
  326. package/src/styles/dock-controls/icon-button.css +143 -0
  327. package/src/styles/dock-controls/tab-button.css +143 -0
  328. package/src/styles/dock-controls/touch-floor.css +94 -0
  329. package/src/styles/dock-controls/triggers.css +135 -0
  330. package/src/styles/dock-controls.css +30 -595
  331. package/src/styles/dock.css +8 -3
  332. package/src/styles/drawer.css +42 -0
  333. package/src/styles/feedback-tone.css +104 -0
  334. package/src/styles/floating-panel.css +15 -0
  335. package/src/styles/glass/a11y-fallback.css +245 -0
  336. package/src/styles/glass/ladder.css +383 -0
  337. package/src/styles/glass/material.css +238 -0
  338. package/src/styles/glass/progress-rail.css +78 -0
  339. package/src/styles/glass/squircle.css +66 -0
  340. package/src/styles/glass/surface-axis.css +113 -0
  341. package/src/styles/glass/surfaces.css +382 -0
  342. package/src/styles/glass.css +34 -1188
  343. package/src/styles/icon-chip.css +149 -0
  344. package/src/styles/index.css +93 -17
  345. package/src/styles/instrument-chassis.css +42 -0
  346. package/src/styles/menu.css +127 -0
  347. package/src/styles/paper.css +2 -68
  348. package/src/styles/segmented-tabs.css +340 -0
  349. package/src/styles/select.css +50 -0
  350. package/src/styles/theme/bridges.css +347 -0
  351. package/src/styles/theme/dark.css +7 -0
  352. package/src/styles/theme/literals.css +94 -0
  353. package/src/styles/theme/radius.css +95 -0
  354. package/src/styles/theme.css +26 -529
  355. package/src/styles/tokens/color-radius.css +287 -0
  356. package/src/styles/tokens/dark-arm.css +308 -0
  357. package/src/styles/tokens/glass.css +500 -0
  358. package/src/styles/tokens/light-dark.css +187 -0
  359. package/src/styles/tokens/offsets-sizing.css +562 -0
  360. package/src/styles/tokens/property-regs.css +162 -0
  361. package/src/styles/tokens/scale-paper.css +409 -0
  362. package/src/styles/tokens/scheme-motion.css +352 -0
  363. package/src/styles/tokens/shadow.css +166 -0
  364. package/src/styles/tokens.css +22 -2360
  365. package/src/styles/transitions.css +7 -7
  366. package/src/styles/typography/scale.css +153 -0
  367. package/src/styles/typography/semantic.css +220 -0
  368. package/src/styles/typography/utilities.css +159 -0
  369. package/src/styles/typography.css +23 -453
  370. package/src/styles/utilities/a11y-overrides.css +169 -0
  371. package/src/styles/utilities/animate.css +26 -0
  372. package/src/styles/utilities/base.css +541 -0
  373. package/src/styles/utilities/btn.css +218 -0
  374. package/src/styles/utilities/components.css +317 -0
  375. package/src/styles/utilities.css +19 -1318
  376. package/src/styles/view-transition.css +4 -52
  377. package/dist/CardAction-DuArVky-.js +0 -157
  378. package/dist/DeckProgress-Dmk4_AKN.js +0 -23
  379. package/dist/DialogContent-BRkT1cjP.js +0 -100
  380. package/dist/InstrumentRail-CUJ05YVG.js +0 -44
  381. package/dist/MetricBadge-BZVWIxNy.js +0 -80
  382. package/dist/PopoverContent-BId6ggf_.js +0 -121
  383. package/dist/TabsList-B8CVOQPC.js +0 -101
  384. package/dist/components/custom/deck-progress/DeckProgress.vue.d.ts +0 -27
  385. package/dist/components/custom/deck-progress/index.d.ts +0 -2
  386. package/dist/components/custom/dialog-native/GlassDialogNative.vue.d.ts +0 -57
  387. package/dist/components/custom/dialog-native/index.d.ts +0 -1
  388. package/dist/components/custom/instrument-rail/InstrumentRail.vue.d.ts +0 -91
  389. package/dist/components/custom/instrument-rail/index.d.ts +0 -2
  390. package/dist/components/ui/carousel/CarouselDots.vue.d.ts +0 -4
  391. package/dist/composables/motion/useRouteTransition.d.ts +0 -42
  392. package/dist/deck-progress.d.ts +0 -1
  393. package/dist/deck-progress.js +0 -2
  394. package/dist/dockContext-BKeIMmNk.js +0 -9
  395. package/dist/instrument-rail.d.ts +0 -1
  396. package/dist/instrument-rail.js +0 -2
  397. package/dist/sheet-VZEtNFvO.js +0 -214
  398. package/dist/styles/instrument-rail.css +0 -127
  399. package/dist/useConfiguratorState-DxAqksK6.js +0 -287
  400. package/dist/useGlassRenderer-D7YGOYiM.js +0 -69
  401. package/dist/useSpecularTracking-BVRZsRHA.js +0 -26
  402. package/dist/useSpringMount-BJSHcLl3.js +0 -113
  403. package/dist/useViewTransition-DaN5Zrox.js +0 -21
  404. package/dist/vReveal-zUIQk-rJ.js +0 -53
  405. package/src/styles/instrument-rail.css +0 -127
  406. /package/dist/{CollapsibleContent-CP9qF1v4.js → CollapsibleContent-C_s6fG7r.js} +0 -0
  407. /package/dist/{ContextMenuContent-DDa0v27s.js → ContextMenuContent-ON3x7cuk.js} +0 -0
  408. /package/dist/{HoverCardContent-B6CcQ8He.js → HoverCardContent-DkMaQzH5.js} +0 -0
  409. /package/dist/{Input-xuDwALQR.js → Input-DVG_J0ne.js} +0 -0
  410. /package/dist/{InstrumentChassis-C2f6cBaQ.js → InstrumentChassis-UUJX0-mW.js} +0 -0
  411. /package/dist/{Label-zRfbQdCn.js → Label-Ck9SWEKM.js} +0 -0
  412. /package/dist/{ModalOverlay-B1GkAjNb.js → ModalOverlay-CkPRRgl_.js} +0 -0
  413. /package/dist/{PaperBackdrop-CqwjnfLv.js → PaperBackdrop-nBKe0vkB.js} +0 -0
  414. /package/dist/{SelectGroup-BFiod7X2.js → SelectGroup-Dcczq44n.js} +0 -0
  415. /package/dist/{SelectSeparator-C4Ql0gzV.js → SelectSeparator-DK2y1Bun.js} +0 -0
  416. /package/dist/{Separator-D7sD7RKj.js → Separator-BArl4OaB.js} +0 -0
  417. /package/dist/{TooltipProvider-CmZzCuaG.js → TooltipProvider-B3MkB_8P.js} +0 -0
  418. /package/dist/{_plugin-vue_export-helper-ok8pgSl5.js → _plugin-vue_export-helper-CBt_VvXa.js} +0 -0
  419. /package/dist/{compile-BOXjLUxu.js → compile-EXXzEr1q.js} +0 -0
  420. /package/dist/{constants-yKeKnE84.js → constants-BPOqYJAm.js} +0 -0
  421. /package/dist/{createContext-B44Sah_H.js → createContext-B2RaZ-b8.js} +0 -0
  422. /package/dist/{createLucideIcon-B6uNAU9G.js → createLucideIcon-DydS2qgk.js} +0 -0
  423. /package/dist/{presets-BP_ALM0m.js → presets-BW2b-fr1.js} +0 -0
  424. /package/dist/{prng-D27-B3tK.js → prng-Cg22zv8g.js} +0 -0
  425. /package/dist/{supportsCssTimeline-C5oe0lnD.js → supportsCssTimeline-BWenxvHU.js} +0 -0
  426. /package/dist/{useGlobalDark-CAhOXNLO.js → useGlobalDark-C28t0VWJ.js} +0 -0
  427. /package/dist/{useIntersectionPause-Cck5Uxk8.js → useIntersectionPause-Bj4sPkMh.js} +0 -0
  428. /package/dist/{useInterval-Dsmqwi03.js → useInterval-CNdua40W.js} +0 -0
  429. /package/dist/{useKeyboardShortcuts-CyIYrndH.js → useKeyboardShortcuts-BXWXOZ-9.js} +0 -0
  430. /package/dist/{useResizeObserver-CWCbk5Px.js → useResizeObserver-V6nq5gJb.js} +0 -0
  431. /package/dist/{useResolveTokenColor-r9pnNjqK.js → useResolveTokenColor-NUG2zYAW.js} +0 -0
  432. /package/dist/{useSortable-C8ReQ50P.js → useSortable-BVqlJRBR.js} +0 -0
  433. /package/dist/{useTextHighlight-CWEi25hf.js → useTextHighlight-NmBM5V_4.js} +0 -0
  434. /package/dist/{useTimer-3xqf_54b.js → useTimer-B_PAasDL.js} +0 -0
  435. /package/dist/{useUserInvalidAria-DoJKMZ3s.js → useUserInvalidAria-CDfJuakL.js} +0 -0
  436. /package/dist/{useViewportReady-RIr5Wgkh.js → useViewportReady-CvBcCYDf.js} +0 -0
@@ -0,0 +1,541 @@
1
+ /* utilities/base.css
2
+ The @layer components base half — section-description, labeled-field, popover-content, scrollbar, focus-ring, hairline-accent, interactive-item, tap-squish, status-dot, depth-text, preserve-3d, ios input fix, scroll-fade masks, fading-scroll (scroll-state-driven edge fade), deferred-section, scroll-timeline host, shimmer text, keyboard key.
3
+ Carved from the utilities.css cascade root; @import-ed by utilities.css in
4
+ cascade order. See docs/precepts/design-idioms.md §cohesion-aware partials. */
5
+
6
+ /* ═══════════════════════════════════════════════
7
+ §FADING-SCROLL — the per-edge mask-width interpolation customs (BA.W-FADING-SCROLL)
8
+
9
+ `<FadingScroll>`'s scroll-state-driven edge fade is a `mask-image` whose two
10
+ per-edge ramp widths are these registered `@property <length-percentage>`
11
+ customs. Registered (not bare custom props) so they INTERPOLATE smoothly off
12
+ the `scroll(self)` timeline below — an unregistered custom would jump between
13
+ the textual `0px` / `var(--fade-scroll-width)` endpoints rather than feathering.
14
+ `inherits: false`: each scroll port owns its own edge state (an ancestor must
15
+ never push a fade-width onto an unrelated descendant strip — mirrors the
16
+ `--progress-crescendo` / `--ripple-radius` non-inheriting registrations).
17
+ `initial-value: 0px` = the SHARP floor: an at-rest, no-overflow edge has NO
18
+ feather (the R8-08 "Shy" defect — the static `.scroll-fade-*` mask half-erased
19
+ the first card's chrome at rest — is structurally impossible because the
20
+ default is sharp and the timeline OPENS the feather only on real scroll).
21
+
22
+ These customs are INTERNAL (not a public token). The public knob is
23
+ `--fade-scroll-width` (offsets-sizing.css). Co-registered HERE (the consuming
24
+ CSS file) per the `@property --dock-morph-t` in dock.css precedent — a
25
+ component's typed property rides its own recipe file.
26
+
27
+ Co-written by the `useFadingScroll` JS fallback (the dual-path single writer):
28
+ the native `scroll(self)` timeline below owns these customs on a supporting
29
+ engine, the composable writes the SAME two customs when it is absent. Never
30
+ both — the composable feature-detect-gates OFF under timeline support.
31
+ ═══════════════════════════════════════════════ */
32
+ @property --fade-start {
33
+ syntax: "<length-percentage>";
34
+ inherits: false;
35
+ initial-value: 0px;
36
+ }
37
+ @property --fade-end {
38
+ syntax: "<length-percentage>";
39
+ inherits: false;
40
+ initial-value: 0px;
41
+ }
42
+
43
+ @layer components {
44
+ /* ── Section description (V.W3.T7) ──────────────────────────────
45
+ Canonical recipe for the `<Section>` primitive's description
46
+ paragraph. Composes the body type + muted-foreground color in
47
+ one declaration so consumers don't fight twMerge's
48
+ typography-class collapse. */
49
+ .section-description {
50
+ font-size: var(--type-body);
51
+ color: var(--muted-foreground);
52
+ line-height: 1.5;
53
+ text-wrap: pretty; /* AQ.W3 §W3.3 — prose-register orphan/river fix */
54
+ }
55
+
56
+ /* ── Labeled-field label (V.W3.T5 / A5 §5.5) ────────────────────
57
+ Canonical recipe for `<LabeledField>`'s tooltip-wrapped label
58
+ layer. Four sibling wrappers (LabeledInput, LabeledSelect,
59
+ LabeledSlider, LabeledSwitch) used to repeat this literal across
60
+ their templates; promoting it to a utility lets the parent SFC
61
+ own one canonical declaration. */
62
+ .labeled-field-label {
63
+ font-family: var(--font-display);
64
+ font-size: var(--type-body);
65
+ /* AQ.W4 §W3.1c — the label color reads the group-state variable so the
66
+ `:has(:user-invalid)` rule below reddens it (one source of the
67
+ override value, shared with the `.has-error` fallback class). */
68
+ color: var(--field-label-color, var(--muted-foreground));
69
+ cursor: help;
70
+ }
71
+
72
+ /* AQ.W4 §W3.1c — LabeledField group error highlight. When any descendant
73
+ control is `:user-invalid`, the whole field group marks (the label
74
+ reddens via `--field-label-color`, the error region reveals). Scoped to
75
+ `.labeled-field` — never `body`, never a bare element. `:has()` Baseline
76
+ Widely; the `.has-error` / `.has-valid` fallback classes (toggled by the
77
+ `useUserInvalidAria` fallback path) are the SOLE degradation for engines
78
+ without `:has()`/`:user-invalid` (not a live+dead alias). */
79
+ .labeled-field {
80
+ --field-label-color: var(--muted-foreground);
81
+ /* THE WIDTH CONTRACT (BA.W-CONFIG-CHASSIS.1, S1 / CFG-1). The
82
+ labeled-field root claims FULL inline width + lays its label/control
83
+ stack out as a column, so a slotted control (a Slider whose inner
84
+ `.glass-slider` resolves `width: 100%`) has a DEFINITE width to
85
+ resolve against — never the content-sized 0 the bare `display:block`
86
+ default produced inside the configurator row's flex slot. This is the
87
+ half that survives the `hide-label` register: with the visible label
88
+ rendered `sr-only`, the label was the only intrinsic width
89
+ contributor, so the field collapsed; `width:100%` makes the field own
90
+ its inline axis regardless of label visibility. `min-width:0` lets it
91
+ shrink below content min inside a constrained row. Standalone use is
92
+ unaffected (a `<LabeledField>` outside a flex parent fills its block
93
+ container exactly as the prior `display:block` did). */
94
+ display: flex;
95
+ flex-direction: column;
96
+ inline-size: 100%;
97
+ min-inline-size: 0;
98
+ }
99
+ .labeled-field:has(:user-invalid),
100
+ .labeled-field.has-error {
101
+ --field-label-color: var(--destructive);
102
+ }
103
+
104
+ /* The error region: hidden at rest, revealed once a descendant is
105
+ `:user-invalid` (or the `.has-error` fallback class is set). Non-color
106
+ reinforcement for the validity tint — the error TEXT is the primary
107
+ cue, the border/bg shift the supplement (forms guide: never color
108
+ alone). */
109
+ .labeled-field-error {
110
+ display: none;
111
+ font-size: var(--type-small);
112
+ color: var(--destructive);
113
+ margin-block-start: 0.25rem;
114
+ }
115
+ .labeled-field:has(:user-invalid) .labeled-field-error,
116
+ .labeled-field.has-error .labeled-field-error {
117
+ display: block;
118
+ }
119
+ /* Hide the error text once the field reads valid (the user corrected it). */
120
+ .labeled-field:has(:user-valid) .labeled-field-error,
121
+ .labeled-field.has-valid .labeled-field-error {
122
+ display: none;
123
+ }
124
+
125
+ /* ── Popover-content recipe (V.W3.T3 / A5 §3.2) ─────────────────
126
+ Canonical recipe for floating-tier portal containers
127
+ (PopoverContent, DropdownMenuContent, SelectContent, etc.).
128
+ Covers radius + outline + popover-foreground; consumers compose
129
+ this with `.glass-floating` (bg + blur + border + shadow), with
130
+ `.popover-animate` (data-state animation), and with the per-host
131
+ z-rung. The floating-tier shadow comes from
132
+ `--glass-shadow-floating` via `.glass-floating`, replacing the
133
+ `shadow-md`/`shadow-lg` literals that bypassed the canonical
134
+ cascade. */
135
+ .popover-content {
136
+ border-radius: var(--radius-panel);
137
+ color: var(--popover-foreground);
138
+ outline: none;
139
+ }
140
+
141
+ /* ── Scrollbar ── */
142
+ .scrollbar-hidden {
143
+ scrollbar-width: none;
144
+ }
145
+ .scrollbar-hidden::-webkit-scrollbar {
146
+ display: none;
147
+ }
148
+
149
+ /* AQ.W3 §W3.4 — tokenized thin scrollbar. Standard `scrollbar-width` +
150
+ `scrollbar-color` (Baseline Widely, Chromium 121+) is the primary path,
151
+ reading `--scrollbar-{thumb,track}` (auto-dark via `--muted-foreground`).
152
+ The legacy `::-webkit-scrollbar` family is the SOLE fallback for older
153
+ WebKit/Blink, gated on `@supports not (scrollbar-color: auto)` so modern
154
+ engines never paint it — not a live+dead alias. */
155
+ .scrollbar-thin {
156
+ scrollbar-width: thin;
157
+ scrollbar-color: var(--scrollbar-thumb) var(--scrollbar-track);
158
+ }
159
+ @supports not (scrollbar-color: auto) {
160
+ .scrollbar-thin::-webkit-scrollbar {
161
+ width: 8px;
162
+ height: 8px;
163
+ }
164
+ .scrollbar-thin::-webkit-scrollbar-track {
165
+ background: var(--scrollbar-track);
166
+ }
167
+ .scrollbar-thin::-webkit-scrollbar-thumb {
168
+ background: var(--scrollbar-thumb);
169
+ border-radius: var(--radius-pill);
170
+ }
171
+ }
172
+
173
+ /* ── Focus ring — auto-activates on :focus-visible ── */
174
+ .focus-ring:focus-visible {
175
+ outline: none;
176
+ border-radius: var(--radius-pill);
177
+ box-shadow: var(--focus-ring-shadow);
178
+ }
179
+
180
+ /* ── Hairline-accent — 0.5px catch-light + under-shadow pair ──
181
+ Composes the canonical `--border-hairline` token (tokens.css §
182
+ Glass-decorative). Adopt at any surface that wants the canonical
183
+ 2-stop hairline (dock surfaces, instrument-chassis). Auto-mirrors
184
+ in dark via the .dark token override. */
185
+ .hairline-accent {
186
+ box-shadow: var(--border-hairline);
187
+ }
188
+
189
+ /* ── Interactive item (hover bg + focus ring + active scale) ── */
190
+ .interactive-item {
191
+ /* AQ.W3 §W3.2 identity base */
192
+ scale: 1;
193
+ border-radius: var(--radius-lg);
194
+ user-select: none;
195
+ transition:
196
+ background-color var(--duration-fast) var(--ease-standard),
197
+ color var(--duration-fast) var(--ease-standard),
198
+ border-color var(--duration-fast) var(--ease-standard),
199
+ box-shadow var(--duration-fast) var(--ease-standard),
200
+ scale var(--duration-fast) var(--ease-standard);
201
+ }
202
+ .interactive-item:hover {
203
+ background-color: color-mix(in srgb, var(--accent) 50%, transparent);
204
+ }
205
+ .interactive-item:focus-visible {
206
+ outline: none;
207
+ box-shadow: var(--focus-ring-shadow);
208
+ }
209
+ .interactive-item:active {
210
+ /* AW.W31.a — fold the residual literal press scale onto the canonical
211
+ `--scale-press*` cohort (the prior `0.98` was the sole per-atom press
212
+ literal surviving the W2/W3/W25 sweeps). `--scale-press-sm` (0.97) is
213
+ the soft press rung the button + slider recipes consume — ONE press
214
+ vocabulary, no per-atom literal. The 0.98→0.97 delta is sub-perceptual. */
215
+ scale: var(--scale-press-sm);
216
+ }
217
+ .interactive-item:disabled,
218
+ .interactive-item[data-disabled] {
219
+ pointer-events: none;
220
+ opacity: var(--opacity-disabled);
221
+ cursor: not-allowed;
222
+ }
223
+
224
+ /* ── Tap-squish — universal press-state choreography ──
225
+ AL-W10 SLIM (X6 §M-1 + Y7 §3 + DESIGN.md §L3). I compose this
226
+ class onto every interactive surface that wants the iOS tap-
227
+ squish idiom; the press scales to `--scale-press` (0.96, the
228
+ canonical iOS `.regular` control rung). I keep this as a single
229
+ canonical rung — NOT a 3-rung ladder. The one outlier I leave
230
+ alone is the button `0.97` (`--scale-press-btn`), which consumes
231
+ its own slightly-softer token directly. The dock control now
232
+ tracks the canonical `--scale-press` (0.96) too (AT.W7-dock-b
233
+ press canon — the prior deeper `0.92` was retired to ONE source).
234
+
235
+ AX.W52 §6 doctrine — the `scale` register is reconciled onto
236
+ `--spring-smooth` (was `--spring-snappy`), the ONE button/interactive
237
+ scale register the §6 easing doctrine records and the gate asserts
238
+ across `.btn-pill`/`.tap-squish`/`.glass-btn`/`btn-interactive`. At
239
+ ζ=0.86 `--spring-smooth` settles a press crisply with a sub-perceptual
240
+ (~0.5%) peak — no visible bounce — so press still reads alive while
241
+ hover reads as a smooth glide on the SAME spring.
242
+
243
+ The transition lists the SURFACE legs (bg/border/box-shadow/color/
244
+ opacity) on the bezier `--ease-standard` alongside the spring `scale`
245
+ leg — the SAME coherent set `.btn-pill` carries. This is load-bearing:
246
+ `.tap-squish` and `.btn-pill` are co-composed on the button base and
247
+ this `transition` shorthand would otherwise CLOBBER `.btn-pill`'s
248
+ surface legs down to a scale-only animation (the cascade bug that left
249
+ every button transitioning ONLY `scale` — the live-readback RED). With
250
+ both classes carrying the full set, whichever wins the surface cross-
251
+ fade survives. On a non-button press surface the extra legs are inert
252
+ unless that prop changes, in which case a smooth cross-fade is the
253
+ desired interactive read anyway.
254
+
255
+ Under PRM I retire the press transform entirely and lean on the
256
+ consumer's own hover/active bg-tint cascade to acknowledge the
257
+ press. */
258
+ .tap-squish {
259
+ /* AQ.W3 §W3.2 identity base */
260
+ scale: 1;
261
+ transition:
262
+ background-color var(--duration-fast) var(--ease-standard),
263
+ border-color var(--duration-fast) var(--ease-standard),
264
+ box-shadow var(--duration-fast) var(--ease-standard),
265
+ color var(--duration-fast) var(--ease-standard),
266
+ opacity var(--duration-fast) var(--ease-standard),
267
+ scale var(--duration-fast) var(--spring-smooth);
268
+ transform-origin: center center;
269
+ }
270
+ .tap-squish:active {
271
+ scale: var(--scale-press);
272
+ }
273
+ @media (prefers-reduced-motion: reduce) {
274
+ .tap-squish:active {
275
+ /* Reset to the longhand identity (not `transform: none`) so the
276
+ press scale is neutralized under PRM. */
277
+ scale: 1;
278
+ }
279
+ }
280
+
281
+ /* ── Status dot indicator ── */
282
+ .status-dot {
283
+ display: inline-block;
284
+ width: 0.5rem;
285
+ height: 0.5rem;
286
+ border-radius: var(--radius-pill);
287
+ flex-shrink: 0;
288
+ transition:
289
+ color var(--duration-fast) var(--ease-standard),
290
+ background var(--duration-fast) var(--ease-standard),
291
+ box-shadow var(--duration-fast) var(--ease-standard);
292
+ }
293
+ /* ── Depth text (layered offset stamp) ──
294
+ AW.W26 — composes the `--text-shadow-depth` @theme identity token (the
295
+ hard offset stack + soft ambient tail) instead of a hand-rolled multi-stop
296
+ literal. The token holds the stack inside the `@theme` defs (gate 4) and
297
+ re-tints under `.dark` via `--shadow`/`--shadow-color` BY CONSTRUCTION. */
298
+ .depth-text {
299
+ --depth-color-primary: var(--primary);
300
+
301
+ color: var(--depth-color-primary);
302
+ text-shadow: var(--text-shadow-depth);
303
+ }
304
+
305
+ /* ── 3D preserve ── */
306
+ .preserve-3d {
307
+ transform-style: preserve-3d;
308
+ }
309
+
310
+ /* ── iOS input font-size fix (prevent auto-zoom) ── */
311
+ .ios input,
312
+ .ios select,
313
+ .ios textarea,
314
+ .ios [contenteditable] {
315
+ font-size: max(1rem, 1em);
316
+ }
317
+
318
+ /* ── Scroll fade masks ──
319
+ Single-source `mask-image` (AV.W16 TW7): the `-webkit-` companion is
320
+ dropped — Tailwind v4's Lightning CSS build pipeline auto-prefixes per
321
+ the browserslist targets, mirroring the glass ladder's single-source
322
+ `backdrop-filter` (glass.css). NOTE: this is the consistency cut; it
323
+ does NOT conflict with W15's `@supports`-gated older-Safari mask
324
+ fallback (that fallback is the distinct case where the companion is
325
+ genuinely needed and W15 gates it). */
326
+ .scroll-fade-mask {
327
+ mask-image: linear-gradient(to right, transparent, black var(--mask-fade-width), black calc(100% - var(--mask-fade-width)), transparent);
328
+ }
329
+
330
+ .scroll-fade-top {
331
+ mask-image: linear-gradient(to bottom, transparent, black var(--mask-fade-width));
332
+ }
333
+
334
+ .scroll-fade-bottom {
335
+ mask-image: linear-gradient(to bottom, black calc(100% - var(--mask-fade-width)), transparent);
336
+ }
337
+
338
+ .scroll-fade-y {
339
+ mask-image: linear-gradient(to bottom, transparent, black var(--mask-fade-width), black calc(100% - var(--mask-fade-width)), transparent);
340
+ }
341
+
342
+ /* ── Fading scroll — the scroll-STATE-driven edge fade (BA.W-FADING-SCROLL) ──
343
+ `<FadingScroll>`'s recipe. SUPERSEDES the scroll-BLIND `.scroll-fade-*`
344
+ masks above (which feathered both edges unconditionally — the R8-08 "Shy"
345
+ defect). Here each edge's ramp width is a registered `--fade-start` /
346
+ `--fade-end` custom (above, default 0px = SHARP), driven by the
347
+ `scroll(self)` timeline so the start edge feathers only past `scroll > 0`
348
+ and the end edge only while trailing overflow remains.
349
+
350
+ The root IS the scroll port (the component sets overflow via the consumer's
351
+ utilities — `overflow-x-auto` / `overflow-y-auto` come from the class the
352
+ consumer passes; the axis floor below sets the OTHER axis). The 4-stop
353
+ mask reads the two customs; at rest both are 0px so the gradient is a flat
354
+ opaque pass-through (no feather). */
355
+ .fading-scroll {
356
+ /* The base mask is axis-specialized by the modifier classes below. The
357
+ default-x case uses the inline ramp; the y case the block ramp. */
358
+ mask-image: linear-gradient(
359
+ to right,
360
+ transparent 0,
361
+ black var(--fade-start),
362
+ black calc(100% - var(--fade-end)),
363
+ transparent 100%
364
+ );
365
+ }
366
+ .fading-scroll--x {
367
+ overflow-x: auto;
368
+ mask-image: linear-gradient(
369
+ to right,
370
+ transparent 0,
371
+ black var(--fade-start),
372
+ black calc(100% - var(--fade-end)),
373
+ transparent 100%
374
+ );
375
+ }
376
+ .fading-scroll--y {
377
+ overflow-y: auto;
378
+ mask-image: linear-gradient(
379
+ to bottom,
380
+ transparent 0,
381
+ black var(--fade-start),
382
+ black calc(100% - var(--fade-end)),
383
+ transparent 100%
384
+ );
385
+ }
386
+
387
+ /* The NATIVE primary path: drive the per-edge customs off a `scroll(self)`
388
+ timeline — ZERO JS on a supporting engine (the `scroll-driven.css` /
389
+ Baseline-Newly-Available bar). UNLIKE `scroll-driven.css` this is NOT
390
+ wrapped in `prefers-reduced-motion: no-preference` — the fade is a
391
+ LEGIBILITY cue, not motion, so it stays present under PRM (it merely stops
392
+ interpolating; the discrete overflow-edge presence stays correct, and the
393
+ registered customs make even the static endpoints land right). */
394
+ @supports (animation-timeline: scroll()) {
395
+ /* The start edge: from sharp (0) to feathered, completing within the
396
+ first `--fade-scroll-width` of scroll — so at `scroll = 0` the start is
397
+ SHARP and it ramps in only once the user genuinely scrolls past. */
398
+ @keyframes gl-fade-start-in {
399
+ from {
400
+ --fade-start: 0px;
401
+ }
402
+ to {
403
+ --fade-start: var(--fade-scroll-width);
404
+ }
405
+ }
406
+ /* The end edge: feathered while trailing overflow remains, ramping OUT to
407
+ sharp over the last `--fade-scroll-width` of scroll — so at the scroll
408
+ end (no trailing overflow) the end is SHARP. */
409
+ @keyframes gl-fade-end-out {
410
+ from {
411
+ --fade-end: var(--fade-scroll-width);
412
+ }
413
+ to {
414
+ --fade-end: 0px;
415
+ }
416
+ }
417
+ /* x axis — `scroll(self inline)`; two animations on the ONE element, each
418
+ gated by `animation-range` to the start / end sliver of the scroll
419
+ distance. `fadeStart`/`fadeEnd` props toggle their respective
420
+ animation off via the `[data-fade-*]` presence attrs. */
421
+ .fading-scroll--x[data-fade-start] {
422
+ animation: gl-fade-start-in linear both;
423
+ animation-timeline: scroll(self inline);
424
+ animation-range: 0 var(--fade-scroll-width);
425
+ }
426
+ .fading-scroll--x[data-fade-end] {
427
+ animation: gl-fade-end-out linear both;
428
+ animation-timeline: scroll(self inline);
429
+ animation-range: calc(100% - var(--fade-scroll-width)) 100%;
430
+ }
431
+ /* BOTH edges on one element compose as two named animations. */
432
+ .fading-scroll--x[data-fade-start][data-fade-end] {
433
+ animation:
434
+ gl-fade-start-in linear both,
435
+ gl-fade-end-out linear both;
436
+ animation-timeline: scroll(self inline), scroll(self inline);
437
+ animation-range:
438
+ 0 var(--fade-scroll-width),
439
+ calc(100% - var(--fade-scroll-width)) 100%;
440
+ }
441
+ /* y axis — `scroll(self block)`. */
442
+ .fading-scroll--y[data-fade-start] {
443
+ animation: gl-fade-start-in linear both;
444
+ animation-timeline: scroll(self block);
445
+ animation-range: 0 var(--fade-scroll-width);
446
+ }
447
+ .fading-scroll--y[data-fade-end] {
448
+ animation: gl-fade-end-out linear both;
449
+ animation-timeline: scroll(self block);
450
+ animation-range: calc(100% - var(--fade-scroll-width)) 100%;
451
+ }
452
+ .fading-scroll--y[data-fade-start][data-fade-end] {
453
+ animation:
454
+ gl-fade-start-in linear both,
455
+ gl-fade-end-out linear both;
456
+ animation-timeline: scroll(self block), scroll(self block);
457
+ animation-range:
458
+ 0 var(--fade-scroll-width),
459
+ calc(100% - var(--fade-scroll-width)) 100%;
460
+ }
461
+ }
462
+
463
+ /* ── Deferred section — render-skip an offscreen subtree (AQ.W3 §5) ──────
464
+ `content-visibility: auto` skips layout/paint/style of an offscreen
465
+ subtree — the INP-under-load lever (fourier γ, muster, speedtest, words).
466
+ `contain-intrinsic-size: auto <estimate>` is measurement-safe: the `auto`
467
+ prefix makes the engine REMEMBER the last-rendered size (no scroll-jump on
468
+ re-entry); plain `<estimate>` freezes the section + thrashes the scrollbar
469
+ — the trap this closes. Estimate is token-driven (`--deferred-section-
470
+ size`, default 30rem). `.deferred-section--cached` →
471
+ `content-visibility: hidden` (always skipped, state CACHED — cheaper to
472
+ re-show than `display:none`). Baseline Widely; unsupporting engines render
473
+ normally. JS HOOK: the engine fires `contentvisibilityautostatechange`
474
+ { skipped } at the render-skip boundary — pair with `useRAFLoop`
475
+ pause/resume: `el.addEventListener('contentvisibilityautostatechange',
476
+ e => e.skipped ? loop.pause() : loop.resume())`. */
477
+ .deferred-section {
478
+ content-visibility: auto;
479
+ contain-intrinsic-size: auto var(--deferred-section-size, 30rem);
480
+ }
481
+ .deferred-section--cached {
482
+ content-visibility: hidden;
483
+ contain-intrinsic-size: auto var(--deferred-section-size, 30rem);
484
+ }
485
+
486
+ /* ── Card scroll-timeline host (AI.W1-α) ───────────────────────────────
487
+ Canonical scroll-overflow host that emits the `--card-scroll` named
488
+ scroll-timeline consumed by `<CardHeader shrink>`. Apply to the
489
+ scroll-overflow ancestor (typically the `<Card>` itself OR a wrapper
490
+ inside it that carries `overflow-y: auto`).
491
+
492
+ `contain: layout style paint` isolates the named timeline so child
493
+ animations respond to THIS host's scroll only — not to portal-
494
+ triggered layout shifts in ancestor containers (the load-bearing
495
+ isolation guarantee the value.js `PaneHeader.vue:18-29` comment
496
+ called out and the AI.W1 spec §1.2 ratified as canon).
497
+
498
+ Disambiguated from `.scroll-fade-*` (mask-image fade gradient at
499
+ the container's leading/trailing edge) — `.card-scroll-host` does
500
+ NOT paint any visual; it only emits the timeline. */
501
+ .card-scroll-host {
502
+ contain: layout style paint;
503
+ scroll-timeline: --card-scroll block;
504
+ }
505
+
506
+ /* ── Shimmer text effects ──
507
+ The text-fill + background-clip composition is load-bearing visual
508
+ (the gold gradient itself); only the `animation:` line is wrapped in
509
+ the PRM no-preference bracket so PRM users see the static gradient
510
+ without the slide animation. */
511
+ .gold-shimmer {
512
+ background: linear-gradient(90deg, var(--color-gold-dark), var(--color-gold-light), var(--color-gold), var(--color-gold-light), var(--color-gold-dark));
513
+ background-size: 250% 100%;
514
+ background-clip: text;
515
+ -webkit-background-clip: text;
516
+ color: transparent;
517
+ }
518
+ @media (prefers-reduced-motion: no-preference) {
519
+ .gold-shimmer {
520
+ animation: gold-shimmer-slide var(--duration-shimmer) linear infinite;
521
+ }
522
+ }
523
+
524
+ /* ── Keyboard key ── */
525
+ .kbd {
526
+ display: inline-flex;
527
+ align-items: center;
528
+ justify-content: center;
529
+ min-height: 1.5rem;
530
+ min-width: 1.5rem;
531
+ padding: 0 0.375rem;
532
+ font-family: var(--font-mono);
533
+ font-size: var(--type-micro);
534
+ background: var(--muted);
535
+ border: 1px solid var(--border);
536
+ border-radius: var(--radius-sm);
537
+ box-shadow: 0 1px 0 1px color-mix(in srgb, var(--border) 30%, transparent);
538
+ line-height: 1;
539
+ }
540
+
541
+ }