@mkbabb/glass-ui 3.2.0 → 3.4.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 (306) hide show
  1. package/dist/{CardFooter-3-VGho1J.js → CardFooter-C390imy7.js} +2 -2
  2. package/dist/{CollapsibleContent-wlmlDujU.js → CollapsibleContent-cauTbZEM.js} +1 -1
  3. package/dist/{CommandShortcut-C6lsz3pG.js → CommandShortcut-BiVyqipe.js} +5 -4
  4. package/dist/DataTable-FfkaAg2z.js +465 -0
  5. package/dist/DialogContent-IQ8_BRrC.js +100 -0
  6. package/dist/{DiscoGlyph-B7YooI2-.js → DiscoGlyph-BaZ8OawK.js} +1 -1
  7. package/dist/{GlyphFace-Bvk6OIas.js → GlyphFace-B_7vOmYn.js} +1 -1
  8. package/dist/HoverPopover-DTSYkJtw.js +96 -0
  9. package/dist/{IconTooltip-DXveGjx7.js → IconTooltip-BTyYn4mr.js} +1 -1
  10. package/dist/Input-CU9CNKmo.js +52 -0
  11. package/dist/{MetricBadge-J_GBCb8e.js → MetricBadge-BlrdbOGN.js} +1 -1
  12. package/dist/{NumberFieldContent-B6L6YrQz.js → NumberFieldContent-iOTQ5rGO.js} +8 -4
  13. package/dist/{PopoverContent-CxEEUL7Y.js → PopoverContent-B8WtJECb.js} +1 -1
  14. package/dist/Progress-DjM86vfb.js +254 -0
  15. package/dist/{ScrollingText-1Qjnwz6H.js → ScrollingText-P9o_DuMn.js} +1 -1
  16. package/dist/{SelectScrollDownButton-BvvvAbuh.js → SelectScrollDownButton-BGn3rjs9.js} +9 -8
  17. package/dist/TabsIndicator-DA0x9gPr.js +97 -0
  18. package/dist/{ToggleGroupItem-Cy7xHFEo.js → ToggleGroupItem-gyXj998A.js} +37 -40
  19. package/dist/UnderlineTabs-Cq_AD03t.js +39 -0
  20. package/dist/animated-digit.js +2 -2
  21. package/dist/api/index.d.ts +2 -0
  22. package/dist/api.js +1 -1
  23. package/dist/aurora.js +454 -271
  24. package/dist/{button-DS3ULf5i.js → button-Ckn3eDfB.js} +27 -22
  25. package/dist/button.js +1 -1
  26. package/dist/card.js +1 -1
  27. package/dist/carousel.js +2 -2
  28. package/dist/collapsible.js +1 -1
  29. package/dist/color-rkK4RMx2.js +33 -0
  30. package/dist/color.d.ts +1 -0
  31. package/dist/color.js +2 -0
  32. package/dist/command.js +1 -1
  33. package/dist/compile-DVgAxagk.js +106 -0
  34. package/dist/components/custom/animated-digit/AnimatedDigit.vue.d.ts +7 -7
  35. package/dist/components/custom/aurora/Aurora.vue.d.ts +3 -3
  36. package/dist/components/custom/aurora/composables/color.d.ts +3 -25
  37. package/dist/components/custom/aurora/composables/cursorModel.d.ts +45 -0
  38. package/dist/components/custom/aurora/composables/frameLoop.d.ts +30 -0
  39. package/dist/components/custom/aurora/composables/glSetup.d.ts +29 -0
  40. package/dist/components/custom/aurora/composables/runtime.d.ts +45 -35
  41. package/dist/components/custom/aurora/composables/uniformBridge.d.ts +67 -0
  42. package/dist/components/custom/aurora/composables/useAurora.d.ts +14 -1
  43. package/dist/components/custom/aurora/composables/useCursorInteraction.d.ts +1 -1
  44. package/dist/components/custom/aurora/constants/budget.d.ts +50 -0
  45. package/dist/components/custom/aurora/{presets.d.ts → constants/presets.d.ts} +2 -5
  46. package/dist/components/custom/aurora/constants/shaders/aurora.frag.d.ts +1 -0
  47. package/dist/components/custom/aurora/constants/shaders/brush.glsl.d.ts +1 -0
  48. package/dist/components/custom/aurora/constants/shaders/composition.glsl.d.ts +1 -0
  49. package/dist/components/custom/aurora/constants/shaders/flow.glsl.d.ts +1 -0
  50. package/dist/components/custom/aurora/constants/shaders/mediums.glsl.d.ts +2 -0
  51. package/dist/components/custom/aurora/constants/shaders/tonemap.glsl.d.ts +1 -0
  52. package/dist/components/custom/aurora/index.d.ts +2 -2
  53. package/dist/components/custom/configurator/ConfiguratorLayer.vue.d.ts +14 -7
  54. package/dist/components/custom/configurator/density.d.ts +3 -8
  55. package/dist/components/custom/dock/DockBackgroundToggle.vue.d.ts +46 -0
  56. package/dist/components/custom/dock/DockIconButton.vue.d.ts +3 -3
  57. package/dist/components/custom/dock/DockLayerGroup.vue.d.ts +2 -2
  58. package/dist/components/custom/dock/GlassDock.vue.d.ts +22 -18
  59. package/dist/components/custom/dock/composables/dockContext.d.ts +4 -4
  60. package/dist/components/custom/dock/composables/dockLayerContext.d.ts +13 -6
  61. package/dist/components/custom/dock/composables/useLayerTransition.d.ts +32 -8
  62. package/dist/components/custom/dock/index.d.ts +1 -0
  63. package/dist/components/custom/expandable-container/ExpandableContainer.vue.d.ts +10 -0
  64. package/dist/components/custom/glass-panel/GlassPanel.vue.d.ts +1 -1
  65. package/dist/components/custom/glyph-face/keys.d.ts +3 -29
  66. package/dist/components/custom/goo-blob/GooBlob.vue.d.ts +48 -0
  67. package/dist/components/custom/goo-blob/composables/easing.d.ts +6 -0
  68. package/dist/components/custom/goo-blob/composables/useBlobMood.d.ts +14 -0
  69. package/dist/components/custom/goo-blob/composables/useBlobPointer.d.ts +18 -0
  70. package/dist/components/custom/goo-blob/composables/useBlobSatellites.d.ts +13 -0
  71. package/dist/components/custom/goo-blob/composables/useMetaballRenderer.d.ts +42 -0
  72. package/dist/components/custom/goo-blob/index.d.ts +7 -0
  73. package/dist/components/custom/goo-blob/shaders/metaball.frag.d.ts +1 -0
  74. package/dist/components/custom/goo-blob/shaders/metaball.vert.d.ts +1 -0
  75. package/dist/components/custom/goo-blob/shaders/oklch-perturb.glsl.d.ts +1 -0
  76. package/dist/components/custom/goo-blob/shaders/sdf-body.glsl.d.ts +1 -0
  77. package/dist/components/custom/goo-blob/shaders/watercolor-edges.glsl.d.ts +2 -0
  78. package/dist/components/custom/goo-blob/types.d.ts +77 -0
  79. package/dist/components/custom/hover-popover/HoverPopover.vue.d.ts +48 -9
  80. package/dist/components/custom/labeled-field/LabeledField.vue.d.ts +2 -0
  81. package/dist/components/custom/labeled-field/LabeledSelect.vue.d.ts +2 -2
  82. package/dist/components/custom/metric-stack/MetricRow.vue.d.ts +2 -2
  83. package/dist/components/custom/responsive-tabs/ResponsiveTabs.vue.d.ts +13 -7
  84. package/dist/components/custom/search/FuzzySearch.vue.d.ts +1 -1
  85. package/dist/components/custom/search/SearchBar.vue.d.ts +1 -1
  86. package/dist/components/custom/sortable-list/SortableHandle.vue.d.ts +7 -1
  87. package/dist/components/custom/sortable-list/context.d.ts +2 -3
  88. package/dist/components/custom/tabs/BouncyTabs.vue.d.ts +6 -3
  89. package/dist/components/custom/tabs/BouncyToggle.vue.d.ts +7 -3
  90. package/dist/components/custom/tabs/UnderlineTabs.vue.d.ts +6 -3
  91. package/dist/components/custom/tabs/composables/useBouncySlider.d.ts +39 -0
  92. package/dist/components/custom/timeline/ContinuousMarkers.vue.d.ts +49 -0
  93. package/dist/components/custom/timeline/ContinuousRail.vue.d.ts +26 -0
  94. package/dist/components/custom/timeline/ContinuousTimeline.vue.d.ts +4 -4
  95. package/dist/components/custom/typewriter/TypewriterText.vue.d.ts +2 -2
  96. package/dist/components/custom/watercolor-dot/WatercolorDot.vue.d.ts +45 -0
  97. package/dist/components/custom/watercolor-dot/index.d.ts +3 -0
  98. package/dist/components/custom/watercolor-dot/prng.d.ts +5 -0
  99. package/dist/components/custom/watercolor-dot/useWatercolorBlob.d.ts +24 -0
  100. package/dist/components/ui/_shared/menuItemVariants.d.ts +1 -1
  101. package/dist/components/ui/avatar/Avatar.vue.d.ts +1 -1
  102. package/dist/components/ui/avatar/AvatarImage.vue.d.ts +5 -1
  103. package/dist/components/ui/avatar/index.d.ts +1 -1
  104. package/dist/components/ui/badge/index.d.ts +2 -2
  105. package/dist/components/ui/button/Button.vue.d.ts +3 -1
  106. package/dist/components/ui/button/index.d.ts +2 -2
  107. package/dist/components/ui/carousel/CarouselNext.vue.d.ts +2 -2
  108. package/dist/components/ui/carousel/CarouselPrevious.vue.d.ts +2 -2
  109. package/dist/components/ui/combobox/Combobox.vue.d.ts +2 -2
  110. package/dist/components/ui/combobox/ComboboxInput.vue.d.ts +2 -1
  111. package/dist/components/ui/command/Command.vue.d.ts +3 -3
  112. package/dist/components/ui/command/CommandInput.vue.d.ts +2 -1
  113. package/dist/components/ui/data-table/DataTable.vue.d.ts +5 -4
  114. package/dist/components/ui/dialog/DialogContent.vue.d.ts +8 -0
  115. package/dist/components/ui/drawer/Drawer.vue.d.ts +4 -4
  116. package/dist/components/ui/input/Input.vue.d.ts +19 -1
  117. package/dist/components/ui/multi-select/MultiSelect.vue.d.ts +8 -4
  118. package/dist/components/ui/progress/Progress.vue.d.ts +26 -88
  119. package/dist/components/ui/progress/ProgressDefault.vue.d.ts +14 -0
  120. package/dist/components/ui/progress/ProgressGradient.vue.d.ts +25 -0
  121. package/dist/components/ui/progress/ProgressSectioned.vue.d.ts +36 -0
  122. package/dist/components/ui/progress/index.d.ts +5 -2
  123. package/dist/components/ui/progress/useProgressGeometry.d.ts +60 -0
  124. package/dist/components/ui/select/Select.vue.d.ts +2 -2
  125. package/dist/components/ui/select/SelectContent.vue.d.ts +1 -1
  126. package/dist/components/ui/select/SelectTrigger.vue.d.ts +3 -0
  127. package/dist/components/ui/sheet/index.d.ts +1 -1
  128. package/dist/components/ui/slider/index.d.ts +12 -11
  129. package/dist/components/ui/tags-input/TagsInput.vue.d.ts +2 -2
  130. package/dist/components/ui/textarea/Textarea.vue.d.ts +5 -1
  131. package/dist/components/ui/toast/Toast.vue.d.ts +4 -4
  132. package/dist/components/ui/toggle/Toggle.vue.d.ts +1 -1
  133. package/dist/components/ui/toggle/index.d.ts +1 -1
  134. package/dist/components/ui/toggle-group/toggleGroupContext.d.ts +2 -3
  135. package/dist/composables/color/index.d.ts +49 -0
  136. package/dist/composables/context/createContext.d.ts +56 -0
  137. package/dist/composables/context/index.d.ts +1 -0
  138. package/dist/composables/dark/darkModeSyncScript.d.ts +23 -0
  139. package/dist/composables/dark/index.d.ts +3 -0
  140. package/dist/composables/dark/useGlobalDark.d.ts +19 -2
  141. package/dist/composables/dom/index.d.ts +0 -3
  142. package/dist/composables/dom/useClipboard.d.ts +35 -12
  143. package/dist/composables/dom/useDocumentVisibility.d.ts +20 -0
  144. package/dist/composables/glass/webgl/compile.d.ts +15 -0
  145. package/dist/composables/glass/webgl/shaders/procedural-color.glsl.d.ts +3 -0
  146. package/dist/composables/glass/webgl/useWebGLCanvas.d.ts +55 -0
  147. package/dist/composables/motion/core/index.d.ts +1 -1
  148. package/dist/composables/motion/index.d.ts +1 -1
  149. package/dist/composables/motion/useCountup.d.ts +29 -0
  150. package/dist/composables/motion/useNumericTransition.d.ts +14 -3
  151. package/dist/composables/motion/vReveal.d.ts +2 -0
  152. package/dist/composables/sidebar/useSidebarState.d.ts +2 -2
  153. package/dist/composables/sortable/dragController.d.ts +44 -0
  154. package/dist/composables/sortable/dropResolver.d.ts +34 -0
  155. package/dist/composables/sortable/ghostRenderer.d.ts +44 -0
  156. package/dist/composables/sortable/index.d.ts +1 -1
  157. package/dist/composables/sortable/touchGate.d.ts +26 -0
  158. package/dist/composables/sortable/transitionTiming.d.ts +50 -0
  159. package/dist/composables/sortable/types.d.ts +133 -0
  160. package/dist/composables/sortable/useSortable.d.ts +25 -153
  161. package/dist/configurator.js +1 -1
  162. package/dist/confirm-dialog.js +1 -1
  163. package/dist/controls.js +4 -4
  164. package/dist/createContext-DBMGRlx4.js +25 -0
  165. package/dist/dark.d.ts +2 -1
  166. package/dist/dark.js +9 -2
  167. package/dist/data-table.js +1 -1
  168. package/dist/dialog.js +1 -1
  169. package/dist/disco-glyph.js +1 -1
  170. package/dist/dock.js +400 -261
  171. package/dist/dockContext-spUj_-E5.js +9 -0
  172. package/dist/dom.js +6 -6
  173. package/dist/{dropdown-menu-naE0skDg.js → dropdown-menu-EFjl5iKo.js} +1 -1
  174. package/dist/dropdown-menu.js +1 -1
  175. package/dist/expandable-container.js +26 -20
  176. package/dist/fonts/README.md +21 -0
  177. package/dist/fonts/fraunces/fraunces-latin.woff2 +0 -0
  178. package/dist/forms.js +68 -59
  179. package/dist/glass-panel.js +1 -1
  180. package/dist/glass-ui.css +1 -1
  181. package/dist/glass-ui.js +226 -328
  182. package/dist/glyph-face.js +2 -2
  183. package/dist/goo-blob.d.ts +1 -0
  184. package/dist/goo-blob.js +538 -0
  185. package/dist/header-ribbon.js +2 -2
  186. package/dist/hover-card.js +1 -1
  187. package/dist/hover-popover.js +1 -1
  188. package/dist/icon-tooltip.js +1 -1
  189. package/dist/index.d.ts +1 -0
  190. package/dist/instrument-chassis.js +1 -1
  191. package/dist/instrument-rail.js +1 -1
  192. package/dist/keys-BFoma9vm.js +9 -0
  193. package/dist/label.js +1 -1
  194. package/dist/labeled-field.js +57 -39
  195. package/dist/metric-badge.js +1 -1
  196. package/dist/motion-core.js +82 -123
  197. package/dist/motion.js +62 -14
  198. package/dist/number-field.js +1 -1
  199. package/dist/paper-backdrop.js +1 -1
  200. package/dist/popover.js +1 -1
  201. package/dist/{presets-BpTf63Hp.js → presets-1OhFpaIC.js} +1 -1
  202. package/dist/prng-Bz_1Tydc.js +15 -0
  203. package/dist/progress.js +2 -2
  204. package/dist/reactive.js +2 -2
  205. package/dist/responsive-tabs.js +38 -32
  206. package/dist/scrolling-text.js +1 -1
  207. package/dist/search.js +8 -8
  208. package/dist/select.js +3 -3
  209. package/dist/separator.js +1 -1
  210. package/dist/sheet.js +1 -1
  211. package/dist/{slider-wx8ifVFB.js → slider-BOh8ycfZ.js} +7 -11
  212. package/dist/slider.js +1 -1
  213. package/dist/sortable-list.js +36 -38
  214. package/dist/stacked-icons.js +2 -2
  215. package/dist/styles/animations.css +1 -1
  216. package/dist/styles/cards.css +1 -1
  217. package/dist/styles/components.css +1 -1
  218. package/dist/styles/dock-controls.css +486 -0
  219. package/dist/styles/dock.css +284 -450
  220. package/dist/styles/fonts.css +25 -0
  221. package/dist/styles/glass-specular-track.css +154 -0
  222. package/dist/styles/glass.css +74 -2
  223. package/dist/styles/index.css +21 -2
  224. package/dist/styles/instrument-chassis.css +11 -4
  225. package/dist/styles/theme.css +73 -21
  226. package/dist/styles/tokens.css +271 -140
  227. package/dist/styles/typography.css +14 -8
  228. package/dist/styles/utilities.css +36 -8
  229. package/dist/styles/view-transition.css +10 -4
  230. package/dist/switch.js +1 -1
  231. package/dist/tabs.js +139 -112
  232. package/dist/timeline.js +219 -158
  233. package/dist/toast.js +1 -1
  234. package/dist/toggle-group.js +1 -1
  235. package/dist/tokens.d.ts +1 -1
  236. package/dist/tooltip.js +1 -1
  237. package/dist/{useAnimatedNumber-BOxrS3a6.js → useAnimatedNumber-BF6r64lA.js} +1 -1
  238. package/dist/useClipboard-D8vFyRCa.js +97 -0
  239. package/dist/{useConfiguratorState-Dq2gNv4A.js → useConfiguratorState-DUtC1jxr.js} +82 -86
  240. package/dist/useGlobalDark-CWiaCoEw.js +34 -0
  241. package/dist/useIntersectionPause-DAdVPVp4.js +53 -0
  242. package/dist/useSortable-DnyGXKKY.js +246 -0
  243. package/dist/{useTouchGate-XX8gHfay.js → useTouchGate-CS5Csc2h.js} +1 -1
  244. package/dist/utils/prng.d.ts +4 -0
  245. package/dist/vReveal-u2wSG2El.js +35 -0
  246. package/dist/watercolor-dot.d.ts +1 -0
  247. package/dist/watercolor-dot.js +129 -0
  248. package/package.json +101 -16
  249. package/src/fonts/README.md +21 -0
  250. package/src/fonts/fraunces/fraunces-latin.woff2 +0 -0
  251. package/src/styles/animations.css +1 -1
  252. package/src/styles/cards.css +1 -1
  253. package/src/styles/dock-controls.css +486 -0
  254. package/src/styles/dock.css +284 -450
  255. package/src/styles/fonts.css +25 -0
  256. package/src/styles/glass-specular-track.css +154 -0
  257. package/src/styles/glass.css +74 -2
  258. package/src/styles/index.css +21 -2
  259. package/src/styles/instrument-chassis.css +11 -4
  260. package/src/styles/theme.css +73 -21
  261. package/src/styles/tokens.css +271 -140
  262. package/src/styles/typography.css +14 -8
  263. package/src/styles/utilities.css +36 -8
  264. package/src/styles/view-transition.css +10 -4
  265. package/dist/DataTable-BsrDYdoE.js +0 -460
  266. package/dist/DialogContent-B61rP8lj.js +0 -93
  267. package/dist/HoverPopover-BlEwqG7S.js +0 -96
  268. package/dist/Input-IFsIzId2.js +0 -30
  269. package/dist/Progress-Bs44qWEM.js +0 -126
  270. package/dist/UnderlineTabs-B4FV2zi_.js +0 -37
  271. package/dist/components/custom/aurora/shaders/aurora.frag.d.ts +0 -1
  272. package/dist/composables/dom/useBreakpoint.d.ts +0 -38
  273. package/dist/composables/dom/useIdleReady.d.ts +0 -63
  274. package/dist/composables/dom/useViewportReady.d.ts +0 -87
  275. package/dist/composables/glass/webgl/frostShader.d.ts +0 -27
  276. package/dist/composables/motion/useAnimatedNumberMap.d.ts +0 -29
  277. package/dist/composables/motion/useStagger.d.ts +0 -50
  278. package/dist/dockContext-DM58L1Jt.js +0 -16
  279. package/dist/keys-SIKQYNx1.js +0 -11
  280. package/dist/supportsCssTimeline-IQY3gfKD.js +0 -12
  281. package/dist/useGlobalDark-BUUTZvkU.js +0 -24
  282. package/dist/useIdleReady-sLhGo6CL.js +0 -162
  283. package/dist/useIntersectionPause-CUmANkoc.js +0 -39
  284. package/dist/useSortable-DLK9kwZp.js +0 -189
  285. /package/dist/{HoverCardContent-DGUhpRVt.js → HoverCardContent-ICfIMZX1.js} +0 -0
  286. /package/dist/{InstrumentChassis-CqKPBNqp.js → InstrumentChassis-DaHIZCqy.js} +0 -0
  287. /package/dist/{InstrumentRail-CCjvKkpB.js → InstrumentRail-B0qqLFN0.js} +0 -0
  288. /package/dist/{Label-D53EOwLE.js → Label-CZk-3nTc.js} +0 -0
  289. /package/dist/{PaperBackdrop-Ds-wDsKf.js → PaperBackdrop-D_YZW47j.js} +0 -0
  290. /package/dist/{SelectGroup-DAgcsfFw.js → SelectGroup-CMdoCjRE.js} +0 -0
  291. /package/dist/{SelectSeparator-DN1jzLaI.js → SelectSeparator-CaJnPF3_.js} +0 -0
  292. /package/dist/{Separator-DXxac0j8.js → Separator-C2XtAXRp.js} +0 -0
  293. /package/dist/{Switch-imA0Hdjs.js → Switch-x8n6husW.js} +0 -0
  294. /package/dist/{Toaster-Brs6QjBU.js → Toaster-DdhMKfus.js} +0 -0
  295. /package/dist/{TooltipProvider-MZFRxOvT.js → TooltipProvider-D-JrSqDu.js} +0 -0
  296. /package/dist/components/custom/aurora/{renderMode.d.ts → constants/renderMode.d.ts} +0 -0
  297. /package/dist/components/custom/aurora/{shaders → constants/shaders}/aurora.vert.d.ts +0 -0
  298. /package/dist/{constants-DfWPi8kh.js → constants-DsCdlK9I.js} +0 -0
  299. /package/dist/{sheet-BnvZRXPq.js → sheet-CQYYrkr9.js} +0 -0
  300. /package/dist/{useGlassRenderer-C98tZnJ7.js → useGlassRenderer-Dn3WpfG-.js} +0 -0
  301. /package/dist/{useInterval-B58LmYth.js → useInterval-CHVYFpXV.js} +0 -0
  302. /package/dist/{useResizeObserver-C_7GjpRn.js → useResizeObserver-DX-STszm.js} +0 -0
  303. /package/dist/{useTextHighlight-CLST6an0.js → useTextHighlight-Dmtofpk2.js} +0 -0
  304. /package/dist/{useTimer-6FoosoDY.js → useTimer-DGgoxTXL.js} +0 -0
  305. /package/dist/{useUserInvalidAria-BW5iyqWR.js → useUserInvalidAria-DmvZ_6Dx.js} +0 -0
  306. /package/dist/{useViewTransition-CUJM7fXT.js → useViewTransition-D4ssvnXZ.js} +0 -0
