@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
@@ -0,0 +1,66 @@
1
+ /* glass/accent-tone.css
2
+ BC.W-ACCENT-TONE — the contrast-floored 3-channel tonal-accent register.
3
+
4
+ ONE `--tone` (a complete `<color>`, default `var(--primary)`) → a coherent,
5
+ contrast-SAFE four-channel tonal set:
6
+
7
+ --accent-fill idle FILL — faint but FLOORED (≥3:1 at rest, the load-bearing
8
+ new behavior fourier named: "not just hover/active").
9
+ --accent-band active BAND — the bolder selected fill.
10
+ --accent-edge active EDGE — the active rim hairline.
11
+ --accent-ink label INK — the contrast-SAFE label colour ON the band, written
12
+ by useAccentTone (the JS half) via value.js
13
+ safeAccentColor; the CSS fallback is the warm ink.
14
+
15
+ The mix space is `in oklab` (the perceptual glass-tint family, W55/W-NO-GRAY) —
16
+ NOT `in srgb` (the `--surface-tint-*` brand-overlay fence, AW.W26). This is the
17
+ CONTROL tonal-FILL register (the plate background + the contrast-safe ink), a
18
+ DISTINCT seam from the BB `--glass-accent` glass-RIM axis (decoration on a glass
19
+ plate) — the two COMPOSE on a chip that is both a glass surface and a tonal
20
+ control (the rim from `--glass-accent`, the fill from `--accent-tone`); they
21
+ never fork, never write each other's channels.
22
+
23
+ The strength MAGNITUDES are TOKENS a `:root`/scope override retunes (NOT props —
24
+ the no-over-prop fence, component-customizability §5): `--accent-fill-strength`
25
+ (idle, the ~6-8% fourier names) / `--accent-band-strength` (active) /
26
+ `--accent-edge-strength` (rim). The idle floor is the strength default — the
27
+ 8% over the warm-cream `--card` clears ≥3:1; proof:accent-tone A4 measures the
28
+ resolved idle fill against the surface (a strength that drops it below 3:1 reds).
29
+
30
+ @import-ed by glass.css in cascade order IMMEDIATELY AFTER ladder.css (the same
31
+ @layer components; this is the SOLE writer of the `--accent-*` channels, read at
32
+ use-time on the chip elements, so the placement is cascade-order-invariant). */
33
+ @layer components {
34
+ .accent-tone {
35
+ /* `--surface` is an OPTIONAL consumer-retarget hook (NOT a declared HEAD
36
+ token) — a consumer sets it on the scope to point the accent at a
37
+ non-`--card` surface; it defaults to the declared `--card` so the recipe
38
+ resolves at HEAD with zero consumer wiring. */
39
+ --accent-fill-strength: 8%;
40
+ --accent-band-strength: 18%;
41
+ --accent-edge-strength: 55%;
42
+
43
+ /* idle: faint but FLOORED — the resting tint stays ≥3:1 by the strength
44
+ floor + the perceptual `in oklab` mix (the glass-tint family). */
45
+ --accent-fill: color-mix(
46
+ in oklab,
47
+ var(--surface, var(--card)),
48
+ var(--tone, var(--primary)) var(--accent-fill-strength)
49
+ );
50
+ --accent-band: color-mix(
51
+ in oklab,
52
+ var(--surface, var(--card)),
53
+ var(--tone, var(--primary)) var(--accent-band-strength)
54
+ );
55
+ --accent-edge: color-mix(
56
+ in oklab,
57
+ transparent,
58
+ var(--tone, var(--primary)) var(--accent-edge-strength)
59
+ );
60
+ /* ink is the contrast-SAFE label colour ON the active band — written by
61
+ useAccentTone (the JS half) via safeAccentColor onto
62
+ `--accent-ink-resolved`; the CSS fallback is the warm ink (CSS cannot
63
+ call value.js at the token tier). */
64
+ --accent-ink: var(--accent-ink-resolved, var(--foreground));
65
+ }
66
+ }
@@ -0,0 +1,167 @@
1
+ /* glass/control-surfaces.css
2
+ The form-control REST register carved from glass/surfaces.css — the
3
+ `.input-pill` family (Input/Textarea/NumberField), the shared `.control-surface`
4
+ class (Select default + TagsInput), the validity vocabulary, and the Select
5
+ trigger resting-border lift. A cohesive sub-concern of surfaces.css (the
6
+ no-god-module re-drain), @import-ed by glass.css in cascade order IMMEDIATELY
7
+ AFTER surfaces.css and BEFORE surface-axis.css — same `@layer components`, same
8
+ source order, so the carve is byte-isomorphic.
9
+ See docs/precepts/design-idioms.md §cohesion-aware partials. */
10
+ @layer components {
11
+ /* ── Pill input ───────────────────────────────── */
12
+ .input-pill {
13
+ @apply flex w-full;
14
+
15
+ /* AX.W51 D18 — the input pill rides the ONE `--ui-scale` comfort axis: the
16
+ height reads the `--control-h-md` cohort (`max(calc(2.5rem * --ui-scale),
17
+ --control-floor)`, the h-10 register with the WCAG-44px coarse clamp), the
18
+ font reads `--control-text`, the inline padding scales — so ONE override
19
+ grows the field's height + padding + font in lockstep. Desktop default is
20
+ the identity. */
21
+ /* BC.W-CONTROL-CUSTOM — the height reads the `--control-pill-h` element-
22
+ override seam, DEFAULTING to the cohort `--control-h-md` so a bare
23
+ control is byte-identical to HEAD. The shared `controlSizeClass(size)`
24
+ (_shared/useControlSize.ts) re-points the seam per rung
25
+ (sm→`--control-h-sm`, lg→`--control-h-lg`), so the `size` prop retunes
26
+ the field height WITHOUT a recipe fork — ONE substitution rung, the
27
+ cohort is still the source. */
28
+ height: var(--control-pill-h, var(--control-h-md));
29
+ border-radius: var(--radius-pill);
30
+ /* AW.W13 — the resting field edge reads as an enclosed control at rest
31
+ (~15%α — ~2× the prior 8% glass-wash floor that vanished on cream). The
32
+ `:focus-visible` accent ring + the `:user-invalid`/`[aria-invalid]`
33
+ destructive ring below still win by order + specificity.
34
+ AX.W54 — moved off the srgb `--surface-tint-15` fork onto the glass
35
+ border seam so the pill is ONE glass model with the rest of the ladder.
36
+ BA.W-SURFACE-AXIS scope 7 — re-pointed onto the SHARED `--control-surface-*`
37
+ REST register so Input/Textarea/NumberField/Select/Combobox/TagsInput are
38
+ ONE material at rest (the input rung was the warmer of the two; Select rode
39
+ the `glass-wash` gray — the no-gray control-family seam). The register reads
40
+ the same `--glass-*` ladder, so `--glass-level`/the W55 bright bucket retune
41
+ the whole form family in lockstep (--control-surface-border defaults to the
42
+ `--glass-border-floating` 15%α rung, --control-surface-bg to `--glass-bg-quiet`,
43
+ --control-surface-blur to `--glass-blur-quiet`). */
44
+ border: 1.5px solid var(--control-surface-border);
45
+ background: var(--control-surface-bg);
46
+ /* The control's REAL glass blur — the shared register's quiet-tier radius
47
+ (the same `--control-surface-blur` pairs with `--control-surface-bg`); the
48
+ `--glass-level` knob clarifies it in lockstep with every surface. */
49
+ backdrop-filter: var(--control-surface-blur);
50
+ padding: 0 calc(1rem * var(--ui-scale));
51
+ /* BC.W-CONTROL-CUSTOM — the font reads the `--control-pill-text` seam,
52
+ DEFAULTING to `--control-text` (byte-identical at unset). The `sm` rung
53
+ re-points it to `--control-text-sm` (the quieter register); `default`/`lg`
54
+ keep `--control-text`. This is the C1 close — the input register reads
55
+ `--control-text` via the recipe, NOT a bare `text-sm` literal. */
56
+ font-size: var(--control-pill-text, var(--control-text));
57
+ color: var(--foreground);
58
+ transition:
59
+ background-color var(--duration-fast) var(--ease-standard),
60
+ border-color var(--duration-fast) var(--ease-standard),
61
+ box-shadow var(--duration-fast) var(--ease-standard),
62
+ color var(--duration-fast) var(--ease-standard),
63
+ opacity var(--duration-fast) var(--ease-standard);
64
+ }
65
+
66
+ .input-pill::placeholder {
67
+ color: var(--surface-tint-35);
68
+ }
69
+
70
+ /* BA.W-SURFACE-AXIS scope 7 — the shared control REST surface class. The
71
+ NON-pill control families (the Select trigger, the TagsInput root) that do
72
+ NOT compose `.input-pill` but want the SAME resting material read this — so
73
+ the whole form band is ONE register at rest (the Select default rode the
74
+ lighter `glass-wash` gray before; this is the no-gray control-family seam).
75
+ It carries the bg/border/blur ONLY (each control owns its own height/radius/
76
+ padding/font), so a non-pill control composes `.control-surface` + its own
77
+ geometry. The hover lift brightens the fill one step toward the resting rung. */
78
+ .control-surface {
79
+ background: var(--control-surface-bg);
80
+ border: 1px solid var(--control-surface-border);
81
+ backdrop-filter: var(--control-surface-blur);
82
+ -webkit-backdrop-filter: var(--control-surface-blur);
83
+ }
84
+ .control-surface:hover:not(:disabled, [data-disabled]) {
85
+ background: var(--control-surface-bg-hover);
86
+ }
87
+
88
+ /* AQ.W4 §W4.6 — keyboard-focus ring only. Was bare `:focus` (showed the
89
+ accent ring on a mouse click); `:focus-visible` matches the
90
+ `.focus-ring` / `.glass-btn` / dock-control discipline. Ordered BEFORE
91
+ the `:user-invalid` rungs so an invalid focused field shows destructive,
92
+ not accent (the `:user-invalid:focus-visible` rule below wins by order +
93
+ specificity). `:focus-visible` Baseline Widely — no fallback. */
94
+ .input-pill:focus-visible {
95
+ outline: none;
96
+ border-color: var(--color-accent-opaque, var(--ring));
97
+ box-shadow: 0 0 0 2px var(--color-accent, color-mix(in srgb, var(--ring) 30%, transparent));
98
+ }
99
+
100
+ /* AQ.W4 §W4.1 — validity vocabulary on `.input-pill` (Input + Textarea).
101
+ The forgiving `:where(:user-invalid, .user-invalid-fallback,
102
+ [aria-invalid="true"])` group is ONE rule covering THREE trigger surfaces:
103
+ native constraint-validation (`:user-invalid`), the `useUserInvalidAria`
104
+ fallback class for engines without `:user-invalid` (css §3.2; NOT a
105
+ live+dead alias — the class is the SOLE fallback), AND (AW.W18) the
106
+ imperative `[aria-invalid="true"]` attribute. The `[aria-invalid]` arm
107
+ serves APP-DRIVEN validity — a custom key match, an async server check —
108
+ where there is no native constraint to trip `:user-invalid`, so the app
109
+ sets the ARIA attribute and the library's own ring paints with no
110
+ `:deep()` re-paint at the consumer. The destructive/success tints reuse
111
+ the semantic tokens via `color-mix` per the house pattern (W2). Non-color
112
+ reinforcement is the error TEXT (W4.5 `error` slot) + the `required`
113
+ asterisk — the border/bg shift is the supplementary cue, never the sole
114
+ one. `:user-valid` is intentionally subtle (border only, no bg fill) so
115
+ a long valid form is not a wall of green. */
116
+ .input-pill:where(:user-invalid, .user-invalid-fallback, [aria-invalid="true"]) {
117
+ border-color: var(--destructive);
118
+ background: color-mix(in srgb, var(--destructive) 8%, var(--glass-bg-quiet));
119
+ }
120
+ .input-pill:where(:user-valid, .user-valid-fallback) {
121
+ border-color: var(--success);
122
+ }
123
+ /* Invalid + keyboard-focused → destructive ring (overrides the accent
124
+ `:focus-visible` ring above by order + the extra invalid compound). The
125
+ `[aria-invalid]` arm rides the same widened group so an app-driven
126
+ invalid field shows the destructive ring on focus too. */
127
+ .input-pill:where(:user-invalid, .user-invalid-fallback, [aria-invalid="true"]):focus-visible {
128
+ border-color: var(--destructive);
129
+ /* BB.W-INVALID-RING — the shared destructive ring register (the
130
+ --focus-ring-shadow sibling). The byte-identical recipe is now ONE
131
+ token; the `8%` at-rest bg arm above stays `.input-pill`-local (a
132
+ glass-tint substrate the bare-ring surfaces do not carry). */
133
+ box-shadow: var(--invalid-ring);
134
+ }
135
+
136
+ /* AQ.W4 §W4.3 — `field-sizing: content` autosize (opt-in via the Textarea
137
+ `autosize` prop → `[data-autosize]`). The textarea grows vertically with
138
+ content between a 3-line floor and a token-driven ceiling, then scrolls.
139
+ `field-sizing` Baseline Newly (Chromium 2024) — on a non-supporting
140
+ engine the declaration is ignored and the element keeps the
141
+ `min/max-block-size` bounds + standard scroll (no JS, no `@supports`,
142
+ no grid-mirror polyfill). The fixed-size path (default, `min-h-20`) is
143
+ the unchanged no-op fallback. */
144
+ .input-pill[data-autosize] {
145
+ field-sizing: content;
146
+ width: 100%;
147
+ min-block-size: 3lh;
148
+ max-block-size: var(--textarea-autosize-max, 12lh);
149
+ resize: vertical;
150
+ }
151
+
152
+ .input-pill:disabled {
153
+ opacity: 0.5;
154
+ cursor: not-allowed;
155
+ }
156
+
157
+ /* AW.W13 — the Select trigger mirrors the input pill's resting border lift.
158
+ The reka-ui SelectTrigger renders `role="combobox"` over the `.glass-wash`
159
+ surface; its 8%α `--glass-border-wash` field edge vanished on cream just
160
+ like the input pill, so the same `--surface-tint-15` lift makes the
161
+ trigger read as an enclosed control at rest. Scoped to the combobox role
162
+ so the lift reaches ONLY the Select trigger, not every `.glass-wash`
163
+ surface. */
164
+ .glass-wash[role="combobox"] {
165
+ border-color: var(--surface-tint-15);
166
+ }
167
+ }
@@ -211,14 +211,35 @@
211
211
  `--glass-tint-strength: 0%`. */
