@mcp-b/react-components 0.20.4 → 0.20.5

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 (54) hide show
  1. package/dist/components/MessageScroller.js +1 -0
  2. package/dist/components/Stepper.js +1 -5
  3. package/dist/components/TestResults.js +15 -15
  4. package/dist/components/ThinkChatActivitySummary.js +2 -2
  5. package/dist/components/ThinkExecutionRun.js +2 -2
  6. package/dist/components/ThinkRoutine.js +2 -10
  7. package/dist/components/ThinkThreadPicker.js +1 -0
  8. package/dist/styles/accordion.css +2 -1
  9. package/dist/styles/activity-header.css +4 -15
  10. package/dist/styles/agent-activity-preview-overlay.css +12 -0
  11. package/dist/styles/agent-activity-preview.css +3 -3
  12. package/dist/styles/agent-attention.css +7 -14
  13. package/dist/styles/agent-connection.css +2 -2
  14. package/dist/styles/artifact.css +1 -1
  15. package/dist/styles/attachment-preview.css +1 -1
  16. package/dist/styles/badge.css +1 -1
  17. package/dist/styles/base.css +15 -0
  18. package/dist/styles/browser-control-overlay.css +4 -3
  19. package/dist/styles/browser-live-view.css +1 -1
  20. package/dist/styles/browser-replay.css +3 -3
  21. package/dist/styles/browser-run-panel.css +1 -1
  22. package/dist/styles/button.css +1 -1
  23. package/dist/styles/chain-of-thought.css +1 -1
  24. package/dist/styles/chatgpt-sign-in-screen.css +2 -2
  25. package/dist/styles/checkbox-group.css +1 -1
  26. package/dist/styles/code-block.css +5 -5
  27. package/dist/styles/commit.css +1 -1
  28. package/dist/styles/environment-variables.css +4 -4
  29. package/dist/styles/fieldset.css +1 -1
  30. package/dist/styles/file-tree.css +1 -1
  31. package/dist/styles/github-motion-mark.css +1 -1
  32. package/dist/styles/label.css +1 -1
  33. package/dist/styles/mcp-server-picker.css +1 -1
  34. package/dist/styles/menu.css +1 -1
  35. package/dist/styles/message-scroller.css +3 -21
  36. package/dist/styles/message.css +1 -1
  37. package/dist/styles/plan.css +1 -1
  38. package/dist/styles/pricing-page.css +37 -35
  39. package/dist/styles/prompt-input.css +1 -1
  40. package/dist/styles/queue.css +1 -1
  41. package/dist/styles/recipes.css +24 -0
  42. package/dist/styles/sources.css +1 -1
  43. package/dist/styles/streamdown.css +28 -25
  44. package/dist/styles/task.css +1 -1
  45. package/dist/styles/terminal.css +4 -4
  46. package/dist/styles/test-results.css +1 -1
  47. package/dist/styles/theme-mode-control.css +2 -3
  48. package/dist/styles/think-execution-workbench.css +1 -1
  49. package/dist/styles/think-full-app.css +1 -1
  50. package/dist/styles/think-routine-library.css +8 -8
  51. package/dist/styles/think-thread-picker.css +12 -22
  52. package/dist/styles/web-preview.css +4 -4
  53. package/dist/styles/workspace-explorer.css +2 -2
  54. package/package.json +2 -2
