@opengeni/react 0.45.0 → 0.48.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 (141) hide show
  1. package/README.md +68 -12
  2. package/dist/{chunk-U3CSCMWA.js → chunk-FK6VG4LL.js} +9 -13
  3. package/dist/chunk-FK6VG4LL.js.map +1 -0
  4. package/dist/{chunk-HFO4ERGQ.js → chunk-FWXGSNXT.js} +2 -2
  5. package/dist/{chunk-SRFUT2ZU.js → chunk-I4MPFDRP.js} +119 -63
  6. package/dist/chunk-I4MPFDRP.js.map +1 -0
  7. package/dist/{chunk-EB67J347.js → chunk-KZ73RL76.js} +111 -31
  8. package/dist/chunk-KZ73RL76.js.map +1 -0
  9. package/dist/{chunk-LWR4MXSS.js → chunk-LHLYWG5R.js} +10 -1
  10. package/dist/chunk-LHLYWG5R.js.map +1 -0
  11. package/dist/{chunk-L3EWO3UK.js → chunk-NJ7M2B6Z.js} +445 -84
  12. package/dist/chunk-NJ7M2B6Z.js.map +1 -0
  13. package/dist/{chunk-VCBFUSUZ.js → chunk-O4VXOBGF.js} +3 -3
  14. package/dist/{chunk-VCBFUSUZ.js.map → chunk-O4VXOBGF.js.map} +1 -1
  15. package/dist/{chunk-6EDV6YFE.js → chunk-OL6QVXGF.js} +121 -29
  16. package/dist/chunk-OL6QVXGF.js.map +1 -0
  17. package/dist/chunk-VZTQ73XT.js +86 -0
  18. package/dist/chunk-VZTQ73XT.js.map +1 -0
  19. package/dist/{chunk-EHSYZ4KP.js → chunk-WYA65Y3F.js} +16 -16
  20. package/dist/chunk-WYA65Y3F.js.map +1 -0
  21. package/dist/{chunk-FD72GJMK.js → chunk-XCNTXWBB.js} +274 -125
  22. package/dist/chunk-XCNTXWBB.js.map +1 -0
  23. package/dist/client.d.ts +1 -1
  24. package/dist/components/chat-composer.d.ts +7 -2
  25. package/dist/components/composer-transcription-control.d.ts +2 -0
  26. package/dist/components/composer.d.ts +14 -0
  27. package/dist/components/machines/machine-detail.d.ts +3 -1
  28. package/dist/components/machines-dashboard.d.ts +3 -3
  29. package/dist/components/message-timeline.d.ts +12 -2
  30. package/dist/components/sandbox-files.d.ts +2 -2
  31. package/dist/components/sandbox-terminal.d.ts +29 -0
  32. package/dist/components/sandbox-workspace.d.ts +5 -1
  33. package/dist/components/workspace-dock.d.ts +3 -1
  34. package/dist/composer.d.ts +2 -2
  35. package/dist/composer.js +6 -6
  36. package/dist/hooks/internal.d.ts +6 -0
  37. package/dist/hooks/use-codex-accounts.d.ts +1 -1
  38. package/dist/hooks/use-environments.d.ts +10 -4
  39. package/dist/hooks/use-machines.d.ts +7 -0
  40. package/dist/hooks/use-sandbox-files.d.ts +19 -0
  41. package/dist/hooks/use-sandbox-git.d.ts +7 -0
  42. package/dist/hooks/use-transcription.d.ts +2 -2
  43. package/dist/hooks/use-voice-input.d.ts +13 -4
  44. package/dist/index.d.ts +6 -5
  45. package/dist/index.js +904 -538
  46. package/dist/index.js.map +1 -1
  47. package/dist/lib/composer-responsive-context.d.ts +9 -0
  48. package/dist/lib/use-portal-token-style.d.ts +14 -3
  49. package/dist/machines.js +2 -2
  50. package/dist/{queue-surface-implementation-J4XJFKRW.js → queue-surface-implementation-U5JFG7HT.js} +19 -18
  51. package/dist/queue-surface-implementation-U5JFG7HT.js.map +1 -0
  52. package/dist/realtime/realtime-control.d.ts +9 -0
  53. package/dist/realtime.js +29 -32
  54. package/dist/realtime.js.map +1 -1
  55. package/dist/session-ui.js +5 -5
  56. package/dist/session.js +4 -4
  57. package/dist/timeline/activity-rail.d.ts +3 -2
  58. package/dist/timeline/index.d.ts +2 -2
  59. package/dist/timeline/parsers.d.ts +3 -3
  60. package/dist/timeline/registry.d.ts +3 -0
  61. package/dist/timeline/screenshot-lightbox.d.ts +1 -1
  62. package/dist/timeline/types.d.ts +4 -0
  63. package/dist/voice-recording-store.d.ts +8 -2
  64. package/package.json +20 -4
  65. package/src/client.ts +3 -0
  66. package/src/components/chat-composer.tsx +12 -2
  67. package/src/components/code-editor.tsx +1 -1
  68. package/src/components/command-palette.tsx +1 -1
  69. package/src/components/composer-transcription-control.tsx +41 -16
  70. package/src/components/composer.tsx +52 -26
  71. package/src/components/copy-button.tsx +2 -2
  72. package/src/components/desktop-viewer.tsx +2 -2
  73. package/src/components/file-browser.tsx +39 -17
  74. package/src/components/human-input-form.tsx +2 -2
  75. package/src/components/machine-card.tsx +1 -1
  76. package/src/components/machines/machine-detail.tsx +39 -15
  77. package/src/components/machines-dashboard.tsx +7 -6
  78. package/src/components/message-timeline.tsx +44 -11
  79. package/src/components/model-picker.tsx +2 -2
  80. package/src/components/model-policy-picker.tsx +16 -15
  81. package/src/components/queue-surface-implementation.tsx +20 -16
  82. package/src/components/queue-surface-state.tsx +2 -2
  83. package/src/components/sandbox-files.tsx +140 -60
  84. package/src/components/sandbox-terminal.tsx +24 -5
  85. package/src/components/sandbox-workspace.tsx +180 -142
  86. package/src/components/session-chrome.tsx +14 -14
  87. package/src/components/tooltip.tsx +13 -16
  88. package/src/components/user-message-body.tsx +1 -1
  89. package/src/components/workbench-changes.tsx +4 -4
  90. package/src/components/workspace-dock.tsx +13 -5
  91. package/src/composer.ts +3 -0
  92. package/src/hooks/internal.ts +132 -38
  93. package/src/hooks/use-codex-accounts.ts +4 -4
  94. package/src/hooks/use-environments.ts +24 -5
  95. package/src/hooks/use-file-attachments.ts +70 -32
  96. package/src/hooks/use-goal.ts +17 -5
  97. package/src/hooks/use-machines.ts +47 -1
  98. package/src/hooks/use-sandbox-files.ts +310 -59
  99. package/src/hooks/use-sandbox-git.ts +148 -41
  100. package/src/hooks/use-session-capabilities.ts +35 -24
  101. package/src/hooks/use-session-events.ts +18 -4
  102. package/src/hooks/use-transcription.ts +4 -14
  103. package/src/hooks/use-turn-queue.ts +17 -5
  104. package/src/hooks/use-voice-input.ts +481 -36
  105. package/src/hooks/use-windowed-sections.ts +9 -7
  106. package/src/index.ts +11 -6
  107. package/src/lib/composer-responsive-context.ts +15 -0
  108. package/src/lib/use-portal-token-style.ts +60 -15
  109. package/src/provider.tsx +52 -7
  110. package/src/realtime/dropdown-menu.tsx +15 -19
  111. package/src/realtime/realtime-control.tsx +18 -7
  112. package/src/timeline/activity-rail.tsx +15 -6
  113. package/src/timeline/index.ts +1 -1
  114. package/src/timeline/parsers.ts +33 -20
  115. package/src/timeline/projection.ts +23 -0
  116. package/src/timeline/registry.ts +7 -0
  117. package/src/timeline/screenshot-lightbox.tsx +15 -4
  118. package/src/timeline/shared.tsx +8 -8
  119. package/src/timeline/tool-renderers.tsx +166 -22
  120. package/src/timeline/turn-summary.tsx +6 -6
  121. package/src/timeline/types.ts +4 -0
  122. package/src/voice-recording-store.ts +15 -0
  123. package/styles/compiled.css +5065 -0
  124. package/styles/compiled.d.ts +2 -0
  125. package/styles/effective-tokens.css +27 -0
  126. package/styles/index.css +3 -0
  127. package/styles/responsive.css +196 -0
  128. package/styles/responsive.d.ts +2 -0
  129. package/styles/tokens.css +50 -17
  130. package/dist/chunk-6EDV6YFE.js.map +0 -1
  131. package/dist/chunk-EB67J347.js.map +0 -1
  132. package/dist/chunk-EHSYZ4KP.js.map +0 -1
  133. package/dist/chunk-FD72GJMK.js.map +0 -1
  134. package/dist/chunk-JB5725BI.js +0 -48
  135. package/dist/chunk-JB5725BI.js.map +0 -1
  136. package/dist/chunk-L3EWO3UK.js.map +0 -1
  137. package/dist/chunk-LWR4MXSS.js.map +0 -1
  138. package/dist/chunk-SRFUT2ZU.js.map +0 -1
  139. package/dist/chunk-U3CSCMWA.js.map +0 -1
  140. package/dist/queue-surface-implementation-J4XJFKRW.js.map +0 -1
  141. /package/dist/{chunk-HFO4ERGQ.js.map → chunk-FWXGSNXT.js.map} +0 -0
