@openagt/dashboard 0.10.0 → 0.11.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 (170) hide show
  1. package/README.md +1 -6
  2. package/dist/built-in.d.ts +8 -1
  3. package/dist/built-in.d.ts.map +1 -1
  4. package/dist/built-in.js +12 -3
  5. package/dist/built-in.js.map +1 -1
  6. package/dist/cli.d.ts +4 -10
  7. package/dist/cli.d.ts.map +1 -1
  8. package/dist/cli.js +11 -67
  9. package/dist/cli.js.map +1 -1
  10. package/dist/client.d.ts +2 -1
  11. package/dist/client.d.ts.map +1 -1
  12. package/dist/client.js +3 -4
  13. package/dist/client.js.map +1 -1
  14. package/dist/daemon-runtime.d.ts +12 -12
  15. package/dist/daemon-runtime.d.ts.map +1 -1
  16. package/dist/daemon-runtime.js +96 -35
  17. package/dist/daemon-runtime.js.map +1 -1
  18. package/dist/daemon.d.ts +3 -14
  19. package/dist/daemon.d.ts.map +1 -1
  20. package/dist/daemon.js +15 -26
  21. package/dist/daemon.js.map +1 -1
  22. package/dist/dashboard/bridge-endpoints.d.ts +5 -5
  23. package/dist/dashboard/bridge-endpoints.js +5 -5
  24. package/dist/dashboard/http.d.ts +1 -1
  25. package/dist/dashboard/http.js +1 -1
  26. package/dist/dashboard/machine-call.d.ts +10 -0
  27. package/dist/dashboard/machine-call.d.ts.map +1 -0
  28. package/dist/dashboard/machine-call.js +86 -0
  29. package/dist/dashboard/machine-call.js.map +1 -0
  30. package/dist/dashboard/relay-endpoints.d.ts +26 -17
  31. package/dist/dashboard/relay-endpoints.d.ts.map +1 -1
  32. package/dist/dashboard/relay-endpoints.js +70 -27
  33. package/dist/dashboard/relay-endpoints.js.map +1 -1
  34. package/dist/dashboard/remote-run.d.ts +77 -32
  35. package/dist/dashboard/remote-run.d.ts.map +1 -1
  36. package/dist/dashboard/remote-run.js +120 -42
  37. package/dist/dashboard/remote-run.js.map +1 -1
  38. package/dist/dashboard/rpc-serve.d.ts +19 -25
  39. package/dist/dashboard/rpc-serve.d.ts.map +1 -1
  40. package/dist/dashboard/rpc-serve.js +11 -22
  41. package/dist/dashboard/rpc-serve.js.map +1 -1
  42. package/dist/dashboard/screen.d.ts +53 -0
  43. package/dist/dashboard/screen.d.ts.map +1 -0
  44. package/dist/dashboard/screen.js +175 -0
  45. package/dist/dashboard/screen.js.map +1 -0
  46. package/dist/dashboard/server.d.ts +18 -19
  47. package/dist/dashboard/server.d.ts.map +1 -1
  48. package/dist/dashboard/server.js +52 -81
  49. package/dist/dashboard/server.js.map +1 -1
  50. package/dist/dashboard/types.d.ts +6 -14
  51. package/dist/dashboard/types.d.ts.map +1 -1
  52. package/dist/dashboard/web-start-endpoints.d.ts +2 -2
  53. package/dist/dashboard/web-start-endpoints.js +1 -1
  54. package/dist/dashboard-bundle/assets/main-9Xb8Ao4p.css +2 -0
  55. package/dist/dashboard-bundle/assets/main-DTyyQ0jM.js +140 -0
  56. package/dist/dashboard-bundle/assets/{module-gKz-ZvkG.js → module-DKd-4BTU.js} +4 -4
  57. package/dist/dashboard-bundle/host/module.js +1 -1
  58. package/dist/dashboard-bundle/index.html +3 -3
  59. package/dist/dashboard-rpc/context.d.ts +4 -4
  60. package/dist/dashboard-rpc/context.js +5 -5
  61. package/dist/dashboard-rpc/context.js.map +1 -1
  62. package/dist/dashboard-rpc/control.d.ts +1 -1
  63. package/dist/dashboard-rpc/control.js +7 -7
  64. package/dist/dashboard-rpc/control.js.map +1 -1
  65. package/dist/dashboard-rpc/events.d.ts +1 -1
  66. package/dist/dashboard-rpc/events.js +1 -1
  67. package/dist/dashboard-rpc/index.d.ts +1 -1
  68. package/dist/dashboard-rpc/index.d.ts.map +1 -1
  69. package/dist/dashboard-rpc/index.js +3 -3
  70. package/dist/dashboard-rpc/index.js.map +1 -1
  71. package/dist/dashboard-rpc/machines.d.ts +52 -0
  72. package/dist/dashboard-rpc/machines.d.ts.map +1 -0
  73. package/dist/dashboard-rpc/machines.js +82 -0
  74. package/dist/dashboard-rpc/machines.js.map +1 -0
  75. package/dist/dashboard-rpc/modules.d.ts +1 -1
  76. package/dist/dashboard-rpc/modules.js +2 -2
  77. package/dist/dashboard-rpc/modules.js.map +1 -1
  78. package/dist/dashboard-rpc/projects.d.ts +2 -0
  79. package/dist/dashboard-rpc/projects.d.ts.map +1 -1
  80. package/dist/dashboard-rpc/projects.js +3 -2
  81. package/dist/dashboard-rpc/projects.js.map +1 -1
  82. package/dist/dashboard-rpc/reads.d.ts +3 -4
  83. package/dist/dashboard-rpc/reads.d.ts.map +1 -1
  84. package/dist/dashboard-rpc/reads.js +5 -6
  85. package/dist/dashboard-rpc/reads.js.map +1 -1
  86. package/dist/dashboard-rpc/relay-agent.d.ts +3 -3
  87. package/dist/dashboard-rpc/relay-agent.js +3 -3
  88. package/dist/dashboard-rpc/relay-dispatch.d.ts +4 -4
  89. package/dist/dashboard-rpc/relay-dispatch.d.ts.map +1 -1
  90. package/dist/dashboard-rpc/relay-dispatch.js +7 -7
  91. package/dist/dashboard-rpc/relay-dispatch.js.map +1 -1
  92. package/dist/dashboard-rpc/test-context.js +1 -1
  93. package/dist/dashboard-rpc/test-context.js.map +1 -1
  94. package/dist/events.d.ts +4 -3
  95. package/dist/events.d.ts.map +1 -1
  96. package/dist/loopback-host.d.ts +3 -5
  97. package/dist/loopback-host.d.ts.map +1 -1
  98. package/dist/loopback-host.js +3 -5
  99. package/dist/loopback-host.js.map +1 -1
  100. package/dist/machine-link.d.ts +21 -0
  101. package/dist/machine-link.d.ts.map +1 -0
  102. package/dist/machine-link.js +20 -0
  103. package/dist/machine-link.js.map +1 -0
  104. package/dist/module-server.d.ts +1 -1
  105. package/dist/module-types/dashboard/lib/draft-handoff.d.ts +5 -9
  106. package/dist/module-types/dashboard/module/index.d.ts +45 -0
  107. package/dist/module-types/src/built-in.d.ts +8 -1
  108. package/dist/module-types/src/client.d.ts +2 -1
  109. package/dist/module-types/src/dashboard/bridge-endpoints.d.ts +5 -5
  110. package/dist/module-types/src/dashboard/http.d.ts +1 -1
  111. package/dist/module-types/src/dashboard/machine-call.d.ts +9 -0
  112. package/dist/module-types/src/dashboard/remote-run.d.ts +77 -32
  113. package/dist/module-types/src/dashboard/rpc-serve.d.ts +19 -25
  114. package/dist/module-types/src/dashboard/types.d.ts +6 -14
  115. package/dist/module-types/src/dashboard-rpc/context.d.ts +4 -4
  116. package/dist/module-types/src/dashboard-rpc/control.d.ts +1 -1
  117. package/dist/module-types/src/dashboard-rpc/events.d.ts +1 -1
  118. package/dist/module-types/src/dashboard-rpc/index.d.ts +1 -1
  119. package/dist/module-types/src/dashboard-rpc/machines.d.ts +51 -0
  120. package/dist/module-types/src/dashboard-rpc/modules.d.ts +1 -1
  121. package/dist/module-types/src/dashboard-rpc/projects.d.ts +2 -0
  122. package/dist/module-types/src/dashboard-rpc/reads.d.ts +3 -4
  123. package/dist/module-types/src/dashboard-rpc/relay-agent.d.ts +3 -3
  124. package/dist/module-types/src/events.d.ts +4 -3
  125. package/dist/module-types/src/loopback-host.d.ts +3 -5
  126. package/dist/module-types/src/machine-link.d.ts +20 -0
  127. package/dist/module-types/src/registry.d.ts +59 -16
  128. package/dist/module-types/src/repository-address.d.ts +22 -0
  129. package/dist/module-types/src/screens.d.ts +13 -0
  130. package/dist/module-types/src/store/agent-store.d.ts +2 -2
  131. package/dist/module-types/src/version.d.ts +1 -0
  132. package/dist/package-services.d.ts +27 -0
  133. package/dist/package-services.d.ts.map +1 -0
  134. package/dist/package-services.js +62 -0
  135. package/dist/package-services.js.map +1 -0
  136. package/dist/registry.d.ts +59 -16
  137. package/dist/registry.d.ts.map +1 -1
  138. package/dist/registry.js +91 -20
  139. package/dist/registry.js.map +1 -1
  140. package/dist/repository-address.d.ts +23 -0
  141. package/dist/repository-address.d.ts.map +1 -0
  142. package/dist/repository-address.js +38 -0
  143. package/dist/repository-address.js.map +1 -0
  144. package/dist/screens.d.ts +14 -0
  145. package/dist/screens.d.ts.map +1 -0
  146. package/dist/screens.js +40 -0
  147. package/dist/screens.js.map +1 -0
  148. package/dist/store/agent-store.d.ts +2 -2
  149. package/dist/store/agent-store.d.ts.map +1 -1
  150. package/dist/version.d.ts +2 -0
  151. package/dist/version.d.ts.map +1 -0
  152. package/dist/version.js +26 -0
  153. package/dist/version.js.map +1 -0
  154. package/package.json +13 -10
  155. package/dist/dashboard-bundle/assets/main-Q7JMdMJI.css +0 -2
  156. package/dist/dashboard-bundle/assets/main-fDZWGOub.js +0 -140
  157. package/dist/dashboard-rpc/devices.d.ts +0 -9
  158. package/dist/dashboard-rpc/devices.d.ts.map +0 -1
  159. package/dist/dashboard-rpc/devices.js +0 -12
  160. package/dist/dashboard-rpc/devices.js.map +0 -1
  161. package/dist/install.d.ts +0 -31
  162. package/dist/install.d.ts.map +0 -1
  163. package/dist/install.js +0 -54
  164. package/dist/install.js.map +0 -1
  165. package/dist/module-types/src/dashboard-rpc/devices.d.ts +0 -8
  166. package/dist/module-types/src/openagent-gitignore.d.ts +0 -11
  167. package/dist/openagent-gitignore.d.ts +0 -12
  168. package/dist/openagent-gitignore.d.ts.map +0 -1
  169. package/dist/openagent-gitignore.js +0 -19
  170. package/dist/openagent-gitignore.js.map +0 -1
