@mkbabb/glass-ui 4.0.1 → 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 (459) hide show
  1. package/dist/{CardAction-CW7a0m8M.js → CardAction-8whJrLWt.js} +23 -8
  2. package/dist/{CommandShortcut-DvZNQ_HF.js → CommandShortcut-D3yxgHNn.js} +23 -12
  3. package/dist/{ConfiguratorRow-BR4l-ixA.js → ConfiguratorRow-CaP7U3ZA.js} +11 -11
  4. package/dist/ContextMenuContent-B3ZsheLV.js +90 -0
  5. package/dist/{ContextMenuSubContent-xol4sD2q.js → ContextMenuSubContent-DDRID3qC.js} +15 -15
  6. package/dist/{DataTable-CuKwF7wr.js → DataTable-Bc9kUtu_.js} +2 -2
  7. package/dist/{DialogContent-DcKK8k9i.js → DialogContent-6JtTB5x2.js} +8 -5
  8. package/dist/DialogFooter-9phqcRIS.js +80 -0
  9. package/dist/DialogScrollContent-TTuovQst.js +93 -0
  10. package/dist/HoverCardContent-Bel1gdLZ.js +88 -0
  11. package/dist/{IconChip-BTD-nay5.js → IconChip-DhbdGdFQ.js} +1 -1
  12. package/dist/{IconTooltip-Bl8gFZ8d.js → IconTooltip-B0zimd2H.js} +1 -1
  13. package/dist/Input-Cg9DF62r.js +57 -0
  14. package/dist/{Notification-VUwexFUf.js → Notification-CphK7AAm.js} +3 -3
  15. package/dist/NumberFieldContent-D8cXeyO4.js +140 -0
  16. package/dist/PagerDots-Cjx96la-.js +98 -0
  17. package/dist/{SelectScrollDownButton-CrA8F0iV.js → SelectScrollDownButton-DAKCBEdW.js} +62 -57
  18. package/dist/{SelectSeparator-DXswVdRz.js → SelectSeparator-C2UGOkXF.js} +1 -1
  19. package/dist/Separator-DQcwC2TR.js +44 -0
  20. package/dist/Switch-B8RscmRu.js +49 -0
  21. package/dist/{Toaster-Bw4xR8xV.js → Toaster-D9qIHjBI.js} +1 -1
  22. package/dist/{ToggleGroupItem-pEM9vIhs.js → ToggleGroupItem-BLtr3TJq.js} +2 -2
  23. package/dist/TooltipProvider-BJ_Y5EGX.js +109 -0
  24. package/dist/animated-digit.js +1 -1
  25. package/dist/api/index.d.ts +15 -32
  26. package/dist/api/types-extra.d.ts +31 -0
  27. package/dist/api.js +1 -1
  28. package/dist/aurora.js +579 -251
  29. package/dist/border-progress.js +49 -57
  30. package/dist/{button-DYCUa-tH.js → button-5dY1Dvhd.js} +13 -14
  31. package/dist/button.js +1 -1
  32. package/dist/canvas.js +2 -3
  33. package/dist/card.js +1 -1
  34. package/dist/carousel.js +20 -20
  35. package/dist/color-Cs0-oxYL.js +116 -0
  36. package/dist/color.js +2 -2
  37. package/dist/command.js +1 -1
  38. package/dist/completion-seal.d.ts +1 -0
  39. package/dist/completion-seal.js +89 -0
  40. package/dist/components/custom/aurora/Aurora.vue.d.ts +10 -5
  41. package/dist/components/custom/aurora/composables/color.d.ts +13 -0
  42. package/dist/components/custom/aurora/composables/frameLoop.d.ts +9 -0
  43. package/dist/components/custom/aurora/composables/runtime.d.ts +12 -0
  44. package/dist/components/custom/aurora/composables/uniformBridgeWGPU.d.ts +11 -2
  45. package/dist/components/custom/aurora/composables/wgpuSetup.d.ts +8 -0
  46. package/dist/components/custom/aurora/constants/presets.d.ts +18 -0
  47. package/dist/components/custom/aurora/constants/renderMode.d.ts +16 -8
  48. package/dist/components/custom/aurora/constants/shaders/aurora-mediums.wgsl.d.ts +1 -0
  49. package/dist/components/custom/aurora/constants/shaders/aurora.wgsl.d.ts +1 -1
  50. package/dist/components/custom/border-progress/composables/spectrum-walk.d.ts +25 -0
  51. package/dist/components/custom/border-progress/composables/useBorderSpectrum.d.ts +14 -18
  52. package/dist/components/custom/border-progress/index.d.ts +1 -1
  53. package/dist/components/custom/completion-seal/CompletionSeal.vue.d.ts +21 -0
  54. package/dist/components/custom/completion-seal/composables/useCompletionSeal.d.ts +37 -0
  55. package/dist/components/custom/completion-seal/constants.d.ts +46 -0
  56. package/dist/components/custom/completion-seal/index.d.ts +4 -0
  57. package/dist/components/custom/concentric/composables/concentricGLSetup.d.ts +7 -0
  58. package/dist/components/custom/concentric/composables/concentricWGPUSetup.d.ts +9 -0
  59. package/dist/components/custom/concentric/composables/ringField.d.ts +57 -16
  60. package/dist/components/custom/concentric/composables/uniformBridgeWGPU.d.ts +2 -1
  61. package/dist/components/custom/concentric/composables/useConcentric.d.ts +4 -4
  62. package/dist/components/custom/concentric/constants.d.ts +30 -6
  63. package/dist/components/custom/concentric/index.d.ts +2 -2
  64. package/dist/components/custom/concentric/shaders/concentric.glsl.d.ts +2 -2
  65. package/dist/components/custom/concentric/shaders/concentric.wgsl.d.ts +1 -1
  66. package/dist/components/custom/confirm-dialog/ConfirmDialog.vue.d.ts +3 -3
  67. package/dist/components/custom/constellation/Constellation.vue.d.ts +5 -4
  68. package/dist/components/custom/constellation/composables/constellationGLSetup.d.ts +10 -0
  69. package/dist/components/custom/constellation/composables/constellationWGPUSetup.d.ts +19 -0
  70. package/dist/components/custom/constellation/composables/uniformBridgeWGPU.d.ts +66 -0
  71. package/dist/components/custom/constellation/composables/useConstellation.d.ts +3 -10
  72. package/dist/components/custom/constellation/constants.d.ts +33 -0
  73. package/dist/components/custom/constellation/constellationField.d.ts +31 -1
  74. package/dist/components/custom/constellation/constellationInteraction.d.ts +23 -14
  75. package/dist/components/custom/constellation/constellationRender.d.ts +25 -0
  76. package/dist/components/custom/constellation/constellationTypes.d.ts +38 -0
  77. package/dist/components/custom/constellation/constellationWell.d.ts +15 -0
  78. package/dist/components/custom/constellation/index.d.ts +5 -5
  79. package/dist/components/custom/constellation/shaders/constellation-lines.glsl.d.ts +2 -0
  80. package/dist/components/custom/constellation/shaders/constellation-lines.wgsl.d.ts +1 -0
  81. package/dist/components/custom/constellation/shaders/constellation-points.glsl.d.ts +2 -0
  82. package/dist/components/custom/constellation/shaders/constellation-points.wgsl.d.ts +1 -0
  83. package/dist/components/custom/deck/DeckPager.vue.d.ts +29 -0
  84. package/dist/components/custom/deck/composables/useDeck.d.ts +27 -0
  85. package/dist/components/custom/deck/composables/useDeckKeyboard.d.ts +25 -0
  86. package/dist/components/custom/deck/composables/useDeckSpring.d.ts +22 -0
  87. package/dist/components/custom/deck/constants.d.ts +14 -0
  88. package/dist/components/custom/deck/index.d.ts +8 -0
  89. package/dist/components/custom/dock/DockIconButton.vue.d.ts +12 -0
  90. package/dist/components/custom/dock/DockStack.vue.d.ts +65 -0
  91. package/dist/components/custom/dock/GlassDock.vue.d.ts +4 -2
  92. package/dist/components/custom/dock/composables/dockMorphMeasure.d.ts +80 -0
  93. package/dist/components/custom/dock/composables/index.d.ts +2 -0
  94. package/dist/components/custom/dock/composables/useDockSearch.d.ts +85 -0
  95. package/dist/components/custom/dock/composables/useDockShellProps.d.ts +11 -0
  96. package/dist/components/custom/dock/constants.d.ts +18 -14
  97. package/dist/components/custom/dock/index.d.ts +5 -2
  98. package/dist/components/custom/dot-flow-field/DotFlowField.vue.d.ts +15 -11
  99. package/dist/components/custom/dot-flow-field/composables/flowField.d.ts +48 -6
  100. package/dist/components/custom/dot-flow-field/composables/uniformBridgeWGPU.d.ts +23 -8
  101. package/dist/components/custom/dot-flow-field/composables/useDotFlowField.d.ts +6 -5
  102. package/dist/components/custom/dot-flow-field/composables/useFlowParticles.d.ts +18 -5
  103. package/dist/components/custom/dot-flow-field/constants.d.ts +42 -21
  104. package/dist/components/custom/dot-flow-field/index.d.ts +2 -2
  105. package/dist/components/custom/dot-flow-field/shaders/flow-field.compute.wgsl.d.ts +1 -1
  106. package/dist/components/custom/dot-flow-field/shaders/flow-field.glsl.d.ts +4 -20
  107. package/dist/components/custom/dot-flow-field/shaders/flow-field.render.wgsl.d.ts +1 -1
  108. package/dist/components/custom/dot-matrix/DotMatrix.vue.d.ts +43 -0
  109. package/dist/components/custom/dot-matrix/composables/dotMatrixField.d.ts +89 -0
  110. package/dist/components/custom/dot-matrix/composables/uniformBridgeWGPU.d.ts +52 -0
  111. package/dist/components/custom/dot-matrix/composables/useDotMatrix.d.ts +34 -0
  112. package/dist/components/custom/dot-matrix/composables/useDotSphere.d.ts +27 -0
  113. package/dist/components/custom/dot-matrix/constants.d.ts +58 -0
  114. package/dist/components/custom/dot-matrix/index.d.ts +5 -0
  115. package/dist/components/custom/dot-matrix/shaders/dot-matrix.glsl.d.ts +4 -0
  116. package/dist/components/custom/dot-matrix/shaders/dot-matrix.wgsl.d.ts +1 -0
  117. package/dist/components/custom/easing/EasingPicker.vue.d.ts +2 -2
  118. package/dist/components/custom/easing/composables/useEasingPicker.d.ts +5 -0
  119. package/dist/components/custom/expandable-container/ExpandableContainer.vue.d.ts +11 -0
  120. package/dist/components/custom/fourier-field/FourierField.vue.d.ts +40 -47
  121. package/dist/components/custom/fourier-field/composables/fourierFieldGLSetup.d.ts +15 -0
  122. package/dist/components/custom/fourier-field/composables/fourierFieldWGPUSetup.d.ts +20 -0
  123. package/dist/components/custom/fourier-field/composables/uniformBridgeWGPU.d.ts +41 -0
  124. package/dist/components/custom/fourier-field/composables/useFourierField.d.ts +40 -37
  125. package/dist/components/custom/fourier-field/constants.d.ts +61 -4
  126. package/dist/components/custom/fourier-field/index.d.ts +23 -18
  127. package/dist/components/custom/fourier-field/shaders/fourier-field.compute.wgsl.d.ts +1 -0
  128. package/dist/components/custom/fourier-field/shaders/fourier-field.glsl.d.ts +4 -0
  129. package/dist/components/custom/fourier-field/shaders/fourier-field.render.wgsl.d.ts +1 -0
  130. package/dist/components/custom/goo-blob/GooBlob.vue.d.ts +9 -1
  131. package/dist/components/custom/goo-blob/constants.d.ts +1 -1
  132. package/dist/components/custom/goo-blob/index.d.ts +1 -1
  133. package/dist/components/custom/goo-blob/shaders/metaball-noise.wgsl.d.ts +1 -0
  134. package/dist/components/custom/goo-blob/shaders/metaball-palette.wgsl.d.ts +1 -0
  135. package/dist/components/custom/goo-blob/shaders/metaball-uniforms.glsl.d.ts +1 -1
  136. package/dist/components/custom/goo-blob/shaders/metaball.wgsl.d.ts +1 -1
  137. package/dist/components/custom/goo-blob/types.d.ts +36 -0
  138. package/dist/components/custom/goo-dot-matrix/GooDotMatrix.vue.d.ts +49 -0
  139. package/dist/components/custom/goo-dot-matrix/composables/gooDotLattice.d.ts +24 -0
  140. package/dist/components/custom/goo-dot-matrix/composables/gooDotSetup.d.ts +50 -0
  141. package/dist/components/custom/goo-dot-matrix/composables/uniformBridgeWGPU.d.ts +35 -0
  142. package/dist/components/custom/goo-dot-matrix/composables/useGooDotMatrix.d.ts +31 -0
  143. package/dist/components/custom/goo-dot-matrix/constants.d.ts +76 -0
  144. package/dist/components/custom/goo-dot-matrix/index.d.ts +5 -0
  145. package/dist/components/custom/goo-dot-matrix/shaders/goo-dot.frag.d.ts +11 -0
  146. package/dist/components/custom/goo-dot-matrix/shaders/goo-dot.wgsl.d.ts +3 -0
  147. package/dist/components/custom/labeled-field/LabeledField.vue.d.ts +21 -2
  148. package/dist/components/custom/metric-stack/MetricRow.vue.d.ts +15 -0
  149. package/dist/components/custom/pager-dots/PagerDots.vue.d.ts +9 -0
  150. package/dist/components/custom/pager-dots/index.d.ts +2 -0
  151. package/dist/components/custom/pager-dots/pagerWindow.d.ts +9 -0
  152. package/dist/components/custom/paper-grid/PaperGrid.vue.d.ts +42 -0
  153. package/dist/components/custom/paper-grid/composables/paperGrid.d.ts +90 -0
  154. package/dist/components/custom/paper-grid/composables/paperGridGLSetup.d.ts +16 -0
  155. package/dist/components/custom/paper-grid/composables/paperGridWGPUSetup.d.ts +19 -0
  156. package/dist/components/custom/paper-grid/composables/uniformBridgeWGPU.d.ts +16 -0
  157. package/dist/components/custom/paper-grid/composables/usePaperGrid.d.ts +31 -0
  158. package/dist/components/custom/paper-grid/constants.d.ts +57 -0
  159. package/dist/components/custom/paper-grid/index.d.ts +5 -0
  160. package/dist/components/custom/paper-grid/shaders/paper-grid.glsl.d.ts +4 -0
  161. package/dist/components/custom/paper-grid/shaders/paper-grid.wgsl.d.ts +1 -0
  162. package/dist/components/custom/search/FuzzySearch.vue.d.ts +8 -2
  163. package/dist/components/custom/search/SearchBar.vue.d.ts +8 -0
  164. package/dist/components/custom/search/index.d.ts +2 -0
  165. package/dist/components/custom/search/searchVariants.d.ts +19 -0
  166. package/dist/components/custom/selectable-chip/SelectableChip.vue.d.ts +50 -0
  167. package/dist/components/custom/selectable-chip/index.d.ts +2 -0
  168. package/dist/components/custom/selectable-chip/selectableChipVariants.d.ts +23 -0
  169. package/dist/components/custom/split-chars/SplitChars.vue.d.ts +39 -0
  170. package/dist/components/custom/split-chars/index.d.ts +1 -0
  171. package/dist/components/custom/tabs/SegmentedTabs.vue.d.ts +8 -6
  172. package/dist/components/custom/tabs/constants.d.ts +20 -2
  173. package/dist/components/custom/watercolor-dot/WatercolorDot.vue.d.ts +29 -16
  174. package/dist/components/custom/watercolor-dot/useWatercolorBlob.d.ts +10 -5
  175. package/dist/components/ui/_shared/index.d.ts +2 -0
  176. package/dist/components/ui/_shared/useControlSize.d.ts +46 -0
  177. package/dist/components/ui/button/index.d.ts +1 -1
  178. package/dist/components/ui/card/Card.vue.d.ts +45 -0
  179. package/dist/components/ui/card/index.d.ts +1 -1
  180. package/dist/components/ui/carousel/CarouselNext.vue.d.ts +1 -1
  181. package/dist/components/ui/carousel/CarouselPrevious.vue.d.ts +1 -1
  182. package/dist/components/ui/command/CommandDialog.vue.d.ts +9 -3
  183. package/dist/components/ui/command/CommandList.vue.d.ts +3 -0
  184. package/dist/components/ui/context-menu/ContextMenuContent.vue.d.ts +5 -1
  185. package/dist/components/ui/dropdown-menu/DropdownMenuContent.vue.d.ts +4 -0
  186. package/dist/components/ui/hover-card/HoverCardContent.vue.d.ts +3 -0
  187. package/dist/components/ui/input/Input.vue.d.ts +3 -0
  188. package/dist/components/ui/number-field/NumberFieldInput.vue.d.ts +6 -1
  189. package/dist/components/ui/select/SelectContent.vue.d.ts +3 -0
  190. package/dist/components/ui/switch/Switch.vue.d.ts +2 -0
  191. package/dist/components/ui/textarea/Textarea.vue.d.ts +3 -0
  192. package/dist/components/ui/tooltip/TooltipContent.vue.d.ts +3 -0
  193. package/dist/composables/color/index.d.ts +2 -0
  194. package/dist/composables/color/useAccentTone.d.ts +34 -0
  195. package/dist/composables/glass/useVizChoreography.d.ts +123 -0
  196. package/dist/composables/glass/webgl/createCanvasLifecycle.d.ts +10 -0
  197. package/dist/composables/glass/webgl/shaders/flow.wgsl.d.ts +1 -0
  198. package/dist/composables/glass/webgpu/index.d.ts +1 -1
  199. package/dist/composables/glass/webgpu/useGpuSubstrate.d.ts +28 -7
  200. package/dist/composables/glass/webgpu/useWebGPUCanvas.d.ts +1 -0
  201. package/dist/composables/glass/webgpu/webgpuDevice.d.ts +42 -0
  202. package/dist/composables/motion/core/index.d.ts +3 -0
  203. package/dist/composables/motion/scrollReader.d.ts +25 -0
  204. package/dist/composables/motion/springPresets.d.ts +20 -1
  205. package/dist/composables/motion/useCharStagger.d.ts +44 -0
  206. package/dist/composables/motion/useDockCtaReceive.d.ts +31 -6
  207. package/dist/composables/motion/useScrollChrome.d.ts +58 -0
  208. package/dist/composables/motion/useScrollTrigger.d.ts +67 -0
  209. package/dist/composables/motion/useSpringPress.d.ts +5 -5
  210. package/dist/composables/motion/useStaggerReveal.d.ts +24 -0
  211. package/dist/composables/sidebar/index.d.ts +4 -1
  212. package/dist/composables/sidebar/types.d.ts +68 -3
  213. package/dist/composables/sidebar/useClickDelegate.d.ts +4 -0
  214. package/dist/composables/sidebar/useLazyLoader.d.ts +5 -0
  215. package/dist/composables/sidebar/useScrollTo.d.ts +5 -0
  216. package/dist/composables/virtual/index.d.ts +4 -0
  217. package/dist/composables/virtual/useVirtualSectionWindow.d.ts +72 -0
  218. package/dist/composables/virtual/useWindowedStore.d.ts +43 -0
  219. package/dist/composables/virtual/virtualSectionLayout.d.ts +103 -0
  220. package/dist/concentric.js +495 -221
  221. package/dist/configurator.js +2 -2
  222. package/dist/confirm-dialog.js +62 -47
  223. package/dist/constellation.js +635 -235
  224. package/dist/context-menu.js +2 -2
  225. package/dist/controls.js +1 -1
  226. package/dist/createCanvasLifecycle-Gh45Ce-p.js +93 -0
  227. package/dist/dark.js +1 -1
  228. package/dist/data-table.js +1 -1
  229. package/dist/deck.d.ts +1 -0
  230. package/dist/deck.js +105 -0
  231. package/dist/dialog.js +4 -3
  232. package/dist/dock.js +602 -458
  233. package/dist/dot-flow-field.js +580 -290
  234. package/dist/dot-matrix.d.ts +1 -0
  235. package/dist/dot-matrix.js +630 -0
  236. package/dist/dotMatrixField-D_x9_1qq.js +48 -0
  237. package/dist/{dropdown-menu-CofSZuk8.js → dropdown-menu-aJmV5SqE.js} +83 -79
  238. package/dist/dropdown-menu.js +1 -1
  239. package/dist/easing.js +188 -176
  240. package/dist/expandable-container.js +42 -20
  241. package/dist/fading-scroll.js +1 -1
  242. package/dist/flow.glsl-B2P7e0MT.js +4 -0
  243. package/dist/forms.js +62 -60
  244. package/dist/fourier-field.js +825 -178
  245. package/dist/fourier-math.js +1 -1
  246. package/dist/glass-ui.css +1 -1
  247. package/dist/glass-ui.js +145 -104
  248. package/dist/goo-blob.js +171 -1228
  249. package/dist/goo-dot-matrix.d.ts +1 -0
  250. package/dist/goo-dot-matrix.js +591 -0
  251. package/dist/handmark.js +1 -1
  252. package/dist/hover-card.js +1 -1
  253. package/dist/hover-popover.js +1 -1
  254. package/dist/icon-chip.js +1 -1
  255. package/dist/icon-tooltip.js +1 -1
  256. package/dist/index.d.ts +2 -0
  257. package/dist/instrument-chassis.js +1 -1
  258. package/dist/keyboard.js +1 -1
  259. package/dist/labeled-field.js +70 -60
  260. package/dist/metric-cell.js +1 -1
  261. package/dist/metric-stack.js +11 -2
  262. package/dist/motion-core.js +54 -32
  263. package/dist/motion-curves.js +11 -1
  264. package/dist/motion.js +46 -111
  265. package/dist/notification.js +1 -1
  266. package/dist/number-field.js +1 -1
  267. package/dist/pager-dots.js +2 -91
  268. package/dist/paper-backdrop.js +1 -1
  269. package/dist/paper-grid.d.ts +1 -0
  270. package/dist/paper-grid.js +788 -0
  271. package/dist/{presets-BW2b-fr1.js → presets-CvOUqtdY.js} +3 -3
  272. package/dist/{procedural-color.glsl-CIFsJhwI.js → procedural-color.wgsl-m7Zgv35j.js} +2 -2
  273. package/dist/progress.js +1 -1
  274. package/dist/pulse.js +1 -1
  275. package/dist/reactive.js +1 -1
  276. package/dist/{useCanvas2D-B8w_E3Rr.js → resolveCanvasColor-yPyIpJt9.js} +12 -2
  277. package/dist/scrollReader-DI1NWxUw.js +42 -0
  278. package/dist/scrolling-text.js +1 -1
  279. package/dist/search.js +160 -304
  280. package/dist/select.js +3 -3
  281. package/dist/selectable-chip.d.ts +1 -0
  282. package/dist/selectable-chip.js +65 -0
  283. package/dist/separator.js +1 -1
  284. package/dist/{sheet-tZMg0E0w.js → sheet-B2flBfLH.js} +2 -2
  285. package/dist/sheet.js +1 -1
  286. package/dist/sidebar.js +216 -114
  287. package/dist/slider.js +1 -1
  288. package/dist/sortable-list.js +1 -1
  289. package/dist/spectrum-walk-BVzA7Biz.js +33 -0
  290. package/dist/{springPresets-CFQGQfdl.js → springPresets-Ce7OYCm9.js} +12 -6
  291. package/dist/styles/animations.css +13 -3
  292. package/dist/styles/cards.css +69 -0
  293. package/dist/styles/completion-seal.css +131 -0
  294. package/dist/styles/components.css +2 -3
  295. package/dist/styles/configurator.css +55 -0
  296. package/dist/styles/critical-partition.mjs +33 -11
  297. package/dist/styles/deferred.css +2 -0
  298. package/dist/styles/dock/cta-seat.css +87 -0
  299. package/dist/styles/dock/density.css +153 -0
  300. package/dist/styles/dock/layers.css +55 -7
  301. package/dist/styles/dock/morph-bridge.css +54 -18
  302. package/dist/styles/dock/morph.css +41 -33
  303. package/dist/styles/dock/overflow.css +12 -0
  304. package/dist/styles/dock/search.css +68 -0
  305. package/dist/styles/dock/shape.css +124 -0
  306. package/dist/styles/dock/shell.css +23 -5
  307. package/dist/styles/dock/stack-rail.css +264 -0
  308. package/dist/styles/dock-controls/dark-mode-toggle.css +17 -4
  309. package/dist/styles/dock-controls/icon-button.css +14 -0
  310. package/dist/styles/dock.css +11 -1
  311. package/dist/styles/glass/accent-tone.css +66 -0
  312. package/dist/styles/glass/control-surfaces.css +167 -0
  313. package/dist/styles/glass/ladder.css +67 -17
  314. package/dist/styles/glass/rim.css +19 -9
  315. package/dist/styles/glass/surfaces.css +69 -148
  316. package/dist/styles/glass.css +10 -0
  317. package/dist/styles/index.css +15 -0
  318. package/dist/styles/scroll-chrome.css +123 -0
  319. package/dist/styles/scroll-driven.css +38 -0
  320. package/dist/styles/segmented-tabs.css +50 -14
  321. package/dist/styles/theme/bridges.css +22 -0
  322. package/dist/styles/theme/radius.css +18 -1
  323. package/dist/styles/tokens/color-radius.css +13 -3
  324. package/dist/styles/tokens/dark-arm.css +39 -6
  325. package/dist/styles/tokens/glass-deep.css +28 -3
  326. package/dist/styles/tokens/glass-fx.css +44 -1
  327. package/dist/styles/tokens/glass.css +91 -31
  328. package/dist/styles/tokens/light-dark.css +1 -1
  329. package/dist/styles/tokens/offsets.css +27 -0
  330. package/dist/styles/tokens/property-regs.css +133 -0
  331. package/dist/styles/tokens/scale-paper.css +73 -29
  332. package/dist/styles/tokens/scheme-motion.css +44 -6
  333. package/dist/styles/tokens/sizing-config.css +110 -0
  334. package/dist/styles/tokens/sizing.css +55 -104
  335. package/dist/styles/tokens.css +5 -0
  336. package/dist/styles/typography/semantic.css +18 -5
  337. package/dist/styles/utilities/a11y-overrides.css +20 -5
  338. package/dist/styles/utilities/base-misc.css +52 -0
  339. package/dist/styles/utilities/btn.css +14 -3
  340. package/dist/styles/utilities/components.css +31 -6
  341. package/dist/styles/utilities/metal.css +26 -0
  342. package/dist/switch.js +1 -1
  343. package/dist/tabs.js +8 -8
  344. package/dist/timeline.js +1 -1
  345. package/dist/toast.js +1 -1
  346. package/dist/toggle-chip.js +10 -10
  347. package/dist/toggle-group.js +1 -1
  348. package/dist/tooltip.js +1 -1
  349. package/dist/typewriter.js +1 -1
  350. package/dist/uniformBridgeWGPU-CtAKl45L.js +1204 -0
  351. package/dist/{useAnimatedNumber-BfUq2bUM.js → useAnimatedNumber-CLrxicG9.js} +1 -1
  352. package/dist/{useConfiguratorState-DNlOh6c8.js → useConfiguratorState-4xblKfwd.js} +25 -24
  353. package/dist/useControlSize-SH1UmJCi.js +9 -0
  354. package/dist/useDockCtaReceive-DfFkmgL1.js +82 -0
  355. package/dist/{useDragMorph-DgxnsVJz.js → useDragMorph-BUgAC-zK.js} +4 -4
  356. package/dist/useFuzzySearch-DIhcYtcw.js +177 -0
  357. package/dist/useGpuSubstrate-4pTcp6mX.js +294 -0
  358. package/dist/{useLiquidPress-kfb4KX79.js → useLiquidPress-BooG97RY.js} +2 -2
  359. package/dist/usePointerVelocityField-QLsy3_kv.js +91 -0
  360. package/dist/useScrollChrome-D66AVP7C.js +258 -0
  361. package/dist/{useSpringMount-q1amq1SJ.js → useSpringMount-BWDnKIwh.js} +1 -1
  362. package/dist/useSpringPress-B1-Czp-V.js +36 -0
  363. package/dist/useViewTransition-CUI1nAgn.js +95 -0
  364. package/dist/{vendor-CKmzio-i.js → vendor-B2qOlYY3.js} +24 -11
  365. package/dist/virtual.d.ts +1 -0
  366. package/dist/virtual.js +225 -0
  367. package/dist/watercolor-dot.js +116 -73
  368. package/package.json +127 -7
  369. package/src/styles/animations.css +13 -3
  370. package/src/styles/cards.css +69 -0
  371. package/src/styles/completion-seal.css +131 -0
  372. package/src/styles/configurator.css +55 -0
  373. package/src/styles/critical-partition.mjs +33 -11
  374. package/src/styles/dock/cta-seat.css +87 -0
  375. package/src/styles/dock/density.css +153 -0
  376. package/src/styles/dock/layers.css +55 -7
  377. package/src/styles/dock/morph-bridge.css +54 -18
  378. package/src/styles/dock/morph.css +41 -33
  379. package/src/styles/dock/overflow.css +12 -0
  380. package/src/styles/dock/search.css +68 -0
  381. package/src/styles/dock/shape.css +124 -0
  382. package/src/styles/dock/shell.css +23 -5
  383. package/src/styles/dock/stack-rail.css +264 -0
  384. package/src/styles/dock-controls/dark-mode-toggle.css +17 -4
  385. package/src/styles/dock-controls/icon-button.css +14 -0
  386. package/src/styles/dock.css +11 -1
  387. package/src/styles/glass/accent-tone.css +66 -0
  388. package/src/styles/glass/control-surfaces.css +167 -0
  389. package/src/styles/glass/ladder.css +67 -17
  390. package/src/styles/glass/rim.css +19 -9
  391. package/src/styles/glass/surfaces.css +69 -148
  392. package/src/styles/glass.css +10 -0
  393. package/src/styles/index.css +15 -0
  394. package/src/styles/scroll-chrome.css +123 -0
  395. package/src/styles/scroll-driven.css +38 -0
  396. package/src/styles/segmented-tabs.css +50 -14
  397. package/src/styles/theme/bridges.css +22 -0
  398. package/src/styles/theme/radius.css +18 -1
  399. package/src/styles/tokens/color-radius.css +13 -3
  400. package/src/styles/tokens/dark-arm.css +39 -6
  401. package/src/styles/tokens/glass-deep.css +28 -3
  402. package/src/styles/tokens/glass-fx.css +44 -1
  403. package/src/styles/tokens/glass.css +91 -31
  404. package/src/styles/tokens/light-dark.css +1 -1
  405. package/src/styles/tokens/offsets.css +27 -0
  406. package/src/styles/tokens/property-regs.css +133 -0
  407. package/src/styles/tokens/scale-paper.css +73 -29
  408. package/src/styles/tokens/scheme-motion.css +44 -6
  409. package/src/styles/tokens/sizing-config.css +110 -0
  410. package/src/styles/tokens/sizing.css +55 -104
  411. package/src/styles/tokens.css +5 -0
  412. package/src/styles/typography/semantic.css +18 -5
  413. package/src/styles/utilities/a11y-overrides.css +20 -5
  414. package/src/styles/utilities/base-misc.css +52 -0
  415. package/src/styles/utilities/btn.css +14 -3
  416. package/src/styles/utilities/components.css +31 -6
  417. package/src/styles/utilities/metal.css +26 -0
  418. package/dist/ContextMenuContent-uWnVxDab.js +0 -85
  419. package/dist/DialogFooter-BZNX5aVr.js +0 -165
  420. package/dist/HoverCardContent-b2uaAMRR.js +0 -83
  421. package/dist/Input-h9v5LeXf.js +0 -55
  422. package/dist/NumberFieldContent-Cq7EzX-U.js +0 -138
  423. package/dist/Separator-pKF0oA4M.js +0 -37
  424. package/dist/Switch-CwYNf8bo.js +0 -47
  425. package/dist/TooltipProvider-rzvnXz60.js +0 -104
  426. package/dist/color-DweYl7pE.js +0 -86
  427. package/dist/components/custom/constellation/composables/useConstellationPointer.d.ts +0 -35
  428. package/dist/components/custom/constellation/constellationDraw.d.ts +0 -30
  429. package/dist/components/custom/dock/DockRail.vue.d.ts +0 -89
  430. package/dist/createCanvasLifecycle-CHD5XrDW.js +0 -82
  431. package/dist/procedural-color.wgsl-CToRHugY.js +0 -224
  432. package/dist/resolveCanvasColor-CUyHr5Uu.js +0 -11
  433. package/dist/styles/dock/rail-extend.css +0 -397
  434. package/dist/usePointerVelocityField-JbRd5CrM.js +0 -137
  435. package/dist/useRAFLoop-UYa4zoiN.js +0 -109
  436. package/dist/useSpringPress-BsqPr7FJ.js +0 -34
  437. package/src/styles/dock/rail-extend.css +0 -397
  438. /package/dist/{FadingScroll-DI6hQhT9.js → FadingScroll-DLRbH5Xr.js} +0 -0
  439. /package/dist/{HoverPopover-CbqbNwgU.js → HoverPopover-BcIxvyqZ.js} +0 -0
  440. /package/dist/{InstrumentChassis-Bx0F_q5g.js → InstrumentChassis-CxsHSyMj.js} +0 -0
  441. /package/dist/{PaperBackdrop-Vf3tlpvd.js → PaperBackdrop-CqwjnfLv.js} +0 -0
  442. /package/dist/{Progress-DctG61iZ.js → Progress-CnqB7gLm.js} +0 -0
  443. /package/dist/{ScrollingText-yOpBzFYq.js → ScrollingText-CTZbA_cG.js} +0 -0
  444. /package/dist/{SelectGroup-DwwjicPY.js → SelectGroup-BFiod7X2.js} +0 -0
  445. /package/dist/{compile-CQEFRTmx.js → compile-nZ1xVYTp.js} +0 -0
  446. /package/dist/{constants-BPOqYJAm.js → constants--C2DkLW8.js} +0 -0
  447. /package/dist/{math-BINYmg5z.js → math-Eb0w3LqU.js} +0 -0
  448. /package/dist/{prng-Za0Rmgag.js → prng-B-d9eYX8.js} +0 -0
  449. /package/dist/{slider-DVb4HXU-.js → slider-2A0rPn79.js} +0 -0
  450. /package/dist/{useGlobalDark-C28t0VWJ.js → useGlobalDark-CmjB9E32.js} +0 -0
  451. /package/dist/{useIntersectionPause-Bj4sPkMh.js → useIntersectionPause-Dbozzjgm.js} +0 -0
  452. /package/dist/{useInterval-CvK1mL92.js → useInterval-CNdua40W.js} +0 -0
  453. /package/dist/{useKeyboardShortcuts-BXWXOZ-9.js → useKeyboardShortcuts-BPRp33Im.js} +0 -0
  454. /package/dist/{useLiquidFlex-mZPMiNXh.js → useLiquidFlex-UmA6LMZu.js} +0 -0
  455. /package/dist/{useScrollProgress-D7bYU2RK.js → useScrollProgress-c3yxmH6a.js} +0 -0
  456. /package/dist/{useSortable-DHjtZSEd.js → useSortable-BVqlJRBR.js} +0 -0
  457. /package/dist/{useTextHighlight-CWEi25hf.js → useTextHighlight-NmBM5V_4.js} +0 -0
  458. /package/dist/{vReveal-Czsb7zQC.js → vReveal-D9k0jADx.js} +0 -0
  459. /package/dist/{vSpecular-CQFmLNzA.js → vSpecular-EX7loENl.js} +0 -0
