agent-canvas 0.1.4 → 0.1.7

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 (56) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +71 -0
  3. package/bin/agent-canvas.ts +26 -353
  4. package/bin/lib/commands/daemon.ts +51 -0
  5. package/bin/lib/commands/fetch.ts +20 -0
  6. package/bin/lib/commands/install.ts +48 -0
  7. package/bin/lib/commands/push.ts +66 -0
  8. package/bin/lib/commands/watch.ts +23 -0
  9. package/bin/lib/config.ts +10 -0
  10. package/bin/lib/daemon-lifecycle.ts +74 -0
  11. package/bin/lib/helpers.ts +78 -0
  12. package/daemon/build.ts +27 -61
  13. package/daemon/client/AnnotationProvider.tsx +2 -2
  14. package/daemon/client/AnnotationSidebar.tsx +199 -31
  15. package/daemon/client/App.tsx +4 -3
  16. package/daemon/client/FileBrowser.tsx +8 -7
  17. package/daemon/client/FileViewer.tsx +153 -16
  18. package/daemon/client/PlanRenderer.tsx +6 -3
  19. package/daemon/client/ResponsePreview.tsx +5 -116
  20. package/daemon/client/SessionSwitcher.tsx +21 -10
  21. package/daemon/client/compat/preact-all.ts +4 -0
  22. package/daemon/client/components/Markdown.tsx +44 -0
  23. package/daemon/client/components/ResponseNote.tsx +3 -8
  24. package/daemon/client/components/UserInput.tsx +2 -4
  25. package/daemon/client/components/index.ts +1 -0
  26. package/daemon/client/domDiff.ts +82 -2
  27. package/daemon/client/generateMarkdown.ts +46 -9
  28. package/daemon/client/highlightRange.ts +8 -6
  29. package/daemon/client/runtime.ts +2 -0
  30. package/daemon/client/styles.css +126 -0
  31. package/daemon/client/unifiedDiff.ts +155 -2
  32. package/daemon/client/utils.ts +10 -0
  33. package/daemon/dist/client.css +1 -1
  34. package/daemon/dist/client.js +83 -36
  35. package/daemon/dist/components.js +63 -5
  36. package/daemon/dist/index.html +5 -12
  37. package/daemon/dist/jsx-runtime.js +3 -0
  38. package/daemon/dist/preact-compat.js +1 -0
  39. package/daemon/src/compiler.ts +28 -2
  40. package/daemon/src/handlers/api.ts +150 -0
  41. package/daemon/src/handlers/files.ts +114 -0
  42. package/daemon/src/handlers/static.ts +61 -0
  43. package/daemon/src/handlers/utils.ts +14 -0
  44. package/daemon/src/router.ts +16 -0
  45. package/daemon/src/server.ts +28 -403
  46. package/daemon/src/session.ts +41 -23
  47. package/daemon/src/websocket.ts +83 -0
  48. package/package.json +3 -3
  49. package/skills/canvas/SKILL.md +32 -22
  50. package/skills/canvas/components.md +31 -0
  51. package/skills/canvas/flows.md +2 -2
  52. package/daemon/dist/jsx-dev-runtime-shim.js +0 -17
  53. package/daemon/dist/jsx-runtime-shim.js +0 -17
  54. package/daemon/dist/react-dom-client-shim.js +0 -4
  55. package/daemon/dist/react-dom-shim.js +0 -4
  56. package/daemon/dist/react-shim.js +0 -4
@@ -99,6 +99,16 @@ export function getMissingRequiredFeedback(entries: Map<string, FeedbackEntry>):
99
99
  return missing;
100
100
  }
101
101
 
