@mkbabb/glass-ui 3.10.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 (269) 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-BZVWIxNy.js → MetricBadge-idgrkqoP.js} +5 -7
  7. package/dist/{Notification-DLMhblXR.js → Notification-Cu0nN17_.js} +1 -1
  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-Ch-k3Rv-.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 +3 -4
  19. package/dist/api.js +1 -1
  20. package/dist/aurora.js +66 -66
  21. package/dist/{badge-CaoFJzRb.js → badge-NdCQMvvB.js} +1 -1
  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-C5ls_QF7.js → color-B65wWyQz.js} +9 -7
  30. package/dist/color.js +1 -1
  31. package/dist/command.js +1 -1
  32. package/dist/components/custom/aurora/constants/shaders/mediums.glsl.d.ts +1 -1
  33. package/dist/components/custom/aurora/constants/shaders/vangogh-medium.glsl.d.ts +1 -0
  34. package/dist/components/custom/constellation/Constellation.vue.d.ts +12 -0
  35. package/dist/components/custom/constellation/composables/createConstellationField.d.ts +35 -0
  36. package/dist/components/custom/constellation/composables/useConstellationPointer.d.ts +35 -0
  37. package/dist/components/custom/constellation/constants.d.ts +36 -0
  38. package/dist/components/custom/constellation/constellationDraw.d.ts +18 -0
  39. package/dist/components/custom/constellation/constellationField.d.ts +10 -151
  40. package/dist/components/custom/constellation/constellationInteraction.d.ts +102 -0
  41. package/dist/components/custom/constellation/index.d.ts +3 -1
  42. package/dist/components/custom/controls/DarkModeToggle.vue.d.ts +11 -0
  43. package/dist/components/custom/dock/DockTabButton.vue.d.ts +3 -4
  44. package/dist/components/custom/dock/GlassDock.vue.d.ts +2 -110
  45. package/dist/components/custom/dock/composables/dockMorphContext.d.ts +36 -0
  46. package/dist/components/custom/dock/composables/useDockMorphWindow.d.ts +15 -0
  47. package/dist/components/custom/dock/composables/useDockShellProps.d.ts +131 -0
  48. package/dist/components/custom/dock/composables/useLayerTransition.d.ts +44 -0
  49. package/dist/components/custom/dock/constants.d.ts +23 -0
  50. package/dist/components/custom/expandable-container/ExpandableContainer.vue.d.ts +0 -29
  51. package/dist/components/custom/fourier-field/index.d.ts +1 -1
  52. package/dist/components/custom/fourier-field/math.d.ts +17 -0
  53. package/dist/components/custom/fourier-field/presets.d.ts +54 -0
  54. package/dist/components/custom/goo-blob/composables/buildMetaballProgram.d.ts +18 -0
  55. package/dist/components/custom/goo-blob/composables/uploadBlobUniforms.d.ts +41 -0
  56. package/dist/components/custom/goo-blob/composables/useBlobPointer.d.ts +4 -3
  57. package/dist/components/custom/goo-blob/composables/useMetaballRenderer.d.ts +11 -8
  58. package/dist/components/custom/goo-blob/constants.d.ts +52 -0
  59. package/dist/components/custom/goo-blob/shaders/metaball-uniforms.glsl.d.ts +1 -0
  60. package/dist/components/custom/instrument-chassis/InstrumentChassis.vue.d.ts +2 -2
  61. package/dist/components/custom/metric-badge/MetricBadge.vue.d.ts +0 -8
  62. package/dist/components/custom/tabs/constants.d.ts +12 -0
  63. package/dist/components/custom/underline/GlassUnderline.vue.d.ts +84 -0
  64. package/dist/components/custom/underline/index.d.ts +2 -0
  65. package/dist/components/custom/underline/types.d.ts +56 -0
  66. package/dist/components/ui/drawer/Drawer.vue.d.ts +1 -0
  67. package/dist/components/ui/dropdown-menu/DropdownMenuSubContent.vue.d.ts +2 -2
  68. package/dist/components/ui/slider/index.d.ts +22 -19
  69. package/dist/components/ui/toast/use-toast.d.ts +2 -2
  70. package/dist/composables/color/index.d.ts +12 -0
  71. package/dist/composables/glass/useSpecularTracking.d.ts +12 -3
  72. package/dist/composables/motion/core/index.d.ts +0 -1
  73. package/dist/composables/motion/curves.d.ts +48 -0
  74. package/dist/composables/motion/index.d.ts +2 -0
  75. package/dist/composables/motion/springPresets.d.ts +33 -0
  76. package/dist/composables/motion/suite.d.ts +2 -0
  77. package/dist/composables/motion/useSpringMount.d.ts +1 -1
  78. package/dist/configurator.js +1 -1
  79. package/dist/confirm-dialog.js +2 -2
  80. package/dist/constellation.js +260 -225
  81. package/dist/controls.js +48 -14
  82. package/dist/dark.js +1 -1
  83. package/dist/data-table.js +1 -1
  84. package/dist/dialog.js +2 -2
  85. package/dist/dock.js +339 -327
  86. package/dist/dockContext-bho8B1A4.js +17 -0
  87. package/dist/{dropdown-menu-D77jX6Df.js → dropdown-menu-DVnQcA0E.js} +7 -4
  88. package/dist/dropdown-menu.js +1 -1
  89. package/dist/expandable-container.js +38 -61
  90. package/dist/forms.js +2 -2
  91. package/dist/fourier-field.js +137 -102
  92. package/dist/fourier-math.js +2 -2
  93. package/dist/glass-ui.css +1 -1
  94. package/dist/glass-ui.js +287 -209
  95. package/dist/goo-blob.js +243 -212
  96. package/dist/hover-popover.js +1 -1
  97. package/dist/icon-tooltip.js +1 -1
  98. package/dist/index.d.ts +0 -3
  99. package/dist/keyboard.js +1 -1
  100. package/dist/labeled-field.js +5 -5
  101. package/dist/{math-DTpRVC0e.js → math-BUU9hHID.js} +18 -2
  102. package/dist/metric-badge.js +1 -1
  103. package/dist/metric-stack.js +1 -1
  104. package/dist/motion-core.js +69 -70
  105. package/dist/motion-curves.d.ts +1 -0
  106. package/dist/motion-curves.js +130 -0
  107. package/dist/motion.js +38 -37
  108. package/dist/notification.js +1 -1
  109. package/dist/number-field.js +1 -1
  110. package/dist/popover.js +1 -1
  111. package/dist/progress.js +1 -1
  112. package/dist/pulse.js +1 -1
  113. package/dist/reactive.js +1 -1
  114. package/dist/scrolling-text.js +1 -1
  115. package/dist/search.js +6 -6
  116. package/dist/select.js +1 -1
  117. package/dist/{sheet-VZEtNFvO.js → sheet-ChSXcJpU.js} +1 -1
  118. package/dist/sheet.js +1 -1
  119. package/dist/{slider-CyzcxBoh.js → slider-sfl8gFDD.js} +4 -4
  120. package/dist/slider.js +1 -1
  121. package/dist/sortable-list.js +2 -2
  122. package/dist/springPresets-aRSm-4_k.js +40 -0
  123. package/dist/stacked-icons.js +6 -6
  124. package/dist/styles/animations.css +18 -74
  125. package/dist/styles/components.css +1 -1
  126. package/dist/styles/dock/layer-group.css +22 -0
  127. package/dist/styles/dock/layers.css +11 -1
  128. package/dist/styles/dock/morph.css +95 -19
  129. package/dist/styles/dock/shell.css +12 -0
  130. package/dist/styles/dock-controls.css +28 -31
  131. package/dist/styles/drawer.css +2 -0
  132. package/dist/styles/floating-panel.css +2 -0
  133. package/dist/styles/glass/a11y-fallback.css +245 -0
  134. package/dist/styles/glass/ladder.css +304 -0
  135. package/dist/styles/glass/material.css +238 -0
  136. package/dist/styles/glass/progress-rail.css +78 -0
  137. package/dist/styles/glass/squircle.css +66 -0
  138. package/dist/styles/glass/surfaces.css +306 -0
  139. package/dist/styles/glass-refract.css +2 -0
  140. package/dist/styles/glass.css +31 -1188
  141. package/dist/styles/hover-popover.css +2 -0
  142. package/dist/styles/index.css +24 -6
  143. package/dist/styles/instrument-chassis.css +4 -0
  144. package/dist/styles/paper.css +2 -68
  145. package/dist/styles/theme.css +13 -20
  146. package/dist/styles/tokens/color-radius.css +250 -0
  147. package/dist/styles/tokens/dark-arm.css +194 -0
  148. package/dist/styles/tokens/glass.css +413 -0
  149. package/dist/styles/tokens/light-dark.css +158 -0
  150. package/dist/styles/tokens/offsets-sizing.css +406 -0
  151. package/dist/styles/tokens/property-regs.css +169 -0
  152. package/dist/styles/tokens/scale-paper.css +361 -0
  153. package/dist/styles/tokens/scheme-motion.css +334 -0
  154. package/dist/styles/tokens/shadow.css +132 -0
  155. package/dist/styles/tokens.css +22 -2355
  156. package/dist/styles/typography.css +18 -6
  157. package/dist/styles/utilities/a11y-overrides.css +140 -0
  158. package/dist/styles/utilities/animate.css +26 -0
  159. package/dist/styles/utilities/base.css +365 -0
  160. package/dist/styles/utilities/btn.css +399 -0
  161. package/dist/styles/utilities/components.css +317 -0
  162. package/dist/styles/utilities.css +19 -1260
  163. package/dist/styles/view-transition.css +0 -51
  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/underline.d.ts +1 -0
  171. package/dist/underline.js +85 -0
  172. package/dist/{useAnimatedNumber-Bcpy5Etf.js → useAnimatedNumber-DfVgP4te.js} +1 -1
  173. package/dist/{useConfiguratorState-DxAqksK6.js → useConfiguratorState-BdQXh9ie.js} +1 -1
  174. package/dist/useSpecularTracking-DFK_fhpG.js +32 -0
  175. package/dist/useSpringMount-DXUzxBjV.js +108 -0
  176. package/dist/vReveal-CqaCz_mC.js +44 -0
  177. package/dist/watercolor-dot.js +2 -2
  178. package/package.json +34 -52
  179. package/src/styles/animations.css +18 -74
  180. package/src/styles/dock/layer-group.css +22 -0
  181. package/src/styles/dock/layers.css +11 -1
  182. package/src/styles/dock/morph.css +95 -19
  183. package/src/styles/dock/shell.css +12 -0
  184. package/src/styles/dock-controls.css +28 -31
  185. package/src/styles/glass/a11y-fallback.css +245 -0
  186. package/src/styles/glass/ladder.css +304 -0
  187. package/src/styles/glass/material.css +238 -0
  188. package/src/styles/glass/progress-rail.css +78 -0
  189. package/src/styles/glass/squircle.css +66 -0
  190. package/src/styles/glass/surfaces.css +306 -0
  191. package/src/styles/glass.css +31 -1188
  192. package/src/styles/index.css +24 -6
  193. package/src/styles/paper.css +2 -68
  194. package/src/styles/theme.css +13 -20
  195. package/src/styles/tokens/color-radius.css +250 -0
  196. package/src/styles/tokens/dark-arm.css +194 -0
  197. package/src/styles/tokens/glass.css +413 -0
  198. package/src/styles/tokens/light-dark.css +158 -0
  199. package/src/styles/tokens/offsets-sizing.css +406 -0
  200. package/src/styles/tokens/property-regs.css +169 -0
  201. package/src/styles/tokens/scale-paper.css +361 -0
  202. package/src/styles/tokens/scheme-motion.css +334 -0
  203. package/src/styles/tokens/shadow.css +132 -0
  204. package/src/styles/tokens.css +22 -2355
  205. package/src/styles/typography.css +18 -6
  206. package/src/styles/utilities/a11y-overrides.css +140 -0
  207. package/src/styles/utilities/animate.css +26 -0
  208. package/src/styles/utilities/base.css +365 -0
  209. package/src/styles/utilities/btn.css +399 -0
  210. package/src/styles/utilities/components.css +317 -0
  211. package/src/styles/utilities.css +19 -1260
  212. package/src/styles/view-transition.css +0 -51
  213. package/dist/DeckProgress-Dmk4_AKN.js +0 -23
  214. package/dist/InstrumentRail-CUJ05YVG.js +0 -44
  215. package/dist/components/custom/deck-progress/DeckProgress.vue.d.ts +0 -27
  216. package/dist/components/custom/deck-progress/index.d.ts +0 -2
  217. package/dist/components/custom/dialog-native/GlassDialogNative.vue.d.ts +0 -57
  218. package/dist/components/custom/dialog-native/index.d.ts +0 -1
  219. package/dist/components/custom/glass-panel/GlassPanel.vue.d.ts +0 -41
  220. package/dist/components/custom/glass-panel/index.d.ts +0 -2
  221. package/dist/components/custom/handmark/HandMark.vue.d.ts +0 -29
  222. package/dist/components/custom/handmark/brush.d.ts +0 -219
  223. package/dist/components/custom/handmark/freehand.d.ts +0 -69
  224. package/dist/components/custom/handmark/geometry.d.ts +0 -32
  225. package/dist/components/custom/handmark/index.d.ts +0 -21
  226. package/dist/components/custom/handmark/ink.d.ts +0 -11
  227. package/dist/components/custom/handmark/texture.d.ts +0 -39
  228. package/dist/components/custom/handmark/types.d.ts +0 -53
  229. package/dist/components/custom/handmark/useHandMark.d.ts +0 -66
  230. package/dist/components/custom/header-ribbon/HeaderRibbon.vue.d.ts +0 -31
  231. package/dist/components/custom/header-ribbon/index.d.ts +0 -2
  232. package/dist/components/custom/header-ribbon/types.d.ts +0 -7
  233. package/dist/components/custom/instrument-rail/InstrumentRail.vue.d.ts +0 -91
  234. package/dist/components/custom/instrument-rail/index.d.ts +0 -2
  235. package/dist/composables/motion/useRouteTransition.d.ts +0 -42
  236. package/dist/deck-progress.d.ts +0 -1
  237. package/dist/deck-progress.js +0 -2
  238. package/dist/dockContext-BKeIMmNk.js +0 -9
  239. package/dist/glass-panel.d.ts +0 -1
  240. package/dist/glass-panel.js +0 -44
  241. package/dist/handmark.d.ts +0 -1
  242. package/dist/handmark.js +0 -609
  243. package/dist/header-ribbon.d.ts +0 -1
  244. package/dist/header-ribbon.js +0 -63
  245. package/dist/instrument-rail.d.ts +0 -1
  246. package/dist/instrument-rail.js +0 -2
  247. package/dist/useGlassRenderer-D7YGOYiM.js +0 -69
  248. package/dist/useSpecularTracking-BVRZsRHA.js +0 -26
  249. package/dist/useSpringMount-BJSHcLl3.js +0 -113
  250. package/dist/useViewTransition-DaN5Zrox.js +0 -21
  251. package/dist/vReveal-zUIQk-rJ.js +0 -53
  252. /package/dist/{CollapsibleContent-CP9qF1v4.js → CollapsibleContent-Drow5WkV.js} +0 -0
  253. /package/dist/{DialogFooter-Gprw8H_A.js → DialogFooter-DufLHi0y.js} +0 -0
  254. /package/dist/{IconTooltip-Cus0fvK0.js → IconTooltip-BrQ5p181.js} +0 -0
  255. /package/dist/{Input-xuDwALQR.js → Input-B-F818RU.js} +0 -0
  256. /package/dist/{_plugin-vue_export-helper-ok8pgSl5.js → _plugin-vue_export-helper-DWghtRt7.js} +0 -0
  257. /package/dist/{compile-BOXjLUxu.js → compile-Ce_V55zi.js} +0 -0
  258. /package/dist/{constants-yKeKnE84.js → constants-C8NMonuo.js} +0 -0
  259. /package/dist/{presets-Dkdv55Gt.js → presets-1OhFpaIC.js} +0 -0
  260. /package/dist/{prng-D27-B3tK.js → prng-CjVgzjQT.js} +0 -0
  261. /package/dist/{resolveCanvasColor-BBiYfp8g.js → resolveCanvasColor-CRvVzOvP.js} +0 -0
  262. /package/dist/{useCanvas2D-ClrQuZtp.js → useCanvas2D-CSeH8h16.js} +0 -0
  263. /package/dist/{useGlobalDark-d6waty-X.js → useGlobalDark-D7R9OypB.js} +0 -0
  264. /package/dist/{useIntersectionPause-Cck5Uxk8.js → useIntersectionPause-DAdVPVp4.js} +0 -0
  265. /package/dist/{useInterval-Dsmqwi03.js → useInterval-D3USn0yc.js} +0 -0
  266. /package/dist/{useKeyboardShortcuts-CyIYrndH.js → useKeyboardShortcuts-i8tHd5WO.js} +0 -0
  267. /package/dist/{useScrollProgress-CffFGLa5.js → useScrollProgress-CcgmgMQt.js} +0 -0
  268. /package/dist/{useSortable-C8ReQ50P.js → useSortable-DnyGXKKY.js} +0 -0
  269. /package/dist/{useTextHighlight-CWEi25hf.js → useTextHighlight-B3b10W6r.js} +0 -0
