@mcp-b/react-components 0.51.2 → 0.52.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 (127) hide show
  1. package/dist/{CodeBlock-g8sADidM.js → CodeBlock-Bl-q7wMc.js} +1 -0
  2. package/dist/{CodeBlock--r6GS8YV.d.ts → CodeBlock-DJ99TQWy.d.ts} +1 -1
  3. package/dist/EmployeeChrome-C8eTGJWn.d.ts +231 -0
  4. package/dist/{IconButton-ByiyjkYE.d.ts → IconButton-CAlFVb2L.d.ts} +3 -0
  5. package/dist/{ManagerOffice-D-7SOJ4x.js → ManagerOffice-CMJ7laGe.js} +14 -9
  6. package/dist/McpPluginCatalog-DNeHDrts.d.ts +94 -0
  7. package/dist/{Message-DyaTBiV7.d.ts → Message-COsMPZSC.d.ts} +2 -2
  8. package/dist/{ResponsiveSidebarShell-CAmmtQTR.d.ts → ResponsiveSidebarShell-BUBQa_IV.d.ts} +3 -1
  9. package/dist/{SetupChecklist-Btmy3-_C.js → SetupChecklist-BiWQkKEq.js} +5 -4
  10. package/dist/{ThinkThreadPicker-yetGX_s5.d.ts → ThinkThreadPicker-DX0lL-P7.d.ts} +3 -0
  11. package/dist/{Workspace-HzGrWDX3.d.ts → Workspace-mzMZSdts.d.ts} +1 -1
  12. package/dist/WorkspaceConceptPanel-97ZyVpZI.js +20 -0
  13. package/dist/{WorkspaceFile-Bouauobc.d.ts → WorkspaceFile-19WP0EU1.d.ts} +1 -1
  14. package/dist/{WorkspaceFileView-DYPtRVpM.js → WorkspaceFileView-DXgTljKV.js} +2 -1
  15. package/dist/{WorkspaceMessageResponse-8lOSAbw_.d.ts → WorkspaceMessageResponse-BApg8KZv.d.ts} +1 -1
  16. package/dist/WorkspaceMountManager-CkLI1B-G.d.ts +33 -0
  17. package/dist/assets/sigvelo-logo.svg +54 -0
  18. package/dist/components/agents-sdk/AgentChat.d.ts +6 -2
  19. package/dist/components/agents-sdk/AgentChat.js +4 -8
  20. package/dist/components/agents-sdk/EmployeeApp.d.ts +43 -30
  21. package/dist/components/agents-sdk/EmployeeApp.js +47 -34
  22. package/dist/components/agents-sdk/EmployeeChat.d.ts +28 -8
  23. package/dist/components/agents-sdk/EmployeeChat.js +32 -4
  24. package/dist/components/agents-sdk/EmployeeChrome.d.ts +1 -219
  25. package/dist/components/agents-sdk/EmployeeChrome.js +101 -102
  26. package/dist/components/agents-sdk/EmployeeSchedules.d.ts +1 -1
  27. package/dist/components/agents-sdk/EmployeeSchedules.js +1 -2
  28. package/dist/components/agents-sdk/EmployeeStartScreen.d.ts +12 -11
  29. package/dist/components/agents-sdk/EmployeeStartScreen.js +21 -14
  30. package/dist/components/agents-sdk/ManagerAccountActions.js +0 -1
  31. package/dist/components/agents-sdk/ManagerOffice.js +1 -2
  32. package/dist/components/agents-sdk/ManagerOfficeScreens.d.ts +2 -2
  33. package/dist/components/agents-sdk/ManagerOfficeScreens.js +30 -13
  34. package/dist/components/agents-sdk/McpPluginCatalog.d.ts +1 -93
  35. package/dist/components/agents-sdk/McpPluginCatalog.js +3 -3
  36. package/dist/components/agents-sdk/McpServerPicker.js +3 -3
  37. package/dist/components/agents-sdk/SubagentRunPanel.d.ts +3 -0
  38. package/dist/components/agents-sdk/SubagentRunPanel.js +66 -46
  39. package/dist/components/agents-sdk/ThinkChat.d.ts +1 -1
  40. package/dist/components/agents-sdk/ThinkChatToolPanels.js +1 -1
  41. package/dist/components/agents-sdk/ThinkExecutionWorkbench.js +4 -11
  42. package/dist/components/agents-sdk/ThinkFullApp.d.ts +2 -0
  43. package/dist/components/agents-sdk/ThinkFullApp.js +2 -0
  44. package/dist/components/agents-sdk/ThinkRoutineForm.js +1 -1
  45. package/dist/components/agents-sdk/ThinkThreadPicker.d.ts +1 -1
  46. package/dist/components/agents-sdk/ThinkThreadPicker.js +32 -19
  47. package/dist/components/agents-sdk/WorkbenchBack.d.ts +18 -0
  48. package/dist/components/agents-sdk/WorkbenchBack.js +27 -0
  49. package/dist/components/agents-sdk/Workspace.d.ts +1 -1
  50. package/dist/components/agents-sdk/WorkspaceBrowser.d.ts +1 -1
  51. package/dist/components/agents-sdk/WorkspaceBrowser.js +2 -0
  52. package/dist/components/agents-sdk/WorkspaceConcept.d.ts +1 -1
  53. package/dist/components/agents-sdk/WorkspaceExecution.js +7 -4
  54. package/dist/components/agents-sdk/WorkspaceExplorer.d.ts +4 -1
  55. package/dist/components/agents-sdk/WorkspaceExplorer.js +13 -4
  56. package/dist/components/agents-sdk/WorkspaceFile.d.ts +1 -1
  57. package/dist/components/agents-sdk/WorkspaceFileView.d.ts +1 -1
  58. package/dist/components/agents-sdk/WorkspaceFileView.js +1 -1
  59. package/dist/components/agents-sdk/WorkspaceLive.d.ts +2 -2
  60. package/dist/components/agents-sdk/WorkspaceMessageResponse.d.ts +1 -1
  61. package/dist/components/agents-sdk/WorkspaceMountManager.d.ts +1 -32
  62. package/dist/components/agents-sdk/WorkspaceMountManager.js +1 -1
  63. package/dist/components/agents-sdk/WorkspaceProject.js +3 -1
  64. package/dist/components/agents-sdk/WorkspaceUserScript.js +3 -1
  65. package/dist/components/ai-sdk/Artifact.d.ts +1 -1
  66. package/dist/components/ai-sdk/CodeBlock.d.ts +1 -1
  67. package/dist/components/ai-sdk/CodeBlock.js +1 -1
  68. package/dist/components/ai-sdk/Conversation.d.ts +1 -1
  69. package/dist/components/ai-sdk/Message.d.ts +1 -1
  70. package/dist/components/ai-sdk/PromptInput.js +1 -1
  71. package/dist/components/extension/ChatGptSignInScreen.d.ts +1 -1
  72. package/dist/components/extension/ChatGptSignInScreen.js +60 -185
  73. package/dist/components/extension/CodexModelSelector.js +2 -6
  74. package/dist/components/foundations/IconButton.d.ts +1 -1
  75. package/dist/components/foundations/IconButton.js +7 -4
  76. package/dist/components/general-purpose/AccountSignInDialog.d.ts +5 -9
  77. package/dist/components/general-purpose/AccountSignInDialog.js +12 -4
  78. package/dist/components/general-purpose/BrandLoading.d.ts +14 -0
  79. package/dist/components/general-purpose/BrandLoading.js +25 -0
  80. package/dist/components/general-purpose/Commit.d.ts +1 -1
  81. package/dist/components/general-purpose/EnvironmentVariables.d.ts +1 -1
  82. package/dist/components/general-purpose/ResponsiveSidebarShell.d.ts +1 -1
  83. package/dist/components/general-purpose/ResponsiveSidebarShell.js +58 -26
  84. package/dist/components/general-purpose/SetupChecklist.js +1 -1
  85. package/dist/components/general-purpose/StatusScreen.d.ts +13 -2
  86. package/dist/components/general-purpose/StatusScreen.js +27 -3
  87. package/dist/components/general-purpose/Terminal.d.ts +2 -2
  88. package/dist/components/general-purpose/WebPreview.d.ts +1 -1
  89. package/dist/components/nanites/AgentConnection.js +1 -1
  90. package/dist/{copy-button-OUwOdgEm.d.ts → copy-button-CJYYgCIU.d.ts} +1 -1
  91. package/dist/styles/activity.css +2 -2
  92. package/dist/styles/agent-chat.css +6 -105
  93. package/dist/styles/app-root.css +9 -0
  94. package/dist/styles/app-top-bar.css +10 -4
  95. package/dist/styles/avatar.css +2 -2
  96. package/dist/styles/base.css +6 -2
  97. package/dist/styles/brand-loading.css +58 -0
  98. package/dist/styles/brand.test.ts +158 -0
  99. package/dist/styles/browser-control-overlay.css +22 -0
  100. package/dist/styles/button.css +22 -1
  101. package/dist/styles/chatgpt-sign-in-screen.css +111 -225
  102. package/dist/styles/code-block.css +5 -0
  103. package/dist/styles/codex-model-selector.css +2 -12
  104. package/dist/styles/description-list.css +9 -2
  105. package/dist/styles/employee-app.css +19 -1
  106. package/dist/styles/employee-chrome.css +35 -5
  107. package/dist/styles/file-tree.css +15 -2
  108. package/dist/styles/index.css +1 -0
  109. package/dist/styles/manager-office.css +80 -55
  110. package/dist/styles/manager-work.css +5 -11
  111. package/dist/styles/mcp-plugin-catalog.css +29 -34
  112. package/dist/styles/mcp-server-picker.css +13 -5
  113. package/dist/styles/prompt-input.css +3 -13
  114. package/dist/styles/queue.css +1 -1
  115. package/dist/styles/recipes.css +9 -2
  116. package/dist/styles/responsive-sidebar-shell-motion.test.ts +67 -0
  117. package/dist/styles/responsive-sidebar-shell.css +70 -25
  118. package/dist/styles/search-field.css +8 -6
  119. package/dist/styles/subagent-run.css +81 -0
  120. package/dist/styles/think-execution-workbench.css +0 -17
  121. package/dist/styles/think-full-app.css +11 -4
  122. package/dist/styles/think-thread-picker.css +16 -38
  123. package/dist/styles/workspace-concepts.css +29 -2
  124. package/dist/styles/workspace-explorer.css +6 -48
  125. package/dist/utils/structured-code.d.ts +1 -1
  126. package/package.json +2 -2
  127. package/dist/styles/extension-status.css +0 -46
