@mkbabb/glass-ui 4.0.0 → 4.1.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 (609) hide show
  1. package/README.md +3 -1
  2. package/dist/CardAction-8whJrLWt.js +268 -0
  3. package/dist/{CommandShortcut-DdtWXxOK.js → CommandShortcut-D3yxgHNn.js} +25 -14
  4. package/dist/ConfiguratorRow-CaP7U3ZA.js +143 -0
  5. package/dist/ContextMenuContent-B3ZsheLV.js +90 -0
  6. package/dist/{ContextMenuSubContent-B0Vs6atR.js → ContextMenuSubContent-DDRID3qC.js} +28 -33
  7. package/dist/{DataTable-C464Zbqd.js → DataTable-Bc9kUtu_.js} +4 -4
  8. package/dist/{DialogContent-DDE6pQBU.js → DialogContent-6JtTB5x2.js} +11 -8
  9. package/dist/DialogFooter-9phqcRIS.js +80 -0
  10. package/dist/DialogScrollContent-TTuovQst.js +93 -0
  11. package/dist/{FadingScroll-DwNnvKMs.js → FadingScroll-DLRbH5Xr.js} +1 -1
  12. package/dist/HoverCardContent-Bel1gdLZ.js +88 -0
  13. package/dist/{HoverPopover-Dpzwvc4t.js → HoverPopover-BcIxvyqZ.js} +2 -2
  14. package/dist/{IconChip-BDw1j5mu.js → IconChip-DhbdGdFQ.js} +2 -1
  15. package/dist/{IconTooltip-DSjasZIt.js → IconTooltip-B0zimd2H.js} +1 -1
  16. package/dist/Input-Cg9DF62r.js +57 -0
  17. package/dist/{MetricBadge-BpC0R_Ec.js → MetricBadge-RHdBP72w.js} +1 -1
  18. package/dist/Notification-CphK7AAm.js +43 -0
  19. package/dist/NumberFieldContent-D8cXeyO4.js +140 -0
  20. package/dist/PagerDots-Cjx96la-.js +98 -0
  21. package/dist/{PopoverContent-BTorlp--.js → PopoverContent-DL7E6vJP.js} +4 -4
  22. package/dist/{Progress-hAT4gqGH.js → Progress-CnqB7gLm.js} +4 -4
  23. package/dist/{ScrollingText-CUVFTWk2.js → ScrollingText-CTZbA_cG.js} +2 -2
  24. package/dist/{SelectScrollDownButton-C1jb3b3K.js → SelectScrollDownButton-DAKCBEdW.js} +65 -61
  25. package/dist/{SelectSeparator-DK2y1Bun.js → SelectSeparator-C2UGOkXF.js} +1 -1
  26. package/dist/Separator-DQcwC2TR.js +44 -0
  27. package/dist/Switch-B8RscmRu.js +49 -0
  28. package/dist/Toaster-D9qIHjBI.js +274 -0
  29. package/dist/ToggleGroupItem-BLtr3TJq.js +170 -0
  30. package/dist/TooltipProvider-BJ_Y5EGX.js +109 -0
  31. package/dist/animated-digit.js +2 -2
  32. package/dist/api/index.d.ts +21 -33
  33. package/dist/api/types-extra.d.ts +37 -0
  34. package/dist/api.js +1 -1
  35. package/dist/aurora.js +1231 -260
  36. package/dist/badge.js +1 -1
  37. package/dist/border-progress.d.ts +1 -0
  38. package/dist/border-progress.js +98 -0
  39. package/dist/button-5dY1Dvhd.js +125 -0
  40. package/dist/button.js +1 -1
  41. package/dist/canvas.js +2 -3
  42. package/dist/card.js +2 -2
  43. package/dist/carousel.js +93 -110
  44. package/dist/collapsible.js +1 -1
  45. package/dist/color-Cs0-oxYL.js +116 -0
  46. package/dist/color.js +2 -2
  47. package/dist/command.js +1 -1
  48. package/dist/compile-nZ1xVYTp.js +19 -0
  49. package/dist/completion-seal.d.ts +1 -0
  50. package/dist/completion-seal.js +89 -0
  51. package/dist/components/custom/aurora/Aurora.vue.d.ts +10 -5
  52. package/dist/components/custom/aurora/composables/atoms-fields.d.ts +39 -0
  53. package/dist/components/custom/aurora/composables/auroraFallbackGround.d.ts +108 -0
  54. package/dist/components/custom/aurora/composables/color.d.ts +13 -0
  55. package/dist/components/custom/aurora/composables/frameLoop.d.ts +9 -0
  56. package/dist/components/custom/aurora/composables/runtime.d.ts +31 -0
  57. package/dist/components/custom/aurora/composables/uniformBridge.d.ts +5 -1
  58. package/dist/components/custom/aurora/composables/uniformBridgeWGPU.d.ts +60 -0
  59. package/dist/components/custom/aurora/composables/wgpuSetup.d.ts +37 -0
  60. package/dist/components/custom/aurora/constants/budget.d.ts +21 -0
  61. package/dist/components/custom/aurora/constants/presets.d.ts +20 -2
  62. package/dist/components/custom/aurora/constants/renderMode.d.ts +77 -18
  63. package/dist/components/custom/aurora/constants/shaders/aurora-mediums.wgsl.d.ts +1 -0
  64. package/dist/components/custom/aurora/constants/shaders/aurora.wgsl.d.ts +1 -0
  65. package/dist/components/custom/aurora/constants/shaders/oil-modes.glsl.d.ts +1 -0
  66. package/dist/components/custom/aurora/constants/shaders/procedural-color.wgsl.d.ts +4 -0
  67. package/dist/components/custom/aurora/index.d.ts +2 -1
  68. package/dist/components/custom/border-progress/BorderProgress.vue.d.ts +46 -0
  69. package/dist/components/custom/border-progress/composables/spectrum-walk.d.ts +25 -0
  70. package/dist/components/custom/border-progress/composables/useBorderSpectrum.d.ts +18 -0
  71. package/dist/components/custom/border-progress/constants.d.ts +59 -0
  72. package/dist/components/custom/border-progress/index.d.ts +4 -0
  73. package/dist/components/custom/completion-seal/CompletionSeal.vue.d.ts +21 -0
  74. package/dist/components/custom/completion-seal/composables/useCompletionSeal.d.ts +37 -0
  75. package/dist/components/custom/completion-seal/constants.d.ts +46 -0
  76. package/dist/components/custom/completion-seal/index.d.ts +4 -0
  77. package/dist/components/custom/concentric/Concentric.vue.d.ts +39 -0
  78. package/dist/components/custom/concentric/composables/concentricGLSetup.d.ts +18 -0
  79. package/dist/components/custom/concentric/composables/concentricWGPUSetup.d.ts +22 -0
  80. package/dist/components/custom/concentric/composables/ringField.d.ts +85 -0
  81. package/dist/components/custom/concentric/composables/uniformBridgeWGPU.d.ts +14 -0
  82. package/dist/components/custom/concentric/composables/useConcentric.d.ts +35 -0
  83. package/dist/components/custom/concentric/constants.d.ts +67 -0
  84. package/dist/components/custom/concentric/index.d.ts +5 -0
  85. package/dist/components/custom/concentric/shaders/concentric.glsl.d.ts +4 -0
  86. package/dist/components/custom/concentric/shaders/concentric.wgsl.d.ts +1 -0
  87. package/dist/components/custom/confirm-dialog/ConfirmDialog.vue.d.ts +3 -3
  88. package/dist/components/custom/constellation/Constellation.vue.d.ts +5 -4
  89. package/dist/components/custom/constellation/composables/constellationGLSetup.d.ts +10 -0
  90. package/dist/components/custom/constellation/composables/constellationWGPUSetup.d.ts +19 -0
  91. package/dist/components/custom/constellation/composables/uniformBridgeWGPU.d.ts +66 -0
  92. package/dist/components/custom/constellation/composables/useConstellation.d.ts +3 -10
  93. package/dist/components/custom/constellation/constants.d.ts +33 -0
  94. package/dist/components/custom/constellation/constellationField.d.ts +31 -1
  95. package/dist/components/custom/constellation/constellationInteraction.d.ts +23 -14
  96. package/dist/components/custom/constellation/constellationRender.d.ts +25 -0
  97. package/dist/components/custom/constellation/constellationTypes.d.ts +38 -0
  98. package/dist/components/custom/constellation/constellationWell.d.ts +15 -0
  99. package/dist/components/custom/constellation/index.d.ts +5 -5
  100. package/dist/components/custom/constellation/shaders/constellation-lines.glsl.d.ts +2 -0
  101. package/dist/components/custom/constellation/shaders/constellation-lines.wgsl.d.ts +1 -0
  102. package/dist/components/custom/constellation/shaders/constellation-points.glsl.d.ts +2 -0
  103. package/dist/components/custom/constellation/shaders/constellation-points.wgsl.d.ts +1 -0
  104. package/dist/components/custom/deck/DeckPager.vue.d.ts +29 -0
  105. package/dist/components/custom/deck/composables/useDeck.d.ts +27 -0
  106. package/dist/components/custom/deck/composables/useDeckKeyboard.d.ts +25 -0
  107. package/dist/components/custom/deck/composables/useDeckSpring.d.ts +22 -0
  108. package/dist/components/custom/deck/constants.d.ts +14 -0
  109. package/dist/components/custom/deck/index.d.ts +8 -0
  110. package/dist/components/custom/dock/DockIconButton.vue.d.ts +25 -4
  111. package/dist/components/custom/dock/DockLayerGroup.vue.d.ts +10 -2
  112. package/dist/components/custom/dock/DockStack.vue.d.ts +65 -0
  113. package/dist/components/custom/dock/GlassDock.vue.d.ts +4 -2
  114. package/dist/components/custom/dock/composables/dockMorphMeasure.d.ts +155 -0
  115. package/dist/components/custom/dock/composables/index.d.ts +2 -0
  116. package/dist/components/custom/dock/composables/useDockSearch.d.ts +85 -0
  117. package/dist/components/custom/dock/composables/useDockShellProps.d.ts +11 -0
  118. package/dist/components/custom/dock/composables/useLayerTransition.d.ts +13 -0
  119. package/dist/components/custom/dock/constants.d.ts +18 -14
  120. package/dist/components/custom/dock/index.d.ts +5 -2
  121. package/dist/components/custom/dot-flow-field/DotFlowField.vue.d.ts +42 -0
  122. package/dist/components/custom/dot-flow-field/composables/flowField.d.ts +83 -0
  123. package/dist/components/custom/dot-flow-field/composables/uniformBridgeWGPU.d.ts +39 -0
  124. package/dist/components/custom/dot-flow-field/composables/useDotFlowField.d.ts +35 -0
  125. package/dist/components/custom/dot-flow-field/composables/useFlowParticles.d.ts +31 -0
  126. package/dist/components/custom/dot-flow-field/constants.d.ts +69 -0
  127. package/dist/components/custom/dot-flow-field/index.d.ts +5 -0
  128. package/dist/components/custom/dot-flow-field/shaders/flow-field.compute.wgsl.d.ts +1 -0
  129. package/dist/components/custom/dot-flow-field/shaders/flow-field.glsl.d.ts +4 -0
  130. package/dist/components/custom/dot-flow-field/shaders/flow-field.render.wgsl.d.ts +1 -0
  131. package/dist/components/custom/dot-matrix/DotMatrix.vue.d.ts +43 -0
  132. package/dist/components/custom/dot-matrix/composables/dotMatrixField.d.ts +89 -0
  133. package/dist/components/custom/dot-matrix/composables/uniformBridgeWGPU.d.ts +52 -0
  134. package/dist/components/custom/dot-matrix/composables/useDotMatrix.d.ts +34 -0
  135. package/dist/components/custom/dot-matrix/composables/useDotSphere.d.ts +27 -0
  136. package/dist/components/custom/dot-matrix/constants.d.ts +58 -0
  137. package/dist/components/custom/dot-matrix/index.d.ts +5 -0
  138. package/dist/components/custom/dot-matrix/shaders/dot-matrix.glsl.d.ts +4 -0
  139. package/dist/components/custom/dot-matrix/shaders/dot-matrix.wgsl.d.ts +1 -0
  140. package/dist/components/custom/easing/EasingConfigurator.vue.d.ts +33 -0
  141. package/dist/components/custom/easing/EasingPicker.vue.d.ts +49 -0
  142. package/dist/components/custom/easing/composables/useEasingPicker.d.ts +80 -0
  143. package/dist/components/custom/easing/constants.d.ts +28 -0
  144. package/dist/components/custom/easing/index.d.ts +3 -0
  145. package/dist/components/custom/expandable-container/ExpandableContainer.vue.d.ts +11 -0
  146. package/dist/components/custom/fourier-field/FourierField.vue.d.ts +43 -40
  147. package/dist/components/custom/fourier-field/composables/fourierFieldGLSetup.d.ts +15 -0
  148. package/dist/components/custom/fourier-field/composables/fourierFieldWGPUSetup.d.ts +20 -0
  149. package/dist/components/custom/fourier-field/composables/uniformBridgeWGPU.d.ts +41 -0
  150. package/dist/components/custom/fourier-field/composables/useFourierField.d.ts +42 -0
  151. package/dist/components/custom/fourier-field/constants.d.ts +64 -0
  152. package/dist/components/custom/fourier-field/index.d.ts +23 -18
  153. package/dist/components/custom/fourier-field/shaders/fourier-field.compute.wgsl.d.ts +1 -0
  154. package/dist/components/custom/fourier-field/shaders/fourier-field.glsl.d.ts +4 -0
  155. package/dist/components/custom/fourier-field/shaders/fourier-field.render.wgsl.d.ts +1 -0
  156. package/dist/components/custom/glass-panel/GlassPanel.vue.d.ts +1 -1
  157. package/dist/components/custom/goo-blob/GooBlob.vue.d.ts +13 -3
  158. package/dist/components/custom/goo-blob/composables/uniformBridgeWGPU.d.ts +24 -0
  159. package/dist/components/custom/goo-blob/composables/useMetaballRenderer.d.ts +18 -11
  160. package/dist/components/custom/goo-blob/composables/wgpuSetup.d.ts +23 -0
  161. package/dist/components/custom/goo-blob/constants.d.ts +1 -1
  162. package/dist/components/custom/goo-blob/index.d.ts +1 -1
  163. package/dist/components/custom/goo-blob/shaders/metaball-noise.wgsl.d.ts +1 -0
  164. package/dist/components/custom/goo-blob/shaders/metaball-palette.wgsl.d.ts +1 -0
  165. package/dist/components/custom/goo-blob/shaders/metaball-uniforms.glsl.d.ts +1 -1
  166. package/dist/components/custom/goo-blob/shaders/metaball.wgsl.d.ts +1 -0
  167. package/dist/components/custom/goo-blob/types.d.ts +36 -0
  168. package/dist/components/custom/goo-dot-matrix/GooDotMatrix.vue.d.ts +49 -0
  169. package/dist/components/custom/goo-dot-matrix/composables/gooDotLattice.d.ts +24 -0
  170. package/dist/components/custom/goo-dot-matrix/composables/gooDotSetup.d.ts +50 -0
  171. package/dist/components/custom/goo-dot-matrix/composables/uniformBridgeWGPU.d.ts +35 -0
  172. package/dist/components/custom/goo-dot-matrix/composables/useGooDotMatrix.d.ts +31 -0
  173. package/dist/components/custom/goo-dot-matrix/constants.d.ts +76 -0
  174. package/dist/components/custom/goo-dot-matrix/index.d.ts +5 -0
  175. package/dist/components/custom/goo-dot-matrix/shaders/goo-dot.frag.d.ts +11 -0
  176. package/dist/components/custom/goo-dot-matrix/shaders/goo-dot.wgsl.d.ts +3 -0
  177. package/dist/components/custom/handmark/HandMark.vue.d.ts +1 -1
  178. package/dist/components/custom/icon-chip/types.d.ts +11 -1
  179. package/dist/components/custom/instrument-chassis/InstrumentChassis.vue.d.ts +3 -1
  180. package/dist/components/custom/labeled-field/LabeledField.vue.d.ts +21 -2
  181. package/dist/components/custom/metric-stack/MetricRow.vue.d.ts +15 -0
  182. package/dist/components/custom/metric-stack/MetricStack.vue.d.ts +1 -1
  183. package/dist/components/custom/pager-dots/PagerDots.vue.d.ts +9 -0
  184. package/dist/components/custom/pager-dots/index.d.ts +2 -0
  185. package/dist/components/custom/pager-dots/pagerWindow.d.ts +9 -0
  186. package/dist/components/custom/paper-grid/PaperGrid.vue.d.ts +42 -0
  187. package/dist/components/custom/paper-grid/composables/paperGrid.d.ts +90 -0
  188. package/dist/components/custom/paper-grid/composables/paperGridGLSetup.d.ts +16 -0
  189. package/dist/components/custom/paper-grid/composables/paperGridWGPUSetup.d.ts +19 -0
  190. package/dist/components/custom/paper-grid/composables/uniformBridgeWGPU.d.ts +16 -0
  191. package/dist/components/custom/paper-grid/composables/usePaperGrid.d.ts +31 -0
  192. package/dist/components/custom/paper-grid/constants.d.ts +57 -0
  193. package/dist/components/custom/paper-grid/index.d.ts +5 -0
  194. package/dist/components/custom/paper-grid/shaders/paper-grid.glsl.d.ts +4 -0
  195. package/dist/components/custom/paper-grid/shaders/paper-grid.wgsl.d.ts +1 -0
  196. package/dist/components/custom/search/FuzzySearch.vue.d.ts +8 -2
  197. package/dist/components/custom/search/SearchBar.vue.d.ts +8 -0
  198. package/dist/components/custom/search/index.d.ts +2 -0
  199. package/dist/components/custom/search/searchVariants.d.ts +19 -0
  200. package/dist/components/custom/selectable-chip/SelectableChip.vue.d.ts +50 -0
  201. package/dist/components/custom/selectable-chip/index.d.ts +2 -0
  202. package/dist/components/custom/selectable-chip/selectableChipVariants.d.ts +23 -0
  203. package/dist/components/custom/spa-view/SpaView.vue.d.ts +50 -0
  204. package/dist/components/custom/spa-view/index.d.ts +2 -0
  205. package/dist/components/custom/split-chars/SplitChars.vue.d.ts +39 -0
  206. package/dist/components/custom/split-chars/index.d.ts +1 -0
  207. package/dist/components/custom/tabs/SegmentedTabs.vue.d.ts +12 -0
  208. package/dist/components/custom/tabs/composables/useTabDragMorph.d.ts +42 -0
  209. package/dist/components/custom/tabs/constants.d.ts +20 -2
  210. package/dist/components/custom/watercolor-dot/WatercolorDot.vue.d.ts +30 -17
  211. package/dist/components/custom/watercolor-dot/useWatercolorBlob.d.ts +10 -5
  212. package/dist/components/ui/_shared/index.d.ts +2 -0
  213. package/dist/components/ui/_shared/menuItemVariants.d.ts +1 -1
  214. package/dist/components/ui/_shared/useControlSize.d.ts +46 -0
  215. package/dist/components/ui/badge/index.d.ts +1 -1
  216. package/dist/components/ui/button/Button.vue.d.ts +5 -2
  217. package/dist/components/ui/button/index.d.ts +2 -2
  218. package/dist/components/ui/card/Card.vue.d.ts +79 -4
  219. package/dist/components/ui/card/CardHeader.vue.d.ts +42 -16
  220. package/dist/components/ui/card/ScrollCard.vue.d.ts +33 -0
  221. package/dist/components/ui/card/ScrollCardHeader.vue.d.ts +17 -0
  222. package/dist/components/ui/card/index.d.ts +3 -1
  223. package/dist/components/ui/carousel/CarouselNext.vue.d.ts +2 -2
  224. package/dist/components/ui/carousel/CarouselPrevious.vue.d.ts +2 -2
  225. package/dist/components/ui/carousel/GlassCarouselPager.vue.d.ts +2 -2
  226. package/dist/components/ui/command/Command.vue.d.ts +1 -1
  227. package/dist/components/ui/command/CommandDialog.vue.d.ts +9 -3
  228. package/dist/components/ui/command/CommandList.vue.d.ts +3 -0
  229. package/dist/components/ui/context-menu/ContextMenuContent.vue.d.ts +5 -1
  230. package/dist/components/ui/drawer/Drawer.vue.d.ts +46 -33
  231. package/dist/components/ui/drawer/DrawerContent.vue.d.ts +7 -8
  232. package/dist/components/ui/drawer/DrawerDescription.vue.d.ts +2 -2
  233. package/dist/components/ui/drawer/DrawerOverlay.vue.d.ts +1 -1
  234. package/dist/components/ui/drawer/DrawerTitle.vue.d.ts +2 -2
  235. package/dist/components/ui/drawer/composables/drawerSnapContext.d.ts +26 -0
  236. package/dist/components/ui/drawer/composables/useDrawerSnap.d.ts +17 -0
  237. package/dist/components/ui/drawer/constants.d.ts +45 -0
  238. package/dist/components/ui/drawer/index.d.ts +23 -15
  239. package/dist/components/ui/dropdown-menu/DropdownMenuContent.vue.d.ts +4 -0
  240. package/dist/components/ui/focus-scope/FocusScope.vue.d.ts +20 -0
  241. package/dist/components/ui/focus-scope/index.d.ts +2 -0
  242. package/dist/components/ui/hover-card/HoverCardContent.vue.d.ts +3 -0
  243. package/dist/components/ui/index.d.ts +1 -0
  244. package/dist/components/ui/input/Input.vue.d.ts +3 -0
  245. package/dist/components/ui/number-field/NumberFieldInput.vue.d.ts +6 -1
  246. package/dist/components/ui/progress/ProgressDefault.vue.d.ts +3 -2
  247. package/dist/components/ui/select/SelectContent.vue.d.ts +4 -1
  248. package/dist/components/ui/sheet/index.d.ts +1 -1
  249. package/dist/components/ui/switch/Switch.vue.d.ts +2 -0
  250. package/dist/components/ui/tags-input/TagsInput.vue.d.ts +2 -2
  251. package/dist/components/ui/textarea/Textarea.vue.d.ts +3 -0
  252. package/dist/components/ui/toast/Toast.vue.d.ts +5 -2
  253. package/dist/components/ui/toast/use-toast.d.ts +14 -0
  254. package/dist/components/ui/toggle/Toggle.vue.d.ts +1 -1
  255. package/dist/components/ui/tooltip/TooltipContent.vue.d.ts +3 -0
  256. package/dist/composables/color/index.d.ts +2 -0
  257. package/dist/composables/color/useAccentTone.d.ts +34 -0
  258. package/dist/composables/glass/canvas2d/useCanvas2D.d.ts +13 -6
  259. package/dist/composables/glass/index.d.ts +5 -2
  260. package/dist/composables/glass/useSpecularPointer.d.ts +33 -0
  261. package/dist/composables/glass/useSpecularTracking.d.ts +20 -0
  262. package/dist/composables/glass/useVizChoreography.d.ts +123 -0
  263. package/dist/composables/glass/vSpecular.d.ts +2 -0
  264. package/dist/composables/glass/webgl/createCanvasLifecycle.d.ts +10 -0
  265. package/dist/composables/glass/webgl/shaders/flow.glsl.d.ts +1 -0
  266. package/dist/composables/glass/webgl/shaders/flow.wgsl.d.ts +1 -0
  267. package/dist/composables/glass/webgl/useWebGLCanvas.d.ts +16 -0
  268. package/dist/composables/glass/webgpu/index.d.ts +2 -0
  269. package/dist/composables/glass/webgpu/useGpuSubstrate.d.ts +75 -0
  270. package/dist/composables/glass/webgpu/useWebGPUCanvas.d.ts +85 -0
  271. package/dist/composables/glass/webgpu/webgpuDevice.d.ts +42 -0
  272. package/dist/composables/motion/core/index.d.ts +4 -0
  273. package/dist/composables/motion/index.d.ts +4 -0
  274. package/dist/composables/motion/scrollReader.d.ts +25 -0
  275. package/dist/composables/motion/springPresets.d.ts +20 -1
  276. package/dist/composables/motion/useCharStagger.d.ts +44 -0
  277. package/dist/composables/motion/useDockCtaReceive.d.ts +84 -0
  278. package/dist/composables/motion/useDragMorph.d.ts +77 -0
  279. package/dist/composables/motion/useLiquidFlex.d.ts +11 -0
  280. package/dist/composables/motion/useLiquidPress.d.ts +71 -0
  281. package/dist/composables/motion/useLiquidReveal.d.ts +51 -0
  282. package/dist/composables/motion/useNumericTransition.d.ts +3 -3
  283. package/dist/composables/motion/usePointerVelocityField.d.ts +98 -0
  284. package/dist/composables/motion/useScrollChrome.d.ts +58 -0
  285. package/dist/composables/motion/useScrollTrigger.d.ts +67 -0
  286. package/dist/composables/motion/useSpringPress.d.ts +5 -5
  287. package/dist/composables/motion/useStaggerReveal.d.ts +24 -0
  288. package/dist/composables/sidebar/index.d.ts +4 -1
  289. package/dist/composables/sidebar/types.d.ts +68 -3
  290. package/dist/composables/sidebar/useClickDelegate.d.ts +4 -0
  291. package/dist/composables/sidebar/useLazyLoader.d.ts +5 -0
  292. package/dist/composables/sidebar/useScrollTo.d.ts +5 -0
  293. package/dist/composables/virtual/index.d.ts +4 -0
  294. package/dist/composables/virtual/useVirtualSectionWindow.d.ts +72 -0
  295. package/dist/composables/virtual/useWindowedStore.d.ts +43 -0
  296. package/dist/composables/virtual/virtualSectionLayout.d.ts +103 -0
  297. package/dist/concentric.d.ts +1 -0
  298. package/dist/concentric.js +836 -0
  299. package/dist/configurator.js +3 -2
  300. package/dist/confirm-dialog.js +62 -49
  301. package/dist/constellation.js +635 -235
  302. package/dist/context-menu.js +3 -3
  303. package/dist/controls.js +2 -2
  304. package/dist/createCanvasLifecycle-Gh45Ce-p.js +93 -0
  305. package/dist/dark.js +1 -1
  306. package/dist/data-table.js +1 -1
  307. package/dist/deck.d.ts +1 -0
  308. package/dist/deck.js +105 -0
  309. package/dist/dialog.js +4 -3
  310. package/dist/dock.js +819 -568
  311. package/dist/{dockContext-Bu1Avy-a.js → dockContext-BNfyPLe9.js} +1 -1
  312. package/dist/dom.js +5 -5
  313. package/dist/dot-flow-field.d.ts +1 -0
  314. package/dist/dot-flow-field.js +894 -0
  315. package/dist/dot-matrix.d.ts +1 -0
  316. package/dist/dot-matrix.js +630 -0
  317. package/dist/dotMatrixField-D_x9_1qq.js +48 -0
  318. package/dist/drawer.d.ts +1 -0
  319. package/dist/drawer.js +380 -0
  320. package/dist/{dropdown-menu-BJ7E9js_.js → dropdown-menu-aJmV5SqE.js} +82 -79
  321. package/dist/dropdown-menu.js +1 -1
  322. package/dist/easing.d.ts +1 -0
  323. package/dist/easing.js +475 -0
  324. package/dist/expandable-container.js +46 -21
  325. package/dist/fading-scroll.js +1 -1
  326. package/dist/flow.glsl-B2P7e0MT.js +4 -0
  327. package/dist/focus-scope.d.ts +1 -0
  328. package/dist/focus-scope.js +23 -0
  329. package/dist/forms.js +65 -63
  330. package/dist/fourier-field.js +831 -172
  331. package/dist/fourier-math.js +1 -1
  332. package/dist/glass-panel.js +2 -2
  333. package/dist/glass-ui.css +1 -1
  334. package/dist/glass-ui.js +187 -338
  335. package/dist/goo-blob.js +241 -692
  336. package/dist/goo-dot-matrix.d.ts +1 -0
  337. package/dist/goo-dot-matrix.js +591 -0
  338. package/dist/handmark.js +2 -2
  339. package/dist/header-ribbon.js +1 -1
  340. package/dist/hover-card.js +1 -1
  341. package/dist/hover-popover.js +1 -1
  342. package/dist/icon-chip.js +1 -1
  343. package/dist/icon-tooltip.js +1 -1
  344. package/dist/index.d.ts +3 -1
  345. package/dist/instrument-chassis.js +1 -1
  346. package/dist/keyboard.js +1 -1
  347. package/dist/label.js +1 -1
  348. package/dist/labeled-field.js +70 -60
  349. package/dist/metric-badge.js +1 -1
  350. package/dist/metric-cell.js +1 -1
  351. package/dist/metric-stack.js +14 -9
  352. package/dist/motion-core.js +58 -36
  353. package/dist/motion-curves.js +11 -1
  354. package/dist/motion.js +90 -53
  355. package/dist/notification.js +1 -1
  356. package/dist/number-field.js +1 -1
  357. package/dist/pager-dots.js +2 -91
  358. package/dist/paper-backdrop.js +1 -1
  359. package/dist/paper-grid.d.ts +1 -0
  360. package/dist/paper-grid.js +788 -0
  361. package/dist/popover.js +1 -1
  362. package/dist/{presets-BW2b-fr1.js → presets-CvOUqtdY.js} +3 -3
  363. package/dist/{compile-EXXzEr1q.js → procedural-color.wgsl-m7Zgv35j.js} +2 -156
  364. package/dist/progress.js +1 -1
  365. package/dist/pulse.js +2 -2
  366. package/dist/reactive.js +1 -1
  367. package/dist/resolveCanvasColor-yPyIpJt9.js +93 -0
  368. package/dist/scrollReader-DI1NWxUw.js +42 -0
  369. package/dist/scrolling-text.js +1 -1
  370. package/dist/search.js +162 -308
  371. package/dist/select.js +3 -3
  372. package/dist/selectable-chip.d.ts +1 -0
  373. package/dist/selectable-chip.js +65 -0
  374. package/dist/separator.js +1 -1
  375. package/dist/{sheet-CquRYOAw.js → sheet-B2flBfLH.js} +5 -5
  376. package/dist/sheet.js +1 -1
  377. package/dist/sidebar.js +216 -114
  378. package/dist/{slider-DQ95MET2.js → slider-2A0rPn79.js} +3 -3
  379. package/dist/slider.js +1 -1
  380. package/dist/sortable-list.js +2 -2
  381. package/dist/spa-view.d.ts +1 -0
  382. package/dist/spa-view.js +46 -0
  383. package/dist/spectrum-walk-BVzA7Biz.js +33 -0
  384. package/dist/{springPresets-WXaLbu8u.js → springPresets-Ce7OYCm9.js} +12 -6
  385. package/dist/styles/animations.css +46 -12
  386. package/dist/styles/border-progress.css +109 -0
  387. package/dist/styles/cards.css +145 -0
  388. package/dist/styles/completion-seal.css +131 -0
  389. package/dist/styles/components.css +2 -3
  390. package/dist/styles/configurator.css +55 -0
  391. package/dist/styles/critical-partition.mjs +162 -0
  392. package/dist/styles/critical.css +12 -0
  393. package/dist/styles/deferred.css +33 -0
  394. package/dist/styles/dock/cta-seat.css +87 -0
  395. package/dist/styles/dock/density.css +198 -0
  396. package/dist/styles/dock/layers.css +101 -29
  397. package/dist/styles/dock/morph-bridge.css +54 -18
  398. package/dist/styles/dock/morph.css +132 -7
  399. package/dist/styles/dock/overflow.css +28 -2
  400. package/dist/styles/dock/search.css +68 -0
  401. package/dist/styles/dock/shape.css +124 -0
  402. package/dist/styles/dock/shell.css +77 -21
  403. package/dist/styles/dock/stack-rail.css +264 -0
  404. package/dist/styles/dock-controls/dark-mode-toggle.css +17 -4
  405. package/dist/styles/dock-controls/icon-button.css +14 -0
  406. package/dist/styles/dock.css +43 -1
  407. package/dist/styles/drawer.css +81 -35
  408. package/dist/styles/glass/accent-tone.css +66 -0
  409. package/dist/styles/glass/control-surfaces.css +167 -0
  410. package/dist/styles/glass/deep.css +44 -0
  411. package/dist/styles/glass/ladder.css +147 -41
  412. package/dist/styles/glass/material.css +78 -15
  413. package/dist/styles/glass/reveal.css +136 -0
  414. package/dist/styles/glass/rim.css +110 -0
  415. package/dist/styles/glass/surfaces.css +148 -129
  416. package/dist/styles/glass-refract.css +96 -44
  417. package/dist/styles/glass-specular-track.css +7 -0
  418. package/dist/styles/glass.css +13 -0
  419. package/dist/styles/hover-popover.css +7 -6
  420. package/dist/styles/icon-chip.css +77 -15
  421. package/dist/styles/index.css +36 -9
  422. package/dist/styles/instrument-chassis.css +66 -3
  423. package/dist/styles/scroll-choreography.css +300 -0
  424. package/dist/styles/scroll-chrome.css +123 -0
  425. package/dist/styles/scroll-driven.css +38 -0
  426. package/dist/styles/segmented-tabs.css +81 -14
  427. package/dist/styles/theme/bridges.css +33 -0
  428. package/dist/styles/theme/literals.css +11 -2
  429. package/dist/styles/theme/radius.css +24 -2
  430. package/dist/styles/tokens/color-radius.css +13 -3
  431. package/dist/styles/tokens/dark-arm.css +137 -32
  432. package/dist/styles/tokens/glass-deep.css +100 -0
  433. package/dist/styles/tokens/glass-fx.css +376 -0
  434. package/dist/styles/tokens/glass.css +131 -351
  435. package/dist/styles/tokens/light-dark.css +16 -3
  436. package/dist/styles/tokens/offsets.css +143 -0
  437. package/dist/styles/tokens/on-glass-fg.css +39 -0
  438. package/dist/styles/tokens/property-regs.css +260 -0
  439. package/dist/styles/tokens/scale-paper.css +168 -96
  440. package/dist/styles/tokens/scheme-motion.css +114 -38
  441. package/dist/styles/tokens/scroll-tokens.css +123 -0
  442. package/dist/styles/tokens/sizing-config.css +110 -0
  443. package/{src/styles/tokens/offsets-sizing.css → dist/styles/tokens/sizing.css} +92 -204
  444. package/dist/styles/tokens.css +14 -3
  445. package/dist/styles/typography/semantic.css +26 -13
  446. package/dist/styles/typography/utilities.css +22 -7
  447. package/dist/styles/utilities/a11y-overrides.css +20 -5
  448. package/dist/styles/utilities/animate.css +27 -24
  449. package/dist/styles/utilities/base-misc.css +307 -0
  450. package/dist/styles/utilities/base.css +47 -261
  451. package/dist/styles/utilities/btn.css +17 -4
  452. package/dist/styles/utilities/components.css +31 -6
  453. package/dist/styles/utilities/metal.css +215 -0
  454. package/dist/styles/utilities.css +14 -7
  455. package/dist/switch.js +1 -1
  456. package/dist/tabs.js +220 -107
  457. package/dist/timeline.js +2 -2
  458. package/dist/toast.js +1 -1
  459. package/dist/toggle-chip.js +10 -10
  460. package/dist/toggle-group.js +1 -1
  461. package/dist/tooltip.js +1 -1
  462. package/dist/typewriter.js +2 -2
  463. package/dist/uniformBridgeWGPU-CtAKl45L.js +1204 -0
  464. package/dist/{useAnimatedNumber-C_3wZLx4.js → useAnimatedNumber-CLrxicG9.js} +1 -1
  465. package/dist/useConfiguratorState-4xblKfwd.js +162 -0
  466. package/dist/useControlSize-SH1UmJCi.js +9 -0
  467. package/dist/useDockCtaReceive-DfFkmgL1.js +82 -0
  468. package/dist/useDragMorph-BUgAC-zK.js +102 -0
  469. package/dist/useFuzzySearch-DIhcYtcw.js +177 -0
  470. package/dist/useGpuSubstrate-4pTcp6mX.js +294 -0
  471. package/dist/useLiquidPress-BooG97RY.js +39 -0
  472. package/dist/usePointerVelocityField-QLsy3_kv.js +91 -0
  473. package/dist/useScrollChrome-D66AVP7C.js +258 -0
  474. package/dist/useSpring-C0jyvEJB.js +40 -0
  475. package/dist/useSpringMount-BWDnKIwh.js +71 -0
  476. package/dist/useSpringPress-B1-Czp-V.js +36 -0
  477. package/dist/{useTouchGate-28Tk2-t2.js → useTouchGate-CBZTD4SD.js} +1 -1
  478. package/dist/useViewTransition-CUI1nAgn.js +95 -0
  479. package/dist/vSpecular-EX7loENl.js +68 -0
  480. package/dist/vendor-B2qOlYY3.js +239 -0
  481. package/dist/virtual.d.ts +1 -0
  482. package/dist/virtual.js +225 -0
  483. package/dist/watercolor-dot.js +117 -74
  484. package/package.json +252 -28
  485. package/src/styles/animations.css +46 -12
  486. package/src/styles/border-progress.css +109 -0
  487. package/src/styles/cards.css +145 -0
  488. package/src/styles/completion-seal.css +131 -0
  489. package/src/styles/configurator.css +55 -0
  490. package/src/styles/critical-partition.mjs +162 -0
  491. package/src/styles/dock/cta-seat.css +87 -0
  492. package/src/styles/dock/density.css +198 -0
  493. package/src/styles/dock/layers.css +101 -29
  494. package/src/styles/dock/morph-bridge.css +54 -18
  495. package/src/styles/dock/morph.css +132 -7
  496. package/src/styles/dock/overflow.css +28 -2
  497. package/src/styles/dock/search.css +68 -0
  498. package/src/styles/dock/shape.css +124 -0
  499. package/src/styles/dock/shell.css +77 -21
  500. package/src/styles/dock/stack-rail.css +264 -0
  501. package/src/styles/dock-controls/dark-mode-toggle.css +17 -4
  502. package/src/styles/dock-controls/icon-button.css +14 -0
  503. package/src/styles/dock.css +43 -1
  504. package/src/styles/drawer.css +81 -35
  505. package/src/styles/glass/accent-tone.css +66 -0
  506. package/src/styles/glass/control-surfaces.css +167 -0
  507. package/src/styles/glass/deep.css +44 -0
  508. package/src/styles/glass/ladder.css +147 -41
  509. package/src/styles/glass/material.css +78 -15
  510. package/src/styles/glass/reveal.css +136 -0
  511. package/src/styles/glass/rim.css +110 -0
  512. package/src/styles/glass/surfaces.css +148 -129
  513. package/src/styles/glass-refract.css +96 -44
  514. package/src/styles/glass-specular-track.css +7 -0
  515. package/src/styles/glass.css +13 -0
  516. package/src/styles/hover-popover.css +7 -6
  517. package/src/styles/icon-chip.css +77 -15
  518. package/src/styles/index.css +27 -0
  519. package/src/styles/instrument-chassis.css +66 -3
  520. package/src/styles/scroll-choreography.css +300 -0
  521. package/src/styles/scroll-chrome.css +123 -0
  522. package/src/styles/scroll-driven.css +38 -0
  523. package/src/styles/segmented-tabs.css +81 -14
  524. package/src/styles/theme/bridges.css +33 -0
  525. package/src/styles/theme/literals.css +11 -2
  526. package/src/styles/theme/radius.css +24 -2
  527. package/src/styles/tokens/color-radius.css +13 -3
  528. package/src/styles/tokens/dark-arm.css +137 -32
  529. package/src/styles/tokens/glass-deep.css +100 -0
  530. package/src/styles/tokens/glass-fx.css +376 -0
  531. package/src/styles/tokens/glass.css +131 -351
  532. package/src/styles/tokens/light-dark.css +16 -3
  533. package/src/styles/tokens/offsets.css +143 -0
  534. package/src/styles/tokens/on-glass-fg.css +39 -0
  535. package/src/styles/tokens/property-regs.css +260 -0
  536. package/src/styles/tokens/scale-paper.css +168 -96
  537. package/src/styles/tokens/scheme-motion.css +114 -38
  538. package/src/styles/tokens/scroll-tokens.css +123 -0
  539. package/src/styles/tokens/sizing-config.css +110 -0
  540. package/{dist/styles/tokens/offsets-sizing.css → src/styles/tokens/sizing.css} +92 -204
  541. package/src/styles/tokens.css +14 -3
  542. package/src/styles/typography/semantic.css +26 -13
  543. package/src/styles/typography/utilities.css +22 -7
  544. package/src/styles/utilities/a11y-overrides.css +20 -5
  545. package/src/styles/utilities/animate.css +27 -24
  546. package/src/styles/utilities/base-misc.css +307 -0
  547. package/src/styles/utilities/base.css +47 -261
  548. package/src/styles/utilities/btn.css +17 -4
  549. package/src/styles/utilities/components.css +31 -6
  550. package/src/styles/utilities/metal.css +215 -0
  551. package/src/styles/utilities.css +14 -7
  552. package/dist/CardAction-XH4YBVEK.js +0 -158
  553. package/dist/ContextMenuContent-ON3x7cuk.js +0 -85
  554. package/dist/DialogFooter-8eZbdmPc.js +0 -165
  555. package/dist/HoverCardContent-DkMaQzH5.js +0 -83
  556. package/dist/Input-DVG_J0ne.js +0 -55
  557. package/dist/Notification-DKjKsQq8.js +0 -100
  558. package/dist/NumberFieldContent-1VtwDSgf.js +0 -145
  559. package/dist/Separator-BArl4OaB.js +0 -37
  560. package/dist/Switch-Dr--uLGH.js +0 -47
  561. package/dist/Toaster-Bm_HQSpc.js +0 -263
  562. package/dist/ToggleGroupItem-Dzk9hWsF.js +0 -157
  563. package/dist/TooltipProvider-B3MkB_8P.js +0 -104
  564. package/dist/button-BNDWhAZb.js +0 -81
  565. package/dist/check-njhk-vfu.js +0 -7
  566. package/dist/chevron-down-DKkxb4VV.js +0 -7
  567. package/dist/chevron-right-CPXbqQQz.js +0 -7
  568. package/dist/chevron-up-n_24SqI-.js +0 -7
  569. package/dist/color-DweYl7pE.js +0 -86
  570. package/dist/components/custom/constellation/composables/useConstellationPointer.d.ts +0 -35
  571. package/dist/components/custom/constellation/constellationDraw.d.ts +0 -30
  572. package/dist/components/custom/dock/DockRail.vue.d.ts +0 -89
  573. package/dist/createLucideIcon-DydS2qgk.js +0 -43
  574. package/dist/minimize-2-BV31Ob_h.js +0 -38
  575. package/dist/resolveCanvasColor-BBiYfp8g.js +0 -11
  576. package/dist/search-BSGrf2Sk.js +0 -12
  577. package/dist/styles/dock/rail-extend.css +0 -397
  578. package/dist/useCanvas2D-ClrQuZtp.js +0 -96
  579. package/dist/useConfiguratorState-kiIlun8I.js +0 -303
  580. package/dist/useRAFLoop-CdwJ7284.js +0 -109
  581. package/dist/useSpecularTracking-Bo5su68i.js +0 -32
  582. package/dist/useSpringMount-CvopqiFr.js +0 -108
  583. package/dist/useViewTransition-COsPjQVZ.js +0 -47
  584. package/dist/x-BUwTKe50.js +0 -10
  585. package/src/styles/dock/rail-extend.css +0 -397
  586. /package/dist/{CollapsibleContent-C_s6fG7r.js → CollapsibleContent-68dEXIAl.js} +0 -0
  587. /package/dist/{InstrumentChassis-UUJX0-mW.js → InstrumentChassis-CxsHSyMj.js} +0 -0
  588. /package/dist/{Label-Ck9SWEKM.js → Label-C2ejNWeC.js} +0 -0
  589. /package/dist/{ModalOverlay-CkPRRgl_.js → ModalOverlay-D1VrWyoi.js} +0 -0
  590. /package/dist/{PaperBackdrop-nBKe0vkB.js → PaperBackdrop-CqwjnfLv.js} +0 -0
  591. /package/dist/{SelectGroup-Dcczq44n.js → SelectGroup-BFiod7X2.js} +0 -0
  592. /package/dist/{_plugin-vue_export-helper-CBt_VvXa.js → _plugin-vue_export-helper-C1je1s0u.js} +0 -0
  593. /package/dist/{badge-UILT_3pZ.js → badge-D9XWW4GT.js} +0 -0
  594. /package/dist/{constants-BPOqYJAm.js → constants--C2DkLW8.js} +0 -0
  595. /package/dist/{createContext-B2RaZ-b8.js → createContext-CpBNTRMI.js} +0 -0
  596. /package/dist/{math-DeuJwLFx.js → math-Eb0w3LqU.js} +0 -0
  597. /package/dist/{menuItemVariants-DWRQXBxJ.js → menuItemVariants-D8VNHq22.js} +0 -0
  598. /package/dist/{prng-Cg22zv8g.js → prng-B-d9eYX8.js} +0 -0
  599. /package/dist/{useGlobalDark-C28t0VWJ.js → useGlobalDark-CmjB9E32.js} +0 -0
  600. /package/dist/{useIntersectionPause-Bj4sPkMh.js → useIntersectionPause-Dbozzjgm.js} +0 -0
  601. /package/dist/{useKeyboardShortcuts-BXWXOZ-9.js → useKeyboardShortcuts-BPRp33Im.js} +0 -0
  602. /package/dist/{useLiquidFlex-C12hXwOZ.js → useLiquidFlex-UmA6LMZu.js} +0 -0
  603. /package/dist/{useResizeObserver-V6nq5gJb.js → useResizeObserver-Bpoi7tRE.js} +0 -0
  604. /package/dist/{useResolveTokenColor-NUG2zYAW.js → useResolveTokenColor-vAylyR0x.js} +0 -0
  605. /package/dist/{useScrollProgress-D7bYU2RK.js → useScrollProgress-c3yxmH6a.js} +0 -0
  606. /package/dist/{useSurfaceAxis-CMnF2zHb.js → useSurfaceAxis-g0NloYEF.js} +0 -0
  607. /package/dist/{useTimer-B_PAasDL.js → useTimer-BHJOKr35.js} +0 -0
  608. /package/dist/{useUserInvalidAria-CDfJuakL.js → useUserInvalidAria-y5namzeE.js} +0 -0
  609. /package/dist/{useViewportReady-CvBcCYDf.js → useViewportReady-anbac3m6.js} +0 -0