@@ -46,8 +46,18 @@
46
46
  squircle + a11y @supports overrides, which must stay last): */
47
47
  @import "./glass/material.css";
48
48
  @import "./glass/ladder.css";
49
+ /* BC.W-ACCENT-TONE — the contrast-floored 3-channel tonal-accent register
50
+ (.accent-tone: one --tone → idle/active/edge/ink). AFTER ladder.css (reads the
51
+ warm-cream --card surface the ladder mints); the SOLE writer of the --accent-*
52
+ channels, so the placement is cascade-order-invariant. */
53
+ @import "./glass/accent-tone.css";
49
54
  @import "./glass/rim.css";
50
55
  @import "./glass/surfaces.css";
56
+ /* BC.W-CARVE6 — the .input-pill / .control-surface form-control REST register
57
+ carved out of surfaces.css to hold the 500-line bound, @import-ed IMMEDIATELY
58
+ AFTER surfaces.css and BEFORE surface-axis.css (same @layer components, same
59
+ source order — the dist is byte-isomorphic). */
60
+ @import "./glass/control-surfaces.css";
51
61
  @import "./glass/surface-axis.css";
52
62
  @import "./glass/reveal.css";
53
63
  @import "./glass/deep.css";
@@ -120,6 +120,12 @@
120
120
  * native .smooth-scroll opt-in) on the native