102
+ /** Returns list of missing required field labels, or empty if all valid */
103
+ export function getMissingRequiredLabels(responses: Map<string, PlanResponse>, feedbackEntries: Map<string, FeedbackEntry>): string[] {
104
+ const missingResponses = getMissingRequired(responses);
105
+ const missingFeedback = getMissingRequiredFeedback(feedbackEntries);
106
+ return [
107
+ ...missingResponses.map((r) => r.label),
108
+ ...missingFeedback.map((e) => e.label || e.id),
109
+ ];
110
+ }
111
+
102
112
  function renderResponse(r: PlanResponse): string {
103
113
  const lines: string[] = [];
104
114
  lines.push(`**${r.label}**`);
@@ -134,17 +144,44 @@ function renderResponse(r: PlanResponse): string {
134
144
  function renderAnnotation(ann: Annotation): string {
135
145
  const lines: string[] = [];
136
146
  const snippet = ann.snippet.trim();
137
- const context = formatSnippetInContext(ann);
147
+ const ctx = ann.context;
148
+ const hasLineInfo = ctx?.lineStart != null;
138
149
 
139
- // Show selected text as a quote
140
- if (snippet.split("\n").length <= 3) {
141
- lines.push(`> ${context.split("\n").join("\n> ")}`);
142
- } else {
143
- // Longer selections — just first/last line
150
+ if (ann.filePath && hasLineInfo) {
151
+ // File annotation with line numbers
152
+ const lineStart = ctx!.lineStart!;
153
+ const lineEnd = ctx!.lineEnd ?? lineStart;
144
154
  const snippetLines = snippet.split("\n");
145
- lines.push(`> ${snippetLines[0]}`);
146
- lines.push(`> ... (${snippetLines.length} lines)`);
147
- lines.push(`> ${snippetLines[snippetLines.length - 1]}`);
155
+ const isShort = snippet.length < 30 && lineStart === lineEnd;
156
+
157
+ if (isShort && (ctx!.before || ctx!.after)) {
158
+ // Short snippet on single line — show full line context
159
+ const expanded = formatSnippetInContext(ann);
160
+ lines.push(`> L${lineStart}: ${expanded}`);
161
+ } else if (snippetLines.length <= 6) {
162
+ for (let i = 0; i < snippetLines.length; i++) {
163
+ lines.push(`> ${lineStart + i} | ${snippetLines[i]}`);
164
+ }
165
+ } else {
166
+ for (let i = 0; i < 3; i++) {
167
+ lines.push(`> ${lineStart + i} | ${snippetLines[i]}`);
168
+ }
169
+ lines.push(`> ... (${snippetLines.length} lines)`);
170
+ for (let i = snippetLines.length - 3; i < snippetLines.length; i++) {
171
+ lines.push(`> ${lineStart + i} | ${snippetLines[i]}`);
172
+ }
173
+ }
174
+ } else {
175
+ // Plan annotations or file annotations without line info
176
+ const context = formatSnippetInContext(ann);
177
+ if (snippet.split("\n").length <= 3) {
178
+ lines.push(`> ${context.split("\n").join("\n> ")}`);
179
+ } else {
180
+ const snippetLines = snippet.split("\n");
181
+ lines.push(`> ${snippetLines[0]}`);
182
+ lines.push(`> ... (${snippetLines.length} lines)`);
183
+ lines.push(`> ${snippetLines[snippetLines.length - 1]}`);
184
+ }
148
185
  }
149
186
 
150
187
  // Comment
@@ -99,13 +99,15 @@ export function setMarkActive(annotationId: string, active: boolean) {
99
99
  }
100
100
 
101
101
  /**
102
- * Update active state for all annotation marks.
102
+ * Update active state for annotation marks.
103
+ * Only touches marks for the previous and current active IDs to avoid full DOM scans.
103
104
  */
104
- export function updateAllMarkStates(activeId: string | null) {
105
- const allMarks = document.querySelectorAll("[data-annotation-id]");
106
- for (const mark of allMarks) {
107
- const id = mark.getAttribute("data-annotation-id");
108
- (mark as HTMLElement).style.cssText = id === activeId ? MARK_STYLE_ACTIVE : MARK_STYLE_INACTIVE;
105
+ export function updateAllMarkStates(activeId: string | null, prevActiveId?: string | null) {
106
+ if (prevActiveId != null && prevActiveId !== activeId) {
107
+ setMarkActive(prevActiveId, false);
108
+ }
109
+ if (activeId != null) {
110
+ setMarkActive(activeId, true);
109
111
  }
110
112
  }
111
113
 
@@ -8,6 +8,8 @@ export interface AnnotationContext {
8
8
  before: string;
9
9
  after: string;
10
10
  hierarchy: string[];
11
+ lineStart?: number;
12
+ lineEnd?: number;
11
13
  }
12
14
 
13
15
  export interface Annotation {
@@ -258,6 +258,132 @@ input[type="range"]::-moz-range-track {
258
258
  background: transparent;
259
259
  }
260
260
 
261
+ /* Prose (Markdown component) */
262
+ .prose-canvas {
263
+ color: var(--color-text-secondary);
264
+ font-size: 0.875rem;
265
+ line-height: 1.7;
266
+ }
267
+
268
+ .prose-canvas h1, .prose-canvas h2, .prose-canvas h3,
269
+ .prose-canvas h4, .prose-canvas h5, .prose-canvas h6 {
270
+ color: var(--color-text-primary);
271
+ font-weight: 600;
272
+ margin-top: 1.5em;
273
+ margin-bottom: 0.5em;
274
+ line-height: 1.3;
275
+ }
276
+
277
+ .prose-canvas h1 { font-size: 1.5rem; }
278
+ .prose-canvas h2 { font-size: 1.25rem; }
279
+ .prose-canvas h3 { font-size: 1.1rem; }
280
+
281
+ .prose-canvas h1:first-child, .prose-canvas h2:first-child,
282
+ .prose-canvas h3:first-child {
283
+ margin-top: 0;
284
+ }
285
+
286
+ .prose-canvas p {
287
+ margin-top: 0.75em;
288
+ margin-bottom: 0.75em;
289
+ }
290
+
291
+ .prose-canvas p:first-child {
292
+ margin-top: 0;
293
+ }
294
+
295
+ .prose-canvas a {
296
+ color: var(--color-accent-blue);
297
+ text-decoration: underline;
298
+ text-decoration-color: color-mix(in srgb, var(--color-accent-blue) 40%, transparent);
299
+ text-underline-offset: 2px;
300
+ }
301
+
302
+ .prose-canvas a:hover {
303
+ text-decoration-color: var(--color-accent-blue);
304
+ }
305
+
306
+ .prose-canvas strong {
307
+ color: var(--color-text-primary);
308
+ font-weight: 600;
309
+ }
310
+
311
+ .prose-canvas code {
312
+ font-size: 0.8em;
313
+ background: var(--color-bg-code);
314
+ color: var(--color-text-code);
315
+ padding: 0.15em 0.4em;
316
+ border-radius: 4px;
317
+ }
318
+
319
+ .prose-canvas pre {
320
+ background: var(--color-bg-code);
321
+ border-radius: 8px;
322
+ padding: 1em;
323
+ overflow-x: auto;
324
+ margin-top: 0.75em;
325
+ margin-bottom: 0.75em;
326
+ }
327
+
328
+ .prose-canvas pre code {
329
+ background: transparent;
330
+ padding: 0;
331
+ font-size: 0.8rem;
332
+ }
333
+
334
+ .prose-canvas ul, .prose-canvas ol {
335
+ padding-left: 1.5em;
336
+ margin-top: 0.5em;
337
+ margin-bottom: 0.5em;
338
+ }
339
+
340
+ .prose-canvas ul { list-style-type: disc; }
341
+ .prose-canvas ol { list-style-type: decimal; }
342
+ .prose-canvas li { margin-top: 0.25em; }
343
+ .prose-canvas li > ul, .prose-canvas li > ol { margin-top: 0.25em; margin-bottom: 0; }
344
+
345
+ .prose-canvas blockquote {
346
+ border-left: 3px solid var(--color-border-strong);
347
+ padding-left: 1em;
348
+ margin-left: 0;
349
+ margin-top: 0.75em;
350
+ margin-bottom: 0.75em;
351
+ color: var(--color-text-tertiary);
352
+ }
353
+
354
+ .prose-canvas hr {
355
+ border: none;
356
+ border-top: 1px solid var(--color-border-subtle);
357
+ margin: 1.5em 0;
358
+ }
359
+
360
+ .prose-canvas table {
361
+ width: 100%;
362
+ border-collapse: collapse;
363
+ margin-top: 0.75em;
364
+ margin-bottom: 0.75em;
365
+ font-size: 0.8rem;
366
+ }
367
+
368
+ .prose-canvas th, .prose-canvas td {
369
+ border: 1px solid var(--color-border-subtle);
370
+ padding: 0.5em 0.75em;
371
+ text-align: left;
372
+ }
373
+
374
+ .prose-canvas th {
375
+ background: var(--color-bg-elevated);
376
+ color: var(--color-text-primary);
377
+ font-weight: 600;
378
+ }
379
+
380
+ .prose-canvas img {
381
+ max-width: 100%;
382
+ border-radius: 8px;
383
+ margin-top: 0.75em;
384
+ margin-bottom: 0.75em;
385
+ }
386
+
261
387
  /* highlight.js overrides */
262
388
  .hljs {
263
389
  background: transparent !important;
@@ -101,6 +101,10 @@ function blockKey(el: HTMLElement, type: string): string {
101
101
  return "checklist-item:" + (el.getAttribute("data-md-label") || el.textContent?.slice(0, 60) || "");
102
102
  case "checklist":
103
103
  return "checklist:" + el.querySelectorAll("[data-md='checklist-item']").length;
104
+ case "markdown":
105
+ return "markdown:" + (el.getAttribute("data-md-file") || "inline");
106
+ case "mermaid":
107
+ return "mermaid:" + (el.getAttribute("data-md-source") || "").slice(0, 80);
104
108
  case "callout":
105
109
  return "callout:" + (el.getAttribute("data-md-type") || "") + ":" + (el.textContent || "").slice(0, 60);
106
110
  default:
@@ -157,10 +161,14 @@ export function buildUnifiedDom(matches: BlockMatch[]): { fragment: DocumentFrag
157
161
  const clone = match.newBlock!.element.cloneNode(true) as HTMLElement;
158
162
  const type = match.newBlock!.type;
159
163
 
160
- if (match.childMatches && match.childMatches.length > 0 && (type === "table" || type === "checklist")) {
164
+ if (type === "mermaid") {
165
+ if (applyMermaidDiff(match.oldBlock!.element, clone)) hasChanges = true;
166
+ } else if (match.childMatches && match.childMatches.length > 0 && (type === "table" || type === "checklist")) {
161
167
  if (processListLike(clone, match.childMatches, type)) hasChanges = true;
162
168
  } else if (match.childMatches && match.childMatches.length > 0) {
163
169
  if (processBlockWithChildren(match.oldBlock!, clone, match.childMatches, type)) hasChanges = true;
170
+ } else if (type === "markdown") {
171
+ if (applyElementLevelDiff(match.oldBlock!.element, clone)) hasChanges = true;
164
172
  } else {
165
173
  if (applyWordDiff(match.oldBlock!.element, clone, false)) hasChanges = true;
166
174
  }
@@ -226,11 +234,15 @@ function processBlockWithChildren(
226
234
  if (cm.kind === "matched") {
227
235
  const newChild = cloneMap.newMap.get(cm.newBlock!.element);
228
236
  if (newChild) {
229
- if (cm.childMatches && cm.childMatches.length > 0 && (cm.newBlock!.type === "table" || cm.newBlock!.type === "checklist")) {
237
+ if (cm.newBlock!.type === "mermaid") {
238
+ if (applyMermaidDiff(cm.oldBlock!.element, newChild)) hasChanges = true;
239
+ } else if (cm.childMatches && cm.childMatches.length > 0 && (cm.newBlock!.type === "table" || cm.newBlock!.type === "checklist")) {
230
240
  if (processListLike(newChild, cm.childMatches, cm.newBlock!.type)) hasChanges = true;
231
241
  } else if (cm.childMatches && cm.childMatches.length > 0) {
232
242
  if (processBlockWithChildren(cm.oldBlock!, newChild, cm.childMatches, cm.newBlock!.type))
233
243
  hasChanges = true;
244
+ } else if (cm.newBlock!.type === "markdown") {
245
+ if (applyElementLevelDiff(cm.oldBlock!.element, newChild)) hasChanges = true;
234
246
  } else {
235
247
  if (applyWordDiff(cm.oldBlock!.element, newChild, false)) hasChanges = true;
236
248
  }
@@ -362,6 +374,90 @@ function findInsertionPoint(
362
374
  return null;
363
375
  }
364
376
 
377
+ /* ── Element-level diff for blocks with rich internal structure (e.g. markdown) ── */
378
+
379
+ /**
380
+ * Match direct child elements between old and new by tag name,
381
+ * then apply word-level diff within matched pairs. If word-level churn
382
+ * within a pair is too high (>50%), show as removed+added instead.
383
+ */
384
+ function applyElementLevelDiff(oldEl: HTMLElement, newEl: HTMLElement): boolean {
385
+ const oldChildren = Array.from(oldEl.children) as HTMLElement[];
386
+ const newChildren = Array.from(newEl.children) as HTMLElement[];
387
+
388
+ if (oldChildren.length === 0 && newChildren.length === 0) {
389
+ return applyWordDiff(oldEl, newEl, false);
390
+ }
391
+
392
+ // Match by tag name — h3↔h3, p↔p, ul↔ul, etc.
393
+ const oldKeys = oldChildren.map((el) => el.tagName.toLowerCase());
394
+ const newKeys = newChildren.map((el) => el.tagName.toLowerCase());
395
+ const lcs = simpleLCS(oldKeys, newKeys);
396
+
397
+ interface ElemMatch {
398
+ kind: "matched" | "added" | "removed";
399
+ oldChild?: HTMLElement;
400
+ newChild?: HTMLElement;
401
+ }
402
+
403
+ const matches: ElemMatch[] = [];
404
+ let oi = 0, ni = 0, li = 0;
405
+
406
+ while (oi < oldChildren.length || ni < newChildren.length) {
407
+ if (li < lcs.length && oi < oldChildren.length && ni < newChildren.length &&
408
+ oldKeys[oi] === lcs[li] && newKeys[ni] === lcs[li]) {
409
+ matches.push({ kind: "matched", oldChild: oldChildren[oi], newChild: newChildren[ni] });
410
+ oi++; ni++; li++;
411
+ } else if (oi < oldChildren.length && (li >= lcs.length || oldKeys[oi] !== lcs[li])) {
412
+ matches.push({ kind: "removed", oldChild: oldChildren[oi] });
413
+ oi++;
414
+ } else if (ni < newChildren.length) {
415
+ matches.push({ kind: "added", newChild: newChildren[ni] });
416
+ ni++;
417
+ }
418
+ }
419
+
420
+ let hasChanges = false;
421
+
422
+ // Detach all children from the clone, then re-append in match order
423
+ while (newEl.firstChild) newEl.removeChild(newEl.firstChild);
424
+
425
+ for (const m of matches) {
426
+ if (m.kind === "matched") {
427
+ // Check word-level churn before applying inline diff
428
+ const oldWords = (m.oldChild!.textContent || "").match(/\S+/g) || [];
429
+ const newWords = (m.newChild!.textContent || "").match(/\S+/g) || [];
430
+ const wordLcs = simpleLCS(oldWords, newWords);
431
+ const totalWords = Math.max(oldWords.length, newWords.length);
432
+ const churn = totalWords > 0 ? 1 - wordLcs.length / totalWords : 0;
433
+
434
+ if (churn > 0.5) {
435
+ // Too different — show as removed + added
436
+ hasChanges = true;
437
+ const ghost = m.oldChild!.cloneNode(true) as HTMLElement;
438
+ ghost.classList.add("diff-block-removed");
439
+ newEl.appendChild(ghost);
440
+ m.newChild!.classList.add("diff-block-added");
441
+ newEl.appendChild(m.newChild!);
442
+ } else {
443
+ if (applyWordDiff(m.oldChild!, m.newChild!, false)) hasChanges = true;
444
+ newEl.appendChild(m.newChild!);
445
+ }
446
+ } else if (m.kind === "removed") {
447
+ hasChanges = true;
448
+ const ghost = m.oldChild!.cloneNode(true) as HTMLElement;
449
+ ghost.classList.add("diff-block-removed");
450
+ newEl.appendChild(ghost);
451
+ } else {
452
+ hasChanges = true;
453
+ m.newChild!.classList.add("diff-block-added");
454
+ newEl.appendChild(m.newChild!);
455
+ }
456
+ }
457
+
458
+ return hasChanges;
459
+ }
460
+
365
461
  /* ── Word-level diff with combined single-pass rebuild ── */
366
462
 
367
463
  /**
@@ -591,6 +687,63 @@ function rebuildTextNode(
591
687
  parent.replaceChild(frag, textNode);
592
688
  }
593
689
 
690
+ /* ── Mermaid source diff ── */
691
+
692
+ /**
693
+ * Compare mermaid blocks by their data-md-source attribute instead of rendered SVG content.
694
+ * If sources differ, show a line-level text diff of the mermaid source code.
695
+ */
696
+ function applyMermaidDiff(oldEl: HTMLElement, newEl: HTMLElement): boolean {
697
+ const oldSource = (oldEl.getAttribute("data-md-source") || "").trim();
698
+ const newSource = (newEl.getAttribute("data-md-source") || "").trim();
699
+
700
+ if (oldSource === newSource) return false;
701
+
702
+ // Compute line-level diff of the source
703
+ const oldLines = oldSource.split("\n");
704
+ const newLines = newSource.split("\n");
705
+ const lcs = simpleLCS(oldLines, newLines);
706
+
707
+ const diffLines: Array<{ type: "same" | "added" | "removed"; line: string }> = [];
708
+ let oi = 0, ni = 0, li = 0;
709
+ while (oi < oldLines.length || ni < newLines.length) {
710
+ if (li < lcs.length && oi < oldLines.length && ni < newLines.length &&
711
+ oldLines[oi] === lcs[li] && newLines[ni] === lcs[li]) {
712
+ diffLines.push({ type: "same", line: oldLines[oi] });
713
+ oi++; ni++; li++;
714
+ } else if (oi < oldLines.length && (li >= lcs.length || oldLines[oi] !== lcs[li])) {
715
+ diffLines.push({ type: "removed", line: oldLines[oi] });
716
+ oi++;
717
+ } else if (ni < newLines.length) {
718
+ diffLines.push({ type: "added", line: newLines[ni] });
719
+ ni++;
720
+ }
721
+ }
722
+
723
+ // Append a diff view after the diagram
724
+ const diffContainer = document.createElement("div");
725
+ diffContainer.className = "mt-2 bg-bg-code rounded-md overflow-hidden text-tiny font-mono";
726
+ diffContainer.setAttribute("data-no-diff", "true");
727
+
728
+ for (const dl of diffLines) {
729
+ const row = document.createElement("div");
730
+ row.className = "px-3 py-0.5 whitespace-pre-wrap";
731
+ if (dl.type === "removed") {
732
+ row.classList.add("diff-removed");
733
+ row.textContent = "- " + dl.line;
734
+ } else if (dl.type === "added") {
735
+ row.classList.add("diff-added");
736
+ row.textContent = "+ " + dl.line;
737
+ } else {
738
+ row.textContent = " " + dl.line;
739
+ }
740
+ diffContainer.appendChild(row);
741
+ }
742
+
743
+ newEl.appendChild(diffContainer);
744
+ return true;
745
+ }
746
+
594
747
  /* ── Helpers ── */
595
748
 
596
749
  function appendLabel(el: HTMLElement, text: string, color: string): void {
@@ -0,0 +1,10 @@
1
+ /** Generate a unique annotation ID */
2
+ export function generateAnnotationId(): string {
3
+ return `ann-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`;
4
+ }
5
+
6
+ /** Auto-resize a textarea to fit its content */
7
+ export function autoResizeTextarea(el: HTMLTextAreaElement, minHeight?: number) {
8
+ el.style.height = "auto";
9
+ el.style.height = (minHeight ? Math.max(minHeight, el.scrollHeight) : el.scrollHeight) + "px";
10
+ }
@@ -1,2 +1,2 @@
1
1
  /*! tailwindcss v4.2.1 | MIT License | https://tailwindcss.com */
2
- @import "https://fonts.googleapis.com/css2?family=Instrument+Serif&family=Inter:wght@400;500;600&family=JetBrains+Mono:wght@400;500&display=swap";@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:"JetBrains Mono", "Fira Code", Consolas, monospace;--color-green-500:oklch(72.3% .219 149.579);--color-black:#000;--spacing:.25rem;--container-2xl:42rem;--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--font-weight-medium:500;--font-weight-semibold:600;--tracking-wider:.05em;--tracking-widest:.1em;--leading-snug:1.375;--leading-relaxed:1.625;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--ease-out:cubic-bezier(0, 0, .2, 1);--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--blur-sm:8px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-bg-base:#1a1915;--color-bg-surface:#1f1e18;--color-bg-elevated:#25241d;--color-bg-code:#1c1b16;--color-bg-input:#fff8dc08;--color-bg-elevated-half:#25241d80;--color-text-primary:#e8e4df;--color-text-secondary:#a09a92;--color-text-tertiary:#847d75;--color-text-code:#c4beb7;--color-text-disabled:#3a3530;--color-text-inverse:#1a1a1a;--color-border-subtle:#fff8f00f;--color-border-medium:#fff8f014;--color-border-hover:#fff8f01f;--color-border-strong:#fff8f026;--color-accent-green:#4a9e6d;--color-accent-green-muted:#4a9e6d1f;--color-accent-amber:#c49a3a;--color-accent-amber-muted:#c49a3a1f;--color-accent-red:#c45a5a;--color-accent-red-muted:#c45a5a1f;--color-accent-blue:#5a8ec4;--color-accent-blue-muted:#5a8ec41a;--color-highlight-bg:#ffdc6426;--color-highlight-border:#ffdc6459;--color-highlight-annotation:#ffdc642e;--color-highlight-active:#ffdc6440;--color-highlight-selected:#ffdc641a;--color-badge-bg:#c49a3a33;--color-btn-primary:#e8e4df;--color-btn-primary-text:#1a1a1a;--font-heading:"Instrument Serif", Georgia, "Times New Roman", serif;--font-body:"Inter", -apple-system, BlinkMacSystemFont, sans-serif;--text-section:1.75rem;--text-section--line-height:1.25;--text-section--letter-spacing:-.01em;--text-task-label:.9375rem;--text-task-label--line-height:1.4;--text-body:.875rem;--text-body--line-height:1.65;--text-code:.8125rem;--text-code--line-height:1.6;--text-meta:.75rem;--text-meta--line-height:1.4;--text-meta--letter-spacing:.02em;--text-tiny:.6875rem;--text-tiny--line-height:1.4}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}body{background-color:var(--color-bg-base);color:var(--color-text-primary);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing) * 0)}.start{inset-inline-start:var(--spacing)}.end{inset-inline-end:var(--spacing)}.top-0{top:calc(var(--spacing) * 0)}.top-1{top:calc(var(--spacing) * 1)}.top-1\.5{top:calc(var(--spacing) * 1.5)}.top-1\/2{top:50%}.top-2{top:calc(var(--spacing) * 2)}.top-3{top:calc(var(--spacing) * 3)}.top-full{top:100%}.right-0{right:calc(var(--spacing) * 0)}.right-1{right:calc(var(--spacing) * 1)}.right-1\.5{right:calc(var(--spacing) * 1.5)}.right-3{right:calc(var(--spacing) * 3)}.right-6{right:calc(var(--spacing) * 6)}.bottom-0{bottom:calc(var(--spacing) * 0)}.-left-8{left:calc(var(--spacing) * -8)}.left-0{left:calc(var(--spacing) * 0)}.left-3{left:calc(var(--spacing) * 3)}.z-10{z-index:10}.z-20{z-index:20}.z-40{z-index:40}.z-50{z-index:50}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.-mx-4{margin-inline:calc(var(--spacing) * -4)}.mx-0\.5{margin-inline:calc(var(--spacing) * .5)}.mx-4{margin-inline:calc(var(--spacing) * 4)}.mx-auto{margin-inline:auto}.my-1{margin-block:calc(var(--spacing) * 1)}.my-1\.5{margin-block:calc(var(--spacing) * 1.5)}.my-2{margin-block:calc(var(--spacing) * 2)}.-mt-0\.5{margin-top:calc(var(--spacing) * -.5)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:calc(var(--spacing) * 1)}.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-5{margin-top:calc(var(--spacing) * 5)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mt-\[7px\]{margin-top:7px}.mt-px{margin-top:1px}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-8{margin-bottom:calc(var(--spacing) * 8)}.ml-1{margin-left:calc(var(--spacing) * 1)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.contents{display:contents}.flex{display:flex}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-2\.5{height:calc(var(--spacing) * 2.5)}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-64{height:calc(var(--spacing) * 64)}.h-\[2px\]{height:2px}.h-\[18px\]{height:18px}.h-auto{height:auto}.h-full{height:100%}.h-screen{height:100vh}.max-h-80{max-height:calc(var(--spacing) * 80)}.min-h-0{min-height:calc(var(--spacing) * 0)}.min-h-\[20px\]{min-height:20px}.min-h-\[40px\]{min-height:40px}.min-h-\[60px\]{min-height:60px}.min-h-screen{min-height:100vh}.w-1{width:calc(var(--spacing) * 1)}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-1\/2{width:50%}.w-2{width:calc(var(--spacing) * 2)}.w-2\.5{width:calc(var(--spacing) * 2.5)}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-7{width:calc(var(--spacing) * 7)}.w-8{width:calc(var(--spacing) * 8)}.w-10{width:calc(var(--spacing) * 10)}.w-60{width:calc(var(--spacing) * 60)}.w-64{width:calc(var(--spacing) * 64)}.w-80{width:calc(var(--spacing) * 80)}.w-full{width:100%}.w-px{width:1px}.max-w-2xl{max-width:var(--container-2xl)}.max-w-\[85vw\]{max-width:85vw}.max-w-\[720px\]{max-width:720px}.max-w-full{max-width:100%}.min-w-0{min-width:calc(var(--spacing) * 0)}.min-w-\[18px\]{min-width:18px}.flex-1{flex:1}.flex-shrink-0,.shrink-0{flex-shrink:0}.-translate-x-full{--tw-translate-x:-100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-full{--tw-translate-x:100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.-rotate-90{rotate:-90deg}.rotate-180{rotate:180deg}.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-col-resize{cursor:col-resize}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.cursor-text{cursor:text}.resize{resize:both}.resize-none{resize:none}.list-inside{list-style-position:inside}.list-disc{list-style-type:disc}.flex-col{flex-direction:column}.items-baseline{align-items:baseline}.items-center{align-items:center}.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:calc(var(--spacing) * 1)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * .5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-\[1\.5px\]{border-style:var(--tw-border-style);border-width:1.5px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-none{--tw-border-style:none;border-style:none}.border-accent-amber{border-color:var(--color-accent-amber)}.border-border-hover{border-color:var(--color-border-hover)}.border-border-medium{border-color:var(--color-border-medium)}.border-border-strong{border-color:var(--color-border-strong)}.border-border-subtle{border-color:var(--color-border-subtle)}.border-highlight-border{border-color:var(--color-highlight-border)}.\!bg-transparent{background-color:#0000!important}.bg-accent-amber{background-color:var(--color-accent-amber)}.bg-accent-amber-muted{background-color:var(--color-accent-amber-muted)}.bg-accent-blue{background-color:var(--color-accent-blue)}.bg-accent-blue-muted{background-color:var(--color-accent-blue-muted)}.bg-accent-green{background-color:var(--color-accent-green)}.bg-accent-green-muted{background-color:var(--color-accent-green-muted)}.bg-accent-red{background-color:var(--color-accent-red)}.bg-accent-red-muted{background-color:var(--color-accent-red-muted)}.bg-badge-bg{background-color:var(--color-badge-bg)}.bg-bg-base{background-color:var(--color-bg-base)}.bg-bg-code{background-color:var(--color-bg-code)}.bg-bg-elevated{background-color:var(--color-bg-elevated)}.bg-bg-input{background-color:var(--color-bg-input)}.bg-bg-surface{background-color:var(--color-bg-surface)}.bg-bg-surface\/30{background-color:#1f1e184d}@supports (color:color-mix(in lab, red, red)){.bg-bg-surface\/30{background-color:color-mix(in oklab, var(--color-bg-surface) 30%, transparent)}}.bg-black\/40{background-color:#0006}@supports (color:color-mix(in lab, red, red)){.bg-black\/40{background-color:color-mix(in oklab, var(--color-black) 40%, transparent)}}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab, red, red)){.bg-black\/50{background-color:color-mix(in oklab, var(--color-black) 50%, transparent)}}.bg-border-hover{background-color:var(--color-border-hover)}.bg-border-medium{background-color:var(--color-border-medium)}.bg-border-subtle{background-color:var(--color-border-subtle)}.bg-btn-primary{background-color:var(--color-btn-primary)}.bg-highlight-bg{background-color:var(--color-highlight-bg)}.bg-highlight-selected{background-color:var(--color-highlight-selected)}.bg-text-inverse{background-color:var(--color-text-inverse)}.bg-text-primary{background-color:var(--color-text-primary)}.bg-transparent{background-color:#0000}.p-0{padding:calc(var(--spacing) * 0)}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:calc(var(--spacing) * 1)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-8{padding:calc(var(--spacing) * 8)}.px-0{padding-inline:calc(var(--spacing) * 0)}.px-1{padding-inline:calc(var(--spacing) * 1)}.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-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.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-4{padding-block:calc(var(--spacing) * 4)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-\[3px\]{padding-block:3px}.py-px{padding-block:1px}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pt-8{padding-top:calc(var(--spacing) * 8)}.pt-12{padding-top:calc(var(--spacing) * 12)}.pr-1{padding-right:calc(var(--spacing) * 1)}.pr-4{padding-right:calc(var(--spacing) * 4)}.pb-1{padding-bottom:calc(var(--spacing) * 1)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pb-32{padding-bottom:calc(var(--spacing) * 32)}.pl-2{padding-left:calc(var(--spacing) * 2)}.pl-3{padding-left:calc(var(--spacing) * 3)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-body{font-family:var(--font-body)}.font-heading{font-family:var(--font-heading)}.font-mono{font-family:var(--font-mono)}.text-meta{font-size:var(--text-meta);line-height:var(--tw-leading,var(--text-meta--line-height));letter-spacing:var(--tw-tracking,var(--text-meta--letter-spacing))}.text-section{font-size:var(--text-section);line-height:var(--tw-leading,var(--text-section--line-height));letter-spacing:var(--tw-tracking,var(--text-section--letter-spacing))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-body{font-size:var(--text-body);line-height:var(--tw-leading,var(--text-body--line-height))}.text-code{font-size:var(--text-code);line-height:var(--tw-leading,var(--text-code--line-height))}.text-task-label{font-size:var(--text-task-label);line-height:var(--tw-leading,var(--text-task-label--line-height))}.text-tiny{font-size:var(--text-tiny);line-height:var(--tw-leading,var(--text-tiny--line-height))}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.text-\[14px\]{font-size:14px}.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)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-accent-amber{color:var(--color-accent-amber)}.text-accent-blue{color:var(--color-accent-blue)}.text-accent-green{color:var(--color-accent-green)}.text-accent-red{color:var(--color-accent-red)}.text-btn-primary-text{color:var(--color-btn-primary-text)}.text-green-500{color:var(--color-green-500)}.text-text-code{color:var(--color-text-code)}.text-text-disabled{color:var(--color-text-disabled)}.text-text-primary{color:var(--color-text-primary)}.text-text-secondary{color:var(--color-text-secondary)}.text-text-tertiary{color:var(--color-text-tertiary)}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.decoration-border-hover{-webkit-text-decoration-color:var(--color-border-hover);-webkit-text-decoration-color:var(--color-border-hover);text-decoration-color:var(--color-border-hover)}.accent-accent-amber{accent-color:var(--color-accent-amber)}.opacity-0{opacity:0}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.shadow-lg{--tw-shadow:0 8px 24px var(--tw-shadow-color,var(--color-shadow));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 12px var(--tw-shadow-color,var(--color-shadow));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 2px var(--tw-shadow-color,var(--color-shadow));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-0{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(0px + 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)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[margin\]{transition-property:margin;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-100{--tw-duration:.1s;transition-duration:.1s}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.select-text{-webkit-user-select:text;user-select:text}@media (hover:hover){.group-hover\/ann\:opacity-100:is(:where(.group\/ann):hover *){opacity:1}.group-hover\/code\:opacity-60:is(:where(.group\/code):hover *),.group-hover\/diff\:opacity-60:is(:where(.group\/diff):hover *){opacity:.6}.group-hover\/item\:opacity-100:is(:where(.group\/item):hover *){opacity:1}.group-hover\/section\:opacity-20:is(:where(.group\/section):hover *){opacity:.2}.group-hover\/section\:opacity-50:is(:where(.group\/section):hover *){opacity:.5}.group-hover\/task\:opacity-100:is(:where(.group\/task):hover *){opacity:1}}.group-\[\[data-copied\=true\]\]\:block:is(:where(.group)[data-copied=true] *){display:block}.group-\[\[data-copied\=true\]\]\:hidden:is(:where(.group)[data-copied=true] *){display:none}.placeholder\:text-text-disabled::placeholder{color:var(--color-text-disabled)}.placeholder\:text-text-tertiary::placeholder{color:var(--color-text-tertiary)}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.odd\:bg-bg-elevated-half:nth-child(odd){background-color:var(--color-bg-elevated-half)}@media (hover:hover){.hover\:-translate-y-px:hover{--tw-translate-y:-1px;translate:var(--tw-translate-x) var(--tw-translate-y)}.hover\:border-border-hover:hover{border-color:var(--color-border-hover)}.hover\:bg-accent-blue-muted:hover{background-color:var(--color-accent-blue-muted)}.hover\:bg-accent-blue\/30:hover{background-color:#5a8ec44d}@supports (color:color-mix(in lab, red, red)){.hover\:bg-accent-blue\/30:hover{background-color:color-mix(in oklab, var(--color-accent-blue) 30%, transparent)}}.hover\:bg-accent-red-muted:hover{background-color:var(--color-accent-red-muted)}.hover\:bg-bg-elevated:hover{background-color:var(--color-bg-elevated)}.hover\:bg-bg-elevated-half:hover{background-color:var(--color-bg-elevated-half)}.hover\:bg-bg-input:hover{background-color:var(--color-bg-input)}.hover\:bg-bg-surface:hover{background-color:var(--color-bg-surface)}.hover\:bg-bg-surface\/50:hover{background-color:#1f1e1880}@supports (color:color-mix(in lab, red, red)){.hover\:bg-bg-surface\/50:hover{background-color:color-mix(in oklab, var(--color-bg-surface) 50%, transparent)}}.hover\:bg-border-medium:hover{background-color:var(--color-border-medium)}.hover\:bg-border-subtle:hover{background-color:var(--color-border-subtle)}.hover\:text-accent-red:hover{color:var(--color-accent-red)}.hover\:text-text-primary:hover{color:var(--color-text-primary)}.hover\:text-text-secondary:hover{color:var(--color-text-secondary)}.hover\:text-text-tertiary:hover{color:var(--color-text-tertiary)}.hover\:underline:hover{text-decoration-line:underline}.hover\:\!opacity-80:hover{opacity:.8!important}.hover\:\!opacity-100:hover{opacity:1!important}.hover\:opacity-90:hover{opacity:.9}.hover\:opacity-100:hover{opacity:1}}.focus\:border-none:focus{--tw-border-style:none;border-style:none}.focus\:border-border-hover:focus{border-color:var(--color-border-hover)}.focus\:ring-0:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(0px + 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\:outline-none:focus{--tw-outline-style:none;outline-style:none}@media (min-width:64rem){.lg\:mr-0{margin-right:calc(var(--spacing) * 0)}.lg\:mr-\[var\(--sidebar-width\,320px\)\]{margin-right:var(--sidebar-width,320px)}.lg\:ml-0{margin-left:calc(var(--spacing) * 0)}.lg\:ml-60{margin-left:calc(var(--spacing) * 60)}.lg\:flex{display:flex}.lg\:hidden{display:none}}}:root{--color-shadow:#00000040;--color-scrollbar:#fff8f00f;--color-scrollbar-hover:#fff8f01f;--color-folder-fill:#c49a3a26;--color-folder-fill-active:#c49a3a40;--color-folder-stroke:#c49a3a80;--color-folder-stroke-active:#c49a3a;--color-hljs-base:#c4beb7;--color-hljs-keyword:#d2a6ff;--color-hljs-string:#a8cc8c;--color-hljs-comment:#847d75;--color-hljs-number:#e8a87c;--color-hljs-variable:#7ec8e3;--color-hljs-function:#dbc074;--color-hljs-punctuation:#a09a92}[data-theme=light]{--color-bg-base:#faf5e6;--color-bg-surface:#f3edd8;--color-bg-elevated:#ebe4ce;--color-bg-code:#f0ebd5;--color-bg-input:#503c0a0d;--color-bg-elevated-half:#ebe4ce80;--color-text-primary:#2a2520;--color-text-secondary:#5a5550;--color-text-tertiary:#9a9390;--color-text-code:#4a4540;--color-text-disabled:#c5c0b8;--color-text-inverse:#faf6ef;--color-border-subtle:#503c1e14;--color-border-medium:#503c1e1a;--color-border-hover:#503c1e26;--color-border-strong:#503c1e33;--color-accent-green:#3a8a5a;--color-accent-green-muted:#3a8a5a1a;--color-accent-amber:#a07820;--color-accent-amber-muted:#a078201a;--color-accent-red:#b84a4a;--color-accent-red-muted:#b84a4a14;--color-accent-blue:#4a7eb4;--color-accent-blue-muted:#4a7eb414;--color-highlight-bg:#c8a01e26;--color-highlight-border:#c8a01e66;--color-highlight-annotation:#c8a01e2e;--color-highlight-active:#c8a01e40;--color-highlight-selected:#c8a01e1a;--color-badge-bg:#a0782026;--color-btn-primary:#2a2520;--color-btn-primary-text:#faf6ef;--color-shadow:#503c1e1a;--color-scrollbar:#503c1e14;--color-scrollbar-hover:#503c1e26;--color-folder-fill:#a078201f;--color-folder-fill-active:#a0782038;--color-folder-stroke:#a0782066;--color-folder-stroke-active:#a07820;--color-hljs-base:#4a4540;--color-hljs-keyword:#7c3aed;--color-hljs-string:#2e7d32;--color-hljs-comment:#9a9390;--color-hljs-number:#c45a20;--color-hljs-variable:#1976d2;--color-hljs-function:#8a6d00;--color-hljs-punctuation:#6b6560}code,pre,.font-mono{font-family:JetBrains Mono,Fira Code,Consolas,monospace}.annotation-highlight{background:var(--color-highlight-bg);border-bottom:2px solid var(--color-highlight-border);cursor:pointer;border-radius:2px;transition:background .15s}.annotation-highlight:hover,.annotation-highlight.active{background:var(--color-highlight-active)}::selection{background-color:var(--color-highlight-active);color:var(--color-text-primary)}:focus-visible{outline:2px solid var(--color-accent-blue);outline-offset:2px;border-radius:4px}textarea:focus-visible{outline:none}button,a,[role=button]{transition:all .15s}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--color-scrollbar);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:var(--color-scrollbar-hover)}.diff-added{background-color:#4a9e6d40}@supports (color:color-mix(in lab, red, red)){.diff-added{background-color:color-mix(in srgb, var(--color-accent-green) 25%, transparent)}}.diff-added{border-radius:2px;padding-block:1px;padding-inline:1px}.diff-removed{background-color:#c45a5a40}@supports (color:color-mix(in lab, red, red)){.diff-removed{background-color:color-mix(in srgb, var(--color-accent-red) 25%, transparent)}}.diff-removed{text-decoration:line-through;-webkit-text-decoration-color:var(--color-accent-red);-webkit-text-decoration-color:var(--color-accent-red);text-decoration-color:var(--color-accent-red);border-radius:2px;padding-block:1px;padding-inline:1px}.diff-block-removed{background:#c45a5a14}@supports (color:color-mix(in lab, red, red)){.diff-block-removed{background:color-mix(in srgb, var(--color-accent-red) 8%, transparent)}}.diff-block-removed{border-left:3px solid var(--color-accent-red);opacity:.7}.diff-block-added{background:#4a9e6d14}@supports (color:color-mix(in lab, red, red)){.diff-block-added{background:color-mix(in srgb, var(--color-accent-green) 8%, transparent)}}.diff-block-added{border-left:3px solid var(--color-accent-green)}.diff-row-removed td{background:#c45a5a1a}@supports (color:color-mix(in lab, red, red)){.diff-row-removed td{background:color-mix(in srgb, var(--color-accent-red) 10%, transparent)}}.diff-row-removed td{text-decoration:line-through;-webkit-text-decoration-color:var(--color-accent-red);-webkit-text-decoration-color:var(--color-accent-red);text-decoration-color:var(--color-accent-red);opacity:.6}.diff-row-added td{background:#4a9e6d1a}@supports (color:color-mix(in lab, red, red)){.diff-row-added td{background:color-mix(in srgb, var(--color-accent-green) 10%, transparent)}}.diff-item-removed{background:#c45a5a1a}@supports (color:color-mix(in lab, red, red)){.diff-item-removed{background:color-mix(in srgb, var(--color-accent-red) 10%, transparent)}}.diff-item-removed{text-decoration:line-through;-webkit-text-decoration-color:var(--color-accent-red);-webkit-text-decoration-color:var(--color-accent-red);text-decoration-color:var(--color-accent-red);opacity:.6}.diff-item-added{background:#4a9e6d1a}@supports (color:color-mix(in lab, red, red)){.diff-item-added{background:color-mix(in srgb, var(--color-accent-green) 10%, transparent)}}.diff-block-label{text-transform:uppercase;pointer-events:none;border-radius:3px;padding:1px 6px;font-size:10px;font-weight:500;position:absolute;top:4px;right:8px}@keyframes plan-refresh{0%{opacity:.6}to{opacity:1}}.plan-updated{animation:.3s plan-refresh}input[type=range]{appearance:none;background:0 0;height:20px}input[type=range]::-webkit-slider-thumb{appearance:none;background:var(--color-accent-amber);cursor:pointer;border:2px solid var(--color-bg-base);border-radius:50%;width:14px;height:14px;margin-top:-5px}input[type=range]::-moz-range-thumb{background:var(--color-accent-amber);cursor:pointer;border:2px solid var(--color-bg-base);border-radius:50%;width:14px;height:14px}input[type=range]::-webkit-slider-runnable-track{background:0 0;border-radius:2px;height:4px}input[type=range]::-moz-range-track{background:0 0;border-radius:2px;height:4px}.hljs{color:var(--color-hljs-base)!important;background:0 0!important}pre code.hljs{padding:0!important}.hljs-keyword,.hljs-selector-tag,.hljs-built_in,.hljs-name,.hljs-tag{color:var(--color-hljs-keyword)!important}.hljs-string,.hljs-title,.hljs-section,.hljs-attribute,.hljs-literal,.hljs-template-tag,.hljs-template-variable,.hljs-type{color:var(--color-hljs-string)!important}.hljs-comment,.hljs-quote,.hljs-deletion,.hljs-meta{color:var(--color-hljs-comment)!important}.hljs-number,.hljs-regexp,.hljs-addition{color:var(--color-hljs-number)!important}.hljs-variable,.hljs-attr{color:var(--color-hljs-variable)!important}.hljs-function .hljs-title,.hljs-title.function_{color:var(--color-hljs-function)!important}.hljs-params{color:var(--color-hljs-base)!important}.hljs-property{color:var(--color-hljs-variable)!important}.hljs-punctuation{color:var(--color-hljs-punctuation)!important}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes pulse{50%{opacity:.5}}
2
+ @import "https://fonts.googleapis.com/css2?family=Instrument+Serif&family=Inter:wght@400;500;600&family=JetBrains+Mono:wght@400;500&display=swap";@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:"JetBrains Mono", "Fira Code", Consolas, monospace;--color-green-500:oklch(72.3% .219 149.579);--color-black:#000;--spacing:.25rem;--container-2xl:42rem;--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--font-weight-medium:500;--font-weight-semibold:600;--tracking-wider:.05em;--tracking-widest:.1em;--leading-snug:1.375;--leading-relaxed:1.625;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--ease-out:cubic-bezier(0, 0, .2, 1);--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--blur-sm:8px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-bg-base:#1a1915;--color-bg-surface:#1f1e18;--color-bg-elevated:#25241d;--color-bg-code:#1c1b16;--color-bg-input:#fff8dc08;--color-bg-elevated-half:#25241d80;--color-text-primary:#e8e4df;--color-text-secondary:#a09a92;--color-text-tertiary:#847d75;--color-text-code:#c4beb7;--color-text-disabled:#3a3530;--color-text-inverse:#1a1a1a;--color-border-subtle:#fff8f00f;--color-border-medium:#fff8f014;--color-border-hover:#fff8f01f;--color-border-strong:#fff8f026;--color-accent-green:#4a9e6d;--color-accent-green-muted:#4a9e6d1f;--color-accent-amber:#c49a3a;--color-accent-amber-muted:#c49a3a1f;--color-accent-red:#c45a5a;--color-accent-red-muted:#c45a5a1f;--color-accent-blue:#5a8ec4;--color-accent-blue-muted:#5a8ec41a;--color-highlight-bg:#ffdc6426;--color-highlight-border:#ffdc6459;--color-highlight-annotation:#ffdc642e;--color-highlight-active:#ffdc6440;--color-highlight-selected:#ffdc641a;--color-badge-bg:#c49a3a33;--color-btn-primary:#e8e4df;--color-btn-primary-text:#1a1a1a;--font-heading:"Instrument Serif", Georgia, "Times New Roman", serif;--font-body:"Inter", -apple-system, BlinkMacSystemFont, sans-serif;--text-section:1.75rem;--text-section--line-height:1.25;--text-section--letter-spacing:-.01em;--text-task-label:.9375rem;--text-task-label--line-height:1.4;--text-body:.875rem;--text-body--line-height:1.65;--text-code:.8125rem;--text-code--line-height:1.6;--text-meta:.75rem;--text-meta--line-height:1.4;--text-meta--letter-spacing:.02em;--text-tiny:.6875rem;--text-tiny--line-height:1.4}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}body{background-color:var(--color-bg-base);color:var(--color-text-primary);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing) * 0)}.start{inset-inline-start:var(--spacing)}.end{inset-inline-end:var(--spacing)}.top-0{top:calc(var(--spacing) * 0)}.top-1{top:calc(var(--spacing) * 1)}.top-1\.5{top:calc(var(--spacing) * 1.5)}.top-1\/2{top:50%}.top-2{top:calc(var(--spacing) * 2)}.top-3{top:calc(var(--spacing) * 3)}.top-full{top:100%}.right-0{right:calc(var(--spacing) * 0)}.right-1{right:calc(var(--spacing) * 1)}.right-1\.5{right:calc(var(--spacing) * 1.5)}.right-3{right:calc(var(--spacing) * 3)}.right-6{right:calc(var(--spacing) * 6)}.bottom-0{bottom:calc(var(--spacing) * 0)}.-left-8{left:calc(var(--spacing) * -8)}.left-0{left:calc(var(--spacing) * 0)}.left-3{left:calc(var(--spacing) * 3)}.z-10{z-index:10}.z-20{z-index:20}.z-40{z-index:40}.z-50{z-index:50}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.-mx-4{margin-inline:calc(var(--spacing) * -4)}.mx-0\.5{margin-inline:calc(var(--spacing) * .5)}.mx-4{margin-inline:calc(var(--spacing) * 4)}.mx-auto{margin-inline:auto}.my-1{margin-block:calc(var(--spacing) * 1)}.-mt-0\.5{margin-top:calc(var(--spacing) * -.5)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:calc(var(--spacing) * 1)}.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-6{margin-top:calc(var(--spacing) * 6)}.mt-\[7px\]{margin-top:7px}.mt-px{margin-top:1px}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-8{margin-bottom:calc(var(--spacing) * 8)}.ml-1{margin-left:calc(var(--spacing) * 1)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.contents{display:contents}.flex{display:flex}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-2\.5{height:calc(var(--spacing) * 2.5)}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-64{height:calc(var(--spacing) * 64)}.h-\[2px\]{height:2px}.h-\[16px\]{height:16px}.h-\[18px\]{height:18px}.h-auto{height:auto}.h-full{height:100%}.h-screen{height:100vh}.max-h-80{max-height:calc(var(--spacing) * 80)}.min-h-0{min-height:calc(var(--spacing) * 0)}.min-h-\[20px\]{min-height:20px}.min-h-\[40px\]{min-height:40px}.min-h-\[60px\]{min-height:60px}.min-h-screen{min-height:100vh}.w-1{width:calc(var(--spacing) * 1)}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-1\/2{width:50%}.w-2{width:calc(var(--spacing) * 2)}.w-2\.5{width:calc(var(--spacing) * 2.5)}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-7{width:calc(var(--spacing) * 7)}.w-8{width:calc(var(--spacing) * 8)}.w-10{width:calc(var(--spacing) * 10)}.w-60{width:calc(var(--spacing) * 60)}.w-64{width:calc(var(--spacing) * 64)}.w-80{width:calc(var(--spacing) * 80)}.w-full{width:100%}.w-px{width:1px}.max-w-2xl{max-width:var(--container-2xl)}.max-w-\[85vw\]{max-width:85vw}.max-w-\[720px\]{max-width:720px}.max-w-full{max-width:100%}.min-w-0{min-width:calc(var(--spacing) * 0)}.min-w-\[16px\]{min-width:16px}.min-w-\[18px\]{min-width:18px}.flex-1{flex:1}.flex-shrink-0,.shrink-0{flex-shrink:0}.-translate-x-full{--tw-translate-x:-100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-full{--tw-translate-x:100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.-rotate-90{rotate:-90deg}.rotate-180{rotate:180deg}.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-col-resize{cursor:col-resize}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.cursor-text{cursor:text}.resize{resize:both}.resize-none{resize:none}.flex-col{flex-direction:column}.items-baseline{align-items:baseline}.items-center{align-items:center}.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:calc(var(--spacing) * 1)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}.self-start{align-self:flex-start}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-\[1\.5px\]{border-style:var(--tw-border-style);border-width:1.5px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-none{--tw-border-style:none;border-style:none}.border-accent-amber{border-color:var(--color-accent-amber)}.border-border-hover{border-color:var(--color-border-hover)}.border-border-medium{border-color:var(--color-border-medium)}.border-border-strong{border-color:var(--color-border-strong)}.border-border-subtle{border-color:var(--color-border-subtle)}.border-highlight-border{border-color:var(--color-highlight-border)}.\!bg-transparent{background-color:#0000!important}.bg-accent-amber{background-color:var(--color-accent-amber)}.bg-accent-amber-muted{background-color:var(--color-accent-amber-muted)}.bg-accent-blue{background-color:var(--color-accent-blue)}.bg-accent-blue-muted{background-color:var(--color-accent-blue-muted)}.bg-accent-blue\/10{background-color:#5a8ec41a}@supports (color:color-mix(in lab, red, red)){.bg-accent-blue\/10{background-color:color-mix(in oklab, var(--color-accent-blue) 10%, transparent)}}.bg-accent-green{background-color:var(--color-accent-green)}.bg-accent-green-muted{background-color:var(--color-accent-green-muted)}.bg-accent-red{background-color:var(--color-accent-red)}.bg-accent-red-muted{background-color:var(--color-accent-red-muted)}.bg-badge-bg{background-color:var(--color-badge-bg)}.bg-bg-base{background-color:var(--color-bg-base)}.bg-bg-code{background-color:var(--color-bg-code)}.bg-bg-elevated{background-color:var(--color-bg-elevated)}.bg-bg-input{background-color:var(--color-bg-input)}.bg-bg-surface{background-color:var(--color-bg-surface)}.bg-bg-surface\/30{background-color:#1f1e184d}@supports (color:color-mix(in lab, red, red)){.bg-bg-surface\/30{background-color:color-mix(in oklab, var(--color-bg-surface) 30%, transparent)}}.bg-black\/40{background-color:#0006}@supports (color:color-mix(in lab, red, red)){.bg-black\/40{background-color:color-mix(in oklab, var(--color-black) 40%, transparent)}}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab, red, red)){.bg-black\/50{background-color:color-mix(in oklab, var(--color-black) 50%, transparent)}}.bg-border-hover{background-color:var(--color-border-hover)}.bg-border-medium{background-color:var(--color-border-medium)}.bg-border-subtle{background-color:var(--color-border-subtle)}.bg-btn-primary{background-color:var(--color-btn-primary)}.bg-highlight-bg{background-color:var(--color-highlight-bg)}.bg-highlight-selected{background-color:var(--color-highlight-selected)}.bg-text-inverse{background-color:var(--color-text-inverse)}.bg-text-primary{background-color:var(--color-text-primary)}.bg-transparent{background-color:#0000}.p-0{padding:calc(var(--spacing) * 0)}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:calc(var(--spacing) * 1)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-8{padding:calc(var(--spacing) * 8)}.px-0{padding-inline:calc(var(--spacing) * 0)}.px-1{padding-inline:calc(var(--spacing) * 1)}.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-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.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-4{padding-block:calc(var(--spacing) * 4)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-\[3px\]{padding-block:3px}.py-px{padding-block:1px}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pt-8{padding-top:calc(var(--spacing) * 8)}.pt-12{padding-top:calc(var(--spacing) * 12)}.pr-1{padding-right:calc(var(--spacing) * 1)}.pr-4{padding-right:calc(var(--spacing) * 4)}.pb-1{padding-bottom:calc(var(--spacing) * 1)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pb-32{padding-bottom:calc(var(--spacing) * 32)}.pl-2{padding-left:calc(var(--spacing) * 2)}.pl-3{padding-left:calc(var(--spacing) * 3)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-body{font-family:var(--font-body)}.font-heading{font-family:var(--font-heading)}.font-mono{font-family:var(--font-mono)}.text-meta{font-size:var(--text-meta);line-height:var(--tw-leading,var(--text-meta--line-height));letter-spacing:var(--tw-tracking,var(--text-meta--letter-spacing))}.text-section{font-size:var(--text-section);line-height:var(--tw-leading,var(--text-section--line-height));letter-spacing:var(--tw-tracking,var(--text-section--letter-spacing))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-body{font-size:var(--text-body);line-height:var(--tw-leading,var(--text-body--line-height))}.text-code{font-size:var(--text-code);line-height:var(--tw-leading,var(--text-code--line-height))}.text-task-label{font-size:var(--text-task-label);line-height:var(--tw-leading,var(--text-task-label--line-height))}.text-tiny{font-size:var(--text-tiny);line-height:var(--tw-leading,var(--text-tiny--line-height))}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.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)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-accent-amber{color:var(--color-accent-amber)}.text-accent-blue{color:var(--color-accent-blue)}.text-accent-green{color:var(--color-accent-green)}.text-accent-red{color:var(--color-accent-red)}.text-btn-primary-text{color:var(--color-btn-primary-text)}.text-green-500{color:var(--color-green-500)}.text-text-code{color:var(--color-text-code)}.text-text-disabled{color:var(--color-text-disabled)}.text-text-primary{color:var(--color-text-primary)}.text-text-secondary{color:var(--color-text-secondary)}.text-text-tertiary{color:var(--color-text-tertiary)}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.decoration-border-hover{-webkit-text-decoration-color:var(--color-border-hover);-webkit-text-decoration-color:var(--color-border-hover);text-decoration-color:var(--color-border-hover)}.accent-accent-amber{accent-color:var(--color-accent-amber)}.opacity-0{opacity:0}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.shadow-lg{--tw-shadow:0 8px 24px var(--tw-shadow-color,var(--color-shadow));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 12px var(--tw-shadow-color,var(--color-shadow));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 2px var(--tw-shadow-color,var(--color-shadow));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-0{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(0px + 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)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[margin\]{transition-property:margin;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-100{--tw-duration:.1s;transition-duration:.1s}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.select-text{-webkit-user-select:text;user-select:text}@media (hover:hover){.group-hover\/ann\:opacity-100:is(:where(.group\/ann):hover *){opacity:1}.group-hover\/code\:opacity-60:is(:where(.group\/code):hover *),.group-hover\/diff\:opacity-60:is(:where(.group\/diff):hover *){opacity:.6}.group-hover\/item\:opacity-100:is(:where(.group\/item):hover *){opacity:1}.group-hover\/section\:opacity-20:is(:where(.group\/section):hover *){opacity:.2}.group-hover\/section\:opacity-50:is(:where(.group\/section):hover *){opacity:.5}.group-hover\/task\:opacity-100:is(:where(.group\/task):hover *){opacity:1}}.group-\[\[data-copied\=true\]\]\:block:is(:where(.group)[data-copied=true] *){display:block}.group-\[\[data-copied\=true\]\]\:hidden:is(:where(.group)[data-copied=true] *){display:none}.placeholder\:text-text-disabled::placeholder{color:var(--color-text-disabled)}.placeholder\:text-text-tertiary::placeholder{color:var(--color-text-tertiary)}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.odd\:bg-bg-elevated-half:nth-child(odd){background-color:var(--color-bg-elevated-half)}@media (hover:hover){.hover\:-translate-y-px:hover{--tw-translate-y:-1px;translate:var(--tw-translate-x) var(--tw-translate-y)}.hover\:border-border-hover:hover{border-color:var(--color-border-hover)}.hover\:bg-accent-blue-muted:hover{background-color:var(--color-accent-blue-muted)}.hover\:bg-accent-blue\/30:hover{background-color:#5a8ec44d}@supports (color:color-mix(in lab, red, red)){.hover\:bg-accent-blue\/30:hover{background-color:color-mix(in oklab, var(--color-accent-blue) 30%, transparent)}}.hover\:bg-accent-red-muted:hover{background-color:var(--color-accent-red-muted)}.hover\:bg-bg-elevated:hover{background-color:var(--color-bg-elevated)}.hover\:bg-bg-elevated-half:hover{background-color:var(--color-bg-elevated-half)}.hover\:bg-bg-input:hover{background-color:var(--color-bg-input)}.hover\:bg-bg-surface:hover{background-color:var(--color-bg-surface)}.hover\:bg-bg-surface\/50:hover{background-color:#1f1e1880}@supports (color:color-mix(in lab, red, red)){.hover\:bg-bg-surface\/50:hover{background-color:color-mix(in oklab, var(--color-bg-surface) 50%, transparent)}}.hover\:bg-border-medium:hover{background-color:var(--color-border-medium)}.hover\:bg-border-subtle:hover{background-color:var(--color-border-subtle)}.hover\:text-accent-blue:hover{color:var(--color-accent-blue)}.hover\:text-accent-red:hover{color:var(--color-accent-red)}.hover\:text-text-primary:hover{color:var(--color-text-primary)}.hover\:text-text-secondary:hover{color:var(--color-text-secondary)}.hover\:text-text-tertiary:hover{color:var(--color-text-tertiary)}.hover\:underline:hover{text-decoration-line:underline}.hover\:\!opacity-80:hover{opacity:.8!important}.hover\:\!opacity-100:hover{opacity:1!important}.hover\:opacity-90:hover{opacity:.9}.hover\:opacity-100:hover{opacity:1}}.focus\:border-none:focus{--tw-border-style:none;border-style:none}.focus\:border-border-hover:focus{border-color:var(--color-border-hover)}.focus\:ring-0:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(0px + 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\:outline-none:focus{--tw-outline-style:none;outline-style:none}@media (min-width:64rem){.lg\:mr-0{margin-right:calc(var(--spacing) * 0)}.lg\:mr-\[var\(--sidebar-width\,320px\)\]{margin-right:var(--sidebar-width,320px)}.lg\:ml-0{margin-left:calc(var(--spacing) * 0)}.lg\:ml-60{margin-left:calc(var(--spacing) * 60)}.lg\:flex{display:flex}.lg\:hidden{display:none}}}:root{--color-shadow:#00000040;--color-scrollbar:#fff8f00f;--color-scrollbar-hover:#fff8f01f;--color-folder-fill:#c49a3a26;--color-folder-fill-active:#c49a3a40;--color-folder-stroke:#c49a3a80;--color-folder-stroke-active:#c49a3a;--color-hljs-base:#c4beb7;--color-hljs-keyword:#d2a6ff;--color-hljs-string:#a8cc8c;--color-hljs-comment:#847d75;--color-hljs-number:#e8a87c;--color-hljs-variable:#7ec8e3;--color-hljs-function:#dbc074;--color-hljs-punctuation:#a09a92}[data-theme=light]{--color-bg-base:#faf5e6;--color-bg-surface:#f3edd8;--color-bg-elevated:#ebe4ce;--color-bg-code:#f0ebd5;--color-bg-input:#503c0a0d;--color-bg-elevated-half:#ebe4ce80;--color-text-primary:#2a2520;--color-text-secondary:#5a5550;--color-text-tertiary:#9a9390;--color-text-code:#4a4540;--color-text-disabled:#c5c0b8;--color-text-inverse:#faf6ef;--color-border-subtle:#503c1e14;--color-border-medium:#503c1e1a;--color-border-hover:#503c1e26;--color-border-strong:#503c1e33;--color-accent-green:#3a8a5a;--color-accent-green-muted:#3a8a5a1a;--color-accent-amber:#a07820;--color-accent-amber-muted:#a078201a;--color-accent-red:#b84a4a;--color-accent-red-muted:#b84a4a14;--color-accent-blue:#4a7eb4;--color-accent-blue-muted:#4a7eb414;--color-highlight-bg:#c8a01e26;--color-highlight-border:#c8a01e66;--color-highlight-annotation:#c8a01e2e;--color-highlight-active:#c8a01e40;--color-highlight-selected:#c8a01e1a;--color-badge-bg:#a0782026;--color-btn-primary:#2a2520;--color-btn-primary-text:#faf6ef;--color-shadow:#503c1e1a;--color-scrollbar:#503c1e14;--color-scrollbar-hover:#503c1e26;--color-folder-fill:#a078201f;--color-folder-fill-active:#a0782038;--color-folder-stroke:#a0782066;--color-folder-stroke-active:#a07820;--color-hljs-base:#4a4540;--color-hljs-keyword:#7c3aed;--color-hljs-string:#2e7d32;--color-hljs-comment:#9a9390;--color-hljs-number:#c45a20;--color-hljs-variable:#1976d2;--color-hljs-function:#8a6d00;--color-hljs-punctuation:#6b6560}code,pre,.font-mono{font-family:JetBrains Mono,Fira Code,Consolas,monospace}.annotation-highlight{background:var(--color-highlight-bg);border-bottom:2px solid var(--color-highlight-border);cursor:pointer;border-radius:2px;transition:background .15s}.annotation-highlight:hover,.annotation-highlight.active{background:var(--color-highlight-active)}::selection{background-color:var(--color-highlight-active);color:var(--color-text-primary)}:focus-visible{outline:2px solid var(--color-accent-blue);outline-offset:2px;border-radius:4px}textarea:focus-visible{outline:none}button,a,[role=button]{transition:all .15s}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--color-scrollbar);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:var(--color-scrollbar-hover)}.diff-added{background-color:#4a9e6d40}@supports (color:color-mix(in lab, red, red)){.diff-added{background-color:color-mix(in srgb, var(--color-accent-green) 25%, transparent)}}.diff-added{border-radius:2px;padding-block:1px;padding-inline:1px}.diff-removed{background-color:#c45a5a40}@supports (color:color-mix(in lab, red, red)){.diff-removed{background-color:color-mix(in srgb, var(--color-accent-red) 25%, transparent)}}.diff-removed{text-decoration:line-through;-webkit-text-decoration-color:var(--color-accent-red);-webkit-text-decoration-color:var(--color-accent-red);text-decoration-color:var(--color-accent-red);border-radius:2px;padding-block:1px;padding-inline:1px}.diff-block-removed{background:#c45a5a14}@supports (color:color-mix(in lab, red, red)){.diff-block-removed{background:color-mix(in srgb, var(--color-accent-red) 8%, transparent)}}.diff-block-removed{border-left:3px solid var(--color-accent-red);opacity:.7}.diff-block-added{background:#4a9e6d14}@supports (color:color-mix(in lab, red, red)){.diff-block-added{background:color-mix(in srgb, var(--color-accent-green) 8%, transparent)}}.diff-block-added{border-left:3px solid var(--color-accent-green)}.diff-row-removed td{background:#c45a5a1a}@supports (color:color-mix(in lab, red, red)){.diff-row-removed td{background:color-mix(in srgb, var(--color-accent-red) 10%, transparent)}}.diff-row-removed td{text-decoration:line-through;-webkit-text-decoration-color:var(--color-accent-red);-webkit-text-decoration-color:var(--color-accent-red);text-decoration-color:var(--color-accent-red);opacity:.6}.diff-row-added td{background:#4a9e6d1a}@supports (color:color-mix(in lab, red, red)){.diff-row-added td{background:color-mix(in srgb, var(--color-accent-green) 10%, transparent)}}.diff-item-removed{background:#c45a5a1a}@supports (color:color-mix(in lab, red, red)){.diff-item-removed{background:color-mix(in srgb, var(--color-accent-red) 10%, transparent)}}.diff-item-removed{text-decoration:line-through;-webkit-text-decoration-color:var(--color-accent-red);-webkit-text-decoration-color:var(--color-accent-red);text-decoration-color:var(--color-accent-red);opacity:.6}.diff-item-added{background:#4a9e6d1a}@supports (color:color-mix(in lab, red, red)){.diff-item-added{background:color-mix(in srgb, var(--color-accent-green) 10%, transparent)}}.diff-block-label{text-transform:uppercase;pointer-events:none;border-radius:3px;padding:1px 6px;font-size:10px;font-weight:500;position:absolute;top:4px;right:8px}@keyframes plan-refresh{0%{opacity:.6}to{opacity:1}}.plan-updated{animation:.3s plan-refresh}input[type=range]{appearance:none;background:0 0;height:20px}input[type=range]::-webkit-slider-thumb{appearance:none;background:var(--color-accent-amber);cursor:pointer;border:2px solid var(--color-bg-base);border-radius:50%;width:14px;height:14px;margin-top:-5px}input[type=range]::-moz-range-thumb{background:var(--color-accent-amber);cursor:pointer;border:2px solid var(--color-bg-base);border-radius:50%;width:14px;height:14px}input[type=range]::-webkit-slider-runnable-track{background:0 0;border-radius:2px;height:4px}input[type=range]::-moz-range-track{background:0 0;border-radius:2px;height:4px}.prose-canvas{color:var(--color-text-secondary);font-size:.875rem;line-height:1.7}.prose-canvas h1,.prose-canvas h2,.prose-canvas h3,.prose-canvas h4,.prose-canvas h5,.prose-canvas h6{color:var(--color-text-primary);margin-top:1.5em;margin-bottom:.5em;font-weight:600;line-height:1.3}.prose-canvas h1{font-size:1.5rem}.prose-canvas h2{font-size:1.25rem}.prose-canvas h3{font-size:1.1rem}.prose-canvas h1:first-child,.prose-canvas h2:first-child,.prose-canvas h3:first-child{margin-top:0}.prose-canvas p{margin-top:.75em;margin-bottom:.75em}.prose-canvas p:first-child{margin-top:0}.prose-canvas a{color:var(--color-accent-blue);-webkit-text-decoration:underline #5a8ec466;text-decoration:underline #5a8ec466}@supports (color:color-mix(in lab, red, red)){.prose-canvas a{-webkit-text-decoration-color:color-mix(in srgb, var(--color-accent-blue) 40%, transparent);-webkit-text-decoration-color:color-mix(in srgb, var(--color-accent-blue) 40%, transparent);text-decoration-color:color-mix(in srgb, var(--color-accent-blue) 40%, transparent)}}.prose-canvas a{text-underline-offset:2px}.prose-canvas a:hover{-webkit-text-decoration-color:var(--color-accent-blue);-webkit-text-decoration-color:var(--color-accent-blue);text-decoration-color:var(--color-accent-blue)}.prose-canvas strong{color:var(--color-text-primary);font-weight:600}.prose-canvas code{background:var(--color-bg-code);color:var(--color-text-code);border-radius:4px;padding:.15em .4em;font-size:.8em}.prose-canvas pre{background:var(--color-bg-code);border-radius:8px;margin-top:.75em;margin-bottom:.75em;padding:1em;overflow-x:auto}.prose-canvas pre code{background:0 0;padding:0;font-size:.8rem}.prose-canvas ul,.prose-canvas ol{margin-top:.5em;margin-bottom:.5em;padding-left:1.5em}.prose-canvas ul{list-style-type:disc}.prose-canvas ol{list-style-type:decimal}.prose-canvas li{margin-top:.25em}.prose-canvas li>ul,.prose-canvas li>ol{margin-top:.25em;margin-bottom:0}.prose-canvas blockquote{border-left:3px solid var(--color-border-strong);color:var(--color-text-tertiary);margin-top:.75em;margin-bottom:.75em;margin-left:0;padding-left:1em}.prose-canvas hr{border:none;border-top:1px solid var(--color-border-subtle);margin:1.5em 0}.prose-canvas table{border-collapse:collapse;width:100%;margin-top:.75em;margin-bottom:.75em;font-size:.8rem}.prose-canvas th,.prose-canvas td{border:1px solid var(--color-border-subtle);text-align:left;padding:.5em .75em}.prose-canvas th{background:var(--color-bg-elevated);color:var(--color-text-primary);font-weight:600}.prose-canvas img{border-radius:8px;max-width:100%;margin-top:.75em;margin-bottom:.75em}.hljs{color:var(--color-hljs-base)!important;background:0 0!important}pre code.hljs{padding:0!important}.hljs-keyword,.hljs-selector-tag,.hljs-built_in,.hljs-name,.hljs-tag{color:var(--color-hljs-keyword)!important}.hljs-string,.hljs-title,.hljs-section,.hljs-attribute,.hljs-literal,.hljs-template-tag,.hljs-template-variable,.hljs-type{color:var(--color-hljs-string)!important}.hljs-comment,.hljs-quote,.hljs-deletion,.hljs-meta{color:var(--color-hljs-comment)!important}.hljs-number,.hljs-regexp,.hljs-addition{color:var(--color-hljs-number)!important}.hljs-variable,.hljs-attr{color:var(--color-hljs-variable)!important}.hljs-function .hljs-title,.hljs-title.function_{color:var(--color-hljs-function)!important}.hljs-params{color:var(--color-hljs-base)!important}.hljs-property{color:var(--color-hljs-variable)!important}.hljs-punctuation{color:var(--color-hljs-punctuation)!important}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes pulse{50%{opacity:.5}}