@@ -0,0 +1,300 @@
1
+ /*
2
+ * scroll-choreography.css — the SOTA scroll-driven CHOREOGRAPHY register
3
+ * (BB.W-SCROLL-MOTION).
4
+ *
5
+ * Cascade rung AFTER scroll-driven.css. glass-ui owns the native scroll-driven
6
+ * SUBSTRATE (scroll-driven.css `scroll()`/`view()` + the `--demo-main-progress`
7
+ * named timeline + the `supportsCssTimeline` harden) but composes none of the
8
+ * CHOREOGRAPHY — the page-load BUILD, the section CASCADE, the scroll-PINNED
9
+ * fixed-stage-advances-time reveals + the smooth-scroll register. The award-winners
10
+ * hand-roll these on Lenis+GSAP (a 20-40KB JS dependency); glass-ui ships the
11
+ * NATIVE register — the platform now ships `scroll()`/`view()`/`timeline-scope`
12
+ * natively, off the compositor at 60fps (the no-net-dep fence; the 2026
13
+ * universal-support convergence). NO Lenis/GSAP/Locomotive dependency, ever.
14
+ *
15
+ * .scroll-build — the route-enter page-build (chrome -> hero -> body, a
16
+ * spring-clocked coupled-fade, @keyframes-on-mount [NOT a
17
+ * scroll timeline — the build fires on mount], PRM-snapped).
18
+ * .scroll-cascade — the orchestrated section cascade (per-child view() timeline,
19
+ * the implicit stagger [NO setTimeout], the spring-clocked
20
+ * coupled transform+opacity build).
21
+ * .scroll-pin — the fixed-stage-advances-time scroll-pinned register
22
+ * (position: sticky stage + a named scroll-timeline linked via
23
+ * timeline-scope; the stage's internal phases advance with
24
+ * scroll progress, compositor channels only).
25
+ * .smooth-scroll — the native scroll-behavior: smooth opt-in (PRM-gated,
26
+ * zero runtime — a smooth-scroll under reduce is a vestibular
27
+ * concern, so the smooth interpolation is dropped under PRM).
28
+ *
29
+ * THE DISCIPLINE (mirrors scroll-driven.css EXACTLY — the exemplary outer-gate):
30
+ * the whole register sits under `@media (prefers-reduced-motion: no-preference)`
31
+ * so under PRM no scroll/build animation attaches at all and content renders in
32
+ * its terminal state (the `from` keyframe never applies because the animation
33
+ * never binds; the .scroll-pin stage shows its terminal phase, no sweep). The
34
+ * scroll-driven recipes sit under a second `@supports (animation-timeline: …)`
35
+ * gate so a non-supporting engine gets the STATIC layout (the .scroll-pin stage
36
+ * is a correct non-pinned read, never a broken silent stage).
37
+ *
38
+ * COMPOSITOR-ONLY (the proof:no-layout-animation floor BB.W-CARD-COMPOSITE): every
39
+ * @keyframes step + transition animates ONLY transform/translate/scale/opacity/
40
+ * clip-path — NEVER a layout-triggering property (no height/padding/inline-size/
41
+ * top/grid-template). The SPATIAL (transform) legs ride the per-spring `--spring-*`
42
+ * + the matching `--spring-*-duration` settle clock (P2/P4); the EFFECTS (opacity)
43
+ * legs ride the no-overshoot `--ease-out` bezier (P1/P3 — a fade must never
44
+ * overshoot). The spring tokens are READ-ONLY (the W-GLASS-CAL clock fence — this
45
+ * register THREADS them, it never re-tunes a spring value or a duration).
46
+ */
47
+
48
+ /* ─────────────────────────────────────────────────────────────────────────────
49
+ * .scroll-build — the route-enter page-build.
50
+ *
51
+ * A MOUNT-driven entrance (route-enter), NOT a scroll-driven one — so it rides a
52
+ * plain `@keyframes ... animation` (NOT a `view()`/`scroll()` timeline; the build
53
+ * fires on first paint of the new route, not on scroll). It sits under the PRM
54
+ * no-preference gate ALONE (no `@supports (animation-timeline)` — it does not use a
55
+ * timeline, so it runs on every engine; under PRM it never binds, so the page
56
+ * mounts at its terminal state).
57
+ *
58
+ * The coordinated stagger: the .scroll-build container's direct children are the
59
+ * BEATS (chrome, hero, body), each delayed by `--scroll-build-step * --i` (the
60
+ * per-beat coordinated stagger — the page assembles chrome-first, then the hero,
61
+ * then the first section). `--i` is the beat index a consumer sets per child
62
+ * (0-based); the chassis sets it on the chrome/hero/section in reading order
63
+ * (W-HIERARCHY2 owns the ORDER; this register threads the entrance ON it).
64
+ * ─────────────────────────────────────────────────────────────────────────── */
65
+ @media (prefers-reduced-motion: no-preference) {
66
+ @keyframes gl-page-build {
67
+ from {
68
+ opacity: 0;
69
+ /* SPATIAL leg — the build rise (a transform, compositor-only). */
70
+ transform: translateY(var(--scroll-build-rise, 1.5rem));
71
+ }
72
+ to {
73
+ opacity: 1;
74
+ transform: translateY(0);
75
+ }
76
+ }
77
+
78
+ /* The page-build container marks the entrance; the beats are its children. */
79
+ .scroll-build > * {
80
+ /* The coupled build: the SPATIAL transform rides the snappy spring settle
81
+ clock (P2/P4 — the page parts arrive with crisp gravity); the opacity is
82
+ a coupled leg in the SAME keyframe on the SAME clock so the fade tracks
83
+ the rise as ONE coherent glide (P3 — fade coupled to transform). The
84
+ no-overshoot bezier governs the FADE channel where the spring's
85
+ overshoot is not wanted: `--ease-out` is named on the build's title beat
86
+ (the hero <h1> — audacious type arrives with GRAVITY, not bounce, per
87
+ W-HIERARCHY2); the other beats ride the snappy spring. */
88
+ animation: gl-page-build var(--spring-snappy-duration, 0.34s)
89
+ var(--spring-snappy) both;
90
+ animation-delay: calc(var(--scroll-build-step, 90ms) * var(--i, 0));
91
+ }
92
+
93
+ /* The hero/title beat: the audacious-type-arrives-with-gravity register — the
94
+ no-overshoot `--ease-out` bezier (a strictly monotone settle, NO overshoot
95
+ past the terminal transform), the existing .story-hero-title--enter
96
+ discipline folded into the ONE entrance system. A consumer marks the hero
97
+ beat `.scroll-build-hero`. */
98
+ .scroll-build > .scroll-build-hero {
99
+ animation: gl-page-build 0.62s var(--ease-out, ease-out) both;
100
+ }
101
+ }
102
+
103
+ /* The EXPLICIT P6 carve — under prefers-reduced-motion: reduce the page-build DROPS
104
+ the spatial transform (no movement — the vestibular floor) but KEEPS a gentle
105
+ terminal fade-in (the EFFECTS channel survives per P6: fade-keeps, transform-
106
+ drops). This sits OUTSIDE the no-preference gate as the reduce-arm of the
107
+ coordinated build (mirroring the transitions.css fade-slide PRM arm — the
108
+ opacity leg alone under reduce). The build is mount-driven, so the no-preference
109
+ gate above never binds under reduce; this arm gives PRM users the coupled-FADE
110
+ terminal entrance with ZERO motion frames (no translateY), the genuine P6 read. */
111
+ @media (prefers-reduced-motion: reduce) {
112
+ @keyframes gl-page-build-fade {
113
+ from {
114
+ opacity: 0;
115
+ }
116
+ to {
117
+ opacity: 1;
118
+ }
119
+ }
120
+ .scroll-build > * {
121
+ /* fade-keeps (opacity only), transform-DROPS (no translateY) — P6. */
122
+ animation: gl-page-build-fade var(--duration-fast, 0.16s) var(--ease-out, ease-out)
123
+ both;
124
+ animation-delay: 0s; /* no coordinated stagger under reduce — a single calm paint */
125
+ }
126
+ }
127
+
128
+ /* ─────────────────────────────────────────────────────────────────────────────
129
+ * .scroll-cascade — the orchestrated section cascade.
130
+ *
131
+ * Extends the bare `[data-scroll-reveal] > *` 6px fade into the SOTA coordinated
132
+ * build: the per-child `view()` timeline stays the implicit-stagger mechanism (each
133
+ * child owns its own timeline — NO setTimeout cascade), but the entrance is the
134
+ * spring-clocked coupled build (a deeper rise + a tighter reveal window). It sits
135
+ * under the PRM no-preference gate + the `@supports (animation-timeline: view())`
136
+ * gate (the scroll-driven.css discipline) — under PRM/non-support the sections
137
+ * render at their terminal state.
138
+ * ─────────────────────────────────────────────────────────────────────────── */
139
+ @media (prefers-reduced-motion: no-preference) {
140
+ @supports ((animation-timeline: view()) and (animation-range: entry)) {
141
+ @keyframes gl-cascade-build {
142
+ from {
143
+ /* EFFECTS leg — the coupled fade (no overshoot). */
144
+ opacity: 0;
145
+ /* SPATIAL leg — the build rise (a transform, compositor-only). */
146
+ transform: translateY(var(--scroll-cascade-rise, 1.25rem));
147
+ }
148
+ to {
149
+ opacity: 1;
150
+ transform: translateY(0);
151
+ }
152
+ }
153
+
154
+ .scroll-cascade > * {
155
+ /* The view()-timeline drives the build off each child's OWN entry into
156
+ the viewport (the implicit stagger). The progress-bound timeline maps
157
+ the entrance across the `animation-range` window; the keyframe's
158
+ coupled transform+opacity build is the orchestrated cascade (vs the
159
+ bare 6px reveal). `linear` is the right easing for a SCROLL-bound
160
+ progress map (the spring shaping lives in the section's own settle
161
+ where the build is mount-driven; a scroll-bound timeline reads
162
+ 1:1 with scroll position — a spring on a scrubbed timeline reads as
163
+ a scrubbed spring, which is correct here as the linear progress map). */
164
+ animation: gl-cascade-build auto linear both;
165
+ animation-timeline: view(block);
166
+ animation-range: entry 0% entry var(--scroll-cascade-range-end, 45%);
167
+ }
168
+
169
+ /* The horizontal-scroller variant — a `view(inline)` axis. */
170
+ .scroll-cascade.scroll-cascade--inline > * {
171
+ animation-timeline: view(inline);
172
+ }
173
+
174
+ /* The OPT-IN column-stagger variant (the Codrops nuance — even columns
175
+ from top, odd from below). A GRID-surface flourish, NOT the default (the
176
+ proportion fence: a uniform vertical cascade is the calm StoryPage
177
+ default; the column-stagger is the front-door grid showcase). A consumer
178
+ sets `--col` (the column index) per child; even/odd rise from opposite
179
+ directions, offset by `--scroll-cascade-column-stagger`. */
180
+ @keyframes gl-cascade-build-col-even {
181
+ from {
182
+ opacity: 0;
183
+ transform: translateY(calc(-1 * var(--scroll-cascade-rise, 1.25rem)));
184
+ }
185
+ to {
186
+ opacity: 1;
187
+ transform: translateY(0);
188
+ }
189
+ }
190
+ .scroll-cascade.scroll-cascade--columns > * {
191
+ animation-range: entry 0%
192
+ entry
193
+ calc(
194
+ var(--scroll-cascade-range-end, 45%) +
195
+ var(--scroll-cascade-column-stagger, 60ms) * 0
196
+ );
197
+ }
198
+ .scroll-cascade.scroll-cascade--columns > *:nth-child(even) {
199
+ animation-name: gl-cascade-build-col-even;
200
+ }
201
+ }
202
+ }
203
+
204
+ /* ─────────────────────────────────────────────────────────────────────────────
205
+ * .scroll-pin — the fixed-stage-advances-time scroll-pinned register.
206
+ *
207
+ * The SOTA "scrolling does not move the scene, it advances time inside it" model:
208
+ * a `.scroll-pin` tall container (the `--scroll-pin-stage-height` temporal space)
209
+ * holds a `.scroll-pin-stage` `position: sticky` element. The container declares
210
+ * a named `scroll-timeline`; the stage's internal phase animations bind to that
211
+ * named timeline via `timeline-scope` (so the stage animates against the
212
+ * CONTAINER'S scroll progress — the fixed stage advances time). The phase
213
+ * animations are compositor-only (transform/opacity/clip-path over the
214
+ * `animation-range` phase windows — the Codrops phased sequence: a reveal phase
215
+ * 0..45%, an expand phase 45..90%, a settle phase 90..100%).
216
+ *
217
+ * `timeline-scope` is the newest primitive — the `@supports` gate probes it (NOT
218
+ * just `scroll()`), so an engine with `scroll()`/`view()` but not `timeline-scope`
219
+ * gets the STATIC layout (a correct non-pinned read: the stage is a plain sticky
220
+ * element at its terminal phase, never a broken silent stage). In 2026
221
+ * `timeline-scope` ships alongside `scroll()`/`view()` (the universal-support
222
+ * convergence), so the CSS-only register is the ship; the JS fallback leaf (mirror
223
+ * useScrollProgress's dual-path single-writer) is BOOKED only on a material
224
+ * engine-gap reveal (the §Triumvirate support-matrix trigger) — never a JS scroll
225
+ * lib (the no-net-dep fence is binding either way).
226
+ * ─────────────────────────────────────────────────────────────────────────── */
227
+ @media (prefers-reduced-motion: no-preference) {
228
+ @supports (animation-timeline: scroll()) and (timeline-scope: --gl-pin) {
229
+ @keyframes gl-pin-reveal {
230
+ from {
231
+ opacity: 0;
232
+ transform: translateY(var(--scroll-pin-lift, 2.5rem)) scale(0.96);
233
+ }
234
+ to {
235
+ opacity: 1;
236
+ transform: translateY(0) scale(1);
237
+ }
238
+ }
239
+ @keyframes gl-pin-settle {
240
+ from {
241
+ transform: scale(1);
242
+ opacity: 1;
243
+ }
244
+ to {
245
+ /* The settle phase — a gentle compositor drift, never a layout move. */
246
+ transform: scale(1.02) translateY(calc(-1 * var(--scroll-pin-lift, 2.5rem)));
247
+ opacity: 1;
248
+ }
249
+ }
250
+
251
+ /* The tall temporal container declares a named scroll-timeline + exposes it
252
+ to descendants via timeline-scope (the fixed-stage-advances-time link). */
253
+ .scroll-pin {
254
+ position: relative;
255
+ block-size: var(--scroll-pin-stage-height, 320vh);
256
+ scroll-timeline-name: --gl-pin;
257
+ scroll-timeline-axis: block;
258
+ timeline-scope: --gl-pin;
259
+ }
260
+
261
+ /* The sticky stage — pinned to the viewport while the container scrolls
262
+ past; its phases advance against the container's --gl-pin timeline. */
263
+ .scroll-pin-stage {
264
+ position: sticky;
265
+ inset-block-start: 0;
266
+ }
267
+
268
+ /* Phase 1 — the reveal (0..45% of the container scroll). */
269
+ .scroll-pin-stage .scroll-pin-phase-reveal {
270
+ animation: gl-pin-reveal auto linear both;
271
+ animation-timeline: --gl-pin;
272
+ animation-range: 0% var(--scroll-pin-phase-reveal-end, 45%);
273
+ }
274
+
275
+ /* Phase 2 — the settle/expand (the reveal-end..expand-end window). */
276
+ .scroll-pin-stage .scroll-pin-phase-settle {
277
+ animation: gl-pin-settle auto linear both;
278
+ animation-timeline: --gl-pin;
279
+ animation-range: var(--scroll-pin-phase-reveal-end, 45%)
280
+ var(--scroll-pin-phase-expand-end, 90%);
281
+ }
282
+ }
283
+ }
284
+
285
+ /* ─────────────────────────────────────────────────────────────────────────────
286
+ * .smooth-scroll — the native smooth-scroll opt-in.
287
+ *
288
+ * The native `scroll-behavior: smooth` (CSS-first, zero runtime — NOT a JS rAF
289
+ * momentum loop, which IS Lenis and is the fence). An OPT-IN class the scroller
290
+ * (`<main>`, a `.scroll-pin` container) applies. PRM-GATED: under
291
+ * `prefers-reduced-motion: reduce` the smooth interpolation is DROPPED and the
292
+ * jump-scroll is correct (a smooth-scroll over an anchor-jump is a vestibular
293
+ * concern). A consumer wanting Lenis-grade momentum brings it in THEIR app (the
294
+ * presets-in-consumers discipline); the library ships the native register.
295
+ * ─────────────────────────────────────────────────────────────────────────── */
296
+ @media (prefers-reduced-motion: no-preference) {
297
+ .smooth-scroll {
298
+ scroll-behavior: smooth;
299
+ }
300
+ }
@@ -0,0 +1,123 @@
1
+ /*
2
+ * scroll-chrome.css — the scroll-driven floating-CHROME collapse recipe
3
+ * (BC.W-SCROLL-CHROME).
4
+ *
5
+ * Cascade rung AFTER scroll-choreography.css. Where scroll-choreography.css is the
6
+ * ENTRANCE register (the page-build / section-cascade / scroll-pinned reveals), this is
7
+ * the COLLAPSE-STATE recipe a floating chrome bar (a dock, a header) composes: scroll
8
+ * down and it SHRINKS smoothly into a compact form; scroll up and it EXPANDS back; on
9
+ * scroll-stop it SNAPS to the nearest state (the `useScrollChrome` JS machine owns the
10
+ * snap + the ramp value — this recipe is the compositor paint of `--chrome-collapse-t`).
11
+ *
12
+ * .scroll-chrome — the chrome surface (a dock/header) reads `--chrome-collapse-t`
13
+ * (0 expanded → 1 collapsed; the @property reg in property-regs.css)
14
+ * for the COMPOSITOR shrink/quiet/shadow-lift ramp.
15
+ *
16
+ * COMPOSITOR-ONLY (the proof:no-layout-animation floor — motion-canon P5). The shrink is
17
+ * `transform: scale()/translateY()` — NEVER an animated `height`/`padding`/`width` (the
18
+ * box never reflows per scroll frame; the CDP Layout track stays flat). The quiet is
19
+ * `opacity` BOUNDED above a never-invisible floor (the NN/g pale-fade-into-content trap
20
+ * is the FORBIDDEN direction — the bar reads at EVERY collapse fraction). The
21
+ * SEPARATION/shadow LIFTS as content scrolls under (Apple "as text scrolls underneath,
22
+ * shadows become more prominent") — `box-shadow` is a paint prop, compositor-safe.
23
+ *
24
+ * THE BLUR STAYS CRISP (the W-DOCK-SHRINK-BLUR fence). The chrome's resting
25
+ * `backdrop-filter` blur is NOT animated by `--chrome-collapse-t` — a shrunken bar is
26
+ * crisp glass, not a blurry mess. The recipe touches ONLY transform/opacity/box-shadow;
27
+ * the surface's own `glass-*` tier owns the (untouched) backdrop blur.
28
+ *
29
+ * PERSISTENT BY DEFAULT (the iOS-27 lesson). `--chrome-collapse-t` rests at 0 (the
30
+ * @property initial-value), so a bare `.scroll-chrome` is byte-identical to the expanded
31
+ * chrome — it does NOT collapse until the `useScrollChrome` machine (opted in with
32
+ * `collapseOnScroll: true`) ramps the custom.
33
+ *
34
+ * PRM (the discrete-state-survives model, the useFadingScroll precedent). The transform/
35
+ * opacity RAMP sits inside the `@media (prefers-reduced-motion: no-preference)` outer
36
+ * gate (the scroll-choreography.css discipline) — under reduce the continuous ramp drops;
37
+ * the `useScrollChrome` machine snaps `--chrome-collapse-t` to a discrete 0/1 endpoint, so
38
+ * the DISCRETE collapsed/expanded state stays correct, instant, never half. The shadow
39
+ * lift sits OUTSIDE the gate (a paint cue, not a vestibular motion) so the lifted
40
+ * separation reads even under reduce.
41
+ */
42
+
43
+ /* The tunable depth knobs — a consumer retunes the shrink/fade depth per chrome. */
44
+ :root {
45
+ /* The shrink depth: at fully collapsed the chrome scales to (1 − this). 0.12 → a
46
+ compact 88% bar (a real shrink that still reads as the same bar). */
47
+ --chrome-shrink-depth: 0.12;
48
+ /* The rise (px) the chrome translates toward its anchor edge as it collapses. */
49
+ --chrome-rise-px: 6px;
50
+ /* The fade depth — BOUNDED LOW: at fully collapsed opacity floors at (1 − this).
51
+ 0.28 → a 0.72 floor (the bar quiets but is NEVER invisible — the NN/g pale-fade
52
+ trap forbidden). A consumer that wants no quiet sets it 0. */
53
+ --chrome-fade-depth: 0.28;
54
+ /* The shadow-lift strength — the separation shadow grows from rest → this as content
55
+ scrolls under (Apple shadow-on-scroll). A paint prop, compositor-safe. */
56
+ --chrome-shadow-lift: 18%;
57
+ }
58
+
59
+ /* The shrink/quiet RAMP — the SPATIAL (transform) + the EFFECTS (opacity) channels. It
60
+ rides `--chrome-collapse-t` directly (no CSS transition — the JS scalar already glides
61
+ on the reader's tick; on a native-timeline engine the same custom rides
62
+ `animation-timeline: scroll(self)`, the native-ramp path). Inside the PRM no-preference
63
+ gate: under reduce the ramp drops and the chrome reads its discrete snapped endpoint. */
64
+ @media (prefers-reduced-motion: no-preference) {
65
+ .scroll-chrome {
66
+ /* SPATIAL leg — scale toward the compact size + a small rise toward the anchor
67
+ edge. transform-origin at the top (a header anchors its top; a consumer dock
68
+ re-points the origin to its natural seat). Compositor-only — never height/pad. */
69
+ transform: scale(calc(1 - var(--chrome-collapse-t) * var(--chrome-shrink-depth)))
70
+ translateY(calc(var(--chrome-collapse-t) * var(--chrome-rise-px) * -1));
71
+ transform-origin: top center;
72
+ /* EFFECTS leg — the quiet, BOUNDED above the never-invisible floor (the bar reads
73
+ at every fraction; the `* fade-depth` caps the drop, opacity never reaches 0). */
74
+ opacity: calc(1 - var(--chrome-collapse-t) * var(--chrome-fade-depth));
75
+ /* will-change the compositor channels (NEVER a layout property). */
76
+ will-change: transform, opacity;
77
+ }
78
+ }
79
+
80
+ /* The shadow LIFT — OUTSIDE the PRM gate (a paint cue, not a vestibular motion): the
81
+ separation shadow strengthens as content scrolls under the chrome. `box-shadow` is a
82
+ paint prop (compositor-safe, in the proof:no-layout-animation paint set, NOT the reflow
83
+ set). The lift composes the house `--shadow-color: var(--foreground)` so it re-tints
84
+ light↔dark for free; the strength grows from a whisper at rest → `--chrome-shadow-lift`
85
+ at fully collapsed. */
86
+ .scroll-chrome {
87
+ box-shadow: 0 calc(2px + var(--chrome-collapse-t) * 6px)
88
+ calc(8px + var(--chrome-collapse-t) * 12px)
89
+ color-mix(
90
+ in srgb,
91
+ var(--shadow-color)
92
+ calc(6% + var(--chrome-collapse-t) * var(--chrome-shadow-lift)),
93
+ transparent
94
+ );
95
+ }
96
+
97
+ /* The native-ramp path — on a `scroll()`-supporting engine the consumer can drive
98
+ `--chrome-collapse-t` off `animation-timeline: scroll(self)` directly (the
99
+ `useScrollProgress`/`--scroll-t` native precedent: the JS writer is inert, the CSS owns
100
+ the compositor ramp). The keyframe is the linear 0→1 map over the collapse range; the
101
+ consumer binds it on the chrome with its own `animation-range` (the collapse-px span).
102
+ The SNAP-to-state stays the JS leg (a snap is a discrete commit, not a continuous ramp —
103
+ it rides the `useScrollChrome` scroll-stop tick on every engine). PRM-gated + supports-
104
+ gated (a non-supporting engine reads the JS `collapseT` write, never this keyframe). */
105
+ @media (prefers-reduced-motion: no-preference) {
106
+ @supports (animation-timeline: scroll()) {
107
+ @keyframes gl-chrome-collapse {
108
+ from {
109
+ --chrome-collapse-t: 0;
110
+ }
111
+ to {
112
+ --chrome-collapse-t: 1;
113
+ }
114
+ }
115
+ /* OPT-IN: a consumer adds `.scroll-chrome--native` to ride the compositor ramp
116
+ (it must set `animation-range` for its own collapse-px span; the
117
+ `useScrollChrome` machine's JS write is the cross-engine floor + the snap). */
118
+ .scroll-chrome--native {
119
+ animation: gl-chrome-collapse auto linear both;
120
+ animation-timeline: scroll(self block);
121
+ }
122
+ }
123
+ }
@@ -70,3 +70,41 @@
70
70
  }
