@robr0/design-system 0.13.0 → 0.15.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 (91) hide show
  1. package/README.md +15 -6
  2. package/charts.d.ts +1 -0
  3. package/charts.js +2 -0
  4. package/components/AnchorNav/AnchorNav.css +74 -0
  5. package/components/AnchorNav/AnchorNav.d.ts +7 -0
  6. package/components/AnchorNav/AnchorNav.js +74 -21
  7. package/components/Banner/Banner.css +110 -0
  8. package/components/Banner/Banner.d.ts +36 -0
  9. package/components/Banner/Banner.js +59 -0
  10. package/components/Button/Button.css +51 -0
  11. package/components/Button/Button.d.ts +2 -2
  12. package/components/Chart/Chart.css +4 -1
  13. package/components/CircularButton/CircularButton.css +46 -0
  14. package/components/CircularButton/CircularButton.d.ts +13 -2
  15. package/components/CircularButton/CircularButton.js +19 -16
  16. package/components/CommandPalette/CommandPalette.css +26 -1
  17. package/components/CommandPalette/CommandPalette.js +11 -7
  18. package/components/Composer/Composer.css +18 -0
  19. package/components/Composer/Composer.d.ts +4 -2
  20. package/components/Composer/Composer.js +1 -0
  21. package/components/ContributionGraph/ContributionGraph.css +28 -1
  22. package/components/ContributionGraph/ContributionGraph.d.ts +9 -1
  23. package/components/ContributionGraph/ContributionGraph.js +66 -42
  24. package/components/EmptyState/EmptyState.css +5 -0
  25. package/components/Figure/Figure.css +14 -4
  26. package/components/Figure/Figure.js +11 -20
  27. package/components/FunnelChart/FunnelChart.css +11 -35
  28. package/components/FunnelChart/FunnelChart.d.ts +26 -15
  29. package/components/FunnelChart/FunnelChart.js +82 -34
  30. package/components/Gauge/Gauge.css +39 -12
  31. package/components/Gauge/Gauge.d.ts +16 -8
  32. package/components/Gauge/Gauge.js +78 -62
  33. package/components/HoverCard/HoverCard.css +97 -0
  34. package/components/HoverCard/HoverCard.d.ts +29 -0
  35. package/components/HoverCard/HoverCard.js +83 -0
  36. package/components/ImageCompare/ImageCompare.css +112 -0
  37. package/components/ImageCompare/ImageCompare.d.ts +40 -0
  38. package/components/ImageCompare/ImageCompare.js +134 -0
  39. package/components/LinkList/LinkList.d.ts +3 -1
  40. package/components/LinkList/LinkList.js +4 -3
  41. package/components/Meter/Meter.css +98 -0
  42. package/components/Meter/Meter.d.ts +36 -0
  43. package/components/Meter/Meter.js +48 -0
  44. package/components/NotificationCenter/NotificationCenter.css +11 -3
  45. package/components/ProgressBar/ProgressBar.css +1 -1
  46. package/components/Rating/Rating.css +74 -0
  47. package/components/Rating/Rating.d.ts +41 -0
  48. package/components/Rating/Rating.js +124 -0
  49. package/components/SegmentedControl/SegmentedControl.css +23 -0
  50. package/components/SegmentedControl/SegmentedControl.d.ts +3 -1
  51. package/components/SegmentedControl/SegmentedControl.js +3 -1
  52. package/components/Slider/Slider.css +1 -1
  53. package/components/Slider/Slider.js +1 -1
  54. package/components/SourceTrail/SourceTrail.css +209 -0
  55. package/components/SourceTrail/SourceTrail.d.ts +49 -0
  56. package/components/SourceTrail/SourceTrail.js +108 -0
  57. package/components/Sparkline/Sparkline.css +26 -2
  58. package/components/Sparkline/Sparkline.d.ts +5 -3
  59. package/components/Sparkline/Sparkline.js +32 -2
  60. package/components/Spinner/Spinner.css +1 -1
  61. package/components/SplitButton/SplitButton.css +93 -0
  62. package/components/SplitButton/SplitButton.d.ts +43 -0
  63. package/components/SplitButton/SplitButton.js +67 -0
  64. package/components/StreamingText/StreamingText.d.ts +27 -9
  65. package/components/StreamingText/StreamingText.js +17 -29
  66. package/components/StreamingText/useStreamReveal.d.ts +70 -0
  67. package/components/StreamingText/useStreamReveal.js +121 -0
  68. package/components/ToggleGroup/ToggleGroup.css +17 -0
  69. package/components/ToggleGroup/ToggleGroup.d.ts +2 -0
  70. package/components/ToggleGroup/ToggleGroup.js +2 -0
  71. package/components/ToolCall/ToolCall.css +7 -2
  72. package/components/Tooltip/Tooltip.css +24 -7
  73. package/components/Tooltip/Tooltip.d.ts +2 -1
  74. package/components/UsageCard/UsageCard.css +30 -0
  75. package/components/UsageCard/UsageCard.d.ts +48 -0
  76. package/components/UsageCard/UsageCard.js +54 -0
  77. package/components/registry.d.ts +8 -2
  78. package/components/registry.json +89 -14
  79. package/components/registry.json.d.ts +89 -14
  80. package/components/registry.json.js +1 -1
  81. package/index.d.ts +8 -1
  82. package/index.js +19 -2
  83. package/package.json +5 -1
  84. package/tokens/motion.d.ts +9 -4
  85. package/tokens/motion.js +5 -1
  86. package/tokens/registry.json +4 -0
  87. package/tokens/registry.json.d.ts +4 -0
  88. package/tokens/registry.json.js +1 -1
  89. package/tokens/tokens-dark.css +11 -2
  90. package/tokens/tokens-light.css +25 -11
  91. package/tokens/tokens-primitives.css +3 -0