212
212
  :where(.glass-floating, .glass-overlay) {
213
213
  --glass-tint-source: var(--glass-tint-ink);
214
- /* BC.W-AUDIT — the scope-7 completion: the overlay band JOINS the content-tier
215
- sub-perceptual FLOOR by default (translucent warm glass), and the FULL AA
216
- darken engages ONLY under the bright bucket (the @container --glass-backdrop:
217
- light above). The prior unconditional AA (20% ink-ward) collapsed every
218
- floating surface to grey over the common calm-light backdrop. The full glass
219
- rebuild + the per-band muted/contrast reconciliation is BC. */
220
- --glass-tint-strength: var(--glass-tint-strength-floor);
221
- --muted-foreground: var(--foreground);
214
+ /* BC.W-ADAPTIVE-RECONCILE (the fourier-analysis-M Tier-1 #1 fold, CONTINUOUS half)
215
+ — the OVERLAY band SPECIFICALLY JOINS the continuous observer driver, the SAME
216
+ clamp the content tiers get. The dropdown/Dialog/Popover/Select-content plate
217
+ FLOORS to warm-cream when the measured backdrop is calm/dark, and darkens
218
+ CONTINUOUSLY only under a measured bright backdrop — NOT the binary `@container`
219
+ bucket jump, NOT a blanket unconditional darken (the retired 4.0.x 20% slab).
220
+ The `BC.W-AUDIT` pre-fix already closed the UNCONDITIONAL-darken half (the band
221
+ floored by default); THIS is the continuous earned-darken half. The MEASURED AA
222
+ bar (the overlay plate clears 4.5:1 WHILE α < 0.86) is GLASS-LEGIBILITY-
223
+ MEASURED's roster addition — the driver here, the bar there, no double-ownership. */
224
+ --glass-tint-strength: clamp(
225
+ var(--glass-tint-strength-floor),
226
+ calc(
227
+ var(--glass-tint-strength-floor) +
228
+ (var(--glass-tint-strength-aa) - var(--glass-tint-strength-floor)) *
229
+ max(0, (var(--glass-backdrop-luma, 0) - var(--glass-backdrop-luma-knee, 0.6)) / (1 - var(--glass-backdrop-luma-knee, 0.6)))
230
+ ),
231
+ var(--glass-tint-strength-aa)
232
+ );
233
+ /* BC.W-DIALOG-GLASS — the overlay band's muted caption keeps the on-glass MUTED
234
+ register on a CALM modal (the SAME `--on-glass-muted` the content tiers read on
235
+ their calm path — legible-AND-subordinate against the composited glass fill),
236
+ NOT an UNCONDITIONAL lift to full `--foreground` that blackened the caption on a
237
+ cream modal over a light page. The bright-bucket lift (@container --glass-
238
+ backdrop:light below) moves `--muted-foreground` to the contrast ink in LOCKSTEP
239
+ with `--foreground` only where the plate ACTUALLY darkens to AA — so a busy-
240
+ backdrop modal goes full ink, a calm modal keeps the muted register. */
241
+ --muted-foreground: var(--on-glass-muted);
242
+ --muted-foreground-strong: var(--on-glass-muted-strong);
222
243
  }
