sh3-server 0.15.1 → 0.15.2

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/app/index.html CHANGED
@@ -5,8 +5,8 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
7
7
  <title>SH3</title>
8
- <script type="module" crossorigin src="/assets/index-Drf5d4ev.js"></script>
9
- <link rel="stylesheet" crossorigin href="/assets/index-C6k1cYzj.css">
8
+ <script type="module" crossorigin src="/assets/index-dcWTOW90.js"></script>
9
+ <link rel="stylesheet" crossorigin href="/assets/index-CuexSuRN.css">
10
10
  </head>
11
11
  <body>
12
12
  <div id="app"></div>
@@ -3,9 +3,11 @@ export declare class HistoryStore {
3
3
  private readonly max;
4
4
  private buffer;
5
5
  constructor(dataDir: string, userId: string, historyMaxLines: number);
6
- /** Read the capped in-memory view most recent `historyMaxLines` lines. */
7
- read(): string[];
8
- /** Append a new line to both the on-disk file and the in-memory buffer. */
9
- append(line: string): void;
6
+ /** Read lines for a specific mode, in append order, up to the cap. */
7
+ read(mode: string): string[];
8
+ /** Read all-modes bundle for the history-bundle WS reply. */
9
+ readBundle(): Record<string, string[]>;
10
+ /** Append a line tagged with the active mode. */
11
+ append(line: string, mode: string): void;
10
12
  private loadBuffer;
11
13
  }
@@ -2,12 +2,17 @@
2
2
  * Per-user append-only history store for the shell-shard server.
3
3
  *
4
4
  * Storage format: JSONL at <dataDir>/history-<userId>.jsonl.
5
- * Each line: { "ts": <ms>, "line": "<command>" }.
5
+ * Each line: { "ts": <ms>, "line": "<command>", "mode": "<modeId>" }.
6
+ *
7
+ * Records carry a mode tag so different modes (sh3, bash, custom) maintain
8
+ * independent histories on read. Legacy untagged records (pre-tag rollout)
9
+ * load as 'bash' for back-compat with existing JSONL files.
6
10
  *
7
11
  * The store holds a capped in-memory view (most recent `historyMaxLines`)
8
- * that is served to clients on attach. The on-disk file is not rotated
9
- * in v1 — rotation is in the deferred list. If the file exceeds 2× the
10
- * cap, a warning is logged on load but the store still functions.
12
+ * served to clients on attach via the history-bundle WS message. The on-
13
+ * disk file is not rotated in v1 — rotation is in the deferred list. If the
14
+ * file exceeds 2× the cap, a warning is logged on load but the store still
15
+ * functions.
11
16
  *
12
17
  * A corrupt tail line (partial write from a crash mid-append) is skipped
13
18
  * on load with a warning.
@@ -23,15 +28,23 @@ export class HistoryStore {
23
28
  this.max = historyMaxLines;
24
29
  this.buffer = this.loadBuffer();
25
30
  }
