@marifold/service 0.69.0 → 0.70.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.
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WorkspaceRequestContext = exports.WORKSPACE_CONTEXT_HEADER = void 0;
4
+ const node_crypto_1 = require("node:crypto");
5
+ exports.WORKSPACE_CONTEXT_HEADER = 'x-marifold-workspace-context';
6
+ /** Fastify injection creates its own async context. Bind authenticated bridge
7
+ * provenance with an unguessable, process-local ticket instead of trusting a
8
+ * client-supplied device ID or relying on AsyncLocalStorage propagation. */
9
+ class WorkspaceRequestContext {
10
+ tickets = new Map();
11
+ async inject(context, operation) {
12
+ const ticket = (0, node_crypto_1.randomBytes)(32).toString('hex');
13
+ this.tickets.set(ticket, context);
14
+ try {
15
+ return await operation({ [exports.WORKSPACE_CONTEXT_HEADER]: ticket });
16
+ }
17
+ finally {
18
+ this.tickets.delete(ticket);
19
+ }
20
+ }
21
+ resolve(headers) {
22
+ const ticket = headers[exports.WORKSPACE_CONTEXT_HEADER];
23
+ if (ticket === undefined)
24
+ return undefined;
25
+ const context = typeof ticket === 'string' ? this.tickets.get(ticket) : undefined;
26
+ if (!context)
27
+ throw new Error('Invalid workspace request provenance.');
28
+ return context;
29
+ }
30
+ }
31
+ exports.WorkspaceRequestContext = WorkspaceRequestContext;
32
+ //# sourceMappingURL=WorkspaceRequestContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkspaceRequestContext.js","sourceRoot":"","sources":["../src/WorkspaceRequestContext.ts"],"names":[],"mappings":";;;AAAA,6CAA0C;AAG7B,QAAA,wBAAwB,GAAG,8BAA8B,CAAC;AACvE;;4EAE4E;AAC5E;IACU,OAAO,GAAG,IAAI,GAAG,EAAqC,CAAC;IAC/D,KAAK,CAAC,MAAM,CACV,OAAkC,EAClC,SAA0D;QAE1D,MAAM,MAAM,GAAG,IAAA,yBAAW,EAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC/C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAClC,IAAI,CAAC;YACH,OAAO,MAAM,SAAS,CAAC,EAAE,CAAC,QAAA,wBAAwB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QACjE,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IACD,OAAO,CAAC,OAAsD;QAC5D,MAAM,MAAM,GAAG,OAAO,CAAC,QAAA,wBAAwB,CAAC,CAAC;QACjD,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QAC3C,MAAM,OAAO,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAClF,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QACvE,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
@@ -0,0 +1,8 @@
1
+ import type { WorkspaceRequestContext } from './WorkspaceRequestContext';
2
+ import type { FastifyInstance } from 'fastify';
3
+ import { WorkspaceManager, type RunRegistry, type WorkspaceOperationContext } from '@marifold/core';
4
+ /** Only application resources can traverse the bridge. Device-local configuration
5
+ * and workspace connection management are never forwarded to another workspace. */
6
+ export declare function workspaceApiPath(method: string, raw: string): boolean;
7
+ export declare function registerWorkspaceRoutes(server: FastifyInstance, manager: WorkspaceManager, registry: RunRegistry, contextStore: WorkspaceRequestContext, executor: (operation: string, input: unknown, context: WorkspaceOperationContext) => Promise<unknown>, token?: string, cancelExecution?: (workspaceId: string) => void): void;
8
+ //# sourceMappingURL=WorkspaceRoutes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkspaceRoutes.d.ts","sourceRoot":"","sources":["../src/WorkspaceRoutes.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAGzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,EAA+C,gBAAgB,EAAsB,KAAK,WAAW,EAAE,KAAK,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAGrK;mFACmF;AACnF,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAYrE;AACD,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,eAAe,EACvB,OAAO,EAAE,gBAAgB,EACzB,QAAQ,EAAE,WAAW,EACrB,YAAY,EAAE,uBAAuB,EACrC,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,yBAAyB,KAAK,OAAO,CAAC,OAAO,CAAC,EACrG,KAAK,CAAC,EAAE,MAAM,EACd,eAAe,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,GAC9C,IAAI,CAqON"}
@@ -0,0 +1,266 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.workspaceApiPath = workspaceApiPath;
37
+ exports.registerWorkspaceRoutes = registerWorkspaceRoutes;
38
+ const Sse_1 = require("./Sse");
39
+ const fs = __importStar(require("node:fs"));
40
+ const node_stream_1 = require("node:stream");
41
+ const core_1 = require("@marifold/core");
42
+ const Validation_1 = require("./Validation");
43
+ /** Only application resources can traverse the bridge. Device-local configuration
44
+ * and workspace connection management are never forwarded to another workspace. */
45
+ function workspaceApiPath(method, raw) {
46
+ if (!['GET', 'POST', 'PUT', 'PATCH', 'DELETE'].includes(method) || raw.length > 2048 || /[\\\x00-\x1f#]/.test(raw))
47
+ return false;
48
+ const pathname = raw.split('?')[0];
49
+ if (/%2f|%5c|%2e/i.test(pathname) || pathname.split('/').some((p) => p === '.' || p === '..'))
50
+ return false;
51
+ return (/^\/v1\/(status|changes|ask|config|providers|models|profiles|sessions|skills|apps|app-instances|runs|tasks|schedules|terminal)(?:\/[A-Za-z0-9_%.-]+)*$/.test(pathname) &&
52
+ !pathname.endsWith('/events') &&
53
+ !(pathname === '/v1/config' && !['GET', 'PATCH'].includes(method)));
54
+ }
55
+ function registerWorkspaceRoutes(server, manager, registry, contextStore, executor, token, cancelExecution) {
56
+ const application = async (operation, input, context) => {
57
+ const body = (0, Validation_1.objectBody)(input);
58
+ if (operation === 'run.events') {
59
+ const runId = (0, Validation_1.requiredString)(body.runId, 'runId');
60
+ const run = registry.require(runId);
61
+ const after = typeof body.after === 'number' && Number.isSafeInteger(body.after) && body.after >= 0 ? body.after : 0;
62
+ const events = [];
63
+ const stop = new AbortController();
64
+ const timer = setTimeout(() => stop.abort(), 1000);
65
+ try {
66
+ for await (const event of registry.events(runId, after, stop.signal)) {
67
+ events.push(event);
68
+ if (events.length >= 128)
69
+ break;
70
+ }
71
+ }
72
+ finally {
73
+ clearTimeout(timer);
74
+ }
75
+ return { run, events };
76
+ }
77
+ if (operation === 'artifact.read') {
78
+ const runId = (0, Validation_1.requiredString)(body.runId, 'runId');
79
+ const artifactId = (0, Validation_1.requiredString)(body.artifactId, 'artifactId');
80
+ const run = registry.require(runId);
81
+ const origin = registry.artifactOrigin(runId, artifactId);
82
+ const e = origin.run.execution;
83
+ if (!run.artifacts?.some((a) => a.id === artifactId))
84
+ throw new Error('Artifact not found.');
85
+ const offset = body.offset;
86
+ if (typeof offset !== 'number' || !Number.isSafeInteger(offset) || offset < 0)
87
+ throw new Error('Invalid artifact offset.');
88
+ const length = (0, core_1.artifactReadLength)(body.length);
89
+ if (e && e.executionDeviceId !== manager.store.get(e.workspaceId).hostDeviceId)
90
+ return manager.execute(e.workspaceId, e.executionDeviceId, 'executor.artifact', {
91
+ runId: origin.run.id,
92
+ artifactId: origin.artifactId,
93
+ offset,
94
+ length,
95
+ });
96
+ const artifact = registry.requireArtifact(runId, artifactId);
97
+ if (offset > artifact.size)
98
+ throw new Error('Invalid artifact offset.');
99
+ const fd = fs.openSync(artifact.path, fs.constants.O_RDONLY | fs.constants.O_NOFOLLOW);
100
+ try {
101
+ const bytes = Buffer.alloc(Math.min(length, artifact.size - offset));
102
+ const n = fs.readSync(fd, bytes, 0, bytes.length, offset);
103
+ return { data: bytes.subarray(0, n).toString('base64'), size: artifact.size };
104
+ }
105
+ finally {
106
+ fs.closeSync(fd);
107
+ }
108
+ }
109
+ if (operation !== 'api')
110
+ throw new Error('Unsupported workspace operation.');
111
+ const method = (0, Validation_1.requiredString)(body.method, 'method');
112
+ const url = (0, Validation_1.requiredString)(body.path, 'path');
113
+ if (!workspaceApiPath(method, url))
114
+ throw new Error('This operation is not available through a workspace bridge.');
115
+ if (url === '/v1/config' && method === 'PATCH') {
116
+ const patch = (0, Validation_1.objectBody)(body.body);
117
+ const key = (0, Validation_1.requiredString)(patch.key, 'key');
118
+ if (!/^(default\.|memory\.|agent\.|web_search\.(enabled|max_results|provider|api_key_env|scrape)$)/.test(key))
119
+ throw new Error('This setting belongs to the host device and must be edited locally.');
120
+ }
121
+ const response = await contextStore.inject(context, (provenance) => server.inject({
122
+ method: method,
123
+ url,
124
+ headers: {
125
+ ...provenance,
126
+ ...(token ? { authorization: `Bearer ${token}` } : {}),
127
+ ...(body.body !== undefined ? { 'content-type': 'application/json' } : {}),
128
+ },
129
+ ...(body.body !== undefined ? { payload: JSON.stringify(body.body) } : {}),
130
+ }));
131
+ const contentType = response.headers['content-type'];
132
+ return {
133
+ status: response.statusCode,
134
+ contentType,
135
+ disposition: response.headers['content-disposition'],
136
+ body: response.rawPayload.toString('base64'),
137
+ };
138
+ };
139
+ manager.start(application, executor);
140
+ server.get('/v1/workspaces', async () => ({
141
+ ok: true,
142
+ workspaces: manager.list(),
143
+ defaultId: manager.store.defaultId(),
144
+ }));
145
+ server.post('/v1/workspaces', async (request) => {
146
+ const b = (0, Validation_1.objectBody)(request.body);
147
+ return {
148
+ ok: true,
149
+ ...(await manager.create((0, Validation_1.requiredString)(b.name, 'name'), (0, Validation_1.requiredString)(b.bridgeUrl, 'bridgeUrl'), (0, Validation_1.requiredString)(b.registrationToken, 'registrationToken'))),
150
+ };
151
+ });
152
+ server.post('/v1/workspaces/join', async (request) => {
153
+ const b = (0, Validation_1.objectBody)(request.body);
154
+ return {
155
+ ok: true,
156
+ workspace: await manager.add((0, Validation_1.requiredString)(b.bridgeUrl, 'bridgeUrl'), (0, Validation_1.requiredString)(b.invitation, 'invitation'), b.executor === true),
157
+ };
158
+ });
159
+ server.put('/v1/workspaces/default', async (request) => {
160
+ const b = (0, Validation_1.objectBody)(request.body);
161
+ manager.store.setDefault((0, Validation_1.requiredString)(b.id, 'id'));
162
+ return { ok: true, defaultId: manager.store.defaultId() };
163
+ });
164
+ server.put('/v1/workspaces/:id/executor', async (request) => {
165
+ const body = (0, Validation_1.objectBody)(request.body);
166
+ if (typeof body.enabled !== 'boolean')
167
+ throw new Error('enabled must be a boolean.');
168
+ const id = manager.store.get(request.params.id).id;
169
+ if (!body.enabled)
170
+ cancelExecution?.(id);
171
+ await manager.setExecutor(id, body.enabled);
172
+ return { ok: true, enabled: body.enabled };
173
+ });
174
+ server.delete('/v1/workspaces/:id', async (request) => {
175
+ const id = manager.store.get(request.params.id).id;
176
+ cancelExecution?.(id);
177
+ await manager.remove(id);
178
+ return { ok: true };
179
+ });
180
+ server.post('/v1/workspaces/:id/manage/:operation', async (request) => {
181
+ if (!['rename', 'invite', 'devices', 'revoke'].includes(request.params.operation))
182
+ throw new Error('Unknown workspace operation.');
183
+ return {
184
+ ok: true,
185
+ ...(await manager.request(request.params.id, request.params.operation, request.body ?? {})),
186
+ };
187
+ });
188
+ server.get('/v1/workspaces/:id/run-events/:runId', async (request) => ({
189
+ ok: true,
190
+ ...(await manager.request(request.params.id, 'run.events', {
191
+ runId: request.params.runId,
192
+ after: Number(request.query.after ?? 0),
193
+ })),
194
+ }));
195
+ server.get('/v1/workspaces/:id/api/v1/runs/:runId/events', async (request, reply) => {
196
+ let after = Number(request.headers['last-event-id'] ?? request.query.after ?? 0);
197
+ if (!Number.isSafeInteger(after) || after < 0)
198
+ throw new Error('Invalid event cursor.');
199
+ const poll = () => manager.request(request.params.id, 'run.events', { runId: request.params.runId, after });
200
+ let batch = await poll();
201
+ let closed = false;
202
+ reply.hijack();
203
+ reply.raw.on('close', () => {
204
+ closed = true;
205
+ });
206
+ reply.raw.writeHead(200, Sse_1.SSE_HEADERS);
207
+ const stop = (0, Sse_1.startSseHeartbeat)(reply);
208
+ try {
209
+ while (!closed) {
210
+ for (const { seq, event } of batch.events) {
211
+ if (seq <= after)
212
+ continue;
213
+ (0, Sse_1.writeSse)(reply, event.type, event, seq);
214
+ after = seq;
215
+ }
216
+ if (batch.run.finishedAt && after >= batch.run.eventCount)
217
+ break;
218
+ batch = await poll();
219
+ }
220
+ }
221
+ catch {
222
+ /* Closing preserves the client's last sequence for reconnect. */
223
+ }
224
+ finally {
225
+ stop();
226
+ if (!closed)
227
+ reply.raw.end();
228
+ }
229
+ });
230
+ server.all('/v1/workspaces/:id/api/*', async (request, reply) => {
231
+ const suffix = request.url.slice(request.url.indexOf('/api/') + 4);
232
+ if (!workspaceApiPath(request.method, suffix))
233
+ throw new Error('Unsupported workspace application route.');
234
+ const artifact = /^\/v1\/runs\/([^/]+)\/artifacts\/([^/?]+)$/.exec(suffix);
235
+ if (request.method === 'GET' && artifact) {
236
+ const response = (await manager.request(request.params.id, 'api', {
237
+ method: 'GET',
238
+ path: `/v1/runs/${artifact[1]}`,
239
+ }));
240
+ const run = JSON.parse(Buffer.from(response.body, 'base64').toString('utf8')).run;
241
+ const item = run?.artifacts?.find((a) => a.id === artifact[2]);
242
+ if (!item)
243
+ return reply
244
+ .code(404)
245
+ .send({ ok: false, error: { code: 'ARTIFACT_NOT_FOUND', message: 'Artifact not found.' } });
246
+ reply
247
+ .type(item.mediaType)
248
+ .header('content-disposition', `attachment; filename*=UTF-8''${encodeURIComponent(item.name)}`);
249
+ return reply.send(node_stream_1.Readable.from((0, core_1.workspaceArtifactStream)(item.size, (offset, length) => manager.request(request.params.id, 'artifact.read', {
250
+ runId: artifact[1],
251
+ artifactId: artifact[2],
252
+ offset,
253
+ length,
254
+ }))));
255
+ }
256
+ const result = (await manager.request(request.params.id, 'api', { method: request.method, path: suffix, ...(request.body !== undefined ? { body: request.body } : {}) }, typeof request.headers['idempotency-key'] === 'string' ? request.headers['idempotency-key'] : undefined));
257
+ reply.code(result.status);
258
+ if (result.disposition)
259
+ reply.header('content-disposition', result.disposition);
260
+ if (result.contentType)
261
+ reply.type(result.contentType);
262
+ return reply.send(Buffer.from(result.body, 'base64'));
263
+ });
264
+ server.addHook('onClose', async () => manager.close());
265
+ }
266
+ //# sourceMappingURL=WorkspaceRoutes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkspaceRoutes.js","sourceRoot":"","sources":["../src/WorkspaceRoutes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { FastifyInstance } from 'fastify';
2
+ import type { MarifoldRuntime } from '@marifold/core';
3
+ /** Schedule configuration is shared; scheduled execution always stays on the host. */
4
+ export declare function registerWorkspaceScheduleRoutes(server: FastifyInstance, runtime: MarifoldRuntime): void;
5
+ //# sourceMappingURL=WorkspaceScheduleRoutes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkspaceScheduleRoutes.d.ts","sourceRoot":"","sources":["../src/WorkspaceScheduleRoutes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGtD,sFAAsF;AACtF,wBAAgB,+BAA+B,CAAC,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,eAAe,GAAG,IAAI,CAmCvG"}
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerWorkspaceScheduleRoutes = registerWorkspaceScheduleRoutes;
4
+ const Validation_1 = require("./Validation");
5
+ /** Schedule configuration is shared; scheduled execution always stays on the host. */
6
+ function registerWorkspaceScheduleRoutes(server, runtime) {
7
+ server.post('/v1/schedules', async (request) => {
8
+ const body = (0, Validation_1.objectBody)(request.body);
9
+ return {
10
+ ok: true,
11
+ schedule: runtime.createSchedule({
12
+ name: (0, Validation_1.requiredString)(body.name, 'name'),
13
+ objective: (0, Validation_1.requiredString)(body.objective, 'objective'),
14
+ cron: (0, Validation_1.requiredString)(body.cron, 'cron'),
15
+ ...(0, Validation_1.optionalStringField)('profile', body.profile),
16
+ ...(0, Validation_1.optionalBooleanField)('enabled', body.enabled),
17
+ }),
18
+ };
19
+ });
20
+ server.patch('/v1/schedules/:id', async (request) => {
21
+ const body = (0, Validation_1.objectBody)(request.body);
22
+ return {
23
+ ok: true,
24
+ schedule: runtime.updateSchedule(request.params.id, {
25
+ ...(0, Validation_1.optionalStringField)('name', body.name),
26
+ ...(0, Validation_1.optionalStringField)('objective', body.objective),
27
+ ...(0, Validation_1.optionalStringField)('cron', body.cron),
28
+ ...(0, Validation_1.optionalStringField)('profile', body.profile),
29
+ ...(0, Validation_1.optionalBooleanField)('enabled', body.enabled),
30
+ }),
31
+ };
32
+ });
33
+ server.delete('/v1/schedules/:id', async (request) => ({
34
+ ok: true,
35
+ deleted: runtime.deleteSchedule(request.params.id),
36
+ }));
37
+ server.post('/v1/schedules/:id/run', async (request) => ({
38
+ ok: true,
39
+ ...(await runtime.runScheduleUnattended(request.params.id)),
40
+ }));
41
+ }
42
+ //# sourceMappingURL=WorkspaceScheduleRoutes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkspaceScheduleRoutes.js","sourceRoot":"","sources":["../src/WorkspaceScheduleRoutes.ts"],"names":[],"mappings":";;;AAEA,6CAAqG;AAErG,sFAAsF;AACtF,yCAAgD,MAAuB,EAAE,OAAwB;IAC/F,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QAC7C,MAAM,IAAI,GAAG,IAAA,uBAAU,EAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACtC,OAAO;YACL,EAAE,EAAE,IAAI;YACR,QAAQ,EAAE,OAAO,CAAC,cAAc,CAAC;gBAC/B,IAAI,EAAE,IAAA,2BAAc,EAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC;gBACvC,SAAS,EAAE,IAAA,2BAAc,EAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC;gBACtD,IAAI,EAAE,IAAA,2BAAc,EAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC;gBACvC,GAAG,IAAA,gCAAmB,EAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC;gBAC/C,GAAG,IAAA,iCAAoB,EAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC;aACjD,CAAC;SACH,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,KAAK,CAA6B,mBAAmB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QAC9E,MAAM,IAAI,GAAG,IAAA,uBAAU,EAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACtC,OAAO;YACL,EAAE,EAAE,IAAI;YACR,QAAQ,EAAE,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE;gBAClD,GAAG,IAAA,gCAAmB,EAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC;gBACzC,GAAG,IAAA,gCAAmB,EAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnD,GAAG,IAAA,gCAAmB,EAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC;gBACzC,GAAG,IAAA,gCAAmB,EAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC;gBAC/C,GAAG,IAAA,iCAAoB,EAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC;aACjD,CAAC;SACH,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,MAAM,CAA6B,mBAAmB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;QACjF,EAAE,EAAE,IAAI;QACR,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;KACnD,CAAC,CAAC,CAAC;IACJ,MAAM,CAAC,IAAI,CAA6B,uBAAuB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;QACnF,EAAE,EAAE,IAAI;QACR,GAAG,CAAC,MAAM,OAAO,CAAC,qBAAqB,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;KAC5D,CAAC,CAAC,CAAC;AACN,CAAC"}
@@ -0,0 +1 @@
1
+ ._backdrop_1cor0_1{z-index:30;background:color-mix(in srgb, var(--text) 12%, transparent);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);place-items:center;padding:24px;display:grid;position:fixed;inset:0}._popover_1cor0_12{background:var(--surface);border:1px solid var(--separator);border-radius:var(--radius-lg);width:min(680px,100%);max-height:min(620px,100vh - 48px);box-shadow:var(--shadow-sheet);flex-direction:column;gap:14px;padding:16px;display:flex}._titleRow_1cor0_25{justify-content:space-between;align-items:flex-start;gap:16px;display:flex}._title_1cor0_25{font-size:16px;font-weight:700}._subtitle_1cor0_37{color:var(--text-3);margin-top:2px;font-size:12px}._add_1cor0_43{border-radius:var(--radius-sm);color:var(--text-2);background:var(--surface-2);flex-shrink:0;padding:5px 10px}._add_1cor0_43:hover{color:var(--text);background:var(--separator-soft)}._body_1cor0_56{border:1px solid var(--separator);border-radius:var(--radius-md);grid-template-columns:minmax(180px,.8fr) minmax(260px,1.2fr);min-height:260px;display:grid;overflow:hidden}._serverList_1cor0_65{background:var(--surface-2);border-right:1px solid var(--separator);padding:6px;overflow-y:auto}._server_1cor0_65,._serverSelected_1cor0_73{text-align:left;border-radius:8px;flex-direction:column;justify-content:center;gap:1px;width:100%;min-height:52px;padding:7px 54px 7px 9px;display:flex;position:relative}._server_1cor0_65:hover{background:var(--separator-soft)}._serverSelected_1cor0_73{background:var(--brand-tint)}._serverName_1cor0_94,._serverUrl_1cor0_95{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}._serverName_1cor0_94{font-size:13px;font-weight:650}._serverUrl_1cor0_95{color:var(--text-3);font-size:11px}._activeBadge_1cor0_112{color:var(--text-2);background:color-mix(in srgb, var(--brand-fill) 16%, transparent);letter-spacing:.04em;text-transform:uppercase;border-radius:999px;padding:1px 5px;font-size:9px;font-weight:700;position:absolute;top:8px;right:8px}._editor_1cor0_126{flex-direction:column;gap:11px;min-width:0;padding:14px;display:flex;position:relative}._problem_1cor0_135{color:var(--danger);background:color-mix(in srgb, var(--danger) 10%, transparent);border-radius:var(--radius-sm);padding:6px 10px;font-size:12px}._sameOriginNote_1cor0_143{border-radius:var(--radius-sm);color:var(--text-2);background:var(--surface-2);overflow-wrap:anywhere;padding:10px;font-size:12px;line-height:1.45}._field_1cor0_153{color:var(--text-2);flex-direction:column;gap:4px;font-size:12px;display:flex}._field_1cor0_153 input{border:1px solid var(--separator);border-radius:var(--radius-sm);background:var(--surface-2);min-width:0;padding:7px 9px;font-size:13px}._field_1cor0_153 input:focus{outline:2px solid var(--brand-tint);border-color:var(--brand-fill)}._hint_1cor0_175{color:var(--text-3);font-size:11px;line-height:1.35}._remove_1cor0_181{color:var(--danger);border-radius:6px;align-self:flex-start;margin-top:auto;padding:4px 6px;font-size:12px}._remove_1cor0_181:hover{background:color-mix(in srgb, var(--danger) 10%, transparent)}._actions_1cor0_194{justify-content:flex-end;gap:8px;display:flex}._cancel_1cor0_200,._connect_1cor0_201{border-radius:var(--radius-sm);padding:6px 15px}._cancel_1cor0_200{color:var(--text-2)}._cancel_1cor0_200:hover{background:var(--separator-soft)}._connect_1cor0_201{background:var(--brand-fill);min-width:94px;color:var(--on-brand);font-weight:600}._add_1cor0_43:disabled,._remove_1cor0_181:disabled,._cancel_1cor0_200:disabled,._connect_1cor0_201:disabled{opacity:.55;cursor:default}@media (width<=720px){._backdrop_1cor0_1{align-items:flex-end;padding:0}._sheet_1cor0_235{width:100%;max-height:calc(100dvh - 12px);padding-bottom:env(safe-area-inset-bottom);border-radius:18px 18px 0 0}._body_1cor0_56{grid-template-columns:1fr;overflow-y:auto}._serverList_1cor0_65{border-right:0;border-bottom:1px solid var(--separator);max-height:180px}._body_1cor0_56 input{min-height:44px;font-size:16px}}._editor_1cor0_126{overflow-y:auto}._field_1cor0_153 textarea,._field_1cor0_153 select{border:1px solid var(--separator);border-radius:var(--radius-sm);background:var(--surface-2);min-width:0;color:var(--text);padding:7px 9px;font-size:13px}._popover_1cor0_12{overflow-y:auto}._actions_1cor0_194{flex-wrap:wrap}._image_z3nsn_1{object-fit:cover;border-radius:50%;flex-shrink:0}._initial_z3nsn_7{background:var(--brand-fill);color:var(--on-brand);border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;font-weight:700;display:inline-flex}._backdrop_1i0ce_1{z-index:40;background:#00000052;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}._sheet_1i0ce_11{background:var(--surface);border-radius:var(--radius-lg);width:min(400px,100vw - 48px);box-shadow:var(--shadow-sheet);flex-direction:column;gap:14px;padding:20px;display:flex}._title_1i0ce_22{font-size:15px;font-weight:700}._identityRow_1i0ce_27{align-items:center;gap:12px;display:flex}._avatarButton_1i0ce_33{border:1px dashed var(--separator);border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:52px;height:52px;display:inline-flex;overflow:hidden}._avatarButton_1i0ce_33:hover{border-color:var(--brand-fill)}._avatarPreview_1i0ce_49{object-fit:cover;width:100%;height:100%}._avatarPlaceholder_1i0ce_55{background:var(--brand-tint);width:100%;height:100%;color:var(--brand-text);justify-content:center;align-items:center;font-size:20px;font-weight:700;display:inline-flex}._fileInput_1i0ce_67{display:none}._nameField_1i0ce_71{flex-direction:column;flex:1;gap:4px;min-width:0;display:flex}._nameInput_1i0ce_79{border:1px solid var(--separator);border-radius:var(--radius-md);background:var(--content);outline:none;width:100%;min-width:0;padding:8px 12px;font-size:14px}._nameInput_1i0ce_79:focus{border-color:var(--brand-fill)}._nameRules_1i0ce_94{color:var(--text-3);font-size:11.5px}._fieldRow_1i0ce_99{justify-content:space-between;align-items:center;gap:12px;display:flex}._fieldLabel_1i0ce_106{color:var(--text-2);font-size:13px;font-weight:500}._modelSelect_1i0ce_112{border:1px solid var(--separator);border-radius:var(--radius-md);background-color:var(--content);max-width:220px;color:var(--text);padding:6px 34px 6px 8px;font-size:12.5px}._problem_1i0ce_122{color:var(--danger);font-size:12.5px}._hint_1i0ce_127{color:var(--text-3);font-size:12px}._actions_1i0ce_132{justify-content:flex-end;gap:8px;display:flex}._cancel_1i0ce_138{border-radius:var(--radius-md);background:var(--surface-2);color:var(--text-2);padding:7px 14px;font-size:13px;font-weight:600}._create_1i0ce_147{border-radius:var(--radius-md);background:var(--brand-fill);color:var(--on-brand);box-shadow:0 1px 3px var(--brand-shadow);padding:7px 14px;font-size:13px;font-weight:600}._create_1i0ce_147:disabled,._cancel_1i0ce_138:disabled{opacity:.5;cursor:default}@media (width<=560px){._backdrop_1i0ce_1{align-items:flex-end;padding:0}._sheet_1i0ce_11{width:100%;padding:20px 18px calc(18px + env(safe-area-inset-bottom));border-radius:18px 18px 0 0}._nameInput_1i0ce_79,._modelSelect_1i0ce_112{min-height:44px;font-size:16px}._cancel_1i0ce_138,._create_1i0ce_147{min-height:44px;padding-inline:18px;font-size:15px}}._bar_1ejvu_1{z-index:12;min-height:calc(48px + env(safe-area-inset-top));padding:env(safe-area-inset-top) 10px 0;border-bottom:1px solid var(--separator-soft);background:color-mix(in srgb, var(--content) 92%, transparent);-webkit-backdrop-filter:blur(18px)saturate(1.3);grid-template-columns:minmax(76px,1fr) minmax(0,1.35fr) minmax(76px,1fr);align-items:center;display:grid;position:sticky;top:0}._side_1ejvu_16{align-items:center;min-width:0;display:flex}._trailing_1ejvu_22{justify-content:flex-end}._back_1ejvu_26{min-width:44px;max-width:100%;min-height:44px;color:var(--brand-text);text-align:left;align-items:center;gap:5px;font-size:16px;display:inline-flex}._back_1ejvu_26 span{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}._title_1ejvu_45{min-width:0;color:var(--text);text-align:center;text-overflow:ellipsis;white-space:nowrap;font-size:16px;font-weight:700;overflow:hidden}@media (prefers-reduced-motion:reduce){._bar_1ejvu_1{-webkit-backdrop-filter:none}}._root_r0xz0_1{display:none}@media (width<=899px){._root_r0xz0_1{z-index:80;padding:7px 10px calc(7px + env(safe-area-inset-bottom));border-top:1px solid var(--separator-soft);background:color-mix(in srgb, var(--content) 92%, transparent);-webkit-backdrop-filter:blur(20px)saturate(1.25);flex:none;margin-top:auto;display:block;position:relative}._bar_r0xz0_19{border:1px solid var(--separator);background:color-mix(in srgb, var(--surface) 94%, transparent);min-height:58px;box-shadow:var(--shadow-card);border-radius:20px;grid-template-columns:repeat(3,minmax(0,1fr));align-items:stretch;padding:3px 6px;display:grid}._tab_r0xz0_31,._tabSelected_r0xz0_32{min-width:0;min-height:50px;color:var(--text-3);border-radius:16px;flex-direction:column;justify-content:center;align-items:center;gap:2px;font-size:11px;font-weight:600;display:flex}._tabSelected_r0xz0_32{color:var(--brand-text);background:var(--brand-tint)}._tab_r0xz0_31 svg,._tabSelected_r0xz0_32 svg{width:24px;height:24px}._backdrop_r0xz0_57{z-index:70;background:#0000001f;position:fixed;inset:0}._sheet_r0xz0_64{right:12px;bottom:calc(82px + env(safe-area-inset-bottom));z-index:75;border:1px solid var(--separator);background:color-mix(in srgb, var(--surface) 96%, transparent);box-shadow:var(--shadow-sheet);-webkit-backdrop-filter:blur(24px)saturate(1.2);border-radius:20px;padding:6px;animation:.16s ease-out _sheetIn_r0xz0_1;position:fixed;left:12px}._action_r0xz0_80{width:100%;min-height:52px;color:var(--text);text-align:left;border-radius:14px;grid-template-columns:28px minmax(0,1fr) auto;align-items:center;gap:10px;padding:6px 12px;font-size:16px;display:grid}._action_r0xz0_80+._action_r0xz0_80{border-top:1px solid var(--separator-soft);border-radius:0}._action_r0xz0_80:active{background:var(--separator-soft)}._actionIcon_r0xz0_103{width:24px;height:24px;color:var(--text-2);display:inline-flex}._actionIcon_r0xz0_103 svg{width:24px;height:24px}._value_r0xz0_115,._chevron_r0xz0_116{min-width:0;max-width:148px;color:var(--text-3);text-overflow:ellipsis;text-transform:capitalize;white-space:nowrap;font-size:14px;overflow:hidden}._chevron_r0xz0_116{font-size:24px}}@keyframes _sheetIn_r0xz0_1{0%{opacity:0;transform:translateY(12px)scale(.985)}}@media (prefers-reduced-motion:reduce){._sheet_r0xz0_64{animation:none}}._frame_4ez81_1{border-right:1px solid var(--separator-soft);background:var(--canvas);flex-shrink:0;min-width:200px;max-width:40%;height:100%;position:relative}._content_4ez81_11{width:100%;height:100%;overflow:hidden}._handle_4ez81_17{z-index:4;cursor:col-resize;touch-action:none;outline:none;width:8px;position:absolute;top:0;bottom:0;right:-4px}._handle_4ez81_17:after{content:"";background:0 0;width:2px;transition:background .1s;position:absolute;top:0;bottom:0;right:3px}._handle_4ez81_17:hover:after,._handle_4ez81_17:focus-visible:after,._handleActive_4ez81_42:after{background:var(--brand-fill)}@media (prefers-reduced-motion:reduce){._handle_4ez81_17:after{transition:none}}._brand_huvcm_1,._brandProminent_huvcm_2{align-items:center;gap:8px;min-height:52px;padding:8px 14px 6px;display:flex}._logo_huvcm_10{color:var(--brand-fill);display:inline-flex}._wordmark_huvcm_15{letter-spacing:-.01em;font-size:14px;font-weight:700}._brandProminent_huvcm_2{gap:10px;min-height:68px;padding:12px 20px 8px}._brandProminent_huvcm_2 ._wordmark_huvcm_15{letter-spacing:-.02em;font-size:18px}._footer_huvcm_32{border-top:1px solid var(--separator-soft);flex-shrink:0;margin-top:auto;padding:8px}._row_huvcm_39,._rowSelected_huvcm_40{border-radius:var(--radius-sm);width:100%;min-height:30px;color:var(--text-2);text-align:left;grid-template-columns:18px minmax(0,1fr) auto;align-items:center;gap:8px;padding:5px 8px;display:grid}._row_huvcm_39:hover{background:var(--separator-soft);color:var(--text)}._rowSelected_huvcm_40{background:var(--brand-tint);color:var(--text);font-weight:600}._rowSelected_huvcm_40:disabled{cursor:default}._icon_huvcm_68{justify-content:center;align-items:center;width:16px;height:16px;display:inline-flex}._value_huvcm_76{text-overflow:ellipsis;white-space:nowrap;min-width:0;max-width:104px;color:var(--text-3);text-transform:capitalize;font-size:11.5px;font-weight:400;overflow:hidden}@media (width<=899px){._brand_huvcm_1,._brandProminent_huvcm_2{min-height:calc(64px + env(safe-area-inset-top));padding:calc(12px + env(safe-area-inset-top)) 20px 8px}._brand_huvcm_1 ._wordmark_huvcm_15,._brandProminent_huvcm_2 ._wordmark_huvcm_15{font-size:22px}._footer_huvcm_32{padding:8px 12px calc(8px + env(safe-area-inset-bottom));background:var(--canvas)}._row_huvcm_39,._rowSelected_huvcm_40{min-height:44px;padding:8px 10px;font-size:15px}._value_huvcm_76{max-width:132px;font-size:13px}}._root_d5uey_1{color:var(--text);overflow-wrap:break-word;font-size:16px;line-height:1.6}._muted_d5uey_10{color:var(--text-3)}._root_d5uey_1>:first-child{margin-top:0}._root_d5uey_1>:last-child{margin-bottom:0}._heading_d5uey_22{letter-spacing:-.01em;margin:14px 0 6px;font-weight:700}._paragraph_d5uey_28{margin:8px 0}._codeBlock_d5uey_32{background:var(--surface-2);border:1px solid var(--separator-soft);border-radius:var(--radius-md);margin:10px 0;overflow:hidden}._codeHeader_d5uey_40{border-bottom:1px solid var(--separator-soft);min-height:40px;color:var(--text-2);justify-content:space-between;align-items:center;gap:12px;padding:8px 10px 8px 14px;font-size:12.5px;font-weight:600;display:flex}._copyButton_d5uey_53{border-radius:var(--radius-sm);width:28px;height:28px;color:var(--text-2);flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}._copyButton_d5uey_53:hover,._copyButton_d5uey_53:focus-visible{background:var(--separator-soft);color:var(--text)}._code_d5uey_32{background:0 0;border:none;border-radius:0;margin:0;padding:14px 16px 16px;line-height:1.6;overflow-x:auto}._code_d5uey_32 code{font-size:13px}._inlineCode_d5uey_84{background:var(--surface-2);border-radius:4px;padding:1px 5px}._list_d5uey_90{margin:8px 0;padding-left:22px}._link_d5uey_95{color:var(--brand-text);text-decoration:none}._link_d5uey_95:hover{text-decoration:underline}._downloadLink_d5uey_104{font:inherit;cursor:pointer;background:0 0;border:0;padding:0;display:inline}._quote_d5uey_113{border-left:3px solid var(--brand-fill);color:var(--text-2);margin:10px 0;padding:2px 0 2px 14px}._quote_d5uey_113>:first-child{margin-top:0}._quote_d5uey_113>:last-child{margin-bottom:0}._tableWrap_d5uey_128{border:1px solid var(--separator);border-radius:var(--radius-md);max-width:100%;margin:10px 0;overflow-x:auto}._table_d5uey_128{border-collapse:collapse;width:100%;min-width:420px;font-size:13px;line-height:1.45}._table_d5uey_128 th,._table_d5uey_128 td{vertical-align:top;border-right:1px solid var(--separator-soft);border-bottom:1px solid var(--separator-soft);padding:8px 10px}._table_d5uey_128 th{color:var(--text-2);background:var(--surface-2);font-weight:650}._table_d5uey_128 th:last-child,._table_d5uey_128 td:last-child{border-right:none}._table_d5uey_128 tbody tr:last-child td{border-bottom:none}._rule_d5uey_167{border:none;border-top:1px solid var(--separator);margin:14px 0}._sheet_wsly2_1{background:var(--surface);border:1px solid var(--brand-tint);outline:3px solid var(--brand-tint);border-radius:var(--radius-lg);box-shadow:var(--shadow-sheet);flex-direction:column;gap:12px;margin-top:10px;padding:14px 16px;display:flex}._head_wsly2_14{gap:12px;display:flex}._icon_wsly2_19{border-radius:var(--radius-md);background:var(--brand-tint);width:36px;height:36px;color:var(--brand-text);flex-shrink:0;justify-content:center;align-items:center;font-size:17px;display:inline-flex}._text_wsly2_32{flex-direction:column;gap:3px;min-width:0;display:flex}._title_wsly2_39{font-size:14px;font-weight:700}._summary_wsly2_44{color:var(--text-2);overflow-wrap:break-word;font-size:13px}._path_wsly2_50{font-family:var(--font-mono);color:var(--text);overflow-wrap:break-word;font-size:12px}._meta_wsly2_57{color:var(--text-3);font-size:12px}._actions_wsly2_62{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:8px;display:flex}._deny_wsly2_70{border-radius:var(--radius-md);color:var(--text-2);padding:6px 14px;font-weight:600}._deny_wsly2_70:hover:not(:disabled){color:var(--danger)}._persist_wsly2_81{border-radius:var(--radius-md);background:var(--surface-2);padding:6px 14px;font-weight:600}._persist_wsly2_81:hover:not(:disabled){background:var(--surface-3)}._allow_wsly2_92{border-radius:var(--radius-md);background:var(--brand-fill);color:var(--on-brand);box-shadow:0 1px 3px var(--brand-shadow);padding:6px 16px;font-weight:700}._kbd_wsly2_101{opacity:.75;margin-left:4px;font-weight:400}._sheet_wsly2_1 button:disabled{opacity:.5;cursor:default}@media (width<=560px){._sheet_wsly2_1{padding:14px}._actions_wsly2_62{align-items:stretch}._deny_wsly2_70,._persist_wsly2_81,._allow_wsly2_92{flex:auto;min-height:42px}._kbd_wsly2_101{display:none}}._sheet_t6kts_1{background:var(--surface);border:1px solid var(--brand-tint);outline:3px solid var(--brand-tint);border-radius:var(--radius-lg);box-shadow:var(--shadow-sheet);flex-direction:column;gap:16px;margin-top:10px;padding:16px;display:flex}._heading_t6kts_14{font-size:14px;font-weight:700}._question_t6kts_19{border:0;min-width:0;margin:0;padding:0}._legend_t6kts_26{flex-direction:column;gap:3px;margin-bottom:8px;font-size:13.5px;font-weight:600;display:flex}._header_t6kts_35{color:var(--brand-text);letter-spacing:.04em;text-transform:uppercase;font-size:11px;font-weight:700}._multipleHint_t6kts_43{color:var(--text-3);font-size:11.5px;font-weight:500}._options_t6kts_49{gap:6px;display:grid}._option_t6kts_49{border:1px solid var(--separator);border-radius:var(--radius-md);cursor:pointer;align-items:flex-start;gap:9px;padding:9px 10px;display:flex}._option_t6kts_49:hover{background:var(--surface-2)}._option_t6kts_49:has(>input:checked){border-color:var(--brand-fill);background:var(--brand-tint)}._option_t6kts_49>input{accent-color:var(--brand-fill);margin-top:2px}._optionLabel_t6kts_78{font-size:13px;font-weight:600;display:block}._description_t6kts_84{color:var(--text-2);margin-top:2px;font-size:12px;line-height:1.35;display:block}._customOption_t6kts_92,._customBody_t6kts_93{min-width:0}._customBody_t6kts_93{flex:1}._customInput_t6kts_101{border:1px solid var(--separator);border-radius:var(--radius-sm);background:var(--surface);width:100%;color:var(--text);font:inherit;margin-top:6px;padding:7px 9px;font-size:12.5px}._customInput_t6kts_101:focus{border-color:var(--brand-fill);outline:2px solid var(--brand-tint)}._actions_t6kts_118{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:12px;display:flex}._progress_t6kts_126{color:var(--text-3);flex:1;font-size:12px}._submit_t6kts_132{border-radius:var(--radius-md);background:var(--brand-fill);color:var(--on-brand);box-shadow:0 1px 3px var(--brand-shadow);padding:7px 16px;font-weight:700}._submit_t6kts_132:disabled{opacity:.5;cursor:default}._kbd_t6kts_146{opacity:.75;margin-left:6px;font-weight:400}@media (width<=560px){._option_t6kts_49{min-height:48px;padding:11px}._optionLabel_t6kts_78{font-size:14px}._customInput_t6kts_101{min-height:42px;font-size:16px}._submit_t6kts_132{min-height:44px;padding-inline:20px}._kbd_t6kts_146{display:none}}._workspace_j9k5n_1{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;position:relative;overflow:hidden;container-type:inline-size}._scrollArea_j9k5n_12{flex:1;min-height:0;overflow-y:auto}._header_j9k5n_18,._appCanvas_j9k5n_19{width:min(960px,100% - 64px);margin-inline:auto}._executionPanel_j9k5n_24{flex-direction:column;gap:14px;padding-top:4px;display:flex}._executionStatus_j9k5n_31{box-sizing:border-box;border:1px solid var(--separator);min-height:42px;color:var(--text-2);background-color:var(--surface-2);border-radius:12px;align-items:center;gap:10px;padding:9px 12px;font-size:13px;display:flex}._executionSpinner_j9k5n_45{border:2px solid color-mix(in srgb, var(--text-3) 35%, transparent);border-top-color:var(--brand-text);border-radius:50%;flex:none;width:13px;height:13px;animation:.9s linear infinite _executionSpin_j9k5n_45}._executionCancel_j9k5n_55{color:var(--text-3);font:inherit;cursor:pointer;background:0 0;border:0;margin-left:auto;padding:5px 9px}@keyframes _executionSpin_j9k5n_45{to{transform:rotate(360deg)}}@media (prefers-reduced-motion:reduce){._executionSpinner_j9k5n_45{animation:none}}._header_j9k5n_18{border-bottom:1px solid var(--separator);padding:42px 0 24px}._header_j9k5n_18 hgroup{margin:0}._header_j9k5n_18 h1{color:var(--text);margin:0;font-size:28px;line-height:1.2}._header_j9k5n_18 p{color:var(--text-3);margin:8px 0 0;font-size:14px}._appCanvas_j9k5n_19{flex-direction:column;gap:20px;padding:28px 0 64px;display:flex}._row_j9k5n_102{align-items:stretch;display:flex}._column_j9k5n_107{flex-direction:column;display:flex}._gap_none_j9k5n_112{gap:0}._gap_small_j9k5n_113{gap:8px}._gap_medium_j9k5n_114{gap:16px}._gap_large_j9k5n_115{gap:24px}._grow_j9k5n_117{flex:1 1 0;min-width:0}._spacer_j9k5n_122{width:100%;min-width:0;height:1px;display:block}._field_j9k5n_129{flex-direction:column;flex:1;gap:8px;min-width:0;display:flex}._label_j9k5n_137{color:var(--text-2);font-size:13px;font-weight:650}._fieldHeader_j9k5n_143{justify-content:space-between;align-items:center;gap:12px;min-height:18px;display:flex}._fieldHeaderActions_j9k5n_151{justify-content:flex-end;align-items:center;gap:12px;min-width:0;display:flex}._staleHint_j9k5n_159{color:#d99b20;text-overflow:ellipsis;white-space:nowrap;font-size:11px;font-weight:550;overflow:hidden}._copyButton_j9k5n_168{color:var(--brand-text);font:inherit;cursor:pointer;background:0 0;border:0;padding:0;font-size:12px}._copyButton_j9k5n_168:disabled{cursor:not-allowed;opacity:.5}._visuallyHidden_j9k5n_183{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}._field_j9k5n_129 input,._field_j9k5n_129 select,._field_j9k5n_129 textarea{box-sizing:border-box;border:1px solid var(--separator);width:100%;color:var(--text);background-color:var(--surface-2);font:inherit;border-radius:10px;outline:none}._fileInput_j9k5n_208{display:none}._attachmentZone_j9k5n_212{box-sizing:border-box;border:1px solid var(--separator);background:var(--surface-2);border-radius:12px;align-items:center;min-height:86px;padding:12px;transition:border-color .12s,background .12s;display:flex;position:relative}._attachmentZoneActive_j9k5n_225{border-color:var(--brand-text);background:var(--brand-tint)}._attachmentPicker_j9k5n_230{z-index:0;border-radius:inherit;width:100%;color:var(--text-3);font:inherit;cursor:pointer;background:0 0;border:0;font-size:13px;position:absolute;inset:0}._attachmentPicker_j9k5n_230 strong{color:var(--brand-text);font-weight:650}._attachmentPicker_j9k5n_230:focus-visible{outline:2px solid color-mix(in srgb, var(--brand-fill) 45%, transparent);outline-offset:2px}._attachmentPicker_j9k5n_230:disabled{cursor:wait}._attachmentChips_j9k5n_258{z-index:1;pointer-events:none;flex-wrap:wrap;gap:8px;min-width:0;display:flex;position:relative}._attachmentChip_j9k5n_258{box-sizing:border-box;border:1px solid var(--separator);width:min(250px,100cqw - 112px);min-width:0;height:48px;color:var(--text-2);background:var(--surface);pointer-events:auto;border-radius:10px;align-items:center;gap:9px;padding:5px 8px 5px 5px;display:flex}._attachmentThumbnail_j9k5n_284,._attachmentFileIcon_j9k5n_285{border-radius:7px;flex:none;width:36px;height:36px}._attachmentThumbnail_j9k5n_284{object-fit:cover;background:var(--surface-2);display:block}._attachmentFileIcon_j9k5n_285{color:var(--text-3);background:var(--surface-2);justify-content:center;align-items:center;font-size:18px;display:inline-flex}._attachmentName_j9k5n_307{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:12.5px;overflow:hidden}._attachmentRemove_j9k5n_316{width:24px;height:24px;color:var(--text-3);font:inherit;cursor:pointer;background:0 0;border:0;border-radius:50%;flex:none;justify-content:center;align-items:center;padding:0;font-size:17px;line-height:1;display:inline-flex}._attachmentRemove_j9k5n_316:hover{color:var(--text);background:var(--separator-soft)}._attachmentRemove_j9k5n_316:disabled{cursor:wait;opacity:.55}._field_j9k5n_129 input,._field_j9k5n_129 select{height:42px;padding:0 12px}._field_j9k5n_129 select{padding-right:34px}._field_j9k5n_129 textarea{resize:vertical;min-height:220px;padding:12px 14px;line-height:1.55}._field_j9k5n_129 ._sizedTextarea_j9k5n_361{min-height:0}._field_j9k5n_129 ._autoGrowTextarea_j9k5n_365{resize:none;overflow-y:hidden}._field_j9k5n_129 input:focus,._field_j9k5n_129 select:focus,._field_j9k5n_129 textarea:focus{border-color:var(--brand-text);box-shadow:0 0 0 2px color-mix(in srgb, var(--brand-fill) 16%, transparent)}._preview_j9k5n_377{box-sizing:border-box;border:1px solid var(--separator);min-height:220px;color:var(--text);background:var(--surface);overflow-wrap:anywhere;border-radius:10px;padding:14px 16px}._preview_j9k5n_377 pre{white-space:pre-wrap;font:inherit;margin:0;line-height:1.55}._previewEmpty_j9k5n_395{color:var(--text-3);font-size:13px}._markdownPreview_j9k5n_400{box-sizing:border-box;border:1px solid var(--separator);min-height:220px;color:var(--text);background:var(--surface-2);overflow-wrap:anywhere;border-radius:10px;padding:14px 16px}._markdownPreview_j9k5n_400 pre{white-space:pre-wrap;font:13px/1.6 var(--font-mono,ui-monospace, SFMono-Regular, Menlo, monospace);margin:0}._downloadZone_j9k5n_417{box-sizing:border-box;border:1px solid var(--separator);min-height:72px;color:var(--text-2);background:var(--surface-2);border-radius:12px;align-items:center;gap:11px;padding:11px 12px;display:flex}._downloadEmpty_j9k5n_430{color:var(--text-3);font-size:13px}._downloadFileIcon_j9k5n_435{width:42px;height:42px;color:var(--brand-text);background:var(--surface);border-radius:9px;flex:none;justify-content:center;align-items:center;font-size:20px;display:inline-flex}._downloadDetails_j9k5n_448{flex-direction:column;flex:1;gap:3px;min-width:0;display:flex}._downloadName_j9k5n_456{color:var(--text);text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:650;overflow:hidden}._downloadDescription_j9k5n_465{color:var(--text-3);font-size:12px}._downloadButton_j9k5n_470{border:1px solid var(--separator);min-width:92px;height:36px;color:var(--text);background:var(--surface);font:inherit;cursor:pointer;border-radius:9px;padding:0 13px;font-size:12.5px;font-weight:650}._downloadButton_j9k5n_470:hover:not(:disabled),._downloadButton_j9k5n_470:focus-visible{border-color:var(--brand-text)}._downloadButton_j9k5n_470:disabled{cursor:not-allowed;opacity:.5}._primaryButton_j9k5n_494{min-width:112px;height:42px;color:var(--on-brand);background:var(--brand-fill);font:inherit;cursor:pointer;border:0;border-radius:10px;align-self:flex-start;padding:0 18px;font-weight:700}._secondaryButton_j9k5n_508{border:1px solid var(--separator);min-width:112px;height:42px;color:var(--text);background:var(--surface-2);font:inherit;cursor:pointer;border-radius:10px;align-self:flex-start;padding:0 18px;font-weight:650}._fieldAlignedButton_j9k5n_522{flex-direction:column;gap:8px;height:100%;display:flex}._fieldLabelSpacer_j9k5n_529{flex:0 0 18px}._fieldAlignedButton_j9k5n_522>._primaryButton_j9k5n_494,._fieldAlignedButton_j9k5n_522>._secondaryButton_j9k5n_508{flex:auto;align-self:stretch;height:auto}._primaryButton_j9k5n_494:disabled,._secondaryButton_j9k5n_508:disabled{cursor:not-allowed;opacity:.55}._text_j9k5n_546{color:var(--text-2);margin:0;line-height:1.55}._placeholder_j9k5n_552{max-width:420px;color:var(--text-3);text-align:center;margin:auto;padding:32px}._placeholderTitle_j9k5n_560{color:var(--text-2);font-size:20px;font-weight:700}._placeholderHint_j9k5n_566{margin-top:8px;font-size:13px;line-height:1.55}._appFooter_j9k5n_572{z-index:4;box-sizing:border-box;border-top:1px solid var(--separator);min-height:44px;color:var(--text-3);background:color-mix(in srgb, var(--content) 94%, transparent);-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px);flex:0 0 44px;justify-content:space-between;align-items:center;gap:16px;padding:0 18px;font-size:12px;display:flex;position:relative}._footerActions_j9k5n_590{justify-content:flex-end;align-items:center;gap:14px;min-width:0;display:flex}._footerStatus_j9k5n_598{color:var(--text-2);text-overflow:ellipsis;white-space:nowrap;animation:1.2s ease-in-out infinite _running-pulse_j9k5n_1;overflow:hidden}._footerButton_j9k5n_606,._activityActions_j9k5n_607 button{color:var(--text-2);font:inherit;cursor:pointer;background:0 0;border:0;border-radius:6px;padding:4px 8px;font-weight:650}._footerButton_j9k5n_606:hover:not(:disabled),._activityActions_j9k5n_607 button:hover{color:var(--text);background:var(--separator-soft)}._footerButton_j9k5n_606:disabled{cursor:not-allowed;opacity:.45}._activityButtonError_j9k5n_629{color:var(--danger)}._activityDrawer_j9k5n_633{z-index:3;border-top:1px solid var(--separator);background:var(--surface);flex-direction:column;max-height:min(50%,420px);animation:.14s ease-out _activity-enter_j9k5n_1;display:flex;position:absolute;bottom:44px;left:0;right:0;box-shadow:0 -12px 30px var(--lightningcss-light,#00000017)var(--lightningcss-dark,#00000059)}._activityHeader_j9k5n_648{box-sizing:border-box;border-bottom:1px solid var(--separator-soft);justify-content:space-between;align-items:center;gap:18px;min-height:62px;padding:12px 18px;display:flex}._activityHeader_j9k5n_648 h2{color:var(--text);margin:0;font-size:14px}._activityHeader_j9k5n_648 p{color:var(--text-3);margin:3px 0 0;font-size:11px}._activityActions_j9k5n_607{align-items:center;gap:4px;display:flex}._activityList_j9k5n_677{min-height:84px;padding:4px 18px 14px;overflow-y:auto}._activityEntry_j9k5n_683{border-bottom:1px solid var(--separator-soft);grid-template-columns:8px minmax(0,1fr);gap:10px;padding:11px 0;display:grid}._activityEntry_j9k5n_683:last-child{border-bottom:0}._activityDot_j9k5n_695{background:var(--text-3);border-radius:50%;width:7px;height:7px;margin-top:5px}._activity_success_j9k5n_703 ._activityDot_j9k5n_695{background:var(--ok)}._activity_warning_j9k5n_704 ._activityDot_j9k5n_695{background:#d99b20}._activity_error_j9k5n_705 ._activityDot_j9k5n_695{background:var(--danger)}._activityBody_j9k5n_707{min-width:0}._activityBody_j9k5n_707 p{white-space:pre-wrap}._activityTitleLine_j9k5n_715{justify-content:space-between;align-items:baseline;gap:16px;display:flex}._activityTitleLine_j9k5n_715 strong{color:var(--text-2);font-size:12px;font-weight:650}._activityTitleLine_j9k5n_715 time,._activityMetrics_j9k5n_729,._activityEmpty_j9k5n_730{color:var(--text-3);font-size:11px}._activityTitleLine_j9k5n_715 time{flex:none}._activityBody_j9k5n_707 p{color:var(--text-2);margin:5px 0 0;font-size:12px;line-height:1.45}._activity_error_j9k5n_705 ._activityBody_j9k5n_707 p{color:var(--danger)}._activityMetrics_j9k5n_729{margin-top:5px}._activityEmpty_j9k5n_730{text-align:center;padding:28px 0}@keyframes _activity-enter_j9k5n_1{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes _running-pulse_j9k5n_1{0%,to{opacity:.42}50%{opacity:1}}@media (prefers-reduced-motion:reduce){._activityDrawer_j9k5n_633,._footerStatus_j9k5n_598{animation:none}}@media (width<=760px){._scrollArea_j9k5n_12{overscroll-behavior-y:contain}._header_j9k5n_18,._appCanvas_j9k5n_19{width:calc(100% - 32px)}._header_j9k5n_18{padding:24px 0 18px}._header_j9k5n_18 h1{font-size:24px}._appCanvas_j9k5n_19{padding:20px 0 calc(40px + env(safe-area-inset-bottom))}._field_j9k5n_129 input,._field_j9k5n_129 select,._field_j9k5n_129 textarea{font-size:16px}._primaryButton_j9k5n_494,._secondaryButton_j9k5n_508{min-height:44px}}@container (width<=620px){._stackResponsive_j9k5n_809{flex-direction:column}._stackResponsive_j9k5n_809 ._fieldAlignedButton_j9k5n_522{gap:0;height:auto}._stackResponsive_j9k5n_809 ._fieldLabelSpacer_j9k5n_529{display:none}._stackResponsive_j9k5n_809 ._fieldAlignedButton_j9k5n_522>._primaryButton_j9k5n_494,._stackResponsive_j9k5n_809 ._fieldAlignedButton_j9k5n_522>._secondaryButton_j9k5n_508{flex:0 0 44px}}._pane_16mmi_1{background:var(--canvas);flex-direction:column;width:100%;height:100%;animation:.16s ease-out _sidebarPopIn_16mmi_1;display:flex;overflow:hidden}._header_16mmi_11{letter-spacing:.08em;text-transform:uppercase;color:var(--text-3);justify-content:space-between;align-items:center;padding:14px 16px 8px;font-size:11px;font-weight:600;display:flex}._searchWrap_16mmi_23{height:30px;color:var(--text-3);background:var(--separator-soft);border:1px solid #0000;border-radius:8px;align-items:center;gap:6px;margin:10px 10px 2px;padding:0 8px;display:flex}._searchWrap_16mmi_23:focus-within{border-color:var(--brand);background:var(--surface)}._searchInput_16mmi_41{width:100%;min-width:0;color:var(--text);background:0 0;border:0;outline:0;font-size:13px}._searchInput_16mmi_41::placeholder{color:var(--text-3)}._newButton_16mmi_55{width:22px;height:22px;color:var(--text-2);border-radius:6px;justify-content:center;align-items:center;font-size:15px;display:inline-flex}._newButton_16mmi_55:hover{background:var(--separator-soft);color:var(--text)}._list_16mmi_71{flex-direction:column;flex:1;gap:2px;min-height:0;padding:0 8px 12px;display:flex;overflow-y:auto}._empty_16mmi_81{color:var(--text-3);padding:10px;font-size:12px}._row_16mmi_87,._rowSelected_16mmi_88{border-radius:var(--radius-md);align-items:center;display:flex;position:relative}._row_16mmi_87:hover{background:var(--separator-soft)}._rowSelected_16mmi_88{background:var(--brand-tint)}._rowMain_16mmi_103{text-align:left;flex:1;align-items:center;gap:10px;min-width:0;padding:6px 34px 6px 8px;display:flex}._meta_16mmi_113{flex-direction:column;flex:1;gap:1px;min-width:0;display:flex}._nameLine_16mmi_121{align-items:center;gap:4px;min-width:0;display:flex}._name_16mmi_121{white-space:nowrap;text-overflow:ellipsis;min-width:0;font-size:14px;font-weight:600;overflow:hidden}._sub_16mmi_137,._working_16mmi_138{min-width:0;color:var(--text-3);white-space:nowrap;text-overflow:ellipsis;font-size:11.5px;display:block;overflow:hidden}._working_16mmi_138{color:var(--brand-text)}._pinIndicator_16mmi_152{width:15px;height:15px;color:var(--text-3);flex:none;justify-content:center;align-items:center;display:inline-flex}._activityTime_16mmi_162{color:var(--text-3);white-space:nowrap;flex:none;margin-left:auto;font-size:11.5px;font-weight:400}._moreButton_16mmi_171{width:26px;height:26px;color:var(--text-2);opacity:0;border-radius:7px;justify-content:center;align-items:center;display:inline-flex;position:absolute;top:50%;right:7px;transform:translateY(-50%)}._row_16mmi_87:hover ._moreButton_16mmi_171,._rowSelected_16mmi_88 ._moreButton_16mmi_171,._moreButton_16mmi_171:focus-visible,._moreButton_16mmi_171[aria-expanded=true]{opacity:1}._moreButton_16mmi_171:hover{background:color-mix(in srgb, var(--text) 8%, transparent);color:var(--text)}._actionMenu_16mmi_198{z-index:80;background:var(--surface);border:1px solid var(--separator);border-radius:var(--radius-md);width:168px;box-shadow:var(--shadow-sheet);padding:5px;position:fixed}._menuItem_16mmi_209{text-align:left;border-radius:7px;align-items:center;gap:9px;width:100%;min-height:34px;padding:6px 8px;font-size:13px;display:flex}._menuItem_16mmi_209:hover{background:var(--separator-soft)}._menuItem_16mmi_209:disabled{opacity:.55;cursor:default}@keyframes _sidebarPopIn_16mmi_1{0%{opacity:.7;transform:translate(-12px)}}@media (prefers-reduced-motion:reduce){._pane_16mmi_1{animation:none}}@media (width<=899px){._pane_16mmi_1{background:var(--content)}._searchWrap_16mmi_23{border-radius:11px;height:38px;margin:8px 16px 6px;padding:0 12px}._searchInput_16mmi_41{font-size:16px}._header_16mmi_11{min-height:40px;padding:10px 20px 6px;font-size:12px}._newButton_16mmi_55{width:36px;height:36px;color:var(--brand-text);margin:-8px -8px -8px 0;font-size:24px}._list_16mmi_71{gap:0;padding:0 0 12px}._row_16mmi_87,._rowSelected_16mmi_88{background:var(--content);border-radius:0;min-height:64px}._row_16mmi_87+._row_16mmi_87,._rowSelected_16mmi_88+._row_16mmi_87,._row_16mmi_87+._rowSelected_16mmi_88,._rowSelected_16mmi_88+._rowSelected_16mmi_88{border-top:1px solid var(--separator-soft)}._rowMain_16mmi_103{gap:12px;min-height:64px;padding:8px 50px 8px 16px}._name_16mmi_121{font-size:16px}._sub_16mmi_137,._working_16mmi_138,._activityTime_16mmi_162{font-size:13px}._moreButton_16mmi_171{opacity:1;width:40px;height:40px;right:8px}._empty_16mmi_81{padding:24px 20px;font-size:14px}}._rowMain_jrjsp_1{padding-right:8px}._banner_oi411_1{background:var(--brand-tint);border-radius:var(--radius-lg);align-items:flex-start;gap:10px;max-width:760px;margin:12px auto 0;padding:10px 14px;display:flex}._rows_oi411_12{flex-direction:column;flex:1;gap:4px;min-width:0;display:flex}._row_oi411_12{align-items:center;gap:10px;display:flex}._text_oi411_26{min-width:0;color:var(--text);flex:1;font-size:12.5px}._show_oi411_33{color:var(--brand-text);flex-shrink:0;font-size:12px;font-weight:700}._dismiss_oi411_40{color:var(--text-3);flex-shrink:0;padding:2px 4px;font-size:12px}._dismiss_oi411_40:hover{color:var(--text)}._backdrop_1yoy1_1{z-index:1000;cursor:zoom-out;background:#000000b8;justify-content:center;align-items:center;padding:48px 84px;display:flex;position:fixed;inset:0}._stage_1yoy1_13{cursor:default;max-width:min(92vw,1600px);max-height:88vh;position:relative}._image_1yoy1_20{border-radius:var(--radius-md);object-fit:contain;max-width:100%;max-height:88vh;display:block;box-shadow:0 20px 70px #00000073}._loading_1yoy1_29{color:#ffffffc7;place-items:center;min-width:220px;min-height:140px;font-size:14px;display:grid}._close_1yoy1_38,._arrow_1yoy1_39{color:#fff;background:#ffffff24;border-radius:999px;justify-content:center;align-items:center;display:inline-flex}._close_1yoy1_38:hover,._close_1yoy1_38:focus-visible,._arrow_1yoy1_39:hover,._arrow_1yoy1_39:focus-visible{background:#ffffff42}._close_1yoy1_38{width:36px;height:36px;font-size:25px;line-height:1;position:fixed;top:18px;right:20px}._arrow_1yoy1_39{width:44px;height:44px;position:fixed;top:50%;transform:translateY(-50%)}._previous_1yoy1_73{left:22px}._next_1yoy1_77{right:22px}._counter_1yoy1_81{color:#fff;background:#0000008c;border-radius:999px;padding:4px 9px;font-size:12px;line-height:1.2;position:absolute;bottom:12px;left:50%;transform:translate(-50%)}@media (width<=640px){._backdrop_1yoy1_1{padding:56px 16px 72px}._arrow_1yoy1_39{top:auto;bottom:16px;transform:none}._previous_1yoy1_73{left:calc(50% - 54px)}._next_1yoy1_77{right:calc(50% - 54px)}}._wrap_142kx_1{padding:12px 20px 16px}._bar_142kx_8{background:var(--surface);border:1px solid var(--separator);border-radius:var(--radius-lg);max-width:760px;box-shadow:var(--shadow-card);flex-direction:column;align-items:stretch;gap:6px;margin:0 auto;padding:10px 12px 10px 16px;display:flex}._bottomRow_142kx_22{align-items:center;gap:6px;display:flex}._bar_142kx_8:focus-within{border-color:var(--brand-fill)}._inputWrap_142kx_35{min-width:0;position:relative}._highlight_142kx_42,._input_142kx_35{letter-spacing:normal;word-spacing:normal;tab-size:4;margin:0;padding:3px 0;font-family:inherit;font-size:14px;font-weight:400;line-height:20px}._highlight_142kx_42{white-space:pre-wrap;overflow-wrap:break-word;word-break:break-word;color:var(--text);pointer-events:none;position:absolute;inset:0;overflow:hidden}._input_142kx_35{appearance:none;resize:none;color:#0000;width:100%;max-height:160px;caret-color:var(--text);white-space:pre-wrap;overflow-wrap:break-word;word-break:break-word;scrollbar-width:none;background:0 0;border:none;outline:none;display:block;position:relative}._input_142kx_35::-webkit-scrollbar{display:none}._input_142kx_35::placeholder{color:var(--text-3);-webkit-text-fill-color:var(--text-3)}._skillToken_142kx_98{color:var(--brand-text);font-weight:inherit}._menu_142kx_106{background:var(--surface);border:1px solid var(--separator);border-radius:var(--radius-md);max-height:260px;box-shadow:var(--shadow-sheet);z-index:20;padding:4px;position:absolute;bottom:calc(100% + 10px);left:-8px;right:-8px;overflow-y:auto}._menuItem_142kx_121,._menuItemActive_142kx_122{border-radius:var(--radius-sm);cursor:pointer;flex-direction:column;gap:1px;padding:6px 10px;display:flex}._menuItemActive_142kx_122{background:var(--brand-tint)}._menuName_142kx_135{color:var(--brand-text);font-size:12.5px;font-weight:600;font-family:var(--font-mono,ui-monospace, monospace)}._menuDesc_142kx_142{color:var(--text-3);text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}._controls_142kx_150{align-items:center;gap:6px;margin-left:auto;display:flex}._pill_142kx_158,._pillActive_142kx_159{border-radius:999px;padding:4px 12px;font-size:12px;font-weight:600}._pill_142kx_158{background:var(--surface-2);color:var(--text-2)}._pill_142kx_158:hover{color:var(--text)}._pillActive_142kx_159{background:var(--brand-tint);color:var(--brand-text)}._modelChip_142kx_180{background:var(--surface-2);color:var(--text-2);cursor:pointer;white-space:nowrap;border-radius:999px;align-items:center;gap:4px;max-width:180px;padding:4px 12px;font-size:12px;font-weight:600;display:inline-flex;position:relative}._modelChip_142kx_180>span:first-child{text-overflow:ellipsis;overflow:hidden}._modelSelect_142kx_201{opacity:0;cursor:pointer;position:absolute;inset:0}._send_142kx_208,._stop_142kx_209{border-radius:50%;justify-content:center;align-items:center;width:30px;height:30px;display:inline-flex}._send_142kx_208{background:var(--brand-fill);color:var(--on-brand);box-shadow:0 1px 3px var(--brand-shadow);font-size:15px;font-weight:700}._send_142kx_208:disabled{opacity:.45;cursor:default}._stop_142kx_209{background:var(--text);color:var(--surface);box-shadow:var(--shadow-card)}._stop_142kx_209:hover{opacity:.82}._stopIcon_142kx_241{background:currentColor;border-radius:2px;width:9px;height:9px}._attach_142kx_248{width:28px;height:28px;color:var(--text-2);background:var(--surface-2);border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;font-size:17px;display:inline-flex}._attach_142kx_248:hover{color:var(--text);background:var(--separator-soft)}@media (width<=899px){._wrap_142kx_1{padding:8px 8px calc(8px + env(safe-area-inset-bottom));background:color-mix(in srgb, var(--content) 94%, transparent);flex-shrink:0}._bar_142kx_8{border-radius:22px;width:100%;padding:9px 10px 9px 14px}._highlight_142kx_42,._input_142kx_35{font-size:16px;line-height:22px}._bottomRow_142kx_22,._controls_142kx_150{gap:4px}._pill_142kx_158,._pillActive_142kx_159,._modelChip_142kx_180{min-height:34px;padding:6px 10px;font-size:13px}._modelChip_142kx_180{max-width:min(132px,34vw)}._send_142kx_208,._stop_142kx_209,._attach_142kx_248{width:38px;height:38px}._menu_142kx_106{max-height:min(300px,42vh)}}@media (width<=360px){._pill_142kx_158,._pillActive_142kx_159{padding-inline:8px}._modelChip_142kx_180{max-width:108px;padding-inline:8px}}._fileInput_142kx_326{display:none}._chips_142kx_330{flex-wrap:wrap;gap:6px;max-width:760px;margin:0 auto 8px;display:flex}._chip_142kx_330{border-radius:var(--radius-md);background:var(--surface);border:1px solid var(--separator);color:var(--text-2);align-items:center;gap:6px;max-width:240px;padding:4px 6px 4px 4px;font-size:12px;display:inline-flex}._chipThumb_142kx_351{border-radius:var(--radius-sm);object-fit:cover;width:28px;height:28px}._officeFileIcon_142kx_358{width:22px;height:22px;color:var(--brand-text);background:var(--brand-tint);border-radius:5px;flex-shrink:0;justify-content:center;align-items:center;font-size:11px;font-weight:700;display:inline-flex}._chipPreviewButton_142kx_372{border-radius:var(--radius-sm);cursor:zoom-in;flex-shrink:0}._chipPreviewButton_142kx_372:focus-visible{outline:2px solid var(--brand-fill);outline-offset:2px}._chipName_142kx_383{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}._chipRemove_142kx_389{color:var(--text-3);padding:0 2px;font-size:14px;line-height:1}._chipRemove_142kx_389:hover{color:var(--danger)}._pane_1kvbj_1{background:var(--canvas);flex-direction:column;width:100%;height:100%;animation:.16s ease-out _sidebarPushIn_1kvbj_1;display:flex;overflow:hidden}._profileHeader_1kvbj_11{align-items:center;gap:8px;min-height:52px;padding:8px 12px 6px 8px;display:flex}._profileHero_1kvbj_19{flex-direction:column;align-items:center;gap:8px;padding:10px 16px 12px;display:flex}._profileAvatarButton_1kvbj_27{cursor:pointer;border-radius:50%;display:inline-flex}._profileAvatarButton_1kvbj_27:focus-visible{outline:2px solid var(--brand-fill);outline-offset:3px}._backButton_1kvbj_38{border-radius:var(--radius-sm);width:28px;height:28px;color:var(--text-2);flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}._backButton_1kvbj_38:hover{background:var(--separator-soft);color:var(--text)}._headerTitle_1kvbj_54{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:14px;font-weight:650;overflow:hidden}._profileName_1kvbj_63{text-overflow:ellipsis;white-space:nowrap;max-width:100%;font-size:16px;font-weight:650;overflow:hidden}._header_1kvbj_54{letter-spacing:.08em;text-transform:uppercase;color:var(--text-3);justify-content:space-between;align-items:center;padding:14px 16px 8px;font-size:11px;font-weight:600;display:flex}._archiveFilter_1kvbj_84,._archiveFilterActive_1kvbj_85{color:inherit;font:inherit;letter-spacing:inherit;text-transform:inherit;border-radius:6px;margin-left:-5px;padding:3px 5px}._archiveFilter_1kvbj_84:hover,._archiveFilterActive_1kvbj_85{color:var(--text-2);background:var(--separator-soft)}._searchWrap_1kvbj_101{height:30px;color:var(--text-3);background:var(--separator-soft);border:1px solid #0000;border-radius:8px;align-items:center;gap:6px;margin:0 10px 8px;padding:0 8px;display:flex}._searchWrap_1kvbj_101:focus-within{border-color:var(--brand);background:var(--surface)}._searchInput_1kvbj_119{width:100%;min-width:0;color:var(--text);background:0 0;border:0;outline:0;font-size:13px}._searchInput_1kvbj_119::placeholder{color:var(--text-3)}._newButton_1kvbj_133{width:22px;height:22px;color:var(--text-2);border-radius:6px;justify-content:center;align-items:center;font-size:15px;display:inline-flex}._newButton_1kvbj_133:hover{background:var(--separator-soft);color:var(--text)}._list_1kvbj_149{flex-direction:column;flex:1;gap:2px;min-height:0;padding:0 8px 12px;display:flex;overflow-y:auto}._empty_1kvbj_159{color:var(--text-3);padding:10px;font-size:12px}._row_1kvbj_165,._rowSelected_1kvbj_166{border-radius:var(--radius-md);align-items:center;display:flex;position:relative}._row_1kvbj_165:hover{background:var(--separator-soft)}._rowSelected_1kvbj_166{background:var(--brand-tint)}._rowMain_1kvbj_181{text-align:left;flex-direction:column;flex:1;gap:2px;min-width:0;padding:8px 34px 8px 10px;display:flex}._titleLine_1kvbj_191{align-items:center;gap:4px;min-width:0;display:flex}._title_1kvbj_191{white-space:nowrap;text-overflow:ellipsis;min-width:0;font-size:14px;font-weight:600;overflow:hidden}._pinIndicator_1kvbj_207{width:15px;height:15px;color:var(--text-3);flex:none;justify-content:center;align-items:center;display:inline-flex}._sub_1kvbj_217{color:var(--text-3);font-size:11.5px}._moreButton_1kvbj_222{width:26px;height:26px;color:var(--text-2);opacity:0;border-radius:7px;justify-content:center;align-items:center;display:inline-flex;position:absolute;top:50%;right:7px;transform:translateY(-50%)}._row_1kvbj_165:hover ._moreButton_1kvbj_222,._rowSelected_1kvbj_166 ._moreButton_1kvbj_222,._moreButton_1kvbj_222:focus-visible,._moreButton_1kvbj_222[aria-expanded=true]{opacity:1}._moreButton_1kvbj_222:hover{background:color-mix(in srgb, var(--text) 8%, transparent);color:var(--text)}._actionMenu_1kvbj_249{z-index:80;background:var(--surface);border:1px solid var(--separator);border-radius:var(--radius-md);width:184px;box-shadow:var(--shadow-sheet);padding:5px;position:fixed}._menuItem_1kvbj_260,._menuItemDanger_1kvbj_261{text-align:left;border-radius:7px;align-items:center;gap:9px;width:100%;min-height:34px;padding:6px 8px;font-size:13px;display:flex}._menuItem_1kvbj_260:hover{background:var(--separator-soft)}._menuItemDanger_1kvbj_261{color:var(--danger)}._menuItemDanger_1kvbj_261:hover{background:color-mix(in srgb, var(--danger) 10%, transparent)}._menuItem_1kvbj_260:disabled,._menuItemDanger_1kvbj_261:disabled{opacity:.55;cursor:default}._menuSeparator_1kvbj_291{background:var(--separator);height:1px;margin:4px 3px}._dialogBackdrop_1kvbj_297{z-index:90;-webkit-backdrop-filter:blur(1px);backdrop-filter:blur(1px);background:#0000005c;place-items:center;padding:24px;display:grid;position:fixed;inset:0}._dialog_1kvbj_297{background:var(--surface);border:1px solid var(--separator);border-radius:var(--radius-lg);width:min(380px,100%);box-shadow:var(--shadow-sheet);flex-direction:column;gap:14px;padding:18px;display:flex}._dialogTitle_1kvbj_320{font-size:16px;font-weight:700}._dialogDescription_1kvbj_325{color:var(--text-2);overflow-wrap:anywhere;font-size:13px;line-height:1.45}._renameInput_1kvbj_332{background:var(--surface-2);border:1px solid var(--separator);border-radius:var(--radius-sm);width:100%;padding:8px 10px}._renameInput_1kvbj_332:focus{outline:2px solid var(--brand-tint);border-color:var(--brand-fill)}._dialogActions_1kvbj_345{justify-content:flex-end;gap:8px;display:flex}._dialogCancel_1kvbj_351,._dialogPrimary_1kvbj_352,._dialogDelete_1kvbj_353{border-radius:8px;min-width:76px;padding:7px 13px;font-weight:600}._dialogCancel_1kvbj_351{color:var(--text-2);background:var(--surface-2)}._dialogPrimary_1kvbj_352{color:var(--on-brand);background:var(--brand-fill)}._dialogDelete_1kvbj_353{color:#fff;background:var(--danger)}._dialogCancel_1kvbj_351:disabled,._dialogPrimary_1kvbj_352:disabled,._dialogDelete_1kvbj_353:disabled{opacity:.55;cursor:default}@keyframes _sidebarPushIn_1kvbj_1{0%{opacity:.7;transform:translate(12px)}}@media (prefers-reduced-motion:reduce){._pane_1kvbj_1{animation:none}}@media (width<=899px){._pane_1kvbj_1{background:var(--content)}._profileHeader_1kvbj_11{min-height:calc(48px + env(safe-area-inset-top));padding:env(safe-area-inset-top) 12px 0 8px;border-bottom:1px solid var(--separator-soft);background:color-mix(in srgb, var(--content) 92%, transparent)}._backButton_1kvbj_38{width:44px;height:44px;color:var(--brand-text)}._headerTitle_1kvbj_54{font-size:16px}._profileHero_1kvbj_19{padding:14px 16px 12px}._header_1kvbj_54{min-height:40px;padding:8px 20px 4px;font-size:12px}._newButton_1kvbj_133{width:36px;height:36px;color:var(--brand-text);margin:-8px -8px -8px 0;font-size:24px}._searchWrap_1kvbj_101{border-radius:11px;height:38px;margin:4px 16px 8px;padding:0 12px}._searchInput_1kvbj_119{font-size:16px}._list_1kvbj_149{gap:0;padding:0 0 12px}._row_1kvbj_165,._rowSelected_1kvbj_166{background:var(--content);border-radius:0;min-height:58px}._row_1kvbj_165+._row_1kvbj_165,._rowSelected_1kvbj_166+._row_1kvbj_165,._row_1kvbj_165+._rowSelected_1kvbj_166,._rowSelected_1kvbj_166+._rowSelected_1kvbj_166{border-top:1px solid var(--separator-soft)}._rowMain_1kvbj_181{min-height:58px;padding:8px 50px 8px 18px}._title_1kvbj_191{font-size:16px}._sub_1kvbj_217{font-size:13px}._moreButton_1kvbj_222{opacity:1;width:40px;height:40px;right:8px}}._control_1m6ib_1{background:var(--separator-soft);border-radius:var(--radius-md);gap:2px;padding:2px;display:inline-flex}._segment_1m6ib_9,._selected_1m6ib_10{color:var(--text-2);border-radius:8px;padding:4px 16px;font-size:13px;transition:color .12s}@media (width<=899px){._control_1m6ib_1{width:100%;min-height:36px}._segment_1m6ib_9,._selected_1m6ib_10{flex:1;justify-content:center;align-items:center;min-height:32px;padding:6px 16px;font-size:14px;display:inline-flex}}._segment_1m6ib_9:hover{color:var(--text)}._selected_1m6ib_10{background:var(--surface);color:var(--text);box-shadow:var(--shadow-card);font-weight:600}._bar_ghxay_1{border-bottom:1px solid var(--separator-soft);background:color-mix(in srgb, var(--content) 94%, transparent);grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:12px;min-height:45px;padding:7px 14px;display:grid}._leading_ghxay_12,._trailing_ghxay_13{align-items:center;gap:12px;min-width:0;display:flex}._trailing_ghxay_13{justify-content:flex-end}._toggle_79vby_1{border-radius:var(--radius-sm);width:28px;height:28px;color:var(--text-2);flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}._toggle_79vby_1:hover{background:var(--separator-soft);color:var(--text)}._session_79vby_17{white-space:nowrap;text-overflow:ellipsis;min-width:0;font-size:13px;font-weight:600;overflow:hidden}._card_1pbcr_1,._cardRunning_1pbcr_2{background:var(--surface);border:1px solid var(--separator);border-radius:var(--radius-lg);flex-direction:column;gap:8px;padding:12px 14px;display:flex}._cardRunning_1pbcr_2{border-color:var(--brand-tint);outline:3px solid var(--brand-tint)}._statusLine_1pbcr_18{align-items:center;gap:10px;font-size:13px;display:flex}._spinner_1pbcr_25{border:2px solid var(--brand-tint);border-top-color:var(--brand-fill);border-radius:50%;flex-shrink:0;width:10px;height:10px;animation:.9s linear infinite _spin_1pbcr_25}@keyframes _spin_1pbcr_25{to{transform:rotate(360deg)}}._statusText_1pbcr_41{white-space:nowrap;text-overflow:ellipsis;flex:1;min-width:0;font-weight:600;overflow:hidden}._elapsed_1pbcr_50{font-variant-numeric:tabular-nums;color:var(--text-3);font-size:12px}._cancel_1pbcr_56{color:var(--brand-text);font-size:12.5px;font-weight:600}._cancel_1pbcr_56:hover{color:var(--danger)}._footerLine_1pbcr_66{color:var(--text-2);text-align:left;align-items:center;gap:8px;font-size:12.5px;display:flex}._footerText_1pbcr_75{flex:1;min-width:0}._footerToggle_1pbcr_80{color:var(--text-3);font-size:12px}._glyphOk_1pbcr_85{color:var(--ok);font-weight:700}._glyphError_1pbcr_90{color:var(--danger);font-weight:700}._glyphNeutral_1pbcr_95{color:var(--text-3);font-weight:700}._details_1pbcr_100{flex-direction:column;gap:6px;display:flex}._plan_1pbcr_106{flex-direction:column;gap:3px;margin:0;padding:0;list-style:none;display:flex}._planStep_1pbcr_115{color:var(--text-2);gap:8px;font-size:12.5px;display:flex}._stepDone_1pbcr_122{color:var(--ok)}._stepPending_1pbcr_126{color:var(--text-3)}._rows_1pbcr_130{flex-direction:column;gap:2px;display:flex}._toolRow_1pbcr_136{align-items:baseline;gap:8px;padding:2px 0;font-size:12.5px;display:flex}._rowRunning_1pbcr_144{color:var(--brand-text)}._rowDone_1pbcr_148{color:var(--ok)}._rowError_1pbcr_152{color:var(--danger)}._rowTool_1pbcr_156{font-family:var(--font-mono);color:var(--text-2);flex-shrink:0;font-size:11.5px}._rowSummary_1pbcr_163{color:var(--text-2);text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}._artifacts_1pbcr_171{flex-direction:column;gap:4px;padding-top:2px;display:flex}._artifact_1pbcr_171{border:1px solid var(--separator);border-radius:var(--radius-md);background:var(--surface-2);width:100%;color:var(--brand-text);text-align:left;align-items:center;gap:8px;padding:7px 9px;font-size:12.5px;display:flex}._artifact_1pbcr_171:hover:not(:disabled){border-color:var(--brand-fill)}._artifact_1pbcr_171:disabled{opacity:.55}._artifactName_1pbcr_200{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--text-1);flex:1;overflow:hidden}._artifactAction_1pbcr_209{color:var(--brand-text);font-weight:600}._artifactSize_1pbcr_214{color:var(--text-3);font-variant-numeric:tabular-nums}._steeringPill_1pbcr_219{color:var(--text-2);background:var(--surface-2);border-radius:999px;align-self:flex-start;padding:4px 12px;font-size:12px}._denial_1pbcr_228{color:var(--brand-text);font-size:12.5px}._error_1pbcr_233{color:var(--danger);font-size:12.5px;font-family:var(--font-mono)}._answers_1pbcr_239{border-radius:var(--radius-md);background:var(--surface-2);flex-direction:column;gap:4px;padding:7px 9px;display:flex}._answerRow_1pbcr_248{grid-template-columns:minmax(100px,1fr) minmax(100px,1fr);gap:10px;font-size:12px;display:grid}._answerQuestion_1pbcr_255{color:var(--text-3)}._answerValue_1pbcr_259{color:var(--text-2);font-weight:600}._scroll_h4j38_1{flex:1;min-height:0;overflow-y:auto}._thread_h4j38_7{flex-direction:column;gap:14px;max-width:760px;margin:0 auto;padding:24px 20px 12px;font-size:16px;display:flex}._empty_h4j38_17{text-align:center;color:var(--text-3);margin:auto;padding-top:18vh}._emptyTitle_h4j38_24{color:var(--text-2);font-size:20px;font-weight:700}._emptyHint_h4j38_30{margin-top:6px;font-size:13px}._userTurn_h4j38_35{flex-direction:column;align-self:flex-end;align-items:flex-end;gap:6px;max-width:78%;display:flex}._userTurnEditing_h4j38_44{align-self:stretch;width:100%;max-width:none}._userAttachments_h4j38_50{flex-wrap:wrap;justify-content:flex-end;gap:6px;display:flex}._userImage_h4j38_57{border-radius:var(--radius-md);border:1px solid var(--separator-soft);object-fit:cover;max-width:220px;max-height:160px;display:block}._userImagePlaceholder_h4j38_66{border:1px solid var(--separator-soft);border-radius:var(--radius-md);background:var(--separator-soft);width:160px;height:120px;display:block}._userImageButton_h4j38_75{border-radius:var(--radius-md);cursor:zoom-in}._userImageButton_h4j38_75:focus-visible{outline:2px solid var(--brand-fill);outline-offset:2px}._userFile_h4j38_85{border-radius:var(--radius-md);background:var(--surface);border:1px solid var(--separator);color:var(--text-2);align-items:center;gap:6px;padding:5px 10px;font-size:12px;display:inline-flex}._userBubble_h4j38_97{background:var(--surface-3);border-radius:var(--radius-lg);white-space:pre-wrap;overflow-wrap:break-word;padding:9px 14px;font-size:16px}._userActions_h4j38_106{opacity:0;pointer-events:none;justify-content:flex-end;align-items:center;gap:2px;min-height:28px;transition:opacity .12s;display:flex}._userTurn_h4j38_35:hover ._userActions_h4j38_106,._userTurn_h4j38_35:focus-within ._userActions_h4j38_106{opacity:1;pointer-events:auto}._userActionButton_h4j38_123{border-radius:var(--radius-sm);width:28px;height:28px;color:var(--text-3);flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}._userActionButton_h4j38_123:hover,._userActionButton_h4j38_123:focus-visible{background:var(--separator-soft);color:var(--text)}@media (hover:none){._userActions_h4j38_106{opacity:1;pointer-events:auto}}._userEditor_h4j38_147{border-radius:var(--radius-lg);background:var(--surface-3);width:100%;padding:16px 16px 12px}._userEditorInput_h4j38_154{resize:none;width:100%;min-height:24px;max-height:320px;color:var(--text);font:inherit;white-space:pre-wrap;overflow-wrap:break-word;background:0 0;border:0;outline:0;padding:0;font-size:16px;line-height:1.5;display:block;overflow-y:auto}._userEditorActions_h4j38_173{justify-content:flex-end;gap:8px;margin-top:14px;display:flex}._editorCancel_h4j38_180,._editorSend_h4j38_181{border:1px solid var(--separator);border-radius:999px;min-height:34px;padding:6px 16px;font-size:14px;font-weight:600}._editorCancel_h4j38_180{background:var(--surface);color:var(--text)}._editorSend_h4j38_181{border-color:var(--text);background:var(--text);color:var(--surface)}._editorCancel_h4j38_180:hover:not(:disabled){background:var(--separator-soft)}._editorSend_h4j38_181:hover:not(:disabled){opacity:.82}._editorCancel_h4j38_180:disabled,._editorSend_h4j38_181:disabled{opacity:.45;cursor:default}._skillToken_h4j38_215{color:var(--brand-text);font-weight:600}._assistant_h4j38_220{align-self:stretch}._downloadError_h4j38_224{color:var(--danger);margin-top:4px;font-size:12px}._cursor_h4j38_230{vertical-align:text-bottom;background:var(--brand-fill);border-radius:2px;width:7px;height:14px;margin-left:3px;animation:1s step-end infinite _blink_h4j38_1;display:inline-block}@keyframes _blink_h4j38_1{50%{opacity:0}}._notice_h4j38_247{background:var(--surface-2);color:var(--text-2);border-radius:999px;align-self:center;padding:5px 12px;font-size:12px}._noticeBlock_h4j38_257{border-radius:var(--radius-md);white-space:pre-line;text-align:left;align-self:stretch;width:100%;max-width:760px;margin:0 auto;padding:10px 14px;line-height:1.55}._notice_warn_h4j38_269{color:var(--brand-text)}._notice_error_h4j38_273{color:var(--danger)}._notice_info_h4j38_277{color:var(--text-2)}._responseFooter_h4j38_282{justify-content:flex-start;align-items:center;gap:8px;min-height:28px;margin-top:6px;display:flex}._meta_h4j38_291{color:var(--text-3);font-size:12px}._responseCopyButton_h4j38_296{border-radius:var(--radius-sm);width:28px;height:28px;color:var(--text-3);flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}._responseCopyButton_h4j38_296:hover,._responseCopyButton_h4j38_296:focus-visible{background:var(--separator-soft);color:var(--text)}._thinking_h4j38_314{align-items:center;gap:12px;font-size:13px;display:flex}._thinkingLabel_h4j38_321{background:linear-gradient(90deg, var(--text-3) 35%, var(--text) 50%, var(--text-3) 65%);color:#0000;background-size:200% 100%;-webkit-background-clip:text;background-clip:text;animation:1.8s linear infinite _shimmer_h4j38_1}@keyframes _shimmer_h4j38_1{to{background-position:-200% 0}}._cancelLink_h4j38_336{color:var(--brand-text);font-size:12px;font-weight:600}@media (width<=899px){._scroll_h4j38_1{overscroll-behavior-y:contain}._thread_h4j38_7{gap:16px;width:100%;padding:18px 13px 10px}._empty_h4j38_17{padding:18vh 24px 0}._userTurn_h4j38_35{max-width:88%}._userBubble_h4j38_97{padding:9px 13px}._userImage_h4j38_57{max-width:min(260px,72vw);height:auto}._userActions_h4j38_106{opacity:1;pointer-events:auto}._userActionButton_h4j38_123,._responseCopyButton_h4j38_296{width:40px;height:40px}}._layout_8mym6_1{flex:1;min-height:0;display:flex}._mobileNavigation_8mym6_7{flex:1;min-width:0;min-height:0}._threadPane_8mym6_13{background:var(--content);flex-direction:column;flex:1;min-width:0;display:flex;position:relative}._threadPane_8mym6_13[hidden]{display:none}._appsPane_8mym6_26{flex:1;min-width:0;min-height:0;display:flex}._appsPane_8mym6_26[hidden]{display:none}._dropOverlay_8mym6_37{z-index:10;border:2px dashed var(--brand-fill);border-radius:var(--radius-lg);background:var(--brand-tint);color:var(--brand-text);pointer-events:none;justify-content:center;align-items:center;font-size:15px;font-weight:600;display:flex;position:absolute;inset:8px}._chooseProfile_8mym6_53{text-align:center;max-width:380px;color:var(--text-3);margin:auto;padding:24px}._chooseTitle_8mym6_61{color:var(--text-2);font-size:20px;font-weight:700}._chooseHint_8mym6_67{margin-top:6px;font-size:13px;line-height:1.55}@media (width<=899px){._layout_8mym6_1,._mobileNavigation_8mym6_7,._threadPane_8mym6_13{width:100%}._layout_8mym6_1{background:var(--canvas);overflow:hidden}._mobileNavigation_8mym6_7,._threadPane_8mym6_13{animation:.18s ease-out _mobilePushIn_8mym6_1}._dropOverlay_8mym6_37{display:none}}@keyframes _mobilePushIn_8mym6_1{0%{opacity:.72;transform:translate(18px)}}@media (prefers-reduced-motion:reduce){._mobileNavigation_8mym6_7,._threadPane_8mym6_13{animation:none}}._backdrop_124u2_1{z-index:90;-webkit-backdrop-filter:blur(1px);backdrop-filter:blur(1px);background:#0000005c;place-items:center;padding:24px;display:grid;position:fixed;inset:0}._sheet_124u2_12{background:var(--surface);border:1px solid var(--separator);border-radius:var(--radius-lg);width:min(520px,100%);max-height:min(680px,100vh - 48px);box-shadow:var(--shadow-sheet);flex-direction:column;display:flex;overflow:hidden}._header_124u2_24{border-bottom:1px solid var(--separator-soft);flex:none;justify-content:space-between;align-items:flex-start;gap:16px;padding:18px 20px 14px;display:flex}._title_124u2_34{font-size:16px;font-weight:700}._subtitle_124u2_39{color:var(--text-3);margin-top:3px;font-size:12px}._close_124u2_45{width:28px;height:28px;color:var(--text-2);border-radius:7px;place-items:center;font-size:20px;line-height:1;display:grid}._close_124u2_45:hover{color:var(--text);background:var(--surface-2)}._close_124u2_45:disabled{opacity:.45}._catalog_124u2_65{min-height:0;padding:8px;overflow-y:auto}._providerOption_124u2_71{border-radius:var(--radius-md);text-align:left;justify-content:space-between;align-items:center;gap:16px;width:100%;padding:9px 12px;display:flex}._providerOption_124u2_71:hover:not(:disabled),._providerOption_124u2_71:focus-visible{background:var(--brand-tint)}._providerOption_124u2_71:disabled{cursor:default}._optionText_124u2_91{align-items:baseline;gap:9px;min-width:0;display:flex}._optionName_124u2_98{color:var(--text);font-family:var(--font-mono);text-overflow:ellipsis;white-space:nowrap;flex:0 0 126px;font-size:12.5px;font-weight:650;overflow:hidden}._optionLabel_124u2_109{min-width:0;color:var(--text-2);text-overflow:ellipsis;white-space:nowrap;font-size:12.5px;overflow:hidden}._kind_124u2_118,._configured_124u2_119{color:var(--text-3);flex:none;font-size:11px}._configured_124u2_119{color:var(--brand-text)}._providerOption_124u2_71:disabled ._optionName_124u2_98,._providerOption_124u2_71:disabled ._optionLabel_124u2_109{color:var(--text-3)}._empty_124u2_134{color:var(--text-3);text-align:center;padding:28px 16px;font-size:13px}._setup_124u2_141{flex-direction:column;gap:14px;min-height:0;padding:18px 20px 20px;display:flex;overflow-y:auto}._back_124u2_1{color:var(--brand-text);align-self:flex-start;font-size:12.5px;font-weight:600}._metadata_124u2_157{color:var(--text-3);background:var(--surface-2);border-radius:var(--radius-md);grid-template-columns:110px minmax(0,1fr);gap:7px 14px;padding:11px 12px;font-size:12px;display:grid}._metadata_124u2_157 code,._metadata_124u2_157 span:nth-child(4){color:var(--text-2)}._field_124u2_173{color:var(--text-2);flex-direction:column;gap:6px;font-size:12.5px;font-weight:550;display:flex}._field_124u2_173 input{width:100%;color:var(--text);background:var(--content);border:1px solid var(--separator);border-radius:var(--radius-md);outline:none;padding:8px 10px;font-size:13px;font-weight:400}._field_124u2_173 input:focus{border-color:var(--brand-fill)}._field_124u2_173 small{color:var(--text-3);font-size:11px;font-weight:400}._field_124u2_173>small{color:var(--danger)}._hint_124u2_208{color:var(--text-3);font-size:11.5px;line-height:1.45}._problem_124u2_214{color:var(--danger);font-size:12.5px}._actions_124u2_219{justify-content:flex-end;gap:8px;display:flex}._cancel_124u2_225,._add_124u2_226{border-radius:var(--radius-md);padding:7px 14px;font-size:13px;font-weight:600}._cancel_124u2_225{color:var(--text-2);background:var(--surface-2)}._add_124u2_226{color:var(--on-brand);background:var(--brand-fill);box-shadow:0 1px 3px var(--brand-shadow)}._cancel_124u2_225:disabled,._add_124u2_226:disabled{cursor:default;opacity:.45}@media (width<=560px){._backdrop_124u2_1{align-items:flex-end;padding:0}._sheet_124u2_12{width:100%;max-height:calc(100dvh - 12px);padding-bottom:calc(16px + env(safe-area-inset-bottom));border-radius:18px 18px 0 0}._optionName_124u2_98{flex-basis:108px}._kind_124u2_118,._configured_124u2_119{display:none}._sheet_124u2_12 input,._sheet_124u2_12 select{min-height:44px;font-size:16px}}._page_ulemx_4{flex-direction:column;gap:18px;max-width:620px;margin:0 auto;display:flex}._empty_ulemx_12{text-align:center;color:var(--text-3);margin-top:20vh}._pageHeader_ulemx_18{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}._pageTitle_ulemx_25{font-size:19px;font-weight:700}._pageSub_ulemx_30{color:var(--text-3);margin-top:2px;font-size:12.5px}._pageActions_ulemx_36{gap:14px;display:flex}._linkAction_ulemx_41{color:var(--brand-text);font-size:12.5px;font-weight:600}._linkAction_ulemx_41:disabled{opacity:.5;cursor:default}._note_ulemx_52{color:var(--text-3);font-size:12.5px}._problem_ulemx_57{color:var(--danger);font-size:12.5px}._card_ulemx_62{background:var(--surface);border-radius:var(--radius-lg);box-shadow:0 0 0 1px var(--separator-soft);flex-direction:column;padding:4px 16px;display:flex}._cardTitle_ulemx_71{letter-spacing:.06em;text-transform:uppercase;color:var(--text-3);padding:12px 0 4px;font-size:12px;font-weight:600}._fieldRow_ulemx_80{border-bottom:1px solid var(--separator-soft);justify-content:space-between;align-items:center;gap:16px;padding:11px 0;display:flex}._fieldRow_ulemx_80:last-child{border-bottom:none}._fieldLabel_ulemx_93{flex-shrink:0;font-size:13px;font-weight:500}._fieldEdit_ulemx_99{flex:1;justify-content:flex-end;align-items:center;gap:8px;min-width:0;display:flex}._fieldStatic_ulemx_108{color:var(--text-2);text-align:right;font-size:12.5px}._fieldHint_ulemx_114{color:var(--text-3)}._input_ulemx_118{border:1px solid var(--separator);border-radius:var(--radius-md);background:var(--content);max-width:340px;color:var(--text);outline:none;flex:1;padding:6px 10px;font-size:12.5px}._input_ulemx_118:focus{border-color:var(--brand-fill)}._select_ulemx_134{border:1px solid var(--separator);border-radius:var(--radius-md);background-color:var(--content);width:260px;max-width:260px;color:var(--text);padding:6px 34px 6px 8px;font-size:12.5px}._addProviderSelect_ulemx_145{width:min(340px,65%);max-width:none}._saveAction_ulemx_150{color:var(--brand-text);flex-shrink:0;font-size:12.5px;font-weight:600}._saveAction_ulemx_150:disabled{opacity:.5;cursor:default}._segmented_ulemx_162{background:var(--surface-2);border-radius:9px;padding:2px;display:inline-flex}._segment_ulemx_162,._segmentActive_ulemx_170{min-width:54px;color:var(--text-3);border-radius:7px;padding:5px 9px;font-size:12px}._segmentActive_ulemx_170{background:var(--surface);color:var(--text);box-shadow:0 1px 3px #0000001a}._segment_ulemx_162:disabled,._segmentActive_ulemx_170:disabled{opacity:.5;cursor:default}._optionRow_ulemx_190{border-bottom:1px solid var(--separator-soft);justify-content:space-between;align-items:center;gap:12px;padding:9px 0;display:flex}._optionRow_ulemx_190:last-child{border-bottom:none}._optionName_ulemx_203{font-size:13px;font-family:var(--font-mono)}._defaultTag_ulemx_208{color:var(--brand-text);font-size:11px;font-weight:700;font-family:var(--font-ui)}._removeAction_ulemx_215{color:var(--text-3);font-size:15px;line-height:1}._removeAction_ulemx_215:hover{color:var(--danger)}._removeAction_ulemx_215:disabled{opacity:.5;cursor:default}._modelList_ulemx_230{flex-wrap:wrap;gap:6px;padding:8px 0 12px;display:flex}._modelChipStatic_ulemx_237{font-size:11.5px;font-family:var(--font-mono);background:var(--surface-2);color:var(--text-2);border-radius:999px;padding:3px 10px}._formActions_ulemx_246{justify-content:flex-end;gap:8px;display:flex}._cancelAction_ulemx_252{border-radius:var(--radius-md);background:var(--surface-2);color:var(--text-2);padding:7px 14px;font-size:13px;font-weight:600}._primaryAction_ulemx_261{border-radius:var(--radius-md);background:var(--brand-fill);color:var(--on-brand);box-shadow:0 1px 3px var(--brand-shadow);padding:7px 14px;font-size:13px;font-weight:600}._primaryAction_ulemx_261:disabled,._cancelAction_ulemx_252:disabled{opacity:.5;cursor:default}._dangerCard_ulemx_277{background:var(--surface);border-radius:var(--radius-lg);box-shadow:0 0 0 1px color-mix(in srgb, var(--danger) 24%, var(--separator-soft));justify-content:space-between;align-items:center;gap:18px;padding:14px 16px;display:flex}._dangerTitle_ulemx_288{font-size:13px;font-weight:650}._dangerDescription_ulemx_293,._dangerHint_ulemx_294{color:var(--text-3);margin-top:3px;font-size:11.5px;line-height:1.4}._dangerAction_ulemx_301{color:#fff;background:var(--danger);border-radius:8px;flex:none;padding:6px 12px;font-size:12px;font-weight:650}._dangerAction_ulemx_301:disabled{opacity:.45;cursor:default}._removeBackdrop_ulemx_316{z-index:90;-webkit-backdrop-filter:blur(1px);backdrop-filter:blur(1px);background:#0000005c;place-items:center;padding:24px;display:grid;position:fixed;inset:0}._removeDialog_ulemx_327{background:var(--surface);border:1px solid var(--separator);border-radius:var(--radius-lg);width:min(400px,100%);box-shadow:var(--shadow-sheet);flex-direction:column;gap:14px;padding:20px;display:flex}._removeDialogTitle_ulemx_339{font-size:16px;font-weight:700}._removeDialogDescription_ulemx_344{color:var(--text-2);font-size:13px;line-height:1.5}._commandBox_ulemx_350{min-width:0;color:var(--text);background:var(--surface-2);border:1px solid var(--separator);border-radius:var(--radius-sm);align-items:center;gap:10px;padding:9px 10px;display:flex}._commandBox_ulemx_350 code{overflow-wrap:anywhere;flex:1;min-width:0;font-size:12px}._commandCopy_ulemx_369{width:28px;height:28px;color:var(--text-2);border-radius:7px;flex:none;place-items:center;display:grid}._commandCopy_ulemx_369:hover{color:var(--text);background:var(--surface)}._reauthHint_ulemx_384{color:var(--text-3);font-size:11.5px;line-height:1.4}._removeConfirmLabel_ulemx_390{color:var(--text-2);flex-direction:column;gap:7px;font-size:12.5px;display:flex}._removeConfirmInput_ulemx_398{width:100%;color:var(--text);background:var(--surface-2);border:1px solid var(--separator);border-radius:var(--radius-sm);padding:8px 10px}._removeConfirmInput_ulemx_398:focus{outline:2px solid color-mix(in srgb, var(--danger) 24%, transparent);border-color:var(--danger)}._removeDialogActions_ulemx_412{justify-content:flex-end;gap:8px;display:flex}._removeDialogCancel_ulemx_418,._removeDialogDelete_ulemx_419{border-radius:8px;min-width:88px;padding:7px 13px;font-size:12.5px;font-weight:650}._removeDialogCancel_ulemx_418{color:var(--text-2);background:var(--surface-2)}._removeDialogDelete_ulemx_419{color:#fff;background:var(--danger)}._removeDialogCancel_ulemx_418:disabled,._removeDialogDelete_ulemx_419:disabled{opacity:.45;cursor:default}@media (width<=560px){._page_ulemx_4{gap:16px}._pageHeader_ulemx_18{align-items:center}._pageTitle_ulemx_25{font-size:18px}._card_ulemx_62{padding-inline:14px}._fieldRow_ulemx_80{flex-direction:column;align-items:stretch;gap:8px;padding:12px 0}._fieldLabel_ulemx_93,._optionName_ulemx_203{font-size:14px}._fieldEdit_ulemx_99{justify-content:stretch;width:100%}._fieldStatic_ulemx_108{text-align:left}._input_ulemx_118,._select_ulemx_134{width:100%;max-width:none;min-height:44px;font-size:16px}._saveAction_ulemx_150,._linkAction_ulemx_41,._removeAction_ulemx_215{min-width:44px;min-height:44px}._segmented_ulemx_162{width:100%}._segment_ulemx_162,._segmentActive_ulemx_170{flex:1;min-height:38px}._dangerCard_ulemx_277{flex-direction:column;align-items:stretch}._dangerAction_ulemx_301{min-height:44px}._removeBackdrop_ulemx_316{align-items:end;padding:0}._removeDialog_ulemx_327{width:100%;padding:20px 18px calc(18px + env(safe-area-inset-bottom));border-radius:18px 18px 0 0}._removeConfirmInput_ulemx_398,._removeDialogCancel_ulemx_418,._removeDialogDelete_ulemx_419{min-height:44px;font-size:16px}}._backdrop_1vpt8_1{z-index:50;background:#00000052;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}._modal_1vpt8_11{background:var(--surface);border-radius:var(--radius-lg);width:min(360px,100vw - 48px);box-shadow:var(--shadow-sheet);flex-direction:column;align-items:center;gap:14px;padding:20px;display:flex}._title_1vpt8_23{align-self:flex-start;font-size:15px;font-weight:700}._hint_1vpt8_29{color:var(--text-3);align-self:flex-start;margin-top:-8px;font-size:12px}._viewport_1vpt8_36{background:var(--surface-2);touch-action:none;cursor:grab;-webkit-user-select:none;user-select:none;border-radius:50%;position:relative;overflow:hidden}._viewport_1vpt8_36:active{cursor:grabbing}._image_1vpt8_50{transform-origin:0 0;-webkit-user-select:none;user-select:none;-webkit-user-drag:none;max-width:none;position:absolute;top:0;left:0}._mask_1vpt8_61{pointer-events:none;border-radius:50%;position:absolute;inset:0;box-shadow:inset 0 0 0 1px #00000026}._zoomRow_1vpt8_69{width:100%;color:var(--text-3);align-items:center;gap:10px;font-size:15px;display:flex}._zoom_1vpt8_69{accent-color:var(--brand-fill);flex:1}._actions_1vpt8_83{justify-content:flex-end;gap:10px;width:100%;display:flex}._cancel_1vpt8_90,._save_1vpt8_91{border-radius:var(--radius-md,8px);cursor:pointer;padding:8px 14px;font-size:13px;font-weight:600}._cancel_1vpt8_90{color:var(--text-2);background:var(--surface-2)}._save_1vpt8_91{color:var(--on-brand);background:var(--brand-fill)}._cancel_1vpt8_90:disabled,._save_1vpt8_91:disabled{opacity:.5;cursor:default}._page_1by9r_1{flex-direction:column;gap:22px;max-width:620px;margin:0 auto;display:flex}._identity_1by9r_9{text-align:center;flex-direction:column;align-items:center;gap:10px;padding-top:4px;display:flex}._avatarButton_1by9r_19{cursor:pointer;border-radius:50%;justify-content:center;align-items:center;width:120px;height:120px;display:inline-flex;position:relative;overflow:hidden}button._avatarButton_1by9r_19:disabled{cursor:default}._avatarOverlay_1by9r_35{color:#fff;opacity:0;background:#00000070;flex-direction:column;justify-content:center;align-items:center;gap:2px;font-size:11px;font-weight:600;transition:opacity .12s;display:flex;position:absolute;inset:0}._avatarButton_1by9r_19:hover ._avatarOverlay_1by9r_35,._avatarButton_1by9r_19:focus-visible ._avatarOverlay_1by9r_35{opacity:1}._avatarOverlayIcon_1by9r_56{font-size:20px;line-height:1}._avatar_1by9r_19{background:var(--brand-fill);width:120px;height:120px;color:var(--on-brand);border-radius:50%;justify-content:center;align-items:center;font-size:50px;font-weight:700;display:inline-flex}._identityText_1by9r_74{flex-direction:column;gap:2px;display:flex}._avatarRemove_1by9r_80{color:var(--danger);font-size:12.5px;font-weight:600}._avatarRemove_1by9r_80:disabled{opacity:.5;cursor:default}._name_1by9r_91{letter-spacing:-.01em;font-size:20px;font-weight:700}._identitySub_1by9r_97{color:var(--text-3);font-size:12.5px}._group_1by9r_102{flex-direction:column;gap:8px;display:flex}._groupTitle_1by9r_108{letter-spacing:.08em;text-transform:uppercase;color:var(--text-3);padding-left:4px;font-size:11px;font-weight:600}._groupHint_1by9r_117{color:var(--text-3);padding-left:4px;font-size:11.5px}._advancedToggle_1by9r_123{width:100%;color:var(--text);text-align:left;background:var(--surface);border-radius:var(--radius-lg);box-shadow:0 0 0 1px var(--separator-soft);justify-content:space-between;align-items:center;gap:12px;padding:11px 14px;display:flex}._advancedTitle_1by9r_137,._advancedHint_1by9r_138{display:block}._advancedTitle_1by9r_137{font-size:13px;font-weight:600}._advancedHint_1by9r_138{color:var(--text-3);margin-top:2px;font-size:11.5px}._advancedChevron_1by9r_153{color:var(--text-3);flex:none}._advancedGroups_1by9r_158{flex-direction:column;gap:22px;display:flex}._card_1by9r_164{background:var(--surface);border-radius:var(--radius-lg);box-shadow:0 0 0 1px var(--separator-soft);overflow:hidden}._rowLine_1by9r_171{justify-content:space-between;align-items:center;gap:12px;padding:10px 16px;display:flex}._rowLine_1by9r_171+._rowLine_1by9r_171{border-top:1px solid var(--separator-soft)}._rowLabel_1by9r_183{font-size:13px}._rowValue_1by9r_187{color:var(--text-2);font-size:13px}._profileName_1by9r_192{min-width:0;color:var(--text-2);text-overflow:ellipsis;white-space:nowrap;font-size:12.5px;overflow:hidden}._fieldEdit_1by9r_201{flex:1;justify-content:flex-end;align-items:center;gap:8px;min-width:0;display:flex}._fieldEdit_1by9r_201 ._input_1by9r_210{text-align:right;flex:1;max-width:340px}._saveAction_1by9r_216{color:var(--brand-text);flex-shrink:0;font-size:12.5px;font-weight:600}._saveAction_1by9r_216:disabled{cursor:default;opacity:.5}._segments_1by9r_228{background:var(--separator-soft);border-radius:8px;padding:2px;font-size:12px;display:inline-flex}._segment_1by9r_228,._segmentSelected_1by9r_237{color:var(--text-3);border-radius:6px;padding:3px 12px}._segmentSelected_1by9r_237{background:var(--surface);color:var(--text);box-shadow:var(--shadow-card);font-weight:600}._memoryRow_1by9r_250{justify-content:space-between;align-items:center;gap:12px;padding:10px 16px;display:flex}._memoryBody_1by9r_258{flex-direction:column;gap:3px;min-width:0;display:flex}._memoryActions_1by9r_265{flex-shrink:0;gap:6px;display:inline-flex}._memoryRow_1by9r_250+._memoryRow_1by9r_250{border-top:1px solid var(--separator-soft)}._memoryText_1by9r_275{font-size:13px}._memoryMeta_1by9r_279{color:var(--text-3);font-size:11.5px}._emptyRow_1by9r_284{color:var(--text-3);padding:12px 16px;font-size:12.5px}._folderRow_1by9r_290{justify-content:space-between;align-items:center;gap:12px;padding:6px 16px 10px;font-size:12px;display:flex}._folderAdd_1by9r_299{border-top:1px solid var(--separator-soft);gap:8px;padding:10px 16px 12px;display:flex}._select_1by9r_306,._input_1by9r_210{font:inherit;color:var(--text);background-color:var(--surface);border:1px solid var(--separator-soft);border-radius:8px;padding:4px 8px;font-size:12.5px}._select_1by9r_306{padding-right:34px}._input_1by9r_210{flex:1;min-width:0}._smallButton_1by9r_326,._smallButtonPrimary_1by9r_327,._smallButtonDanger_1by9r_328{font:inherit;border:1px solid var(--separator-soft);background:var(--surface);color:var(--text-2);cursor:pointer;border-radius:7px;padding:3px 10px;font-size:11.5px}._smallButton_1by9r_326:disabled,._smallButtonPrimary_1by9r_327:disabled,._smallButtonDanger_1by9r_328:disabled{opacity:.5;cursor:default}._smallButtonPrimary_1by9r_327{background:var(--brand-fill);color:var(--on-brand);border-color:#0000;font-weight:600}._smallButtonDanger_1by9r_328{color:var(--danger,#c33)}._inheritButton_1by9r_357{font:inherit;border:1px solid var(--separator-soft);color:var(--text-3);cursor:pointer;background:0 0;border-radius:6px;margin-left:8px;padding:1px 7px;font-size:10.5px}._inheritedTag_1by9r_369,._dirtyTag_1by9r_370{color:var(--text-3);margin-left:8px;font-size:10.5px}._fileEditor_1by9r_376{flex-direction:column;gap:8px;padding:12px 16px;display:flex}._textarea_1by9r_383{font-family:var(--font-mono,ui-monospace, monospace);color:var(--text);background:var(--surface-2,var(--surface));border:1px solid var(--separator-soft);resize:vertical;white-space:pre-wrap;border-radius:8px;padding:8px 10px;font-size:12px}._editorActions_1by9r_395{justify-content:flex-end;gap:8px;display:flex}._fileBlock_1by9r_401{background:var(--surface);border-radius:var(--radius-lg);box-shadow:0 0 0 1px var(--separator-soft);overflow:hidden}._fileContent_1by9r_408{color:var(--text-2);white-space:pre-wrap;overflow-wrap:break-word;margin:0;padding:0 16px 12px;font-size:12px}._avatarInput_1by9r_417{display:none}._dangerCard_1by9r_421{background:var(--surface);border-radius:var(--radius-lg);box-shadow:0 0 0 1px color-mix(in srgb, var(--danger) 24%, var(--separator-soft));justify-content:space-between;align-items:center;gap:18px;padding:14px 16px;display:flex}._dangerTitle_1by9r_432{font-size:13px;font-weight:650}._dangerDescription_1by9r_437{color:var(--text-3);margin-top:3px;font-size:11.5px;line-height:1.4}._removeProfileButton_1by9r_444{color:#fff;background:var(--danger);border-radius:8px;flex:none;padding:6px 12px;font-size:12px;font-weight:650}._removeProfileButton_1by9r_444:disabled{opacity:.45;cursor:default}._removeBackdrop_1by9r_459{z-index:90;-webkit-backdrop-filter:blur(1px);backdrop-filter:blur(1px);background:#0000005c;place-items:center;padding:24px;display:grid;position:fixed;inset:0}._removeDialog_1by9r_470{background:var(--surface);border:1px solid var(--separator);border-radius:var(--radius-lg);width:min(400px,100%);box-shadow:var(--shadow-sheet);flex-direction:column;gap:14px;padding:20px;display:flex}._removeDialogTitle_1by9r_482{font-size:16px;font-weight:700}._removeDialogDescription_1by9r_487{color:var(--text-2);font-size:13px;line-height:1.5}._removeConfirmLabel_1by9r_493{color:var(--text-2);flex-direction:column;gap:7px;font-size:12.5px;display:flex}._removeConfirmInput_1by9r_501{width:100%;color:var(--text);background:var(--surface-2);border:1px solid var(--separator);border-radius:var(--radius-sm);padding:8px 10px}._removeConfirmInput_1by9r_501:focus{outline:2px solid color-mix(in srgb, var(--danger) 24%, transparent);border-color:var(--danger)}._removeDialogActions_1by9r_515{justify-content:flex-end;gap:8px;display:flex}._removeDialogCancel_1by9r_521,._removeDialogDelete_1by9r_522{border-radius:8px;min-width:88px;padding:7px 13px;font-size:12.5px;font-weight:650}._removeDialogCancel_1by9r_521{color:var(--text-2);background:var(--surface-2)}._removeDialogDelete_1by9r_522{color:#fff;background:var(--danger)}._removeDialogCancel_1by9r_521:disabled,._removeDialogDelete_1by9r_522:disabled{opacity:.45;cursor:default}@media (width<=560px){._page_1by9r_1{gap:18px}._identity_1by9r_9{padding-top:0}._rowLine_1by9r_171{flex-wrap:wrap;min-height:48px;padding:11px 14px}._rowLabel_1by9r_183,._rowValue_1by9r_187,._profileName_1by9r_192,._memoryText_1by9r_275{font-size:14px}._fieldEdit_1by9r_201{flex-basis:100%;width:100%}._fieldEdit_1by9r_201 ._input_1by9r_210{text-align:left;max-width:none;min-height:44px}._select_1by9r_306,._input_1by9r_210,._textarea_1by9r_383,._removeConfirmInput_1by9r_501{min-height:44px;font-size:16px}._segments_1by9r_228{width:100%}._segment_1by9r_228,._segmentSelected_1by9r_237{flex:1;min-height:38px}._smallButton_1by9r_326,._smallButtonPrimary_1by9r_327,._smallButtonDanger_1by9r_328,._saveAction_1by9r_216{min-height:40px;padding-inline:12px;font-size:13px}._memoryRow_1by9r_250,._folderRow_1by9r_290{flex-direction:column;align-items:stretch}._memoryActions_1by9r_265{justify-content:flex-end}._folderAdd_1by9r_299{flex-direction:column}._dangerCard_1by9r_421{flex-direction:column;align-items:stretch}._removeProfileButton_1by9r_444{min-height:44px}._removeBackdrop_1by9r_459{align-items:end;padding:0}._removeDialog_1by9r_470{width:100%;padding:20px 18px calc(18px + env(safe-area-inset-bottom));border-radius:18px 18px 0 0}._removeDialogCancel_1by9r_521,._removeDialogDelete_1by9r_522{min-height:44px;font-size:16px}._avatarOverlay_1by9r_35{opacity:1}}._layout_12z4p_1{flex:1;min-height:0;display:flex}._mobileLevel_12z4p_7{flex:1;min-width:0;min-height:0}._sections_12z4p_14{background:var(--canvas);flex-direction:column;width:100%;height:100%;display:flex;overflow:hidden}._settingsHeader_12z4p_23{letter-spacing:.08em;text-transform:uppercase;color:var(--text-3);justify-content:space-between;align-items:center;padding:8px 16px;font-size:11px;font-weight:600;display:flex}._doneButton_12z4p_35{color:var(--brand-text);letter-spacing:normal;text-transform:none;font-size:12px;font-weight:500}._doneButton_12z4p_35:hover{color:var(--text)}._sectionRows_12z4p_47{flex-direction:column;flex:1;min-height:0;padding:0 8px 12px;display:flex;overflow-y:auto}._row_12z4p_56,._rowSelected_12z4p_57{border-radius:var(--radius-md);text-align:left;padding:7px 10px;font-size:13px;font-weight:500}._row_12z4p_56:hover{background:var(--separator-soft)}._rowSelected_12z4p_57{background:var(--brand-tint);font-weight:600}._items_12z4p_75{border-right:1px solid var(--separator-soft);background:var(--canvas);flex-direction:column;flex-shrink:0;width:220px;padding:0 8px 12px;display:flex;overflow-y:auto}._itemsHeader_12z4p_86{letter-spacing:.08em;text-transform:uppercase;color:var(--text-3);justify-content:space-between;align-items:center;padding:14px 8px 8px;font-size:11px;font-weight:600;display:flex}._newButton_12z4p_98{width:22px;height:22px;color:var(--text-2);border-radius:6px;justify-content:center;align-items:center;font-size:15px;display:inline-flex}._newButton_12z4p_98:hover{background:var(--separator-soft);color:var(--text)}._itemRow_12z4p_114,._itemRowSelected_12z4p_115{border-radius:var(--radius-md);text-align:left;align-items:center;gap:10px;padding:7px 10px;font-size:13px;display:flex}._itemRow_12z4p_114:hover{background:var(--separator-soft)}._itemRowSelected_12z4p_115{background:var(--brand-tint);font-weight:600}._itemName_12z4p_134{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}._itemSub_12z4p_141{color:var(--text-3);flex-shrink:0;margin-left:auto;font-size:11px}._dotOk_12z4p_148,._dotBad_12z4p_149,._dotUnknown_12z4p_150{border-radius:50%;flex-shrink:0;width:8px;height:8px}._dotOk_12z4p_148{background:var(--ok)}._dotBad_12z4p_149{background:var(--danger)}._dotUnknown_12z4p_150{background:var(--text-3)}._page_12z4p_170{background:var(--content);flex:1;min-width:0;padding:24px;overflow-y:auto}._pageBody_12z4p_178{min-width:0}._mobileAddButton_12z4p_182{width:44px;height:44px;color:var(--brand-text);justify-content:flex-end;align-items:center;font-size:28px;font-weight:300;display:inline-flex}._problem_12z4p_193{max-width:620px;color:var(--danger);margin:0 auto 16px;font-size:13px}._empty_12z4p_200{text-align:center;color:var(--text-3);margin-top:20vh}@media (width<=899px){._layout_12z4p_1,._mobileLevel_12z4p_7,._sections_12z4p_14,._items_12z4p_75,._page_12z4p_170{width:100%}._layout_12z4p_1{background:var(--canvas);overflow:hidden}._mobileLevel_12z4p_7,._items_12z4p_75,._page_12z4p_170{animation:.18s ease-out _mobileConfigPushIn_12z4p_1}._sections_12z4p_14{background:var(--canvas)}._sectionRows_12z4p_47{border-radius:var(--radius-lg);background:var(--surface);box-shadow:0 0 0 1px var(--separator-soft);flex:0 auto;margin:18px 12px;padding:0;overflow:hidden}._row_12z4p_56,._rowSelected_12z4p_57{background:var(--surface);min-height:48px;color:var(--text);letter-spacing:normal;text-transform:none;border-radius:0;justify-content:space-between;align-items:center;padding:0 14px;font-size:16px;font-weight:500;display:flex}._row_12z4p_56+._row_12z4p_56,._rowSelected_12z4p_57+._row_12z4p_56,._row_12z4p_56+._rowSelected_12z4p_57,._rowSelected_12z4p_57+._rowSelected_12z4p_57{border-top:1px solid var(--separator-soft)}._row_12z4p_56 svg,._rowSelected_12z4p_57 svg{color:var(--text-3)}._items_12z4p_75{height:100%;padding:0 0 calc(16px + env(safe-area-inset-bottom));background:var(--content);border-right:0}._itemRow_12z4p_114,._itemRowSelected_12z4p_115{border-bottom:1px solid var(--separator-soft);background:var(--content);border-radius:0;min-height:56px;padding:8px 16px;font-size:16px}._itemRowSelected_12z4p_115{color:var(--text);font-weight:600}._page_12z4p_170{background:var(--canvas);height:100%;padding:0}._pageBody_12z4p_178{padding:20px 16px calc(36px + env(safe-area-inset-bottom))}}@keyframes _mobileConfigPushIn_12z4p_1{0%{opacity:.72;transform:translate(18px)}}@media (prefers-reduced-motion:reduce){._mobileLevel_12z4p_7,._items_12z4p_75,._page_12z4p_170{animation:none}}._shell_1n4bm_1{height:var(--marifold-viewport-height,100%);flex-direction:column;display:flex}._content_1n4bm_7{flex:1;min-height:0;display:flex}._placeholder_1n4bm_13{text-align:center;color:var(--text-3);margin:auto}._placeholderTitle_1n4bm_19{color:var(--text-2);text-transform:capitalize;font-size:22px;font-weight:700}._placeholderHint_1n4bm_26{margin-top:6px;font-size:13px}@media (width<=899px){._shell_1n4bm_1{width:100%;min-width:0;transform:translateY(var(--marifold-viewport-offset-top,0));overflow:hidden}._content_1n4bm_7{width:100%;min-width:0;overflow:hidden}}._workspaceNotice_1n4bm_46{background:var(--surface-2);color:var(--text-2);justify-content:space-between;gap:16px;padding:8px 16px;font-size:12px;display:flex}:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark;--brand-fill:#eaa221;--on-brand:#2e2205;--brand-text:var(--lightningcss-light,#c08110)var(--lightningcss-dark,#f0af3a);--brand-deep:#d98e08;--brand-tint:var(--lightningcss-light,#eaa2211f)var(--lightningcss-dark,#f0af3a26);--brand-shadow:#eaa22166;--canvas:var(--lightningcss-light,#f0f0ee)var(--lightningcss-dark,#242426);--content:var(--lightningcss-light,#fff)var(--lightningcss-dark,#1c1c1e);--surface:var(--lightningcss-light,#fff)var(--lightningcss-dark,#2c2c2e);--surface-2:var(--lightningcss-light,#f5f5f7)var(--lightningcss-dark,#323235);--surface-3:var(--lightningcss-light,#e9e9eb)var(--lightningcss-dark,#3a3a3c);--text:var(--lightningcss-light,#1d1d1f)var(--lightningcss-dark,#f5f5f7);--text-2:var(--lightningcss-light,#515154)var(--lightningcss-dark,#b0b0b5);--text-3:var(--lightningcss-light,#86868b)var(--lightningcss-dark,#98989d);--separator:var(--lightningcss-light,#00000014)var(--lightningcss-dark,#ffffff1a);--separator-soft:var(--lightningcss-light,#0000000d)var(--lightningcss-dark,#ffffff0f);--ok:var(--lightningcss-light,#28a745)var(--lightningcss-dark,#34c759);--danger:var(--lightningcss-light,#d2402e)var(--lightningcss-dark,#ff6b5e);--shadow-card:0 1px 3px var(--lightningcss-light,#00000014)var(--lightningcss-dark,#00000080);--shadow-sheet:0 8px 32px var(--lightningcss-light,#00000024)var(--lightningcss-dark,#0009);--font-ui:-apple-system, BlinkMacSystemFont, "SF Pro Text", "Helvetica Neue", "Segoe UI", sans-serif;--font-mono:ui-monospace, "SF Mono", SFMono-Regular, Menlo, Consolas, monospace;--radius-sm:6px;--radius-md:10px;--radius-lg:14px}@media (prefers-color-scheme:dark){:root{--lightningcss-light: ;--lightningcss-dark:initial}}:root[data-theme=light]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}:root[data-theme=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*,:before,:after{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{font-family:var(--font-ui);color:var(--text);background:var(--canvas);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;font-size:13px;line-height:1.45}@media (width<=899px){html,body,#root{width:100%;overflow:hidden}body{overscroll-behavior:none;-webkit-tap-highlight-color:transparent}button,input,textarea,select{touch-action:manipulation}}button{font:inherit;color:inherit;cursor:pointer;background:0 0;border:none;padding:0}select{appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 8'%3E%3Cpath d='m1 1 5 5 5-5' fill='none' stroke='%23515154' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");background-position:right 10px center;background-repeat:no-repeat;background-size:10px 6px}:root[data-theme=dark] select{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 8'%3E%3Cpath d='m1 1 5 5 5-5' fill='none' stroke='%23b0b0b5' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E")}@media (prefers-color-scheme:dark){:root:not([data-theme]) select{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 8'%3E%3Cpath d='m1 1 5 5 5-5' fill='none' stroke='%23b0b0b5' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E")}}input,textarea{font:inherit;color:inherit}code,pre{font-family:var(--font-mono);font-size:12px}::selection{background:var(--brand-tint)}