@mkbabb/glass-ui 4.1.0 → 4.2.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 (430) hide show
  1. package/dist/{CardAction-8whJrLWt.js → CardAction-DlVP2evz.js} +58 -54
  2. package/dist/{CommandShortcut-D3yxgHNn.js → CommandShortcut-By-VQcLO.js} +3 -3
  3. package/dist/{ConfiguratorRow-CaP7U3ZA.js → ConfiguratorRow-YMXdINHx.js} +3 -3
  4. package/dist/{ContextMenuContent-B3ZsheLV.js → ContextMenuContent-CMWn6huB.js} +1 -1
  5. package/dist/{ContextMenuSubContent-DDRID3qC.js → ContextMenuSubContent-DvwWCUc0.js} +1 -1
  6. package/dist/{DataTable-Bc9kUtu_.js → DataTable-C4tG3eIJ.js} +4 -4
  7. package/dist/DialogContent-D8U9ZfWS.js +121 -0
  8. package/dist/{DialogScrollContent-TTuovQst.js → DialogScrollContent-BMekN7gq.js} +1 -1
  9. package/dist/{FadingScroll-DLRbH5Xr.js → FadingScroll-P8B30rAD.js} +1 -1
  10. package/dist/{HoverCardContent-Bel1gdLZ.js → HoverCardContent-DAmGYglo.js} +1 -1
  11. package/dist/{HoverPopover-BcIxvyqZ.js → HoverPopover-DYpBOzzF.js} +1 -1
  12. package/dist/{IconChip-DhbdGdFQ.js → IconChip-CQa7XZYc.js} +7 -5
  13. package/dist/{IconTooltip-B0zimd2H.js → IconTooltip-_df8M3xm.js} +1 -1
  14. package/dist/{Input-Cg9DF62r.js → Input-CyU4_hIC.js} +2 -2
  15. package/dist/{MetricBadge-RHdBP72w.js → MetricBadge-DQt_dGah.js} +1 -1
  16. package/dist/{Notification-CphK7AAm.js → Notification-BlSPJhtZ.js} +1 -1
  17. package/dist/{NumberFieldContent-D8cXeyO4.js → NumberFieldContent-Z3VxGu_6.js} +3 -3
  18. package/dist/PagerDots-CYlqVFd4.js +196 -0
  19. package/dist/PaperBackdrop-DYWgrnh8.js +42 -0
  20. package/dist/{PopoverContent-DL7E6vJP.js → PopoverContent-BuKyHZSz.js} +2 -2
  21. package/dist/{Progress-CnqB7gLm.js → Progress-C9SsdwIZ.js} +1 -1
  22. package/dist/{ScrollingText-CTZbA_cG.js → ScrollingText-DY3W1Jfh.js} +2 -2
  23. package/dist/{SelectScrollDownButton-DAKCBEdW.js → SelectScrollDownButton-3mFHX_R-.js} +15 -12
  24. package/dist/{Switch-B8RscmRu.js → Switch-uf-UKPA2.js} +1 -1
  25. package/dist/{Toaster-D9qIHjBI.js → Toaster-ozrsR4mP.js} +1 -1
  26. package/dist/{ToggleGroupItem-BLtr3TJq.js → ToggleGroupItem-BpzaVzNm.js} +4 -4
  27. package/dist/{TooltipProvider-BJ_Y5EGX.js → TooltipProvider-QQVM_80r.js} +1 -1
  28. package/dist/animated-digit.js +2 -2
  29. package/dist/api/index.d.ts +1 -0
  30. package/dist/api/types-extra.d.ts +3 -1
  31. package/dist/api.js +2 -2
  32. package/dist/aurora.js +163 -131
  33. package/dist/badge-Bt14yURi.js +72 -0
  34. package/dist/badge.js +1 -1
  35. package/dist/border-progress.js +1 -1
  36. package/dist/button-D1W9PrzI.js +130 -0
  37. package/dist/button.js +1 -1
  38. package/dist/canvas.js +1 -1
  39. package/dist/card.js +1 -1
  40. package/dist/carousel.js +227 -98
  41. package/dist/chipVariants-BJQ0I2kB.js +18 -0
  42. package/dist/collapsible.js +1 -1
  43. package/dist/color.js +1 -1
  44. package/dist/command.js +1 -1
  45. package/dist/components/custom/aurora/composables/glSetup.d.ts +1 -1
  46. package/dist/components/custom/aurora/composables/uniformBridgeWGPU.d.ts +1 -1
  47. package/dist/components/custom/aurora/constants/presets.d.ts +29 -0
  48. package/dist/components/custom/aurora/constants/shaders/aurora.wgsl.d.ts +1 -1
  49. package/dist/components/custom/aurora/index.d.ts +1 -1
  50. package/dist/components/custom/concentric/Concentric.vue.d.ts +15 -12
  51. package/dist/components/custom/concentric/composables/concentricGLSetup.d.ts +8 -3
  52. package/dist/components/custom/concentric/composables/concentricWGPUSetup.d.ts +8 -4
  53. package/dist/components/custom/concentric/composables/levelField.d.ts +50 -0
  54. package/dist/components/custom/concentric/composables/uniformBridgeWGPU.d.ts +7 -4
  55. package/dist/components/custom/concentric/composables/useConcentric.d.ts +3 -3
  56. package/dist/components/custom/concentric/constants.d.ts +62 -41
  57. package/dist/components/custom/concentric/index.d.ts +2 -2
  58. package/dist/components/custom/concentric/shaders/concentric.glsl.d.ts +2 -2
  59. package/dist/components/custom/concentric/shaders/concentric.wgsl.d.ts +1 -1
  60. package/dist/components/custom/configurator/Configurator.vue.d.ts +23 -2
  61. package/dist/components/custom/configurator/index.d.ts +1 -1
  62. package/dist/components/custom/dock/DockDropdownTrigger.vue.d.ts +4 -3
  63. package/dist/components/custom/dock/DockIconButton.vue.d.ts +10 -0
  64. package/dist/components/custom/dock/DockPopoverTrigger.vue.d.ts +19 -0
  65. package/dist/components/custom/dock/DockStack.vue.d.ts +35 -22
  66. package/dist/components/custom/dock/GlassDock.vue.d.ts +19 -3
  67. package/dist/components/custom/dock/composables/dockMorphContext.d.ts +18 -32
  68. package/dist/components/custom/dock/composables/dockMorphMeasure.d.ts +76 -145
  69. package/dist/components/custom/dock/composables/index.d.ts +1 -0
  70. package/dist/components/custom/dock/composables/railProjection.d.ts +45 -0
  71. package/dist/components/custom/dock/composables/useDockContextSilhouette.d.ts +192 -0
  72. package/dist/components/custom/dock/composables/useDockFission.d.ts +158 -0
  73. package/dist/components/custom/dock/composables/useDockItemDrag.d.ts +18 -0
  74. package/dist/components/custom/dock/composables/useDockShellProps.d.ts +38 -0
  75. package/dist/components/custom/dock/constants.d.ts +14 -3
  76. package/dist/components/custom/dock/index.d.ts +3 -0
  77. package/dist/components/custom/dot-flow-field/composables/flowField.d.ts +21 -0
  78. package/dist/components/custom/dot-flow-field/composables/flowGLProgram.d.ts +8 -0
  79. package/dist/components/custom/dot-flow-field/composables/flowSetupGL.d.ts +9 -0
  80. package/dist/components/custom/dot-flow-field/composables/flowSetupGLFlow.d.ts +12 -0
  81. package/dist/components/custom/dot-flow-field/composables/flowSetupWGPU.d.ts +7 -0
  82. package/dist/components/custom/dot-flow-field/composables/uniformBridgeWGPU.d.ts +28 -2
  83. package/dist/components/custom/dot-flow-field/composables/useFlowParticles.d.ts +18 -17
  84. package/dist/components/custom/dot-flow-field/constants.d.ts +51 -0
  85. package/dist/components/custom/dot-flow-field/index.d.ts +1 -1
  86. package/dist/components/custom/dot-flow-field/shaders/flow-field.compute.wgsl.d.ts +1 -1
  87. package/dist/components/custom/dot-flow-field/shaders/flow-field.glsl.d.ts +29 -0
  88. package/dist/components/custom/dot-flow-field/shaders/flow-field.render.wgsl.d.ts +2 -1
  89. package/dist/components/custom/dot-matrix/composables/uniformBridgeWGPU.d.ts +10 -1
  90. package/dist/components/custom/dot-matrix/composables/useDotSphere.d.ts +7 -0
  91. package/dist/components/custom/dot-matrix/constants.d.ts +14 -0
  92. package/dist/components/custom/dot-matrix/index.d.ts +1 -1
  93. package/dist/components/custom/dot-matrix/shaders/dot-matrix.glsl.d.ts +2 -2
  94. package/dist/components/custom/dot-matrix/shaders/dot-matrix.wgsl.d.ts +1 -1
  95. package/dist/components/custom/fourier-field/FourierField.vue.d.ts +4 -0
  96. package/dist/components/custom/fourier-field/composables/fourierFieldGLSetup.d.ts +9 -0
  97. package/dist/components/custom/fourier-field/composables/fourierFieldWGPUSetup.d.ts +11 -0
  98. package/dist/components/custom/fourier-field/composables/uniformBridgeWGPU.d.ts +16 -1
  99. package/dist/components/custom/fourier-field/composables/useFourierField.d.ts +22 -1
  100. package/dist/components/custom/fourier-field/constants.d.ts +53 -0
  101. package/dist/components/custom/fourier-field/shaders/fourier-field.glsl.d.ts +1 -1
  102. package/dist/components/custom/fourier-field/shaders/fourier-field.render.wgsl.d.ts +1 -1
  103. package/dist/components/custom/goo-blob/composables/easing.d.ts +1 -0
  104. package/dist/components/custom/goo-blob/composables/useBlobSatellites.d.ts +1 -0
  105. package/dist/components/custom/goo-blob/constants.d.ts +26 -1
  106. package/dist/components/custom/goo-blob/shaders/metaball-uniforms.glsl.d.ts +1 -1
  107. package/dist/components/custom/goo-blob/shaders/metaball.wgsl.d.ts +1 -1
  108. package/dist/components/custom/goo-blob/types.d.ts +50 -1
  109. package/dist/components/custom/goo-dot-matrix/composables/gooDotSetup.d.ts +32 -3
  110. package/dist/components/custom/goo-dot-matrix/composables/uniformBridgeWGPU.d.ts +14 -4
  111. package/dist/components/custom/goo-dot-matrix/constants.d.ts +55 -16
  112. package/dist/components/custom/goo-dot-matrix/index.d.ts +1 -1
  113. package/dist/components/custom/goo-dot-matrix/shaders/goo-dot.frag.d.ts +2 -0
  114. package/dist/components/custom/goo-dot-matrix/shaders/goo-dot.wgsl.d.ts +1 -0
  115. package/dist/components/custom/goo-filter/GooFilter.vue.d.ts +22 -0
  116. package/dist/components/custom/goo-filter/index.d.ts +1 -0
  117. package/dist/components/custom/handmark/brush.d.ts +17 -17
  118. package/dist/components/custom/handmark/constants.d.ts +28 -8
  119. package/dist/components/custom/handmark/geometry.d.ts +34 -1
  120. package/dist/components/custom/handmark/index.d.ts +1 -1
  121. package/dist/components/custom/icon-chip/types.d.ts +10 -0
  122. package/dist/components/custom/paper-backdrop/PaperBackdrop.vue.d.ts +18 -0
  123. package/dist/components/custom/paper-grid/composables/paperGrid.d.ts +44 -29
  124. package/dist/components/custom/paper-grid/composables/paperGridGLSetup.d.ts +2 -0
  125. package/dist/components/custom/paper-grid/composables/paperGridWGPUSetup.d.ts +3 -1
  126. package/dist/components/custom/paper-grid/composables/uniformBridgeWGPU.d.ts +2 -2
  127. package/dist/components/custom/paper-grid/constants.d.ts +44 -6
  128. package/dist/components/custom/paper-grid/index.d.ts +2 -2
  129. package/dist/components/custom/paper-grid/shaders/paper-grid.glsl.d.ts +1 -1
  130. package/dist/components/custom/paper-grid/shaders/paper-grid.wgsl.d.ts +1 -1
  131. package/dist/components/custom/selectable-chip/chipVariants.d.ts +39 -0
  132. package/dist/components/custom/selectable-chip/selectableChipVariants.d.ts +12 -20
  133. package/dist/components/custom/tabs/constants.d.ts +16 -8
  134. package/dist/components/custom/timeline/ScrubberTimeline.vue.d.ts +16 -0
  135. package/dist/components/custom/timeline/geometry.d.ts +0 -8
  136. package/dist/components/custom/toggle-chip/index.d.ts +15 -4
  137. package/dist/components/custom/watercolor-dot/WatercolorDot.vue.d.ts +12 -10
  138. package/dist/components/ui/_shared/useSurfaceAxis.d.ts +17 -3
  139. package/dist/components/ui/badge/Badge.vue.d.ts +14 -0
  140. package/dist/components/ui/badge/index.d.ts +1 -0
  141. package/dist/components/ui/button/Button.vue.d.ts +1 -0
  142. package/dist/components/ui/card/Card.vue.d.ts +1 -1
  143. package/dist/components/ui/card/ScrollCard.vue.d.ts +1 -1
  144. package/dist/components/ui/carousel/CarouselContent.vue.d.ts +2 -4
  145. package/dist/components/ui/dialog/DialogContent.vue.d.ts +9 -0
  146. package/dist/components/ui/drawer/Drawer.vue.d.ts +33 -14
  147. package/dist/components/ui/drawer/constants.d.ts +8 -6
  148. package/dist/components/ui/drawer/index.d.ts +12 -2
  149. package/dist/components/ui/select/SelectContent.vue.d.ts +9 -0
  150. package/dist/components/ui/slider/Slider.vue.d.ts +9 -0
  151. package/dist/composables/dom/index.d.ts +1 -0
  152. package/dist/composables/dom/useDragVelocity.d.ts +46 -0
  153. package/dist/composables/glass/wave/index.d.ts +4 -0
  154. package/dist/composables/glass/wave/waveField.d.ts +115 -0
  155. package/dist/composables/glass/wave/waveField.glsl.d.ts +1 -0
  156. package/dist/composables/glass/wave/waveField.wgsl.d.ts +1 -0
  157. package/dist/composables/glass/webgl/createCanvasLifecycle.d.ts +95 -2
  158. package/dist/composables/glass/webgl/useWebGLCanvas.d.ts +40 -2
  159. package/dist/composables/glass/webgpu/index.d.ts +1 -0
  160. package/dist/composables/glass/webgpu/useGpuSubstrate.d.ts +37 -0
  161. package/dist/composables/glass/webgpu/useWebGPUCanvas.d.ts +49 -2
  162. package/dist/composables/glass/webgpu/webgpuDevice.d.ts +1 -1
  163. package/dist/composables/motion/core/index.d.ts +4 -0
  164. package/dist/composables/motion/core/useHaptic.d.ts +48 -0
  165. package/dist/composables/motion/core/writeVelocityWeight.d.ts +31 -0
  166. package/dist/composables/motion/index.d.ts +2 -0
  167. package/dist/composables/motion/springPresets.d.ts +16 -17
  168. package/dist/composables/motion/suite.d.ts +2 -2
  169. package/dist/composables/motion/useBloomUp.d.ts +97 -0
  170. package/dist/composables/motion/useCelebrationBurst.d.ts +50 -0
  171. package/dist/composables/motion/useDockCtaReceive.d.ts +10 -28
  172. package/dist/composables/motion/useGooMorph.d.ts +72 -0
  173. package/dist/composables/motion/useLiquidFlex.d.ts +18 -0
  174. package/dist/composables/motion/useLiquidMorph.d.ts +108 -0
  175. package/dist/composables/motion/useLiquidPress.d.ts +12 -0
  176. package/dist/composables/motion/useLiquidReveal.d.ts +7 -4
  177. package/dist/composables/motion/useMorphField.d.ts +157 -0
  178. package/dist/composables/motion/useScrollPin.d.ts +49 -0
  179. package/dist/composables/motion/useScrollScene.d.ts +67 -0
  180. package/dist/concentric.js +532 -563
  181. package/dist/configurator.js +2 -2
  182. package/dist/confirm-dialog.js +3 -3
  183. package/dist/constellation.js +4 -4
  184. package/dist/context-menu.js +2 -2
  185. package/dist/controls.js +2 -2
  186. package/dist/createCanvasLifecycle-CuCrGRfq.js +173 -0
  187. package/dist/dark.js +1 -1
  188. package/dist/data-table.js +1 -1
  189. package/dist/deck.js +1 -1
  190. package/dist/dialog.js +3 -3
  191. package/dist/dock.js +1163 -618
  192. package/dist/dockContext-gFVS2gMg.js +18 -0
  193. package/dist/dom.js +7 -6
  194. package/dist/dot-flow-field.js +1114 -523
  195. package/dist/dot-matrix.js +348 -204
  196. package/dist/drawer.js +106 -96
  197. package/dist/{dropdown-menu-aJmV5SqE.js → dropdown-menu-CCfcCQ68.js} +3 -3
  198. package/dist/dropdown-menu.js +1 -1
  199. package/dist/easing.js +3 -3
  200. package/dist/expandable-container.js +2 -2
  201. package/dist/fading-scroll.js +1 -1
  202. package/dist/forms.js +6 -6
  203. package/dist/fourier-field.js +441 -197
  204. package/dist/fourier-math.js +1 -1
  205. package/dist/glass-panel.js +2 -2
  206. package/dist/glass-ui.css +1 -1
  207. package/dist/glass-ui.js +139 -135
  208. package/dist/goo-blob.js +11 -9
  209. package/dist/goo-dot-matrix.js +418 -198
  210. package/dist/handmark.js +137 -94
  211. package/dist/header-ribbon.js +1 -1
  212. package/dist/hover-card.js +1 -1
  213. package/dist/hover-popover.js +1 -1
  214. package/dist/icon-chip.js +1 -1
  215. package/dist/icon-tooltip.js +1 -1
  216. package/dist/index.d.ts +3 -0
  217. package/dist/instrument-chassis.js +1 -1
  218. package/dist/keyboard.js +1 -1
  219. package/dist/label.js +1 -1
  220. package/dist/labeled-field.js +7 -7
  221. package/dist/metric-badge.js +1 -1
  222. package/dist/metric-cell.js +1 -1
  223. package/dist/metric-stack.js +1 -1
  224. package/dist/motion-core.js +42 -39
  225. package/dist/motion-curves.js +20 -14
  226. package/dist/motion.js +226 -26
  227. package/dist/notification.js +1 -1
  228. package/dist/number-field.js +1 -1
  229. package/dist/pager-dots.js +1 -1
  230. package/dist/paper-backdrop.js +1 -1
  231. package/dist/paper-grid.js +315 -342
  232. package/dist/paperGrid-CXCSMbZ1.js +191 -0
  233. package/dist/popover.js +1 -1
  234. package/dist/{presets-CvOUqtdY.js → presets-QvYgnFIZ.js} +13 -12
  235. package/dist/progress.js +1 -1
  236. package/dist/pulse.js +1 -1
  237. package/dist/reactive.js +2 -2
  238. package/dist/{resolveCanvasColor-yPyIpJt9.js → resolveCanvasColor-DsSJk06I.js} +5 -5
  239. package/dist/scrolling-text.js +1 -1
  240. package/dist/search.js +7 -7
  241. package/dist/select.js +3 -3
  242. package/dist/selectable-chip.js +18 -35
  243. package/dist/separator.js +1 -1
  244. package/dist/{sheet-B2flBfLH.js → sheet-DUCIoOe0.js} +3 -3
  245. package/dist/sheet.js +1 -1
  246. package/dist/sidebar.js +1 -1
  247. package/dist/slider-CcICPe3u.js +149 -0
  248. package/dist/slider.js +1 -1
  249. package/dist/sortable-list.js +3 -3
  250. package/dist/{spectrum-walk-BVzA7Biz.js → spectrum-walk-cBNSx_zm.js} +1 -1
  251. package/dist/springPresets-DfoQ6XRY.js +64 -0
  252. package/dist/stacked-icons.js +54 -39
  253. package/dist/styles/cards.css +202 -2
  254. package/dist/styles/components.css +1 -3
  255. package/dist/styles/configurator.css +172 -7
  256. package/dist/styles/critical-partition.mjs +35 -2
  257. package/dist/styles/deferred.css +2 -0
  258. package/dist/styles/dock/adaptive-legibility.css +119 -0
  259. package/dist/styles/dock/density.css +18 -10
  260. package/dist/styles/dock/fission-bridge.css +552 -0
  261. package/dist/styles/dock/layers.css +88 -124
  262. package/dist/styles/dock/morph-bridge.css +15 -2
  263. package/dist/styles/dock/morph.css +45 -114
  264. package/dist/styles/dock/shape.css +137 -11
  265. package/dist/styles/dock/shell.css +1 -3
  266. package/dist/styles/dock/stack-rail.css +95 -7
  267. package/dist/styles/dock-controls/icon-button.css +34 -2
  268. package/dist/styles/dock-controls/triggers.css +23 -1
  269. package/dist/styles/dock-controls.css +18 -0
  270. package/dist/styles/dock.css +16 -1
  271. package/dist/styles/drawer.css +166 -0
  272. package/dist/styles/glass/glass-atom.css +244 -0
  273. package/dist/styles/glass/glass-capsule.css +143 -0
  274. package/dist/styles/glass/glass-chip.css +215 -0
  275. package/dist/styles/glass/liquid-enter.css +252 -0
  276. package/dist/styles/glass/liquid-morph.css +850 -0
  277. package/dist/styles/glass/material.css +70 -1
  278. package/dist/styles/glass/reveal.css +22 -2
  279. package/dist/styles/glass/rim.css +13 -1
  280. package/dist/styles/glass/surfaces.css +18 -8
  281. package/dist/styles/glass.css +11 -0
  282. package/dist/styles/icon-chip.css +45 -0
  283. package/dist/styles/index.css +11 -0
  284. package/dist/styles/jubilance.css +65 -0
  285. package/dist/styles/motion/morph-field.css +229 -0
  286. package/dist/styles/paper.css +230 -14
  287. package/dist/styles/scroll-choreography.css +135 -78
  288. package/dist/styles/segmented-tabs.css +85 -51
  289. package/dist/styles/select.css +151 -0
  290. package/dist/styles/tokens/color-radius.css +1 -1
  291. package/dist/styles/tokens/dark-arm.css +57 -8
  292. package/dist/styles/tokens/glass-deep.css +8 -4
  293. package/dist/styles/tokens/glass-fx.css +80 -2
  294. package/dist/styles/tokens/glass.css +140 -8
  295. package/dist/styles/tokens/light-dark.css +2 -2
  296. package/dist/styles/tokens/property-regs.css +144 -0
  297. package/dist/styles/tokens/scale-paper.css +20 -8
  298. package/dist/styles/tokens/scheme-motion.css +92 -157
  299. package/dist/styles/tokens/scheme-spring.css +239 -0
  300. package/dist/styles/tokens/scroll-tokens.css +15 -15
  301. package/dist/styles/tokens/shadow.css +73 -13
  302. package/dist/styles/tokens.css +9 -2
  303. package/dist/styles/utilities/btn.css +70 -0
  304. package/dist/switch.js +1 -1
  305. package/dist/tabs.js +198 -181
  306. package/dist/timeline.js +241 -206
  307. package/dist/toast.js +1 -1
  308. package/dist/toggle-chip.js +14 -41
  309. package/dist/toggle-group.js +1 -1
  310. package/dist/tooltip.js +1 -1
  311. package/dist/typewriter.js +1 -1
  312. package/dist/{uniformBridgeWGPU-CtAKl45L.js → uniformBridgeWGPU-BCse1SHU.js} +191 -127
  313. package/dist/{useAnimatedNumber-CLrxicG9.js → useAnimatedNumber-BntskVdQ.js} +1 -1
  314. package/dist/{useConfiguratorState-4xblKfwd.js → useConfiguratorState-22BcULzF.js} +37 -35
  315. package/dist/useDockCtaReceive-DX7RDb6_.js +88 -0
  316. package/dist/{useDragMorph-BUgAC-zK.js → useDragMorph-DGLSewwB.js} +2 -2
  317. package/dist/useDragVelocity-CjcfX3dA.js +57 -0
  318. package/dist/useGooMorph-Cs13NgYL.js +104 -0
  319. package/dist/useGpuSubstrate-Ceet70xq.js +347 -0
  320. package/dist/{useViewTransition-CUI1nAgn.js → useHaptic-CPz5BT9I.js} +40 -1
  321. package/dist/{useLiquidFlex-UmA6LMZu.js → useLiquidFlex-Cc6PjVJD.js} +8 -3
  322. package/dist/useLiquidPress-CtOQ8Z0_.js +43 -0
  323. package/dist/useMorphField-ogBM7ubT.js +141 -0
  324. package/dist/{useScrollChrome-D66AVP7C.js → useScrollChrome-JuImi1DM.js} +2 -2
  325. package/dist/{useSpringMount-BWDnKIwh.js → useSpringMount-DFxtzmkR.js} +1 -1
  326. package/dist/{useSpringPress-B1-Czp-V.js → useSpringPress-VM9RgVq3.js} +1 -1
  327. package/dist/{useSurfaceAxis-g0NloYEF.js → useSurfaceAxis-Ci7Dnaw2.js} +1 -1
  328. package/dist/{useTouchGate-CBZTD4SD.js → useTouchGate-B1Lf9XqN.js} +1 -1
  329. package/dist/virtual.js +1 -1
  330. package/dist/watercolor-dot.js +16 -26
  331. package/dist/writeVelocityWeight-Bh83xZfs.js +19 -0
  332. package/package.json +14 -3
  333. package/src/styles/cards.css +202 -2
  334. package/src/styles/configurator.css +172 -7
  335. package/src/styles/critical-partition.mjs +35 -2
  336. package/src/styles/dock/adaptive-legibility.css +119 -0
  337. package/src/styles/dock/density.css +18 -10
  338. package/src/styles/dock/fission-bridge.css +552 -0
  339. package/src/styles/dock/layers.css +88 -124
  340. package/src/styles/dock/morph-bridge.css +15 -2
  341. package/src/styles/dock/morph.css +45 -114
  342. package/src/styles/dock/shape.css +137 -11
  343. package/src/styles/dock/shell.css +1 -3
  344. package/src/styles/dock/stack-rail.css +95 -7
  345. package/src/styles/dock-controls/icon-button.css +34 -2
  346. package/src/styles/dock-controls/triggers.css +23 -1
  347. package/src/styles/dock-controls.css +18 -0
  348. package/src/styles/dock.css +16 -1
  349. package/src/styles/drawer.css +164 -0
  350. package/src/styles/glass/glass-atom.css +244 -0
  351. package/src/styles/glass/glass-capsule.css +143 -0
  352. package/src/styles/glass/glass-chip.css +215 -0
  353. package/src/styles/glass/liquid-enter.css +252 -0
  354. package/src/styles/glass/liquid-morph.css +850 -0
  355. package/src/styles/glass/material.css +70 -1
  356. package/src/styles/glass/reveal.css +22 -2
  357. package/src/styles/glass/rim.css +13 -1
  358. package/src/styles/glass/surfaces.css +18 -8
  359. package/src/styles/glass.css +11 -0
  360. package/src/styles/icon-chip.css +45 -0
  361. package/src/styles/index.css +11 -0
  362. package/src/styles/jubilance.css +65 -0
  363. package/src/styles/motion/morph-field.css +229 -0
  364. package/src/styles/paper.css +230 -14
  365. package/src/styles/scroll-choreography.css +135 -78
  366. package/src/styles/segmented-tabs.css +85 -47
  367. package/src/styles/select.css +151 -0
  368. package/src/styles/tokens/color-radius.css +1 -1
  369. package/src/styles/tokens/dark-arm.css +57 -8
  370. package/src/styles/tokens/glass-deep.css +8 -4
  371. package/src/styles/tokens/glass-fx.css +80 -2
  372. package/src/styles/tokens/glass.css +140 -8
  373. package/src/styles/tokens/light-dark.css +2 -2
  374. package/src/styles/tokens/property-regs.css +144 -0
  375. package/src/styles/tokens/scale-paper.css +20 -8
  376. package/src/styles/tokens/scheme-motion.css +92 -157
  377. package/src/styles/tokens/scheme-spring.css +239 -0
  378. package/src/styles/tokens/scroll-tokens.css +15 -15
  379. package/src/styles/tokens/shadow.css +73 -13
  380. package/src/styles/tokens.css +9 -2
  381. package/src/styles/utilities/btn.css +70 -0
  382. package/dist/DialogContent-6JtTB5x2.js +0 -106
  383. package/dist/PagerDots-Cjx96la-.js +0 -98
  384. package/dist/PaperBackdrop-CqwjnfLv.js +0 -31
  385. package/dist/badge-D9XWW4GT.js +0 -53
  386. package/dist/button-5dY1Dvhd.js +0 -125
  387. package/dist/components/custom/concentric/composables/ringField.d.ts +0 -85
  388. package/dist/createCanvasLifecycle-Gh45Ce-p.js +0 -93
  389. package/dist/dockContext-BNfyPLe9.js +0 -17
  390. package/dist/slider-2A0rPn79.js +0 -142
  391. package/dist/springPresets-Ce7OYCm9.js +0 -46
  392. package/dist/useDockCtaReceive-DfFkmgL1.js +0 -82
  393. package/dist/useGpuSubstrate-4pTcp6mX.js +0 -294
  394. package/dist/useLiquidPress-BooG97RY.js +0 -39
  395. /package/dist/{CollapsibleContent-68dEXIAl.js → CollapsibleContent-D7UNsXQr.js} +0 -0
  396. /package/dist/{DialogFooter-9phqcRIS.js → DialogFooter-DoLy0ewI.js} +0 -0
  397. /package/dist/{InstrumentChassis-CxsHSyMj.js → InstrumentChassis-UUJX0-mW.js} +0 -0
  398. /package/dist/{Label-C2ejNWeC.js → Label-B_HPqi_q.js} +0 -0
  399. /package/dist/{ModalOverlay-D1VrWyoi.js → ModalOverlay-DfAf7o15.js} +0 -0
  400. /package/dist/{SelectGroup-BFiod7X2.js → SelectGroup-Dcczq44n.js} +0 -0
  401. /package/dist/{SelectSeparator-C2UGOkXF.js → SelectSeparator-CNRGG7Ew.js} +0 -0
  402. /package/dist/{Separator-DQcwC2TR.js → Separator-Cf9-JFgi.js} +0 -0
  403. /package/dist/{_plugin-vue_export-helper-C1je1s0u.js → _plugin-vue_export-helper-gLzyemvl.js} +0 -0
  404. /package/dist/{color-Cs0-oxYL.js → color-B9jZdhJX.js} +0 -0
  405. /package/dist/{compile-nZ1xVYTp.js → compile-INR_tPk_.js} +0 -0
  406. /package/dist/{constants--C2DkLW8.js → constants-BWj7DkMn.js} +0 -0
  407. /package/dist/{createContext-CpBNTRMI.js → createContext-Cd23P9j0.js} +0 -0
  408. /package/dist/{dotMatrixField-D_x9_1qq.js → dotMatrixField-CRO0ZFk4.js} +0 -0
  409. /package/dist/{flow.glsl-B2P7e0MT.js → flow.glsl-DqEGRpl4.js} +0 -0
  410. /package/dist/{math-Eb0w3LqU.js → math-5RcIgCB4.js} +0 -0
  411. /package/dist/{menuItemVariants-D8VNHq22.js → menuItemVariants-DAXquKja.js} +0 -0
  412. /package/dist/{prng-B-d9eYX8.js → prng-B5tIXTtj.js} +0 -0
  413. /package/dist/{procedural-color.wgsl-m7Zgv35j.js → procedural-color.wgsl-C1Y5PkM6.js} +0 -0
  414. /package/dist/{scrollReader-DI1NWxUw.js → scrollReader-rc3Ns_NM.js} +0 -0
  415. /package/dist/{useControlSize-SH1UmJCi.js → useControlSize-DAZ062x7.js} +0 -0
  416. /package/dist/{useFuzzySearch-DIhcYtcw.js → useFuzzySearch-0fTYOhS4.js} +0 -0
  417. /package/dist/{useGlobalDark-CmjB9E32.js → useGlobalDark-B4HO9LXG.js} +0 -0
  418. /package/dist/{useIntersectionPause-Dbozzjgm.js → useIntersectionPause-DO8Vl4gs.js} +0 -0
  419. /package/dist/{useInterval-CNdua40W.js → useInterval-BVUI-sez.js} +0 -0
  420. /package/dist/{useKeyboardShortcuts-BPRp33Im.js → useKeyboardShortcuts-BEut54Tk.js} +0 -0
  421. /package/dist/{usePointerVelocityField-QLsy3_kv.js → usePointerVelocityField-BrkqZFhj.js} +0 -0
  422. /package/dist/{useResizeObserver-Bpoi7tRE.js → useResizeObserver-DdEn3v2f.js} +0 -0
  423. /package/dist/{useResolveTokenColor-vAylyR0x.js → useResolveTokenColor-ChOnCckA.js} +0 -0
  424. /package/dist/{useScrollProgress-c3yxmH6a.js → useScrollProgress-A0M6qRl7.js} +0 -0
  425. /package/dist/{useSortable-BVqlJRBR.js → useSortable-DQV_UNDw.js} +0 -0
  426. /package/dist/{useTextHighlight-NmBM5V_4.js → useTextHighlight-Bma3UlKA.js} +0 -0
  427. /package/dist/{useTimer-BHJOKr35.js → useTimer-BBLGPXR8.js} +0 -0
  428. /package/dist/{useUserInvalidAria-y5namzeE.js → useUserInvalidAria-EmmwWPOl.js} +0 -0
  429. /package/dist/{useViewportReady-anbac3m6.js → useViewportReady-C9pYnn7K.js} +0 -0
  430. /package/dist/{vReveal-D9k0jADx.js → vReveal-CT1KtwZA.js} +0 -0
