@mkbabb/glass-ui 3.13.0 → 4.0.1

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 (507) hide show
  1. package/README.md +3 -1
  2. package/dist/CardAction-CW7a0m8M.js +253 -0
  3. package/dist/{CommandShortcut-RowNEO6i.js → CommandShortcut-DvZNQ_HF.js} +58 -53
  4. package/dist/ConfiguratorRow-BR4l-ixA.js +143 -0
  5. package/dist/{ContextMenuContent-CT3AS1WX.js → ContextMenuContent-uWnVxDab.js} +1 -1
  6. package/dist/{ContextMenuSubContent-BQmxTAdw.js → ContextMenuSubContent-xol4sD2q.js} +32 -37
  7. package/dist/{DataTable-BCddn3T3.js → DataTable-CuKwF7wr.js} +99 -97
  8. package/dist/DialogContent-DcKK8k9i.js +103 -0
  9. package/dist/{DialogFooter-Blu4t7tJ.js → DialogFooter-BZNX5aVr.js} +3 -3
  10. package/dist/FadingScroll-DI6hQhT9.js +76 -0
  11. package/dist/{HoverCardContent-Csywg3YF.js → HoverCardContent-b2uaAMRR.js} +1 -1
  12. package/dist/{HoverPopover-CISOJQuZ.js → HoverPopover-CbqbNwgU.js} +2 -2
  13. package/dist/IconChip-BTD-nay5.js +55 -0
  14. package/dist/{IconTooltip-DPzE09X9.js → IconTooltip-Bl8gFZ8d.js} +1 -1
  15. package/dist/{Input-DWQQIOC4.js → Input-h9v5LeXf.js} +1 -1
  16. package/dist/{MetricBadge-C9QMz1KT.js → MetricBadge-RHdBP72w.js} +1 -1
  17. package/dist/Notification-VUwexFUf.js +43 -0
  18. package/dist/NumberFieldContent-Cq7EzX-U.js +138 -0
  19. package/dist/PopoverContent-DL7E6vJP.js +127 -0
  20. package/dist/{Progress-DwlUKGbr.js → Progress-DctG61iZ.js} +98 -78
  21. package/dist/{ScrollingText-DfFrwSph.js → ScrollingText-yOpBzFYq.js} +2 -2
  22. package/dist/{SelectScrollDownButton-CiDUxfEj.js → SelectScrollDownButton-CrA8F0iV.js} +35 -20
  23. package/dist/{Switch-CsIuYP_e.js → Switch-CwYNf8bo.js} +1 -1
  24. package/dist/Toaster-Bw4xR8xV.js +274 -0
  25. package/dist/{ToggleGroupItem-D_AHlRw9.js → ToggleGroupItem-pEM9vIhs.js} +50 -37
  26. package/dist/{TooltipProvider-B3MkB_8P.js → TooltipProvider-rzvnXz60.js} +1 -1
  27. package/dist/animated-digit.js +2 -2
  28. package/dist/api/index.d.ts +16 -8
  29. package/dist/api/types-extra.d.ts +6 -0
  30. package/dist/api.js +2 -2
  31. package/dist/aurora.js +888 -230
  32. package/dist/badge.js +1 -1
  33. package/dist/border-progress.d.ts +1 -0
  34. package/dist/border-progress.js +106 -0
  35. package/dist/button-DYCUa-tH.js +126 -0
  36. package/dist/button.js +1 -1
  37. package/dist/canvas.js +2 -2
  38. package/dist/card.js +2 -2
  39. package/dist/carousel.d.ts +1 -1
  40. package/dist/carousel.js +90 -151
  41. package/dist/collapsible.js +1 -1
  42. package/dist/color-swatch.d.ts +1 -0
  43. package/dist/color-swatch.js +47 -0
  44. package/dist/color.js +1 -1
  45. package/dist/command.js +1 -1
  46. package/dist/compile-CQEFRTmx.js +19 -0
  47. package/dist/components/custom/aurora/composables/atoms-fields.d.ts +39 -0
  48. package/dist/components/custom/aurora/composables/auroraFallbackGround.d.ts +108 -0
  49. package/dist/components/custom/aurora/composables/runtime.d.ts +19 -0
  50. package/dist/components/custom/aurora/composables/uniformBridge.d.ts +5 -1
  51. package/dist/components/custom/aurora/composables/uniformBridgeWGPU.d.ts +51 -0
  52. package/dist/components/custom/aurora/composables/wgpuSetup.d.ts +29 -0
  53. package/dist/components/custom/aurora/constants/budget.d.ts +21 -0
  54. package/dist/components/custom/aurora/constants/presets.d.ts +30 -2
  55. package/dist/components/custom/aurora/constants/renderMode.d.ts +63 -10
  56. package/dist/components/custom/aurora/constants/shaders/aurora.wgsl.d.ts +1 -0
  57. package/dist/components/custom/aurora/constants/shaders/oil-modes.glsl.d.ts +1 -0
  58. package/dist/components/custom/aurora/constants/shaders/procedural-color.wgsl.d.ts +4 -0
  59. package/dist/components/custom/aurora/index.d.ts +3 -2
  60. package/dist/components/custom/border-progress/BorderProgress.vue.d.ts +46 -0
  61. package/dist/components/custom/border-progress/composables/useBorderSpectrum.d.ts +22 -0
  62. package/dist/components/custom/border-progress/constants.d.ts +59 -0
  63. package/dist/components/custom/border-progress/index.d.ts +4 -0
  64. package/dist/components/custom/color-swatch/ColorSwatch.vue.d.ts +22 -0
  65. package/dist/components/custom/color-swatch/index.d.ts +1 -0
  66. package/dist/components/custom/concentric/Concentric.vue.d.ts +39 -0
  67. package/dist/components/custom/concentric/composables/concentricGLSetup.d.ts +11 -0
  68. package/dist/components/custom/concentric/composables/concentricWGPUSetup.d.ts +13 -0
  69. package/dist/components/custom/concentric/composables/ringField.d.ts +44 -0
  70. package/dist/components/custom/concentric/composables/uniformBridgeWGPU.d.ts +13 -0
  71. package/dist/components/custom/concentric/composables/useConcentric.d.ts +35 -0
  72. package/dist/components/custom/concentric/constants.d.ts +43 -0
  73. package/dist/components/custom/concentric/index.d.ts +5 -0
  74. package/dist/components/custom/concentric/shaders/concentric.glsl.d.ts +4 -0
  75. package/dist/components/custom/concentric/shaders/concentric.wgsl.d.ts +1 -0
  76. package/dist/components/custom/configurator/Configurator.vue.d.ts +19 -8
  77. package/dist/components/custom/constellation/Constellation.vue.d.ts +18 -206
  78. package/dist/components/custom/constellation/composables/useConstellation.d.ts +26 -0
  79. package/dist/components/custom/constellation/constellationField.d.ts +2 -369
  80. package/dist/components/custom/constellation/constellationTypes.d.ts +369 -0
  81. package/dist/components/custom/constellation/index.d.ts +1 -1
  82. package/dist/components/custom/dock/DockIconButton.vue.d.ts +13 -4
  83. package/dist/components/custom/dock/DockLayerGroup.vue.d.ts +10 -2
  84. package/dist/components/custom/dock/DockRail.vue.d.ts +17 -16
  85. package/dist/components/custom/dock/DockSection.vue.d.ts +69 -0
  86. package/dist/components/custom/dock/DockSeparator.vue.d.ts +49 -1
  87. package/dist/components/custom/dock/DockTabButton.vue.d.ts +5 -5
  88. package/dist/components/custom/dock/composables/dockMorphMeasure.d.ts +75 -0
  89. package/dist/components/custom/dock/composables/useLayerTransition.d.ts +13 -0
  90. package/dist/components/custom/dock/constants.d.ts +35 -0
  91. package/dist/components/custom/dock/index.d.ts +2 -0
  92. package/dist/components/custom/dot-flow-field/DotFlowField.vue.d.ts +38 -0
  93. package/dist/components/custom/dot-flow-field/composables/flowField.d.ts +41 -0
  94. package/dist/components/custom/dot-flow-field/composables/uniformBridgeWGPU.d.ts +24 -0
  95. package/dist/components/custom/dot-flow-field/composables/useDotFlowField.d.ts +34 -0
  96. package/dist/components/custom/dot-flow-field/composables/useFlowParticles.d.ts +18 -0
  97. package/dist/components/custom/dot-flow-field/constants.d.ts +48 -0
  98. package/dist/components/custom/dot-flow-field/index.d.ts +5 -0
  99. package/dist/components/custom/dot-flow-field/shaders/flow-field.compute.wgsl.d.ts +1 -0
  100. package/dist/components/custom/dot-flow-field/shaders/flow-field.glsl.d.ts +20 -0
  101. package/dist/components/custom/dot-flow-field/shaders/flow-field.render.wgsl.d.ts +1 -0
  102. package/dist/components/custom/easing/EasingConfigurator.vue.d.ts +33 -0
  103. package/dist/components/custom/easing/EasingPicker.vue.d.ts +49 -0
  104. package/dist/components/custom/easing/composables/useEasingPicker.d.ts +75 -0
  105. package/dist/components/custom/easing/constants.d.ts +28 -0
  106. package/dist/components/custom/easing/index.d.ts +3 -0
  107. package/dist/components/custom/expandable-container/ExpandableContainer.vue.d.ts +10 -0
  108. package/dist/components/custom/fading-scroll/FadingScroll.vue.d.ts +25 -0
  109. package/dist/components/custom/fading-scroll/composables/useFadingScroll.d.ts +31 -0
  110. package/dist/components/custom/fading-scroll/constants.d.ts +19 -0
  111. package/dist/components/custom/fading-scroll/index.d.ts +2 -0
  112. package/dist/components/custom/fourier-field/FourierField.vue.d.ts +19 -2
  113. package/dist/components/custom/fourier-field/composables/useFourierField.d.ts +39 -0
  114. package/dist/components/custom/fourier-field/constants.d.ts +7 -0
  115. package/dist/components/custom/fourier-field/index.d.ts +1 -1
  116. package/dist/components/custom/fourier-field/math.d.ts +17 -0
  117. package/dist/components/custom/glass-panel/GlassPanel.vue.d.ts +9 -1
  118. package/dist/components/custom/goo-blob/GooBlob.vue.d.ts +4 -2
  119. package/dist/components/custom/goo-blob/composables/uniformBridgeWGPU.d.ts +24 -0
  120. package/dist/components/custom/goo-blob/composables/useMetaballRenderer.d.ts +29 -12
  121. package/dist/components/custom/goo-blob/composables/wgpuSetup.d.ts +23 -0
  122. package/dist/components/custom/goo-blob/constants.d.ts +6 -1
  123. package/dist/components/custom/goo-blob/shaders/metaball.wgsl.d.ts +1 -0
  124. package/dist/components/custom/handmark/HandMark.vue.d.ts +29 -0
  125. package/dist/components/custom/handmark/brush.d.ts +269 -0
  126. package/dist/components/custom/handmark/composables/useHandMark.d.ts +89 -0
  127. package/dist/components/custom/handmark/constants.d.ts +39 -0
  128. package/dist/components/custom/handmark/freehand.d.ts +69 -0
  129. package/dist/components/custom/handmark/geometry.d.ts +52 -0
  130. package/dist/components/custom/handmark/index.d.ts +27 -0
  131. package/dist/components/custom/handmark/ink.d.ts +11 -0
  132. package/dist/components/custom/handmark/texture.d.ts +39 -0
  133. package/dist/components/custom/handmark/types.d.ts +62 -0
  134. package/dist/components/custom/icon-chip/IconChip.vue.d.ts +4 -0
  135. package/dist/components/custom/icon-chip/index.d.ts +2 -0
  136. package/dist/components/custom/icon-chip/types.d.ts +82 -0
  137. package/dist/components/custom/instrument-chassis/InstrumentChassis.vue.d.ts +17 -2
  138. package/dist/components/custom/metric-stack/MetricStack.vue.d.ts +1 -1
  139. package/dist/components/custom/pager-dots/PagerDots.vue.d.ts +39 -0
  140. package/dist/components/custom/pager-dots/index.d.ts +2 -0
  141. package/dist/components/custom/spa-view/SpaView.vue.d.ts +50 -0
  142. package/dist/components/custom/spa-view/index.d.ts +2 -0
  143. package/dist/components/custom/tabs/SegmentedTabs.vue.d.ts +29 -24
  144. package/dist/components/custom/tabs/composables/useTabDragMorph.d.ts +42 -0
  145. package/dist/components/custom/tabs/composables/useTabIndicator.d.ts +30 -21
  146. package/dist/components/custom/tabs/constants.d.ts +9 -3
  147. package/dist/components/custom/tabs/index.d.ts +1 -1
  148. package/dist/components/custom/watercolor-dot/WatercolorDot.vue.d.ts +15 -1
  149. package/dist/components/ui/_shared/index.d.ts +2 -0
  150. package/dist/components/ui/_shared/menuItemVariants.d.ts +19 -0
  151. package/dist/components/ui/_shared/useSurfaceAxis.d.ts +41 -0
  152. package/dist/components/ui/badge/index.d.ts +1 -1
  153. package/dist/components/ui/button/Button.vue.d.ts +5 -2
  154. package/dist/components/ui/button/index.d.ts +2 -2
  155. package/dist/components/ui/card/Card.vue.d.ts +34 -4
  156. package/dist/components/ui/card/CardHeader.vue.d.ts +42 -16
  157. package/dist/components/ui/card/ScrollCard.vue.d.ts +33 -0
  158. package/dist/components/ui/card/ScrollCardHeader.vue.d.ts +17 -0
  159. package/dist/components/ui/card/index.d.ts +2 -0
  160. package/dist/components/ui/carousel/CarouselNext.vue.d.ts +2 -2
  161. package/dist/components/ui/carousel/CarouselPrevious.vue.d.ts +2 -2
  162. package/dist/components/ui/carousel/GlassCarouselPager.vue.d.ts +2 -2
  163. package/dist/components/ui/carousel/index.d.ts +0 -1
  164. package/dist/components/ui/command/Command.vue.d.ts +4 -1
  165. package/dist/components/ui/dialog/DialogContent.vue.d.ts +8 -3
  166. package/dist/components/ui/drawer/Drawer.vue.d.ts +46 -33
  167. package/dist/components/ui/drawer/DrawerContent.vue.d.ts +12 -8
  168. package/dist/components/ui/drawer/DrawerDescription.vue.d.ts +2 -2
  169. package/dist/components/ui/drawer/DrawerOverlay.vue.d.ts +1 -1
  170. package/dist/components/ui/drawer/DrawerTitle.vue.d.ts +2 -2
  171. package/dist/components/ui/drawer/composables/drawerSnapContext.d.ts +26 -0
  172. package/dist/components/ui/drawer/composables/useDrawerSnap.d.ts +17 -0
  173. package/dist/components/ui/drawer/constants.d.ts +45 -0
  174. package/dist/components/ui/drawer/index.d.ts +23 -15
  175. package/dist/components/ui/focus-scope/FocusScope.vue.d.ts +20 -0
  176. package/dist/components/ui/focus-scope/index.d.ts +2 -0
  177. package/dist/components/ui/index.d.ts +1 -1
  178. package/dist/components/ui/popover/PopoverContent.vue.d.ts +3 -0
  179. package/dist/components/ui/progress/ProgressDefault.vue.d.ts +3 -2
  180. package/dist/components/ui/progress/ProgressSectioned.vue.d.ts +14 -3
  181. package/dist/components/ui/select/SelectContent.vue.d.ts +1 -1
  182. package/dist/components/ui/select/SelectTrigger.vue.d.ts +27 -4
  183. package/dist/components/ui/sheet/SheetContent.vue.d.ts +6 -0
  184. package/dist/components/ui/sheet/index.d.ts +1 -1
  185. package/dist/components/ui/skeleton/Skeleton.vue.d.ts +3 -0
  186. package/dist/components/ui/tags-input/TagsInput.vue.d.ts +2 -2
  187. package/dist/components/ui/toast/Toast.vue.d.ts +5 -2
  188. package/dist/components/ui/toast/use-toast.d.ts +14 -0
  189. package/dist/components/ui/toggle/Toggle.vue.d.ts +1 -1
  190. package/dist/composables/dark/index.d.ts +1 -1
  191. package/dist/composables/dark/useGlobalDark.d.ts +23 -1
  192. package/dist/composables/glass/canvas2d/useCanvas2D.d.ts +13 -6
  193. package/dist/composables/glass/index.d.ts +5 -2
  194. package/dist/composables/glass/useSpecularPointer.d.ts +33 -0
  195. package/dist/composables/glass/useSpecularTracking.d.ts +20 -0
  196. package/dist/composables/glass/vSpecular.d.ts +2 -0
  197. package/dist/composables/glass/webgl/shaders/flow.glsl.d.ts +1 -0
  198. package/dist/composables/glass/webgl/useWebGLCanvas.d.ts +16 -0
  199. package/dist/composables/glass/webgpu/index.d.ts +2 -0
  200. package/dist/composables/glass/webgpu/useGpuSubstrate.d.ts +54 -0
  201. package/dist/composables/glass/webgpu/useWebGPUCanvas.d.ts +84 -0
  202. package/dist/composables/motion/core/index.d.ts +1 -0
  203. package/dist/composables/motion/index.d.ts +4 -0
  204. package/dist/composables/motion/useDockCtaReceive.d.ts +59 -0
  205. package/dist/composables/motion/useDragMorph.d.ts +77 -0
  206. package/dist/composables/motion/useLiquidFlex.d.ts +11 -0
  207. package/dist/composables/motion/useLiquidPress.d.ts +71 -0
  208. package/dist/composables/motion/useLiquidReveal.d.ts +51 -0
  209. package/dist/composables/motion/useNumericTransition.d.ts +3 -3
  210. package/dist/composables/motion/usePointerVelocityField.d.ts +98 -0
  211. package/dist/composables/motion/useViewTransition.d.ts +36 -1
  212. package/dist/concentric.d.ts +1 -0
  213. package/dist/concentric.js +562 -0
  214. package/dist/configurator.js +3 -2
  215. package/dist/confirm-dialog.js +22 -24
  216. package/dist/constellation.js +93 -95
  217. package/dist/context-menu.js +3 -3
  218. package/dist/controls.js +10 -4
  219. package/dist/createCanvasLifecycle-CHD5XrDW.js +82 -0
  220. package/dist/dark.d.ts +1 -1
  221. package/dist/dark.js +1 -1
  222. package/dist/data-table.js +1 -1
  223. package/dist/dialog.js +2 -2
  224. package/dist/dock.js +738 -442
  225. package/dist/{dockContext-BegmJVmx.js → dockContext-BNfyPLe9.js} +1 -1
  226. package/dist/dom.js +5 -5
  227. package/dist/dot-flow-field.d.ts +1 -0
  228. package/dist/dot-flow-field.js +604 -0
  229. package/dist/drawer.d.ts +1 -0
  230. package/dist/drawer.js +380 -0
  231. package/dist/{dropdown-menu-DzkkyBwX.js → dropdown-menu-CofSZuk8.js} +14 -15
  232. package/dist/dropdown-menu.js +1 -1
  233. package/dist/easing.d.ts +1 -0
  234. package/dist/easing.js +463 -0
  235. package/dist/expandable-container.js +45 -38
  236. package/dist/fading-scroll.d.ts +1 -0
  237. package/dist/fading-scroll.js +2 -0
  238. package/dist/focus-scope.d.ts +1 -0
  239. package/dist/focus-scope.js +23 -0
  240. package/dist/forms.js +7 -7
  241. package/dist/fourier-field.js +135 -122
  242. package/dist/fourier-math.js +2 -2
  243. package/dist/glass-panel.js +39 -36
  244. package/dist/glass-ui.css +1 -1
  245. package/dist/glass-ui.js +154 -362
  246. package/dist/goo-blob.js +838 -227
  247. package/dist/handmark.d.ts +1 -0
  248. package/dist/handmark.js +707 -0
  249. package/dist/header-ribbon.js +1 -1
  250. package/dist/hover-card.js +1 -1
  251. package/dist/hover-popover.js +1 -1
  252. package/dist/icon-chip.d.ts +1 -0
  253. package/dist/icon-chip.js +2 -0
  254. package/dist/icon-tooltip.js +1 -1
  255. package/dist/index.d.ts +3 -3
  256. package/dist/instrument-chassis.js +1 -1
  257. package/dist/keyboard.js +1 -1
  258. package/dist/label.js +1 -1
  259. package/dist/labeled-field.js +6 -6
  260. package/dist/{math-U6-RrLmV.js → math-BINYmg5z.js} +11 -3
  261. package/dist/{menuItemVariants-DPiEarb0.js → menuItemVariants-D8VNHq22.js} +10 -4
  262. package/dist/metric-badge.js +1 -1
  263. package/dist/metric-cell.js +25 -22
  264. package/dist/metric-stack.js +4 -8
  265. package/dist/motion-core.js +36 -35
  266. package/dist/motion-curves.js +1 -1
  267. package/dist/motion.js +157 -55
  268. package/dist/notification.js +1 -1
  269. package/dist/number-field.js +1 -1
  270. package/dist/pager-dots.d.ts +1 -0
  271. package/dist/pager-dots.js +91 -0
  272. package/dist/paper-backdrop.js +1 -1
  273. package/dist/popover.js +1 -1
  274. package/dist/{presets-BKVyQfbt.js → presets-BW2b-fr1.js} +14 -1
  275. package/dist/{compile-B7NGOBcP.js → procedural-color.glsl-CIFsJhwI.js} +1 -155
  276. package/dist/procedural-color.wgsl-CToRHugY.js +224 -0
  277. package/dist/progress.js +1 -1
  278. package/dist/pulse.js +1 -1
  279. package/dist/reactive.js +2 -2
  280. package/dist/scrolling-text.js +1 -1
  281. package/dist/search.js +10 -12
  282. package/dist/select.js +3 -3
  283. package/dist/separator.js +1 -1
  284. package/dist/sheet-tZMg0E0w.js +218 -0
  285. package/dist/sheet.js +1 -1
  286. package/dist/{slider-B-JP2JlI.js → slider-DVb4HXU-.js} +7 -7
  287. package/dist/slider.js +1 -1
  288. package/dist/sortable-list.js +3 -3
  289. package/dist/spa-view.d.ts +1 -0
  290. package/dist/spa-view.js +46 -0
  291. package/dist/styles/animations.css +40 -31
  292. package/dist/styles/border-progress.css +109 -0
  293. package/dist/styles/cards.css +76 -0
  294. package/dist/styles/components.css +1 -1
  295. package/dist/styles/configurator.css +35 -0
  296. package/dist/styles/critical-partition.mjs +140 -0
  297. package/dist/styles/critical.css +12 -0
  298. package/dist/styles/deferred.css +31 -0
  299. package/dist/styles/dock/density.css +64 -0
  300. package/dist/styles/dock/layers.css +54 -30
  301. package/dist/styles/dock/morph.css +124 -7
  302. package/dist/styles/dock/overflow.css +31 -2
  303. package/dist/styles/dock/rail-extend.css +168 -71
  304. package/dist/styles/dock/section.css +59 -0
  305. package/dist/styles/dock/shell.css +83 -16
  306. package/dist/styles/dock-controls/icon-button.css +11 -1
  307. package/dist/styles/dock-controls/tab-button.css +24 -83
  308. package/dist/styles/dock-controls/triggers.css +7 -0
  309. package/dist/styles/dock.css +38 -3
  310. package/dist/styles/drawer.css +127 -35
  311. package/dist/styles/feedback-tone.css +104 -0
  312. package/dist/styles/glass/deep.css +44 -0
  313. package/dist/styles/glass/ladder.css +154 -52
  314. package/dist/styles/glass/material.css +78 -15
  315. package/dist/styles/glass/reveal.css +136 -0
  316. package/dist/styles/glass/rim.css +100 -0
  317. package/dist/styles/glass/surface-axis.css +113 -0
  318. package/dist/styles/glass/surfaces.css +189 -15
  319. package/dist/styles/glass-refract.css +96 -44
  320. package/dist/styles/glass-specular-track.css +7 -0
  321. package/dist/styles/glass.css +8 -2
  322. package/dist/styles/hover-popover.css +7 -6
  323. package/dist/styles/icon-chip.css +211 -0
  324. package/dist/styles/index.css +78 -4
  325. package/dist/styles/instrument-chassis.css +107 -2
  326. package/dist/styles/menu.css +127 -0
  327. package/dist/styles/scroll-choreography.css +300 -0
  328. package/dist/styles/segmented-tabs.css +188 -86
  329. package/dist/styles/select.css +50 -0
  330. package/dist/styles/theme/bridges.css +22 -1
  331. package/dist/styles/theme/literals.css +11 -2
  332. package/dist/styles/theme/radius.css +6 -1
  333. package/dist/styles/tokens/color-radius.css +40 -13
  334. package/dist/styles/tokens/dark-arm.css +200 -20
  335. package/dist/styles/tokens/glass-deep.css +75 -0
  336. package/dist/styles/tokens/glass-fx.css +333 -0
  337. package/dist/styles/tokens/glass.css +95 -315
  338. package/dist/styles/tokens/light-dark.css +64 -22
  339. package/dist/styles/tokens/offsets.css +116 -0
  340. package/dist/styles/tokens/on-glass-fg.css +39 -0
  341. package/dist/styles/tokens/property-regs.css +130 -10
  342. package/dist/styles/tokens/scale-paper.css +155 -84
  343. package/dist/styles/tokens/scheme-motion.css +102 -46
  344. package/dist/styles/tokens/scroll-tokens.css +123 -0
  345. package/dist/styles/tokens/{offsets-sizing.css → sizing.css} +88 -89
  346. package/dist/styles/tokens.css +9 -3
  347. package/dist/styles/transitions.css +7 -7
  348. package/dist/styles/typography/scale.css +153 -0
  349. package/dist/styles/typography/semantic.css +220 -0
  350. package/dist/styles/typography/utilities.css +174 -0
  351. package/dist/styles/typography.css +23 -507
  352. package/dist/styles/utilities/a11y-overrides.css +33 -4
  353. package/dist/styles/utilities/animate.css +27 -24
  354. package/dist/styles/utilities/base-misc.css +255 -0
  355. package/dist/styles/utilities/base.css +100 -138
  356. package/dist/styles/utilities/btn.css +21 -202
  357. package/dist/styles/utilities/metal.css +189 -0
  358. package/dist/styles/utilities.css +14 -7
  359. package/dist/styles/view-transition.css +4 -1
  360. package/dist/switch.js +1 -1
  361. package/dist/tabs.js +275 -191
  362. package/dist/timeline.js +2 -2
  363. package/dist/toast.js +1 -1
  364. package/dist/toggle-chip.js +3 -1
  365. package/dist/toggle-group.js +1 -1
  366. package/dist/tooltip.js +1 -1
  367. package/dist/typewriter.js +1 -1
  368. package/dist/{useAnimatedNumber-C5I3wWd8.js → useAnimatedNumber-BfUq2bUM.js} +1 -1
  369. package/dist/useCanvas2D-B8w_E3Rr.js +83 -0
  370. package/dist/useConfiguratorState-DNlOh6c8.js +161 -0
  371. package/dist/useDragMorph-DgxnsVJz.js +102 -0
  372. package/dist/{useGlobalDark-yhL4Wp-s.js → useGlobalDark-C28t0VWJ.js} +22 -3
  373. package/dist/useLiquidPress-kfb4KX79.js +39 -0
  374. package/dist/usePointerVelocityField-JbRd5CrM.js +137 -0
  375. package/dist/{useRAFLoop-Bxv0o6L5.js → useRAFLoop-UYa4zoiN.js} +1 -1
  376. package/dist/useSpring-C0jyvEJB.js +40 -0
  377. package/dist/useSpringMount-q1amq1SJ.js +71 -0
  378. package/dist/useSpringPress-BsqPr7FJ.js +34 -0
  379. package/dist/useSurfaceAxis-g0NloYEF.js +7 -0
  380. package/dist/{useTouchGate-Dg7MQI1G.js → useTouchGate-CBZTD4SD.js} +1 -1
  381. package/dist/vReveal-Czsb7zQC.js +10 -0
  382. package/dist/vSpecular-CQFmLNzA.js +68 -0
  383. package/dist/vendor-CKmzio-i.js +226 -0
  384. package/dist/watercolor-dot.js +12 -5
  385. package/package.json +193 -25
  386. package/src/styles/animations.css +40 -31
  387. package/src/styles/border-progress.css +109 -0
  388. package/src/styles/cards.css +76 -0
  389. package/src/styles/configurator.css +35 -0
  390. package/src/styles/critical-partition.mjs +140 -0
  391. package/src/styles/dock/density.css +64 -0
  392. package/src/styles/dock/layers.css +54 -30
  393. package/src/styles/dock/morph.css +124 -7
  394. package/src/styles/dock/overflow.css +31 -2
  395. package/src/styles/dock/rail-extend.css +168 -71
  396. package/src/styles/dock/section.css +59 -0
  397. package/src/styles/dock/shell.css +83 -16
  398. package/src/styles/dock-controls/icon-button.css +11 -1
  399. package/src/styles/dock-controls/tab-button.css +24 -83
  400. package/src/styles/dock-controls/triggers.css +7 -0
  401. package/src/styles/dock.css +38 -3
  402. package/src/styles/drawer.css +123 -35
  403. package/src/styles/feedback-tone.css +104 -0
  404. package/src/styles/glass/deep.css +44 -0
  405. package/src/styles/glass/ladder.css +154 -52
  406. package/src/styles/glass/material.css +78 -15
  407. package/src/styles/glass/reveal.css +136 -0
  408. package/src/styles/glass/rim.css +100 -0
  409. package/src/styles/glass/surface-axis.css +113 -0
  410. package/src/styles/glass/surfaces.css +189 -15
  411. package/src/styles/glass-refract.css +96 -44
  412. package/src/styles/glass-specular-track.css +7 -0
  413. package/src/styles/glass.css +8 -2
  414. package/src/styles/hover-popover.css +7 -6
  415. package/src/styles/icon-chip.css +211 -0
  416. package/src/styles/index.css +78 -4
  417. package/src/styles/instrument-chassis.css +107 -2
  418. package/src/styles/menu.css +127 -0
  419. package/src/styles/scroll-choreography.css +300 -0
  420. package/src/styles/segmented-tabs.css +184 -84
  421. package/src/styles/select.css +50 -0
  422. package/src/styles/theme/bridges.css +22 -1
  423. package/src/styles/theme/literals.css +11 -2
  424. package/src/styles/theme/radius.css +6 -1
  425. package/src/styles/tokens/color-radius.css +40 -13
  426. package/src/styles/tokens/dark-arm.css +200 -20
  427. package/src/styles/tokens/glass-deep.css +75 -0
  428. package/src/styles/tokens/glass-fx.css +333 -0
  429. package/src/styles/tokens/glass.css +95 -315
  430. package/src/styles/tokens/light-dark.css +64 -22
  431. package/src/styles/tokens/offsets.css +116 -0
  432. package/src/styles/tokens/on-glass-fg.css +39 -0
  433. package/src/styles/tokens/property-regs.css +130 -10
  434. package/src/styles/tokens/scale-paper.css +155 -84
  435. package/src/styles/tokens/scheme-motion.css +102 -46
  436. package/src/styles/tokens/scroll-tokens.css +123 -0
  437. package/src/styles/tokens/{offsets-sizing.css → sizing.css} +88 -89
  438. package/src/styles/tokens.css +9 -3
  439. package/src/styles/transitions.css +7 -7
  440. package/src/styles/typography/scale.css +153 -0
  441. package/src/styles/typography/semantic.css +220 -0
  442. package/src/styles/typography/utilities.css +174 -0
  443. package/src/styles/typography.css +23 -507
  444. package/src/styles/utilities/a11y-overrides.css +33 -4
  445. package/src/styles/utilities/animate.css +27 -24
  446. package/src/styles/utilities/base-misc.css +255 -0
  447. package/src/styles/utilities/base.css +100 -138
  448. package/src/styles/utilities/btn.css +21 -202
  449. package/src/styles/utilities/metal.css +189 -0
  450. package/src/styles/utilities.css +14 -7
  451. package/src/styles/view-transition.css +4 -1
  452. package/dist/CardAction-Cj2eycQ2.js +0 -157
  453. package/dist/DialogContent-Dl9WkAoS.js +0 -100
  454. package/dist/Notification-DdwNxIrI.js +0 -100
  455. package/dist/NumberFieldContent-CqaN-SvN.js +0 -145
  456. package/dist/PopoverContent-BYwt2-4x.js +0 -121
  457. package/dist/TabsList-Dttss653.js +0 -105
  458. package/dist/Toaster-D6q4HtXu.js +0 -263
  459. package/dist/button-ChXMfsud.js +0 -81
  460. package/dist/check-njhk-vfu.js +0 -7
  461. package/dist/chevron-down-DKkxb4VV.js +0 -7
  462. package/dist/chevron-right-CPXbqQQz.js +0 -7
  463. package/dist/chevron-up-n_24SqI-.js +0 -7
  464. package/dist/components/custom/underline/GlassUnderline.vue.d.ts +0 -84
  465. package/dist/components/custom/underline/index.d.ts +0 -2
  466. package/dist/components/custom/underline/types.d.ts +0 -56
  467. package/dist/components/ui/carousel/CarouselDots.vue.d.ts +0 -4
  468. package/dist/createLucideIcon-DydS2qgk.js +0 -43
  469. package/dist/minimize-2-BV31Ob_h.js +0 -38
  470. package/dist/search-BSGrf2Sk.js +0 -12
  471. package/dist/sheet-1fChZjtw.js +0 -214
  472. package/dist/underline.d.ts +0 -1
  473. package/dist/underline.js +0 -85
  474. package/dist/useCanvas2D-ClrQuZtp.js +0 -96
  475. package/dist/useConfiguratorState-DAoeHVue.js +0 -287
  476. package/dist/useSpecularTracking-Bo5su68i.js +0 -32
  477. package/dist/useSpringMount-CI2jOstM.js +0 -108
  478. package/dist/vReveal-CqaCz_mC.js +0 -44
  479. package/dist/x-BUwTKe50.js +0 -10
  480. /package/dist/{CollapsibleContent-CP9qF1v4.js → CollapsibleContent-68dEXIAl.js} +0 -0
  481. /package/dist/{InstrumentChassis-UUJX0-mW.js → InstrumentChassis-Bx0F_q5g.js} +0 -0
  482. /package/dist/{Label-r3WzWrsj.js → Label-C2ejNWeC.js} +0 -0
  483. /package/dist/{ModalOverlay-DVLI2VRr.js → ModalOverlay-D1VrWyoi.js} +0 -0
  484. /package/dist/{PaperBackdrop-DIXTtVq6.js → PaperBackdrop-Vf3tlpvd.js} +0 -0
  485. /package/dist/{SelectGroup-aumMgWLs.js → SelectGroup-DwwjicPY.js} +0 -0
  486. /package/dist/{SelectSeparator-BQ_1Fcbp.js → SelectSeparator-DXswVdRz.js} +0 -0
  487. /package/dist/{Separator-0JE6LtNu.js → Separator-pKF0oA4M.js} +0 -0
  488. /package/dist/{_plugin-vue_export-helper-ok8pgSl5.js → _plugin-vue_export-helper-C1je1s0u.js} +0 -0
  489. /package/dist/{badge-UILT_3pZ.js → badge-D9XWW4GT.js} +0 -0
  490. /package/dist/{color-CUYeFbgd.js → color-DweYl7pE.js} +0 -0
  491. /package/dist/{constants-CS75AWHG.js → constants-BPOqYJAm.js} +0 -0
  492. /package/dist/{createContext-BM46COQ-.js → createContext-CpBNTRMI.js} +0 -0
  493. /package/dist/{prng-D27-B3tK.js → prng-Za0Rmgag.js} +0 -0
  494. /package/dist/{resolveCanvasColor-BBiYfp8g.js → resolveCanvasColor-CUyHr5Uu.js} +0 -0
  495. /package/dist/{springPresets--YdWTHtm.js → springPresets-CFQGQfdl.js} +0 -0
  496. /package/dist/{useIntersectionPause-Cc-H9ees.js → useIntersectionPause-Bj4sPkMh.js} +0 -0
  497. /package/dist/{useInterval-iHludrxk.js → useInterval-CvK1mL92.js} +0 -0
  498. /package/dist/{useKeyboardShortcuts-Be3w_Rwk.js → useKeyboardShortcuts-BXWXOZ-9.js} +0 -0
  499. /package/dist/{useLiquidFlex-BL0lLLN2.js → useLiquidFlex-mZPMiNXh.js} +0 -0
  500. /package/dist/{useResizeObserver-BhgdhOIj.js → useResizeObserver-Bpoi7tRE.js} +0 -0
  501. /package/dist/{useResolveTokenColor-Dvn2RZJW.js → useResolveTokenColor-vAylyR0x.js} +0 -0
  502. /package/dist/{useScrollProgress-Dlvx-L3v.js → useScrollProgress-D7bYU2RK.js} +0 -0
  503. /package/dist/{useSortable-muI29agz.js → useSortable-DHjtZSEd.js} +0 -0
  504. /package/dist/{useTextHighlight-DmRYkOBx.js → useTextHighlight-CWEi25hf.js} +0 -0
  505. /package/dist/{useTimer-Dzarvzuk.js → useTimer-BHJOKr35.js} +0 -0
  506. /package/dist/{useUserInvalidAria-B2h6jAM_.js → useUserInvalidAria-y5namzeE.js} +0 -0
  507. /package/dist/{useViewportReady-B40FK4Pa.js → useViewportReady-anbac3m6.js} +0 -0
