@mkbabb/glass-ui 3.10.1 → 3.11.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 (279) hide show
  1. package/dist/{CardAction-DrAcAV4d.js → CardAction-DuArVky-.js} +2 -2
  2. package/dist/{CommandShortcut-mV2e1aG6.js → CommandShortcut-CefCj5mt.js} +2 -2
  3. package/dist/{DataTable-C3E6jZ5B.js → DataTable-CUHMukiQ.js} +2 -2
  4. package/dist/DeckProgress-Dmk4_AKN.js +23 -0
  5. package/dist/{DialogContent-BxaaafFi.js → DialogContent-BRkT1cjP.js} +1 -1
  6. package/dist/{HoverPopover-CDA_SaCe.js → HoverPopover-2LOIW34a.js} +1 -1
  7. package/dist/InstrumentRail-CUJ05YVG.js +44 -0
  8. package/dist/{MetricBadge-idgrkqoP.js → MetricBadge-BZVWIxNy.js} +7 -5
  9. package/dist/{Notification-Cu0nN17_.js → Notification-DLMhblXR.js} +1 -1
  10. package/dist/{NumberFieldContent-CHEWghnY.js → NumberFieldContent-BbLOh8RU.js} +2 -2
  11. package/dist/{PopoverContent-DpUvdYY-.js → PopoverContent-BId6ggf_.js} +1 -1
  12. package/dist/{Progress-BW-StFw2.js → Progress-iEuD9pxG.js} +1 -1
  13. package/dist/{ScrollingText-DruYCni_.js → ScrollingText-BPP84wKo.js} +1 -1
  14. package/dist/{SelectScrollDownButton-pirzjm--.js → SelectScrollDownButton-T32cVFeM.js} +3 -3
  15. package/dist/{Switch-DeAqg6pi.js → Switch-Ch-k3Rv-.js} +1 -1
  16. package/dist/{TabsList-BAVzOZpg.js → TabsList-B8CVOQPC.js} +2 -2
  17. package/dist/{Toaster-CvuuW_y9.js → Toaster-1rYWrmAm.js} +46 -49
  18. package/dist/{ToggleGroupItem-DtD37b4G.js → ToggleGroupItem-COu_4IW4.js} +21 -17
  19. package/dist/animated-digit.js +2 -2
  20. package/dist/api/index.d.ts +5 -4
  21. package/dist/api.js +2 -2
  22. package/dist/aurora.js +70 -70
  23. package/dist/{badge-NdCQMvvB.js → badge-CaoFJzRb.js} +1 -1
  24. package/dist/badge.js +1 -1
  25. package/dist/{button-DyiWFAOE.js → button-DN39cGqL.js} +12 -12
  26. package/dist/button.js +1 -1
  27. package/dist/canvas.js +2 -2
  28. package/dist/card.js +1 -1
  29. package/dist/carousel.js +5 -5
  30. package/dist/collapsible.js +1 -1
  31. package/dist/{color-B65wWyQz.js → color-C5ls_QF7.js} +7 -9
  32. package/dist/color.js +1 -1
  33. package/dist/command.js +1 -1
  34. package/dist/components/custom/aurora/constants/presets.d.ts +62 -5
  35. package/dist/components/custom/aurora/constants/shaders/mediums.glsl.d.ts +1 -1
  36. package/dist/components/custom/aurora/index.d.ts +1 -1
  37. package/dist/components/custom/constellation/Constellation.vue.d.ts +0 -12
  38. package/dist/components/custom/constellation/constellationField.d.ts +151 -10
  39. package/dist/components/custom/constellation/index.d.ts +1 -3
  40. package/dist/components/custom/controls/DarkModeToggle.vue.d.ts +0 -11
  41. package/dist/components/custom/deck-progress/DeckProgress.vue.d.ts +27 -0
  42. package/dist/components/custom/deck-progress/index.d.ts +2 -0
  43. package/dist/components/custom/dialog-native/GlassDialogNative.vue.d.ts +57 -0
  44. package/dist/components/custom/dialog-native/index.d.ts +1 -0
  45. package/dist/components/custom/dock/DockTabButton.vue.d.ts +4 -3
  46. package/dist/components/custom/dock/GlassDock.vue.d.ts +115 -3
  47. package/dist/components/custom/dock/composables/dockMorphContext.d.ts +0 -36
  48. package/dist/components/custom/dock/composables/useLayerTransition.d.ts +0 -44
  49. package/dist/components/custom/expandable-container/ExpandableContainer.vue.d.ts +37 -5
  50. package/dist/components/custom/fourier-field/index.d.ts +1 -1
  51. package/dist/components/custom/fourier-field/math.d.ts +0 -17
  52. package/dist/components/custom/glass-panel/GlassPanel.vue.d.ts +41 -0
  53. package/dist/components/custom/glass-panel/index.d.ts +2 -0
  54. package/dist/components/custom/goo-blob/composables/useBlobPointer.d.ts +3 -4
  55. package/dist/components/custom/goo-blob/composables/useMetaballRenderer.d.ts +8 -11
  56. package/dist/components/custom/handmark/HandMark.vue.d.ts +29 -0
  57. package/dist/components/custom/handmark/brush.d.ts +242 -0
  58. package/dist/components/custom/handmark/freehand.d.ts +69 -0
  59. package/dist/components/custom/handmark/geometry.d.ts +50 -0
  60. package/dist/components/custom/handmark/index.d.ts +21 -0
  61. package/dist/components/custom/handmark/ink.d.ts +11 -0
  62. package/dist/components/custom/handmark/texture.d.ts +39 -0
  63. package/dist/components/custom/handmark/types.d.ts +53 -0
  64. package/dist/components/custom/handmark/useHandMark.d.ts +87 -0
  65. package/dist/components/custom/header-ribbon/HeaderRibbon.vue.d.ts +31 -0
  66. package/dist/components/custom/header-ribbon/index.d.ts +2 -0
  67. package/dist/components/custom/header-ribbon/types.d.ts +7 -0
  68. package/dist/components/custom/instrument-chassis/InstrumentChassis.vue.d.ts +2 -2
  69. package/dist/components/custom/instrument-rail/InstrumentRail.vue.d.ts +91 -0
  70. package/dist/components/custom/instrument-rail/index.d.ts +2 -0
  71. package/dist/components/custom/metric-badge/MetricBadge.vue.d.ts +8 -0
  72. package/dist/components/ui/drawer/Drawer.vue.d.ts +0 -1
  73. package/dist/components/ui/dropdown-menu/DropdownMenuSubContent.vue.d.ts +2 -2
  74. package/dist/components/ui/slider/index.d.ts +19 -22
  75. package/dist/components/ui/toast/use-toast.d.ts +2 -2
  76. package/dist/components/ui/toggle/Toggle.vue.d.ts +1 -1
  77. package/dist/components/ui/toggle/index.d.ts +1 -1
  78. package/dist/components/ui/toggle-group/ToggleGroup.vue.d.ts +7 -1
  79. package/dist/components/ui/toggle-group/ToggleGroupItem.vue.d.ts +3 -1
  80. package/dist/components/ui/toggle-group/toggleGroupContext.d.ts +13 -0
  81. package/dist/composables/color/index.d.ts +0 -12
  82. package/dist/composables/dark/index.d.ts +1 -1
  83. package/dist/composables/dark/useGlobalDark.d.ts +21 -1
  84. package/dist/composables/glass/useSpecularTracking.d.ts +3 -12
  85. package/dist/composables/motion/core/index.d.ts +1 -0
  86. package/dist/composables/motion/index.d.ts +0 -2
  87. package/dist/composables/motion/useRouteTransition.d.ts +42 -0
  88. package/dist/composables/motion/useSpringMount.d.ts +1 -1
  89. package/dist/configurator.js +1 -1
  90. package/dist/confirm-dialog.js +2 -2
  91. package/dist/constellation.js +225 -260
  92. package/dist/controls.js +14 -48
  93. package/dist/dark.d.ts +1 -1
  94. package/dist/dark.js +1 -1
  95. package/dist/data-table.js +1 -1
  96. package/dist/deck-progress.d.ts +1 -0
  97. package/dist/deck-progress.js +2 -0
  98. package/dist/dialog.js +2 -2
  99. package/dist/dock.js +345 -340
  100. package/dist/dockContext-BKeIMmNk.js +9 -0
  101. package/dist/{dropdown-menu-DVnQcA0E.js → dropdown-menu-D77jX6Df.js} +4 -7
  102. package/dist/dropdown-menu.js +1 -1
  103. package/dist/expandable-container.js +79 -38
  104. package/dist/forms.js +2 -2
  105. package/dist/fourier-field.js +102 -137
  106. package/dist/fourier-math.js +2 -2
  107. package/dist/glass-panel.d.ts +1 -0
  108. package/dist/glass-panel.js +44 -0
  109. package/dist/glass-ui.css +1 -1
  110. package/dist/glass-ui.js +209 -287
  111. package/dist/goo-blob.js +212 -243
  112. package/dist/handmark.d.ts +1 -0
  113. package/dist/handmark.js +663 -0
  114. package/dist/header-ribbon.d.ts +1 -0
  115. package/dist/header-ribbon.js +63 -0
  116. package/dist/hover-popover.js +1 -1
  117. package/dist/icon-tooltip.js +1 -1
  118. package/dist/index.d.ts +3 -0
  119. package/dist/instrument-rail.d.ts +1 -0
  120. package/dist/instrument-rail.js +2 -0
  121. package/dist/keyboard.js +1 -1
  122. package/dist/labeled-field.js +5 -5
  123. package/dist/{math-BUU9hHID.js → math-DTpRVC0e.js} +2 -18
  124. package/dist/metric-badge.js +1 -1
  125. package/dist/metric-stack.js +1 -1
  126. package/dist/motion-core.js +70 -69
  127. package/dist/motion.js +37 -38
  128. package/dist/notification.js +1 -1
  129. package/dist/number-field.js +1 -1
  130. package/dist/popover.js +1 -1
  131. package/dist/{presets-1OhFpaIC.js → presets-BP_ALM0m.js} +14 -1
  132. package/dist/progress.js +1 -1
  133. package/dist/pulse.js +1 -1
  134. package/dist/reactive.js +1 -1
  135. package/dist/scrolling-text.js +1 -1
  136. package/dist/search.js +6 -6
  137. package/dist/select.js +1 -1
  138. package/dist/{sheet-ChSXcJpU.js → sheet-VZEtNFvO.js} +1 -1
  139. package/dist/sheet.js +1 -1
  140. package/dist/{slider-sfl8gFDD.js → slider-ClgpP7EB.js} +4 -4
  141. package/dist/slider.js +1 -1
  142. package/dist/sortable-list.js +2 -2
  143. package/dist/stacked-icons.js +6 -6
  144. package/dist/styles/animations.css +111 -15
  145. package/dist/styles/components.css +1 -1
  146. package/dist/styles/dock/layer-group.css +0 -22
  147. package/dist/styles/dock/layers.css +1 -11
  148. package/dist/styles/dock/morph.css +19 -95
  149. package/dist/styles/dock/shell.css +0 -12
  150. package/dist/styles/dock-controls.css +31 -28
  151. package/dist/styles/drawer.css +0 -2
  152. package/dist/styles/floating-panel.css +0 -2
  153. package/dist/styles/glass-refract.css +0 -2
  154. package/dist/styles/glass.css +1188 -31
  155. package/dist/styles/hover-popover.css +0 -2
  156. package/dist/styles/index.css +6 -24
  157. package/dist/styles/instrument-chassis.css +0 -4
  158. package/dist/styles/paper.css +68 -2
  159. package/dist/styles/theme.css +20 -13
  160. package/dist/styles/tokens.css +2360 -22
  161. package/dist/styles/typography.css +6 -18
  162. package/dist/styles/utilities.css +1291 -19
  163. package/dist/styles/view-transition.css +51 -0
  164. package/dist/switch.js +1 -1
  165. package/dist/tabs.js +98 -98
  166. package/dist/timeline.js +2 -2
  167. package/dist/toast.js +1 -1
  168. package/dist/toggle-group.js +1 -1
  169. package/dist/typewriter.js +1 -1
  170. package/dist/{useAnimatedNumber-DfVgP4te.js → useAnimatedNumber-Bcpy5Etf.js} +1 -1
  171. package/dist/{useConfiguratorState-BdQXh9ie.js → useConfiguratorState-DxAqksK6.js} +1 -1
  172. package/dist/useGlassRenderer-D7YGOYiM.js +69 -0
  173. package/dist/{useGlobalDark-D7R9OypB.js → useGlobalDark-D1wgEqfW.js} +21 -2
  174. package/dist/useSpecularTracking-BVRZsRHA.js +26 -0
  175. package/dist/useSpringMount-BJSHcLl3.js +113 -0
  176. package/dist/useViewTransition-DaN5Zrox.js +21 -0
  177. package/dist/vReveal-zUIQk-rJ.js +53 -0
  178. package/dist/watercolor-dot.js +2 -2
  179. package/package.json +57 -33
  180. package/src/styles/animations.css +111 -15
  181. package/src/styles/dock/layer-group.css +0 -22
  182. package/src/styles/dock/layers.css +1 -11
  183. package/src/styles/dock/morph.css +19 -95
  184. package/src/styles/dock/shell.css +0 -12
  185. package/src/styles/dock-controls.css +31 -28
  186. package/src/styles/glass.css +1188 -31
  187. package/src/styles/index.css +6 -24
  188. package/src/styles/paper.css +68 -2
  189. package/src/styles/theme.css +20 -13
  190. package/src/styles/tokens.css +2360 -22
  191. package/src/styles/typography.css +6 -18
  192. package/src/styles/utilities.css +1291 -19
  193. package/src/styles/view-transition.css +51 -0
  194. package/dist/components/custom/aurora/constants/shaders/vangogh-medium.glsl.d.ts +0 -1
  195. package/dist/components/custom/constellation/composables/createConstellationField.d.ts +0 -35
  196. package/dist/components/custom/constellation/composables/useConstellationPointer.d.ts +0 -35
  197. package/dist/components/custom/constellation/constants.d.ts +0 -36
  198. package/dist/components/custom/constellation/constellationDraw.d.ts +0 -18
  199. package/dist/components/custom/constellation/constellationInteraction.d.ts +0 -102
  200. package/dist/components/custom/dock/composables/useDockMorphWindow.d.ts +0 -15
  201. package/dist/components/custom/dock/composables/useDockShellProps.d.ts +0 -131
  202. package/dist/components/custom/dock/constants.d.ts +0 -23
  203. package/dist/components/custom/fourier-field/presets.d.ts +0 -54
  204. package/dist/components/custom/goo-blob/composables/buildMetaballProgram.d.ts +0 -18
  205. package/dist/components/custom/goo-blob/composables/uploadBlobUniforms.d.ts +0 -41
  206. package/dist/components/custom/goo-blob/constants.d.ts +0 -52
  207. package/dist/components/custom/goo-blob/shaders/metaball-uniforms.glsl.d.ts +0 -1
  208. package/dist/components/custom/tabs/constants.d.ts +0 -12
  209. package/dist/components/custom/underline/GlassUnderline.vue.d.ts +0 -84
  210. package/dist/components/custom/underline/index.d.ts +0 -2
  211. package/dist/components/custom/underline/types.d.ts +0 -56
  212. package/dist/composables/motion/curves.d.ts +0 -48
  213. package/dist/composables/motion/springPresets.d.ts +0 -33
  214. package/dist/composables/motion/suite.d.ts +0 -2
  215. package/dist/dockContext-bho8B1A4.js +0 -17
  216. package/dist/motion-curves.d.ts +0 -1
  217. package/dist/motion-curves.js +0 -130
  218. package/dist/springPresets-aRSm-4_k.js +0 -40
  219. package/dist/styles/glass/a11y-fallback.css +0 -245
  220. package/dist/styles/glass/ladder.css +0 -304
  221. package/dist/styles/glass/material.css +0 -238
  222. package/dist/styles/glass/progress-rail.css +0 -78
  223. package/dist/styles/glass/squircle.css +0 -66
  224. package/dist/styles/glass/surfaces.css +0 -306
  225. package/dist/styles/tokens/color-radius.css +0 -250
  226. package/dist/styles/tokens/dark-arm.css +0 -194
  227. package/dist/styles/tokens/glass.css +0 -413
  228. package/dist/styles/tokens/light-dark.css +0 -158
  229. package/dist/styles/tokens/offsets-sizing.css +0 -406
  230. package/dist/styles/tokens/property-regs.css +0 -169
  231. package/dist/styles/tokens/scale-paper.css +0 -361
  232. package/dist/styles/tokens/scheme-motion.css +0 -334
  233. package/dist/styles/tokens/shadow.css +0 -132
  234. package/dist/styles/utilities/a11y-overrides.css +0 -140
  235. package/dist/styles/utilities/animate.css +0 -26
  236. package/dist/styles/utilities/base.css +0 -365
  237. package/dist/styles/utilities/btn.css +0 -399
  238. package/dist/styles/utilities/components.css +0 -317
  239. package/dist/underline.d.ts +0 -1
  240. package/dist/underline.js +0 -85
  241. package/dist/useSpecularTracking-DFK_fhpG.js +0 -32
  242. package/dist/useSpringMount-DXUzxBjV.js +0 -108
  243. package/dist/vReveal-CqaCz_mC.js +0 -44
  244. package/src/styles/glass/a11y-fallback.css +0 -245
  245. package/src/styles/glass/ladder.css +0 -304
  246. package/src/styles/glass/material.css +0 -238
  247. package/src/styles/glass/progress-rail.css +0 -78
  248. package/src/styles/glass/squircle.css +0 -66
  249. package/src/styles/glass/surfaces.css +0 -306
  250. package/src/styles/tokens/color-radius.css +0 -250
  251. package/src/styles/tokens/dark-arm.css +0 -194
  252. package/src/styles/tokens/glass.css +0 -413
  253. package/src/styles/tokens/light-dark.css +0 -158
  254. package/src/styles/tokens/offsets-sizing.css +0 -406
  255. package/src/styles/tokens/property-regs.css +0 -169
  256. package/src/styles/tokens/scale-paper.css +0 -361
  257. package/src/styles/tokens/scheme-motion.css +0 -334
  258. package/src/styles/tokens/shadow.css +0 -132
  259. package/src/styles/utilities/a11y-overrides.css +0 -140
  260. package/src/styles/utilities/animate.css +0 -26
  261. package/src/styles/utilities/base.css +0 -365
  262. package/src/styles/utilities/btn.css +0 -399
  263. package/src/styles/utilities/components.css +0 -317
  264. /package/dist/{CollapsibleContent-Drow5WkV.js → CollapsibleContent-CP9qF1v4.js} +0 -0
  265. /package/dist/{DialogFooter-DufLHi0y.js → DialogFooter-Gprw8H_A.js} +0 -0
  266. /package/dist/{IconTooltip-BrQ5p181.js → IconTooltip-Cus0fvK0.js} +0 -0
  267. /package/dist/{Input-B-F818RU.js → Input-xuDwALQR.js} +0 -0
  268. /package/dist/{_plugin-vue_export-helper-DWghtRt7.js → _plugin-vue_export-helper-ok8pgSl5.js} +0 -0
  269. /package/dist/{compile-Ce_V55zi.js → compile-BOXjLUxu.js} +0 -0
  270. /package/dist/{constants-C8NMonuo.js → constants-yKeKnE84.js} +0 -0
  271. /package/dist/{prng-CjVgzjQT.js → prng-D27-B3tK.js} +0 -0
  272. /package/dist/{resolveCanvasColor-CRvVzOvP.js → resolveCanvasColor-BBiYfp8g.js} +0 -0
  273. /package/dist/{useCanvas2D-CSeH8h16.js → useCanvas2D-ClrQuZtp.js} +0 -0
  274. /package/dist/{useIntersectionPause-DAdVPVp4.js → useIntersectionPause-Cck5Uxk8.js} +0 -0
  275. /package/dist/{useInterval-D3USn0yc.js → useInterval-Dsmqwi03.js} +0 -0
  276. /package/dist/{useKeyboardShortcuts-i8tHd5WO.js → useKeyboardShortcuts-CyIYrndH.js} +0 -0
  277. /package/dist/{useScrollProgress-CcgmgMQt.js → useScrollProgress-CffFGLa5.js} +0 -0
  278. /package/dist/{useSortable-DnyGXKKY.js → useSortable-C8ReQ50P.js} +0 -0
  279. /package/dist/{useTextHighlight-B3b10W6r.js → useTextHighlight-CWEi25hf.js} +0 -0