@@ -54,21 +54,12 @@
54
54
  grid-auto-columns: 1fr;
55
55
  padding: var(--bouncy-track-trim);
56
56
  border-radius: var(--bouncy-track-radius);
57
- /* BA.W-TABS — the pill track rides the glass quiet tier (the warm glass
58
- material, the no-gray register) + a hairline edge. NOT a `--surface-tint`
59
- gray plate (the R10-5 no-gray cut). */
60
- background: var(--glass-bg-quiet);
61
- -webkit-backdrop-filter: var(--glass-blur-quiet);
62
-
63
- backdrop-filter: var(--glass-blur-quiet);
64
- -webkit-backdrop-filter: var(--glass-blur-quiet);
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);
57
+ /* BD.W-TAB-IOS-CAPSULE — the warm-glass quiet surface + the rim + the iOS-27
58
+ sunken recess now live in the SHARED `.glass-capsule-track` register (the SFC
59
+ composes it onto the pill track). The track is a thin warm-glass quiet capsule
60
+ with a lit top edge + a recessed well, never a dark hairline, never gray. The
61
+ indicator (`.glass-capsule`) reads FORWARD off the SAME rim + the lift shadow.
62
+ The underline material does NOT compose the track (paper, no surface). */
72
63
  }
73
64
 
