@clappstore/connect 0.6.1 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/dist/agent-handler.d.ts +5 -3
  2. package/dist/agent-handler.d.ts.map +1 -1
  3. package/dist/agent-handler.js +54 -3
  4. package/dist/agent-handler.js.map +1 -1
  5. package/dist/defaults.d.ts +0 -3
  6. package/dist/defaults.d.ts.map +1 -1
  7. package/dist/defaults.js +0 -8
  8. package/dist/defaults.js.map +1 -1
  9. package/dist/index.js +37 -88
  10. package/dist/index.js.map +1 -1
  11. package/dist/server.d.ts +13 -0
  12. package/dist/server.d.ts.map +1 -0
  13. package/dist/server.js +202 -0
  14. package/dist/server.js.map +1 -0
  15. package/dist/settings-handler.d.ts +7 -7
  16. package/dist/settings-handler.d.ts.map +1 -1
  17. package/dist/settings-handler.js +16 -21
  18. package/dist/settings-handler.js.map +1 -1
  19. package/dist/state-store.d.ts +40 -0
  20. package/dist/state-store.d.ts.map +1 -0
  21. package/dist/state-store.js +74 -0
  22. package/dist/state-store.js.map +1 -0
  23. package/package.json +7 -3
  24. package/web-app/assets/index-BYIO2GGA.css +1 -0
  25. package/web-app/assets/index-kbnfuSZC.js +128 -0
  26. package/web-app/index.html +13 -0
  27. package/dist/credentials.d.ts +0 -5
  28. package/dist/credentials.d.ts.map +0 -1
  29. package/dist/credentials.js +0 -32
  30. package/dist/credentials.js.map +0 -1
  31. package/dist/intent-poller.d.ts +0 -22
  32. package/dist/intent-poller.d.ts.map +0 -1
  33. package/dist/intent-poller.js +0 -51
  34. package/dist/intent-poller.js.map +0 -1
  35. package/dist/relay-client.d.ts +0 -16
  36. package/dist/relay-client.d.ts.map +0 -1
  37. package/dist/relay-client.js +0 -121
  38. package/dist/relay-client.js.map +0 -1
  39. package/dist/state-watcher.d.ts +0 -23
  40. package/dist/state-watcher.d.ts.map +0 -1
  41. package/dist/state-watcher.js +0 -121
  42. package/dist/state-watcher.js.map +0 -1
@@ -1,13 +1,13 @@
1
1
  import type { IntentMessage } from "@clapps/core";
2
- import type { RelayClient } from "./relay-client.js";
2
+ import type { StateStore } from "./state-store.js";
3
3
  export interface SettingsHandlerOptions {
4
4
  stateDir: string;
5
- relay: RelayClient;
5
+ store: StateStore;
6
6
  authPath?: string;
7
7
  }