71
71
  }
72
72
  }
73
+
74
+ /* ── ONCE latch (the virtualized/teleporting opt-in) — BC.W-MOTION-PRESETS.
75
+ * The continuous `[data-scroll-reveal]` recipe above re-fires its entrance EVERY
76
+ * time a child re-enters the entry range — correct for a calm cascade, WRONG for
77
+ * a virtualized/teleporting list where a row scrolls out + back (it re-plays the
78
+ * fade-lift). A native `view()` timeline cannot latch "play once" (the CSS limit),
79
+ * so `[data-scroll-reveal-once]` swaps the live-range animation for a one-shot
80
+ * `@keyframes` keyed off a `data-revealed` attr a tiny JS-assist IntersectionObserver
81
+ * sets on FIRST cross + then `unobserve`s — the SHIPPED `useStaggerReveal` `once`
82
+ * machinery (its `if (once) observer?.unobserve(el)` leg), reused, not re-authored.
83
+ *
84
+ * SINGLE WRITER — an element is `[data-scroll-reveal]` XOR `[data-scroll-reveal-once]`
85
+ * (never both): the continuous path rides the `view()` timeline, the once path rides
86
+ * the `[data-revealed]` attr. They never both drive the same child.
87
+ *
88
+ * The keyframe is the SAME fade-lift values as `gl-reveal-in` but runs FORWARD
89
+ * (`from` hidden → `to` shown) so the terminal state holds without a timeline; the
90
+ * `--spring-gentle` partial-sum settle is the convergence-reveal register a consumer
91
+ * pairs with `useStagger` for the N-term build-up. Same PRM outer gate as the
92
+ * continuous recipe (a flourish — under reduce the row paints in-place, no entrance). */
93
+ @media (prefers-reduced-motion: no-preference) {
94
+ @keyframes gl-reveal-once {
95
+ from {
96
+ opacity: 0;
97
+ transform: translateY(var(--scroll-reveal-rise, 6px));
98
+ }
99
+ to {
100
+ opacity: 1;
101
+ transform: none;
102
+ }
103
+ }
104
+ [data-scroll-reveal-once] > * {
105
+ opacity: 0;
106
+ }
107
+ [data-scroll-reveal-once] > *[data-revealed] {
108
+ animation: gl-reveal-once var(--spring-gentle-duration) linear both;
109
+ }
110
+ }
@@ -36,8 +36,15 @@
36
36
  /* ── The PILL track (the glass material — DEFAULT) ── */