@@ -40,7 +40,20 @@
40
40
  * above it via CSS custom properties or selector cascade; reordering breaks
41
41
  * fallbacks. Documented at L.W2 Lane B per Rε §B.5.1.
42
42
  *
43
- * 1. tokens.css — CSS custom properties (color, easing, glass,
43
+ * WHERE each idiom LIVES (the localized design-idiom home, complementing the
44
+ * load-ORDER below): see docs/precepts/design-idioms.md — @theme aliases live
45
+ * in theme.css, @utility recipes in their cohesion-domain file, the
46
+ * cohesion-aware @import-partial carve rule, and the var-in-arbitrary syntax.
47
+ * tokens.css / glass.css / utilities.css are thin @import ROOTS over cohesive
48
+ * tokens/* · glass/* · utilities/* partials (each < 500 lines, in cascade order
49
+ * — the dock.css precedent, AX.W06; generalized AY.W-CSS1). The carve is
50
+ * cascade-isomorphic: the partials @import in the recorded cascade order so this
51
+ * load order is preserved bit-for-bit.
52
+ *
53
+ * 1. tokens.css — thin @import root over tokens/{scheme-motion,
54
+ * color-radius,shadow,glass,offsets-sizing,
55
+ * scale-paper,light-dark,dark-arm,property-regs}.css.
56
+ * CSS custom properties (color, easing, glass,
44
57
  * paper, shadow, surface-tint rungs). Source-of-
45
58
  * record for every visual axis.
46
59
  * 2. typography.css — golden-ratio scale (√φ); semantic type classes.
@@ -48,7 +61,9 @@
48
61
  * 3. theme.css — @theme block (Tailwind aliases). Reads tokens
49
62
  * from (1) so MUST come after them; defines the
50
63
  * `dark` variant selector consumed by the cascade.
51
- * 4. glass.css — .glass-{wash,quiet,resting,floating,overlay}
64
+ * 4. glass.css — thin @import root over glass/{material,ladder,
65
+ * surfaces,progress-rail,squircle,a11y-fallback}.css.
66
+ * .glass-{wash,quiet,resting,floating,overlay}
52
67
  * 5-rung ladder + .glass-card / -pill / -btn.
53
68
  * Consumes tokens (1) + theme aliases (3).
54
69
  * 4a. glass-specular-track.css — the pointer-anchored MOVING specular rung
@@ -93,10 +108,12 @@
93
108
  * 10b. view-transition.css — the `.gl-list-item` View-Transitions group
94
109
  * recipe + `--vt-*` axes (AQ.W5; the
95
110
  * `useViewTransition` substrate's CSS half).
96
- * 11. utilities.css — focus-ring, btn-audacious + btn-interactive
97
- * (press cluster; K W6 + Q.W3 Lane E),
98
- * rainbow-vivid + rainbow-pastel. Consumes earlier
99
- * animations + tokens.
111
+ * 11. utilities.css — thin @import root over utilities/{animate,base,
112
+ * components,btn,a11y-overrides}.css. focus-ring,
113
+ * btn-audacious + btn-interactive (press cluster;
114
+ * K W6 + Q.W3 Lane E), rainbow-vivid +
115
+ * rainbow-pastel. Consumes earlier animations +
116
+ * tokens.
100
117
  * 12. instrument-chassis.css — P-tranche component CSS (chassis bezel +
101
118
  * groove dividers). Loaded after utilities so
102
119
  * component-local recipes can override.
@@ -132,6 +149,7 @@
132
149
  @import "./instrument-rail.css";
133
150
  @import "./hover-popover.css";
134
151
  @import "./drawer.css";
152
+ @import "../components/custom/tabs/segmented-tabs.css";
135
153
 
136
154
  /* Ensure consumer's Tailwind scans glass-ui components for utility classes
137
155
  (e.g. CVA button variants like text-destructive-foreground) */
@@ -7,54 +7,8 @@
7
7
  *
8
8
  * Texture: feTurbulence baseFrequency 0.65, 4 octaves, desaturated via
9
9
  * feColorMatrix, blended multiply (light) / soft-light (dark). Tiles ~60px.
10
- *
11
- * ── THE GRAIN RUNGS (D6.c M5 — the printed-paper tooth, FELT not seen) ─────────
12
- * The warm-paper grain must be FELT at rest — a premium editorial stock has a
13
- * felt depth, and the measured finding (ds2-medium M5 / fd-usf-gallery §F) is
14
- * that the shipped `--glass-grain-opacity: 0.025` floor reads as NOTHING. This
15
- * file lifts the grain off that floor and mints a SECOND rung for chart plates:
16
- *
17
- * --glass-grain-opacity — the PAGE grain. Lifted here to a perceptible-
18
- * but-deft 0.038 default (the local floor below).
19
- * Numeric justification: the kitsch line is
20
- * ~0.05 (above it the grain reads as screen-noise
21
- * / a dirty monitor, ds2-medium M5); 0.025 is
22
- * sub-perceptual ("felt as nothing"). 0.038 is
23
- * the calibrated MIDPOINT — ~1.5× the dead floor,
24
- * ~0.76× the kitsch ceiling — felt at rest, never
25
- * seen AS grain. (The canonical token still lives
26
- * in tokens.css; this utility reads it with the
27
- * lifted fallback so a no-override mount is felt.)
28
- * --glass-grain-opacity-plate — the PLATE grain (NEW rung). A chart plate is
29
- * the FIGURE's "paper", so it wants slightly more
30
- * tooth than the page (M5): 0.045 — still below
31
- * the 0.05 kitsch ceiling, distinctly felt so the
32
- * plate reads as PRINTED on the same stock as the
33
- * page, not pasted onto it.
34
- *
35
- * THE DATA-REGION MASK CONTRACT (M5, non-negotiable). Grain on the FRAME, never
36
- * under the FIGURE — a fleck over a choropleth reads as a data artifact; on the
37
- * plate margin it reads as paper. `paper-grain-overlay` exposes a custom-property
38
- * MASK SLOT (`--paper-grain-mask`) so a consumer can carve the data viewport out
39
- * of the grain ::after: set it to a gradient/`url()` that is transparent over the
40
- * data region and opaque over the frame, and the grain is masked off the figure.
41
- * Default `none` (the whole surface is grained — the page/card case, no data to
42
- * fence). The plate rung is opt-in via `[data-grain="plate"]`.
43
10
  */
44
11
 
45
- /* The grain rung DEFAULTS — lifted off the tokens.css floor (D6.c M5). These are
46
- plain custom-property fallbacks the utilities read; a consumer/tokens.css value
47
- still wins (`var(--glass-grain-opacity, <floor>)`), so this only sets the floor
48
- a no-override mount inherits. The plate rung is minted here (no canonical
49
- tokens.css home is touched in this lane — D6.b owns tokens.css). */
50
- @layer components {
51
- :root {
52
- /* The PLATE grain rung — distinct from the page rung; the figure's paper
53
- wants more tooth. Minted in this lane; a consumer overrides at :root. */
54
- --glass-grain-opacity-plate: 0.045;
55
- }
56
- }
57
-
58
12
  @utility paper-underpaint {
59
13
  position: fixed;
60
14
  inset: 0;
@@ -63,8 +17,7 @@
63
17
  background-image: url("data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.65' numOctaves='4' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3CfeBlend mode='multiply' in2='SourceGraphic'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='1'/%3E%3C/svg%3E");
64
18
  background-repeat: repeat;
65
19
  background-size: 60px 60px;
66
- /* Lifted floor — the page grain is FELT at rest (0.038), not the dead 0.025. */
67
- opacity: var(--glass-grain-opacity, 0.038);
20
+ opacity: var(--glass-grain-opacity);
68
21
  mix-blend-mode: multiply;
69
22
  }
70
23
 
@@ -86,27 +39,8 @@
86
39
  background-image: url("data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.65' numOctaves='4' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3CfeBlend mode='multiply' in2='SourceGraphic'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='1'/%3E%3C/svg%3E");
87
40
  background-repeat: repeat;
88
41
  background-size: 60px 60px;
89
- /* Lifted floor — felt on the frame at rest (0.038). */
90
- opacity: var(--glass-grain-opacity, 0.038);
42
+ opacity: var(--glass-grain-opacity);
91
43
  mix-blend-mode: overlay;
92
- /* THE DATA-REGION MASK SLOT (M5). Default `none` = the whole surface is
93
- grained (page/card — no data to fence). A consumer that grains a chart
94
- plate sets `--paper-grain-mask` to a gradient/url() transparent over the
95
- data viewport + opaque over the frame, carving the figure out of the
96
- grain so no fleck lands on a tier fill. `mask` is Baseline; a
97
- non-supporting engine ignores it and keeps the full-surface grain (the
98
- page case is unaffected — the mask only matters when a consumer fences
99
- the data region). */
100
- mask: var(--paper-grain-mask, none);
101
- -webkit-mask: var(--paper-grain-mask, none);
102
- }
103
-
104
- /* The PLATE rung — a chart plate opts in via `[data-grain="plate"]` to the
105
- higher-tooth `--glass-grain-opacity-plate` (the figure's paper reads as the
106
- same stock as the page, with a touch more tooth). Pair with the mask slot to
107
- fence the data viewport. */
108
- &[data-grain="plate"]::after {
109
- opacity: var(--glass-grain-opacity-plate, 0.045);
110
44
  }