@@ -0,0 +1,2 @@
1
+ declare const stylesheet: string;
2
+ export default stylesheet;
@@ -0,0 +1,27 @@
1
+ /* Generated by scripts/build-compiled-css.ts; do not edit directly. */
2
+ .og-root,
3
+ [data-og-density="compact"],
4
+ .og-density-compact,
5
+ [data-og-theme="light"],
6
+ .og-light {
7
+ --_og-duration-fast: var(--og-duration-fast);
8
+ --_og-duration-base: var(--og-duration-base);
9
+ --_og-duration-slow: var(--og-duration-slow);
10
+ --_og-duration-disclose: var(--og-duration-disclose);
11
+ --_og-duration-disclose-settle: var(--og-duration-disclose-settle);
12
+ --_og-duration-stream: var(--og-duration-stream);
13
+ --_og-duration-markdown-crystallize: var(--og-duration-markdown-crystallize);
14
+ --_og-color-accent-soft: var(--og-color-accent-soft);
15
+ --_og-color-diff-add-bg: var(--og-color-diff-add-bg);
16
+ --_og-color-diff-del-bg: var(--og-color-diff-del-bg);
17
+ --_og-shadow-glow: var(--og-shadow-glow);
18
+ --_og-session-chrome-surface: var(--og-session-chrome-surface);
19
+ --_og-session-chrome-surface-open: var(--og-session-chrome-surface-open);
20
+ --_og-session-chrome-border: var(--og-session-chrome-border);
21
+ --_og-session-chrome-border-open: var(--og-session-chrome-border-open);
22
+ --_og-session-chrome-highlight: var(--og-session-chrome-highlight);
23
+ --_og-session-chrome-highlight-ring: var(--og-session-chrome-highlight-ring);
24
+ --_og-session-chrome-radius: var(--og-session-chrome-radius);
25
+ --_og-session-chrome-ease: var(--og-session-chrome-ease);
26
+ --_og-session-chrome-row-hover: var(--og-session-chrome-row-hover);
27
+ }
package/styles/index.css CHANGED
@@ -15,6 +15,7 @@
15
15
  -------------------------------------------------------------------------- */