@@ -41,7 +41,7 @@
41
41
  typography.css.
42
42
  ═══════════════════════════════════════════════ */
43
43
  --font-stack-display: "Fraunces", Georgia, serif;
44
- --font-stack-serif: "Computer Modern Serif", "Latin Modern Roman", "CMU Serif", Georgia, serif;
44
+ --font-stack-serif: "Fraunces", Georgia, "Times New Roman", serif;
45
45
  --font-stack-sans: "Helvetica Neue", "Arial Nova", Arial, system-ui, sans-serif;
46
46
  /* AC.W6b (v1.5.0) — self-hosted Fira Code engages by default for
47
47
  every glass-ui consumer. The calibrated "Fira Code Fallback"
@@ -143,9 +143,10 @@
143
143
 
144
144
  iOS-canonical (response, dampingFraction) per AL-X4 §3:
145
145
  smooth: (0.50s, ζ=0.86) — gentle settle, sub-perceptual overshoot ~0.5%
146
- snappy: (0.35s, ζ=0.85) — quick crisp, micro-overshoot
147
- bouncy: (0.50s, ζ=0.65) — emphatic overshoot ~7%
146
+ snappy: (0.35s, ζ=0.65) — quick crisp, overshoot ~+6.8%
147
+ bouncy: (0.50s, ζ=0.45) — emphatic overshoot ~+20.5%
148
148
  gentle: (0.70s, ζ=1.00) — patient critically-damped
149
+ dock: (0.50s, ζ=0.50) — dock expand/collapse morph, overshoot ~+18.5%
149
150
 
150
151
  Note on `smooth`: at ζ=0.86 the analytic solver produces a peak
151
152
  of 1.00498 (+0.5%) at the 24% slot — mathematically present but
@@ -159,6 +160,7 @@
159
160
  --spring-snappy: linear(0, 0.10438 2.041%, 0.32622 4.082%, 0.56668 6.122%, 0.77153 8.163%, 0.91961 10.204%, 1.01073 12.245%, 1.05549 14.286%, 1.06804 16.327%, 1.06171 18.367%, 1.04686 20.408%, 1.03044 22.449%, 1.01629 24.490%, 1.00596 26.531%, 0.99954 28.571%, 0.99633 30.612%, 0.99537 32.653%, 0.99575 34.694%, 0.99674 36.735%, 0.99786 38.776%, 0.99884 40.816%, 0.99956 42.857%, 1.00001 44.898%, 1.00024 46.939%, 1.00000 48.980%, 1.00000 51.020%, 1.00000 53.061%, 1.00000 55.102%, 1.00000 57.143%, 1.00000 59.184%, 1.00000 61.224%, 1.00000 63.265%, 1.00000 65.306%, 1.00000 67.347%, 1.00000 69.388%, 1.00000 71.429%, 1.00000 73.469%, 1.00000 75.510%, 1.00000 77.551%, 1.00000 79.592%, 1.00000 81.633%, 1.00000 83.673%, 1.00000 85.714%, 1.00000 87.755%, 1.00000 89.796%, 1.00000 91.837%, 1.00000 93.878%, 1.00000 95.918%, 1.00000 97.959%, 1);
160
161
  --spring-bouncy: linear(0, 0.11105 2.041%, 0.36430 4.082%, 0.65496 6.122%, 0.90929 8.163%, 1.08828 10.204%, 1.18289 12.245%, 1.20482 14.286%, 1.17641 16.327%, 1.12214 18.367%, 1.06276 20.408%, 1.01239 22.449%, 0.97809 24.490%, 0.96099 26.531%, 0.95826 28.571%, 0.96514 30.612%, 0.97666 32.653%, 0.98873 34.694%, 0.99867 36.735%, 1.00520 38.776%, 1.00825 40.816%, 1.00847 42.857%, 1.00686 44.898%, 1.00443 46.939%, 1.00199 48.980%, 1.00004 51.020%, 0.99880 53.061%, 0.99827 55.102%, 0.99829 57.143%, 0.99866 59.184%, 0.99916 61.224%, 0.99966 63.265%, 1.00004 65.306%, 1.00027 67.347%, 1.00000 69.388%, 1.00000 71.429%, 1.00000 73.469%, 1.00000 75.510%, 1.00000 77.551%, 1.00000 79.592%, 1.00000 81.633%, 1.00000 83.673%, 1.00000 85.714%, 1.00000 87.755%, 1.00000 89.796%, 1.00000 91.837%, 1.00000 93.878%, 1.00000 95.918%, 1.00000 97.959%, 1);
161
162
  --spring-gentle: linear(0, 0.09415 2.041%, 0.27374 4.082%, 0.45506 6.122%, 0.60779 8.163%, 0.72570 10.204%, 0.81213 12.245%, 0.87336 14.286%, 0.91570 16.327%, 0.94445 18.367%, 0.96371 20.408%, 0.97645 22.449%, 0.98481 24.490%, 0.99025 26.531%, 0.99377 28.571%, 0.99604 30.612%, 0.99749 32.653%, 0.99841 34.694%, 0.99900 36.735%, 0.99937 38.776%, 0.99961 40.816%, 0.99975 42.857%, 0.99985 44.898%, 1.00000 46.939%, 1.00000 48.980%, 1.00000 51.020%, 1.00000 53.061%, 1.00000 55.102%, 1.00000 57.143%, 1.00000 59.184%, 1.00000 61.224%, 1.00000 63.265%, 1.00000 65.306%, 1.00000 67.347%, 1.00000 69.388%, 1.00000 71.429%, 1.00000 73.469%, 1.00000 75.510%, 1.00000 77.551%, 1.00000 79.592%, 1.00000 81.633%, 1.00000 83.673%, 1.00000 85.714%, 1.00000 87.755%, 1.00000 89.796%, 1.00000 91.837%, 1.00000 93.878%, 1.00000 95.918%, 1.00000 97.959%, 1);
163
+ --spring-dock: linear(0, 0.10932 2.041%, 0.35412 4.082%, 0.63074 6.122%, 0.87072 8.163%, 1.04044 10.204%, 1.13391 12.245%, 1.16292 14.286%, 1.14748 16.327%, 1.10854 18.367%, 1.06337 20.408%, 1.02357 22.449%, 0.99499 24.490%, 0.97889 26.531%, 0.97350 28.571%, 0.97561 30.612%, 0.98178 32.653%, 0.98915 34.694%, 0.99574 36.735%, 1.00055 38.776%, 1.00332 40.816%, 1.00431 42.857%, 1.00403 44.898%, 1.00305 46.939%, 1.00186 48.980%, 1.00076 51.020%, 0.99996 53.061%, 0.99948 55.102%, 0.99930 57.143%, 0.99933 59.184%, 0.99949 61.224%, 0.99968 63.265%, 0.99986 65.306%, 1.00000 67.347%, 1.00008 69.388%, 1.00000 71.429%, 1.00000 73.469%, 1.00000 75.510%, 1.00000 77.551%, 1.00000 79.592%, 1.00000 81.633%, 1.00000 83.673%, 1.00000 85.714%, 1.00000 87.755%, 1.00000 89.796%, 1.00000 91.837%, 1.00000 93.878%, 1.00000 95.918%, 1.00000 97.959%, 1);
162
164
 
163
165
  /* Core cubic-bezier (exits, fallbacks, non-spring uses) */