111
45
  }
112
46
 
@@ -82,25 +82,24 @@
82
82
  --corner-k-soft: 1.7; /* gentler, between round and squircle — n≈3.4 */
83
83
  --corner-k-sharp: 2.4; /* crisper square-bias for large surfaces — n≈4.8 */
84
84
 
85
- /* Semantic per-surface SHAPE aliases — the rounded-vs-squircle POLICY.
86
- Cards, pills/buttons, small docks, and panels stay ROUND (the superellipse is
87
- imperceptible at a 16px card radius or a stadium pill — dropping it there is
88
- visually free). The big-dock card shell (the large --radius-dock-card / 24px
89
- surface) is the one site where the squircle READS — the iOS-26 idiom the dock
90
- wants. A consumer opts an additional large-radius surface in by re-pointing its
91
- `--corner-shape-<surface>` at `superellipse(var(--corner-k-squircle))`. */
85
+ /* Semantic per-surface SHAPE aliases — the rounded-vs-squircle POLICY (a
86
+ RADIUS-THRESHOLD policy: the superellipse only READS at a LARGE radius
87
+ ~--radius-xl/12px and up). ROUND set = card, pill (small controls + data
88
+ cards + stadium pills — the superellipse is imperceptible, dropping it is
89
+ free). SQUIRCLE set = bigdock, dialog, sheet, panel, hero (the large-radius
90
+ glass overlays where the iOS-26 silhouette reads — the blur halo + cartoon
91
+ under-shadow follow the shape). ALL ride the ONE --corner-k-squircle vocab.
92
+ W56b (USER-DECISION R1) extended the family off big-dock-only onto the large
93
+ glass overlays; @supports-gated in glass/squircle.css over the `border-radius`
94
+ round CONTRACT. A consumer dials any surface back to round (or opts one in) by
95
+ re-pointing its `--corner-shape-<surface>` alias. */
92
96
  --corner-shape-card: round;