223
244
 
224
245
  /* BA.W-DARK-MATERIAL scope 7 — the plain CONTENT tiers self-engage the SUB-PERCEPTUAL
@@ -252,7 +273,28 @@
252
273
  mode (the on-glass rungs carry their own light/dark per-mode arms in tokens). */
253
274
  :where(.glass-card, .glass-resting, .glass-quiet, .glass-wash) {
254
275
  --glass-tint-source: var(--glass-tint-ink);
255
- --glass-tint-strength: var(--glass-tint-strength-floor);
276
+ /* BC.W-ADAPTIVE-RECONCILE — the CONTINUOUS observer-driven darken (the dead-knob
277
+ closed; req #7). The strength is no longer a flat floor: it is a clamp that
278
+ READS the observer's measured `--glass-backdrop-luma` and lerps from the calm
279
+ warm-cream floor toward the ≤24% AA ceiling as the backdrop brightens past the
280
+ `--glass-backdrop-luma-knee` (the iOS-27 dynamic-range shift, apple-ios27.md
281
+ §1.5). Over a calm/dark backdrop (luma ≤ knee, the `max(0, …)` ramp → 0) the
282
+ clamp resolves EXACTLY `--glass-tint-strength-floor` (the GLASS-IDENTITY calm
283
+ identity, byte-equal); rising luma ramps the lift CONTINUOUSLY; the clamp floors
284
+ at the 4% identity and ceilings at the bounded AA — never an unconditional 20%
285
+ slab (the AZ grey-slab is the OPPOSITE of this earned, measured track). This
286
+ RETIRES the discrete `@container --glass-backdrop: light` bucket as the strength
287
+ driver — the continuous calc subsumes it (the bucket survives only as a no-
288
+ `@property` degrade fallback). */
289
+ --glass-tint-strength: clamp(
290
+ var(--glass-tint-strength-floor),
291
+ calc(
292
+ var(--glass-tint-strength-floor) +
293
+ (var(--glass-tint-strength-aa) - var(--glass-tint-strength-floor)) *
294
+ max(0, (var(--glass-backdrop-luma, 0) - var(--glass-backdrop-luma-knee, 0.6)) / (1 - var(--glass-backdrop-luma-knee, 0.6)))
295
+ ),
296
+ var(--glass-tint-strength-aa)
297
+ );
256
298
  --muted-foreground: var(--on-glass-muted);
257
299
  --muted-foreground-strong: var(--on-glass-muted-strong);
258
300
  }