121
121
  * scroll()/view()/timeline-scope substrate; NO
122
122
  * Lenis/GSAP dep (BB.W-SCROLL-MOTION).
123
+ * 10a''. scroll-chrome.css — BC.W-SCROLL-CHROME the scroll-driven floating-
124
+ * CHROME collapse recipe (.scroll-chrome reads
125
+ * --chrome-collapse-t for the compositor shrink/
126
+ * quiet/shadow-lift; PERSISTENT-by-default, crisp
127
+ * blur, never-invisible quiet, PRM-discrete). The
128
+ * useScrollChrome JS machine owns the snap + ramp.
123
129
  * 10b. view-transition.css — the `.gl-list-item` View-Transitions group
124
130
  * recipe + `--vt-*` axes (AQ.W5; the
125
131
  * `useViewTransition` substrate's CSS half).
@@ -168,6 +174,7 @@
168
174
  @import "./animations.css";
169
175
  @import "./scroll-driven.css";
170
176
  @import "./scroll-choreography.css";
177
+ @import "./scroll-chrome.css";
171
178
  @import "./view-transition.css";
172
179
  @import "./utilities.css";
173
180
  /* BA.W-MENU-GLASS — the glass menu-row + menu-section register. @import-ed AFTER
@@ -193,6 +200,14 @@
193
200
  masks + the PRM milestone-pulse bracket. */
194
201
  @import "./border-progress.css";
195
202
 
203
+ /* BC.W-AX-COMPLETION-SEAL — the hero-scale earned-GOLD completion seal: a one-shot
204
+ gold-draw mark (a `stroke-dashoffset` wipe on the 4 `@property` motion tokens
205
+ `--seal-draw`/`--seal-scale`/`--seal-glint`/`--seal-ink`, registered in
206
+ tokens/property-regs.css §18). The ink reads the W-PHASE-PALETTE earned-gold
207
+ register; the glint composes the W-AX-METAL-GLOW catch-light. One-shot, PRM-gated,
208
+ compositor-only — the feedback-surface partial. */
209
+ @import "./completion-seal.css";
210
+
196
211
  /* Ensure Tailwind scans glass-ui's compiled component templates for the utility
197
212
  classes they emit (CVA variant classes like text-destructive-foreground,
198
213
  layout utilities like h-full/shrink-0).
@@ -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;
@@ -55,7 +62,13 @@
55
62
 
56
63
  backdrop-filter: var(--glass-blur-quiet);
57
64
  -webkit-backdrop-filter: var(--glass-blur-quiet);
58
- box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--border) 24%, transparent);
65
+ /* BC.W-TABS-IOS — the track hairline re-points off the `--border` ring (which read
66
+ dark over the cream plate — the D2 "black bar" on the strip top edge) onto the
67
+ BC.W-BLACK-BAR directional rim register: a bright top catch-light + a faint warm
68
+ under-shadow. The track is a thin warm-glass quiet capsule with a lit top edge,
69
+ never a dark hairline. The pill (above) carries the SAME rim plus the lift shadow
70
+ so it reads FORWARD; the track carries only the rim. */
71
+ box-shadow: var(--glass-rim-top), var(--glass-rim-bottom);
59
72
  }