@@ -1,7 +1,13 @@
1
1
  /* tokens/glass.css
2
- §8 glassmorphism — the five-tier surface ladder (bg/blur/border/shadow rungs + the glass-level + tint axes).
2
+ §8 glassmorphism — the five-tier surface ladder (opacity/blur/saturate rungs +
3
+ composed bg/border) + the --glass-level axis + the control-REST register.
3
4
  Carved from the tokens.css cascade root; @import-ed by tokens.css in
4
- cascade order. Same :root cascade context as its siblings. */
5
+ cascade order. Same :root cascade context as its siblings. The decorative/fx
6
+ tail (grain/specular/edge-light + the adaptive tint-source/backdrop-luma bucket +
7
+ fringe/curvature/chart-palette + the per-tier shadow/spine/under-shadow/overlay-
8
+ scrim) carved to tokens/glass-fx.css at BB.W-CARVE4 — @import-ed IMMEDIATELY AFTER
9
+ this partial so the two adjacent same-selector :root{} blocks resolve identically
10
+ (the dist is byte-isomorphic). */
5
11
  :root {
6
12
  /* ═══════════════════════════════════════════════
7
13
  §8 GLASSMORPHISM — Five-tier surface ladder (v0.8.0)
@@ -18,7 +24,33 @@
18
24
  breaking change. R3-spec §A.
19
25
  ═══════════════════════════════════════════════ */
20
26
 
21
- /* Opacity primitives */
27
+ /* ── Per-tier alpha — the CANONICAL named opacity register (BB.W-CARD-TIER-ALPHA) ──
28
+ Each `--glass-opacity-{tier}` IS the library's canonical alpha for that tier —
29
+ a NAMED, documented input to the ONE compose recipe below, NOT a magic number
30
+ a consumer re-pins. The values here are the library IDENTITY: the warm-cream
31
+ glass ladder, alpha-monotonic (wash < quiet < resting < floating < overlay), with
32
+ the dock (0.42) + chassis (0.28) carrying their own footprint-calibrated rungs.
33
+ The dark arm (tokens/dark-arm.css) lifts each ~0.08 for read-weight over the
34
+ deeper canvas — the SAME named tokens, per-mode (the plain per-mode pair idiom).
35
+
36
+ A consumer that wants the LIBRARY register reads these named tokens (or composes
37
+ a `<Card tier>` rung) and re-pins NOTHING; a consumer whose surface needs a
38
+ divergent composited luminance (the speedtest dark-AA register: instrument 0.72 /
39
+ document 0.78) keeps that as a NAMED preset IN ITS OWN repo (presets-in-consumers)
40
+ — the library default is its identity, the consumer preset is the consumer's.
41
+
42
+ THE SUBSTITUTION-VS-INHERITANCE SEAM (the recurring trap, recorded). The composed
43
+ `--glass-bg-{tier}` below is declared HERE at `:root`, so a custom-property
44
+ substitution resolves at THIS element — overriding `--glass-opacity-{tier}` on a
45
+ DESCENDANT does NOT re-compose the inherited `--glass-bg-{tier}` (the value is
46
+ already resolved). A consumer that needs a per-scope tier alpha therefore RE-DECLARES
47
+ the composed `--glass-bg-{tier}` on the scope (the same recipe, the pinned alpha) —
48
+ the documented retune path, mirroring the dock's own `--glass-bg-dock` self-re-point.
49
+ The named alpha is the canonical INPUT; the per-scope `--glass-bg-*` re-declaration is
50
+ the sanctioned consumer pin. (The `--glass-level` recipe MECHANISM below is the
51
+ AX.W54 seam — UNTOUCHED by this register; this canonicalizes the alpha INPUTS only.)
52
+ Machine-locked by `proof:card-tier-alpha`. */
53
+ /* Opacity primitives — the per-tier canonical alpha (light arm). */
22
54
  --glass-opacity-wash: 0.30;
23
55
  --glass-opacity-quiet: 0.50;
24
56
  --glass-opacity-resting: 0.65;
@@ -28,26 +60,36 @@
28
60
  /* Blur primitives. The radii here feather the dock + meter card to a
29
61
  barely-perceptible diffusion that lets the substrate behind it bleed
30
62
  through cleanly while keeping hero typography crisp at meter scale.
31
- The resting blur sits at 12px so a glass plate reads as a diffusion
32
- without consumer-side override. */
63
+ The resting blur sits at 10px so a glass plate reads as a diffusion
64
+ without consumer-side override.
65
+
66
+ BA.W-GLASS-CAL Unit 1 — the ladder dialed back ~15-20% UNIFORMLY (the
67
+ user's "a hair too much" over-diffusion): quiet 10→8, resting 12→10,
68
+ floating 16→13, overlay 15→13, dock 11→9; wash stays 1px (sub-perceptual).
69
+ The pull is proportional (it preserves tier separation) and keeps every
70
+ rung in the AV.W7-F2 8-15px band — the backdrop's structure reads a hair
71
+ more through the plate while the glass still reads unmistakably as glass.
72
+ The radius axis ONLY: `--glass-level` + every `saturate()`/`brightness()`
73
+ companion below are UNTOUCHED (the W-DARK-MATERIAL dark-recipe saturate/
74
+ brightness companions preserved — radius-only, the gate's B3 assert). */
33
75
  --glass-blur-wash-radius: 1px;
34
- --glass-blur-quiet-radius: 10px;
35
- --glass-blur-resting-radius: 12px;
36
- --glass-blur-floating-radius: 16px;
76
+ --glass-blur-quiet-radius: 8px;
77
+ --glass-blur-resting-radius: 10px;
78
+ --glass-blur-floating-radius: 13px;
37
79
  /* AV.W7 F2 — clamped from 24px into the 8–15px budget band. A blur radius
38
80
  past ~20px is exponentially costlier (`backdrop-filter` is glass-ui's most
39
81
  expensive idiom — the radius is the dominant cost). 15px is the band
40
- ceiling; the lower rungs (wash/quiet/resting 1/10/12) sit in-band and the
41
- floating 16px is the design ceiling at the band edge (left as-is). A
42
- high-resolution display restores the richer 24px wash via the @media arm
43
- below — the cost is amortised by the extra device pixels. */
44
- --glass-blur-overlay-radius: 15px;
45
- /* Dock blur radius — 11px, paired with the 0.42 opacity below: a crisp
46
- glass pill (the iOS Control Center register), not a feathered wash.
47
- The dock composes `blur()` only (no saturate); the
82
+ ceiling; BA.W-GLASS-CAL dialed the overlay rung to 13px (off 15) so the
83
+ whole ladder pulls back in proportion. A high-resolution display restores
84
+ a richer wash via the @media arm in light-dark.css — the cost is amortised
85
+ by the extra device pixels. */
86
+ --glass-blur-overlay-radius: 13px;
87
+ /* Dock blur radius — 9px (BA.W-GLASS-CAL, off 11), paired with the 0.42
88
+ opacity below: a crisp glass pill (the iOS Control Center register), not a
89
+ feathered wash. The dock composes `blur()` only (no saturate); the
48
90
  `prefers-reduced-transparency` bracket at glass.css maps it to the
49
91
  opacity-only register. */
50
- --glass-blur-dock-radius: 11px;
92
+ --glass-blur-dock-radius: 9px;
51
93
 
52
94
  /* AX.W54 — each blur radius is scaled by the ONE `--glass-level` scalar (in
53
95
  lockstep with the opacity seam above): level=1 byte-identical; level=0 →
@@ -137,304 +179,42 @@
137
179
  --glass-bg-dock: color-mix(in oklab, color-mix(in srgb, var(--card) calc((1 - (1 - var(--glass-opacity-dock)) * var(--glass-level)) * 100%), transparent), var(--glass-tint-source) var(--glass-tint-strength));
138
180
  --glass-bg-chassis: color-mix(in srgb, var(--card) calc((1 - (1 - var(--glass-opacity-chassis)) * var(--glass-level)) * 100%), transparent);
139
181
 
140
- /* Composed borders — foreground-tinted */
141
- --glass-border-wash: color-mix(in srgb, var(--foreground) 8%, transparent);
142
- --glass-border-quiet: color-mix(in srgb, var(--foreground) 10%, transparent);
143
- --glass-border-resting: color-mix(in srgb, var(--foreground) 12%, transparent);
144
- --glass-border-floating: color-mix(in srgb, var(--foreground) 15%, transparent);
145
- --glass-border-overlay: color-mix(in srgb, var(--foreground) 18%, transparent);
146
- --glass-border-dock: color-mix(in srgb, var(--foreground) 11%, transparent);
182
+ /* Composed borders — foreground-tinted. BA.W-NO-GRAY L3 — the warm RIM
183
+ re-anchor (G9). The rim IS warm (it rides --foreground, hsl-24 warm ink),
184
+ but at 8-12% α over a near-white plate it was a near-invisible hairline —
185
+ the plate had no carved silhouette, reading as a borderless gray rectangle
186
+ (the user's "no gray ... for cards"). The α lifts a few points per rung so
187
+ the warm hairline CARVES the silhouette (the WWDC25 "rim that defines the
188
+ silhouette" device, on the warm-ink register). Still bounded low — the rim
189
+ is a whisper that defines the edge, never a hard rule. The source stays
190
+ --foreground (the warm-ink tint, NOT a new color); only the presence lifts. */
191
+ --glass-border-wash: color-mix(in srgb, var(--foreground) 11%, transparent);
192
+ --glass-border-quiet: color-mix(in srgb, var(--foreground) 13%, transparent);
193
+ --glass-border-resting: color-mix(in srgb, var(--foreground) 16%, transparent);
194
+ --glass-border-floating: color-mix(in srgb, var(--foreground) 19%, transparent);
195
+ --glass-border-overlay: color-mix(in srgb, var(--foreground) 22%, transparent);
196
+ --glass-border-dock: color-mix(in srgb, var(--foreground) 14%, transparent);
147
197
  --glass-border: var(--glass-border-quiet);
148
- --glass-border-strong: var(--glass-border-floating);
149
-
150
- /* Shared decorative. Light grain dropped 0.035 → 0.025 in P.W1.B —
151
- at the chassis scale the original alpha read as crawl over the new
152
- lower-alpha chassis bg; the grain's role is texture, not reading,
153
- so it sits at the perceptual floor. Dark companion drops 0.06 →
154
- 0.045 below to keep the soft-light blend alive without stippling. */
155
- --glass-grain-opacity: 0.025;
156
- --glass-grain-opacity-disco: 0.08;
157
- --glass-highlight: inset 0 0.5px 0 0 hsl(0 0% 100% / 0.25);
158
-
159
- /* Hairline-accent — 0.5px catch-light + under-shadow pair.
160
- Single token composes the canonical 2-stop hairline used by dock,
161
- instrument-chassis. The `.hairline-accent` utility
162
- (utilities.css §hairline) adopts these via `box-shadow:`. */
163
- --hairline-catch-light: inset 0 0.5px 0 0 rgb(255 255 255 / 0.06);
164
- --hairline-under-shadow: 0 0.5px 0 0 rgb(0 0 0 / 0.04);
165
- --border-hairline: var(--hairline-catch-light), var(--hairline-under-shadow);
166
-
167
- /* Specular catch-light — 1.5px-tall top-edge highlight that swaps in for
168
- --glass-highlight on interactive moments (e.g. primary-action hover).
169
- Reads as a real catch-light on a curved surface. The `-dark` companion
170
- is overridden inside `.dark`; the named token here is the explicit
171
- handle consumers can reference to compose dark-aware layers. */
172
- --glass-specular: inset 0 1.5px 0 0 hsl(0 0% 100% / 0.45);
173
- --glass-specular-dark: inset 0 1.5px 0 0 hsl(0 0% 100% / 0.30);
174
-
175
- /* AV.W15 M3 — Full-perimeter rim light (the "rim that defines the
176
- silhouette", WWDC25 sess. 219). Distinct from the top-only
177
- `--glass-highlight` (a 0.5px top-edge catch-light): this is a 0.75px
178
- inset ring around the WHOLE silhouette, four edges, reading as the
179
- catch-light that wraps the glass plate the way iOS-26 Liquid Glass
180
- carries a rim, not just a top highlight. Composed as a SECOND inset
181
- box-shadow layer alongside `--glass-highlight` on the floating/dock
182
- tiers (glass.css wires it). The alpha is deliberately low (0.18 light
183
- / 0.10 dark) — the rim is decoration and must not eat AA legibility
184
- over a busy backdrop; it sits below the perceptual reading threshold
185
- on text. The `-dark` companion is overridden inside `.dark` mirroring
186
- the `--glass-specular-dark` precedent. */
187
- --glass-edge-light: inset 0 0 0 0.75px hsl(0 0% 100% / 0.18);
188
- --glass-edge-light-dark: inset 0 0 0 0.75px hsl(0 0% 100% / 0.10);
189
-
190
- /* AW.W23 — content-aware adaptive tint (the Baseline-2025 "tint informed by
191
- surrounding content" axis, WWDC25 sess. 219). A surface can tint toward a
192
- consumer-provided dominant backdrop color via a `color-mix(in oklab, …)`
193
- recipe (oklab is the mwg-preferred space for tint generation; NEVER a
194
- lightness-shift in `oklch(from …)` — browsers don't gamut-map yet).
195
-
196
- DEFAULT is zero delta: `--glass-tint-source` is the warm-white card itself
197
- and `--glass-tint-strength` is 0%, so the rung background mixes 0% toward
198
- the source = byte-identical to today. A consumer sets `--glass-tint-source`
199
- to a sampled aurora hue + a strength ≤30% to bias the surface. Alpha-safe:
200
- the mix is bounded ≤30% and never re-points the card's own alpha.
201
-
202
- AX.W55 — the DEFAULTS stay `var(--card)`/`0%` (the zero-delta rest state).
203
- The backdrop-luminance probe (`--glass-backdrop`, below) is what OVERRIDES
204
- them under a bright backdrop; the `:root` defaults are NEVER touched — the
205
- bucket blocks (glass.css / dock.css `@container style(--glass-backdrop:
206
- light)`) do the lift, so a surface over today's rich/dark background reads
207
- byte-identical. */
208
- --glass-tint-source: var(--card);
209
- --glass-tint-strength: 0%;
210
-
211
- /* AX.W55 — adaptive glass legibility (the iOS-26/27 "locally darken the glass
212
- over light content" move; G2). There is NO web API that reads the pixels
213
- painted BEHIND a `backdrop-filter` element, so the backdrop-luminance signal
214
- is a DECLARATIVE BUCKET a consumer sets where it KNOWS the backdrop is bright
215
- (a near-white card surface, a pale aurora bleed, a bright data grid). It is
216
- read by the `@container style(--glass-backdrop: light)` blocks on every glass
217
- family (the shipped density-cascade mechanism — utilities.css §density) which
218
- lift `--glass-tint-strength` toward the AA floor + re-point `--glass-tint-
219
- source` to the warm-ink below, mixing the rung TOWARD ink via the EXISTING
220
- `color-mix(in oklab)` seam — ZERO new compositing seam.
221
-
222
- --glass-backdrop: the bucket. `dark` (or unset) = today's zero-delta;
223
- `light` engages the bright-bucket darken. An
224
- INHERITING ident set on any ancestor reaches every
225
- descendant glass surface (the @container read).
226
- --glass-backdrop-luma: the numeric escape hatch — a sampled backdrop
227
- relative-luminance (0..1) a heavier JS observer sets
228
- when the declarative bucket is too coarse. The TOKEN
229
- is minted (the cascade reads it if set); the OBSERVER
230
- that sets it stays demo-private until a 2nd consumer
231
- arrives (the no-overfitting bar — the DEFAULT path is
232
- the declarative bucket, not a speculative sampler).
233
- --glass-tint-ink: the LOW-LUMINANCE warm-ink the bright bucket re-points
234
- `--glass-tint-source` to — the warm dark `--foreground`
235
- family (NOT white; a lightener over light content is
236
- exactly the W52-fixed wrong direction). It auto-flips
237
- with `--foreground` (dark-mode it resolves the light
238
- warm ink — but the bright-backdrop case is a light-mode
239
- concern). Overridable like every magnitude here.
240
-
241
- The bright-bucket `--glass-tint-strength` is clamped to a BOUNDED AA-clearing
242
- floor — `--glass-tint-strength-aa` (≤24%, the iOS clamp; the lowest value that
243
- clears 4.5:1 over synthetic white, capped LOW so the surface STAYS translucent,
244
- "let as much content through as possible"). Recorded here as the ceiling the
245
- bucket blocks drive to; the live 4.5:1 readback (proof:adaptive-glass π arm)
246
- ratifies the exact value. */
247
- --glass-backdrop: dark;
248
- --glass-backdrop-luma: ;
249
- --glass-tint-ink: var(--foreground);
250
- /* AZ.W-ADAPTIVE-AUTO Arm 1 — recalibrated 18% → 20%. The bump strengthens the
251
- G2 surface-SILHOUETTE darken (ΔL ≈ 0.40 over synthetic white, the plate is
252
- distinguishable from a bright page behind) while staying bounded ≤ 24% (the
253
- iOS clamp — the surface STAYS translucent, "let content through"). The body
254
- register over the engaged plate is the full warm-ink `--foreground` (~10.6:1
255
- over white at 20%) — the muted L40 tier is lifted to the full ink by the
256
- self-engage rules (it cannot clear 4.5:1 on a translucent darkened plate;
257
- darkening moves the plate toward muted's own luminance). The shipped overlay-
258
- band engaged appearance re-ratifies at the new floor: `--foreground` reads
259
- ~10.6–10.9:1 (within the ~11:1 ratified register — the bump is a silhouette
260
- strengthening, not a silent re-tint below AA). The live π readback ratifies. */
261
- --glass-tint-strength-aa: 20%;
262
-
263
- /* R5-7 — the VEIL text-plate feather. The `veil-surface` decoration
264
- (cards.css) paints a borderless/rimless translucent glass plate as a LOCAL
265
- text-legibility surface over a busy backdrop; its `--veil-feather` axis is
266
- an OPTIONAL `mask-image` that fades the plate edges into the page (the
267
- soft-edged "bleed" the slides deck text plates use). The default is `none`
268
- (a clean rectangle); a consumer opts into the feather by pointing
269
- `--veil-feather` at this ready-made radial, or any `mask-image` value.
270
- The 70%→100% falloff feathers the outer ~30% of the plate; override the
271
- token to retune the fade radius library-wide. */
272
- --veil-feather-radial: radial-gradient(
273
- ellipse 100% 100% at 50% 50%,
274
- black 0%,
275
- black 70%,
276
- transparent 100%
277
- );
278
-
279
- /* AW.W23 — chromatic edge dispersion (the "polished glass" rim fringe Apple
280
- shows). A warm fringe on one edge + a cool fringe on the other, low-alpha,
281
- biased warm-cream/NCSU-red (NOT iOS-blue). Composed OVER the W22 uniform
282
- rim under `prefers-reduced-transparency: no-preference`; dropped under
283
- `reduce` (it is a transparency garnish). The two directional inset rings
284
- read as light refracting through the glass edge. */
285
- --glass-fringe-warm: oklch(0.92 0.06 40 / 0.22);
286
- --glass-fringe-cool: oklch(0.90 0.05 230 / 0.16);
287
- --glass-edge-dispersion:
288
- inset 0.75px 0 0 0 var(--glass-fringe-warm),
289
- inset -0.75px 0 0 0 var(--glass-fringe-cool);
290
-
291
- /* AX.W52 D19 — the moving-specular gleam radius (glass.css `.glass-material::
292
- before`). The ONE knob that BOUNDS the gleam geometry as a percentage of the
293
- plate so it can NEVER again become a whole-surface disc (the prior implicit
294
- `circle at …` ran its stops to 55–75% of the half-diagonal — a wash on a
295
- small tile). 36% reads as a tracked edge glint. Override on `:root` to retune
296
- library-wide; a per-surface override clips the gleam tighter/wider. */
297
- --glass-specular-size: 36%;
298
-
299
- /* Chassis curvature illusion — a subtle radial gradient at the chassis
300
- top centre that lifts the surface without committing to literal 3D.
301
- Composed into <InstrumentChassis>'s background stack. AX.W52 D19 — the
302
- prior pure-white `hsl(0 0% 100% / 0.06)` reaching `transparent 60%` was a
303
- broad top-centre WASH (the #1 fixed-anchor rest-bloom culprit). Re-derived
304
- onto the warm-cream house identity (`hsl(40 30% 96%)`, L < 100% so the warm
305
- hue survives — mirroring the moving gleam), the alpha routed through the
306
- SINGLE overridable `--glass-curvature-intensity` knob (0.02 default, a third
307
- of the old 0.06), and the ellipse tightened to `transparent 38%` so it reads
308
- as a thin top-edge sheen, not a central wash. */
309
- --glass-curvature-intensity: 0.02;
310
- --glass-curvature-overlay: radial-gradient(
311
- ellipse at 50% -20%,
312
- hsl(40 30% 96% / var(--glass-curvature-intensity)),
313
- transparent 38%
314
- );
315
- /* The light-arm dark alias kept on the same warm-cream + token recipe so a
316
- non-`.dark` consumer reading `…-overlay-dark` still resolves a softened
317
- sheen; the `.dark` block below lowers `--glass-curvature-intensity` so the
318
- deep-canvas arm is genuinely softer (the prior byte-identical dark arm read
319
- HARDER over the dark canvas). */
320
- --glass-curvature-overlay-dark: var(--glass-curvature-overlay);
321
-
322
- /* Chart palette aliases — speedtest et al. read these for phase tinting.
323
- Defaults map to viz-basis hues; consumers can override per app. */
324
- --chart-ping: var(--viz-chebyshev);
325
- --chart-download: var(--viz-fourier);
326
- --chart-upload: var(--viz-amber);
327
- --chart-jitter: var(--viz-legendre);
328
-
329
- /* O.W6 Lane D — WCAG companion `--chart-{phase}-label` tokens
330
- (speedtest AC.W6c.T2 — F1.V-04 closure).
331
-
332
- The canvas-side hues above preserve their saturated brand register
333
- (correct against the meter dial); the COMPANION tokens darken to
334
- L≈0.40 so phase-label text on `--background` clears the WCAG 2.1
335
- AA-body 4.5:1 contrast floor. Mirrors the two-token discipline
336
- already established by `--meter-{background-color,track-stroke}`:
337
- one token feeds the canvas/visual, the second feeds the label
338
- text.
339
-
340
- Light-mode L≈0.40 in OKLCH preserves the hue rotation while
341
- dropping luminance enough for body contrast; dark-mode flips to
342
- L≈0.85 against the dark canvas. Consumers reach these via
343
- `color: var(--chart-ping-label)` (etc.) on label elements ONLY —
344
- chart strokes/fills continue to read `--chart-ping`. */
345
- --chart-ping-label: oklch(0.40 0.18 230);
346
- --chart-download-label: oklch(0.40 0.20 22);
347
- --chart-upload-label: oklch(0.40 0.16 55);
348
- --chart-jitter-label: oklch(0.40 0.20 305);
349
-
350
- /* O.W6 Lane D — Meter track stroke (speedtest AC.W6c.T3 — F1.V-02
351
- closure). Promoted from speedtest's consumer-side declaration so
352
- glass-ui owns the canonical light + dark values. The light-mode
353
- value reads opaque foreground (composes through canvas
354
- `globalAlpha` in consumer renderers; e.g., speedtest's `rings.ts`
355
- `globalAlpha = 0.22` lands the phantom-track at the perceptual
356
- sweet-spot). The dark-mode companion lives under `.dark` below
357
- and ALSO reads `var(--foreground)` — the prior speedtest value
358
- `var(--background)` rendered bg-on-bg invisible at dark mode. */
359
- --meter-track-stroke: var(--foreground);
360
-
361
- /* Shadow per tier — complete box-shadow lists for glass surface classes */
362
- --glass-shadow-wash: var(--shadow-sm), var(--glass-highlight);
363
- --glass-shadow-quiet: var(--shadow-md), var(--glass-highlight);
364
- --glass-shadow-resting: var(--shadow-lg), var(--glass-highlight);
365
- --glass-shadow-floating: var(--shadow-xl),
366
- 0 0 0 0.5px color-mix(in srgb, var(--shadow-color) 5%, transparent),
367
- var(--glass-highlight);
368
- --glass-shadow-overlay: var(--shadow-2xl),
369
- 0 0 0 0.5px color-mix(in srgb, var(--shadow-color) 8%, transparent),
370
- var(--glass-highlight);
371
- --glass-shadow: var(--glass-shadow-quiet);
372
- --glass-shadow-lg: var(--glass-shadow-floating);
373
-
374
- /* ─────────────────────────────────────────────────────────────
375
- AL-W1-α augmented — SPINE 8th tier (HOUSING register)
376
-
377
- Closes the AK W2 chassis-spine architectural underclaim per
378
- AL-X5 §4.1. The spine register is a polished SLEEVE, not glass:
379
- NO backdrop-filter, NO plate opacity, hairline outer stroke,
380
- interior radial vignette that subtly carries the phase-color
381
- cascade. Consumed exclusively by `<InstrumentChassis variant="spine">`
382
- at App-level mount paths (quiet-content routes).
383
-
384
- The 4 tokens here cover the minimum viable substrate the SLIM
385
- Y4/Y6/Y7 retention set ratified. The 35 rejected axes (saturate
386
- band, edge-light per tier, depth-shadow per tier, tier-up macro)
387
- stay rejected per the conservative-creation mandate.
388
- ───────────────────────────────────────────────────────────── */
389
- --glass-spine-opacity: 0;
390
- --glass-spine-blur: 0px;
391
- --glass-spine-border: var(--surface-tint-8);
392
- --glass-spine-vignette: radial-gradient(
393
- ellipse at 50% 0%,
394
- color-mix(in oklab, var(--phase-color, var(--surface-tint-8)) 8%, transparent),
395
- transparent 60%
396
- );
397
-
398
- /* ─────────────────────────────────────────────────────────────
399
- AL-W10 SLIM — UNDER-SHADOW recipe rungs
400
-
401
- Per AL-X5 §4 + Y7 §3. iOS Liquid Glass surfaces carry a 0.5px
402
- dark hairline along the bottom edge (reads as under-shadow /
403
- glass thickness). The substrate `--hairline-under-shadow`
404
- already publishes one quiet rung; the four-rung ladder here
405
- names the SLIM retention set (Y4 §3.2 / Y6 §4.3) — `quiet`,
406
- `default`, `vivid`, `spine` cover the consumer landings without
407
- multiplying tokens per tier. The 3 hand-rolled literals at
408
- `instrument-chassis.css:52`, `dock.css:279`, `dock.css:952`
409
- retire to these.
410
-
411
- Composes as a NON-INSET box-shadow layer alongside the existing
412
- `--glass-shadow-*` recipe (the inset under-shadow stays at the
413
- hand-rolled literal where it's load-bearing on chassis-internal
414
- surfaces).
415
- ───────────────────────────────────────────────────────────── */
416
- --glass-under-shadow-quiet: 0 2px 8px -1px oklch(0 0 0 / 0.04);
417
- --glass-under-shadow-default: 0 4px 16px -2px oklch(0 0 0 / 0.08);
418
- --glass-under-shadow-vivid: 0 8px 32px -4px oklch(0 0 0 / 0.12);
419
- --glass-under-shadow-spine: 0 1px 0 0 oklch(0 0 0 / 0.06);
420
-
421
- /* Overlay scrim rungs — substrate-aware modal/dialog backdrop tints.
422
- Three weights cover the deployed range: dialog-scroll (subtle),
423
- canonical modal (default), drawer/full-cover (strong).
424
-
425
- AY.W-PRIM-POLISH D3 — the scrim is its OWN identity token, NOT derived
426
- from `--shadow-color`. A scrim's role is to RECEDE: it must pin to INK in
427
- BOTH modes. The cartoon-shadow family rides `--shadow-color: var(--foreground)`
428
- (correct — a shadow re-tints under `.dark` by construction), but a scrim
429
- that does the same FLOODS the dark room with a cream fog (the old dark
430
- overlay painted `srgb(0.91… / 0.5)`, a near-white wash that BRIGHTENED the
431
- page at the modal moment). `--overlay-scrim-ink` is a fixed warm near-black
432
- (the light-mode `--foreground` value), re-resolved verbatim in `.dark` so
433
- the scrim recedes in both modes. Clean break, no alias (no-backwards-compat).
434
- The `--shadow-color` / `--shadow-cartoon-*` family is UNTOUCHED. */
435
- --overlay-scrim-ink: hsl(24 10% 10%);
436
- --overlay-scrim: color-mix(in srgb, var(--overlay-scrim-ink) 50%, transparent);
437
- --overlay-scrim-strong: color-mix(in srgb, var(--overlay-scrim-ink) 80%, transparent);
438
- --overlay-scrim-subtle: color-mix(in srgb, var(--overlay-scrim-ink) 40%, transparent);
439
198
 
199
+ /* ── The control REST register (BA.W-SURFACE-AXIS scope 7) ────────────────
200
+ ONE shared resting surface for the FORM family — Input/Textarea/Select/
201
+ Combobox/NumberField/TagsInput — so the whole control band is ONE material
202
+ at rest, not a per-control fork. Input rode the warm near-white `quiet`
203
+ glass register while Select rode the lighter `glass-wash` gray (live-probed
204
+ at R10 SM-3/NF-4: input `oklab(0.986)` near-white vs select `oklab(0.636)`
205
+ gray — the "no gray" bar at a control-family seam). The unified register
206
+ adopts the WARMER input rung (the no-gray choice); the per-control recipes
207
+ re-point to read these tokens, no per-control fork. The W-NO-GRAY warm floor
208
+ lands underneath in Batch 1b (it warms the VALUES); this register unifies
209
+ the TIER. The hover lift mixes the rest fill one step toward the resting
210
+ rung so a control brightens on hover in lockstep. */
211
+ --control-surface-bg: var(--glass-bg-quiet);
212
+ --control-surface-border: var(--glass-border-floating);
213
+ --control-surface-blur: var(--glass-blur-quiet);
214
+ --control-surface-bg-hover: color-mix(in oklab, var(--glass-bg-quiet), var(--glass-bg-resting) 35%);
215
+
216
+ /* The decorative/fx tail (grain/specular/edge-light + the adaptive tint-source/
217
+ backdrop-luma bucket + fringe/curvature/chart-palette + per-tier shadow/spine/
218
+ under-shadow/overlay-scrim) lives in tokens/glass-fx.css (carved at BB.W-CARVE4
219
+ — the next adjacent :root{} block in the cascade). */
440
220
  }
@@ -22,14 +22,18 @@
22
22
  }
23
23
 
24
24
  /* AV.W7 F2 — high-resolution overlay-blur restore. On a 2dppx+ display the
25
- richer 24px overlay wash is amortised by the extra device pixels (the blur
26
- samples a denser backing store), so the design ceiling is restored where it
27
- is affordable. Standard-density displays keep the 15px budget radius set in
28
- §-1a `:root`. Token-only override — every overlay surface that reads
29
- `--glass-blur-overlay-radius` inherits the restored value automatically. */
25
+ richer overlay wash is amortised by the extra device pixels (the blur samples
26
+ a denser backing store), so a higher ceiling is restored where it is
27
+ affordable. Standard-density displays keep the 13px budget radius set in §-1a
28
+ `:root`. Token-only override — every overlay surface that reads
29
+ `--glass-blur-overlay-radius` inherits the restored value automatically.
30
+
31
+ BA.W-GLASS-CAL Unit 1 — the restore pulled 24→20px in lockstep with the base
32
+ ladder's ~15-20% dial-back (the base overlay rung moved 15→13). 20px stays the
33
+ amortised high-DPI ceiling; standard density reads the dialed-back 13px. */
30
34
  @media (min-resolution: 2dppx) {
31
35
  :root {
32
- --glass-blur-overlay-radius: 24px;
36
+ --glass-blur-overlay-radius: 20px;
33
37
  }
34
38
  }
35
39
 
@@ -66,22 +70,41 @@
66
70
  ═══════════════════════════════════════════════ */
67
71
  @supports (color: light-dark(white, black)) {
68
72
  :root {
69
- /* Neutral ladder — the source the var()-aliases track */
70
- --neutral-0: light-dark(hsl(48 12% 98%), hsl(24 8% 6%));
71
- --neutral-1: light-dark(hsl(48 10% 95%), hsl(24 6% 11%));
72
- --neutral-2: light-dark(hsl(48 9% 90%), hsl(24 5% 16%));
73
- --neutral-3: light-dark(hsl(48 8% 82%), hsl(24 5% 22%));
74
- --neutral-4: light-dark(hsl(48 7% 70%), hsl(24 5% 34%));
75
- --neutral-5: light-dark(hsl(48 6% 40%), hsl(48 5% 62%));
76
- --neutral-6: light-dark(hsl(48 7% 30%), hsl(48 6% 72%));
77
-
78
- /* Core surfaces + ink */
79
- --foreground: light-dark(hsl(24 10% 10%), hsl(48 10% 90%));
80
- --card: light-dark(var(--neutral-0), hsl(24 8% 10%));
81
- --popover: light-dark(var(--neutral-0), hsl(24 8% 10%));
82
- --surface-public-data-panel: light-dark(hsl(44 16% 96%), hsl(36 9% 12%));
83
-
84
- --primary: light-dark(hsl(24 10% 10%), hsl(48 10% 90%));
73
+ /* Neutral ladder — the source the var()-aliases track. BA.W-DARK-MATERIAL scope 1:
74
+ the dark --neutral-0 page floor DEEPENS L6→L4 (LOCKSTEP dark-arm.css:32) so the
75
+ lifted L16 --card sits ~5× its relL — a real dark elevation step.
76
+ BA.W-NO-GRAY — THE WARM-CHROMA FLOOR, BOTH ARMS in lockstep. The LIGHT arm warms
77
+ off the achromatic hsl-48 yellow-green onto the warm identity (hsl 28-40, OKLab
78
+ H 62-85°, C off the gray floor; LOCKSTEP color-radius.css). The DARK arm warms in
79
+ lockstep on the W-DARK-MATERIAL base (hsl 28-36, the dark neutrals carry chroma on
80
+ the NEW dark page/card — secondary→border C 0.0138-0.0286, muted-fg C 0.0255). The
81
+ dark page --neutral-0 hsl(24 9% 4%) is W-DARK-MATERIAL's (KEEP — its luminance floor).
82
+ Chroma-only at constant L — every L within ±0.01 of HEAD, the AA contract preserved. */
83
+ --neutral-0: light-dark(hsl(40 30% 98%), hsl(24 9% 4%));
84
+ --neutral-1: light-dark(hsl(38 26% 95%), hsl(28 12% 11%));
85
+ --neutral-2: light-dark(hsl(34 28% 90%), hsl(28 14% 16%));
86
+ --neutral-3: light-dark(hsl(33 30% 82%), hsl(30 18% 22%));
87
+ --neutral-4: light-dark(hsl(32 26% 70%), hsl(30 16% 34%));
88
+ --neutral-5: light-dark(hsl(30 22% 40%), hsl(34 14% 62%));
89
+ --neutral-6: light-dark(hsl(28 24% 30%), hsl(36 14% 72%));
90
+
91
+ /* Core surfaces + ink. BB.W-DARK-INK-WARM — the DARK arg warmed off the H95.1°
92
+ yellow-green hsl(48 10% 90%) onto the no-gray identity hsl(30 14% 90%) (OKLab
93
+ H75.4°, L held) in LOCKSTEP with the .dark fallback floor (dark-arm.css:60). The
94
+ LIGHT arg hsl(24 10% 10%) is already the warm-amber identity (H56°) — untouched. */
95
+ --foreground: light-dark(hsl(24 10% 10%), hsl(30 14% 90%));
96
+ /* BA.W-DARK-MATERIAL scope 1 — the dark --card plate LIFTS L10→L16 (LOCKSTEP
97
+ dark-arm.css:51); the public-data panel re-anchors L12→L18 to stay above it.
98
+ BA.W-NO-GRAY L1 — the LIGHT arm DECOUPLES off the near-achromatic page onto the
99
+ warm-cream plate hsl(36 48% 97%) (LOCKSTEP color-radius.css --card) so the light
100
+ glass plate reads warm-not-gray; the dark arm is UNCHANGED (W-DARK-MATERIAL's). */
101
+ --card: light-dark(hsl(36 48% 97%), hsl(24 8% 16%));
102
+ --popover: light-dark(hsl(36 48% 97%), hsl(24 8% 16%));
103
+ --surface-public-data-panel: light-dark(hsl(44 16% 96%), hsl(36 9% 18%));
104
+
105
+ /* BA.W-DARK-MATERIAL scope 4 — the chromatic dark --primary (legendre-violet house
106
+ hue, oklab chroma 0.134; off the HEAD achromatic cream). LOCKSTEP dark-arm.css:59. */
107
+ --primary: light-dark(hsl(24 10% 10%), oklch(0.739 0.134 318.1));
85
108
  --primary-foreground: light-dark(var(--neutral-0), hsl(24 10% 10%));
86
109
  /* AX.W44 — dark-arm lift. The stock shadcn dark `hsl(0 62.8% 30.6%)`
87
110
  (L≈30.6) was a saturated-PLATE value used AS INK over `--card` by the
@@ -154,5 +177,24 @@
154
177
  --gold: light-dark(oklch(0.751 0.147 84.2), oklch(0.784 0.143 86.0));
155
178
  --gold-light: light-dark(oklch(0.890 0.183 96.1), oklch(0.898 0.182 97.4));
156
179
  --gold-dark: light-dark(oklch(0.599 0.132 64.2), oklch(0.678 0.150 63.8));
180
+
181
+ /* Silver family (BA.W-ATLAS-RECONCILE C-3) — the `light-dark()` arm
182
+ mirroring gold's exact shape: light value, dark-lifted value. The cool
183
+ near-achromatic structure metal (the W-NO-GRAY named exception).
184
+ `--silver-deep` is mode-invariant — not a `light-dark()` pair, exactly as
185
+ `--gold-deep` is omitted from this block. */
186
+ --silver: light-dark(oklch(0.760 0.012 255), oklch(0.792 0.012 255));
187
+ --silver-light: light-dark(oklch(0.902 0.010 255), oklch(0.912 0.010 255));
188
+ --silver-dark: light-dark(oklch(0.582 0.014 255), oklch(0.648 0.014 255));
189
+
190
+ /* Bronze family (BB.W-METAL-SHIMMER) — the `light-dark()` arm mirroring
191
+ gold's exact shape: light value, dark-lifted value (~+0.03 L so the warm
192
+ metal reads on the deep canvas). The third brand metal (warm-brown ~54°,
193
+ chroma above the W-NO-GRAY floor). `--bronze-deep` is mode-invariant —
194
+ not a `light-dark()` pair, exactly as `--gold-deep`/`--silver-deep` are
195
+ omitted from this block. */
196
+ --bronze: light-dark(oklch(0.620 0.092 54.0), oklch(0.650 0.090 54.0));
197
+ --bronze-light: light-dark(oklch(0.760 0.112 60.0), oklch(0.790 0.110 60.0));
198
+ --bronze-dark: light-dark(oklch(0.500 0.082 50.0), oklch(0.560 0.085 50.0));
157
199
  }
158
200
  }