74
65
  /* ── The vertical orientation axis (the block stack) ── */
@@ -92,37 +83,51 @@
92
83
  /* ── The shared indicator body (the PILL plate) ── */
93
84
  .segmented-indicator {
94
85
  position: absolute;
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);
103
- -webkit-backdrop-filter: var(--glass-blur-floating);
104
-
105
- backdrop-filter: var(--glass-blur-floating);
106
- -webkit-backdrop-filter: var(--glass-blur-floating);
86
+ /* BD.W-TAB-IOS-CAPSULE — the active pill COMPOSES the shared `.glass-capsule`
87
+ (the SFC adds the class). The warm-floor fill (`--glass-bg-floating-tinted`
88
+ composed toward the warm-floor source, meanChroma ≥ 0.02 both modes — never
89
+ gray), the floating blur, the directional rim + the lift under-shadow ALL live
90
+ there now, ONE recipe ≥3 consumers. This block keeps only the position +
91
+ inset + the indicator-local stadium radius + the motion transform. */
107
92
  z-index: 0;
108
93
  inset-block: var(--bouncy-track-trim);
109
94
  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"). */
117
- box-shadow:
118
- var(--glass-rim-top),
119
- var(--glass-rim-bottom),
120
- var(--glass-shadow-floating);
121
- /* The volume-preserving travel-squish: stretch along X, compress Y in
122
- inverse proportion. `transform-origin: center` → a symmetric width-flex
123
- as it travels (the indicator grows wider mid-travel, settles to fit). */
95
+ /* BD.W-TABS-LIQUID — the COMPOSED transform write: the area-inflation BLOB
96
+ (uniform, both axes, `--tab-blob` driven imperatively by the 2nd
97
+ `useLiquidFlex` channel — grow→overshoot→shrink) × the volume-preserving
98
+ travel-squish (`--stretch`, reciprocal). `transform-origin: center` → the blob
99
+ grows from center (the label stays put) and the squish stays center-pinned. */
124
100
  transform-origin: center;
