@mkbabb/glass-ui 3.9.0 → 3.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (265) hide show
  1. package/dist/{CardAction-DuArVky-.js → CardAction-DrAcAV4d.js} +2 -2
  2. package/dist/{CommandShortcut-CefCj5mt.js → CommandShortcut-mV2e1aG6.js} +2 -2
  3. package/dist/{DataTable-CUHMukiQ.js → DataTable-C3E6jZ5B.js} +2 -2
  4. package/dist/{DialogContent-BRkT1cjP.js → DialogContent-BxaaafFi.js} +1 -1
  5. package/dist/{HoverPopover-2LOIW34a.js → HoverPopover-CDA_SaCe.js} +1 -1
  6. package/dist/{MetricBadge-lTc002u2.js → MetricBadge-idgrkqoP.js} +1 -1
  7. package/dist/{Notification-BxK8LZMw.js → Notification-Cu0nN17_.js} +3 -3
  8. package/dist/{NumberFieldContent-BbLOh8RU.js → NumberFieldContent-CHEWghnY.js} +2 -2
  9. package/dist/{PopoverContent-BId6ggf_.js → PopoverContent-DpUvdYY-.js} +1 -1
  10. package/dist/{Progress-iEuD9pxG.js → Progress-BW-StFw2.js} +1 -1
  11. package/dist/{ScrollingText-BPP84wKo.js → ScrollingText-DruYCni_.js} +1 -1
  12. package/dist/{SelectScrollDownButton-T32cVFeM.js → SelectScrollDownButton-pirzjm--.js} +3 -3
  13. package/dist/{Switch-LDKLmmgx.js → Switch-DeAqg6pi.js} +1 -1
  14. package/dist/{TabsList-B8CVOQPC.js → TabsList-BAVzOZpg.js} +2 -2
  15. package/dist/{Toaster-1rYWrmAm.js → Toaster-CvuuW_y9.js} +49 -46
  16. package/dist/{ToggleGroupItem-Cev4pOVK.js → ToggleGroupItem-DtD37b4G.js} +4 -4
  17. package/dist/animated-digit.js +2 -2
  18. package/dist/api/index.d.ts +4 -4
  19. package/dist/api.js +1 -1
  20. package/dist/aurora.js +238 -547
  21. package/dist/{badge-BvwvT50i.js → badge-NdCQMvvB.js} +2 -2
  22. package/dist/badge.js +1 -1
  23. package/dist/{button-DN39cGqL.js → button-DyiWFAOE.js} +12 -12
  24. package/dist/button.js +1 -1
  25. package/dist/canvas.js +2 -2
  26. package/dist/card.js +1 -1
  27. package/dist/carousel.js +5 -5
  28. package/dist/collapsible.js +1 -1
  29. package/dist/{color-8jBjWiJ6.js → color-B65wWyQz.js} +9 -7
  30. package/dist/color.js +1 -1
  31. package/dist/command.js +1 -1
  32. package/dist/{compile-DAjIoEy2.js → compile-Ce_V55zi.js} +23 -23
  33. package/dist/components/custom/aurora/composables/atoms.d.ts +21 -4
  34. package/dist/components/custom/aurora/composables/runtime.d.ts +0 -9
  35. package/dist/components/custom/aurora/composables/uniformBridge.d.ts +0 -11
  36. package/dist/components/custom/aurora/constants/renderMode.d.ts +0 -32
  37. package/dist/components/custom/aurora/constants/shaders/brush.glsl.d.ts +1 -1
  38. package/dist/components/custom/aurora/constants/shaders/mediums.glsl.d.ts +2 -2
  39. package/dist/components/custom/aurora/constants/shaders/tonemap.glsl.d.ts +1 -1
  40. package/dist/components/custom/aurora/constants/shaders/vangogh-medium.glsl.d.ts +1 -0
  41. package/dist/components/custom/aurora/index.d.ts +1 -1
  42. package/dist/components/custom/constellation/Constellation.vue.d.ts +85 -1
  43. package/dist/components/custom/constellation/composables/createConstellationField.d.ts +35 -0
  44. package/dist/components/custom/constellation/composables/useConstellationPointer.d.ts +35 -0
  45. package/dist/components/custom/constellation/constants.d.ts +36 -0
  46. package/dist/components/custom/constellation/constellationDraw.d.ts +18 -0
  47. package/dist/components/custom/constellation/constellationField.d.ts +174 -63
  48. package/dist/components/custom/constellation/constellationInteraction.d.ts +102 -0
  49. package/dist/components/custom/constellation/index.d.ts +4 -2
  50. package/dist/components/custom/controls/DarkModeToggle.vue.d.ts +11 -0
  51. package/dist/components/custom/dock/GlassDock.vue.d.ts +2 -110
  52. package/dist/components/custom/dock/composables/dockMorphContext.d.ts +36 -0
  53. package/dist/components/custom/dock/composables/useDockMorphWindow.d.ts +15 -0
  54. package/dist/components/custom/dock/composables/useDockShellProps.d.ts +131 -0
  55. package/dist/components/custom/dock/composables/useLayerTransition.d.ts +44 -0
  56. package/dist/components/custom/dock/constants.d.ts +23 -0
  57. package/dist/components/custom/fourier-field/FourierField.vue.d.ts +6 -0
  58. package/dist/components/custom/fourier-field/index.d.ts +25 -1
  59. package/dist/components/custom/fourier-field/math.d.ts +20 -8
  60. package/dist/components/custom/fourier-field/presets.d.ts +54 -0
  61. package/dist/components/custom/goo-blob/GooBlob.vue.d.ts +8 -10
  62. package/dist/components/custom/goo-blob/composables/buildMetaballProgram.d.ts +18 -0
  63. package/dist/components/custom/goo-blob/composables/uploadBlobUniforms.d.ts +41 -0
  64. package/dist/components/custom/goo-blob/composables/useBlobPointer.d.ts +4 -3
  65. package/dist/components/custom/goo-blob/composables/useMetaballRenderer.d.ts +16 -21
  66. package/dist/components/custom/goo-blob/constants.d.ts +52 -0
  67. package/dist/components/custom/goo-blob/index.d.ts +1 -1
  68. package/dist/components/custom/goo-blob/shaders/metaball-uniforms.glsl.d.ts +1 -0
  69. package/dist/components/custom/goo-blob/types.d.ts +59 -25
  70. package/dist/components/custom/instrument-chassis/InstrumentChassis.vue.d.ts +2 -2
  71. package/dist/components/custom/tabs/constants.d.ts +12 -0
  72. package/dist/components/custom/underline/GlassUnderline.vue.d.ts +84 -0
  73. package/dist/components/custom/underline/index.d.ts +2 -0
  74. package/dist/components/custom/underline/types.d.ts +56 -0
  75. package/dist/components/ui/drawer/Drawer.vue.d.ts +1 -0
  76. package/dist/components/ui/dropdown-menu/DropdownMenuSubContent.vue.d.ts +2 -2
  77. package/dist/components/ui/slider/index.d.ts +25 -18
  78. package/dist/components/ui/toast/use-toast.d.ts +2 -2
  79. package/dist/composables/color/index.d.ts +24 -7
  80. package/dist/composables/glass/useSpecularTracking.d.ts +12 -3
  81. package/dist/composables/glass/webgl/shaders/procedural-color.glsl.d.ts +1 -6
  82. package/dist/composables/motion/curves.d.ts +48 -0
  83. package/dist/composables/motion/index.d.ts +2 -0
  84. package/dist/composables/motion/springPresets.d.ts +33 -0
  85. package/dist/composables/motion/suite.d.ts +2 -0
  86. package/dist/composables/motion/useSpringMount.d.ts +1 -1
  87. package/dist/configurator.js +1 -1
  88. package/dist/confirm-dialog.js +2 -2
  89. package/dist/constellation.js +322 -147
  90. package/dist/controls.js +48 -14
  91. package/dist/dark.js +1 -1
  92. package/dist/data-table.js +1 -1
  93. package/dist/dialog.js +2 -2
  94. package/dist/dock.js +340 -327
  95. package/dist/dockContext-bho8B1A4.js +17 -0
  96. package/dist/{dropdown-menu-D77jX6Df.js → dropdown-menu-DVnQcA0E.js} +7 -4
  97. package/dist/dropdown-menu.js +1 -1
  98. package/dist/expandable-container.js +1 -1
  99. package/dist/forms.js +2 -2
  100. package/dist/fourier-field.js +147 -120
  101. package/dist/fourier-math.d.ts +1 -0
  102. package/dist/fourier-math.js +2 -0
  103. package/dist/glass-ui.css +1 -1
  104. package/dist/glass-ui.js +286 -207
  105. package/dist/goo-blob.js +368 -322
  106. package/dist/hover-popover.js +1 -1
  107. package/dist/icon-tooltip.js +1 -1
  108. package/dist/index.d.ts +0 -2
  109. package/dist/keyboard.js +1 -1
  110. package/dist/labeled-field.js +5 -5
  111. package/dist/math-BUU9hHID.js +43 -0
  112. package/dist/metric-badge.js +1 -1
  113. package/dist/metric-stack.js +2 -2
  114. package/dist/motion-core.js +4 -4
  115. package/dist/motion-curves.d.ts +1 -0
  116. package/dist/motion-curves.js +130 -0
  117. package/dist/motion.js +38 -37
  118. package/dist/notification.js +1 -1
  119. package/dist/number-field.js +1 -1
  120. package/dist/popover.js +1 -1
  121. package/dist/progress.js +1 -1
  122. package/dist/pulse.js +1 -1
  123. package/dist/reactive.js +1 -1
  124. package/dist/scrolling-text.js +1 -1
  125. package/dist/search.js +6 -6
  126. package/dist/select.js +1 -1
  127. package/dist/{sheet-VZEtNFvO.js → sheet-ChSXcJpU.js} +1 -1
  128. package/dist/sheet.js +1 -1
  129. package/dist/{slider-DC2mwuoe.js → slider-sfl8gFDD.js} +8 -8
  130. package/dist/slider.js +1 -1
  131. package/dist/sortable-list.js +2 -2
  132. package/dist/springPresets-aRSm-4_k.js +40 -0
  133. package/dist/stacked-icons.js +6 -6
  134. package/dist/styles/cards.css +2 -2
  135. package/dist/styles/components.css +1 -1
  136. package/dist/styles/dock/layer-group.css +38 -4
  137. package/dist/styles/dock/layers.css +11 -1
  138. package/dist/styles/dock/morph.css +95 -19
  139. package/dist/styles/dock/shell.css +12 -0
  140. package/dist/styles/dock-controls.css +25 -12
  141. package/dist/styles/drawer.css +14 -4
  142. package/dist/styles/floating-panel.css +2 -0
  143. package/dist/styles/glass/a11y-fallback.css +245 -0
  144. package/dist/styles/glass/ladder.css +304 -0
  145. package/dist/styles/glass/material.css +238 -0
  146. package/dist/styles/glass/progress-rail.css +78 -0
  147. package/dist/styles/glass/squircle.css +66 -0
  148. package/dist/styles/glass/surfaces.css +306 -0
  149. package/dist/styles/glass-refract.css +2 -0
  150. package/dist/styles/glass.css +31 -1052
  151. package/dist/styles/hover-popover.css +2 -0
  152. package/dist/styles/index.css +24 -6
  153. package/dist/styles/instrument-chassis.css +4 -0
  154. package/dist/styles/theme.css +14 -14
  155. package/dist/styles/tokens/color-radius.css +250 -0
  156. package/dist/styles/tokens/dark-arm.css +194 -0
  157. package/dist/styles/tokens/glass.css +413 -0
  158. package/dist/styles/tokens/light-dark.css +158 -0
  159. package/dist/styles/tokens/offsets-sizing.css +406 -0
  160. package/dist/styles/tokens/property-regs.css +169 -0
  161. package/dist/styles/tokens/scale-paper.css +361 -0
  162. package/dist/styles/tokens/scheme-motion.css +334 -0
  163. package/dist/styles/tokens/shadow.css +132 -0
  164. package/dist/styles/tokens.css +22 -2269
  165. package/dist/styles/transitions.css +20 -2
  166. package/dist/styles/typography.css +18 -6
  167. package/dist/styles/utilities/a11y-overrides.css +140 -0
  168. package/dist/styles/utilities/animate.css +26 -0
  169. package/dist/styles/utilities/base.css +365 -0
  170. package/dist/styles/utilities/btn.css +399 -0
  171. package/dist/styles/utilities/components.css +317 -0
  172. package/dist/styles/utilities.css +19 -1170
  173. package/dist/switch.js +1 -1
  174. package/dist/tabs.js +98 -98
  175. package/dist/timeline.js +2 -2
  176. package/dist/toast.js +1 -1
  177. package/dist/toggle-group.js +1 -1
  178. package/dist/typewriter.js +1 -1
  179. package/dist/underline.d.ts +1 -0
  180. package/dist/underline.js +85 -0
  181. package/dist/{useAnimatedNumber-C5I3wWd8.js → useAnimatedNumber-DfVgP4te.js} +1 -1
  182. package/dist/{useConfiguratorState-DxAqksK6.js → useConfiguratorState-BdQXh9ie.js} +1 -1
  183. package/dist/useSpecularTracking-DFK_fhpG.js +32 -0
  184. package/dist/useSpringMount-DXUzxBjV.js +108 -0
  185. package/dist/watercolor-dot.js +2 -2
  186. package/package.json +62 -38
  187. package/src/styles/cards.css +2 -2
  188. package/src/styles/dock/layer-group.css +38 -4
  189. package/src/styles/dock/layers.css +11 -1
  190. package/src/styles/dock/morph.css +95 -19
  191. package/src/styles/dock/shell.css +12 -0
  192. package/src/styles/dock-controls.css +25 -12
  193. package/src/styles/drawer.css +12 -4
  194. package/src/styles/glass/a11y-fallback.css +245 -0
  195. package/src/styles/glass/ladder.css +304 -0
  196. package/src/styles/glass/material.css +238 -0
  197. package/src/styles/glass/progress-rail.css +78 -0
  198. package/src/styles/glass/squircle.css +66 -0
  199. package/src/styles/glass/surfaces.css +306 -0
  200. package/src/styles/glass.css +31 -1052
  201. package/src/styles/index.css +24 -6
  202. package/src/styles/theme.css +14 -14
  203. package/src/styles/tokens/color-radius.css +250 -0
  204. package/src/styles/tokens/dark-arm.css +194 -0
  205. package/src/styles/tokens/glass.css +413 -0
  206. package/src/styles/tokens/light-dark.css +158 -0
  207. package/src/styles/tokens/offsets-sizing.css +406 -0
  208. package/src/styles/tokens/property-regs.css +169 -0
  209. package/src/styles/tokens/scale-paper.css +361 -0
  210. package/src/styles/tokens/scheme-motion.css +334 -0
  211. package/src/styles/tokens/shadow.css +132 -0
  212. package/src/styles/tokens.css +22 -2269
  213. package/src/styles/transitions.css +20 -2
  214. package/src/styles/typography.css +18 -6
  215. package/src/styles/utilities/a11y-overrides.css +140 -0
  216. package/src/styles/utilities/animate.css +26 -0
  217. package/src/styles/utilities/base.css +365 -0
  218. package/src/styles/utilities/btn.css +399 -0
  219. package/src/styles/utilities/components.css +317 -0
  220. package/src/styles/utilities.css +19 -1170
  221. package/dist/DeckProgress-Dmk4_AKN.js +0 -23
  222. package/dist/InstrumentRail-CUJ05YVG.js +0 -44
  223. package/dist/components/custom/aurora/composables/gpuRuntime.d.ts +0 -16
  224. package/dist/components/custom/aurora/constants/shaders/aurora.wgsl.d.ts +0 -7
  225. package/dist/components/custom/deck-progress/DeckProgress.vue.d.ts +0 -27
  226. package/dist/components/custom/deck-progress/index.d.ts +0 -2
  227. package/dist/components/custom/dialog-native/GlassDialogNative.vue.d.ts +0 -57
  228. package/dist/components/custom/dialog-native/index.d.ts +0 -1
  229. package/dist/components/custom/glass-panel/GlassPanel.vue.d.ts +0 -41
  230. package/dist/components/custom/glass-panel/index.d.ts +0 -2
  231. package/dist/components/custom/header-ribbon/HeaderRibbon.vue.d.ts +0 -31
  232. package/dist/components/custom/header-ribbon/index.d.ts +0 -2
  233. package/dist/components/custom/header-ribbon/types.d.ts +0 -7
  234. package/dist/components/custom/instrument-rail/InstrumentRail.vue.d.ts +0 -91
  235. package/dist/components/custom/instrument-rail/index.d.ts +0 -2
  236. package/dist/composables/glass/createGPUCanvas.d.ts +0 -40
  237. package/dist/deck-progress.d.ts +0 -1
  238. package/dist/deck-progress.js +0 -2
  239. package/dist/dockContext-BKeIMmNk.js +0 -9
  240. package/dist/glass-panel.d.ts +0 -1
  241. package/dist/glass-panel.js +0 -44
  242. package/dist/header-ribbon.d.ts +0 -1
  243. package/dist/header-ribbon.js +0 -63
  244. package/dist/instrument-rail.d.ts +0 -1
  245. package/dist/instrument-rail.js +0 -2
  246. package/dist/useGlassRenderer-5I0YkI4t.js +0 -69
  247. package/dist/useSpecularTracking-BVRZsRHA.js +0 -26
  248. package/dist/useSpringMount-BJSHcLl3.js +0 -113
  249. /package/dist/{CollapsibleContent-CP9qF1v4.js → CollapsibleContent-Drow5WkV.js} +0 -0
  250. /package/dist/{DialogFooter-Gprw8H_A.js → DialogFooter-DufLHi0y.js} +0 -0
  251. /package/dist/{IconTooltip-yefK7cJc.js → IconTooltip-BrQ5p181.js} +0 -0
  252. /package/dist/{Input-DWQQIOC4.js → Input-B-F818RU.js} +0 -0
  253. /package/dist/{_plugin-vue_export-helper-ok8pgSl5.js → _plugin-vue_export-helper-DWghtRt7.js} +0 -0
  254. /package/dist/{constants-CS75AWHG.js → constants-C8NMonuo.js} +0 -0
  255. /package/dist/{presets-BKVyQfbt.js → presets-1OhFpaIC.js} +0 -0
  256. /package/dist/{prng-wHuHlNHE.js → prng-CjVgzjQT.js} +0 -0
  257. /package/dist/{resolveCanvasColor-BBiYfp8g.js → resolveCanvasColor-CRvVzOvP.js} +0 -0
  258. /package/dist/{useCanvas2D-ClrQuZtp.js → useCanvas2D-CSeH8h16.js} +0 -0
  259. /package/dist/{useGlobalDark-yhL4Wp-s.js → useGlobalDark-D7R9OypB.js} +0 -0
  260. /package/dist/{useIntersectionPause-Cc-H9ees.js → useIntersectionPause-DAdVPVp4.js} +0 -0
  261. /package/dist/{useInterval-Dsmqwi03.js → useInterval-D3USn0yc.js} +0 -0
  262. /package/dist/{useKeyboardShortcuts-Be3w_Rwk.js → useKeyboardShortcuts-i8tHd5WO.js} +0 -0
  263. /package/dist/{useScrollProgress-CAH8Ofwt.js → useScrollProgress-CcgmgMQt.js} +0 -0
  264. /package/dist/{useSortable-C8ReQ50P.js → useSortable-DnyGXKKY.js} +0 -0
  265. /package/dist/{useTextHighlight-DON84L8w.js → useTextHighlight-B3b10W6r.js} +0 -0