@@ -1,365 +0,0 @@
1
- /* utilities/base.css
2
- The @layer components base half — section-description, labeled-field, popover-content, scrollbar, focus-ring, hairline-accent, interactive-item, tap-squish, status-dot, depth-text, preserve-3d, ios input fix, scroll-fade masks, deferred-section, scroll-timeline host, shimmer text, keyboard key.
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
- @layer components {
6
- /* ── Section description (V.W3.T7) ──────────────────────────────
7
- Canonical recipe for the `<Section>` primitive's description
8
- paragraph. Composes the body type + muted-foreground color in
9
- one declaration so consumers don't fight twMerge's
10
- typography-class collapse. */
11
- .section-description {
12
- font-size: var(--type-body);
13
- color: var(--muted-foreground);
14
- line-height: 1.5;
15
- text-wrap: pretty; /* AQ.W3 §W3.3 — prose-register orphan/river fix */
16
- }
17
-
18
- /* ── Labeled-field label (V.W3.T5 / A5 §5.5) ────────────────────
19
- Canonical recipe for `<LabeledField>`'s tooltip-wrapped label
20
- layer. Four sibling wrappers (LabeledInput, LabeledSelect,
21
- LabeledSlider, LabeledSwitch) used to repeat this literal across
22
- their templates; promoting it to a utility lets the parent SFC
23
- own one canonical declaration. */
24
- .labeled-field-label {
25
- font-family: var(--font-display);
26
- font-size: var(--type-body);
27
- /* AQ.W4 §W3.1c — the label color reads the group-state variable so the
28
- `:has(:user-invalid)` rule below reddens it (one source of the
29
- override value, shared with the `.has-error` fallback class). */
30
- color: var(--field-label-color, var(--muted-foreground));
31
- cursor: help;
32
- }
33
-
34
- /* AQ.W4 §W3.1c — LabeledField group error highlight. When any descendant
35
- control is `:user-invalid`, the whole field group marks (the label
36
- reddens via `--field-label-color`, the error region reveals). Scoped to
37
- `.labeled-field` — never `body`, never a bare element. `:has()` Baseline
38
- Widely; the `.has-error` / `.has-valid` fallback classes (toggled by the
39
- `useUserInvalidAria` fallback path) are the SOLE degradation for engines
40
- without `:has()`/`:user-invalid` (not a live+dead alias). */
41
- .labeled-field {
42
- --field-label-color: var(--muted-foreground);
43
- }
44
- .labeled-field:has(:user-invalid),
45
- .labeled-field.has-error {
46
- --field-label-color: var(--destructive);
47
- }
48
-
49
- /* The error region: hidden at rest, revealed once a descendant is
50
- `:user-invalid` (or the `.has-error` fallback class is set). Non-color
51
- reinforcement for the validity tint — the error TEXT is the primary
52
- cue, the border/bg shift the supplement (forms guide: never color
53
- alone). */
54
- .labeled-field-error {
55
- display: none;
56
- font-size: var(--type-small);
57
- color: var(--destructive);
58
- margin-block-start: 0.25rem;
59
- }
60
- .labeled-field:has(:user-invalid) .labeled-field-error,
61
- .labeled-field.has-error .labeled-field-error {
62
- display: block;
63
- }
64
- /* Hide the error text once the field reads valid (the user corrected it). */
65
- .labeled-field:has(:user-valid) .labeled-field-error,
66
- .labeled-field.has-valid .labeled-field-error {
67
- display: none;
68
- }
69
-
70
- /* ── Popover-content recipe (V.W3.T3 / A5 §3.2) ─────────────────
71
- Canonical recipe for floating-tier portal containers
72
- (PopoverContent, DropdownMenuContent, SelectContent, etc.).
73
- Covers radius + outline + popover-foreground; consumers compose
74
- this with `.glass-floating` (bg + blur + border + shadow), with
75
- `.popover-animate` (data-state animation), and with the per-host
76
- z-rung. The floating-tier shadow comes from
77
- `--glass-shadow-floating` via `.glass-floating`, replacing the
78
- `shadow-md`/`shadow-lg` literals that bypassed the canonical
79
- cascade. */
80
- .popover-content {
81
- border-radius: var(--radius-panel);
82
- color: var(--popover-foreground);
83
- outline: none;
84
- }
85
-
86
- /* ── Scrollbar ── */
87
- .scrollbar-hidden {
88
- scrollbar-width: none;
89
- }
90
- .scrollbar-hidden::-webkit-scrollbar {
91
- display: none;
92
- }
93
-
94
- /* AQ.W3 §W3.4 — tokenized thin scrollbar. Standard `scrollbar-width` +
95
- `scrollbar-color` (Baseline Widely, Chromium 121+) is the primary path,
96
- reading `--scrollbar-{thumb,track}` (auto-dark via `--muted-foreground`).
97
- The legacy `::-webkit-scrollbar` family is the SOLE fallback for older
98
- WebKit/Blink, gated on `@supports not (scrollbar-color: auto)` so modern
99
- engines never paint it — not a live+dead alias. */
100
- .scrollbar-thin {
101
- scrollbar-width: thin;
102
- scrollbar-color: var(--scrollbar-thumb) var(--scrollbar-track);
103
- }
104
- @supports not (scrollbar-color: auto) {
105
- .scrollbar-thin::-webkit-scrollbar {
106
- width: 8px;
107
- height: 8px;
108
- }
109
- .scrollbar-thin::-webkit-scrollbar-track {
110
- background: var(--scrollbar-track);
111
- }
112
- .scrollbar-thin::-webkit-scrollbar-thumb {
113
- background: var(--scrollbar-thumb);
114
- border-radius: var(--radius-pill);
115
- }
116
- }
117
-
118
- /* ── Focus ring — auto-activates on :focus-visible ── */
119
- .focus-ring:focus-visible {
120
- outline: none;
121
- border-radius: var(--radius-pill);
122
- box-shadow: var(--focus-ring-shadow);
123
- }
124
-
125
- /* ── Hairline-accent — 0.5px catch-light + under-shadow pair ──
126
- Composes the canonical `--border-hairline` token (tokens.css §
127
- Glass-decorative). Adopt at any surface that wants the canonical
128
- 2-stop hairline (dock surfaces, instrument-chassis). Auto-mirrors
129
- in dark via the .dark token override. */
130
- .hairline-accent {
131
- box-shadow: var(--border-hairline);
132
- }
133
-
134
- /* ── Interactive item (hover bg + focus ring + active scale) ── */
135
- .interactive-item {
136
- /* AQ.W3 §W3.2 identity base */
137
- scale: 1;
138
- border-radius: var(--radius-lg);
139
- user-select: none;
140
- transition:
141
- background-color var(--duration-fast) var(--ease-standard),
142
- color var(--duration-fast) var(--ease-standard),
143
- border-color var(--duration-fast) var(--ease-standard),
144
- box-shadow var(--duration-fast) var(--ease-standard),
145
- scale var(--duration-fast) var(--ease-standard);
146
- }
147
- .interactive-item:hover {
148
- background-color: color-mix(in srgb, var(--accent) 50%, transparent);
149
- }
150
- .interactive-item:focus-visible {
151
- outline: none;
152
- box-shadow: var(--focus-ring-shadow);
153
- }
154
- .interactive-item:active {
155
- /* AW.W31.a — fold the residual literal press scale onto the canonical
156
- `--scale-press*` cohort (the prior `0.98` was the sole per-atom press
157
- literal surviving the W2/W3/W25 sweeps). `--scale-press-sm` (0.97) is
158
- the soft press rung the button + slider recipes consume — ONE press
159
- vocabulary, no per-atom literal. The 0.98→0.97 delta is sub-perceptual. */
160
- scale: var(--scale-press-sm);
161
- }
162
- .interactive-item:disabled,
163
- .interactive-item[data-disabled] {
164
- pointer-events: none;
165
- opacity: var(--opacity-disabled);
166
- cursor: not-allowed;
167
- }
168
-
169
- /* ── Tap-squish — universal press-state choreography ──
170
- AL-W10 SLIM (X6 §M-1 + Y7 §3 + DESIGN.md §L3). I compose this
171
- class onto every interactive surface that wants the iOS tap-
172
- squish idiom; the press scales to `--scale-press` (0.96, the
173
- canonical iOS `.regular` control rung). I keep this as a single
174
- canonical rung — NOT a 3-rung ladder. The one outlier I leave
175
- alone is the button `0.97` (`--scale-press-btn`), which consumes
176
- its own slightly-softer token directly. The dock control now
177
- tracks the canonical `--scale-press` (0.96) too (AT.W7-dock-b
178
- press canon — the prior deeper `0.92` was retired to ONE source).
179
-
180
- AX.W52 §6 doctrine — the `scale` register is reconciled onto
181
- `--spring-smooth` (was `--spring-snappy`), the ONE button/interactive
182
- scale register the §6 easing doctrine records and the gate asserts
183
- across `.btn-pill`/`.tap-squish`/`.glass-btn`/`btn-interactive`. At
184
- ζ=0.86 `--spring-smooth` settles a press crisply with a sub-perceptual
185
- (~0.5%) peak — no visible bounce — so press still reads alive while
186
- hover reads as a smooth glide on the SAME spring.
187
-
188
- The transition lists the SURFACE legs (bg/border/box-shadow/color/
189
- opacity) on the bezier `--ease-standard` alongside the spring `scale`
190
- leg — the SAME coherent set `.btn-pill` carries. This is load-bearing:
191
- `.tap-squish` and `.btn-pill` are co-composed on the button base and
192
- this `transition` shorthand would otherwise CLOBBER `.btn-pill`'s
193
- surface legs down to a scale-only animation (the cascade bug that left
194
- every button transitioning ONLY `scale` — the live-readback RED). With
195
- both classes carrying the full set, whichever wins the surface cross-
196
- fade survives. On a non-button press surface the extra legs are inert
197
- unless that prop changes, in which case a smooth cross-fade is the
198
- desired interactive read anyway.
199
-
200
- Under PRM I retire the press transform entirely and lean on the
201
- consumer's own hover/active bg-tint cascade to acknowledge the
202
- press. */
203
- .tap-squish {
204
- /* AQ.W3 §W3.2 identity base */
205
- scale: 1;
206
- transition:
207
- background-color var(--duration-fast) var(--ease-standard),
208
- border-color var(--duration-fast) var(--ease-standard),
209
- box-shadow var(--duration-fast) var(--ease-standard),
210
- color var(--duration-fast) var(--ease-standard),
211
- opacity var(--duration-fast) var(--ease-standard),
212
- scale var(--duration-fast) var(--spring-smooth);
213
- transform-origin: center center;
214
- }
215
- .tap-squish:active {
216
- scale: var(--scale-press);
217
- }
218
- @media (prefers-reduced-motion: reduce) {
219
- .tap-squish:active {
220
- /* Reset to the longhand identity (not `transform: none`) so the
221
- press scale is neutralized under PRM. */
222
- scale: 1;
223
- }
224
- }
225
-
226
- /* ── Status dot indicator ── */
227
- .status-dot {
228
- display: inline-block;
229
- width: 0.5rem;
230
- height: 0.5rem;
231
- border-radius: var(--radius-pill);
232
- flex-shrink: 0;
233
- transition:
234
- color var(--duration-fast) var(--ease-standard),
235
- background var(--duration-fast) var(--ease-standard),
236
- box-shadow var(--duration-fast) var(--ease-standard);
237
- }
238
- /* ── Depth text (layered offset stamp) ──
239
- AW.W26 — composes the `--text-shadow-depth` @theme identity token (the
240
- hard offset stack + soft ambient tail) instead of a hand-rolled multi-stop
241
- literal. The token holds the stack inside the `@theme` defs (gate 4) and
242
- re-tints under `.dark` via `--shadow`/`--shadow-color` BY CONSTRUCTION. */
243
- .depth-text {
244
- --depth-color-primary: var(--primary);
245
-
246
- color: var(--depth-color-primary);
247
- text-shadow: var(--text-shadow-depth);
248
- }
249
-
250
- /* ── 3D preserve ── */
251
- .preserve-3d {
252
- transform-style: preserve-3d;
253
- }
254
-
255
- /* ── iOS input font-size fix (prevent auto-zoom) ── */
256
- .ios input,
257
- .ios select,
258
- .ios textarea,
259
- .ios [contenteditable] {
260
- font-size: max(1rem, 1em);
261
- }
262
-
263
- /* ── Scroll fade masks ──
264
- Single-source `mask-image` (AV.W16 TW7): the `-webkit-` companion is
265
- dropped — Tailwind v4's Lightning CSS build pipeline auto-prefixes per
266
- the browserslist targets, mirroring the glass ladder's single-source
267
- `backdrop-filter` (glass.css). NOTE: this is the consistency cut; it
268
- does NOT conflict with W15's `@supports`-gated older-Safari mask
269
- fallback (that fallback is the distinct case where the companion is
270
- genuinely needed and W15 gates it). */
271
- .scroll-fade-mask {
272
- mask-image: linear-gradient(to right, transparent, black var(--mask-fade-width), black calc(100% - var(--mask-fade-width)), transparent);
273
- }
274
-
275
- .scroll-fade-top {
276
- mask-image: linear-gradient(to bottom, transparent, black var(--mask-fade-width));
277
- }
278
-
279
- .scroll-fade-bottom {
280
- mask-image: linear-gradient(to bottom, black calc(100% - var(--mask-fade-width)), transparent);
281
- }
282
-
283
- .scroll-fade-y {
284
- mask-image: linear-gradient(to bottom, transparent, black var(--mask-fade-width), black calc(100% - var(--mask-fade-width)), transparent);
285
- }
286
-
287
- /* ── Deferred section — render-skip an offscreen subtree (AQ.W3 §5) ──────
288
- `content-visibility: auto` skips layout/paint/style of an offscreen
289
- subtree — the INP-under-load lever (fourier γ, muster, speedtest, words).
290
- `contain-intrinsic-size: auto <estimate>` is measurement-safe: the `auto`
291
- prefix makes the engine REMEMBER the last-rendered size (no scroll-jump on
292
- re-entry); plain `<estimate>` freezes the section + thrashes the scrollbar
293
- — the trap this closes. Estimate is token-driven (`--deferred-section-
294
- size`, default 30rem). `.deferred-section--cached` →
295
- `content-visibility: hidden` (always skipped, state CACHED — cheaper to
296
- re-show than `display:none`). Baseline Widely; unsupporting engines render
297
- normally. JS HOOK: the engine fires `contentvisibilityautostatechange`
298
- { skipped } at the render-skip boundary — pair with `useRAFLoop`
299
- pause/resume: `el.addEventListener('contentvisibilityautostatechange',
300
- e => e.skipped ? loop.pause() : loop.resume())`. */
301
- .deferred-section {
302
- content-visibility: auto;
303
- contain-intrinsic-size: auto var(--deferred-section-size, 30rem);
304
- }
305
- .deferred-section--cached {
306
- content-visibility: hidden;
307
- contain-intrinsic-size: auto var(--deferred-section-size, 30rem);
308
- }
309
-
310
- /* ── Card scroll-timeline host (AI.W1-α) ───────────────────────────────
311
- Canonical scroll-overflow host that emits the `--card-scroll` named
312
- scroll-timeline consumed by `<CardHeader shrink>`. Apply to the
313
- scroll-overflow ancestor (typically the `<Card>` itself OR a wrapper
314
- inside it that carries `overflow-y: auto`).
315
-
316
- `contain: layout style paint` isolates the named timeline so child
317
- animations respond to THIS host's scroll only — not to portal-
318
- triggered layout shifts in ancestor containers (the load-bearing
319
- isolation guarantee the value.js `PaneHeader.vue:18-29` comment
320
- called out and the AI.W1 spec §1.2 ratified as canon).
321
-
322
- Disambiguated from `.scroll-fade-*` (mask-image fade gradient at
323
- the container's leading/trailing edge) — `.card-scroll-host` does
324
- NOT paint any visual; it only emits the timeline. */
325
- .card-scroll-host {
326
- contain: layout style paint;
327
- scroll-timeline: --card-scroll block;
328
- }
329
-
330
- /* ── Shimmer text effects ──
331
- The text-fill + background-clip composition is load-bearing visual
332
- (the gold gradient itself); only the `animation:` line is wrapped in
333
- the PRM no-preference bracket so PRM users see the static gradient
334
- without the slide animation. */
335
- .gold-shimmer {
336
- background: linear-gradient(90deg, var(--color-gold-dark), var(--color-gold-light), var(--color-gold), var(--color-gold-light), var(--color-gold-dark));
337
- background-size: 250% 100%;
338
- background-clip: text;
339
- -webkit-background-clip: text;
340
- color: transparent;
341
- }
342
- @media (prefers-reduced-motion: no-preference) {
343
- .gold-shimmer {
344
- animation: gold-shimmer-slide var(--duration-shimmer) linear infinite;
345
- }
346
- }
347
-
348
- /* ── Keyboard key ── */
349
- .kbd {
350
- display: inline-flex;
351
- align-items: center;
352
- justify-content: center;
353
- min-height: 1.5rem;
354
- min-width: 1.5rem;
355
- padding: 0 0.375rem;
356
- font-family: var(--font-mono);
357
- font-size: var(--type-micro);
358
- background: var(--muted);
359
- border: 1px solid var(--border);
360
- border-radius: var(--radius-sm);
361
- box-shadow: 0 1px 0 1px color-mix(in srgb, var(--border) 30%, transparent);
362
- line-height: 1;
363
- }
364
-
365
- }