@mkbabb/glass-ui 3.7.0 → 3.9.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 (261) hide show
  1. package/README.md +1 -6
  2. package/dist/CardAction-DuArVky-.js +157 -0
  3. package/dist/{CommandShortcut-CY0aQTz5.js → CommandShortcut-CefCj5mt.js} +7 -7
  4. package/dist/{ContextMenuSubContent-BeDz7G6f.js → ContextMenuSubContent-Bhg4f5jX.js} +3 -3
  5. package/dist/{DataTable-gtPOLZvl.js → DataTable-CUHMukiQ.js} +4 -4
  6. package/dist/DeckProgress-Dmk4_AKN.js +23 -0
  7. package/dist/{DialogContent-DG1YMR-P.js → DialogContent-BRkT1cjP.js} +3 -3
  8. package/dist/{DialogFooter-BCIaDP15.js → DialogFooter-Gprw8H_A.js} +1 -1
  9. package/dist/{HoverPopover-DXpOEw1P.js → HoverPopover-2LOIW34a.js} +1 -1
  10. package/dist/{IconTooltip-Cu86JR4e.js → IconTooltip-yefK7cJc.js} +1 -1
  11. package/dist/{MetricBadge-D-bRaQUD.js → MetricBadge-lTc002u2.js} +1 -1
  12. package/dist/{Notification-B5WHP3_1.js → Notification-BxK8LZMw.js} +1 -1
  13. package/dist/{NumberFieldContent-CLNVR1iY.js → NumberFieldContent-BbLOh8RU.js} +2 -2
  14. package/dist/{PopoverContent-F1bWnYoh.js → PopoverContent-BId6ggf_.js} +1 -1
  15. package/dist/{Progress-c4vo4ALi.js → Progress-iEuD9pxG.js} +4 -4
  16. package/dist/{ScrollingText-BEp377U5.js → ScrollingText-BPP84wKo.js} +2 -2
  17. package/dist/{SelectScrollDownButton-DAo5NmY_.js → SelectScrollDownButton-T32cVFeM.js} +4 -4
  18. package/dist/{SelectSeparator-COFMJGng.js → SelectSeparator-C4Ql0gzV.js} +1 -1
  19. package/dist/{TabsList-COqIdW7i.js → TabsList-B8CVOQPC.js} +2 -2
  20. package/dist/{Toaster-BMaeziJJ.js → Toaster-1rYWrmAm.js} +1 -1
  21. package/dist/{ToggleGroupItem-C-AIkBUw.js → ToggleGroupItem-Cev4pOVK.js} +5 -5
  22. package/dist/animated-digit.js +1 -1
  23. package/dist/api/index.d.ts +5 -3
  24. package/dist/aurora.js +339 -408
  25. package/dist/{badge-DHQrc_GQ.js → badge-BvwvT50i.js} +4 -4
  26. package/dist/badge.js +1 -1
  27. package/dist/{button-CAywcrhO.js → button-DN39cGqL.js} +13 -12
  28. package/dist/button.js +1 -1
  29. package/dist/canvas.d.ts +1 -0
  30. package/dist/canvas.js +3 -0
  31. package/dist/card.js +1 -1
  32. package/dist/carousel.js +106 -105
  33. package/dist/collapsible.js +1 -1
  34. package/dist/{color-DjJCAQ6f.js → color-8jBjWiJ6.js} +22 -14
  35. package/dist/color.js +2 -2
  36. package/dist/command.js +1 -1
  37. package/dist/compile-DAjIoEy2.js +158 -0
  38. package/dist/components/custom/aurora/composables/atoms.d.ts +90 -25
  39. package/dist/components/custom/aurora/composables/color.d.ts +0 -12
  40. package/dist/components/custom/aurora/composables/uniformBridge.d.ts +34 -23
  41. package/dist/components/custom/aurora/constants/presets.d.ts +10 -7
  42. package/dist/components/custom/aurora/constants/renderMode.d.ts +22 -0
  43. package/dist/components/custom/aurora/constants/shaders/aurora.wgsl.d.ts +1 -1
  44. package/dist/components/custom/aurora/constants/shaders/brush.glsl.d.ts +1 -1
  45. package/dist/components/custom/aurora/constants/shaders/composition.glsl.d.ts +1 -1
  46. package/dist/components/custom/aurora/constants/shaders/mediums.glsl.d.ts +1 -1
  47. package/dist/components/custom/aurora/index.d.ts +3 -3
  48. package/dist/components/custom/configurator/ConfiguratorLayer.vue.d.ts +1 -1
  49. package/dist/components/custom/constellation/Constellation.vue.d.ts +40 -5
  50. package/dist/components/custom/constellation/constellationField.d.ts +110 -5
  51. package/dist/components/custom/constellation/index.d.ts +2 -2
  52. package/dist/components/custom/dock/DockSeparator.vue.d.ts +3 -0
  53. package/dist/components/custom/dock/GlassDock.vue.d.ts +57 -67
  54. package/dist/components/custom/dock/composables/dockContext.d.ts +7 -0
  55. package/dist/components/custom/dock/composables/dockMorphContext.d.ts +57 -0
  56. package/dist/components/custom/dock/composables/index.d.ts +3 -0
  57. package/dist/components/custom/dock/composables/useDockHold.d.ts +61 -0
  58. package/dist/components/custom/dock/composables/useLayerTransition.d.ts +13 -59
  59. package/dist/components/custom/dock/index.d.ts +4 -1
  60. package/dist/components/custom/goo-blob/GooBlob.vue.d.ts +13 -0
  61. package/dist/components/custom/goo-blob/composables/useBlobMood.d.ts +23 -5
  62. package/dist/components/custom/goo-blob/composables/useBlobPointer.d.ts +2 -0
  63. package/dist/components/custom/goo-blob/composables/useBlobSatellites.d.ts +2 -0
  64. package/dist/components/custom/goo-blob/composables/useMetaballRenderer.d.ts +20 -5
  65. package/dist/components/custom/goo-blob/index.d.ts +1 -1
  66. package/dist/components/custom/goo-blob/shaders/sdf-body.glsl.d.ts +1 -1
  67. package/dist/components/custom/goo-blob/shaders/watercolor-edges.glsl.d.ts +2 -2
  68. package/dist/components/custom/goo-blob/types.d.ts +8 -0
  69. package/dist/components/custom/tabs/SegmentedTabs.vue.d.ts +92 -0
  70. package/dist/components/custom/tabs/composables/useTabIndicator.d.ts +49 -0
  71. package/dist/components/custom/tabs/index.d.ts +2 -5
  72. package/dist/components/ui/button/index.d.ts +1 -1
  73. package/dist/components/ui/card/Card.vue.d.ts +28 -10
  74. package/dist/components/ui/card/index.d.ts +1 -1
  75. package/dist/components/ui/carousel/CarouselNext.vue.d.ts +1 -1
  76. package/dist/components/ui/carousel/CarouselPrevious.vue.d.ts +1 -1
  77. package/dist/components/ui/carousel/GlassCarouselPager.vue.d.ts +3 -4
  78. package/dist/components/ui/progress/ProgressDefault.vue.d.ts +14 -4
  79. package/dist/components/ui/slider/Slider.vue.d.ts +3 -1
  80. package/dist/components/ui/slider/index.d.ts +14 -7
  81. package/dist/components/ui/tabs/TabsList.vue.d.ts +1 -1
  82. package/dist/composables/color/index.d.ts +19 -0
  83. package/dist/composables/context/createContext.d.ts +1 -1
  84. package/dist/composables/dom/index.d.ts +1 -1
  85. package/dist/composables/dom/useResolveTokenColor.d.ts +27 -0
  86. package/dist/composables/glass/canvas2d/index.d.ts +2 -1
  87. package/dist/composables/glass/canvas2d/resolveCanvasColor.d.ts +20 -0
  88. package/dist/composables/glass/canvas2d/useCanvas2D.d.ts +15 -1
  89. package/dist/composables/glass/index.d.ts +3 -1
  90. package/dist/composables/glass/useSpecularTracking.d.ts +33 -0
  91. package/dist/composables/glass/webgl/createCanvasLifecycle.d.ts +1 -1
  92. package/dist/composables/glass/webgl/shaders/procedural-color.glsl.d.ts +4 -0
  93. package/dist/composables/glass/webgl/useWebGLCanvas.d.ts +1 -1
  94. package/dist/composables/motion/core/index.d.ts +1 -0
  95. package/dist/configurator.js +1 -1
  96. package/dist/confirm-dialog.js +2 -2
  97. package/dist/constellation.js +143 -74
  98. package/dist/context-menu.js +2 -2
  99. package/dist/controls.js +1 -1
  100. package/dist/data-table.js +1 -1
  101. package/dist/deck-progress.d.ts +1 -0
  102. package/dist/deck-progress.js +2 -0
  103. package/dist/dialog.js +2 -2
  104. package/dist/dock.js +468 -354
  105. package/dist/{dockContext-DLgrVWsU.js → dockContext-BKeIMmNk.js} +1 -1
  106. package/dist/dom.js +6 -6
  107. package/dist/{dropdown-menu-BWpwutt0.js → dropdown-menu-D77jX6Df.js} +4 -4
  108. package/dist/dropdown-menu.js +1 -1
  109. package/dist/fonts/README.md +26 -18
  110. package/dist/forms.js +5 -5
  111. package/dist/fourier-field.js +35 -35
  112. package/dist/glass-panel.js +7 -7
  113. package/dist/glass-ui.css +1 -1
  114. package/dist/glass-ui.js +154 -169
  115. package/dist/goo-blob.js +361 -274
  116. package/dist/header-ribbon.js +1 -1
  117. package/dist/hover-card.js +1 -1
  118. package/dist/hover-popover.js +1 -1
  119. package/dist/icon-tooltip.js +1 -1
  120. package/dist/index.d.ts +1 -2
  121. package/dist/instrument-chassis.js +1 -1
  122. package/dist/instrument-rail.js +1 -1
  123. package/dist/label.js +1 -1
  124. package/dist/labeled-field.js +5 -5
  125. package/dist/{menuItemVariants-B4eFR5Ix.js → menuItemVariants-CCoBNkU5.js} +1 -1
  126. package/dist/metric-badge.js +1 -1
  127. package/dist/metric-stack.js +1 -1
  128. package/dist/motion-core.js +65 -65
  129. package/dist/motion.js +1 -1
  130. package/dist/notification.js +1 -1
  131. package/dist/number-field.js +1 -1
  132. package/dist/paper-backdrop.js +1 -1
  133. package/dist/popover.js +1 -1
  134. package/dist/progress.js +1 -1
  135. package/dist/pulse.js +2 -2
  136. package/dist/reactive.js +2 -2
  137. package/dist/resolveCanvasColor-BBiYfp8g.js +11 -0
  138. package/dist/scrolling-text.js +1 -1
  139. package/dist/search.js +9 -9
  140. package/dist/select.js +3 -3
  141. package/dist/separator.js +1 -1
  142. package/dist/{sheet-Cv1uO-Gq.js → sheet-VZEtNFvO.js} +2 -2
  143. package/dist/sheet.js +1 -1
  144. package/dist/slider-DC2mwuoe.js +142 -0
  145. package/dist/slider.js +1 -1
  146. package/dist/sortable-list.js +2 -2
  147. package/dist/status-dot.js +17 -16
  148. package/dist/styles/animations.css +6 -2
  149. package/dist/styles/components.css +1 -1
  150. package/dist/styles/dock/density.css +230 -0
  151. package/dist/styles/dock/layer-group.css +263 -0
  152. package/dist/styles/dock/layers.css +355 -0
  153. package/dist/styles/dock/morph.css +244 -0
  154. package/dist/styles/dock/overflow.css +201 -0
  155. package/dist/styles/dock/shell.css +457 -0
  156. package/dist/styles/dock-controls.css +187 -50
  157. package/dist/styles/dock.css +65 -1181
  158. package/dist/styles/fonts.css +0 -25
  159. package/dist/styles/glass.css +482 -102
  160. package/dist/styles/index.css +12 -11
  161. package/dist/styles/theme.css +60 -2
  162. package/dist/styles/tokens.css +625 -72
  163. package/dist/styles/typography.css +52 -69
  164. package/dist/styles/utilities.css +91 -40
  165. package/dist/styles/view-transition.css +12 -40
  166. package/dist/switch.js +1 -1
  167. package/dist/tabs.js +183 -152
  168. package/dist/timeline.js +3 -3
  169. package/dist/toast.js +1 -1
  170. package/dist/toggle-group.js +1 -1
  171. package/dist/tooltip.js +1 -1
  172. package/dist/typewriter.js +1 -1
  173. package/dist/{useCanvas2D-C31yfUGY.js → useCanvas2D-ClrQuZtp.js} +2 -1
  174. package/dist/{useConfiguratorState-B24TcgIn.js → useConfiguratorState-DxAqksK6.js} +24 -13
  175. package/dist/useResolveTokenColor-r9pnNjqK.js +24 -0
  176. package/dist/useSpecularTracking-BVRZsRHA.js +26 -0
  177. package/dist/{useTextHighlight-aMPdEpkq.js → useTextHighlight-DON84L8w.js} +1 -1
  178. package/dist/{useTouchGate-YQRwyUGU.js → useTouchGate-WFyJYsth.js} +1 -1
  179. package/dist/vReveal-CqaCz_mC.js +44 -0
  180. package/dist/watercolor-dot.js +1 -1
  181. package/package.json +67 -36
  182. package/src/fonts/README.md +26 -18
  183. package/src/styles/animations.css +6 -2
  184. package/src/styles/dock/density.css +230 -0
  185. package/src/styles/dock/layer-group.css +263 -0
  186. package/src/styles/dock/layers.css +355 -0
  187. package/src/styles/dock/morph.css +244 -0
  188. package/src/styles/dock/overflow.css +201 -0
  189. package/src/styles/dock/shell.css +457 -0
  190. package/src/styles/dock-controls.css +187 -50
  191. package/src/styles/dock.css +65 -1181
  192. package/src/styles/fonts.css +0 -25
  193. package/src/styles/glass.css +482 -102
  194. package/src/styles/index.css +12 -11
  195. package/src/styles/theme.css +60 -2
  196. package/src/styles/tokens.css +625 -72
  197. package/src/styles/typography.css +52 -69
  198. package/src/styles/utilities.css +91 -40
  199. package/src/styles/view-transition.css +12 -40
  200. package/dist/CardAction-D8nSE62a.js +0 -163
  201. package/dist/DiscoGlyph-ZoBYpoxI.js +0 -132
  202. package/dist/GlyphFace-Ce_oe3tM.js +0 -51
  203. package/dist/UnderlineTabs-D_c1iYo-.js +0 -39
  204. package/dist/compile-iM4IUB66.js +0 -158
  205. package/dist/components/custom/aurora/constants/shaders/painterly.wgsl.d.ts +0 -7
  206. package/dist/components/custom/aurora/constants/shaders/wake.wgsl.d.ts +0 -4
  207. package/dist/components/custom/disco-glyph/DiscoGlyph.vue.d.ts +0 -58
  208. package/dist/components/custom/disco-glyph/index.d.ts +0 -1
  209. package/dist/components/custom/glass-carousel/GlassCarousel.vue.d.ts +0 -36
  210. package/dist/components/custom/glass-carousel/GlassCarouselItem.vue.d.ts +0 -28
  211. package/dist/components/custom/glass-carousel/index.d.ts +0 -4
  212. package/dist/components/custom/glass-carousel/useGlassCarousel.d.ts +0 -30
  213. package/dist/components/custom/glyph-face/GlyphFace.vue.d.ts +0 -64
  214. package/dist/components/custom/glyph-face/index.d.ts +0 -2
  215. package/dist/components/custom/glyph-face/keys.d.ts +0 -9
  216. package/dist/components/custom/responsive-tabs/ResponsiveTabs.vue.d.ts +0 -73
  217. package/dist/components/custom/responsive-tabs/index.d.ts +0 -2
  218. package/dist/components/custom/tabs/BouncyTabs.vue.d.ts +0 -27
  219. package/dist/components/custom/tabs/BouncyToggle.vue.d.ts +0 -60
  220. package/dist/components/custom/tabs/UnderlineTabs.vue.d.ts +0 -20
  221. package/dist/components/custom/tabs/composables/useBouncySlider.d.ts +0 -39
  222. package/dist/disco-glyph.d.ts +0 -1
  223. package/dist/disco-glyph.js +0 -2
  224. package/dist/fonts/fraunces/fraunces-latin.woff2 +0 -0
  225. package/dist/glass-carousel.d.ts +0 -1
  226. package/dist/glass-carousel.js +0 -214
  227. package/dist/glyph-face.d.ts +0 -1
  228. package/dist/glyph-face.js +0 -3
  229. package/dist/keys-Dyf_uTs5.js +0 -9
  230. package/dist/responsive-tabs.d.ts +0 -1
  231. package/dist/responsive-tabs.js +0 -95
  232. package/dist/slider-BA9wIs5e.js +0 -130
  233. package/dist/styles/disco-glyph.css +0 -26
  234. package/dist/styles/glyph-face.css +0 -92
  235. package/dist/useViewTransition-DaN5Zrox.js +0 -21
  236. package/dist/vReveal-BE2TsPoR.js +0 -24
  237. package/src/fonts/fraunces/fraunces-latin.woff2 +0 -0
  238. package/src/styles/disco-glyph.css +0 -26
  239. package/src/styles/glyph-face.css +0 -92
  240. /package/dist/{CollapsibleContent-D7UNsXQr.js → CollapsibleContent-CP9qF1v4.js} +0 -0
  241. /package/dist/{ContextMenuContent-DGKZX1Du.js → ContextMenuContent-DDa0v27s.js} +0 -0
  242. /package/dist/{HoverCardContent-Bn0UBMY9.js → HoverCardContent-B6CcQ8He.js} +0 -0
  243. /package/dist/{InstrumentChassis-BLJBl1BW.js → InstrumentChassis-C2f6cBaQ.js} +0 -0
  244. /package/dist/{InstrumentRail-BElFwKyt.js → InstrumentRail-CUJ05YVG.js} +0 -0
  245. /package/dist/{Label-DBc7bKzZ.js → Label-zRfbQdCn.js} +0 -0
  246. /package/dist/{ModalOverlay-D1VrWyoi.js → ModalOverlay-B1GkAjNb.js} +0 -0
  247. /package/dist/{PaperBackdrop-DCGoGatv.js → PaperBackdrop-CqwjnfLv.js} +0 -0
  248. /package/dist/{SelectGroup-BcaFjvP4.js → SelectGroup-BFiod7X2.js} +0 -0
  249. /package/dist/{Separator-DZyqsCum.js → Separator-D7sD7RKj.js} +0 -0
  250. /package/dist/{Switch-2rsAtDfA.js → Switch-LDKLmmgx.js} +0 -0
  251. /package/dist/{TooltipProvider-CD2IXfRv.js → TooltipProvider-CmZzCuaG.js} +0 -0
  252. /package/dist/{_plugin-vue_export-helper-gLzyemvl.js → _plugin-vue_export-helper-ok8pgSl5.js} +0 -0
  253. /package/dist/composables/{dom → motion}/useTextHighlight.d.ts +0 -0
  254. /package/dist/{createContext-CvNyBk4o.js → createContext-B44Sah_H.js} +0 -0
  255. /package/dist/{useGlassRenderer-HebgSEgN.js → useGlassRenderer-5I0YkI4t.js} +0 -0
  256. /package/dist/{useInterval-D3USn0yc.js → useInterval-Dsmqwi03.js} +0 -0
  257. /package/dist/{useResizeObserver-CSyxGxIX.js → useResizeObserver-CWCbk5Px.js} +0 -0
  258. /package/dist/{useSpringMount-LRZqJTaF.js → useSpringMount-BJSHcLl3.js} +0 -0
  259. /package/dist/{useTimer-DEJonOZa.js → useTimer-3xqf_54b.js} +0 -0
  260. /package/dist/{useUserInvalidAria-CQKjEfwP.js → useUserInvalidAria-DoJKMZ3s.js} +0 -0
  261. /package/dist/{useViewportReady-K96m-Mdv.js → useViewportReady-RIr5Wgkh.js} +0 -0