@@ -0,0 +1,399 @@
1
+ /* utilities/btn.css
2
+ The interactive/button @utility cluster — scale-on-hover, twin-line-divider, transition-control/collapse, sheet-animate, btn-audacious + btn-audacious-gold (+ the btn-gold-bg-sweep keyframes), table-cell/head density, rainbow-vivid/pastel, the text-highlight paint, and btn-interactive.
3
+ Carved from the utilities.css cascade root; @import-ed by utilities.css in
4
+ cascade order. See docs/precepts/design-idioms.md §cohesion-aware partials. */
5
+ /* ── Hover scale (O.W6 Lane C) ──
6
+ Canonical hover-transform utility consuming the `--scale-hover` token
7
+ (tokens.css §11). Promoted from consumer-side `hover:scale-105`
8
+ recipe — 13 sites in keyframes.js demo + 9 sites in words/frontend
9
+ per O11/d L3 + O11/a I4. Single-token recipe (no ladder); the dual
10
+ `--scale-press-{xs..lg}` ladder discussion is the press-axis cohort
11
+ (O-N-7), not hover. Consumers reach the utility via
12
+ `class="scale-on-hover"`; transition + easing bind to the canonical
13
+ `--duration-fast` + `--ease-standard` tokens. */
14
+ @utility scale-on-hover {
15
+ /* Individual-transform identity base (AQ.W3 §W3.2). Transition the `scale`
16
+ longhand (not `transform`) so the migrated hover scale animates.
17
+ AX.W52 §6 doctrine — the `scale` transform leg rides `--spring-smooth`
18
+ (the settle register), NOT the bezier `--ease-standard` (a transform on a
19
+ bezier reads mechanical; springs read alive on transform). */
20
+ scale: 1;
21
+ transition: scale var(--duration-fast) var(--spring-smooth);
22
+
23
+ &:hover {
24
+ scale: var(--scale-hover);
25
+ }
26
+ }
27
+
28
+ /* ── Twin-line divider — the chassis catch-light / under-shadow groove ───────
29
+ AW.W15 DRY extraction. The twin-line idiom (a 1px white catch-light over a
30
+ 1px black under-shadow reading as one engraved hairline groove) is the
31
+ chassis-divider signature. The exact light/dark α pair was DUPLICATED in
32
+ `instrument-chassis.css` (`.bezel-line.top`/`.bottom`) and `instrument-rail.css`
33
+ (the sibling `::before`/`::after`). This utility is the SINGLE source of that
34
+ α pair: it publishes `--twin-line-catch` (the top catch-light) and
35
+ `--twin-line-shadow` (the bottom under-shadow) as cascade tokens, dark-adaptive
36
+ by construction (the `.dark &` arm re-resolves them). Both consumers read the
37
+ tokens; a retint touches one rule. Real DRY, ≥2 consumers. */
38
+ @utility twin-line-divider {
39
+ --twin-line-catch: rgb(255 255 255 / 0.10);
40
+ --twin-line-shadow: rgb(0 0 0 / 0.12);
41
+
42
+ :where(.dark) & {
43
+ --twin-line-catch: rgb(255 255 255 / 0.06);
44
+ --twin-line-shadow: rgb(0 0 0 / 0.18);
45
+ }
46
+ }
47
+
48
+ /* ── Control transition recipe (AU.W8b.4) ───────────────────────────────
49
+ Shared compound transition for interactive controls that animate their
50
+ surface (background-color/color/box-shadow/border-color) on the four-state
51
+ contract. Replaces the per-site
52
+ `transition-[background-color,color,box-shadow,border-color] duration-[var(--duration-fast)] ease-[var(--ease-standard)]`
53
+ arbitrary wraps at ≥2 sites (TabsTrigger, SelectTrigger, Toggle `card`
54
+ variant). Binds the canonical --duration-fast + --ease-standard tokens. */
55
+ @utility transition-control {
56
+ transition-property: background-color, color, box-shadow, border-color;
57
+ transition-duration: var(--duration-fast);
58
+ transition-timing-function: var(--ease-standard);
59
+ }
60
+
61
+ /* ── Collapse transition recipe (AU.W8b.4) ──────────────────────────────
62
+ Shared height+opacity transition for reka-ui collapse surfaces (Accordion
63
+ content, Collapsible content). Replaces the per-site `transition-[height,opacity]`
64
+ wrap at ≥2 sites. The duration/easing rides the data-state
65
+ `animate-accordion-*`/`animate-collapsible-*` keyframes (this only declares
66
+ WHICH properties transition; the keyframes own the timing). */
67
+ @utility transition-collapse {
68
+ transition-property: height, opacity;
69
+ }
70
+
71
+ /* ── Sheet/drawer slide-out animation grammar ──
72
+ Mirror of `.popover-animate` for sheet/drawer panels. Pairs with
73
+ `slide-in-from-{top,right,bottom,left}-N` to compose side-keyed entries.
74
+ The open path uses --duration-panel (slow, deliberate); the close path
75
+ uses --duration-fast so dismiss feels snappy. R5 vocab.γ gap row 6;
76
+ consumed by W2.A sheet/drawer migration. */
77
+ @utility sheet-animate {
78
+ @apply data-[state=open]:animate-in data-[state=closed]:animate-out
79
+ data-[state=open]:fade-in data-[state=closed]:fade-out
80
+ data-[state=open]:duration-[var(--duration-panel)]
81
+ data-[state=closed]:duration-[var(--duration-fast)];
82
+ }
83
+
84
+ /* ── Audacious primary CTA recipe ────────────────────────────────────────
85
+ Composes three at-rest marks (top-highlight via --glass-highlight, bottom
86
+ under-shadow via --border-hairline, baseline glass) with three disco accents
87
+ on hover (specular swap via --glass-specular, sparkle sweep via the ::after
88
+ star, disco-grain via --paper-clean-texture blended with a --primary radial).
89
+ Disco fires on hover only — at rest the button reads as a restrained glass
90
+ surface. Pair with `bg-primary text-primary-foreground`; the utility owns
91
+ the texture/highlight/sparkle composition only. */
92
+ @utility btn-audacious {
93
+ position: relative;
94
+ isolation: isolate;
95
+ overflow: hidden;
96
+ border: 1px solid var(--glass-border-quiet);
97
+ box-shadow:
98
+ var(--border-hairline),
99
+ var(--glass-highlight);
100
+ transition:
101
+ background var(--duration-fast) var(--ease-standard),
102
+ color var(--duration-fast) var(--ease-standard),
103
+ transform var(--duration-fast) var(--ease-standard),
104
+ box-shadow var(--duration-fast) var(--ease-standard),
105
+ --ripple-radius var(--motion-duration-ripple, 340ms) var(--ease-out-expo);
106
+
107
+ /* Hover composition: paper-grain texture overlaid on a soft
108
+ --primary radial, with the specular catch-light replacing the
109
+ resting hairline highlight. The radial uses --primary at 18%
110
+ — same alpha rung the dock primary tier consumes for phase
111
+ tinting, just bound to the canonical CTA color instead. */
112
+ &:hover:not(:disabled) {
113
+ background-image:
114
+ var(--paper-clean-texture),
115
+ radial-gradient(
116
+ ellipse at 30% 30%,
117
+ color-mix(in srgb, var(--primary) 18%, transparent),
118
+ transparent 70%
119
+ );
120
+ background-blend-mode: overlay, normal;
121
+ background-size: var(--paper-texture-size), auto;
122
+ box-shadow:
123
+ var(--glass-specular),
124
+ 0 0.5px 0 0 rgb(0 0 0 / 0.06);
125
+ }
126
+
127
+ /* AI.W4-M.2 (Q5 — G-AI-D27 ratified) — press-ripple via a typed
128
+ `--ripple-radius` length custom property. The `::before`
129
+ element paints a radial gradient whose stop radius equals the
130
+ typed length; the `:active` rule sets the length to the cap
131
+ (`--ripple-radius-max`, 12rem), and the host's transition
132
+ (above) interpolates the radius via the @property registration
133
+ (tokens.css §18). Release returns the length to its 0px initial
134
+ value and the ripple retires. The ripple paints at z-index 0
135
+ (above the host's background, below the slot content which sits
136
+ in the default 0 stacking context but with text inheriting the
137
+ slot's foreground colour). */
138
+ &::before {
139
+ content: "";
140
+ position: absolute;
141
+ inset: 0;
142
+ pointer-events: none;
143
+ z-index: 0;
144
+ border-radius: inherit;
145
+ background: radial-gradient(
146
+ circle at center,
147
+ color-mix(in srgb, var(--primary-foreground, hsl(0 0% 100%)) 35%, transparent) 0,
148
+ color-mix(in srgb, var(--primary-foreground, hsl(0 0% 100%)) 18%, transparent)
149
+ calc(var(--ripple-radius, 0px) * 0.55),
150
+ transparent var(--ripple-radius, 0px)
151
+ );
152
+ transition: inherit;
153
+ will-change: background;
154
+ }
155
+
156
+ &:active:not(:disabled) {
157
+ --ripple-radius: var(--ripple-radius-max, 12rem);
158
+ }
159
+
160
+ /* Sparkle glyph — hidden at rest, animated on hover. The star
161
+ sweeps diagonally from top-left to bottom-right per the canonical
162
+ sparkle-sweep keyframe (animations.css). */
163
+ &::after {
164
+ content: "✦";
165
+ position: absolute;
166
+ top: 0.25rem;
167
+ left: 0.5rem;
168
+ color: hsl(0 0% 100% / 0.7);
169
+ font-size: 0.75rem;
170
+ line-height: 1;
171
+ pointer-events: none;
172
+ opacity: 0;
173
+ will-change: transform, opacity;
174
+ z-index: 1;
175
+ }
176
+
177
+ @media (prefers-reduced-motion: no-preference) {
178
+ &:hover::after {
179
+ animation: sparkle-sweep var(--duration-sparkle) var(--ease-out-expo);
180
+ }
181
+ }
182
+
183
+ /* PRM bracket — the press-ripple retires; the press still reads
184
+ via the audacious recipe's transform/scale beat (the ripple is
185
+ affirmation atop affirmation). */
186
+ @media (prefers-reduced-motion: reduce) {
187
+ transition:
188
+ background var(--duration-fast) var(--ease-standard),
189
+ color var(--duration-fast) var(--ease-standard),
190
+ transform var(--duration-fast) var(--ease-standard),
191
+ box-shadow var(--duration-fast) var(--ease-standard);
192
+
193
+ &:active:not(:disabled) {
194
+ --ripple-radius: 0px;
195
+ }
196
+ }
197
+ }
198
+
199
+ /* ── Gold CTA shimmer modifier — AN.R0 D9 ───────────────────────────────
200
+ `btn-audacious-gold` extends `btn-audacious` with a gold sweep shimmer
201
+ on hover. Pair as `btn-audacious btn-audacious-gold` (or use the Button
202
+ `variant="gold-audacious"` which composes both). The hover shimmer is a
203
+ translucent linear-gradient sweep (low alpha — tasteful, not garish)
204
+ that slides left-to-right via the existing `gold-shimmer-slide` keyframe
205
+ (animations.css). The gold gradient uses the canonical `--color-gold-*`
206
+ token triad (tokens.css §13).
207
+
208
+ Design register:
209
+ • PRM no-preference: shimmer sweeps continuously at `--duration-shimmer`
210
+ rate; the sparkle-sweep (from btn-audacious) coexists on hover.
211
+ • PRM reduce: static gold tint shows on hover; no animation.
212
+ • The gold shimmer is a background-image layer ABOVE the existing
213
+ btn-audacious paper-grain + primary-radial layers, blended with
214
+ `overlay` so the glass substrate reads through at partial opacity.
215
+ • The `::before` ripple and `::after` sparkle from btn-audacious are
216
+ unchanged; this modifier only retunes the hover background layers.
217
+ • Consumer applies: `<Button variant="gold-audacious">Next →</Button>` */
218
+ @utility btn-audacious-gold {
219
+ /* At rest: a faint warm gold tint over the glass surface reads as "warm
220
+ glass" without announcing the hover state prematurely. */
221
+ background-image:
222
+ linear-gradient(
223
+ 135deg,
224
+ color-mix(in srgb, var(--color-gold) 8%, transparent),
225
+ color-mix(in srgb, var(--color-gold-light) 5%, transparent) 50%,
226
+ color-mix(in srgb, var(--color-gold) 8%, transparent)
227
+ );
228
+
229
+ /* Hover: deepen the plate to a SATURATED gold the white label clears (AW.W13
230
+ names a "saturated gold backplate"; the D1 fix). The bottom layer is the
231
+ OPAQUE fixed deep gold (`--color-gold-deep`, mode-INVARIANT) — a solid plate
232
+ at ~6.5:1 (light) / ~5.5:1 (dark) against white, well below the ~0.18
233
+ luminance floor white text needs for ≥4.5:1 (was a translucent 22-30% wash
234
+ over near-cream glass → 1.29:1 white-on-pale-gold). The plate is FIXED-dark
235
+ in both modes — deepening toward the mode-flipping `--foreground` brightened
236
+ the dark plate to a cream-gold; `--color-gold-deep` does not flip. The
237
+ shimmer sweep rides ABOVE as a LOW-alpha gold gradient (normal blend, ≤18% —
238
+ it textures the plate without brightening it past the floor), and the
239
+ paper-grain overlays for the disco facet. */
240
+ &:hover:not(:disabled) {
241
+ background-image:
242
+ var(--paper-clean-texture),
243
+ linear-gradient(
244
+ 90deg,
245
+ transparent 0%,
246
+ color-mix(in srgb, var(--color-gold) 14%, transparent) 25%,
247
+ color-mix(in srgb, var(--color-gold) 18%, transparent) 50%,
248
+ color-mix(in srgb, var(--color-gold) 14%, transparent) 75%,
249
+ transparent 100%
250
+ ),
251
+ linear-gradient(
252
+ 135deg,
253
+ var(--color-gold-deep),
254
+ color-mix(in srgb, var(--color-gold-deep), var(--color-gold-dark) 18%) 50%,
255
+ var(--color-gold-deep)
256
+ );
257
+ background-blend-mode: overlay, normal, normal;
258
+ background-size: var(--paper-texture-size), 250% 100%, 100% 100%;
259
+ background-position: 0 0, 100% 0, 0 0;
260
+ box-shadow:
261
+ var(--glass-specular),
262
+ 0 0 0 1px color-mix(in srgb, var(--color-gold-dark) 40%, transparent),
263
+ 0 0.5px 0 0 rgb(0 0 0 / 0.06);
264
+ }
265
+
266
+ @media (prefers-reduced-motion: no-preference) {
267
+ &:hover:not(:disabled) {
268
+ animation: btn-gold-bg-sweep var(--duration-shimmer) linear infinite;
269
+ }
270
+ }
271
+ }
272
+
273
+ /* Background-position sweep for the gold CTA hover shimmer.
274
+ Distinct from `gold-shimmer-slide` (which animates background-position for
275
+ a text-clip gradient). This variant sweeps the `background-position` of the
276
+ 250% wide gradient across the button's bounding box. */
277
+ @keyframes btn-gold-bg-sweep {
278
+ 0% { background-position: 0 0, 100% 0, 0 0; }
279
+ 100% { background-position: 0 0, -100% 0, 0 0; }
280
+ }
281
+
282
+ /* ── Table density utilities — AN.R0 ─────────────────────────────────────
283
+ `table-cell` and `table-head` replace the former Tailwind `p-4` / `h-12`
284
+ literals in TableCell.vue / TableHead.vue. Both read `--table-density`
285
+ (tokens.css §19) so a single CSS-var assignment on a wrapping element
286
+ scales all row padding + header height simultaneously. Default density=1
287
+ resolves to the identical geometry as the previous Tailwind literals. */
288
+ @utility table-cell {
289
+ padding-inline: var(--table-cell-px, 1rem);
290
+ padding-block: var(--table-cell-py, 1rem);
291
+ }
292
+
293
+ @utility table-head {
294
+ height: var(--table-head-h, 3rem);
295
+ padding-inline: var(--table-head-px, 1rem);
296
+ }
297
+
298
+ /* ── Rainbow gradient backgrounds ───────────────────────────────────────
299
+ `.rainbow-vivid` + `.rainbow-pastel` paint a left-to-right 7-stop spectrum
300
+ from the canonical `--rainbow-*` / `--rainbow-pastel-*` token families
301
+ (tokens.css §14). Consumed by keyframes.js's `AnimationMenuBar.vue` round
302
+ play button — `rainbow-vivid` (playing) / `rainbow-pastel` (idle). */
303
+ @utility rainbow-vivid {
304
+ background: linear-gradient(
305
+ to right,
306
+ var(--rainbow-red),
307
+ var(--rainbow-orange),
308
+ var(--rainbow-yellow),
309
+ var(--rainbow-green),
310
+ var(--rainbow-blue),
311
+ var(--rainbow-indigo),
312
+ var(--rainbow-violet)
313
+ );
314
+ }
315
+
316
+ @utility rainbow-pastel {
317
+ background: linear-gradient(
318
+ to right,
319
+ var(--rainbow-pastel-red),
320
+ var(--rainbow-pastel-orange),
321
+ var(--rainbow-pastel-yellow),
322
+ var(--rainbow-pastel-green),
323
+ var(--rainbow-pastel-blue),
324
+ var(--rainbow-pastel-indigo),
325
+ var(--rainbow-pastel-violet)
326
+ );
327
+ }
328
+
329
+ /* ── Text-highlight paint (CSS Custom Highlight API) ─────────────────────
330
+ The default `::highlight()` paint for the `useTextHighlight` composable
331
+ (composables/motion; the `/motion-core` subpath, AX.W37). A named `Highlight`
332
+ registered in `CSS.highlights`
333
+ under one of these keys paints its `Range` set without a `<mark>` wrapper.
334
+ Token-bridged: the search mark reads the canonical pastel-yellow rainbow
335
+ token at a soft alpha; the equation/variable mark reads `--primary`. Both
336
+ axes are overridable via the `--text-highlight-*` custom properties. */
337
+ ::highlight(glass-search-mark) {
338
+ background-color: var(
339
+ --text-highlight-search-bg,
340
+ color-mix(in srgb, var(--rainbow-pastel-yellow) 55%, transparent)
341
+ );
342
+ color: var(--text-highlight-search-fg, inherit);
343
+ }
344
+ ::highlight(glass-mark) {
345
+ background-color: var(
346
+ --text-highlight-bg,
347
+ color-mix(in srgb, var(--primary) 18%, transparent)
348
+ );
349
+ color: var(--text-highlight-fg, inherit);
350
+ }
351
+
352
+ /* ── Interactive-button four-state recipe ────────────────────────────────
353
+ `.btn-interactive` carries the canonical "Button-with-spring-hover"
354
+ four-state contract — transition + hover-scale + active-press + disabled-
355
+ opacity + focus-ring fade-in. The Button primitive's variants emit the four
356
+ states except `hover:scale-*`; this is the canonical opt-in that adds the
357
+ spring-hover lift. Consumed by keyframes.js at 7 sites.
358
+
359
+ AX.W52 §6 — the hover lift is the restrained `--scale-hover-btn` (1.05, NOT
360
+ the emphatic 1.08 `--scale-hover`) routed through `--spring-smooth` — the ONE
361
+ button scale register the §6 doctrine records and the gate asserts across
362
+ `.btn-pill`/`.tap-squish`/`.glass-btn`/`btn-interactive`. The surface legs
363
+ stay on the bezier `--ease-standard` (a colour cross-fade reads as a wobble
364
+ on a spring); only the `scale` transform leg springs. */
365
+ @utility btn-interactive {
366
+ /* AQ.W3 §W3.2 identity base */
367
+ scale: 1;
368
+ transition:
369
+ background-color var(--duration-fast) var(--ease-standard),
370
+ color var(--duration-fast) var(--ease-standard),
371
+ scale var(--duration-fast) var(--spring-smooth),
372
+ opacity var(--duration-fast) var(--ease-standard);
373
+
374
+ &:hover {
375
+ scale: var(--scale-hover-btn);
376
+ }
377
+
378
+ &:active {
379
+ scale: var(--scale-press);
380
+ }
381
+
382
+ &:disabled {
383
+ opacity: var(--opacity-disabled);
384
+ pointer-events: none;
385
+ }
386
+
387
+ &:focus-visible {
388
+ box-shadow: var(--focus-ring-shadow);
389
+ outline: none;
390
+ /* Fade in; base state has no box-shadow transition → instant
391
+ removal. The `scale` leg keeps the `--spring-smooth` register. */
392
+ transition:
393
+ background-color var(--duration-fast) var(--ease-standard),
394
+ color var(--duration-fast) var(--ease-standard),
395
+ scale var(--duration-fast) var(--spring-smooth),
396
+ opacity var(--duration-fast) var(--ease-standard),
397
+ box-shadow var(--duration-fast) var(--ease-standard);
398
+ }
399
+ }