@@ -0,0 +1,158 @@
1
+ import { afterEach, expect, test } from "vite-plus/test";
2
+ import "./index.css";
3
+
4
+ const root = document.documentElement;
5
+ const initialTheme = root.getAttribute("data-theme");
6
+ const initialPreset = root.getAttribute("data-preset");
7
+ const initialStyle = root.getAttribute("data-style");
8
+
9
+ afterEach(() => {
10
+ document.body.replaceChildren();
11
+ for (const [name, value] of [
12
+ ["data-theme", initialTheme],
13
+ ["data-preset", initialPreset],
14
+ ["data-style", initialStyle],
15
+ ] as const) {
16
+ if (value === null) root.removeAttribute(name);
17
+ else root.setAttribute(name, value);
18
+ }
19
+ });
20
+
21
+ function color(token: string) {
22
+ const probe = document.createElement("span");
23
+ probe.style.color = `var(${token})`;
24
+ document.body.append(probe);
25
+ const value = getComputedStyle(probe).color;
26
+ probe.remove();
27
+ return value;
28
+ }
29
+
30
+ function luminance(value: string) {
31
+ const channels = value
32
+ .match(/[\d.]+/g)!
33
+ .slice(0, 3)
34
+ .map(Number)
35
+ .map((channel) => {
36
+ const normalized = channel / 255;
37
+ return normalized <= 0.04045 ? normalized / 12.92 : ((normalized + 0.055) / 1.055) ** 2.4;
38
+ });
39
+ return channels[0]! * 0.2126 + channels[1]! * 0.7152 + channels[2]! * 0.0722;
40
+ }
41
+
42
+ function contrast(foreground: string, background: string) {
43
+ const a = luminance(color(foreground));
44
+ const b = luminance(color(background));
45
+ return (Math.max(a, b) + 0.05) / (Math.min(a, b) + 0.05);
46
+ }
47
+
48
+ for (const theme of ["light", "dark"] as const) {
49
+ test(`Sigvelo ${theme} defaults keep readable content and branded actions`, () => {
50
+ root.dataset.theme = theme;
51
+ root.removeAttribute("data-preset");
52
+ root.removeAttribute("data-style");
53
+ expect(color("--sigvelo-color-surface")).toBe(
54
+ theme === "light" ? "rgb(247, 247, 244)" : "rgb(23, 23, 22)",
55
+ );
56
+ expect(color("--sigvelo-color-primary-bg")).toBe(
57
+ theme === "light" ? "rgb(0, 109, 159)" : "rgb(139, 217, 240)",
58
+ );
59
+ for (const surface of ["surface", "surface-under", "surface-raised"]) {
60
+ for (const foreground of [
61
+ "text",
62
+ "text-muted",
63
+ "text-subtle",
64
+ "primary-text",
65
+ "warning-text",
66
+ ]) {
67
+ expect(
68
+ contrast(`--sigvelo-color-${foreground}`, `--sigvelo-color-${surface}`),
69
+ ).toBeGreaterThanOrEqual(4.5);
70
+ }
71
+ }
72
+ expect(
73
+ contrast("--sigvelo-color-primary-text-on-bg", "--sigvelo-color-primary-bg"),
74
+ ).toBeGreaterThanOrEqual(4.5);
75
+ expect(
76
+ contrast("--sigvelo-color-primary-text-on-subtle", "--sigvelo-color-primary-bg-subtle"),
77
+ ).toBeGreaterThanOrEqual(4.5);
78
+ for (const width of [320, 834, 1280]) {
79
+ const app = document.createElement("div");
80
+ app.className = "think-full-app";
81
+ app.style.width = `${width}px`;
82
+ const panel = document.createElement("aside");
83
+ panel.className = "think-full-app__aside";
84
+ app.append(panel);
85
+ document.body.append(app);
86
+ expect(getComputedStyle(panel).backgroundColor).toBe(color("--sigvelo-color-canvas"));
87
+ app.remove();
88
+ }
89
+ expect(color("--sigvelo-color-surface-raised")).toBe(
90
+ theme === "light" ? "rgb(243, 246, 246)" : "rgb(18, 35, 45)",
91
+ );
92
+ const avatar = document.createElement("span");
93
+ avatar.className = "avatar";
94
+ const initials = document.createElement("span");
95
+ initials.className = "avatar__fallback";
96
+ initials.textContent = "VI";
97
+ avatar.append(initials);
98
+ document.body.append(avatar);
99
+ const paint = document.createElement("canvas").getContext("2d")!;
100
+ // Avatar and fallback both have translucent fills; measure their actual
101
+ // composite over a raised card instead of checking isolated token pairs.
102
+ for (const background of [
103
+ color("--sigvelo-color-surface-raised"),
104
+ getComputedStyle(avatar).backgroundColor,
105
+ getComputedStyle(initials).backgroundColor,
106
+ ]) {
107
+ paint.fillStyle = background;
108
+ paint.fillRect(0, 0, 1, 1);
109
+ }
110
+ const pixel = paint.getImageData(0, 0, 1, 1).data;
111
+ const backgroundLuminance = luminance(`rgb(${pixel[0]}, ${pixel[1]}, ${pixel[2]})`);
112
+ const textLuminance = luminance(getComputedStyle(initials).color);
113
+ expect(
114
+ (Math.max(backgroundLuminance, textLuminance) + 0.05) /
115
+ (Math.min(backgroundLuminance, textLuminance) + 0.05),
116
+ ).toBeGreaterThanOrEqual(4.5);
117
+ const searchHeader = document.createElement("header");
118
+ searchHeader.className = "mcp-plugin-catalog__header";
119
+ document.body.append(searchHeader);
120
+ expect(getComputedStyle(searchHeader).backgroundColor).toBe(color("--sigvelo-color-canvas"));
121
+ const composer = document.createElement("form");
122
+ composer.className = "prompt-input";
123
+ document.body.append(composer);
124
+ expect(getComputedStyle(composer).borderTopLeftRadius).toBe(
125
+ CSS.supports("corner-shape", "superellipse(1.5)") ? "28px" : "24px",
126
+ );
127
+ expect(getComputedStyle(composer).borderTopWidth).toBe("0px");
128
+ expect(getComputedStyle(composer).boxShadow).not.toBe("none");
129
+ expect(getComputedStyle(composer).backgroundColor).toBe(
130
+ color("--sigvelo-color-surface-raised"),
131
+ );
132
+ expect(getComputedStyle(composer, "::after").content).toBe("none");
133
+ const submit = document.createElement("button");
134
+ submit.className = "button button--xs prompt-input__submit";
135
+ submit.dataset.iconOnly = "";
136
+ composer.append(submit);
137
+ expect(getComputedStyle(submit).borderTopLeftRadius).toBe("9999px");
138
+ if (CSS.supports("corner-shape", "superellipse(1.5)")) {
139
+ expect(getComputedStyle(submit).getPropertyValue("corner-shape")).toBe("round");
140
+ }
141
+ const transcript = document.createElement("div");
142
+ transcript.className = "message-scroller__viewport";
143
+ document.body.append(transcript);
144
+ expect(getComputedStyle(transcript).borderTopLeftRadius).toBe("0px");
145
+ if (CSS.supports("corner-shape", "superellipse(1.5)")) {
146
+ expect(getComputedStyle(composer).getPropertyValue("corner-shape")).toBe("superellipse(1.5)");
147
+ }
148
+ });
149
+ }
150
+
151
+ test("OS-following mode uses the same Sigvelo palette", () => {
152
+ root.removeAttribute("data-theme");
153
+ root.removeAttribute("data-preset");
154
+ root.removeAttribute("data-style");
155
+ expect(color("--sigvelo-color-surface")).toBe(
156
+ matchMedia("(prefers-color-scheme: dark)").matches ? "rgb(23, 23, 22)" : "rgb(247, 247, 244)",
157
+ );
158
+ });
@@ -145,6 +145,28 @@
145
145
  box-shadow: none;