@@ -1,10 +1,10 @@
1
1
  import { createServer } from 'node:http';
2
- import { timingSafeEqual } from 'node:crypto';
3
2
  import { serveClientBundle } from './static.js';
4
3
  import { makeRpcMount, RPC_PREFIX, isSameOriginRequest, isExpectedHost } from './rpc-serve.js';
5
4
  import { requestPathname } from '../request-path.js';
6
5
  import { MODULES_PREFIX, serveModuleFile } from './module-serve.js';
7
6
  import { handleRelayRequest, RELAY_PREFIX } from './relay-endpoints.js';
7
+ import { handleScreenRequest, kept, SCREEN_PREFIX } from './screen.js';
8
8
  import { BRIDGE_PREFIX, EXPECTED_EXTENSION_VERSION, handleBridgeRequest } from './bridge-endpoints.js';
9
9
  import { bridgeQuestions } from './bridge-store.js';
10
10
  import { bridgeStarts } from './bridge-starts.js';
@@ -18,7 +18,6 @@ import { WEB_START_PREFIX, handleWebStartRequest } from './web-start-endpoints.j
18
18
  * {@link DashboardOptions.onStart} / {@link DashboardOptions.onAddProject}.
19
19
  */
20
20
  export function startDashboard(opts) {
21
- const host = opts.host ?? '127.0.0.1';
22
21
  const port = opts.port ?? 4200;
23
22
  const clientBundleDir = opts.clientBundleDir;
24
23
  // A broken install ships no built bundle (the published package always does), so serve
@@ -29,7 +28,7 @@ export function startDashboard(opts) {
29
28
  res.writeHead(503, { 'content-type': 'text/plain' });
30
29
  res.end('the dashboard bundle is not installed');
31
30
  });
32
- return listenDashboard(server, host, port, () => closeServer(server));
31
+ return listenDashboard(server, port, () => closeServer(server));
33
32
  }
34
33
  // The usage panel polls for the dashboard's whole life, not just during an agent:
35
34
  // it has to show where the account stands while nothing is running (#533).
@@ -45,17 +44,14 @@ export function startDashboard(opts) {
45
44
  bridgeBrowser: opts.bridgeBrowser,
46
45
  quota,
47
46
  models: opts.models,
48
- },
49
- // The bound host, so the mount can reject a rebound `Host`: a page on evil.com whose DNS
50
- // answers 127.0.0.1 is same-origin to the browser, so the Origin check alone lets it in.
51
- { host });
52
- // The device-to-daemon relay endpoints (#1067): wired only when an events tail is supplied.
53
- // Fronted by the same token guard as every other route below.
47
+ });
48
+ // The machine-to-daemon relay endpoints (#1067): wired only when an events tail is supplied.
49
+ const localScreen = opts.screen ? kept(opts.screen) : undefined;
54
50
  const relayHandlers = opts.relay
55
- ? { start: opts.onStart, tailEvents: opts.relay.tailEvents, ...(opts.relay.rpc ? { rpc: opts.relay.rpc } : {}) }
51
+ ? { project: opts.relay.project, start: opts.onStart, tailEvents: opts.relay.tailEvents, ...(opts.relay.rpc ? { rpc: opts.relay.rpc } : {}), ...(localScreen ? { screen: localScreen } : {}) }
56
52
  : undefined;
57
- // The browser bridge (#1237). Off unless a token was supplied, and it carries that token itself
58
- // rather than riding the shared-token guard (#1051), which a loopback daemon does not have.
53
+ const screenHandlers = localScreen ? { local: localScreen, remote: agentId => opts.remote.target(agentId) } : undefined;
54
+ // The browser bridge (#1237). Off unless a token was supplied, and it carries that token itself.
59
55
  const bridgeHandlers = opts.bridgeToken