@@ -296,14 +338,22 @@
296
338
  --muted-foreground: contrast-color(var(--card));
297
339
  }
298
340
  }
299
- /* The OVERLAY band self-engages the darken UNCONDITIONALLY (it floats over an
300
- UNKNOWN consumer surface), so its ink-flip companion mirrors that — UNCONDITIONAL.
301
- --foreground lifts in lockstep with --muted-foreground (the scope-6 lockstep). */
302
- :where(.glass-floating, .glass-overlay) {
303
- color: contrast-color(var(--card));
304
- --foreground: contrast-color(var(--card));
305
- --muted-foreground: contrast-color(var(--card));
306
- }
341
+ /* BC.W-DIALOG-GLASS / BC.W-ADAPTIVE-RECONCILE (overlay-band arm) — the overlay
342
+ band's `contrast-color()` ink flip is now GATED in the bright bucket above
343
+ (the @container --glass-backdrop:light block already lists `.glass-floating,
344
+ .glass-overlay` alongside the content tiers), NOT here as an UNCONDITIONAL
345
+ flip. The retired unconditional `:where(.glass-floating, .glass-overlay)`
346
+ rule blackened the ink even on a CALM modal over a light page — a translucent
347
+ cream plate forced to pure-black `contrast-color(--card)`, harsh on the cream,
348
+ and `--muted-foreground` flipped to the same so captions lost their muted
349
+ register. Now: over a calm/dark backdrop the modal keeps the WARM-INK
350
+ `--foreground` (legible, not pure-black) + the muted caption register; only a
351
+ modal over a genuinely-bright/busy backdrop flips to the dark contrast ink
352
+ (where the plate ACTUALLY darkens to bright-bucket AA), the `--foreground`/
353
+ `--muted-foreground` lift moving in LOCKSTEP there (the scope-6 lockstep). The
354
+ overlay band STILL self-darkens UNCONDITIONALLY (the tint-strength clamp above,
355
+ it floats over unknown) — only the INK flips in the bright bucket. ONE
356
+ reconciled flip, not two forks (ladder.css stays the single source). */
307
357
  /* BA.W-DARK-MATERIAL scope 7 — the content-tier ink flip is GATED on the bright
308
358
  signal (it moved INTO the @container bucket above), NOT unconditional. Over a calm
309
359
  LIGHT page the content tiers only carry the 4% silhouette floor (still a warm cream
@@ -67,12 +67,20 @@
67
67
  .glass-card,
68
68
  .glass-specular-track,
69
69
  .dock-icon-button {
70
- /* the resolved rim ring INK (white-α light / lifted-white-α dark — the
71
- SAME stop the `--glass-edge-light` token carries; the `.dark` arm below
72
- re-points it). The accent mixes ONTO this ink. */
73
- --glass-rim-ink: hsl(0 0% 100% / 0.18);
74
- --glass-material-rim: inset 0 0 0 0.75px
75
- color-mix(in oklab, var(--glass-rim-ink), var(--glass-accent) var(--glass-accent-strength));
70
+ /* BC.W-BLACK-BAR D2 — the rim ring is now DIRECTIONAL: the top catch-light
71
+ (`--glass-rim-top`, glass-fx.css) carries the white-α ink the old
72
+ omnidirectional ring carried (0.30 light / 0.40 dark — the dark arm
73
+ re-points it via dark-arm.css), and the bottom under-shadow
74
+ (`--glass-rim-bottom`) grounds the plate. The accent (BB.W-GLASS-ACCENT)
75
+ still mixes ONTO the top catch-light ink so the chromatic rim reads on the
76
+ lit edge; at 0% strength the mix resolves byte-identical to the bare
77
+ `--glass-rim-top`. `--glass-rim-ink` is the resolved top-ink stop (kept as
78
+ the accent-compose seam — the `.dark` arm below re-points it). */
79
+ --glass-rim-ink: hsl(0 0% 100% / 0.30);
80
+ --glass-material-rim:
81
+ inset 0 1px 0
82
+ color-mix(in oklab, var(--glass-rim-ink), var(--glass-accent) var(--glass-accent-strength)),
83
+ var(--glass-rim-bottom);
76
84
  /* the per-rung border ink, accent-composed. `--glass-border-rung` is set by
77
85
  each rung at its own declaration (it reads the rung's `--glass-border-*`
78
86
  token); the accent mixes onto it so the BORDER half of the rim carries the
@@ -92,9 +100,11 @@
92
100
  .dark .glass-card,
93
101
  .dark .glass-specular-track,
94
102
  .dark .dock-icon-button {
95
- /* the dark rim ink is the lifted-α base (`--glass-edge-light-dark` stop) so
96
- the accent composes off the dark silhouette device (W-DARK-MATERIAL). */
97
- --glass-rim-ink: hsl(0 0% 100% / 0.22);
103
+ /* BC.W-BLACK-BAR D2 — the dark top catch-light ink is the lifted 0.40 stop
104
+ (mirroring the dark `--glass-rim-top`, dark-arm.css) so the accent composes
105
+ off the dark silhouette device (W-DARK-MATERIAL): dark glass needs a
106
+ brighter rim to read over the deep canvas. */
107
+ --glass-rim-ink: hsl(0 0% 100% / 0.40);
98
108
  }