@@ -22,6 +22,7 @@ function MessageScroller({ className, ...props }) {
22
22
  function MessageScrollerViewport({ className, ...props }) {
23
23
  return /* @__PURE__ */ jsx(MessageScroller$1.Viewport, {
24
24
  "data-slot": "message-scroller-viewport",
25
+ "data-recipe": "scroll-fade-y",
25
26
  className: cx("message-scroller__viewport", className),
26
27
  ...props
27
28
  });
@@ -71,13 +71,12 @@ function Stepper({ defaultValue = 1, value, onValueChange, orientation = "horizo
71
71
  });
72
72
  }
73
73
  function StepperNav({ className, ref, ...props }) {
74
- const { activeStep, orientation } = useStepper();
74
+ const { activeStep } = useStepper();
75
75
  return /* @__PURE__ */ jsx(Tabs.List, {
76
76
  ref,
77
77
  className: mergeBaseClassName("stepper__nav", className),
78
78
  "data-active-step": activeStep,
79
79
  "data-slot": "stepper-list",
80
- "data-orientation": orientation,
81
80
  unstyled: true,
82
81
  ...props
83
82
  });
@@ -191,8 +190,6 @@ function StepperPanel({ className, ref, ...props }) {
191
190
  });
192
191
  }
193
192
  function StepperContent({ value, forceMount = false, spacing = "none", className, children, ref, ...props }) {
194
- const { activeStep } = useStepper();
195
- const isActive = activeStep === value;
196
193
  return /* @__PURE__ */ jsx(Tabs.Panel, {
197
194
  ref,
198
195
  value,
@@ -200,7 +197,6 @@ function StepperContent({ value, forceMount = false, spacing = "none", className
200
197
  className: mergeBaseClassName("stepper__content", className),
201
198
  "data-spacing": spacing,
202
199
  "data-slot": "stepper-content",
203
- "data-state": isActive ? "active" : "inactive",
204
200
  unstyled: true,
205
201
  ...props,
206
202
  children
@@ -1,6 +1,7 @@
1
1
  import { t as cx } from "../class-names-BiMDVpUo.js";
2
2
  import { Collapsible } from "./Collapsible.js";
3
3
  import { K as SpinnerIcon, et as XIcon, p as ChevronRightIcon, u as CheckIcon } from "../icons-DyOM0EJs.js";
4
+ import { Progress } from "./Progress.js";
4
5
  import { Badge } from "./Badge.js";
5
6
  import * as React from "react";
6
7
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
@@ -122,22 +123,21 @@ function TestResultsProgress({ className, children, ref, ...props }) {
122
123
  ref,
123
124
  className: cx("test-results__progress", className),
124
125
  ...props,
125
- children: [/* @__PURE__ */ jsxs("div", {
126
+ children: [/* @__PURE__ */ jsx(Progress.Root, {
126
127
  "aria-label": "Test progress",
127
- "aria-valuemax": summary.total,
128
- "aria-valuemin": 0,
129
- "aria-valuenow": summary.passed,
130
- "aria-valuetext": `${summary.passed}/${summary.total} tests passed, ${summary.failed} failed`,
131
- className: "test-results__progress-track",
132
- "data-slot": "progress-track",
133
- role: "progressbar",
134
- children: [/* @__PURE__ */ jsx("div", {
135
- className: "test-results__progress-segment test-results__progress-segment--passed",
136
- style: { inlineSize: `${passedPercent}%` }
137
- }), /* @__PURE__ */ jsx("div", {
138
- className: "test-results__progress-segment test-results__progress-segment--failed",
139
- style: { inlineSize: `${failedPercent}%` }
140
- })]
128
+ value: summary.passed,
129
+ max: summary.total,
130
+ getAriaValueText: () => `${summary.passed}/${summary.total} tests passed, ${summary.failed} failed`,
131
+ children: /* @__PURE__ */ jsxs(Progress.Track, {
132
+ className: "test-results__progress-track",
133
+ children: [/* @__PURE__ */ jsx("div", {
134
+ className: "test-results__progress-segment test-results__progress-segment--passed",
135
+ style: { inlineSize: `${passedPercent}%` }
136
+ }), /* @__PURE__ */ jsx("div", {
137
+ className: "test-results__progress-segment test-results__progress-segment--failed",
138
+ style: { inlineSize: `${failedPercent}%` }
139
+ })]
140
+ })
141
141
  }), /* @__PURE__ */ jsxs("span", {
142
142
  className: "test-results__progress-label",
143
143
  children: [
@@ -1,3 +1,4 @@
1
+ import { t as capitalize } from "../format-S6uWyoSb.js";
1
2
  import { displayUrl, getToolDisplayName, isBrowserToolPart, isExecuteToolPart, isFetchToolPart, isPartFailed, isPartWorking, isSessionContextToolFailure, isSessionContextToolPart, isSkillToolPart, isWorkspaceToolPart } from "./ThinkChatToolParts.js";
2
3
  import { t as summarizeToolInput } from "../summarize-tool-input-CqTcGRYy.js";
3
4
  import { getToolName, isReasoningUIPart, isToolUIPart } from "ai";
@@ -339,8 +340,7 @@ function summarizeActivitySteps(parts) {
339
340
  for (const segment of genericSegments) if (!includedSegments.has(segment)) segments.push(segment);
340
341
  if (segments.length === 0) return "Worked";
341
342
  const top = segments.slice(0, 3);
342
- const joined = top.length === 1 ? top[0] : `${top.slice(0, -1).join(", ")} and ${top.at(-1)}`;
343
- return joined.charAt(0).toUpperCase() + joined.slice(1);
343
+ return capitalize(top.length === 1 ? top[0] : `${top.slice(0, -1).join(", ")} and ${top.at(-1)}`);
344
344
  }
345
345
  /** Derive the serializable collapsed header from persisted AI SDK message parts. */
346
346
  function deriveThinkChatActivityHeader(parts, options = {}) {
@@ -1,3 +1,4 @@
1
+ import { t as capitalize } from "../format-S6uWyoSb.js";
1
2
  //#region src/components/ThinkExecutionRun.ts
2
3
  /** Narrows the direct upstream execution union without wrapping either record. */
3
4
  function isThinkSubmissionRun(run) {
@@ -35,8 +36,7 @@ function getThinkExecutionRunStatusTone(run) {
35
36
  return "neutral";
36
37
  }
37
38
  function formatThinkExecutionStatus(status) {
38
- const words = status.replaceAll(/([a-z])([A-Z])/g, "$1 $2");
39
- return words.charAt(0).toUpperCase() + words.slice(1);
39
+ return capitalize(status.replaceAll(/([a-z])([A-Z])/g, "$1 $2"));
40
40
  }
41
41
  function formatThinkExecutionTimestamp(value, fallback = "Not recorded") {
42
42
  if (value == null) return fallback;
@@ -1,17 +1,9 @@
1
+ import { formatThinkExecutionShortTimestamp } from "./ThinkExecutionRun.js";
1
2
  //#region src/components/ThinkRoutine.ts
2
3
  function getThinkRoutineNextRun(routine) {
3
4
  if (!routine.schedule) return null;
4
5
  if (!routine.enabled) return "Paused";
5
- return formatThinkExecutionDate(routine.schedule.time * 1e3, "Not scheduled");
6
- }
7
- function formatThinkExecutionDate(value, fallback) {
8
- const date = value instanceof Date ? value : new Date(value);
9
- return Number.isNaN(date.getTime()) ? fallback : date.toLocaleString(void 0, {
10
- month: "short",
11
- day: "numeric",
12
- hour: "numeric",
13
- minute: "2-digit"
14
- });
6
+ return formatThinkExecutionShortTimestamp(routine.schedule.time * 1e3, "Not scheduled");
15
7
  }
16
8
  //#endregion
17
9
  export { getThinkRoutineNextRun };
@@ -187,6 +187,7 @@ function ThinkThreadPicker({ threads, renderThreadLink, onCreate, onDelete, clas
187
187
  className: "think-thread-picker__scroll",
188
188
  children: [/* @__PURE__ */ jsx(ScrollArea.Viewport, {
189
189
  className: "think-thread-picker__viewport",
190
+ "data-recipe": "scroll-fade-y",
190
191
  "aria-label": "Thread list",
191
192
  children: visibleThreads.length ? /* @__PURE__ */ jsx("ul", {
192
193
  className: "think-thread-picker__list",
@@ -3,7 +3,8 @@
3
3
  }
4
4
 
5
5
  .accordion__item {
6
- border-block-end: 1px solid var(--sigvelo-color-neutral-border-muted);
6
+ border-block-end: var(--sigvelo-border-style) var(--sigvelo-border-width)
7
+ var(--sigvelo-color-neutral-border-muted);
7
8
  }
8
9
 
9
10
  .accordion__item:last-child {
@@ -28,29 +28,18 @@
28
28
 
29
29
  .activity[data-streaming] .activity__header-label,
30
30
  .activity__header[data-streaming] .activity__header-label {
31
- --activity-shimmer-base: color-mix(in oklab, var(--sigvelo-color-text-muted), transparent 20%);
31
+ --sigvelo-shimmer-base: color-mix(in oklab, var(--sigvelo-color-text-muted), transparent 20%);
32
32
  background: linear-gradient(
33
33
  90deg,
34
- var(--activity-shimmer-base) 0%,
35
- var(--activity-shimmer-base) 40%,
34
+ var(--sigvelo-shimmer-base) 0% 40%,
36
35
  var(--sigvelo-color-text) 50%,
37
- var(--activity-shimmer-base) 60%,
38
- var(--activity-shimmer-base) 100%
36
+ var(--sigvelo-shimmer-base) 60% 100%
39
37
  );
40
38
  background-size: 200% 100%;
41
39
  -webkit-background-clip: text;
42
40
  background-clip: text;
43
41
  color: transparent;
44
- animation: activity-shimmer 2.4s linear infinite;
45
- }
46
-
47
- @keyframes activity-shimmer {
48
- from {
49
- background-position: 100% 0;
50
- }
51
- to {
52
- background-position: -100% 0;
53
- }
42
+ animation: sigvelo-text-shimmer var(--sigvelo-motion-duration-shimmer) linear infinite;
54
43
  }
55
44
 
56
45
  @media (prefers-reduced-motion: reduce) {
@@ -61,6 +61,18 @@
61
61
  }
62
62
  }
63
63
 
64
+ /* Shadow-local copy of base.css's sigvelo-text-shimmer — keyframes do not cross
65
+ shadow roots, so the imported activity header shimmer needs it defined here.
66
+ --sigvelo-motion-duration-shimmer inherits across the boundary. */
67
+ @keyframes sigvelo-text-shimmer {
68
+ from {
69
+ background-position: 100% 0;
70
+ }
71
+ to {
72
+ background-position: -100% 0;
73
+ }
74
+ }
75
+
64
76
  @media (prefers-color-scheme: dark) {
65
77
  :host {
66
78
  --sigvelo-color-warning-text: #f0aa45;
@@ -94,7 +94,7 @@
94
94
  }
95
95
 
96
96
  .agent-activity-preview__item:first-child {
97
- padding-inline-end: calc(2rem + var(--sigvelo-spacing-0-5));
97
+ padding-inline-end: calc(var(--sigvelo-spacing-8) + var(--sigvelo-spacing-0-5));
98
98
  }
99
99
 
100
100
  .agent-activity-preview__row {
@@ -166,7 +166,7 @@
166
166
  .agent-activity-preview__favicons {
167
167
  display: flex;
168
168
  align-items: center;
169
- padding-inline-start: 0.25rem;
169
+ padding-inline-start: var(--sigvelo-spacing-1);
170
170
  }
171
171
 
172
172
  .agent-activity-preview__favicons img {
@@ -234,6 +234,6 @@
234
234
  .agent-activity-preview__dismiss,
235
235
  .agent-activity-preview__file-action,
236
236
  .agent-activity-preview__favicons img {
237
- border: 1px solid CanvasText;
237
+ border: var(--sigvelo-border-style) var(--sigvelo-border-width) CanvasText;
238
238
  }
239
239
  }
@@ -4,7 +4,8 @@
4
4
  min-width: 0;
5
5
  gap: var(--sigvelo-spacing-1-5);
6
6
  padding: var(--sigvelo-spacing-1-5);
7
- border: 1px solid var(--sigvelo-color-neutral-border-muted);
7
+ border: var(--sigvelo-border-style) var(--sigvelo-border-width)
8
+ var(--sigvelo-color-neutral-border-muted);
8
9
  border-radius: var(--sigvelo-radius-md);
9
10
  color: var(--sigvelo-color-text);
10
11
  background: var(--sigvelo-color-surface);
@@ -90,26 +91,18 @@
90
91
  }
91
92
 
92
93
  .agent-attention[data-busy] .agent-attention__title {
93
- --agent-attention-shimmer: color-mix(in oklab, var(--sigvelo-color-text-muted), transparent 20%);
94
+ --sigvelo-shimmer-base: color-mix(in oklab, var(--sigvelo-color-text-muted), transparent 20%);
94
95
  background: linear-gradient(
95
96
  90deg,
96
- var(--agent-attention-shimmer) 0% 40%,
97
+ var(--sigvelo-shimmer-base) 0% 40%,
97
98
  var(--sigvelo-color-text) 50%,
98
- var(--agent-attention-shimmer) 60% 100%
99
+ var(--sigvelo-shimmer-base) 60% 100%
99
100
  );
100
101
  background-size: 200% 100%;
102
+ -webkit-background-clip: text;
101
103
  background-clip: text;
102
104
  color: transparent;
103
- animation: agent-attention-shimmer 2.4s linear infinite;
104
- }
105
-
106
- @keyframes agent-attention-shimmer {
107
- from {
108
- background-position: 100% 0;
109
- }
110
- to {
111
- background-position: -100% 0;
112
- }
105
+ animation: sigvelo-text-shimmer var(--sigvelo-motion-duration-shimmer) linear infinite;
113
106
  }
114
107
 
115
108
  @media (prefers-reduced-motion: reduce), (forced-colors: active) {
@@ -52,10 +52,10 @@
52
52
  .agent-connect__targets {
53
53
  display: grid;
54
54
  grid-template-columns: repeat(4, minmax(0, 1fr));
55
- gap: 0.25rem;
55
+ gap: var(--sigvelo-spacing-1);
56
56
  min-inline-size: 0;
57
57
  margin: 0;
58
- padding: 0.25rem;
58
+ padding: var(--sigvelo-spacing-1);
59
59
  border: var(--sigvelo-border-style) var(--sigvelo-border-width)
60
60
  var(--sigvelo-color-neutral-border-subtle);
61
61
  border-radius: var(--sigvelo-radius-md);
@@ -63,6 +63,6 @@
63
63
 
64
64
  @media (forced-colors: active) {
65
65
  .artifact {
66
- border: 1px solid CanvasText;
66
+ border: var(--sigvelo-border-style) var(--sigvelo-border-width) CanvasText;
67
67
  }
68
68
  }
@@ -14,7 +14,7 @@
14
14
  }
15
15
 
16
16
  .attachment-preview__name {
17
- margin-block-start: 0.5rem;
17
+ margin-block-start: var(--sigvelo-spacing-2);
18
18
  font-size: var(--sigvelo-text-xs);
19
19
  color: var(--sigvelo-color-text-muted);
20
20
  text-align: center;
@@ -110,7 +110,7 @@
110
110
 
111
111
  @media (forced-colors: active) {
112
112
  .badge {
113
- border: 1px solid ButtonText;
113
+ border: var(--sigvelo-border-style) var(--sigvelo-border-width) ButtonText;
114
114
  }
115
115
 
116
116
  .badge--ghost,
@@ -35,6 +35,21 @@ body {
35
35
  }
36
36
  }
37
37
 
38
+ /*
39
+ * Canonical "busy/streaming" text-shimmer sweep. Components own the gradient
40
+ * treatment and state gating; they share this keyframe and
41
+ * --sigvelo-motion-duration-shimmer. Shadow-isolated bundles keep a local copy
42
+ * (keyframes do not cross shadow roots), the same as sigvelo-icon-spin.
43
+ */
44
+ @keyframes sigvelo-text-shimmer {
45
+ from {
46
+ background-position: 100% 0;
47
+ }
48
+ to {
49
+ background-position: -100% 0;
50
+ }
51
+ }
52
+
38
53
  @media (prefers-reduced-motion: reduce) {
39
54
  .sigvelo-icon--spinner {
40
55
  animation: none;
@@ -85,7 +85,7 @@
85
85
  :host .takeover,
86
86
  :host .owner {
87
87
  background: var(--browser-control-accent);
88
- border: 1px solid var(--browser-control-accent-text);
88
+ border: var(--sigvelo-border-style) var(--sigvelo-border-width) var(--browser-control-accent-text);
89
89
  box-shadow: 0 2px 10px var(--browser-control-shadow);
90
90
  color: var(--browser-control-accent-text);
91
91
  }
@@ -120,7 +120,8 @@
120
120
  :host .banner {
121
121
  align-items: center;
122
122
  background: var(--browser-control-warning);
123
- border: 1px solid var(--browser-control-warning-text);
123
+ border: var(--sigvelo-border-style) var(--sigvelo-border-width)
124
+ var(--browser-control-warning-text);
124
125
  border-radius: 14px;
125
126
  box-shadow: 0 4px 18px var(--browser-control-shadow);
126
127
  color: var(--browser-control-warning-text);
@@ -147,7 +148,7 @@
147
148
 
148
149
  :host .banner .done,
149
150
  :host .banner .cannot {
150
- border: 1px solid currentcolor;
151
+ border: var(--sigvelo-border-style) var(--sigvelo-border-width) currentcolor;
151
152
  color: inherit;
152
153
  flex-shrink: 0;
153
154
  }
@@ -41,7 +41,7 @@
41
41
  .browser-live-view__badge-dot {
42
42
  inline-size: var(--sigvelo-spacing-1-5);
43
43
  block-size: var(--sigvelo-spacing-1-5);
44
- border-radius: 50%;
44
+ border-radius: var(--sigvelo-radius-circle);
45
45
  background-color: currentColor;
46
46
  animation: browser-live-view-pulse 1.4s ease-in-out infinite;
47
47
  }
@@ -39,7 +39,7 @@
39
39
  inset: 0;
40
40
  display: grid;
41
41
  place-content: center;
42
- padding: 1rem;
42
+ padding: var(--sigvelo-spacing-4);
43
43
  color: var(--sigvelo-color-text-muted);
44
44
  font-size: var(--sigvelo-text-compact);
45
45
  text-align: center;
@@ -49,7 +49,7 @@
49
49
  display: flex;
50
50
  align-items: center;
51
51
  gap: var(--sigvelo-spacing-2-5);
52
- padding-block: 0.5rem;
52
+ padding-block: var(--sigvelo-spacing-2);
53
53
  padding-inline: var(--sigvelo-spacing-3);
54
54
  border-block-start: var(--sigvelo-border-style) var(--sigvelo-border-width)
55
55
  var(--sigvelo-color-neutral-border-subtle);
@@ -184,6 +184,6 @@
184
184
 
185
185
  @media (forced-colors: active) {
186
186
  .browser-replay {
187
- border: 1px solid CanvasText;
187
+ border: var(--sigvelo-border-style) var(--sigvelo-border-width) CanvasText;
188
188
  }
189
189
  }
@@ -52,7 +52,7 @@
52
52
  inline-size: 1.125rem;
53
53
  block-size: 1.125rem;
54
54
  place-items: center;
55
- border-radius: 50%;
55
+ border-radius: var(--sigvelo-radius-circle);
56
56
  background: var(--sigvelo-color-primary-bg-subtle);
57
57
  color: var(--sigvelo-color-primary-text);
58
58
  font-size: var(--sigvelo-text-3xs);
@@ -185,7 +185,7 @@
185
185
 
186
186
  @media (forced-colors: active) {
187
187
  .button {
188
- border: 1px solid ButtonText;
188
+ border: var(--sigvelo-border-style) var(--sigvelo-border-width) ButtonText;
189
189
  }
190
190
 
191
191
  .button--ghost,
@@ -167,7 +167,7 @@
167
167
  @media (forced-colors: active) {
168
168
  .chain-of-thought__step-indicator,
169
169
  .chain-of-thought__search-result {
170
- border: 1px solid CanvasText;
170
+ border: var(--sigvelo-border-style) var(--sigvelo-border-width) CanvasText;
171
171
  }
172
172
 
173
173
  .chain-of-thought__header:focus-visible,
@@ -9,7 +9,7 @@
9
9
  min-inline-size: 17.5rem;
10
10
  display: grid;
11
11
  place-items: center;
12
- padding: clamp(1.25rem, 5vw, 3rem);
12
+ padding: clamp(var(--sigvelo-spacing-5), 5vw, var(--sigvelo-spacing-12));
13
13
  background-color: var(--sigvelo-color-canvas);
14
14
  background-image:
15
15
  linear-gradient(
@@ -56,7 +56,7 @@
56
56
  z-index: 1;
57
57
  isolation: isolate;
58
58
  display: grid;
59
- gap: 1.25rem;
59
+ gap: var(--sigvelo-spacing-5);
60
60
  justify-items: center;
61
61
  text-align: center;
62
62
  }
@@ -1,7 +1,7 @@
1
1
  .checkbox-group {
2
2
  display: flex;
3
3
  flex-direction: column;
4
- gap: 0.5rem;
4
+ gap: var(--sigvelo-spacing-2);
5
5
  }
6
6
 
7
7
  .checkbox-group[data-layout="grid"] {
@@ -13,8 +13,8 @@
13
13
  .code-block__header {
14
14
  display: flex;
15
15
  align-items: center;
16
- gap: 0.5rem;
17
- padding-block: 0.5rem;
16
+ gap: var(--sigvelo-spacing-2);
17
+ padding-block: var(--sigvelo-spacing-2);
18
18
  padding-inline: var(--sigvelo-spacing-3);
19
19
  background-color: transparent;
20
20
  }
@@ -22,7 +22,7 @@
22
22
  .code-block__title {
23
23
  display: inline-flex;
24
24
  align-items: center;
25
- gap: 0.5rem;
25
+ gap: var(--sigvelo-spacing-2);
26
26
  font-size: var(--sigvelo-text-xs);
27
27
  font-weight: var(--sigvelo-font-weight-semibold);
28
28
  color: var(--sigvelo-color-text);
@@ -37,7 +37,7 @@
37
37
  .code-block__actions {
38
38
  display: inline-flex;
39
39
  align-items: center;
40
- gap: 0.25rem;
40
+ gap: var(--sigvelo-spacing-1);
41
41
  margin-inline-start: auto;
42
42
  flex-shrink: 0;
43
43
  }
@@ -111,6 +111,6 @@
111
111
 
112
112
  @media (forced-colors: active) {
113
113
  .code-block {
114
- border: 1px solid CanvasText;
114
+ border: var(--sigvelo-border-style) var(--sigvelo-border-width) CanvasText;
115
115
  }
116
116
  }
@@ -167,7 +167,7 @@
167
167
  @media (forced-colors: active) {
168
168
  .commit,
169
169
  .commit__file {
170
- border: 1px solid CanvasText;
170
+ border: var(--sigvelo-border-style) var(--sigvelo-border-width) CanvasText;
171
171
  }
172
172
 
173
173
  .commit__header:focus-visible {
@@ -20,7 +20,7 @@
20
20
  .environment-variables__toggle {
21
21
  display: inline-flex;
22
22
  align-items: center;
23
- gap: 0.5rem;
23
+ gap: var(--sigvelo-spacing-2);
24
24
  cursor: pointer;
25
25
  font-size: var(--sigvelo-text-xs);
26
26
  color: var(--sigvelo-color-text-muted);
@@ -57,7 +57,7 @@
57
57
  display: flex;
58
58
  align-items: center;
59
59
  gap: var(--sigvelo-spacing-2-5);
60
- padding-block: 0.5rem;
60
+ padding-block: var(--sigvelo-spacing-2);
61
61
  padding-inline: 0.875rem;
62
62
  border-block-end: var(--sigvelo-border-style) var(--sigvelo-border-width)
63
63
  var(--sigvelo-color-neutral-border-subtle);
@@ -80,7 +80,7 @@
80
80
  flex: 1;
81
81
  min-width: 0;
82
82
  padding-block: 0.3125rem;
83
- padding-inline: 0.5rem;
83
+ padding-inline: var(--sigvelo-spacing-2);
84
84
  font-family: var(--sigvelo-font-mono);
85
85
  font-size: var(--sigvelo-text-xs);
86
86
  color: var(--sigvelo-color-text-muted);
@@ -101,6 +101,6 @@
101
101
  @media (forced-colors: active) {
102
102
  .environment-variables,
103
103
  .environment-variables__row {
104
- border: 1px solid CanvasText;
104
+ border: var(--sigvelo-border-style) var(--sigvelo-border-width) CanvasText;
105
105
  }
106
106
  }
@@ -15,7 +15,7 @@
15
15
  }
16
16
 
17
17
  .fieldset__legend {
18
- padding: 0 0.5rem;
18
+ padding: 0 var(--sigvelo-spacing-2);
19
19
  margin: 0 -0.5rem;
20
20
  font-family: inherit;
21
21
  font-size: var(--sigvelo-text-compact);
@@ -154,7 +154,7 @@
154
154
 
155
155
  @media (forced-colors: active) {
156
156
  .file-tree {
157
- border: 1px solid CanvasText;
157
+ border: var(--sigvelo-border-style) var(--sigvelo-border-width) CanvasText;
158
158
  }
159
159
 
160
160
  .file-tree__node:focus-visible,
@@ -24,7 +24,7 @@
24
24
 
25
25
  .github-motion-mark::before {
26
26
  inset: -0.22em;
27
- border: 1px solid currentColor;
27
+ border: var(--sigvelo-border-style) var(--sigvelo-border-width) currentColor;
28
28
  border-radius: 999px;
29
29
  opacity: 0.24;
30
30
  transform-origin: 50% 50%;
@@ -1,7 +1,7 @@
1
1
  .label {
2
2
  display: flex;
3
3
  align-items: center;
4
- gap: 0.5rem;
4
+ gap: var(--sigvelo-spacing-2);
5
5
  font-family: inherit;
6
6
  font-size: var(--sigvelo-text-sm);
7
7
  font-weight: var(--sigvelo-font-weight-semibold);
@@ -196,7 +196,7 @@
196
196
 
197
197
  @media (forced-colors: active) {
198
198
  .mcp-server-picker__avatar-fallback {
199
- border: 1px solid ButtonText;
199
+ border: var(--sigvelo-border-style) var(--sigvelo-border-width) ButtonText;
200
200
  }
201
201
 
202
202
  .mcp-server-picker__row-shell:has(.mcp-server-picker__row[data-highlighted]) {
@@ -49,7 +49,7 @@
49
49
  inline-size: var(--sigvelo-spacing-2);
50
50
  block-size: var(--sigvelo-spacing-2);
51
51
  background-color: currentColor;
52
- border-radius: 50%;
52
+ border-radius: var(--sigvelo-radius-circle);
53
53
  }
54
54
 
55
55
  .menu__checkbox-indicator::before {