@mkbabb/glass-ui 3.13.0 → 4.0.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 (304) hide show
  1. package/dist/CardAction-XH4YBVEK.js +158 -0
  2. package/dist/{CommandShortcut-RowNEO6i.js → CommandShortcut-DdtWXxOK.js} +57 -52
  3. package/dist/{ContextMenuSubContent-BQmxTAdw.js → ContextMenuSubContent-B0Vs6atR.js} +1 -1
  4. package/dist/{DataTable-BCddn3T3.js → DataTable-C464Zbqd.js} +99 -97
  5. package/dist/DialogContent-DDE6pQBU.js +103 -0
  6. package/dist/{DialogFooter-Blu4t7tJ.js → DialogFooter-8eZbdmPc.js} +1 -1
  7. package/dist/FadingScroll-DwNnvKMs.js +76 -0
  8. package/dist/{HoverPopover-CISOJQuZ.js → HoverPopover-Dpzwvc4t.js} +1 -1
  9. package/dist/IconChip-BDw1j5mu.js +54 -0
  10. package/dist/{MetricBadge-C9QMz1KT.js → MetricBadge-BpC0R_Ec.js} +1 -1
  11. package/dist/{Notification-DdwNxIrI.js → Notification-DKjKsQq8.js} +8 -8
  12. package/dist/{NumberFieldContent-CqaN-SvN.js → NumberFieldContent-1VtwDSgf.js} +1 -1
  13. package/dist/PopoverContent-BTorlp--.js +127 -0
  14. package/dist/{Progress-DwlUKGbr.js → Progress-hAT4gqGH.js} +97 -77
  15. package/dist/{ScrollingText-DfFrwSph.js → ScrollingText-CUVFTWk2.js} +2 -2
  16. package/dist/{SelectScrollDownButton-CiDUxfEj.js → SelectScrollDownButton-C1jb3b3K.js} +22 -6
  17. package/dist/{Switch-CsIuYP_e.js → Switch-Dr--uLGH.js} +1 -1
  18. package/dist/{Toaster-D6q4HtXu.js → Toaster-Bm_HQSpc.js} +6 -6
  19. package/dist/{ToggleGroupItem-D_AHlRw9.js → ToggleGroupItem-Dzk9hWsF.js} +1 -1
  20. package/dist/animated-digit.js +2 -2
  21. package/dist/api/index.d.ts +8 -5
  22. package/dist/api.js +2 -2
  23. package/dist/aurora.js +132 -117
  24. package/dist/{button-ChXMfsud.js → button-BNDWhAZb.js} +2 -2
  25. package/dist/button.js +1 -1
  26. package/dist/card.js +1 -1
  27. package/dist/carousel.d.ts +1 -1
  28. package/dist/carousel.js +97 -141
  29. package/dist/collapsible.js +1 -1
  30. package/dist/color-swatch.d.ts +1 -0
  31. package/dist/color-swatch.js +47 -0
  32. package/dist/color.js +1 -1
  33. package/dist/command.js +1 -1
  34. package/dist/components/custom/aurora/constants/presets.d.ts +28 -0
  35. package/dist/components/custom/aurora/constants/renderMode.d.ts +2 -0
  36. package/dist/components/custom/aurora/index.d.ts +1 -1
  37. package/dist/components/custom/color-swatch/ColorSwatch.vue.d.ts +22 -0
  38. package/dist/components/custom/color-swatch/index.d.ts +1 -0
  39. package/dist/components/custom/configurator/Configurator.vue.d.ts +19 -8
  40. package/dist/components/custom/constellation/Constellation.vue.d.ts +18 -206
  41. package/dist/components/custom/constellation/composables/useConstellation.d.ts +26 -0
  42. package/dist/components/custom/constellation/constellationField.d.ts +2 -369
  43. package/dist/components/custom/constellation/constellationTypes.d.ts +369 -0
  44. package/dist/components/custom/constellation/index.d.ts +1 -1
  45. package/dist/components/custom/dock/DockRail.vue.d.ts +17 -16
  46. package/dist/components/custom/dock/DockSection.vue.d.ts +69 -0
  47. package/dist/components/custom/dock/DockSeparator.vue.d.ts +49 -1
  48. package/dist/components/custom/dock/DockTabButton.vue.d.ts +5 -5
  49. package/dist/components/custom/dock/constants.d.ts +35 -0
  50. package/dist/components/custom/dock/index.d.ts +2 -0
  51. package/dist/components/custom/expandable-container/ExpandableContainer.vue.d.ts +10 -0
  52. package/dist/components/custom/fading-scroll/FadingScroll.vue.d.ts +25 -0
  53. package/dist/components/custom/fading-scroll/composables/useFadingScroll.d.ts +31 -0
  54. package/dist/components/custom/fading-scroll/constants.d.ts +19 -0
  55. package/dist/components/custom/fading-scroll/index.d.ts +2 -0
  56. package/dist/components/custom/fourier-field/FourierField.vue.d.ts +7 -0
  57. package/dist/components/custom/fourier-field/index.d.ts +1 -1
  58. package/dist/components/custom/fourier-field/math.d.ts +17 -0
  59. package/dist/components/custom/glass-panel/GlassPanel.vue.d.ts +8 -0
  60. package/dist/components/custom/goo-blob/composables/useMetaballRenderer.d.ts +11 -1
  61. package/dist/components/custom/goo-blob/constants.d.ts +6 -1
  62. package/dist/components/custom/handmark/HandMark.vue.d.ts +29 -0
  63. package/dist/components/custom/handmark/brush.d.ts +269 -0
  64. package/dist/components/custom/handmark/composables/useHandMark.d.ts +89 -0
  65. package/dist/components/custom/handmark/constants.d.ts +39 -0
  66. package/dist/components/custom/handmark/freehand.d.ts +69 -0
  67. package/dist/components/custom/handmark/geometry.d.ts +52 -0
  68. package/dist/components/custom/handmark/index.d.ts +27 -0
  69. package/dist/components/custom/handmark/ink.d.ts +11 -0
  70. package/dist/components/custom/handmark/texture.d.ts +39 -0
  71. package/dist/components/custom/handmark/types.d.ts +62 -0
  72. package/dist/components/custom/icon-chip/IconChip.vue.d.ts +4 -0
  73. package/dist/components/custom/icon-chip/index.d.ts +2 -0
  74. package/dist/components/custom/icon-chip/types.d.ts +72 -0
  75. package/dist/components/custom/instrument-chassis/InstrumentChassis.vue.d.ts +15 -2
  76. package/dist/components/custom/pager-dots/PagerDots.vue.d.ts +39 -0
  77. package/dist/components/custom/pager-dots/index.d.ts +2 -0
  78. package/dist/components/custom/tabs/SegmentedTabs.vue.d.ts +20 -25
  79. package/dist/components/custom/tabs/composables/useTabIndicator.d.ts +30 -21
  80. package/dist/components/custom/tabs/constants.d.ts +9 -3
  81. package/dist/components/custom/tabs/index.d.ts +1 -1
  82. package/dist/components/custom/watercolor-dot/WatercolorDot.vue.d.ts +14 -0
  83. package/dist/components/ui/_shared/index.d.ts +2 -0
  84. package/dist/components/ui/_shared/menuItemVariants.d.ts +19 -0
  85. package/dist/components/ui/_shared/useSurfaceAxis.d.ts +41 -0
  86. package/dist/components/ui/card/Card.vue.d.ts +1 -1
  87. package/dist/components/ui/carousel/index.d.ts +0 -1
  88. package/dist/components/ui/command/Command.vue.d.ts +3 -0
  89. package/dist/components/ui/dialog/DialogContent.vue.d.ts +8 -3
  90. package/dist/components/ui/drawer/DrawerContent.vue.d.ts +5 -0
  91. package/dist/components/ui/index.d.ts +0 -1
  92. package/dist/components/ui/popover/PopoverContent.vue.d.ts +3 -0
  93. package/dist/components/ui/progress/ProgressSectioned.vue.d.ts +14 -3
  94. package/dist/components/ui/select/SelectTrigger.vue.d.ts +27 -4
  95. package/dist/components/ui/sheet/SheetContent.vue.d.ts +6 -0
  96. package/dist/components/ui/skeleton/Skeleton.vue.d.ts +3 -0
  97. package/dist/composables/dark/index.d.ts +1 -1
  98. package/dist/composables/dark/useGlobalDark.d.ts +23 -1
  99. package/dist/composables/motion/useViewTransition.d.ts +36 -1
  100. package/dist/configurator.js +1 -1
  101. package/dist/confirm-dialog.js +2 -2
  102. package/dist/constellation.js +92 -94
  103. package/dist/context-menu.js +2 -2
  104. package/dist/controls.js +10 -4
  105. package/dist/dark.d.ts +1 -1
  106. package/dist/dark.js +1 -1
  107. package/dist/data-table.js +1 -1
  108. package/dist/dialog.js +2 -2
  109. package/dist/dock.js +510 -321
  110. package/dist/{dockContext-BegmJVmx.js → dockContext-Bu1Avy-a.js} +1 -1
  111. package/dist/dom.js +5 -5
  112. package/dist/{dropdown-menu-DzkkyBwX.js → dropdown-menu-BJ7E9js_.js} +2 -2
  113. package/dist/dropdown-menu.js +1 -1
  114. package/dist/expandable-container.js +42 -38
  115. package/dist/fading-scroll.d.ts +1 -0
  116. package/dist/fading-scroll.js +2 -0
  117. package/dist/forms.js +3 -3
  118. package/dist/fourier-field.js +38 -37
  119. package/dist/fourier-math.js +2 -2
  120. package/dist/glass-panel.js +39 -36
  121. package/dist/glass-ui.css +1 -1
  122. package/dist/glass-ui.js +129 -145
  123. package/dist/goo-blob.js +86 -81
  124. package/dist/handmark.d.ts +1 -0
  125. package/dist/handmark.js +707 -0
  126. package/dist/header-ribbon.js +1 -1
  127. package/dist/hover-card.js +1 -1
  128. package/dist/hover-popover.js +1 -1
  129. package/dist/icon-chip.d.ts +1 -0
  130. package/dist/icon-chip.js +2 -0
  131. package/dist/icon-tooltip.js +1 -1
  132. package/dist/index.d.ts +2 -2
  133. package/dist/keyboard.js +1 -1
  134. package/dist/label.js +1 -1
  135. package/dist/labeled-field.js +6 -6
  136. package/dist/{math-U6-RrLmV.js → math-DeuJwLFx.js} +11 -3
  137. package/dist/{menuItemVariants-DPiEarb0.js → menuItemVariants-DWRQXBxJ.js} +10 -4
  138. package/dist/metric-badge.js +1 -1
  139. package/dist/metric-cell.js +25 -22
  140. package/dist/metric-stack.js +1 -1
  141. package/dist/motion-core.js +33 -32
  142. package/dist/motion-curves.js +1 -1
  143. package/dist/motion.js +4 -4
  144. package/dist/notification.js +1 -1
  145. package/dist/number-field.js +1 -1
  146. package/dist/pager-dots.d.ts +1 -0
  147. package/dist/pager-dots.js +91 -0
  148. package/dist/paper-backdrop.js +1 -1
  149. package/dist/popover.js +1 -1
  150. package/dist/{presets-BKVyQfbt.js → presets-BW2b-fr1.js} +14 -1
  151. package/dist/progress.js +1 -1
  152. package/dist/pulse.js +1 -1
  153. package/dist/reactive.js +2 -2
  154. package/dist/scrolling-text.js +1 -1
  155. package/dist/search.js +5 -5
  156. package/dist/select.js +3 -3
  157. package/dist/separator.js +1 -1
  158. package/dist/{sheet-1fChZjtw.js → sheet-CquRYOAw.js} +59 -55
  159. package/dist/sheet.js +1 -1
  160. package/dist/{slider-B-JP2JlI.js → slider-DQ95MET2.js} +7 -7
  161. package/dist/slider.js +1 -1
  162. package/dist/sortable-list.js +3 -3
  163. package/dist/styles/animations.css +11 -26
  164. package/dist/styles/components.css +1 -1
  165. package/dist/styles/configurator.css +35 -0
  166. package/dist/styles/dock/density.css +19 -0
  167. package/dist/styles/dock/overflow.css +15 -0
  168. package/dist/styles/dock/rail-extend.css +168 -71
  169. package/dist/styles/dock/section.css +59 -0
  170. package/dist/styles/dock/shell.css +34 -5
  171. package/dist/styles/dock-controls/icon-button.css +11 -1
  172. package/dist/styles/dock-controls/tab-button.css +24 -83
  173. package/dist/styles/dock-controls/triggers.css +7 -0
  174. package/dist/styles/dock.css +6 -3
  175. package/dist/styles/drawer.css +46 -0
  176. package/dist/styles/feedback-tone.css +104 -0
  177. package/dist/styles/glass/ladder.css +68 -22
  178. package/dist/styles/glass/surface-axis.css +113 -0
  179. package/dist/styles/glass/surfaces.css +88 -12
  180. package/dist/styles/glass.css +5 -2
  181. package/dist/styles/icon-chip.css +149 -0
  182. package/dist/styles/index.css +67 -5
  183. package/dist/styles/instrument-chassis.css +42 -0
  184. package/dist/styles/menu.css +127 -0
  185. package/dist/styles/segmented-tabs.css +160 -89
  186. package/dist/styles/select.css +50 -0
  187. package/dist/styles/theme/bridges.css +11 -1
  188. package/dist/styles/tokens/color-radius.css +40 -13
  189. package/dist/styles/tokens/dark-arm.css +124 -16
  190. package/dist/styles/tokens/glass.css +83 -23
  191. package/dist/styles/tokens/light-dark.css +48 -19
  192. package/dist/styles/tokens/offsets-sizing.css +62 -0
  193. package/dist/styles/tokens/property-regs.css +3 -10
  194. package/dist/styles/tokens/scale-paper.css +45 -2
  195. package/dist/styles/tokens/scheme-motion.css +32 -14
  196. package/dist/styles/transitions.css +7 -7
  197. package/dist/styles/typography/scale.css +153 -0
  198. package/dist/styles/typography/semantic.css +220 -0
  199. package/dist/styles/typography/utilities.css +159 -0
  200. package/dist/styles/typography.css +23 -507
  201. package/dist/styles/utilities/a11y-overrides.css +33 -4
  202. package/dist/styles/utilities/base.css +177 -1
  203. package/dist/styles/utilities/btn.css +18 -201
  204. package/dist/styles/view-transition.css +4 -1
  205. package/dist/switch.js +1 -1
  206. package/dist/tabs.js +154 -183
  207. package/dist/timeline.js +2 -2
  208. package/dist/toast.js +1 -1
  209. package/dist/toggle-chip.js +3 -1
  210. package/dist/toggle-group.js +1 -1
  211. package/dist/typewriter.js +1 -1
  212. package/dist/{useAnimatedNumber-C5I3wWd8.js → useAnimatedNumber-C_3wZLx4.js} +1 -1
  213. package/dist/useConfiguratorState-kiIlun8I.js +303 -0
  214. package/dist/{useGlobalDark-yhL4Wp-s.js → useGlobalDark-C28t0VWJ.js} +22 -3
  215. package/dist/{useRAFLoop-Bxv0o6L5.js → useRAFLoop-CdwJ7284.js} +1 -1
  216. package/dist/{useSpringMount-CI2jOstM.js → useSpringMount-CvopqiFr.js} +1 -1
  217. package/dist/useSurfaceAxis-CMnF2zHb.js +7 -0
  218. package/dist/{useTouchGate-Dg7MQI1G.js → useTouchGate-28Tk2-t2.js} +1 -1
  219. package/dist/{vReveal-CqaCz_mC.js → useViewTransition-COsPjQVZ.js} +15 -12
  220. package/dist/vReveal-D9k0jADx.js +10 -0
  221. package/dist/watercolor-dot.js +12 -5
  222. package/package.json +71 -7
  223. package/src/styles/animations.css +11 -26
  224. package/src/styles/configurator.css +35 -0
  225. package/src/styles/dock/density.css +19 -0
  226. package/src/styles/dock/overflow.css +15 -0
  227. package/src/styles/dock/rail-extend.css +168 -71
  228. package/src/styles/dock/section.css +59 -0
  229. package/src/styles/dock/shell.css +34 -5
  230. package/src/styles/dock-controls/icon-button.css +11 -1
  231. package/src/styles/dock-controls/tab-button.css +24 -83
  232. package/src/styles/dock-controls/triggers.css +7 -0
  233. package/src/styles/dock.css +6 -3
  234. package/src/styles/drawer.css +42 -0
  235. package/src/styles/feedback-tone.css +104 -0
  236. package/src/styles/glass/ladder.css +68 -22
  237. package/src/styles/glass/surface-axis.css +113 -0
  238. package/src/styles/glass/surfaces.css +88 -12
  239. package/src/styles/glass.css +5 -2
  240. package/src/styles/icon-chip.css +149 -0
  241. package/src/styles/index.css +66 -4
  242. package/src/styles/instrument-chassis.css +42 -0
  243. package/src/styles/menu.css +127 -0
  244. package/src/styles/segmented-tabs.css +156 -87
  245. package/src/styles/select.css +50 -0
  246. package/src/styles/theme/bridges.css +11 -1
  247. package/src/styles/tokens/color-radius.css +40 -13
  248. package/src/styles/tokens/dark-arm.css +124 -16
  249. package/src/styles/tokens/glass.css +83 -23
  250. package/src/styles/tokens/light-dark.css +48 -19
  251. package/src/styles/tokens/offsets-sizing.css +62 -0
  252. package/src/styles/tokens/property-regs.css +3 -10
  253. package/src/styles/tokens/scale-paper.css +45 -2
  254. package/src/styles/tokens/scheme-motion.css +32 -14
  255. package/src/styles/transitions.css +7 -7
  256. package/src/styles/typography/scale.css +153 -0
  257. package/src/styles/typography/semantic.css +220 -0
  258. package/src/styles/typography/utilities.css +159 -0
  259. package/src/styles/typography.css +23 -507
  260. package/src/styles/utilities/a11y-overrides.css +33 -4
  261. package/src/styles/utilities/base.css +177 -1
  262. package/src/styles/utilities/btn.css +18 -201
  263. package/src/styles/view-transition.css +4 -1
  264. package/dist/CardAction-Cj2eycQ2.js +0 -157
  265. package/dist/DialogContent-Dl9WkAoS.js +0 -100
  266. package/dist/PopoverContent-BYwt2-4x.js +0 -121
  267. package/dist/TabsList-Dttss653.js +0 -105
  268. package/dist/components/custom/underline/GlassUnderline.vue.d.ts +0 -84
  269. package/dist/components/custom/underline/index.d.ts +0 -2
  270. package/dist/components/custom/underline/types.d.ts +0 -56
  271. package/dist/components/ui/carousel/CarouselDots.vue.d.ts +0 -4
  272. package/dist/underline.d.ts +0 -1
  273. package/dist/underline.js +0 -85
  274. package/dist/useConfiguratorState-DAoeHVue.js +0 -287
  275. /package/dist/{CollapsibleContent-CP9qF1v4.js → CollapsibleContent-C_s6fG7r.js} +0 -0
  276. /package/dist/{ContextMenuContent-CT3AS1WX.js → ContextMenuContent-ON3x7cuk.js} +0 -0
  277. /package/dist/{HoverCardContent-Csywg3YF.js → HoverCardContent-DkMaQzH5.js} +0 -0
  278. /package/dist/{IconTooltip-DPzE09X9.js → IconTooltip-DSjasZIt.js} +0 -0
  279. /package/dist/{Input-DWQQIOC4.js → Input-DVG_J0ne.js} +0 -0
  280. /package/dist/{Label-r3WzWrsj.js → Label-Ck9SWEKM.js} +0 -0
  281. /package/dist/{ModalOverlay-DVLI2VRr.js → ModalOverlay-CkPRRgl_.js} +0 -0
  282. /package/dist/{PaperBackdrop-DIXTtVq6.js → PaperBackdrop-nBKe0vkB.js} +0 -0
  283. /package/dist/{SelectGroup-aumMgWLs.js → SelectGroup-Dcczq44n.js} +0 -0
  284. /package/dist/{SelectSeparator-BQ_1Fcbp.js → SelectSeparator-DK2y1Bun.js} +0 -0
  285. /package/dist/{Separator-0JE6LtNu.js → Separator-BArl4OaB.js} +0 -0
  286. /package/dist/{_plugin-vue_export-helper-ok8pgSl5.js → _plugin-vue_export-helper-CBt_VvXa.js} +0 -0
  287. /package/dist/{color-CUYeFbgd.js → color-DweYl7pE.js} +0 -0
  288. /package/dist/{compile-B7NGOBcP.js → compile-EXXzEr1q.js} +0 -0
  289. /package/dist/{constants-CS75AWHG.js → constants-BPOqYJAm.js} +0 -0
  290. /package/dist/{createContext-BM46COQ-.js → createContext-B2RaZ-b8.js} +0 -0
  291. /package/dist/{prng-D27-B3tK.js → prng-Cg22zv8g.js} +0 -0
  292. /package/dist/{springPresets--YdWTHtm.js → springPresets-WXaLbu8u.js} +0 -0
  293. /package/dist/{useIntersectionPause-Cc-H9ees.js → useIntersectionPause-Bj4sPkMh.js} +0 -0
  294. /package/dist/{useInterval-iHludrxk.js → useInterval-CNdua40W.js} +0 -0
  295. /package/dist/{useKeyboardShortcuts-Be3w_Rwk.js → useKeyboardShortcuts-BXWXOZ-9.js} +0 -0
  296. /package/dist/{useLiquidFlex-BL0lLLN2.js → useLiquidFlex-C12hXwOZ.js} +0 -0
  297. /package/dist/{useResizeObserver-BhgdhOIj.js → useResizeObserver-V6nq5gJb.js} +0 -0
  298. /package/dist/{useResolveTokenColor-Dvn2RZJW.js → useResolveTokenColor-NUG2zYAW.js} +0 -0
  299. /package/dist/{useScrollProgress-Dlvx-L3v.js → useScrollProgress-D7bYU2RK.js} +0 -0
  300. /package/dist/{useSortable-muI29agz.js → useSortable-BVqlJRBR.js} +0 -0
  301. /package/dist/{useTextHighlight-DmRYkOBx.js → useTextHighlight-NmBM5V_4.js} +0 -0
  302. /package/dist/{useTimer-Dzarvzuk.js → useTimer-B_PAasDL.js} +0 -0
  303. /package/dist/{useUserInvalidAria-B2h6jAM_.js → useUserInvalidAria-CDfJuakL.js} +0 -0
  304. /package/dist/{useViewportReady-B40FK4Pa.js → useViewportReady-CvBcCYDf.js} +0 -0