93
97
  --corner-shape-pill: round;
94
- --corner-shape-panel: round;
95
98
  --corner-shape-bigdock: superellipse(var(--corner-k-squircle));
96
- /* AX.W56(R1) — the overlay-band glass surfaces W54 makes glass-default
97
- (Dialog + Sheet content) ride the squircle alongside the big-dock. They
98
- sit at the large `--radius-dialog` (16px) modal radius where the
99
- superellipse READS — the same iOS-26 idiom. @supports-gated in glass.css
100
- over the `border-radius` round CONTRACT; a consumer dials either back to
101
- round by re-pointing the alias. */
102
99
  --corner-shape-dialog: superellipse(var(--corner-k-squircle));
103
100
  --corner-shape-sheet: superellipse(var(--corner-k-squircle));
101
+ --corner-shape-panel: superellipse(var(--corner-k-squircle));
102
+ --corner-shape-hero: superellipse(var(--corner-k-squircle));
104
103
  /* AX.W59 — the spectrum slider's track-height thumb reads as a SQUIRCLE
105
104
  (the iOS color-picker idiom). It rides the same --corner-k-squircle
106
105
  vocabulary; @supports-gated in Slider.vue over a --radius-* round
@@ -309,12 +308,6 @@
309
308
  --color-gold-light: var(--gold-light);
310
309
  --color-gold-dark: var(--gold-dark);
311
310
  --color-gold-deep: var(--gold-deep);
312
- /* D6.b — the gilt family: the rim (gilt edge) + the legible gold ink. The
313
- `@theme` bridge surfaces `text-gold-ink` / `border-gold-rim` utilities
314
- beside the existing gold quad. `--gold-ink` clears cream-law ② on `--card`
315
- in both arms (proof:gold-ink-contrast). */
316
- --color-gold-rim: var(--gold-rim);
317
- --color-gold-ink: var(--gold-ink);
318
311
 