37
37
  .segmented-tabs {
38
38
  --bouncy-track-trim: 0.1875rem;
39
- --bouncy-track-radius: 0.4375rem;
40
- --bouncy-slider-radius: 0.3125rem;
39
+ /* BC.W-TABS-IOS — the iOS-27 stadium register. The pill reads the role-bearing
40
+ `--radius-tab` (= --radius-pill = 9999px) — on a short pill box this clamps to
41
+ half-height → a TRUE stadium end-cap (not the squared `0.3125rem` rounded-rect
42
+ the HEAD shipped). The TRACK corner is CONCENTRIC with the pill (Apple's
43
+ `.containerConcentric`): the pill radius + the trim inset, so a stadium pill
44
+ sits inside a near-stadium track. No breakpoint radius bump — a stadium does
45
+ not change radius across viewports (clean break, the 640px radius lines gone). */
46
+ --bouncy-slider-radius: var(--radius-tab);
47
+ --bouncy-track-radius: calc(var(--bouncy-slider-radius) + var(--bouncy-track-trim));
41
48
  /* The travel-squish axis — 1 at rest; useTabIndicator writes it transiently
42
49
  on selection, the indicator pairs it volume-preserving. */
43
50
  --stretch: 1;
@@ -53,7 +60,13 @@
53
60
  background: var(--glass-bg-quiet);
54
61
  backdrop-filter: var(--glass-blur-quiet);
55
62
  -webkit-backdrop-filter: var(--glass-blur-quiet);
56
- box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--border) 24%, transparent);
63
+ /* BC.W-TABS-IOS — the track hairline re-points off the `--border` ring (which read
64
+ dark over the cream plate — the D2 "black bar" on the strip top edge) onto the
65
+ BC.W-BLACK-BAR directional rim register: a bright top catch-light + a faint warm
66
+ under-shadow. The track is a thin warm-glass quiet capsule with a lit top edge,
67
+ never a dark hairline. The pill (above) carries the SAME rim plus the lift shadow
68
+ so it reads FORWARD; the track carries only the rim. */
69
+ box-shadow: var(--glass-rim-top), var(--glass-rim-bottom);
57
70
  }
