@tangle-network/sandbox-ui 0.6.1 → 0.9.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 (68) hide show
  1. package/README.md +5 -6
  2. package/dist/auth.d.ts +10 -6
  3. package/dist/auth.js +3 -3
  4. package/dist/{chat-container-Cg-GwyiK.d.ts → chat-container-f4yEs6KN.d.ts} +9 -1
  5. package/dist/chat.d.ts +12 -2
  6. package/dist/chat.js +10 -10
  7. package/dist/{chunk-WBQ7VULC.js → chunk-34A66VBG.js} +7 -7
  8. package/dist/{chunk-JP725R4W.js → chunk-34I7UFSX.js} +2 -2
  9. package/dist/{chunk-CNWVHQFY.js → chunk-54SQQMMM.js} +6 -24
  10. package/dist/{chunk-DLCFZDGX.js → chunk-5UM2XMEJ.js} +39 -14
  11. package/dist/{chunk-YYGECNZZ.js → chunk-66EZOYZR.js} +3 -3
  12. package/dist/{chunk-6V4XVKFY.js → chunk-7YWFOGKQ.js} +344 -338
  13. package/dist/{chunk-DCPYTL4W.js → chunk-D4CZWJCD.js} +72 -148
  14. package/dist/{chunk-XTPAWK7L.js → chunk-DI3NZ5ZX.js} +15 -51
  15. package/dist/{chunk-MXRQ4MJE.js → chunk-DXMIEK4K.js} +34 -23
  16. package/dist/{chunk-ZMWWE5RF.js → chunk-EXSOPXIY.js} +141 -123
  17. package/dist/{chunk-GW4GRAWJ.js → chunk-GSZA3TSY.js} +18 -12
  18. package/dist/{chunk-W4LM3QYZ.js → chunk-HB5Y37YU.js} +8 -8
  19. package/dist/{chunk-RKXIRRKQ.js → chunk-JLKYXLFN.js} +70 -66
  20. package/dist/{chunk-BRBTD7RH.js → chunk-MA7YKRUP.js} +28 -18
  21. package/dist/{chunk-TSE423UF.js → chunk-MKTSMWVD.js} +6 -6
  22. package/dist/{chunk-MJUDMVRU.js → chunk-MT5FJ3ZT.js} +17 -17
  23. package/dist/{chunk-565V6JTN.js → chunk-OHPW55EV.js} +60 -99
  24. package/dist/chunk-OKLQVY3Y.js +139 -0
  25. package/dist/{chunk-OVNLOE3Y.js → chunk-PLTZB5BC.js} +41 -41
  26. package/dist/{chunk-E2XT3G52.js → chunk-QC4BJEG6.js} +136 -137
  27. package/dist/{chunk-KH5UDAJ2.js → chunk-QDH5GEGY.js} +58 -54
  28. package/dist/{chunk-33W2TLUL.js → chunk-QID2OOMG.js} +12 -3
  29. package/dist/{chunk-FJSVPBKY.js → chunk-S7OXQTST.js} +17 -3
  30. package/dist/chunk-T7HMZEVO.js +216 -0
  31. package/dist/{chunk-FNYJFCGU.js → chunk-U6QTHMY6.js} +145 -256
  32. package/dist/{chunk-YS66Q3RC.js → chunk-US6JKJKH.js} +2 -2
  33. package/dist/chunk-VX3XOUEB.js +63 -0
  34. package/dist/{chunk-TDYQBLL5.js → chunk-ZMNSRDMH.js} +6 -6
  35. package/dist/dashboard.d.ts +156 -4
  36. package/dist/dashboard.js +885 -8
  37. package/dist/{document-editor-pane-DWWUTTTZ.js → document-editor-pane-TLPVRBBU.js} +3 -3
  38. package/dist/editor.d.ts +9 -8
  39. package/dist/editor.js +3 -3
  40. package/dist/files.js +3 -3
  41. package/dist/globals.css +4787 -69
  42. package/dist/hooks.d.ts +1 -1
  43. package/dist/hooks.js +7 -7
  44. package/dist/index.d.ts +4 -4
  45. package/dist/index.js +28 -28
  46. package/dist/markdown.js +1 -1
  47. package/dist/openui.js +5 -5
  48. package/dist/pages.d.ts +114 -5
  49. package/dist/pages.js +1978 -365
  50. package/dist/primitives.d.ts +5 -2
  51. package/dist/primitives.js +10 -10
  52. package/dist/run.js +4 -4
  53. package/dist/sdk-hooks.d.ts +2 -3
  54. package/dist/sdk-hooks.js +5 -5
  55. package/dist/styles.css +4787 -69
  56. package/dist/template-card-BAtvcAkU.d.ts +18 -0
  57. package/dist/terminal.d.ts +3 -1
  58. package/dist/terminal.js +66 -32
  59. package/dist/tokens.css +289 -237
  60. package/dist/{usage-chart-XCoB_7Xu.d.ts → usage-chart-SSiOgeQI.d.ts} +3 -1
  61. package/dist/{use-pty-session-COzVkhtc.d.ts → use-pty-session-0AOuwXgq.d.ts} +2 -0
  62. package/dist/{index-BT_-ecpc.d.ts → variant-list-CsS6ydgm.d.ts} +16 -7
  63. package/dist/workspace.d.ts +2 -2
  64. package/dist/workspace.js +13 -13
  65. package/package.json +18 -3
  66. package/tailwind.config.cjs +3 -2
  67. package/dist/chunk-3HW53XTH.js +0 -228
  68. package/dist/chunk-OKCIKTXQ.js +0 -63