319
312
  --color-rainbow-red: var(--rainbow-red);
320
313
  --color-rainbow-orange: var(--rainbow-orange);
@@ -0,0 +1,250 @@
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
+ }
@@ -0,0 +1,194 @@
1
+ /* tokens/dark-arm.css
2
+ The .dark {} dark-mode re-resolution (foreground / shadow-color / section-palette / constellation dark arm). After light-dark.css (the non-light-dark() fallback floor).
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
+
6
+ /* ═══════════════════════════════════════════════
7
+ DARK MODE — warm dark, section palette brightened ~20% L
8
+
9
+ FALLBACK FLOOR (AQ.W2 §2c): this class block is the SOLE non-light-dark()
10
+ dark path. On a `light-dark()`-supporting engine with `.dark` present,
11
+ `.dark { color-scheme: dark }` (§1) makes every §-1b token resolve to its
12
+ dark arm and these explicit dark values agree with it (kept as the floor
13
+ for non-supporting engines). The pure `var()`-alias re-declarations
14
+ (`--muted`/`--secondary`/`--accent`/`--border`/`--input`/… and the
15
+ `--background`/`*-foreground` aliases) are DELETED — they auto-track the
16
+ `--neutral-*` ladder + `--foreground` resolved above; only EXPLICIT-color
17
+ dark values (and the non-color overrides §2d) stay.
18
+ ═══════════════════════════════════════════════ */
19
+ .dark {
20
+ /* §1 — hard-pin native chrome to dark regardless of OS preference. §4 —
21
+ re-specify the inherited `accent-color` so it re-resolves to the dark
22
+ arm (§2b: an inherited built-in <color> set at `:root` would freeze to
23
+ the light shade without this re-specification). */
24
+ color-scheme: dark;
25
+ accent-color: var(--accent-color);
26
+
27
+ /* Neutral scale mirrors light-mode pattern: step UP from the background's
28
+ low L toward foreground. Same perceptual deltas as light. FALLBACK
29
+ FLOOR — kept verbatim for non-light-dark() engines (§2c); on a
30
+ supporting engine `color-scheme: dark` (above) drives the §-1b
31
+ light-dark() arms and these agree. */
32
+ --neutral-0: hsl(24 8% 6%); /* L 6 — page surface (dark) */
33
+ --neutral-1: hsl(24 6% 11%); /* L 11 — soft field */
34
+ --neutral-2: hsl(24 5% 16%); /* L 16 — chip / tab-inactive */
35
+ --neutral-3: hsl(24 5% 22%); /* L 22 — hover / highlight */
36
+ --neutral-4: hsl(24 5% 34%); /* L 34 — subtle border */
37
+ --neutral-5: hsl(48 5% 62%); /* L 62 — muted text (WCAG AA: 7.39:1 vs L6 page / 6.58:1 vs L11 muted) */
38
+ /* W7-α' (AK-FD1) — strong-muted text. Same principled ladder step as
39
+ light, mirrored: 10 L LIGHTER than muted (62→72) toward --foreground
40
+ (L90), the 1/3 point of the L62→L90 muted→primary gap. By-colour; hue
41
+ 48, sat nudged 5→6. WCAG AA: 9.86:1 vs L6 page / 8.78:1 vs L11 muted
42
+ (cf. neutral-5's 7.39:1). */
43
+ --neutral-6: hsl(48 6% 72%); /* L 72 — strong-muted text (secondary register) */
44
+
45
+ /* --background / --card-foreground / --popover-foreground / --muted /
46
+ --muted-foreground{,-strong} / --secondary{,-foreground} /
47
+ --accent{,-foreground} / --border / --input are pure var()-aliases —
48
+ DELETED here (AQ.W2 §2a): they auto-track the --neutral-* ladder +
49
+ --foreground above. Re-declaring them would be redundant. */
50
+ --foreground: hsl(48 10% 90%);
51
+ --card: hsl(24 8% 10%);
52
+ --popover: hsl(24 8% 10%);
53
+
54
+ /* R0G-5 (AO.W4) — dark mirror of the warm-neutral public-data panel.
55
+ --card's dark hsl(24 8% 10%) nudged one warmth step toward amber
56
+ (24→36) + +1 sat + +2 L so the dark dashboard panel lifts off the page. */
57
+ --surface-public-data-panel: hsl(36 9% 12%);
58
+
59
+ --primary: hsl(48 10% 90%);
60
+ --primary-foreground: hsl(24 10% 10%);
61
+ /* AX.W44 — the `.dark` class fallback floor, in LOCKSTEP with the light-dark()
62
+ enhancement arm above (§2c). Same lifted `hsl(0 80% 60%)` so a
63
+ @supports-split engine and a class-toggle engine paint the SAME dark red
64
+ (4.60:1 as ink over --card / 5.03:1 as a plate vs page). */
65
+ --destructive: hsl(0 80% 60%);
66
+ --destructive-foreground: hsl(48 10% 90%);
67
+ --ring: hsl(48 10% 70%);
68
+ --shadow: hsl(0 0% 5%);
69
+
70
+ /* Section palette — brightened for dark backgrounds (oklch; AV.W16 TW2 —
71
+ mirrors the light-dark() dark halves above; hue preserved) */
72
+ --section-color-0: oklch(0.721 0.145 354.0);
73
+ --section-color-1: oklch(0.733 0.113 308.2);
74
+ --section-color-2: oklch(0.718 0.107 268.4);
75
+ --section-color-3: oklch(0.767 0.091 219.9);
76
+ --section-color-4: oklch(0.776 0.105 172.6);
77
+ --section-color-5: oklch(0.813 0.109 78.2);
78
+ --section-color-6: oklch(0.693 0.151 28.1);
79
+ --section-color-7: oklch(0.739 0.134 318.1);
80
+ --section-color-8: oklch(0.709 0.142 2.3);
81
+ --section-color-9: oklch(0.763 0.032 239.0);
82
+ --section-color-10: oklch(0.794 0.116 127.9);
83
+ --section-color-11: oklch(0.805 0.095 206.7);
84
+ --section-color-12: oklch(0.719 0.115 295.6);
85
+
86
+ --accent-pink: oklch(0.683 0.131 354.7);
87
+ --section-heading: oklch(0.711 0.123 349.3);
88
+ --accent-red: oklch(0.644 0.165 22.9);
89
+
90
+ --viz-fourier: oklch(0.693 0.151 28.1);
91
+ --viz-chebyshev: oklch(0.718 0.107 268.4);
92
+ --viz-legendre: oklch(0.739 0.134 318.1);
93
+ /* --viz-amber / --viz-green / --meter-track-stroke are pure var()-aliases
94
+ (→ --section-color-5/-4 / --foreground) — DELETED (§2a); they auto-track
95
+ their sources, which convert via §-1b. */
96
+
97
+ /* O.W6 Lane D — WCAG companion labels lift to L≈0.85 against the
98
+ deep dark canvas; same two-token discipline as light mode (canvas
99
+ hue preserved at `--chart-*`; only the label register shifts). */
100
+ --chart-ping-label: oklch(0.85 0.12 230);
101
+ --chart-download-label: oklch(0.85 0.14 22);
102
+ --chart-upload-label: oklch(0.85 0.12 55);
103
+ --chart-jitter-label: oklch(0.85 0.14 305);
104
+
105
+ --tier-featured: oklch(0.867 0.165 88.7);
106
+ --tier-saved: oklch(0.748 0.135 250.1);
107
+ --like: oklch(0.690 0.162 22.2);
108
+ --success: oklch(0.805 0.186 151.6);
109
+ --warning: oklch(0.809 0.150 76.6);
110
+ --info: oklch(0.713 0.138 259.5);
111
+ --delete: oklch(0.644 0.170 23.1);
112
+
113
+ /* Semantic foregrounds — off-white over dark plates. Mirrors the
114
+ `--destructive-foreground` dark pattern (hsl 48 10% 90%). The warning
115
+ glyph stays dark-on-amber; the dark amber rung is luminous enough that
116
+ a darker glyph still reads (matches light-mode behaviour). */
117
+ --success-foreground: hsl(48 10% 96%);
118
+ --warning-foreground: hsl(24 10% 10%);
119
+ --info-foreground: hsl(48 10% 96%);
120
+
121
+ --shadow-cartoon: 3px 3px 0px 0px color-mix(in srgb, var(--foreground) 6%, transparent);
122
+ --shadow-cartoon-hover: 4px 4px 0px 0px color-mix(in srgb, var(--foreground) 8%, transparent);
123
+ --shadow-soft: 0 4px 12px rgba(0, 0, 0, 0.3);
124
+ --shadow-elevated: 0 8px 24px rgba(0, 0, 0, 0.35);
125
+ --shadow-modal:
126
+ 4px 4px 0px 0px color-mix(in srgb, var(--foreground) 6%, transparent),
127
+ 0 24px 64px color-mix(in srgb, var(--foreground) 18%, transparent);
128
+
129
+ --shadow-cartoon-color: rgb(255 255 255 / 0.07);
130
+ --shadow-cartoon-color-soft: rgb(255 255 255 / 0.03);
131
+
132
+ /* §5c CONSTELLATION — dark arm (AX.W17). The H.W4 dark-mode lift: the node
133
+ tones step UP off the ink ground (the light arm's mid-grey would vanish on
134
+ L6 black), the hairline goes warm off-white, the field carries a touch more
135
+ presence to read at all. PLAIN-hsl literals, NEVER light-dark()/var(). */
136
+ --constellation-node: hsl(42 9% 72%);
137
+ --constellation-node-dim: hsl(42 8% 56%);
138
+ --constellation-line: hsl(45 12% 86%);
139
+ /* Anomaly — brightened for the deep canvas (same neutral-default register;
140
+ the consumer still overrides to its brand). */
141
+ --constellation-accent: hsl(20 70% 60%);
142
+ /* The dark hairlines lift harder over the ink ground, so the edge multipliers
143
+ run a touch lower than light to keep the field recessive. */
144
+ --constellation-edge-alpha: 0.20;
145
+ --constellation-edge-focus-alpha: 0.32;
146
+ /* §7 — the ink ground needs MORE field presence than cream to read at all, so
147
+ the dark alpha is modestly HIGHER than the light arm — but still BELOW the
148
+ slides 1.0 max-legibility reference (the recessive midpoint, not 1.0). */
149
+ --constellation-alpha: 0.88;
150
+
151
+ /* Glass opacity + grain for dark — five-tier ladder, alpha-monotonic.
152
+ Each rung lifts ~0.08 from its light counterpart so the dark surfaces
153
+ carry comparable read-weight against the deeper canvas. */
154
+ --glass-opacity-wash: 0.38;
155
+ --glass-opacity-quiet: 0.58;
156
+ --glass-opacity-resting: 0.72;
157
+ --glass-opacity-floating: 0.88;
158
+ --glass-opacity-overlay: 0.96;
159
+ --glass-opacity-chassis: 0.36;
160
+ --glass-grain-opacity: 0.045;
161
+ --glass-highlight: inset 0 0.5px 0 0 hsl(0 0% 100% / 0.08);
162
+
163
+ /* Hairline-accent dark mirror — see light counterpart at line ~404. */
164
+ --hairline-catch-light: inset 0 0.5px 0 0 rgb(255 255 255 / 0.05);
165
+ --hairline-under-shadow: 0 0.5px 0 0 rgb(0 0 0 / 0.06);
166
+
167
+ /* Specular + curvature — softened for dark backdrops. Disco-grain stays
168
+ at the same opacity ceiling; the dark grain blend already lifts it. */
169
+ --glass-specular: inset 0 1.5px 0 0 hsl(0 0% 100% / 0.30);
170
+ /* AV.W15 M3 — the full-perimeter rim remaps to its dark weight inside
171
+ `.dark` (mirroring the `--glass-specular` remap above). The lit token
172
+ resolves to the `-dark` alpha on the deeper canvas. */
173
+ --glass-edge-light: var(--glass-edge-light-dark);
174
+
175
+ /* AW.W23 — the chromatic-fringe + adaptive-tint dark arm. The fringe drops
176
+ to a lower-luminance warm/cool pair on the deep canvas; `--glass-tint-
177
+ source` auto-flips with `--card` (no override needed — the default already
178
+ resolves the dark card). */
179
+ --glass-fringe-warm: oklch(0.78 0.07 40 / 0.18);
180
+ --glass-fringe-cool: oklch(0.74 0.06 230 / 0.14);
181
+ /* AX.W52 D19 — the curvature sheen is genuinely SOFTER on the deep canvas (the
182
+ prior dark arm re-declared the overlay BYTE-IDENTICAL to light, so it read
183
+ HARDER over the dark substrate — an unsoftened-dark defect). The `:root`
184
+ `--glass-curvature-overlay` already reads `var(--glass-curvature-intensity)`,
185
+ so lowering just the intensity here re-resolves the SAME warm-cream recipe at
186
+ a softer alpha — no byte-identical re-declaration. */
187
+ --glass-curvature-intensity: 0.012;
188
+
189
+ /* Gold — boosted for dark (oklch; AV.W16 TW2) */
190
+ --gold: oklch(0.784 0.143 86.0);
191
+ --gold-light: oklch(0.898 0.182 97.4);
192
+ --gold-dark: oklch(0.678 0.150 63.8);
193
+ }
194
+