58
71
 
59
72
  /* ── The vertical orientation axis (the block stack) ── */
@@ -67,28 +80,40 @@
67
80
 
68
81
  @media (min-width: 640px) {
69
82
  .segmented-tabs {
83
+ /* BC.W-TABS-IOS — only the trim (pad) axis bumps at the wider breakpoint; the
84
+ radius is the viewport-invariant stadium (--radius-tab), so the corner
85
+ track-radius re-resolves concentric off the bigger trim by construction. */
70
86
  --bouncy-track-trim: 0.25rem;
71
- --bouncy-track-radius: 0.5rem;
72
- --bouncy-slider-radius: 0.375rem;
73
87
  }
74
88
  }
75
89
 
76
90
  /* ── The shared indicator body (the PILL plate) ── */
77
91
  .segmented-indicator {
78
92
  position: absolute;
79
- /* BA.W-TABS — the active pill indicator rides the glass FLOATING tier (the
80
- W-REGISTER-IOS "selected reads as glass" register), reading FORWARD of the
81
- quiet-tier track. A glass tint, NEVER a saturated `--foreground` fill or an
82
- opaque `bg-card`. */
83
- background: var(--glass-bg-floating);
93
+ /* BC.W-TABS-IOS — the active pill is the iOS-27 / value.js DISTINCT LIFTED PLATE,
94
+ not a +30%-α same-hue brightness step. The fill reads the SHARED element-level
95
+ oklab-tinted floating pair (surfaces.css `:where(.btn-glass, .segmented-indicator)`)
96
+ — over a bright field it darkens-to-legible, over a calm field it stays
97
+ warm-cream/near-white (the W55 adaptive register reaching the pill, the "raised
98
+ near-white plate" the user pinned). The FORWARD-ness comes from the rim + lift
99
+ below, NOT from cranking the same-hue alpha. */
100
+ background: var(--glass-bg-floating-tinted);
84
101
  backdrop-filter: var(--glass-blur-floating);
85
102
  -webkit-backdrop-filter: var(--glass-blur-floating);
86
103
  z-index: 0;
87
104
  inset-block: var(--bouncy-track-trim);
88
105
  border-radius: var(--bouncy-slider-radius);
106
+ /* BC.W-TABS-IOS — the lifted-plate composite: the BC.W-BLACK-BAR directional rim
107
+ (bright top catch-light `--glass-rim-top` + warm bottom under-shadow
108
+ `--glass-rim-bottom` — the iOS-27 top-light/bottom-shadow thickness the track does
109
+ NOT carry, the FORWARD-ness device, NEVER the dark D2 hairline) PLUS a real layered
110
+ glass under-shadow (`--glass-shadow-floating`) lifting the plate ~2-3px off the
111
+ quiet track. Replaces the HEAD weak `0 1px 3px rgba(0,0,0,0.08)` + the 30%-border
112
+ dark ring (the same-hue low-contrast plate that read "not glassy"). */
89
113
  box-shadow:
90
- 0 1px 3px rgba(0, 0, 0, 0.08),
91
- 0 0 0 1px color-mix(in srgb, var(--border) 30%, transparent);
114
+ var(--glass-rim-top),
115
+ var(--glass-rim-bottom),
116
+ var(--glass-shadow-floating);
92
117
  /* The volume-preserving travel-squish: stretch along X, compress Y in
93
118
  inverse proportion. `transform-origin: center` → a symmetric width-flex
94
119
  as it travels (the indicator grows wider mid-travel, settles to fit). */
@@ -165,8 +190,10 @@
165
190
 
166
191
  @media (min-width: 640px) {
167
192
  .segmented-indicator {
193
+ /* BC.W-TABS-IOS — only the inset (trim) axis bumps; the radius stays the
194
+ viewport-invariant stadium (`--bouncy-slider-radius` = --radius-tab). The
195
+ HEAD `border-radius: 0.375rem` px-literal that squared the pill is GONE. */
168
196
  inset-block: 0.25rem;
169
- border-radius: 0.375rem;
170
197
  }
171
198
  .segmented-tabs--vertical .segmented-indicator {
172
199
  inset-block: auto;
@@ -322,7 +349,16 @@
322
349
 
323
350
  .segmented-tabs--underline .segmented-tab {
324
351
  padding: 0.375rem 0.75rem;
325
- font-size: inherit;
352
+ /* BC.W-UNDERLINE-TUNE — the audacious editorial label voice. The underline is
353
+ the PAPER/editorial material (BA.W-TABS), so its labels carry the √φ display
354
+ register, NOT the small 0.8125rem control size the PILL labels keep (the
355
+ two-voice fence — the pill is a compact control, the underline is an editorial
356
+ nav head). `--type-subheading` (1.272rem / 20.4px, the √φ rung) + the Apple
357
+ display tracking `--type-tracking-display` (−1.5%) are the BB.W-DISPLAY-TRACKING
358
+ ladder rungs CONSUMED here (never re-minted), the same pairing the semantic
359
+ display rungs ride. A confident editorial strip, not a default Tailwind row. */
360
+ font-size: var(--type-subheading);
361
+ letter-spacing: var(--type-tracking-display);
326
362
  border-radius: 0.25rem;
327
363
  /* The tab-text colour cross-fade rides the fast generic clock (the §6 doctrine
328
364
  — a colour shift is a bezier ease, never a spring), matching the pill tab
@@ -338,3 +374,34 @@
338
374
  .segmented-tabs--underline .segmented-tab:hover {
339
375
  color: color-mix(in oklab, var(--foreground) 70%, transparent);
340
376
  }
377
+
378
+ /* ════════════════════════════════════════════════════════════════════════
379
+ BB.W-DRAG-MORPH — the `.glass-drag-lift` decoration (the pull affordance).
380
+
381
+ The `useDragMorph` consumer adds this class to the morph element while
382
+ `dragging` is true (the SegmentedTabs `:draggable` indicator; the
383
+ DockLayerGroup pull rail). It is the visual "this is grabbable + grabbed"
384
+ affordance — the GRAB cursor + a sub-perceptual `--glass-specular` catch-light
385
+ lift + the `will-change: transform` compositor hint that promotes the lozenge
386
+ to its own layer for the 1:1 follow. It carries NO transform itself (the
387
+ translate + squish are the primitive's own `translate`/`--stretch` writes, the
388
+ §6 compositor channels); this class only paints the affordance + the hint.
389
+
390
+ The grab cursor sits on the morph element AT REST too (a draggable indicator
391
+ reads grabbable before the grab), so `.glass-drag-grabbable` marks the rest
392
+ affordance and `.glass-drag-lift` adds the grabbing state. PRM does not gate
393
+ the cursor/hint (they are not motion); the lift is a static specular nudge. */
394
+ .glass-drag-grabbable {
395
+ cursor: grab;
396
+ touch-action: none;
397
+ }
398
+
399
+ .glass-drag-lift {
400
+ cursor: grabbing;
401
+ /* Promote to its own compositor layer for the 1:1 follow (the translate write
402
+ is compositor-only; the hint keeps the plate off the main-thread paint). */
403
+ will-change: transform;
404
+ /* Sub-perceptual catch-light lift — the grabbed lozenge reads a hair brighter
405
+ at its specular edge (the W-GLASS-CAL specular register, disco-FREE). */
406
+ --glass-specular: 0.1;
407
+ }