16
16
 
17
17
  @import "./tokens.css";
18
+ @import "./effective-tokens.css";
18
19
 
19
20
  @theme inline {
20
21
  --font-og-sans: var(--og-font-sans);
@@ -145,6 +146,8 @@
145
146
  --animate-og-blink: og-blink 1s steps(2, start) infinite;
146
147
  --animate-og-shimmer: og-shimmer 2.2s linear infinite;
147
148
  --animate-og-spin: og-spin 0.9s linear infinite;
149
+ --animate-spin: og-spin 1s linear infinite;
150
+ --animate-pulse: og-pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
148
151
  --animate-og-waveform: og-waveform 1.15s var(--og-ease-in-out) infinite;
149
152
  /* Manual disclose — snappy. Auto settle-collapse is the slow path below. */
150
153
  --animate-og-expand: og-expand var(--og-duration-disclose) var(--og-ease-in-out);
@@ -0,0 +1,196 @@
1
+ /* Composer responsiveness is viewport-based unless the public Root opts into
2
+ its own inline-size container. The semantic hooks below intentionally keep
3
+ information density separate from pointer target sizing. */
4
+ .og-composer[data-og-responsive-basis="container"] {
5
+ container: og-composer / inline-size;
6
+ --_og-c-input-x: 1rem;
7
+ --_og-c-input-size: var(--og-font-size-composer-wide);
8
+ --_og-c-input-leading: var(--og-line-height-composer-wide);
9
+ --_og-c-gap: 0.375rem;
10
+ --_og-c-footer-x: 0.625rem;
11
+ --_og-c-footer-b: 0.625rem;
12
+ --_og-c-controls-wrap: wrap;
13
+ --_og-c-hint-display: inline;
14
+ --_og-c-model-max: 16rem;
15
+ --_og-c-model-x: 0.625rem;
16
+ --_og-c-native-max: 180px;
17
+ --_og-c-recovered-max: 11rem;
18
+ --_og-c-error-max: 10rem;
19
+ --og-model-policy-label-full-display: inline;
20
+ --og-model-policy-label-short-display: none;
21
+ --og-model-policy-effort-display: inline;
22
+ }
23
+
24
+ [data-og-responsive-basis="container"] .og-composer-input {
25
+ padding-inline: var(--_og-c-input-x);
26
+ font-size: var(--_og-c-input-size);
27
+ line-height: var(--_og-c-input-leading);
28
+ }
29
+
30
+ [data-og-responsive-basis="container"] .og-composer-footer {
31
+ gap: var(--_og-c-gap);
32
+ padding-inline: var(--_og-c-footer-x);
33
+ padding-bottom: var(--_og-c-footer-b);
34
+ }
35
+
36
+ [data-og-responsive-basis="container"] .og-composer-footer[data-og-stack-actions] {
37
+ flex-wrap: wrap;
38
+ }
39
+
40
+ [data-og-responsive-basis="container"] .og-composer-controls {
41
+ flex-wrap: var(--_og-c-controls-wrap);
42
+ }
43
+
44
+ [data-og-responsive-basis="container"]
45
+ :is(.og-composer-controls, .og-composer-actions) {
46
+ gap: var(--_og-c-gap);
47
+ }
48
+
49
+ [data-og-responsive-basis="container"]
50
+ :is(.og-composer-hint, .og-command-description) {
51
+ display: var(--_og-c-hint-display);
52
+ }
53
+
54
+ [data-og-responsive-basis="container"] .og-model-policy-trigger {
55
+ height: var(--og-model-picker-trigger-height);
56
+ max-width: var(--_og-c-model-max);
57
+ padding-inline: var(--_og-c-model-x);
58
+ }
59
+
60
+ [data-og-responsive-basis="container"] .og-model-policy-label-full {
61
+ display: var(--og-model-policy-label-full-display);
62
+ }
63
+
64
+ [data-og-responsive-basis="container"] .og-model-policy-label-short {
65
+ display: var(--og-model-policy-label-short-display);
66
+ }
67
+
68
+ [data-og-responsive-basis="container"] .og-model-policy-effort {
69
+ display: var(--og-model-policy-effort-display);
70
+ }
71
+
72
+ [data-og-responsive-basis="container"] .og-model-picker-native {
73
+ max-width: var(--_og-c-native-max);
74
+ }
75
+
76
+ [data-og-responsive-basis="container"] .og-transcription-recovered-label {
77
+ max-width: var(--_og-c-recovered-max);
78
+ }
79
+
80
+ [data-og-responsive-basis="container"] .og-transcription-error-label {
81
+ max-width: var(--_og-c-error-max);
82
+ }
83
+
84
+ [data-og-responsive-basis="container"]
85
+ :is(.og-realtime-primary, .og-realtime-model-trigger) {
86
+ height: 2rem;
87
+ }
88
+
89
+ [data-og-responsive-basis="container"] .og-realtime-primary {
90
+ width: 2rem;
91
+ }
92
+
93
+ [data-og-responsive-basis="container"] .og-realtime-model-trigger {
94
+ display: inline-flex;
95
+ width: 1.5rem;
96
+ }
97
+
98
+ [data-og-responsive-basis="container"]
99
+ .og-realtime-control[data-model-menu="split-desktop"]
100
+ .og-realtime-primary {
101
+ border-top-right-radius: 0;
102
+ border-bottom-right-radius: 0;
103
+ }
104
+
105
+ @container og-composer (max-width: 47.999rem) {
106
+ [data-og-responsive-basis="container"] :where(*) {
107
+ --_og-c-input-x: 0.875rem;
108
+ --_og-c-input-size: var(--og-font-size-composer);
109
+ --_og-c-input-leading: var(--og-line-height-composer);
110
+ }
111
+ }
112
+
113
+ @container og-composer (max-width: 39.999rem) {
114
+ [data-og-responsive-basis="container"] :where(*) {
115
+ --_og-c-gap: 0.25rem;
116
+ --_og-c-footer-x: 0.5rem;
117
+ --_og-c-footer-b: 0.5rem;
118
+ --_og-c-controls-wrap: nowrap;
119
+ --_og-c-hint-display: none;
120
+ --_og-c-model-max: 7.5rem;
121
+ --_og-c-model-x: 0.5rem;
122
+ --_og-c-native-max: 7.5rem;
123
+ --_og-c-recovered-max: 7rem;
124
+ --_og-c-error-max: 6rem;
125
+ --og-model-policy-label-full-display: none;
126
+ --og-model-policy-label-short-display: inline;
127
+ --og-model-policy-effort-display: none;
128
+ }
129
+
130
+ [data-og-responsive-basis="container"] .og-composer-footer {
131
+ flex-wrap: nowrap;
132
+ align-items: center;
133
+ }
134
+
135
+ [data-og-responsive-basis="container"] .og-composer-actions {
136
+ flex-wrap: nowrap;
137
+ }
138
+
139
+ [data-og-responsive-basis="container"]
140
+ .og-realtime-control[data-model-menu="split-desktop"]
141
+ .og-realtime-primary {
142
+ border-radius: var(--og-radius-md);
143
+ }
144
+
145
+ [data-og-responsive-basis="container"]
146
+ .og-realtime-control[data-model-menu="split-desktop"]
147
+ .og-realtime-model-trigger {
148
+ display: none;
149
+ }
150
+ }
151
+
152
+ @container og-composer (max-width: 24.999rem) {
153
+ .og-composer[data-og-responsive-basis="container"] .og-composer-resume-label-long {
154
+ display: none;
155
+ }
156
+
157
+ .og-composer[data-og-responsive-basis="container"] .og-composer-resume-label-short {
158
+ display: inline;
159
+ }
160
+ }
161
+
162
+ @media (pointer: coarse) {
163
+ [data-og-responsive-basis="container"] .og-model-policy-trigger,
164
+ [data-og-responsive-basis="container"] .og-realtime-primary,
165
+ [data-og-responsive-basis="container"] .og-realtime-model-trigger {
166
+ height: 2.75rem;
167
+ }
168
+
169
+ [data-og-responsive-basis="container"] .og-realtime-primary,
170
+ [data-og-responsive-basis="container"] .og-realtime-model-trigger {
171
+ width: 2.75rem;
172
+ }
173
+ }
174
+
175
+ /* Portalled menus retain theme/density tokens from their trigger and, in
176
+ container mode, the live composer width supplied by ResizeObserver. */
177
+ .og-model-policy-menu {
178
+ box-sizing: border-box;
179
+ width: min(
180
+ var(--og-model-picker-menu-width),
181
+ calc(var(--og-portal-source-inline-size, 100vw) - 1rem),
182
+ var(--radix-dropdown-menu-content-available-width, 100vw)
183
+ );
184
+ max-width: calc(100vw - 1rem);
185
+ }
186
+
187
+ .og-realtime-menu {
188
+ box-sizing: border-box;
189
+ width: min(
190
+ var(--og-realtime-menu-width),
191
+ calc(var(--og-portal-source-inline-size, 100vw) - 1rem),
192
+ var(--radix-dropdown-menu-content-available-width, 100vw)
193
+ );
194
+ max-width: calc(100vw - 1rem);
195
+ }
196
+
@@ -0,0 +1,2 @@
1
+ declare const stylesheet: string;
2
+ export default stylesheet;
package/styles/tokens.css CHANGED
@@ -50,6 +50,7 @@
50
50
  --og-model-picker-row-padding-x: 0.625rem;
51
51
  --og-model-picker-row-padding-y: 0.5rem;
52
52
  --og-model-picker-effort-height: 2rem;
53
+ --og-realtime-menu-width: 18rem;
53
54
 
54
55
  /* Radius ----------------------------------------------------------------- */
55
56
  --og-radius-xs: 4px;
@@ -96,7 +97,9 @@
96
97
  token. Keep the blue dark enough to preserve WCAG AA contrast. */
97
98
  --og-color-accent-deep: oklch(0.54 0.18 255);
98
99
  --og-color-accent-fg: oklch(0.985 0.005 260);
99
- --og-color-accent-soft: color-mix(in oklch, var(--og-color-accent) 16%, transparent);
100
+ /* Legacy color-mix fallbacks stay in the base rule; supported values are
101
+ grouped below so processors do not repeat this selector for every token. */
102
+ --og-color-accent-soft: var(--og-color-accent);
100
103
 
101
104
  /* Status — muted so they inform without alarming --------------------------- */
102
105
  --og-color-status-queued: oklch(0.62 0.03 260);
@@ -106,8 +109,8 @@
106
109
  --og-color-status-failed: oklch(0.7 0.16 22);
107
110
  --og-color-status-cancelled: oklch(0.6 0.035 260);
108
111
  --og-color-danger: oklch(0.66 0.18 22);
109
- --og-color-diff-add-bg: color-mix(in oklch, var(--og-color-status-idle) 14%, transparent);
110
- --og-color-diff-del-bg: color-mix(in oklch, var(--og-color-status-failed) 14%, transparent);
112
+ --og-color-diff-add-bg: var(--og-color-status-idle);
113
+ --og-color-diff-del-bg: var(--og-color-status-failed);
111
114
 
112
115
  /* Elevation ----------------------------------------------------------------
113
116
  Dark surfaces barely cast shadows; elevation reads mostly from the
@@ -120,17 +123,17 @@
120
123
  brand edge via `focus-within:border-og-accent/60`; the old `0 0 0 1px`
121
124
  ring sat flush against that border and read as a doubled hairline, so the
122
125
  glow is now purely the diffuse outer halo. */
123
- --og-shadow-glow: 0 0 24px color-mix(in oklch, var(--og-color-accent) 18%, transparent);
126
+ --og-shadow-glow: 0 0 24px var(--og-color-accent);
124
127
 
125
128
  /* Session chrome — override on `.og-session-chrome` (or an ancestor) to rebrand.
126
129
  Defaults stay quiet: soft surface, short motion, no gold shout. */
127
- --og-session-chrome-surface: color-mix(in oklch, var(--og-color-surface-2) 82%, transparent);
128
- --og-session-chrome-surface-open: color-mix(in oklch, var(--og-color-surface-2) 92%, transparent);
129
- --og-session-chrome-border: color-mix(in oklch, var(--og-color-border) 85%, transparent);
130
+ --og-session-chrome-surface: var(--og-color-surface-2);
131
+ --og-session-chrome-surface-open: var(--og-color-surface-2);
132
+ --og-session-chrome-border: var(--og-color-border);
130
133
  --og-session-chrome-border-open: var(--og-color-border);
131
134
  /* Selected chip: solid lift vs open dock surface (not a faint wash). */
132
135
  --og-session-chrome-highlight: var(--og-color-surface-3);
133
- --og-session-chrome-highlight-ring: color-mix(in oklch, var(--og-color-fg) 16%, transparent);
136
+ --og-session-chrome-highlight-ring: var(--og-color-fg);
134
137
  --og-session-chrome-shadow: 0 6px 22px -14px oklch(0 0 0 / 0.42);
135
138
  --og-session-chrome-shadow-open: 0 10px 28px -16px oklch(0 0 0 / 0.5);
136
139
  --og-session-chrome-radius: var(--og-radius-lg);
@@ -145,11 +148,25 @@
145
148
  --og-session-chrome-duration: 220ms;
146
149
  --og-session-chrome-crossfade-duration: 180ms;
147
150
  --og-session-chrome-ease: var(--og-ease-out);
148
- --og-session-chrome-row-hover: color-mix(in oklch, var(--og-color-surface-3) 55%, transparent);
151
+ --og-session-chrome-row-hover: var(--og-color-surface-3);
149
152
 
150
153
  color-scheme: dark;
151
154
  }