99
109
 
100
110
  }
@@ -209,6 +209,22 @@
209
209
  --glass-specular-intensity-hover: var(--glass-specular-btn-hover);
210
210
  }
211
211
 
212
+ /* BC.W-BUTTON-GLASS-IOS (move 2 / BG-IOS-2) — the hero CTA reaches DEEP glass.
213
+ `.btn-glass` reads `--glass-blur-btn` (not `--glass-blur-floating`), so the bare
214
+ `.glass-deep` axis (which re-points `--glass-blur-floating`) does not deepen a
215
+ button. This arm re-points `--glass-blur-btn` onto the deep family — the SAME
216
+ token-substitution model `.glass-deep` uses (glass/deep.css), composing the ONE
217
+ deep axis, NOT a new blur recipe. So a `default`/`primary-audacious` hero CTA
218
+ reads the apple.com-nav-grade thick refractive liquid glass (16px / saturate 1.5
219
+ family, `--glass-blur-deep`), while the plain content tiers + the quieter
220
+ `outline`/`secondary`/`accent` glass buttons stay calm at the floating-tier
221
+ `--glass-blur-btn`. The deep BLUR is budget-FREE (the W-LENSING budget binds the
222
+ `:liquid` SVG lens, not the deep-blur tier). The a11y `--glass-level:0` brackets
223
+ reach it for free (the deep blur composes `--glass-level`, the opaque-escape path). */
224
+ .btn-glass.glass-deep {
225
+ --glass-blur-btn: var(--glass-blur-deep);
226
+ }
227
+
212
228
  /* The depth deepens one rung on hover (the lifted-lozenge read) — additive over
213
229
  the variant's own hover surface legs. The variants paint the bg/border on
214
230
  hover; this adds the deeper drop. */