125
- scale: var(--stretch) calc(1 / var(--stretch));
101
+ scale: calc(var(--tab-blob, 1) * var(--stretch))
102
+ calc(var(--tab-blob, 1) / var(--stretch));
103
+ }
104
+
105
+ /* BD.W-TABS-LIQUID — the COMMIT accent-flood (T4, opt-in). A momentary full-capsule
106
+ wash of `--glass-accent`, driven by `--tab-flood-t` (0→1→0), that TRAILS the
107
+ spatial glide a beat then clears (EFFECTS-after-SPATIAL). `isolation: isolate` on
108
+ the host so the `plus-lighter` blend composites the flood against the capsule
109
+ only (not the page); the gradient is `in srgb` (additive bloom, NOT oklab). The
110
+ accent is a CONSUMER accent — default `--glass-accent: transparent` → byte-
111
+ identical rest, provable no-op. The SAME register dock-tabs adopt (dormant at
112
+ `--tab-flood-t: 0`). */
113
+ .segmented-indicator {
114
+ isolation: isolate;
115
+ }
116
+ @supports (mix-blend-mode: plus-lighter) {
117
+ .segmented-indicator::after {
118
+ content: "";
119
+ position: absolute;
120
+ inset: 0;
121
+ border-radius: inherit;
122
+ pointer-events: none;
123
+ background: radial-gradient(
124
+ 120% 140% at 50% 50%,
125
+ color-mix(in srgb, var(--glass-accent, transparent) 55%, transparent),
126
+ transparent 70%
127
+ );
128
+ mix-blend-mode: plus-lighter;
129
+ opacity: var(--tab-flood-t, 0);
130
+ }
126
131
  }