164
166
  --motion-ease-standard: cubic-bezier(0.4, 0, 0.2, 1);
@@ -284,29 +286,12 @@
284
286
  --z-max: 9999;
285
287
  --z-debug: 99999;
286
288
 
287
- /* ═══════════════════════════════════════════════
288
- §4 BORDER RADIUS — 0.625rem base (warm-cream identity)
289
- ═══════════════════════════════════════════════ */
290
- --radius: 0.625rem;
291
- --radius-xs: 4px;
292
- --radius-sm: 4px;
293
- --radius-md: 6px;
294
- --radius-lg: var(--radius);
295
- --radius-xl: 12px;
296
- --radius-2xl: 1rem;
297
- --radius-pill: 9999px;
298
-
299
- /* Semantic aliases */
300
- --radius-card: var(--radius-2xl);
301
- --radius-panel: var(--radius-xl);
302
- --radius-dialog: var(--radius-2xl);
303
- --radius-input: var(--radius);
304
- --radius-button: var(--radius);
305
- --radius-badge: var(--radius-pill);
306
- --radius-dock: var(--radius-pill);
307
- /* Tooltip alias — semantic handle for the lg rung; consumed by W2 ui/tooltip
308
- migration (currently inline `rounded-lg`). R5 vocab.γ gap row 5. */
309
- --radius-tooltip: var(--radius-lg);
289
+ /* §4 BORDER RADIUS — authored ONCE in theme.css's leading plain @theme
290
+ block (AV.W16 TW1). A plain @theme mints each `--radius-*` as a global
291
+ :root var, so the `var(--radius-card)` recipe reads across this file
292
+ resolve from that source. The prior §4 twin here doubled the override
293
+ surface (the anti-pattern the @theme-inline migration kills) — excised;
294
+ retune the scale at theme.css. */
310
295
 