@@ -41,6 +41,16 @@
41
41
  .dock-dropdown-trigger
42
42
  ) {
43
43
  --dock-press-spring: var(--duration-fast) var(--spring-smooth);
44
+ /* AX.W45-TUNE C4/C5 — the small-tile specular sizing. The dock controls are
45
+ ~40px tiles, a fraction of a card's plate, so the global 36% specular
46
+ radius blooms a tile-filling disc (the I.W6 finding). The family re-points
47
+ `--glass-specular-size` to the tighter `--dock-control-specular-size` (22%,
48
+ tokens.css), so the SHARED `.glass-material::before` catch-light recipe
49
+ (glass.css) paints a restrained EDGE-catch on the small tile WITHOUT
50
+ forking the recipe — the gleam wakes on hover/active (the cohort's 0.1/0.16
51
+ rungs), sized for the tile. The rest intensity stays 0 (the default-off
52
+ discipline) so the resting tile carries NO bloom. */
53
+ --glass-specular-size: var(--dock-control-specular-size, 22%);
44
54
  }
45
55
 
46
56
  .dock-icon-button {
@@ -75,33 +85,39 @@
75
85
  (transform-scoped only; the surface fades stay on the flat ease). */
76
86
  scale var(--dock-press-spring),
77
87
  opacity var(--dock-motion-fast),
78
- /* AT.W7-dock-b — the glass specular highlight fades in on hover. */
88
+ /* The box-shadow fade now carries ONLY the focus-visible ring (shared
89
+ `:focus-visible` group in dock.css) + the active-state
90
+ `--dock-active-shadow` — the AX.W09-retired hover `--glass-highlight`
91
+ specular no longer rides it. */
79
92
  box-shadow var(--dock-motion-fast);
80
93
 
81
- /* AT.W7-dock-b — glass icon-hover. The icon-button hover now reads as a
82
- glass surface, not a flat `--muted` plate: a translucent card-tinted fill
83
- composes with the specular `--glass-highlight` token (the inset top-edge
84
- glass highlight every glass tier carries — `--dock-icon-hover-shadow`
85
- defaults to it). Coherent with the dock's glass tier and the
86
- `[data-tier="secondary"]` recipe below. A consumer retunes the fill via
87
- `--dock-icon-hover-bg` and the specular via `--dock-icon-hover-shadow`. */
94
+ /* AT.W7-dock-b — glass icon-hover. The icon-button hover reads as a glass
95
+ surface, not a flat `--muted` plate: a translucent card-tinted fill is
96
+ the hover affordance. A consumer retunes the fill via `--dock-icon-hover-bg`.
97
+
98
+ AX.W09 — the dock control's SECOND specular (the `--glass-highlight`
99
+ hover box-shadow, AT.W7-dock-b) is RETIRED. The dock-icon-button is a
100
+ member of the unified `.glass-material` group (glass.css), so the moving
101
+ `::before` catch-light is now its SOLE specular owner — one light per
102
+ surface (the §0 "excise or fail" discipline). Stacking the
103
+ `--glass-highlight` inset box-shadow on the most-hovered, slides-floated
104
+ surface was the worst-offending double-light blowout; the card-tinted
105
+ hover fill carries the affordance without a second catch-light, and
106
+ dropping it also removes the `:not(:focus-visible)` specular-vs-ring
107
+ juggle. */
108
+ /* AX.W45 DK2 — the hover reads the FAMILY token `--dock-control-hover-bg`
109
+ (the per-control `--dock-icon-hover-bg` still wins if a consumer set it),
110
+ so the whole dock-control family shares ONE glass-translucent hover fill.
111
+ One source per state across icon/tab/picker (no four-vocabulary drift). */
88
112
  &:hover:not(:disabled) {
89
113
  background: var(
90
114
  --dock-icon-hover-bg,
91
- color-mix(in srgb, var(--card) 55%, transparent)
115
+ var(--dock-control-hover-bg)
92
116
  );
93
117
  color: var(--btn-hover-color, var(--foreground));
94
118
  scale: var(--scale-hover-dock);
95
119
  }
96
120
 
97
- /* The specular highlight is scoped to `:not(:focus-visible)` so it never
98
- clobbers the focus ring box-shadow (the shared `:focus-visible` group in
99
- dock.css) when a control is both hovered and keyboard-focused —
100
- the ring wins, the specular yields. */
101
- &:hover:not(:disabled):not(:focus-visible) {
102
- box-shadow: var(--dock-icon-hover-shadow, var(--glass-highlight));
103
- }
104
-
105
121
  &:active:not(:disabled) {
106
122
  scale: var(--scale-press-dock);
107
123
  }
@@ -128,8 +144,22 @@
128
144
 
129
145
  /* focus-visible ring + disabled paint hoisted to the shared `:where()`
130
146
  group in dock.css. The box-shadow fade transition lives on the base
131
- `.dock-icon-button` rule (AT.W7-dock-b added `box-shadow` there for the
132
- glass specular hover), so no per-state transition override is needed. */
147
+ `.dock-icon-button` rule (it carries the focus-ring + active-shadow fade
148
+ since AX.W09 retired the hover `--glass-highlight` specular), so no
149
+ per-state transition override is needed. */
150
+
151
+ /* AX.W45 D15 — LIBRARY GLYPH OWNERSHIP. The dock icon-button now sizes its glyph
152
+ (mirroring `.dark-mode-toggle-button > svg`), so the glyph scales WITH the box
153
+ on the `--dock-scale` multiplier instead of swimming at a fixed consumer size.
154
+ `--dock-icon-glyph: calc(1.25rem * var(--dock-scale))` (tokens.css) rides the
155
+ multiplier — at 1.5× the glyph is 30px in a 60px box, the desktop proportion.
156
+ A consumer passing an explicit lucide size class still WINS (utility layer >
157
+ component layer) — a DEFAULT, not a ceiling, matching the `.dock-tab-button`
158
+ font-size precedent. */
159
+ .dock-icon-button > svg {
160
+ width: var(--dock-icon-glyph, 1.25rem);
161
+ height: var(--dock-icon-glyph, 1.25rem);
162
+ }
133
163
 
134
164
  .dock-icon-button--compact {
135
165
  width: var(--dock-compact-control-size, auto);
@@ -200,6 +230,29 @@
200
230
  --dark-mode-toggle-padding: var(--dock-icon-padding, 0);
201
231
  }
202
232
 
233
+ /* AX.W06 USF-2 — the dock-control optical-size contract. The
234
+ DarkModeToggle renders its OWN internal SVG `h-full w-full` (it bypasses
235
+ the `--dock-icon-glyph`-sized `> svg` slot the `.dock-icon-button` family
236
+ uses), so IN-DOCK it filled the whole control box edge-to-edge (~2.5× the
237
+ nav glyphs) — `--dock-icon-padding` is NEVER DEFINED, so the
238
+ `--dark-mode-toggle-padding: var(--dock-icon-padding, 0)` above fell to the
239
+ `0` fallback and zero padding let the SVG fill the box. Route the in-dock
240
+ toggle glyph through `--dock-control-glyph-size` (the ONE size the whole
241
+ dock-control family reads, default = `--dock-icon-glyph`, the same
242
+ `--dock-scale`-keyed glyph the nav icons paint), so the toggle is optically
243
+ UNIFORM with the nav glyphs WHEN DOCKED. The `h-full w-full` SVG stays
244
+ correct for the STANDALONE DarkModeToggle sizes (no `.glass-dock`
245
+ ancestor); this rule is scoped to the in-dock path only. Machine-checked by
246
+ the dock-control optical-parity gate, not eyeballed. */
247
+ .glass-dock
248
+ .dark-mode-toggle-button:not([data-size="sm"]):not([data-size="lg"]):not(
249
+ [data-size="control"]
250
+ )
251
+ > svg {
252
+ width: var(--dock-control-glyph-size, var(--dock-icon-glyph, 1.25rem));
253
+ height: var(--dock-control-glyph-size, var(--dock-icon-glyph, 1.25rem));
254
+ }
255
+
203
256
  .dock-tab-button {
204
257
  display: inline-flex;
205
258
  align-items: center;
@@ -241,9 +294,19 @@
241
294
  /* AT.W7-dock-b — press micro-feedback spring (transform-scoped). */ scale
242
295
  var(--dock-press-spring);
243
296
 
297
+ /* AX.W45 DK2 — converged onto the FAMILY hover/active token pair (the
298
+ surface-tint-8/10 ladder it spoke is ≈ the same intent — glass-translucent
299
+ foreground-over-transparent). ONE grammar across icon/tab/picker.
300
+ AX.W45-TUNE Q3/C3 — the hover MOTION channel is now UNIFIED: the
301
+ `--scale-hover-dock` lift fires here (it used to fire on only icon +
302
+ dropdown), so all four control members lift on hover as ONE register —
303
+ the bg cross-fade (glass-tier), the scale, and the specular gleam read
304
+ together BEFORE click. The transform rides `--dock-press-spring`
305
+ (`--spring-smooth`) per the W52 easing doctrine. */
244
306
  &:hover:not(:disabled) {
245
- background: var(--surface-tint-8);
307
+ background: var(--dock-control-hover-bg);
246
308
  color: var(--foreground);
309
+ scale: var(--scale-hover-dock);
247
310
  }
248
311
 
249
312
  &:active:not(:disabled) {
@@ -258,7 +321,7 @@
258
321
  group in dock.css. */
259
322
 
260
323
  &:is(.is-active, .active, [aria-current="page"], [aria-pressed="true"]) {
261
- background: var(--surface-tint-10);
324
+ background: var(--dock-control-active-bg);
262
325
  color: var(--foreground);
263
326
  }
264
327
  }
@@ -293,18 +356,24 @@
293
356
  * cluster axis) instead of the canonical `--primary`. The `--paper-
294
357
  * clean-texture` overlay and `--glass-specular` shadow stack are
295
358
  * inherited from the underlying `btn-audacious` utility. */
359
+ /* AX.W52 D19 — the phase-tint hover radial DEMOTED: the prior
360
+ * `ellipse at 30% 30%` at 18% was a loud top-LEFT corner hotspot. Toned to
361
+ * 8% and the anchor shifted off the hard corner toward a softer top-biased
362
+ * ellipse (`40% 25%`) with a tighter `transparent 55%` falloff, so it reads
363
+ * as a surface lift rather than a corner glow — the disco hover identity
364
+ * survives, the egregious corner bloom does not. */
296
365
  &:hover:not(:disabled) {
297
366
  --glass-grain-opacity: var(--glass-grain-opacity-disco, 0.08);
298
367
  background-image:
299
368
  var(--paper-clean-texture),
300
369
  radial-gradient(
301
- ellipse at 30% 30%,
370
+ ellipse at 40% 25%,
302
371
  color-mix(
303
372
  in srgb,
304
- var(--phase-color, var(--foreground)) 18%,
373
+ var(--phase-color, var(--foreground)) 8%,
305
374
  transparent
306
375
  ),
307
- transparent 70%
376
+ transparent 55%
308
377
  );
309
378
  background-blend-mode: overlay, normal;
310
379
  background-size: var(--paper-texture-size), auto;
@@ -312,30 +381,36 @@
312
381
 
313
382
  /* Q.W3.A.4 — phase-tint backplate halo at the pill wrapper.
314
383
  *
315
- * The inner `<GlyphFace>` halo (`.glyph-face-backplate { inset: -25% }`)
316
- * gets clipped by the pill's `overflow: hidden`; the halo never escapes
317
- * the inner glyph wrapper. This `::before` lifts the phase-tint to the
318
- * pill itself so the glow composes with the whole CTA. Scoped to
319
- * active phases — at idle / ready the pill stays neutral and inherits
320
- * the W2.7 reservation ("disco fires on hover only"). */
384
+ * An inner glyph wrapper's own halo would be clipped by the pill's
385
+ * `overflow: hidden` and never escape the glyph box. This `::before`
386
+ * lifts the phase-tint to the pill itself so the glow composes with the
387
+ * whole CTA. Scoped to active phases — at idle / ready the pill stays
388
+ * neutral and inherits the W2.7 reservation ("disco fires on hover
389
+ * only"). */
390
+ /* AX.W52 D19 — the REST phase-halo `::before` (fires during a speedtest run
391
+ * on the most prominent dock control) DEMOTED on the same axis as the hover
392
+ * radial: 18%→8%, the hard `30% 30%` corner shifted to a softer `40% 25%`
393
+ * top-biased ellipse with a tighter `transparent 55%` falloff, and the
394
+ * `opacity: 1` dropped to 0.5 so the persistent run-time halo is a subtle
395
+ * surface lift, not a corner bloom that washes the pill for the whole run. */
321
396
  &[data-phase]:not([data-phase="ready"]):not([data-phase="idle"])::before {
322
397
  content: "";
323
398
  position: absolute;
324
399
  inset: 0;
325
400
  border-radius: inherit;
326
401
  background: radial-gradient(
327
- ellipse at 30% 30%,
402
+ ellipse at 40% 25%,
328
403
  color-mix(
329
404
  in srgb,
330
- var(--phase-color, var(--foreground)) 18%,
405
+ var(--phase-color, var(--foreground)) 8%,
331
406
  transparent
332
407
  )
333
408
  0%,
334
- transparent 70%
409
+ transparent 55%
335
410
  );
336
411
  pointer-events: none;
337
412
  z-index: -1;
338
- opacity: 1;
413
+ opacity: 0.5;
339
414
  transition: opacity var(--duration-fast) var(--ease-standard);
340
415
  }
341
416
  }
@@ -400,13 +475,23 @@
400
475
  opacity var(--dock-motion-fast);
401
476
  }
402
477
 
478
+ /* AX.W45 DK2 — the pickers move OFF the opaque `--muted` flat plate onto the
479
+ glass-translucent FAMILY hover token (the dock substrate shows through, not a
480
+ solid cream rectangle over the glass — the loudest "not right" tell). hover ≠
481
+ open now: the active/open rule below reads `--dock-control-active-bg` (a tint
482
+ LADDER step above hover), so an OPEN dropdown reads distinctly from a merely-
483
+ hovered one (paired with the chevron flip). ONE source per state, glass-aware
484
+ across the whole dock-control family. */
485
+ /* AX.W45-TUNE Q3/C3 — the picker hover lift is now in the SHARED group: the
486
+ `--scale-hover-dock` scale fires on BOTH select + dropdown (it used to fire on
487
+ the dropdown ONLY — the split-brain hover the DK2 fix left). All four dock
488
+ control members (icon/tab/select/dropdown) now lift on hover as one register,
489
+ mirroring the unified glass-tier `--dock-control-hover-bg` cross-fade. The
490
+ lone `.dock-dropdown-trigger:hover` scale rule is RETIRED into this group. */
403
491
  .dock-select-trigger:hover:not(:disabled),
404
492
  .dock-dropdown-trigger:hover:not(:disabled) {
405
- background: var(--muted);
493
+ background: var(--dock-control-hover-bg);
406
494
  color: var(--btn-hover-color, var(--foreground));
407
- }
408
-
409
- .dock-dropdown-trigger:hover:not(:disabled) {
410
495
  scale: var(--scale-hover-dock);
411
496
  }
412
497
 
@@ -446,7 +531,11 @@
446
531
  [aria-expanded="true"],
447
532
  [aria-pressed="true"]
448
533
  ) {
449
- background: var(--muted);
534
+ /* AX.W45 DK2 — the OPEN affordance: a translucent active fill a ladder step
535
+ above hover (NOT the opaque `--muted`, NOT byte-identical to hover). OPEN =
536
+ (chevron up + this active fill); HOVER = (the lighter hover fill, chevron
537
+ down) — the smooth glass-aware four-state read the picker lacked. */
538
+ background: var(--dock-control-active-bg);
450
539
  color: var(--foreground);
451
540
  }