@@ -29,18 +29,28 @@
29
29
  FLOOR — kept verbatim for non-light-dark() engines (§2c); on a
30
30
  supporting engine `color-scheme: dark` (above) drives the §-1b
31
31
  light-dark() arms and these agree. */
32
- --neutral-0: hsl(24 8% 6%); /* L 6 — page surface (dark) */
33
- --neutral-1: hsl(24 6% 11%); /* L 11 — soft field */
34
- --neutral-2: hsl(24 5% 16%); /* L 16 — chip / tab-inactive */
35
- --neutral-3: hsl(24 5% 22%); /* L 22 — hover / highlight */
36
- --neutral-4: hsl(24 5% 34%); /* L 34 — subtle border */
37
- --neutral-5: hsl(48 5% 62%); /* L 62 — muted text (WCAG AA: 7.39:1 vs L6 page / 6.58:1 vs L11 muted) */
32
+ /* BA.W-DARK-MATERIAL scope 1 — the luminous-dark elevation widen. The page floor
33
+ deepens (L6→L4, +1 warmth-sat) and the --card plate LIFTS (L10→L16, below) so the
34
+ page↔card gap goes from the HEAD 4-L collapse (card/page relL ≈ 2.0×, a 0.003-luma
35
+ band) to a real iOS/Material dark elevation step (card/page relL ≈ 5×, the five glass
36
+ rungs composite into a perceptible ladder). LOCKSTEP with light-dark.css:70/80.
37
+ BA.W-NO-GRAY — the WARM-CHROMA FLOOR dark arm, in LOCKSTEP with light-dark.css. The
38
+ dark neutrals warm off the achromatic hsl-24/48 onto the warm identity (hsl 28-36,
39
+ OKLab C off the gray floor on the NEW dark base — chip→border C 0.0138-0.0286, muted-fg
40
+ C 0.0255). The --neutral-0 page (hsl 24 9% 4%) is W-DARK-MATERIAL's luminance floor —
41
+ KEEP (chroma-only on the rungs above it). L held — the dark AA contract preserved. */
42
+ --neutral-0: hsl(24 9% 4%); /* L 4 — page surface (dark, deepened — W-DARK-MATERIAL) */
43
+ --neutral-1: hsl(28 12% 11%); /* L 11 — soft field (warm) */
44
+ --neutral-2: hsl(28 14% 16%); /* L 16 — chip / tab-inactive (warm, C≈0.014) */
45
+ --neutral-3: hsl(30 18% 22%); /* L 22 — hover / highlight (warm, C≈0.022) */
46
+ --neutral-4: hsl(30 16% 34%); /* L 34 — subtle border (warm, C≈0.029) */
47
+ --neutral-5: hsl(34 14% 62%); /* L 62 — muted text (warm, C≈0.026; WCAG AA: 7.64:1 vs page) */
38
48
  /* W7-α' (AK-FD1) — strong-muted text. Same principled ladder step as
39
49
  light, mirrored: 10 L LIGHTER than muted (62→72) toward --foreground
40
- (L90), the 1/3 point of the L62→L90 muted→primary gap. By-colour; hue
41
- 48, sat nudged 5→6. WCAG AA: 9.86:1 vs L6 page / 8.78:1 vs L11 muted
42
- (cf. neutral-5's 7.39:1). */
43
- --neutral-6: hsl(48 6% 72%); /* L 72 — strong-muted text (secondary register) */
50
+ (L90), the 1/3 point of the L62→L90 muted→primary gap. By-colour.
51
+ BA.W-NO-GRAY — re-saturated onto the warm identity (hsl 36 14% — OKLab
52
+ C≈0.019, warm). WCAG AA: 10.29:1 vs L4 page (cf. neutral-5's 7.64:1). */
53
+ --neutral-6: hsl(36 14% 72%); /* L 72 — strong-muted text (secondary register, warm) */
44
54
 
45
55
  /* --background / --card-foreground / --popover-foreground / --muted /
46
56
  --muted-foreground{,-strong} / --secondary{,-foreground} /
@@ -48,15 +58,28 @@
48
58
  DELETED here (AQ.W2 §2a): they auto-track the --neutral-* ladder +
49
59
  --foreground above. Re-declaring them would be redundant. */
50
60
  --foreground: hsl(48 10% 90%);
51
- --card: hsl(24 8% 10%);
52
- --popover: hsl(24 8% 10%);
61
+ /* BA.W-DARK-MATERIAL scope 1 — the --card plate LIFTS L10→L16 (a warm-dark elevated
62
+ surface, macOS-window territory) so it sits ~5× the deepened L4 page relL — a
63
+ clearly distinct surface the five glass rungs ladder up from. LOCKSTEP light-dark.css:80. */
64
+ --card: hsl(24 8% 16%);
65
+ --popover: hsl(24 8% 16%);
53
66
 
54
67
  /* R0G-5 (AO.W4) — dark mirror of the warm-neutral public-data panel.
55
- --card's dark hsl(24 8% 10%) nudged one warmth step toward amber
56
- (24→36) + +1 sat + +2 L so the dark dashboard panel lifts off the page. */
57
- --surface-public-data-panel: hsl(36 9% 12%);
68
+ --card's dark hsl(24 8% 16%) nudged one warmth step toward amber
69
+ (24→36) + +1 sat + +2 L so the dark dashboard panel lifts off the page.
70
+ BA.W-DARK-MATERIAL — re-anchored L12→L18 to stay ABOVE the lifted L16 card
71
+ (LOCKSTEP light-dark.css:82). */
72
+ --surface-public-data-panel: hsl(36 9% 18%);
58
73
 
59
- --primary: hsl(48 10% 90%);
74
+ /* BA.W-DARK-MATERIAL scope 4 — the chromatic dark --primary. HEAD was an achromatic
75
+ cream hsl(48 10% 90%) (oklab chroma ≈ 0.005 — every filled/active/selected control
76
+ painted a flat pale-grey slab). Re-anchored onto the legendre-violet house identity
77
+ hue (--section-color-7 / --viz-legendre's oklch register — a LIBRARY-identity chroma,
78
+ NOT a borrowed demo preset), oklab chroma 0.134. The dark ink --primary-foreground
79
+ stays hsl(24 10% 10%): 7.15:1 over the violet (clears the 4.5 text + 3.0 graphic
80
+ floors). Critical now the disco/audacious texture retires (R8-18) — the accent's
81
+ COLOR carries the identity. LOCKSTEP light-dark.css:84. */
82
+ --primary: oklch(0.739 0.134 318.1);
60
83
  --primary-foreground: hsl(24 10% 10%);
61
84
  /* AX.W44 — the `.dark` class fallback floor, in LOCKSTEP with the light-dark()
62
85
  enhancement arm above (§2c). Same lifted `hsl(0 80% 60%)` so a
@@ -90,6 +113,19 @@
90
113
  --viz-fourier: oklch(0.693 0.151 28.1);
91
114
  --viz-chebyshev: oklch(0.718 0.107 268.4);
92
115
  --viz-legendre: oklch(0.739 0.134 318.1);
116
+
117
+ /* BA.W-CONFIG-CHASSIS.1 (CFG-4) — the `.dark` class fallback floor for the
118
+ configurator divider register, in LOCKSTEP with the `light-dark()`
119
+ enhancement arm minted in offsets-sizing.css (the dark halves). A
120
+ @supports-split engine (no `light-dark()`) and a class-toggle engine paint
121
+ the SAME lifted divider: off the L34 `--border` (too close to the L16
122
+ glass plate) toward the L90 `--foreground` warm-ink so a visible luminance
123
+ step survives the dark glass-floating surface. The SECTION divider runs
124
+ heavier than the inter-row hairline; the faint section tonal step is the
125
+ 3% foreground wash. */
126
+ --configurator-divider: color-mix(in srgb, var(--foreground) 22%, transparent);
127
+ --configurator-divider-section: color-mix(in srgb, var(--foreground) 30%, transparent);
128
+ --configurator-section-tint: color-mix(in srgb, var(--foreground) 3%, transparent);
93
129
  /* --viz-amber / --viz-green / --meter-track-stroke are pure var()-aliases
94
130
  (→ --section-color-5/-4 / --foreground) — DELETED (§2a); they auto-track
95
131
  their sources, which convert via §-1b. */
@@ -166,6 +202,69 @@
166
202
  --glass-grain-opacity: 0.045;
167
203
  --glass-highlight: inset 0 0.5px 0 0 hsl(0 0% 100% / 0.08);
168
204
 
205
+ /* BA.W-DARK-MATERIAL scope 2 — dark glass is TRANSMISSIVE. The dark rung
206
+ backdrop-filter carries a saturate/brightness LUMINOSITY LIFT (the iOS-dark
207
+ "dark glass glows where light passes" model) so a backdrop GLOWS through the
208
+ plate instead of dying behind it. The light arm sits at saturate(1.05) — over a
209
+ near-black canvas that reads as no transmission; the dark arm lifts it so the
210
+ aurora/page behind reads with chroma + a glow. The blur() RADIUS is the
211
+ light-arm primitive UNTOUCHED (W-GLASS-CAL owns the radius dial-back) — only the
212
+ saturate/brightness COMPANIONS lift here. The lower rungs lift more (they're
213
+ thinner, the backdrop carries the read); the heavy overlay lifts least. */
214
+ --glass-blur-wash: blur(calc(var(--glass-blur-wash-radius) * var(--glass-level))) saturate(1.35) brightness(1.18);
215
+ --glass-blur-quiet: blur(calc(var(--glass-blur-quiet-radius) * var(--glass-level))) saturate(1.35) brightness(1.16);
216
+ --glass-blur-resting: blur(calc(var(--glass-blur-resting-radius) * var(--glass-level))) saturate(1.30) brightness(1.14);
217
+ --glass-blur-floating: blur(calc(var(--glass-blur-floating-radius) * var(--glass-level))) saturate(1.28) brightness(1.10);
218
+ --glass-blur-overlay: blur(calc(var(--glass-blur-overlay-radius) * var(--glass-level))) saturate(1.22) brightness(1.06);
219
+ --glass-blur-dock: blur(calc(var(--glass-blur-dock-radius) * var(--glass-level))) saturate(1.30) brightness(1.12);
220
+
221
+ /* BA.W-DARK-MATERIAL scope 3 — the dark arm of the adaptive --glass-tint-* seam (the
222
+ SAME seam, NO third fork). The W55 self-engage block (glass/ladder.css) re-points
223
+ --glass-tint-source → --glass-tint-ink at --glass-tint-strength-aa. In LIGHT that is
224
+ a darken-over-bright; in DARK --glass-tint-ink resolves the light-cream --foreground,
225
+ so the SAME re-point becomes a gentle LIFT toward a luminous translucent dark (the
226
+ MIRROR of the light darken — the plate lifts OFF the deep page rather than dying into
227
+ it). HEAD applied the light 20% strength in dark too (the wrong-direction over-wash —
228
+ it flattened the silhouette toward cream). The dark arm re-declares the BOUNDED
229
+ strength to a gentle luminous-dark lift (12%) — over-light's 20% is a light-mode
230
+ concern (the bright bucket never engages in dark — there is no white backdrop). The
231
+ --glass-tint-ink token stays var(--foreground) (the light cream is the correct LIFT
232
+ ink in dark); only the STRENGTH re-tunes. The unconditional content-tier floor
233
+ (--glass-tint-strength-floor, light-mode-calm) is NOT re-declared here — in dark the
234
+ self-engage uses the AA arm directly (the luminous-dark lift is the desired default,
235
+ not a sub-perceptual silhouette). */
236
+ --glass-tint-strength-aa: 12%;
237
+ /* The unconditional content-tier self-engage (glass/ladder.css) reads
238
+ --glass-tint-strength-floor. In LIGHT that is the 4% sub-perceptual silhouette (the
239
+ calm-light card stays warm); in DARK the content tiers WANT the full luminous-dark
240
+ lift as the default (the plate lifts off the deep page — the desired register, not a
241
+ sub-perceptual edge), so the floor re-resolves to the AA lift here. ONE token, two
242
+ mode arms — the content-tier self-engage needs no mode branch. */
243
+ --glass-tint-strength-floor: 12%;
244
+
245
+ /* BA.W-DARK-MATERIAL scope 5 — the --surface-tint-* dark arm. The light family is
246
+ color-mix(in srgb, var(--foreground) N%, transparent) — over a near-black dark card
247
+ a LIGHT-ink (dark --foreground IS light cream) tint composites to near-black: the
248
+ 9-rung chip/hairline/divider scale is INVISIBLE in dark. The dark arm KEEPS the
249
+ in-srgb space (the AW.W26 fence — NEVER oklab) but re-anchors the mix ink to a
250
+ BRIGHTER warm off-white so a chip/hairline LIFTS off the deep card (the inverse
251
+ intent of light's dark-ink tint). This re-resolves every --surface-tint-* consumer
252
+ (chip backplates, the dock-rail divider, the spine, the timeline dot) in lockstep,
253
+ zero per-site edit. The brighter ink is a near-white warm (hsl(48 12% 96%)) so the
254
+ higher rungs read as genuine hairlines on the L16 card. */
255
+ --surface-tint-4: color-mix(in srgb, hsl(48 12% 96%) 4%, transparent);
256
+ --surface-tint-6: color-mix(in srgb, hsl(48 12% 96%) 6%, transparent);
257
+ --surface-tint-8: color-mix(in srgb, hsl(48 12% 96%) 8%, transparent);
258
+ --surface-tint-10: color-mix(in srgb, hsl(48 12% 96%) 10%, transparent);
259
+ --surface-tint-12: color-mix(in srgb, hsl(48 12% 96%) 12%, transparent);
260
+ --surface-tint-15: color-mix(in srgb, hsl(48 12% 96%) 15%, transparent);
261
+ --surface-tint-18: color-mix(in srgb, hsl(48 12% 96%) 18%, transparent);
262
+ --surface-tint-22: color-mix(in srgb, hsl(48 12% 96%) 22%, transparent);
263
+ --surface-tint-25: color-mix(in srgb, hsl(48 12% 96%) 25%, transparent);
264
+ --surface-tint-35: color-mix(in srgb, hsl(48 12% 96%) 35%, transparent);
265
+ --surface-tint-40: color-mix(in srgb, hsl(48 12% 96%) 40%, transparent);
266
+ --surface-tint-70: color-mix(in srgb, hsl(48 12% 96%) 70%, transparent);
267
+
169
268
  /* Hairline-accent dark mirror — see light counterpart at line ~404. */
170
269
  --hairline-catch-light: inset 0 0.5px 0 0 rgb(255 255 255 / 0.05);
171
270
  --hairline-under-shadow: 0 0.5px 0 0 rgb(0 0 0 / 0.06);
@@ -196,5 +295,14 @@
196
295
  --gold: oklch(0.784 0.143 86.0);
197
296
  --gold-light: oklch(0.898 0.182 97.4);
198
297
  --gold-dark: oklch(0.678 0.150 63.8);
298
+
299
+ /* Silver — lifted for dark (BA.W-ATLAS-RECONCILE C-3; mirrors gold's dark
300
+ arm: the polished metal lifts ~+0.03 L so the structure register reads on
301
+ the deep canvas. `--silver-deep` is mode-invariant — NOT re-declared here,
302
+ exactly as `--gold-deep` is omitted from this dark block). The cool hue
303
+ holds; the chroma stays near-achromatic. */
304
+ --silver: oklch(0.792 0.012 255);
305
+ --silver-light: oklch(0.912 0.010 255);
306
+ --silver-dark: oklch(0.648 0.014 255);
199
307
  }