311
296
  /* ═══════════════════════════════════════════════
312
297
  §5 COLOR PALETTE — Warm cream / muted black
@@ -436,42 +421,45 @@
436
421
  /* ═══════════════════════════════════════════════
437
422
  §6 SECTION PALETTE — 13-stop jewel tones (light)
438
423
  ═══════════════════════════════════════════════ */
439
- --section-color-0: hsl(334 63% 47%); /* rose */
440
- --section-color-1: hsl(272 44% 47%); /* purple */
441
- --section-color-2: hsl(224 58% 46%); /* indigo */
442
- --section-color-3: hsl(194 62% 36%); /* teal-cyan */
443
- --section-color-4: hsl(163 46% 35%); /* forest */
444
- --section-color-5: hsl(35 70% 42%); /* amber */
445
- --section-color-6: hsl(6 72% 49%); /* tomato-red */
446
- --section-color-7: hsl(286 46% 47%); /* violet */
447
- --section-color-8: hsl(342 62% 44%); /* ruby */
448
- --section-color-9: hsl(205 20% 38%); /* slate-blue */
449
- --section-color-10: hsl(86 38% 36%); /* olive */
450
- --section-color-11: hsl(187 58% 39%); /* ocean */
451
- --section-color-12: hsl(256 44% 52%); /* periwinkle */
424
+ /* AV.W16 TW2 — oklch ramp (perceptually-even L; hue preserved from the
425
+ prior hsl() cadence). Categorical jewel tones — distinct hues, not a
426
+ monotone scale. Authored as oklch pairs with the .dark mirror. */
427
+ --section-color-0: oklch(0.552 0.192 359.8); /* rose */
428
+ --section-color-1: oklch(0.502 0.165 305.9); /* purple */
429
+ --section-color-2: oklch(0.484 0.163 265.5); /* indigo */
430
+ --section-color-3: oklch(0.542 0.089 222.8); /* teal-cyan */
431
+ --section-color-4: oklch(0.551 0.088 171.1); /* forest */
432
+ --section-color-5: oklch(0.623 0.124 69.6); /* amber */
433
+ --section-color-6: oklch(0.579 0.201 30.4); /* tomato-red */
434
+ --section-color-7: oklch(0.532 0.180 317.5); /* violet */
435
+ --section-color-8: oklch(0.520 0.176 8.4); /* ruby */
436
+ --section-color-9: oklch(0.492 0.038 239.6); /* slate-blue */
437
+ --section-color-10: oklch(0.556 0.103 128.8); /* olive */
438
+ --section-color-11: oklch(0.601 0.092 208.0); /* ocean */
439
+ --section-color-12: oklch(0.513 0.163 291.9); /* periwinkle */
452
440
 