452
541
 
@@ -467,20 +556,68 @@
467
556
  rotate: 180deg;
468
557
  }
469
558
 
470
- /* O.W6 Lane D — Touch-target floor (speedtest AC.W6 F2.AA-03 / WCAG
471
- 2.5.5), button-level half. The dock-width-math half (the
472
- `.glass-dock[data-density]` `--dock-control-size` lift) STAYS in dock.css
473
- (shell / width-math). This per-button floor reaches a STANDALONE
474
- DockIconButton (a routed settings gear, no dock wrapper) that reads the
475
- bare `--size-icon-btn` and would otherwise fall below the 44px WCAG
476
- target. It holds the touch box regardless of ancestry; the in-dock
477
- `.glass-dock[data-density]` rule is more specific and also reserves the
478
- slot in the dock's width-math. Compact buttons opt out — they are
479
- auto-sized affordances, not primary targets. */
559
+ /* AX.W45 D15 — coarse-pointer touch floor, button-level half. The IN-DOCK floor
560
+ is subsumed into the `--dock-scale` multiplier + the `max(…, 44px)` clamp in
561
+ the dock.css density cascade (the in-dock control-size grows ~1.5× past the
562
+ 44px target, the clamp guarantees the floor even below 1.0× scale). This
563
+ per-button rule is the STANDALONE half: a DockIconButton with NO `.glass-dock`
564
+ ancestor (a routed gear) has no density cascade lifting its size, so it keeps
565
+ the explicit `min-{block,inline}-size` floor. Scoped `:not(:where(.glass-dock
566
+ *))` so it does NOT double-stamp on an in-dock button (the cascade owns that —
567
+ one path per surface, no two-floor). Compact buttons opt out. */
480
568
  @media (pointer: coarse) {
481
- .dock-icon-button:not(.dock-icon-button--compact) {
569
+ .dock-icon-button:not(.dock-icon-button--compact):not(:where(.glass-dock *)) {
482
570
  min-block-size: var(--dock-touch-target, 2.75rem);
483
571
  min-inline-size: var(--dock-touch-target, 2.75rem);
484
572
  }
485
573
  }
574
+
575
+ /* AX.W06 F2/F3 — the HOISTED refined rail nav-item polish. The demo's
576
+ `SidebarDock` dogfooded the active-category affordance (accent glyph tint +
577
+ a left-edge accent rule) as DEMO-PRIVATE chrome (`demo/layout/dock-nav.css`
578
+ `.demo-sidebar-item.is-active`), so a consumer reaching for `variant="rail"`
579
+ got the UN-refined bare `.is-active` colour shift. This hoists the refined
580
+ treatment into the shipped variant CSS so the demo == the shipped contract
581
+ (the demo no longer re-derives a worse rail by hand). The tap-squish press
582
+ feedback (the `:active` `--scale-press-dock` squish) + the right-anchored
583
+ tooltips are already the dock-control family + the consumer's `<Tooltip
584
+ side="right">` — this carries the active-item ACCENT, the half the variant
585
+ CSS did not own.
586
+
587
+ The accent is TOKENIZED, not baked: `--dock-rail-active-accent` defaults to
588
+ the library `--primary` brand ink; a consumer retints it per-instance (the
589
+ demo overrides it to `--viz-fourier` NCSU-red on the cascade). The active
590
+ state reads the SHIPPED four-state hooks the dock-control family already
591
+ activates (`.is-active`, `aria-current="page"`, `[aria-pressed="true"]`).
592
+ Scoped to a `.glass-dock.variant-rail` descendant icon-button — a horizontal
593
+ dock or the layer-switcher rail are untouched. */
594
+ .glass-dock.variant-rail .dock-icon-button {
595
+ position: relative;
596
+ }
597
+
598
+ .glass-dock.variant-rail
599
+ .dock-icon-button:is(.is-active, [aria-current="page"], [aria-pressed="true"]) {
600
+ --dock-active-color: var(--dock-rail-active-accent, var(--primary));
601
+ color: var(--dock-rail-active-accent, var(--primary));
602
+ }
603
+
604
+ /* The leading-edge accent rule — a short rounded bar pinned to the rail-leading
605
+ edge of the active nav item (the iOS / Figma side-rail selected-affordance).
606
+ `inset-inline-start` keys it off the writing-direction leading edge, so the
607
+ bar sits OUTSIDE the button on the rail's plate; `inset-block: <inset>` keeps
608
+ it short + centred. The width/inset/colour all read `--dock-rail-active-*`
609
+ tokens so the whole accent is tunable from one place. */
610
+ .glass-dock.variant-rail
611
+ .dock-icon-button:is(.is-active, [aria-current="page"], [aria-pressed="true"])::before {
612
+ content: "";
613
+ position: absolute;
614
+ inset-block: var(--dock-rail-accent-inset, 18%);
615
+ inset-inline-start: calc(
616
+ -1 * var(--dock-rail-accent-width, 3px) - var(--dock-rail-accent-gap, 2px)
617
+ );
618
+ width: var(--dock-rail-accent-width, 3px);
619
+ border-radius: var(--radius-pill);
620
+ background: var(--dock-rail-active-accent, var(--primary));
621
+ pointer-events: none;
622
+ }
486
623
  }