200
308
 
@@ -28,26 +28,36 @@
28
28
  /* Blur primitives. The radii here feather the dock + meter card to a
29
29
  barely-perceptible diffusion that lets the substrate behind it bleed
30
30
  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. */
31
+ The resting blur sits at 10px so a glass plate reads as a diffusion
32
+ without consumer-side override.
33
+
34
+ BA.W-GLASS-CAL Unit 1 — the ladder dialed back ~15-20% UNIFORMLY (the
35
+ user's "a hair too much" over-diffusion): quiet 10→8, resting 12→10,
36
+ floating 16→13, overlay 15→13, dock 11→9; wash stays 1px (sub-perceptual).
37
+ The pull is proportional (it preserves tier separation) and keeps every
38
+ rung in the AV.W7-F2 8-15px band — the backdrop's structure reads a hair
39
+ more through the plate while the glass still reads unmistakably as glass.
40
+ The radius axis ONLY: `--glass-level` + every `saturate()`/`brightness()`
41
+ companion below are UNTOUCHED (the W-DARK-MATERIAL dark-recipe saturate/
42
+ brightness companions preserved — radius-only, the gate's B3 assert). */
33
43
  --glass-blur-wash-radius: 1px;
34
- --glass-blur-quiet-radius: 10px;
35
- --glass-blur-resting-radius: 12px;
36
- --glass-blur-floating-radius: 16px;
44
+ --glass-blur-quiet-radius: 8px;
45
+ --glass-blur-resting-radius: 10px;
46
+ --glass-blur-floating-radius: 13px;
37
47
  /* AV.W7 F2 — clamped from 24px into the 8–15px budget band. A blur radius
38
48
  past ~20px is exponentially costlier (`backdrop-filter` is glass-ui's most
39
49
  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
50
+ ceiling; BA.W-GLASS-CAL dialed the overlay rung to 13px (off 15) so the
51
+ whole ladder pulls back in proportion. A high-resolution display restores
52
+ a richer wash via the @media arm in light-dark.css — the cost is amortised
53
+ by the extra device pixels. */
54
+ --glass-blur-overlay-radius: 13px;
55
+ /* Dock blur radius — 9px (BA.W-GLASS-CAL, off 11), paired with the 0.42
56
+ opacity below: a crisp glass pill (the iOS Control Center register), not a
57
+ feathered wash. The dock composes `blur()` only (no saturate); the
48
58
  `prefers-reduced-transparency` bracket at glass.css maps it to the
49
59
  opacity-only register. */
50
- --glass-blur-dock-radius: 11px;
60
+ --glass-blur-dock-radius: 9px;
51
61
 
52
62
  /* AX.W54 — each blur radius is scaled by the ONE `--glass-level` scalar (in
53
63
  lockstep with the opacity seam above): level=1 byte-identical; level=0 →
@@ -137,23 +147,50 @@
137
147
  --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
148
  --glass-bg-chassis: color-mix(in srgb, var(--card) calc((1 - (1 - var(--glass-opacity-chassis)) * var(--glass-level)) * 100%), transparent);
139
149
 
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);
150
+ /* Composed borders — foreground-tinted. BA.W-NO-GRAY L3 — the warm RIM
151
+ re-anchor (G9). The rim IS warm (it rides --foreground, hsl-24 warm ink),
152
+ but at 8-12% α over a near-white plate it was a near-invisible hairline —
153
+ the plate had no carved silhouette, reading as a borderless gray rectangle
154
+ (the user's "no gray ... for cards"). The α lifts a few points per rung so
155
+ the warm hairline CARVES the silhouette (the WWDC25 "rim that defines the
156
+ silhouette" device, on the warm-ink register). Still bounded low — the rim
157
+ is a whisper that defines the edge, never a hard rule. The source stays
158
+ --foreground (the warm-ink tint, NOT a new color); only the presence lifts. */
159
+ --glass-border-wash: color-mix(in srgb, var(--foreground) 11%, transparent);
160
+ --glass-border-quiet: color-mix(in srgb, var(--foreground) 13%, transparent);
161
+ --glass-border-resting: color-mix(in srgb, var(--foreground) 16%, transparent);
162
+ --glass-border-floating: color-mix(in srgb, var(--foreground) 19%, transparent);
163
+ --glass-border-overlay: color-mix(in srgb, var(--foreground) 22%, transparent);
164
+ --glass-border-dock: color-mix(in srgb, var(--foreground) 14%, transparent);
147
165
  --glass-border: var(--glass-border-quiet);
148
166
  --glass-border-strong: var(--glass-border-floating);
149
167
 
168
+ /* ── The control REST register (BA.W-SURFACE-AXIS scope 7) ────────────────
169
+ ONE shared resting surface for the FORM family — Input/Textarea/Select/
170
+ Combobox/NumberField/TagsInput — so the whole control band is ONE material
171
+ at rest, not a per-control fork. Input rode the warm near-white `quiet`
172
+ glass register while Select rode the lighter `glass-wash` gray (live-probed
173
+ at R10 SM-3/NF-4: input `oklab(0.986)` near-white vs select `oklab(0.636)`
174
+ gray — the "no gray" bar at a control-family seam). The unified register
175
+ adopts the WARMER input rung (the no-gray choice); the per-control recipes
176
+ re-point to read these tokens, no per-control fork. The W-NO-GRAY warm floor
177
+ lands underneath in Batch 1b (it warms the VALUES); this register unifies
178
+ the TIER. The hover lift mixes the rest fill one step toward the resting
179
+ rung so a control brightens on hover in lockstep. */
180
+ --control-surface-bg: var(--glass-bg-quiet);
181
+ --control-surface-border: var(--glass-border-floating);
182
+ --control-surface-blur: var(--glass-blur-quiet);
183
+ --control-surface-bg-hover: color-mix(in oklab, var(--glass-bg-quiet), var(--glass-bg-resting) 35%);
184
+
150
185
  /* Shared decorative. Light grain dropped 0.035 → 0.025 in P.W1.B —
151
186
  at the chassis scale the original alpha read as crawl over the new
152
187
  lower-alpha chassis bg; the grain's role is texture, not reading,
153
188
  so it sits at the perceptual floor. Dark companion drops 0.06 →
154
189
  0.045 below to keep the soft-light blend alive without stippling. */
155
190
  --glass-grain-opacity: 0.025;
156
- --glass-grain-opacity-disco: 0.08;
191
+ /* BA.W-GLASS-CAL — `--glass-grain-opacity-disco` (0.08) DELETED with the disco
192
+ recipe retirement (H2a): no surviving consumer once `btn-audacious` + the
193
+ dock-tab primary phase-grain collapse onto the calm glass register. */
157
194
  --glass-highlight: inset 0 0.5px 0 0 hsl(0 0% 100% / 0.25);
158
195
 
159
196
  /* Hairline-accent — 0.5px catch-light + under-shadow pair.
@@ -185,7 +222,13 @@
185
222
  on text. The `-dark` companion is overridden inside `.dark` mirroring
186
223
  the `--glass-specular-dark` precedent. */
187
224
  --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);
225
+ /* BA.W-DARK-MATERIAL scope 2 — the dark edge/rim is the PRIMARY silhouette device in
226
+ dark. The light register's fill+shadow carry the plate; in dark the fill barely
227
+ separates (the deep page is near-black), so the EDGE + the transmitted glow carry the
228
+ silhouette — two registers, one design language. HEAD α 0.10 sits below the reading
229
+ threshold over the deep canvas; lifted to 0.22 so the rim DEFINES the plate (the
230
+ WWDC25 "rim that defines the silhouette" device, dialed up for the dark substrate). */
231
+ --glass-edge-light-dark: inset 0 0 0 0.75px hsl(0 0% 100% / 0.22);
189
232
 
190
233
  /* AW.W23 — content-aware adaptive tint (the Baseline-2025 "tint informed by
191
234
  surrounding content" axis, WWDC25 sess. 219). A surface can tint toward a
@@ -260,6 +303,23 @@
260
303
  strengthening, not a silent re-tint below AA). The live π readback ratifies. */
261
304
  --glass-tint-strength-aa: 20%;
262
305
 
306
+ /* BA.W-DARK-MATERIAL scope 7 — the calm-light recalibration (R9-1; the slides gray-slab
307
+ fix). The AZ unconditional content-tier self-engage applied the full 20% AA darken to
308
+ EVERY .glass-card/.glass-resting/.glass-quiet/.glass-wash mode- and backdrop-agnostically
309
+ — over a plain LIGHT page (not a bright/busy backdrop) the 20% warm-ink darken + the
310
+ muted→ink lift composited the translucent cream card into a flat gray slab (the slides
311
+ presenter card: 20% → oklab(0.785) gray). The recalibration: the FULL AA darken is now
312
+ gated on the declared/sampled bright signal (the @container --glass-backdrop:light bucket /
313
+ the observer); the UNCONDITIONAL content-tier floor drops to this sub-perceptual SILHOUETTE
314
+ tint — just enough edge over a busy backdrop without graying a calm-light card (the
315
+ calm-light plate stays warm, L ≈ 0.94 at the slides-equivalent fixture). The overlay band
316
+ (.glass-floating/.glass-overlay) keeps the FULL unconditional darken (floating over an
317
+ UNKNOWN consumer surface, darkening is the correct default). A consumer opts out on a
318
+ light-page ancestor via --glass-tint-strength: 0%. Bounded > 0%, ≤ 10%. The DARK arm
319
+ re-tunes --glass-tint-strength-aa directly (dark-arm.css scope 3) — the luminous-dark lift
320
+ is the desired default there, NOT a sub-perceptual floor, so the floor is a light-mode knob. */
321
+ --glass-tint-strength-floor: 4%;
322
+
263
323
  /* R5-7 — the VEIL text-plate feather. The `veil-surface` decoration
264
324
  (cards.css) paints a borderless/rimless translucent glass plate as a LOCAL
265
325
  text-legibility surface over a busy backdrop; its `--veil-feather` axis is
@@ -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,38 @@
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%));
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%));
77
90
 
78
91
  /* Core surfaces + ink */
79
92
  --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%));