60
73
 
61
74
  /* ── The vertical orientation axis (the block stack) ── */
@@ -69,20 +82,24 @@
69
82
 
70
83
  @media (min-width: 640px) {
71
84
  .segmented-tabs {
85
+ /* BC.W-TABS-IOS — only the trim (pad) axis bumps at the wider breakpoint; the
86
+ radius is the viewport-invariant stadium (--radius-tab), so the corner
87
+ track-radius re-resolves concentric off the bigger trim by construction. */
72
88
  --bouncy-track-trim: 0.25rem;
73
- --bouncy-track-radius: 0.5rem;
74
- --bouncy-slider-radius: 0.375rem;
75
89
  }
76
90
  }
77
91
 
78
92
  /* ── The shared indicator body (the PILL plate) ── */
79
93
  .segmented-indicator {
80
94
  position: absolute;
81
- /* BA.W-TABS — the active pill indicator rides the glass FLOATING tier (the
82
- W-REGISTER-IOS "selected reads as glass" register), reading FORWARD of the
83
- quiet-tier track. A glass tint, NEVER a saturated `--foreground` fill or an
84
- opaque `bg-card`. */
85
- background: var(--glass-bg-floating);
95
+ /* BC.W-TABS-IOS — the active pill is the iOS-27 / value.js DISTINCT LIFTED PLATE,
96
+ not a +30%-α same-hue brightness step. The fill reads the SHARED element-level
97
+ oklab-tinted floating pair (surfaces.css `:where(.btn-glass, .segmented-indicator)`)
98
+ — over a bright field it darkens-to-legible, over a calm field it stays
99
+ warm-cream/near-white (the W55 adaptive register reaching the pill, the "raised
100
+ near-white plate" the user pinned). The FORWARD-ness comes from the rim + lift
101
+ below, NOT from cranking the same-hue alpha. */
102
+ background: var(--glass-bg-floating-tinted);
86
103
  -webkit-backdrop-filter: var(--glass-blur-floating);
87
104
 
88
105
  backdrop-filter: var(--glass-blur-floating);
@@ -90,9 +107,17 @@
90
107
  z-index: 0;
91
108
  inset-block: var(--bouncy-track-trim);
92
109
  border-radius: var(--bouncy-slider-radius);
110
+ /* BC.W-TABS-IOS — the lifted-plate composite: the BC.W-BLACK-BAR directional rim
111
+ (bright top catch-light `--glass-rim-top` + warm bottom under-shadow
112
+ `--glass-rim-bottom` — the iOS-27 top-light/bottom-shadow thickness the track does
113
+ NOT carry, the FORWARD-ness device, NEVER the dark D2 hairline) PLUS a real layered
114
+ glass under-shadow (`--glass-shadow-floating`) lifting the plate ~2-3px off the
115
+ quiet track. Replaces the HEAD weak `0 1px 3px rgba(0,0,0,0.08)` + the 30%-border
116
+ dark ring (the same-hue low-contrast plate that read "not glassy"). */
93
117
  box-shadow:
94
- 0 1px 3px rgba(0, 0, 0, 0.08),
95
- 0 0 0 1px color-mix(in srgb, var(--border) 30%, transparent);
118
+ var(--glass-rim-top),
119
+ var(--glass-rim-bottom),
120
+ var(--glass-shadow-floating);
96
121
  /* The volume-preserving travel-squish: stretch along X, compress Y in
97
122
  inverse proportion. `transform-origin: center` → a symmetric width-flex
98
123
  as it travels (the indicator grows wider mid-travel, settles to fit). */
@@ -169,8 +194,10 @@
169
194
 
170
195
  @media (min-width: 640px) {
171
196
  .segmented-indicator {
197
+ /* BC.W-TABS-IOS — only the inset (trim) axis bumps; the radius stays the
198
+ viewport-invariant stadium (`--bouncy-slider-radius` = --radius-tab). The
199
+ HEAD `border-radius: 0.375rem` px-literal that squared the pill is GONE. */
172
200
  inset-block: 0.25rem;
173
- border-radius: 0.375rem;
174
201
  }
175
202
  .segmented-tabs--vertical .segmented-indicator {
176
203
  inset-block: auto;
@@ -328,7 +355,16 @@
328
355
 
329
356
  .segmented-tabs--underline .segmented-tab {
330
357
  padding: 0.375rem 0.75rem;
331
- font-size: inherit;
358
+ /* BC.W-UNDERLINE-TUNE — the audacious editorial label voice. The underline is
359
+ the PAPER/editorial material (BA.W-TABS), so its labels carry the √φ display
360
+ register, NOT the small 0.8125rem control size the PILL labels keep (the
361
+ two-voice fence — the pill is a compact control, the underline is an editorial
362
+ nav head). `--type-subheading` (1.272rem / 20.4px, the √φ rung) + the Apple
363
+ display tracking `--type-tracking-display` (−1.5%) are the BB.W-DISPLAY-TRACKING
364
+ ladder rungs CONSUMED here (never re-minted), the same pairing the semantic
365
+ display rungs ride. A confident editorial strip, not a default Tailwind row. */
366
+ font-size: var(--type-subheading);
367
+ letter-spacing: var(--type-tracking-display);
332
368
  border-radius: 0.25rem;
333
369
  /* The tab-text colour cross-fade rides the fast generic clock (the §6 doctrine
334
370
  — a colour shift is a bezier ease, never a spring), matching the pill tab
@@ -315,6 +315,14 @@
315
315
  --shadow-cartoon-md: var(--cartoon-shadow-md);
316
316
  --shadow-cartoon-lg: var(--cartoon-shadow-lg);
317
317
 
318
+ /* BC.W-CONTROL-SMOOTH — the warm focus-ring box-shadow bridged to the
319
+ `shadow-focus-ring` utility (AW.W26 --focus-ring-shadow register). The
320
+ `.focus-ring` utility auto-arms on :focus-visible; this bridge lets a
321
+ surface compose the SAME warm ring on a NON-:focus-visible state (the
322
+ TagsInputItem reka roving-tabindex `data-[state=active]` selection) via the
323
+ @theme utility, not a `shadow-[var(--focus-ring-shadow)]` arbitrary wrap. */
324
+ --shadow-focus-ring: var(--focus-ring-shadow);
325
+
318
326
  /* ═══════════════════════════════════════════════
319
327
  Blur → blur-* and backdrop-blur-* utilities
320
328
  ═══════════════════════════════════════════════ */
@@ -332,6 +340,15 @@
332
340
  --ease-spring-snappy: var(--spring-snappy);
333
341
  --ease-spring-bouncy: var(--spring-bouncy);
334
342
  --ease-spring-gentle: var(--spring-gentle);
343
+ /* BC.W-SPRING-EASE — the minted iOS interactive press register's @theme alias
344
+ (the documented public register the consumers reach by name; the JS path
345
+ reads it via useSpringPress + --glass-btn-press-t). */
346
+ --ease-spring-press: var(--spring-press);
347
+ /* BC.W-DECK — the deck slide-transition spring's @theme alias (the documented
348
+ public register a consumer's slide `transition-timing-function` reaches by
349
+ name: `ease-spring-deck`). --spring-deck aliases --spring-smooth; the headless
350
+ library mints the register, the deck consumer reads it (presets-in-consumers). */
351
+ --ease-spring-deck: var(--spring-deck);
335
352
 
336
353
  --ease-standard: var(--motion-ease-standard);
337
354
  --ease-out: var(--motion-ease-out);
@@ -352,6 +369,11 @@
352
369
  --transition-duration-panel: var(--duration-panel);
353
370
  --transition-duration-xl: var(--duration-xl);
354
371
  --transition-duration-xxl: var(--duration-xxl);
372
+ /* BC.W-CONTROL-SMOOTH — the named iOS control-press surface beat (0.12s, the
373
+ calm bg/color/box-shadow cross-fade clock the `.control-surface`/Toggle
374
+ family rides). Bridged to the `duration-control` utility so a control
375
+ composes the named clock, not a `duration-[var(--duration-control)]` wrap. */
376
+ --transition-duration-control: var(--duration-control);
355
377
  /* BA.W-GLASS-CAL — `--transition-duration-sparkle` bridge DELETED with the
356
378
  `--duration-sparkle` token (the disco retirement); no `duration-sparkle`
357
379
  utility consumer. */
@@ -42,9 +42,26 @@
42
42
  on Checkbox + base Tabs onto a softer, named radius. One geometry language
43
43
  across the form family — token + class only, no new primitive. */
44
44
  --radius-field: var(--radius-2xl);
45
- --radius-control: var(--radius-md);
45
+ /* BC.W-CONTROL-SMOOTH — the small-inline-control corner rung is a STADIUM, not a
46
+ fixed small px. The prior `--radius-md` (6px) read SQUARE on a 16-24px control
47
+ (6px on a 16px box = 0.38-of-height — a rounded-rect, not a pill); the iOS-27
48
+ small-control silhouette is a near-stadium pill where the radius SCALES with the
49
+ control (clamped to half-height by `--radius-pill`'s 9999px geometry, so a 16px
50
+ control reads an 8px-radius pill — soft at every size). This retires the raw
51
+ `rounded-sm` (4px) on Checkbox + base Tabs AND the small-control square class in
52
+ ONE rung. The `card` toggle TILE keeps `--radius-card` (the large glass surface
53
+ keeps its 1rem squircle — only the small inline controls re-round). The corner-
54
+ SHAPE squircle axis reads at LARGE radius only (ROUND set = card+pill for small),
55
+ so the small pills stay ROUND (no regression). */
56
+ --radius-control: var(--radius-pill);
46
57
  --radius-badge: var(--radius-pill);
47
58
  --radius-dock: var(--radius-pill);
59
+ /* BC.W-TABS-IOS — the iOS-27 segmented-control stadium register. The pill is a
60
+ stadium by construction (--radius-pill clamps to half-height on a short box →
61
+ a true end-cap), so the tab strip stops being a squared rounded-rect. The
62
+ value.js DESIGN.md idiom: the role-bearing pill token, NOT a hand-rolled
63
+ `rounded-full`. A consumer retunes the tab geometry via `:root { --radius-tab }`. */
64
+ --radius-tab: var(--radius-pill);
48
65
  /* AW.W3b — the big-dock card shell's default (comfortable-density) radius.
49
66
  The density-scaled --dock-card-radius (dock.css) resolves through this. */
50
67
  --radius-dock-card: var(--radius-3xl);
@@ -121,6 +121,16 @@
121
121
  `--border` (which is `var(--neutral-4)`, light-dark()-resolved). */
122
122
  --border-soft: color-mix(in srgb, var(--border) 45%, transparent);
123
123
 
124
+ /* BC.W-SEPARATOR-FIX — the warm separator hairline ink. A rule reads as
125
+ WARM material, not a grey `--border` line (BA.W-NO-GRAY floor): the
126
+ split-rule segments + un-labelled hairline both paint `--separator-ink`.
127
+ It is a `color-mix` off `--foreground` (`light-dark()`-resolved, so it
128
+ auto-darks warm in both modes — the warm-ink hairline, not `--neutral-4`
129
+ grey). 22% is a visible-but-whisper rule (crisper than `--border-soft`'s
130
+ 45%-of-grey; this one is foreground-derived so it carries the warm hue
131
+ directly). A consumer retints every separator from this single rung. */
132
+ --separator-ink: color-mix(in srgb, var(--foreground) 22%, transparent);
133
+
124
134
  /* AQ.W3 §W3.4 — tokenized scrollbar thumb + track. Minted in the color
125
135
  block so the `scrollbar-color` / `::-webkit-scrollbar-thumb` rungs read a
126
136
  single source. Auto-dark via `--muted-foreground` (light-dark()-resolved,
@@ -224,9 +234,9 @@
224
234
  keyframes.js ω₀ = 2π/response convention, mints no second ω). */
225
235
  --constellation-warp-response: 0.55; /* s — keyframes.js angular period (NOT a settle) */
226
236
  --constellation-warp-zeta: 1.0; /* critically damped — a focal mark must NOT ring */
227
- --constellation-well-gain: 14000; /* inverse-square force scale (the held-pull gain) */
237
+ --constellation-well-gain: 19000; /* inverse-square force scale (the held-pull gain). Lifted 14000→19000 (BC.W-VIZ-CONSTELLATION): the GPU substrate's high-refresh frame loop ramps the held strength to only ~0.70 within the egg-live π perturb window, so the weaker effective force (fought by the |v|→speed ease-back) fell under the gate's ≥20% perturb floor — a stronger pull restores the heat. Held-physics only; rest is byte-untouched. Mirrors DEFAULT_WELL_CONFIG.gain. */
228
238
  --constellation-well-reach: 340; /* base-width px — the well's reach (k-scaled at step) */
229
- --constellation-well-ramp: 4.0; /* 1/s — the ARM rate (≈0.25s bloom; release is the fixed brisk WELL_RELEASE_RAMP — the field-cools invariant, not consumer-tunable) */
239
+ --constellation-well-ramp: 8.0; /* 1/s — the ARM rate. Doubled 4→8 (BC.W-VIZ-CONSTELLATION) so the strength reaches near-full power within the gate's 40-frame perturb window at the GPU substrate's high refresh (~0.12s bloom); release is the fixed brisk WELL_RELEASE_RAMP — the field-cools invariant, not consumer-tunable. Mirrors DEFAULT_WELL_CONFIG.ramp. */
230
240
  --constellation-well-max-speed: 4.0; /* base-width px/frame cap — the no-slingshot clamp */
231
241
  --constellation-well-hold-ms: 140; /* ms hold before the well arms */
232
242
  --constellation-wander-idle: 8000; /* ms — min idle between auto re-targets (the W-CON1 drift cadence) */
@@ -243,7 +253,7 @@
243
253
  --section-color-2: oklch(0.484 0.163 265.5); /* indigo */
244
254
  --section-color-3: oklch(0.542 0.089 222.8); /* teal-cyan */
245
255
  --section-color-4: oklch(0.551 0.088 171.1); /* forest */
246
- --section-color-5: oklch(0.623 0.124 69.6); /* amber */
256
+ --section-color-5: oklch(0.530 0.124 69.6); /* amber — BC.W-ACCENT-TONE #13: the safeAccentColor-derived rebaseline (HEAD 0.623 → 0.530, 3.49:1 → 5.11:1 vs the warm-cream card; the dark arm already clears 8.07:1 so it stays). --viz-amber auto-tracks; fourier's :root override deletes on adopt. */
247
257
  --section-color-6: oklch(0.579 0.201 30.4); /* tomato-red */
248
258
  --section-color-7: oklch(0.532 0.180 317.5); /* violet */
249
259
  --section-color-8: oklch(0.520 0.176 8.4); /* ruby */
@@ -214,6 +214,13 @@
214
214
  --glass-opacity-floating: 0.88;
215
215
  --glass-opacity-overlay: 0.96;
216
216
  --glass-opacity-chassis: 0.36;
217
+ /* BC.W-DIALOG-GLASS — the dialog dark register lifts ~0.08 over the light arm
218
+ (0.68 → 0.76) for read-weight over the deep canvas, mirroring the dark opacity
219
+ ladder (it sits between dark `resting` 0.72 and `floating` 0.88 — see-through
220
+ but legible over the deep page). The SAME named token as the light arm, per-
221
+ mode; the composed `--glass-bg-dialog` (glass.css :root) re-resolves from it
222
+ automatically per mode. */
223
+ --glass-opacity-dialog: 0.76;
217
224
  --glass-grain-opacity: 0.045;
218
225
  --glass-highlight: inset 0 0.5px 0 0 hsl(0 0% 100% / 0.08);
219
226
 
@@ -225,12 +232,29 @@
225
232
  aurora/page behind reads with chroma + a glow. The blur() RADIUS is the
226
233
  light-arm primitive UNTOUCHED (W-GLASS-CAL owns the radius dial-back) — only the
227
234
  saturate/brightness COMPANIONS lift here. The lower rungs lift more (they're
228
- thinner, the backdrop carries the read); the heavy overlay lifts least. */
229
- --glass-blur-wash: blur(calc(var(--glass-blur-wash-radius) * var(--glass-level))) saturate(1.35) brightness(1.18);
230
- --glass-blur-quiet: blur(calc(var(--glass-blur-quiet-radius) * var(--glass-level))) saturate(1.35) brightness(1.16);
231
- --glass-blur-resting: blur(calc(var(--glass-blur-resting-radius) * var(--glass-level))) saturate(1.30) brightness(1.14);
232
- --glass-blur-floating: blur(calc(var(--glass-blur-floating-radius) * var(--glass-level))) saturate(1.28) brightness(1.10);
233
- --glass-blur-overlay: blur(calc(var(--glass-blur-overlay-radius) * var(--glass-level))) saturate(1.22) brightness(1.06);
235
+ thinner, the backdrop carries the read); the heavy overlay lifts least.
236
+
237
+ BC.W-GLASS-LEGIBILITY-MEASURED — the per-rung `--glass-saturate-{tier}` knob
238
+ (the speedtest-AX BC-W10 fold) is the SAME named register as the light arm
239
+ (tokens/glass.css), per-mode — the dark identity. The dark values ARE this
240
+ scope's luminosity lift (wash/quiet 1.35, resting 1.30, floating 1.28, overlay
241
+ 1.22) become the dark token defaults, and each `--glass-blur-{tier}` reads
242
+ `saturate(var(--glass-saturate-{tier}))` THROUGH — so a `.dark` override re-
243
+ resolves the rung saturation with ZERO recipe edit, AND the composed dark blur
244
+ is BYTE-IDENTICAL to the old baked literal. The `brightness()` companions stay
245
+ baked (this fold mints ONLY the saturate knob). The dark dock/deep saturate stay
246
+ baked (off-ladder footprint rungs, not part of the {wash..overlay} ladder).
247
+ Machine-locked by `proof:glass-legibility` L7. */
248
+ --glass-saturate-wash: 1.35;
249
+ --glass-saturate-quiet: 1.35;
250
+ --glass-saturate-resting: 1.30;
251
+ --glass-saturate-floating: 1.28;
252
+ --glass-saturate-overlay: 1.22;
253
+ --glass-blur-wash: blur(calc(var(--glass-blur-wash-radius) * var(--glass-level))) saturate(var(--glass-saturate-wash)) brightness(1.18);
254
+ --glass-blur-quiet: blur(calc(var(--glass-blur-quiet-radius) * var(--glass-level))) saturate(var(--glass-saturate-quiet)) brightness(1.16);
255
+ --glass-blur-resting: blur(calc(var(--glass-blur-resting-radius) * var(--glass-level))) saturate(var(--glass-saturate-resting)) brightness(1.14);
256
+ --glass-blur-floating: blur(calc(var(--glass-blur-floating-radius) * var(--glass-level))) saturate(var(--glass-saturate-floating)) brightness(1.10);
257
+ --glass-blur-overlay: blur(calc(var(--glass-blur-overlay-radius) * var(--glass-level))) saturate(var(--glass-saturate-overlay)) brightness(1.06);
234
258
  --glass-blur-dock: blur(calc(var(--glass-blur-dock-radius) * var(--glass-level))) saturate(1.30) brightness(1.12);
235
259
 
236
260
  /* BB.W-DEEP-GLASS — the DARK arm of the OPT-IN deep tier (the luminous-dark
@@ -338,6 +362,15 @@
338
362
  resolves to the `-dark` alpha on the deeper canvas. */
339
363
  --glass-edge-light: var(--glass-edge-light-dark);
340
364
 
365
+ /* BC.W-BLACK-BAR D2 — the DIRECTIONAL rim dark arm (plain per-mode pair, NEVER
366
+ light-dark() round an inset — MEMORY: the inset-shadow trap). The top
367
+ catch-light lifts to 0.40 (the dark plate's fill barely separates from the deep
368
+ page, so the rim is the PRIMARY silhouette device — dark glass glows where light
369
+ passes; mirrors the --glass-edge-light-dark 0.18→0.22 lift). The bottom warm
370
+ under-shadow holds at 6% — the shadow grounds the plate in BOTH modes. */
371
+ --glass-rim-top: inset 0 1px 0 hsl(0 0% 100% / 0.40);
372
+ --glass-rim-bottom: inset 0 -1px 0 color-mix(in srgb, var(--foreground) 6%, transparent);
373
+
341
374
  /* AW.W23 — the chromatic-fringe + adaptive-tint dark arm. The fringe drops
342
375
  to a lower-luminance warm/cool pair on the deep canvas; `--glass-tint-
343
376
  source` auto-flips with `--card` (no override needed — the default already
@@ -18,7 +18,7 @@
18
18
  * dark companions).
19
19
  *
20
20
  * ── The Apple-range derivation (DELTA cross-ref) ───────────────────────────
21
- * Apple home nav: saturate(1.8) blur(20px) (the canonical measure)
21
+ * Apple home nav: saturate(1.8) blur(20px) (the canonical measure; the CEILING)
22
22
  * Apple product tiers: blur(14-20px) (the band)
23
23
  * glass-ui calm ceiling: floating 13px / saturate 1.18 (W-GLASS-CAL dial-back)
24
24
  * glass-ui DEEP: 16px / saturate 1.5 (STRICTLY deeper on BOTH axes,
@@ -29,14 +29,39 @@
29
29
  * and the warm-cream light-concentration ceiling (AX.W52 D19 — a saturate that
30
30
  * over-juices a colored substrate reads as a garish smear) keeps it just-rich.
31
31
  * The deepest BLUR carries the "more glass" read; the saturate stays restrained.
32
+ *
33
+ * ── The deep-tier BUDGET CALL (BC.W-GLASS-LEGIBILITY-MEASURED L4) ───────────
34
+ * The deep blur radius is the most expensive idiom glass-ui ships (`backdrop-
35
+ * filter` cost is super-linear in the radius past ~16px). The wave's call:
36
+ * STAY at the budget-clearing 16px and BOOK the 18-20px push (toward the live-
37
+ * measured apple.com nav `blur(20px)` ceiling, research/apple-glass.md §1.1)
38
+ * behind a recorded `profile:budget` clearance — the full 20px is the BOOKED
39
+ * successor (apple-ios27.md §1.4 "the full 20px booked"), NOT a silent over-
40
+ * spend. `--glass-saturate-deep-ceiling` BAKES the apple.com nav saturate 1.8 as
41
+ * the deep-tier CEILING (the load-bearing term — research/apple-glass.md §4
42
+ * "saturate 1.5 shipped, bake 1.8 as the deep ceiling"); the shipped
43
+ * `--glass-saturate-deep` 1.5 sits at the low end (≤ ceiling), warm-aurora-safe.
44
+ * `proof:glass-legibility` L4 reads BOTH: the 16px-stay is honest IFF the budget
45
+ * booking is recorded here, and the shipped deep saturate never crosses the 1.8
46
+ * ceiling. When a `profile:budget` run clears the 18-20px push, the radius
47
+ * lifts toward 20px on the SAME LERP (the booked successor lands, no recipe edit).
32
48
  */
33
49
  :root {
34
50
  /* The Apple-range deep ENDPOINTS — the radius + saturate the deep tier reaches
35
51
  at full depth (`--glass-depth: 1`). The calm `floating` rung (13px / 1.18)
36
52
  is the depth-0 floor; the deep recipe LERPs between the two on `--glass-depth`
37
53
  so the axis is a genuine driver, not a literal. */
38
- --glass-blur-deep-radius: 16px; /* in [14,20], STRICTLY > calm floating 13px */
39
- --glass-saturate-deep: 1.5; /* >= 1.5 (toward Apple 1.8), > calm floating 1.18 */
54
+ --glass-blur-deep-radius: 16px; /* in [14,20], STRICTLY > calm floating 13px;
55
+ BUDGET CALL (L4): stays 16px, the 18-20px push
56
+ toward the apple.com nav ceiling is BOOKED
57
+ behind a recorded profile:budget clearance. */
58
+ --glass-saturate-deep: 1.5; /* >= 1.5 (toward Apple 1.8), > calm floating 1.18;
59
+ ≤ --glass-saturate-deep-ceiling (the apple.com
60
+ nav 1.8 bound — never over-shot, L4). */
61
+ --glass-saturate-deep-ceiling: 1.8; /* the apple.com-nav saturate CEILING, BAKED as
62
+ the deep-tier load-bearing term (research/
63
+ apple-glass.md §4); the deep saturate never
64
+ exceeds it (the warm-cream identity bound). */
40
65
 
41
66
  /* The deep blur RADIUS — LERPed from the calm floating radius (depth 0) to the
42
67
  Apple-deep radius (depth 1) on `--glass-depth`, THEN scaled by the ONE
@@ -33,6 +33,20 @@
33
33
  --hairline-under-shadow: 0 0.5px 0 0 rgb(0 0 0 / 0.04);
34
34
  --border-hairline: var(--hairline-catch-light), var(--hairline-under-shadow);
35
35
 
36
+ /* BC.W-AX-METAL-GLOW — the brand-metal catch-light DEFAULTS (the consumer
37
+ retune seam). The metal-shimmer family (`.metal-{gold,silver,bronze}`,
38
+ metal.css) halos the text-clip with a `drop-shadow` of the metal's OWN base
39
+ hue at this radius + strength — the gold reads as LIT metal, not a flat fill.
40
+ Shared by the loop sweep AND the one-shot headline (the W-AX-COMPLETION-SEAL
41
+ seal glint reads `--metal-glow-blur`/`--metal-glow-opacity` — the ≥2-consumer
42
+ register). The defaults are a soft warm WHISPER bounded by the warm-cream
43
+ identity — a halo radius proportional to the text (0.5em) at a low strength
44
+ (0.35), NOT a neon bloom (the §6 calm register; the disco family stays gone).
45
+ A garish high-opacity glow is the consumer's preset choice, never the default;
46
+ a consumer who wants NO glow sets `--metal-glow-opacity: 0`. */
47
+ --metal-glow-blur-default: 0.5em;
48
+ --metal-glow-opacity-default: 0.35;
49
+
36
50
  /* Specular catch-light — 1.5px-tall top-edge highlight that swaps in for
37
51
  --glass-highlight on interactive moments (e.g. primary-action hover).
38
52
  Reads as a real catch-light on a curved surface. The `-dark` companion
@@ -54,6 +68,25 @@
54
68
  on text. The `-dark` companion is overridden inside `.dark` mirroring
55
69
  the `--glass-specular-dark` precedent. */
56
70
  --glass-edge-light: inset 0 0 0 0.75px hsl(0 0% 100% / 0.18);
71
+
72
+ /* BC.W-BLACK-BAR D2 — the DIRECTIONAL rim register (the iOS-27 glass-thickness
73
+ physics: light catch-light rims the TOP, a faint warm shadow grounds the
74
+ BOTTOM, so the plate reads as a physical pane lifted off the page — NEVER a
75
+ dark full-perimeter ink hairline). This RETIRES the load-bearing dark-rim role
76
+ of the per-rung `--glass-border-*` (now ≤5% α, glass.css): the silhouette is
77
+ carved by these two stops, not by the perimeter ink.
78
+ --glass-rim-top: the BRIGHT catch-light on the top edge (the kevinbism
79
+ `inset 0 1px white` motif; 0.30 α = apple-ios27.md §1.3 community value
80
+ rgba(255,255,255,0.3)). Subsumes the old omnidirectional white rim RING.
81
+ --glass-rim-bottom: the FAINT warm under-shadow grounding the plate (the
82
+ warm-ink that used to ring the whole perimeter, now only the bottom, at a
83
+ whisper 6% — riding --foreground so it stays warm-not-grey, BA.W-NO-GRAY).
84
+ Plain per-mode arms — NEVER an inset fragment inside light-dark() (the dark arm
85
+ re-declares both in dark-arm.css; light-dark() round an inset computes the WHOLE
86
+ box-shadow to none). The dark arm lifts the top to 0.40 (dark glass glows where
87
+ light passes) + keeps the bottom under-shadow at 6%. */
88
+ --glass-rim-top: inset 0 1px 0 hsl(0 0% 100% / 0.30);
89
+ --glass-rim-bottom: inset 0 -1px 0 color-mix(in srgb, var(--foreground) 6%, transparent);
57
90
  /* BA.W-DARK-MATERIAL scope 2 — the dark edge/rim is the PRIMARY silhouette device in
58
91
  dark. The light register's fill+shadow carry the plate; in dark the fill barely
59
92
  separates (the deep page is near-black), so the EDGE + the transmitted glow carry the
@@ -120,8 +153,18 @@
120
153
  bucket blocks drive to; the live 4.5:1 readback (proof:adaptive-glass π arm)
121
154
  ratifies the exact value. */
122
155
  --glass-backdrop: dark;
123
- --glass-backdrop-luma: ;
124
156
  --glass-tint-ink: var(--foreground);
157
+
158
+ /* BC.W-ADAPTIVE-RECONCILE — the ONE retune knob for the continuous observer
159
+ driver. `--glass-backdrop-luma` (the measured sampled relative-luminance the
160
+ useGlassBackdropLuminance observer WRITES, registered typed in property-regs.css)
161
+ is now READ on the RHS of the `--glass-tint-strength` clamp (glass/ladder.css +
162
+ dock/morph.css): below this knee the plate holds the calm warm-cream floor; above
163
+ it the strength ramps CONTINUOUSLY toward the ≤24% AA ceiling (the iOS-27 dynamic-
164
+ range shift, apple-ios27.md §1.5 ~0.6 light threshold). The dead-knob is closed —
165
+ the loop READS. A consumer raising the knee darkens LATER (a brighter backdrop is
166
+ tolerated before the lift); the ONE override point for the whole adaptive axis. */
167
+ --glass-backdrop-luma-knee: 0.6;
125
168
  /* AZ.W-ADAPTIVE-AUTO Arm 1 — recalibrated 18% → 20%. The bump strengthens the
126
169
  G2 surface-SILHOUETTE darken (ΔL ≈ 0.40 over synthetic white, the plate is
127
170
  distinguishable from a bright page behind) while staying bounded ≤ 24% (the