127
132
 
128
133
  /* Vertical: the indicator deforms on the BLOCK axis (compress X / stretch Y) and
@@ -130,15 +135,23 @@
130
135
  .segmented-tabs--vertical .segmented-indicator {
131
136
  inset-block: auto;
132
137
  inset-inline: var(--bouncy-track-trim);
133
- scale: calc(1 / var(--stretch)) var(--stretch);
138
+ /* BD.W-TABS-LIQUID — the vertical arm mirrors the blob × squish: the block axis
139
+ carries the stretch, the inline axis its reciprocal, both uniformly inflated. */
140
+ scale: calc(var(--tab-blob, 1) / var(--stretch))
141
+ calc(var(--tab-blob, 1) * var(--stretch));
134
142
  }
135
143
 
136
144
  @media (prefers-reduced-motion: no-preference) {
137
145
  .segmented-indicator {
138
- /* ONE composited transform pair (translate+scale) on ONE calibrated
139
- clock — the glide + the squish share `--tab-indicator-duration` so they
140
- cannot desync (the R10-2 multi-property-desync class collapsed). */
141
- transition: scale var(--tab-indicator-duration) var(--spring-snappy);
146
+ /* BD.W-TABS-LIQUID — the composed `scale` (`--tab-blob × --stretch`) rides the
147
+ DEPENDED `--ease-cartoon-punch` curve (the booked Band-0 token, CONSUMED
148
+ never minted) so the 5-beat blob anticipates (the curve's pre-dip < 0),
149
+ overshoots past the destination footprint (peaks > 1), then settles soft.
150
+ The discrete imperative `--tab-blob` writes (open/release) INTERPOLATE on
151
+ this clock via the `@property` registration — no snap-flicker. ONE clock,
152
+ ONE composited transform pair — the glide (inset) + the squish + the blob
153
+ cannot desync. The `--tab-flood-t` accent-flood trails a beat after. */
154
+ transition: scale var(--tab-indicator-duration) var(--ease-cartoon-punch);
142
155
  }
143
156
  }
144
157
 
@@ -231,7 +244,13 @@
231
244
  font: inherit;
232
245
  font-size: 0.8125rem;
233
246
  color: var(--muted-foreground);
234
- transition: color var(--duration-fast) ease;
247
+ /* BD.W-TABS-LIQUID — the glyph scale-pop (overlapping action / follow-through):
248
+ the label settles AFTER the capsule (the child trails the parent). The `scale`
249
+ channel rides the snappy spring with a 60ms delay so it OVERLAPS the capsule
250
+ arrival; the colour cross-fade stays on the fast bezier. */
251
+ transition:
252
+ color var(--duration-fast) ease,
253
+ scale var(--spring-snappy-duration) var(--spring-snappy) 60ms;
235
254
  /* AQ.W3 identity base — keep `scale:1; translate:0` so a hover/press
236
255
  transform never mints a stacking context that severs `anchor()`
237
256
  resolution (the WAAPI press writes `transform` transiently — harmless). */
@@ -251,6 +270,19 @@
251
270
  color: var(--foreground);
252
271
  }
253
272
 
273
+ /* BD.W-TABS-LIQUID — the glyph scale-pop on the PILL selection. The live selection
274
+ model is `aria-pressed` (the pill is a ToggleGroup-shaped surface — verified in
275
+ SegmentedTabs.vue, NOT `aria-selected` which the underline paper material uses).
276
+ The pop magnitude DEPENDS `--motion-weight` (the booked Band-0 token, CONSUMED):
277
+ `calc(1 + 0.06 × --motion-weight)` → ~+3.7% at rest weight 0.618, and exactly 1
278
+ under PRM (`--motion-weight: 0`). The 60ms transition delay (above) settles it a
279
+ beat after the capsule arrives (overlapping action). The underline label does NOT
280
+ pop (paper ink, no inflation — the material fence). */
281
+ .segmented-tabs:not(.segmented-tabs--underline)
282
+ .segmented-tab[aria-pressed="true"] {
283
+ scale: calc(1 + 0.06 * var(--motion-weight));
284
+ }
285
+
254
286
  .segmented-tab.is-disabled {
255
287
  opacity: 0.4;
256
288
  cursor: not-allowed;
@@ -407,7 +439,9 @@
407
439
  /* Promote to its own compositor layer for the 1:1 follow (the translate write
408
440
  is compositor-only; the hint keeps the plate off the main-thread paint). */
409
441
  will-change: transform;
410
- /* Sub-perceptual catch-light lift — the grabbed lozenge reads a hair brighter
411
- at its specular edge (the W-GLASS-CAL specular register, disco-FREE). */
412
- --glass-specular: 0.1;
442
+ /* BD.W-TAB-IOS-CAPSULE C7 — the grabbed-state catch-light COMPOSES the SHARED
443
+ specular-lift step declared ONCE in glass/glass-capsule.css (the
444
+ `.glass-capsule-hover:hover, .glass-drag-lift { --glass-specular }` group), NOT
445
+ a parallel `--glass-specular` fork. This block carries only the grabbing-distinct
446
+ bits (the grab cursor + the `will-change` hint). */
413
447
  }
@@ -48,3 +48,154 @@
48
48
  precompiled contract). */
49
49
  overflow-y: auto;
50
50
  }