453
441
  /* Accent colors */
454
- --accent-pink: hsl(330 65% 55%);
455
- --section-heading: hsl(328 60% 46%);
456
- --accent-red: hsl(0 72% 50%);
442
+ --accent-pink: oklch(0.613 0.197 353.8);
443
+ --section-heading: oklch(0.545 0.189 352.8);
444
+ --accent-red: oklch(0.574 0.216 27.5);
457
445
 
458
446
  /* ═══════════════════════════════════════════════
459
447
  §6b VIZ BASIS — core brand hues
460
448
  ═══════════════════════════════════════════════ */
461
- --viz-fourier: hsl(6 72% 49%);
462
- --viz-chebyshev: hsl(224 58% 46%);
463
- --viz-legendre: hsl(286 46% 47%);
449
+ --viz-fourier: oklch(0.579 0.201 30.4);
450
+ --viz-chebyshev: oklch(0.484 0.163 265.5);
451
+ --viz-legendre: oklch(0.532 0.180 317.5);
464
452
  --viz-amber: var(--section-color-5);
465
453
  --viz-green: var(--section-color-4);
466
454
 
467
455
  /* Semantic UI accents */
468
- --tier-featured: hsl(45 100% 50%);
469
- --tier-saved: hsl(210 100% 60%);
470
- --like: hsl(0 80% 60%);
471
- --success: hsl(142 71% 45%);
472
- --warning: hsl(38 92% 50%);
473
- --info: hsl(217 91% 60%);
474
- --delete: hsl(0 70% 55%);
456
+ --tier-featured: oklch(0.841 0.173 84.2);
457
+ --tier-saved: oklch(0.676 0.176 252.3);
458
+ --like: oklch(0.633 0.200 24.9);
459
+ --success: oklch(0.720 0.192 149.5);
460
+ --warning: oklch(0.770 0.165 70.6);
461
+ --info: oklch(0.626 0.186 259.6);
462
+ --delete: oklch(0.597 0.198 25.5);
475
463
 
476
464
  /* Semantic foregrounds — text/glyph atop --success/--warning/--info plates.
477
465
  Notification.vue currently hardcodes `text-white`/`text-foreground`
@@ -596,7 +584,14 @@
596
584
  --glass-blur-quiet-radius: 10px;
597
585
  --glass-blur-resting-radius: 12px;
598
586
  --glass-blur-floating-radius: 16px;
599
- --glass-blur-overlay-radius: 24px;
587
+ /* AV.W7 F2 — clamped from 24px into the 8–15px budget band. A blur radius
588
+ past ~20px is exponentially costlier (`backdrop-filter` is glass-ui's most
589
+ expensive idiom — the radius is the dominant cost). 15px is the band
590
+ ceiling; the lower rungs (wash/quiet/resting 1/10/12) sit in-band and the
591
+ floating 16px is the design ceiling at the band edge (left as-is). A
592
+ high-resolution display restores the richer 24px wash via the @media arm
593
+ below — the cost is amortised by the extra device pixels. */
594
+ --glass-blur-overlay-radius: 15px;
600
595
  /* Dock blur radius — 11px, paired with the 0.42 opacity below: a crisp
601
596
  glass pill (the iOS Control Center register), not a feathered wash.
602
597
  The dock composes `blur()` only (no saturate); the
@@ -605,7 +600,14 @@
605
600
  --glass-blur-dock-radius: 11px;
606
601
 
607
602
  --glass-blur-wash: blur(var(--glass-blur-wash-radius)) saturate(1.05);
608
- --glass-blur-quiet: blur(var(--glass-blur-quiet-radius));
603
+ /* AV.W15 M1 — the `quiet` rung gained `saturate(1.05) brightness(1.02)`
604
+ so the lower ladder reads with the same saturation life as `resting`+
605
+ (Apple: Liquid Glass concentrates light, it does not desaturate). The
606
+ `brightness(1.02)` is the small lift the spec names — it lands `quiet`
607
+ between bare `wash` and `resting` without over-brightening the rung.
608
+ The `prefers-reduced-transparency: reduce` bracket at glass.css maps
609
+ `--glass-blur-quiet: none`, so this whole chain drops with the blur. */
610
+ --glass-blur-quiet: blur(var(--glass-blur-quiet-radius)) saturate(1.05) brightness(1.02);
609
611
  --glass-blur-resting: blur(var(--glass-blur-resting-radius)) saturate(1.05);
610
612
  --glass-blur-floating: blur(var(--glass-blur-floating-radius)) saturate(1.4);
611
613
  --glass-blur-overlay: blur(var(--glass-blur-overlay-radius)) saturate(1.5);
@@ -683,6 +685,21 @@
683
685
  --glass-specular: inset 0 1.5px 0 0 hsl(0 0% 100% / 0.45);
684
686
  --glass-specular-dark: inset 0 1.5px 0 0 hsl(0 0% 100% / 0.30);
685
687
 
688
+ /* AV.W15 M3 — Full-perimeter rim light (the "rim that defines the
689
+ silhouette", WWDC25 sess. 219). Distinct from the top-only
690
+ `--glass-highlight` (a 0.5px top-edge catch-light): this is a 0.75px
691
+ inset ring around the WHOLE silhouette, four edges, reading as the
692
+ catch-light that wraps the glass plate the way iOS-26 Liquid Glass
693
+ carries a rim, not just a top highlight. Composed as a SECOND inset
694
+ box-shadow layer alongside `--glass-highlight` on the floating/dock
695
+ tiers (glass.css wires it). The alpha is deliberately low (0.18 light
696
+ / 0.10 dark) — the rim is decoration and must not eat AA legibility
697
+ over a busy backdrop; it sits below the perceptual reading threshold
698
+ on text. The `-dark` companion is overridden inside `.dark` mirroring
699
+ the `--glass-specular-dark` precedent. */
700
+ --glass-edge-light: inset 0 0 0 0.75px hsl(0 0% 100% / 0.18);
701
+ --glass-edge-light-dark: inset 0 0 0 0.75px hsl(0 0% 100% / 0.10);
702
+
686
703
  /* Chassis curvature illusion — a subtle radial gradient at the chassis
687
704
  top centre that lifts the surface without committing to literal 3D.
688
705
  Composed into <InstrumentChassis>'s background stack. */
@@ -826,6 +843,15 @@
826
843
  --dock-max-inline-size: min(80vw, 64rem);
827
844
  --dock-max-block-size: min(80vh, 48rem);
828
845
 