package/tokens/motion.js CHANGED
@@ -4,6 +4,8 @@ const MOTION_AUTO_DISMISS_MS = 5e3;
4
4
  const MOTION_AUTOPLAY_INTERVAL_MS = 5e3;
5
5
  const MOTION_FEEDBACK_RESET_MS = 2e3;
6
6
  const MOTION_SCROLL_SETTLE_MS = 600;
7
+ const MOTION_STREAM_FLOOR_CPS = 70;
8
+ const MOTION_STREAM_DRAIN_MS = 250;
7
9
  const MOTION_STREAM_CHAR_INTERVAL_MS = 15;
8
10
  export {
9
11
  MOTION_AUTOPLAY_INTERVAL_MS,
@@ -12,5 +14,7 @@ export {
12
14
  MOTION_HOVER_HIDE_DELAY_MS,
13
15
  MOTION_HOVER_SHOW_DELAY_MS,
14
16
  MOTION_SCROLL_SETTLE_MS,
15
- MOTION_STREAM_CHAR_INTERVAL_MS
17
+ MOTION_STREAM_CHAR_INTERVAL_MS,
18
+ MOTION_STREAM_DRAIN_MS,
19
+ MOTION_STREAM_FLOOR_CPS
16
20
  };
@@ -4,6 +4,10 @@
4
4
  "colour": [
5
5
  "--color-action-icon-active",
6
6
  "--color-action-icon-default",
7
+ "--color-action-neutral-bg",
8
+ "--color-action-neutral-bg-active",
9
+ "--color-action-neutral-bg-hover",
10
+ "--color-action-neutral-text",
7
11
  "--color-action-passive-bg",
8
12
  "--color-action-passive-bg-active",
9
13
  "--color-action-passive-bg-hover",
@@ -4,6 +4,10 @@ declare const _default: {
4
4
  "colour": [
5
5
  "--color-action-icon-active",
6
6
  "--color-action-icon-default",
7
+ "--color-action-neutral-bg",
8
+ "--color-action-neutral-bg-active",
9
+ "--color-action-neutral-bg-hover",
10
+ "--color-action-neutral-text",
7
11
  "--color-action-passive-bg",
8
12
  "--color-action-passive-bg-active",
9
13
  "--color-action-passive-bg-hover",
@@ -1,4 +1,4 @@
1
- const categories = { "colour": ["--color-action-icon-active", "--color-action-icon-default", "--color-action-passive-bg", "--color-action-passive-bg-active", "--color-action-passive-bg-hover", "--color-action-passive-text", "--color-action-primary-bg", "--color-action-primary-bg-active", "--color-action-primary-bg-hover", "--color-action-primary-border", "--color-action-primary-border-secondary", "--color-action-primary-border-tertiary", "--color-action-primary-text", "--color-action-primary-text-active", "--color-action-primary-text-secondary", "--color-action-primary-text-tertiary", "--color-ai-gradient-end", "--color-ai-gradient-mid", "--color-ai-gradient-start", "--color-bg-container-border", "--color-bg-container-inverse", "--color-bg-container-primary", "--color-bg-container-primary-semi", "--color-bg-container-primary-transparent", "--color-bg-container-secondary", "--color-bg-container-tertiary", "--color-bg-glass", "--color-bg-page-inverse", "--color-bg-page-primary", "--color-chart-contribution-0", "--color-chart-contribution-1", "--color-chart-contribution-2", "--color-chart-contribution-3", "--color-chart-contribution-4", "--color-chart-series-1", "--color-chart-series-2", "--color-chart-series-3", "--color-chart-series-4", "--color-chart-series-5", "--color-chart-series-6", "--color-chart-series-7", "--color-chat-bubble-received-bg", "--color-chat-bubble-received-text", "--color-chat-bubble-sent-bg", "--color-chat-bubble-sent-text", "--color-control-thumb", "--color-core-accent-amber", "--color-core-accent-cobalt", "--color-core-accent-coral", "--color-core-accent-gold", "--color-core-accent-mint", "--color-core-accent-violet", "--color-core-ui-primary", "--color-core-ui-secondary", "--color-divider", "--color-icon-primary", "--color-icon-secondary", "--color-input-bg-disabled", "--color-input-bg-primary", "--color-input-border-disabled", "--color-input-border-hover", "--color-input-border-primary", "--color-input-border-selected", "--color-input-text-disabled", "--color-input-text-inverse", "--color-input-text-placeholder", "--color-input-text-primary", "--color-scrim", "--color-status-error-bg", "--color-status-error-border", "--color-status-error-text", "--color-status-info-bg", "--color-status-info-border", "--color-status-info-text", "--color-status-neutral-bg", "--color-status-neutral-border", "--color-status-neutral-text", "--color-status-positive-bg", "--color-status-positive-border", "--color-status-positive-text", "--color-status-warning-bg", "--color-status-warning-border", "--color-status-warning-text", "--color-text-inverse", "--color-text-on-inverse", "--color-text-primary", "--color-text-secondary", "--color-text-tertiary", "--color-trend-down", "--color-trend-up"], "typography": ["--font-caption-family", "--font-caption-letter-spacing", "--font-caption-line-height", "--font-caption-size", "--font-caption-weight", "--font-display-1-family", "--font-display-1-letter-spacing", "--font-display-1-line-height", "--font-display-1-size", "--font-display-1-weight", "--font-display-2-family", "--font-display-2-letter-spacing", "--font-display-2-line-height", "--font-display-2-size", "--font-display-2-weight", "--font-family-code", "--font-family-primary", "--font-heading-1-family", "--font-heading-1-letter-spacing", "--font-heading-1-line-height", "--font-heading-1-size", "--font-heading-1-weight", "--font-heading-2-family", "--font-heading-2-letter-spacing", "--font-heading-2-line-height", "--font-heading-2-size", "--font-heading-2-weight", "--font-heading-3-family", "--font-heading-3-letter-spacing", "--font-heading-3-line-height", "--font-heading-3-size", "--font-heading-3-weight", "--font-mega-1-family", "--font-mega-1-letter-spacing", "--font-mega-1-line-height", "--font-mega-1-size", "--font-mega-1-weight", "--font-mega-2-family", "--font-mega-2-letter-spacing", "--font-mega-2-line-height", "--font-mega-2-size", "--font-mega-2-weight", "--font-overline-family", "--font-overline-letter-spacing", "--font-overline-line-height", "--font-overline-size", "--font-overline-weight", "--font-paragraph-em-family", "--font-paragraph-em-letter-spacing", "--font-paragraph-em-line-height", "--font-paragraph-em-size", "--font-paragraph-em-weight", "--font-paragraph-family", "--font-paragraph-letter-spacing", "--font-paragraph-line-height", "--font-paragraph-size", "--font-paragraph-sm-em-family", "--font-paragraph-sm-em-letter-spacing", "--font-paragraph-sm-em-line-height", "--font-paragraph-sm-em-size", "--font-paragraph-sm-em-weight", "--font-paragraph-sm-family", "--font-paragraph-sm-letter-spacing", "--font-paragraph-sm-line-height", "--font-paragraph-sm-size", "--font-paragraph-sm-weight", "--font-paragraph-weight", "--font-sub-display-family", "--font-sub-display-letter-spacing", "--font-sub-display-line-height", "--font-sub-display-size", "--font-sub-display-weight", "--font-title-body-family", "--font-title-body-letter-spacing", "--font-title-body-line-height", "--font-title-body-size", "--font-title-body-weight"], "spacing": ["--gap-lg", "--gap-md", "--gap-sm", "--gap-sm-md", "--gap-xl", "--gap-xs", "--gap-xxl", "--gap-xxs", "--gap-xxxl", "--gap-xxxxl", "--padding-lg", "--padding-md", "--padding-sm", "--padding-sm-md", "--padding-xl", "--padding-xs", "--padding-xxl", "--padding-xxs", "--padding-xxxs"], "radius": ["--radius-composer", "--radius-full", "--radius-lg", "--radius-md", "--radius-sm", "--radius-xl", "--radius-xs", "--radius-xxl", "--radius-xxs"], "border": ["--border-md", "--border-xs"], "shadow": ["--shadow-floating", "--shadow-modal"], "icons": ["--icon-size-lg", "--icon-size-md", "--icon-size-sm", "--icon-size-xl"], "motion": ["--motion-duration-base", "--motion-duration-deliberate", "--motion-duration-fast", "--motion-duration-instant", "--motion-duration-loop-matrix", "--motion-duration-loop-shimmer", "--motion-duration-loop-spin", "--motion-duration-slow", "--motion-duration-slower", "--motion-ease-emphasized", "--motion-ease-entrance", "--motion-ease-linear", "--motion-ease-spring", "--motion-ease-standard"] };
1
+ const categories = { "colour": ["--color-action-icon-active", "--color-action-icon-default", "--color-action-neutral-bg", "--color-action-neutral-bg-active", "--color-action-neutral-bg-hover", "--color-action-neutral-text", "--color-action-passive-bg", "--color-action-passive-bg-active", "--color-action-passive-bg-hover", "--color-action-passive-text", "--color-action-primary-bg", "--color-action-primary-bg-active", "--color-action-primary-bg-hover", "--color-action-primary-border", "--color-action-primary-border-secondary", "--color-action-primary-border-tertiary", "--color-action-primary-text", "--color-action-primary-text-active", "--color-action-primary-text-secondary", "--color-action-primary-text-tertiary", "--color-ai-gradient-end", "--color-ai-gradient-mid", "--color-ai-gradient-start", "--color-bg-container-border", "--color-bg-container-inverse", "--color-bg-container-primary", "--color-bg-container-primary-semi", "--color-bg-container-primary-transparent", "--color-bg-container-secondary", "--color-bg-container-tertiary", "--color-bg-glass", "--color-bg-page-inverse", "--color-bg-page-primary", "--color-chart-contribution-0", "--color-chart-contribution-1", "--color-chart-contribution-2", "--color-chart-contribution-3", "--color-chart-contribution-4", "--color-chart-series-1", "--color-chart-series-2", "--color-chart-series-3", "--color-chart-series-4", "--color-chart-series-5", "--color-chart-series-6", "--color-chart-series-7", "--color-chat-bubble-received-bg", "--color-chat-bubble-received-text", "--color-chat-bubble-sent-bg", "--color-chat-bubble-sent-text", "--color-control-thumb", "--color-core-accent-amber", "--color-core-accent-cobalt", "--color-core-accent-coral", "--color-core-accent-gold", "--color-core-accent-mint", "--color-core-accent-violet", "--color-core-ui-primary", "--color-core-ui-secondary", "--color-divider", "--color-icon-primary", "--color-icon-secondary", "--color-input-bg-disabled", "--color-input-bg-primary", "--color-input-border-disabled", "--color-input-border-hover", "--color-input-border-primary", "--color-input-border-selected", "--color-input-text-disabled", "--color-input-text-inverse", "--color-input-text-placeholder", "--color-input-text-primary", "--color-scrim", "--color-status-error-bg", "--color-status-error-border", "--color-status-error-text", "--color-status-info-bg", "--color-status-info-border", "--color-status-info-text", "--color-status-neutral-bg", "--color-status-neutral-border", "--color-status-neutral-text", "--color-status-positive-bg", "--color-status-positive-border", "--color-status-positive-text", "--color-status-warning-bg", "--color-status-warning-border", "--color-status-warning-text", "--color-text-inverse", "--color-text-on-inverse", "--color-text-primary", "--color-text-secondary", "--color-text-tertiary", "--color-trend-down", "--color-trend-up"], "typography": ["--font-caption-family", "--font-caption-letter-spacing", "--font-caption-line-height", "--font-caption-size", "--font-caption-weight", "--font-display-1-family", "--font-display-1-letter-spacing", "--font-display-1-line-height", "--font-display-1-size", "--font-display-1-weight", "--font-display-2-family", "--font-display-2-letter-spacing", "--font-display-2-line-height", "--font-display-2-size", "--font-display-2-weight", "--font-family-code", "--font-family-primary", "--font-heading-1-family", "--font-heading-1-letter-spacing", "--font-heading-1-line-height", "--font-heading-1-size", "--font-heading-1-weight", "--font-heading-2-family", "--font-heading-2-letter-spacing", "--font-heading-2-line-height", "--font-heading-2-size", "--font-heading-2-weight", "--font-heading-3-family", "--font-heading-3-letter-spacing", "--font-heading-3-line-height", "--font-heading-3-size", "--font-heading-3-weight", "--font-mega-1-family", "--font-mega-1-letter-spacing", "--font-mega-1-line-height", "--font-mega-1-size", "--font-mega-1-weight", "--font-mega-2-family", "--font-mega-2-letter-spacing", "--font-mega-2-line-height", "--font-mega-2-size", "--font-mega-2-weight", "--font-overline-family", "--font-overline-letter-spacing", "--font-overline-line-height", "--font-overline-size", "--font-overline-weight", "--font-paragraph-em-family", "--font-paragraph-em-letter-spacing", "--font-paragraph-em-line-height", "--font-paragraph-em-size", "--font-paragraph-em-weight", "--font-paragraph-family", "--font-paragraph-letter-spacing", "--font-paragraph-line-height", "--font-paragraph-size", "--font-paragraph-sm-em-family", "--font-paragraph-sm-em-letter-spacing", "--font-paragraph-sm-em-line-height", "--font-paragraph-sm-em-size", "--font-paragraph-sm-em-weight", "--font-paragraph-sm-family", "--font-paragraph-sm-letter-spacing", "--font-paragraph-sm-line-height", "--font-paragraph-sm-size", "--font-paragraph-sm-weight", "--font-paragraph-weight", "--font-sub-display-family", "--font-sub-display-letter-spacing", "--font-sub-display-line-height", "--font-sub-display-size", "--font-sub-display-weight", "--font-title-body-family", "--font-title-body-letter-spacing", "--font-title-body-line-height", "--font-title-body-size", "--font-title-body-weight"], "spacing": ["--gap-lg", "--gap-md", "--gap-sm", "--gap-sm-md", "--gap-xl", "--gap-xs", "--gap-xxl", "--gap-xxs", "--gap-xxxl", "--gap-xxxxl", "--padding-lg", "--padding-md", "--padding-sm", "--padding-sm-md", "--padding-xl", "--padding-xs", "--padding-xxl", "--padding-xxs", "--padding-xxxs"], "radius": ["--radius-composer", "--radius-full", "--radius-lg", "--radius-md", "--radius-sm", "--radius-xl", "--radius-xs", "--radius-xxl", "--radius-xxs"], "border": ["--border-md", "--border-xs"], "shadow": ["--shadow-floating", "--shadow-modal"], "icons": ["--icon-size-lg", "--icon-size-md", "--icon-size-sm", "--icon-size-xl"], "motion": ["--motion-duration-base", "--motion-duration-deliberate", "--motion-duration-fast", "--motion-duration-instant", "--motion-duration-loop-matrix", "--motion-duration-loop-shimmer", "--motion-duration-loop-spin", "--motion-duration-slow", "--motion-duration-slower", "--motion-ease-emphasized", "--motion-ease-entrance", "--motion-ease-linear", "--motion-ease-spring", "--motion-ease-standard"] };
2
2
  const registry = {
3
3
  categories
4
4
  };
@@ -75,6 +75,14 @@
75
75
  --color-action-passive-bg-hover: var(--primitive-neutral-08-semi);
76
76
  --color-action-passive-bg-active: var(--primitive-neutral-07-semi);
77
77
 
78
+ /* Action - Neutral (grey filled buttons). The fill stays visible at
79
+ rest, one step above the container greys; hover and active brighten
80
+ toward the page's opposite, like the primary family. */
81
+ --color-action-neutral-bg: var(--primitive-neutral-08);
82
+ --color-action-neutral-bg-hover: var(--primitive-neutral-07);
83
+ --color-action-neutral-bg-active: var(--primitive-neutral-06);
84
+ --color-action-neutral-text: var(--primitive-neutral-01);
85
+
78
86
  /* Status - Positive */
79
87
  --color-status-positive-bg: var(--primitive-green-10);
80
88
  --color-status-positive-border: var(--primitive-green-07);
@@ -100,8 +108,9 @@
100
108
  --color-status-neutral-border: var(--primitive-neutral-06);
101
109
  --color-status-neutral-text: var(--primitive-neutral-01);
102
110
 
103
- /* AI - The gradient accent, one step brighter than light mode so the ring
104
- stays luminous on dark surfaces. */
111
+ /* AI - The gradient accent: the same luminous stops as light. One set
112
+ works on both floors, so the AI signature never shifts hue with the
113
+ theme. */
105
114
  --color-ai-gradient-start: var(--primitive-red-05);
106
115
  --color-ai-gradient-mid: var(--primitive-blue-05);
107
116
  --color-ai-gradient-end: var(--primitive-teal-07);
@@ -19,22 +19,25 @@
19
19
  --color-icon-secondary: var(--primitive-neutral-04);
20
20
 
21
21
  /* Background - Page */
22
- --color-bg-page-primary: var(--primitive-neutral-00);
22
+ --color-bg-page-primary: var(--primitive-neutral-01);
23
23
  --color-bg-page-inverse: var(--primitive-neutral-10);
24
24
 
25
25
  /* Background - Container */
26
- --color-bg-container-primary: var(--primitive-neutral-01);
27
- --color-bg-container-primary-transparent: var(--primitive-neutral-01-transparent);
28
- --color-bg-container-primary-semi: var(--primitive-neutral-01-semi);
29
- --color-bg-container-secondary: var(--primitive-neutral-02);
30
- --color-bg-container-tertiary: var(--primitive-neutral-03);
26
+ --color-bg-container-primary: var(--primitive-neutral-00);
27
+ --color-bg-container-primary-transparent: var(--primitive-neutral-00-transparent);
28
+ /* The semi surface rides the glass-strength white, not the 60% one: light
29
+ containers should read bright white, with the ambient background only
30
+ whispering through. */
31
+ --color-bg-container-primary-semi: var(--primitive-neutral-00-glass);
32
+ --color-bg-container-secondary: var(--primitive-neutral-01);
33
+ --color-bg-container-tertiary: var(--primitive-neutral-02);
31
34
  --color-bg-container-inverse: var(--primitive-neutral-09);
32
35
  --color-bg-container-border: var(--primitive-neutral-02);
33
36
 
34
37
  /* Glass: the translucent floating-surface fill (chat panel, floating
35
38
  sidebar). Deliberately translucent in both themes so the page's
36
39
  colours reach the surface; pair it with backdrop-filter: blur(24px). */
37
- --color-bg-glass: var(--primitive-neutral-01-glass);
40
+ --color-bg-glass: var(--primitive-neutral-00-glass);
38
41
 
39
42
  /* Divider */
40
43
  --color-divider: var(--primitive-neutral-02-semi);
@@ -81,6 +84,15 @@
81
84
  --color-action-passive-bg-hover: var(--primitive-neutral-02-semi);
82
85
  --color-action-passive-bg-active: var(--primitive-neutral-03-semi);
83
86
 
87
+ /* Action - Neutral (grey filled buttons). Unlike passive, the fill is a
88
+ solid grey step that stays visible at rest — a filled button without
89
+ the action teal's "click here" weight. Hover and active deepen in
90
+ light mode and brighten in dark, like the primary family. */
91
+ --color-action-neutral-bg: var(--primitive-neutral-02);
92
+ --color-action-neutral-bg-hover: var(--primitive-neutral-03);
93
+ --color-action-neutral-bg-active: var(--primitive-neutral-04);
94
+ --color-action-neutral-text: var(--primitive-neutral-10);
95
+
84
96
  /* Core colours */
85
97
  --color-core-ui-primary: var(--primitive-teal-08);
86
98
  --color-core-ui-secondary: var(--primitive-teal-10);
@@ -125,10 +137,12 @@
125
137
  /* AI - The gradient accent reserved for AI entry points and surfaces.
126
138
  Red → blue → teal, so the AI affordance is its own signature and the
127
139
  flat action teal keeps meaning "click here". Used as gradient stops
128
- (AiButton's ring and glow), never as fills for ordinary chrome. */
129
- --color-ai-gradient-start: var(--primitive-red-06);
130
- --color-ai-gradient-mid: var(--primitive-blue-06);
131
- --color-ai-gradient-end: var(--primitive-teal-08);
140
+ (AiButton's ring and glow), never as fills for ordinary chrome.
141
+ One luminous set, shared with dark: the deeper inks read as a heavy
142
+ dark border on white surfaces. */
143
+ --color-ai-gradient-start: var(--primitive-red-05);
144
+ --color-ai-gradient-mid: var(--primitive-blue-05);
145
+ --color-ai-gradient-end: var(--primitive-teal-07);
132
146
 
133
147
  /* Chart - Contribution heatmap ramp (level 0 = none → level 4 = most) */
134
148
  --color-chart-contribution-0: var(--color-bg-container-primary);
@@ -11,6 +11,9 @@
11
11
 
12
12
  /* Neutral Scale */
13
13
  --primitive-neutral-00: #FFFFFF;
14
+ --primitive-neutral-00-transparent: rgba(255, 255, 255, 0.01);
15
+ --primitive-neutral-00-semi: rgba(255, 255, 255, 0.6);
16
+ --primitive-neutral-00-glass: rgba(255, 255, 255, 0.9);
14
17
  --primitive-neutral-01: #F1F1F1;
15
18
  --primitive-neutral-01-transparent: rgba(241, 241, 241, 0.01);
16
19
  --primitive-neutral-01-semi: rgba(241, 241, 241, 0.6);