package/dist/tokens.css CHANGED
@@ -1,60 +1,70 @@
1
1
  /* Tangle Sandbox UI design tokens */
2
- /* Brand reference: tangle.tools deep indigo palette, electric #4a3aff primary */
2
+ /* Brand: warm purple palette, #5B4ED4 primary */
3
3
 
4
4
  /* MD3 surface hierarchy */
5
5
  :root,
6
6
  [data-sandbox-ui] {
7
- --md3-surface: #131228;
8
- --md3-surface-dim: #09080F;
9
- --md3-surface-bright: #2E2C56;
10
- --md3-surface-container-lowest: #06060E;
11
- --md3-surface-container-low: #131228;
12
- --md3-surface-container: #191738;
13
- --md3-surface-container-high: #211F45;
14
- --md3-surface-container-highest: #2A2854;
15
- --md3-surface-variant: #2A2854;
16
- --md3-on-surface: #E8E6F6;
17
- --md3-on-surface-variant: #C4C0D8;
18
- --md3-primary: #8263FF;
19
- --md3-primary-container: #4a3aff;
20
- --md3-on-primary: #FFFFFF;
21
- --md3-on-primary-container: #FFFFFF;
22
- --md3-primary-fixed: #C4AAFF;
23
- --md3-primary-fixed-dim: #8263FF;
24
- --md3-secondary: #6B7094;
25
- --md3-secondary-container: #1E1D35;
26
- --md3-on-secondary: #FFFFFF;
27
- --md3-on-secondary-container: #C4C0D8;
28
- --md3-tertiary: #10b981;
29
- --md3-outline: #6B7094;
30
- --md3-outline-variant: #2A2B39;
31
- --md3-error: #FF4D6D;
32
- --md3-error-container: #7A0020;
33
- --md3-on-error: #FFFFFF;
34
- --md3-inverse-surface: #E8E6F6;
35
- --md3-inverse-primary: #4a3aff;
36
- --md3-surface-tint: #8263FF;
7
+ --md3-surface: #0a0a14;
8
+ --md3-surface-dim: #07070d;
9
+ --md3-surface-bright: #1b1a2c;
10
+ --md3-surface-container-lowest: #000001;
11
+ --md3-surface-container-low: #0d0c18;
12
+ --md3-surface-container: #11101e;
13
+ --md3-surface-container-high: #171624;
14
+ --md3-surface-container-highest: #1f1e30;
15
+ --md3-surface-variant: #1f1e30;
16
+ --md3-on-surface: #fdfdfd;
17
+ --md3-on-surface-variant: #aaa8b8;
18
+
19
+ --md3-primary: #818CF8;
20
+ --md3-primary-dim: #6366F1;
21
+ --md3-primary-container: #4F46E5;
22
+ --md3-on-primary: #ffffff;
23
+ --md3-on-primary-container: #E0E7FF;
24
+ --md3-primary-fixed: #A5AAFC;
25
+ --md3-primary-fixed-dim: #818CF8;
26
+
27
+ --md3-secondary: #C7D2FE;
28
+ --md3-secondary-dim: #A5B4FC;
29
+ --md3-secondary-container: #312E81;
30
+ --md3-on-secondary: #E8E5FF;
31
+ --md3-on-secondary-container: #E8E5FF;
32
+
33
+ --md3-tertiary: #10B981;
34
+ --md3-outline: #434260;
35
+ --md3-outline-variant: #2A293D;
36
+
37
+ --md3-error: #ff5277;
38
+ --md3-error-dim: #eb2855;
39
+ --md3-error-container: #82042b;
40
+ --md3-on-error: #ffffff;
41
+ --md3-on-error-container: #ffbdf2;
42
+
43
+ --md3-inverse-surface: #fdfdfd;
44
+ --md3-inverse-primary: #4F46E5;
45
+ --md3-inverse-on-surface: #000000;
46
+ --md3-surface-tint: #818CF8;
37
47
 
38
48
  /* Semantic HSL bridge */
39
- --hsl-background: 248 52% 5%;
40
- --hsl-foreground: 244 20% 94%;
41
- --hsl-card: 246 42% 12%;
42
- --hsl-card-foreground: 244 20% 94%;
43
- --hsl-popover: 246 40% 15%;
44
- --hsl-popover-foreground: 244 20% 94%;
45
- --hsl-primary: 247 100% 61%;
49
+ --hsl-background: 244 28% 5%;
50
+ --hsl-foreground: 240 18% 94%;
51
+ --hsl-card: 246 30% 11%;
52
+ --hsl-card-foreground: 240 18% 94%;
53
+ --hsl-popover: 246 28% 14%;
54
+ --hsl-popover-foreground: 240 18% 94%;
55
+ --hsl-primary: 239 84% 67%;
46
56
  --hsl-primary-foreground: 0 0% 100%;
47
- --hsl-secondary: 243 25% 19%;
57
+ --hsl-secondary: 248 24% 18%;
48
58
  --hsl-secondary-foreground: 240 16% 90%;
49
- --hsl-muted: 242 22% 16%;
50
- --hsl-muted-foreground: 233 17% 62%;
51
- --hsl-accent: 245 28% 21%;
59
+ --hsl-muted: 246 22% 15%;
60
+ --hsl-muted-foreground: 240 14% 58%;
61
+ --hsl-accent: 248 26% 20%;
52
62
  --hsl-accent-foreground: 240 16% 92%;
53
63
  --hsl-destructive: 348 90% 60%;
54
64
  --hsl-destructive-foreground: 0 0% 100%;
55
- --hsl-border: 236 16% 22%;
56
- --hsl-input: 245 30% 15%;
57
- --hsl-ring: 247 100% 61%;
65
+ --hsl-border: 244 14% 22%;
66
+ --hsl-input: 246 28% 14%;
67
+ --hsl-ring: 239 84% 67%;
58
68
  --hsl-success: 160 84% 39%;
59
69
  --hsl-warning: 40 94% 56%;
60
70
  --hsl-info: 200 88% 56%;
@@ -85,24 +95,24 @@
85
95
  --info: var(--hsl-info);
86
96
 
87
97
  /* Sidebar tokens */
88
- --sidebar-background: 248 52% 5%;
89
- --sidebar-foreground: 244 20% 94%;
90
- --sidebar-primary: 247 100% 61%;
98
+ --sidebar-background: 244 28% 5%;
99
+ --sidebar-foreground: 240 18% 94%;
100
+ --sidebar-primary: 239 84% 67%;
91
101
  --sidebar-primary-foreground: 0 0% 100%;
92
- --sidebar-accent: 245 28% 21%;
102
+ --sidebar-accent: 248 26% 20%;
93
103
  --sidebar-accent-foreground: 240 16% 92%;
94
- --sidebar-border: 236 16% 18%;
95
- --sidebar-ring: 247 100% 61%;
104
+ --sidebar-border: 244 14% 17%;
105
+ --sidebar-ring: 239 84% 67%;
96
106
 
97
- /* Depth scale — Tangle deep indigo surfaces */
98
- --depth-1: #08071A;
99
- --depth-2: #131228;
100
- --depth-3: #1C1A3A;
101
- --depth-4: #26244C;
107
+ /* Depth scale — Tangle deep purple surfaces */
108
+ --depth-1: #0C0B1D;
109
+ --depth-2: #141328;
110
+ --depth-3: #1D1B38;
111
+ --depth-4: #262448;
102
112
 
103
113
  /* Status colors */
104
- --status-running: #10b981;
105
- --status-creating: #8263FF;
114
+ --status-running: #10B981;
115
+ --status-creating: #9B93F0;
106
116
  --status-stopped: #FFB800;
107
117
  --status-warm: #FF8A4C;
108
118
  --status-cold: #4AABFF;
@@ -112,7 +122,7 @@
112
122
  /* Status surface tokens — bg / border / text for each semantic color */
113
123
  --surface-success-bg: #022c22;
114
124
  --surface-success-border: #14532d;
115
- --surface-success-text: #34d399;
125
+ --surface-success-text: #34D399;
116
126
  --surface-warning-bg: #451a03;
117
127
  --surface-warning-border: #78350f;
118
128
  --surface-warning-text: #fbbf24;
@@ -125,9 +135,9 @@
125
135
  --surface-teal-bg: #042f2e;
126
136
  --surface-teal-border: #134e4a;
127
137
  --surface-teal-text: #2dd4bf;
128
- --surface-violet-bg: #2e1065;
129
- --surface-violet-border: #4c1d95;
130
- --surface-violet-text: #a78bfa;
138
+ --surface-violet-bg: #1e1b4b;
139
+ --surface-violet-border: #3730a3;
140
+ --surface-violet-text: #B8B2F5;
131
141
  --surface-orange-bg: #431407;
132
142
  --surface-orange-border: #7c2d12;
133
143
  --surface-orange-text: #fb923c;
@@ -144,73 +154,77 @@
144
154
 
145
155
  /* Mesh gradient — Tangle brand glows */
146
156
  --mesh-teal: rgba(16, 185, 129, 0.05);
147
- --mesh-violet: rgba(130, 99, 255, 0.07);
148
- --mesh-blue: rgba(74, 58, 255, 0.04);
157
+ --mesh-violet: rgba(99, 102, 241, 0.07);
158
+ --mesh-blue: rgba(129, 140, 248, 0.04);
149
159
 
150
- /* Brand gradients — Tangle exact */
151
- --tangle-gradient: linear-gradient(135deg, #8263FF, #4a3aff);
152
- --tangle-gradient-text: linear-gradient(135deg, #A78FFF, #6D6AFF);
153
- --accent-gradient-strong: linear-gradient(135deg, #8263FF, #4a3aff);
154
- --accent-surface-soft: rgba(130, 99, 255, 0.12);
155
- --accent-surface-strong: rgba(130, 99, 255, 0.20);
156
- --accent-text: #A78FFF;
160
+ /* Brand gradients — Tangle */
161
+ --tangle-gradient: linear-gradient(135deg, #6366F1, #818CF8);
162
+ --tangle-gradient-text: linear-gradient(135deg, #A5AAFC, #818CF8);
163
+ --accent-gradient-strong: linear-gradient(135deg, #6366F1, #818CF8);
164
+ --accent-surface-soft: rgba(99, 102, 241, 0.12);
165
+ --accent-surface-strong: rgba(99, 102, 241, 0.20);
166
+ --accent-text: #A5AAFC;
157
167
 
158
168
  /* Surfaces */
159
- --bg-root: radial-gradient(ellipse 70% 50% at 20% 0%, rgba(130, 99, 255, 0.08), transparent),
160
- radial-gradient(ellipse 50% 40% at 80% 10%, rgba(74, 58, 255, 0.06), transparent),
169
+ --bg-root: radial-gradient(ellipse 70% 50% at 20% 0%, rgba(99, 102, 241, 0.08), transparent),
170
+ radial-gradient(ellipse 50% 40% at 80% 10%, rgba(129, 140, 248, 0.06), transparent),
161
171
  linear-gradient(180deg, var(--depth-1), #0D0C1E 100%);
162
172
  --bg-dark: var(--depth-1);
163
173
  --bg-card: hsl(var(--hsl-card));
164
- --bg-elevated: hsl(246 38% 18%);
165
- --bg-section: hsl(246 38% 9%);
174
+ --bg-elevated: hsl(246 28% 17%);
175
+ --bg-section: hsl(246 28% 9%);
166
176
  --bg-input: hsl(var(--hsl-input));
167
- --bg-hover: rgba(130, 99, 255, 0.08);
168
- --bg-selection: rgba(130, 99, 255, 0.18);
177
+ --bg-hover: rgba(99, 102, 241, 0.08);
178
+ --bg-selection: rgba(99, 102, 241, 0.18);
169
179
 
170
180
  /* Text */
171
181
  --text-primary: hsl(var(--hsl-foreground));
172
- --text-secondary: hsl(244 18% 88%);
173
- --text-muted: #8B90B8;
174
- --text-dim: #6B70A0;
175
-
176
- /* Brand accents — Tangle exact */
177
- --brand-primary: #4a3aff;
178
- --brand-strong: #3B2ECC;
179
- --brand-cool: #8263FF;
180
- --brand-glow: #6D6AFF;
181
- --brand-purple: #A78FFF;
182
- --brand-vibrant: #4a3aff;
183
- --brand-emerald: #10b981;
182
+ --text-secondary: hsl(240 16% 85%);
183
+ --text-muted: #8688B0;
184
+ --text-dim: #606294;
185
+
186
+ /* Brand accents — Tangle */
187
+ --brand-primary: #6366F1;
188
+ --brand-strong: #2E2A5E;
189
+ --brand-strong-text: #ffffff;
190
+ --brand-strong-text-muted: rgba(255, 255, 255, 0.7);
191
+ --brand-strong-text-dim: rgba(255, 255, 255, 0.5);
192
+ --brand-cool: #818CF8;
193
+ --brand-glow: #A5AAFC;
194
+ --brand-purple: #C7D2FE;
195
+ --brand-vibrant: #6366F1;
196
+ --brand-emerald: #10B981;
184
197
 
185
198
  /* Borders */
186
- --border-subtle: rgba(107, 112, 148, 0.25);
187
- --border-default: rgba(107, 112, 148, 0.40);
188
- --border-hover: rgba(107, 112, 148, 0.60);
189
- --border-accent: rgba(130, 99, 255, 0.40);
190
- --border-accent-hover: rgba(130, 99, 255, 0.65);
199
+ --border-subtle: rgba(100, 100, 148, 0.10);
200
+ --border-default: rgba(100, 100, 148, 0.18);
201
+ --border-hover: rgba(100, 100, 148, 0.28);
202
+ --border-accent: rgba(99, 102, 241, 0.18);
203
+ --border-accent-hover: rgba(99, 102, 241, 0.35);
191
204
 
192
205
  /* Buttons */
193
- --btn-primary-bg: #4a3aff;
194
- --btn-primary-hover: #5B4DFF;
195
- --btn-cta-bg: #8263FF;
206
+ --btn-primary-bg: #6366F1;
207
+ --btn-primary-hover: #818CF8;
208
+ --btn-primary-text: #ffffff;
209
+ --btn-cta-bg: #818CF8;
196
210
  --btn-cta-text: #FFFFFF;
197
211
 
198
212
  /* Code / runtime syntax */
199
- --code-keyword: #A78FFF;
200
- --code-string: #10b981;
213
+ --code-keyword: #A5AAFC;
214
+ --code-string: #34D399;
201
215
  --code-function: #6D9FFF;
202
216
  --code-number: #FFB347;
203
- --code-success: #10b981;
204
- --code-comment: #6B7094;
217
+ --code-success: #10B981;
218
+ --code-comment: #606294;
205
219
  --code-error: #FF4D6D;
206
220
 
207
221
  /* Shadows */
208
222
  --shadow-card: 0 1px 3px rgba(0, 0, 0, 0.4), 0 0 0 1px rgba(255, 255, 255, 0.04);
209
223
  --shadow-dropdown: 0 8px 32px rgba(0, 0, 0, 0.6), 0 0 0 1px rgba(255, 255, 255, 0.06);
210
- --shadow-glow: 0 0 32px rgba(130, 99, 255, 0.18);
211
- --shadow-accent: 0 1px 3px rgba(0, 0, 0, 0.3), 0 0 0 1px rgba(130, 99, 255, 0.2);
224
+ --shadow-glow: 0 0 32px rgba(99, 102, 241, 0.18);
225
+ --shadow-accent: 0 1px 3px rgba(0, 0, 0, 0.3), 0 0 0 1px rgba(99, 102, 241, 0.2);
212
226
  --shadow-status-running: 0 0 6px rgba(16, 185, 129, 0.5);
213
- --shadow-status-creating: 0 0 6px rgba(130, 99, 255, 0.5);
227
+ --shadow-status-creating: 0 0 6px rgba(99, 102, 241, 0.5);
214
228
  --shadow-status-error: 0 0 6px rgba(255, 77, 109, 0.5);
215
229
 
216
230
  /* Radii */
@@ -227,7 +241,21 @@
227
241
  --panel-padding: 1rem;
228
242
  --content-max-width: 80rem;
229
243
 
230
- /* Component sizing — override per-app for tighter/looser layouts */
244
+ /* Typography scale — override per-app for custom type hierarchy.
245
+ Components reference these instead of hardcoded pixel values. */
246
+ --font-size-xs: 0.6875rem; /* 11px — labels, timestamps */
247
+ --font-size-sm: 0.75rem; /* 12px — captions, meta */
248
+ --font-size-base: 0.9375rem; /* 15px — message body */
249
+ --font-size-lg: 1rem; /* 16px — emphasized text */
250
+ --font-size-xl: 1.25rem; /* 20px — section headers */
251
+ --line-height-tight: 1.3;
252
+ --line-height-base: 1.75; /* matches leading-7 */
253
+ --line-height-relaxed: 1.8;
254
+
255
+ /* Component spacing — override per-app for tighter/looser layouts */
256
+ --avatar-size: 2rem; /* 32px — chat avatars */
257
+ --timeline-dot-size: 0.625rem; /* 10px — timeline connector dots */
258
+ --indicator-dot-size: 0.25rem; /* 4px — thinking indicator dots */
231
259
  --code-padding-x: 0.75rem;
232
260
  --code-padding-y: 0.625rem;
233
261
  --code-font-size: 0.8125rem;
@@ -240,6 +268,17 @@
240
268
  --tool-card-py: 0.5rem;
241
269
  --tool-icon-size: 1.75rem;
242
270
 
271
+ /* Syntax highlighting — override per-theme in vault section */
272
+ --syntax-comment: #6B7094;
273
+ --syntax-keyword: #A78FFF;
274
+ --syntax-string: #10b981;
275
+ --syntax-function: #6D9FFF;
276
+ --syntax-number: #FFB347;
277
+ --syntax-meta: #8263FF;
278
+ --syntax-error: #FF4D6D;
279
+ --syntax-variable: #C4C0D8;
280
+ --syntax-foreground: #E8E6F6;
281
+
243
282
  /* Transitions */
244
283
  --transition-fast: 0.1s ease;
245
284
  --transition-default: 0.16s ease;
@@ -251,68 +290,87 @@
251
290
  --font-mono: "Geist Mono", "JetBrains Mono", ui-monospace, monospace;
252
291
  }
253
292
 
254
- [data-sandbox-theme="builder"] {
255
- --hsl-primary: 247 100% 61%;
256
- --brand-primary: #4a3aff;
257
- --brand-cool: #6D9FFF;
258
- --brand-glow: #4a3aff;
259
- --tangle-gradient: linear-gradient(135deg, #4a3aff, #6D9FFF);
260
- --accent-gradient-strong: linear-gradient(135deg, #4a3aff, #6D9FFF);
261
- --status-creating: #4a3aff;
262
- }
263
-
264
- [data-sandbox-theme="consumer"] {
265
- --hsl-background: 246 44% 8%;
266
- --hsl-card: 246 36% 13%;
267
- --hsl-input: 246 30% 16%;
268
- --hsl-primary: 160 84% 39%;
269
- --hsl-ring: 160 84% 39%;
270
- --brand-primary: #10b981;
271
- --brand-cool: #10b981;
272
- --brand-glow: #34D399;
273
- --tangle-gradient: linear-gradient(135deg, #10b981, #34D399);
274
- --accent-gradient-strong: linear-gradient(135deg, #10b981, #34D399);
275
- --accent-text: #34D399;
276
- --btn-primary-bg: #10b981;
277
- --btn-primary-hover: #0EA572;
278
- }
279
-
280
293
  [data-sandbox-theme="vault"] {
281
- /* Light theme — clean navy/emerald */
282
- --hsl-background: 210 17% 97%;
283
- --hsl-foreground: 210 20% 10%;
294
+ /* Light theme — clean professional, warm purple accents */
295
+
296
+ /* MD3 surface hierarchy */
297
+ --md3-surface: #f8f9fb;
298
+ --md3-surface-dim: #d9dae0;
299
+ --md3-surface-bright: #f8f9fb;
300
+ --md3-surface-container-lowest: #ffffff;
301
+ --md3-surface-container-low: #f3f4f7;
302
+ --md3-surface-container: #edeef2;
303
+ --md3-surface-container-high: #e7e8ed;
304
+ --md3-surface-container-highest: #e1e2e8;
305
+ --md3-surface-variant: #e1e2e8;
306
+ --md3-on-surface: #191c24;
307
+ --md3-on-surface-variant: #464858;
308
+
309
+ --md3-primary: #3E349E;
310
+ --md3-primary-dim: #352B88;
311
+ --md3-primary-container: #352B88;
312
+ --md3-on-primary: #ffffff;
313
+ --md3-on-primary-container: #9B93F0;
314
+ --md3-primary-fixed: #E8E5FF;
315
+ --md3-primary-fixed-dim: #C5C0F0;
316
+
317
+ --md3-secondary: #524A78;
318
+ --md3-secondary-dim: #3E3660;
319
+ --md3-secondary-container: #E8E5FF;
320
+ --md3-on-secondary: #ffffff;
321
+ --md3-on-secondary-container: #524A78;
322
+
323
+ --md3-tertiary: #065F46;
324
+ --md3-tertiary-container: #D1FAE5;
325
+ --md3-outline: #6B6E8A;
326
+ --md3-outline-variant: #C7C6D6;
327
+
328
+ --md3-error: #ba1a1a;
329
+ --md3-error-dim: #93000a;
330
+ --md3-error-container: #ffdad6;
331
+ --md3-on-error: #ffffff;
332
+ --md3-on-error-container: #93000a;
333
+
334
+ --md3-inverse-surface: #2e2e3e;
335
+ --md3-inverse-primary: #A5AAFC;
336
+ --md3-inverse-on-surface: #f0f1f4;
337
+ --md3-surface-tint: #6366F1;
338
+
339
+ /* Semantic HSL bridge */
340
+ --hsl-background: 225 20% 97%;
341
+ --hsl-foreground: 228 20% 12%;
284
342
  --hsl-card: 0 0% 100%;
285
- --hsl-card-foreground: 210 20% 10%;
343
+ --hsl-card-foreground: 228 20% 12%;
286
344
  --hsl-popover: 0 0% 100%;
287
- --hsl-popover-foreground: 210 20% 10%;
288
- --hsl-primary: 248 100% 35%;
345
+ --hsl-popover-foreground: 228 20% 12%;
346
+ --hsl-primary: 239 84% 67%;
289
347
  --hsl-primary-foreground: 0 0% 100%;
290
- --hsl-secondary: 152 100% 22%;
348
+ --hsl-secondary: 242 22% 42%;
291
349
  --hsl-secondary-foreground: 0 0% 100%;
292
- --hsl-muted: 210 14% 95%;
293
- --hsl-muted-foreground: 215 10% 40%;
294
- --hsl-accent: 210 20% 94%;
295
- --hsl-accent-foreground: 210 20% 10%;
350
+ --hsl-muted: 240 14% 89%;
351
+ --hsl-muted-foreground: 240 10% 36%;
352
+ --hsl-accent: 248 22% 86%;
353
+ --hsl-accent-foreground: 248 38% 30%;
296
354
  --hsl-destructive: 0 72% 41%;
297
355
  --hsl-destructive-foreground: 0 0% 100%;
298
- --hsl-border: 214 18% 88%;
299
- --hsl-input: 214 18% 90%;
300
- --hsl-ring: 248 100% 35%;
301
- --hsl-success: 152 82% 34%;
356
+ --hsl-border: 244 14% 78%;
357
+ --hsl-input: 244 12% 80%;
358
+ --hsl-ring: 239 84% 67%;
359
+ --hsl-success: 160 84% 30%;
302
360
  --hsl-warning: 41 96% 50%;
303
361
  --hsl-info: 212 80% 50%;
304
362
 
305
- --depth-1: #f8f9fa;
306
- --depth-2: #f2f3f5;
307
- --depth-3: #e8eaed;
308
- --depth-4: #dde0e5;
363
+ --depth-1: #f4f4f9;
364
+ --depth-2: #edecf4;
365
+ --depth-3: #e5e4ee;
366
+ --depth-4: #dcdbe8;
309
367
 
310
- --status-running: #2C8C86;
311
- --status-creating: #3B2ECC;
368
+ --status-running: #059669;
369
+ --status-creating: #3E349E;
312
370
  --status-stopped: #B45309;
313
371
  --status-warm: #C05621;
314
372
  --status-cold: #1D6FA4;
315
- --status-error: #C81E34;
373
+ --status-error: #ba1a1a;
316
374
  --status-deleted: #6B6B82;
317
375
 
318
376
  --glass-bg: var(--depth-2);
@@ -336,9 +394,9 @@
336
394
  --surface-teal-bg: #f0fdfa;
337
395
  --surface-teal-border: #99f6e4;
338
396
  --surface-teal-text: #0f766e;
339
- --surface-violet-bg: #f5f3ff;
340
- --surface-violet-border: #ddd6fe;
341
- --surface-violet-text: #6d28d9;
397
+ --surface-violet-bg: #F0EEFF;
398
+ --surface-violet-border: #C5C0F0;
399
+ --surface-violet-text: #3E349E;
342
400
  --surface-orange-bg: #fff7ed;
343
401
  --surface-orange-border: #fed7aa;
344
402
  --surface-orange-text: #c2410c;
@@ -347,94 +405,88 @@
347
405
  --surface-neutral-text: var(--text-muted);
348
406
 
349
407
  /* Sidebar — light */
350
- --sidebar-background: 210 17% 97%;
351
- --sidebar-foreground: 210 20% 10%;
352
- --sidebar-primary: 248 100% 35%;
408
+ --sidebar-background: 232 18% 96%;
409
+ --sidebar-foreground: 228 20% 12%;
410
+ --sidebar-primary: 239 84% 67%;
353
411
  --sidebar-primary-foreground: 0 0% 100%;
354
- --sidebar-accent: 210 20% 92%;
355
- --sidebar-accent-foreground: 210 20% 10%;
356
- --sidebar-border: 214 18% 88%;
357
- --sidebar-ring: 248 100% 35%;
412
+ --sidebar-accent: 240 18% 90%;
413
+ --sidebar-accent-foreground: 240 38% 30%;
414
+ --sidebar-border: 244 14% 78%;
415
+ --sidebar-ring: 239 84% 67%;
358
416
 
359
- --mesh-teal: rgba(44, 140, 134, 0.04);
360
- --mesh-violet: rgba(74, 58, 255, 0.03);
361
- --mesh-blue: rgba(29, 111, 164, 0.03);
417
+ --mesh-teal: rgba(5, 150, 105, 0.04);
418
+ --mesh-violet: rgba(99, 102, 241, 0.03);
419
+ --mesh-blue: rgba(129, 140, 248, 0.03);
362
420
 
363
- --bg-root: #f8f9fa;
364
- --bg-dark: #f2f3f5;
421
+ --bg-root: #f4f4f9;
422
+ --bg-dark: #edecf4;
365
423
  --bg-card: #ffffff;
366
- --bg-elevated: #ebedf0;
367
- --bg-section: #f2f3f5;
368
- --bg-input: #f0f1f4;
369
- --bg-hover: rgba(74, 58, 255, 0.05);
370
- --bg-selection: rgba(74, 58, 255, 0.08);
371
-
372
- --text-primary: #0F1133;
373
- --text-secondary: #2A2D4A;
374
- --text-muted: #6B7094;
375
- --text-dim: #9DA3C2;
376
-
377
- --brand-primary: #1e116e;
378
- --brand-strong: #211f54;
379
- --brand-cool: #4a3aff;
380
- --brand-glow: #8263FF;
381
- --brand-purple: #4a3aff;
382
- --brand-vibrant: #4a3aff;
383
- --brand-emerald: #10b981;
384
-
385
- --border-subtle: rgba(107, 112, 148, 0.15);
386
- --border-default: rgba(107, 112, 148, 0.25);
387
- --border-hover: rgba(107, 112, 148, 0.40);
388
- --border-accent: rgba(74, 58, 255, 0.25);
389
- --border-accent-hover: rgba(74, 58, 255, 0.50);
390
-
391
- --btn-primary-bg: #1e116e;
392
- --btn-primary-hover: #211f54;
393
- --btn-cta-bg: #4a3aff;
424
+ --bg-elevated: #e5e4ee;
425
+ --bg-section: #edecf4;
426
+ --bg-input: #edecf4;
427
+ --bg-hover: rgba(99, 102, 241, 0.05);
428
+ --bg-selection: rgba(99, 102, 241, 0.10);
429
+
430
+ --text-primary: #191c24;
431
+ --text-secondary: #3a3a50;
432
+ --text-muted: #5E5E7A;
433
+ --text-dim: #A0A0B8;
434
+
435
+ --brand-primary: #6366F1;
436
+ --brand-strong: #2E2A5E;
437
+ --brand-strong-text: #ffffff;
438
+ --brand-strong-text-muted: rgba(255, 255, 255, 0.7);
439
+ --brand-strong-text-dim: rgba(255, 255, 255, 0.5);
440
+ --brand-cool: #818CF8;
441
+ --brand-glow: #A5AAFC;
442
+ --brand-purple: #6366F1;
443
+ --brand-vibrant: #6366F1;
444
+ --brand-emerald: #059669;
445
+
446
+ --border-subtle: rgba(110, 108, 148, 0.20);
447
+ --border-default: rgba(110, 108, 148, 0.35);
448
+ --border-hover: rgba(110, 108, 148, 0.50);
449
+ --border-accent: rgba(99, 102, 241, 0.15);
450
+ --border-accent-hover: rgba(99, 102, 241, 0.30);
451
+
452
+ --btn-primary-bg: #6366F1;
453
+ --btn-primary-hover: #4F46E5;
454
+ --btn-primary-text: #ffffff;
455
+ --btn-cta-bg: #6366F1;
394
456
  --btn-cta-text: #ffffff;
395
457
 
396
- --code-keyword: #1e116e;
397
- --code-string: #10b981;
398
- --code-function: #1e116e;
458
+ --code-keyword: #3E349E;
459
+ --code-string: #059669;
460
+ --code-function: #352B88;
399
461
  --code-number: #B45309;
400
- --code-success: #10b981;
401
- --code-comment: #6B7094;
402
- --code-error: #C81E34;
403
-
404
- --shadow-card: 0 1px 4px rgba(15, 17, 51, 0.06), 0 0 0 1px rgba(15, 17, 51, 0.05);
405
- --shadow-dropdown: 0 8px 32px rgba(15, 17, 51, 0.10), 0 0 0 1px rgba(15, 17, 51, 0.06);
406
- --shadow-glow: 0 0 32px rgba(74, 58, 255, 0.10);
407
- --shadow-accent: 0 2px 8px rgba(74, 58, 255, 0.12), 0 0 0 1px rgba(74, 58, 255, 0.08);
408
-
409
- --tangle-gradient: linear-gradient(135deg, #1e116e, #4a3aff);
410
- --tangle-gradient-text: linear-gradient(135deg, #1e116e, #4a3aff);
411
- --accent-gradient-strong: linear-gradient(135deg, #1e116e, #4a3aff);
412
- --accent-surface-soft: rgba(74, 58, 255, 0.06);
413
- --accent-surface-strong: rgba(74, 58, 255, 0.12);
414
- --accent-text: #1e116e;
415
-
416
- --font-sans: "Geist", "DM Sans", ui-sans-serif, system-ui, sans-serif;
417
- --font-display: "Outfit", "Geist", sans-serif;
462
+ --code-success: #059669;
463
+ --code-comment: #6B6E8A;
464
+ --code-error: #ba1a1a;
465
+
466
+ --shadow-card: 0 1px 3px rgba(25, 28, 36, 0.05), 0 0 0 1px rgba(200, 198, 218, 0.22);
467
+ --shadow-dropdown: 0 8px 32px rgba(25, 28, 36, 0.10), 0 0 0 1px rgba(200, 198, 218, 0.28);
468
+ --shadow-glow: none;
469
+ --shadow-accent: 0 1px 3px rgba(25, 28, 36, 0.05), 0 0 0 1px rgba(99, 102, 241, 0.15);
470
+
471
+ --tangle-gradient: linear-gradient(135deg, #6366F1, #818CF8);
472
+ --tangle-gradient-text: linear-gradient(135deg, #4F46E5, #6366F1);
473
+ --accent-gradient-strong: linear-gradient(135deg, #6366F1, #818CF8);
474
+ --accent-surface-soft: rgba(99, 102, 241, 0.06);
475
+ --accent-surface-strong: rgba(99, 102, 241, 0.12);
476
+ --accent-text: #4F46E5;
477
+
478
+ /* Typography Manrope (headlines) + Inter (body/labels) */
479
+ --font-sans: "Inter", "Geist", ui-sans-serif, system-ui, sans-serif;
480
+ --font-display: "Manrope", "Inter", sans-serif;
418
481
  --font-mono: "Geist Mono", "JetBrains Mono", ui-monospace, monospace;
419
- }
420
482
 
421
- [data-density="compact"] {
422
- --radius-sm: 4px;
423
- --radius-md: 6px;
424
- --radius-lg: 8px;
425
- --radius-xl: 12px;
426
- --control-height: 2rem;
427
- --panel-padding: 0.625rem;
428
-
429
- --code-padding-x: 0.625rem;
430
- --code-padding-y: 0.5rem;
431
- --code-font-size: 0.75rem;
432
- --code-line-height: 1.4;
433
- --chat-message-px: 0.75rem;
434
- --chat-message-py: 0.375rem;
435
- --chat-input-py: 0.5rem;
436
- --card-padding: 1rem;
437
- --tool-card-px: 0.625rem;
438
- --tool-card-py: 0.375rem;
439
- --tool-icon-size: 1.5rem;
483
+ /* Tighter border radius for enterprise precision */
484
+ --radius: 0.375rem;
485
+ --radius-sm: 2px;
486
+ --radius-md: 4px;
487
+ --radius-lg: 6px;
488
+ --radius-xl: 8px;
489
+ --radius-pill: 999px;
490
+ --radius-full: 999px;
440
491
  }
492
+
@@ -35,6 +35,8 @@ interface PricingTier {
35
35
  features: string[];
36
36
  recommended?: boolean;
37
37
  creditsPerMonth?: number;
38
+ monthlyPriceId?: string;
39
+ yearlyPriceId?: string;
38
40
  }
39
41
  interface PricingPageProps {
40
42
  tiers: PricingTier[];
@@ -47,7 +49,7 @@ interface PricingPageProps {
47
49
  className?: string;
48
50
  cardClassName?: string;
49
51
  }
50
- declare function PricingPage({ tiers, currentTierId, billingPeriod, onBillingPeriodChange, onSelectTier, variant, loading, className, cardClassName, }: PricingPageProps): react_jsx_runtime.JSX.Element;
52
+ declare function PricingPage({ tiers, currentTierId, billingPeriod, onBillingPeriodChange, onSelectTier, loading, className, }: PricingPageProps): react_jsx_runtime.JSX.Element;
51
53
 
52
54
  interface UsageDataPoint {
53
55
  date: string;