@mkbabb/glass-ui 3.10.1 → 3.11.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 (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 +662 -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,306 +0,0 @@
1
- /* glass/surfaces.css
2
- The convenience-shorthand surfaces — .glass-card / .glass-pill / .glass-btn + the glass pill-input + the chromatic edge-dispersion rim fringe.
3
- Carved from the glass.css cascade root; @import-ed by glass.css in cascade
4
- order, each in its own @layer components (isomorphic to the monolith).
5
- See docs/precepts/design-idioms.md §cohesion-aware partials. */
6
- @layer components {
7
- /* ── Convenience shorthands (tier + shape) ── */
8
-
9
- /* Static surface utility — no hover lift, no transition.
10
- Interactive cards live in <Card> (which owns its own hover composition)
11
- or in components that explicitly opt into a hover variant. */
12
- .glass-card {
13
- /* Focus-elevation rungs (AQ.W3 §W3.1a) — identity = at-rest paint; the
14
- `:has(:focus-visible)` rule redefines them (one source, shared with
15
- the fallback). */
16
- --card-focus-shadow: var(--shadow-card);
17
- --card-focus-border: var(--glass-border-quiet);
18
- position: relative;
19
- background: color-mix(in oklab, var(--glass-bg-quiet), var(--glass-tint-source) var(--glass-tint-strength));
20
- backdrop-filter: var(--glass-blur-quiet);
21
- border: 1px solid var(--card-focus-border);
22
- border-radius: var(--radius-card);
23
- box-shadow: var(--glass-material-rim), var(--card-focus-shadow);
24
- /* AY.W-A11Y-PERF O-4 — upgrade `layout style` → include `paint` so the
25
- maximal-glass nested backdrop-filter sample (a glass Button in this card)
26
- does not escape the card box (the standard nested-backdrop-cost mitigation;
27
- `contain: paint` clips DESCENDANTS only — the card's own rim/drop-shadow is
28
- NOT clipped, device-verified). */
29
- contain: layout style paint;
30
- transition:
31
- box-shadow var(--duration-fast) var(--ease-standard),
32
- border-color var(--duration-fast) var(--ease-standard);
33
- }
34
-
35
- /* Elevate one rung on descendant KEYBOARD focus (`:focus-visible`, not
36
- pointer). Scoped to `.glass-card`. `:has()` Baseline Widely; the
37
- `@supports not selector(:has(*))` class fallback (below) ships anyway
38
- (focus-elevation is UX-critical — child-state-styling MANDATORY clause). */
39
- .glass-card:has(:focus-visible) {
40
- --card-focus-shadow: var(--shadow-md);
41
- --card-focus-border: var(--glass-border-floating);
42
- }
43
-
44
- /* ── Glassmorphic circular icon button ── */
45
-
46
- .glass-btn {
47
- @apply flex items-center justify-center cursor-pointer;
48
-
49
- /* Individual-transform identity base (AQ.W3 §W3.2) — `scale: 1` at rest
50
- mints the stacking context once so the hover/press scale below does
51
- not flicker it into being (the z-index/anchor hazard). */
52
- scale: 1;
53
- width: var(--size-icon-btn);
54
- height: var(--size-icon-btn);
55
- border-radius: var(--radius-pill);
56
- border: 1.5px solid var(--glass-border-wash);
57
- background: var(--glass-bg-wash);
58
- backdrop-filter: var(--glass-blur-wash);
59
- /* AY.W-A11Y-PERF O-4 — paint containment so the glass button's own
60
- backdrop-filter sample stays inside the box when it nests in a glass card /
61
- dialog / dock (the nested-backdrop-cost mitigation; clips descendants only,
62
- the button's own rim/shadow is unaffected — device-verified). */
63
- contain: paint;
64
- color: var(--muted-foreground);
65
- /* AX.W52 §6 doctrine — the surface legs ride the bezier `--ease-standard`;
66
- the `scale` leg is reconciled onto `--spring-smooth` (was `--spring-snappy`)
67
- so the icon-button hover settles on the SAME ONE register as `.btn-pill` /
68
- `.tap-squish` / `btn-interactive` (the gate asserts one scale register
69
- across all four). The press still reads crisp — `--spring-smooth` ζ=0.86
70
- settles fast without a visible bounce. */
71
- transition:
72
- background var(--duration-fast) var(--ease-standard),
73
- border-color var(--duration-fast) var(--ease-standard),
74
- color var(--duration-fast) var(--ease-standard),
75
- scale var(--duration-normal) var(--spring-smooth);
76
- }
77
-
78
- .glass-btn:hover:not(:disabled) {
79
- background: color-mix(in srgb, var(--background) 85%, transparent);
80
- border-color: var(--surface-tint-22);
81
- color: var(--foreground);
82
- scale: var(--scale-hover);
83
- }
84
-
85
- .glass-btn:active:not(:disabled) {
86
- scale: var(--scale-press);
87
- }
88
-
89
- .glass-btn:focus-visible {
90
- outline: none;
91
- box-shadow: var(--focus-ring-shadow);
92
- }
93
-
94
- .glass-btn:disabled {
95
- opacity: 0.35;
96
- cursor: not-allowed;
97
- pointer-events: none;
98
- }
99
-
100
- .glass-btn.is-active,
101
- .glass-btn[aria-pressed="true"] {
102
- background: var(--surface-tint-10);
103
- border-color: var(--surface-tint-25);
104
- color: var(--foreground);
105
- }
106
-
107
- /* ── Pill button base ─────────────────────────── */
108
- .btn-pill {
109
- @apply inline-flex items-center justify-center cursor-pointer font-medium border-none;
110
-
111
- /* AX.W52 §6 identity base — `scale: 1` at rest so the hover/press scale
112
- below animates the `scale` longhand (not `transform`) coherently and
113
- does not flicker the stacking context into being (AQ.W3 §W3.2). */
114
- scale: 1;
115
- /* AX.W51 D18 — the pill GEOMETRY rides the ONE `--ui-scale` comfort axis.
116
- gap / padding scale by the master scalar; the font reads the
117
- `--control-text` register (`calc(--type-small * --ui-scale)`, the same
118
- `text-sm` register the Button CVA paints), so a bare `.btn-pill` consumer
119
- and a `<Button>` agree on the control font, and ONE `--ui-scale` override
120
- grows the pill's height (via padding) + gap + font in lockstep. Desktop
121
- default is the identity (scale 1 → the prior proportion). */
122
- gap: calc(0.375rem * var(--ui-scale));
123
- border-radius: var(--radius-pill);
124
- padding: calc(0.5rem * var(--ui-scale)) calc(1rem * var(--ui-scale));
125
- font-size: var(--control-text);
126
- /* AX.W52 — the ONE coherent button transition (RED witness 5/6). The
127
- SURFACE legs (bg/border/box-shadow/color/opacity) ride the bezier
128
- `--ease-standard` (a colour cross-fade reads as a wobble on a spring);
129
- the TRANSFORM leg (`scale`) rides `--spring-smooth` (the sub-perceptual
130
- settle), so the hover lift + the surface cross-fade read as ONE glide.
131
- The DEAD `transform` leg is retired — the variants animate the `scale`
132
- longhand. CRITICAL: `.tap-squish` (composed alongside on the button
133
- base, utilities.css) ALSO lists this full coherent set, so neither
134
- class's `transition` shorthand can clobber the other down to a
135
- scale-only animation — the cascade bug that left every button
136
- transitioning ONLY `scale` (the live-readback RED, RED witness 5). The
137
- doctrine: surface-props→bezier, transform→spring (tokens.css §2). */
138
- transition:
139
- background-color var(--duration-fast) var(--ease-standard),
140
- border-color var(--duration-fast) var(--ease-standard),
141
- box-shadow var(--duration-fast) var(--ease-standard),
142
- color var(--duration-fast) var(--ease-standard),
143
- opacity var(--duration-fast) var(--ease-standard),
144
- scale var(--duration-fast) var(--spring-smooth);
145
- }
146
-
147
- .btn-pill > * {
148
- @apply flex-shrink-0;
149
- }
150
-
151
-
152
- .btn-pill:disabled {
153
- opacity: var(--opacity-disabled);
154
- cursor: not-allowed;
155
- pointer-events: none;
156
- }
157
-
158
- /* ── Glass-button backdrop ─────────────────────────────────────────────
159
- AX.W52 — the `glass`/`glass-wash` Button variants compose `.glass-wash`,
160
- which resolves `--glass-blur-wash` = `blur(1px)` — a sub-perceptual
161
- diffusion authored for a small detail TILE, not a button the user reads
162
- as "glass" (the live readback found the glass variants at a negligible
163
- 1px). A hero control wants a real glass blur. `.btn-glass` re-points the
164
- backdrop at `--glass-blur-btn` (the `quiet`-tier 10px radius + the gentle
165
- `saturate(1.05) brightness(1.02)` light-concentration), so the glass
166
- button variants actually read as liquid glass while the wash TILE tier
167
- keeps its 1px untouched. Declares the UNPREFIXED `backdrop-filter` ONLY —
168
- Lightning CSS emits the `-webkit-` companion per the single-source
169
- authorship discipline above (hand-authoring both forms makes Lightning
170
- dedup-and-keep-prefixed, which modern Chromium then drops). */
171
- .btn-glass {
172
- backdrop-filter: var(--glass-blur-btn);
173
- }
174
-
175
- /* ── Pill input ───────────────────────────────── */
176
- .input-pill {
177
- @apply flex w-full;
178
-
179
- /* AX.W51 D18 — the input pill rides the ONE `--ui-scale` comfort axis: the
180
- height reads the `--control-h-md` cohort (`max(calc(2.5rem * --ui-scale),
181
- --control-floor)`, the h-10 register with the WCAG-44px coarse clamp), the
182
- font reads `--control-text`, the inline padding scales — so ONE override
183
- grows the field's height + padding + font in lockstep. Desktop default is
184
- the identity. */
185
- height: var(--control-h-md);
186
- border-radius: var(--radius-pill);
187
- /* AW.W13 — the resting field edge reads as an enclosed control at rest
188
- (~15%α — ~2× the prior 8% glass-wash floor that vanished on cream). The
189
- `:focus-visible` accent ring + the `:user-invalid`/`[aria-invalid]`
190
- destructive ring below still win by order + specificity.
191
- AX.W54 — moved off the srgb `--surface-tint-15` fork onto the glass
192
- border seam (`--glass-border-floating`, the matching 15%α rung) so the
193
- pill is ONE glass model with the rest of the ladder, not a divergent
194
- tint axis. */
195
- border: 1.5px solid var(--glass-border-floating);
196
- background: var(--glass-bg-quiet);
197
- /* AX.W54 — the pill reads as REAL glass: the quiet-tier 10px blur (the
198
- same `--glass-blur-quiet` its `--glass-bg-quiet` background pairs with),
199
- not the sub-perceptual `blur(1px)` wash it carried — and the
200
- `--glass-level` knob now clarifies it in lockstep with every surface. */
201
- backdrop-filter: var(--glass-blur-quiet);
202
- padding: 0 calc(1rem * var(--ui-scale));
203
- font-size: var(--control-text);
204
- color: var(--foreground);
205
- transition:
206
- background-color var(--duration-fast) var(--ease-standard),
207
- border-color var(--duration-fast) var(--ease-standard),
208
- box-shadow var(--duration-fast) var(--ease-standard),
209
- color var(--duration-fast) var(--ease-standard),
210
- opacity var(--duration-fast) var(--ease-standard);
211
- }
212
-
213
- .input-pill::placeholder {
214
- color: var(--surface-tint-35);
215
- }
216
-
217
- /* AQ.W4 §W4.6 — keyboard-focus ring only. Was bare `:focus` (showed the
218
- accent ring on a mouse click); `:focus-visible` matches the
219
- `.focus-ring` / `.glass-btn` / dock-control discipline. Ordered BEFORE
220
- the `:user-invalid` rungs so an invalid focused field shows destructive,
221
- not accent (the `:user-invalid:focus-visible` rule below wins by order +
222
- specificity). `:focus-visible` Baseline Widely — no fallback. */
223
- .input-pill:focus-visible {
224
- outline: none;
225
- border-color: var(--color-accent-opaque, var(--ring));
226
- box-shadow: 0 0 0 2px var(--color-accent, color-mix(in srgb, var(--ring) 30%, transparent));
227
- }
228
-
229
- /* AQ.W4 §W4.1 — validity vocabulary on `.input-pill` (Input + Textarea).
230
- The forgiving `:where(:user-invalid, .user-invalid-fallback,
231
- [aria-invalid="true"])` group is ONE rule covering THREE trigger surfaces:
232
- native constraint-validation (`:user-invalid`), the `useUserInvalidAria`
233
- fallback class for engines without `:user-invalid` (css §3.2; NOT a
234
- live+dead alias — the class is the SOLE fallback), AND (AW.W18) the
235
- imperative `[aria-invalid="true"]` attribute. The `[aria-invalid]` arm
236
- serves APP-DRIVEN validity — a custom key match, an async server check —
237
- where there is no native constraint to trip `:user-invalid`, so the app
238
- sets the ARIA attribute and the library's own ring paints with no
239
- `:deep()` re-paint at the consumer. The destructive/success tints reuse
240
- the semantic tokens via `color-mix` per the house pattern (W2). Non-color
241
- reinforcement is the error TEXT (W4.5 `error` slot) + the `required`
242
- asterisk — the border/bg shift is the supplementary cue, never the sole
243
- one. `:user-valid` is intentionally subtle (border only, no bg fill) so
244
- a long valid form is not a wall of green. */
245
- .input-pill:where(:user-invalid, .user-invalid-fallback, [aria-invalid="true"]) {
246
- border-color: var(--destructive);
247
- background: color-mix(in srgb, var(--destructive) 8%, var(--glass-bg-quiet));
248
- }
249
- .input-pill:where(:user-valid, .user-valid-fallback) {
250
- border-color: var(--success);
251
- }
252
- /* Invalid + keyboard-focused → destructive ring (overrides the accent
253
- `:focus-visible` ring above by order + the extra invalid compound). The
254
- `[aria-invalid]` arm rides the same widened group so an app-driven
255
- invalid field shows the destructive ring on focus too. */
256
- .input-pill:where(:user-invalid, .user-invalid-fallback, [aria-invalid="true"]):focus-visible {
257
- border-color: var(--destructive);
258
- box-shadow: 0 0 0 var(--focus-ring-width)
259
- color-mix(in srgb, var(--destructive) 35%, transparent);
260
- }
261
-
262
- /* AQ.W4 §W4.3 — `field-sizing: content` autosize (opt-in via the Textarea
263
- `autosize` prop → `[data-autosize]`). The textarea grows vertically with
264
- content between a 3-line floor and a token-driven ceiling, then scrolls.
265
- `field-sizing` Baseline Newly (Chromium 2024) — on a non-supporting
266
- engine the declaration is ignored and the element keeps the
267
- `min/max-block-size` bounds + standard scroll (no JS, no `@supports`,
268
- no grid-mirror polyfill). The fixed-size path (default, `min-h-20`) is
269
- the unchanged no-op fallback. */
270
- .input-pill[data-autosize] {
271
- field-sizing: content;
272
- width: 100%;
273
- min-block-size: 3lh;
274
- max-block-size: var(--textarea-autosize-max, 12lh);
275
- resize: vertical;
276
- }
277
-
278
- .input-pill:disabled {
279
- opacity: 0.5;
280
- cursor: not-allowed;
281
- }
282
-
283
- /* AW.W13 — the Select trigger mirrors the input pill's resting border lift.
284
- The reka-ui SelectTrigger renders `role="combobox"` over the `.glass-wash`
285
- surface; its 8%α `--glass-border-wash` field edge vanished on cream just
286
- like the input pill, so the same `--surface-tint-15` lift makes the
287
- trigger read as an enclosed control at rest. Scoped to the combobox role
288
- so the lift reaches ONLY the Select trigger, not every `.glass-wash`
289
- surface. */
290
- .glass-wash[role="combobox"] {
291
- border-color: var(--surface-tint-15);
292
- }
293
-
294
- /* ── AW.W23 — chromatic edge dispersion (the polished-glass rim fringe) ──
295
- An opt-in `.glass-chromatic` composes the warm/cool oklab fringe OVER the
296
- W22 uniform rim (it does NOT replace it — the rim still rides each rung's
297
- box-shadow). The fringe is a transparency garnish, so it composes ONLY
298
- under `prefers-reduced-transparency: no-preference` and drops under
299
- `reduce` (handled by the bracket below). The fringe lands as a dedicated
300
- inset box-shadow pair on the material surface so it adds onto the rim. */
301
- @media (prefers-reduced-transparency: no-preference) {
302
- .glass-chromatic {
303
- box-shadow: var(--glass-edge-dispersion), var(--glass-material-rim);
304
- }
305
- }
306
- }
@@ -1,250 +0,0 @@
1
- /* tokens/color-radius.css
2
- §4 radius reference · §5 warm-cream/muted-black palette · §5c constellation · §6 section palette · §6b viz basis.
3
- Carved from the tokens.css cascade root; @import-ed by tokens.css in
4
- cascade order. Same :root cascade context as its siblings. */
5
- :root {
6
- /* §4 BORDER RADIUS — authored ONCE in theme.css's leading plain @theme
7
- block (AV.W16 TW1). A plain @theme mints each `--radius-*` as a global
8
- :root var, so the `var(--radius-card)` recipe reads across this file
9
- resolve from that source. The prior §4 twin here doubled the override
10
- surface (the anti-pattern the @theme-inline migration kills) — excised;
11
- retune the scale at theme.css. */
12
-
13
- /* ═══════════════════════════════════════════════
14
- §5 COLOR PALETTE — Warm cream / muted black
15
-
16
- Neutral scale: perceptually-uniform L* steps at hue 48 (warm paper).
17
- Each pair visibly distinct at 20px viewing distance.
18
- 0 → 1 : 3 L (page → soft field)
19
- 1 → 2 : 5 L (soft field → chip / tab-inactive)
20
- 2 → 3 : 8 L (chip → hover / highlight)
21
- 3 → 4 : 12 L (highlight → subtle border)
22
- 4 → 5 : 25 L (border → muted text, contrast jump)
23
- 5 → 6 : 10 L (muted text → strong-muted text, secondary register)
24
-
25
- Semantic aliases re-point into the scale — no back-compat shims.
26
- ═══════════════════════════════════════════════ */
27
- --neutral-0: hsl(48 12% 98%); /* L 98 — page surface */
28
- --neutral-1: hsl(48 10% 95%); /* L 95 — soft field bg */
29
- --neutral-2: hsl(48 9% 90%); /* L 90 — chip / tab-inactive bg */
30
- --neutral-3: hsl(48 8% 82%); /* L 82 — hover / highlight bg */
31
- --neutral-4: hsl(48 7% 70%); /* L 70 — subtle border */
32
- --neutral-5: hsl(48 6% 40%); /* L 40 — muted text (WCAG AA: 5.23:1 vs L98 page / 4.91:1 vs L95 muted) */
33
- /* W7-α' (AK-FD1) — strong-muted text rung. One principled ladder step
34
- (10 L darker, the 5→6 cadence above) past muted text toward
35
- --foreground (L10). Sits at the 1/3 point of the L40→L10 muted→primary
36
- gap: legible secondary text that reads less-faint than muted but not as
37
- assertive as primary. By-COLOUR per the canon (a neutral step, not an
38
- alpha mute); hue held at 48, sat nudged 6→7 toward --foreground's 10.
39
- WCAG AA: 7.79:1 vs L98 page / 7.31:1 vs L95 muted (cf. neutral-5's
40
- 5.23:1) — comfortably above the 4.5:1 body floor. */
41
- --neutral-6: hsl(48 7% 30%); /* L 30 — strong-muted text (secondary register) */
42
-
43
- --background: var(--neutral-0);
44
- --foreground: hsl(24 10% 10%);
45
- --card: var(--neutral-0);
46
- --card-foreground: var(--foreground);
47
- --popover: var(--neutral-0);
48
- --popover-foreground: var(--foreground);
49
-
50
- /* R0G-5 (AO.W4) — warm-neutral public-data panel surface. One warmth step
51
- off --card (hue 44 vs 48, +4 sat, −2 L) so a consumer's aurora-OFF
52
- /dashboard/* surfaces read with the admin canon's warm-neutral chrome
53
- instead of the colder bare card. Opaque surface (the --card family), not
54
- a --surface-tint-* overlay. Consumer applies on /dashboard/* only. */
55
- --surface-public-data-panel: hsl(44 16% 96%);
56
-
57
- --muted: var(--neutral-1);
58
- --muted-foreground: var(--neutral-5);
59
- /* W7-α' (AK-FD1) — one rung less-faint than --muted-foreground for
60
- secondary text that reads too-faint at the muted rung over resting
61
- glass (CardDescription). By-colour neutral step, not alpha. */
62
- --muted-foreground-strong: var(--neutral-6);
63
- --secondary: var(--neutral-2);
64
- --secondary-foreground: var(--foreground);
65
- --accent: var(--neutral-3);
66
- --accent-foreground: var(--foreground);
67
-
68
- --border: var(--neutral-4);
69
- --input: var(--neutral-4);
70
-
71
- --primary: hsl(24 10% 10%);
72
- --primary-foreground: var(--neutral-0);
73
- --destructive: hsl(0 72% 50%);
74
- --destructive-foreground: var(--neutral-0);
75
- --ring: hsl(24 10% 10%);
76
- --shadow: hsl(24 10% 10%);
77
- --shadow-color: var(--foreground);
78
-
79
- /* AQ.W2 §4 — native-control accent. `accent-color` is an inherited
80
- built-in <color>, so per the §2b resolve-late discipline it reads a
81
- dedicated UNREGISTERED token set per-mode (NOT light-dark()) and is
82
- re-specified inside `.dark` — otherwise the accent freezes to the
83
- light shade at the cascade root. Light: muted-black checkmarks /
84
- sliders on warm cream. Dark arm (`.dark`) reads `--ring` (mid-tone),
85
- not the near-white dark `--primary`, so a checkbox's white checkmark
86
- keeps contrast headroom (accent-color.md §5). */
87
- --accent-color: var(--primary);
88
-
89
- /* Border hairline at whisper alpha — the canonical rung for
90
- section-spine / panel-edge hairlines a consumer wants to read as an
91
- iOS-26 whisper rather than a hard rule. Consumers compose this named
92
- rung instead of hand-mixing `color-mix(... var(--border) ...)`
93
- per-site (token-first). 45% is the canonical whisper. Auto-dark via
94
- `--border` (which is `var(--neutral-4)`, light-dark()-resolved). */
95
- --border-soft: color-mix(in srgb, var(--border) 45%, transparent);
96
-
97
- /* AQ.W3 §W3.4 — tokenized scrollbar thumb + track. Minted in the color
98
- block so the `scrollbar-color` / `::-webkit-scrollbar-thumb` rungs read a
99
- single source. Auto-dark via `--muted-foreground` (light-dark()-resolved,
100
- AQ.W2) — the OS scrollbar chrome also honors `color-scheme: dark`, so the
101
- custom thumb tracks the dark surface without an explicit dark mirror. The
102
- thumb α (25%) matches the prior inline `.scrollbar-thin` value byte-for-
103
- byte; `transparent` track keeps the scroll-pane glass reading through. */
104
- --scrollbar-thumb: color-mix(in srgb, var(--muted-foreground) 25%, transparent);
105
- --scrollbar-track: transparent;
106
-
107
- /* Foreground-tint rungs — canonical handles for the 36+ raw
108
- `color-mix(in srgb, var(--foreground) N%, transparent)` sites surveyed
109
- in R5 axis-1. Each rung's α is named in its key (4 → 4%, 22 → 22%).
110
- Auto-dark via --foreground; no explicit dark mirrors needed. R5
111
- vocab.γ gap row 1. Consumers land in W2.B + W3.C. */
112
- --surface-tint-4: color-mix(in srgb, var(--foreground) 4%, transparent);
113
- --surface-tint-6: color-mix(in srgb, var(--foreground) 6%, transparent);
114
- --surface-tint-8: color-mix(in srgb, var(--foreground) 8%, transparent);
115
- --surface-tint-10: color-mix(in srgb, var(--foreground) 10%, transparent);
116
- --surface-tint-12: color-mix(in srgb, var(--foreground) 12%, transparent);
117
- --surface-tint-15: color-mix(in srgb, var(--foreground) 15%, transparent);
118
- --surface-tint-18: color-mix(in srgb, var(--foreground) 18%, transparent);
119
- --surface-tint-22: color-mix(in srgb, var(--foreground) 22%, transparent);
120
- --surface-tint-25: color-mix(in srgb, var(--foreground) 25%, transparent);
121
- /* Higher-α rungs added at L.W5 (absorbs K R4 — 4 P1 sites whose
122
- literal `color-mix(in srgb, var(--foreground) {35,40,70}%, transparent)`
123
- expressions bypassed the canonical token family). See `docs/tranches/L/
124
- audit/W5-A-doc-cohort-proof.md`. */
125
- --surface-tint-35: color-mix(in srgb, var(--foreground) 35%, transparent);
126
- --surface-tint-40: color-mix(in srgb, var(--foreground) 40%, transparent);
127
- --surface-tint-70: color-mix(in srgb, var(--foreground) 70%, transparent);
128
-
129
- /* Muted-tinted surface rungs — canonical handles for the 9 raw
130
- `color-mix(in srgb, var(--muted) N%, transparent)` sites in
131
- FuzzySearch / SegmentedTabs / Slider scoped CSS. (AI.W5-δ — the
132
- ProgressiveSidebar consumer retired at the wave; the canonical token
133
- rung lives on for the remaining consumers.) Auto-dark via --muted.
134
- R5 vocab.γ axis-1 row. */
135
- --muted-soft: color-mix(in srgb, var(--muted) 30%, transparent);
136
- --muted-medium: color-mix(in srgb, var(--muted) 50%, transparent);
137
-
138
- /* ═══════════════════════════════════════════════
139
- §5c CONSTELLATION — Canvas2D proximity-graph lattice (AX.W17)
140
-
141
- The H.W4 legibility intelligence promoted from the slides deck to
142
- LIBRARY identity: the node tones, the edge hairline color, the per-mode
143
- edge-alpha multipliers, and the field-yields-to-type translucency knob.
144
- Only `--constellation-accent` (the anomaly tint) stays a CONSUMER preset
145
- (slides aliases it to `--ncsu-red`); the library ships a neutral default.
146
-
147
- PLAIN-hsl LITERALS, per arm — NEVER `light-dark()` and NEVER a
148
- `var(--neutral-*)`/`var(--foreground)`/`var(--border)`/`var(--card)`
149
- alias. Canvas2D silently REJECTS a `light-dark()` value into
150
- `strokeStyle`/`fillStyle` (the W30 86.3%-red-splatter cardinal defect),
151
- and the rejection is identical whether the value is a literal
152
- `light-dark(…)` OR a `var()` that RESOLVES to one — so the constellation
153
- tokens are plain-hsl LEAVES, the `:root` vs `.dark` cascade carrying two
154
- literals. `proof:constellation-tokens` clause (c) machine-locks this
155
- (the no-`light-dark(`-substring NOR transitive-`var()` static assertion).
156
- ═══════════════════════════════════════════════ */
157
- /* Node tones — readable on the warm-cream ground. The two-tone split (the
158
- `dim` half rides `-node-dim`). Warm-grey ink, NOT a neutral-ladder alias. */
159
- --constellation-node: hsl(36 8% 46%);
160
- --constellation-node-dim: hsl(36 8% 60%);
161
- /* Edge hairline stroke — warm near-black on cream (the plain-hsl complement
162
- the slides deck reads to fix the `--foreground` light-dark() leak). */
163
- --constellation-line: hsl(24 14% 14%);
164
- /* Anomaly tint — NEUTRAL library default (a desaturated warm accent). The
165
- consumer overrides this (slides → `--ncsu-red`); the library does NOT
166
- bake a brand hue. This is the single consumer-preset boundary. */
167
- --constellation-accent: hsl(18 58% 46%);
168
- /* Edge-alpha multipliers — replace the magic `0.17` hairline / pointer-web
169
- literals. The cream ground lifts the node tones, so the field can recede;
170
- the focus-proximity edge reads a touch stronger. */
171
- --constellation-edge-alpha: 0.22;
172
- --constellation-edge-focus-alpha: 0.34;
173
- /* §7 field-yields-to-type translucency knob — the legible-but-RECESSIVE
174
- MIDPOINT, NOT max-legibility. On cream the node tones already read, so the
175
- field recedes further: BELOW the slides 0.92 max-legibility reference. */
176
- --constellation-alpha: 0.80;
177
-
178
- /* §interaction — the warp spring + the gravity-well tunings (NUMERIC, NOT
179
- colors — read ONCE on mount via parseFloat, never reach a Canvas2D
180
- fillStyle, so immune to the W30 light-dark()/Canvas2D leak; AY.W-CON2).
181
- Mode-INVARIANT, declared ONCE in :root (the .dark arm needs no numeric
182
- re-declare — a per-mode value SPLIT is what proof:constellation-tokens
183
- clause (c) flags, and these tunings are identical in both modes).
184
- `--constellation-warp-response` is the keyframes.js ANGULAR PERIOD (the
185
- SwiftUI .spring(response:) axis), NOT a settle-duration — at ζ=1 the 2%
186
- settle lands at t₂ ≈ 5.83/ω₀ ≈ 0.93·response (the engine keeps the
187
- keyframes.js ω₀ = 2π/response convention, mints no second ω). */
188
- --constellation-warp-response: 0.55; /* s — keyframes.js angular period (NOT a settle) */
189
- --constellation-warp-zeta: 1.0; /* critically damped — a focal mark must NOT ring */
190
- --constellation-well-gain: 14000; /* inverse-square force scale (the held-pull gain) */
191
- --constellation-well-reach: 340; /* base-width px — the well's reach (k-scaled at step) */
192
- --constellation-well-ramp: 4.0; /* 1/s — the ARM rate (≈0.25s bloom; release is the fixed brisk WELL_RELEASE_RAMP — the field-cools invariant, not consumer-tunable) */
193
- --constellation-well-max-speed: 4.0; /* base-width px/frame cap — the no-slingshot clamp */
194
- --constellation-well-hold-ms: 140; /* ms hold before the well arms */
195
- --constellation-wander-idle: 8000; /* ms — min idle between auto re-targets (the W-CON1 drift cadence) */
196
- --constellation-wander-jitter: 8000; /* ms — random extra idle per cadence (so the rhythm is not metronomic) */
197
-
198
- /* ═══════════════════════════════════════════════
199
- §6 SECTION PALETTE — 13-stop jewel tones (light)
200
- ═══════════════════════════════════════════════ */
201
- /* AV.W16 TW2 — oklch ramp (perceptually-even L; hue preserved from the
202
- prior hsl() cadence). Categorical jewel tones — distinct hues, not a
203
- monotone scale. Authored as oklch pairs with the .dark mirror. */
204
- --section-color-0: oklch(0.552 0.192 359.8); /* rose */
205
- --section-color-1: oklch(0.502 0.165 305.9); /* purple */
206
- --section-color-2: oklch(0.484 0.163 265.5); /* indigo */
207
- --section-color-3: oklch(0.542 0.089 222.8); /* teal-cyan */
208
- --section-color-4: oklch(0.551 0.088 171.1); /* forest */
209
- --section-color-5: oklch(0.623 0.124 69.6); /* amber */
210
- --section-color-6: oklch(0.579 0.201 30.4); /* tomato-red */
211
- --section-color-7: oklch(0.532 0.180 317.5); /* violet */
212
- --section-color-8: oklch(0.520 0.176 8.4); /* ruby */
213
- --section-color-9: oklch(0.492 0.038 239.6); /* slate-blue */
214
- --section-color-10: oklch(0.556 0.103 128.8); /* olive */
215
- --section-color-11: oklch(0.601 0.092 208.0); /* ocean */
216
- --section-color-12: oklch(0.513 0.163 291.9); /* periwinkle */
217
-
218
- /* Accent colors */
219
- --accent-pink: oklch(0.613 0.197 353.8);
220
- --section-heading: oklch(0.545 0.189 352.8);
221
- --accent-red: oklch(0.574 0.216 27.5);
222
-
223
- /* ═══════════════════════════════════════════════
224
- §6b VIZ BASIS — core brand hues
225
- ═══════════════════════════════════════════════ */
226
- --viz-fourier: oklch(0.579 0.201 30.4);
227
- --viz-chebyshev: oklch(0.484 0.163 265.5);
228
- --viz-legendre: oklch(0.532 0.180 317.5);
229
- --viz-amber: var(--section-color-5);
230
- --viz-green: var(--section-color-4);
231
-
232
- /* Semantic UI accents */
233
- --tier-featured: oklch(0.841 0.173 84.2);
234
- --tier-saved: oklch(0.676 0.176 252.3);
235
- --like: oklch(0.633 0.200 24.9);
236
- --success: oklch(0.720 0.192 149.5);
237
- --warning: oklch(0.770 0.165 70.6);
238
- --info: oklch(0.626 0.186 259.6);
239
- --delete: oklch(0.597 0.198 25.5);
240
-
241
- /* Semantic foregrounds — text/glyph atop --success/--warning/--info plates.
242
- Notification.vue currently hardcodes `text-white`/`text-foreground`
243
- inline; W2 migrates consumers to read these tokens. Warning carries a
244
- dark glyph because the amber plate is too luminous for white. R5
245
- vocab.γ gap row 4. */
246
- --success-foreground: var(--neutral-0);
247
- --warning-foreground: hsl(24 10% 10%);
248
- --info-foreground: var(--neutral-0);
249
-
250
- }