@@ -216,6 +232,29 @@
216
232
  box-shadow: var(--glass-btn-rim), var(--glass-btn-under-shadow-hover);
217
233
  }
218
234
 
235
+ /* BC.W-BUTTON-GLASS-IOS (move 3 / BG-IOS-4) — the press is COUPLED (W-MOTION-CANON
236
+ P3): the ONE `--glass-btn-press-t` 0..1 spring drive (Button.vue writes it off
237
+ `useSpringPress`) feeds BOTH the squish (the `useLiquidFlex` reciprocal X/Y deform,
238
+ Button.vue) AND a SPECULAR brightness leg here — the touch-ILLUMINATION (apple-
239
+ ios27.md §2.5 ".interactive() → scale + bounce + shimmer + touch-illumination").
240
+ During the press the button's specular tracks the SPRING (not the binary `:active`
241
+ toggle material.css sets): `--specular-intensity` LERPs from the hover gleam toward
242
+ the active gleam as `--glass-btn-press-t` travels, so the gleam ILLUMINATES on the
243
+ SAME spring scalar as the squish (the glass reads as DEFORMING-AND-BRIGHTENING with
244
+ the spring's alive overshoot, not a uniform shrink). It reads the EXISTING
245
+ `--glass-specular-intensity-{hover,active}` cohort (property-regs.css) — no new
246
+ token, ONE drive two legs. Specificity ties material's `.glass-wash:active::before`
247
+ (0,2,1) and wins by source-order-after (surfaces.css @import-s after material.css),
248
+ so the button press follows the spring; the hover gleam + the no-JS `:active` floor
249
+ are untouched. */
250
+ .btn-glass:active::before {
251
+ --specular-intensity: calc(
252
+ var(--glass-specular-intensity-hover) +
253
+ (var(--glass-specular-intensity-active) - var(--glass-specular-intensity-hover)) *
254
+ var(--glass-btn-press-t)
255
+ );
256
+ }
257
+
219
258
  /* BB.W-BUTTON-GLASS (a) — the ELEMENT-LEVEL oklab-tinted hover/active fill pair
220
259
  (the substitution-vs-inheritance trap fixed on the button register). The glass
221
260
  button variants painted `hover:bg-(--glass-bg-resting) active:bg-(--glass-bg-
@@ -232,15 +271,37 @@
232
271
  to AA in lockstep with the rest bg. The `:root` raw `--glass-bg-*` tokens are
233
272
  UNTOUCHED (other surfaces compose them at the element correctly — the raw token +
234
273
  the element-level oklab wrapper is the correct ladder shape). */