152
155
 
156
+ @supports (color: color-mix(in lab, red, red)) {
157
+ :root {
158
+ --og-color-accent-soft: color-mix(in oklch, var(--og-color-accent) 16%, transparent);
159
+ --og-color-diff-add-bg: color-mix(in oklch, var(--og-color-status-idle) 14%, transparent);
160
+ --og-color-diff-del-bg: color-mix(in oklch, var(--og-color-status-failed) 14%, transparent);
161
+ --og-shadow-glow: 0 0 24px color-mix(in oklch, var(--og-color-accent) 18%, transparent);
162
+ --og-session-chrome-surface: color-mix(in oklch, var(--og-color-surface-2) 82%, transparent);
163
+ --og-session-chrome-surface-open: color-mix(in oklch, var(--og-color-surface-2) 92%, transparent);
164
+ --og-session-chrome-border: color-mix(in oklch, var(--og-color-border) 85%, transparent);
165
+ --og-session-chrome-highlight-ring: color-mix(in oklch, var(--og-color-fg) 16%, transparent);
166
+ --og-session-chrome-row-hover: color-mix(in oklch, var(--og-color-surface-3) 55%, transparent);
167
+ }
168
+ }
169
+
153
170
  /* One supported dense preset for embedded product panels. It changes only
154
171
  typography and model-picker density; colors, radii, and brand tokens remain
155
172
  independently customizable. Apply either form to an SDK ancestor. */