26
- /** Read the capped in-memory view most recent `historyMaxLines` lines. */
27
- read() {
28
- return [...this.buffer];
31
+ /** Read lines for a specific mode, in append order, up to the cap. */
32
+ read(mode) {
33
+ return this.buffer.filter((r) => r.mode === mode).map((r) => r.line);
34
+ }
35
+ /** Read all-modes bundle for the history-bundle WS reply. */
36
+ readBundle() {
37
+ const out = {};
38
+ for (const r of this.buffer) {
39
+ (out[r.mode] ??= []).push(r.line);
40
+ }
41
+ return out;
29
42
  }
30
- /** Append a new line to both the on-disk file and the in-memory buffer. */
31
- append(line) {
32
- const record = { ts: Date.now(), line };
43
+ /** Append a line tagged with the active mode. */
44
+ append(line, mode) {
45
+ const record = { ts: Date.now(), line, mode };
33
46
  appendFileSync(this.path, JSON.stringify(record) + '\n', 'utf-8');
34
- this.buffer.push(line);
47
+ this.buffer.push(record);
35
48
  if (this.buffer.length > this.max) {
36
49
  this.buffer.splice(0, this.buffer.length - this.max);
37
50
  }
@@ -47,9 +60,13 @@ export class HistoryStore {
47
60
  continue;
48
61
  try {
49
62
  const record = JSON.parse(rawLine);
50
- if (typeof record.line === 'string') {
51
- parsed.push(record.line);
52
- }
63
+ if (typeof record.line !== 'string')
64
+ continue;
65
+ parsed.push({
66
+ ts: typeof record.ts === 'number' ? record.ts : 0,
67
+ line: record.line,
68
+ mode: typeof record.mode === 'string' ? record.mode : 'bash',
69
+ });
53
70
  }
54
71
  catch {
55
72
  // Corrupt tail line — skip silently. Log at debug level only.
@@ -31,7 +31,8 @@ export default {
31
31
  app.get('/history', ctx.adminOnly, (c) => {
32
32
  const user = sessionUser(c);
33
33
  const session = manager.getOrCreate(user);
34
- return c.json({ lines: session.readHistory() });
34
+ const mode = c.req.query('mode') ?? 'bash';
35
+ return c.json({ mode, lines: session.readHistory(mode) });
35
36
  });
36
37
  app.get('/session', ctx.adminOnly, ctx.wsRegister((ws, c) => {
37
38
  // Route this connection to the per-user ShellSession. sessionUser
@@ -24,6 +24,12 @@ export interface WsLike {
24
24
  }
25
25
  export declare class ShellSession {
26
26
  readonly userId: string;
27
+ /**
28
+ * Initial cwd at session construction — the per-user shell tenant root.
29
+ * Frozen for the session's lifetime so clients can render relative paths
30
+ * (e.g., `~/foo`) regardless of subsequent `cd` motion.
31
+ */
32
+ readonly tenantRoot: string;
27
33
  cwd: string;
28
34
  env: Record<string, string>;
29
35
  private readonly history;
@@ -40,14 +46,14 @@ export declare class ShellSession {
40
46
  broadcast(event: ServerEvent): void;
41
47
  /**
42
48
  * Submit a command line. Ignored if a process is already running.
43
- * Appends the line to history and starts the runner. Stdout/stderr/
44
- * exit are broadcast as events.
49
+ * Appends the line to history (tagged with the active mode) and starts
50
+ * the runner. Stdout/stderr/exit are broadcast as events.
45
51
  */
46
- submit(line: string, _fromWs: WsLike): Promise<void>;
52
+ submit(line: string, mode: string, _fromWs: WsLike): Promise<void>;
47
53
  /** Record a line in history without running anything (for local SH3 verbs). */
48
- historyLog(line: string): void;
54
+ historyLog(line: string, mode: string): void;
49
55
  /** Read the persisted history buffer — used by the JSON /history endpoint. */
50
- readHistory(): string[];
56
+ readHistory(mode: string): string[];
51
57
  /** Forward a signal to the running process, if any. */
52
58
  signal(sig: 'SIGINT' | 'EOF'): void;
53
59
  /** Change cwd and broadcast a cwd update to every attached client. */
@@ -16,6 +16,12 @@
16
16
  import { HistoryStore } from './history-store.js';
17
17
  export class ShellSession {
18
18
  userId;
19
+ /**
20
+ * Initial cwd at session construction — the per-user shell tenant root.
21
+ * Frozen for the session's lifetime so clients can render relative paths
22
+ * (e.g., `~/foo`) regardless of subsequent `cd` motion.
23
+ */
24
+ tenantRoot;
19
25
  cwd;
20
26
  env;
21
27
  history;
@@ -32,6 +38,7 @@ export class ShellSession {
32
38
  this.history = history;
33
39
  this.ringSize = cfg.ringSize;
34
40
  this.cwd = cfg.defaultCwd || process.cwd();
41
+ this.tenantRoot = this.cwd;
35
42
  this.env = { ...process.env, FORCE_COLOR: '1' };
36
43
  }
37
44
  attach(ws) {
@@ -40,14 +47,15 @@ export class ShellSession {
40
47
  t: 'welcome',
41
48
  userId: this.userId,
42
49
  cwd: this.cwd,
50
+ tenantRoot: this.tenantRoot,
43
51
  env: this.env,
44
52
  seq: this.nextSeq - 1,
45
53
  };
46
54
  ws.send(JSON.stringify(welcome));
47
55
  const replay = { t: 'replay', events: [...this.ring] };
48
56
  ws.send(JSON.stringify(replay));
49
- const history = { t: 'history', lines: this.history.read() };
50
- ws.send(JSON.stringify(history));
57
+ const bundle = { t: 'history-bundle', byMode: this.history.readBundle() };
58
+ ws.send(JSON.stringify(bundle));
51
59
  }
52
60
  detach(ws) {
53
61
  this.clients.delete(ws);
@@ -69,10 +77,10 @@ export class ShellSession {
69
77
  }
70
78
  /**
71
79
  * Submit a command line. Ignored if a process is already running.
72
- * Appends the line to history and starts the runner. Stdout/stderr/
73
- * exit are broadcast as events.
80
+ * Appends the line to history (tagged with the active mode) and starts
81
+ * the runner. Stdout/stderr/exit are broadcast as events.
74
82
  */
75
- async submit(line, _fromWs) {
83
+ async submit(line, mode, _fromWs) {
76
84
  if (this.running || this.starting) {
77
85
  console.warn(`[shell-shard] submit while running — ignored (user=${this.userId})`);
78
86
  return;
@@ -88,7 +96,7 @@ export class ShellSession {
88
96
  // by the running-guard above. See runner.ts for the full race writeup.
89
97
  let exited = false;
90
98
  try {
91
- this.history.append(line);
99
+ this.history.append(line, mode);
92
100
  // Emit a prompt event so every attached client echoes the line
93
101
  this.broadcast({
94
102
  kind: 'prompt',
@@ -134,12 +142,12 @@ export class ShellSession {
134
142
  }
135
143
  }
136
144
  /** Record a line in history without running anything (for local SH3 verbs). */
137
- historyLog(line) {
138
- this.history.append(line);
145
+ historyLog(line, mode) {
146
+ this.history.append(line, mode);
139
147
  }
140
148
  /** Read the persisted history buffer — used by the JSON /history endpoint. */
141
- readHistory() {
142
- return this.history.read();
149
+ readHistory(mode) {
150
+ return this.history.read(mode);
143
151
  }
144
152
  /** Forward a signal to the running process, if any. */
145
153
  signal(sig) {
@@ -27,14 +27,14 @@ export function handleClientMessage(session, ws, raw) {
27
27
  applyCwdChange(session, target, 'cd');
28
28
  return;
29
29
  }
30
- void session.submit(msg.line, ws);
30
+ void session.submit(msg.line, msg.mode, ws);
31
31
  return;
32
32
  }
33
33
  case 'signal':
34
34
  session.signal(msg.sig);
35
35
  return;
36
36
  case 'history-log':
37
- session.historyLog(msg.line);
37
+ session.historyLog(msg.line, msg.mode);
38
38
  return;
39
39
  case 'cwd-query':
40
40
  session.setCwd(session.cwd);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sh3-server",
3
- "version": "0.15.1",
3
+ "version": "0.15.2",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "sh3-server": "dist/cli.js"
@@ -1 +0,0 @@
1
- .modal-frame.svelte-2tcvcm{position:absolute;inset:0;display:grid;place-items:center;pointer-events:auto}.modal-box.svelte-2tcvcm{background:var(--shell-grad-bg-elevated, var(--shell-bg-elevated));color:var(--shell-fg);border:1px solid var(--shell-border-strong);border-radius:var(--shell-radius);min-width:320px;max-width:min(640px,90vw);max-height:90vh;overflow:auto;box-shadow:0 20px 48px #00000080;outline:none}.popup-frame.svelte-mp81cl{position:absolute;background:var(--shell-grad-bg-elevated, var(--shell-bg-elevated));color:var(--shell-fg);border:1px solid var(--shell-border-strong);border-radius:var(--shell-radius-sm);box-shadow:0 8px 24px #0006;min-width:120px;outline:none;pointer-events:auto}.toast.svelte-12gwnj0{pointer-events:auto;display:flex;align-items:center;gap:var(--shell-pad-md);padding:var(--shell-pad-sm) var(--shell-pad-md);background:var(--shell-grad-bg-elevated, var(--shell-bg-elevated));color:var(--shell-fg);border:1px solid var(--shell-border-strong);border-left-width:3px;border-radius:var(--shell-radius-sm);box-shadow:0 8px 20px #0006;font-size:12px;min-width:220px;max-width:360px;cursor:pointer;animation:svelte-12gwnj0-toast-in .16s ease-out both}.toast-level.svelte-12gwnj0{text-transform:uppercase;font-family:var(--shell-font-mono);font-size:10px;letter-spacing:.5px;color:var(--shell-fg-muted)}.toast-message.svelte-12gwnj0{flex:1}.toast-info.svelte-12gwnj0{border-left-color:var(--shell-accent)}.toast-success.svelte-12gwnj0{border-left-color:var(--shell-success)}.toast-warn.svelte-12gwnj0{border-left-color:var(--shell-warning)}.toast-error.svelte-12gwnj0{border-left-color:var(--shell-error)}@keyframes svelte-12gwnj0-toast-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.sh3-conflict-text.svelte-iwgja4{display:flex;flex-direction:column;gap:12px;padding:12px;height:100%;min-height:0}.sh3-conflict-text-dual.svelte-iwgja4{display:grid;grid-template-columns:1fr 1fr;gap:8px;min-height:0;flex:1}.sh3-conflict-text-pane.svelte-iwgja4{display:flex;flex-direction:column;min-height:0;border:1px solid var(--shell-border, #444);border-radius:var(--shell-radius-sm);background:var(--shell-input-bg, #2a2a2a);cursor:pointer}.sh3-conflict-text-pane.selected.svelte-iwgja4{border-color:var(--shell-accent, #007acc);box-shadow:0 0 0 2px var(--shell-focus-ring, rgba(0,122,204,.3))}.sh3-conflict-text-head.svelte-iwgja4{padding:6px 10px;font-size:.75rem;color:var(--shell-fg-muted, #888);border-bottom:1px solid var(--shell-border, #444)}.sh3-conflict-text-body.svelte-iwgja4{margin:0;padding:10px;flex:1;overflow:auto;font-family:var(--shell-font-mono, monospace);font-size:.8125rem}.sh3-conflict-text-diff.svelte-iwgja4{margin-top:8px}.sh3-conflict-text-diff.svelte-iwgja4 pre:where(.svelte-iwgja4){background:var(--shell-input-bg, #2a2a2a);padding:8px;overflow:auto;max-height:240px}.diff-left{color:var(--shell-error, #e35)}.diff-right{color:var(--shell-success, #3a3)}.diff-same{opacity:.7}.sh3-conflict-text-tabs.svelte-iwgja4{display:flex;flex-direction:column;gap:8px;min-height:0;flex:1}.sh3-conflict-text-picker.svelte-iwgja4 select:where(.svelte-iwgja4){background:var(--shell-input-bg, #2a2a2a);color:var(--shell-fg, #e0e0e0);border:1px solid var(--shell-border, #444);padding:2px 6px}.sh3-conflict-text-tablist.svelte-iwgja4{display:flex;gap:4px;flex-wrap:wrap}.sh3-conflict-text-tab.svelte-iwgja4{padding:4px 10px;background:var(--shell-input-bg, #2a2a2a);border:1px solid var(--shell-border, #444);border-radius:var(--shell-radius-sm);color:var(--shell-fg, #e0e0e0);cursor:pointer;font-size:.8125rem}.sh3-conflict-text-tab.selected.svelte-iwgja4{border-color:var(--shell-accent, #007acc)}.sh3-conflict-meta.svelte-1nz3djn{padding:16px;display:flex;flex-direction:column;gap:12px}.sh3-conflict-meta-note.svelte-1nz3djn{color:var(--shell-fg-muted, #888);font-size:.875rem;font-style:italic}.sh3-conflict-meta-list.svelte-1nz3djn{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:8px}.sh3-conflict-meta-li.svelte-1nz3djn{margin:0}.sh3-conflict-meta-row.svelte-1nz3djn{width:100%;text-align:left;padding:10px 12px;background:var(--shell-input-bg, #2a2a2a);color:var(--shell-fg, #e0e0e0);border:1px solid var(--shell-border, #444);border-radius:var(--shell-radius-sm);cursor:pointer;font:inherit}.sh3-conflict-meta-row.selected.svelte-1nz3djn{border-color:var(--shell-accent, #007acc);box-shadow:0 0 0 2px var(--shell-focus-ring, rgba(0,122,204,.3))}.sh3-conflict-meta-origin.svelte-1nz3djn{font-weight:600;font-size:.875rem}.sh3-conflict-meta-detail.svelte-1nz3djn{color:var(--shell-fg-muted, #888);font-size:.75rem;margin-top:2px}.sh3-conflict-prompt.svelte-1jvtzud{padding:20px;display:flex;flex-direction:column;gap:14px;min-width:360px;max-width:480px}.sh3-conflict-prompt-title.svelte-1jvtzud{margin:0;font-size:1.0625rem;font-weight:600;color:var(--shell-fg, #e0e0e0)}.sh3-conflict-prompt-intro.svelte-1jvtzud{margin:0;color:var(--shell-fg-muted, #888);font-size:.875rem}.sh3-conflict-prompt-actions.svelte-1jvtzud{display:flex;flex-direction:column;gap:8px}.sh3-conflict-prompt-actions.svelte-1jvtzud button:where(.svelte-1jvtzud){padding:10px 14px;border-radius:var(--shell-radius);border:1px solid var(--shell-border, #444);background:var(--shell-input-bg, #2a2a2a);color:var(--shell-fg, #e0e0e0);font-size:.875rem;font-family:inherit;cursor:pointer;text-align:left}.sh3-conflict-prompt-primary.svelte-1jvtzud{background:var(--shell-accent, #007acc)!important;border-color:var(--shell-accent, #007acc)!important;color:#fff!important;font-weight:600}.sh3-conflict-prompt-cancel.svelte-1jvtzud{color:var(--shell-fg-muted, #888)!important}.sh3-conflict-detail.svelte-pw8iv6{display:flex;flex-direction:column;width:min(920px,96vw);height:min(640px,90vh);background:var(--shell-bg, #1e1e1e);color:var(--shell-fg, #e0e0e0);border:1px solid var(--shell-border, #444);border-radius:var(--shell-radius-md);box-shadow:0 8px 32px #0006}.sh3-conflict-detail-head.svelte-pw8iv6{padding:12px 16px;border-bottom:1px solid var(--shell-border, #444);display:flex;justify-content:space-between;align-items:center}.sh3-conflict-detail-head.svelte-pw8iv6 h3:where(.svelte-pw8iv6){margin:0;font-size:1rem;font-weight:600}.sh3-conflict-detail-counter.svelte-pw8iv6{color:var(--shell-fg-muted, #888);font-size:.8125rem}.sh3-conflict-detail-body.svelte-pw8iv6{display:flex;flex:1;min-height:0}.sh3-conflict-detail-rail.svelte-pw8iv6{width:240px;border-right:1px solid var(--shell-border, #444);overflow-y:auto;display:flex;flex-direction:column}.sh3-conflict-detail-rail-item.svelte-pw8iv6{display:flex;gap:8px;align-items:center;padding:6px 12px;text-align:left;background:transparent;border:none;color:inherit;cursor:pointer;font:inherit;font-size:.8125rem}.sh3-conflict-detail-rail-item.svelte-pw8iv6:hover{background:var(--shell-input-bg, #2a2a2a)}.sh3-conflict-detail-rail-item.selected.svelte-pw8iv6{background:var(--shell-input-bg, #2a2a2a);font-weight:600}.sh3-conflict-detail-rail-state.svelte-pw8iv6{width:1em;text-align:center;opacity:.7}.sh3-conflict-detail-rail-state.resolved.svelte-pw8iv6{color:var(--shell-success, #3a3);opacity:1}.sh3-conflict-detail-rail-state.skipped.svelte-pw8iv6{color:var(--shell-fg-muted, #888)}.sh3-conflict-detail-rail-label.svelte-pw8iv6{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sh3-conflict-detail-main.svelte-pw8iv6{flex:1;display:flex;flex-direction:column;min-width:0}.sh3-conflict-detail-branches.svelte-pw8iv6{display:flex;gap:12px;padding:8px 16px;border-bottom:1px solid var(--shell-border, #444);flex-wrap:wrap}.sh3-conflict-detail-branch.svelte-pw8iv6{display:flex;gap:6px;align-items:center;font-size:.8125rem}.sh3-conflict-detail-renderer.svelte-pw8iv6{flex:1;min-height:0;overflow:auto}.sh3-conflict-detail-foot.svelte-pw8iv6{padding:10px 16px;border-top:1px solid var(--shell-border, #444);display:flex;justify-content:space-between;gap:8px}.sh3-conflict-detail-nav.svelte-pw8iv6,.sh3-conflict-detail-actions.svelte-pw8iv6{display:flex;gap:8px}.sh3-conflict-detail-nav.svelte-pw8iv6 button:where(.svelte-pw8iv6),.sh3-conflict-detail-actions.svelte-pw8iv6 button:where(.svelte-pw8iv6){padding:6px 14px;background:var(--shell-input-bg, #2a2a2a);color:var(--shell-fg, #e0e0e0);border:1px solid var(--shell-border, #444);border-radius:var(--shell-radius);font:inherit;font-size:.8125rem;cursor:pointer}.sh3-conflict-detail-nav.svelte-pw8iv6 button:where(.svelte-pw8iv6):disabled{opacity:.5;cursor:not-allowed}.sh3-conflict-detail-done.svelte-pw8iv6{background:var(--shell-accent, #007acc)!important;color:#fff!important;font-weight:600;border-color:var(--shell-accent, #007acc)!important}.sh3-context-menu.svelte-1667pfa{min-width:220px;background:var(--shell-bg-elevated, #222);color:var(--shell-fg, #eee);border-radius:4px;padding:4px 0;box-shadow:0 4px 16px #00000059;outline:none}.sh3-ctx-item.svelte-1667pfa{display:flex;align-items:center;gap:8px;width:100%;padding:4px 10px;background:none;border:0;text-align:left;color:inherit;cursor:default;font:inherit}.sh3-ctx-active.svelte-1667pfa{background:var(--shell-accent, #6ea8fe);color:var(--shell-fg,#e4e6eb)}.sh3-ctx-disabled.svelte-1667pfa{opacity:.45}.sh3-ctx-disabled.sh3-ctx-active.svelte-1667pfa{background:transparent}.sh3-ctx-check.svelte-1667pfa{display:inline-block;width:12px;text-align:center;opacity:.85}.sh3-ctx-label.svelte-1667pfa{flex:1}.sh3-ctx-chevron.svelte-1667pfa{opacity:.6}.sh3-ctx-shortcut.svelte-1667pfa{opacity:.6;font-size:.9em}.sh3-ctx-sep.svelte-1667pfa{height:1px;background:#ffffff1a;margin:4px 0}.sh3-palette.svelte-1qdcgk6{min-width:480px;max-width:640px;background:var(--shell-bg-elevated, #22232a);color:var(--shell-fg, #e4e6eb);border-radius:var(--shell-radius-md, 6px);box-shadow:0 8px 24px #0006}.sh3-palette-input.svelte-1qdcgk6{width:100%;padding:10px;background:none;border:0;border-bottom:1px solid rgba(255,255,255,.1);color:inherit;font:inherit;outline:none}.sh3-palette-list.svelte-1qdcgk6{max-height:320px;overflow-y:auto;padding:4px 0}.sh3-palette-item.svelte-1qdcgk6{display:flex;align-items:center;gap:12px;width:100%;padding:6px 12px;background:none;border:0;color:inherit;text-align:left;font:inherit;cursor:default}.sh3-palette-active.svelte-1qdcgk6{background:var(--shell-accent, #4a5);border-radius:0;color:#fff}.sh3-palette-label.svelte-1qdcgk6{flex:1}.sh3-palette-badge.svelte-1qdcgk6{opacity:.5;font-size:.85em}.sh3-palette-shortcut.svelte-1qdcgk6{opacity:.6;font-size:.9em}.sh3-btn.svelte-t4hi97{appearance:none;display:inline-flex;align-items:center;justify-content:center;gap:var(--shell-pad-sm);padding:6px 14px;background:var(--shell-accent);color:var(--shell-fg-on-accent);border:none;border-radius:var(--shell-radius);cursor:pointer;font-family:inherit;font-size:.875rem;line-height:var(--shell-line)}.sh3-btn.svelte-t4hi97:hover:not(:disabled){filter:brightness(1.12)}.sh3-btn.svelte-t4hi97:active:not(:disabled){filter:brightness(.92)}.sh3-btn.svelte-t4hi97:focus-visible{box-shadow:var(--shell-focus-ring);outline:none}.sh3-btn.svelte-t4hi97:disabled{opacity:.55;cursor:not-allowed}.sh3-btn--alert.svelte-t4hi97{background:var(--shell-error);color:var(--shell-fg-on-error)}.sh3-btn--ghost.svelte-t4hi97{background:transparent;color:var(--shell-fg);border:1px solid var(--shell-border)}.sh3-btn--ghost.svelte-t4hi97:hover:not(:disabled){background:var(--shell-bg-elevated);filter:none}.sh3-btn--icon.svelte-t4hi97{background:transparent;color:var(--shell-fg-muted);padding:var(--shell-pad-sm)}.sh3-btn--icon.svelte-t4hi97:hover:not(:disabled){background:var(--shell-bg-elevated);color:var(--shell-fg);filter:none}.sh3-btn--icon-only.svelte-t4hi97{padding:var(--shell-pad-sm);width:26px;height:26px}.sh3-btn__icon.svelte-t4hi97{width:16px;height:16px;flex-shrink:0}.sh3-btn__label.svelte-t4hi97{display:inline-flex;white-space:nowrap}.sh3-btn__spinner.svelte-t4hi97{width:16px;height:16px;flex-shrink:0;animation:svelte-t4hi97-sh3-btn-spin .8s linear infinite}@keyframes svelte-t4hi97-sh3-btn-spin{to{transform:rotate(360deg)}}.sh3-collapsible.svelte-lvydsb{border:1px solid var(--shell-border);border-radius:var(--shell-radius);background:transparent}.sh3-collapsible__head.svelte-lvydsb{appearance:none;width:100%;display:inline-flex;align-items:center;gap:var(--shell-pad-sm);padding:var(--shell-pad-sm) 12px;background:transparent;color:var(--shell-fg);border:none;border-radius:inherit;cursor:pointer;font-family:inherit;font-size:.875rem;line-height:var(--shell-line);text-align:left}.sh3-collapsible__head.svelte-lvydsb:hover{background:var(--shell-bg-elevated)}.sh3-collapsible__head.svelte-lvydsb:focus-visible{box-shadow:var(--shell-focus-ring);outline:none}.sh3-collapsible__caret.svelte-lvydsb{width:12px;height:12px;flex-shrink:0;color:var(--shell-fg-muted)}.sh3-collapsible--open.svelte-lvydsb .sh3-collapsible__caret:where(.svelte-lvydsb){transform:rotate(90deg)}.sh3-collapsible__title.svelte-lvydsb{flex:1}.sh3-collapsible__body.svelte-lvydsb{padding:var(--shell-pad-sm) 12px;border-top:1px solid var(--shell-border)}.sh3-field.svelte-m4dkl{display:inline-flex;flex-direction:column;gap:4px;font-family:var(--shell-font-ui);font-size:.8125rem;color:var(--shell-fg)}.sh3-field__label.svelte-m4dkl{color:var(--shell-fg-muted);font-size:.75rem}.sh3-field__row.svelte-m4dkl{display:inline-flex;align-items:stretch;background:var(--shell-input-bg);border:1px solid var(--shell-border);border-radius:var(--shell-widget-radius);height:var(--shell-field-height-md);transition:border-color var(--shell-motion-fast) var(--shell-ease-standard),box-shadow var(--shell-motion-fast) var(--shell-ease-standard)}.sh3-field--sm.svelte-m4dkl .sh3-field__row:where(.svelte-m4dkl){height:var(--shell-field-height-sm)}.sh3-field__row.svelte-m4dkl:focus-within{border-color:var(--shell-input-border-focus);box-shadow:var(--shell-focus-ring)}.sh3-field--invalid.svelte-m4dkl .sh3-field__row:where(.svelte-m4dkl){border-color:var(--shell-error)}.sh3-field--invalid.svelte-m4dkl .sh3-field__row:where(.svelte-m4dkl):focus-within{box-shadow:0 0 0 2px color-mix(in srgb,var(--shell-error) 40%,transparent)}.sh3-field__input.svelte-m4dkl{flex:1 1 auto;height:100%;padding:0 var(--shell-field-pad-x);background:transparent;border:none;color:inherit;font:inherit;outline:none}.sh3-field__input.svelte-m4dkl:focus,.sh3-field__input.svelte-m4dkl:focus-visible{outline:none;box-shadow:none;border:none}.sh3-field__input.svelte-m4dkl:disabled{color:var(--shell-fg-muted);cursor:not-allowed}.sh3-field__affix.svelte-m4dkl{display:inline-flex;align-items:center;padding:0 var(--shell-field-pad-x);color:var(--shell-fg-muted);flex-shrink:0}.sh3-field__affix.svelte-m4dkl:first-child{padding-right:0}.sh3-field__affix.svelte-m4dkl:last-child{padding-left:0}.sh3-field__helper.svelte-m4dkl{color:var(--shell-fg-muted);font-size:.75rem}.sh3-field__helper--error.svelte-m4dkl{color:var(--shell-error)}.sh3-textarea.svelte-668c6r{display:inline-flex;flex-direction:column;gap:4px;font-family:var(--shell-font-ui);font-size:.8125rem}.sh3-textarea__label.svelte-668c6r{color:var(--shell-fg-muted);font-size:.75rem}.sh3-textarea__input.svelte-668c6r{background:var(--shell-input-bg);color:var(--shell-fg);border:1px solid var(--shell-border);border-radius:var(--shell-widget-radius);padding:var(--shell-pad-sm) var(--shell-field-pad-x);font:inherit;outline:none;transition:border-color var(--shell-motion-fast) var(--shell-ease-standard)}.sh3-textarea__input.svelte-668c6r:focus{border-color:var(--shell-input-border-focus);box-shadow:var(--shell-focus-ring)}.sh3-textarea--invalid.svelte-668c6r .sh3-textarea__input:where(.svelte-668c6r){border-color:var(--shell-error)}.sh3-textarea__helper.svelte-668c6r{color:var(--shell-fg-muted);font-size:.75rem}.sh3-textarea__helper--error.svelte-668c6r{color:var(--shell-error)}.sh3-num.svelte-1qa0x3m{display:inline-flex;flex-direction:column;gap:4px;font-size:.8125rem}.sh3-num__label.svelte-1qa0x3m{color:var(--shell-fg-muted);font-size:.75rem}.sh3-num__row.svelte-1qa0x3m{display:inline-flex;align-items:stretch;background:var(--shell-input-bg);border:1px solid var(--shell-border);border-radius:var(--shell-widget-radius);height:var(--shell-field-height-md)}.sh3-num--sm.svelte-1qa0x3m .sh3-num__row:where(.svelte-1qa0x3m){height:var(--shell-field-height-sm)}.sh3-num__row.svelte-1qa0x3m:focus-within{border-color:var(--shell-input-border-focus);box-shadow:var(--shell-focus-ring)}.sh3-num--invalid.svelte-1qa0x3m .sh3-num__row:where(.svelte-1qa0x3m){border-color:var(--shell-error)}.sh3-num__input.svelte-1qa0x3m{flex:1 1 auto;min-width:50px;padding:0 var(--shell-field-pad-x);background:transparent;border:none;color:var(--shell-fg);font:inherit;outline:none;-moz-appearance:textfield;appearance:textfield}.sh3-num__input.svelte-1qa0x3m:focus,.sh3-num__input.svelte-1qa0x3m:focus-visible{outline:none;box-shadow:none;border:none}.sh3-num__input.svelte-1qa0x3m::-webkit-outer-spin-button,.sh3-num__input.svelte-1qa0x3m::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.sh3-num__affix.svelte-1qa0x3m{display:inline-flex;align-items:center;padding:0 6px;color:var(--shell-fg-muted)}.sh3-num__steppers.svelte-1qa0x3m{display:inline-flex;flex-direction:column;border-left:1px solid var(--shell-border)}.sh3-num__steppers.svelte-1qa0x3m button:where(.svelte-1qa0x3m){flex:1;width:18px;background:transparent;color:var(--shell-fg-muted);border:none;border-radius:0;padding:0;cursor:pointer;font-size:8px;line-height:1}.sh3-num__steppers.svelte-1qa0x3m button:where(.svelte-1qa0x3m):hover:not(:disabled){background:var(--shell-bg-elevated);color:var(--shell-fg);filter:none}.sh3-num__steppers.svelte-1qa0x3m button:where(.svelte-1qa0x3m):disabled{cursor:not-allowed;opacity:.5}.sh3-num__steppers.svelte-1qa0x3m button:where(.svelte-1qa0x3m)+button:where(.svelte-1qa0x3m){border-top:1px solid var(--shell-border)}.sh3-seg.svelte-17xsko9{display:inline-flex;background:var(--shell-bg-sunken);border:1px solid var(--shell-border);border-radius:var(--shell-widget-radius-pill);padding:2px;height:var(--shell-field-height-md);gap:0}.sh3-seg--sm.svelte-17xsko9{height:var(--shell-field-height-sm)}.sh3-seg.svelte-17xsko9 button:where(.svelte-17xsko9){background:transparent;color:var(--shell-fg-muted);border:none;padding:0 var(--shell-field-pad-x);border-radius:var(--shell-widget-radius-pill);font-size:.8125rem;cursor:pointer;transition:background var(--shell-motion-fast) var(--shell-ease-standard),color var(--shell-motion-fast) var(--shell-ease-standard)}.sh3-seg.svelte-17xsko9 button:where(.svelte-17xsko9):hover:not(:disabled):not(.sh3-seg__btn--active){color:var(--shell-fg);filter:none}.sh3-seg.svelte-17xsko9 button.sh3-seg__btn--active:where(.svelte-17xsko9){background:var(--shell-accent);color:var(--shell-fg-on-accent);font-weight:600;box-shadow:0 1px 2px #00000040,inset 0 0 0 1px color-mix(in srgb,var(--shell-fg-on-accent) 25%,transparent)}.sh3-seg.svelte-17xsko9 button:where(.svelte-17xsko9):disabled{opacity:.5;cursor:not-allowed}.sh3-seg.svelte-17xsko9 button:where(.svelte-17xsko9):focus-visible{outline:none;box-shadow:var(--shell-focus-ring)}.sh3-itg.svelte-13knxr5{display:inline-flex;background:var(--shell-bg-sunken);border:1px solid var(--shell-border);border-radius:var(--shell-widget-radius);padding:2px;gap:2px}.sh3-itg.svelte-13knxr5 button:where(.svelte-13knxr5){width:26px;height:26px;background:transparent;color:var(--shell-fg-muted);border:none;border-radius:var(--shell-radius-sm);cursor:pointer;display:inline-flex;align-items:center;justify-content:center;padding:0;transition:background var(--shell-motion-fast) var(--shell-ease-standard),color var(--shell-motion-fast) var(--shell-ease-standard)}.sh3-itg--sm.svelte-13knxr5 button:where(.svelte-13knxr5){width:22px;height:22px}.sh3-itg.svelte-13knxr5 button:where(.svelte-13knxr5):hover:not(:disabled):not(.sh3-itg__btn--active){background:var(--shell-bg-elevated);color:var(--shell-fg);filter:none}.sh3-itg.svelte-13knxr5 button.sh3-itg__btn--active:where(.svelte-13knxr5){background:var(--shell-accent);color:var(--shell-fg-on-accent);font-weight:600;box-shadow:0 1px 2px #00000040,inset 0 0 0 1px color-mix(in srgb,var(--shell-fg-on-accent) 25%,transparent)}.sh3-itg.svelte-13knxr5 button:where(.svelte-13knxr5):focus-visible{outline:none;box-shadow:var(--shell-focus-ring)}.sh3-itg.svelte-13knxr5 button:where(.svelte-13knxr5):disabled{opacity:.5;cursor:not-allowed}.sh3-slider.svelte-13va6lu{--thumb-size: 14px;position:relative;display:inline-block}.sh3-slider--sm.svelte-13va6lu{--thumb-size: 12px}.sh3-slider--horizontal.svelte-13va6lu{width:200px;height:var(--thumb-size)}.sh3-slider--vertical.svelte-13va6lu{width:var(--thumb-size);height:200px}.sh3-slider__track.svelte-13va6lu{position:absolute;background:var(--shell-track-bg);border:1px solid var(--shell-track-border);border-radius:var(--shell-widget-radius-pill);pointer-events:none}.sh3-slider--horizontal.svelte-13va6lu .sh3-slider__track:where(.svelte-13va6lu){top:50%;left:0;right:0;height:4px;transform:translateY(-50%)}.sh3-slider--vertical.svelte-13va6lu .sh3-slider__track:where(.svelte-13va6lu){left:50%;top:0;bottom:0;width:4px;transform:translate(-50%)}.sh3-slider__fill.svelte-13va6lu{position:absolute;background:var(--shell-track-fill);border-radius:inherit}.sh3-slider--horizontal.svelte-13va6lu .sh3-slider__fill:where(.svelte-13va6lu){left:0;top:0;bottom:0;width:var(--pct)}.sh3-slider--vertical.svelte-13va6lu .sh3-slider__fill:where(.svelte-13va6lu){bottom:0;left:0;right:0;height:var(--pct)}.sh3-slider__tick.svelte-13va6lu{position:absolute;background:var(--shell-tick-bg)}.sh3-slider--horizontal.svelte-13va6lu .sh3-slider__tick:where(.svelte-13va6lu){width:1px;height:8px;top:50%;transform:translate(-50%,-50%);left:var(--tick-pct)}.sh3-slider--vertical.svelte-13va6lu .sh3-slider__tick:where(.svelte-13va6lu){width:8px;height:1px;left:50%;transform:translate(-50%,50%);bottom:var(--tick-pct)}.sh3-slider__native.svelte-13va6lu{position:absolute;inset:0;width:100%;height:100%;margin:0;background:transparent;-webkit-appearance:none;appearance:none;cursor:pointer}.sh3-slider--vertical.svelte-13va6lu .sh3-slider__native:where(.svelte-13va6lu){writing-mode:vertical-lr;direction:rtl}.sh3-slider__native.svelte-13va6lu:disabled{cursor:not-allowed;opacity:1}.sh3-slider--invalid.svelte-13va6lu .sh3-slider__track:where(.svelte-13va6lu){border-color:var(--shell-error)}.sh3-slider.svelte-13va6lu:has(.sh3-slider__native:where(.svelte-13va6lu):disabled) .sh3-slider__fill:where(.svelte-13va6lu){background:var(--shell-border-strong)}.sh3-slider__native.svelte-13va6lu::-webkit-slider-thumb{-webkit-appearance:none;width:var(--thumb-size);height:var(--thumb-size);border-radius:50%;background:var(--shell-thumb-bg);border:2px solid var(--shell-thumb-border);box-shadow:var(--shell-thumb-shadow);cursor:pointer;opacity:1}.sh3-slider__native.svelte-13va6lu::-moz-range-thumb{width:var(--thumb-size);height:var(--thumb-size);border-radius:50%;background:var(--shell-thumb-bg);border:2px solid var(--shell-thumb-border);box-shadow:var(--shell-thumb-shadow);cursor:pointer;opacity:1}.sh3-slider__native.svelte-13va6lu:disabled::-webkit-slider-thumb{background:var(--shell-fg-subtle);border-color:var(--shell-border-strong);cursor:not-allowed;opacity:1}.sh3-slider__native.svelte-13va6lu:disabled::-moz-range-thumb{background:var(--shell-fg-subtle);border-color:var(--shell-border-strong);cursor:not-allowed;opacity:1}.sh3-slider__native.svelte-13va6lu::-webkit-slider-runnable-track,.sh3-slider__native.svelte-13va6lu::-moz-range-track{background:transparent}.sh3-slider__native.svelte-13va6lu:focus-visible::-webkit-slider-thumb{box-shadow:var(--shell-focus-ring),var(--shell-thumb-shadow)}.sh3-slider__native.svelte-13va6lu:focus-visible::-moz-range-thumb{box-shadow:var(--shell-focus-ring),var(--shell-thumb-shadow)}.sh3-slider__value.svelte-13va6lu{position:absolute;font-size:.75rem;color:var(--shell-fg-muted);pointer-events:none;transform:translate(-50%)}.sh3-slider--horizontal.svelte-13va6lu .sh3-slider__value:where(.svelte-13va6lu){top:calc(100% + 4px);left:var(--pct)}.sh3-slider--vertical.svelte-13va6lu .sh3-slider__value:where(.svelte-13va6lu){left:calc(100% + 6px);bottom:var(--pct);transform:translateY(50%)}.sh3-range.svelte-rdbrc5{--thumb-size: 14px;position:relative;width:200px;height:var(--thumb-size)}.sh3-range--sm.svelte-rdbrc5{--thumb-size: 12px}.sh3-range__track.svelte-rdbrc5{position:absolute;top:50%;left:0;right:0;height:4px;transform:translateY(-50%);background:var(--shell-track-bg);border:1px solid var(--shell-track-border);border-radius:var(--shell-widget-radius-pill)}.sh3-range__fill.svelte-rdbrc5{position:absolute;top:0;bottom:0;left:var(--lo);width:calc(var(--hi) - var(--lo));background:var(--shell-track-fill);border-radius:inherit}.sh3-range__native.svelte-rdbrc5{position:absolute;top:0;left:0;width:100%;height:100%;margin:0;background:transparent;-webkit-appearance:none;appearance:none;pointer-events:none}.sh3-range__native.svelte-rdbrc5:disabled{opacity:1;cursor:not-allowed}.sh3-range__native.svelte-rdbrc5::-webkit-slider-thumb{-webkit-appearance:none;width:var(--thumb-size);height:var(--thumb-size);border-radius:50%;background:var(--shell-thumb-bg);border:2px solid var(--shell-thumb-border);box-shadow:var(--shell-thumb-shadow);pointer-events:auto;cursor:pointer;opacity:1}.sh3-range__native.svelte-rdbrc5::-moz-range-thumb{width:var(--thumb-size);height:var(--thumb-size);border-radius:50%;background:var(--shell-thumb-bg);border:2px solid var(--shell-thumb-border);box-shadow:var(--shell-thumb-shadow);pointer-events:auto;cursor:pointer;opacity:1}.sh3-range__native.svelte-rdbrc5:disabled::-webkit-slider-thumb{background:var(--shell-fg-subtle);border-color:var(--shell-border-strong);cursor:not-allowed;opacity:1}.sh3-range__native.svelte-rdbrc5:disabled::-moz-range-thumb{background:var(--shell-fg-subtle);border-color:var(--shell-border-strong);cursor:not-allowed;opacity:1}.sh3-range.svelte-rdbrc5:has(.sh3-range__native:where(.svelte-rdbrc5):disabled) .sh3-range__fill:where(.svelte-rdbrc5){background:var(--shell-border-strong)}.sh3-range__native.svelte-rdbrc5::-webkit-slider-runnable-track,.sh3-range__native.svelte-rdbrc5::-moz-range-track{background:transparent}.sh3-range--invalid.svelte-rdbrc5 .sh3-range__track:where(.svelte-rdbrc5){border-color:var(--shell-error)}.sh3-sg.svelte-1lqyi0d{display:inline-flex;gap:var(--shell-pad-md)}.sh3-sg--vertical.svelte-1lqyi0d{flex-direction:row;align-items:end}.sh3-sg--horizontal.svelte-1lqyi0d{flex-direction:column}.sh3-sg__channel.svelte-1lqyi0d{display:flex;gap:4px;align-items:center}.sh3-sg--vertical.svelte-1lqyi0d .sh3-sg__channel:where(.svelte-1lqyi0d){flex-direction:column-reverse;align-items:center}.sh3-sg__label.svelte-1lqyi0d{font-size:.75rem;color:var(--shell-fg-muted);min-width:60px}.sh3-sg--vertical.svelte-1lqyi0d .sh3-sg__label:where(.svelte-1lqyi0d){min-width:0;text-align:center}.sh3-swatch.svelte-6ri2j2{display:inline-flex;flex-direction:column;gap:4px}.sh3-swatch__label.svelte-6ri2j2{font-size:.75rem;color:var(--shell-fg-muted)}.sh3-swatch__btn.svelte-6ri2j2{display:inline-flex;align-items:center;gap:8px;height:var(--shell-field-height-md);padding:0 var(--shell-field-pad-x);background:var(--shell-input-bg);border:1px solid var(--shell-border);border-radius:var(--shell-widget-radius);color:var(--shell-fg);cursor:pointer;font:inherit}.sh3-swatch--sm.svelte-6ri2j2 .sh3-swatch__btn:where(.svelte-6ri2j2){height:var(--shell-field-height-sm)}.sh3-swatch__btn.svelte-6ri2j2:hover:not(:disabled){background:var(--shell-bg-elevated);filter:none}.sh3-swatch__btn.svelte-6ri2j2:focus-visible{outline:none;box-shadow:var(--shell-focus-ring)}.sh3-swatch__btn.svelte-6ri2j2:disabled{opacity:.55;cursor:not-allowed}.sh3-swatch__dot.svelte-6ri2j2{width:16px;height:16px;border:1px solid var(--shell-border-strong);border-radius:var(--shell-radius-sm);background:var(--swatch-color)}.sh3-swatch__hex.svelte-6ri2j2{font-family:var(--shell-font-mono);font-size:.75rem}.sh3-fp.svelte-24jk95{display:inline-flex;align-items:stretch;height:var(--shell-field-height-md);border:1px solid var(--shell-border);border-radius:var(--shell-widget-radius);background:var(--shell-input-bg);overflow:hidden;cursor:pointer;font-size:.8125rem}.sh3-fp--sm.svelte-24jk95{height:var(--shell-field-height-sm)}.sh3-fp--invalid.svelte-24jk95{border-color:var(--shell-error)}.sh3-fp.svelte-24jk95:focus-within{box-shadow:var(--shell-focus-ring);border-color:var(--shell-input-border-focus)}.sh3-fp__native.svelte-24jk95{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}.sh3-fp__btn.svelte-24jk95{display:inline-flex;align-items:center;padding:0 var(--shell-field-pad-x);background:var(--shell-bg-elevated);color:var(--shell-fg);border-right:1px solid var(--shell-border)}.sh3-fp__name.svelte-24jk95{display:inline-flex;align-items:center;padding:0 var(--shell-field-pad-x);color:var(--shell-fg-muted);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sh3-listbox.svelte-1tyxvrs{background:var(--shell-bg-elevated);border:1px solid var(--shell-border);border-radius:var(--shell-widget-radius);box-shadow:var(--shell-shadow-sm);min-width:180px;max-width:320px;color:var(--shell-fg);font-size:.8125rem;overflow:hidden}.sh3-listbox__search.svelte-1tyxvrs{width:100%;height:26px;padding:0 8px;background:var(--shell-input-bg);border:none;border-bottom:1px solid var(--shell-border);color:var(--shell-fg);font:inherit;outline:none}.sh3-listbox__list.svelte-1tyxvrs{max-height:280px;overflow-y:auto;padding:4px 0}.sh3-listbox__list.svelte-1tyxvrs>div:where(.svelte-1tyxvrs){display:flex;align-items:center;gap:6px;padding:4px 10px;cursor:pointer}.sh3-listbox__opt--active.svelte-1tyxvrs{background:var(--shell-bg)}.sh3-listbox__opt--selected.svelte-1tyxvrs{color:var(--shell-accent)}.sh3-listbox__opt--active.sh3-listbox__opt--selected.svelte-1tyxvrs{background:var(--shell-accent);color:var(--shell-fg-on-accent)}.sh3-listbox__list.svelte-1tyxvrs>div[aria-disabled=true]:where(.svelte-1tyxvrs){color:var(--shell-fg-subtle);cursor:not-allowed}.sh3-listbox__check.svelte-1tyxvrs{flex-shrink:0;width:12px;height:12px}.sh3-listbox__check--on.svelte-1tyxvrs:before{content:"";display:block;width:100%;height:100%;background:var(--shell-accent);clip-path:polygon(14% 44%,0 60%,40% 100%,100% 20%,85% 8%,38% 70%)}.sh3-listbox__opt--active.sh3-listbox__opt--selected.svelte-1tyxvrs .sh3-listbox__check--on:where(.svelte-1tyxvrs):before{background:var(--shell-fg-on-accent)}.sh3-listbox__empty.svelte-1tyxvrs{padding:6px 10px;color:var(--shell-fg-muted);font-style:italic}.sh3-select.svelte-1q3zxph{display:inline-flex;flex-direction:column;gap:4px;font-size:.8125rem;position:relative}.sh3-select__label.svelte-1q3zxph{color:var(--shell-fg-muted);font-size:.75rem}.sh3-select__btn.svelte-1q3zxph{display:inline-flex;align-items:center;gap:8px;height:var(--shell-field-height-md);min-width:140px;padding:0 var(--shell-field-pad-x);background:var(--shell-input-bg);color:var(--shell-fg);border:1px solid var(--shell-border);border-radius:var(--shell-widget-radius);cursor:pointer;font:inherit;text-align:left}.sh3-select--sm.svelte-1q3zxph .sh3-select__btn:where(.svelte-1q3zxph){height:var(--shell-field-height-sm)}.sh3-select__btn.svelte-1q3zxph:focus-visible{outline:none;box-shadow:var(--shell-focus-ring);border-color:var(--shell-input-border-focus)}.sh3-select__btn.svelte-1q3zxph:disabled{opacity:.55;cursor:not-allowed}.sh3-select--invalid.svelte-1q3zxph .sh3-select__btn:where(.svelte-1q3zxph){border-color:var(--shell-error)}.sh3-select__display.svelte-1q3zxph{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sh3-select__display--placeholder.svelte-1q3zxph,.sh3-select__chevron.svelte-1q3zxph{color:var(--shell-fg-muted)}.sh3-select__native.svelte-1q3zxph{position:absolute;width:1px;height:1px;margin:0;padding:0;border:0;opacity:0;pointer-events:none}.sh3-picker.svelte-1rlwvrb{display:flex;flex-direction:column;gap:6px;border:1px solid var(--shell-border);border-radius:var(--shell-radius-sm, 3px);padding:6px;background:var(--shell-bg-elevated)}.sh3-picker__search.svelte-1rlwvrb{width:100%;padding:4px 6px;border:1px solid var(--shell-border);border-radius:var(--shell-radius-sm, 3px);background:var(--shell-bg);color:var(--shell-fg);font:inherit;font-size:12px}.sh3-picker__list.svelte-1rlwvrb{display:flex;flex-direction:column;max-height:200px;overflow-y:auto}.sh3-picker__row.svelte-1rlwvrb{display:flex;align-items:center;gap:8px;padding:4px 6px;cursor:pointer;border-radius:var(--shell-radius-sm, 3px)}.sh3-picker__row.svelte-1rlwvrb:hover{background:var(--shell-bg)}.sh3-picker__row-text.svelte-1rlwvrb{display:flex;flex-direction:column;gap:0}.sh3-picker__row-label.svelte-1rlwvrb{font-size:13px}.sh3-picker__row-sub.svelte-1rlwvrb{font-size:11px;color:var(--shell-fg-muted)}.sh3-picker__status.svelte-1rlwvrb{margin:0;padding:8px 6px;color:var(--shell-fg-muted);font-size:12px}.sh3-picker__status--error.svelte-1rlwvrb{color:var(--shell-error, #c33)}.sh3-picker__retry.svelte-1rlwvrb{align-self:flex-start;margin:0 6px 8px;background:var(--shell-bg);color:var(--shell-fg);border:1px solid var(--shell-border);border-radius:var(--shell-radius-sm, 3px);padding:2px 8px;font:inherit;font-size:12px;cursor:pointer}.sh3-picker__footer.svelte-1rlwvrb{margin:0;font-size:11px;color:var(--shell-fg-muted);text-align:right}.sh3-picker--disabled.svelte-1rlwvrb .sh3-picker__row:where(.svelte-1rlwvrb){cursor:not-allowed;opacity:.6}.shell-title.svelte-1ifjvh5{display:inline-block;line-height:0;overflow:hidden}.shell-title.svelte-1ifjvh5 canvas{transform:scale(var(--shell-title-scale));transform-origin:top left;display:block}.shell-title-fallback.svelte-1ifjvh5{margin:0;font-size:42px;color:var(--shell-accent);letter-spacing:2px}.delete-project-dialog.svelte-6j13aq{display:flex;flex-direction:column;gap:16px;padding:20px 24px;min-width:400px;max-width:520px}.delete-project-dialog__title.svelte-6j13aq{font-size:16px;font-weight:600;color:var(--shell-fg)}.delete-project-dialog__body.svelte-6j13aq{font-size:13px;color:var(--shell-fg-muted, var(--shell-fg));line-height:1.5}.delete-project-dialog__opt.svelte-6j13aq{display:flex;align-items:flex-start;gap:8px;font-size:13px;color:var(--shell-fg);cursor:pointer}.delete-project-dialog__opt.svelte-6j13aq input:where(.svelte-6j13aq){margin-top:3px}.delete-project-dialog__path.svelte-6j13aq{display:block;font-family:var(--shell-font-mono, monospace);font-size:11px;color:var(--shell-fg-muted);background:var(--shell-bg-elevated);padding:2px 6px;border-radius:var(--shell-radius-sm, 3px);margin-top:2px;word-break:break-all}.delete-project-dialog__actions.svelte-6j13aq{display:flex;justify-content:flex-end;gap:8px;margin-top:4px}.delete-project-dialog__btn.svelte-6j13aq{font-size:13px;padding:6px 14px;border-radius:var(--shell-radius-sm, 4px);border:1px solid var(--shell-border-strong);background:transparent;color:var(--shell-fg);cursor:pointer}.delete-project-dialog__btn.svelte-6j13aq:disabled{opacity:.6;cursor:not-allowed}.delete-project-dialog__btn--danger.svelte-6j13aq{color:var(--shell-error, #d32f2f);border-color:var(--shell-error, #d32f2f)}.project-manage.svelte-1oy3640{position:absolute;inset:0;display:flex;flex-direction:column;font:inherit;color:var(--shell-fg);background:var(--shell-bg)}.body.svelte-1oy3640{flex:1;overflow-y:auto;padding:16px 16px 8px}h2.svelte-1oy3640{margin:0 0 8px;font-size:16px}.project-id.svelte-1oy3640{font-size:12px;color:var(--shell-fg-muted);margin:0 0 16px}.project-id.svelte-1oy3640 code:where(.svelte-1oy3640){font-family:var(--shell-font-mono, monospace)}.field.svelte-1oy3640{display:flex;flex-direction:column;gap:4px;margin-bottom:12px;font-size:13px}.field.svelte-1oy3640 span:where(.svelte-1oy3640){color:var(--shell-fg-muted)}.hint.svelte-1oy3640{font-size:11px;color:var(--shell-fg-muted)}.hint.svelte-1oy3640 code:where(.svelte-1oy3640){font-family:var(--shell-font-mono, monospace);color:var(--shell-fg);background:var(--shell-bg-elevated);padding:0 4px;border-radius:var(--shell-radius-sm, 3px)}.field.svelte-1oy3640 input:where(.svelte-1oy3640),.field.svelte-1oy3640 textarea:where(.svelte-1oy3640){background:var(--shell-bg-elevated);color:var(--shell-fg);border:1px solid var(--shell-border);border-radius:var(--shell-radius-sm, 3px);padding:6px 8px;font:inherit;font-size:13px}.field.svelte-1oy3640 textarea:where(.svelte-1oy3640){resize:vertical;min-height:60px}.error.svelte-1oy3640{color:var(--shell-error, #c33);font-size:13px;margin:0 0 8px}.actions.svelte-1oy3640{display:flex;gap:8px;padding:12px 16px;border-top:1px solid var(--shell-border);background:var(--shell-bg);flex:0 0 auto}.actions.svelte-1oy3640 button:where(.svelte-1oy3640){background:var(--shell-bg-elevated);color:var(--shell-fg);border:1px solid var(--shell-border);border-radius:var(--shell-radius-sm, 3px);padding:6px 14px;font:inherit;cursor:pointer}.actions.svelte-1oy3640 button:where(.svelte-1oy3640):hover{border-color:var(--shell-accent)}.actions.svelte-1oy3640 button.primary:where(.svelte-1oy3640){background:var(--shell-accent);color:#fff;border-color:var(--shell-accent)}.actions.svelte-1oy3640 button.danger:where(.svelte-1oy3640){margin-left:auto;color:var(--shell-error, #c33)}.actions.svelte-1oy3640 button:where(.svelte-1oy3640):disabled{opacity:.5;cursor:not-allowed}.projects-section.svelte-yosqc3{width:100%;max-width:720px;margin-bottom:28px}.projects-heading.svelte-yosqc3{font-size:13px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:var(--shell-fg-subtle);margin:0 0 12px}.projects-grid.svelte-yosqc3{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:10px}.project-card-wrap.svelte-yosqc3{position:relative}.project-card.svelte-yosqc3{display:flex;flex-direction:column;align-items:flex-start;gap:4px;padding:12px 14px;background:var(--shell-grad-bg-elevated, var(--shell-bg-elevated));border:1px solid var(--shell-border);border-radius:var(--shell-radius-md);cursor:pointer;text-align:left;color:inherit;font:inherit;transition:border-color .12s ease,transform .12s ease;width:100%}.project-card-edit.svelte-yosqc3{position:absolute;top:6px;right:6px;background:transparent;border:0;color:var(--shell-fg-muted);cursor:pointer;padding:2px 6px;font-size:14px;border-radius:var(--shell-radius-sm, 3px)}.project-card-edit.svelte-yosqc3:hover{color:var(--shell-fg);background:var(--shell-bg-elevated)}.project-card.svelte-yosqc3:hover{border-color:var(--shell-accent);transform:translateY(-1px)}.project-card.active.svelte-yosqc3{border-color:var(--shell-accent);box-shadow:0 0 0 2px color-mix(in srgb,var(--shell-accent) 40%,transparent)}.project-name.svelte-yosqc3{font-weight:600;font-size:13px}.project-meta.svelte-yosqc3{font-size:11px;color:var(--shell-fg-muted)}.sh3-icon-picker.svelte-h9dluc{display:flex;flex-direction:column;gap:6px}.sh3-icon-picker__label.svelte-h9dluc{font-size:13px;color:var(--shell-fg-muted)}.sh3-icon-picker.svelte-h9dluc input[type=search]:where(.svelte-h9dluc){background:var(--shell-bg-elevated);color:var(--shell-fg);border:1px solid var(--shell-border);border-radius:var(--shell-radius-sm, 3px);padding:6px 8px;font:inherit;font-size:13px}.sh3-icon-picker__grid.svelte-h9dluc{display:grid;grid-template-columns:repeat(auto-fill,minmax(36px,1fr));gap:4px;max-height:220px;overflow-y:auto;padding:4px;background:var(--shell-bg);border:1px solid var(--shell-border);border-radius:var(--shell-radius-sm, 3px)}.sh3-icon-picker__tile.svelte-h9dluc{aspect-ratio:1 / 1;display:flex;align-items:center;justify-content:center;background:var(--shell-bg-elevated);color:var(--shell-fg);border:1px solid transparent;border-radius:var(--shell-radius-sm, 3px);cursor:pointer;padding:0;font:inherit}.sh3-icon-picker__tile--none.svelte-h9dluc{font-size:16px;color:var(--shell-fg-muted)}.sh3-icon-picker__tile.svelte-h9dluc:hover{border-color:var(--shell-accent)}.sh3-icon-picker__tile--selected.svelte-h9dluc{outline:2px solid var(--shell-accent);outline-offset:-2px}.sh3-icon-picker__tile.svelte-h9dluc svg:where(.svelte-h9dluc){width:18px;height:18px}.sh3-icon-picker--disabled.svelte-h9dluc .sh3-icon-picker__tile:where(.svelte-h9dluc){cursor:not-allowed;opacity:.5}.app-appearance.svelte-7szqlz{padding:16px 20px;max-width:460px;color:var(--shell-fg);background:var(--shell-bg);font:inherit}h2.svelte-7szqlz{margin:0 0 12px;font-size:16px}.row.svelte-7szqlz{display:flex;flex-direction:column;gap:4px;margin-bottom:12px;font-size:13px}.row.svelte-7szqlz span:where(.svelte-7szqlz){color:var(--shell-fg-muted)}.row.svelte-7szqlz span:where(.svelte-7szqlz) em:where(.svelte-7szqlz){font-style:italic;opacity:.7}.name-input.svelte-7szqlz{background:var(--shell-bg-elevated);color:var(--shell-fg);border:1px solid var(--shell-border);border-radius:var(--shell-radius-sm, 3px);padding:6px 8px;font:inherit;font-size:13px}.link.svelte-7szqlz{align-self:flex-start;background:transparent;border:none;padding:0;color:var(--shell-accent);font:inherit;font-size:13px;cursor:pointer;text-decoration:underline}.link--align-right.svelte-7szqlz{align-self:flex-end;margin-top:4px}.link.svelte-7szqlz:hover{color:var(--shell-fg)}.preview.svelte-7szqlz{display:flex;justify-content:center;margin-bottom:16px}.preview-card.svelte-7szqlz{display:flex;flex-direction:column;align-items:center;gap:6px;max-width:160px}.preview-card-square.svelte-7szqlz{width:64px;height:64px;display:flex;align-items:center;justify-content:center;background:var(--shell-grad-bg-elevated, var(--shell-bg-elevated));border:1px solid var(--shell-border);border-radius:var(--shell-radius-md);box-shadow:0 2px 6px #00000040,0 1px 2px #00000026}.preview-card--tinted.svelte-7szqlz .preview-card-square:where(.svelte-7szqlz){background:var(--card-color)}.preview-card-icon.svelte-7szqlz{width:28px;height:28px;color:var(--shell-fg)}.preview-card-label.svelte-7szqlz{font-weight:600;font-size:11px;line-height:1.2;text-align:center;word-break:break-word;overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2}.preview-card-icon.svelte-7szqlz{width:24px;height:24px;color:var(--shell-fg)}.preview-card-label.svelte-7szqlz{font-weight:600;padding:0 4px;line-height:1.2}.actions.svelte-7szqlz{display:flex;gap:8px;margin-top:16px}.actions.svelte-7szqlz button:where(.svelte-7szqlz){background:var(--shell-bg-elevated);color:var(--shell-fg);border:1px solid var(--shell-border);border-radius:var(--shell-radius-sm, 3px);padding:6px 14px;font:inherit;cursor:pointer}.actions.svelte-7szqlz button.primary:where(.svelte-7szqlz){background:var(--shell-accent);color:#fff;border-color:var(--shell-accent)}.actions.svelte-7szqlz button:where(.svelte-7szqlz):hover{border-color:var(--shell-accent)}.actions.svelte-7szqlz button:where(.svelte-7szqlz):disabled{opacity:.5;cursor:not-allowed}.shell-home.svelte-cpn2x2{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:flex-start;padding:48px 24px;overflow:auto;background:var(--shell-grad-bg, var(--shell-bg));color:var(--shell-fg);font-family:system-ui,sans-serif}.shell-home-header.svelte-cpn2x2{text-align:center;margin-bottom:24px;display:flex;flex-direction:column;align-items:center;gap:12px}.shell-home-title-row.svelte-cpn2x2{display:flex;align-items:baseline;gap:6px}.shell-home-credit.svelte-cpn2x2{font-size:11px;color:var(--shell-fg-muted);letter-spacing:.04em;margin-top:-4px}.shell-home-credit.svelte-cpn2x2 a:where(.svelte-cpn2x2){color:var(--shell-fg-subtle);text-decoration:none;border-bottom:1px dotted var(--shell-fg-muted)}.shell-home-credit.svelte-cpn2x2 a:where(.svelte-cpn2x2):hover{color:var(--shell-accent);border-bottom-color:var(--shell-accent)}.shell-home-version.svelte-cpn2x2{font-size:14px;color:var(--shell-fg-subtle);letter-spacing:.04em}.shell-home-alpha.svelte-cpn2x2{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:#fff;background:var(--shell-accent);padding:2px 8px;border-radius:8px;position:relative;top:-1px}.shell-home-filter.svelte-cpn2x2{width:100%;max-width:720px;margin-bottom:24px}.shell-home-filter-input.svelte-cpn2x2{width:100%;padding:10px 14px;font:inherit;font-size:14px;color:var(--shell-fg);background:var(--shell-bg-elevated);border:1px solid var(--shell-border);border-radius:var(--shell-radius-md);outline:none;transition:border-color .12s ease,box-shadow .12s ease}.shell-home-filter-input.svelte-cpn2x2::placeholder{color:var(--shell-fg-muted)}.shell-home-filter-input.svelte-cpn2x2:focus{border-color:var(--shell-accent);box-shadow:0 0 0 2px color-mix(in srgb,var(--shell-accent) 25%,transparent)}.shell-home-empty.svelte-cpn2x2{color:var(--shell-fg-muted);font-style:italic}.shell-home-section.svelte-cpn2x2{width:100%;max-width:720px;margin-bottom:28px}.shell-home-section-title.svelte-cpn2x2{font-size:13px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:var(--shell-fg-subtle);margin:0 0 12px}.shell-home-grid.svelte-cpn2x2{display:grid;grid-template-columns:repeat(auto-fill,minmax(84px,1fr));gap:18px 14px}.shell-home-card.svelte-cpn2x2{display:flex;flex-direction:column;align-items:center;gap:6px;padding:0;background:transparent;border:none;color:inherit;font:inherit;cursor:pointer}.shell-home-card-square.svelte-cpn2x2{width:64px;height:64px;display:flex;align-items:center;justify-content:center;background:var(--shell-grad-bg-elevated, var(--shell-bg-elevated));border:1px solid var(--shell-border);border-radius:var(--shell-radius-md);box-shadow:0 2px 6px #00000040,0 1px 2px #00000026;transition:transform .12s ease,border-color .12s ease,box-shadow .12s ease,background .12s ease}.shell-home-card.svelte-cpn2x2:hover .shell-home-card-square:where(.svelte-cpn2x2){border-color:var(--shell-accent);transform:translateY(-1px);box-shadow:0 6px 14px #0000004d,0 0 0 1px color-mix(in srgb,var(--shell-accent) 35%,transparent),0 4px 12px color-mix(in srgb,var(--shell-accent) 18%,transparent)}.shell-home-card.svelte-cpn2x2:focus-visible{outline:none}.shell-home-card.svelte-cpn2x2:focus-visible .shell-home-card-square:where(.svelte-cpn2x2){border-color:var(--shell-accent);box-shadow:0 0 0 2px color-mix(in srgb,var(--shell-accent) 40%,transparent)}.shell-home-card.svelte-cpn2x2:active .shell-home-card-square:where(.svelte-cpn2x2){transform:translateY(0)}.shell-home-card-label.svelte-cpn2x2{font-weight:600;font-size:11px;line-height:1.2;text-align:center;overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2;word-break:break-word}.shell-home-card-icon.svelte-cpn2x2{width:28px;height:28px;color:var(--shell-fg)}.shell-home-card--tinted.svelte-cpn2x2 .shell-home-card-square:where(.svelte-cpn2x2){background:var(--card-color)}.keys-peers.svelte-19l5m7c{padding:24px;font-family:system-ui,sans-serif;color:var(--shell-fg)}.keys-peers-header.svelte-19l5m7c{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}.keys-peers-header.svelte-19l5m7c h2:where(.svelte-19l5m7c){margin:0;font-size:18px}.keys-peers-list.svelte-19l5m7c{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}.keys-peers-item.svelte-19l5m7c{display:flex;justify-content:space-between;align-items:flex-start;padding:12px 16px;background:var(--shell-bg-elevated, #252540);border:1px solid var(--shell-border, #3a3a5c);border-radius:var(--shell-radius, 6px);gap:12px}.keys-peers-info.svelte-19l5m7c{display:flex;flex-direction:column;gap:3px;min-width:0}.keys-peers-label.svelte-19l5m7c{font-weight:600}.keys-peers-meta.svelte-19l5m7c{font-size:11px;color:var(--shell-fg-subtle)}.keys-peers-actions.svelte-19l5m7c{display:flex;gap:6px;flex-shrink:0;align-items:flex-start;padding-top:2px}.keys-peers-btn-danger.svelte-19l5m7c{background:transparent;color:var(--shell-error, #d32f2f);border:1px solid var(--shell-error, #d32f2f);font-size:12px;padding:4px 10px;border-radius:var(--shell-radius, 6px);cursor:pointer}.keys-peers-btn-secondary.svelte-19l5m7c{background:transparent;color:var(--shell-fg-subtle);border:1px solid var(--shell-border, #3a3a5c);font-size:12px;padding:4px 10px;border-radius:var(--shell-radius, 6px);cursor:pointer}.keys-peers-muted.svelte-19l5m7c{color:var(--shell-fg-muted);font-style:italic}.keys-peers-error.svelte-19l5m7c{color:var(--shell-error, #d32f2f);font-size:13px}.confirm-dialog.svelte-1k1962w{display:flex;flex-direction:column;gap:16px;padding:20px 24px;min-width:360px;max-width:480px}.confirm-dialog-title.svelte-1k1962w{font-size:16px;font-weight:600;color:var(--shell-fg)}.confirm-dialog-body.svelte-1k1962w{font-size:13px;color:var(--shell-fg-muted, var(--shell-fg));line-height:1.5}.confirm-dialog-actions.svelte-1k1962w{display:flex;justify-content:flex-end;gap:8px;margin-top:4px}.confirm-dialog-btn.svelte-1k1962w{font-size:13px;padding:6px 14px;border-radius:var(--shell-radius-sm, 4px);border:1px solid var(--shell-border-strong);background:transparent;color:var(--shell-fg);cursor:pointer}.confirm-dialog-btn.svelte-1k1962w:disabled{opacity:.6;cursor:not-allowed}.confirm-dialog-btn-default.svelte-1k1962w{background:var(--shell-bg-elevated)}.confirm-dialog-btn-danger.svelte-1k1962w{background:transparent;color:var(--shell-error, #d32f2f);border-color:var(--shell-error, #d32f2f)}.perm-modal-backdrop.svelte-1ipp1r6{position:fixed;inset:0;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:1000}.perm-modal-panel.svelte-1ipp1r6{background:var(--shell-bg, #1e1e1e);color:var(--shell-fg, #e0e0e0);border:1px solid var(--shell-border, #444);border-radius:var(--shell-radius-md);box-shadow:0 8px 32px #0006;min-width:360px;max-width:520px;max-height:80vh;display:flex;flex-direction:column;font-family:var(--shell-font-ui)}.perm-modal-header.svelte-1ipp1r6{padding:16px 20px 12px;border-bottom:1px solid var(--shell-border, #444)}.perm-modal-header.svelte-1ipp1r6 h3:where(.svelte-1ipp1r6){margin:0 0 4px;font-size:1.0625rem;font-weight:600}.perm-modal-subtitle.svelte-1ipp1r6{font-size:.8125rem;color:var(--shell-fg-muted, #888)}.perm-modal-author.svelte-1ipp1r6{margin-left:8px}.perm-modal-body.svelte-1ipp1r6{padding:16px 20px;overflow-y:auto;flex:1}.perm-modal-intro.svelte-1ipp1r6{margin:0 0 8px;font-size:.875rem}.perm-modal-empty.svelte-1ipp1r6{margin:0;font-size:.875rem;color:var(--shell-fg-muted, #888);font-style:italic}.perm-modal-list.svelte-1ipp1r6{list-style:none;margin:0 0 12px;padding:0;display:flex;flex-direction:column;gap:8px}.perm-modal-item.svelte-1ipp1r6{padding:8px 10px;background:var(--shell-input-bg, #2a2a2a);border:1px solid var(--shell-border, #444);border-radius:var(--shell-radius-sm)}.perm-modal-item-title.svelte-1ipp1r6{font-size:.875rem;font-weight:600}.perm-modal-item-desc.svelte-1ipp1r6{font-size:.75rem;color:var(--shell-fg-muted, #888);margin-top:2px}.perm-modal-added.svelte-1ipp1r6 .perm-modal-item:where(.svelte-1ipp1r6){border-color:color-mix(in srgb,var(--shell-warning, #ff9800) 60%,var(--shell-border, #444))}.perm-modal-removed.svelte-1ipp1r6 .perm-modal-item:where(.svelte-1ipp1r6){opacity:.75}.perm-modal-footer.svelte-1ipp1r6{padding:12px 20px;border-top:1px solid var(--shell-border, #444);display:flex;justify-content:flex-end;gap:8px}.perm-modal-cancel.svelte-1ipp1r6{padding:6px 14px;background:transparent;color:var(--shell-fg, #e0e0e0);border:1px solid var(--shell-border, #444);border-radius:var(--shell-radius);font-size:.8125rem;cursor:pointer}.perm-modal-confirm.svelte-1ipp1r6{padding:6px 14px;background:var(--shell-accent, #007acc);color:#fff;border:1px solid var(--shell-accent, #007acc);border-radius:var(--shell-radius);font-size:.8125rem;cursor:pointer;font-weight:600}.store-view.svelte-1aafzt0{font-family:var(--shell-font-ui);color:var(--shell-fg, #e0e0e0);background:var(--shell-bg, #1e1e1e);padding:16px;height:100%;overflow-y:auto;box-sizing:border-box}.store-header.svelte-1aafzt0{margin-bottom:16px}.store-header.svelte-1aafzt0 h2:where(.svelte-1aafzt0){margin:0 0 8px;font-size:1.25rem;font-weight:600}.store-controls.svelte-1aafzt0{display:flex;gap:8px;flex-wrap:wrap}.store-search.svelte-1aafzt0{flex:1;min-width:160px;padding:6px 10px;background:var(--shell-input-bg, #2a2a2a);color:var(--shell-fg, #e0e0e0);border:1px solid var(--shell-border, #444);border-radius:var(--shell-radius);font-family:inherit;font-size:.875rem}.store-search.svelte-1aafzt0::placeholder{color:var(--shell-fg-muted, #888)}.store-filter.svelte-1aafzt0{padding:6px 10px;background:var(--shell-input-bg, #2a2a2a);color:var(--shell-fg, #e0e0e0);border:1px solid var(--shell-border, #444);border-radius:var(--shell-radius);font-family:inherit;font-size:.875rem}.store-refresh.svelte-1aafzt0:disabled{opacity:.6;cursor:not-allowed}.store-error.svelte-1aafzt0{padding:8px 12px;margin-bottom:12px;background:color-mix(in srgb,var(--shell-error, #d32f2f) 15%,transparent);color:var(--shell-error, #d32f2f);border:1px solid var(--shell-error, #d32f2f);border-radius:var(--shell-radius);font-size:.8125rem}.store-grid.svelte-1aafzt0{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:12px}.store-card.svelte-1aafzt0{background:var(--shell-input-bg, #2a2a2a);border:1px solid var(--shell-border, #444);border-radius:var(--shell-radius-md);padding:14px;display:flex;flex-direction:column;gap:8px}.store-card.svelte-1aafzt0:hover{border-color:var(--shell-accent, #007acc)}.store-card-header.svelte-1aafzt0{display:flex;align-items:center;gap:10px}.store-card-icon.svelte-1aafzt0{width:36px;height:36px;flex-shrink:0;display:flex;align-items:center;justify-content:center}.store-icon-img.svelte-1aafzt0{width:36px;height:36px;border-radius:var(--shell-radius);object-fit:cover}.store-icon-placeholder.svelte-1aafzt0{width:36px;height:36px;display:flex;align-items:center;justify-content:center;background:var(--shell-accent, #007acc);color:#fff;border-radius:var(--shell-radius);font-weight:700;font-size:1rem}.store-card-title.svelte-1aafzt0{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.store-card-label.svelte-1aafzt0{font-weight:600;font-size:.9375rem}.store-card-badge.svelte-1aafzt0{font-size:.6875rem;padding:1px 6px;border-radius:var(--shell-radius-sm);text-transform:uppercase;font-weight:600;letter-spacing:.04em}.badge-shard.svelte-1aafzt0{background:color-mix(in srgb,var(--shell-accent, #007acc) 25%,transparent);color:var(--shell-accent, #007acc)}.badge-app.svelte-1aafzt0{background:color-mix(in srgb,var(--shell-success, #4caf50) 25%,transparent);color:var(--shell-success, #4caf50)}.store-card-version.svelte-1aafzt0{font-size:.75rem;color:var(--shell-fg-muted, #888)}.store-card-desc.svelte-1aafzt0{margin:0;font-size:.8125rem;color:var(--shell-fg-muted, #888);line-height:1.4}.store-card-author.svelte-1aafzt0{font-size:.75rem;color:var(--shell-fg-muted, #888)}.store-card-warning.svelte-1aafzt0{font-size:.75rem;color:var(--shell-warning, #ff9800);padding:4px 8px;background:color-mix(in srgb,var(--shell-warning, #ff9800) 10%,transparent);border-radius:var(--shell-radius-sm)}.store-card-actions.svelte-1aafzt0{margin-top:auto;display:flex;justify-content:flex-end}.store-install-btn.svelte-1aafzt0{padding:5px 14px;font-size:.8125rem}.store-install-btn.svelte-1aafzt0:disabled{opacity:.6;cursor:not-allowed}.store-installed-label.svelte-1aafzt0{font-size:.8125rem;color:var(--shell-success, #4caf50);font-weight:600}.store-install-wrap.svelte-1aafzt0{display:flex;flex-direction:column;align-items:flex-end;gap:4px}.store-card-missing.svelte-1aafzt0{font-size:.75rem;color:var(--shell-warning, #ff9800)}.store-update-btn.svelte-1aafzt0{padding:5px 14px;background:var(--shell-warning, #fbbf24);color:var(--shell-fg-on-warning, #1a1b1e);font-size:.8125rem}.store-update-btn.svelte-1aafzt0:hover:not(:disabled){filter:brightness(1.1)}.store-update-btn.svelte-1aafzt0:disabled{opacity:.6;cursor:not-allowed}.store-empty.svelte-1aafzt0{text-align:center;padding:32px 16px;color:var(--shell-fg-muted, #888);font-size:.875rem}.store-registries.svelte-1aafzt0{display:flex;flex-direction:column;gap:4px;margin-bottom:8px}.store-registry-entry.svelte-1aafzt0{display:flex;align-items:center;justify-content:space-between;padding:4px 8px;background:var(--shell-input-bg, #2a2a2a);border:1px solid var(--shell-border, #444);border-radius:var(--shell-radius);font-size:.8125rem}.store-registry-url.svelte-1aafzt0{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--shell-fg-muted, #888)}.store-registry-remove.svelte-1aafzt0{padding:2px 8px;background:transparent;color:var(--shell-error, #d32f2f);border:1px solid var(--shell-error, #d32f2f);border-radius:var(--shell-radius-sm);font-size:.75rem;flex-shrink:0;margin-left:8px}.store-add-registry.svelte-1aafzt0{display:flex;gap:8px;margin-bottom:12px}.store-registry-input.svelte-1aafzt0{flex:1;padding:6px 10px;background:var(--shell-input-bg, #2a2a2a);color:var(--shell-fg, #e0e0e0);border:1px solid var(--shell-border, #444);border-radius:var(--shell-radius);font-family:inherit;font-size:.8125rem}.store-registry-input.svelte-1aafzt0::placeholder{color:var(--shell-fg-muted, #888)}.store-add-btn.svelte-1aafzt0{font-size:.8125rem;white-space:nowrap}.store-add-btn.svelte-1aafzt0:disabled{opacity:.6;cursor:not-allowed}.app-update-modal.svelte-1tiy4hy{padding:16px 20px;max-width:460px;color:var(--shell-fg);background:var(--shell-bg);font:inherit}h2.svelte-1tiy4hy{margin:0 0 8px;font-size:16px}p.svelte-1tiy4hy{margin:4px 0;font-size:13px}.hint.svelte-1tiy4hy{color:var(--shell-fg-muted);font-size:12px}.error.svelte-1tiy4hy{color:var(--shell-error, #c33)}code.svelte-1tiy4hy{font-family:var(--shell-font-mono, monospace);background:var(--shell-bg-elevated);padding:0 4px;border-radius:var(--shell-radius-sm, 3px)}.actions.svelte-1tiy4hy{display:flex;gap:8px;margin-top:16px}.actions.svelte-1tiy4hy button:where(.svelte-1tiy4hy){background:var(--shell-bg-elevated);color:var(--shell-fg);border:1px solid var(--shell-border);border-radius:var(--shell-radius-sm, 3px);padding:6px 14px;font:inherit;cursor:pointer}.actions.svelte-1tiy4hy button.primary:where(.svelte-1tiy4hy){background:var(--shell-accent);color:#fff;border-color:var(--shell-accent)}.actions.svelte-1tiy4hy button:where(.svelte-1tiy4hy):hover{border-color:var(--shell-accent)}.actions.svelte-1tiy4hy button:where(.svelte-1tiy4hy):disabled{opacity:.5;cursor:not-allowed}.uninstall-dialog.svelte-86mxbl{padding:16px 20px;max-width:460px;color:var(--shell-fg);background:var(--shell-bg);font:inherit}h2.svelte-86mxbl{margin:0 0 8px;font-size:16px}p.svelte-86mxbl{margin:4px 0;font-size:13px}.hint.svelte-86mxbl{color:var(--shell-fg-muted);font-size:12px}.error.svelte-86mxbl{color:var(--shell-error, #c33)}code.svelte-86mxbl{font-family:var(--shell-font-mono, monospace);background:var(--shell-bg-elevated);padding:0 4px;border-radius:var(--shell-radius-sm, 3px)}.actions.svelte-86mxbl{display:flex;gap:8px;margin-top:16px}.actions.svelte-86mxbl button:where(.svelte-86mxbl){background:var(--shell-bg-elevated);color:var(--shell-fg);border:1px solid var(--shell-border);border-radius:var(--shell-radius-sm, 3px);padding:6px 14px;font:inherit;cursor:pointer}.actions.svelte-86mxbl button.danger:where(.svelte-86mxbl){background:var(--shell-error, #c33);color:#fff;border-color:var(--shell-error, #c33)}.actions.svelte-86mxbl button:where(.svelte-86mxbl):hover{border-color:var(--shell-accent)}.actions.svelte-86mxbl button:where(.svelte-86mxbl):disabled{opacity:.5;cursor:not-allowed}.app-info-modal.svelte-1w44jyn{padding:16px 20px;min-width:360px;max-width:520px;color:var(--shell-fg);background:var(--shell-bg);font:inherit}header.svelte-1w44jyn{display:flex;align-items:baseline;gap:10px;margin-bottom:10px}header.svelte-1w44jyn h2:where(.svelte-1w44jyn){margin:0;font-size:16px}header.svelte-1w44jyn .id:where(.svelte-1w44jyn){font-size:12px;color:var(--shell-fg-muted)}.version.svelte-1w44jyn{margin:4px 0 12px;font-size:13px;display:flex;align-items:center;gap:8px}.description.svelte-1w44jyn{margin:8px 0 12px}.description.svelte-1w44jyn p:where(.svelte-1w44jyn){margin:4px 0 0;font-size:13px;line-height:1.5;white-space:pre-wrap}.row.svelte-1w44jyn{margin:6px 0;font-size:13px;display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}.label.svelte-1w44jyn{color:var(--shell-fg-muted);font-size:11px;text-transform:uppercase;letter-spacing:.04em;flex:0 0 auto;min-width:90px}.chips.svelte-1w44jyn{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:4px}.chips.svelte-1w44jyn code:where(.svelte-1w44jyn){padding:1px 6px;border:1px solid var(--shell-border);border-radius:var(--shell-radius-sm, 3px)}.badge.svelte-1w44jyn{font-size:11px;padding:1px 6px;border-radius:var(--shell-radius-sm, 3px);background:var(--shell-bg-elevated);color:var(--shell-fg-muted);border:1px solid var(--shell-border)}.installed.svelte-1w44jyn{margin-top:12px;padding-top:10px;border-top:1px solid var(--shell-border)}code.svelte-1w44jyn{font-family:var(--shell-font-mono, monospace);background:var(--shell-bg-elevated);padding:0 4px;border-radius:var(--shell-radius-sm, 3px)}.actions.svelte-1w44jyn{display:flex;gap:8px;margin-top:16px;justify-content:flex-end}.actions.svelte-1w44jyn button:where(.svelte-1w44jyn){background:var(--shell-bg-elevated);color:var(--shell-fg);border:1px solid var(--shell-border);border-radius:var(--shell-radius-sm, 3px);padding:6px 14px;font:inherit;cursor:pointer}.actions.svelte-1w44jyn button:where(.svelte-1w44jyn):hover{border-color:var(--shell-accent)}.shell-text.svelte-ypr8s{margin:0;padding:0 8px;font-family:var(--shell-font-mono, monospace);white-space:pre-wrap;word-break:break-word;color:var(--shell-fg, #ddd)}.shell-text.stderr.svelte-ypr8s{color:var(--shell-fg-error, #f88)}.shell-prompt.svelte-u0gb59{padding:4px 8px 0;font-family:var(--shell-font-mono, monospace);display:flex;gap:8px}.shell-prompt-cwd.svelte-u0gb59{color:var(--shell-fg-muted, #888)}.shell-prompt-arrow.svelte-u0gb59{color:var(--shell-accent, #6cf)}.shell-prompt-line.svelte-u0gb59{color:var(--shell-fg, #ddd)}.shell-status.svelte-nfxdpt{padding:2px 8px;font-family:var(--shell-font-mono, monospace);font-style:italic}.shell-status.info.svelte-nfxdpt{color:var(--shell-fg-muted, #888)}.shell-status.warn.svelte-nfxdpt{color:var(--shell-fg-warn, #fc6)}.shell-status.error.svelte-nfxdpt{color:var(--shell-fg-error, #f88)}.shell-rich.svelte-1rnhl05{padding:4px 8px}.shell-scrollback.svelte-isy3jt{flex:1 1 auto;overflow-y:auto;background:var(--shell-bg, #111);color:var(--shell-fg, #ddd)}.shell-input.svelte-1dfv2gk{display:flex;gap:8px;padding:4px 8px;border-top:1px solid var(--shell-border, #333);font-family:var(--shell-font-mono, monospace)}.shell-input-cwd.svelte-1dfv2gk{color:var(--shell-fg-muted, #888)}.shell-input-arrow.svelte-1dfv2gk{color:var(--shell-accent, #6cf)}.shell-input-field.svelte-1dfv2gk{padding:0;flex:1 1 auto;background:transparent;border:0;outline:0;color:var(--shell-fg, #ddd);font:inherit}.shell-input.locked.svelte-1dfv2gk .shell-input-field:where(.svelte-1dfv2gk){opacity:.5;cursor:default}.toolbar.svelte-gnowwz{display:flex;align-items:center;gap:6px;padding:4px 6px;background:var(--shell-bg-elevated, var(--shell-bg, #1a1a1a));border-bottom:1px solid var(--shell-border, #333);flex-shrink:0}.toolbar-slots.svelte-gnowwz{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.mode-label.svelte-1i4cqlj{font-size:.85em;color:var(--shell-fg-dim, var(--shell-fg-muted, #888))}.focus-lock-btn.svelte-1q6gbap{background:none;border:1px solid var(--shell-border, #444);border-radius:3px;cursor:pointer;padding:2px 5px;font-size:.9em;line-height:1}.focus-lock-btn.svelte-1q6gbap:hover{background:var(--shell-hover, #222)}.target-shard.svelte-1nn2m6x{font-size:.85em;color:var(--shell-fg-dim, #888);font-family:monospace}.busy.svelte-7wyurd{display:inline-flex;align-items:center;gap:6px;color:var(--shell-fg-muted, #aaa);font-size:.85em}.spinner.svelte-7wyurd{width:12px;height:12px;border:2px solid var(--shell-fg-muted, #aaa);border-top-color:transparent;border-radius:50%;animation:svelte-7wyurd-busy-spin .8s linear infinite}@keyframes svelte-7wyurd-busy-spin{to{transform:rotate(360deg)}}.shell-terminal.svelte-13komre{display:flex;flex-direction:column;height:100%;background:var(--shell-bg, #111);color:var(--shell-fg, #ddd)}.shell-rich-help.svelte-m248jy table:where(.svelte-m248jy){border-collapse:collapse;width:100%}.shell-rich-help.svelte-m248jy th:where(.svelte-m248jy),.shell-rich-help.svelte-m248jy td:where(.svelte-m248jy){padding:2px 8px;text-align:left}.shell-rich-help.svelte-m248jy button:where(.svelte-m248jy){background:none;border:0;color:var(--shell-link, #6cf);cursor:pointer;padding:0;font:inherit}.shell-rich-help.svelte-m248jy button:where(.svelte-m248jy):hover{text-decoration:underline}.shell-rich-history.svelte-o8m437 ol:where(.svelte-o8m437){list-style-position:inside;margin:0;padding:0}.shell-rich-history.svelte-o8m437 li:where(.svelte-o8m437){padding:2px 0}.shell-rich-history.svelte-o8m437 button:where(.svelte-o8m437){background:none;border:0;color:var(--shell-link, #6cf);cursor:pointer;padding:0;font:inherit;text-align:left}.shell-rich-history.svelte-o8m437 button:where(.svelte-o8m437):hover{text-decoration:underline}.shell-rich-apps.svelte-1u5krjz table:where(.svelte-1u5krjz){border-collapse:collapse;width:100%}.shell-rich-apps.svelte-1u5krjz th:where(.svelte-1u5krjz),.shell-rich-apps.svelte-1u5krjz td:where(.svelte-1u5krjz){padding:2px 8px;text-align:left}.shell-rich-apps.svelte-1u5krjz button:where(.svelte-1u5krjz){background:none;border:0;color:var(--shell-link, #6cf);cursor:pointer;padding:0;font:inherit}.shell-rich-apps.svelte-1u5krjz button:where(.svelte-1u5krjz):hover{text-decoration:underline}.shell-rich-appcard.svelte-npcp8i{padding:8px;border:1px solid var(--shell-border, #444)}.shell-rich-appcard.svelte-npcp8i h3:where(.svelte-npcp8i){margin:0 0 8px}.shell-rich-appcard.svelte-npcp8i p:where(.svelte-npcp8i){margin:4px 0}.shell-rich-shards.svelte-sc3ux4 table:where(.svelte-sc3ux4){border-collapse:collapse;width:100%}.shell-rich-shards.svelte-sc3ux4 th:where(.svelte-sc3ux4),.shell-rich-shards.svelte-sc3ux4 td:where(.svelte-sc3ux4){padding:2px 8px;text-align:left}.shell-rich-views.svelte-15elbr1 table:where(.svelte-15elbr1){border-collapse:collapse;width:100%}.shell-rich-views.svelte-15elbr1 th:where(.svelte-15elbr1),.shell-rich-views.svelte-15elbr1 td:where(.svelte-15elbr1){padding:2px 8px;text-align:left}.shell-rich-views.svelte-15elbr1 button:where(.svelte-15elbr1){background:none;border:0;color:var(--shell-link, #6cf);cursor:pointer;padding:0;font:inherit}.shell-rich-views.svelte-15elbr1 button:where(.svelte-15elbr1):hover{text-decoration:underline}.shell-rich-zones.svelte-1w7onag table:where(.svelte-1w7onag){border-collapse:collapse;width:100%}.shell-rich-zones.svelte-1w7onag th:where(.svelte-1w7onag),.shell-rich-zones.svelte-1w7onag td:where(.svelte-1w7onag){padding:2px 8px;text-align:left}.shell-rich-zonetree.svelte-13iiyr1 pre:where(.svelte-13iiyr1){overflow:auto;padding:8px;background:var(--shell-bg, #000);color:var(--shell-fg, #fff)}.shell-rich-env.svelte-1ox8vog table:where(.svelte-1ox8vog){border-collapse:collapse;width:100%}.shell-rich-env.svelte-1ox8vog th:where(.svelte-1ox8vog),.shell-rich-env.svelte-1ox8vog td:where(.svelte-1ox8vog){padding:2px 8px;text-align:left}.admin-users.svelte-4q792t{padding:24px;font-family:system-ui,sans-serif;color:var(--shell-fg)}.admin-users-header.svelte-4q792t{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}.admin-users-header.svelte-4q792t h2:where(.svelte-4q792t){margin:0;font-size:18px}.admin-create-form.svelte-4q792t,.admin-edit-form.svelte-4q792t{display:flex;flex-direction:column;gap:8px;margin-bottom:16px;max-width:400px}.admin-input.svelte-4q792t{padding:8px 12px;background:var(--shell-bg, #1a1a2e);color:var(--shell-fg);border:1px solid var(--shell-border, #3a3a5c);border-radius:var(--shell-radius, 6px);font-size:13px}.admin-btn.svelte-4q792t{font-weight:600;font-size:13px}.admin-btn.svelte-4q792t:disabled{opacity:.6;cursor:not-allowed}.admin-btn-secondary.svelte-4q792t{background:transparent;color:var(--shell-fg-subtle);border:1px solid var(--shell-border);font-size:12px}.admin-btn-danger.svelte-4q792t{background:transparent;color:var(--shell-error, #d32f2f);border:1px solid var(--shell-error, #d32f2f);font-size:12px}.admin-user-list.svelte-4q792t{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}.admin-user-item.svelte-4q792t{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;background:var(--shell-bg-elevated, #252540);border:1px solid var(--shell-border, #3a3a5c);border-radius:var(--shell-radius, 6px)}.admin-user-info.svelte-4q792t{display:flex;flex-direction:column;gap:2px}.admin-user-name.svelte-4q792t{font-weight:600}.admin-user-meta.svelte-4q792t{font-size:11px;color:var(--shell-fg-subtle)}.admin-user-actions.svelte-4q792t,.admin-edit-actions.svelte-4q792t{display:flex;gap:6px}.admin-error.svelte-4q792t{color:var(--shell-error, #d32f2f);font-size:13px}.admin-muted.svelte-4q792t{color:var(--shell-fg-muted);font-style:italic}.admin-auth.svelte-1hsgdb4{padding:24px;font-family:system-ui,sans-serif;color:var(--shell-fg)}.admin-auth.svelte-1hsgdb4 h2:where(.svelte-1hsgdb4){margin:0 0 16px;font-size:18px}.admin-auth-fields.svelte-1hsgdb4{display:flex;flex-direction:column;gap:16px;max-width:480px}.admin-toggle.svelte-1hsgdb4{display:flex;flex-wrap:wrap;align-items:center;gap:8px;cursor:pointer}.admin-toggle.svelte-1hsgdb4 input:where(.svelte-1hsgdb4){accent-color:var(--shell-accent, #7c7cf0)}.admin-hint.svelte-1hsgdb4{flex-basis:100%;font-size:11px;color:var(--shell-fg-muted);margin-left:24px}.admin-field.svelte-1hsgdb4{display:flex;flex-direction:column;gap:4px}.admin-field.svelte-1hsgdb4 span:where(.svelte-1hsgdb4){font-size:13px}.admin-input.svelte-1hsgdb4{padding:8px 12px;background:var(--shell-bg);color:var(--shell-fg);border:1px solid var(--shell-border);border-radius:var(--shell-radius, 6px);font-size:13px}.admin-input-sm.svelte-1hsgdb4{max-width:120px}.admin-btn.svelte-1hsgdb4{padding:8px 16px;font-weight:600;align-self:flex-start}.admin-btn.svelte-1hsgdb4:disabled{opacity:.6;cursor:not-allowed}.admin-error.svelte-1hsgdb4{margin-top:8px;color:var(--shell-error, #d32f2f);font-size:13px}.admin-muted.svelte-1hsgdb4{color:var(--shell-fg-muted);font-style:italic}.admin-system.svelte-1gkiloq{padding:24px;font-family:system-ui,sans-serif;color:var(--shell-fg)}.admin-system.svelte-1gkiloq h2:where(.svelte-1gkiloq){margin:0 0 16px;font-size:18px}.admin-system.svelte-1gkiloq h3:where(.svelte-1gkiloq){margin:0 0 8px;font-size:14px;text-transform:uppercase;letter-spacing:.05em;color:var(--shell-fg-subtle)}.admin-system-info.svelte-1gkiloq{margin-bottom:24px}.admin-system-row.svelte-1gkiloq{display:flex;gap:12px;padding:8px 0;border-bottom:1px solid var(--shell-border, #3a3a5c);font-size:13px}.admin-system-label.svelte-1gkiloq{color:var(--shell-fg-subtle);min-width:140px}.admin-system-section.svelte-1gkiloq{margin-bottom:24px;padding-bottom:16px;border-bottom:1px solid var(--shell-border, #3a3a5c)}.admin-system-section.svelte-1gkiloq:last-child{border-bottom:none}.admin-system-hint.svelte-1gkiloq{font-size:13px;color:var(--shell-fg-subtle);margin:0 0 12px}.admin-system-readout.svelte-1gkiloq{font-size:13px;margin:8px 0 12px}.admin-system-snaps.svelte-1gkiloq{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:12px}.admin-snap.svelte-1gkiloq{padding:4px 10px;font-size:12px;background:transparent;border:1px solid var(--shell-border, #3a3a5c);color:var(--shell-fg);cursor:pointer;border-radius:var(--shell-radius-sm, 3px)}.admin-snap.active.svelte-1gkiloq{background:var(--shell-accent, #4a7bd4);color:var(--shell-bg);border-color:var(--shell-accent, #4a7bd4)}.admin-snap.svelte-1gkiloq:disabled{opacity:.5;cursor:not-allowed}.admin-system-actions.svelte-1gkiloq{display:flex;flex-direction:row;gap:8px;align-items:center;flex-wrap:wrap}.admin-btn.svelte-1gkiloq{padding:8px 16px;background:var(--shell-accent, #4a7bd4);color:var(--shell-bg);border:1px solid var(--shell-accent, #4a7bd4);font-weight:600;cursor:pointer;border-radius:var(--shell-radius-sm, 3px)}.admin-btn.svelte-1gkiloq:disabled{opacity:.5;cursor:not-allowed}.admin-btn-ghost.svelte-1gkiloq{padding:8px 16px;background:transparent;color:var(--shell-fg);border:1px solid var(--shell-border, #3a3a5c);cursor:pointer;border-radius:var(--shell-radius-sm, 3px)}.admin-btn-ghost.svelte-1gkiloq:disabled{opacity:.5;cursor:not-allowed}.admin-btn-danger.svelte-1gkiloq{padding:8px 16px;background:transparent;color:var(--shell-error, #d32f2f);border:1px solid var(--shell-error, #d32f2f);font-weight:600;cursor:pointer;border-radius:var(--shell-radius-sm, 3px)}.admin-btn-danger.svelte-1gkiloq:disabled{opacity:.6;cursor:not-allowed}.admin-error.svelte-1gkiloq{color:var(--shell-error, #d32f2f);font-size:13px}input[type=range].svelte-1gkiloq{width:100%;max-width:480px}.admin-keys.svelte-1afg5z5{padding:24px;font-family:system-ui,sans-serif;color:var(--shell-fg)}.admin-keys-header.svelte-1afg5z5{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}.admin-keys-header.svelte-1afg5z5 h2:where(.svelte-1afg5z5){margin:0;font-size:18px}.admin-create-form.svelte-1afg5z5{display:flex;flex-direction:column;gap:8px;margin-bottom:16px;max-width:400px}.admin-input.svelte-1afg5z5{padding:8px 12px;background:var(--shell-bg, #1a1a2e);color:var(--shell-fg);border:1px solid var(--shell-border, #3a3a5c);border-radius:var(--shell-radius, 6px);font-size:13px}.admin-btn.svelte-1afg5z5{font-weight:600;font-size:13px}.admin-btn.svelte-1afg5z5:disabled{opacity:.6;cursor:not-allowed}.admin-btn-secondary.svelte-1afg5z5{background:transparent;color:var(--shell-fg-subtle);border:1px solid var(--shell-border);font-size:12px}.admin-btn-danger.svelte-1afg5z5{background:transparent;color:var(--shell-error, #d32f2f);border:1px solid var(--shell-error, #d32f2f);font-size:12px}.admin-key-list.svelte-1afg5z5{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}.admin-key-item.svelte-1afg5z5{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;background:var(--shell-bg-elevated, #252540);border:1px solid var(--shell-border, #3a3a5c);border-radius:var(--shell-radius, 6px)}.admin-key-info.svelte-1afg5z5{display:flex;flex-direction:column;gap:2px}.admin-key-label.svelte-1afg5z5{font-weight:600}.admin-key-meta.svelte-1afg5z5{font-size:11px;color:var(--shell-fg-subtle)}.admin-key-value.svelte-1afg5z5{font-size:12px;color:var(--shell-fg-muted);background:var(--shell-bg, #1a1a2e);padding:2px 6px;border-radius:3px;margin-top:2px;word-break:break-all}.admin-key-actions.svelte-1afg5z5{display:flex;gap:6px;flex-shrink:0}.admin-muted.svelte-1afg5z5{color:var(--shell-fg-muted);font-style:italic}.admin-error.svelte-1afg5z5{color:var(--shell-error, #d32f2f);font-size:13px}button,input[type=button],input[type=submit],input[type=reset],.shell-base-button{padding:6px 14px;background:var(--shell-accent);color:var(--shell-fg-on-accent);border:none;border-radius:var(--shell-radius);cursor:pointer;font-family:inherit;font-size:.875rem;line-height:var(--shell-line)}button:hover,input[type=button]:hover,input[type=submit]:hover,input[type=reset]:hover,.shell-base-button:hover{filter:brightness(1.12)}button:active,input[type=button]:active,input[type=submit]:active,input[type=reset]:active,.shell-base-button:active{filter:brightness(.92)}input[type=text],input[type=email],input[type=password],input[type=search],input[type=url],input[type=tel],input[type=number],textarea,.shell-base-input{padding:0 var(--shell-field-pad-x);height:var(--shell-field-height-md);background:var(--shell-input-bg);color:var(--shell-fg);border:1px solid var(--shell-border);border-radius:var(--shell-radius);font-family:inherit;font-size:.8125rem;line-height:var(--shell-line)}::placeholder{color:var(--shell-fg-muted)}input:focus-visible,textarea:focus-visible,.shell-base-input:focus-visible{border-color:var(--shell-input-border-focus);box-shadow:var(--shell-focus-ring);outline:none}input:disabled,textarea:disabled,.shell-base-input[aria-disabled=true]{opacity:.55;cursor:not-allowed}textarea{resize:vertical;min-height:calc(var(--shell-line) * 3em);height:auto;padding:var(--shell-pad-sm) var(--shell-field-pad-x)}input[type=checkbox].shell-base-check,input[type=radio].shell-base-radio{appearance:none;width:14px;height:14px;margin:0;background:var(--shell-input-bg);border:1px solid var(--shell-border);cursor:pointer;display:inline-grid;place-content:center;flex-shrink:0}.shell-base-check{border-radius:var(--shell-radius-sm)}.shell-base-radio{border-radius:50%}input[type=checkbox].shell-base-check:checked,input[type=radio].shell-base-radio:checked{background:var(--shell-accent);border-color:var(--shell-accent)}.shell-base-check:checked:before{content:"";width:8px;height:8px;background:var(--shell-fg-on-accent);clip-path:polygon(14% 44%,0 60%,40% 100%,100% 20%,85% 8%,38% 70%)}.shell-base-radio:checked:before{content:"";width:6px;height:6px;border-radius:50%;background:var(--shell-fg-on-accent)}.shell-base-check:focus-visible,.shell-base-radio:focus-visible{box-shadow:var(--shell-focus-ring);outline:none}.shell-base-check:disabled,.shell-base-radio:disabled{opacity:.55;cursor:not-allowed}input[type=checkbox].shell-base-switch{appearance:none;position:relative;width:28px;height:16px;margin:0;background:var(--shell-bg-sunken);border:1px solid var(--shell-border-strong);border-radius:999px;cursor:pointer;transition:background .12s ease,border-color .12s ease,box-shadow .12s ease;flex-shrink:0;box-sizing:border-box}.shell-base-switch:before{content:"";position:absolute;top:2px;left:2px;width:12px;height:12px;background:var(--shell-fg);border-radius:50%;transition:transform .12s ease}input[type=checkbox].shell-base-switch:checked{background:var(--shell-accent);border-color:var(--shell-accent);box-shadow:0 0 0 2px color-mix(in srgb,var(--shell-accent) 25%,transparent)}.shell-base-switch:checked:before{transform:translate(12px);background:var(--shell-fg-on-accent)}.shell-base-switch:focus-visible{box-shadow:var(--shell-focus-ring);outline:none}.shell-base-switch:disabled{opacity:.55;cursor:not-allowed}.splitter.svelte-1adl4o1{display:flex;width:100%;height:100%;min-width:0;min-height:0}.splitter.horizontal.svelte-1adl4o1{flex-direction:row}.splitter.vertical.svelte-1adl4o1{flex-direction:column}.splitter-pane.svelte-1adl4o1{position:relative;min-width:0;min-height:0;overflow:hidden;display:flex}.horizontal.svelte-1adl4o1>.splitter-pane:where(.svelte-1adl4o1){flex-direction:row}.vertical.svelte-1adl4o1>.splitter-pane:where(.svelte-1adl4o1){flex-direction:column}.splitter-pane.collapsed.svelte-1adl4o1{overflow:visible}.pane-content.svelte-1adl4o1{flex:1 1 0;position:relative;min-width:0;min-height:0;overflow:hidden}.collapse-header.svelte-1adl4o1{appearance:none;flex:0 0 auto;display:flex;align-items:center;justify-content:center;background:var(--shell-grad-bg-elevated, var(--shell-bg-elevated));border:none;color:var(--shell-fg-muted);cursor:pointer;padding:0;font-size:10px}.collapse-header.svelte-1adl4o1:hover{color:var(--shell-fg);background:var(--shell-accent-muted)}body[data-dragging] .collapse-header.svelte-1adl4o1{pointer-events:none}.collapse-header.horizontal.svelte-1adl4o1{width:100%;height:100%;writing-mode:vertical-rl}.collapse-header.vertical.svelte-1adl4o1{width:100%;height:100%}.collapse-header.expanded.horizontal.svelte-1adl4o1{width:16px;height:100%;border-right:1px solid var(--shell-border)}.collapse-header.expanded.vertical.svelte-1adl4o1{width:100%;height:16px;border-bottom:1px solid var(--shell-border)}.splitter-handle.svelte-1adl4o1{flex:0 0 auto;background:var(--shell-border);transition:background-color .12s ease;touch-action:none}.splitter-handle.svelte-1adl4o1:hover,.splitter-handle.dragging.svelte-1adl4o1{background:var(--shell-accent)}body[data-dragging] .splitter-handle.svelte-1adl4o1{pointer-events:none}.splitter-handle.disabled.svelte-1adl4o1{cursor:default;pointer-events:none}.splitter-handle.frozen.svelte-1adl4o1{cursor:default;pointer-events:none;background:var(--shell-border);opacity:.5}.splitter-handle.frozen.svelte-1adl4o1:hover{background:var(--shell-border)}.horizontal.svelte-1adl4o1>.splitter-handle:where(.svelte-1adl4o1){width:4px;cursor:col-resize}.vertical.svelte-1adl4o1>.splitter-handle:where(.svelte-1adl4o1){height:4px;cursor:row-resize}.horizontal.svelte-1adl4o1>.splitter-handle.frozen:where(.svelte-1adl4o1){width:1px}.vertical.svelte-1adl4o1>.splitter-handle.frozen:where(.svelte-1adl4o1){height:1px}.tabbed-panel.svelte-1kxcyhf{display:flex;flex-direction:column;width:100%;height:100%;min-width:0;min-height:0;background:var(--shell-grad-bg, var(--shell-bg))}.tab-strip.svelte-1kxcyhf{position:relative;flex:0 0 auto;display:flex;gap:1px;background:var(--shell-grad-bg-sunken, var(--shell-bg-sunken));border-bottom:1px solid var(--shell-border);padding:0 var(--shell-pad-sm);user-select:none}.tab.svelte-1kxcyhf{appearance:none;background:transparent;border:none;color:var(--shell-fg-muted);font:inherit;font-size:12px;padding:var(--shell-pad-sm) var(--shell-pad-md);margin-top:2px;display:inline-flex;align-items:center;gap:var(--shell-pad-sm);cursor:pointer;border-top:2px solid transparent;border-radius:2px 2px 0 0;touch-action:none}.tab.svelte-1kxcyhf:hover{color:var(--shell-fg);background:var(--shell-grad-bg-elevated, var(--shell-bg-elevated))}.tab.active.svelte-1kxcyhf{color:var(--shell-fg);background:var(--shell-grad-bg, var(--shell-bg));border-top-color:var(--shell-accent)}.tab-icon.svelte-1kxcyhf{font-size:11px}.tab-label.svelte-1kxcyhf{white-space:nowrap}.tab-dirty.svelte-1kxcyhf{width:8px;height:8px;border-radius:50%;background:var(--shell-accent);flex-shrink:0}.tab-close.svelte-1kxcyhf{display:inline-flex;font-size:10px;line-height:1;padding:2px;border-radius:var(--shell-radius-sm);color:var(--shell-fg-muted);cursor:pointer;flex-shrink:0;margin-left:auto}.tab-close.svelte-1kxcyhf:hover{color:var(--shell-fg);background:var(--shell-bg-sunken)}.drop-indicator.svelte-1kxcyhf{position:absolute;width:2px;background:var(--shell-accent);box-shadow:0 0 6px var(--shell-accent);pointer-events:none;border-radius:1px}.tab-body.svelte-1kxcyhf{flex:1 1 auto;position:relative;min-width:0;min-height:0;overflow:hidden}.tab-body-pane.svelte-1kxcyhf{position:absolute;inset:0;min-width:0;min-height:0;display:none}.tab-body-pane.active.svelte-1kxcyhf{display:block}.slot.svelte-1czj0s8{position:relative;width:100%;height:100%;min-width:0;min-height:0;overflow:hidden}.slot-placeholder.svelte-1czj0s8{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--shell-pad-sm);color:var(--shell-fg-muted);font-size:12px;text-align:center;padding:var(--shell-pad-md);background:repeating-linear-gradient(45deg,var(--shell-bg) 0 10px,var(--shell-bg-elevated) 10px 20px);border:1px dashed var(--shell-border-strong);pointer-events:none}.slot-id.svelte-1czj0s8{color:var(--shell-fg);font-family:var(--shell-font-mono);font-size:13px}.slot-meta.svelte-1czj0s8 code:where(.svelte-1czj0s8){font-family:var(--shell-font-mono);color:var(--shell-accent)}.slot-dims.svelte-1czj0s8{font-family:var(--shell-font-mono);color:var(--shell-fg-subtle);font-size:11px}.slot-drop-zone.svelte-re71zu{position:absolute;inset:0;pointer-events:none}.slot-drop-zone.active.svelte-re71zu{pointer-events:auto}.quad-highlight.svelte-re71zu{position:absolute;background:var(--shell-accent);opacity:.18;border:1px dashed var(--shell-accent);pointer-events:none;transition:inset 80ms ease}.quad-highlight.quad-left.svelte-re71zu{inset:0 50% 0 0}.quad-highlight.quad-right.svelte-re71zu{inset:0 0 0 50%}.quad-highlight.quad-top.svelte-re71zu{inset:0 0 50%}.quad-highlight.quad-bottom.svelte-re71zu{inset:50% 0 0}.quad-target.svelte-re71zu{position:absolute;pointer-events:none}.quad-target.quad-left.svelte-re71zu{inset:0 50% 0 0}.quad-target.quad-right.svelte-re71zu{inset:0 0 0 50%}.quad-target.quad-top.svelte-re71zu{inset:0 0 50%}.quad-target.quad-bottom.svelte-re71zu{inset:50% 0 0}.tab-slot-wrapper.svelte-1gw9g38,.leaf-slot-wrapper.svelte-1gw9g38{position:absolute;inset:0;min-width:0;min-height:0}.empty-tabs-placeholder.svelte-1gw9g38{width:100%;height:100%;min-width:0;min-height:0;position:relative}.empty-tabs-default.svelte-1gw9g38{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;color:var(--shell-fg-muted);font-size:12px;background:repeating-linear-gradient(45deg,var(--shell-bg) 0 10px,var(--shell-bg-elevated) 10px 20px);border:1px dashed var(--shell-border-strong)}.empty-tabs-custom.svelte-1gw9g38{position:absolute;inset:0}.empty-tabs-drop.svelte-1gw9g38{position:absolute;inset:0;pointer-events:auto}.drag-preview.svelte-133fiip{position:absolute;display:inline-flex;align-items:center;gap:var(--shell-pad-sm);padding:var(--shell-pad-sm) var(--shell-pad-md);background:var(--shell-grad-bg-elevated, var(--shell-bg-elevated));color:var(--shell-fg);border:1px solid var(--shell-accent);border-radius:var(--shell-radius-sm);box-shadow:0 8px 24px #00000080;font-size:12px;font-family:var(--shell-font-ui);pointer-events:none;opacity:.9}.drag-preview-icon.svelte-133fiip{font-size:11px}.drag-preview-label.svelte-133fiip{white-space:nowrap}.sh3-float-frame.svelte-1p734al{position:absolute;display:flex;flex-direction:column;background:var(--shell-grad-bg-elevated, var(--shell-bg-elevated));color:var(--shell-fg);border:1px solid var(--shell-border-strong);border-radius:var(--shell-radius);box-shadow:0 8px 24px #0006;pointer-events:auto}.sh3-float-header.svelte-1p734al{display:flex;align-items:center;justify-content:space-between;padding:4px 8px;background:var(--shell-grad-bg-sunken, var(--shell-bg-sunken));cursor:move;user-select:none;border-bottom:1px solid var(--shell-border-strong);border-top-left-radius:var(--shell-radius);border-top-right-radius:var(--shell-radius);flex-shrink:0}.sh3-float-title.svelte-1p734al{font-size:12px;color:var(--shell-fg);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sh3-float-header-actions.svelte-1p734al{display:inline-flex;align-items:center;gap:2px;flex-shrink:0}.sh3-float-maximize.svelte-1p734al,.sh3-float-close.svelte-1p734al{background:transparent;border:none;color:var(--shell-fg);line-height:1;cursor:pointer;padding:0 4px}.sh3-float-maximize.svelte-1p734al{font-size:12px}.sh3-float-close.svelte-1p734al{font-size:16px}.sh3-float-body.svelte-1p734al{flex:1;position:relative;overflow:hidden;min-height:0}.sh3-float-resize-grip.svelte-1p734al{position:absolute;right:0;bottom:0;width:16px;height:16px;cursor:nwse-resize;background:linear-gradient(135deg,transparent 0,transparent 6px,var(--shell-border-strong) 6px,var(--shell-border-strong) 7px,transparent 7px,transparent 10px,var(--shell-border-strong) 10px,var(--shell-border-strong) 11px,transparent 11px);border-bottom-right-radius:var(--shell-radius)}.sh3-float-layer.svelte-1rzcset{position:absolute;inset:0;pointer-events:none}.guest-banner.svelte-pymkh{display:flex;align-items:center;justify-content:center;gap:12px;padding:6px var(--shell-pad-md, 12px);background:color-mix(in srgb,var(--shell-accent, #7c7cf0) 15%,transparent);border-bottom:1px solid var(--shell-border, #3a3a5c);font-size:12px;color:var(--shell-fg, #e0e0e0)}.guest-banner-action.svelte-pymkh{padding:3px 10px;color:var(--shell-bg, #1a1a2e);font-size:11px;font-weight:600}.guest-signin-overlay.svelte-pymkh{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;background:#00000080;z-index:9999}.guest-signin-card.svelte-pymkh{display:flex;flex-direction:column;gap:12px;padding:32px;background:var(--shell-bg-elevated, #252540);border:1px solid var(--shell-border, #3a3a5c);border-radius:var(--shell-radius-lg, 12px);min-width:300px}.guest-signin-form.svelte-pymkh{display:flex;flex-direction:column;gap:10px}.guest-signin-input.svelte-pymkh{padding:8px 12px;background:var(--shell-bg, #1a1a2e);color:var(--shell-fg, #e0e0e0);border:1px solid var(--shell-border, #3a3a5c);border-radius:var(--shell-radius, 6px);font-size:13px}.guest-signin-input.svelte-pymkh::placeholder{color:var(--shell-fg-muted, #888)}.guest-signin-actions.svelte-pymkh{display:flex;gap:8px}.guest-signin-btn.svelte-pymkh{flex:1;padding:8px;color:var(--shell-bg, #1a1a2e);font-weight:600}.guest-signin-btn.svelte-pymkh:disabled{opacity:.6;cursor:not-allowed}.guest-signin-cancel.svelte-pymkh{padding:8px 12px;background:transparent;color:var(--shell-fg-subtle, #aaa);border:1px solid var(--shell-border, #3a3a5c)}.guest-signin-error.svelte-pymkh{padding:6px 10px;font-size:12px;color:var(--shell-error, #d32f2f);background:color-mix(in srgb,var(--shell-error, #d32f2f) 10%,transparent);border-radius:var(--shell-radius, 6px)}.sh3-consent-backdrop.svelte-14me5sj{position:fixed;inset:0;background:#0000008c;display:flex;align-items:center;justify-content:center;z-index:9999}.sh3-consent-card.svelte-14me5sj{background:var(--shell-bg-elevated, #222);color:var(--shell-fg, #eee);border:1px solid var(--shell-border, #444);padding:1.5rem;border-radius:8px;min-width:360px;max-width:520px;box-shadow:0 8px 32px #0006}.sh3-consent-title.svelte-14me5sj{margin:0 0 1rem;font-size:1rem;font-weight:600;color:var(--shell-fg, #eee)}.sh3-consent-title.svelte-14me5sj span:where(.svelte-14me5sj){color:var(--shell-accent, #7eb8f7)}.sh3-consent-fields.svelte-14me5sj{margin:0 0 1rem;display:grid;grid-template-columns:auto 1fr;column-gap:.75rem;row-gap:.25rem;align-items:baseline}.sh3-consent-fields.svelte-14me5sj dt:where(.svelte-14me5sj){font-weight:600;color:var(--shell-fg-muted, #aaa);font-size:.8rem;text-transform:uppercase;letter-spacing:.05em;padding-top:.35rem}.sh3-consent-fields.svelte-14me5sj dd:where(.svelte-14me5sj){margin:0;padding-top:.35rem;word-break:break-word}.sh3-consent-scopes.svelte-14me5sj{display:flex;flex-wrap:wrap;gap:.25rem}.sh3-consent-scope.svelte-14me5sj{display:inline-block;padding:.1rem .35rem;background:#ffffff14;border:1px solid rgba(255,255,255,.12);border-radius:3px;font-size:.82em;font-family:var(--shell-font-mono, monospace)}.sh3-consent-actions.svelte-14me5sj{display:flex;justify-content:flex-end;gap:.5rem;margin-top:1.25rem}.sh3-consent-deny.svelte-14me5sj,.sh3-consent-approve.svelte-14me5sj{padding:.4rem 1rem;border-radius:4px;font-size:.875rem;cursor:pointer;border:1px solid transparent;transition:opacity .1s}.sh3-consent-deny.svelte-14me5sj{background:transparent;color:var(--shell-fg-muted, #aaa);border-color:var(--shell-border, #444)}.sh3-consent-deny.svelte-14me5sj:hover{color:var(--shell-fg, #eee);border-color:var(--shell-fg-muted, #aaa)}.sh3-consent-approve.svelte-14me5sj{background:var(--shell-accent, #7eb8f7);color:#000;border-color:var(--shell-accent, #7eb8f7)}.sh3-consent-approve.svelte-14me5sj:hover{opacity:.85}.sh3-brand-slot.svelte-18lk809{display:inline-flex;align-items:center;gap:4px}.sh3-brand.svelte-18lk809{font-weight:600;color:var(--shell-accent);letter-spacing:.5px}.sh3-brand-app.svelte-18lk809,.sh3-brand-project.svelte-18lk809{color:var(--shell-fg)}.sh3-brand-sep.svelte-18lk809{color:var(--shell-fg-muted);margin:0 4px}.sh3-brand-crumb.svelte-18lk809{background:transparent;border:0;color:var(--shell-fg);font:inherit;cursor:pointer;padding:2px 6px;border-radius:var(--shell-radius-sm, 3px)}.sh3-brand-crumb.svelte-18lk809:hover{background:var(--shell-bg-elevated)}.sh3-brand-clickable.svelte-18lk809{background:transparent;border:0;font:inherit;cursor:pointer;padding:2px 6px;border-radius:var(--shell-radius-sm, 3px)}.sh3-brand-clickable.svelte-18lk809:hover{background:var(--shell-bg-elevated)}.sh3-menubar-button.svelte-bke3dt{display:inline-flex;align-items:center;gap:6px;padding:0 var(--shell-pad-md);height:100%;background:transparent;color:var(--shell-fg);border:0;font:inherit;cursor:default}.sh3-menubar-button.svelte-bke3dt:hover{background:var(--shell-bg-elevated)}.sh3-menubar-icon.svelte-bke3dt{width:14px;height:14px;display:inline-block}.sh3-menubar.svelte-7gc0wa{display:inline-flex;align-items:center;height:100%}.shell.svelte-187fra4{display:grid;grid-template-rows:var(--shell-tabbar-height) auto 1fr var(--shell-statusbar-height);height:100%;width:100%;position:relative;background:var(--shell-grad-bg, var(--shell-bg));color:var(--shell-fg)}.shell-tabbar.svelte-187fra4{display:grid;grid-template-columns:auto auto 1fr auto;align-items:center;gap:var(--shell-pad-md);padding:0 var(--shell-pad-md);background:var(--shell-grad-bg-elevated, var(--shell-bg-elevated));border-bottom:1px solid var(--shell-border);user-select:none}.shell-content.svelte-187fra4{position:relative;overflow:hidden;background:var(--shell-grad-bg, var(--shell-bg));min-width:0;min-height:0}.shell-statusbar.svelte-187fra4{display:flex;align-items:center;justify-content:space-between;padding:0 var(--shell-pad-md);background:var(--shell-grad-bg-sunken, var(--shell-bg-sunken));border-top:1px solid var(--shell-border);color:var(--shell-fg-muted);font-size:11px;user-select:none}.shell-overlays.svelte-187fra4,.shell-overlay-root.svelte-187fra4{position:absolute;inset:0;pointer-events:none}.shell-tabbar-home-button.svelte-187fra4{display:flex;align-items:center;justify-content:center;width:24px;height:24px;padding:0;background:transparent;color:var(--shell-fg-muted);border:1px solid var(--shell-border)}.shell-tabbar-home-button.svelte-187fra4:hover:not(:disabled){color:var(--shell-fg);border-color:var(--shell-fg-muted)}.shell-tabbar-home-button.svelte-187fra4:disabled{color:var(--shell-fg-subtle);border-color:var(--shell-border);cursor:default}.shell-tabbar-home-icon.svelte-187fra4{width:14px;height:14px}.shell-tabbar-user.svelte-187fra4{display:flex;align-items:center;gap:6px}.shell-tabbar-user-name.svelte-187fra4{font-size:12px;color:var(--shell-fg-subtle)}.shell-tabbar-tag.svelte-187fra4{font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--shell-fg-on-accent);background:var(--shell-accent);padding:1px 6px;border-radius:var(--shell-radius-md)}.shell-tabbar-signout.svelte-187fra4{display:flex;align-items:center;justify-content:center;width:24px;height:24px;padding:0;background:transparent;color:var(--shell-fg-muted);border:1px solid var(--shell-border)}.shell-tabbar-signout.svelte-187fra4:hover{color:var(--shell-fg);border-color:var(--shell-fg-muted)}.shell-tabbar-signout-icon.svelte-187fra4{width:14px;height:14px}.signin-wall.svelte-lh4k15{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:var(--shell-grad-bg, var(--shell-bg, #1a1a2e));color:var(--shell-fg, #e0e0e0);font-family:system-ui,sans-serif}.signin-card.svelte-lh4k15{display:flex;flex-direction:column;align-items:center;gap:16px;padding:48px 40px;background:var(--shell-grad-bg-elevated, var(--shell-bg-elevated, #252540));border:1px solid var(--shell-border, #3a3a5c);border-radius:var(--shell-radius-lg, 12px);min-width:320px}.signin-brand.svelte-lh4k15{margin:0 0 8px;font-size:42px;color:var(--shell-accent, #7c7cf0);letter-spacing:2px}.signin-form.svelte-lh4k15{display:flex;flex-direction:column;gap:12px;width:100%}.signin-input.svelte-lh4k15{padding:10px 14px;background:var(--shell-bg, #1a1a2e);color:var(--shell-fg, #e0e0e0);border:1px solid var(--shell-border, #3a3a5c);border-radius:var(--shell-radius, 6px);font-size:14px}.signin-input.svelte-lh4k15::placeholder{color:var(--shell-fg-muted, #888)}.signin-btn.svelte-lh4k15{padding:10px 16px;color:var(--shell-bg, #1a1a2e);font-weight:600;font-size:14px}.signin-btn.svelte-lh4k15:disabled{opacity:.6;cursor:not-allowed}.signin-link.svelte-lh4k15{background:none;color:var(--shell-accent, #7c7cf0);font-size:13px;padding:0}.signin-link.svelte-lh4k15:hover{text-decoration:underline}.signin-error.svelte-lh4k15{padding:8px 12px;font-size:13px;color:var(--shell-error, #d32f2f);background:color-mix(in srgb,var(--shell-error, #d32f2f) 10%,transparent);border-radius:var(--shell-radius, 6px);width:100%;text-align:center}:root{--shell-bg: #1a1b1e;--shell-bg-elevated: #22232a;--shell-bg-sunken: #141518;--shell-border: #2e3038;--shell-border-strong: #3c3f4a;--shell-fg: #e4e6eb;--shell-fg-muted: #9aa0aa;--shell-fg-subtle: #6b7280;--shell-accent: #6ea8fe;--shell-accent-muted: #3a5580;--shell-input-bg: var(--shell-bg-sunken);--shell-input-border-focus: var(--shell-accent);--shell-focus-ring: 0 0 0 2px color-mix(in srgb, var(--shell-accent) 40%, transparent);--shell-error: #f87171;--shell-warning: #fbbf24;--shell-success: #34d399;--shell-fg-on-accent: #ffffff;--shell-fg-on-error: #1a1b1e;--shell-fg-on-warning: #1a1b1e;--shell-fg-on-success: #1a1b1e;--shell-font-ui: system-ui, -apple-system, "Segoe UI", sans-serif;--shell-font-mono: ui-monospace, "Cascadia Code", "Consolas", monospace;--shell-font-size: 13px;--shell-line: 1.45;--shell-radius-sm: 3px;--shell-radius: 4px;--shell-radius-md: 6px;--shell-radius-lg: 8px;--shell-pad-xs: 2px;--shell-pad-sm: 4px;--shell-pad-md: 8px;--shell-pad-lg: 12px;--shell-tabbar-height: 32px;--shell-statusbar-height: 22px;--shell-z-layer-0: 0;--shell-z-layer-1: 100;--shell-z-layer-2: 200;--shell-z-layer-3: 300;--shell-z-layer-4: 400;--shell-z-layer-5: 500;--shell-z-layer-6: 600;--shell-field-height-sm: 24px;--shell-field-height-md: 28px;--shell-field-pad-x: 10px;--shell-track-bg: var(--shell-bg-sunken);--shell-track-border: var(--shell-border);--shell-track-fill: var(--shell-accent);--shell-thumb-bg: #e4e6eb;--shell-thumb-border: var(--shell-accent);--shell-thumb-shadow: var(--shell-shadow-sm);--shell-tick-bg: var(--shell-fg-subtle);--shell-tick-strong-bg: var(--shell-border-strong);--shell-widget-radius: var(--shell-radius);--shell-widget-radius-pill: 999px;--shell-shadow-sm: 0 1px 2px rgba(0, 0, 0, .35);--shell-motion-fast: .12s;--shell-ease-standard: cubic-bezier(.2, 0, 0, 1)}*,*:before,*:after{box-sizing:border-box}html,body{margin:0;padding:0;height:100%;overflow:hidden;background:var(--shell-grad-bg, var(--shell-bg));color:var(--shell-fg);font-family:var(--shell-font-ui);font-size:var(--shell-font-size);line-height:var(--shell-line);-webkit-font-smoothing:antialiased}#app{height:100%}