146
146
  }
147
147
 
148
+ @media (width <= 576px) {
149
+ :host .banner {
150
+ box-sizing: border-box;
151
+ flex-wrap: wrap;
152
+ width: calc(100vw - 32px);
153
+ }
154
+
155
+ :host .banner .text {
156
+ display: block;
157
+ flex-basis: 100%;
158
+ overflow: visible;
159
+ overflow-wrap: anywhere;
160
+ }
161
+ }
162
+
163
+ @media (pointer: coarse) {
164
+ :host button {
165
+ min-width: 44px;
166
+ min-height: 44px;
167
+ }
168
+ }
169
+
148
170
  @media print {
149
171
  :host {
150
172
  display: none !important;
@@ -33,7 +33,8 @@
33
33
  translate var(--sigvelo-motion-duration-presence) var(--sigvelo-ease-press);
34
34
  }
35
35
 
36
- .button svg {
36
+ /* Icon defaults reach plain wrappers; compound artwork keeps its own sizing. */
37
+ :where(.button) svg {
37
38
  inline-size: var(--sigvelo-recipe-button-icon-size);
38
39
  block-size: var(--sigvelo-recipe-button-icon-size);
39
40
  flex: none;
@@ -220,7 +221,27 @@
220
221
  flex: none;
221
222
  }
222
223
 
224
+ /* Action labels follow the available surface, including an embedded side panel. */
225
+ @media (width <= 36rem) {
226
+ .button__responsive-label {
227
+ display: none;
228
+ }
229
+ }
230
+
231
+ /* Local wrap, shared with composer controls. Not a shell navigation breakpoint. */
232
+ @container (inline-size <= 36rem) {
233
+ .button__responsive-label {
234
+ display: none;
235
+ }
236
+ }
237
+
223
238
  @media (forced-colors: active) {
239
+ .button:focus-visible {
240
+ outline: var(--sigvelo-focus-ring-forced);
241
+ outline-offset: var(--sigvelo-focus-offset);
242
+ box-shadow: none;
243
+ }
244
+
224
245
  .button {
225
246
  border: var(--sigvelo-border-style) var(--sigvelo-border-width) ButtonText;
226
247
  }
@@ -1,287 +1,173 @@
1
1
  .chatgpt-sign-in {
2
- --chatgpt-sign-in-brand-bg: light-dark(#006d9f, #63c7e8);
3
- --chatgpt-sign-in-brand-text: light-dark(#fff, #061118);
4
- --chatgpt-sign-in-brand-text-muted: light-dark(#e5f6fc, #163440);
5
- --sigvelo-color-text: var(--chatgpt-sign-in-brand-text);
6
- --sigvelo-color-text-muted: var(--chatgpt-sign-in-brand-text-muted);
7
- --sigvelo-color-neutral-text-on-subtle: var(--chatgpt-sign-in-brand-text-muted);
8
- --sigvelo-color-primary-bg: var(--chatgpt-sign-in-brand-text);
9
- --sigvelo-color-primary-bg-muted: var(--chatgpt-sign-in-brand-text-muted);
10
- --sigvelo-color-primary-text-on-bg: var(--chatgpt-sign-in-brand-bg);
11
-
12
2
  position: relative;
13
3
  isolation: isolate;
14
- overflow-x: hidden;
15
- overflow-y: auto;
4
+ box-sizing: border-box;
5
+ overflow: auto;
16
6
  block-size: 100%;
17
- min-inline-size: 17.5rem;
18
- display: grid;
19
- grid-template-rows: none;
20
- grid-auto-rows: auto;
21
- place-items: center;
22
- align-content: center;
23
- row-gap: var(--sigvelo-spacing-2);
24
- padding: clamp(var(--sigvelo-spacing-5), 5vw, var(--sigvelo-spacing-12));
25
- background: var(--chatgpt-sign-in-brand-bg);
26
- color: var(--chatgpt-sign-in-brand-text);
7
+ min-inline-size: 0;
8
+ display: flex;
9
+ flex-direction: column;
10
+ align-items: center;
11
+ gap: var(--sigvelo-spacing-4);
12
+ padding: var(--sigvelo-spacing-6);
13
+ background: var(--sigvelo-color-canvas);
14
+ color: var(--sigvelo-color-text);
27
15
  font-family: inherit;
28
16
  }
29
17
 
30
18
  .chatgpt-sign-in::before {
31
19
  content: "";
32
- display: block;
33
20
  position: absolute;
34
- z-index: 0;
35
21
  inset: 0;
22
+ z-index: -1;
23
+ pointer-events: none;
36
24
  background:
37
- linear-gradient(
38
- 90deg,
39
- rgb(23 38 184 / 0.2),
40
- color-mix(in srgb, var(--chatgpt-sign-in-brand-bg) 42%, white 58%) 48%,
41
- rgb(255 255 255 / 0.2)
25
+ radial-gradient(
26
+ ellipse at 50% 25%,
27
+ light-dark(
28
+ color-mix(in oklab, var(--sigvelo-color-primary-text) 28%, transparent),
29
+ color-mix(in oklab, var(--sigvelo-color-primary-text) 20%, transparent)
30
+ ),
31
+ transparent 65%
42
32
  ),
43
33
  radial-gradient(
44
- circle at 26% 76%,
45
- color-mix(in srgb, var(--chatgpt-sign-in-brand-bg) 76%, black 24%),
46
- transparent 48%
34
+ ellipse at 100% 100%,
35
+ light-dark(
36
+ color-mix(in oklab, var(--sigvelo-color-primary-bg-dark) 45%, transparent),
37
+ color-mix(in oklab, var(--sigvelo-color-primary-bg-dark) 22%, transparent)
38
+ ),
39
+ transparent 60%
47
40
  );
48
- mix-blend-mode: multiply;
49
- opacity: 1;
50
- pointer-events: none;
51
- transition: none;
52
- }
53
-
54
- .chatgpt-sign-in::after {
55
- content: "";
56
- position: absolute;
57
- z-index: 0;
58
- inset: 0;
59
- background: radial-gradient(circle, rgb(255 255 255 / 0.34) 0 1px, transparent 1.25px);
60
- background-size: 6px 6px;
61
- mask-image: radial-gradient(
62
- circle at center,
63
- transparent 0 8rem,
64
- rgb(0 0 0 / 0.42) 16rem,
65
- black 28rem
66
- );
67
- mix-blend-mode: screen;
68
- opacity: 0.82;
69
- pointer-events: none;
41
+ background-size:
42
+ 140% 140%,
43
+ 150% 150%;
44
+ background-position:
45
+ 0% 0%,
46
+ 100% 100%;
47
+ animation: sign-in-ambient-drift calc(var(--sigvelo-motion-duration-shimmer) * 6)
48
+ var(--sigvelo-ease-standard) infinite alternate;
49
+ }
50
+
51
+ /* Move only the decorative background, leaving the content and scroll bounds stable.
52
+ The shared reduced-motion layer disables this loop for OS and app preferences. */
53
+ @keyframes sign-in-ambient-drift {
54
+ to {
55
+ background-position:
56
+ 100% 65%,
57
+ 0% 25%;
58
+ }
70
59
  }
71
60
 
72
61
  .chatgpt-sign-in__panel {
73
- position: relative;
74
- z-index: 1;
75
- isolation: isolate;
62
+ inline-size: min(100%, 20rem);
76
63
  display: grid;
77
- gap: var(--sigvelo-spacing-5);
78
- justify-items: center;
64
+ gap: var(--sigvelo-spacing-6);
65
+ justify-items: stretch;
79
66
  text-align: center;
80
67
  }
81
68
 
82
- .chatgpt-sign-in__secondary-action {
83
- z-index: 1;
69
+ .chatgpt-sign-in__brand {
84
70
  display: grid;
85
- gap: var(--sigvelo-spacing-1);
86
71
  justify-items: center;
87
- margin-block-start: 0;
88
- }
89
-
90
- .chatgpt-sign-in__secondary-action::before {
91
- content: "or";
92
- color: var(--sigvelo-color-text-muted);
93
- font-size: var(--sigvelo-text-base);
94
- line-height: var(--sigvelo-leading-compact);
95
- }
96
-
97
- .chatgpt-sign-in__secondary-action :where(button) {
98
- min-block-size: 2.75rem;
99
- padding-inline: var(--sigvelo-spacing-3);
100
- border: 0;
101
- background: transparent;
102
- color: var(--sigvelo-color-text);
103
- font-size: var(--sigvelo-text-base);
104
- font-weight: var(--sigvelo-font-weight-semibold);
105
- line-height: var(--sigvelo-leading-compact);
106
- box-shadow: none;
107
- text-decoration: underline;
108
- text-decoration-thickness: var(--sigvelo-border-width);
109
- text-underline-offset: 0.25rem;
110
- }
111
-
112
- .chatgpt-sign-in__secondary-action :where(button):hover:not([data-disabled]) {
113
- background: color-mix(in srgb, var(--chatgpt-sign-in-brand-text) 10%, transparent);
72
+ gap: var(--sigvelo-spacing-2);
114
73
  }
115
74
 
116
- .chatgpt-sign-in__error {
117
- margin: 0;
118
- color: var(--sigvelo-color-text-muted);
119
- font-size: var(--sigvelo-text-sm);
75
+ .chatgpt-sign-in__brand-mark {
76
+ display: inline-flex;
77
+ margin-block-end: var(--sigvelo-spacing-4);
120
78
  }
121
79
 
122
- .chatgpt-sign-in__brand {
123
- display: grid;
124
- gap: var(--sigvelo-spacing-1-5);
125
- justify-items: center;
80
+ .chatgpt-sign-in__brand-mark :where(img, svg) {
81
+ inline-size: var(--sigvelo-spacing-16);
82
+ block-size: var(--sigvelo-spacing-16);
83
+ object-fit: contain;
126
84
  }
127
85
 
128
86
  .chatgpt-sign-in__brand h1 {
129
87
  margin: 0;
130
- color: var(--sigvelo-color-text);
131
- font-size: calc(var(--sigvelo-text-2xl) + 0.125rem);
132
- font-weight: var(--sigvelo-font-weight-bold);
133
- letter-spacing: 0;
88
+ color: var(--sigvelo-color-primary-text);
89
+ font-size: var(--sigvelo-text-2xl);
90
+ font-weight: var(--sigvelo-font-weight-semibold);
91
+ letter-spacing: var(--sigvelo-tracking-tight);
134
92
  line-height: var(--sigvelo-leading-tight);
135
93
  }
136
94
 
137
- .chatgpt-sign-in__brand p {
138
- display: inline-flex;
139
- align-items: center;
140
- gap: var(--sigvelo-spacing-1-5);
95
+ .chatgpt-sign-in__footer {
141
96
  margin: 0;
142
97
  color: var(--sigvelo-color-text-muted);
143
- font-size: var(--sigvelo-text-base);
144
- font-weight: var(--sigvelo-font-weight-semibold);
145
- line-height: var(--sigvelo-leading-compact);
146
- }
147
-
148
- .chatgpt-sign-in__brand-mark {
149
- display: inline-flex;
150
- }
151
-
152
- .chatgpt-sign-in__brand-mark :where(img, svg) {
153
- inline-size: var(--sigvelo-control-icon-size-xl);
154
- block-size: var(--sigvelo-control-icon-size-xl);
155
- filter: drop-shadow(
156
- 0 0.25rem 0.5rem color-mix(in oklab, var(--sigvelo-color-primary-bg), transparent 72%)
157
- );
98
+ font-size: var(--sigvelo-text-sm);
158
99
  }
159
100
 
160
101
  .chatgpt-sign-in__button {
161
- --chatgpt-sign-in-button-x: 50%;
162
- --chatgpt-sign-in-button-y: 50%;
163
-
164
- position: relative;
165
- isolation: isolate;
166
- overflow: hidden;
167
- min-inline-size: min(100%, 16.75rem);
168
- min-block-size: 3rem;
102
+ inline-size: 100%;
103
+ min-block-size: var(--sigvelo-spacing-12);
169
104
  padding-inline: var(--sigvelo-spacing-4);
170
- font-size: var(--sigvelo-text-base);
171
- box-shadow: inset 0 0 0 var(--sigvelo-border-width)
172
- color-mix(in srgb, var(--chatgpt-sign-in-brand-bg) 16%, transparent);
173
- translate: 0;
174
- scale: 1;
175
- transition:
176
- background-color var(--sigvelo-duration-fast) var(--sigvelo-ease-standard),
177
- box-shadow var(--sigvelo-duration-fast) var(--sigvelo-ease-standard),
178
- filter var(--sigvelo-duration-fast) var(--sigvelo-ease-standard),
179
- scale var(--sigvelo-duration-fast) var(--sigvelo-ease-standard),
180
- translate var(--sigvelo-duration-fast) var(--sigvelo-ease-standard);
181
- }
182
-
183
- .chatgpt-sign-in__button::before {
184
- content: "";
185
- position: absolute;
186
- z-index: 0;
187
- inset: 0;
188
- background: radial-gradient(
189
- circle at var(--chatgpt-sign-in-button-x) var(--chatgpt-sign-in-button-y),
190
- color-mix(in oklab, var(--sigvelo-color-primary-text-on-bg), transparent 70%),
191
- transparent 42%
192
- );
193
- opacity: 0;
194
- pointer-events: none;
195
- transition: opacity var(--sigvelo-duration-fast) var(--sigvelo-ease-standard);
196
- }
197
-
198
- .chatgpt-sign-in__button::after {
199
- content: "";
200
- position: absolute;
201
- z-index: 0;
202
- inset: 1px;
203
- border-radius: inherit;
204
- background: radial-gradient(
205
- circle at var(--chatgpt-sign-in-button-x) var(--chatgpt-sign-in-button-y),
206
- color-mix(in oklab, var(--sigvelo-color-primary-text-on-bg), transparent 88%),
207
- transparent 55%
208
- );
209
- opacity: 0.45;
210
- pointer-events: none;
211
- }
212
-
213
- .chatgpt-sign-in__button:hover:not([data-disabled]) {
214
- box-shadow:
215
- inset 0 0 0 var(--sigvelo-border-width)
216
- color-mix(in srgb, var(--chatgpt-sign-in-brand-bg) 24%, transparent),
217
- 0 0 1rem rgb(255 255 255 / 0.34);
218
- translate: 0 -0.0625rem;
219
- }
220
-
221
- .chatgpt-sign-in__button:hover:not([data-disabled])::before {
222
- opacity: 1;
223
- }
224
-
225
- .chatgpt-sign-in__button:active:not([data-disabled]) {
226
- translate: 0 0.0625rem;
227
- scale: 0.99;
228
- }
229
-
230
- .chatgpt-sign-in__button-icon,
231
- .chatgpt-sign-in__button-label {
232
- position: relative;
233
- z-index: 1;
105
+ border-radius: var(--sigvelo-radius-xl);
106
+ font-size: var(--sigvelo-text-sm);
234
107
  }
235
108
 
236
109
  .chatgpt-sign-in__button-icon {
237
110
  display: inline-flex;
238
- rotate: 0deg;
239
- scale: 1;
240
- transition:
241
- rotate var(--sigvelo-duration-fast) var(--sigvelo-ease-standard),
242
- scale var(--sigvelo-duration-fast) var(--sigvelo-ease-standard);
243
- }
244
-
245
- .chatgpt-sign-in__button:hover:not([data-disabled]) .chatgpt-sign-in__button-icon {
246
- rotate: -4deg;
247
- scale: 1.06;
248
111
  }
249
112
 
250
113
  .chatgpt-sign-in__button svg,
251
- .chatgpt-sign-in__button .chatgpt-sign-in__logo {
252
- display: block;
114
+ .chatgpt-sign-in__logo {
253
115
  inline-size: var(--sigvelo-text-lg);
254
116
  block-size: var(--sigvelo-text-lg);
255
117
  color: inherit;
256
118
  }
257
119
 
258
- @media (prefers-reduced-motion: reduce) {
259
- .chatgpt-sign-in__button,
260
- .chatgpt-sign-in__button::before,
261
- .chatgpt-sign-in__button-icon {
262
- transition: none;
263
- }
120
+ .chatgpt-sign-in__secondary-action {
121
+ inline-size: min(100%, 20rem);
122
+ display: grid;
123
+ justify-items: stretch;
124
+ gap: var(--sigvelo-spacing-2);
125
+ text-align: center;
264
126
  }
265
127
 
266
- @media (hover: none), (pointer: coarse) {
267
- .chatgpt-sign-in__button::before,
268
- .chatgpt-sign-in__button::after {
269
- display: none;
270
- }
128
+ .chatgpt-sign-in__secondary-action::before {
129
+ content: "or";
130
+ color: var(--sigvelo-color-text);
131
+ font-size: var(--sigvelo-text-sm);
132
+ line-height: var(--sigvelo-text-sm-leading);
133
+ padding-block: var(--sigvelo-spacing-1);
134
+ }
135
+
136
+ .chatgpt-sign-in__secondary-action .button {
137
+ min-block-size: var(--sigvelo-spacing-11);
138
+ white-space: normal;
139
+ font-size: var(--sigvelo-text-compact);
140
+ color: var(--sigvelo-color-primary-text);
141
+ }
142
+
143
+ .chatgpt-sign-in__error {
144
+ margin: 0;
145
+ color: var(--sigvelo-color-danger-text);
146
+ font-size: var(--sigvelo-text-sm);
271
147
  }
272
148
 
273
149
  @media (forced-colors: active) {
274
- .chatgpt-sign-in::before,
275
- .chatgpt-sign-in::after,
276
- .chatgpt-sign-in__button::before,
277
- .chatgpt-sign-in__button::after {
150
+ .chatgpt-sign-in::before {
278
151
  display: none;
279
152
  }
153
+ }
280
154
 
281
- .chatgpt-sign-in__button {
282
- background-image: none;
283
- box-shadow: none;
284
- outline: 1px solid ButtonText;
285
- outline-offset: 2px;
286
- }
155
+ .chatgpt-sign-in__content {
156
+ flex: 1 0 auto;
157
+ inline-size: 100%;
158
+ display: grid;
159
+ align-content: center;
160
+ justify-items: center;
161
+ gap: var(--sigvelo-spacing-4);
162
+ padding-block: var(--sigvelo-spacing-6);
163
+ }
164
+
165
+ .chatgpt-sign-in__footer {
166
+ flex: none;
167
+ text-align: center;
168
+ }
169
+
170
+ .chatgpt-sign-in__footer a {
171
+ text-decoration: none;
172
+ border-radius: var(--sigvelo-radius-sm);
287
173
  }
@@ -53,6 +53,11 @@
53
53
  overflow-y: auto;
54
54
  }
55
55
 
56
+ .code-block__container:focus-visible {
57
+ outline: var(--sigvelo-focus-ring);
58
+ outline-offset: -2px;
59
+ }
60
+
56
61
  .code-block__content {
57
62
  margin: 0;
58
63
  padding-block: var(--sigvelo-layout-gutter);
@@ -191,6 +191,8 @@
191
191
  /* Local wrap. Not --sigvelo-layout-break-compact. */
192
192
  @container prompt-input (inline-size <= 36rem) {
193
193
  .codex-model-selector__trigger {
194
+ inline-size: var(--sigvelo-control-height-xs);
195
+ max-inline-size: var(--sigvelo-control-height-xs);
194
196
  justify-content: center;
195
197
  border-radius: var(--sigvelo-radius-full);
196
198
  }
@@ -205,18 +207,6 @@
205
207
  }
206
208
  }
207
209
 
208
- /* Local wrap. Not --sigvelo-layout-break-compact. */
209
- @container prompt-input (inline-size <= 22rem) {
210
- .codex-model-selector__trigger {
211
- inline-size: var(--sigvelo-control-height-xs);
212
- max-inline-size: var(--sigvelo-control-height-xs);
213
- }
214
-
215
- .codex-model-selector__compact-label {
216
- display: none;
217
- }
218
- }
219
-
220
210
  @media (any-pointer: coarse) {
221
211
  .codex-model-selector__trigger {
222
212
  min-inline-size: var(--sigvelo-control-height-xl);
@@ -22,8 +22,15 @@
22
22
  text-align: end;
23
23
  }
24
24
 
25
+ .description-list[data-align="start"] {
26
+ grid-template-columns: fit-content(40%) var(--sigvelo-layout-track-fill);
27
+ column-gap: var(--sigvelo-spacing-3);
28
+ }
29
+
25
30
  .description-list[data-align="start"] .description-list__item {
26
- justify-content: start;
31
+ display: grid;
32
+ grid-column: 1 / -1;
33
+ grid-template-columns: subgrid;
27
34
  align-items: first baseline;
28
35
  }
29
36
 
@@ -32,8 +39,8 @@
32
39
  }
33
40
 
34
41
  .description-list[data-align="start"] .description-list__term {
35
- flex: none;
36
42
  min-inline-size: 9ch;
43
+ overflow-wrap: anywhere;
37
44
  }
38
45
 
39
46
  .description-list[data-align="start"] .description-list__term :is(label, .field__label) {