846
+ /* AT.W7-dock-a — the `overflow="wrap"` desktop snap-back breakpoint, named
847
+ once. Below this viewport width a wrap-mode dock reads as a multi-row pill
848
+ that narrows to the viewport gutter; at/above it the pill snaps back to a
849
+ single nowrap row. The single source-of-record for the threshold the
850
+ `@media` in dock.css realizes (a `var()` cannot drive a media-query
851
+ feature in Baseline CSS, so the MQ carries the literal value of THIS
852
+ token; consumers reading the breakpoint do so through this name). */
853
+ --dock-overflow-bp: 640px;
854
+
829
855
  /* AB.W1.T1 — chassis max-block-size guardrail.
830
856
  Maximum block size a centred consumer-app card may consume while
831
857
  preserving the inline dock footprint. The recipe subtracts the
@@ -857,6 +883,9 @@
857
883
  --max-width-input: 24rem;
858
884
  --input-min-width-sm: 5rem;
859
885
  --min-width-input-sm: var(--input-min-width-sm);
886
+ /* AU.W8b.4 — canonical popover width (Combobox list + anchor). Lifts the
887
+ `w-[200px]` arbitrary-value wrap to the `w-popover` @theme utility. */
888
+ --popover-width: 200px;
860
889
  --chart-height-compact: 15rem;
861
890
  --chart-height-default: 22.5rem;
862
891
  --chart-height-large: 25rem;
@@ -980,12 +1009,19 @@
980
1009
  --scale-hover: 1.08;
981
1010
  --scale-hover-dock: 1.1;
982
1011
  --scale-press: 0.96;
983
- --scale-press-dock: 0.92;
984
1012
 
985
1013
  /* Press-scale rungs. `--scale-press` (0.96) is the canonical iOS Liquid
986
1014
  Glass press value every primitive reaches for unless it has a documented
987
1015
  reason (DESIGN.md §L3); `--scale-press-btn` aliases the slightly-softer
988
- `--scale-press-sm` (0.97) the button + slider recipes consume. */
1016
+ `--scale-press-sm` (0.97) the button + slider recipes consume.
1017
+
1018
+ AT.W7-dock-b — press canon. `--scale-press-dock` previously hard-coded a
1019
+ deeper 0.92 (a second magic press value with no documented rationale),
1020
+ so a dock control pressed visibly harder than every other primitive. It
1021
+ now references the canonical `--scale-press` (0.96) — ONE source for the
1022
+ press scale across the system. A consumer wanting the dock's old deeper
1023
+ press overrides `--scale-press-dock` on the dock instance. */
1024
+ --scale-press-dock: var(--scale-press);
989
1025
  --scale-press-sm: 0.97;
990
1026
  --scale-press-btn: var(--scale-press-sm);
991
1027
  --opacity-disabled: 0.5;
@@ -1012,32 +1048,33 @@
1012
1048
  /* ═══════════════════════════════════════════════
1013
1049
  §13 GOLD (accent family kept for consumers using it)
1014
1050
  ═══════════════════════════════════════════════ */
1015
- --gold: hsl(43 74% 49%);
1016
- --gold-light: hsl(51 100% 50%);
1017
- --gold-dark: hsl(34 87% 38%);
1051
+ --gold: oklch(0.751 0.147 84.2);
1052
+ --gold-light: oklch(0.890 0.183 96.1);
1053
+ --gold-dark: oklch(0.599 0.132 64.2);
1018
1054
 
1019
1055
  --color-gold: var(--gold);
1020
1056
  --color-gold-light: var(--gold-light);
1021
1057
  --color-gold-dark: var(--gold-dark);
1022
1058
 
1023
1059
  /* ═══════════════════════════════════════════════
1024
- §14 RAINBOW PALETTE
1060
+ §14 RAINBOW PALETTE — oklch (AV.W16 TW2; mode-independent, no .dark
1061
+ mirror; hue preserved from the prior hsl() cadence)
1025
1062
  ═══════════════════════════════════════════════ */
1026
- --rainbow-red: hsl(0 85% 60%);
1027
- --rainbow-orange: hsl(30 90% 55%);
1028
- --rainbow-yellow: hsl(55 90% 55%);
1029
- --rainbow-green: hsl(130 70% 50%);
1030
- --rainbow-blue: hsl(210 80% 55%);
1031
- --rainbow-indigo: hsl(260 70% 60%);
1032
- --rainbow-violet: hsl(300 75% 60%);
1033
-
1034
- --rainbow-pastel-red: hsl(0 50% 78%);
1035
- --rainbow-pastel-orange: hsl(25 55% 76%);
1036
- --rainbow-pastel-yellow: hsl(50 55% 78%);
1037
- --rainbow-pastel-green: hsl(130 35% 74%);
1038
- --rainbow-pastel-blue: hsl(220 45% 76%);
1039
- --rainbow-pastel-indigo: hsl(260 35% 76%);
1040
- --rainbow-pastel-violet: hsl(280 40% 78%);
1063
+ --rainbow-red: oklch(0.636 0.210 25.5);
1064
+ --rainbow-orange: oklch(0.737 0.163 58.9);
1065
+ --rainbow-yellow: oklch(0.900 0.183 103.7);
1066
+ --rainbow-green: oklch(0.772 0.233 144.8);
1067
+ --rainbow-blue: oklch(0.633 0.162 252.1);
1068
+ --rainbow-indigo: oklch(0.566 0.206 294.1);
1069
+ --rainbow-violet: oklch(0.684 0.250 327.9);
1070
+
1071
+ --rainbow-pastel-red: oklch(0.793 0.066 18.7);
1072
+ --rainbow-pastel-orange: oklch(0.823 0.059 57.3);
1073
+ --rainbow-pastel-yellow: oklch(0.889 0.068 98.1);
1074
+ --rainbow-pastel-green: oklch(0.826 0.072 149.5);
1075
+ --rainbow-pastel-blue: oklch(0.783 0.056 264.2);
1076
+ --rainbow-pastel-indigo: oklch(0.772 0.062 300.2);
1077
+ --rainbow-pastel-violet: oklch(0.799 0.070 314.4);
1041
1078
 
1042
1079
  /* ═══════════════════════════════════════════════
1043
1080
  §16 TIMELINE
@@ -1237,8 +1274,52 @@
1237
1274
  --top-layer-backdrop-dim: 0.5;
1238
1275
 
1239
1276
  --vt-duration: var(--duration-normal);
1240
- --vt-ease: var(--ease-apple-spring);
1277
+ /* AV.W3 C2 — the spring-coverage sweep: every spring-flavored transition
1278
+ reads a `--spring-*` token. `--ease-apple-spring`'s +27.5% overshoot maps
1279
+ to `--spring-bouncy` (the closest `linear()` overshoot stop-set), so the
1280
+ VT default and the cards/top-layer transitions share one spring primitive
1281
+ (CPU + GPU sample the same curve). The apple-spring cubic-bezier survives
1282
+ as a token DEFINITION only (a `@supports not (linear())` fallback seed). */
1283
+ --vt-ease: var(--spring-bouncy);
1241
1284
  --vt-rise: 8px;
1285
+
1286
+ /* AT.W6-dock-c / AU.W8 — the dock layer-swap morph timing, minted ONCE so
1287
+ both engine paths are timing-IDENTICAL: the FLIP fallback (via
1288
+ `--dock-motion-resize`), the native View-Transition group (its
1289
+ `animation-timing-function`), AND the runtime SpringProgress driver
1290
+ (AU.W8.3) consume this same `(0.5, 0.5)` source curve. Retires the AQ.W6
1291
+ fork where the VT path ran `--vt-ease` (apple-spring, +27.5% overshoot)
1292
+ while the FLIP ran the snappy spring. `--vt-ease` still defaults the
1293
+ other VT recipes (`.gl-list-item`).
1294
+
1295
+ AU.W8 — RETARGET snappy → dock. `--spring-snappy` (ζ=0.65, +6.8%) read as
1296
+ mechanical: a stiff plateau at ~48% with too little overshoot to feel
1297
+ alive ("not iOS-smooth"). `--spring-dock` ((0.5, 0.5), ~+18.5%) sits in
1298
+ the springy 15-30% band — the user-felt iOS bounce. The runtime driver's
1299
+ DOCK_SPRING const MIRRORS the (0.5, 0.5) PRESETS row, so the CSS token and
1300
+ the JS-driven morph are bit-identical. */
1301
+ --dock-resize-spring: var(--spring-dock);
1302
+
1303
+ /* AT.W7-dock-b — dock-control press micro-feedback spring. A TRANSFORM-ONLY
1304
+ spring (`scale`/`rotate`) the dock controls apply to their hover/press
1305
+ activation so the squish reads with a touch of spring-back rather than a
1306
+ flat ease. STRICTLY transform-scoped: it must never touch the surface-tier
1307
+ `[data-held]` fades (background/border/box-shadow), which stay on
1308
+ `--duration-fast var(--ease-standard)`. The duration pairs with
1309
+ `--duration-fast`; consumers retune the whole feel via this one token. */
1310
+ --dock-press-spring: var(--duration-fast) var(--spring-bouncy);
1311
+ }
1312
+
1313
+ /* AV.W7 F2 — high-resolution overlay-blur restore. On a 2dppx+ display the
1314
+ richer 24px overlay wash is amortised by the extra device pixels (the blur
1315
+ samples a denser backing store), so the design ceiling is restored where it
1316
+ is affordable. Standard-density displays keep the 15px budget radius set in
1317
+ §-1a `:root`. Token-only override — every overlay surface that reads
1318
+ `--glass-blur-overlay-radius` inherits the restored value automatically. */
1319
+ @media (min-resolution: 2dppx) {
1320
+ :root {
1321
+ --glass-blur-overlay-radius: 24px;
1322
+ }
1242
1323
  }