8
8
  export declare class SettingsHandler {
9
9
  private stateDir;
10
- private relay;
10
+ private store;
11
11
  private authPath;
12
12
  constructor(options: SettingsHandlerOptions);
13
13
  /** Returns true if the intent was handled locally (should not be forwarded to ACP) */
@@ -18,9 +18,9 @@ export declare class SettingsHandler {
18
18
  private setClaudeToken;
19
19
  /** Write settings.json state with provider status (masked keys) */
20
20
  writeSettingsState(): void;
21
- /** Push settings.json state to relay */
22
- pushSettingsState(): Promise<void>;
23
- /** Push _status.json state to relay */
24
- pushStatusState(): Promise<void>;
21
+ /** Push settings state to in-memory store */
22
+ private pushSettingsState;
23
+ /** Push _status state to in-memory store */
24
+ private pushStatusState;
25
25
  }
26
26
  //# sourceMappingURL=settings-handler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"settings-handler.d.ts","sourceRoot":"","sources":["../src/settings-handler.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,WAAW,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,QAAQ,CAAS;gBAEb,OAAO,EAAE,sBAAsB;IAQ3C,sFAAsF;IACtF,YAAY,GAAI,QAAQ,aAAa,KAAG,OAAO,CA0B7C;IAEF,iDAAiD;IACjD,OAAO,CAAC,eAAe;IA+BvB,qDAAqD;IACrD,OAAO,CAAC,cAAc;IA4BtB,mEAAmE;IACnE,kBAAkB,IAAI,IAAI;IA4D1B,wCAAwC;IAClC,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAMxC,uCAAuC;IACjC,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;CAKvC"}
1
+ {"version":3,"file":"settings-handler.d.ts","sourceRoot":"","sources":["../src/settings-handler.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,UAAU,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,KAAK,CAAa;IAC1B,OAAO,CAAC,QAAQ,CAAS;gBAEb,OAAO,EAAE,sBAAsB;IAQ3C,sFAAsF;IACtF,YAAY,GAAI,QAAQ,aAAa,KAAG,OAAO,CA0B7C;IAEF,iDAAiD;IACjD,OAAO,CAAC,eAAe;IAsBvB,qDAAqD;IACrD,OAAO,CAAC,cAAc;IAsBtB,mEAAmE;IACnE,kBAAkB,IAAI,IAAI;IAsD1B,6CAA6C;IAC7C,OAAO,CAAC,iBAAiB;IAMzB,4CAA4C;IAC5C,OAAO,CAAC,eAAe;CAKxB"}
@@ -5,11 +5,11 @@ import { homedir } from "node:os";
5
5
  import { checkAuthStatus } from "./defaults.js";
6
6
  export class SettingsHandler {
7
7
  stateDir;
8
- relay;
8
+ store;
9
9
  authPath;
10
10
  constructor(options) {
11
11
  this.stateDir = options.stateDir;
12
- this.relay = options.relay;
12
+ this.store = options.store;
13
13
  this.authPath =
14
14
  options.authPath ??
15
15
  resolve(homedir(), ".openclaw", "agents", "main", "agent", "auth.json");
@@ -44,7 +44,6 @@ export class SettingsHandler {
44
44
  };
45
45
  /** Write auth.json with the Anthropic API key */
46
46
  setAnthropicKey(apiKey) {
47
- // Read existing auth or start fresh
48
47
  let auth = {};
49
48
  try {
50
49
  if (existsSync(this.authPath)) {
@@ -55,16 +54,13 @@ export class SettingsHandler {
55
54
  // Start fresh if unreadable
56
55
  }
57
56
  auth.anthropic = { apiKey };
58
- // Ensure directory exists
59
57
  mkdirSync(dirname(this.authPath), { recursive: true });
60
58
  writeFileSync(this.authPath, JSON.stringify(auth, null, 2), "utf-8");
61
59
  console.log(`✅ Anthropic API key saved to ${this.authPath}`);
62
- // Update settings state with masked key and push directly
63
60
  this.writeSettingsState();
64
- this.pushSettingsState().catch((err) => console.error(`[settings] Failed to push settings: ${err.message}`));
65
- // Re-check auth status so _status.json reflects the new key, then push
61
+ this.pushSettingsState();
66
62
  checkAuthStatus(this.stateDir, this.authPath);
67
- this.pushStatusState().catch((err) => console.error(`[settings] Failed to push status: ${err.message}`));
63
+ this.pushStatusState();
68
64
  }
69
65
  /** Set Claude subscription token via openclaw CLI */
70
66
  setClaudeToken(token) {
@@ -75,12 +71,10 @@ export class SettingsHandler {
75
71
  return;
76
72
  }
77
73
  console.log("✅ Claude subscription token saved via openclaw");
78
- // Update settings state and push
79
74
  this.writeSettingsState();
80
- this.pushSettingsState().catch((err) => console.error(`[settings] Failed to push settings: ${err.message}`));
81
- // Re-check auth status so _status.json reflects the new token, then push
75
+ this.pushSettingsState();
82
76
  checkAuthStatus(this.stateDir, this.authPath);
83
- this.pushStatusState().catch((err) => console.error(`[settings] Failed to push status: ${err.message}`));
77
+ this.pushStatusState();
84
78
  }
85
79
  /** Write settings.json state with provider status (masked keys) */
86
80
  writeSettingsState() {
@@ -115,8 +109,7 @@ export class SettingsHandler {
115
109
  else if (subscriptionConfigured) {
116
110
  description = "**Claude Subscription** — Token configured";
117
111
  }
118
- const statePath = resolve(this.stateDir, "settings.json");
119
- writeFileSync(statePath, JSON.stringify({
112
+ const state = {
120
113
  version: Date.now(),
121
114
  timestamp: new Date().toISOString(),
122
115
  state: {
@@ -131,19 +124,21 @@ export class SettingsHandler {
131
124
  },
132
125
  },
133
126
  },
134
- }, null, 2), "utf-8");
127
+ };
128
+ const statePath = resolve(this.stateDir, "settings.json");
129
+ writeFileSync(statePath, JSON.stringify(state, null, 2), "utf-8");
135
130
  }
136
- /** Push settings.json state to relay */
137
- async pushSettingsState() {
131
+ /** Push settings state to in-memory store */
132
+ pushSettingsState() {
138
133
  const statePath = resolve(this.stateDir, "settings.json");
139
134
  const content = readFileSync(statePath, "utf-8");
140
- await this.relay.pushState("settings", JSON.parse(content));
135
+ this.store.setState("settings", JSON.parse(content));
141
136
  }
142
- /** Push _status.json state to relay */
143
- async pushStatusState() {
137
+ /** Push _status state to in-memory store */
138
+ pushStatusState() {
144
139
  const statePath = resolve(this.stateDir, "_status.json");
145
140
  const content = readFileSync(statePath, "utf-8");
146
- await this.relay.pushState("_status", JSON.parse(content));
141
+ this.store.setState("_status", JSON.parse(content));
147
142
  }
148
143
  }
149
144
  //# sourceMappingURL=settings-handler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"settings-handler.js","sourceRoot":"","sources":["../src/settings-handler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"settings-handler.js","sourceRoot":"","sources":["../src/settings-handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import type { AppEntry, ClappState } from "@clapps/core";
2
+ import type { WebSocket } from "ws";
3
+ export interface WsMessage {
4
+ type: string;
5
+ [key: string]: unknown;
6
+ }
7
+ interface ConnectedClient {
8
+ ws: WebSocket;
9
+ subscriptions: Set<string>;
10
+ context?: ClientContext;
11
+ }
12
+ export interface ClientContext {
13
+ platform?: string;
14
+ user?: Record<string, unknown>;
15
+ capabilities?: Record<string, unknown>;
16
+ }
17
+ /**
18
+ * In-memory store for apps, state, and views.
19
+ * Broadcasts changes to connected WebSocket clients.
20
+ */
21
+ export declare class StateStore {
22
+ private apps;
23
+ private state;
24
+ private views;
25
+ private clients;
26
+ addClient(ws: WebSocket, context?: ClientContext): ConnectedClient;
27
+ removeClient(client: ConnectedClient): void;
28
+ subscribe(client: ConnectedClient, clappIds: string[]): void;
29
+ getApps(): AppEntry[];
30
+ setApps(apps: AppEntry[]): void;
31
+ getState(clappId: string): ClappState | undefined;
32
+ setState(clappId: string, state: ClappState): void;
33
+ getView(viewId: string): string | undefined;
34
+ setView(viewId: string, content: string): void;
35
+ private broadcast;
36
+ private broadcastToSubscribers;
37
+ private safeSend;
38
+ }
39
+ export {};
40
+ //# sourceMappingURL=state-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-store.d.ts","sourceRoot":"","sources":["../src/state-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAEpC,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,UAAU,eAAe;IACvB,EAAE,EAAE,SAAS,CAAC;IACd,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxC;AAED;;;GAGG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,IAAI,CAAkB;IAC9B,OAAO,CAAC,KAAK,CAAiC;IAC9C,OAAO,CAAC,KAAK,CAA6B;IAC1C,OAAO,CAAC,OAAO,CAA8B;IAI7C,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,eAAe;IAMlE,YAAY,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI;IAI3C,SAAS,CAAC,MAAM,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI;IAQ5D,OAAO,IAAI,QAAQ,EAAE;IAIrB,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,IAAI;IAO/B,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAIjD,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI;IAWlD,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAI3C,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAO9C,OAAO,CAAC,SAAS;IAOjB,OAAO,CAAC,sBAAsB;IAU9B,OAAO,CAAC,QAAQ;CAKjB"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * In-memory store for apps, state, and views.
3
+ * Broadcasts changes to connected WebSocket clients.
4
+ */
5
+ export class StateStore {
6
+ apps = [];
7
+ state = new Map();
8
+ views = new Map();
9
+ clients = new Set();
10
+ // --- Client management ---
11
+ addClient(ws, context) {
12
+ const client = { ws, subscriptions: new Set(), context };
13
+ this.clients.add(client);
14
+ return client;
15
+ }
16
+ removeClient(client) {
17
+ this.clients.delete(client);
18
+ }
19
+ subscribe(client, clappIds) {
20
+ for (const id of clappIds) {
21
+ client.subscriptions.add(id);
22
+ }
23
+ }
24
+ // --- Apps ---
25
+ getApps() {
26
+ return this.apps;
27
+ }
28
+ setApps(apps) {
29
+ this.apps = apps;
30
+ this.broadcast({ type: "apps", apps });
31
+ }
32
+ // --- State ---
33
+ getState(clappId) {
34
+ return this.state.get(clappId);
35
+ }
36
+ setState(clappId, state) {
37
+ this.state.set(clappId, state);
38
+ this.broadcastToSubscribers(clappId, {
39
+ type: "state",
40
+ clappId,
41
+ state,
42
+ });
43
+ }
44
+ // --- Views ---
45
+ getView(viewId) {
46
+ return this.views.get(viewId);
47
+ }
48
+ setView(viewId, content) {
49
+ this.views.set(viewId, content);
50
+ this.broadcast({ type: "view", viewId, content });
51
+ }
52
+ // --- Broadcast ---
53
+ broadcast(msg) {
54
+ const data = JSON.stringify(msg);
55
+ for (const client of this.clients) {
56
+ this.safeSend(client.ws, data);
57
+ }
58
+ }
59
+ broadcastToSubscribers(clappId, msg) {
60
+ const data = JSON.stringify(msg);
61
+ for (const client of this.clients) {
62
+ // Send to clients subscribed to this clappId, or to all if they have no subscriptions (broadcast mode)
63
+ if (client.subscriptions.size === 0 || client.subscriptions.has(clappId)) {
64
+ this.safeSend(client.ws, data);
65
+ }
66
+ }
67
+ }
68
+ safeSend(ws, data) {
69
+ if (ws.readyState === ws.OPEN) {
70
+ ws.send(data);
71
+ }
72
+ }
73
+ }
74
+ //# sourceMappingURL=state-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-store.js","sourceRoot":"","sources":["../src/state-store.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@clappstore/connect",
3
- "version": "0.6.1",
3
+ "version": "0.7.0",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "clapps-connect": "./dist/index.js"
7
7
  },
8
- "files": ["dist"],
8
+ "files": ["dist", "web-app"],
9
9
  "publishConfig": {
10
10
  "access": "public"
11
11
  },
@@ -13,7 +13,11 @@
13
13
  "build": "tsc",
14
14
  "clean": "rm -rf dist"
15
15
  },
16
+ "dependencies": {
17
+ "ws": "^8.18.0"
18
+ },
16
19
  "devDependencies": {
17
- "@clapps/core": "workspace:*"
20
+ "@clapps/core": "workspace:*",
21
+ "@types/ws": "^8.5.13"
18
22
  }
19
23
  }
@@ -0,0 +1 @@
1
+ :root{--bg: #0a0a0a;--fg: #ededed;--muted: #888;--border: #222;--accent: #3b82f6;--card-bg: #111;--sidebar-bg: #0d0d0d;--hover-bg: #1a1a1a;--active-bg: #1e293b;--skeleton-bg: #1a1a1a;--skeleton-shine: #222;--radius: 8px;--font-mono: "SF Mono", "Fira Code", "Fira Mono", Menlo, monospace;--font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif}*{margin:0;padding:0;box-sizing:border-box}html,body{height:100%;background:var(--bg);color:var(--fg);font-family:var(--font-sans);-webkit-font-smoothing:antialiased}#root{height:100%}.clapp-shell{height:100vh;display:flex;flex-direction:column}.clapp-app{flex:1;display:flex;min-height:0;overflow:hidden}.clapp-heading{font-weight:600;letter-spacing:-.02em}h1.clapp-heading{font-size:1.5rem}h2.clapp-heading{font-size:1.25rem}h3.clapp-heading{font-size:1rem}.clapp-btn{display:inline-flex;align-items:center;gap:.375rem;border:1px solid var(--border);border-radius:var(--radius);background:transparent;color:var(--fg);cursor:pointer;font-family:inherit;transition:background .15s}.clapp-btn:hover{background:var(--hover-bg)}.clapp-btn-ghost{border-color:transparent}.clapp-btn-sm{padding:.25rem .5rem;font-size:.8125rem}.clapp-btn-md{padding:.5rem 1rem;font-size:.875rem}.clapp-list{list-style:none;display:flex;flex-direction:column}.clapp-list-item{display:flex;align-items:center;gap:.5rem;padding:.5rem .75rem;border-radius:var(--radius);cursor:pointer;font-size:.875rem;color:var(--fg);transition:background .15s}.clapp-list-item:hover{background:var(--hover-bg)}.clapp-list-item.active{background:var(--active-bg);color:var(--accent)}.clapp-icon{font-size:1rem;line-height:1}.clapp-skeleton{display:flex;flex-direction:column;gap:.5rem;padding:.5rem 0}.clapp-skeleton-line{height:1rem;background:linear-gradient(90deg,var(--skeleton-bg) 25%,var(--skeleton-shine) 50%,var(--skeleton-bg) 75%);background-size:200% 100%;animation:skeleton-shimmer 1.5s ease-in-out infinite;border-radius:4px}.clapp-skeleton-line:nth-child(odd){width:80%}.clapp-skeleton-line:nth-child(2n){width:60%}@keyframes skeleton-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.clapp-card{border:1px solid var(--border);border-radius:var(--radius);background:var(--card-bg);overflow:hidden}.clapp-card-header{padding:.75rem 1rem;border-bottom:1px solid var(--border);font-weight:600;font-size:.875rem}.clapp-card-body{padding:1rem}.clapp-markdown{font-size:.9375rem;line-height:1.7;max-width:72ch}.clapp-markdown h1{font-size:1.5rem;font-weight:700;margin:1.5rem 0 .75rem}.clapp-markdown h2{font-size:1.25rem;font-weight:600;margin:1.25rem 0 .5rem}.clapp-markdown h3{font-size:1.1rem;font-weight:600;margin:1rem 0 .5rem}.clapp-markdown p{margin:.75rem 0}.clapp-markdown ul,.clapp-markdown ol{margin:.5rem 0;padding-left:1.5rem}.clapp-markdown li{margin:.25rem 0}.clapp-markdown code{font-family:var(--font-mono);background:var(--hover-bg);padding:.15em .35em;border-radius:4px;font-size:.85em}.clapp-markdown pre{background:var(--card-bg);border:1px solid var(--border);border-radius:var(--radius);padding:1rem;overflow-x:auto;margin:.75rem 0}.clapp-markdown pre code{background:none;padding:0}.clapp-markdown blockquote{border-left:3px solid var(--accent);padding-left:1rem;color:var(--muted);margin:.75rem 0}.clapp-markdown hr{border:none;border-top:1px solid var(--border);margin:1.5rem 0}.clapp-markdown a{color:var(--accent);text-decoration:none}.clapp-markdown a:hover{text-decoration:underline}.clapp-empty{color:var(--muted);font-size:.875rem;padding:2rem;text-align:center}.clapp-error{color:#ef4444;font-size:.875rem;padding:.5rem}.clapp-module{height:100%;overflow-y:auto}.home-shell{position:relative;height:100vh;overflow:hidden}.home-shell-layer{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;overflow-y:auto}.home-screen-layer{transition:transform .3s ease,opacity .3s ease;z-index:1}.home-screen-hidden{transform:translate(-30%);opacity:0;pointer-events:none}.app-layer{z-index:2;transform:translate(100%);opacity:0;transition:transform .3s ease,opacity .3s ease}.app-layer-visible{transform:translate(0);opacity:1}.app-back-btn{position:absolute;top:.75rem;left:.75rem;z-index:10;display:inline-flex;align-items:center;gap:.125rem;background:var(--card-bg);border:1px solid var(--border);border-radius:var(--radius);color:var(--accent);font-family:var(--font-sans);font-size:.8125rem;padding:.25rem .625rem .25rem .375rem;cursor:pointer;transition:background .15s}.app-back-btn:hover{background:var(--hover-bg)}