93
+ /* BA.W-DARK-MATERIAL scope 1 — the dark --card plate LIFTS L10→L16 (LOCKSTEP
94
+ dark-arm.css:51); the public-data panel re-anchors L12→L18 to stay above it.
95
+ BA.W-NO-GRAY L1 — the LIGHT arm DECOUPLES off the near-achromatic page onto the
96
+ warm-cream plate hsl(36 48% 97%) (LOCKSTEP color-radius.css --card) so the light
97
+ glass plate reads warm-not-gray; the dark arm is UNCHANGED (W-DARK-MATERIAL's). */
98
+ --card: light-dark(hsl(36 48% 97%), hsl(24 8% 16%));
99
+ --popover: light-dark(hsl(36 48% 97%), hsl(24 8% 16%));
100
+ --surface-public-data-panel: light-dark(hsl(44 16% 96%), hsl(36 9% 18%));
101
+
102
+ /* BA.W-DARK-MATERIAL scope 4 — the chromatic dark --primary (legendre-violet house
103
+ hue, oklab chroma 0.134; off the HEAD achromatic cream). LOCKSTEP dark-arm.css:59. */
104
+ --primary: light-dark(hsl(24 10% 10%), oklch(0.739 0.134 318.1));
85
105
  --primary-foreground: light-dark(var(--neutral-0), hsl(24 10% 10%));