1243
1324
 
1244
1325
  /* ═══════════════════════════════════════════════
@@ -1302,29 +1383,30 @@
1302
1383
  re-specified as `accent-color` inside `.dark` per §2b. */
1303
1384
  --accent-color: light-dark(var(--primary), var(--ring));
1304
1385
 
1305
- /* Section palette — jewel tones brightened ~20% L for dark */
1306
- --section-color-0: light-dark(hsl(334 63% 47%), hsl(334 72% 70%));
1307
- --section-color-1: light-dark(hsl(272 44% 47%), hsl(272 54% 73%));
1308
- --section-color-2: light-dark(hsl(224 58% 46%), hsl(224 67% 72%));
1309
- --section-color-3: light-dark(hsl(194 62% 36%), hsl(194 61% 64%));
1310
- --section-color-4: light-dark(hsl(163 46% 35%), hsl(163 50% 60%));
1311
- --section-color-5: light-dark(hsl(35 70% 42%), hsl(37 73% 67%));
1312
- --section-color-6: light-dark(hsl(6 72% 49%), hsl(6 77% 66%));
1313
- --section-color-7: light-dark(hsl(286 46% 47%), hsl(286 58% 72%));
1314
- --section-color-8: light-dark(hsl(342 62% 44%), hsl(342 71% 69%));
1315
- --section-color-9: light-dark(hsl(205 20% 38%), hsl(205 24% 70%));
1316
- --section-color-10: light-dark(hsl(86 38% 36%), hsl(86 44% 63%));
1317
- --section-color-11: light-dark(hsl(187 58% 39%), hsl(187 63% 65%));
1318
- --section-color-12: light-dark(hsl(256 44% 52%), hsl(256 60% 74%));
1319
-
1320
- --accent-pink: light-dark(hsl(330 65% 55%), hsl(335 55% 65%));
1321
- --section-heading: light-dark(hsl(328 60% 46%), hsl(330 55% 68%));
1322
- --accent-red: light-dark(hsl(0 72% 50%), hsl(0 68% 62%));
1386
+ /* Section palette — jewel tones brightened L for dark (oklch pairs;
1387
+ AV.W16 TW2 — hue preserved, L evened) */
1388
+ --section-color-0: light-dark(oklch(0.552 0.192 359.8), oklch(0.721 0.145 354.0));
1389
+ --section-color-1: light-dark(oklch(0.502 0.165 305.9), oklch(0.733 0.113 308.2));
1390
+ --section-color-2: light-dark(oklch(0.484 0.163 265.5), oklch(0.718 0.107 268.4));
1391
+ --section-color-3: light-dark(oklch(0.542 0.089 222.8), oklch(0.767 0.091 219.9));
1392
+ --section-color-4: light-dark(oklch(0.551 0.088 171.1), oklch(0.776 0.105 172.6));
1393
+ --section-color-5: light-dark(oklch(0.623 0.124 69.6), oklch(0.813 0.109 78.2));
1394
+ --section-color-6: light-dark(oklch(0.579 0.201 30.4), oklch(0.693 0.151 28.1));
1395
+ --section-color-7: light-dark(oklch(0.532 0.180 317.5), oklch(0.739 0.134 318.1));
1396
+ --section-color-8: light-dark(oklch(0.520 0.176 8.4), oklch(0.709 0.142 2.3));
1397
+ --section-color-9: light-dark(oklch(0.492 0.038 239.6), oklch(0.763 0.032 239.0));
1398
+ --section-color-10: light-dark(oklch(0.556 0.103 128.8), oklch(0.794 0.116 127.9));
1399
+ --section-color-11: light-dark(oklch(0.601 0.092 208.0), oklch(0.805 0.095 206.7));
1400
+ --section-color-12: light-dark(oklch(0.513 0.163 291.9), oklch(0.719 0.115 295.6));
1401
+
1402
+ --accent-pink: light-dark(oklch(0.613 0.197 353.8), oklch(0.683 0.131 354.7));
1403
+ --section-heading: light-dark(oklch(0.545 0.189 352.8), oklch(0.711 0.123 349.3));
1404
+ --accent-red: light-dark(oklch(0.574 0.216 27.5), oklch(0.644 0.165 22.9));
1323
1405
 
1324
1406
  /* Viz basis (amber/green stay var()-aliases → auto-track) */
1325
- --viz-fourier: light-dark(hsl(6 72% 49%), hsl(6 77% 66%));
1326
- --viz-chebyshev: light-dark(hsl(224 58% 46%), hsl(224 67% 72%));
1327
- --viz-legendre: light-dark(hsl(286 46% 47%), hsl(286 58% 72%));
1407
+ --viz-fourier: light-dark(oklch(0.579 0.201 30.4), oklch(0.693 0.151 28.1));
1408
+ --viz-chebyshev: light-dark(oklch(0.484 0.163 265.5), oklch(0.718 0.107 268.4));
1409
+ --viz-legendre: light-dark(oklch(0.532 0.180 317.5), oklch(0.739 0.134 318.1));
1328
1410
 
1329
1411
  /* WCAG companion chart labels */
1330
1412
  --chart-ping-label: light-dark(oklch(0.40 0.18 230), oklch(0.85 0.12 230));
@@ -1333,13 +1415,13 @@
1333
1415
  --chart-jitter-label: light-dark(oklch(0.40 0.20 305), oklch(0.85 0.14 305));
1334
1416
 
1335
1417
  /* Semantic UI accents */
1336
- --tier-featured: light-dark(hsl(45 100% 50%), hsl(45 100% 60%));
1337
- --tier-saved: light-dark(hsl(210 100% 60%), hsl(210 100% 70%));
1338
- --like: light-dark(hsl(0 80% 60%), hsl(0 80% 68%));
1339
- --success: light-dark(hsl(142 71% 45%), hsl(142 71% 58%));
1340
- --warning: light-dark(hsl(38 92% 50%), hsl(38 92% 60%));
1341
- --info: light-dark(hsl(217 91% 60%), hsl(217 91% 70%));
1342
- --delete: light-dark(hsl(0 70% 55%), hsl(0 70% 62%));
1418
+ --tier-featured: light-dark(oklch(0.841 0.173 84.2), oklch(0.867 0.165 88.7));
1419
+ --tier-saved: light-dark(oklch(0.676 0.176 252.3), oklch(0.748 0.135 250.1));
1420
+ --like: light-dark(oklch(0.633 0.200 24.9), oklch(0.690 0.162 22.2));
1421
+ --success: light-dark(oklch(0.720 0.192 149.5), oklch(0.805 0.186 151.6));
1422
+ --warning: light-dark(oklch(0.770 0.165 70.6), oklch(0.809 0.150 76.6));
1423
+ --info: light-dark(oklch(0.626 0.186 259.6), oklch(0.713 0.138 259.5));
1424
+ --delete: light-dark(oklch(0.597 0.198 25.5), oklch(0.644 0.170 23.1));
1343
1425
 
1344
1426
  /* Semantic foregrounds (warning-foreground is identical both modes
1345
1427
  → stays a single light-mode declaration, no light-dark() needed) */
@@ -1351,9 +1433,9 @@
1351
1433
  --shadow-cartoon-color-soft: light-dark(rgb(0 0 0 / 0.06), rgb(255 255 255 / 0.03));
1352
1434
 
1353
1435
  /* Gold family */
1354
- --gold: light-dark(hsl(43 74% 49%), hsl(43 74% 55%));
1355
- --gold-light: light-dark(hsl(51 100% 50%), hsl(51 100% 55%));
1356
- --gold-dark: light-dark(hsl(34 87% 38%), hsl(34 87% 45%));
1436
+ --gold: light-dark(oklch(0.751 0.147 84.2), oklch(0.784 0.143 86.0));
1437
+ --gold-light: light-dark(oklch(0.890 0.183 96.1), oklch(0.898 0.182 97.4));
1438
+ --gold-dark: light-dark(oklch(0.599 0.132 64.2), oklch(0.678 0.150 63.8));
1357
1439
  }