60
56
  ? {
61
57
  token: opts.bridgeToken,
@@ -95,17 +91,13 @@ export function startDashboard(opts) {
95
91
  get: id => bridgeStarts().get(id),
96
92
  }
97
93
  : undefined;
98
- const token = opts.token;
99
94
  const server = createServer((req, res) => {
100
95
  const pathname = requestPathname(req);
101
96
  if (pathname === undefined) {
102
97
  res.writeHead(400, { 'content-type': 'text/plain' }).end('bad request');
103
98
  return;
104
99
  }
105
- // The browser bridge (#1237) is checked BEFORE the shared-token guard (#1051), and is the only route that is.
106
- // That guard's browser affordance is a `?token=` redirect meant for a human following a link,
107
- // which is meaningless to an extension posting JSON; the bridge presents its own bearer token
108
- // instead, so letting it past here costs nothing and skips a 302 it could not follow.
100
+ // The browser bridge (#1237) presents its own bearer token.
109
101
  if (pathname === BRIDGE_PREFIX || pathname.startsWith(`${BRIDGE_PREFIX}/`)) {
110
102
  void handleBridgeRequest(req, res, pathname, bridgeHandlers);
111
103
  return;
@@ -114,20 +106,30 @@ export function startDashboard(opts) {
114
106
  void handleWebStartRequest(req, res, pathname, webStartHandlers);
115
107
  return;
116
108
  }
117
- // #1051: one guard fronting every route on a non-loopback bind; a no-op when no token is set.
118
- if (token !== undefined && !authorizeDaemonRequest(req, res, token))
119
- return;
120
- // The device relay (#1067): another daemon posts a start here and streams the run's events back.
121
- // The token guard above is a no-op on a loopback bind, so — exactly like the RPC mount below —
122
- // the relay carries its own CSRF + DNS-rebinding guard, or a page the user merely visited could
123
- // POST /_relay/start to start a run (the real device caller sends no Origin and a loopback
124
- // Host, so both checks pass it; only a browser's cross-origin/rebound request is turned away).
109
+ // The machine relay (#1067): another daemon posts a start here and streams the run's events back.
110
+ // Exactly like the RPC mount below, the relay carries its own CSRF + DNS-rebinding guard, or a
111
+ // page the user merely visited could POST /_relay/start to start a run (a machine's call
112
+ // arrives with no Origin and a loopback Host, so both checks pass it; only a browser's
113
+ // cross-origin/rebound request is turned away).
125
114
  if (pathname === RELAY_PREFIX || pathname.startsWith(`${RELAY_PREFIX}/`)) {
126
- if (!guardBrowserOrigin(req, res, host))
115
+ if (!guardBrowserOrigin(req, res))
127
116
  return;
128
117
  void handleRelayRequest(req, res, pathname, relayHandlers);
129
118
  return;
130
119
  }
120
+ // A run's live screen (screen.ts): a click on it acts in the agent's browser, so it carries
121
+ // the same guard as the RPC mount.
122
+ if (pathname === SCREEN_PREFIX || pathname.startsWith(`${SCREEN_PREFIX}/`)) {
123
+ if (!guardBrowserOrigin(req, res) || !guardOwnPageFetch(req, res))
124
+ return;
125
+ void handleScreenRequest(req, res, pathname, screenHandlers).catch(() => {
126
+ if (!res.headersSent)
127
+ res.writeHead(500, { 'content-type': 'text/plain' }).end('the screen failed');
128
+ else
129
+ res.destroy();
130
+ });
131
+ return;
132
+ }
131
133
  if (pathname === RPC_PREFIX || pathname.startsWith(`${RPC_PREFIX}/`)) {
132
134
  void rpcMount(req, res);
133
135
  return;
@@ -143,21 +145,26 @@ export function startDashboard(opts) {
143
145
  }
144
146
  void serveClientBundle(req, res, clientBundleDir);
145
147
  });
146
- return listenDashboard(server, host, port, async () => {
148
+ return listenDashboard(server, port, async () => {
147
149
  // Stop polling with the server: the poller outlives every agent by design,
148
150
  // so nothing else would ever end it.
149
151
  quota.stop();
150
152
  await closeServer(server);
151
153
  });
152
154
  }
155
+ /**
156
+ * The one address the dashboard listens on: this computer's own. Whatever opens OpenAgent to a
157
+ * network is a package of its own, which listens there and passes what it lets in on to here.
158
+ */
159
+ const DASHBOARD_HOST = '127.0.0.1';
153
160
  /** Bind the server and resolve a {@link Dashboard} handle; rejects if the port is already taken. */
154
- function listenDashboard(server, host, port, close) {
161
+ function listenDashboard(server, port, close) {
155
162
  return new Promise((resolvePromise, rejectPromise) => {
156
163
  server.once('error', rejectPromise);
157
- server.listen(port, host, () => {
164
+ server.listen(port, DASHBOARD_HOST, () => {
158
165
  server.removeListener('error', rejectPromise);
159
166
  const address = server.address();
160
- resolvePromise({ url: `http://${host}:${address.port}`, close });
167
+ resolvePromise({ url: `http://${DASHBOARD_HOST}:${address.port}`, close });
161
168
  });
162
169
  });
163
170
  }
@@ -167,65 +174,29 @@ function closeServer(server) {
167
174
  return new Promise(resolvePromise => server.close(() => resolvePromise()));
168
175
  }
169
176
  /**
170
- * The CSRF + DNS-rebinding guard the RPC mount applies, lifted to the device relay, which
171
- * dispatches outside it. The relay is state-changing (it starts a run on this machine) and is
172
- * wired unconditionally on a loopback bind, where the shared-token guard is a no-op, so without
173
- * this a page the user merely visited reaches it. Returns true to admit the request; on rejection
174
- * it has already answered 403.
177
+ * A watched screen makes the run's computer draw pictures, and watching is a plain GET, which a
178
+ * browser sends with no `Origin`. So a screen's routes also read what a browser says of where a
179
+ * request comes from: one another site's page made, and one that is the address bar's own (a
180
+ * download with no end), is turned away. A browser that says nothing (a page reached over plain
181
+ * HTTP on the Wi-Fi) is let by, as before. Returns true to admit; on rejection it has answered 403.
175
182
  */
176
- function guardBrowserOrigin(req, res, host) {
177
- if (isSameOriginRequest(req) && isExpectedHost(req, host))
183
+ function guardOwnPageFetch(req, res) {
184
+ const site = req.headers['sec-fetch-site'];
185
+ if ((site === undefined || site === 'same-origin') && req.headers['sec-fetch-mode'] !== 'navigate')
178
186
  return true;
179
187
  res.writeHead(403, { 'content-type': 'text/plain' }).end('forbidden');
180
188
  return false;
181
189
  }
182
- /** The cookie a bootstrapped browser carries on every same-origin request (#1051). */
183
- const DAEMON_COOKIE = 'oa_daemon';
184
190
  /**
185
- * The non-loopback bind guard (#1051): a request needs a valid `oa_daemon` cookie or a matching
186
- * `?token=`, else 401. A valid `?token=` sets the cookie and 302s to the clean path so the token
187
- * leaves the URL bar, history, and Referer after one hop; the cookie then rides RPC, the events
188
- * Channel, and the MJPEG `<img>` screencast alike (all same-origin), which a bearer header cannot
189
- * reach. Returns true to admit the request, false once it has answered (401 or the redirect).
191
+ * The CSRF + DNS-rebinding guard the RPC mount applies, lifted to the machine relay, which
192
+ * dispatches outside it. The relay is state-changing (it starts a run on this machine), so
193
+ * without this a page the user merely visited reaches it. Returns true to admit the request; on rejection
194
+ * it has already answered 403.
190
195
  */
191
- function authorizeDaemonRequest(req, res, token) {
192
- // Safe to re-parse: requestPathname already parsed this same url without throwing (#938).
193
- const url = new URL(req.url ?? '/', 'http://localhost');
194
- const queryToken = url.searchParams.get('token');
195
- if (queryToken !== null && tokensMatch(queryToken, token)) {
196
- url.searchParams.delete('token');
197
- const query = url.searchParams.toString();
198
- res.writeHead(302, {
199
- // Lax, not Strict: the device-hop (#1052) is a cross-origin top-level nav, and a Strict cookie set on it is withheld from the redirect right after, so the clean path 401s. Lax still rides top-level GET navs; CSRF stays covered by the same-origin check on /_rpc.
200
- 'set-cookie': `${DAEMON_COOKIE}=${token}; HttpOnly; SameSite=Lax; Path=/`,
201
- location: url.pathname + (query ? `?${query}` : ''),
202
- });
203
- res.end();
204
- return false;
205
- }
206
- const cookieToken = readCookie(req.headers.cookie, DAEMON_COOKIE);
207
- if (cookieToken !== undefined && tokensMatch(cookieToken, token))
196
+ function guardBrowserOrigin(req, res) {
197
+ if (isSameOriginRequest(req) && isExpectedHost(req))
208
198
  return true;
209
- res.writeHead(401, { 'content-type': 'text/plain' });
210
- res.end('unauthorized');
199
+ res.writeHead(403, { 'content-type': 'text/plain' }).end('forbidden');
211
200
  return false;
212
201
  }
213
- /** Constant-time token compare (#1051). The length check first, since `timingSafeEqual` throws on
214
- * unequal-length buffers and a length mismatch cannot be a match anyway. */
215
- function tokensMatch(a, b) {
216
- const ab = Buffer.from(a);
217
- const bb = Buffer.from(b);
218
- return ab.length === bb.length && timingSafeEqual(ab, bb);
219
- }
220
- /** One cookie's value out of a `Cookie` header, or `undefined`. */
221
- function readCookie(header, name) {
222
- if (!header)
223
- return undefined;
224
- for (const part of header.split(';')) {
225
- const eq = part.indexOf('=');
226
- if (eq !== -1 && part.slice(0, eq).trim() === name)
227
- return part.slice(eq + 1).trim();
228
- }
229
- return undefined;
230
- }
231
202
  //# sourceMappingURL=server.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/dashboard/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/dashboard/server.ts"],"names":[],"mappings":"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"}
@@ -75,7 +75,7 @@ export interface StartAgentOptions {
75
75
  /**
76
76
  * The branch the agent's own branch starts from, as this machine has it, commits that are not
77
77
  * pushed included: the launcher's "My local branch" pick. Absent, origin's default branch. A
78
- * word that is no branch name refuses the Start. Not sent to a device: its branches are its own.
78
+ * word that is no branch name refuses the Start. Not sent to another machine: its branches are its own.
79
79
  */
80
80
  base?: string;
81
81
  /**
@@ -84,20 +84,12 @@ export interface StartAgentOptions {
84
84
  */
85
85
  then?: string;
86
86
  /**
87
- * Run this session on a connected device (#1067): the local daemon relays the start to the remote
88
- * daemon at `url` (authenticating with `token` as the `oa_daemon` cookie) and streams its events
89
- * back into the local agent view. The device `label` rides along (memory-only, like `url`/`token`) so
90
- * the local session list + notice can show which device the agent is on after a reload (#1077).
91
- * Memory-only relay config the dashboard sets at submit time from a saved device. NEVER persisted to
92
- * Preferences or the registry: a device token is a per-browser secret. Absent = run locally.
93
- * Stripped before the start is forwarded, so the remote starts an ordinary local run and does not
94
- * relay onward.
87
+ * Run this session on a saved machine (#1067), named by its id: the local daemon relays the
88
+ * start to that machine's daemon, which starts it in its own copy of the project, and streams
89
+ * its events back into the local agent view. Absent = run on this machine. Stripped before the
90
+ * start is forwarded, so the machine starts an ordinary local run and does not relay onward.
95
91
  */
96
- remote?: {
97
- url: string;
98
- token: string;
99
- label?: string;
100
- };
92
+ machine?: string;
101
93
  }
102
94
  /** The outcome of a Start attempt (#345): the id of the run the project's start hook began, or why there is none. */
103
95
  export type StartAgentResult = {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/dashboard/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAMvD,0DAA0D;AAC1D,MAAM,MAAM,oBAAoB,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAE9E,4EAA4E;AAC5E,MAAM,MAAM,iBAAiB,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAE3E;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GACxB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,gBAAgB,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,IAAI,CAAA;CAAE,GACxD;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAEhC;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IACxC,MAAM,EAAE,MAAM,EAAE,CAAA;CACjB;AAED,oIAAoI;AACpI,MAAM,MAAM,mBAAmB,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,CAAC,EAAE,aAAa,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAEtG;;;;;;GAMG;AACH,MAAM,WAAW,oBAAoB;IACnC,yEAAyE;IACzE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IAClB,+EAA+E;IAC/E,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;CAC5B;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,2BAA2B;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,kEAAkE;IAClE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,8PAA8P;IAC9P,OAAO,CAAC,EAAE,WAAW,CAAA;IACrB;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;;;;;;;;OASG;IACH,MAAM,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CACxD;AAED,qHAAqH;AACrH,MAAM,MAAM,gBAAgB,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAE3F;;;;;;;GAOG;AACH,MAAM,WAAW,aAAa;IAC5B,8CAA8C;IAC9C,QAAQ,CAAC,EAAE;QACT,qCAAqC;QACrC,IAAI,EAAE,MAAM,CAAA;QACZ,yCAAyC;QACzC,KAAK,EAAE,OAAO,CAAA;QACd,+FAA+F;QAC/F,SAAS,CAAC,EAAE,MAAM,CAAA;KACnB,CAAA;IACD,kGAAkG;IAClG,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,qEAAqE;IACrE,EAAE,CAAC,EAAE,QAAQ,CAAA;IACb,wFAAwF;IACxF,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/dashboard/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAMvD,0DAA0D;AAC1D,MAAM,MAAM,oBAAoB,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAE9E,4EAA4E;AAC5E,MAAM,MAAM,iBAAiB,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAE3E;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GACxB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,gBAAgB,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,IAAI,CAAA;CAAE,GACxD;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAEhC;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IACxC,MAAM,EAAE,MAAM,EAAE,CAAA;CACjB;AAED,oIAAoI;AACpI,MAAM,MAAM,mBAAmB,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,CAAC,EAAE,aAAa,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAEtG;;;;;;GAMG;AACH,MAAM,WAAW,oBAAoB;IACnC,yEAAyE;IACzE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IAClB,+EAA+E;IAC/E,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;CAC5B;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,2BAA2B;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,kEAAkE;IAClE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,8PAA8P;IAC9P,OAAO,CAAC,EAAE,WAAW,CAAA;IACrB;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,qHAAqH;AACrH,MAAM,MAAM,gBAAgB,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAE3F;;;;;;;GAOG;AACH,MAAM,WAAW,aAAa;IAC5B,8CAA8C;IAC9C,QAAQ,CAAC,EAAE;QACT,qCAAqC;QACrC,IAAI,EAAE,MAAM,CAAA;QACZ,yCAAyC;QACzC,KAAK,EAAE,OAAO,CAAA;QACd,+FAA+F;QAC/F,SAAS,CAAC,EAAE,MAAM,CAAA;KACnB,CAAA;IACD,kGAAkG;IAClG,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,qEAAqE;IACrE,EAAE,CAAC,EAAE,QAAQ,CAAA;IACb,wFAAwF;IACxF,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB"}
@@ -6,7 +6,7 @@ import type { BridgeStartInput, BridgeStartRequest } from './bridge-starts.js';
6
6
  *
7
7
  * A run is a separate process the daemon never started, so it cannot touch the daemon's queue
8
8
  * directly; it reaches these routes at the URL it finds in its environment
9
- * ({@link DAEMON_URL_ENV}), presenting the daemon token it reads from the registry. The
9
+ * ({@link DAEMON_URL_ENV}), presenting the bridge token it reads from the registry. The
10
10
  * extension's own side of the same queue lives on `/_bridge/start` and `/_bridge/started`.
11
11
  *
12
12
  * Nothing sets {@link DAEMON_URL_ENV} today (#1774): web runs left the launcher when the daemon
@@ -19,7 +19,7 @@ export declare const WEB_START_PREFIX = "/_web-start";
19
19
  export declare const DAEMON_URL_ENV = "OPENAGENT_DAEMON_URL";
20
20
  /** What the daemon wires behind the routes. Absent when the bridge is off, which 404s them. */
21
21
  export interface WebStartHandlers {
22
- /** The daemon token every call must present — the same one the extension holds. */
22
+ /** The bridge token every call must present — the same one the extension holds. */
23
23
  token: string;
24
24
  /** Whether an extension has spoken to this daemon recently enough to be trusted with a request. */
25
25
  extensionAlive: () => boolean;
@@ -6,7 +6,7 @@ import { end, readPost, requireGet, sendJson } from './http.js';
6
6
  *
7
7
  * A run is a separate process the daemon never started, so it cannot touch the daemon's queue
8
8
  * directly; it reaches these routes at the URL it finds in its environment
9
- * ({@link DAEMON_URL_ENV}), presenting the daemon token it reads from the registry. The
9
+ * ({@link DAEMON_URL_ENV}), presenting the bridge token it reads from the registry. The
10
10
  * extension's own side of the same queue lives on `/_bridge/start` and `/_bridge/started`.
11
11
  *
12
12
  * Nothing sets {@link DAEMON_URL_ENV} today (#1774): web runs left the launcher when the daemon
@@ -0,0 +1,2 @@
1
+ /*! tailwindcss v4.3.2 | MIT License | https://tailwindcss.com */
2
+ @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-content:"";--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--scroll-fade-b:0px}}}@layer theme{:root,:host{--font-sans:"IBM Plex Sans", ui-sans-serif, system-ui, sans-serif;--font-mono:"IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, monospace;--color-black:#000;--spacing:.25rem;--container-sm:24rem;--container-md:28rem;--container-3xl:48rem;--container-4xl:56rem;--container-6xl:72rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--tracking-wide:.025em;--leading-tight:1.25;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--ease-out:cubic-bezier(0, 0, .2, 1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--radius:.125rem;--color-background:var(--background);--color-card:var(--card);--color-card-foreground:var(--card-foreground);--color-muted:var(--muted);--color-muted-foreground:var(--muted-foreground);--color-border:var(--border);--color-primary:var(--primary);--color-primary-foreground:var(--primary-foreground);--color-accent:var(--accent);--color-accent-foreground:var(--accent-foreground);--color-danger:var(--danger)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.\@container{container-type:inline-size}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:0}.inset-x-0{inset-inline:0}.inset-y-0{inset-block:0}.-top-0\.5{top:calc(var(--spacing) * -.5)}.top-0{top:0}.top-1{top:var(--spacing)}.top-1\.5{top:calc(var(--spacing) * 1.5)}.top-1\/2{top:50%}.top-2{top:calc(var(--spacing) * 2)}.top-2\.5{top:calc(var(--spacing) * 2.5)}.top-3\.5{top:calc(var(--spacing) * 3.5)}.top-\[3px\]{top:3px}.top-full{top:100%}.-right-0\.5{right:calc(var(--spacing) * -.5)}.right-0{right:0}.right-1{right:var(--spacing)}.right-3{right:calc(var(--spacing) * 3)}.left-0{left:0}.left-1\/2{left:50%}.left-2{left:calc(var(--spacing) * 2)}.left-3{left:calc(var(--spacing) * 3)}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.-mx-1{margin-inline:calc(var(--spacing) * -1)}.-mx-1\.5{margin-inline:calc(var(--spacing) * -1.5)}.mx-2{margin-inline:calc(var(--spacing) * 2)}.mx-3\.5{margin-inline:calc(var(--spacing) * 3.5)}.mx-auto{margin-inline:auto}.my-1{margin-block:var(--spacing)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mr-auto{margin-right:auto}.mb-1{margin-bottom:var(--spacing)}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.-ml-1\.5{margin-left:calc(var(--spacing) * -1.5)}.-ml-4{margin-left:calc(var(--spacing) * -4)}.-ml-8{margin-left:calc(var(--spacing) * -8)}.-ml-\[2\.375rem\]{margin-left:-2.375rem}.ml-0{margin-left:0}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-4{margin-left:calc(var(--spacing) * 4)}.ml-auto{margin-left:auto}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.aspect-square{aspect-ratio:1}.size-3\.5{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-7{width:calc(var(--spacing) * 7);height:calc(var(--spacing) * 7)}.size-full{width:100%;height:100%}.h-1{height:var(--spacing)}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-2\.5{height:calc(var(--spacing) * 2.5)}.h-3{height:calc(var(--spacing) * 3)}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-11{height:calc(var(--spacing) * 11)}.h-12{height:calc(var(--spacing) * 12)}.h-auto{height:auto}.h-full{height:100%}.h-max{height:max-content}.h-px{height:1px}.h-screen{height:100vh}.h-svh{height:100svh}.max-h-32{max-height:calc(var(--spacing) * 32)}.max-h-40{max-height:calc(var(--spacing) * 40)}.max-h-64{max-height:calc(var(--spacing) * 64)}.max-h-72{max-height:calc(var(--spacing) * 72)}.max-h-80{max-height:calc(var(--spacing) * 80)}.max-h-\[1\.35rem\]{max-height:1.35rem}.max-h-\[55vh\]{max-height:55vh}.max-h-\[70vh\]{max-height:70vh}.max-h-\[calc\(100vh-2rem\)\]{max-height:calc(100vh - 2rem)}.max-h-\[var\(--available-height\)\]{max-height:var(--available-height)}.min-h-0{min-height:0}.min-h-8{min-height:calc(var(--spacing) * 8)}.min-h-10{min-height:calc(var(--spacing) * 10)}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.min-h-svh{min-height:100svh}.w-\(--sidebar-width\){width:var(--sidebar-width)}.w-0\.5{width:calc(var(--spacing) * .5)}.w-1{width:var(--spacing)}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-1\/2{width:50%}.w-2{width:calc(var(--spacing) * 2)}.w-2\.5{width:calc(var(--spacing) * 2.5)}.w-3{width:calc(var(--spacing) * 3)}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-3\/4{width:75%}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-7{width:calc(var(--spacing) * 7)}.w-8{width:calc(var(--spacing) * 8)}.w-9{width:calc(var(--spacing) * 9)}.w-10{width:calc(var(--spacing) * 10)}.w-12{width:calc(var(--spacing) * 12)}.w-40{width:calc(var(--spacing) * 40)}.w-64{width:calc(var(--spacing) * 64)}.w-96{width:calc(var(--spacing) * 96)}.w-\[13\.5rem\]{width:13.5rem}.w-\[min\(26rem\,calc\(100vw-2rem\)\)\]{width:min(26rem,100vw - 2rem)}.w-\[min\(28rem\,calc\(100vw-2rem\)\)\]{width:min(28rem,100vw - 2rem)}.w-\[min\(34rem\,calc\(100vw-2rem\)\)\]{width:min(34rem,100vw - 2rem)}.w-\[var\(--anchor-width\)\]{width:var(--anchor-width)}.w-auto{width:auto}.w-full{width:100%}.w-px{width:1px}.max-w-\(--skeleton-width\){max-width:var(--skeleton-width)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-6xl{max-width:var(--container-6xl)}.max-w-32{max-width:calc(var(--spacing) * 32)}.max-w-64{max-width:calc(var(--spacing) * 64)}.max-w-96{max-width:calc(var(--spacing) * 96)}.max-w-\[10rem\]{max-width:10rem}.max-w-\[20rem\]{max-width:20rem}.max-w-\[22rem\]{max-width:22rem}.max-w-\[24rem\]{max-width:24rem}.max-w-\[45\%\]{max-width:45%}.max-w-\[85\%\]{max-width:85%}.max-w-\[90vw\]{max-width:90vw}.max-w-full{max-width:100%}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.min-w-0{min-width:0}.min-w-5{min-width:calc(var(--spacing) * 5)}.min-w-48{min-width:calc(var(--spacing) * 48)}.min-w-\[10rem\]{min-width:10rem}.min-w-\[13rem\]{min-width:13rem}.min-w-\[14rem\]{min-width:14rem}.min-w-\[15rem\]{min-width:15rem}.min-w-\[16rem\]{min-width:16rem}.min-w-\[18rem\]{min-width:18rem}.min-w-\[19rem\]{min-width:19rem}.min-w-\[22rem\]{min-width:22rem}.flex-1{flex:1}.flex-auto{flex:auto}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.shrink-\[100\]{flex-shrink:100}.grow{flex-grow:1}.basis-96{flex-basis:calc(var(--spacing) * 96)}.basis-full{flex-basis:100%}.border-collapse{border-collapse:collapse}.-translate-x-1\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-x-px{--tw-translate-x:-1px;translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-0{--tw-translate-x:0;translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-2{--tw-translate-x:calc(var(--spacing) * 2);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-px{--tw-translate-x:1px;translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.-rotate-90{rotate:-90deg}.rotate-90{rotate:90deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.scroll-fade-b{--scroll-fade-size:min(12%, 2.5rem);-webkit-mask-image:linear-gradient(to bottom, #000 0, #000 calc(100% - var(--scroll-fade-b,0px)), transparent 100%);-webkit-mask-image:linear-gradient(to bottom, #000 0, #000 calc(100% - var(--scroll-fade-b,0px)), transparent 100%);-webkit-mask-image:linear-gradient(to bottom, #000 0, #000 calc(100% - var(--scroll-fade-b,0px)), transparent 100%);mask-image:linear-gradient(to bottom, #000 0, #000 calc(100% - var(--scroll-fade-b,0px)), transparent 100%);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}@supports (animation-timeline:scroll()){.scroll-fade-b{animation:1ms ease-in-out both scroll-fade-reveal-b;animation-timeline:scroll(self y);animation-range:calc(100% - 6rem) 100%}}@supports not (animation-timeline:scroll()){.scroll-fade-b{--scroll-fade-b:var(--scroll-fade-size)}}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-grab{cursor:grab}.cursor-pointer{cursor:pointer}.cursor-progress{cursor:progress}.touch-none{touch-action:none}.resize{resize:both}.resize-y{resize:vertical}.scrollbar-thin{scrollbar-width:thin;scrollbar-color:var(--muted-foreground) transparent}@supports (color:color-mix(in lab, red, red)){.scrollbar-thin{scrollbar-color:color-mix(in oklab, var(--muted-foreground) 40%, transparent) transparent}}.scrollbar-thin{scrollbar-width:thin}.scrollbar-gutter-stable{scrollbar-gutter:stable;scrollbar-gutter:stable}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.appearance-none{appearance:none}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.place-items-center{place-items:center}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-6{gap:calc(var(--spacing) * 6)}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * .5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(var(--spacing) * var(--tw-space-y-reverse));margin-block-end:calc(var(--spacing) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}.gap-x-1\.5{column-gap:calc(var(--spacing) * 1.5)}.gap-x-2{column-gap:calc(var(--spacing) * 2)}.gap-x-3{column-gap:calc(var(--spacing) * 3)}.gap-x-4{column-gap:calc(var(--spacing) * 4)}.gap-y-1{row-gap:var(--spacing)}.gap-y-2{row-gap:calc(var(--spacing) * 2)}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-border>:not(:last-child)){border-color:var(--border)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.overscroll-contain{overscroll-behavior:contain}.rounded{border-radius:var(--radius)}.rounded-\[4px\]{border-radius:4px}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-none{border-radius:0}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-r-0{border-right-style:var(--tw-border-style);border-right-width:0}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-\[var\(--color-border\)\]{border-color:var(--color-border)}.border-\[var\(--color-primary-foreground\)\]\/25{border-color:var(--color-primary-foreground)}@supports (color:color-mix(in lab, red, red)){.border-\[var\(--color-primary-foreground\)\]\/25{border-color:color-mix(in oklab, var(--color-primary-foreground) 25%, transparent)}}.border-\[var\(--color-primary-foreground\)\]\/30{border-color:var(--color-primary-foreground)}@supports (color:color-mix(in lab, red, red)){.border-\[var\(--color-primary-foreground\)\]\/30{border-color:color-mix(in oklab, var(--color-primary-foreground) 30%, transparent)}}.border-border,.border-border\/50{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.border-border\/50{border-color:color-mix(in oklab, var(--border) 50%, transparent)}}.border-danger\/30{border-color:var(--danger)}@supports (color:color-mix(in lab, red, red)){.border-danger\/30{border-color:color-mix(in oklab, var(--danger) 30%, transparent)}}.border-primary,.border-primary\/40{border-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.border-primary\/40{border-color:color-mix(in oklab, var(--primary) 40%, transparent)}}.border-primary\/60{border-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.border-primary\/60{border-color:color-mix(in oklab, var(--primary) 60%, transparent)}}.border-sidebar-border{border-color:var(--border)}.border-transparent{border-color:#0000}.border-l-transparent{border-left-color:#0000}.bg-\[var\(--color-border\)\]{background-color:var(--color-border)}.bg-\[var\(--color-card\)\]{background-color:var(--color-card)}.bg-\[var\(--color-danger\)\]{background-color:var(--color-danger)}.bg-\[var\(--color-muted\)\]{background-color:var(--color-muted)}.bg-\[var\(--color-primary\)\]{background-color:var(--color-primary)}.bg-accent,.bg-accent\/60{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.bg-accent\/60{background-color:color-mix(in oklab, var(--accent) 60%, transparent)}}.bg-background,.bg-background\/60{background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){.bg-background\/60{background-color:color-mix(in oklab, var(--background) 60%, transparent)}}.bg-background\/90{background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){.bg-background\/90{background-color:color-mix(in oklab, var(--background) 90%, transparent)}}.bg-background\/95{background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){.bg-background\/95{background-color:color-mix(in oklab, var(--background) 95%, transparent)}}.bg-black\/40{background-color:#0006}@supports (color:color-mix(in lab, red, red)){.bg-black\/40{background-color:color-mix(in oklab, var(--color-black) 40%, transparent)}}.bg-border{background-color:var(--border)}.bg-card{background-color:var(--card)}.bg-danger,.bg-danger\/10{background-color:var(--danger)}@supports (color:color-mix(in lab, red, red)){.bg-danger\/10{background-color:color-mix(in oklab, var(--danger) 10%, transparent)}}.bg-danger\/15{background-color:var(--danger)}@supports (color:color-mix(in lab, red, red)){.bg-danger\/15{background-color:color-mix(in oklab, var(--danger) 15%, transparent)}}.bg-foreground,.bg-foreground\/70{background-color:var(--foreground)}@supports (color:color-mix(in lab, red, red)){.bg-foreground\/70{background-color:color-mix(in oklab, var(--foreground) 70%, transparent)}}.bg-info{background-color:var(--info)}.bg-muted{background-color:var(--muted)}.bg-muted-foreground,.bg-muted-foreground\/40{background-color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.bg-muted-foreground\/40{background-color:color-mix(in oklab, var(--muted-foreground) 40%, transparent)}}.bg-muted\/20{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\/20{background-color:color-mix(in oklab, var(--muted) 20%, transparent)}}.bg-muted\/30{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\/30{background-color:color-mix(in oklab, var(--muted) 30%, transparent)}}.bg-muted\/40{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\/40{background-color:color-mix(in oklab, var(--muted) 40%, transparent)}}.bg-primary,.bg-primary\/15{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.bg-primary\/15{background-color:color-mix(in oklab, var(--primary) 15%, transparent)}}.bg-sidebar{background-color:var(--background)}.bg-sidebar-accent{background-color:var(--accent)}.bg-sidebar-border{background-color:var(--border)}.bg-success,.bg-success\/15{background-color:var(--success)}@supports (color:color-mix(in lab, red, red)){.bg-success\/15{background-color:color-mix(in oklab, var(--success) 15%, transparent)}}.bg-transparent{background-color:#0000}.bg-warning,.bg-warning\/10{background-color:var(--warning)}@supports (color:color-mix(in lab, red, red)){.bg-warning\/10{background-color:color-mix(in oklab, var(--warning) 10%, transparent)}}.bg-warning\/15{background-color:var(--warning)}@supports (color:color-mix(in lab, red, red)){.bg-warning\/15{background-color:color-mix(in oklab, var(--warning) 15%, transparent)}}.bg-gradient-to-b{--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-background{--tw-gradient-from:var(--background);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-transparent{--tw-gradient-to:transparent;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.fill-current{fill:currentColor}.p-0{padding:0}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:var(--spacing)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.p-px{padding:1px}.px-0{padding-inline:0}.px-1{padding-inline:var(--spacing)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-3\.5{padding-inline:calc(var(--spacing) * 3.5)}.px-4{padding-inline:calc(var(--spacing) * 4)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.pt-0\.5{padding-top:calc(var(--spacing) * .5)}.pt-1{padding-top:var(--spacing)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-2\.5{padding-top:calc(var(--spacing) * 2.5)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pt-24{padding-top:calc(var(--spacing) * 24)}.pr-1{padding-right:var(--spacing)}.pr-3{padding-right:calc(var(--spacing) * 3)}.pr-4{padding-right:calc(var(--spacing) * 4)}.pb-1{padding-bottom:var(--spacing)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pl-2{padding-left:calc(var(--spacing) * 2)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-4{padding-left:calc(var(--spacing) * 4)}.pl-11{padding-left:calc(var(--spacing) * 11)}.text-center{text-align:center}.text-left{text-align:left}.align-baseline{vertical-align:baseline}.align-middle{vertical-align:middle}.align-top{vertical-align:top}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-line{white-space:pre-line}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[var\(--color-background\)\]{color:var(--color-background)}.text-\[var\(--color-card-foreground\)\]{color:var(--color-card-foreground)}.text-\[var\(--color-muted-foreground\)\]{color:var(--color-muted-foreground)}.text-\[var\(--color-primary\)\]{color:var(--color-primary)}.text-\[var\(--color-primary-foreground\)\]{color:var(--color-primary-foreground)}.text-accent-foreground{color:var(--accent-foreground)}.text-background{color:var(--background)}.text-card-foreground{color:var(--card-foreground)}.text-current{color:currentColor}.text-danger{color:var(--danger)}.text-foreground{color:var(--foreground)}.text-info{color:var(--info)}.text-muted-foreground,.text-muted-foreground\/50{color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.text-muted-foreground\/50{color:color-mix(in oklab, var(--muted-foreground) 50%, transparent)}}.text-muted-foreground\/60{color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.text-muted-foreground\/60{color:color-mix(in oklab, var(--muted-foreground) 60%, transparent)}}.text-muted-foreground\/70{color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.text-muted-foreground\/70{color:color-mix(in oklab, var(--muted-foreground) 70%, transparent)}}.text-muted-foreground\/80{color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.text-muted-foreground\/80{color:color-mix(in oklab, var(--muted-foreground) 80%, transparent)}}.text-primary{color:var(--primary)}.text-primary-foreground{color:var(--primary-foreground)}.text-sidebar-accent-foreground{color:var(--accent-foreground)}.text-sidebar-foreground,.text-sidebar-foreground\/70{color:var(--foreground)}@supports (color:color-mix(in lab, red, red)){.text-sidebar-foreground\/70{color:color-mix(in oklab, var(--foreground) 70%, transparent)}}.text-success{color:var(--success)}.text-warning{color:var(--warning)}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.underline-offset-2{text-underline-offset:2px}.opacity-0{opacity:0}.opacity-35{opacity:.35}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-100{opacity:1}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-border)));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-sidebar-ring{--tw-ring-color:var(--primary)}.outline-hidden{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.outline-hidden{outline-offset:2px;outline:2px solid #0000}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur{--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-\[1px\]{--tw-backdrop-blur:blur(1px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition-\[left\,right\,width\]{transition-property:left,right,width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[margin\,opacity\,transform\]{transition-property:margin,opacity,transform;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[margin\,opacity\]{transition-property:margin,opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[translate\,scale\,opacity\]{transition-property:translate,scale,opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\,height\,padding\]{transition-property:width,height,padding;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\]{transition-property:width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.ease-linear{--tw-ease:linear;transition-timing-function:linear}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.group-focus-within\/menu-item\:opacity-100:is(:where(.group\/menu-item):focus-within *){opacity:1}@media (hover:hover){.group-hover\/menu-item\:opacity-100:is(:where(.group\/menu-item):hover *),.group-hover\/prompt\:opacity-100:is(:where(.group\/prompt):hover *),.group-hover\/row\:opacity-100:is(:where(.group\/row):hover *){opacity:1}.group-hover\/screen\:underline:is(:where(.group\/screen):hover *){text-decoration-line:underline}}.group-has-data-\[sidebar\=menu-action\]\/menu-item\:pr-8:is(:where(.group\/menu-item):has([data-sidebar=menu-action]) *){padding-right:calc(var(--spacing) * 8)}.group-data-\[collapsible\=icon\]\:-mt-8:is(:where(.group)[data-collapsible=icon] *){margin-top:calc(var(--spacing) * -8)}.group-data-\[collapsible\=icon\]\:hidden:is(:where(.group)[data-collapsible=icon] *){display:none}.group-data-\[collapsible\=icon\]\:size-8\!:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--spacing) * 8)!important;height:calc(var(--spacing) * 8)!important}.group-data-\[collapsible\=icon\]\:w-\(--sidebar-width-icon\):is(:where(.group)[data-collapsible=icon] *){width:var(--sidebar-width-icon)}.group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)\+\(--spacing\(4\)\)\)\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + (calc(var(--spacing) * 4)))}.group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)\+\(--spacing\(4\)\)\+2px\)\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + (calc(var(--spacing) * 4)) + 2px)}.group-data-\[collapsible\=icon\]\:overflow-hidden:is(:where(.group)[data-collapsible=icon] *){overflow:hidden}.group-data-\[collapsible\=icon\]\:p-0\!:is(:where(.group)[data-collapsible=icon] *){padding:0!important}.group-data-\[collapsible\=icon\]\:p-2\!:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing) * 2)!important}.group-data-\[collapsible\=icon\]\:opacity-0:is(:where(.group)[data-collapsible=icon] *){opacity:0}.group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.group)[data-collapsible=offcanvas] *){right:calc(var(--sidebar-width) * -1)}.group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.group)[data-collapsible=offcanvas] *){left:calc(var(--sidebar-width) * -1)}.group-data-\[collapsible\=offcanvas\]\:w-0:is(:where(.group)[data-collapsible=offcanvas] *){width:0}.group-data-\[collapsible\=offcanvas\]\:translate-x-0:is(:where(.group)[data-collapsible=offcanvas] *){--tw-translate-x:0;translate:var(--tw-translate-x) var(--tw-translate-y)}.group-data-\[side\=left\]\:-right-4:is(:where(.group)[data-side=left] *){right:calc(var(--spacing) * -4)}.group-data-\[side\=left\]\:border-r:is(:where(.group)[data-side=left] *){border-right-style:var(--tw-border-style);border-right-width:1px}.group-data-\[side\=right\]\:left-0:is(:where(.group)[data-side=right] *){left:0}.group-data-\[side\=right\]\:rotate-180:is(:where(.group)[data-side=right] *){rotate:180deg}.group-data-\[side\=right\]\:border-l:is(:where(.group)[data-side=right] *){border-left-style:var(--tw-border-style);border-left-width:1px}.group-data-\[variant\=floating\]\:rounded-lg:is(:where(.group)[data-variant=floating] *){border-radius:var(--radius-lg)}.group-data-\[variant\=floating\]\:border:is(:where(.group)[data-variant=floating] *){border-style:var(--tw-border-style);border-width:1px}.group-data-\[variant\=floating\]\:border-sidebar-border:is(:where(.group)[data-variant=floating] *){border-color:var(--border)}.group-data-\[variant\=floating\]\:shadow-sm:is(:where(.group)[data-variant=floating] *){--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}@media (hover:hover){.peer-hover\/menu-button\:text-sidebar-accent-foreground:is(:where(.peer\/menu-button):hover~*){color:var(--accent-foreground)}}.peer-data-\[active\=true\]\/menu-button\:text-sidebar-accent-foreground:is(:where(.peer\/menu-button)[data-active=true]~*){color:var(--accent-foreground)}.peer-data-\[size\=default\]\/menu-button\:top-1\.5:is(:where(.peer\/menu-button)[data-size=default]~*){top:calc(var(--spacing) * 1.5)}.peer-data-\[size\=lg\]\/menu-button\:top-2\.5:is(:where(.peer\/menu-button)[data-size=lg]~*){top:calc(var(--spacing) * 2.5)}.peer-data-\[size\=sm\]\/menu-button\:top-1:is(:where(.peer\/menu-button)[data-size=sm]~*){top:var(--spacing)}.marker\:text-muted-foreground ::marker{color:var(--muted-foreground)}.marker\:text-muted-foreground::marker{color:var(--muted-foreground)}.marker\:text-muted-foreground ::-webkit-details-marker{color:var(--muted-foreground)}.marker\:text-muted-foreground::-webkit-details-marker{color:var(--muted-foreground)}.placeholder\:text-muted-foreground::placeholder{color:var(--muted-foreground)}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:-inset-2:after{content:var(--tw-content);inset:calc(var(--spacing) * -2)}.after\:inset-y-0:after{content:var(--tw-content);inset-block:0}.after\:left-1\/2:after{content:var(--tw-content);left:50%}.after\:w-\[2px\]:after{content:var(--tw-content);width:2px}.group-data-\[collapsible\=offcanvas\]\:after\:left-full:is(:where(.group)[data-collapsible=offcanvas] *):after{content:var(--tw-content);left:100%}.first\:pt-0:first-child{padding-top:0}.last\:border-0:last-child{border-style:var(--tw-border-style);border-width:0}.last\:pb-0:last-child{padding-bottom:0}.empty\:hidden:empty{display:none}.focus-within\:border-muted-foreground\/40:focus-within{border-color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.focus-within\:border-muted-foreground\/40:focus-within{border-color:color-mix(in oklab, var(--muted-foreground) 40%, transparent)}}.focus-within\:ring-2:focus-within{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-within\:ring-\[var\(--color-primary\)\]:focus-within{--tw-ring-color:var(--color-primary)}@media (hover:hover){.hover\:border-primary\/50:hover{border-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.hover\:border-primary\/50:hover{border-color:color-mix(in oklab, var(--primary) 50%, transparent)}}.hover\:bg-\[var\(--color-accent\)\]:hover{background-color:var(--color-accent)}.hover\:bg-\[var\(--color-muted\)\]:hover{background-color:var(--color-muted)}.hover\:bg-accent:hover,.hover\:bg-accent\/40:hover{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-accent\/40:hover{background-color:color-mix(in oklab, var(--accent) 40%, transparent)}}.hover\:bg-accent\/60:hover{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-accent\/60:hover{background-color:color-mix(in oklab, var(--accent) 60%, transparent)}}.hover\:bg-background:hover{background-color:var(--background)}.hover\:bg-muted:hover{background-color:var(--muted)}.hover\:bg-muted-foreground\/70:hover{background-color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-muted-foreground\/70:hover{background-color:color-mix(in oklab, var(--muted-foreground) 70%, transparent)}}.hover\:bg-sidebar-accent:hover,.hover\:bg-sidebar-accent\/60:hover{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-sidebar-accent\/60:hover{background-color:color-mix(in oklab, var(--accent) 60%, transparent)}}.hover\:text-\[var\(--color-accent-foreground\)\]:hover{color:var(--color-accent-foreground)}.hover\:text-danger:hover{color:var(--danger)}.hover\:text-foreground:hover{color:var(--foreground)}.hover\:text-sidebar-accent-foreground:hover{color:var(--accent-foreground)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-80:hover{opacity:.8}.hover\:opacity-90:hover{opacity:.9}.hover\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-accent\)\)\]:hover{--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-accent)));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.hover\:group-data-\[collapsible\=offcanvas\]\:bg-sidebar:hover:is(:where(.group)[data-collapsible=offcanvas] *){background-color:var(--background)}.hover\:after\:bg-sidebar-border:hover:after{content:var(--tw-content);background-color:var(--border)}}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:bg-accent:focus-visible{background-color:var(--accent)}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\:ring-\[var\(--color-primary\)\]:focus-visible{--tw-ring-color:var(--color-primary)}.focus-visible\:ring-offset-1:focus-visible{--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.active\:cursor-grabbing:active{cursor:grabbing}.active\:bg-sidebar-accent:active{background-color:var(--accent)}.active\:text-sidebar-accent-foreground:active{color:var(--accent-foreground)}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-0:disabled{opacity:0}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-60:disabled{opacity:.6}.disabled\:opacity-100:disabled{opacity:1}:where([data-side=left]) .in-data-\[side\=left\]\:cursor-w-resize{cursor:w-resize}:where([data-side=right]) .in-data-\[side\=right\]\:cursor-e-resize{cursor:e-resize}.has-data-\[variant\=inset\]\:bg-sidebar:has([data-variant=inset]){background-color:var(--background)}.aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.data-autoscrolling\:scrollbar-quiet[data-autoscrolling]{scrollbar-color:transparent transparent}.data-\[active\=false\]\:pointer-events-none[data-active=false]{pointer-events:none}.data-\[active\=false\]\:scale-95[data-active=false]{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x) var(--tw-scale-y)}.data-\[active\=false\]\:opacity-0[data-active=false]{opacity:0}.data-\[active\=true\]\:translate-y-0[data-active=true]{--tw-translate-y:0;translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[active\=true\]\:scale-100[data-active=true]{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x) var(--tw-scale-y)}.data-\[active\=true\]\:bg-sidebar-accent[data-active=true]{background-color:var(--accent)}.data-\[active\=true\]\:font-medium[data-active=true]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.data-\[active\=true\]\:text-sidebar-accent-foreground[data-active=true]{color:var(--accent-foreground)}.data-\[active\=true\]\:opacity-100[data-active=true]{opacity:1}.data-\[checked\]\:translate-x-4[data-checked]{--tw-translate-x:calc(var(--spacing) * 4);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[checked\]\:border-primary[data-checked]{border-color:var(--primary)}.data-\[checked\]\:bg-primary[data-checked]{background-color:var(--primary)}.data-\[checked\]\:bg-primary-foreground[data-checked]{background-color:var(--primary-foreground)}.data-\[checked\]\:text-primary-foreground[data-checked]{color:var(--primary-foreground)}.data-\[direction\=end\]\:bottom-3[data-direction=end]{bottom:calc(var(--spacing) * 3)}.data-\[direction\=end\]\:data-\[active\=false\]\:translate-y-full[data-direction=end][data-active=false]{--tw-translate-y:100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[direction\=start\]\:top-3[data-direction=start]{top:calc(var(--spacing) * 3)}.data-\[direction\=start\]\:data-\[active\=false\]\:-translate-y-full[data-direction=start][data-active=false]{--tw-translate-y:-100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[highlighted\]\:bg-\[var\(--color-accent\)\][data-highlighted]{background-color:var(--color-accent)}.data-\[highlighted\]\:text-\[var\(--color-accent-foreground\)\][data-highlighted]{color:var(--color-accent-foreground)}.data-\[popup-open\]\:bg-\[var\(--color-accent\)\][data-popup-open]{background-color:var(--color-accent)}.data-\[popup-open\]\:bg-\[var\(--color-primary\)\][data-popup-open]{background-color:var(--color-primary)}.data-\[popup-open\]\:bg-muted[data-popup-open]{background-color:var(--muted)}.data-\[popup-open\]\:text-\[var\(--color-accent-foreground\)\][data-popup-open]{color:var(--color-accent-foreground)}.data-\[popup-open\]\:text-\[var\(--color-primary-foreground\)\][data-popup-open]{color:var(--color-primary-foreground)}.data-\[popup-open\]\:opacity-90[data-popup-open]{opacity:.9}.data-\[state\=open\]\:opacity-100[data-state=open]{opacity:1}@media (hover:hover){.data-\[state\=open\]\:hover\:bg-sidebar-accent[data-state=open]:hover{background-color:var(--accent)}.data-\[state\=open\]\:hover\:text-sidebar-accent-foreground[data-state=open]:hover{color:var(--accent-foreground)}}@media not all and (width>=48rem){.max-md\:order-last{order:9999}.max-md\:min-h-9{min-height:calc(var(--spacing) * 9)}.max-md\:min-w-0{min-width:0}.max-md\:flex-1{flex:1}.max-md\:basis-full{flex-basis:100%}.max-md\:grid-cols-\[minmax\(0\,1fr\)\]{grid-template-columns:minmax(0,1fr)}.max-md\:flex-wrap{flex-wrap:wrap}.max-md\:gap-x-2{column-gap:calc(var(--spacing) * 2)}.max-md\:gap-x-3{column-gap:calc(var(--spacing) * 3)}.max-md\:gap-y-0\.5{row-gap:calc(var(--spacing) * .5)}.max-md\:gap-y-1{row-gap:var(--spacing)}.max-md\:truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.max-md\:px-11{padding-inline:calc(var(--spacing) * 11)}.max-md\:py-1\.5{padding-block:calc(var(--spacing) * 1.5)}}@media not all and (width>=40rem){.max-sm\:hidden{display:none}}@media (width>=40rem){.sm\:col-span-2{grid-column:span 2/span 2}.sm\:flex{display:flex}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (width>=48rem){.md\:col-span-2{grid-column:span 2/span 2}.md\:block{display:block}.md\:flex{display:flex}.md\:h-9{height:calc(var(--spacing) * 9)}.md\:max-w-\[50\%\]{max-width:50%}.md\:flex-auto{flex:auto}.md\:shrink-0{flex-shrink:0}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:gap-2{gap:calc(var(--spacing) * 2)}.md\:gap-3{gap:calc(var(--spacing) * 3)}.md\:px-4{padding-inline:calc(var(--spacing) * 4)}.md\:opacity-0{opacity:0}.md\:peer-data-\[variant\=inset\]\:m-2:is(:where(.peer)[data-variant=inset]~*){margin:calc(var(--spacing) * 2)}.md\:peer-data-\[variant\=inset\]\:ml-0:is(:where(.peer)[data-variant=inset]~*){margin-left:0}.md\:peer-data-\[variant\=inset\]\:rounded-xl:is(:where(.peer)[data-variant=inset]~*){border-radius:var(--radius-xl)}.md\:peer-data-\[variant\=inset\]\:shadow-sm:is(:where(.peer)[data-variant=inset]~*){--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.md\:peer-data-\[variant\=inset\]\:peer-data-\[state\=collapsed\]\:ml-2:is(:where(.peer)[data-variant=inset]~*):is(:where(.peer)[data-state=collapsed]~*){margin-left:calc(var(--spacing) * 2)}.md\:after\:hidden:after{content:var(--tw-content);display:none}}@media (width>=64rem){.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}@container not (width>=28rem){.\@max-md\:hidden{display:none}}.\[\&\:\:-moz-range-thumb\]\:h-3\.5::-moz-range-thumb{height:calc(var(--spacing) * 3.5)}.\[\&\:\:-moz-range-thumb\]\:w-3\.5::-moz-range-thumb{width:calc(var(--spacing) * 3.5)}.\[\&\:\:-moz-range-thumb\]\:rounded-full::-moz-range-thumb{border-radius:3.40282e38px}.\[\&\:\:-moz-range-thumb\]\:border::-moz-range-thumb{border-style:var(--tw-border-style);border-width:1px}.\[\&\:\:-moz-range-thumb\]\:border-none::-moz-range-thumb{--tw-border-style:none;border-style:none}.\[\&\:\:-moz-range-thumb\]\:border-background::-moz-range-thumb{border-color:var(--background)}.\[\&\:\:-moz-range-thumb\]\:bg-foreground::-moz-range-thumb{background-color:var(--foreground)}.\[\&\:\:-moz-range-thumb\]\:shadow-sm::-moz-range-thumb{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.\[\&\:\:-moz-range-track\]\:border-none::-moz-range-track{--tw-border-style:none;border-style:none}.\[\&\:\:-moz-range-track\]\:bg-transparent::-moz-range-track{background-color:#0000}.\[\&\:\:-webkit-slider-runnable-track\]\:bg-transparent::-webkit-slider-runnable-track{background-color:#0000}.\[\&\:\:-webkit-slider-thumb\]\:h-3\.5::-webkit-slider-thumb{height:calc(var(--spacing) * 3.5)}.\[\&\:\:-webkit-slider-thumb\]\:w-3\.5::-webkit-slider-thumb{width:calc(var(--spacing) * 3.5)}.\[\&\:\:-webkit-slider-thumb\]\:appearance-none::-webkit-slider-thumb{appearance:none}.\[\&\:\:-webkit-slider-thumb\]\:rounded-full::-webkit-slider-thumb{border-radius:3.40282e38px}.\[\&\:\:-webkit-slider-thumb\]\:border::-webkit-slider-thumb{border-style:var(--tw-border-style);border-width:1px}.\[\&\:\:-webkit-slider-thumb\]\:border-background::-webkit-slider-thumb{border-color:var(--background)}.\[\&\:\:-webkit-slider-thumb\]\:bg-foreground::-webkit-slider-thumb{background-color:var(--foreground)}.\[\&\:\:-webkit-slider-thumb\]\:shadow-sm::-webkit-slider-thumb{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.\[\&\>button\]\:hidden>button{display:none}.\[\&\>span\:last-child\]\:truncate>span:last-child{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.\[\&\>svg\]\:size-4>svg{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\]\:text-sidebar-accent-foreground>svg{color:var(--accent-foreground)}[data-side=left][data-collapsible=offcanvas] .\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2{right:calc(var(--spacing) * -2)}[data-side=left][data-state=collapsed] .\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize{cursor:e-resize}[data-side=right][data-collapsible=offcanvas] .\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2{left:calc(var(--spacing) * -2)}[data-side=right][data-state=collapsed] .\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize{cursor:w-resize}}:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--background:#fff;--foreground:#3a4248;--card:#fff;--card-foreground:#3a4248;--muted:#f3f5f2;--muted-foreground:#66756c;--border:#e3e7e1;--primary:#6f7f00;--primary-foreground:#fff;--accent:#eef1ec;--accent-foreground:#3a4248;--success:#6f7f00;--warning:#9a6b00;--danger:#d1403d;--info:#2b7ba5;--logo-1:#0a0a0a;--logo-2:#171717;--logo-3:#262626;--logo-4:#404040;--logo-5:#525252;--logo-6:#737373}.dark{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--background:#2d353b;--foreground:#d3c6aa;--card:#232a2e;--card-foreground:#d3c6aa;--muted:#343f44;--muted-foreground:#9da9a0;--border:#475258;--primary:#a7c080;--primary-foreground:#2d353b;--accent:#343f44;--accent-foreground:#d3c6aa;--success:#a7c080;--warning:#dbbc7f;--danger:#e67e80;--info:#7fbbb3;--logo-1:#fafafa;--logo-2:#ededed;--logo-3:#d4d4d4;--logo-4:#a3a3a3;--logo-5:#8a8a8a;--logo-6:#737373}body{background-color:var(--background);color:var(--foreground)}.rail-title{white-space:nowrap;overflow:hidden}.rail-title.is-overflowing{-webkit-mask-image:linear-gradient(90deg,#000 calc(100% - 3rem),#0000);mask-image:linear-gradient(90deg,#000 calc(100% - 3rem),#0000)}.rail-fade{opacity:0}@supports (animation-timeline:scroll()){.rail-fade{animation:1ms linear both rail-fade-appear;animation-timeline:scroll(y);animation-range:0 1.5rem}}@keyframes rail-fade-appear{to{opacity:1}}.text-shimmer{background:linear-gradient(90deg, var(--muted-foreground) 35%, var(--foreground) 50%, var(--muted-foreground) 65%) 0 0 / 250% 100%;color:#0000;-webkit-background-clip:text;background-clip:text;animation:2s linear infinite text-shimmer}@keyframes text-shimmer{0%{background-position:100% 0}to{background-position:-66% 0}}.dot-wave{gap:3px;display:inline-flex}.dot-wave>span{background:currentColor;border-radius:9999px;width:4px;height:4px;animation:1.2s ease-in-out infinite dot-wave}.dot-wave>span:nth-child(2){animation-delay:.15s}.dot-wave>span:nth-child(3){animation-delay:.3s}@keyframes dot-wave{0%,60%,to{opacity:.35;transform:translateY(0)}30%{opacity:1;transform:translateY(-3px)}}@media (prefers-reduced-motion:reduce){.text-shimmer{color:inherit;background:0 0;animation:none}.dot-wave>span{animation:none}}.pe-prose{white-space:pre-wrap;word-break:break-word}.pe-prose p{margin:0}.pe-prose p+p,.pe-prose ul,.pe-prose ol,.pe-prose pre,.pe-prose blockquote{margin-top:.4rem}.pe-prose ul{padding-left:1.25rem;list-style:outside}.pe-prose ol{padding-left:1.25rem;list-style:decimal}.pe-prose h1,.pe-prose h2,.pe-prose h3{margin-top:.5rem;font-weight:600}.pe-prose code{background:var(--muted);border-radius:.25rem;padding:.05rem .3rem;font-size:.85em}.pe-prose pre{background:var(--muted);border-radius:.375rem;padding:.5rem .6rem;overflow-x:auto}.pe-prose pre code{background:0 0;padding:0}.pe-prose blockquote{border-left:2px solid var(--border);color:var(--muted-foreground);padding-left:.6rem}.pe-token{font-family:var(--font-mono);white-space:nowrap;border:1px solid #0000;border-radius:.3rem;align-items:center;padding:0 .3rem;font-size:.8em;line-height:1.4;display:inline-flex}.pe-token[data-token=project]{background:var(--accent);color:var(--accent-foreground);border-color:var(--border)}.pe-token[data-token=file]{background:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.pe-token[data-token=file]{background:color-mix(in oklab, var(--muted-foreground) 12%, transparent)}}.pe-token[data-token=file]{color:var(--foreground);border-color:var(--border)}.ProseMirror-selectednode.pe-token{outline:2px solid var(--primary)}@property --scroll-fade-b{syntax:"<length-percentage>";inherits:false;initial-value:0}@keyframes scroll-fade-reveal-b{0%{--scroll-fade-b:var(--scroll-fade-size)}to{--scroll-fade-b:0px}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"<length-percentage>";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"<length-percentage>";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"<length-percentage>";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}