@timqi/pier 0.0.21 → 0.0.23

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 (84) hide show
  1. package/README.md +4 -5
  2. package/dist/agent/config-sync.js +124 -92
  3. package/dist/boards/boards.js +6 -2
  4. package/dist/db.js +12 -3
  5. package/dist/main.js +14 -14
  6. package/dist/service.js +17 -7
  7. package/dist/settings.js +0 -26
  8. package/dist/tasks/callbacks.js +1 -1
  9. package/dist/tasks/definitions.js +4 -0
  10. package/dist/tasks/groups.js +2 -1
  11. package/dist/tasks/service.js +14 -4
  12. package/dist/tasks/tool.js +70 -13
  13. package/dist/web/auth.js +1 -22
  14. package/dist/web/fs.js +2 -2
  15. package/dist/web/instance.js +6 -12
  16. package/dist/web/public/assets/activity-atEIVnGA.js +5 -0
  17. package/dist/web/public/assets/activity-atEIVnGA.js.br +0 -0
  18. package/dist/web/public/assets/activity-atEIVnGA.js.gz +0 -0
  19. package/dist/web/public/assets/{boards-DMVbV84c.js → boards-DSkfMEvN.js} +1 -1
  20. package/dist/web/public/assets/boards-DSkfMEvN.js.br +0 -0
  21. package/dist/web/public/assets/boards-DSkfMEvN.js.gz +0 -0
  22. package/dist/web/public/assets/{code-C86xKk2k.js → code-1nUOCxAb.js} +1 -1
  23. package/dist/web/public/assets/explorer-CS1kLPMl.js +5 -0
  24. package/dist/web/public/assets/explorer-CS1kLPMl.js.br +0 -0
  25. package/dist/web/public/assets/explorer-CS1kLPMl.js.gz +0 -0
  26. package/dist/web/public/assets/index-DP1-BW-q.css +2 -0
  27. package/dist/web/public/assets/index-DP1-BW-q.css.br +0 -0
  28. package/dist/web/public/assets/index-DP1-BW-q.css.gz +0 -0
  29. package/dist/web/public/assets/index-a7A8xfoi.js +83 -0
  30. package/dist/web/public/assets/index-a7A8xfoi.js.br +0 -0
  31. package/dist/web/public/assets/index-a7A8xfoi.js.gz +0 -0
  32. package/dist/web/public/assets/runs-bHSlJwXk.js +1 -0
  33. package/dist/web/public/assets/runs-bHSlJwXk.js.br +0 -0
  34. package/dist/web/public/assets/runs-bHSlJwXk.js.gz +0 -0
  35. package/dist/web/public/assets/settings-CrC-yuXh.js +6 -0
  36. package/dist/web/public/assets/settings-CrC-yuXh.js.br +0 -0
  37. package/dist/web/public/assets/settings-CrC-yuXh.js.gz +0 -0
  38. package/dist/web/public/assets/task-runs-C2PHAhAf.js +3 -0
  39. package/dist/web/public/assets/task-runs-C2PHAhAf.js.br +0 -0
  40. package/dist/web/public/assets/task-runs-C2PHAhAf.js.gz +0 -0
  41. package/dist/web/public/assets/tasks-7S90iYr1.js +4 -0
  42. package/dist/web/public/assets/tasks-7S90iYr1.js.br +0 -0
  43. package/dist/web/public/assets/tasks-7S90iYr1.js.gz +0 -0
  44. package/dist/web/public/index.html +16 -24
  45. package/dist/web/public/index.html.br +0 -0
  46. package/dist/web/public/index.html.gz +0 -0
  47. package/dist/web/server.js +4 -4
  48. package/docs/deploy.md +23 -15
  49. package/package.json +2 -9
  50. package/skills/pier-tasks/SKILL.md +24 -13
  51. package/dist/web/public/assets/__vite-browser-external-2447137e-BvRk9kiK.js +0 -0
  52. package/dist/web/public/assets/activity-Cw0LRVNI.js +0 -5
  53. package/dist/web/public/assets/activity-Cw0LRVNI.js.br +0 -0
  54. package/dist/web/public/assets/activity-Cw0LRVNI.js.gz +0 -0
  55. package/dist/web/public/assets/boards-DMVbV84c.js.br +0 -0
  56. package/dist/web/public/assets/boards-DMVbV84c.js.gz +0 -0
  57. package/dist/web/public/assets/explorer-DTvsy5Rs.js +0 -5
  58. package/dist/web/public/assets/explorer-DTvsy5Rs.js.br +0 -0
  59. package/dist/web/public/assets/explorer-DTvsy5Rs.js.gz +0 -0
  60. package/dist/web/public/assets/ghostty-web-CvSZragH.js +0 -13
  61. package/dist/web/public/assets/ghostty-web-CvSZragH.js.br +0 -0
  62. package/dist/web/public/assets/ghostty-web-CvSZragH.js.gz +0 -0
  63. package/dist/web/public/assets/index-DHxoYoeq.js +0 -79
  64. package/dist/web/public/assets/index-DHxoYoeq.js.br +0 -0
  65. package/dist/web/public/assets/index-DHxoYoeq.js.gz +0 -0
  66. package/dist/web/public/assets/index-DuZ2vERd.css +0 -2
  67. package/dist/web/public/assets/index-DuZ2vERd.css.br +0 -0
  68. package/dist/web/public/assets/index-DuZ2vERd.css.gz +0 -0
  69. package/dist/web/public/assets/runs-jY40JBP-.js +0 -1
  70. package/dist/web/public/assets/runs-jY40JBP-.js.br +0 -0
  71. package/dist/web/public/assets/runs-jY40JBP-.js.gz +0 -0
  72. package/dist/web/public/assets/settings-Dux7PIKF.js +0 -6
  73. package/dist/web/public/assets/settings-Dux7PIKF.js.br +0 -0
  74. package/dist/web/public/assets/settings-Dux7PIKF.js.gz +0 -0
  75. package/dist/web/public/assets/task-runs-DKvtBVxS.js +0 -3
  76. package/dist/web/public/assets/task-runs-DKvtBVxS.js.br +0 -0
  77. package/dist/web/public/assets/task-runs-DKvtBVxS.js.gz +0 -0
  78. package/dist/web/public/assets/tasks-CqfrOVIt.js +0 -4
  79. package/dist/web/public/assets/tasks-CqfrOVIt.js.br +0 -0
  80. package/dist/web/public/assets/tasks-CqfrOVIt.js.gz +0 -0
  81. package/dist/web/public/assets/terminal-DL_0yEy7.js +0 -2
  82. package/dist/web/public/assets/terminal-DL_0yEy7.js.br +0 -0
  83. package/dist/web/public/assets/terminal-DL_0yEy7.js.gz +0 -0
  84. package/dist/web/terminal.js +0 -369
@@ -1,3 +1,4 @@
1
+ import { isAbsolute, resolve } from "node:path";
1
2
  import { Type } from "typebox";
2
3
  import { TaskDefinitions, record, requiredString } from "./definitions.js";
3
4
  import { TaskMessenger } from "./messages.js";
@@ -57,10 +58,14 @@ const summarizeGroup = (group, members, messages) => defined({
57
58
  winnerRunId: group.winnerRunId,
58
59
  members: members.map((run) => trimResult(summarize(run, messages.openDecisionId(run.id)))),
59
60
  });
61
+ const LaunchSchema = Type.Object({
62
+ model: Type.Optional(Type.Object({ provider: Type.String(), id: Type.String() })),
63
+ thinking: Type.Optional(Type.String()),
64
+ });
60
65
  // Model-facing draft shape. Guidance only: runtime truth stays in parseDraft,
61
66
  // so schema drift can never loosen boundary validation.
