studiograph 1.3.3 → 1.3.4
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.
- package/dist/agent/orchestrator.d.ts +10 -0
- package/dist/agent/orchestrator.js +26 -7
- package/dist/agent/orchestrator.js.map +1 -1
- package/dist/agent/skills/sync-configuration.md +4 -29
- package/dist/agent/skills/sync-setup.md +2 -4
- package/dist/agent/tools/graph-tools.d.ts +5 -1
- package/dist/agent/tools/graph-tools.js +161 -9
- package/dist/agent/tools/graph-tools.js.map +1 -1
- package/dist/agent/tools/ops-tools.js +15 -126
- package/dist/agent/tools/ops-tools.js.map +1 -1
- package/dist/agent/tools/permission-tools.d.ts +15 -14
- package/dist/agent/tools/permission-tools.js +65 -128
- package/dist/agent/tools/permission-tools.js.map +1 -1
- package/dist/agent/tools/sync-tools.d.ts +7 -6
- package/dist/agent/tools/sync-tools.js +205 -178
- package/dist/agent/tools/sync-tools.js.map +1 -1
- package/dist/cli/commands/about.d.ts +13 -0
- package/dist/cli/commands/about.js +97 -0
- package/dist/cli/commands/about.js.map +1 -0
- package/dist/cli/commands/clone.d.ts +5 -2
- package/dist/cli/commands/clone.js +131 -62
- package/dist/cli/commands/clone.js.map +1 -1
- package/dist/cli/commands/connector.d.ts +2 -16
- package/dist/cli/commands/connector.js +32 -109
- package/dist/cli/commands/connector.js.map +1 -1
- package/dist/cli/commands/deploy.d.ts +0 -1
- package/dist/cli/commands/deploy.js +13 -103
- package/dist/cli/commands/deploy.js.map +1 -1
- package/dist/cli/commands/init.js +6 -93
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/join.d.ts +3 -2
- package/dist/cli/commands/join.js +142 -97
- package/dist/cli/commands/join.js.map +1 -1
- package/dist/cli/commands/redeploy.js +1 -2
- package/dist/cli/commands/redeploy.js.map +1 -1
- package/dist/cli/commands/serve.d.ts +1 -3
- package/dist/cli/commands/serve.js +29 -109
- package/dist/cli/commands/serve.js.map +1 -1
- package/dist/cli/commands/start.js +1 -1
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/commands/sync-collection.d.ts +14 -0
- package/dist/cli/commands/sync-collection.js +366 -0
- package/dist/cli/commands/sync-collection.js.map +1 -0
- package/dist/cli/commands/sync.d.ts +4 -2
- package/dist/cli/commands/sync.js +529 -94
- package/dist/cli/commands/sync.js.map +1 -1
- package/dist/cli/index.js +15 -30
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/setup-wizard.d.ts +0 -13
- package/dist/cli/setup-wizard.js +6 -81
- package/dist/cli/setup-wizard.js.map +1 -1
- package/dist/core/graph.d.ts +8 -2
- package/dist/core/graph.js +11 -7
- package/dist/core/graph.js.map +1 -1
- package/dist/core/types.d.ts +149 -21
- package/dist/core/types.js +16 -4
- package/dist/core/types.js.map +1 -1
- package/dist/core/workspace-manager.js +1 -5
- package/dist/core/workspace-manager.js.map +1 -1
- package/dist/core/workspace.d.ts +11 -4
- package/dist/core/workspace.js +61 -26
- package/dist/core/workspace.js.map +1 -1
- package/dist/integrations/asana.d.ts +26 -0
- package/dist/integrations/asana.js +77 -0
- package/dist/integrations/asana.js.map +1 -0
- package/dist/integrations/figma-local.d.ts +16 -0
- package/dist/integrations/figma-local.js +10 -0
- package/dist/integrations/figma-local.js.map +1 -0
- package/dist/integrations/figma.d.ts +17 -0
- package/dist/integrations/figma.js +16 -0
- package/dist/integrations/figma.js.map +1 -0
- package/dist/integrations/granola.d.ts +24 -0
- package/dist/integrations/granola.js +59 -0
- package/dist/integrations/granola.js.map +1 -0
- package/dist/integrations/linear.d.ts +14 -0
- package/dist/integrations/linear.js +70 -0
- package/dist/integrations/linear.js.map +1 -0
- package/dist/integrations/paper-local.d.ts +14 -0
- package/dist/integrations/paper-local.js +10 -0
- package/dist/integrations/paper-local.js.map +1 -0
- package/dist/integrations/paper.d.ts +2 -0
- package/dist/integrations/paper.js +10 -0
- package/dist/integrations/paper.js.map +1 -0
- package/dist/integrations/pipedrive.d.ts +26 -0
- package/dist/integrations/pipedrive.js +97 -0
- package/dist/integrations/pipedrive.js.map +1 -0
- package/dist/integrations/registry.d.ts +15 -0
- package/dist/integrations/registry.js +27 -0
- package/dist/integrations/registry.js.map +1 -0
- package/dist/integrations/types.d.ts +34 -0
- package/dist/integrations/types.js +9 -0
- package/dist/integrations/types.js.map +1 -0
- package/dist/mcp/connector-manager.d.ts +45 -31
- package/dist/mcp/connector-manager.js +164 -116
- package/dist/mcp/connector-manager.js.map +1 -1
- package/dist/mcp/server-oauth-provider.d.ts +56 -0
- package/dist/mcp/server-oauth-provider.js +138 -0
- package/dist/mcp/server-oauth-provider.js.map +1 -0
- package/dist/server/chrome/chrome.css +142 -28
- package/dist/server/chrome/chrome.js +46 -220
- package/dist/server/collab-authority.d.ts +70 -0
- package/dist/server/collab-authority.js +218 -0
- package/dist/server/collab-authority.js.map +1 -0
- package/dist/server/collab.d.ts +29 -0
- package/dist/server/collab.js +195 -0
- package/dist/server/collab.js.map +1 -0
- package/dist/server/commit-scheduler.d.ts +39 -0
- package/dist/server/commit-scheduler.js +113 -0
- package/dist/server/commit-scheduler.js.map +1 -0
- package/dist/server/index.d.ts +0 -2
- package/dist/server/index.js +166 -55
- package/dist/server/index.js.map +1 -1
- package/dist/server/routes/auth-api.d.ts +6 -0
- package/dist/server/routes/auth-api.js +78 -0
- package/dist/server/routes/auth-api.js.map +1 -1
- package/dist/server/routes/chat.js +4 -0
- package/dist/server/routes/chat.js.map +1 -1
- package/dist/server/routes/collab.d.ts +6 -0
- package/dist/server/routes/collab.js +10 -0
- package/dist/server/routes/collab.js.map +1 -0
- package/dist/server/routes/git-http.d.ts +23 -0
- package/dist/server/routes/git-http.js +251 -0
- package/dist/server/routes/git-http.js.map +1 -0
- package/dist/server/routes/graph-api.d.ts +6 -2
- package/dist/server/routes/graph-api.js +266 -82
- package/dist/server/routes/graph-api.js.map +1 -1
- package/dist/server/routes/mcp.d.ts +12 -0
- package/dist/server/routes/mcp.js +35 -0
- package/dist/server/routes/mcp.js.map +1 -0
- package/dist/server/routes/permissions-api.d.ts +6 -4
- package/dist/server/routes/permissions-api.js +53 -167
- package/dist/server/routes/permissions-api.js.map +1 -1
- package/dist/server/routes/sync-api.d.ts +26 -0
- package/dist/server/routes/sync-api.js +757 -0
- package/dist/server/routes/sync-api.js.map +1 -0
- package/dist/server/routes/ws.d.ts +9 -0
- package/dist/server/routes/ws.js +131 -0
- package/dist/server/routes/ws.js.map +1 -0
- package/dist/server/session-manager.d.ts +40 -0
- package/dist/server/session-manager.js +132 -0
- package/dist/server/session-manager.js.map +1 -0
- package/dist/server/ws-hub.d.ts +130 -0
- package/dist/server/ws-hub.js +250 -0
- package/dist/server/ws-hub.js.map +1 -0
- package/dist/server/yjs-manager.d.ts +59 -0
- package/dist/server/yjs-manager.js +194 -0
- package/dist/server/yjs-manager.js.map +1 -0
- package/dist/services/auth-service.d.ts +74 -0
- package/dist/services/auth-service.js +286 -6
- package/dist/services/auth-service.js.map +1 -1
- package/dist/services/git.d.ts +6 -0
- package/dist/services/git.js +32 -2
- package/dist/services/git.js.map +1 -1
- package/dist/services/sync/collection-sync.d.ts +73 -0
- package/dist/services/sync/collection-sync.js +726 -0
- package/dist/services/sync/collection-sync.js.map +1 -0
- package/dist/services/sync/commit.js +5 -20
- package/dist/services/sync/commit.js.map +1 -1
- package/dist/services/sync/data-fetcher.d.ts +31 -0
- package/dist/services/sync/data-fetcher.js +12 -0
- package/dist/services/sync/data-fetcher.js.map +1 -0
- package/dist/services/sync/entity-refresh.d.ts +30 -0
- package/dist/services/sync/entity-refresh.js +275 -0
- package/dist/services/sync/entity-refresh.js.map +1 -0
- package/dist/services/sync/frontmatter-extractor.d.ts +2 -2
- package/dist/services/sync/frontmatter-extractor.js +1 -2
- package/dist/services/sync/frontmatter-extractor.js.map +1 -1
- package/dist/services/sync/graph-match.js +1 -1
- package/dist/services/sync/graph-match.js.map +1 -1
- package/dist/services/sync/mcp-client.d.ts +16 -4
- package/dist/services/sync/mcp-client.js +34 -20
- package/dist/services/sync/mcp-client.js.map +1 -1
- package/dist/services/sync/prompts.js +1 -1
- package/dist/services/sync/reconciler.js +1 -2
- package/dist/services/sync/reconciler.js.map +1 -1
- package/dist/services/sync/rest-client.d.ts +40 -0
- package/dist/services/sync/rest-client.js +100 -0
- package/dist/services/sync/rest-client.js.map +1 -0
- package/dist/services/sync/source-config.d.ts +23 -1
- package/dist/services/sync/source-config.js +112 -16
- package/dist/services/sync/source-config.js.map +1 -1
- package/dist/services/sync/source-definitions/asana.d.ts +3 -4
- package/dist/services/sync/source-definitions/asana.js +7 -13
- package/dist/services/sync/source-definitions/asana.js.map +1 -1
- package/dist/services/sync/source-definitions/definitions.d.ts +5 -18
- package/dist/services/sync/source-definitions/definitions.js +4 -22
- package/dist/services/sync/source-definitions/definitions.js.map +1 -1
- package/dist/services/sync/source-definitions/granola.d.ts +1 -1
- package/dist/services/sync/source-definitions/granola.js +11 -18
- package/dist/services/sync/source-definitions/granola.js.map +1 -1
- package/dist/services/sync/source-definitions/linear.d.ts +1 -1
- package/dist/services/sync/source-definitions/linear.js +17 -15
- package/dist/services/sync/source-definitions/linear.js.map +1 -1
- package/dist/services/sync/source-definitions/pipedrive.d.ts +1 -1
- package/dist/services/sync/source-definitions/pipedrive.js +6 -15
- package/dist/services/sync/source-definitions/pipedrive.js.map +1 -1
- package/dist/services/sync/staging.js +1 -2
- package/dist/services/sync/staging.js.map +1 -1
- package/dist/services/sync/structured-extractor.d.ts +8 -2
- package/dist/services/sync/structured-extractor.js +243 -35
- package/dist/services/sync/structured-extractor.js.map +1 -1
- package/dist/services/sync/types.d.ts +192 -23
- package/dist/services/sync/unstructured-extractor.d.ts +1 -3
- package/dist/services/sync/unstructured-extractor.js +2 -14
- package/dist/services/sync/unstructured-extractor.js.map +1 -1
- package/dist/utils/git.d.ts +33 -20
- package/dist/utils/git.js +119 -62
- package/dist/utils/git.js.map +1 -1
- package/dist/utils/preflight.d.ts +1 -15
- package/dist/utils/preflight.js +1 -35
- package/dist/utils/preflight.js.map +1 -1
- package/dist/web/_app/immutable/assets/0.CupILLQs.css +1 -0
- package/dist/web/_app/immutable/assets/3.CtJi4Cy9.css +1 -0
- package/dist/web/_app/immutable/assets/5.CydFyZSu.css +1 -0
- package/dist/web/_app/immutable/assets/6.kqeOo0OW.css +1 -0
- package/dist/web/_app/immutable/assets/7.CseIx7qQ.css +1 -0
- package/dist/web/_app/immutable/assets/8.BYpFDZHK.css +1 -0
- package/dist/web/_app/immutable/assets/AppShell.Ch_ef9hJ.css +1 -0
- package/dist/web/_app/immutable/assets/ChatPanel.CP-_8txt.css +1 -0
- package/dist/web/_app/immutable/chunks/0oxpWEgM.js +1 -0
- package/dist/web/_app/immutable/chunks/B1y7Wy5O.js +18 -0
- package/dist/web/_app/immutable/chunks/B7eduG_j.js +64 -0
- package/dist/web/_app/immutable/chunks/BBLgaWN8.js +1 -0
- package/dist/web/_app/immutable/chunks/BCB5cYCz.js +2 -0
- package/dist/web/_app/immutable/chunks/{aosHekRC.js → BPUy9_sS.js} +1 -1
- package/dist/web/_app/immutable/chunks/BVBRzmeQ.js +7 -0
- package/dist/web/_app/immutable/chunks/{CUzqHQY_.js → BXuvR8Ks.js} +2 -1
- package/dist/web/_app/immutable/chunks/BeBar3OL.js +1 -0
- package/dist/web/_app/immutable/chunks/BuOTIbJu.js +1 -0
- package/dist/web/_app/immutable/chunks/CLFba8FK.js +5 -0
- package/dist/web/_app/immutable/chunks/CQCkXCml.js +1 -0
- package/dist/web/_app/immutable/chunks/CXuhHL4d.js +1 -0
- package/dist/web/_app/immutable/chunks/Cg9NOuOl.js +27 -0
- package/dist/web/_app/immutable/chunks/Cs5oz2oJ.js +5 -0
- package/dist/web/_app/immutable/chunks/Cs_ROD7H.js +2 -0
- package/dist/web/_app/immutable/chunks/D2aTbzFm.js +3 -0
- package/dist/web/_app/immutable/chunks/D4FXhiC2.js +1 -0
- package/dist/web/_app/immutable/chunks/D4VHRYeB.js +1 -0
- package/dist/web/_app/immutable/chunks/DCGSm8Hl.js +1 -0
- package/dist/web/_app/immutable/chunks/DP09rP34.js +2 -0
- package/dist/web/_app/immutable/chunks/DiP47fAp.js +1 -0
- package/dist/web/_app/immutable/chunks/DptGlK8O.js +1 -0
- package/dist/web/_app/immutable/chunks/O0fx2ss6.js +1 -0
- package/dist/web/_app/immutable/chunks/xBRYfpah.js +1 -0
- package/dist/web/_app/immutable/entry/app.FgnywZP_.js +2 -0
- package/dist/web/_app/immutable/entry/start.Bsa-zlPf.js +1 -0
- package/dist/web/_app/immutable/nodes/0.D3SW-LMc.js +10 -0
- package/dist/web/_app/immutable/nodes/1.y0c5TQTP.js +1 -0
- package/dist/web/_app/immutable/nodes/2.BQfSep9-.js +1 -0
- package/dist/web/_app/immutable/nodes/3.CC4Y-xMM.js +11 -0
- package/dist/web/_app/immutable/nodes/{5.BBpmYkAu.js → 4.Dp0Z-oPW.js} +2 -2
- package/dist/web/_app/immutable/nodes/5.gjZ03DON.js +2 -0
- package/dist/web/_app/immutable/nodes/6.dRNIwcJQ.js +1 -0
- package/dist/web/_app/immutable/nodes/7.I4Gjes3o.js +2 -0
- package/dist/web/_app/immutable/nodes/8.Dj14D7uH.js +1 -0
- package/dist/web/_app/version.json +1 -1
- package/dist/web/index.html +10 -12
- package/package.json +12 -2
- package/dist/web/_app/immutable/assets/0.CDbX4Cwz.css +0 -1
- package/dist/web/_app/immutable/assets/3.BJy7pVXi.css +0 -1
- package/dist/web/_app/immutable/assets/4.Ad16uh9o.css +0 -1
- package/dist/web/_app/immutable/assets/6.Bm2i7O0j.css +0 -1
- package/dist/web/_app/immutable/assets/AppShell.D0rmbdqF.css +0 -1
- package/dist/web/_app/immutable/assets/ChatPanel.RFD5GGYI.css +0 -1
- package/dist/web/_app/immutable/assets/editor.CPAf2SRV.css +0 -1
- package/dist/web/_app/immutable/chunks/479TgXB4.js +0 -1
- package/dist/web/_app/immutable/chunks/4QY4j-jX.js +0 -1
- package/dist/web/_app/immutable/chunks/BFb0g4TQ.js +0 -64
- package/dist/web/_app/immutable/chunks/Bopa-Ask.js +0 -1
- package/dist/web/_app/immutable/chunks/COwytaCP.js +0 -1
- package/dist/web/_app/immutable/chunks/DEJSHbC3.js +0 -1
- package/dist/web/_app/immutable/chunks/DNywhIex.js +0 -23
- package/dist/web/_app/immutable/chunks/DTUXhwEY.js +0 -1
- package/dist/web/_app/immutable/chunks/DThXpa0U.js +0 -6
- package/dist/web/_app/immutable/chunks/Dh_H7Owr.js +0 -18
- package/dist/web/_app/immutable/chunks/Dml-u95b.js +0 -2
- package/dist/web/_app/immutable/chunks/DnlgZ_Tk.js +0 -5
- package/dist/web/_app/immutable/chunks/DtVH--hH.js +0 -6
- package/dist/web/_app/immutable/chunks/DvKVaE7M.js +0 -1
- package/dist/web/_app/immutable/chunks/MbiSz-iW.js +0 -2
- package/dist/web/_app/immutable/chunks/bSAC733J.js +0 -1
- package/dist/web/_app/immutable/entry/app.BvodXQQ0.js +0 -2
- package/dist/web/_app/immutable/entry/start.Bkui3Kyw.js +0 -1
- package/dist/web/_app/immutable/nodes/0.DfbCOBhn.js +0 -2
- package/dist/web/_app/immutable/nodes/1.vtxUGpe6.js +0 -1
- package/dist/web/_app/immutable/nodes/2.Cq29oW4h.js +0 -1
- package/dist/web/_app/immutable/nodes/3.SquslPZy.js +0 -1
- package/dist/web/_app/immutable/nodes/4.COV8FR8b.js +0 -16
- package/dist/web/_app/immutable/nodes/6.BBbh6z9I.js +0 -2
- /package/dist/web/_app/immutable/assets/{5.BhKgiXd2.css → 4.BhKgiXd2.css} +0 -0
package/dist/utils/git.js
CHANGED
|
@@ -3,48 +3,59 @@
|
|
|
3
3
|
* Extracted so tests can mock them without mocking the built-in child_process.
|
|
4
4
|
*/
|
|
5
5
|
import { execSync, spawnSync } from 'child_process';
|
|
6
|
-
import {
|
|
6
|
+
import { writeFileSync, chmodSync, unlinkSync } from 'fs';
|
|
7
7
|
import { join } from 'path';
|
|
8
8
|
import { tmpdir } from 'os';
|
|
9
|
-
import { loadToken } from '../auth/github.js';
|
|
10
9
|
/**
|
|
11
|
-
* Pull the latest changes in a local git repo.
|
|
12
|
-
*
|
|
13
|
-
* (
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
10
|
+
* Pull the latest changes in a local git repo using fetch + fast-forward merge.
|
|
11
|
+
* Returns 'updated', 'up-to-date', or 'diverged' (local has commits the remote doesn't).
|
|
12
|
+
* Throws on hard errors (no remote, auth failure, fetch error, etc.).
|
|
13
|
+
*
|
|
14
|
+
* Fast-forward only: if the branches have diverged the caller should ask the
|
|
15
|
+
* user to resolve manually with `git pull --rebase`.
|
|
17
16
|
*/
|
|
18
17
|
export function gitPull(repoPath, opts) {
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
const
|
|
22
|
-
if (
|
|
23
|
-
|
|
18
|
+
const creds = opts?.credentials;
|
|
19
|
+
let askpassPath;
|
|
20
|
+
const env = { ...process.env };
|
|
21
|
+
if (creds) {
|
|
22
|
+
askpassPath = join(tmpdir(), `.studiograph-askpass-${process.pid}`);
|
|
23
|
+
writeFileSync(askpassPath, [
|
|
24
|
+
'#!/bin/sh',
|
|
25
|
+
`case "$1" in`,
|
|
26
|
+
` *[Uu]sername*) echo "${creds.username}" ;;`,
|
|
27
|
+
` *) echo "${creds.password}" ;;`,
|
|
28
|
+
'esac',
|
|
29
|
+
].join('\n'), 'utf-8');
|
|
30
|
+
chmodSync(askpassPath, 0o700);
|
|
31
|
+
env.GIT_ASKPASS = askpassPath;
|
|
32
|
+
env.GIT_TERMINAL_PROMPT = '0';
|
|
24
33
|
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
34
|
+
// Fetch — clear credential.helper only when injecting our own credentials so that
|
|
35
|
+
// macOS Keychain / stored tokens continue to work for GitHub remotes.
|
|
36
|
+
const fetchArgs = creds
|
|
37
|
+
? ['-c', 'credential.helper=', 'fetch', '--prune']
|
|
38
|
+
: ['fetch', '--prune'];
|
|
39
|
+
const fetch = spawnSync('git', fetchArgs, { cwd: repoPath, encoding: 'utf-8', stdio: 'pipe', env });
|
|
40
|
+
if (askpassPath) {
|
|
41
|
+
try {
|
|
42
|
+
unlinkSync(askpassPath);
|
|
43
|
+
}
|
|
44
|
+
catch { /* non-fatal */ }
|
|
45
|
+
}
|
|
46
|
+
if (fetch.status !== 0) {
|
|
47
|
+
throw new Error((fetch.stderr || fetch.stdout || 'git fetch failed').trim());
|
|
48
|
+
}
|
|
49
|
+
// Fast-forward merge only — exits non-zero if branches have diverged
|
|
50
|
+
const merge = spawnSync('git', ['merge', '--ff-only', 'FETCH_HEAD'], {
|
|
51
|
+
cwd: repoPath, encoding: 'utf-8', stdio: 'pipe',
|
|
52
|
+
});
|
|
53
|
+
if (merge.status === 0) {
|
|
54
|
+
return (merge.stdout + merge.stderr).toLowerCase().includes('already up to date')
|
|
32
55
|
? 'up-to-date'
|
|
33
56
|
: 'updated';
|
|
34
57
|
}
|
|
35
|
-
|
|
36
|
-
if (combined.includes('CONFLICT') || combined.includes('could not apply')) {
|
|
37
|
-
if (abortOnConflict) {
|
|
38
|
-
spawnSync('git', ['rebase', '--abort'], { cwd: repoPath, encoding: 'utf-8' });
|
|
39
|
-
if (dirty)
|
|
40
|
-
spawnSync('git', ['stash', 'pop'], { cwd: repoPath, encoding: 'utf-8' });
|
|
41
|
-
}
|
|
42
|
-
// When !abortOnConflict, stash stays parked — resolver will pop after resolution
|
|
43
|
-
return 'conflict';
|
|
44
|
-
}
|
|
45
|
-
if (dirty)
|
|
46
|
-
spawnSync('git', ['stash', 'pop'], { cwd: repoPath, encoding: 'utf-8' });
|
|
47
|
-
throw new Error((result.stderr || result.stdout || `git pull failed with exit ${result.status}`).trim());
|
|
58
|
+
return 'diverged';
|
|
48
59
|
}
|
|
49
60
|
/**
|
|
50
61
|
* Push local commits in a git repo to its remote.
|
|
@@ -63,13 +74,6 @@ export function gitPush(repoPath) {
|
|
|
63
74
|
}
|
|
64
75
|
throw new Error((combined || `git push failed with exit ${result.status}`).trim());
|
|
65
76
|
}
|
|
66
|
-
/**
|
|
67
|
-
* Pop the most recent stash entry, if any.
|
|
68
|
-
* Safe to call even if the stash is empty.
|
|
69
|
-
*/
|
|
70
|
-
export function gitStashPop(repoPath) {
|
|
71
|
-
spawnSync('git', ['stash', 'pop'], { cwd: repoPath, encoding: 'utf-8' });
|
|
72
|
-
}
|
|
73
77
|
/**
|
|
74
78
|
* Check if a git repo has uncommitted changes (staged or unstaged).
|
|
75
79
|
* Returns true if the working tree is dirty.
|
|
@@ -85,6 +89,65 @@ export function isGitRepo(repoPath) {
|
|
|
85
89
|
const result = spawnSync('git', ['rev-parse', '--git-dir'], { cwd: repoPath, encoding: 'utf-8' });
|
|
86
90
|
return result.status === 0;
|
|
87
91
|
}
|
|
92
|
+
/**
|
|
93
|
+
* Check if a git repo has a remote named "origin" configured.
|
|
94
|
+
*/
|
|
95
|
+
export function gitHasRemote(repoPath) {
|
|
96
|
+
const result = spawnSync('git', ['remote', 'get-url', 'origin'], { cwd: repoPath, encoding: 'utf-8' });
|
|
97
|
+
return result.status === 0 && result.stdout.trim().length > 0;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Set or update the 'origin' remote URL on a local git repo.
|
|
101
|
+
*/
|
|
102
|
+
export function gitSetRemote(repoPath, url) {
|
|
103
|
+
const hasOrigin = gitHasRemote(repoPath);
|
|
104
|
+
if (hasOrigin) {
|
|
105
|
+
spawnSync('git', ['remote', 'set-url', 'origin', url], { cwd: repoPath, encoding: 'utf-8' });
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
spawnSync('git', ['remote', 'add', 'origin', url], { cwd: repoPath, encoding: 'utf-8' });
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Push local commits to origin with Basic Auth credentials via GIT_ASKPASS.
|
|
113
|
+
* Used for pushing to the embedded git server.
|
|
114
|
+
*/
|
|
115
|
+
export function gitPushWithCredentials(repoPath, credentials) {
|
|
116
|
+
const askpassPath = join(tmpdir(), `.studiograph-askpass-${process.pid}`);
|
|
117
|
+
writeFileSync(askpassPath, [
|
|
118
|
+
'#!/bin/sh',
|
|
119
|
+
`case "$1" in`,
|
|
120
|
+
` *[Uu]sername*) echo "${credentials.username}" ;;`,
|
|
121
|
+
` *) echo "${credentials.password}" ;;`,
|
|
122
|
+
'esac',
|
|
123
|
+
].join('\n'), 'utf-8');
|
|
124
|
+
chmodSync(askpassPath, 0o700);
|
|
125
|
+
const env = {
|
|
126
|
+
...process.env,
|
|
127
|
+
GIT_ASKPASS: askpassPath,
|
|
128
|
+
GIT_TERMINAL_PROMPT: '0',
|
|
129
|
+
};
|
|
130
|
+
try {
|
|
131
|
+
const result = spawnSync('git', ['-c', 'credential.helper=', 'push', '-u', 'origin', 'main'], {
|
|
132
|
+
cwd: repoPath, encoding: 'utf-8', env,
|
|
133
|
+
});
|
|
134
|
+
if (result.status === 0) {
|
|
135
|
+
const combined = result.stdout + result.stderr;
|
|
136
|
+
return combined.includes('Everything up-to-date') ? 'nothing-to-push' : 'pushed';
|
|
137
|
+
}
|
|
138
|
+
const combined = result.stdout + result.stderr;
|
|
139
|
+
if (combined.includes('non-fast-forward') || combined.includes('fetch first') || combined.includes('rejected')) {
|
|
140
|
+
return 'rejected';
|
|
141
|
+
}
|
|
142
|
+
throw new Error((combined || `git push failed with exit ${result.status}`).trim());
|
|
143
|
+
}
|
|
144
|
+
finally {
|
|
145
|
+
try {
|
|
146
|
+
unlinkSync(askpassPath);
|
|
147
|
+
}
|
|
148
|
+
catch { /* non-fatal */ }
|
|
149
|
+
}
|
|
150
|
+
}
|
|
88
151
|
/**
|
|
89
152
|
* Clone a remote repository to a local path.
|
|
90
153
|
*
|
|
@@ -98,30 +161,32 @@ export function isGitRepo(repoPath) {
|
|
|
98
161
|
*/
|
|
99
162
|
export function gitClone(remoteUrl, localPath, opts) {
|
|
100
163
|
const silent = opts?.silent ?? false;
|
|
164
|
+
const creds = opts?.credentials;
|
|
101
165
|
const env = { ...process.env };
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
const isHttps = remoteUrl.startsWith('https://');
|
|
106
|
-
if (token && isHttps) {
|
|
107
|
-
// Create a temporary GIT_ASKPASS script that echoes the token.
|
|
108
|
-
// This is safer than embedding the token in the URL (which leaks in
|
|
109
|
-
// error messages and /proc/cmdline).
|
|
166
|
+
let hasCredentials = false;
|
|
167
|
+
if (creds) {
|
|
168
|
+
// Basic Auth for embedded git server — use GIT_ASKPASS to supply credentials
|
|
110
169
|
const askpassPath = join(tmpdir(), `.studiograph-askpass-${process.pid}`);
|
|
111
|
-
|
|
170
|
+
// The script receives the prompt ("Username for ..." or "Password for ...") as $1
|
|
171
|
+
writeFileSync(askpassPath, [
|
|
172
|
+
'#!/bin/sh',
|
|
173
|
+
`case "$1" in`,
|
|
174
|
+
` *[Uu]sername*) echo "${creds.username}" ;;`,
|
|
175
|
+
` *) echo "${creds.password}" ;;`,
|
|
176
|
+
'esac',
|
|
177
|
+
].join('\n'), 'utf-8');
|
|
112
178
|
chmodSync(askpassPath, 0o700);
|
|
113
179
|
env.GIT_ASKPASS = askpassPath;
|
|
114
|
-
// Suppress any other credential helpers that might prompt
|
|
115
180
|
env.GIT_TERMINAL_PROMPT = '0';
|
|
181
|
+
hasCredentials = true;
|
|
116
182
|
}
|
|
117
183
|
else if (silent) {
|
|
118
|
-
// Server context with no token — fail fast instead of blocking forever
|
|
119
184
|
env.GIT_TERMINAL_PROMPT = '0';
|
|
120
185
|
}
|
|
121
|
-
// If !silent and no token, leave stdio inherited so Git can prompt the user
|
|
122
|
-
const stdio = (
|
|
186
|
+
// If !silent and no credentials/token, leave stdio inherited so Git can prompt the user
|
|
187
|
+
const stdio = (hasCredentials || silent) ? 'pipe' : 'inherit';
|
|
123
188
|
try {
|
|
124
|
-
execSync(`git clone "${remoteUrl}" "${localPath}"`, { stdio, env, timeout: 120_000 });
|
|
189
|
+
execSync(`git -c credential.helper= clone "${remoteUrl}" "${localPath}"`, { stdio, env, timeout: 120_000 });
|
|
125
190
|
}
|
|
126
191
|
finally {
|
|
127
192
|
// Clean up askpass script
|
|
@@ -133,14 +198,6 @@ export function gitClone(remoteUrl, localPath, opts) {
|
|
|
133
198
|
}
|
|
134
199
|
}
|
|
135
200
|
}
|
|
136
|
-
/**
|
|
137
|
-
* Check if a git repo is currently in a rebase state.
|
|
138
|
-
* Looks for .git/rebase-merge/ or .git/rebase-apply/ directories.
|
|
139
|
-
*/
|
|
140
|
-
export function isInRebase(repoPath) {
|
|
141
|
-
return existsSync(join(repoPath, '.git', 'rebase-merge')) ||
|
|
142
|
-
existsSync(join(repoPath, '.git', 'rebase-apply'));
|
|
143
|
-
}
|
|
144
201
|
/**
|
|
145
202
|
* Read a git config value.
|
|
146
203
|
* Returns undefined if the key is not set.
|
package/dist/utils/git.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/utils/git.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/utils/git.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,11 +11,6 @@ export interface CheckResult {
|
|
|
11
11
|
message: string;
|
|
12
12
|
hint?: string;
|
|
13
13
|
}
|
|
14
|
-
export interface AuthCheckResult {
|
|
15
|
-
present: boolean;
|
|
16
|
-
message: string;
|
|
17
|
-
hint?: string;
|
|
18
|
-
}
|
|
19
14
|
/**
|
|
20
15
|
* Check that git is installed and on PATH.
|
|
21
16
|
*/
|
|
@@ -24,22 +19,13 @@ export declare function checkGit(): CheckResult;
|
|
|
24
19
|
* Check that the running Node.js meets the minimum version requirement.
|
|
25
20
|
*/
|
|
26
21
|
export declare function checkNode(): CheckResult;
|
|
27
|
-
/**
|
|
28
|
-
* Check whether a GitHub auth token is available.
|
|
29
|
-
* Checks env vars first, then stored file.
|
|
30
|
-
* This is contextual — absence is a warning, not a failure.
|
|
31
|
-
*/
|
|
32
|
-
export declare function checkGithubAuth(): AuthCheckResult;
|
|
33
22
|
export interface PreflightOptions {
|
|
34
|
-
/** Show the GitHub auth contextual check. Default: true */
|
|
35
|
-
checkGithubAuth?: boolean;
|
|
36
23
|
}
|
|
37
24
|
/**
|
|
38
25
|
* Run pre-flight checks and print results using clack log symbols.
|
|
39
26
|
*
|
|
40
27
|
* Required checks (git, Node.js) print as success or error.
|
|
41
|
-
* Contextual checks (GitHub auth) print as success or warning.
|
|
42
28
|
*
|
|
43
29
|
* Returns false if any required check fails — caller should exit(1).
|
|
44
30
|
*/
|
|
45
|
-
export declare function runPreflight(
|
|
31
|
+
export declare function runPreflight(_options?: PreflightOptions): boolean;
|
package/dist/utils/preflight.js
CHANGED
|
@@ -6,7 +6,6 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { execSync } from 'child_process';
|
|
8
8
|
import { log } from '@clack/prompts';
|
|
9
|
-
import { loadToken } from '../auth/github.js';
|
|
10
9
|
/** Minimum supported Node.js major version */
|
|
11
10
|
export const MIN_NODE_MAJOR = 20;
|
|
12
11
|
/**
|
|
@@ -42,38 +41,14 @@ export function checkNode() {
|
|
|
42
41
|
hint: `Install Node.js v${MIN_NODE_MAJOR}+ from https://nodejs.org`,
|
|
43
42
|
};
|
|
44
43
|
}
|
|
45
|
-
/**
|
|
46
|
-
* Check whether a GitHub auth token is available.
|
|
47
|
-
* Checks env vars first, then stored file.
|
|
48
|
-
* This is contextual — absence is a warning, not a failure.
|
|
49
|
-
*/
|
|
50
|
-
export function checkGithubAuth() {
|
|
51
|
-
if (process.env.STUDIOGRAPH_GITHUB_TOKEN) {
|
|
52
|
-
return { present: true, message: 'GitHub auth configured (via STUDIOGRAPH_GITHUB_TOKEN)' };
|
|
53
|
-
}
|
|
54
|
-
if (process.env.GITHUB_TOKEN) {
|
|
55
|
-
return { present: true, message: 'GitHub auth configured (via GITHUB_TOKEN)' };
|
|
56
|
-
}
|
|
57
|
-
const stored = loadToken();
|
|
58
|
-
if (stored) {
|
|
59
|
-
return { present: true, message: `GitHub auth configured (${stored.user.login})` };
|
|
60
|
-
}
|
|
61
|
-
return {
|
|
62
|
-
present: false,
|
|
63
|
-
message: 'GitHub auth not configured',
|
|
64
|
-
hint: 'run `studiograph auth github` to set up',
|
|
65
|
-
};
|
|
66
|
-
}
|
|
67
44
|
/**
|
|
68
45
|
* Run pre-flight checks and print results using clack log symbols.
|
|
69
46
|
*
|
|
70
47
|
* Required checks (git, Node.js) print as success or error.
|
|
71
|
-
* Contextual checks (GitHub auth) print as success or warning.
|
|
72
48
|
*
|
|
73
49
|
* Returns false if any required check fails — caller should exit(1).
|
|
74
50
|
*/
|
|
75
|
-
export function runPreflight(
|
|
76
|
-
const { checkGithubAuth: checkAuth = true } = options;
|
|
51
|
+
export function runPreflight(_options = {}) {
|
|
77
52
|
const gitResult = checkGit();
|
|
78
53
|
const nodeResult = checkNode();
|
|
79
54
|
if (gitResult.passed) {
|
|
@@ -88,15 +63,6 @@ export function runPreflight(options = {}) {
|
|
|
88
63
|
else {
|
|
89
64
|
log.error(`${nodeResult.message}${nodeResult.hint ? ` — ${nodeResult.hint}` : ''}`);
|
|
90
65
|
}
|
|
91
|
-
if (checkAuth) {
|
|
92
|
-
const authResult = checkGithubAuth();
|
|
93
|
-
if (authResult.present) {
|
|
94
|
-
log.success(authResult.message);
|
|
95
|
-
}
|
|
96
|
-
else {
|
|
97
|
-
log.warn(`${authResult.message}${authResult.hint ? ` — ${authResult.hint}` : ''}`);
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
66
|
return gitResult.passed && nodeResult.passed;
|
|
101
67
|
}
|
|
102
68
|
//# sourceMappingURL=preflight.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preflight.js","sourceRoot":"","sources":["../../src/utils/preflight.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"preflight.js","sourceRoot":"","sources":["../../src/utils/preflight.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAErC,8CAA8C;AAC9C,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC;AAQjC;;GAEG;AACH,MAAM,UAAU,QAAQ;IACtB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;QAC9E,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAChD,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAC1C,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,OAAO,QAAQ,EAAE,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;YACL,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,eAAe;YACxB,IAAI,EAAE,sCAAsC;SAC7C,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS;IACvB,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;IACtC,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAClD,IAAI,KAAK,IAAI,cAAc,EAAE,CAAC;QAC5B,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,OAAO,QAAQ,EAAE,CAAC;IAChE,CAAC;IACD,OAAO;QACL,MAAM,EAAE,KAAK;QACb,OAAO,EAAE,YAAY,OAAO,0BAA0B,cAAc,IAAI;QACxE,IAAI,EAAE,oBAAoB,cAAc,2BAA2B;KACpE,CAAC;AACJ,CAAC;AAMD;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,WAA6B,EAAE;IAC1D,MAAM,SAAS,GAAG,QAAQ,EAAE,CAAC;IAC7B,MAAM,UAAU,GAAG,SAAS,EAAE,CAAC;IAE/B,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;QACrB,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACnF,CAAC;IAED,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;QACtB,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACtF,CAAC;IAED,OAAO,SAAS,CAAC,MAAM,IAAI,UAAU,CAAC,MAAM,CAAC;AAC/C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--font-sans:"Inter", ui-sans-serif, system-ui, sans-serif;--font-mono:"JetBrains Mono", ui-monospace, monospace;--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-lg:32rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--leading-snug:1.375;--leading-normal:1.5;--leading-relaxed:1.625;--radius-sm:4px;--radius-md:6px;--radius-lg:12px;--ease-in-out:cubic-bezier(.4, 0, .2, 1);--animate-spin:spin 1s linear infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-accent:#6e6ee8;--color-accent-hover:#5c5cd6;--color-success:#3ecf8e;--color-destructive:#e54d4d;--color-destructive-hover:#c93c3c;--color-link:#8b8bf0}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}*{box-sizing:border-box;margin:0;padding:0}:focus{outline:none}body{font-family:var(--font-sans);color:var(--color-text-primary);background:var(--color-bg);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:13px;line-height:20px}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--color-border-strong);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:var(--color-text-tertiary)}}@layer components;@layer utilities{.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.inset-0{inset:calc(var(--spacing) * 0)}.start{inset-inline-start:var(--spacing)}.end{inset-inline-end:var(--spacing)}.top-\[50\%\]{top:50%}.left-\[50\%\]{left:50%}.z-50{z-index:50}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.my-0{margin-block:calc(var(--spacing) * 0)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.ml-2{margin-left:calc(var(--spacing) * 2)}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.list-item{display:list-item}.table{display:table}.table-caption{display:table-caption}.table-cell{display:table-cell}.table-row{display:table-row}.aspect-square{aspect-ratio:1}.size-3{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-6{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.size-7{width:calc(var(--spacing) * 7);height:calc(var(--spacing) * 7)}.size-8{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.size-10{width:calc(var(--spacing) * 10);height:calc(var(--spacing) * 10)}.size-\[22px\]{width:22px;height:22px}.size-full{width:100%;height:100%}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.w-fit{width:fit-content}.w-full{width:100%}.max-w-\[calc\(100\%-2rem\)\]{max-width:calc(100% - 2rem)}.flex-1{flex:1}.flex-shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.basis-full{flex-basis:100%}.caption-bottom{caption-side:bottom}.border-collapse{border-collapse:collapse}.translate-x-\[-50\%\]{--tw-translate-x:-50%;translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-y-\[-50\%\]{--tw-translate-y:-50%;translate:var(--tw-translate-x) var(--tw-translate-y)}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-spin{animation:var(--animate-spin)}.cursor-pointer{cursor:pointer}.resize{resize:both}.resize-y{resize:vertical}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.items-baseline{align-items:baseline}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-start{justify-content:flex-start}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-\[11px\]{gap:11px}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.rounded-\[4px\]{border-radius:4px}.rounded-\[6px\]{border-radius:6px}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-\[var\(--color-border\)\]{border-color:var(--color-border)}.border-transparent{border-color:#0000}.bg-\[var\(--color-accent\)\]{background-color:var(--color-accent)}.bg-\[var\(--color-badge-bg\)\]{background-color:var(--color-badge-bg)}.bg-\[var\(--color-bg\)\]{background-color:var(--color-bg)}.bg-\[var\(--color-bg-elevated\)\]{background-color:var(--color-bg-elevated)}.bg-\[var\(--color-bg-surface\)\]{background-color:var(--color-bg-surface)}.bg-\[var\(--color-destructive\)\]{background-color:var(--color-destructive)}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.bg-black\/50{background-color:color-mix(in oklab,var(--color-black) 50%,transparent)}}.bg-transparent{background-color:#0000}.bg-clip-padding{background-clip:padding-box}.p-0{padding:calc(var(--spacing) * 0)}.p-2{padding:calc(var(--spacing) * 2)}.p-6{padding:calc(var(--spacing) * 6)}.p-\[3px\]{padding:3px}.px-0{padding-inline:calc(var(--spacing) * 0)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.pr-3{padding-right:calc(var(--spacing) * 3)}.pl-\[19px\]{padding-left:19px}.text-center{text-align:center}.text-start{text-align:start}.align-baseline{vertical-align:baseline}.align-middle{vertical-align:middle}.font-\[inherit\]{font-family:inherit}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[13px\]{font-size:13px}.leading-normal{--tw-leading:var(--leading-normal);line-height:var(--leading-normal)}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.whitespace-nowrap{white-space:nowrap}.text-\[var\(--color-accent\)\]{color:var(--color-accent)}.text-\[var\(--color-badge-text\)\]{color:var(--color-badge-text)}.text-\[var\(--color-text-primary\)\]{color:var(--color-text-primary)}.text-\[var\(--color-text-secondary\)\]{color:var(--color-text-secondary)}.text-\[var\(--color-text-tertiary\)\]{color:var(--color-text-tertiary)}.text-current{color:currentColor}.text-white{color:var(--color-white)}.italic{font-style:italic}.underline{text-decoration-line:underline}.underline-offset-4{text-underline-offset:4px}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[color\,background\]{transition-property:color,background;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-100{--tw-duration:.1s;transition-duration:.1s}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.outline-none{--tw-outline-style:none;outline-style:none}.placeholder\:text-\[var\(--color-text-tertiary\)\]::placeholder{color:var(--color-text-tertiary)}@media(hover:hover){.hover\:border-\[var\(--color-accent\)\]:hover{border-color:var(--color-accent)}.hover\:bg-\[var\(--color-accent-hover\)\]:hover{background-color:var(--color-accent-hover)}.hover\:bg-\[var\(--color-bg-hover\)\]:hover{background-color:var(--color-bg-hover)}.hover\:bg-\[var\(--color-destructive-hover\)\]:hover{background-color:var(--color-destructive-hover)}.hover\:text-\[var\(--color-text-primary\)\]:hover{color:var(--color-text-primary)}.hover\:text-\[var\(--color-text-secondary\)\]:hover{color:var(--color-text-secondary)}.hover\:underline:hover{text-decoration-line:underline}}.focus\:border-\[var\(--color-accent\,\#6e6ee8\)\]:focus{border-color:var(--color-accent,#6e6ee8)}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-\[var\(--color-accent\)\]:focus-visible{--tw-ring-color:var(--color-accent)}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.focus-visible\:ring-offset-\[var\(--color-bg-primary\)\]:focus-visible{--tw-ring-offset-color:var(--color-bg-primary)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.data-\[orientation\=horizontal\]\:h-px[data-orientation=horizontal]{height:1px}.data-\[orientation\=horizontal\]\:w-full[data-orientation=horizontal]{width:100%}.data-\[orientation\=vertical\]\:min-h-full[data-orientation=vertical]{min-height:100%}.data-\[orientation\=vertical\]\:w-px[data-orientation=vertical]{width:1px}.data-\[state\=active\]\:bg-\[var\(--color-bg-hover\)\][data-state=active]{background-color:var(--color-bg-hover)}.data-\[state\=active\]\:font-medium[data-state=active]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.data-\[state\=active\]\:text-\[var\(--color-text-primary\)\][data-state=active]{color:var(--color-text-primary)}.data-\[state\=active\]\:shadow-sm[data-state=active]{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.data-\[state\=checked\]\:border-\[var\(--color-accent\)\][data-state=checked]{border-color:var(--color-accent)}.data-\[state\=checked\]\:bg-\[var\(--color-accent\)\][data-state=checked]{background-color:var(--color-accent)}.data-\[state\=checked\]\:text-white[data-state=checked]{color:var(--color-white)}@media(min-width:40rem){.sm\:max-w-lg{max-width:var(--container-lg)}.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}.sm\:text-start{text-align:start}}.\[\&_img\]\:size-full img{width:100%;height:100%}.\[\&_img\]\:object-cover img{object-fit:cover}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 svg:not([class*=size-]){width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.\[\&_tr\]\:border-b tr{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-style:var(--tw-border-style);border-width:0}.\[\&\+\[data-slot\=item-content\]\]\:flex-none+[data-slot=item-content]{flex:none}.\[\&\:has\(\[role\=checkbox\]\)\]\:pe-0:has([role=checkbox]){padding-inline-end:calc(var(--spacing) * 0)}.\[\&\>svg\]\:pointer-events-none>svg{pointer-events:none}.\[\&\>svg\]\:size-3>svg{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.\[\&\>tr\]\:last\:border-b-0>tr:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}}:root,[data-theme=dark]{--color-bg:#09090b;--color-bg-elevated:#0f0f12;--color-bg-surface:#141418;--color-bg-hover:#1a1a1f;--color-bg-selected:#1a1a1f;--color-border:#1e1e24;--color-border-strong:#2a2a32;--color-text-primary:#ededef;--color-text-secondary:#a0a0a6;--color-text-tertiary:#5c5c66;--color-accent-muted:#8b8bf014;--color-badge-bg:#1a1a22;--color-badge-text:#8b8b94}[data-theme=light]{--color-bg:#f8f8fa;--color-bg-elevated:#f0f0f3;--color-bg-surface:#e8e8ec;--color-bg-hover:#e2e2e8;--color-bg-selected:#e2e2e8;--color-border:#dadadf;--color-border-strong:#c9c9d0;--color-text-primary:#1a1a1f;--color-text-secondary:#63636b;--color-text-tertiary:#9898a0;--color-accent-muted:#6e6ee814;--color-badge-bg:#e0e0e5;--color-badge-text:#63636b}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}html[dir=ltr],[data-sonner-toaster][dir=ltr]{--toast-icon-margin-start: -3px;--toast-icon-margin-end: 4px;--toast-svg-margin-start: -1px;--toast-svg-margin-end: 0px;--toast-button-margin-start: auto;--toast-button-margin-end: 0;--toast-close-button-start: 0;--toast-close-button-end: unset;--toast-close-button-transform: translate(-35%, -35%)}html[dir=rtl],[data-sonner-toaster][dir=rtl]{--toast-icon-margin-start: 4px;--toast-icon-margin-end: -3px;--toast-svg-margin-start: 0px;--toast-svg-margin-end: -1px;--toast-button-margin-start: 0;--toast-button-margin-end: auto;--toast-close-button-start: unset;--toast-close-button-end: 0;--toast-close-button-transform: translate(35%, -35%)}[data-sonner-toaster]{position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1: hsl(0, 0%, 99%);--gray2: hsl(0, 0%, 97.3%);--gray3: hsl(0, 0%, 95.1%);--gray4: hsl(0, 0%, 93%);--gray5: hsl(0, 0%, 90.9%);--gray6: hsl(0, 0%, 88.7%);--gray7: hsl(0, 0%, 85.8%);--gray8: hsl(0, 0%, 78%);--gray9: hsl(0, 0%, 56.1%);--gray10: hsl(0, 0%, 52.3%);--gray11: hsl(0, 0%, 43.5%);--gray12: hsl(0, 0%, 9%);--border-radius: 8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:none;z-index:999999999;transition:transform .4s ease}@media(hover:none)and (pointer:coarse){[data-sonner-toaster][data-lifted=true]{transform:none}}[data-sonner-toaster][data-x-position=right]{right:var(--offset-right)}[data-sonner-toaster][data-x-position=left]{left:var(--offset-left)}[data-sonner-toaster][data-x-position=center]{left:50%;transform:translate(-50%)}[data-sonner-toaster][data-y-position=top]{top:var(--offset-top)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--offset-bottom)}[data-sonner-toast]{--y: translateY(100%);--lift-amount: calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);touch-action:none;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:none;overflow-wrap:anywhere}[data-sonner-toast][data-styled=true]{padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px #0000001a;width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}[data-sonner-toast]:focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}[data-sonner-toast][data-y-position=top]{top:0;--y: translateY(-100%);--lift: 1;--lift-amount: calc(1 * var(--gap))}[data-sonner-toast][data-y-position=bottom]{bottom:0;--y: translateY(100%);--lift: -1;--lift-amount: calc(var(--lift) * var(--gap))}[data-sonner-toast][data-styled=true] [data-description]{font-weight:400;line-height:1.4;color:#3f3f3f}[data-rich-colors=true][data-sonner-toast][data-styled=true] [data-description]{color:inherit}[data-sonner-toaster][data-sonner-theme=dark] [data-description]{color:#e8e8e8}[data-sonner-toast][data-styled=true] [data-title]{font-weight:500;line-height:1.5;color:inherit}[data-sonner-toast][data-styled=true] [data-icon]{display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}[data-sonner-toast][data-promise=true] [data-icon]>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}[data-sonner-toast][data-styled=true] [data-icon]>*{flex-shrink:0}[data-sonner-toast][data-styled=true] [data-icon] svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}[data-sonner-toast][data-styled=true] [data-content]{display:flex;flex-direction:column;gap:2px}[data-sonner-toast][data-styled=true] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;font-weight:500;cursor:pointer;outline:none;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}[data-sonner-toast][data-styled=true] [data-button]:focus-visible{box-shadow:0 0 0 2px #0006}[data-sonner-toast][data-styled=true] [data-button]:first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}[data-sonner-toast][data-styled=true] [data-cancel]{color:var(--normal-text);background:#00000014}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-styled=true] [data-cancel]{background:#ffffff4d}[data-sonner-toast][data-styled=true] [data-close-button]{position:absolute;left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;color:var(--gray12);background:var(--normal-bg);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast][data-styled=true] [data-close-button]:focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}[data-sonner-toast][data-styled=true] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast][data-styled=true]:hover [data-close-button]:hover{background:var(--gray2);border-color:var(--gray5)}[data-sonner-toast][data-swiping=true]:before{content:"";position:absolute;left:-100%;right:-100%;height:100%;z-index:-1}[data-sonner-toast][data-y-position=top][data-swiping=true]:before{bottom:50%;transform:scaleY(3) translateY(50%)}[data-sonner-toast][data-y-position=bottom][data-swiping=true]:before{top:50%;transform:scaleY(3) translateY(-50%)}[data-sonner-toast][data-swiping=false][data-removed=true]:before{content:"";position:absolute;inset:0;transform:scaleY(2)}[data-sonner-toast][data-expanded=true]:after{content:"";position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}[data-sonner-toast][data-mounted=true]{--y: translateY(0);opacity:1}[data-sonner-toast][data-expanded=false][data-front=false]{--scale: var(--toasts-before) * .05 + 1;--y: translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}[data-sonner-toast]>*{transition:opacity .4s}[data-sonner-toast][data-x-position=right]{right:0}[data-sonner-toast][data-x-position=left]{left:0}[data-sonner-toast][data-expanded=false][data-front=false][data-styled=true]>*{opacity:0}[data-sonner-toast][data-visible=false]{opacity:0;pointer-events:none}[data-sonner-toast][data-mounted=true][data-expanded=true]{--y: translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}[data-sonner-toast][data-removed=true][data-front=true][data-swipe-out=false]{--y: translateY(calc(var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=true]{--y: translateY( calc(var(--lift) * var(--offset) + var(--lift) * -100%) );opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=false]{--y: translateY(40%);opacity:0;transition:transform .5s,opacity .2s}[data-sonner-toast][data-removed=true][data-front=false]:before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount-y, 0px)) translate(var(--swipe-amount-x, 0px));transition:none}[data-sonner-toast][data-swiped=true]{-webkit-user-select:none;user-select:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation-duration:.2s;animation-timing-function:ease-out;animation-fill-mode:forwards}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=left]{animation-name:swipe-out-left}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=right]{animation-name:swipe-out-right}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=up]{animation-name:swipe-out-up}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=down]{animation-name:swipe-out-down}@keyframes swipe-out-left{0%{transform:var(--y) translate(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translate(calc(var(--swipe-amount-x) - 100%));opacity:0}}@keyframes swipe-out-right{0%{transform:var(--y) translate(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translate(calc(var(--swipe-amount-x) + 100%));opacity:0}}@keyframes swipe-out-up{0%{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) - 100%));opacity:0}}@keyframes swipe-out-down{0%{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) + 100%));opacity:0}}@media(max-width:600px){[data-sonner-toaster]{position:fixed;right:var(--mobile-offset-right);left:var(--mobile-offset-left);width:100%}[data-sonner-toaster][dir=rtl]{left:calc(var(--mobile-offset-left) * -1)}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - var(--mobile-offset-left) * 2)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset-left)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--mobile-offset-bottom)}[data-sonner-toaster][data-y-position=top]{top:var(--mobile-offset-top)}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset-left);right:var(--mobile-offset-right);transform:none}}[data-sonner-toaster][data-sonner-theme=light]{--normal-bg: #fff;--normal-border: var(--gray4);--normal-text: var(--gray12);--success-bg: hsl(143, 85%, 96%);--success-border: hsl(145, 92%, 87%);--success-text: hsl(140, 100%, 27%);--info-bg: hsl(208, 100%, 97%);--info-border: hsl(221, 91%, 93%);--info-text: hsl(210, 92%, 45%);--warning-bg: hsl(49, 100%, 97%);--warning-border: hsl(49, 91%, 84%);--warning-text: hsl(31, 92%, 45%);--error-bg: hsl(359, 100%, 97%);--error-border: hsl(359, 100%, 94%);--error-text: hsl(360, 100%, 45%)}[data-sonner-toaster][data-sonner-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg: #fff;--normal-border: var(--gray3);--normal-text: var(--gray12)}[data-sonner-toaster][data-sonner-theme=dark]{--normal-bg: #000;--normal-bg-hover: hsl(0, 0%, 12%);--normal-border: hsl(0, 0%, 20%);--normal-border-hover: hsl(0, 0%, 25%);--normal-text: var(--gray1);--success-bg: hsl(150, 100%, 6%);--success-border: hsl(147, 100%, 12%);--success-text: hsl(150, 86%, 65%);--info-bg: hsl(215, 100%, 6%);--info-border: hsl(223, 43%, 17%);--info-text: hsl(216, 87%, 65%);--warning-bg: hsl(64, 100%, 6%);--warning-border: hsl(60, 100%, 9%);--warning-text: hsl(46, 87%, 65%);--error-bg: hsl(358, 76%, 10%);--error-border: hsl(357, 89%, 16%);--error-text: hsl(358, 100%, 81%)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]{background:var(--normal-bg);border-color:var(--normal-border);color:var(--normal-text)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]:hover{background:var(--normal-bg-hover);border-color:var(--normal-border-hover)}[data-rich-colors=true][data-sonner-toast][data-type=success],[data-rich-colors=true][data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=info],[data-rich-colors=true][data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning],[data-rich-colors=true][data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=error],[data-rich-colors=true][data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size: 16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:nth-child(1){animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}to{opacity:.15}}@media(prefers-reduced-motion){[data-sonner-toast],[data-sonner-toast]>*,.sonner-loading-bar{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)}[data-sonner-toast]{background:#0f0f12d1!important;backdrop-filter:blur(12px)!important;-webkit-backdrop-filter:blur(12px)!important;border-color:var(--color-border-strong, #2a2a32)!important;color:var(--color-text-primary, #ededef)!important}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.autocomplete.svelte-84vb17{position:relative;width:100%}.input-row.svelte-84vb17{display:flex;flex-wrap:wrap;align-items:center;gap:4px;min-height:22px;padding:0;background:transparent;border:none;border-radius:4px}.chip.svelte-84vb17{display:inline-flex;align-items:center;gap:4px;height:20px;padding:0 8px;border-radius:9999px;font-size:12px;background:var(--color-accent-muted);color:var(--color-link, #8b8bf0);flex-shrink:0}.chip.svelte-84vb17 .chip-remove{width:14px;height:14px;padding:0;color:var(--color-text-tertiary);font-size:12px;line-height:1}.chip.svelte-84vb17 .chip-remove:hover{color:var(--color-text-primary)}.ac-input.svelte-84vb17{flex:1;min-width:80px;height:22px;padding:0;font-size:13px;font-family:inherit;color:var(--color-text-primary);background:transparent;border:none;outline:none}.dropdown.svelte-84vb17{position:absolute;top:100%;left:0;right:0;margin-top:4px;max-height:240px;overflow-y:auto;background:var(--color-bg-elevated);border:1px solid var(--color-border);border-radius:6px;box-shadow:0 4px 16px #00000040;z-index:50}.dropdown-item.svelte-84vb17{display:flex;align-items:center;justify-content:space-between;padding:6px 10px;cursor:pointer;gap:8px}.dropdown-item.highlighted.svelte-84vb17{background:var(--color-bg-hover)}.entity-title.svelte-84vb17{font-size:13px;color:var(--color-text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}.entity-meta.svelte-84vb17{display:flex;align-items:center;gap:6px;flex-shrink:0}.entity-type-badge.svelte-84vb17{font-size:11px;padding:1px 6px;border-radius:9999px;background:var(--color-badge-bg);color:var(--color-badge-text)}.entity-repo.svelte-84vb17{font-size:11px;color:var(--color-text-tertiary)}.inline-properties.svelte-x7sio8{padding:16px 40px 8px;border-bottom:1px solid var(--color-border)}.ip-row.svelte-x7sio8{display:grid;grid-template-columns:20px 120px 1fr;align-items:start;gap:8px;padding:5px 8px;margin:0 -8px;border-radius:4px;min-height:30px;outline:2px solid transparent;transition:outline-color .1s}.ip-row.svelte-x7sio8:hover{outline-color:var(--color-border)}.ip-row.ip-focused.svelte-x7sio8{outline-color:var(--color-accent)}.ip-icon.svelte-x7sio8{display:flex;align-items:center;justify-content:center;color:var(--color-text-tertiary);position:relative;height:22px}.ip-key.svelte-x7sio8{font-size:13px;color:var(--color-text-tertiary);line-height:22px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ip-value.svelte-x7sio8{display:flex;align-items:center;min-height:22px;line-height:22px;position:relative;cursor:text}.ip-edit-input.svelte-x7sio8{font-size:13px;font-family:inherit;color:var(--color-text-primary);background:transparent;border:none;padding:0 4px;height:22px;line-height:22px;width:100%;outline:none}.ip-status-wrap.svelte-x7sio8{position:relative;width:100%}.ip-status-dropdown.svelte-x7sio8{position:absolute;top:100%;left:-4px;margin-top:4px;min-width:180px;background:var(--color-bg-elevated);border:1px solid var(--color-border);border-radius:6px;box-shadow:0 4px 16px #00000040;z-index:50;padding:4px;max-height:240px;overflow-y:auto}.ip-status-dropdown.svelte-x7sio8 .ip-status-option{display:flex;align-items:center;gap:6px;width:100%;padding:5px 8px;font-size:13px;color:var(--color-text-primary);border-radius:4px;text-align:left;justify-content:flex-start;height:auto}.ip-status-dropdown.svelte-x7sio8 .ip-status-option:hover{background:var(--color-bg-hover)}.ip-status-dropdown.svelte-x7sio8 .ip-status-option.selected{color:var(--color-accent)}.ip-cal-wrap.svelte-x7sio8{position:relative;width:100%}.ip-cal-dropdown.svelte-x7sio8{position:absolute;top:100%;left:-4px;margin-top:4px;background:var(--color-bg-elevated);border:1px solid var(--color-border);border-radius:6px;box-shadow:0 4px 16px #00000040;z-index:50;padding:12px;width:264px}.ip-cal-header.svelte-x7sio8{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}.ip-cal-title.svelte-x7sio8{font-size:13px;font-weight:500;color:var(--color-text-primary)}.ip-cal-header.svelte-x7sio8 .ip-cal-nav{width:28px;height:28px}.ip-cal-weekdays.svelte-x7sio8{display:grid;grid-template-columns:repeat(7,1fr);margin-bottom:4px}.ip-cal-wd.svelte-x7sio8{font-size:11px;color:var(--color-text-tertiary);text-align:center;padding:4px 0}.ip-cal-week.svelte-x7sio8{display:grid;grid-template-columns:repeat(7,1fr)}.ip-cal-week.svelte-x7sio8 .ip-cal-day{display:flex;align-items:center;justify-content:center;width:100%;aspect-ratio:1;border-radius:4px;font-size:13px;color:var(--color-text-primary);padding:0;height:auto}.ip-cal-week.svelte-x7sio8 .ip-cal-day:hover{background:var(--color-bg-hover)}.ip-cal-week.svelte-x7sio8 .ip-cal-day.outside{color:var(--color-text-tertiary);opacity:.5}.ip-cal-week.svelte-x7sio8 .ip-cal-day.today{font-weight:600;color:var(--color-accent)}.ip-cal-week.svelte-x7sio8 .ip-cal-day.selected{background:var(--color-accent);color:#fff;font-weight:500}.ip-cal-week.svelte-x7sio8 .ip-cal-day.selected:hover{background:var(--color-accent-hover)}.ip-badge.svelte-x7sio8{display:inline-flex;align-items:center;height:22px;padding:0 8px;border-radius:9999px;font-size:12px;text-transform:lowercase;background:var(--color-badge-bg);color:var(--color-badge-text)}.ip-wikilink-group.svelte-x7sio8{display:flex;flex-wrap:wrap;gap:6px}.ip-wikilink-group.svelte-x7sio8 .ip-wikilink-chip{display:inline-flex;align-items:center;height:22px;padding:0 8px;border-radius:9999px;font-size:12px;background:var(--color-accent-muted);color:var(--color-link, #8b8bf0)}.ip-wikilink-group.svelte-x7sio8 .ip-wikilink-chip:hover{background:#8b8bf029}.ip-status-value.svelte-x7sio8{display:flex;align-items:center;gap:5px;height:22px}.ip-status-dot.svelte-x7sio8{width:6px;height:6px;border-radius:3px;flex-shrink:0}.ip-status-text.svelte-x7sio8,.ip-date-text.svelte-x7sio8,.ip-text-value.svelte-x7sio8{font-size:13px;line-height:22px;color:var(--color-text-primary)}.ip-url-link.svelte-x7sio8{font-size:13px;line-height:22px;color:var(--color-link, #8b8bf0);text-decoration:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ip-url-link.svelte-x7sio8:hover{text-decoration:underline}.inline-properties.svelte-x7sio8 .ip-add-btn{margin:8px -8px;font-size:13px}.ip-add-key-input.svelte-x7sio8{font-size:13px;font-family:inherit;color:var(--color-text-primary);background:transparent;border:none;border-bottom:1px solid var(--color-accent);padding:2px 0;width:100%;outline:none}.ip-add-row.svelte-x7sio8{background:var(--color-bg-hover)}.ip-icon-trigger{all:unset;display:flex;align-items:center;justify-content:center;cursor:pointer;border-radius:4px;color:var(--color-text-tertiary)}.ip-icon-trigger:hover{color:var(--color-text-secondary)}.ip-menu-content{min-width:160px;background:var(--color-bg-elevated);border:1px solid var(--color-border);border-radius:6px;box-shadow:0 4px 16px #00000040;z-index:50;padding:4px}.ip-menu-item{display:flex;align-items:center;gap:8px;width:100%;padding:5px 8px;font-size:13px;cursor:pointer;border-radius:4px;color:var(--color-text-primary)}.ip-menu-item:hover,.ip-menu-item[data-highlighted]{background:var(--color-bg-hover)}.ip-menu-destructive{color:var(--color-destructive)!important}.ip-menu-destructive:hover,.ip-menu-destructive[data-highlighted]{background:#e54d4d1a!important}.ip-menu-item-icon.svelte-x7sio8{display:flex;align-items:center;flex-shrink:0}.ip-menu-check.svelte-x7sio8{margin-left:auto;display:flex;align-items:center}.ip-menu-sep{height:1px;background:var(--color-border);margin:4px 0}.editor-wrap.svelte-ok7wy5{display:flex;min-height:0;position:relative}.cm-container.svelte-ok7wy5{flex:1}.cm-container.svelte-ok7wy5 .cm-editor{min-height:400px;outline:none}.cm-container.svelte-ok7wy5 .cm-scroller{overflow:visible!important}.cursor-overlay.svelte-ok7wy5{position:absolute;inset:0;pointer-events:none;overflow:hidden}.remote-cursor.svelte-ok7wy5{position:absolute;width:2px;background-color:var(--cursor-color);z-index:10}.remote-cursor-label.svelte-ok7wy5{position:absolute;top:-1.4em;left:-1px;font-size:11px;font-family:var(--font-sans);font-weight:500;padding:0 4px;border-radius:3px 3px 3px 0;white-space:nowrap;line-height:1.5;color:#fff}.csv-editor.svelte-63hltt{padding:32px 40px 0}.table-scroll.svelte-63hltt{overflow-x:auto}table.svelte-63hltt{border-collapse:collapse;width:100%;font-size:13px;font-family:var(--font-sans)}th.svelte-63hltt,td.svelte-63hltt{border:1px solid var(--color-border);padding:0;height:32px}th.svelte-63hltt{background:transparent;font-weight:500;color:var(--color-text-secondary);position:sticky;top:0;z-index:1}th.svelte-63hltt:not(.row-num):not(.col-add){position:sticky;top:0;z-index:1}.row-num.svelte-63hltt{width:40px;text-align:center;color:var(--color-text-tertiary);font-size:11px;background:transparent}.cell-input.svelte-63hltt{width:100%;height:100%;border:none;background:transparent;color:var(--color-text-primary);font-family:var(--font-sans);font-size:13px;padding:4px 8px;outline:none}.cell-input.svelte-63hltt:focus{outline:2px solid var(--color-accent);outline-offset:-2px}.header-input.svelte-63hltt{font-weight:500;color:var(--color-text-secondary)}th.svelte-63hltt:not(.row-num):not(.col-add){position:relative}th.svelte-63hltt .col-delete-btn{position:absolute;top:2px;right:2px;width:18px;height:18px;display:none;background:var(--color-bg-hover);border-radius:3px;padding:0}th.svelte-63hltt:hover .col-delete-btn{display:flex}th.svelte-63hltt .col-delete-btn:hover{color:var(--color-destructive);background:var(--color-bg-selected)}.col-add.svelte-63hltt{width:32px;border:none;background:transparent}.col-add.svelte-63hltt .col-add-btn{width:100%;height:100%;border-radius:0;padding:0}.col-add.svelte-63hltt .col-add-btn:hover{color:var(--color-accent)}.actions.svelte-63hltt{width:32px;text-align:center;border:none}.actions.svelte-63hltt .delete-btn{display:none;width:20px;height:20px;padding:0;margin:0 auto}tr.svelte-63hltt:hover .delete-btn{display:flex}tr.svelte-63hltt .delete-btn:hover{color:var(--color-destructive)}.csv-footer.svelte-63hltt{display:flex;align-items:center;gap:16px;padding:8px 0}.csv-footer.svelte-63hltt .add-row-btn{font-size:13px}.remote-active.svelte-63hltt{outline:2px solid var(--rc-color, #6e6ee8);outline-offset:-2px;position:relative}.remote-cell-label.svelte-63hltt{position:absolute;top:-18px;left:-1px;font-size:10px;font-family:var(--font-sans);font-weight:500;padding:0 4px;border-radius:3px 3px 3px 0;white-space:nowrap;line-height:1.6;color:#fff;z-index:2;pointer-events:none}.diff-view.svelte-1g4tvol{flex:1;overflow-y:auto;min-height:0}.diff-properties.svelte-1g4tvol{padding:16px 40px 8px;border-bottom:1px solid var(--color-border)}.dp-row.svelte-1g4tvol{display:grid;grid-template-columns:20px 120px 1fr;align-items:start;gap:8px;padding:5px 8px;margin:0 -8px;border-radius:4px;min-height:30px}.dp-icon.svelte-1g4tvol{display:flex;align-items:center;justify-content:center;color:var(--color-text-tertiary);height:22px}.dp-key.svelte-1g4tvol{font-size:13px;color:var(--color-text-tertiary);line-height:22px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.dp-value.svelte-1g4tvol{display:flex;flex-direction:column;gap:2px;min-height:22px;line-height:22px;font-size:13px;color:var(--color-text-primary)}.dp-diff-old.svelte-1g4tvol{display:inline-flex;align-items:center;padding:0 8px;border-radius:4px;background:#dc505026;color:var(--color-destructive, #e54d4d);min-height:22px;line-height:22px;width:fit-content}.dp-diff-new.svelte-1g4tvol{display:inline-flex;align-items:center;padding:0 8px;border-radius:4px;background:#50c86426;color:var(--color-success, #3ecf8e);min-height:22px;line-height:22px;width:fit-content}.diff-body.svelte-1g4tvol{padding:32px 40px;font-family:var(--font-sans);font-size:15px;line-height:1.6;color:var(--color-text-primary);white-space:pre-wrap;word-break:break-word}.diff-body.svelte-1g4tvol .db-removed{background:#dc505026;color:var(--color-destructive, #e54d4d);border-radius:2px}.diff-body.svelte-1g4tvol .db-added{background:#50c86426;color:var(--color-success, #3ecf8e);border-radius:2px}.content-row.svelte-1dc9loe{display:flex;flex:1;min-height:0;overflow:hidden}.entity-area.svelte-1dc9loe{flex:1;display:flex;flex-direction:column;min-width:0;min-height:0;overflow:hidden}.document-scroll.svelte-1dc9loe{flex:1;overflow-y:auto;min-height:0}.editor-bar.svelte-1dc9loe{height:40px;flex-shrink:0;display:flex;align-items:center;justify-content:space-between;padding:0 16px 0 40px;border-bottom:1px solid var(--color-border)}.breadcrumb-path.svelte-1dc9loe{font-size:13px;color:var(--color-text-secondary);line-height:1.4;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}.bc-sep.svelte-1dc9loe{color:var(--color-text-tertiary);margin:0 6px}.bc-segment.svelte-1dc9loe{color:var(--color-text-secondary)}.bc-current.svelte-1dc9loe{color:var(--color-text-primary)}.editor-actions.svelte-1dc9loe{display:flex;align-items:center;gap:8px;flex-shrink:0;white-space:nowrap}.status-text.svelte-1dc9loe{font-size:12px}.status-text.saving.svelte-1dc9loe{color:var(--color-text-tertiary)}.status-text.error.svelte-1dc9loe{color:var(--color-destructive)}.editor-actions.svelte-1dc9loe .open-app{text-transform:capitalize}.refresh-panel.svelte-1dc9loe{border-bottom:1px solid var(--color-border);padding:12px 40px;background:var(--color-bg-secondary, var(--color-bg-hover));font-size:13px;flex-shrink:0}.refresh-uptodate.svelte-1dc9loe{color:var(--color-text-secondary)}.editor-bar-diff.svelte-1dc9loe{background:var(--color-bg)}.diff-action-title.svelte-1dc9loe{font-size:13px;color:var(--color-text-primary);font-weight:600}.diff-action-buttons.svelte-1dc9loe{display:flex;align-items:center;gap:6px}@media(max-width:960px){.breadcrumb-path.svelte-1dc9loe{display:none}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.graph-view.svelte-1i33fky{flex:1;display:flex;flex-direction:column;min-height:0;overflow:hidden}.canvas-wrap.svelte-1i33fky{flex:1;min-height:0;position:relative;overflow:hidden;touch-action:none}.legend-panel.svelte-1i33fky{position:absolute;bottom:16px;right:16px;display:flex;flex-direction:column;background:var(--color-bg);border:1px solid var(--color-border);border-radius:8px;overflow:hidden;z-index:2}.legend-item.svelte-1i33fky{display:flex;align-items:center;gap:8px;white-space:nowrap;padding:5px 12px;cursor:pointer}.legend-item.svelte-1i33fky:hover{background:var(--color-bg-hover)}.legend-dot.svelte-1i33fky{width:8px;height:8px;border-radius:4px;flex-shrink:0}.legend-label.svelte-1i33fky{font-size:12px;color:var(--color-text-secondary);flex:1}.legend-count.svelte-1i33fky{font-size:11px;color:var(--color-text-tertiary);font-variant-numeric:tabular-nums}.timeline-bar.svelte-lzvab{display:flex;align-items:stretch;height:85px;padding:0 24px 0 12px;border-top:1px solid var(--color-border);background:var(--color-bg);gap:8px;flex-shrink:0}.timeline-bar.svelte-lzvab .play-btn{width:28px;height:28px;flex-shrink:0;padding:0;align-self:flex-start;margin-top:20px;color:var(--color-text-tertiary)}.timeline-bar.svelte-lzvab .play-btn:hover{color:var(--color-text-primary)}.timeline-track.svelte-lzvab{flex:1;height:100%;position:relative;cursor:crosshair;-webkit-user-select:none;user-select:none;touch-action:none}.track-line.svelte-lzvab{position:absolute;left:0;right:0;bottom:calc(30px + (100% - 46px)/2);height:1px;background:var(--color-text-tertiary);opacity:.3}.density-bars.svelte-lzvab{position:absolute;inset:16px 0 30px}.density-bar.svelte-lzvab{position:absolute;top:0;bottom:0;width:1px;background:var(--color-text-secondary);transform:translate(-50%)}.playhead.svelte-lzvab{position:absolute;top:16px;bottom:30px;width:1px;background:var(--color-accent, #6e6ee8);transform:translate(-50%);pointer-events:none;z-index:2}.date-labels.svelte-lzvab{position:absolute;bottom:8px;left:0;right:0;height:18px}.date-label.svelte-lzvab{position:absolute;transform:translate(-50%);font-size:10px;color:var(--color-text-tertiary);white-space:nowrap}.timeline-tooltip.svelte-lzvab{position:absolute;bottom:100%;transform:translate(-50%);margin-bottom:8px;background:var(--color-bg-elevated, var(--color-bg));border:1px solid var(--color-border);border-radius:6px;padding:8px 12px;font-size:12px;white-space:nowrap;pointer-events:none;z-index:10;box-shadow:0 4px 12px #0000004d}.tooltip-date.svelte-lzvab{color:var(--color-text-tertiary);font-size:11px;margin-bottom:4px}.tooltip-count.svelte-lzvab{color:var(--color-text-primary);font-weight:600}.content-row.svelte-315y67{display:flex;flex:1;min-height:0;overflow:hidden}.graph-area.svelte-315y67{flex:1;display:flex;flex-direction:column;min-width:0;min-height:0;overflow:hidden}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.login-page.svelte-1x05zx6{width:100vw;height:100vh;display:flex;align-items:center;justify-content:center;background:var(--color-bg)}.login-card.svelte-1x05zx6{width:100%;max-width:360px;padding:40px 32px}.logo.svelte-1x05zx6{display:flex;align-items:center;gap:12px;margin-bottom:36px;justify-content:center}.logo-icon.svelte-1x05zx6{width:32px;height:32px;border-radius:50%;background:var(--color-accent, #6e6ee8);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:14px}.logo-text.svelte-1x05zx6{font-size:18px;font-weight:600;color:var(--color-text-primary)}form.svelte-1x05zx6{display:flex;flex-direction:column;gap:20px}.field.svelte-1x05zx6{display:flex;flex-direction:column;gap:6px}.field-label.svelte-1x05zx6{font-size:13px;font-weight:500;color:var(--color-text-secondary)}.field.svelte-1x05zx6 .field-input{height:40px;border-radius:8px;font-size:14px}.error-msg.svelte-1x05zx6{margin:0;font-size:13px;color:#e55;text-align:center}form.svelte-1x05zx6 .submit-btn{height:40px;border-radius:8px;font-size:14px;font-weight:600;margin-top:4px;width:100%}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.select-trigger{display:inline-flex;align-items:center;justify-content:space-between;gap:8px;height:32px;padding:0 10px;border:1px solid var(--color-border);border-radius:6px;background:var(--color-bg);color:var(--color-text-primary);font-family:inherit;font-size:13px;cursor:pointer;outline:none;white-space:nowrap;min-width:0;transition:border-color .15s}.select-trigger:hover{border-color:var(--color-border-strong)}.select-trigger:focus-visible{border-color:var(--color-accent, #6e6ee8)}.select-trigger[data-disabled]{opacity:.5;cursor:not-allowed}.select-trigger-sm{height:28px;padding:0 8px;font-size:12px}.select-placeholder{color:var(--color-text-tertiary)}.select-chevron{color:var(--color-text-tertiary);flex-shrink:0}.select-content{z-index:1100;min-width:var(--bits-select-anchor-width);max-height:240px;overflow-y:auto;padding:4px;border:1px solid var(--color-border-strong);border-radius:8px;background:var(--color-bg-elevated);box-shadow:0 8px 24px #0000004d}.select-item{display:flex;align-items:center;justify-content:space-between;gap:8px;height:30px;padding:0 8px;border-radius:4px;font-size:13px;color:var(--color-text-secondary);cursor:pointer;outline:none}.select-item[data-highlighted]{background:var(--color-bg-hover);color:var(--color-text-primary)}.select-item[data-selected]{color:var(--color-text-primary)}.select-item[data-disabled]{opacity:.5;cursor:not-allowed}.select-item-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.select-item-check{color:var(--color-accent, #6e6ee8);flex-shrink:0}.json-editor-wrap.svelte-1grruw9{width:100%;max-height:50vh;overflow-y:auto;border-radius:6px}.json-editor-wrap.svelte-1grruw9 .cm-editor{outline:none}.json-editor-wrap.svelte-1grruw9 .cm-scroller{overflow:visible!important}.settings-page.svelte-zymv0t{display:flex;flex-direction:column;flex:1;min-height:0;overflow:hidden}.settings-header.svelte-zymv0t{height:40px;flex-shrink:0;border-bottom:1px solid var(--color-border)}.content-toolbar.svelte-zymv0t{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.content-count.svelte-zymv0t{font-size:12px;color:var(--color-text-tertiary)}.settings-content.svelte-zymv0t{flex:1;overflow-y:auto;padding:20px 40px 32px}.tab-header.svelte-zymv0t{margin-bottom:20px}.tab-title.svelte-zymv0t{font-size:16px;font-weight:600;color:var(--color-text-primary);margin:0 0 4px}.tab-description.svelte-zymv0t{font-size:13px;color:var(--color-text-tertiary);margin:0}.accordion-item{border-bottom:1px solid var(--color-border)}.accordion-item:last-child{border-bottom:none}.accordion-trigger{display:flex;align-items:center;gap:0;width:100%;padding:10px 4px;border:none;background:transparent;cursor:pointer;font-family:inherit;text-align:left}.accordion-trigger:hover{background:var(--color-bg-hover);border-radius:6px}.accordion-chevron.svelte-zymv0t{display:flex;align-items:center;justify-content:center;width:16px;height:22px;margin-right:14px;color:var(--color-text-tertiary);flex-shrink:0;transition:transform .15s ease}[data-state=open]>.accordion-trigger .accordion-chevron,.accordion-trigger[data-state=open] .accordion-chevron{transform:rotate(90deg)}.accordion-label.svelte-zymv0t{font-size:13px;font-weight:500;color:var(--color-text-primary);flex:1}.accordion-count{margin-left:auto}.accordion-content{overflow:hidden;padding:0 0 8px 34px}.accordion-content[data-state=closed]{display:none}.section-header.svelte-zymv0t{display:flex;align-items:center;height:32px;gap:0;margin-top:8px}.section-label.svelte-zymv0t{font-size:11px;font-weight:600;color:var(--color-text-tertiary);text-transform:uppercase;letter-spacing:.05em;flex:1}.member-row.svelte-zymv0t{display:grid;grid-template-columns:22px 1fr 2fr 80px;align-items:center;height:44px;gap:0 14px;font-size:13px}.member-name-cell.svelte-zymv0t{display:flex;align-items:baseline;gap:0;min-width:0}.member-name.svelte-zymv0t{font-size:14px;font-weight:500;color:var(--color-text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pill-key{color:var(--color-text-tertiary)}.pill-val{color:var(--color-text-secondary)}.member-pills.svelte-zymv0t{display:flex;align-items:center;gap:4px;flex-wrap:wrap}.member-email.svelte-zymv0t{font-size:12px;color:var(--color-text-tertiary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.member-list.svelte-zymv0t>.member-row:where(.svelte-zymv0t),.accordion-content .member-row.svelte-zymv0t{border-bottom:1px solid var(--color-border)}.member-list.svelte-zymv0t>.member-row:where(.svelte-zymv0t):last-child,.accordion-content .member-row.svelte-zymv0t:last-child{border-bottom:none}.member-actions.svelte-zymv0t{display:flex;justify-content:flex-end;gap:4px}.icon-danger:hover{color:var(--color-error, #e55)!important}.confirm-row.svelte-zymv0t{display:flex;grid-column:1 / -1;background:#e5555514;border-radius:6px;padding:0 10px 0 12px}.confirm-text.svelte-zymv0t{flex:1;font-size:13px;color:var(--color-text-primary)}.dialog-fields.svelte-zymv0t{display:flex;flex-direction:column;gap:12px;margin-bottom:16px}.dialog-field.svelte-zymv0t{display:flex;flex-direction:column;gap:4px}.checkbox-list.svelte-zymv0t{display:flex;flex-direction:column;gap:2px}.checkbox-item.svelte-zymv0t{display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:6px;font-size:13px;color:var(--color-text-primary);cursor:pointer}.checkbox-item.svelte-zymv0t:hover{background:var(--color-bg-hover)}.modal-member-list.svelte-zymv0t{display:flex;flex-direction:column;gap:2px;margin:8px 0;max-height:300px;overflow-y:auto}.modal-member-row.svelte-zymv0t{display:flex;align-items:center;gap:12px;padding:8px 12px;border-radius:6px;cursor:pointer}.modal-member-row.svelte-zymv0t:hover{background:var(--color-bg-hover)}.modal-member-info.svelte-zymv0t{display:flex;flex-direction:column;min-width:0}.connector-list.svelte-zymv0t{display:flex;flex-direction:column}.connector-row.svelte-zymv0t{display:flex;align-items:center;gap:14px;height:44px;border-bottom:1px solid var(--color-border);font-size:13px}.connector-row.svelte-zymv0t:last-child{border-bottom:none}.connector-section-label.svelte-zymv0t{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--color-text-tertiary);margin-top:20px;margin-bottom:4px}.connector-description{font-size:13px;color:var(--color-text-secondary);margin:0 0 12px}.connector-row-actions.svelte-zymv0t{display:flex;align-items:center;gap:2px;margin-left:auto}.connector-action{margin-left:auto!important;font-size:12px!important;gap:4px!important}.connector-action.connected{color:var(--color-success, #4ade80)!important}.connector-row-actions.svelte-zymv0t .connector-action{margin-left:0!important}.connector-hint{font-size:12px;color:var(--color-text-tertiary);margin:0}.connector-form{display:flex;flex-direction:column;gap:16px;margin-top:16px}.connector-field{display:flex;flex-direction:column;gap:6px}.connector-field-hint{font-size:12px;color:var(--color-text-tertiary);margin-top:2px}.connector-docs-link{display:inline-flex;align-items:center;gap:4px;font-size:12px;color:var(--color-text-tertiary);text-decoration:none}.connector-docs-link:hover{color:var(--color-text-secondary)}.status-msg.svelte-zymv0t{font-size:13px;color:var(--color-error, #e55);padding:0;background:none}.loading-text.svelte-zymv0t{font-size:13px;color:var(--color-text-tertiary);padding:20px 0;text-align:center}.spinning{animation:svelte-zymv0t-spin 1s linear infinite}@keyframes svelte-zymv0t-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.about-section.svelte-zymv0t{display:flex;flex-direction:column;gap:16px}.ws-field.svelte-zymv0t{display:flex;flex-direction:column;gap:6px}.about-actions.svelte-zymv0t{display:flex;justify-content:flex-end;gap:8px}.mcp-section.svelte-zymv0t{margin-top:32px;padding-top:24px;border-top:1px solid var(--color-border)}.mcp-header.svelte-zymv0t{display:flex;align-items:center;justify-content:space-between;margin-bottom:4px}.mcp-actions.svelte-zymv0t{display:flex;gap:4px}.mcp-hint.svelte-zymv0t{font-size:13px;color:var(--color-text-tertiary);margin:0 0 8px}.mcp-config-textarea{font-family:var(--font-mono, ui-monospace, monospace)!important;font-size:12px!important}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.setup-page.svelte-g40i6i{width:100vw;height:100vh;display:flex;align-items:center;justify-content:center;background:var(--color-bg)}.setup-card.svelte-g40i6i{width:100%;max-width:360px;padding:40px 32px}.logo.svelte-g40i6i{display:flex;align-items:center;gap:12px;margin-bottom:12px;justify-content:center}.logo-icon.svelte-g40i6i{width:32px;height:32px;border-radius:50%;background:var(--color-accent, #6e6ee8);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:14px}.logo-text.svelte-g40i6i{font-size:18px;font-weight:600;color:var(--color-text-primary)}.subtitle.svelte-g40i6i{text-align:center;color:var(--color-text-secondary);font-size:14px;margin:0 0 28px}form.svelte-g40i6i{display:flex;flex-direction:column;gap:20px}.field.svelte-g40i6i{display:flex;flex-direction:column;gap:6px}.field-label.svelte-g40i6i{font-size:13px;font-weight:500;color:var(--color-text-secondary)}.field-hint.svelte-g40i6i{font-size:12px;color:var(--color-text-tertiary, var(--color-text-secondary));opacity:.7}.field.svelte-g40i6i .field-input{height:40px;border-radius:8px;font-size:14px}.error-msg.svelte-g40i6i{margin:0;font-size:13px;color:#e55;text-align:center}form.svelte-g40i6i .submit-btn{height:40px;border-radius:8px;font-size:14px;font-weight:600;margin-top:4px;width:100%}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.dialog-overlay{position:fixed;inset:0;z-index:1000;background:#0009}[data-theme=light] .dialog-overlay{background:#00000040}.dialog-content{position:fixed;z-index:1001;top:80px;left:50%;transform:translate(-50%);display:flex;flex-direction:column;background:var(--color-bg-elevated);border:1px solid var(--color-border-strong);border-radius:12px;overflow:hidden;box-shadow:0 24px 80px #00000080;max-height:calc(100vh - 120px)}.dialog-sm{width:420px;max-width:90vw}.dialog-md{width:560px;max-width:90vw}.dialog-lg{width:680px;max-width:90vw}.dialog-xl{width:800px;max-width:90vw}.dialog-fit{width:fit-content;min-width:320px;max-width:min(640px,90vw)}.dialog-header{display:flex;align-items:center;justify-content:space-between;padding:20px 24px 0;flex-shrink:0}.dialog-title{font-size:16px;font-weight:500;color:var(--color-text-primary);margin:0}.dialog-description{font-size:13px;color:var(--color-text-secondary);line-height:1.5;margin:0}.dialog-body{padding:12px 24px 20px;overflow-y:auto;flex:1;min-height:0}.dialog-footer{display:flex;align-items:center;justify-content:flex-end;gap:8px;padding:16px 24px;border-top:1px solid var(--color-border);flex-shrink:0}.dialog-close-btn{width:28px;height:28px;display:flex;align-items:center;justify-content:center;border:none;background:transparent;color:var(--color-text-tertiary);cursor:pointer;border-radius:6px;line-height:1;transition:color .15s,background .15s}.dialog-close-btn:hover{background:var(--color-bg-hover);color:var(--color-text-primary)}.entity-body{padding:16px 24px 24px;display:flex;flex-direction:column;gap:20px}.type-section.svelte-ak7t5k{display:flex;flex-direction:column;gap:8px}.type-section-label.svelte-ak7t5k{font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--color-text-tertiary)}.type-grid.svelte-ak7t5k{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.type-grid.svelte-ak7t5k .type-card{display:flex;flex-direction:column;align-items:flex-start;gap:10px;padding:12px;height:auto;border-radius:8px;text-align:left;color:var(--color-text-secondary);justify-content:flex-start}.type-grid.svelte-ak7t5k .type-card:hover{background:var(--color-bg-hover);border-color:var(--color-border-strong)}.type-grid.svelte-ak7t5k .type-card:hover .type-name{color:var(--color-text-primary)}.type-dot.svelte-ak7t5k{width:8px;height:8px;border-radius:50%}.type-info.svelte-ak7t5k{display:flex;flex-direction:column;gap:2px}.type-name.svelte-ak7t5k{font-size:13px;font-weight:500;color:var(--color-text-secondary)}.type-desc.svelte-ak7t5k{font-size:11px;color:var(--color-text-tertiary);line-height:1.3}.sidebar.svelte-6dohdz{width:340px;min-width:340px;display:flex;flex-direction:column;overflow:hidden;background:var(--color-bg);border-right:1px solid var(--color-border)}.sidebar-header.svelte-6dohdz{height:40px;display:flex;align-items:center;gap:11px;padding:0 12px 0 19px;border-bottom:1px solid var(--color-border);flex-shrink:0}.header-actions.svelte-6dohdz{margin-left:auto;display:flex;align-items:center}.sidebar-header.svelte-6dohdz .home-btn{display:inline-flex;align-items:center;gap:11px;padding:0;min-width:0;text-align:left;border-radius:0;height:auto;background:transparent!important}.sidebar-header.svelte-6dohdz .home-btn:hover .workspace-icon{opacity:.8}.sidebar-header.svelte-6dohdz .home-btn:hover .workspace-name{color:var(--color-text-secondary)}.workspace-icon.svelte-6dohdz{width:22px;height:22px;border-radius:50%;background:var(--color-accent, #6e6ee8);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:600;font-size:10px;flex-shrink:0}.workspace-name.svelte-6dohdz{flex:1;font-size:13px;font-weight:600;color:var(--color-text-primary)}.settings-nav.svelte-6dohdz{display:flex;flex-direction:column;flex:1;padding-top:0}.settings-nav.svelte-6dohdz button[data-slot=tabs-trigger]{display:flex;align-items:center;width:100%;height:40px;padding:0 12px 0 19px;gap:11px;border:none;background:transparent;cursor:pointer;font-family:inherit;font-size:13px;color:var(--color-text-secondary);transition:color .15s,background .15s}.settings-nav.svelte-6dohdz button[data-slot=tabs-trigger]:hover{background:var(--color-bg-hover);color:var(--color-text-primary)}.settings-nav.svelte-6dohdz button[data-slot=tabs-trigger][data-state=active]{background:var(--color-bg-hover);color:var(--color-text-primary);font-weight:500}.settings-nav.svelte-6dohdz button[data-slot=tabs-trigger] svg{width:14px;height:14px;flex-shrink:0;box-sizing:content-box;padding:0 4px}.filter-bar.svelte-6dohdz{position:relative;display:flex;align-items:center;height:40px;padding:0 12px 0 52px;border-bottom:1px solid var(--color-border);flex-shrink:0}.filter-icon.svelte-6dohdz{position:absolute;left:22px;top:50%;transform:translateY(-50%);display:flex;align-items:center;justify-content:center;width:16px;color:var(--color-text-tertiary)}.filter-bar.svelte-6dohdz .filter-input{flex:1;background:transparent;border:none;outline:none;padding:0;margin:0;font-size:13px;line-height:1.4;height:auto;border-radius:0}.filter-bar.svelte-6dohdz .filter-clear{width:20px;height:20px;flex-shrink:0}.filter-bar.svelte-6dohdz .sort-toggle{width:28px;height:28px;flex-shrink:0;margin-left:4px}.filter-bar.svelte-6dohdz .sort-toggle.active{color:var(--color-accent, #6e6ee8)}.repo-type-icon.svelte-6dohdz{display:inline-flex;align-items:center;color:var(--color-text-tertiary);margin-right:6px;flex-shrink:0;align-self:center}.tree.svelte-6dohdz{flex:1;overflow-y:auto;padding-top:0}.tree-group.svelte-6dohdz{display:flex;flex-direction:column}.tree-group.svelte-6dohdz+.tree-group:where(.svelte-6dohdz){margin-top:0}.repo-row{display:flex;align-items:baseline;height:32px;line-height:32px;width:100%;padding:0 12px 0 20px;border:none;background:transparent;font-family:inherit;text-align:left;border-left:2px solid transparent;border-radius:0;gap:0;justify-content:flex-start}.repo-row:hover,.repo-row.focused{background:var(--color-bg-hover)}.repo-row.repo-active{border-left-color:var(--active-color)}.repo-name.svelte-6dohdz{font-size:13px;color:var(--color-text-secondary)}.repo-row.repo-active .repo-name.svelte-6dohdz,.repo-row.repo-active .repo-type-icon.svelte-6dohdz{font-weight:600;color:var(--color-text-primary)}.tree-row{position:relative;display:flex;align-items:baseline;height:32px;line-height:32px;padding-right:40px;color:var(--color-text-secondary);font-size:13px;border:none;background:transparent;font-family:inherit;text-align:left;width:100%;border-left:2px solid transparent;border-radius:0;gap:0;justify-content:flex-start}.tree-row:hover,.tree-row.focused{background:var(--color-bg-hover)}.tree-row.selected{background:var(--color-bg-selected);border-left-color:var(--active-color);color:var(--color-text-primary);font-weight:600}.row-chevron.svelte-6dohdz{display:inline-flex;align-items:center;justify-content:center;width:16px;height:32px;flex-shrink:0;margin-right:14px;color:var(--color-text-tertiary);align-self:center}.row-label.svelte-6dohdz{flex:1;overflow:hidden;white-space:nowrap;mask-image:linear-gradient(to right,black calc(100% - 16px),transparent 100%);-webkit-mask-image:linear-gradient(to right,black calc(100% - 16px),transparent 100%)}.item-count.svelte-6dohdz{font-size:11px;color:var(--color-text-tertiary);margin-left:8px;flex-shrink:0}.indent-group.svelte-6dohdz{position:relative}.indent-group.svelte-6dohdz:before{content:"";position:absolute;left:var(--guide-left);top:0;bottom:0;width:1px;background:var(--color-border);pointer-events:none}.loading-row.svelte-6dohdz{height:32px;display:flex;align-items:center;font-size:13px;color:var(--color-text-tertiary)}.type-header-row{color:var(--color-text-secondary);border-left:2px solid transparent}.type-header-row.type-active{color:var(--color-text-primary);font-weight:600}.type-header-row .row-label.svelte-6dohdz{flex:none;mask-image:none;-webkit-mask-image:none}.new-entity-row{color:var(--color-text-tertiary);align-items:center}.new-entity-row:hover{color:var(--color-text-secondary)}.entity-row-wrapper.svelte-6dohdz{position:relative;display:flex;align-items:center}.entity-row-wrapper.svelte-6dohdz .tree-row{flex:1;min-width:0}.entity-row-wrapper.svelte-6dohdz .entity-actions-btn{display:none;width:28px;height:28px;position:absolute;right:12px;flex-shrink:0;padding:0;border:none;background:none;cursor:pointer;color:var(--color-text-tertiary);border-radius:4px;align-items:center;justify-content:center}.entity-row-wrapper.svelte-6dohdz .entity-actions-btn:hover{background:var(--color-bg-hover);color:var(--color-text-primary)}.entity-row-wrapper.svelte-6dohdz:hover .tree-row,.entity-row-wrapper.svelte-6dohdz:has(.entity-actions-btn.menu-open) .tree-row{background:var(--color-bg-hover)}.entity-row-wrapper.svelte-6dohdz:hover .entity-actions-btn,.entity-row-wrapper.svelte-6dohdz .entity-actions-btn.menu-open{display:inline-flex}.entity-type-dot.svelte-6dohdz{width:6px;height:6px;border-radius:50%;flex-shrink:0;margin-right:19px;align-self:center}.recent-time.svelte-6dohdz{font-size:11px;color:var(--color-text-tertiary);position:absolute;right:26px;top:50%;transform:translate(50%,-50%);white-space:nowrap}.entity-row-wrapper.svelte-6dohdz:hover .recent-time:where(.svelte-6dohdz){display:none}.presence-stack.svelte-6dohdz{display:flex;align-items:center;gap:-4px;margin-left:auto;flex-shrink:0;align-self:center}.presence-avatar.svelte-6dohdz{width:18px;height:18px;border-radius:50%;font-size:9px;font-weight:600;color:#fff;background:var(--color-accent);display:flex;align-items:center;justify-content:center;margin-left:-3px;border:1px solid var(--color-bg);box-sizing:border-box;flex-shrink:0;align-self:center}.presence-stack.svelte-6dohdz .presence-avatar:where(.svelte-6dohdz):first-child{margin-left:4px}.repo-row .presence-stack.svelte-6dohdz{margin-right:28px}.presence-avatar.svelte-6dohdz:nth-child(1){z-index:3}.presence-avatar.svelte-6dohdz:nth-child(2){z-index:2}.presence-avatar.svelte-6dohdz:nth-child(3){z-index:1}.filter-match.svelte-6dohdz{background:color-mix(in srgb,var(--color-accent, #6e6ee8) 25%,transparent);color:inherit;border-radius:2px;padding:0}.no-results.svelte-6dohdz{padding:24px 16px;font-size:13px;color:var(--color-text-tertiary);text-align:center}.repo-row .repo-rename-input{flex:1;min-width:0;height:100%;padding:0 6px;margin:0;border:1px solid var(--color-accent, #6e6ee8);border-radius:3px;font-size:13px;font-weight:600}.repo-row-wrapper.svelte-6dohdz{position:relative;display:flex;align-items:center}.repo-row-wrapper.svelte-6dohdz .repo-row{flex:1;min-width:0}.repo-row-wrapper.svelte-6dohdz .repo-actions-btn{display:none;width:28px;height:28px;position:absolute;right:12px;flex-shrink:0;padding:0;border:none;background:none;cursor:pointer;color:var(--color-text-tertiary);border-radius:4px;align-items:center;justify-content:center}.repo-row-wrapper.svelte-6dohdz .repo-actions-btn:hover{background:var(--color-bg-hover);color:var(--color-text-primary)}.repo-row-wrapper.svelte-6dohdz:hover .repo-row,.repo-row-wrapper.svelte-6dohdz:has(.repo-actions-btn.menu-open) .repo-row{background:var(--color-bg-hover)}.repo-row-wrapper.svelte-6dohdz:hover .repo-actions-btn,.repo-row-wrapper.svelte-6dohdz .repo-actions-btn.menu-open{display:inline-flex}.type-header-wrapper.svelte-6dohdz{position:relative;display:flex;align-items:center}.type-header-wrapper.svelte-6dohdz .type-header-row{flex:1;min-width:0}.type-header-wrapper.svelte-6dohdz .type-actions-btn{display:none;width:24px;height:24px;position:absolute;right:12px;flex-shrink:0;padding:0;border:none;background:none;cursor:pointer;color:var(--color-text-tertiary);border-radius:4px;align-items:center;justify-content:center}.type-header-wrapper.svelte-6dohdz .type-actions-btn:hover{background:var(--color-bg-hover);color:var(--color-text-primary)}.type-header-wrapper.svelte-6dohdz:hover .type-header-row,.type-header-wrapper.svelte-6dohdz:has(.type-actions-btn.menu-open) .type-header-row{background:var(--color-bg-hover)}.type-header-wrapper.svelte-6dohdz:hover .type-actions-btn,.type-header-wrapper.svelte-6dohdz .type-actions-btn.menu-open{display:inline-flex}.repo-actions-menu{min-width:120px;padding:4px;border-radius:6px;background:var(--color-bg-elevated);border:1px solid var(--color-border);box-shadow:0 4px 12px #00000026;z-index:1000}.repo-menu-item{display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:4px;cursor:pointer;font-size:12px;color:var(--color-text-primary)}.repo-menu-item:hover{background:var(--color-bg-hover)}.repo-menu-item-danger{color:var(--color-error, #e55)}.new-collection-btn,.new-collection-btn .repo-name.svelte-6dohdz,.new-collection-btn .row-chevron.svelte-6dohdz{color:var(--color-text-tertiary)}.new-collection-btn:hover,.new-collection-btn:hover .repo-name.svelte-6dohdz{color:var(--color-text-secondary)}.new-collection-row.svelte-6dohdz{display:flex;align-items:center;height:32px;padding:0 12px 0 20px;border-left:2px solid transparent}.new-collection-row.svelte-6dohdz .new-collection-input{flex:1;height:100%;padding:0 0 0 30px;border:none;background:transparent;font-size:13px;border-radius:0}.new-collection-row.svelte-6dohdz .new-collection-clear{width:20px;height:20px;flex-shrink:0;margin-right:4px}.new-collection-row.svelte-6dohdz .private-toggle{width:20px;height:20px;flex-shrink:0;margin-left:auto;margin-right:4px;color:var(--color-text-secondary)}.new-collection-row.svelte-6dohdz .private-toggle.active{color:var(--color-accent, #6e6ee8)}@keyframes svelte-6dohdz-shake{0%,to{transform:translate(0)}20%{transform:translate(-4px)}40%{transform:translate(4px)}60%{transform:translate(-3px)}80%{transform:translate(2px)}}.new-collection-row.svelte-6dohdz .new-collection-input.shake{animation:svelte-6dohdz-shake .3s ease-in-out}.sidebar-footer.svelte-6dohdz{display:flex;align-items:center;height:40px;padding:0 12px 0 19px;border-top:1px solid var(--color-border);flex-shrink:0;gap:8px}.user-email.svelte-6dohdz{flex:1;font-size:12px;color:var(--color-text-tertiary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sidebar-footer.svelte-6dohdz .footer-icon-btn{width:28px;height:28px}.search-header.svelte-1xems06{display:flex;align-items:center;height:52px;padding:0 16px;gap:10px;border-bottom:1px solid var(--color-border)}.search-header.svelte-1xems06 svg{color:var(--color-text-tertiary);flex-shrink:0}.search-header.svelte-1xems06 .search-input{flex:1;font-size:15px;line-height:20px;border:none;background:transparent;box-shadow:none;padding:0;height:auto}.search-header.svelte-1xems06 .search-input:focus{box-shadow:none;border:none}.esc-badge.svelte-1xems06{font-family:var(--font-sans);font-size:11px;line-height:1;padding:3px 6px;border-radius:4px;background:var(--color-bg-surface);border:1px solid var(--color-border);color:var(--color-text-tertiary)}.results-list.svelte-1xems06{flex:1;overflow-y:auto;min-height:0}.empty-results.svelte-1xems06{padding:24px 16px;text-align:center;font-size:13px;color:var(--color-text-tertiary)}.results-list.svelte-1xems06 .result-row{display:flex;align-items:flex-start;padding:10px 16px;width:100%;text-align:left;border-radius:0;height:auto;justify-content:flex-start}.results-list.svelte-1xems06 .result-row:hover,.results-list.svelte-1xems06 .result-row.selected{background:var(--color-bg-hover)}.result-body.svelte-1xems06{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.result-title-row.svelte-1xems06{display:flex;align-items:center;gap:8px}.result-title.svelte-1xems06{font-size:13px;font-weight:500;color:var(--color-text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.entity-tag.svelte-1xems06{flex-shrink:0;font-size:10px;font-weight:500;letter-spacing:.04em;text-transform:uppercase;padding:1px 6px;border-radius:3px;background:var(--color-badge-bg);color:var(--color-badge-text)}.result-meta.svelte-1xems06{font-size:12px;color:var(--color-text-tertiary)}.search-footer.svelte-1xems06{display:flex;align-items:center;height:39px;padding:0 16px;gap:16px;border-top:1px solid var(--color-border)}.shortcut-group.svelte-1xems06{display:flex;align-items:center;gap:4px}.shortcut-key.svelte-1xems06{display:inline-flex;align-items:center;justify-content:center;min-width:20px;height:20px;padding:0 4px;border-radius:4px;background:var(--color-bg-surface);border:1px solid var(--color-border);color:var(--color-text-tertiary)}.shortcut-label.svelte-1xems06{font-size:11px;color:var(--color-text-tertiary);margin-left:2px}.app-frame.svelte-vr1z90{width:100vw;height:100vh;display:flex;flex-direction:column;overflow:hidden;background:var(--color-bg)}.app-body.svelte-vr1z90{flex:1;display:flex;min-height:0;overflow:hidden}.main-content.svelte-vr1z90{flex:1;display:flex;flex-direction:column;min-width:0;min-height:0;overflow:hidden}#sg-chrome-footer{flex-shrink:0}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.view-toolbar.svelte-r6dy5f{height:40px;flex-shrink:0;display:grid;grid-template-columns:1fr auto 1fr;align-items:center;padding:0 16px;border-bottom:1px solid var(--color-border)}.view-toggles.svelte-r6dy5f{grid-column:2;display:inline-flex;align-items:center;border-radius:6px;background:var(--color-bg-surface);padding:2px}.toggle-btn.svelte-r6dy5f{display:inline-flex;align-items:center;justify-content:center;gap:5px;height:22.5px;padding:0 12px;border-radius:4px;border:none;background:transparent;color:var(--color-text-tertiary);font-family:inherit;font-size:12px;cursor:pointer;text-decoration:none;transition:background .15s,color .15s}.toggle-btn.svelte-r6dy5f:hover{color:var(--color-text-secondary)}.toggle-btn.active.svelte-r6dy5f{background:var(--color-bg-hover);color:var(--color-text-primary);cursor:default}.toolbar-right.svelte-r6dy5f{display:flex;justify-content:flex-end;gap:8px}.toolbar-right.svelte-r6dy5f .chat-toggle{width:28px;height:28px;border-radius:6px}.chat-panel.svelte-1xwj6s7{width:340px;min-width:340px;flex-shrink:0;display:flex;flex-direction:column;background:var(--color-bg);border-left:1px solid var(--color-border)}.chat-header.svelte-1xwj6s7{height:40px;display:flex;align-items:center;justify-content:space-between;padding:0 16px;border-bottom:1px solid var(--color-border);position:relative;flex-shrink:0}.chat-header-left.svelte-1xwj6s7{display:flex;align-items:center;gap:2px}.history-active{color:var(--color-accent, #6e6ee8)!important}.history-active:not(:hover){background:transparent!important}.session-dropdown.svelte-1xwj6s7{position:absolute;top:100%;left:0;right:0;z-index:10;box-shadow:0 4px 12px #0000001f}.session-list.svelte-1xwj6s7{max-height:240px;overflow-y:auto;background:var(--color-bg);border-bottom:1px solid var(--color-border)}.session-row.svelte-1xwj6s7{position:relative;display:flex;align-items:center}.session-row.svelte-1xwj6s7 .session-item{display:flex;align-items:center;justify-content:flex-start;flex:1;min-width:0;padding:0 32px 0 16px;height:32px;line-height:32px;font-size:13px;color:var(--color-text-secondary);text-align:left;border-radius:0}.session-row.svelte-1xwj6s7:hover .session-item{background:var(--color-bg-hover)}.session-row.svelte-1xwj6s7 .session-item.active{background:var(--color-bg-hover);color:var(--color-text-primary);font-weight:500}.session-row.svelte-1xwj6s7 .session-delete-btn{display:none;width:20px;height:20px;position:absolute;right:6px;flex-shrink:0;padding:0}.session-row.svelte-1xwj6s7 .session-delete-btn:hover{color:var(--color-error, #e55)}.session-row.svelte-1xwj6s7:hover .session-delete-btn{display:flex}.session-title.svelte-1xwj6s7{flex:1;overflow:hidden;white-space:nowrap;min-width:0;mask-image:linear-gradient(to right,black calc(100% - 24px),transparent 100%);-webkit-mask-image:linear-gradient(to right,black calc(100% - 24px),transparent 100%)}.chat-messages.svelte-1xwj6s7{flex:1;overflow-y:auto;padding:16px;display:flex;flex-direction:column;gap:12px}.empty-state.svelte-1xwj6s7{flex:1;display:flex;align-items:center;justify-content:center;color:var(--color-text-tertiary);font-size:13px}.seed-prompts.svelte-1xwj6s7{display:flex;flex-direction:column;gap:8px;width:100%}.seed-prompts.svelte-1xwj6s7 .seed-prompt{font-size:13px;line-height:20px;padding:9px 13px;min-height:40px;height:auto;border-radius:8px;color:var(--color-text-secondary);text-align:left;white-space:normal;justify-content:flex-start}.seed-prompts.svelte-1xwj6s7 .seed-prompt:hover{background:var(--color-bg-hover);color:var(--color-text-primary)}.message-group.svelte-1xwj6s7{display:flex;flex-direction:column;gap:8px}.user-bubble.svelte-1xwj6s7{background:var(--color-bg-surface);border-radius:6px;padding:10px 12px;font-size:13px;line-height:20px;color:var(--color-text-primary)}.agent-content.svelte-1xwj6s7{display:flex;flex-direction:column;gap:4px}.tool-calls.svelte-1xwj6s7{display:flex;flex-wrap:wrap;gap:2px 6px}.tool-call.svelte-1xwj6s7{font-family:JetBrains Mono,monospace;font-size:11px;color:var(--color-text-tertiary)}.agent-text.svelte-1xwj6s7{font-size:13px;line-height:20px;color:var(--color-text-primary)}.prose.svelte-1xwj6s7 h1{font-size:17px;font-weight:600;color:var(--color-text-primary);margin:16px 0 8px}.prose.svelte-1xwj6s7 h2{font-size:15px;font-weight:600;color:var(--color-text-primary);margin:14px 0 6px}.prose.svelte-1xwj6s7 h3{font-size:14px;font-weight:600;color:var(--color-text-primary);margin:12px 0 4px}.prose.svelte-1xwj6s7 p{margin:0 0 8px}.prose.svelte-1xwj6s7 p:last-child{margin-bottom:0}.prose.svelte-1xwj6s7 strong{font-weight:600}.prose.svelte-1xwj6s7 ul,.prose.svelte-1xwj6s7 ol{padding-left:20px;margin:0 0 8px;color:var(--color-text-primary)}.prose.svelte-1xwj6s7 ul{list-style-type:disc}.prose.svelte-1xwj6s7 ol{list-style-type:decimal}.prose.svelte-1xwj6s7 li{margin-bottom:2px}.prose.svelte-1xwj6s7 table{width:100%;border-collapse:collapse;font-size:12px;margin:8px 0}.prose.svelte-1xwj6s7 th,.prose.svelte-1xwj6s7 td{border:1px solid var(--color-border);padding:4px 8px;text-align:left;vertical-align:top}.prose.svelte-1xwj6s7 th{font-weight:600}.prose.svelte-1xwj6s7 pre{background:var(--color-bg-surface);border-radius:4px;padding:8px 10px;overflow-x:auto;margin:8px 0;font-family:var(--font-mono);font-size:12px;line-height:18px}.prose.svelte-1xwj6s7 code{font-family:var(--font-mono);font-size:12px;background:var(--color-bg-surface);padding:1px 4px;border-radius:3px}.prose.svelte-1xwj6s7 pre code{background:none;padding:0}.prose.svelte-1xwj6s7 a{color:var(--color-link)}.prose.svelte-1xwj6s7 blockquote{border-left:3px solid var(--color-accent);padding-left:10px;margin:8px 0;color:var(--color-text-secondary)}.prose.svelte-1xwj6s7 hr{border:none;border-top:1px solid var(--color-border);margin:12px 0}.streaming-dot.svelte-1xwj6s7{display:inline-block;width:8px;height:8px;background:var(--color-accent);border-radius:4px;animation:svelte-1xwj6s7-pulse 1s ease-in-out infinite}@keyframes svelte-1xwj6s7-pulse{0%,to{opacity:.3}50%{opacity:1}}.context-chip.svelte-1xwj6s7{font-size:11px;color:var(--color-text-tertiary);padding:0 2px 4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chat-input-area.svelte-1xwj6s7{padding:12px 16px 16px}.text-input.svelte-1xwj6s7{display:flex;align-items:flex-end;min-height:40px;max-height:140px;padding:0 6px 0 13px;background:transparent;border:1px solid var(--color-border);border-radius:8px}.send-btn{margin-bottom:6px}.stop-btn{color:var(--color-text-tertiary)}.input-field.svelte-1xwj6s7{flex:1;background:transparent;border:none;outline:none;font-family:inherit;font-size:13px;line-height:20px;color:var(--color-text-primary);resize:none;overflow-y:auto;padding:9px 0;max-height:120px;field-sizing:content}.input-field.svelte-1xwj6s7::placeholder{color:var(--color-text-tertiary)}.input-field.svelte-1xwj6s7:disabled{opacity:.5}
|