51
+
52
+ /* ════════════════════════════════════════════════════════════════════════
53
+ BD.W-SELECT-WELL (P4 select-forms) — the welling WARM-GLASS listbox + the
54
+ keyed warm control EDGE. The Select is the REFERENCE consumer of the shared
55
+ field + capsule + accent + reveal union — every leg COMPOSES a shipped/sibling
56
+ register, ZERO new component, ZERO fork.
57
+
58
+ The three legs that live HERE (the consumer side):
59
+ · .glass-control-edge — the keyed two-stop warm rim every form control reads
60
+ so it has a DEFINED edge over the field (fixes the trigger box-shadow:none
61
+ cream-on-cream melt). Composes the SHIPPED `--glass-rim-top`/`--glass-rim-
62
+ bottom` keyed pair (the `--glass-key` upper-right cel key) — NOT a select-
63
+ private border, NOT a re-minted rim.
64
+ · the menu plate WARM FLOOR + α-drop — the menu reads the SHIPPED warm-capsule
65
+ floor (`--glass-capsule-warm` at `--glass-capsule-warm-floor`, the proven
66
+ meanChroma ≥ 0.02 source) so it is warm-cream even over a flat page, AND the
67
+ plate α drops so the warmed source + the portal field TRANSMIT.
68
+ · the portal warm FIELD — a clipped menu-local layer carrying the route's
69
+ `--field-h` (re-emitted on the portal root) so the menu transmits its route
70
+ identity even where the page field is faint behind the body plate.
71
+ ════════════════════════════════════════════════════════════════════════ */
72
+ @layer components {
73
+ /* ── .glass-control-edge — the keyed warm control rim (the cream-on-cream fix) ──
74
+ The form controls read `.control-surface` / `.input-pill` (control-surfaces.css)
75
+ which carry a border + fill but `box-shadow: none` — so over a warm cream field
76
+ the trigger's 1.5px border melts and the control reads as a flat cream smudge.
77
+ This register adds the SHIPPED keyed two-stop directional rim (the bright top/
78
+ right catch-light + the faint warm bottom/left under-shadow, `--glass-key` upper-
79
+ right) so the control reads as a lifted glass plate with a defined warm edge over
80
+ the field. ONE register, ≥8 consumers (Select trigger + Input/Textarea/NumberField
81
+ pill + Checkbox/Radio + Switch track + Combobox anchor) — the DRY bar cleared by
82
+ construction. Composed (not re-declared): the rim is the SAME `--glass-rim-top`/
83
+ `--glass-rim-bottom` pair `.glass-capsule` reads, so `--glass-key` re-points BOTH
84
+ the capsule and the control edge from ONE handle (cel coherence). */
85
+ .glass-control-edge {
86
+ box-shadow:
87
+ var(--glass-rim-top),
88
+ var(--glass-rim-bottom);
89
+ }
90
+ /* Compose the keyed edge UNDER any control-owned ring/shadow: a control with its
91
+ OWN box-shadow (the Switch thumb, the focus ring on the pill) layers its shadow
92
+ FIRST, then the rim — the rim is the resting silhouette, the ring is the focus
93
+ overlay (the pill's `:focus-visible` box-shadow wins by source order + its own
94
+ rule). The rim travels with the control on the SHARED bezier (the pill/control-
95
+ surface already transition box-shadow on `--ease-standard`). */
96
+
97
+ /* ── The menu plate WARM FLOOR + α-drop (the un-gray amplifier) ──
98
+ The floating recipe (`.glass-floating`, ladder.css) composes
99
+ `color-mix(--glass-bg-floating, --glass-tint-source --glass-tint-strength)`,
100
+ and `--glass-tint-strength` floors at 0% at calm rest — so the menu plate is
101
+ near-gray-flat. RE-POINT the menu fill to compose the SHIPPED warm-capsule floor
102
+ (`--glass-capsule-warm` at `--glass-capsule-warm-floor`, the proven meanChroma
103
+ ≥ 0.02 source — the SAME token the tab capsule reads, DRY) ON TOP of the floating
104
+ tint, AND drop the plate α so the warmed source + the portal field TRANSMIT and
105
+ give real L-variance (the menu is warm GLASS, never an opaque cream slab). The
106
+ six-layer rim/blur/shadow composite is UNTOUCHED — only the FILL admit changes. */
107
+ [data-slot="select-content"],
108
+ [data-slot="combobox-list"] {
109
+ /* The α-drop seam: a consumer can re-solidify via `--select-plate-alpha: 1`.
110
+ Default 0.90 (light) drops the ~0.80α floating base to ~0.72 effective (the
111
+ amendment's transmit target) so the warmed source + the portal field show
112
+ through while the plate keeps body. The dark arm keeps more body (see .dark
113
+ below). The combobox list is the SAME overlay-family warm-glass plate
114
+ (DRY — one warm-floor register for both portalled pickers). */
115
+ --select-plate-alpha: 0.90;
116
+ background: color-mix(
117
+ in oklab,
118
+ color-mix(
119
+ in oklab,
120
+ var(--glass-bg-floating-tinted, var(--glass-bg-floating)),
121
+ var(--glass-capsule-warm) var(--glass-capsule-warm-floor)
122
+ ),
123
+ transparent calc((1 - var(--select-plate-alpha)) * 100%)
124
+ );
125
+ /* the cartoon weight — the SHIPPED `--shadow-cartoon-lg` warm cel stamp UNDER
126
+ the floating elevation so the panel reads as a physical card lifted off the
127
+ page. Composed onto the floating box-shadow stack via the plate's own rule
128
+ (the floating tier's `--glass-material-rim` + shadows stay; this ADDS the
129
+ cartoon under-stamp). Static, PRM-immune. */
130
+ box-shadow:
131
+ var(--glass-material-rim),
132
+ var(--glass-under-shadow-vivid),
133
+ var(--glass-shadow-floating),
134
+ var(--shadow-cartoon-lg);
135
+ }
136
+ .dark [data-slot="select-content"],
137
+ .dark [data-slot="combobox-list"] {
138
+ /* dark glass needs more body — the warm field reads as a glow band, not a wash
139
+ lost in near-black; keep the fill nearly solid so the dark menu has presence.
140
+ PLAIN per-mode arm (not a light-dark() fragment — the inset-shadow trap, and
141
+ the box-shadow above carries no inset leg but the discipline holds). */
142
+ --select-plate-alpha: 0.94;
143
+ }
144
+
145
+ /* ── .glass-field-portal — the portal-local warm field (route identity) ──
146
+ The menu portals to <body>, OUTSIDE the route's field, so its `backdrop-filter`
147
+ has nothing warm to transmit. A clipped menu-local layer BEHIND the plate (z -1,
148
+ NO backdrop-filter on it — glass-cannot-sample-glass avoided by construction)
149
+ paints a 3-stop warm spine keyed to the route's `--field-h` (re-emitted on the
150
+ portal root via `data-field-palette` → `--field-h`). `inset: 0` (clipped INSIDE
151
+ — the blur bends it THROUGH the plate as real L-variance, NOT an `inset:-20%`
152
+ halo leaking around the box). Defaults to `--field-h: 48` (forms terracotta)
153
+ when the route does not re-emit, so a bare Select still reads warm. */
154
+ .glass-field-portal {
155
+ position: relative;
156
+ }
157
+ .glass-field-portal::before {
158
+ content: "";
159
+ position: absolute;
160
+ inset: 0;
161
+ z-index: -1;
162
+ pointer-events: none;
163
+ border-radius: inherit;
164
+ background:
165
+ radial-gradient(70% 60% at 24% 22%,
166
+ oklch(0.92 0.08 var(--field-h, 48) / 0.55), transparent 72%),
167
+ radial-gradient(64% 58% at 82% 80%,
168
+ oklch(0.88 0.07 calc(var(--field-h, 48) + 18) / 0.50), transparent 70%),
169
+ radial-gradient(60% 62% at 60% 40%,
170
+ oklch(0.90 0.06 calc(var(--field-h, 48) - 14) / 0.48), transparent 74%);
171
+ }
172
+ /* DARK arm (PLAIN per-mode, not :global()/light-dark()) — the dark field stops lift
173
+ to a real glow band (oklch L ~0.22–0.30, higher chroma) so the field-thesis is met
174
+ in dark, not a wash lost in near-black. */
175
+ .dark .glass-field-portal::before {
176
+ background:
177
+ radial-gradient(70% 60% at 24% 22%,
178
+ oklch(0.30 0.10 var(--field-h, 48) / 0.55), transparent 72%),
179
+ radial-gradient(64% 58% at 82% 80%,
180
+ oklch(0.26 0.09 calc(var(--field-h, 48) + 18) / 0.50), transparent 70%),
181
+ radial-gradient(60% 62% at 60% 40%,
182
+ oklch(0.28 0.08 calc(var(--field-h, 48) - 14) / 0.48), transparent 74%);
183
+ }
184
+ /* honest-degraded arm — engines without oklch() get an hsl warm spine, never gray. */
185
+ @supports not (color: oklch(0.9 0.08 48)) {
186
+ .glass-field-portal::before {
187
+ background: radial-gradient(70% 60% at 24% 22%,
188
+ hsl(var(--field-h, 48) 60% 88% / 0.5), transparent 72%);
189
+ }
190
+ .dark .glass-field-portal::before {
191
+ background: radial-gradient(70% 60% at 24% 22%,
192
+ hsl(var(--field-h, 48) 45% 26% / 0.55), transparent 72%);
193
+ }
194
+ }
195
+ }
196
+
197
+ /* ── PRM is colour-static here — the field + floor + edge + cartoon shadow are PAINT,
198
+ not motion, so they REMAIN under `prefers-reduced-motion: reduce` (un-gray and
199
+ selection-legibility need no motion). The reveal/pour/chevron motion legs are
200
+ carved in their own home recipes (reveal.css / menu.css) — this consumer file
201
+ introduces no motion to gate. */
@@ -69,7 +69,7 @@
69
69
  allows a near-white translucent surface. The DARK --card is W-DARK-MATERIAL's
70
70
  lifted hsl(24 8% 16%) (NOT re-warmed here — the dark register is its work).
71
71
  Bounded: the cream family, never a tinted cast (the triumvirate bar). */
72
- --card: hsl(36 48% 97%);
72
+ --card: hsl(30 85% 96%);
73
73
  --card-foreground: var(--foreground);
74
74
  --popover: var(--card);
75
75
  --popover-foreground: var(--foreground);
@@ -71,8 +71,8 @@
71
71
  /* BA.W-DARK-MATERIAL scope 1 — the --card plate LIFTS L10→L16 (a warm-dark elevated
72
72
  surface, macOS-window territory) so it sits ~5× the deepened L4 page relL — a
73
73
  clearly distinct surface the five glass rungs ladder up from. LOCKSTEP light-dark.css:80. */
74
- --card: hsl(24 8% 16%);
75
- --popover: hsl(24 8% 16%);
74
+ --card: hsl(26 22% 17%);
75
+ --popover: hsl(26 22% 17%);
76
76
 