86
106
  /* AX.W44 — dark-arm lift. The stock shadcn dark `hsl(0 62.8% 30.6%)`
87
107
  (L≈30.6) was a saturated-PLATE value used AS INK over `--card` by the
@@ -154,5 +174,14 @@
154
174
  --gold: light-dark(oklch(0.751 0.147 84.2), oklch(0.784 0.143 86.0));
155
175
  --gold-light: light-dark(oklch(0.890 0.183 96.1), oklch(0.898 0.182 97.4));
156
176
  --gold-dark: light-dark(oklch(0.599 0.132 64.2), oklch(0.678 0.150 63.8));
177
+
178
+ /* Silver family (BA.W-ATLAS-RECONCILE C-3) — the `light-dark()` arm
179
+ mirroring gold's exact shape: light value, dark-lifted value. The cool
180
+ near-achromatic structure metal (the W-NO-GRAY named exception).
181
+ `--silver-deep` is mode-invariant — not a `light-dark()` pair, exactly as
182
+ `--gold-deep` is omitted from this block. */
183
+ --silver: light-dark(oklch(0.760 0.012 255), oklch(0.792 0.012 255));
184
+ --silver-light: light-dark(oklch(0.902 0.010 255), oklch(0.912 0.010 255));
185
+ --silver-dark: light-dark(oklch(0.582 0.014 255), oklch(0.648 0.014 255));
157
186
  }