@@ -178,6 +195,7 @@
178
195
  --og-model-picker-row-padding-x: 0.5rem;
179
196
  --og-model-picker-row-padding-y: 0.375rem;
180
197
  --og-model-picker-effort-height: 1.75rem;
198
+ --og-realtime-menu-width: 15rem;
181
199
  }
182
200
 
183
201
  /* Light theme — explicit opt-in, themable per subtree ----------------------- */
@@ -197,7 +215,8 @@
197
215
  --og-color-accent-strong: oklch(0.48 0.19 255);
198
216
  --og-color-accent-deep: oklch(0.44 0.19 255);
199
217
  --og-color-accent-fg: oklch(0.985 0.005 260);
200
- --og-color-accent-soft: color-mix(in oklch, var(--og-color-accent) 11%, transparent);
218
+ /* Match the dark-token fallback strategy without duplicating support rules. */
219
+ --og-color-accent-soft: var(--og-color-accent);
201
220
 
202
221
  --og-color-status-queued: oklch(0.55 0.03 260);
203
222
  /* Status letters are ordinary 11 px text, including over selected rows. */
@@ -209,23 +228,37 @@
209
228
  --og-color-status-failed: oklch(0.5 0.19 22);
210
229
  --og-color-status-cancelled: oklch(0.55 0.025 260);