77
77
  /* R0G-5 (AO.W4) — dark mirror of the warm-neutral public-data panel.
78
78
  --card's dark hsl(24 8% 16%) nudged one warmth step toward amber
@@ -164,12 +164,28 @@
164
164
  --warning-foreground: hsl(24 10% 10%);
165
165
  --info-foreground: hsl(48 10% 96%);
166
166
 
167
- --shadow-cartoon: 3px 3px 0px 0px color-mix(in srgb, var(--foreground) 6%, transparent);
168
- --shadow-cartoon-hover: 4px 4px 0px 0px color-mix(in srgb, var(--foreground) 8%, transparent);
167
+ /* BD.W-CARTOON-CEL-INK — the WARM DARK ink. In dark, `--foreground` flips to
168
+ near-cream, so the SAME `oklch(from --foreground …)` construction would lift the
169
+ ink toward a light warm LINE (the iOS-7-sticker glow). A cel cast is dark INK on
170
+ any cel — so the dark ink is built by the SAME `oklch(from)` mechanism (NOT a
171
+ hardcoded `oklch(0.22 0.07 70)` literal — the H3/R6 retirement) but L-TARGETED to
172
+ a warm MID-tone: `clamp(0.20, 1 − l, 0.30)` deepens the flipped-cream L back down
173
+ to a warm dark mid that READS as a defined edge against the near-black `--card`
174
+ (ΔL ≥ 0.12), chroma floored `max(c, 0.11)` for TECHNICOLOR, hue preserved. The
175
+ opacity rungs floor UP (46/38/26%) for presence on the dark ground. Plain `.dark`
176
+ ancestor — NO `:global()`, NO `light-dark()` (the recorded traps). */
177
+ --cartoon-ink: oklch(from var(--foreground) clamp(0.20, calc(1 - l), 0.30) max(c, 0.11) h);
178
+ --cartoon-ink-lead: color-mix(in oklab, var(--cartoon-ink) 46%, transparent);
179
+ --cartoon-ink-mid: color-mix(in oklab, var(--cartoon-ink) 38%, transparent);
180
+ --cartoon-ink-contact: color-mix(in oklab, var(--cartoon-ink) 26%, transparent);
181
+ --cartoon-ink-fallback: #5a3f28;
182
+
183
+ --shadow-cartoon: -3px 3px 0px 0px var(--cartoon-ink-lead);
184
+ --shadow-cartoon-hover: -4px 4px 0px 0px var(--cartoon-ink-lead);
169
185
  --shadow-soft: 0 4px 12px rgba(0, 0, 0, 0.3);
170
186
  --shadow-elevated: 0 8px 24px rgba(0, 0, 0, 0.35);
171
187
  --shadow-modal:
172
- 4px 4px 0px 0px color-mix(in srgb, var(--foreground) 6%, transparent),
188
+ -4px 4px 0px 0px var(--cartoon-ink-lead),
173
189
  0 24px 64px color-mix(in srgb, var(--foreground) 18%, transparent);
174
190
 
175
191
  --shadow-cartoon-color: rgb(255 255 255 / 0.07);
@@ -222,6 +238,12 @@
222
238
  automatically per mode. */
223
239
  --glass-opacity-dialog: 0.76;
224
240
  --glass-grain-opacity: 0.045;
241
+ /* BD.W-PAPER-MORPHISM — re-calibrated to the JND floor for the CORRECTED coarse
242
+ tooth + SCREEN blend (std ≥ 3.86 dark): screen on the ink pole BITES HARD so it
243
+ needs LESS alpha (the honest inversion the measurements force — the opacity
244
+ ladder light→dark 0.22→0.16 ≈ ×1/√φ, dark steps DOWN). Was 0.11 on the
245
+ self-cancelling soft-light arm. */
246
+ --paper-grain-opacity: 0.16;
225
247
  --glass-highlight: inset 0 0.5px 0 0 hsl(0 0% 100% / 0.08);
226
248
 
227
249
  /* BA.W-DARK-MATERIAL scope 2 — dark glass is TRANSMISSIVE. The dark rung
@@ -255,7 +277,12 @@
255
277
  --glass-blur-resting: blur(calc(var(--glass-blur-resting-radius) * var(--glass-level))) saturate(var(--glass-saturate-resting)) brightness(1.14);
256
278
  --glass-blur-floating: blur(calc(var(--glass-blur-floating-radius) * var(--glass-level))) saturate(var(--glass-saturate-floating)) brightness(1.10);
257
279
  --glass-blur-overlay: blur(calc(var(--glass-blur-overlay-radius) * var(--glass-level))) saturate(var(--glass-saturate-overlay)) brightness(1.06);
258
- --glass-blur-dock: blur(calc(var(--glass-blur-dock-radius) * var(--glass-level))) saturate(1.30) brightness(1.12);
280
+ /* W-NAV-DOCK-FIX — re-point the dark dock saturate to the named --glass-saturate-dock
281
+ knob (the single retune point in BOTH modes; the dark value 1.30 is declared here
282
+ so the descendant var() substitutes the dark value — the substitution-vs-redeclare
283
+ discipline). Value unchanged. */
284
+ --glass-saturate-dock: 1.30;
285
+ --glass-blur-dock: blur(calc(var(--glass-blur-dock-radius) * var(--glass-level))) saturate(var(--glass-saturate-dock)) brightness(1.12);
259
286
 
260
287
  /* BB.W-DEEP-GLASS — the DARK arm of the OPT-IN deep tier (the luminous-dark
261
288
  deep mirror, the W-DARK-MATERIAL scope-2 "dark glass glows where light
@@ -288,6 +315,13 @@
288
315
  self-engage uses the AA arm directly (the luminous-dark lift is the desired default,
289
316
  not a sub-perceptual silhouette). */
290
317
  --glass-tint-strength-aa: 12%;
318
+ /* BD.W-DOCK-CORE (D4) — the dark §2c dock-ink lockstep (the MIRROR of the light
319
+ darken). In dark the dock tint is a LIFT toward a luminous warm-cream (L 0.90,
320
+ C 0.045) — `oklch(from var(--foreground) …)` extracts the dark foreground's warm
321
+ hue/chroma and lifts L (the dark `--foreground` is the light cream, so this stays a
322
+ luminous lift). The dark `--glass-tint-strength-aa` stays 12% (FROZEN,
323
+ W-DARK-MATERIAL). The dock self-engage reads this dock-scoped ink in BOTH modes. */
324
+ --glass-tint-ink-dock: oklch(from var(--foreground) 0.90 0.045 h);
291
325
  /* The unconditional content-tier self-engage (glass/ladder.css) reads
292
326
  --glass-tint-strength-floor. In LIGHT that is the 4% sub-perceptual silhouette (the
293
327
  calm-light card stays warm); in DARK the content tiers WANT the full luminous-dark
@@ -368,8 +402,23 @@
368
402
  page, so the rim is the PRIMARY silhouette device — dark glass glows where light
369
403
  passes; mirrors the --glass-edge-light-dark 0.18→0.22 lift). The bottom warm
370
404
  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);
405
+ /* BD.W-GLASS-KEY-EDGE — the dark rim rides the SAME `--glass-key-{lit,shade}-{x,y}`
406
+ sign tokens (inherited from :root — not re-declared here) so the dark plate's
407
+ lit edge agrees with the cartoon cast's key in both modes. The top/lit catch
408
+ lifts to 0.40 (the dark silhouette device); the key-facing side stop a touch
409
+ brighter (0.24). The shade under-shadow holds warm at 6%/4%. */
410
+ --glass-rim-top:
411
+ inset 0 var(--glass-key-lit-y) 0 hsl(0 0% 100% / 0.40),
412
+ inset var(--glass-key-lit-x) 0 0 hsl(0 0% 100% / 0.24);
413
+ --glass-rim-bottom:
414
+ inset 0 var(--glass-key-shade-y) 0 color-mix(in srgb, var(--foreground) 6%, transparent),
415
+ inset var(--glass-key-shade-x) 0 0 color-mix(in srgb, var(--foreground) 4%, transparent);
416
+
417
+ /* BD.W-TAB-IOS-CAPSULE — the `.glass-capsule-track` recess ink, DARK arm (the
418
+ PLAIN per-mode pair's dark leg; the light arm is in `tokens/glass-fx.css`).
419
+ NEVER a `light-dark()` fragment (the inset-shadow trap). Deeper on the dark
420
+ canvas (11%) so the sunken well still reads against the near-black page. */
421
+ --tab-track-recess-ink: color-mix(in srgb, var(--foreground) 11%, transparent);
373
422
 
374
423
  /* AW.W23 — the chromatic-fringe + adaptive-tint dark arm. The fringe drops
375
424
  to a lower-luminance warm/cool pair on the deep canvas; `--glass-tint-
@@ -55,9 +55,12 @@
55
55
  BUDGET CALL (L4): stays 16px, the 18-20px push
56
56
  toward the apple.com nav ceiling is BOOKED
57
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). */
58
+ --glass-saturate-deep: 1.8; /* BD.W-GLASS-ABROGATE-GRAY — lifted 1.5→1.8 (the
59
+ apple.com nav ceiling) IN LOCKSTEP with FIX-D's
60
+ content/floating saturate lift, so the deep tier
61
+ STAYS the richest register (calm floating now 1.6;
62
+ deep must clear it). == --glass-saturate-deep-ceiling
63
+ (1.8 — at the bound, never over-shot, L4 holds). */
61
64
  --glass-saturate-deep-ceiling: 1.8; /* the apple.com-nav saturate CEILING, BAKED as
62
65
  the deep-tier load-bearing term (research/
63
66
  apple-glass.md §4); the deep saturate never
@@ -85,7 +88,8 @@
85
88
  chroma, it does NOT inject a hue; the warm-cream `--card` base is the same). */
86
89
  --glass-saturate-deep-active:
87
90
  calc(
88
- 1.18 + (var(--glass-saturate-deep) - 1.18) * var(--glass-depth)
91
+ var(--glass-saturate-floating)
92
+ + (var(--glass-saturate-deep) - var(--glass-saturate-floating)) * var(--glass-depth)
89
93
  );