158
187
  }
@@ -12,6 +12,17 @@
12
12
  --lift-lg: -4px;
13
13
 
14
14
  /* Layout tokens */
15
+ /* BA.W-FADING-SCROLL — `--fade-scroll-width` is the public edge-fade ramp
16
+ width knob for `<FadingScroll>` (inheriting, retunable on any ancestor;
17
+ SegmentedTabs' `overflow="scroll"` strip overrides it to 0.5rem). It
18
+ SUPERSEDES `--mask-fade-width` (the scroll-BLIND `.scroll-fade-*` static
19
+ masks' knob). `--mask-fade-width` is RETIRE-COORDINATED: it survives this
20
+ wave because the static `.scroll-fade-*` utility blocks survive (so
21
+ W-CONFIG-CHASSIS's C2/C3 configurator columns still render mid-batch); it
22
+ retires in a CLEAN BREAK (no alias) at the orchestrator's Batch-2-close
23
+ commit alongside the static utilities, once C2/C3 have migrated onto the
24
+ primitive. */
25
+ --fade-scroll-width: 1rem;
15
26
  --mask-fade-width: 1rem;
16
27
  /* J.W3.C — dock content overflow caps. When dock content exceeds
17
28
  these dimensions, the inner `.dock-layers` (horizontal) /
@@ -362,6 +373,18 @@
362
373
  Consumers retune the rail-tab size via this one handle. */