211
230
  --og-color-danger: oklch(0.55 0.2 22);
212
- --og-color-diff-add-bg: color-mix(in oklch, var(--og-color-status-idle) 12%, transparent);
213
- --og-color-diff-del-bg: color-mix(in oklch, var(--og-color-status-failed) 12%, transparent);
231
+ --og-color-diff-add-bg: var(--og-color-status-idle);
232
+ --og-color-diff-del-bg: var(--og-color-status-failed);
214
233
 
215
234
  --og-shadow-sm: 0 1px 2px oklch(0.2 0.02 260 / 0.07);
216
235
  --og-shadow-md: 0 2px 8px oklch(0.2 0.02 260 / 0.09), 0 1px 2px oklch(0.2 0.02 260 / 0.06);
217
236
  --og-shadow-lg: 0 8px 28px oklch(0.2 0.02 260 / 0.13), 0 2px 8px oklch(0.2 0.02 260 / 0.07);
218
- --og-shadow-glow: 0 0 20px color-mix(in oklch, var(--og-color-accent) 14%, transparent);
237
+ --og-shadow-glow: 0 0 20px var(--og-color-accent);
219
238
 
220
- --og-session-chrome-surface: color-mix(in oklch, var(--og-color-surface-2) 88%, transparent);
239
+ --og-session-chrome-surface: var(--og-color-surface-2);
221
240
  --og-session-chrome-surface-open: var(--og-color-surface-2);