90
94
 
91
95
  /* The composed deep backdrop-filter — the SEPARATE deep family. The calm
@@ -15,6 +15,16 @@
15
15
  so it sits at the perceptual floor. Dark companion drops 0.06 →
16
16
  0.045 below to keep the soft-light blend alive without stippling. */
17
17
  --glass-grain-opacity: 0.025;
18
+ /* BD.W-PAPER-MORPHISM — the PAPER grain is its OWN register (~3× the glass grain):
19
+ paper texture is MEANT to READ (the user: "I don't see any paper grain or grit
20
+ anywhere"), not sit at the glass perceptual floor. ONE token retunes paper grit
21
+ library-wide WITHOUT coarsening the subtle glass-material grain (the split keeps
22
+ glass calm + paper tactile). The dark arm (dark-arm.css) lifts it for soft-light. */
23
+ /* BD.W-PAPER-MORPHISM — re-calibrated to the JND floor for the CORRECTED coarse
24
+ tooth + multiply blend (std ≥ 4.5 light, the no-squint floor): multiply on the
25
+ cream pole is GENTLE so it needs MORE alpha. The prior 0.08 rode a blend
26
+ (overlay) that was mathematically incapable of moving a near-white pixel. */
27
+ --paper-grain-opacity: 0.22;
18
28
  /* BB.W-LIQUIDHOVER — the grain ENGAGE clock: a hover/active grain lift cross-fades
19
29
  the grain `::after` OPACITY on this thin ~120ms linear write while the
20
30
  `background-image` stays ALWAYS PRESENT (never a none→image swap — the one-frame
@@ -85,8 +95,39 @@
85
95
  re-declares both in dark-arm.css; light-dark() round an inset computes the WHOLE
86
96
  box-shadow to none). The dark arm lifts the top to 0.40 (dark glass glows where
87
97
  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);
98
+ /* BD.W-GLASS-KEY-EDGE — the cel KEYSTONE. ONE light vector (the 1940s cel
99
+ upper-right key) drives WHICH edge of the existing two-stop directional rim
100
+ reads LIT vs SHADE, in lockstep with the shipped `.shadow-cartoon-*` down-LEFT
101
+ cast (shadow.css `-Npx Npx` → key upper-right). The key is expressed NOT as a
102
+ `-58deg` angle with sign-inverted cos()/sin() trig (the glass-material sign
103
+ trap — banned here), but as two PLAIN per-axis sign tokens the rim stops read
104
+ directly: the LIT catch wraps the key-facing edges (top + right), the SHADE
105
+ under-shadow grounds the opposite edges (bottom + left). A consumer re-points
106
+ `--glass-key-lit-x`/`--glass-key-lit-y` to move the key (e.g. upper-LEFT →
107
+ `1px`/`1px`) and the rim re-reads off it with ZERO new layer, ZERO new conic,
108
+ ZERO new DOM node. The key's SIGN tokens below are the wired form (the
109
+ upper-right keystone). */
110
+ --glass-key-lit-x: -1px; /* the lit catch sits on the RIGHT edge (key-facing) */
111
+ --glass-key-lit-y: 1px; /* …and the TOP edge — the upper-right key */
112
+ --glass-key-shade-x: 1px; /* the under-shadow grounds the LEFT edge */
113
+ --glass-key-shade-y: -1px; /* …and the BOTTOM edge — opposite the key */
114
+ /* BC.W-BLACK-BAR D2 + BD.W-GLASS-KEY-EDGE — the two-stop directional rim, now
115
+ KEY-DRIVEN: the bright catch-light `--glass-rim-top` rides the lit (key-facing)
116
+ edges, the faint warm under-shadow `--glass-rim-bottom` rides the shade edges.
117
+ Which edge each lands on is `--glass-key-{lit,shade}-{x,y}` so the rim and the
118
+ cartoon cast AGREE on one light source (the cel coherence). At the default
119
+ upper-right key these resolve byte-compatibly to the shipped top-lit/bottom-shade
120
+ silhouette (top catch + bottom under-shadow) PLUS the key-facing side stops, so
121
+ the lit edge reads as a real lit pane corner, not a flat omnidirectional halo.
122
+ The accent (BB.W-GLASS-ACCENT) still mixes onto the lit ink in rim.css — at 0%
123
+ strength byte-identical. Plain per-mode arms — NEVER an inset fragment inside
124
+ light-dark() (the dark arm re-declares both in dark-arm.css). */
125
+ --glass-rim-top:
126
+ inset 0 var(--glass-key-lit-y) 0 hsl(0 0% 100% / 0.30),
127
+ inset var(--glass-key-lit-x) 0 0 hsl(0 0% 100% / 0.18);
128
+ --glass-rim-bottom:
129
+ inset 0 var(--glass-key-shade-y) 0 color-mix(in srgb, var(--foreground) 6%, transparent),
130
+ inset var(--glass-key-shade-x) 0 0 color-mix(in srgb, var(--foreground) 4%, transparent);
90
131
  /* BA.W-DARK-MATERIAL scope 2 — the dark edge/rim is the PRIMARY silhouette device in
91
132
  dark. The light register's fill+shadow carry the plate; in dark the fill barely
92
133
  separates (the deep page is near-black), so the EDGE + the transmitted glow carry the
@@ -116,6 +157,29 @@
116
157
  --glass-tint-source: var(--card);
117
158
  --glass-tint-strength: 0%;
118
159
 
160
+ /* BD.W-TAB-IOS-CAPSULE — the `.glass-capsule` warm-floor (C6). `--card` itself
161
+ is too pale to clear the meanChroma ≥ 0.02 floor (its own OKLab chroma is
162
+ ~0.015), so the capsule composes a SMALL fixed floor toward an explicitly
163
+ WARM oklch source — a warm cream/amber that carries real chroma. This is the
164
+ build-trap-(d) safe form (a warm color, never bare `transparent`). At the 16%
165
+ floor the painted capsule fill clears chroma ≥ 0.02 with negligible L lift
166
+ (stays near-white). Mode-invariant warm (the oklch reads warm on both the
167
+ light cream page and the dark canvas — the warm-floor is a property of the
168
+ LOZENGE, not the page); the floor is INDEPENDENT of the `--glass-tint-strength:
169
+ 0%` adaptive default (which is zero-delta at rest, lifting only under the
170
+ bright bucket). Both are composed in `.glass-capsule`'s fill. */
171
+ --glass-capsule-warm: oklch(0.88 0.1 75);
172
+ --glass-capsule-warm-floor: 16%;
173
+
174
+ /* BD.W-TAB-IOS-CAPSULE — the `.glass-capsule-track` recess ink (the iOS-27
175
+ sunken-well inner-top edge). A PLAIN per-mode pair — this light arm + the dark
176
+ arm in `tokens/dark-arm.css`. NEVER a `light-dark()` fragment: an inset-shadow
177
+ leg inside `light-dark()` computes the WHOLE `box-shadow` to `none` (the
178
+ binding MEMORY lesson) and the recess would silently vanish. Bounded warm ink
179
+ so it darkens the inner-top edge without re-coloring the warm fill (no gray
180
+ well). */
181
+ --tab-track-recess-ink: color-mix(in srgb, var(--foreground) 7%, transparent);
182
+
119
183
  /* AX.W55 — adaptive glass legibility (the iOS-26/27 "locally darken the glass
120
184
  over light content" move; G2). There is NO web API that reads the pixels
121
185
  painted BEHIND a `backdrop-filter` element, so the backdrop-luminance signal
@@ -155,6 +219,20 @@
155
219
  --glass-backdrop: dark;
156
220
  --glass-tint-ink: var(--foreground);
157
221
 
222
+ /* BD.W-DOCK-CORE (D1) — the warm-CHROMATIC dock tint ink (the keystone, RESEARCH-3).
223
+ The dock self-engage (dock/morph.css) mixes its thin ~0.42-alpha plate toward the
224
+ near-black `--foreground` (chroma ≈ 0.0062) → it darkens L with chroma DEAD-FLAT (the
225
+ gray dock the user reports). This dock-SCOPED ink extracts the foreground's warm
226
+ hue/chroma via `oklch(from …)` (the BB.W-DARK-INK-WARM idiom — NOT a new mechanism),
227
+ LIFTS the chroma to 0.05 (well above foreground's 0.0062), and DROPS L to 0.42 (the
228
+ darken anchor). At the bright-bucket AA engage the composited plate yields a WARM
229
+ material darken (C ≈ 0.016, ~2× HEAD, H ≈ 62°) — never gray. The OUTER mix stays
230
+ `color-mix(in oklab)` (the glass-tint family, AW.W26 in-srgb fence untouched); this
231
+ `oklch(from)` is only the INK SOURCE. The GLOBAL `--glass-tint-ink` above is FROZEN
232
+ (W-DARK-MATERIAL's whole-system register) — this is a NEW dock-scoped token read ONLY
233
+ by the dock self-engage (file-line-disjoint, no-dual-path). */
234
+ --glass-tint-ink-dock: oklch(from var(--foreground) 0.42 0.05 h);
235
+
158
236
  /* BC.W-ADAPTIVE-RECONCILE — the ONE retune knob for the continuous observer
159
237
  driver. `--glass-backdrop-luma` (the measured sampled relative-luminance the
160
238
  useGlassBackdropLuminance observer WRITES, registered typed in property-regs.css)