363
374
  --dock-layer-tab-size: calc(1.75rem * var(--dock-scale));
364
375
 
376
+ /* BA.W-DOCK-SECTIONS — the divider-seam rail knobs.
377
+ `--dock-rail-extend-length` (declared in rail-extend.css) was RE-SEMANTICIZED:
378
+ it is no longer a one-way connector length but the SYMMETRIC per-side overrun of
379
+ the seam line (the line's cross-extent = dock extent + 2× the knob, centered on
380
+ the seam). `--dock-rail-retract-stub` is the residual protrusion FRACTION the
381
+ chips leave past the dock edge on collapse (the macOS fan-out "retract INTO the
382
+ rail leaving a slight protrusion"; 0 = fully retracted, 1 = no retract). The
383
+ `--dock-section-zone-gap` is the inter-control rhythm inside a <DockSection> zone
384
+ (defaults to the dock's own `--dock-gap`, so the section grouping adds no box). */
385
+ --dock-rail-retract-stub: 0.35;
386
+ --dock-section-zone-gap: var(--dock-gap, 0.25rem);
387
+
365
388
  /* Dock active-state ladder (O.W6 Lane B)
366
389
  Token-overridable active paint for `.dock-icon-button`. Promoted
367
390
  from hardcoded `background: var(--muted); color: var(--foreground)`
@@ -494,6 +517,45 @@
494
517
  --configurator-preset-row-weight: 0.625rem; /* 10px — > a body row's 8px py-comfortable */
495
518
  --configurator-preset-row-gap: 0.5rem; /* 8px — generous chip gap */
496
519
 