222
- --og-session-chrome-border: color-mix(in oklch, var(--og-color-border) 90%, transparent);
241
+ --og-session-chrome-border: var(--og-color-border);
223
242
  --og-session-chrome-border-open: var(--og-color-border);
224
243
  --og-session-chrome-highlight: var(--og-color-surface-3);
225
- --og-session-chrome-highlight-ring: color-mix(in oklch, var(--og-color-fg) 12%, transparent);
244
+ --og-session-chrome-highlight-ring: var(--og-color-fg);
226
245
  --og-session-chrome-shadow: 0 4px 16px -10px oklch(0.2 0.02 260 / 0.14);
227
246
  --og-session-chrome-shadow-open: 0 8px 22px -12px oklch(0.2 0.02 260 / 0.18);
228
- --og-session-chrome-row-hover: color-mix(in oklch, var(--og-color-surface-3) 70%, transparent);
247
+ --og-session-chrome-row-hover: var(--og-color-surface-3);
229
248
 
230
249
  color-scheme: light;
231
250
  }
251
+
252
+ @supports (color: color-mix(in lab, red, red)) {
253
+ [data-og-theme="light"],
254
+ .og-light {
255
+ --og-color-accent-soft: color-mix(in oklch, var(--og-color-accent) 11%, transparent);
256
+ --og-color-diff-add-bg: color-mix(in oklch, var(--og-color-status-idle) 12%, transparent);
257
+ --og-color-diff-del-bg: color-mix(in oklch, var(--og-color-status-failed) 12%, transparent);
258
+ --og-shadow-glow: 0 0 20px color-mix(in oklch, var(--og-color-accent) 14%, transparent);
259
+ --og-session-chrome-surface: color-mix(in oklch, var(--og-color-surface-2) 88%, transparent);
260
+ --og-session-chrome-border: color-mix(in oklch, var(--og-color-border) 90%, transparent);
261
+ --og-session-chrome-highlight-ring: color-mix(in oklch, var(--og-color-fg) 12%, transparent);
262
+ --og-session-chrome-row-hover: color-mix(in oklch, var(--og-color-surface-3) 70%, transparent);
263
+ }
264
+ }