274
+ /* BC.W-TABS-IOS — the tinted-FLOATING seam lifted off the `.btn-glass`-only scope
275
+ onto a SHARED `:where()` so the iOS-27 segmented-control active pill reads the
276
+ SAME element-level oklab-tint floating fill the glass button reads (the
277
+ substitution-over-redeclaration discipline: ONE tinted-floating source, NOT a
278
+ tab-local fork). The pill's active plate now reaches the W55 darken-over-bright
279
+ seam — over a bright field the pill darkens-to-legible, over a calm field it
280
+ stays warm-cream/near-white (the iOS adaptive register reaching the pill).
281
+ ZERO-delta at the `--glass-tint-strength: 0%`/floor default. */
282
+ :where(.btn-glass, .segmented-indicator) {
283
+ --glass-bg-floating-tinted: color-mix(
284
+ in oklab,
285
+ var(--glass-bg-floating),
286
+ var(--glass-tint-source) var(--glass-tint-strength)
287
+ );
288
+ }
235
289
  .btn-glass {
236
- --glass-bg-resting-tinted: color-mix(
290
+ /* BC.W-BUTTON-GLASS-IOS (BG-IOS-6) — the `quiet` rung gains the SAME element-
291
+ level oklab-tint wrapper so the de-shadcn `outline`/`secondary` reskin (the
292
+ QUIETER glass register, prominence-by-tint) reaches the W55 darken on its lit
293
+ fill too — ZERO new compositing axis, the SAME seam the resting/floating pair
294
+ composes. The floating rung is minted on the shared `:where()` seam ABOVE
295
+ (the tab pill reads it too); quiet + resting stay button-scoped (the
296
+ hover/active fill register the segmented pill does not engage). */
297
+ --glass-bg-quiet-tinted: color-mix(
237
298
  in oklab,
238
- var(--glass-bg-resting),
299
+ var(--glass-bg-quiet),
239
300
  var(--glass-tint-source) var(--glass-tint-strength)
240
301
  );
241
- --glass-bg-floating-tinted: color-mix(
302
+ --glass-bg-resting-tinted: color-mix(
242
303
  in oklab,
243
- var(--glass-bg-floating),
304
+ var(--glass-bg-resting),
244
305
  var(--glass-tint-source) var(--glass-tint-strength)
245
306
  );
246
307
  }
@@ -278,150 +339,10 @@
278
339
  --glass-btn-press-t: 0;
279
340
  }
280
341
 
281
- /* ── Pill input ───────────────────────────────── */
282
- .input-pill {
283
- @apply flex w-full;
284
-
285
- /* AX.W51 D18 — the input pill rides the ONE `--ui-scale` comfort axis: the
286
- height reads the `--control-h-md` cohort (`max(calc(2.5rem * --ui-scale),
287
- --control-floor)`, the h-10 register with the WCAG-44px coarse clamp), the
288
- font reads `--control-text`, the inline padding scales — so ONE override
289
- grows the field's height + padding + font in lockstep. Desktop default is
290
- the identity. */
291
- height: var(--control-h-md);
292
- border-radius: var(--radius-pill);
293
- /* AW.W13 — the resting field edge reads as an enclosed control at rest
294
- (~15%α — ~2× the prior 8% glass-wash floor that vanished on cream). The
295
- `:focus-visible` accent ring + the `:user-invalid`/`[aria-invalid]`
296
- destructive ring below still win by order + specificity.
297
- AX.W54 — moved off the srgb `--surface-tint-15` fork onto the glass
298
- border seam so the pill is ONE glass model with the rest of the ladder.
299
- BA.W-SURFACE-AXIS scope 7 — re-pointed onto the SHARED `--control-surface-*`
300
- REST register so Input/Textarea/NumberField/Select/Combobox/TagsInput are
301
- ONE material at rest (the input rung was the warmer of the two; Select rode
302
- the `glass-wash` gray — the no-gray control-family seam). The register reads
303
- the same `--glass-*` ladder, so `--glass-level`/the W55 bright bucket retune
304
- the whole form family in lockstep (--control-surface-border defaults to the
305
- `--glass-border-floating` 15%α rung, --control-surface-bg to `--glass-bg-quiet`,
306
- --control-surface-blur to `--glass-blur-quiet`). */
307
- border: 1.5px solid var(--control-surface-border);
308
- background: var(--control-surface-bg);
309
- /* The control's REAL glass blur — the shared register's quiet-tier radius
310
- (the same `--control-surface-blur` pairs with `--control-surface-bg`); the
311
- `--glass-level` knob clarifies it in lockstep with every surface. */
312
- backdrop-filter: var(--control-surface-blur);
313
- padding: 0 calc(1rem * var(--ui-scale));
314
- font-size: var(--control-text);
315
- color: var(--foreground);
316
- transition:
317
- background-color var(--duration-fast) var(--ease-standard),
318
- border-color var(--duration-fast) var(--ease-standard),
319
- box-shadow var(--duration-fast) var(--ease-standard),
320
- color var(--duration-fast) var(--ease-standard),
321
- opacity var(--duration-fast) var(--ease-standard);
322
- }
323
-
324
- .input-pill::placeholder {
325
- color: var(--surface-tint-35);
326
- }
327
-
328
- /* BA.W-SURFACE-AXIS scope 7 — the shared control REST surface class. The
329
- NON-pill control families (the Select trigger, the TagsInput root) that do
330
- NOT compose `.input-pill` but want the SAME resting material read this — so
331
- the whole form band is ONE register at rest (the Select default rode the
332
- lighter `glass-wash` gray before; this is the no-gray control-family seam).
333
- It carries the bg/border/blur ONLY (each control owns its own height/radius/
334
- padding/font), so a non-pill control composes `.control-surface` + its own
335
- geometry. The hover lift brightens the fill one step toward the resting rung. */
336
- .control-surface {
337
- background: var(--control-surface-bg);
338
- border: 1px solid var(--control-surface-border);
339
- backdrop-filter: var(--control-surface-blur);
340
- -webkit-backdrop-filter: var(--control-surface-blur);
341
- }
342
- .control-surface:hover:not(:disabled, [data-disabled]) {
343
- background: var(--control-surface-bg-hover);
344
- }
345
-
346
- /* AQ.W4 §W4.6 — keyboard-focus ring only. Was bare `:focus` (showed the
347
- accent ring on a mouse click); `:focus-visible` matches the
348
- `.focus-ring` / `.glass-btn` / dock-control discipline. Ordered BEFORE
349
- the `:user-invalid` rungs so an invalid focused field shows destructive,
350
- not accent (the `:user-invalid:focus-visible` rule below wins by order +
351
- specificity). `:focus-visible` Baseline Widely — no fallback. */
352
- .input-pill:focus-visible {
353
- outline: none;
354
- border-color: var(--color-accent-opaque, var(--ring));
355
- box-shadow: 0 0 0 2px var(--color-accent, color-mix(in srgb, var(--ring) 30%, transparent));
356
- }
357
-
358
- /* AQ.W4 §W4.1 — validity vocabulary on `.input-pill` (Input + Textarea).
359
- The forgiving `:where(:user-invalid, .user-invalid-fallback,
360
- [aria-invalid="true"])` group is ONE rule covering THREE trigger surfaces:
361
- native constraint-validation (`:user-invalid`), the `useUserInvalidAria`
362
- fallback class for engines without `:user-invalid` (css §3.2; NOT a
363
- live+dead alias — the class is the SOLE fallback), AND (AW.W18) the
364
- imperative `[aria-invalid="true"]` attribute. The `[aria-invalid]` arm
365
- serves APP-DRIVEN validity — a custom key match, an async server check —
366
- where there is no native constraint to trip `:user-invalid`, so the app
367
- sets the ARIA attribute and the library's own ring paints with no
368
- `:deep()` re-paint at the consumer. The destructive/success tints reuse
369
- the semantic tokens via `color-mix` per the house pattern (W2). Non-color
370
- reinforcement is the error TEXT (W4.5 `error` slot) + the `required`
371
- asterisk — the border/bg shift is the supplementary cue, never the sole
372
- one. `:user-valid` is intentionally subtle (border only, no bg fill) so
373
- a long valid form is not a wall of green. */
374
- .input-pill:where(:user-invalid, .user-invalid-fallback, [aria-invalid="true"]) {
375
- border-color: var(--destructive);
376
- background: color-mix(in srgb, var(--destructive) 8%, var(--glass-bg-quiet));
377
- }
378
- .input-pill:where(:user-valid, .user-valid-fallback) {
379
- border-color: var(--success);
380
- }
381
- /* Invalid + keyboard-focused → destructive ring (overrides the accent
382
- `:focus-visible` ring above by order + the extra invalid compound). The
383
- `[aria-invalid]` arm rides the same widened group so an app-driven
384
- invalid field shows the destructive ring on focus too. */
385
- .input-pill:where(:user-invalid, .user-invalid-fallback, [aria-invalid="true"]):focus-visible {
386
- border-color: var(--destructive);
387
- /* BB.W-INVALID-RING — the shared destructive ring register (the
388
- --focus-ring-shadow sibling). The byte-identical recipe is now ONE
389
- token; the `8%` at-rest bg arm above stays `.input-pill`-local (a
390
- glass-tint substrate the bare-ring surfaces do not carry). */
391
- box-shadow: var(--invalid-ring);
392
- }
393
-
394
- /* AQ.W4 §W4.3 — `field-sizing: content` autosize (opt-in via the Textarea
395
- `autosize` prop → `[data-autosize]`). The textarea grows vertically with
396
- content between a 3-line floor and a token-driven ceiling, then scrolls.
397
- `field-sizing` Baseline Newly (Chromium 2024) — on a non-supporting
398
- engine the declaration is ignored and the element keeps the
399
- `min/max-block-size` bounds + standard scroll (no JS, no `@supports`,
400
- no grid-mirror polyfill). The fixed-size path (default, `min-h-20`) is
401
- the unchanged no-op fallback. */
402
- .input-pill[data-autosize] {
403
- field-sizing: content;
404
- width: 100%;
405
- min-block-size: 3lh;
406
- max-block-size: var(--textarea-autosize-max, 12lh);
407
- resize: vertical;
408
- }
409
-
410
- .input-pill:disabled {
411
- opacity: 0.5;
412
- cursor: not-allowed;
413
- }
414
-
415
- /* AW.W13 — the Select trigger mirrors the input pill's resting border lift.
416
- The reka-ui SelectTrigger renders `role="combobox"` over the `.glass-wash`
417
- surface; its 8%α `--glass-border-wash` field edge vanished on cream just
418
- like the input pill, so the same `--surface-tint-15` lift makes the
419
- trigger read as an enclosed control at rest. Scoped to the combobox role
420
- so the lift reaches ONLY the Select trigger, not every `.glass-wash`
421
- surface. */
422
- .glass-wash[role="combobox"] {
423
- border-color: var(--surface-tint-15);
424
- }
342
+ /* The .input-pill / .control-surface form-control REST register is carved into
343
+ glass/control-surfaces.css (a cohesive sub-concern, the no-god-module re-drain)
344
+ — @import-ed by glass.css IMMEDIATELY AFTER surfaces.css, same @layer components,
345
+ same source order (byte-isomorphic). */
425
346
 
426
347
  /* ── BA.W-PAGER — the glass pager pill chassis (.glass-pager-ring) ──────────
427
348
  The ONE pager-CHASSIS ring register: a `--radius-pill` glass-floating pill