520
+ /* 3. The DIVIDER register — dark-adaptive (BA.W-CONFIG-CHASSIS.1 / CFG-4).
521
+ The section + inter-row dividers used to be inline `border-border/40` and
522
+ `border-border/30` Tailwind alphas; over the W-DARK-MATERIAL dark
523
+ `glass-floating` plate (a luminous transmissive material, --card L16) those
524
+ near-equal-luminance hairlines effectively VANISHED — "the sections run
525
+ together". This ONE token is consumed by every divider rule (the
526
+ <ConfiguratorLayer> section border, the dividers-prop inter-row border,
527
+ Configurator.vue's aside/preset/footer borders, configurator.css) so the
528
+ divider weight is retuned from a single override.
529
+
530
+ The dark-LIFTING arm is the load-bearing half: the divider must read on
531
+ BOTH plates. On LIGHT it is the resting `--border` warm-neutral at the
532
+ prior ~40% weight; on DARK it LIFTS off `--border` (L34 over the L16 plate
533
+ — too close) toward the `--foreground` warm-ink (L90) at a higher α, so a
534
+ visible luminance step survives the dark glass. `light-dark()` carries the
535
+ arm in ONE declaration (the same :root cascade context as the surface-tint
536
+ family; an engine without `light-dark()` falls back to the dark-arm.css
537
+ `.dark` floor minted in lockstep). The SECTION divider runs a touch
538
+ heavier than the inter-row hairline (a section reads as a section without
539
+ a second heading rung). */
540
+ --configurator-divider: light-dark(
541
+ color-mix(in srgb, var(--border) 55%, transparent),
542
+ color-mix(in srgb, var(--foreground) 22%, transparent)
543
+ );
544
+ --configurator-divider-section: light-dark(
545
+ color-mix(in srgb, var(--border) 70%, transparent),
546
+ color-mix(in srgb, var(--foreground) 30%, transparent)
547
+ );
548
+ /* The optional faint section-header tonal step — a whisper-light warm wash
549
+ behind a <ConfiguratorLayer> section so it reads as a grouped section
550
+ WITHOUT a new heading rung (within the W-HIERARCHY register). Default off
551
+ (transparent) on light where the hairline carries it; a faint
552
+ foreground-over-transparent lift on dark where the divider alone is
553
+ subtle. */
554
+ --configurator-section-tint: light-dark(
555
+ transparent,
556
+ color-mix(in srgb, var(--foreground) 3%, transparent)
557
+ );
558
+
497
559
  /* Component font override (consumers override locally) */
498
560
  --select-font: inherit;
499
561
 
@@ -30,10 +30,9 @@
30
30
  wrapper that reads it for a sympathetic tint (matches the
31
31
  `--phase-color` inheritance pattern).
32
32
 
33
- • --ripple-radius (length) — the `btn-audacious` press ripple
34
- radial. `inherits: false` because each button owns its own
35
- ripple state (a hovered parent must not push a ripple-radius
36
- onto a non-pressed child).
33
+ • --ripple-radius — RETIRED at BA.W-GLASS-CAL (H2a) with the disco recipe
34
+ family: the typed press-ripple was `btn-audacious`-private and has no
35
+ surviving consumer (the calm CTA register's press is the §6 scale beat).
37
36
  ═══════════════════════════════════════════════ */
38
37
 
39
38
  @property --progress-crescendo {
@@ -48,12 +47,6 @@
48
47
  initial-value: 0%;
49
48
  }
50
49
 
51
- @property --ripple-radius {
52
- syntax: "<length>";
53
- inherits: false;
54
- initial-value: 0px;
55
- }
56
-
57
50
  /* ═══════════════════════════════════════════════
58
51
  §11b POINTER-ANCHORED MOVING SPECULAR (AV.W15)
59
52
 
@@ -51,6 +51,14 @@
51
51
  wants a whisper of squish, not a bounce. A consumer dials the elasticity
52
52
  (or to 1 for none) without touching source. */
53
53
  --tab-indicator-max-stretch: 1.08;
54
+ /* BA.W-TABS — the indicator's OWN travel clock, re-pointed off the generic
55
+ `--duration-normal` (0.3s, which dragged a ~190ms sub-pixel undershoot tail
56
+ past the ~100ms 90%-travel point — the R10-2 "too slow" read) onto the
57
+ CALIBRATED `--spring-snappy-duration` (the W-GLASS-CAL Unit 3 per-spring
58
+ 2%-band envelope-settle clock for the snappy curve, ~0.34s). The glide +
59
+ squish both read this ONE clock so they cannot desync; consume, never
60
+ re-mint the spring-duration primitive (W-GLASS-CAL owns it). */
61
+ --tab-indicator-duration: var(--spring-snappy-duration);
54
62
  --opacity-disabled: 0.5;
55
63
  --opacity-icon-muted: 0.8;
56
64
 
@@ -92,6 +100,36 @@
92
100
  --color-gold-dark: var(--gold-dark);
93
101
  --color-gold-deep: var(--gold-deep);
94
102
 
103
+ /* ═══════════════════════════════════════════════
104
+ §13b SILVER (the structure metal — BA.W-ATLAS-RECONCILE C-3, d6 register C)
105
+ ═══════════════════════════════════════════════ */
106
+ /* The cool polished-steel STRUCTURE quad — gold's mirror for the industrial
107
+ housing register (the InstrumentChassis `variant="structure"` consumer #2).
108
+ Gold ships; the structure metal never did. The cascade EXACTLY mirrors gold's
109
+ (scale-paper raw → bridges `--color-silver*` alias → both dark arms).
110
+
111
+ BA.W-NO-GRAY NAMED EXCEPTION (the ONE sanctioned cool-neutral). W-NO-GRAY
112
+ moved the library's NEUTRAL ladder to a warm OKLab H~70° register (no gray).
113
+ Silver is DELIBERATELY COOL near-achromatic (hue ~255, the blue-steel of a
114
+ milled panel) — it is NOT a neutral, it is a brand METAL identity (like gold).
115
+ Calibrated AGAINST the new warm floor: the very-low chroma (C ≤ 0.016) reads
116
+ as polished metal, not a tinted cast, and the cool hue distinguishes it from
117
+ the warm-cream glass plate so the structure register reads as a DIFFERENT
118
+ material, not a desaturated default. Recorded as the warm-floor exception in
119
+ the W-ATLAS-RECONCILE DELTA. */
120
+ --silver: oklch(0.760 0.012 255);
121
+ --silver-light: oklch(0.902 0.010 255);
122
+ --silver-dark: oklch(0.582 0.014 255);
123
+ /* The mode-INVARIANT deep structure plate (mirrors `--gold-deep`'s contract —
124
+ a fixed dark cool-steel so a white label clears ≥4.5:1 in BOTH modes; it does
125
+ NOT flip with `--foreground`). The would-be saturated CTA twin of the metal. */
126
+ --silver-deep: oklch(0.462 0.016 258);
127
+
128
+ --color-silver: var(--silver);
129
+ --color-silver-light: var(--silver-light);
130
+ --color-silver-dark: var(--silver-dark);
131
+ --color-silver-deep: var(--silver-deep);
132
+
95
133
  /* ═══════════════════════════════════════════════
96
134
  §14 RAINBOW PALETTE — oklch (AV.W16 TW2; mode-independent, no .dark
97
135
  mirror; hue preserved from the prior hsl() cadence)
@@ -361,6 +399,11 @@
361
399
  per-surface re-point in dock-controls.css — the exact per-surface fork the
362
400
  doctrine kills. The re-point is now a DEAD byte-identical redeclaration and is
363
401
  DELETED; the ROOT token IS the doctrine register, so any other consumer of
364
- `--dock-press-spring` inherits the correct smooth register. */
365
- --dock-press-spring: var(--duration-fast) var(--spring-smooth);
402
+ `--dock-press-spring` inherits the correct smooth register.
403
+
404
+ BA.W-GLASS-CAL Unit 3 — the duration leg re-times off the generic
405
+ `--duration-fast` (0.2s) onto `--spring-smooth-duration` (0.36s, the
406
+ smooth spring's OWN 2%-band envelope settle), so the press transform plays
407
+ at its physical settle rather than a generic clock. */
408
+ --dock-press-spring: var(--spring-smooth-duration) var(--spring-smooth);
366
409
  }