62
67
  const DraftSchema = Type.Object({
63
- name: Type.String(),
68
+ name: Type.Optional(Type.String({ description: "Defaults to the prompt's first line." })),
64
69
  description: Type.Optional(Type.String()),
65
70
  trigger: Type.Optional(Type.Union([
66
71
  Type.Object({ type: Type.Literal("manual") }),
@@ -77,14 +82,11 @@ const DraftSchema = Type.Object({
77
82
  Type.Object({
78
83
  type: Type.Literal("agent"),
79
84
  session: Type.Union([
80
- Type.Object({ mode: Type.Literal("fresh"), cwd: Type.String() }),
85
+ Type.Object({ mode: Type.Literal("fresh"), cwd: Type.Optional(Type.String({ description: "Absolute, or relative to your session's directory; omitted = your directory." })) }),
81
86
  Type.Object({ mode: Type.Literal("reuse"), sessionId: Type.String() }),
82
87
  ]),
83
88
  prompt: Type.String(),
84
- launch: Type.Optional(Type.Object({
85
- model: Type.Optional(Type.Object({ provider: Type.String(), id: Type.String() })),
86
- thinking: Type.Optional(Type.String()),
87
- })),
89
+ launch: Type.Optional(LaunchSchema),
88
90
  }),
89
91
  Type.Object({ type: Type.Literal("bash"), script: Type.String(), cwd: Type.String() }),
90
92
  Type.Object({ type: Type.Literal("task"), taskId: Type.String() }),
@@ -101,7 +103,7 @@ export function taskToolSpec(execute) {
101
103
  return {
102
104
  name: "task",
103
105
  label: "Pier Task",
104
- description: "Manage durable Pier tasks and subagents. Agent tasks run in a fresh session or a reused one. Run executes a stored task by task_id, a one-shot subagent from an inline task draft, or a core-joined fan-out via tasks[] with join all|first. Get accepts run_id, group_id, or task_id for that task's recent runs. Every operation returns immediately: results, group joins, and decision replies arrive as callback messages. Use steer/follow_up/resume for child control and contact/reply for supervisor decisions. models lists the deployment's model menu (operator pins with intent notes, else the live catalog).",
106
+ description: "Manage durable Pier tasks and subagents. Agent tasks run in a fresh session or a reused one. create files a definition the operator sees in the Console — only for schedules or roles you will run again; a one-off is run with a prompt. Run executes a stored task by task_id, a one-shot subagent from a prompt (shorthand: prompt + optional cwd/launch/name — cwd defaults to your own directory, relative paths resolve against it, name comes from the prompt) or from a full inline task draft, or a core-joined fan-out via tasks[] with join all|first. Get accepts run_id, group_id, or task_id for that task's recent runs. Every operation returns immediately: results, group joins, and decision replies arrive as callback messages. Use steer/follow_up/resume for child control and contact/reply for supervisor decisions. models lists the deployment's model menu (operator pins with intent notes, else the live catalog).",
105
107
  parameters: Type.Object({
106
108
  operation: strEnum("list", "create", "update", "run", "get", "cancel", "steer", "follow_up", "resume", "contact", "reply", "models"),
107
109
  task_id: Type.Optional(Type.String()),
@@ -111,13 +113,19 @@ export function taskToolSpec(execute) {
111
113
  message: Type.Optional(Type.String()),
112
114
  reason: Type.Optional(strEnum("progress", "decision")),
113
115
  session_mode: Type.Optional(strEnum("fresh")),
116
+ // The one-shot shorthand: a prompt is the whole delegation, and the
117
+ // fresh session in the caller's own directory is what it means.
118
+ prompt: Type.Optional(Type.String()),
119
+ cwd: Type.Optional(Type.String()),
120
+ launch: Type.Optional(LaunchSchema),
121
+ name: Type.Optional(Type.String()),
114
122
  task: Type.Optional(DraftSchema),
115
123
  // The same draft again, spelled out, cost more tokens in every session
116
124
  // than the whole rest of this contract. One copy is the guidance; this
117
125
  // one points at it, and `parseDraft` is what actually validates either.
118
126
  tasks: Type.Optional(Type.Unsafe({
119
127
  type: "array",
120
- description: "2+ entries, each either a task draft shaped exactly like `task`, or {task_id}.",
128
+ description: "2+ entries, each a prompt string, {prompt, cwd?, launch?, name?}, a task draft shaped exactly like `task`, or {task_id}.",
121
129
  items: { type: "object" },
122
130
  })),
123
131
  join: Type.Optional(strEnum("all", "first")),
@@ -140,12 +148,12 @@ export async function handleTaskTool(host, definitions, store, messages, raw, ca
140
148
  if (input.operation === "create") {
141
149
  if (active)
142
150
  throw new Error("subagents cannot create task definitions");
143
- return definitions.create(input.task, `session:${callerSessionId}`);
151
+ return definitions.create(await expandDraft(definitions, input.task, callerSessionId), `session:${callerSessionId}`);
144
152
  }
145
153
  if (input.operation === "update") {
146
154
  if (active)
147
155
  throw new Error("subagents cannot update task definitions");
148
- return definitions.update(requiredString(input.task_id, "task_id"), input.task);
156
+ return definitions.update(requiredString(input.task_id, "task_id"), await expandDraft(definitions, input.task, callerSessionId));
149
157
  }
150
158
  if (input.operation === "run") {
151
159
  if (Array.isArray(input.tasks)) {
@@ -158,7 +166,7 @@ export async function handleTaskTool(host, definitions, store, messages, raw, ca
158
166
  throw new Error("tasks[] needs at least 2 entries; use task for a single run");
159
167
  const resolved = [];
160
168
  for (const rawEntry of input.tasks) {
161
- const entry = record(rawEntry);
169
+ const entry = typeof rawEntry === "string" ? { prompt: rawEntry } : record(rawEntry);
162
170
  if (!entry)
163
171
  throw new Error("invalid tasks[] entry");
164
172
  resolved.push(entry.task_id === undefined
@@ -168,7 +176,7 @@ export async function handleTaskTool(host, definitions, store, messages, raw, ca
168
176
  const { group, runs } = host.runGroup(resolved, input.join === "first" ? "first" : "all", callerSessionId, active?.id ?? null, input.callback === "none" ? null : callerSessionId);
169
177
  return summarizeGroup(group, runs, messages);
170
178
  }
171
- const draft = input.task_id === undefined ? record(input.task) : undefined;
179
+ const draft = input.task_id === undefined ? inlineDraft(input) : undefined;
172
180
  const task = draft
173
181
  ? await resolveDraft(definitions, draft, active, callerSessionId)
174
182
  : resolveStored(definitions, input.task_id, active);
@@ -245,9 +253,58 @@ export async function handleTaskTool(host, definitions, store, messages, raw, ca
245
253
  }
246
254
  throw new Error("unknown task operation");
247
255
  }
256
+ /** A single run's draft: the top-level shorthand (`prompt` …) or `task`, never both. */
257
+ function inlineDraft(input) {
258
+ const { prompt, cwd, launch, name } = input;
259
+ if (prompt === undefined)
260
+ return record(input.task) ?? undefined;
261
+ if (input.task !== undefined)
262
+ throw new Error("use either prompt or task");
263
+ return { prompt, cwd, launch, name };
264
+ }
265
+ /** The prompt's first line, unmarked and cut short: a label for the Console,
266
+ * not an identifier — the run's id is what anything addresses. */
267
+ function nameFromPrompt(prompt) {
268
+ const line = prompt.split("\n")
269
+ .map((l) => l.replace(/^[\s#>*-]+/, "").replace(/[*_`]/g, "").replace(/\s+/g, " ").trim())
270
+ .find(Boolean) ?? "subagent";
271
+ return line.length > 60 ? `${line.slice(0, 59).trimEnd()}…` : line;
272
+ }
273
+ /**
274
+ * The shape a draft is validated in, from the shapes a caller may write it in.
275
+ * A `prompt` shorthand becomes a fresh Agent action; a fresh session's cwd
276
+ * resolves against the caller's own directory (and is that directory when
277
+ * omitted); a missing name is the prompt's first line. Everything the caller
278
+ * did spell out passes through untouched — parseDraft still judges it.
279
+ */
280
+ async function expandDraft(definitions, raw, callerSessionId) {
281
+ let draft = record(raw);
282
+ if (!draft)
283
+ return raw;
284
+ if (typeof draft.prompt === "string") {
285
+ if (draft.action !== undefined)
286
+ throw new Error("use either prompt (shorthand) or action");
287
+ const { prompt, cwd, launch, name, ...rest } = draft;
288
+ draft = { ...rest, name, action: { type: "agent", session: { mode: "fresh", cwd }, prompt, launch } };
289
+ }
290
+ const action = record(draft.action);
291
+ const session = record(action?.session);
292
+ if (action?.type === "agent" && session?.mode === "fresh" && (session.cwd === undefined || (typeof session.cwd === "string" && !isAbsolute(session.cwd)))) {
293
+ const base = await definitions.sessionCwd(callerSessionId);
294
+ if (!base)
295
+ throw new Error(`cwd ${session.cwd === undefined ? "omitted" : `"${session.cwd}" is relative`} and the calling session has no working directory; give an absolute path`);
296
+ draft = { ...draft, action: { ...action, session: { ...session, cwd: resolve(base, session.cwd ?? ".") } } };
297
+ }
298
+ if (draft.name === undefined && typeof action?.prompt === "string")
299
+ draft = { ...draft, name: nameFromPrompt(action.prompt) };
300
+ return draft;
301
+ }
248
302
  /** Inline one-shot subagent: persisted like any task (kind "subagent",
249
303
  * filtered from default lists) so runs stay auditable and resumable. */
250
- async function resolveDraft(definitions, draft, active, callerSessionId) {
304
+ async function resolveDraft(definitions, raw, active, callerSessionId) {
305
+ const draft = record(await expandDraft(definitions, raw, callerSessionId));
306
+ if (!draft)
307
+ throw new Error("task definition required");
251
308
  if (draft.trigger !== undefined && record(draft.trigger)?.type !== "manual") {
252
309
  throw new Error("inline subagent tasks must use a manual trigger");
253
310
  }
package/dist/web/auth.js CHANGED
@@ -289,8 +289,7 @@ function noteFailure(client) {
289
289
  failures.set(client, { count: 1, resetAt: Date.now() + WINDOW_MS });
290
290
  }
291
291
  /** Browsers name the source of unsafe requests. Compare hosts rather than
292
- * schemes because TLS commonly terminates at the reverse proxy. Shared by HTTP
293
- * and WebSocket so the password boundary cannot disagree with itself. */
292
+ * schemes because TLS commonly terminates at the reverse proxy. */
294
293
  function originMatches(origin, host) {
295
294
  if (!origin)
296
295
  return true; // curl and other non-browser clients
@@ -316,26 +315,6 @@ function sameOrigin(c) {
316
315
  * surface that belongs to one browser (its push subscription) names it the
317
316
  * same way, rather than parsing the cookie a second way. */
318
317
  export const sessionIdOf = (c) => (getCookie(c, COOKIE) ?? "").split(".")[0] ?? "";
319
- /** The same cookie + Origin boundary for a WebSocket upgrade, where no Hono
320
- * context exists before the handshake completes. The session id comes back
321
- * with the verdict: a socket outlives the request that opened it, so it has
322
- * to know which row signing out would close it. */
323
- export function upgradeAuthorized(store, req) {
324
- const raw = req.headers.cookie
325
- ?.split(";")
326
- .map((part) => part.trim())
327
- .find((part) => part.startsWith(`${COOKIE}=`))
328
- ?.slice(COOKIE.length + 1);
329
- const session = store.check(raw);
330
- if (!session)
331
- return undefined;
332
- const remote = req.socket.remoteAddress ?? "";
333
- const forwardedHeader = req.headers["x-forwarded-host"];
334
- const forwarded = loopback(remote) && typeof forwardedHeader === "string"
335
- ? forwardedHeader.split(",").at(-1)?.trim()
336
- : undefined;
337
- return originMatches(req.headers.origin, forwarded || req.headers.host) ? session.id : undefined;
338
- }
339
318
  /** Every route, in one place — no per-route opt-in to forget on the next one. */
340
319
  export function requireAuth(store) {
341
320
  return async (c, next) => {
package/dist/web/fs.js CHANGED
@@ -1,6 +1,6 @@
1
1
  // Every path the Console reaches on disk resolves here: the browse/read/mkdir
2
- // routes, the session attachments server.ts serves, and the pty's cwd all ask
3
- // the same question, and asked it four different ways until this file existed.
2
+ // routes and the session attachments server.ts serves all ask the same
3
+ // question, and asked it several different ways until this file existed.
4
4
  //
5
5
  // A `root` is any directory the process can read — sessions work in worktrees
6
6
  // and siblings of their cwd, and an owner already past the Console password
@@ -2,7 +2,7 @@
2
2
  // layer-1 secrets control, the browser's error reports. Nothing here touches
3
3
  // a session; server.ts stays the session/event surface.
4
4
  import { logger } from "../log.js";
5
- import { normalizeModelMenu, normalizePublicUrl, normalizeTerminalInitCommand, } from "../settings.js";
5
+ import { normalizeModelMenu, normalizePublicUrl, } from "../settings.js";
6
6
  /** A rule that failed inside the transaction — its own class so the route can
7
7
  * tell it from a real fault. 400 when the request named something this Pier
8
8
  * does not have, 409 when it collided with the state as it stands. */
@@ -78,9 +78,9 @@ export function registerInstanceRoutes(app, deps) {
78
78
  problem: updater?.problem() ?? null,
79
79
  }));
80
80
  // Applying. Nothing is installed here: the work is handed to the service
81
- // manager's own oneshot unit, which stops Pier, backs the database up,
82
- // installs and starts Pier again — an npm child of this process would be
83
- // killed by the very restart it is performing.
81
+ // manager's own oneshot unit, which backs the database up and installs while
82
+ // Pier still runs, then stops it and starts the new version — an npm child of
83
+ // this process would be killed by the very restart it is performing.
84
84
  app.post("/api/update", async (c) => {
85
85
  if (!updater) {
86
86
  return c.json({ error: "no service manager owns this Pier — update it with: pier update" }, 409);
@@ -131,11 +131,11 @@ export function registerInstanceRoutes(app, deps) {
131
131
  app.put("/api/settings", async (c) => {
132
132
  const body = await c.req.json().catch(() => null);
133
133
  const fields = body
134
- ? [body.publicUrl, body.modelMenu, body.autoUpdate, body.terminalInitCommand, body.customTools, body.extension, body.tool]
134
+ ? [body.publicUrl, body.modelMenu, body.autoUpdate, body.customTools, body.extension, body.tool]
135
135
  : [];
136
136
  if (!fields.some((v) => v !== undefined)) {
137
137
  return c.json({
138
- error: "publicUrl, modelMenu, autoUpdate, terminalInitCommand, customTools, extension or tool required",
138
+ error: "publicUrl, modelMenu, autoUpdate, customTools, extension or tool required",
139
139
  }, 400);
140
140
  }
141
141
  // Everything is validated before anything is written, and everything is
@@ -163,12 +163,6 @@ export function registerInstanceRoutes(app, deps) {
163
163
  return refuse("autoUpdate must be a boolean");
164
164
  writes.push(() => settings.setAutoUpdate(autoUpdate));
165
165
  }
166
- if (body?.terminalInitCommand !== undefined) {
167
- const command = normalizeTerminalInitCommand(body.terminalInitCommand);
168
- if (command === null)
169
- return refuse("terminalInitCommand must be one line of at most 500 characters");
170
- writes.push(() => settings.setTerminalInitCommand(command));
171
- }
172
166
  /** The blocks this request declares, or null when it does not touch them.
173
167
  * Adding a tool is declaring it *and* switching it on, so a name declared
174
168
  * here is switchable in the same write. */
@@ -0,0 +1,5 @@
1
+ import{F as e,G as t,I as n,M as r,O as i,R as a,S as o,V as s,_ as c,p as l,z as u}from"./index-a7A8xfoi.js";var d=(e,t={})=>{let n=document.createElementNS(`http://www.w3.org/2000/svg`,e);for(let[e,r]of Object.entries(t))n.setAttribute(e,r);return n},f=t=>t===null?`-`:e(Date.now()-t),p={light:{edge:`#a3a3a3`,callback:`#0891b2`,message:`#d97706`,scheduler:{fill:`#f5f3ff`,stroke:`#a78bfa`,text:`#5b21b6`},console:{fill:`#eff6ff`,stroke:`#93c5fd`,text:`#1d4ed8`},task:{fill:`#fffbeb`,stroke:`#fbbf24`,text:`#92400e`},process:{fill:`#f5f5f5`,stroke:`#a3a3a3`,text:`#525252`,dash:`4 3`},streaming:{fill:`#ffffff`,stroke:`#10b981`,text:`#262626`},idle:{fill:`#fafafa`,stroke:`#d4d4d4`,text:`#737373`}},dark:{edge:`#7a7a7a`,callback:`#3fc3dd`,message:`#e0a13a`,scheduler:{fill:`#2b2440`,stroke:`#7d63c9`,text:`#c9b8f5`},console:{fill:`#1f2a3d`,stroke:`#4a7fbf`,text:`#a8c8f0`},task:{fill:`#3a2f1c`,stroke:`#b8862a`,text:`#f0d49a`},process:{fill:`#262626`,stroke:`#5c5c5c`,text:`#a3a3a3`,dash:`4 3`},streaming:{fill:`#22302a`,stroke:`#10b981`,text:`#e5e5e5`},idle:{fill:`#212121`,stroke:`#4a4a4a`,text:`#9a9a9a`}}},m=()=>p[document.documentElement.dataset.theme===`dark`?`dark`:`light`];function h(e,p,h){let g=`sessions`,_=`active`,v={sessions:[],runs:[],messages:[]},y=``,b=u(async()=>{let r=_,i=await s(`/api/activity?scope=${r}`,`Failed to load activity`);if(!i.ok){y=``,e.replaceChildren(n(`p`,`p-4 text-[13px] text-red-600`,i.error));return}if(r!==_)return;let a=JSON.stringify(i.value);if(`${r}:${a}`===y)return;y=`${r}:${a}`;let o=i.value;v={...o,sessions:o.sessions.map(e=>({...e,title:t(e.title)}))},x()});function x(){let t=i(o([[`Sessions`,`sessions`],[`Relationships`,`dependencies`]],g,e=>{g=e,x()}),n(`span`,`ml-auto text-[11.5px] text-neutral-400`,`${v.sessions.length} sessions · ${v.runs.length} runs`),o([[`Current`,`active`],[`Last 24h`,`recent`]],_,e=>{_=e,x(),b()})),r=n(`div`,`min-h-0 flex-1 overflow-auto`);g===`sessions`?S(r):w(r),e.replaceChildren(t,r)}function S(e){let t=document.createElement(`table`);t.className=`w-full table-fixed text-left text-[12.5px]`,t.innerHTML=`<thead class="sticky top-0 bg-neutral-50 text-[10.5px] uppercase tracking-wide text-neutral-400 shadow-[inset_0_-1px_0_var(--color-neutral-200)]"><tr>
2
+ <th class="w-[50%] px-4 py-2 font-semibold md:w-[34%]">Session</th>
3
+ <th class="hidden w-[38%] px-2 py-2 font-semibold md:table-cell">Project</th>
4
+ <th class="px-2 py-2 font-semibold md:w-[14%]">State</th>
5
+ <th class="px-2 py-2 font-semibold">In state</th></tr></thead>`;let r=document.createElement(`tbody`);for(let e of v.sessions){let t=document.createElement(`tr`);t.className=`cursor-pointer border-b border-neutral-100 transition-colors hover:bg-neutral-50`,t.onclick=()=>p(e.id);let i=n(`button`,`block w-full cursor-pointer truncate text-left font-medium text-neutral-800`,e.title??a(e.cwd));i.setAttribute(`type`,`button`),i.title=`${e.id}\n${e.cwd}`,i.onclick=t=>{t.stopPropagation(),p(e.id)},t.append(n(`td`,`px-4 py-2.5`,i,n(`div`,`truncate font-mono text-[11px] text-neutral-400 md:hidden`,e.cwd||`-`)),n(`td`,`hidden truncate px-2 py-2.5 font-mono text-[11.5px] text-neutral-500 md:table-cell`,e.cwd||`-`),n(`td`,`px-2 py-2.5`,C(e.state)),n(`td`,`px-2 py-2.5 font-mono text-[11.5px] text-neutral-400`,f(e.stateSince))),r.append(t)}t.append(r),e.append(t),v.sessions.length||e.append(n(`div`,`p-4`,c(_===`active`?`No active sessions.`:`No sessions in the last 24 hours.`)))}function C(e){return e===`streaming`?l(e,`bg-emerald-50 text-emerald-700 ring-emerald-200`,`animate-pulse bg-emerald-500`):l(e,`bg-neutral-100 text-neutral-600 ring-neutral-200`,`bg-neutral-300`)}function w(e){let t=new Map,r=[],i=(e,n,r,i)=>{t.has(e)||t.set(e,{id:e,label:n,kind:r,state:i})};for(let e of v.sessions)i(e.id,e.title??e.id.slice(0,10),`session`,e.state);for(let e of v.runs){let t=e.invokedBySessionId??`scheduler`,n=e.targetSessionId??(e.context.definition.action.type===`bash`?`process:${e.id}`:`task:${e.id}`);i(t,t===`scheduler`?`Scheduler`:t.slice(0,10),t===`scheduler`?`scheduler`:`session`),i(n,e.targetSessionId?e.targetSessionId.slice(0,10):e.context.definition.action.type===`bash`?`Bash process`:`Task`,e.targetSessionId?`session`:e.context.definition.action.type===`bash`?`process`:`task`),r.push({from:t,to:n,run:e,kind:`invocation`}),e.callbackSessionId&&(i(e.callbackSessionId,e.callbackSessionId.slice(0,10),`session`),r.push({from:n,to:e.callbackSessionId,run:e,kind:`callback`}))}for(let e of v.messages){if(!e.fromSessionId||!e.toSessionId||e.fromSessionId===e.toSessionId)continue;let t=v.runs.find(t=>t.id===e.runId);if(t){for(let t of[e.fromSessionId,e.toSessionId])i(t,t===`console`?`Console`:t.slice(0,10),t===`console`?`console`:`session`);r.push({from:e.fromSessionId,to:e.toSessionId,run:t,kind:`message`})}}if(!t.size){e.append(n(`div`,`p-4`,c(_===`active`?`No active dependencies.`:`No dependencies in the last 24 hours.`)));return}let a=[...t.values()],o=new Set(r.map(e=>e.to)),s=new Map,l=a.filter(e=>!o.has(e.id)).map(e=>e.id);l.length||l.push(a[0].id);for(let e of l)s.set(e,0);for(;l.length;){let e=l.shift();for(let t of r)t.from!==e||s.has(t.to)||(s.set(t.to,s.get(e)+1),l.push(t.to))}for(let e of a)s.has(e.id)||s.set(e.id,0);let u=new Map;for(let e of a){let t=s.get(e.id);u.set(t,[...u.get(t)??[],e])}let f=Math.max(...u.keys())+1,g=Math.max(...[...u.values()].map(e=>e.length)),y=r.some(e=>e.from!==e.to&&s.get(e.from)===s.get(e.to))?40:0,b=56+f*180+(f-1)*110+y,x=56+g*46+(g-1)*30,S=new Map;for(let[e,t]of u)t.forEach((t,n)=>S.set(t.id,{x:28+e*290+90,y:28+n*76+23}));let C=d(`svg`,{width:String(b),height:String(x),viewBox:`0 0 ${b} ${x}`,class:`block`}),w=d(`defs`),T=m();for(let[e,t]of[[`activity-arrow`,T.edge],[`activity-arrow-cb`,T.callback],[`activity-arrow-msg`,T.message]]){let n=d(`marker`,{id:e,viewBox:`0 0 10 10`,refX:`9`,refY:`5`,markerWidth:`6`,markerHeight:`6`,orient:`auto-start-reverse`});n.append(d(`path`,{d:`M 0 0 L 10 5 L 0 10 z`,fill:t})),w.append(n)}C.append(w);let E=new Set;for(let e of r){let t=`${e.from}→${e.to}:${e.kind}`;if(E.has(t))continue;E.add(t);let n=S.get(e.from),r=S.get(e.to),i=d(`path`,{d:n.x===r.x?`M ${n.x+90} ${n.y} C ${n.x+90+46} ${n.y}, ${r.x+90+46} ${r.y}, ${r.x+90} ${r.y}`:(()=>{let e=r.x>n.x,t=n.x+(e?90:-90),i=r.x+(e?-90:90),a=Math.max(36,Math.abs(i-t)*.45)*(e?1:-1);return`M ${t} ${n.y} C ${t+a} ${n.y}, ${i-a} ${r.y}, ${i} ${r.y}`})(),fill:`none`,stroke:e.kind===`callback`?T.callback:e.kind===`message`?T.message:T.edge,"stroke-width":`1.5`,"marker-end":e.kind===`callback`?`url(#activity-arrow-cb)`:e.kind===`message`?`url(#activity-arrow-msg)`:`url(#activity-arrow)`});e.kind===`callback`&&i.setAttribute(`stroke-dasharray`,`6 5`),e.kind===`message`&&i.setAttribute(`stroke-dasharray`,`2 5`),i.classList.add(`cursor-pointer`),i.onclick=()=>h(e.run.id),C.append(i)}let D=/[\u1100-\u11FF\u2E80-\uA4CF\uAC00-\uD7A3\uF900-\uFAFF\uFE30-\uFE4F\uFF00-\uFF60\uFFE0-\uFFE6]/,O=(e,t)=>{let n=0;for(let r=0;r<e.length;r++)if(n+=D.test(e[r])?2:1,n>t)return`${e.slice(0,r)}…`;return e};for(let e of a){let t=S.get(e.id),n=e.kind===`session`?e.state===`streaming`?T.streaming:T.idle:T[e.kind],r=d(`g`,{transform:`translate(${t.x},${t.y})`});e.kind===`session`&&r.classList.add(`cursor-pointer`),r.onclick=()=>{e.kind===`session`&&p(e.id)};let i=d(`rect`,{x:`-90`,y:`-23`,width:`180`,height:`46`,rx:`8`,fill:n.fill,stroke:n.stroke,"stroke-width":e.kind===`session`&&e.state===`streaming`?`1.5`:`1`});n.dash&&i.setAttribute(`stroke-dasharray`,n.dash),r.append(i);let a=-78;if(e.kind===`session`){let t=d(`circle`,{cx:`-75`,cy:`0`,r:`3.5`,fill:n.stroke});if(e.state===`streaming`){let e=d(`animate`,{attributeName:`opacity`,values:`1;0.3;1`,dur:`1.6s`,repeatCount:`indefinite`});t.append(e)}r.append(t),a=-64}let o=d(`text`,{x:String(a),"text-anchor":`start`,"dominant-baseline":`middle`,"font-size":`11.5`,"font-weight":e.kind===`session`?`500`:`400`,fill:n.text});o.textContent=O(e.label,e.kind===`session`?22:25);let s=d(`title`);s.textContent=e.label===e.id?e.id:`${e.label}\n${e.id}`,r.append(o,s),C.append(r)}let k=e=>n(`span`,`inline-block h-2 w-2 rounded-full ${e}`),A=e=>n(`span`,`inline-block h-0 w-6 border-t-2 ${e}`);e.append(n(`div`,`w-max p-4`,C),n(`div`,`flex flex-wrap gap-x-5 gap-y-1.5 border-t border-neutral-200 bg-neutral-50/60 px-4 py-2 text-[11px] text-neutral-500`,n(`span`,`inline-flex items-center gap-2`,A(`border-solid border-neutral-400`),`task invocation`),n(`span`,`inline-flex items-center gap-2 text-cyan-700`,A(`border-dashed border-cyan-500`),`callback`),n(`span`,`inline-flex items-center gap-2 text-amber-700`,A(`border-dotted border-amber-500`),`supervisor / control`),n(`span`,`inline-flex items-center gap-1.5`,k(`bg-emerald-500`),`streaming`),n(`span`,`inline-flex items-center gap-1.5`,k(`bg-neutral-300`),`idle`)))}let T=r(e,e=>{e===`dependencies`?g=`dependencies`:e===`sessions`&&(g=`sessions`),b()},()=>{e.replaceChildren(),v={sessions:[],runs:[],messages:[]},y=``});return window.addEventListener(`pier:theme`,()=>{T.visible&&x()}),Object.assign(T,{refresh(){T.visible&&b()}})}export{h as createActivityView};
@@ -1 +1 @@
1
- import{B as e,G as t,I as n,L as r,M as i,N as a,O as o,V as s,W as c,h as l}from"./index-DHxoYoeq.js";var u=e=>e.public&&e.token?`/p/${e.slug}-${e.token}/`:`/boards/${e.slug}/`;function d(d,f){let p=[],m=``,h=n(`header`,`sticky top-0 z-30 flex h-10 items-center gap-3 border-b border-neutral-200 bg-white px-4`,n(`span`,`font-medium max-md:hidden`,`Boards`)),g=n(`div`,`px-4 py-5`);d.append(n(`div`,`min-h-0 flex-1 overflow-y-auto`,h,g));async function _(n,r){let i=await t(`/api/boards/${n.slug}`,{public:r},`PATCH`);if(i.ok)return n.token=(await i.json().catch(()=>({}))).token??``,x();m=await e(i,`Could not change ${n.slug}`),await S()}async function v(e){m=await c(`/api/boards/${e}`,`DELETE`,`Could not delete ${e}`)??``,await S()}function y(e){let t=n(`div`,`group flex flex-col gap-1 border-b border-neutral-200/70 px-1 py-2.5 last:border-b-0`),i=document.createElement(`a`);i.className=`truncate font-medium text-neutral-800 hover:text-indigo-700`,i.href=u(e),i.target=`_blank`,i.rel=`noreferrer`,i.textContent=e.title;let s=n(`div`,`flex items-center gap-2`,i,n(`span`,`flex-none font-mono text-[11.5px] text-neutral-400`,e.slug)),c=o(``,``,e.public,t=>{e.public=t,_(e,t)});c.className=`ml-auto flex flex-none cursor-pointer items-center gap-1.5 text-[11.5px] text-neutral-500`,c.append(n(`span`,``,`Public`));let d=l(`Delete`,`flex-none cursor-pointer text-[11.5px] text-neutral-400 opacity-0 transition-opacity hover:text-red-600 group-hover:opacity-100`);d.title=`Renames the folder on disk; nothing is erased`,d.onclick=()=>void v(e.slug);let p=a(`flex-none cursor-pointer text-[11.5px] text-neutral-400 opacity-0 transition-opacity hover:text-indigo-600 group-hover:opacity-100`,()=>`${location.origin}${u(e)}`);p.title=`Copy the board's link`,s.append(c,p,d),t.append(s);let m=n(`div`,`flex flex-wrap items-center gap-x-3 gap-y-1 text-[11.5px] text-neutral-500`);e.description&&m.append(n(`span`,`min-w-0 truncate`,e.description)),m.append(n(`span`,`flex-none text-neutral-400`,r(Date.parse(e.updatedAt))));for(let t of e.sessions){let e=l(t.slice(0,8),`flex-none cursor-pointer font-mono text-indigo-600 hover:underline`);e.title=`Open session ${t}`,e.onclick=()=>f(t),m.append(e)}if(e.public&&e.token){let t=n(`span`,`flex-none font-mono text-neutral-400`,u(e));t.title=`Public URL — anyone holding this link can read the board, no password`,m.append(t)}return t.append(m),t}let b=[{title:`Public`,hint:`Readable at /p/<slug>-<token>/ by anyone holding the link.`,wanted:!0},{title:`Private`,hint:`Reachable from the Console only.`,wanted:!1}];function x(){let e=n(`div`,`mx-auto flex max-w-3xl flex-col`);p.length===0&&e.append(n(`p`,`rounded-xl border border-dashed border-neutral-300 px-4 py-6 text-center text-[12.5px] text-neutral-500`,`No boards yet. Ask an agent to build one — it writes a folder under ~/.pier/boards.`));for(let{title:t,hint:r,wanted:i}of b){let a=p.filter(e=>e.public===i);if(a.length===0)continue;let o=n(`section`,`mb-6`);o.append(n(`h2`,`text-[13px] font-semibold text-neutral-700`,t)),o.append(n(`p`,`mb-1 text-[11.5px] leading-snug text-neutral-500`,r));let s=n(`div`,`rounded-xl border border-neutral-200 bg-white px-3`);s.append(...a.map(y)),o.append(s),e.append(o)}g.replaceChildren(...m?[n(`p`,`mb-3 text-[13px] text-red-600`,m)]:[],e)}async function S(){let e=await s(`/api/boards`,`Could not load boards`);if(!e.ok)return m=e.error,x();p=e.value,x(),m=``}let C=i(d,()=>void S());return window.addEventListener(`focus`,()=>{C.visible&&S()}),C}export{d as createBoardsView};
1
+ import{B as e,D as t,I as n,L as r,M as i,N as a,U as o,V as s,W as c,m as l}from"./index-a7A8xfoi.js";var u=e=>e.public&&e.token?`/p/${e.slug}-${e.token}/`:`/boards/${e.slug}/`;function d(d,f){let p=[],m=``,h=n(`header`,`sticky top-0 z-30 flex h-10 items-center gap-3 border-b border-neutral-200 bg-white px-4`,n(`span`,`font-medium max-md:hidden`,`Boards`)),g=n(`div`,`px-4 py-5`);d.append(n(`div`,`min-h-0 flex-1 overflow-y-auto`,h,g));async function _(t,n){let r=await c(`/api/boards/${t.slug}`,{public:n},`PATCH`);if(r.ok)return t.token=(await r.json().catch(()=>({}))).token??``,x();m=await e(r,`Could not change ${t.slug}`),await S()}async function v(e){m=await o(`/api/boards/${e}`,`DELETE`,`Could not delete ${e}`)??``,await S()}function y(e){let i=n(`div`,`group flex flex-col gap-1 border-b border-neutral-200/70 px-1 py-2.5 last:border-b-0`),o=document.createElement(`a`);o.className=`truncate font-medium text-neutral-800 hover:text-indigo-700`,o.href=u(e),o.target=`_blank`,o.rel=`noreferrer`,o.textContent=e.title;let s=n(`div`,`flex items-center gap-2`,o,n(`span`,`flex-none font-mono text-[11.5px] text-neutral-400`,e.slug)),c=t(``,``,e.public,t=>{e.public=t,_(e,t)});c.className=`ml-auto flex flex-none cursor-pointer items-center gap-1.5 text-[11.5px] text-neutral-500`,c.append(n(`span`,``,`Public`));let d=l(`Delete`,`flex-none cursor-pointer text-[11.5px] text-neutral-400 opacity-0 transition-opacity hover:text-red-600 group-hover:opacity-100`);d.title=`Renames the folder on disk; nothing is erased`,d.onclick=()=>void v(e.slug);let p=a(`flex-none cursor-pointer text-[11.5px] text-neutral-400 opacity-0 transition-opacity hover:text-indigo-600 group-hover:opacity-100`,()=>`${location.origin}${u(e)}`);p.title=`Copy the board's link`,s.append(c,p,d),i.append(s);let m=n(`div`,`flex flex-wrap items-center gap-x-3 gap-y-1 text-[11.5px] text-neutral-500`);e.description&&m.append(n(`span`,`min-w-0 truncate`,e.description)),m.append(n(`span`,`flex-none text-neutral-400`,r(Date.parse(e.updatedAt))));for(let t of e.sessions){let e=l(t.slice(0,8),`flex-none cursor-pointer font-mono text-indigo-600 hover:underline`);e.title=`Open session ${t}`,e.onclick=()=>f(t),m.append(e)}if(e.public&&e.token){let t=n(`span`,`flex-none font-mono text-neutral-400`,u(e));t.title=`Public URL — anyone holding this link can read the board, no password`,m.append(t)}return i.append(m),i}let b=[{title:`Public`,hint:`Readable at /p/<slug>-<token>/ by anyone holding the link.`,wanted:!0},{title:`Private`,hint:`Reachable from the Console only.`,wanted:!1}];function x(){let e=n(`div`,`mx-auto flex max-w-3xl flex-col`);p.length===0&&e.append(n(`p`,`rounded-xl border border-dashed border-neutral-300 px-4 py-6 text-center text-[12.5px] text-neutral-500`,`No boards yet. Ask an agent to build one — it writes a folder under ~/.pier/boards.`));for(let{title:t,hint:r,wanted:i}of b){let a=p.filter(e=>e.public===i);if(a.length===0)continue;let o=n(`section`,`mb-6`);o.append(n(`h2`,`text-[13px] font-semibold text-neutral-700`,t)),o.append(n(`p`,`mb-1 text-[11.5px] leading-snug text-neutral-500`,r));let s=n(`div`,`rounded-xl border border-neutral-200 bg-white px-3`);s.append(...a.map(y)),o.append(s),e.append(o)}g.replaceChildren(...m?[n(`p`,`mb-3 text-[13px] text-red-600`,m)]:[],e)}async function S(){let e=await s(`/api/boards`,`Could not load boards`);if(!e.ok)return m=e.error,x();p=e.value,x(),m=``}let C=i(d,()=>void S());return window.addEventListener(`focus`,()=>{C.visible&&S()}),C}export{d as createBoardsView};
@@ -1 +1 @@
1
- import{I as e,u as t}from"./index-DHxoYoeq.js";var n=2e4,r=e=>e.map((e,t)=>({nums:[t+1],text:e,tone:``}));function i(t,r){let i=t.length<=n?r:null,o=Math.max(2,...t.map(e=>e.nums.reduce((e,t)=>Math.max(e,String(t).length),0))),s=e(`div`,`py-2 font-mono text-[12px] leading-[1.5]`);for(let n of t){let t=e(`div`,`flex pl-2 pr-4 ${n.tone===`add`?`bg-emerald-50`:n.tone===`del`?`bg-red-50`:``}`);for(let r of n.nums){let n=e(`span`,`flex-none select-none pr-1.5 text-right text-neutral-300`,r===``?``:String(r));n.style.width=`calc(${o}ch + 0.375rem)`,t.append(n)}t.append(a(n,i)),s.append(t)}return s}function a(n,r){let i=`min-w-0 flex-1 whitespace-pre-wrap [overflow-wrap:anywhere]`;if(!n.mark||n.mark[0]>=n.mark[1]){let e=t(n.text,r);return e.className=i,e}let[a,o]=n.mark,s=t(n.text.slice(a,o),r);return s.className=`rounded-xs ${n.tone===`add`?`bg-emerald-200/80`:`bg-red-200/70`}`,e(`span`,i,t(n.text.slice(0,a),r),s,t(n.text.slice(o),r))}export{r as n,i as t};
1
+ import{I as e,u as t}from"./index-a7A8xfoi.js";var n=2e4,r=e=>e.map((e,t)=>({nums:[t+1],text:e,tone:``}));function i(t,r){let i=t.length<=n?r:null,o=Math.max(2,...t.map(e=>e.nums.reduce((e,t)=>Math.max(e,String(t).length),0))),s=e(`div`,`py-2 font-mono text-[12px] leading-[1.5]`);for(let n of t){let t=e(`div`,`flex pl-2 pr-4 ${n.tone===`add`?`bg-emerald-50`:n.tone===`del`?`bg-red-50`:``}`);for(let r of n.nums){let n=e(`span`,`flex-none select-none pr-1.5 text-right text-neutral-300`,r===``?``:String(r));n.style.width=`calc(${o}ch + 0.375rem)`,t.append(n)}t.append(a(n,i)),s.append(t)}return s}function a(n,r){let i=`min-w-0 flex-1 whitespace-pre-wrap [overflow-wrap:anywhere]`;if(!n.mark||n.mark[0]>=n.mark[1]){let e=t(n.text,r);return e.className=i,e}let[a,o]=n.mark,s=t(n.text.slice(a,o),r);return s.className=`rounded-xs ${n.tone===`add`?`bg-emerald-200/80`:`bg-red-200/70`}`,e(`span`,i,t(n.text.slice(0,a),r),s,t(n.text.slice(o),r))}export{r as n,i as t};
@@ -0,0 +1,5 @@
1
+ import{H as e,I as t,L as n,M as r,P as i,a,i as o,j as s,l as c,n as l,s as u}from"./index-a7A8xfoi.js";import{n as d,t as f}from"./code-1nUOCxAb.js";var p=e=>{let t=new Date(e),n=e=>String(e).padStart(2,`0`);return`${t.getFullYear()}-${n(t.getMonth()+1)}-${n(t.getDate())} ${n(t.getHours())}:${n(t.getMinutes())}:${n(t.getSeconds())}`},m=e=>[e.subject,e.body,[[e.author,e.email?`<${e.email}>`:``].filter(Boolean).join(` `),e.at?p(e.at):``].filter(Boolean).join(` · `)].filter(Boolean).join(`
2
+
3
+ `),h=null;function g(){h&&(h.remove(),h=null,document.removeEventListener(`pointerdown`,g,!0),window.removeEventListener(`scroll`,g,!0))}function _(e,n){e.onmouseenter=()=>{g();let r=n();if(!r)return;h=t(`div`,`pointer-events-none fixed z-50 max-w-96 whitespace-pre-wrap rounded-lg bg-neutral-800/95 px-3 py-2 font-sans text-[11.5px] leading-snug text-neutral-100 shadow-lg`),h.textContent=r,document.body.append(h),document.addEventListener(`pointerdown`,g,!0),window.addEventListener(`scroll`,g,!0);let i=e.getBoundingClientRect();h.style.left=`${Math.max(8,Math.min(i.left,window.innerWidth-h.offsetWidth-8))}px`,h.style.top=i.bottom+6+h.offsetHeight>window.innerHeight?`${i.top-h.offsetHeight-6}px`:`${i.bottom+6}px`},e.onmouseleave=g}function v(e,r,i){let a=t(`button`,`flex w-full cursor-pointer items-center gap-1.5 px-2 py-1 text-left hover:bg-neutral-100`,t(`span`,`w-3 flex-none text-indigo-600`,e.value===r?`✓`:``),t(`span`,`flex-none font-mono text-[11.5px] text-neutral-800`,e.label??e.value));return e.subject&&a.append(t(`span`,`min-w-0 truncate text-[11px] text-neutral-400`,e.subject)),e.author&&a.append(t(`span`,`ml-auto flex-none pl-1.5 text-[10.5px] text-neutral-400`,`${e.author} · ${e.at?n(e.at):``}`)),_(a,()=>m(e)),a.onclick=()=>i(e.value),a}function ee(e,n,r,i,s){let{base:c,head:l}=r,u=()=>l&&c===`${l}~1`?l:``,d=u()?`commit`:`compare`,f=n.commits[0],p=e=>[...e?[{value:``,label:`Working tree`,subject:`the files on disk, uncommitted changes included`}]:[],{...f,value:`HEAD`},...n.refs.map(e=>({value:e.name,subject:e.subject})),...n.commits.map(e=>({...e,value:e.hash}))],m=t(`div`,`flex w-[38rem] max-w-full flex-col`);function h(){let e=(e,n)=>{let r=t(`button`,`cursor-pointer rounded-full px-2.5 py-0.5 text-[11.5px] ${d===n?`bg-indigo-50 font-medium text-indigo-700`:`text-neutral-500 hover:bg-neutral-100`}`,e);return r.onclick=()=>{d=n,h()},r},r=(e,n,r,i)=>t(`div`,`flex min-w-0 flex-1 flex-col`,t(`div`,`flex-none px-2 pb-0.5 text-[10.5px] font-semibold uppercase tracking-wide text-neutral-400`,e),t(`div`,`min-h-0 flex-1 overflow-y-auto`,...n.map(e=>v(e,r,i)))),a=d===`compare`?t(`div`,`flex h-72 min-h-0 divide-x divide-neutral-200 pb-1`,r(`base`,p(!1),c,e=>{c=e,h(),i(c,l)}),r(`to`,p(!0),l,e=>{l=e,h(),i(c,l)})):t(`div`,`flex h-72 min-h-0 flex-col overflow-y-auto pb-1`,...n.commits.map(e=>v({value:e.hash,...e},u(),e=>{c=`${e}~1`,l=e,o(),i(c,l)}))),f=t(`div`,`flex-none border-t border-neutral-200`,v({value:s,label:`↺ ${s} ↔ Working tree`,subject:`back to the default: the main line's tip vs the files on disk`},c===s&&l===``?s:``,()=>{c=s,l=``,h(),i(c,l)}));m.replaceChildren(t(`div`,`flex flex-none items-center gap-1 border-b border-neutral-200 px-2 py-1.5`,e(`Compare two points`,`compare`),e(`One commit`,`commit`)),a,...d===`compare`?[f]:[])}h(),a(e,m)}var te=/\.(png|jpe?g|gif|webp|avif|bmp|svg)$/i,ne={A:`text-emerald-600`,M:`text-amber-600`,D:`text-red-600`},re=30,y=`pier.filesPrefs`,b=50,x=()=>{try{let e=JSON.parse(localStorage.getItem(y)??`{}`);return e&&typeof e==`object`?e:{}}catch{return{}}},S=e=>{let t=e?x()[e]:void 0;return typeof t?.cwd==`string`&&typeof t.base==`string`&&typeof t.head==`string`?{cwd:t.cwd,base:t.base,head:t.head}:null},ie=(e,t)=>{let n=x();delete n[e],n[e]=t;let r=Object.keys(n);for(let e of r.slice(0,Math.max(0,r.length-b)))delete n[e];try{localStorage.setItem(y,JSON.stringify(n))}catch(e){console.warn(`Files: could not remember this folder`,e)}},C=(e,n=`indigo`)=>{let r=t(`button`,`min-w-0 cursor-pointer truncate rounded-md px-2 py-0.5 text-left font-mono text-[11.5px] ${n===`indigo`?`bg-indigo-50 font-medium text-indigo-700 hover:bg-indigo-100`:`bg-neutral-100 text-neutral-600 hover:bg-neutral-200`}`,e);return r.type=`button`,r};function w(n,a,o,p){let h=``,g=``,v={branch:null,refs:[],commits:[],worktrees:[]},y=`HEAD`,b=``,x=new Map,w=!0,T=!1,ae=[],E=new Set,D=null,O=null,k=t(`header`,`flex h-10 flex-none items-center gap-2 border-b border-neutral-200 bg-white px-3`),A=t(`div`,`flex-none border-b border-neutral-200`),j=t(`div`,`min-h-0 flex-1 overflow-y-auto py-1`),oe=t(`aside`,`flex w-64 flex-none flex-col border-r border-neutral-200 text-[12.5px] max-md:h-2/5 max-md:w-full max-md:border-b max-md:border-r-0`,A,j),M=t(`div`,`h-full min-w-0 overflow-auto`),N=t(`div`,`pointer-events-none absolute inset-y-0 right-0 z-20 hidden w-2`),se=t(`section`,`relative min-h-0 min-w-0 flex-1`,M,N);n.append(k,t(`div`,`flex min-h-0 flex-1 max-md:flex-col`,oe,se));let P=(e,t)=>`/api/explorer/${e}?${new URLSearchParams({root:h,...t})}`,F=(e,t)=>`/api/fs/${e}?${new URLSearchParams({root:h,...t})}`,I=(e,n=`text-neutral-400`)=>t(`p`,`px-4 py-3 text-[12.5px] ${n}`,e),L=e=>{let t=0;for(let n of x.keys())n.startsWith(`${e}/`)&&t++;return t};function R(e,t){let n=new Set(t.map(e=>e.name)),r=e?`${e}/`:``;for(let[e,i]of x){if(i.status!==`D`||!e.startsWith(r))continue;let a=e.slice(r.length).split(`/`)[0];n.has(a)||(n.add(a),t.push({name:a,dir:e.slice(r.length).includes(`/`)}))}let i=t;return w&&v.branch&&(i=t.filter(e=>e.dir?L(`${r}${e.name}`)>0:x.has(`${r}${e.name}`))),i.sort((e,t)=>Number(t.dir)-Number(e.dir)||e.name.localeCompare(t.name)),i.map(e=>e.dir?ce(`${r}${e.name}`,e.name):le(`${r}${e.name}`,e.name))}async function z(t,n){try{let{entries:r}=await e(F(`ls`,{path:n}),`could not list this folder`);t.replaceChildren(...R(n,r)),t.childElementCount||t.append(I(w?`No changes.`:`Empty.`))}catch(e){let r=R(n,[]);r.length?t.replaceChildren(...r):t.replaceChildren(I(String(e),`text-red-600`))}}function ce(e,n){let r=L(e),a=[t(`span`,`truncate`,n)];r&&a.push(t(`span`,`ml-auto flex-none rounded bg-amber-100/80 px-1 font-mono text-[10px] text-amber-700`,String(r)));let{el:o,summary:s}=i(``,a);s.className+=` px-2 py-0.5 hover:bg-neutral-100`;let c=t(`div`,`pl-3`);o.append(c);let l=!1,u=()=>{l||(l=!0,c.append(I(`…`)),z(c,e))};return o.ontoggle=()=>{E[o.open?`add`:`delete`](e),o.open&&u()},(w&&v.branch&&!T||E.has(e))&&(o.open=!0,u()),o}function B(e){O?.classList.remove(`bg-indigo-50`,`text-indigo-700`),O=e,e.classList.add(`bg-indigo-50`,`text-indigo-700`)}function le(e,n){let r=x.get(e)?.status,i=t(`button`,`flex w-full cursor-pointer items-center gap-1.5 px-2 py-0.5 pl-6 text-left hover:bg-neutral-100`,t(`span`,`truncate`,n));return r&&i.append(t(`span`,`ml-auto flex-none font-mono text-[10.5px] font-semibold ${ne[r]??`text-neutral-500`}`,r)),i.title=e,e===D&&B(i),i.onclick=()=>{B(i),D=e,de(e)},i}let V=()=>void z(j,``),H=(e,n)=>[...e?[t(`span`,`flex-none font-mono text-[10.5px] font-semibold text-emerald-600`,`+${e}`)]:[],...n?[t(`span`,`flex-none font-mono text-[10.5px] font-semibold text-red-600`,`−${n}`)]:[]];function U(e,n,r){let i=x.get(e),a=t(`div`,`sticky top-0 z-10 flex items-center gap-2 border-b border-neutral-200 bg-white px-4 py-1.5 font-mono text-[11.5px] text-neutral-500`,t(`span`,`truncate`,e));i&&(a.append(t(`span`,`flex-none font-semibold ${ne[i.status]??``}`,i.status)),a.append(...H(i.add,i.del)));let o=t(`div`,`ml-auto flex flex-none items-center gap-2`);if(r&&o.append(r),n){let t=document.createElement(`a`);t.className=`flex-none text-neutral-400 hover:text-indigo-700 hover:underline`,t.href=F(`file`,{path:e}),t.download=s(e),t.textContent=`Download`,o.append(t)}return a.append(o),a}function ue(e){let t=0;for(;t<e.length;){if(e[t].tone!==`del`){t++;continue}let n=t;for(;t<e.length&&e[t].tone===`del`;)t++;let r=t;for(;t<e.length&&e[t].tone===`add`;)t++;let i=Math.min(r-n,t-r);for(let t=0;t<i;t++){let i=e[n+t],a=e[r+t],o=Math.min(i.text.length,a.text.length),s=0;for(;s<o&&i.text[s]===a.text[s];)s++;let c=0;for(;c<o-s&&i.text[i.text.length-1-c]===a.text[a.text.length-1-c];)c++;s+c!==0&&(i.mark=[s,i.text.length-c],a.mark=[s,a.text.length-c])}}}let W=_e();function G(){N.classList.add(`hidden`),N.replaceChildren(),W.set([],[])}let K=0,q=e=>e===K;function de(e){let t=++K;return x.has(e)?ve(e,t):J(e,t)}async function J(e,n){if(!q(n))return;G();let r=F(`file`,{path:e}),i=t(`div`,`min-w-0`);if(M.classList.remove(`flex`,`flex-col`),M.replaceChildren(U(e,!0),i),te.test(e)){let e=t(`img`,`max-w-full p-4`);e.src=r,e.onerror=()=>i.replaceChildren(I(`Could not load image.`,`text-red-600`)),i.append(e);return}if(e.toLowerCase().endsWith(`.pdf`)){let t=document.createElement(`iframe`);t.className=`h-full w-full`,t.src=r,M.replaceChildren(U(e,!0),t),M.classList.add(`flex`,`flex-col`);return}i.append(I(`…`));let a=await fetch(r);if(!q(n))return;if(!a.ok){let{error:e}=await a.json().catch(()=>({}));i.replaceChildren(I(e??`HTTP ${a.status}`,`text-red-600`));return}if(!(a.headers.get(`content-type`)??``).startsWith(`text/plain`)){i.replaceChildren(I(`Binary file — use Download.`));return}let o=(await a.text()).split(`
4
+ `);if(!q(n))return;o.at(-1)===``&&o.pop();let s=await c(e);q(n)&&i.replaceChildren(f(d(o),s))}function fe(e){let t=[],n=0,r=0,i=!1,a=e.split(`
5
+ `);a.at(-1)===``&&a.pop();for(let e of a){let a=/^@@ -(\d+)(?:,\d+)? \+(\d+)(?:,\d+)? @@/.exec(e);if(a){i&&t.push({nums:[``,``],text:`⋯`,tone:``}),[n,r]=[Number(a[1]),Number(a[2])],i=!0;continue}!i||e.startsWith(`\\`)||(e.startsWith(`+`)?t.push({nums:[``,r++],text:e.slice(1),tone:`add`}):e.startsWith(`-`)?t.push({nums:[n++,``],text:e.slice(1),tone:`del`}):t.push({nums:[n++,r++],text:e.slice(1),tone:``}))}return t}function pe(e){let t=[];for(let n=0;n<e.length;n++){let r=e[n].tone;if(!r)continue;let i=t.at(-1);i&&i.end===n-1?(i.end=n,(r===`add`&&i.tone===`del`||r===`del`&&i.tone===`add`)&&(i.tone=`mixed`)):t.push({start:n,end:n,tone:r})}return t}let me={add:`bg-emerald-400`,del:`bg-red-400`,mixed:`bg-amber-400`};function he(e,n,r){N.replaceChildren(...e.map(e=>{let i=t(`button`,`pointer-events-auto absolute w-full cursor-pointer ${me[e.tone]}`);return i.style.top=`${e.start/n*100}%`,i.style.height=`${Math.max(.4,(e.end-e.start+1)/n*100)}%`,i.title=`line ${ge(r,e.start)}`,i.onclick=()=>r[e.start].scrollIntoView({block:`center`}),i})),N.classList.remove(`hidden`)}let ge=(e,t)=>e[t]?.querySelector(`span`)?.textContent?.trim()||String(t+1);function _e(){let e=[],r=[],i=-1,a=t(`span`,`flex-none text-[10.5px] text-neutral-400`),o=t=>{e.length&&(i=(i+t+e.length)%e.length,r[e[i].start].scrollIntoView({block:`center`}),a.textContent=`${i+1}/${e.length}`)},s=()=>e.length>0&&!n.classList.contains(`hidden`),c=(e,n,r,i)=>{let a=t(`button`,`icon-btn flex-none`,e);return a.onclick=()=>o(n),u(a,i,r,()=>o(n),s),a};return{el:t(`div`,`flex flex-none items-center gap-1`,a,c(`↑`,-1,`Previous change`,[`p`,`k`]),c(`↓`,1,`Next change`,[`n`,`j`])),set(t,n){e=t,r=n,i=-1,a.textContent=`${t.length} change${t.length===1?``:`s`}`}}}async function ve(t,n){G(),M.classList.remove(`flex`,`flex-col`);let r=x.get(t)?.status!==`D`;M.replaceChildren(U(t,r),I(`…`));try{let{diff:i}=await e(P(`diff`,{base:y,head:b,file:t,context:`99999`}),`could not read this diff`);if(!q(n))return;if(!i||/^Binary files /m.test(i))return J(t,n);let a=fe(i);ue(a);let o=await c(t);if(!q(n))return;let s=f(a,o),l=[...s.children],u=pe(a);W.set(u,l),M.replaceChildren(U(t,r,W.el),s),he(u,a.length,l)}catch(e){q(n)&&M.replaceChildren(U(t,!1),I(String(e),`text-red-600`))}}let Y=()=>b&&y===`${b}~1`?b:``,ye=()=>v.commits.find(e=>e.hash===Y())?.subject??``,be=()=>Y()?`${Y()} — ${ye()||`commit`}`:`${y} ↔ ${b||`working tree`}`,xe=(e,n,r,i)=>{let a=t(`button`,`flex h-6 w-6 flex-none cursor-pointer items-center justify-center rounded-md ${r?`bg-indigo-50 text-indigo-700`:`text-neutral-400 hover:bg-neutral-100 hover:text-neutral-700`}`);return a.innerHTML=e,a.title=n,a.onclick=i,a};function X(){let e=xe(`<svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" class="h-3.5 w-3.5"><path d="M2.5 3h11l-4.25 5v4.5l-2.5 1.25V8L2.5 3z" stroke-linejoin="round"/></svg>`,`Show only files that differ`,w,()=>{w=!w,X(),V()}),n=xe(`<svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" class="h-3.5 w-3.5"><path d="m4.5 2.5 3.5 3 3.5-3M4.5 13.5l3.5-3 3.5 3" stroke-linecap="round" stroke-linejoin="round"/></svg>`,T?`Restore folders`:`Collapse all folders`,T,()=>{if(T=!T,T)ae=[...E],E.clear();else for(let e of ae)E.add(e);X(),V()});if(!v.branch){A.replaceChildren(t(`div`,`flex items-center justify-end gap-1 p-1.5`,n));return}let r=C(be());if(Y()){let e=v.commits.find(e=>e.hash===Y());_(r,()=>e?m(e):``)}else r.title=`Choose what to diff`;r.onclick=async()=>{await Te(),ee(r,v,{base:y,head:b},(e,t)=>{y=e,b=t,Z()},$())};let[i,a]=[0,0];for(let e of x.values())i+=e.add,a+=e.del;A.replaceChildren(t(`div`,`flex flex-col gap-1 p-2`,r,t(`div`,`flex items-center gap-1.5 pl-1`,t(`span`,`text-[11px] text-neutral-400`,`${x.size} changed file${x.size===1?``:`s`}`),...H(i,a),t(`span`,`ml-auto`),e,n)))}let Se=()=>{g&&h&&ie(g,{cwd:h,base:y,head:b})},Ce=e=>{let t=e.replace(/~\d+$/,``);return!t||t===`HEAD`||v.refs.some(e=>e.name===t)||v.commits.some(e=>e.hash===t)};async function we(){if(x=new Map,!v.branch)return;let{files:t}=await e(P(`diff`,{base:y,head:b}),`could not read what changed`);for(let e of t)x.set(e.path,{status:e.status,add:e.add,del:e.del});if(x.size<=re)for(let e of x.keys()){let t=e.split(`/`);for(let e=1;e<t.length;e++)E.add(t.slice(0,e).join(`/`))}}async function Z(){Se();try{await we()}catch(e){X(),j.replaceChildren(I(String(e),`text-red-600`));return}X(),V(),D&&de(D)}function Q(){let e=C(h||`Choose a folder…`,`neutral`);e.className+=` max-w-72`,e.title=`Switch folder`,e.onclick=()=>l(e,v.worktrees.map(e=>({path:e.path,...e.branch?{hint:e.branch}:{}})),h||void 0,o);let n=t(`button`,`icon-btn`,`✕`);n.type=`button`,n.title=`Close Files`,n.setAttribute(`aria-label`,`Close Files`),n.onclick=p,n.classList.add(`ml-auto`),k.replaceChildren(e,t(`span`,`truncate font-mono text-[11.5px] text-neutral-400`,v.branch?`⎇ ${v.branch}`:`no git`),n)}async function Te(){if(h)try{v=await e(P(`git`,{}),`could not read this repository`),Q()}catch(e){M.replaceChildren(I(String(e),`text-red-600`))}}let $=()=>v.refs.some(e=>e.name===`main`)?`main`:v.refs.some(e=>e.name===`master`)?`master`:`HEAD`;async function Ee(){if(Q(),D=null,O=null,E.clear(),G(),M.classList.remove(`flex`,`flex-col`),M.replaceChildren(I(`Select a file.`)),!h){A.replaceChildren(),j.replaceChildren(),M.replaceChildren(I(`No folder yet — pick one from the chip above.`));return}try{v=await e(P(`git`,{}),`could not read this repository`)}catch(e){v={branch:null,refs:[],commits:[],worktrees:[]},M.replaceChildren(I(String(e),`text-red-600`))}let t=S(g),n=t&&t.cwd===h&&Ce(t.base)&&Ce(t.head)?t:null;y=n?.base??$(),b=n?.head??``,Q(),await Z()}return r(n,e=>{let t=a(),n=t?.id??``,r=e?.startsWith(`/`)?e:(n===g?h:``)||S(n)?.cwd||t?.cwd||``;if(r===h&&n===g&&j.childElementCount){Q(),Te().then(Z);return}g=n,h=r,Ee()},()=>{G(),M.classList.remove(`flex`,`flex-col`),M.replaceChildren(I(`Select a file.`))})}export{w as createExplorerView};
@@ -0,0 +1,2 @@
1
+ /*! tailwindcss v4.3.3 | 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-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-divide-x-reverse:0;--tw-border-style:solid;--tw-divide-y-reverse:0;--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-content:"";--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-duration:initial}}}@layer theme{:root,:host{--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-100:oklch(93.6% .032 17.717);--color-red-200:oklch(88.5% .062 18.334);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-amber-50:oklch(98.7% .022 95.277);--color-amber-100:oklch(96.2% .059 95.617);--color-amber-200:oklch(92.4% .12 95.746);--color-amber-300:oklch(87.9% .169 91.605);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-600:oklch(66.6% .179 58.318);--color-amber-700:oklch(55.5% .163 48.998);--color-green-50:oklch(98.2% .018 155.826);--color-green-500:oklch(72.3% .219 149.579);--color-green-700:oklch(52.7% .154 150.069);--color-emerald-50:oklch(97.9% .021 166.113);--color-emerald-100:oklch(95% .052 163.051);--color-emerald-200:oklch(90.5% .093 164.15);--color-emerald-400:oklch(76.5% .177 163.223);--color-emerald-500:oklch(69.6% .17 162.48);--color-emerald-600:oklch(59.6% .145 163.225);--color-emerald-700:oklch(50.8% .118 165.612);--color-cyan-50:oklch(98.4% .019 200.873);--color-cyan-500:oklch(71.5% .143 215.221);--color-cyan-700:oklch(52% .105 223.128);--color-sky-50:oklch(97.7% .013 236.62);--color-sky-200:oklch(90.1% .058 230.902);--color-sky-500:oklch(68.5% .169 237.323);--color-sky-700:oklch(50% .134 242.749);--color-blue-700:oklch(48.8% .243 264.376);--color-indigo-50:oklch(96.2% .018 272.314);--color-indigo-100:oklch(93% .034 272.788);--color-indigo-200:oklch(87% .065 274.039);--color-indigo-300:oklch(78.5% .115 274.713);--color-indigo-400:oklch(67.3% .182 276.935);--color-indigo-500:oklch(58.5% .233 277.117);--color-indigo-600:oklch(51.1% .262 276.966);--color-indigo-700:oklch(45.7% .24 277.023);--color-indigo-800:oklch(39.8% .195 277.366);--color-violet-50:oklch(96.9% .016 293.756);--color-violet-200:oklch(89.4% .057 293.283);--color-violet-700:oklch(49.1% .27 292.581);--color-neutral-50:oklch(98.5% 0 none);--color-neutral-100:oklch(97% 0 none);--color-neutral-200:oklch(92.2% 0 none);--color-neutral-300:oklch(87% 0 none);--color-neutral-400:oklch(70.8% 0 none);--color-neutral-500:oklch(55.6% 0 none);--color-neutral-600:oklch(43.9% 0 none);--color-neutral-700:oklch(37.1% 0 none);--color-neutral-800:oklch(26.9% 0 none);--color-neutral-900:oklch(20.5% 0 none);--color-neutral-950:oklch(14.5% 0 none);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-2xl:42rem;--container-3xl:48rem;--container-4xl:56rem;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-normal:0em;--tracking-wide:.025em;--tracking-widest:.1em;--leading-tight:1.25;--leading-snug:1.375;--leading-relaxed:1.625;--radius-xs:.125rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--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)}}@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,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, 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:where(:not(iframe)){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{.btn{cursor:pointer;border-radius:var(--radius-md);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-neutral-300);background-color:var(--color-white);padding-inline:calc(var(--spacing) * 3);padding-block:var(--spacing);--tw-shadow:0 1px var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);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))}@media (hover:hover){.btn:hover{background-color:var(--color-neutral-100)}}.btn:active{background-color:var(--color-neutral-200)}.btn:disabled{cursor:not-allowed;opacity:.45}@media (hover:hover){.btn:disabled:hover{background-color:var(--color-white)}}.btn-primary{border-color:var(--color-indigo-600);background-color:var(--color-indigo-600);color:var(--color-white);--tw-shadow-color:#4f39f633}@supports (color:color-mix(in lab, red, red)){.btn-primary{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-indigo-600) 20%, transparent) var(--tw-shadow-alpha), transparent)}}@media (hover:hover){.btn-primary:hover{background-color:var(--color-indigo-500)}}.btn-primary:active{background-color:var(--color-indigo-700)}.btn-primary:where([data-theme=dark],[data-theme=dark] *){color:var(--color-neutral-50)}.select{cursor:pointer;appearance:none;background-color:var(--color-white);padding-right:calc(var(--spacing) * 8);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));background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23737373' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'><path d='M4.5 6.25 8 9.75l3.5-3.5'/></svg>");background-position:right .5rem center;background-repeat:no-repeat;background-size:.9rem}.icon-btn{height:calc(var(--spacing) * 5);width:calc(var(--spacing) * 5);cursor:pointer;color:var(--color-neutral-400);border-radius:.25rem;flex:none;justify-content:center;align-items:center;display:flex}@media (hover:hover){.icon-btn:hover{background-color:var(--color-neutral-200);color:var(--color-neutral-700)}}.tabstrip{align-items:center;gap:var(--spacing);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--color-neutral-200);padding-inline:calc(var(--spacing) * 4);padding-block:calc(var(--spacing) * 2);white-space:nowrap;flex:none;display:flex;overflow-x:auto}@media not all and (width>=48rem){.tabstrip{row-gap:calc(var(--spacing) * 2);flex-wrap:wrap}}.lightbox-nav{height:calc(var(--spacing) * 10);width:calc(var(--spacing) * 10);--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y);cursor:pointer;background-color:#00000073;border-radius:2147483647px;justify-content:center;align-items:center;display:flex;position:absolute;top:50%}@supports (color:color-mix(in lab, red, red)){.lightbox-nav{background-color:color-mix(in oklab, var(--color-black) 45%, transparent)}}.lightbox-nav{--tw-leading:1;color:var(--color-white);font-size:1.5rem;line-height:1}@media (hover:hover){.lightbox-nav:hover{background-color:#000000b3}@supports (color:color-mix(in lab, red, red)){.lightbox-nav:hover{background-color:color-mix(in oklab, var(--color-black) 70%, transparent)}}}.lightbox-nav:where([data-theme=dark],[data-theme=dark] *){color:var(--color-neutral-950)}summary{list-style-type:none}summary::-webkit-details-marker{display:none}.chev{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));--tw-duration:.15s;flex:none;font-size:10px;transition-duration:.15s;display:inline-block}details[open]>summary .chev{transform:rotate(90deg)}.spinner{height:calc(var(--spacing) * 3);width:calc(var(--spacing) * 3);animation:var(--animate-spin);border-style:var(--tw-border-style);border-width:2px;border-color:#0000 currentColor currentColor;border-radius:2147483647px;flex:none}.skeleton{animation:var(--animate-pulse);background-color:var(--color-neutral-200);border-radius:.25rem}.thumb{height:calc(var(--spacing) * 16);width:calc(var(--spacing) * 16);cursor:zoom-in;border-radius:var(--radius-md);border-style:var(--tw-border-style);border-width:1px;border-color:#0000000d;display:inline-block}@supports (color:color-mix(in lab, red, red)){.thumb{border-color:color-mix(in oklab, var(--color-black) 5%, transparent)}}.thumb{background-color:#00000005}@supports (color:color-mix(in lab, red, red)){.thumb{background-color:color-mix(in oklab, var(--color-black) 2%, transparent)}}.thumb{object-fit:contain;vertical-align:middle}.thumb:where([data-theme=dark],[data-theme=dark] *){border-color:var(--color-neutral-200);background-color:var(--color-neutral-100)}.thumbs{margin-top:calc(var(--spacing) * 1.5);align-items:center;gap:calc(var(--spacing) * 1.5);flex-wrap:wrap;display:flex}.help code{background-color:var(--color-neutral-100);padding-inline:var(--spacing);font-family:var(--font-mono);color:var(--color-neutral-700);border-radius:.25rem;padding-block:1px;font-size:11.5px}.help a{color:var(--color-indigo-600);text-decoration-line:underline}.help em{font-style:italic}.md{color:var(--tw-prose-body);max-width:65ch}.md :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.md :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);margin-top:1.2em;margin-bottom:1.2em;font-size:1.25em;line-height:1.6}.md :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);font-weight:500;text-decoration:underline}.md :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.md :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)),.md :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)),.md :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.md :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em;list-style-type:decimal}.md :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.md :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.md :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.md :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.md :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.md :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.md :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.md :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.md :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.md :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em;list-style-type:disc}.md :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-counters);font-weight:400}.md :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.md :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.25em;font-weight:600}.md :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.md :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-quotes);border-inline-start-width:.25rem;border-inline-start-color:var(--tw-prose-quote-borders);quotes:"“""”""‘""’";margin-top:1.6em;margin-bottom:1.6em;padding-inline-start:1em;font-style:italic;font-weight:500}.md :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.md :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.md :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:0;margin-bottom:.888889em;font-size:2.25em;font-weight:800;line-height:1.11111}.md :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:900}.md :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:2em;margin-bottom:1em;font-size:1.5em;font-weight:700;line-height:1.33333}.md :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:800}.md :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.6em;margin-bottom:.6em;font-size:1.25em;font-weight:600;line-height:1.6}.md :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.md :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.5em;margin-bottom:.5em;font-weight:600;line-height:1.5}.md :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.md :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.md :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em;display:block}.md :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.md :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-kbd);box-shadow:0 0 0 1px var(--tw-prose-kbd-shadows), 0 3px 0 var(--tw-prose-kbd-shadows);padding-top:.1875em;padding-inline-end:.375em;padding-bottom:.1875em;border-radius:.3125rem;padding-inline-start:.375em;font-family:inherit;font-size:.875em;font-weight:500}.md :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-size:.875em;font-weight:600}.md :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before,.md :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:"`"}.md :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)),.md :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.md :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.md :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.md :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)),.md :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)),.md :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.md :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);padding-top:.857143em;padding-inline-end:1.14286em;padding-bottom:.857143em;border-radius:.375rem;margin-top:1.71429em;margin-bottom:1.71429em;padding-inline-start:1.14286em;font-size:.875em;font-weight:400;line-height:1.71429;overflow-x:auto}.md :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit;background-color:#0000;border-width:0;border-radius:0;padding:0}.md :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before,.md :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.md :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){table-layout:auto;width:100%;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.71429}.md :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.md :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);vertical-align:bottom;padding-inline-end:.571429em;padding-bottom:.571429em;padding-inline-start:.571429em;font-weight:600}.md :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.md :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.md :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.md :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.md :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.md :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}.md :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.md :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);margin-top:.857143em;font-size:.875em;line-height:1.42857}.md{--tw-prose-body:oklch(37.3% .034 259.733);--tw-prose-headings:oklch(21% .034 264.665);--tw-prose-lead:oklch(44.6% .03 256.802);--tw-prose-links:oklch(21% .034 264.665);--tw-prose-bold:oklch(21% .034 264.665);--tw-prose-counters:oklch(55.1% .027 264.364);--tw-prose-bullets:oklch(87.2% .01 258.338);--tw-prose-hr:oklch(92.8% .006 264.531);--tw-prose-quotes:oklch(21% .034 264.665);--tw-prose-quote-borders:oklch(92.8% .006 264.531);--tw-prose-captions:oklch(55.1% .027 264.364);--tw-prose-kbd:oklch(21% .034 264.665);--tw-prose-kbd-shadows:oklab(21% -.00316127 -.0338527/.1);--tw-prose-code:oklch(21% .034 264.665);--tw-prose-pre-code:oklch(92.8% .006 264.531);--tw-prose-pre-bg:oklch(27.8% .033 256.848);--tw-prose-th-borders:oklch(87.2% .01 258.338);--tw-prose-td-borders:oklch(92.8% .006 264.531);--tw-prose-invert-body:oklch(87.2% .01 258.338);--tw-prose-invert-lead:oklch(70.7% .022 261.325);--tw-prose-invert-counters:oklch(70.7% .022 261.325);--tw-prose-invert-bullets:oklch(44.6% .03 256.802);--tw-prose-invert-hr:oklch(37.3% .034 259.733);--tw-prose-invert-quotes:oklch(96.7% .003 264.542);--tw-prose-invert-quote-borders:oklch(37.3% .034 259.733);--tw-prose-invert-captions:oklch(70.7% .022 261.325);--tw-prose-invert-pre-code:oklch(87.2% .01 258.338);--tw-prose-invert-th-borders:oklch(44.6% .03 256.802);--tw-prose-invert-td-borders:oklch(37.3% .034 259.733);font-size:1rem;line-height:1.75}.md :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.md :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.md :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)),.md :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.md :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.md :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.md :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.md :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.md :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.md :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.md :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.md :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.md :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)),.md :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)),.md :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)),.md :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.md :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.md :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.md :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.571429em;padding-inline-end:.571429em;padding-bottom:.571429em;padding-inline-start:.571429em}.md :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.md :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.md :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.md :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.md :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.md{--tw-prose-body:var(--color-neutral-900);--tw-prose-headings:var(--color-neutral-900);--tw-prose-lead:oklch(43.9% 0 none);--tw-prose-links:var(--color-neutral-900);--tw-prose-bold:var(--color-neutral-900);--tw-prose-counters:oklch(55.6% 0 none);--tw-prose-bullets:oklch(87% 0 none);--tw-prose-hr:oklch(92.2% 0 none);--tw-prose-quotes:var(--color-neutral-900);--tw-prose-quote-borders:oklch(92.2% 0 none);--tw-prose-captions:oklch(55.6% 0 none);--tw-prose-kbd:var(--color-neutral-900);--tw-prose-kbd-shadows:#1717171a;--tw-prose-code:oklch(20.5% 0 none);--tw-prose-pre-code:oklch(92.2% 0 none);--tw-prose-pre-bg:oklch(26.9% 0 none);--tw-prose-th-borders:oklch(87% 0 none);--tw-prose-td-borders:oklch(92.2% 0 none);--tw-prose-invert-body:oklch(87% 0 none);--tw-prose-invert-headings:#fff;--tw-prose-invert-lead:oklch(70.8% 0 none);--tw-prose-invert-links:#fff;--tw-prose-invert-bold:#fff;--tw-prose-invert-counters:oklch(70.8% 0 none);--tw-prose-invert-bullets:oklch(43.9% 0 none);--tw-prose-invert-hr:oklch(37.1% 0 none);--tw-prose-invert-quotes:oklch(97% 0 none);--tw-prose-invert-quote-borders:oklch(37.1% 0 none);--tw-prose-invert-captions:oklch(70.8% 0 none);--tw-prose-invert-kbd:#fff;--tw-prose-invert-kbd-shadows:#ffffff1a;--tw-prose-invert-code:#fff;--tw-prose-invert-pre-code:oklch(87% 0 none);--tw-prose-invert-pre-bg:#00000080;--tw-prose-invert-th-borders:oklch(43.9% 0 none);--tw-prose-invert-td-borders:oklch(37.1% 0 none);max-width:none;font-size:inherit;line-height:inherit}@supports (color:color-mix(in lab, red, red)){.md{--tw-prose-kbd-shadows:color-mix(in oklab, var(--color-neutral-900) 10%, transparent)}}.md{--tw-prose-code:var(--color-neutral-900);--tw-prose-counters:var(--color-neutral-500);--tw-prose-captions:var(--color-neutral-500);--tw-prose-bullets:var(--color-neutral-300);--tw-prose-th-borders:var(--color-neutral-300);--tw-prose-hr:var(--color-neutral-200);--tw-prose-quote-borders:var(--color-neutral-200);--tw-prose-td-borders:var(--color-neutral-200)}.md p,.md ul,.md ol,.md pre,.md blockquote,.md table{margin-block:.5em}.md li{margin-block:.1em}.md li>p,.md :is(ul,ol) :is(ul,ol){margin-block:.2em}.md :first-child{margin-top:0}.md>:first-child:not(p,h1,h2,h3,h4,h5,h6){clear:left}.md :last-child{margin-bottom:0}.md :is(h1,h2,h3,h4,h5,h6){margin-block:.8em .2em;font-size:1em;font-weight:600;line-height:1.3}.md h1{font-size:1.22em}.md h2{font-size:1.12em}.md hr{margin-block:.9em}.md table{overscroll-behavior-x:contain;width:max-content;max-width:100%;display:block;overflow-x:auto}.md pre{border-radius:var(--radius-lg);border-style:var(--tw-border-style);border-width:1px;border-color:#0000000f;overflow-x:hidden}@supports (color:color-mix(in lab, red, red)){.md pre{border-color:color-mix(in oklab, var(--color-black) 6%, transparent)}}.md pre{background-color:#00000006}@supports (color:color-mix(in lab, red, red)){.md pre{background-color:color-mix(in oklab, var(--color-black) 2.5%, transparent)}}.md pre{padding-inline:calc(var(--spacing) * 3);padding-block:calc(var(--spacing) * 2);white-space:pre-wrap;font-size:13px}.md pre:where([data-theme=dark],[data-theme=dark] *){border-color:var(--color-neutral-200);background-color:var(--color-neutral-100)}.md pre{overflow-wrap:anywhere;color:var(--color-neutral-800)}.md pre code{white-space:inherit;overflow-wrap:inherit}.md :not(pre)>code{background-color:#0000000e;border-radius:.25rem}@supports (color:color-mix(in lab, red, red)){.md :not(pre)>code{background-color:color-mix(in oklab, var(--color-black) 5.5%, transparent)}}.md :not(pre)>code{padding-inline:var(--spacing);--tw-font-weight:var(--font-weight-normal);font-size:.9em;font-weight:var(--font-weight-normal);color:var(--color-neutral-800);padding-block:1px}.md :not(pre)>code:where([data-theme=dark],[data-theme=dark] *){background-color:var(--color-neutral-100)}.md :not(pre)>code:before,.md :not(pre)>code:after{content:none}.hljs-comment,.hljs-quote{color:var(--color-neutral-400);font-style:italic}.hljs-keyword,.hljs-literal,.hljs-selector-tag,.hljs-type{color:var(--color-violet-700)}.hljs-string,.hljs-regexp,.hljs-addition{color:var(--color-emerald-700)}.hljs-number,.hljs-symbol,.hljs-attr,.hljs-attribute,.hljs-meta{color:var(--color-amber-700)}.hljs-title,.hljs-section,.hljs-name{color:var(--color-blue-700)}.hljs-built_in,.hljs-variable,.hljs-template-variable{color:var(--color-cyan-700)}.hljs-deletion{color:var(--color-red-600)}.hljs-emphasis{font-style:italic}.hljs-strong{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}}@layer utilities{.pointer-events-auto{pointer-events:auto}.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-2{inset-inline:calc(var(--spacing) * 2)}.inset-y-0{inset-block:0}.-top-0\.5{top:calc(var(--spacing) * -.5)}.-top-1\.5{top:calc(var(--spacing) * -1.5)}.top-0{top:0}.top-1{top:var(--spacing)}.top-1\.5{top:calc(var(--spacing) * 1.5)}.top-full{top:100%}.-right-0\.5{right:calc(var(--spacing) * -.5)}.-right-1\.5{right:calc(var(--spacing) * -1.5)}.right-0{right:0}.right-1\.5{right:calc(var(--spacing) * 1.5)}.right-2{right:calc(var(--spacing) * 2)}.bottom-2{bottom:calc(var(--spacing) * 2)}.left-0{left:0}.left-2{left:calc(var(--spacing) * 2)}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.col-span-2{grid-column:span 2/span 2}.float-left{float:left}.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}}.m-4{margin:calc(var(--spacing) * 4)}.m-auto{margin:auto}.mx-3{margin-inline:calc(var(--spacing) * 3)}.mx-5{margin-inline:calc(var(--spacing) * 5)}.mx-auto{margin-inline:auto}.my-1{margin-block:var(--spacing)}.my-1\.5{margin-block:calc(var(--spacing) * 1.5)}.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);margin-top:1.2em;margin-bottom:1.2em;font-size:1.25em;line-height:1.6}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);font-weight:500;text-decoration:underline}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em;list-style-type:decimal}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em;list-style-type:disc}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-counters);font-weight:400}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.25em;font-weight:600}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-quotes);border-inline-start-width:.25rem;border-inline-start-color:var(--tw-prose-quote-borders);quotes:"“""”""‘""’";margin-top:1.6em;margin-bottom:1.6em;padding-inline-start:1em;font-style:italic;font-weight:500}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:0;margin-bottom:.888889em;font-size:2.25em;font-weight:800;line-height:1.11111}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:900}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:2em;margin-bottom:1em;font-size:1.5em;font-weight:700;line-height:1.33333}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:800}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.6em;margin-bottom:.6em;font-size:1.25em;font-weight:600;line-height:1.6}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.5em;margin-bottom:.5em;font-weight:600;line-height:1.5}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em;display:block}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-kbd);box-shadow:0 0 0 1px var(--tw-prose-kbd-shadows), 0 3px 0 var(--tw-prose-kbd-shadows);padding-top:.1875em;padding-inline-end:.375em;padding-bottom:.1875em;border-radius:.3125rem;padding-inline-start:.375em;font-family:inherit;font-size:.875em;font-weight:500}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-size:.875em;font-weight:600}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before,.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:"`"}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);padding-top:.857143em;padding-inline-end:1.14286em;padding-bottom:.857143em;border-radius:.375rem;margin-top:1.71429em;margin-bottom:1.71429em;padding-inline-start:1.14286em;font-size:.875em;font-weight:400;line-height:1.71429;overflow-x:auto}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit;background-color:#0000;border-width:0;border-radius:0;padding:0}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before,.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){table-layout:auto;width:100%;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.71429}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);vertical-align:bottom;padding-inline-end:.571429em;padding-bottom:.571429em;padding-inline-start:.571429em;font-weight:600}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);margin-top:.857143em;font-size:.875em;line-height:1.42857}.prose{--tw-prose-body:oklch(37.3% .034 259.733);--tw-prose-headings:oklch(21% .034 264.665);--tw-prose-lead:oklch(44.6% .03 256.802);--tw-prose-links:oklch(21% .034 264.665);--tw-prose-bold:oklch(21% .034 264.665);--tw-prose-counters:oklch(55.1% .027 264.364);--tw-prose-bullets:oklch(87.2% .01 258.338);--tw-prose-hr:oklch(92.8% .006 264.531);--tw-prose-quotes:oklch(21% .034 264.665);--tw-prose-quote-borders:oklch(92.8% .006 264.531);--tw-prose-captions:oklch(55.1% .027 264.364);--tw-prose-kbd:oklch(21% .034 264.665);--tw-prose-kbd-shadows:oklab(21% -.00316127 -.0338527/.1);--tw-prose-code:oklch(21% .034 264.665);--tw-prose-pre-code:oklch(92.8% .006 264.531);--tw-prose-pre-bg:oklch(27.8% .033 256.848);--tw-prose-th-borders:oklch(87.2% .01 258.338);--tw-prose-td-borders:oklch(92.8% .006 264.531);--tw-prose-invert-body:oklch(87.2% .01 258.338);--tw-prose-invert-headings:#fff;--tw-prose-invert-lead:oklch(70.7% .022 261.325);--tw-prose-invert-links:#fff;--tw-prose-invert-bold:#fff;--tw-prose-invert-counters:oklch(70.7% .022 261.325);--tw-prose-invert-bullets:oklch(44.6% .03 256.802);--tw-prose-invert-hr:oklch(37.3% .034 259.733);--tw-prose-invert-quotes:oklch(96.7% .003 264.542);--tw-prose-invert-quote-borders:oklch(37.3% .034 259.733);--tw-prose-invert-captions:oklch(70.7% .022 261.325);--tw-prose-invert-kbd:#fff;--tw-prose-invert-kbd-shadows:#ffffff1a;--tw-prose-invert-code:#fff;--tw-prose-invert-pre-code:oklch(87.2% .01 258.338);--tw-prose-invert-pre-bg:#00000080;--tw-prose-invert-th-borders:oklch(44.6% .03 256.802);--tw-prose-invert-td-borders:oklch(37.3% .034 259.733);font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.571429em;padding-inline-end:.571429em;padding-bottom:.571429em;padding-inline-start:.571429em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.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-\[3px\]{margin-top:3px}.mt-\[12vh\]{margin-top:12vh}.mr-auto{margin-right:auto}.mb-1{margin-bottom:var(--spacing)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.mb-auto{margin-bottom:auto}.ml-1{margin-left:var(--spacing)}.ml-1\.5{margin-left:calc(var(--spacing) * 1.5)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-auto{margin-left:auto}.block{display:block}.flex{display:flex}.flow-root{display:flow-root}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.h-0{height:0}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.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-10{height:calc(var(--spacing) * 10)}.h-11{height:calc(var(--spacing) * 11)}.h-12{height:calc(var(--spacing) * 12)}.h-16{height:calc(var(--spacing) * 16)}.h-24{height:calc(var(--spacing) * 24)}.h-72{height:calc(var(--spacing) * 72)}.h-dvh{height:100dvh}.h-full{height:100%}.max-h-24{max-height:calc(var(--spacing) * 24)}.max-h-40{max-height:calc(var(--spacing) * 40)}.max-h-48{max-height:calc(var(--spacing) * 48)}.max-h-56{max-height:calc(var(--spacing) * 56)}.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-\[6rem\]{max-height:6rem}.max-h-\[60vh\]{max-height:60vh}.max-h-\[65vh\]{max-height:65vh}.max-h-\[70dvh\]{max-height:70dvh}.max-h-\[70vh\]{max-height:70vh}.max-h-\[88vh\]{max-height:88vh}.max-h-\[92vh\]{max-height:92vh}.max-h-\[min\(18rem\,40dvh\)\]{max-height:min(18rem,40dvh)}.min-h-0{min-height:0}.min-h-10{min-height:calc(var(--spacing) * 10)}.\!w-48{width:calc(var(--spacing) * 48)!important}.\!w-auto{width:auto!important}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-1\/3{width:33.3333%}.w-2{width:calc(var(--spacing) * 2)}.w-2\/3{width:66.6667%}.w-2\/5{width:40%}.w-3{width:calc(var(--spacing) * 3)}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-3\/5{width:60%}.w-4{width:calc(var(--spacing) * 4)}.w-4\/5{width:80%}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-7{width:calc(var(--spacing) * 7)}.w-10{width:calc(var(--spacing) * 10)}.w-44{width:calc(var(--spacing) * 44)}.w-52{width:calc(var(--spacing) * 52)}.w-64{width:calc(var(--spacing) * 64)}.w-72{width:calc(var(--spacing) * 72)}.w-80{width:calc(var(--spacing) * 80)}.w-\[6rem\]{width:6rem}.w-\[10\%\]{width:10%}.w-\[17\%\]{width:17%}.w-\[23\%\]{width:23%}.w-\[35rem\]{width:35rem}.w-\[38\%\]{width:38%}.w-\[38\.75rem\]{width:38.75rem}.w-\[38rem\]{width:38rem}.w-\[42\%\]{width:42%}.w-\[45rem\]{width:45rem}.w-\[50\%\]{width:50%}.w-\[min\(24rem\,92vw\)\]{width:min(24rem,92vw)}.w-\[min\(27rem\,calc\(100vw-3rem\)\)\]{width:min(27rem,100vw - 3rem)}.w-\[min\(32rem\,92vw\)\]{width:min(32rem,92vw)}.w-fit{width:fit-content}.w-full{width:100%}.w-max{width:max-content}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-40{max-width:calc(var(--spacing) * 40)}.max-w-48{max-width:calc(var(--spacing) * 48)}.max-w-52{max-width:calc(var(--spacing) * 52)}.max-w-72{max-width:calc(var(--spacing) * 72)}.max-w-80{max-width:calc(var(--spacing) * 80)}.max-w-96{max-width:calc(var(--spacing) * 96)}.max-w-\[45\%\]{max-width:45%}.max-w-\[90vw\]{max-width:90vw}.max-w-\[92vw\]{max-width:92vw}.max-w-\[94vw\]{max-width:94vw}.max-w-\[min\(42rem\,calc\(100vw-1rem\)\)\]{max-width:min(42rem,100vw - 1rem)}.max-w-full{max-width:100%}.min-w-0{min-width:0}.min-w-3\.5{min-width:calc(var(--spacing) * 3.5)}.min-w-32{min-width:calc(var(--spacing) * 32)}.min-w-52{min-width:calc(var(--spacing) * 52)}.min-w-\[6\.5rem\]{min-width:6.5rem}.flex-1{flex:1}.flex-none{flex:none}.grow{flex-grow:1}.basis-0{flex-basis:0}.table-fixed{table-layout:fixed}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.cursor-default{cursor:default}.cursor-help{cursor:help}.cursor-pointer{cursor:pointer}.cursor-zoom-out{cursor:zoom-out}.resize{resize:both}.resize-none{resize:none}.resize-y{resize:vertical}.list-decimal{list-style-type:decimal}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-\[6rem_minmax\(0\,1fr\)\]{grid-template-columns:6rem minmax(0,1fr)}.grid-cols-\[auto_1fr\]{grid-template-columns:auto 1fr}.grid-cols-\[auto_minmax\(0\,1fr\)\]{grid-template-columns:auto minmax(0,1fr)}.grid-cols-\[minmax\(0\,1fr\)_auto\]{grid-template-columns:minmax(0,1fr) auto}.grid-cols-\[minmax\(8rem\,1fr\)_minmax\(8rem\,auto\)_minmax\(9rem\,auto\)\]{grid-template-columns:minmax(8rem,1fr) minmax(8rem,auto) minmax(9rem,auto)}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.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}.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)}.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-x-5{column-gap:calc(var(--spacing) * 5)}.gap-x-6{column-gap:calc(var(--spacing) * 6)}.gap-y-1{row-gap:var(--spacing)}.gap-y-1\.5{row-gap:calc(var(--spacing) * 1.5)}.gap-y-2{row-gap:calc(var(--spacing) * 2)}.gap-y-3\.5{row-gap:calc(var(--spacing) * 3.5)}:where(.divide-x>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px * var(--tw-divide-x-reverse));border-inline-end-width:calc(1px * calc(1 - var(--tw-divide-x-reverse)))}: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-neutral-100>:not(:last-child)){border-color:var(--color-neutral-100)}:where(.divide-neutral-200>:not(:last-child)){border-color:var(--color-neutral-200)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overscroll-contain{overscroll-behavior:contain}.rounded{border-radius:.25rem}.rounded-full{border-radius:2147483647px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-xs{border-radius:var(--radius-xs)}.rounded-t-xl{border-top-left-radius:var(--radius-xl);border-top-right-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-t-2{border-top-style:var(--tw-border-style);border-top-width:2px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-dotted{--tw-border-style:dotted;border-style:dotted}.border-solid{--tw-border-style:solid;border-style:solid}.border-amber-500{border-color:var(--color-amber-500)}.border-black\/5{border-color:#0000000d}@supports (color:color-mix(in lab, red, red)){.border-black\/5{border-color:color-mix(in oklab, var(--color-black) 5%, transparent)}}.border-black\/10{border-color:#0000001a}@supports (color:color-mix(in lab, red, red)){.border-black\/10{border-color:color-mix(in oklab, var(--color-black) 10%, transparent)}}.border-black\/\[0\.06\]{border-color:#0000000f}@supports (color:color-mix(in lab, red, red)){.border-black\/\[0\.06\]{border-color:color-mix(in oklab, var(--color-black) 6%, transparent)}}.border-black\/\[0\.08\]{border-color:#00000014}@supports (color:color-mix(in lab, red, red)){.border-black\/\[0\.08\]{border-color:color-mix(in oklab, var(--color-black) 8%, transparent)}}.border-cyan-500{border-color:var(--color-cyan-500)}.border-indigo-200{border-color:var(--color-indigo-200)}.border-indigo-300{border-color:var(--color-indigo-300)}.border-indigo-400{border-color:var(--color-indigo-400)}.border-indigo-500{border-color:var(--color-indigo-500)}.border-neutral-100{border-color:var(--color-neutral-100)}.border-neutral-200{border-color:var(--color-neutral-200)}.border-neutral-200\/70{border-color:#e5e5e5b3}@supports (color:color-mix(in lab, red, red)){.border-neutral-200\/70{border-color:color-mix(in oklab, var(--color-neutral-200) 70%, transparent)}}.border-neutral-300{border-color:var(--color-neutral-300)}.border-neutral-400{border-color:var(--color-neutral-400)}.border-red-200{border-color:var(--color-red-200)}.border-transparent{border-color:#0000}.border-l-amber-400{border-left-color:var(--color-amber-400)}.border-l-cyan-500{border-left-color:var(--color-cyan-500)}.border-l-green-500{border-left-color:var(--color-green-500)}.border-l-indigo-500{border-left-color:var(--color-indigo-500)}.border-l-neutral-300{border-left-color:var(--color-neutral-300)}.border-l-red-400{border-left-color:var(--color-red-400)}.border-l-red-500{border-left-color:var(--color-red-500)}.border-l-transparent{border-left-color:#0000}.bg-amber-50{background-color:var(--color-amber-50)}.bg-amber-100{background-color:var(--color-amber-100)}.bg-amber-100\/80{background-color:#fef3c6cc}@supports (color:color-mix(in lab, red, red)){.bg-amber-100\/80{background-color:color-mix(in oklab, var(--color-amber-100) 80%, transparent)}}.bg-amber-400{background-color:var(--color-amber-400)}.bg-amber-500{background-color:var(--color-amber-500)}.bg-black\/25{background-color:#00000040}@supports (color:color-mix(in lab, red, red)){.bg-black\/25{background-color:color-mix(in oklab, var(--color-black) 25%, transparent)}}.bg-black\/\[0\.04\]{background-color:#0000000a}@supports (color:color-mix(in lab, red, red)){.bg-black\/\[0\.04\]{background-color:color-mix(in oklab, var(--color-black) 4%, transparent)}}.bg-black\/\[0\.05\]{background-color:#0000000d}@supports (color:color-mix(in lab, red, red)){.bg-black\/\[0\.05\]{background-color:color-mix(in oklab, var(--color-black) 5%, transparent)}}.bg-black\/\[0\.025\]{background-color:#00000006}@supports (color:color-mix(in lab, red, red)){.bg-black\/\[0\.025\]{background-color:color-mix(in oklab, var(--color-black) 2.5%, transparent)}}.bg-cyan-50{background-color:var(--color-cyan-50)}.bg-emerald-50{background-color:var(--color-emerald-50)}.bg-emerald-200\/80{background-color:#a4f4cfcc}@supports (color:color-mix(in lab, red, red)){.bg-emerald-200\/80{background-color:color-mix(in oklab, var(--color-emerald-200) 80%, transparent)}}.bg-emerald-400{background-color:var(--color-emerald-400)}.bg-emerald-500{background-color:var(--color-emerald-500)}.bg-green-500{background-color:var(--color-green-500)}.bg-indigo-50{background-color:var(--color-indigo-50)}.bg-indigo-50\/70{background-color:#eef2ffb3}@supports (color:color-mix(in lab, red, red)){.bg-indigo-50\/70{background-color:color-mix(in oklab, var(--color-indigo-50) 70%, transparent)}}.bg-indigo-100{background-color:var(--color-indigo-100)}.bg-indigo-600{background-color:var(--color-indigo-600)}.bg-neutral-50{background-color:var(--color-neutral-50)}.bg-neutral-50\/60{background-color:#fafafa99}@supports (color:color-mix(in lab, red, red)){.bg-neutral-50\/60{background-color:color-mix(in oklab, var(--color-neutral-50) 60%, transparent)}}.bg-neutral-50\/70{background-color:#fafafab3}@supports (color:color-mix(in lab, red, red)){.bg-neutral-50\/70{background-color:color-mix(in oklab, var(--color-neutral-50) 70%, transparent)}}.bg-neutral-100{background-color:var(--color-neutral-100)}.bg-neutral-200\/70{background-color:#e5e5e5b3}@supports (color:color-mix(in lab, red, red)){.bg-neutral-200\/70{background-color:color-mix(in oklab, var(--color-neutral-200) 70%, transparent)}}.bg-neutral-300{background-color:var(--color-neutral-300)}.bg-neutral-700{background-color:var(--color-neutral-700)}.bg-neutral-800{background-color:var(--color-neutral-800)}.bg-neutral-800\/95{background-color:#262626f2}@supports (color:color-mix(in lab, red, red)){.bg-neutral-800\/95{background-color:color-mix(in oklab, var(--color-neutral-800) 95%, transparent)}}.bg-red-50{background-color:var(--color-red-50)}.bg-red-200\/70{background-color:#ffcacab3}@supports (color:color-mix(in lab, red, red)){.bg-red-200\/70{background-color:color-mix(in oklab, var(--color-red-200) 70%, transparent)}}.bg-red-400{background-color:var(--color-red-400)}.bg-sky-50{background-color:var(--color-sky-50)}.bg-sky-500{background-color:var(--color-sky-500)}.bg-transparent{background-color:#0000}.bg-violet-50{background-color:var(--color-violet-50)}.bg-white{background-color:var(--color-white)}.bg-white\/15{background-color:#ffffff26}@supports (color:color-mix(in lab, red, red)){.bg-white\/15{background-color:color-mix(in oklab, var(--color-white) 15%, transparent)}}.bg-white\/85{background-color:#ffffffd9}@supports (color:color-mix(in lab, red, red)){.bg-white\/85{background-color:color-mix(in oklab, var(--color-white) 85%, transparent)}}.object-contain{object-fit:contain}.p-0{padding:0}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-3\.5{padding:calc(var(--spacing) * 3.5)}.p-4{padding:calc(var(--spacing) * 4)}.px-0\.5{padding-inline:calc(var(--spacing) * .5)}.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)}.px-5{padding-inline:calc(var(--spacing) * 5)}.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)}.py-3\.5{padding-block:calc(var(--spacing) * 3.5)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-5{padding-block:calc(var(--spacing) * 5)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-px{padding-block:1px}.pt-1{padding-top:var(--spacing)}.pt-1\.5{padding-top:calc(var(--spacing) * 1.5)}.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-px{padding-top:1px}.pr-1\.5{padding-right:calc(var(--spacing) * 1.5)}.pr-2{padding-right:calc(var(--spacing) * 2)}.pr-3{padding-right:calc(var(--spacing) * 3)}.pr-4{padding-right:calc(var(--spacing) * 4)}.pr-8{padding-right:calc(var(--spacing) * 8)}.pb-0\.5{padding-bottom:calc(var(--spacing) * .5)}.pb-1{padding-bottom:var(--spacing)}.pb-1\.5{padding-bottom:calc(var(--spacing) * 1.5)}.pb-2\.5{padding-bottom:calc(var(--spacing) * 2.5)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pb-\[calc\(0\.25rem\+env\(safe-area-inset-bottom\)\)\]{padding-bottom:calc(.25rem + env(safe-area-inset-bottom))}.pl-1{padding-left:var(--spacing)}.pl-1\.5{padding-left:calc(var(--spacing) * 1.5)}.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-5{padding-left:calc(var(--spacing) * 5)}.pl-6{padding-left:calc(var(--spacing) * 6)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.align-middle{vertical-align:middle}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.text-\[9px\]{font-size:9px}.text-\[10\.5px\]{font-size:10.5px}.text-\[10px\]{font-size:10px}.text-\[11\.5px\]{font-size:11.5px}.text-\[11px\]{font-size:11px}.text-\[12\.5px\]{font-size:12.5px}.text-\[12px\]{font-size:12px}.text-\[13\.5px\]{font-size:13.5px}.text-\[13px\]{font-size:13px}.text-\[14px\]{font-size:14px}.text-\[15px\]{font-size:15px}.text-\[16px\]{font-size:16px}.text-\[17px\]{font-size:17px}.text-\[20px\]{font-size:20px}.leading-\[1\.5\]{--tw-leading:1.5;line-height:1.5}.leading-\[1\.35\]{--tw-leading:1.35;line-height:1.35}.leading-\[1\.45\]{--tw-leading:1.45;line-height:1.45}.leading-\[1\.55\]{--tw-leading:1.55;line-height:1.55}.leading-\[15px\]{--tw-leading:15px;line-height:15px}.leading-\[18px\]{--tw-leading:18px;line-height:18px}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.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-normal{--tw-tracking:var(--tracking-normal);letter-spacing:var(--tracking-normal)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.\[overflow-wrap\:anywhere\]{overflow-wrap:anywhere}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.\!whitespace-normal{white-space:normal!important}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-amber-500{color:var(--color-amber-500)}.text-amber-600{color:var(--color-amber-600)}.text-amber-700{color:var(--color-amber-700)}.text-cyan-700{color:var(--color-cyan-700)}.text-emerald-600{color:var(--color-emerald-600)}.text-emerald-700{color:var(--color-emerald-700)}.text-green-700{color:var(--color-green-700)}.text-indigo-500{color:var(--color-indigo-500)}.text-indigo-600{color:var(--color-indigo-600)}.text-indigo-700{color:var(--color-indigo-700)}.text-indigo-800{color:var(--color-indigo-800)}.text-neutral-100{color:var(--color-neutral-100)}.text-neutral-300{color:var(--color-neutral-300)}.text-neutral-400{color:var(--color-neutral-400)}.text-neutral-500{color:var(--color-neutral-500)}.text-neutral-600{color:var(--color-neutral-600)}.text-neutral-700{color:var(--color-neutral-700)}.text-neutral-800{color:var(--color-neutral-800)}.text-neutral-900{color:var(--color-neutral-900)}.text-red-600{color:var(--color-red-600)}.text-red-700{color:var(--color-red-700)}.text-sky-700{color:var(--color-sky-700)}.text-violet-700{color:var(--color-violet-700)}.text-white{color:var(--color-white)}.normal-case{text-transform:none}.uppercase{text-transform:uppercase}.italic{font-style:italic}.not-italic{font-style:normal}.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,)}.no-underline{text-decoration-line:none}.underline{text-decoration-line:underline}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.shadow-2xs{--tw-shadow:0 1px var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[inset_0_-1px_0_var\(--color-neutral-200\)\]{--tw-shadow:inset 0 -1px 0 var(--tw-shadow-color,var(--color-neutral-200));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-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)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px 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-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-1{--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-amber-200{--tw-ring-color:var(--color-amber-200)}.ring-emerald-200{--tw-ring-color:var(--color-emerald-200)}.ring-emerald-600\/20{--tw-ring-color:#00976733}@supports (color:color-mix(in lab, red, red)){.ring-emerald-600\/20{--tw-ring-color:color-mix(in oklab, var(--color-emerald-600) 20%, transparent)}}.ring-indigo-200\/70{--tw-ring-color:#c7d2ffb3}@supports (color:color-mix(in lab, red, red)){.ring-indigo-200\/70{--tw-ring-color:color-mix(in oklab, var(--color-indigo-200) 70%, transparent)}}.ring-neutral-200{--tw-ring-color:var(--color-neutral-200)}.ring-red-200{--tw-ring-color:var(--color-red-200)}.ring-sky-200{--tw-ring-color:var(--color-sky-200)}.ring-violet-200{--tw-ring-color:var(--color-violet-200)}.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,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-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-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.select-none{-webkit-user-select:none;user-select:none}.ring-inset{--tw-ring-inset:inset}@media (hover:hover){.group-hover\:block:is(:where(.group):hover *){display:block}.group-hover\:flex:is(:where(.group):hover *){display:flex}.group-hover\:hidden:is(:where(.group):hover *){display:none}.group-hover\:border-indigo-400:is(:where(.group):hover *){border-color:var(--color-indigo-400)}.group-hover\:text-indigo-500:is(:where(.group):hover *){color:var(--color-indigo-500)}.group-hover\:opacity-100:is(:where(.group):hover *),.group-hover\/code\:opacity-100:is(:where(.group\/code):hover *),.group-hover\/row\:opacity-100:is(:where(.group\/row):hover *){opacity:1}}.peer-checked\:bg-indigo-600:is(:where(.peer):checked~*){background-color:var(--color-indigo-600)}.peer-focus-visible\:ring-2:is(:where(.peer):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)}.peer-focus-visible\:ring-indigo-200:is(:where(.peer):focus-visible~*){--tw-ring-color:var(--color-indigo-200)}.marker\:text-neutral-400 ::marker{color:var(--color-neutral-400)}.marker\:text-neutral-400::marker{color:var(--color-neutral-400)}.marker\:text-neutral-400 ::-webkit-details-marker{color:var(--color-neutral-400)}.marker\:text-neutral-400::-webkit-details-marker{color:var(--color-neutral-400)}.placeholder\:text-neutral-400::placeholder{color:var(--color-neutral-400)}.backdrop\:bg-black\/20::backdrop{background-color:#0003}@supports (color:color-mix(in lab, red, red)){.backdrop\:bg-black\/20::backdrop{background-color:color-mix(in oklab, var(--color-black) 20%, transparent)}}.backdrop\:bg-black\/30::backdrop{background-color:#0000004d}@supports (color:color-mix(in lab, red, red)){.backdrop\:bg-black\/30::backdrop{background-color:color-mix(in oklab, var(--color-black) 30%, transparent)}}.backdrop\:bg-black\/40::backdrop{background-color:#0006}@supports (color:color-mix(in lab, red, red)){.backdrop\:bg-black\/40::backdrop{background-color:color-mix(in oklab, var(--color-black) 40%, transparent)}}.backdrop\:bg-black\/70::backdrop{background-color:#000000b3}@supports (color:color-mix(in lab, red, red)){.backdrop\:bg-black\/70::backdrop{background-color:color-mix(in oklab, var(--color-black) 70%, transparent)}}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:top-0\.5:after{content:var(--tw-content);top:calc(var(--spacing) * .5)}.after\:left-0\.5:after{content:var(--tw-content);left:calc(var(--spacing) * .5)}.after\:h-3:after{content:var(--tw-content);height:calc(var(--spacing) * 3)}.after\:w-3:after{content:var(--tw-content);width:calc(var(--spacing) * 3)}.after\:rounded-full:after{content:var(--tw-content);border-radius:2147483647px}.after\:bg-white:after{content:var(--tw-content);background-color:var(--color-white)}.after\:shadow-sm:after{content:var(--tw-content);--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)}.after\:transition-transform:after{content:var(--tw-content);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))}.peer-checked\:after\:translate-x-3:is(:where(.peer):checked~*):after{content:var(--tw-content);--tw-translate-x:calc(var(--spacing) * 3);translate:var(--tw-translate-x) var(--tw-translate-y)}.last\:border-0:last-child{border-style:var(--tw-border-style);border-width:0}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.open\:float-none:is([open],:popover-open,:open){float:none}.open\:mt-0:is([open],:popover-open,:open){margin-top:0}.open\:mb-1\.5:is([open],:popover-open,:open){margin-bottom:calc(var(--spacing) * 1.5)}.open\:min-w-0:is([open],:popover-open,:open){min-width:0}.open\:border:is([open],:popover-open,:open){border-style:var(--tw-border-style);border-width:1px}.open\:border-black\/\[0\.06\]:is([open],:popover-open,:open){border-color:#0000000f}@supports (color:color-mix(in lab, red, red)){.open\:border-black\/\[0\.06\]:is([open],:popover-open,:open){border-color:color-mix(in oklab, var(--color-black) 6%, transparent)}}.open\:bg-amber-50:is([open],:popover-open,:open){background-color:var(--color-amber-50)}.open\:bg-black\/\[0\.02\]:is([open],:popover-open,:open){background-color:#00000005}@supports (color:color-mix(in lab, red, red)){.open\:bg-black\/\[0\.02\]:is([open],:popover-open,:open){background-color:color-mix(in oklab, var(--color-black) 2%, transparent)}}.open\:bg-green-50:is([open],:popover-open,:open){background-color:var(--color-green-50)}.open\:bg-red-50:is([open],:popover-open,:open){background-color:var(--color-red-50)}.open\:px-2:is([open],:popover-open,:open){padding-inline:calc(var(--spacing) * 2)}.open\:py-1\.5:is([open],:popover-open,:open){padding-block:calc(var(--spacing) * 1.5)}.open\:pr-0:is([open],:popover-open,:open){padding-right:0}.open\:text-neutral-500:is([open],:popover-open,:open){color:var(--color-neutral-500)}.focus-within\:border-indigo-400:focus-within{border-color:var(--color-indigo-400)}.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-indigo-100:focus-within{--tw-ring-color:var(--color-indigo-100)}@media (hover:hover){.hover\:border-indigo-300:hover{border-color:var(--color-indigo-300)}.hover\:bg-amber-100:hover{background-color:var(--color-amber-100)}.hover\:bg-amber-200:hover{background-color:var(--color-amber-200)}.hover\:bg-black\/\[0\.03\]:hover{background-color:#00000008}@supports (color:color-mix(in lab, red, red)){.hover\:bg-black\/\[0\.03\]:hover{background-color:color-mix(in oklab, var(--color-black) 3%, transparent)}}.hover\:bg-emerald-100:hover{background-color:var(--color-emerald-100)}.hover\:bg-indigo-50:hover{background-color:var(--color-indigo-50)}.hover\:bg-indigo-100:hover{background-color:var(--color-indigo-100)}.hover\:bg-indigo-500:hover{background-color:var(--color-indigo-500)}.hover\:bg-neutral-50:hover{background-color:var(--color-neutral-50)}.hover\:bg-neutral-100:hover{background-color:var(--color-neutral-100)}.hover\:bg-neutral-200:hover{background-color:var(--color-neutral-200)}.hover\:bg-red-100:hover{background-color:var(--color-red-100)}.hover\:bg-red-600:hover{background-color:var(--color-red-600)}.hover\:bg-white:hover{background-color:var(--color-white)}.hover\:text-amber-500:hover{color:var(--color-amber-500)}.hover\:text-indigo-600:hover{color:var(--color-indigo-600)}.hover\:text-indigo-700:hover{color:var(--color-indigo-700)}.hover\:text-neutral-600:hover{color:var(--color-neutral-600)}.hover\:text-neutral-700:hover{color:var(--color-neutral-700)}.hover\:text-neutral-800:hover{color:var(--color-neutral-800)}.hover\:text-red-600:hover{color:var(--color-red-600)}.hover\:underline:hover{text-decoration-line:underline}}.focus\:border-indigo-400:focus{border-color:var(--color-indigo-400)}.focus\:opacity-100:focus{opacity:1}.focus\:ring-2:focus{--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\:ring-indigo-100:focus{--tw-ring-color:var(--color-indigo-100)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.active\:bg-amber-200:active{background-color:var(--color-amber-200)}.active\:bg-amber-300:active{background-color:var(--color-amber-300)}.active\:bg-indigo-700:active{background-color:var(--color-indigo-700)}.active\:bg-neutral-100:active{background-color:var(--color-neutral-100)}.active\:bg-neutral-200:active{background-color:var(--color-neutral-200)}.disabled\:cursor-default:disabled{cursor:default}.disabled\:opacity-40:disabled{opacity:.4}@media not all and (width>=48rem){.max-md\:hidden{display:none}.max-md\:h-2\/5{height:40%}.max-md\:max-h-48{max-height:calc(var(--spacing) * 48)}.max-md\:\!w-full{width:100%!important}.max-md\:w-full{width:100%}.max-md\:flex-col{flex-direction:column}.max-md\:flex-wrap{flex-wrap:wrap}.max-md\:border-r-0{border-right-style:var(--tw-border-style);border-right-width:0}.max-md\:border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}}@media not all and (width>=40rem){.max-sm\:grid-cols-\[1fr_auto\]{grid-template-columns:1fr auto}}@media (width>=40rem){.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (width>=48rem){.md\:order-1{order:1}.md\:order-2{order:2}.md\:order-3{order:3}.md\:col-span-1{grid-column:span 1/span 1}.md\:col-span-3{grid-column:span 3/span 3}.md\:flex{display:flex}.md\:hidden{display:none}.md\:table-cell{display:table-cell}.md\:w-\[14\%\]{width:14%}.md\:w-\[24\%\]{width:24%}.md\:w-\[34\%\]{width:34%}.md\:grid-cols-\[6\.25rem_6\.25rem_minmax\(0\,1fr\)\]{grid-template-columns:6.25rem 6.25rem minmax(0,1fr)}.md\:grid-cols-\[7\.5rem_minmax\(0\,1fr\)_7\.5rem_6\.25rem\]{grid-template-columns:7.5rem minmax(0,1fr) 7.5rem 6.25rem}.md\:grid-cols-\[9\.375rem_minmax\(0\,1fr\)\]{grid-template-columns:9.375rem minmax(0,1fr)}.md\:grid-cols-\[14\.5rem_minmax\(0\,1fr\)\]{grid-template-columns:14.5rem minmax(0,1fr)}.md\:grid-cols-\[minmax\(0\,1fr\)_12rem_5rem\]{grid-template-columns:minmax(0,1fr) 12rem 5rem}}.dark\:border-neutral-200:where([data-theme=dark],[data-theme=dark] *){border-color:var(--color-neutral-200)}.dark\:bg-neutral-50:where([data-theme=dark],[data-theme=dark] *){background-color:var(--color-neutral-50)}.dark\:bg-neutral-100:where([data-theme=dark],[data-theme=dark] *){background-color:var(--color-neutral-100)}.dark\:bg-neutral-200:where([data-theme=dark],[data-theme=dark] *){background-color:var(--color-neutral-200)}.dark\:text-neutral-50:where([data-theme=dark],[data-theme=dark] *){color:var(--color-neutral-50)}.dark\:open\:border-neutral-200:where([data-theme=dark],[data-theme=dark] *):is([open],:popover-open,:open){border-color:var(--color-neutral-200)}.dark\:open\:bg-neutral-100:where([data-theme=dark],[data-theme=dark] *):is([open],:popover-open,:open){background-color:var(--color-neutral-100)}@media (hover:hover){.dark\:hover\:bg-neutral-100:where([data-theme=dark],[data-theme=dark] *):hover{background-color:var(--color-neutral-100)}}@media (pointer:coarse){.pointer-coarse\:block{display:block}.pointer-coarse\:flex{display:flex}.pointer-coarse\:py-3\.5{padding-block:calc(var(--spacing) * 3.5)}.pointer-coarse\:opacity-100{opacity:1}}}html[data-theme=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;background-color:var(--color-white);--color-white:oklch(22.5% 0 none);--color-neutral-50:oklch(19% 0 none);--color-neutral-100:oklch(27.5% 0 none);--color-neutral-200:oklch(32.5% 0 none);--color-neutral-300:oklch(39% 0 none);--color-neutral-400:oklch(62% 0 none);--color-neutral-500:oklch(70% 0 none);--color-neutral-600:oklch(78% 0 none);--color-neutral-700:oklch(85% 0 none);--color-neutral-800:oklch(90% 0 none);--color-neutral-900:oklch(94% 0 none);--color-neutral-950:oklch(97% 0 none);--color-indigo-50:oklch(24.5% .028 272.314);--color-indigo-100:oklch(32% .065 272.788);--color-indigo-200:oklch(40% .09 274.039);--color-indigo-300:oklch(50% .125 274.713);--color-indigo-400:oklch(62% .155 276.935);--color-indigo-500:oklch(68% .165 277.117);--color-indigo-600:oklch(70% .175 276.966);--color-indigo-700:oklch(80% .115 277.023);--color-indigo-800:oklch(86% .08 277.366);--color-red-50:oklch(24.5% .028 17.38);--color-red-100:oklch(32% .065 17.717);--color-red-200:oklch(40% .09 18.334);--color-red-400:oklch(62% .155 22.216);--color-red-600:oklch(73% .145 27.325);--color-red-700:oklch(80% .115 27.518);--color-amber-50:oklch(24.5% .028 95.277);--color-amber-100:oklch(32% .065 95.617);--color-amber-200:oklch(40% .09 95.746);--color-amber-300:oklch(50% .125 91.605);--color-amber-400:oklch(62% .155 84.429);--color-amber-500:oklch(68% .165 70.08);--color-amber-600:oklch(73% .145 58.318);--color-amber-700:oklch(80% .115 48.998);--color-amber-800:oklch(86% .08 46.201);--color-emerald-50:oklch(24.5% .028 166.113);--color-emerald-100:oklch(32% .065 163.051);--color-emerald-200:oklch(40% .09 164.15);--color-emerald-400:oklch(62% .155 163.223);--color-emerald-500:oklch(68% .165 162.48);--color-emerald-600:oklch(73% .145 163.225);--color-emerald-700:oklch(80% .115 165.612);--color-green-50:oklch(24.5% .028 155.826);--color-green-200:oklch(40% .09 155.995);--color-green-500:oklch(68% .165 149.579);--color-green-700:oklch(80% .115 150.069);--color-green-800:oklch(86% .08 151.328);--color-cyan-50:oklch(24.5% .028 200.873);--color-cyan-100:oklch(32% .065 203.388);--color-cyan-200:oklch(40% .09 205.041);--color-cyan-400:oklch(62% .155 211.53);--color-cyan-500:oklch(68% .165 215.221);--color-cyan-700:oklch(80% .115 223.128);--color-cyan-800:oklch(86% .08 224.283);--color-sky-50:oklch(24.5% .028 236.62);--color-sky-200:oklch(40% .09 230.902);--color-sky-500:oklch(68% .165 237.323);--color-sky-700:oklch(80% .115 242.749);--color-violet-50:oklch(24.5% .028 293.756);--color-violet-200:oklch(40% .09 293.283);--color-violet-700:oklch(80% .115 292.581);--color-blue-700:oklch(80% .115 264.376)}html{font-size:112.5%}.text-\[9px\]{font-size:.5625rem}.text-\[10px\]{font-size:.625rem}.text-\[10\.5px\]{font-size:.65625rem}.text-\[11px\]{font-size:.6875rem}.text-\[11\.5px\]{font-size:.71875rem}.text-\[12px\]{font-size:.75rem}.text-\[12\.5px\]{font-size:.78125rem}.text-\[13px\]{font-size:.8125rem}.text-\[13\.5px\]{font-size:.84375rem}.text-\[14px\]{font-size:.875rem}.text-\[15px\]{font-size:.9375rem}.text-\[16px\]{font-size:1rem}.text-\[17px\]{font-size:1.0625rem}.text-\[20px\]{font-size:1.25rem}.thumbs>*{margin:0}@media (width>=48rem){body[data-rail=closed]{grid-template-columns:minmax(0,1fr)}body[data-rail=closed] #sidebar{display:none}#rail-toggle{left:12.375rem}body[data-rail=closed] #rail-toggle{left:.375rem}body[data-rail=closed] #rail-toggle svg{transform:rotate(180deg)}body:not([data-rail=closed]) #rail-toggle .attention{display:none}body[data-rail=closed] :is(#chat-header,main>section>header:first-child,main>section>div:first-child>header:first-child){padding-left:2.75rem}}@media not all and (width>=48rem){#sidebar{z-index:40;inset-block:0;width:19rem;transition:transform .18s ease-out;position:fixed;left:0;transform:translate(-100%);box-shadow:0 8px 30px #0000002e}#sidebar[data-open]{transform:translate(0)}#sidebar,#console-section ul,#project-tree{font-size:.9375rem}body{overscroll-behavior:none}#composer,#project-tree{padding-bottom:calc(.5rem + env(safe-area-inset-bottom))}body[data-kb] #composer{padding-bottom:.5rem}main,#sidebar{padding-top:env(safe-area-inset-top)}#project-tree li,#project-tree summary,#console-section li button{padding-block:.5rem}}@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-divide-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@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-content{syntax:"*";inherits:false;initial-value:""}@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-duration{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}