1358
1440
  }
1359
1441
 
@@ -1417,28 +1499,29 @@
1417
1499
  --ring: hsl(48 10% 70%);
1418
1500
  --shadow: hsl(0 0% 5%);
1419
1501
 
1420
- /* Section palette — brightened for dark backgrounds */
1421
- --section-color-0: hsl(334 72% 70%);
1422
- --section-color-1: hsl(272 54% 73%);
1423
- --section-color-2: hsl(224 67% 72%);
1424
- --section-color-3: hsl(194 61% 64%);
1425
- --section-color-4: hsl(163 50% 60%);
1426
- --section-color-5: hsl(37 73% 67%);
1427
- --section-color-6: hsl(6 77% 66%);
1428
- --section-color-7: hsl(286 58% 72%);
1429
- --section-color-8: hsl(342 71% 69%);
1430
- --section-color-9: hsl(205 24% 70%);
1431
- --section-color-10: hsl(86 44% 63%);
1432
- --section-color-11: hsl(187 63% 65%);
1433
- --section-color-12: hsl(256 60% 74%);
1434
-
1435
- --accent-pink: hsl(335 55% 65%);
1436
- --section-heading: hsl(330 55% 68%);
1437
- --accent-red: hsl(0 68% 62%);
1438
-
1439
- --viz-fourier: hsl(6 77% 66%);
1440
- --viz-chebyshev: hsl(224 67% 72%);
1441
- --viz-legendre: hsl(286 58% 72%);
1502
+ /* Section palette — brightened for dark backgrounds (oklch; AV.W16 TW2 —
1503
+ mirrors the light-dark() dark halves above; hue preserved) */
1504
+ --section-color-0: oklch(0.721 0.145 354.0);
1505
+ --section-color-1: oklch(0.733 0.113 308.2);
1506
+ --section-color-2: oklch(0.718 0.107 268.4);
1507
+ --section-color-3: oklch(0.767 0.091 219.9);
1508
+ --section-color-4: oklch(0.776 0.105 172.6);
1509
+ --section-color-5: oklch(0.813 0.109 78.2);
1510
+ --section-color-6: oklch(0.693 0.151 28.1);
1511
+ --section-color-7: oklch(0.739 0.134 318.1);
1512
+ --section-color-8: oklch(0.709 0.142 2.3);
1513
+ --section-color-9: oklch(0.763 0.032 239.0);
1514
+ --section-color-10: oklch(0.794 0.116 127.9);
1515
+ --section-color-11: oklch(0.805 0.095 206.7);
1516
+ --section-color-12: oklch(0.719 0.115 295.6);
1517
+
1518
+ --accent-pink: oklch(0.683 0.131 354.7);
1519
+ --section-heading: oklch(0.711 0.123 349.3);
1520
+ --accent-red: oklch(0.644 0.165 22.9);
1521
+
1522
+ --viz-fourier: oklch(0.693 0.151 28.1);
1523
+ --viz-chebyshev: oklch(0.718 0.107 268.4);
1524
+ --viz-legendre: oklch(0.739 0.134 318.1);
1442
1525
  /* --viz-amber / --viz-green / --meter-track-stroke are pure var()-aliases
1443
1526
  (→ --section-color-5/-4 / --foreground) — DELETED (§2a); they auto-track
1444
1527
  their sources, which convert via §-1b. */
@@ -1451,13 +1534,13 @@
1451
1534
  --chart-upload-label: oklch(0.85 0.12 55);
1452
1535
  --chart-jitter-label: oklch(0.85 0.14 305);
1453
1536
 
1454
- --tier-featured: hsl(45 100% 60%);
1455
- --tier-saved: hsl(210 100% 70%);
1456
- --like: hsl(0 80% 68%);
1457
- --success: hsl(142 71% 58%);
1458
- --warning: hsl(38 92% 60%);
1459
- --info: hsl(217 91% 70%);
1460
- --delete: hsl(0 70% 62%);
1537
+ --tier-featured: oklch(0.867 0.165 88.7);
1538
+ --tier-saved: oklch(0.748 0.135 250.1);
1539
+ --like: oklch(0.690 0.162 22.2);
1540
+ --success: oklch(0.805 0.186 151.6);
1541
+ --warning: oklch(0.809 0.150 76.6);
1542
+ --info: oklch(0.713 0.138 259.5);
1543
+ --delete: oklch(0.644 0.170 23.1);
1461
1544
 
1462
1545
  /* Semantic foregrounds — off-white over dark plates. Mirrors the
1463
1546
  `--destructive-foreground` dark pattern (hsl 48 10% 90%). The warning
@@ -1497,16 +1580,20 @@
1497
1580
  /* Specular + curvature — softened for dark backdrops. Disco-grain stays
1498
1581
  at the same opacity ceiling; the dark grain blend already lifts it. */
1499
1582
  --glass-specular: inset 0 1.5px 0 0 hsl(0 0% 100% / 0.30);
1583
+ /* AV.W15 M3 — the full-perimeter rim remaps to its dark weight inside
1584
+ `.dark` (mirroring the `--glass-specular` remap above). The lit token
1585
+ resolves to the `-dark` alpha on the deeper canvas. */
1586
+ --glass-edge-light: var(--glass-edge-light-dark);
1500
1587
  --glass-curvature-overlay: radial-gradient(
1501
1588
  ellipse at 50% -20%,
1502
1589
  hsl(0 0% 100% / 0.06),
1503
1590
  transparent 60%
1504
1591
  );
1505
1592
 
1506
- /* Gold — boosted for dark */
1507
- --gold: hsl(43 74% 55%);
1508
- --gold-light: hsl(51 100% 55%);
1509
- --gold-dark: hsl(34 87% 45%);
1593
+ /* Gold — boosted for dark (oklch; AV.W16 TW2) */
1594
+ --gold: oklch(0.784 0.143 86.0);
1595
+ --gold-light: oklch(0.898 0.182 97.4);
1596
+ --gold-dark: oklch(0.678 0.150 63.8);
1510
1597
  }
1511
1598
 
1512
1599
  /* ═══════════════════════════════════════════════
@@ -1560,3 +1647,47 @@
1560
1647
  inherits: false;
1561
1648
  initial-value: 0px;
1562
1649
  }
1650
+
1651
+ /* ═══════════════════════════════════════════════
1652
+ §11b POINTER-ANCHORED MOVING SPECULAR (AV.W15)
1653
+
1654
+ The iOS-26 Liquid Glass "light travels around the material /
1655
+ illuminate under your fingertip" behaviour. A masked radial-gradient
1656
+ catch-light rides the surface at (--specular-x, --specular-y), driven
1657
+ by the consumer's pointer-tracked --mouse-x/--mouse-y write. Registered
1658
+ as typed custom properties so the position INTERPOLATES smoothly between
1659
+ pointer samples (a bare unregistered var() snaps; the @property reg lets
1660
+ the engine animate the percentage stop).
1661
+
1662
+ • --specular-x / --specular-y (percentage) — the catch-light centre.
1663
+ `inherits: false` because each glass surface owns its own pointer
1664
+ position (a hovered parent must not push its specular onto a child —
1665
+ the no-glass-on-glass discipline made mechanical).
1666
+
1667
+ • --specular-intensity (number) — the catch-light alpha multiplier.
1668
+ `inherits: false` for the same per-surface-ownership reason; rises on
1669
+ hover/active, settles to its rest floor on leave.
1670
+
1671
+ @property crosses Baseline 2024-07-09. The consumption (the masked
1672
+ radial + the reduced-motion static bracket + the var() fallback) lives
1673
+ in glass-specular-track.css; the registrations live here alongside the
1674
+ other three regs so the typed-property tier has one home.
1675
+ ═══════════════════════════════════════════════ */
1676
+
1677
+ @property --specular-x {
1678
+ syntax: "<percentage>";
1679
+ inherits: false;
1680
+ initial-value: 50%;
1681
+ }
1682
+
1683
+ @property --specular-y {
1684
+ syntax: "<percentage>";
1685
+ inherits: false;
1686
+ initial-value: 50%;
1687
+ }
1688
+
1689
+ @property --specular-intensity {
1690
+ syntax: "<number>";
1691
+ inherits: false;
1692
+ initial-value: 0;
1693
+ }