agentic-documents 0.5.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +21 -0
- package/README.md +51 -8
- package/dist/{chunk-7R7ZPPRF.js → chunk-34C47PDC.js} +1 -1
- package/dist/{chunk-UPEGODUV.js → chunk-5IQX2W52.js} +1 -1
- package/dist/{chunk-S6MQDWFK.js → chunk-6UYJV2EJ.js} +19 -6
- package/dist/{chunk-E7B6T5WN.js → chunk-CN6UAW7B.js} +5 -3
- package/dist/chunk-DWVJIKVT.js +8 -0
- package/dist/{chunk-6QOYS63L.js → chunk-GQ5E6T7Z.js} +4 -2
- package/dist/{chunk-YNHZCIGO.js → chunk-JBAQEIOH.js} +5 -3
- package/dist/chunk-KC5KFB5R.js +354 -0
- package/dist/{chunk-FX755I7V.js → chunk-V6TBTOHW.js} +11 -8
- package/dist/cli.js +16 -14
- package/dist/client.d.ts +5 -5
- package/dist/{doc-mJPajXEQ.d.ts → doc-BXG9qG5X.d.ts} +4 -2
- package/dist/editor.css +37 -0
- package/dist/embed.d.ts +86 -0
- package/dist/embed.js +431 -0
- package/dist/formats.d.ts +6 -3
- package/dist/formats.js +14 -224
- package/dist/index.d.ts +12 -11
- package/dist/index.js +14 -12
- package/dist/live-worker.d.ts +2 -2
- package/dist/live-worker.js +7 -6
- package/dist/live.d.ts +2 -2
- package/dist/live.js +5 -4
- package/dist/{mcp-ESSEG46C.js → mcp-ZTUTC4CS.js} +5 -4
- package/dist/{export-Cwx276UP.d.ts → render-463xHb-x.d.ts} +3 -4
- package/dist/{review-Hgq8OgvD.d.ts → review-Ds-i5Vnc.d.ts} +2 -2
- package/dist/{service-CqKE9DKz.d.ts → service-Ck6oX-Kq.d.ts} +2 -2
- package/dist/ui/app.css +1 -1
- package/dist/ui/app.js +65 -65
- package/dist/worker.d.ts +2 -2
- package/dist/worker.js +7 -6
- package/package.json +28 -11
- package/dist/chunk-L6W2AQUF.js +0 -258
package/dist/formats.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Limits, TextDoc } from 'agentic-formats';
|
|
2
|
-
import { D as DocOptions,
|
|
3
|
-
import { a as ExportOptions } from './
|
|
2
|
+
import { D as DocOptions, A as AgenticDoc, d as PmNode, P as Principal } from './doc-BXG9qG5X.js';
|
|
3
|
+
import { a as ExportOptions } from './render-463xHb-x.js';
|
|
4
4
|
import 'yjs';
|
|
5
5
|
|
|
6
6
|
declare const IMPORT_FORMATS: readonly ["md", "odt", "docx"];
|
|
@@ -41,9 +41,12 @@ declare function fromTextDoc(model: TextDoc): {
|
|
|
41
41
|
};
|
|
42
42
|
/** Read a file into a new document. The author makes the one `create` edit, so text from an agent stays labeled. */
|
|
43
43
|
declare function importFile(input: string | Uint8Array, format: ImportFormat, author: Principal, options?: ImportOptions): ImportResult;
|
|
44
|
+
declare const ODT_MIME: string;
|
|
45
|
+
/** Write blocks as an OpenDocument text file (.odt). It drops the warnings; use `exportFile` or `exportDoc` to read what the file cannot hold. */
|
|
46
|
+
declare function exportOdt(blocks: PmNode[]): Uint8Array;
|
|
44
47
|
/** Write a document as a file. `title` goes into the ODT and DOCX metadata. */
|
|
45
48
|
declare function exportFile(doc: AgenticDoc, format: FileFormat, options?: ExportOptions & {
|
|
46
49
|
title?: string;
|
|
47
50
|
}): FileResult;
|
|
48
51
|
|
|
49
|
-
export { DOCX_MIME, FILE_FORMATS, type FileFormat, type FileResult, IMPORT_FORMATS, type ImportFormat, type ImportOptions, type ImportResult, exportFile, fromTextDoc, importFile, toTextDoc };
|
|
52
|
+
export { DOCX_MIME, FILE_FORMATS, type FileFormat, type FileResult, IMPORT_FORMATS, type ImportFormat, type ImportOptions, type ImportResult, ODT_MIME, exportFile, exportOdt, fromTextDoc, importFile, toTextDoc };
|
package/dist/formats.js
CHANGED
|
@@ -1,233 +1,23 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
// src/formats.ts
|
|
15
|
-
import { DEFAULT_LIMITS, FormatError, readDocx, readOdt, writeDocx, writeOdt } from "agentic-formats";
|
|
16
|
-
var IMPORT_FORMATS = ["md", "odt", "docx"];
|
|
17
|
-
var FILE_FORMATS = ["md", "html", "odt", "docx"];
|
|
18
|
-
var DOCX_MIME = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
|
|
19
|
-
var CONTENT_TYPES = {
|
|
20
|
-
md: "text/markdown; charset=utf-8",
|
|
21
|
-
html: "text/html; charset=utf-8",
|
|
22
|
-
odt: "application/vnd.oasis.opendocument.text",
|
|
23
|
-
docx: DOCX_MIME
|
|
24
|
-
};
|
|
25
|
-
var PM_MARKS = { bold: "bold", italic: "italic", strike: "strike", code: "code" };
|
|
26
|
-
var MODEL_IMAGE = /^image\/(png|jpeg|gif)$/;
|
|
27
|
-
var TASK = ["\u2610 ", "\u2611 "];
|
|
28
|
-
var warner = () => {
|
|
29
|
-
const seen = /* @__PURE__ */ new Set();
|
|
30
|
-
return { warn: (line) => void seen.add(line), list: () => [...seen] };
|
|
31
|
-
};
|
|
32
|
-
function toTextDoc(blocks, title) {
|
|
33
|
-
const { warn, list } = warner();
|
|
34
|
-
const inlines = (nodes = [], extra = []) => nodes.flatMap((node) => {
|
|
35
|
-
if (node.type === "hardBreak") return [{ type: "break" }];
|
|
36
|
-
if (node.type === "image") {
|
|
37
|
-
const alt = typeof node.attrs?.alt === "string" ? node.attrs.alt : "";
|
|
38
|
-
const found = DATA_IMAGE.exec(String(node.attrs?.src ?? "").trim());
|
|
39
|
-
if (found && MODEL_IMAGE.test(found[1].toLowerCase())) {
|
|
40
|
-
try {
|
|
41
|
-
return [{ type: "image", data: fromBase64(found[2]), mime: found[1].toLowerCase(), ...alt ? { alt } : {} }];
|
|
42
|
-
} catch {
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
warn("an image that is not an embedded PNG, JPEG, or GIF is kept as its alt text");
|
|
46
|
-
return [{ type: "text", text: `[image${alt ? `: ${alt}` : ""}]` }];
|
|
47
|
-
}
|
|
48
|
-
if (!node.text) return [];
|
|
49
|
-
const marks = [...extra, ...(node.marks ?? []).flatMap((m) => PM_MARKS[m.type] ? [PM_MARKS[m.type]] : [])];
|
|
50
|
-
const href = safeHref((node.marks ?? []).find((m) => m.type === "link")?.attrs?.href);
|
|
51
|
-
return [{ type: "text", text: node.text, ...marks.length ? { marks } : {}, ...href ? { href } : {} }];
|
|
52
|
-
});
|
|
53
|
-
const listOf = (node) => {
|
|
54
|
-
const items = (node.content ?? []).map((item) => {
|
|
55
|
-
const [first, ...rest] = item.content ?? [];
|
|
56
|
-
const content = inlines(first?.content);
|
|
57
|
-
if (item.type === "taskItem") content.unshift({ type: "text", text: TASK[item.attrs?.checked ? 1 : 0] });
|
|
58
|
-
let sublist;
|
|
59
|
-
for (const child of rest) {
|
|
60
|
-
if (!sublist && /^(bulletList|orderedList|taskList)$/.test(child.type)) sublist = listOf(child);
|
|
61
|
-
else {
|
|
62
|
-
warn("a list item with more than one paragraph is kept as one paragraph with line breaks");
|
|
63
|
-
for (const b of toBlocks(child)) content.push({ type: "break" }, ...textOfBlock(b));
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
return { content, ...sublist ? { sublist } : {} };
|
|
67
|
-
});
|
|
68
|
-
if (node.type === "orderedList" && Number(node.attrs?.start ?? 1) !== 1) warn("a numbered list that does not start at 1 starts at 1");
|
|
69
|
-
return { type: "list", ordered: node.type === "orderedList", items };
|
|
70
|
-
};
|
|
71
|
-
const textOfBlock = (b) => b.type === "list" ? b.items.flatMap((i, n) => [...n ? [{ type: "break" }] : [], ...i.content]) : b.type === "table" ? b.rows.flat(2).flatMap(textOfBlock) : b.content;
|
|
72
|
-
const toBlocks = (node) => {
|
|
73
|
-
switch (node.type) {
|
|
74
|
-
case "paragraph":
|
|
75
|
-
return [{ type: "paragraph", content: inlines(node.content) }];
|
|
76
|
-
case "heading": {
|
|
77
|
-
const level = Math.min(6, Math.max(1, Math.trunc(Number(node.attrs?.level)) || 1));
|
|
78
|
-
return [{ type: "heading", level, content: inlines(node.content) }];
|
|
79
|
-
}
|
|
80
|
-
case "blockquote":
|
|
81
|
-
warn("a quote is kept as plain paragraphs");
|
|
82
|
-
return (node.content ?? []).flatMap(toBlocks);
|
|
83
|
-
case "codeBlock": {
|
|
84
|
-
warn("a code block is kept as a paragraph of code text");
|
|
85
|
-
const lines = (node.content ?? []).map((t) => t.text ?? "").join("").split("\n");
|
|
86
|
-
return [{ type: "paragraph", content: lines.flatMap((line, i) => [...i ? [{ type: "break" }] : [], ...line ? [{ type: "text", text: line, marks: ["code"] }] : []]) }];
|
|
87
|
-
}
|
|
88
|
-
case "horizontalRule":
|
|
89
|
-
warn("a horizontal rule is left out");
|
|
90
|
-
return [];
|
|
91
|
-
case "bulletList":
|
|
92
|
-
case "orderedList":
|
|
93
|
-
case "taskList":
|
|
94
|
-
return [listOf(node)];
|
|
95
|
-
case "table": {
|
|
96
|
-
const rows = node.content ?? [];
|
|
97
|
-
const header = rows.length > 0 && (rows[0].content ?? []).length > 0 && (rows[0].content ?? []).every((c) => c.type === "tableHeader");
|
|
98
|
-
return [{ type: "table", ...header ? { header: true } : {}, rows: rows.map((r) => (r.content ?? []).map((c) => (c.content ?? []).flatMap(toBlocks))) }];
|
|
99
|
-
}
|
|
100
|
-
default:
|
|
101
|
-
warn(`a ${node.type} block is left out`);
|
|
102
|
-
return [];
|
|
103
|
-
}
|
|
104
|
-
};
|
|
105
|
-
const model = { ...title ? { title } : {}, blocks: blocks.flatMap(toBlocks) };
|
|
106
|
-
return { model, warnings: list() };
|
|
107
|
-
}
|
|
108
|
-
function fromTextDoc(model) {
|
|
109
|
-
const { warn, list } = warner();
|
|
110
|
-
const text = (value, marks = []) => value ? [{ type: "text", text: value, ...marks.length ? { marks } : {} }] : [];
|
|
111
|
-
const inlines = (nodes) => nodes.flatMap((node) => {
|
|
112
|
-
switch (node.type) {
|
|
113
|
-
case "break":
|
|
114
|
-
return [{ type: "hardBreak" }];
|
|
115
|
-
case "image":
|
|
116
|
-
if (!MODEL_IMAGE.test(node.mime)) {
|
|
117
|
-
warn("an image that is not a PNG, JPEG, or GIF is kept as its alt text");
|
|
118
|
-
return text(`[image${node.alt ? `: ${node.alt}` : ""}]`);
|
|
119
|
-
}
|
|
120
|
-
return [{ type: "image", attrs: { src: `data:${node.mime};base64,${toBase64(node.data)}`, alt: node.alt ?? null, title: null } }];
|
|
121
|
-
case "footnote":
|
|
122
|
-
warn("a footnote is kept as text in brackets");
|
|
123
|
-
return [...text(" ["), ...inlines(node.content), ...text("]")];
|
|
124
|
-
case "text": {
|
|
125
|
-
const marks = [];
|
|
126
|
-
for (const mark of node.marks ?? []) {
|
|
127
|
-
if (mark === "bold" || mark === "italic" || mark === "strike" || mark === "code") marks.push({ type: mark });
|
|
128
|
-
else warn(`the ${mark} mark is left out; the text stays`);
|
|
129
|
-
}
|
|
130
|
-
const href = node.href === void 0 ? void 0 : safeHref(node.href);
|
|
131
|
-
if (node.href !== void 0 && !href) warn("a link that is not a web, mail, or relative address is left out; the text stays");
|
|
132
|
-
if (href) marks.push({ type: "link", attrs: { href } });
|
|
133
|
-
if (marks.length > 1 && marks.some((m) => m.type === "code")) {
|
|
134
|
-
warn("a mark or a link on code text is left out; the text stays as code");
|
|
135
|
-
return text(node.text, [{ type: "code" }]);
|
|
136
|
-
}
|
|
137
|
-
return text(node.text, marks);
|
|
138
|
-
}
|
|
139
|
-
default:
|
|
140
|
-
return [];
|
|
141
|
-
}
|
|
142
|
-
});
|
|
143
|
-
const paragraph = (content) => ({ type: "paragraph", ...content.length ? { content: inlines(content) } : {} });
|
|
144
|
-
const toNodes = (block) => {
|
|
145
|
-
switch (block.type) {
|
|
146
|
-
case "heading":
|
|
147
|
-
return [{ type: "heading", attrs: { level: block.level }, content: inlines(block.content) }];
|
|
148
|
-
case "paragraph":
|
|
149
|
-
return [paragraph(block.content)];
|
|
150
|
-
case "list":
|
|
151
|
-
return [
|
|
152
|
-
{
|
|
153
|
-
type: block.ordered ? "orderedList" : "bulletList",
|
|
154
|
-
...block.ordered ? { attrs: { start: 1, type: null } } : {},
|
|
155
|
-
content: block.items.map((item) => ({ type: "listItem", content: [paragraph(item.content), ...item.sublist ? toNodes(item.sublist) : []] }))
|
|
156
|
-
}
|
|
157
|
-
];
|
|
158
|
-
case "table": {
|
|
159
|
-
const rows = block.rows.filter((r) => r.length > 0);
|
|
160
|
-
if (rows.length === 0) return [];
|
|
161
|
-
return [
|
|
162
|
-
{
|
|
163
|
-
type: "table",
|
|
164
|
-
content: rows.map((row, i) => ({
|
|
165
|
-
type: "tableRow",
|
|
166
|
-
content: row.map((cell) => {
|
|
167
|
-
const content = cell.flatMap(toNodes);
|
|
168
|
-
return { type: block.header && i === 0 ? "tableHeader" : "tableCell", attrs: { colspan: 1, rowspan: 1, colwidth: null }, content: content.length ? content : [{ type: "paragraph" }] };
|
|
169
|
-
})
|
|
170
|
-
}))
|
|
171
|
-
}
|
|
172
|
-
];
|
|
173
|
-
}
|
|
174
|
-
default:
|
|
175
|
-
return [];
|
|
176
|
-
}
|
|
177
|
-
};
|
|
178
|
-
const prune = (node) => node.content ? { ...node, content: node.content.filter((n) => n.type !== "text" || n.text).map(prune) } : node;
|
|
179
|
-
const blocks = model.blocks.flatMap(toNodes).map(prune);
|
|
180
|
-
return { blocks, ...model.title ? { title: model.title } : {}, warnings: list() };
|
|
181
|
-
}
|
|
182
|
-
var formatFailure = (error) => {
|
|
183
|
-
if (error instanceof FormatError) throw new DocError("INVALID_INPUT", `the file was refused (${error.code}): ${error.message}`);
|
|
184
|
-
throw error;
|
|
185
|
-
};
|
|
186
|
-
function importFile(input, format, author, options = {}) {
|
|
187
|
-
checkAuthor(author);
|
|
188
|
-
if (!IMPORT_FORMATS.includes(format)) throw new DocError("INVALID_INPUT", `import format must be one of ${IMPORT_FORMATS.join(", ")}`);
|
|
189
|
-
const maxBytes = options.limits?.maxInputBytes ?? DEFAULT_LIMITS.maxInputBytes;
|
|
190
|
-
if (format === "md") {
|
|
191
|
-
let markdown;
|
|
192
|
-
try {
|
|
193
|
-
markdown = typeof input === "string" ? input : new TextDecoder("utf-8", { fatal: true }).decode(input);
|
|
194
|
-
} catch {
|
|
195
|
-
throw new DocError("INVALID_INPUT", "a md file must be UTF-8 text");
|
|
196
|
-
}
|
|
197
|
-
if (new TextEncoder().encode(markdown).length > maxBytes) throw new DocError("INVALID_INPUT", `the file is larger than ${maxBytes} bytes`);
|
|
198
|
-
return { doc: AgenticDoc.fromMarkdown(markdown, author, options.doc), warnings: [] };
|
|
199
|
-
}
|
|
200
|
-
if (!(input instanceof Uint8Array)) throw new DocError("INVALID_INPUT", `a ${format} file must be bytes, not text`);
|
|
201
|
-
let read;
|
|
202
|
-
try {
|
|
203
|
-
read = format === "odt" ? readOdt(input, options.limits) : readDocx(input, options.limits);
|
|
204
|
-
} catch (error) {
|
|
205
|
-
return formatFailure(error);
|
|
206
|
-
}
|
|
207
|
-
const mapped = fromTextDoc(read.model);
|
|
208
|
-
return {
|
|
209
|
-
doc: AgenticDoc.fromBlocks(mapped.blocks, author, options.doc),
|
|
210
|
-
...mapped.title ? { title: mapped.title } : {},
|
|
211
|
-
warnings: [...read.warnings, ...mapped.warnings]
|
|
212
|
-
};
|
|
213
|
-
}
|
|
214
|
-
function exportFile(doc, format, options = {}) {
|
|
215
|
-
if (!FILE_FORMATS.includes(format)) throw new DocError("INVALID_INPUT", `export format must be one of ${FILE_FORMATS.join(", ")}`);
|
|
216
|
-
if (format === "md" || format === "html") return { format, contentType: CONTENT_TYPES[format], data: exportDoc(doc, format, options).data, warnings: [] };
|
|
217
|
-
const { model, warnings } = toTextDoc(doc.toJSON().content ?? [], options.title);
|
|
218
|
-
let written;
|
|
219
|
-
try {
|
|
220
|
-
written = format === "odt" ? writeOdt(model) : writeDocx(model);
|
|
221
|
-
} catch (error) {
|
|
222
|
-
return formatFailure(error);
|
|
223
|
-
}
|
|
224
|
-
return { format, contentType: CONTENT_TYPES[format], data: written.bytes, warnings: [...warnings, ...written.warnings] };
|
|
225
|
-
}
|
|
2
|
+
DOCX_MIME,
|
|
3
|
+
FILE_FORMATS,
|
|
4
|
+
IMPORT_FORMATS,
|
|
5
|
+
ODT_MIME,
|
|
6
|
+
exportFile,
|
|
7
|
+
exportOdt,
|
|
8
|
+
fromTextDoc,
|
|
9
|
+
importFile,
|
|
10
|
+
toTextDoc
|
|
11
|
+
} from "./chunk-KC5KFB5R.js";
|
|
12
|
+
import "./chunk-GQ5E6T7Z.js";
|
|
13
|
+
import "./chunk-DWVJIKVT.js";
|
|
226
14
|
export {
|
|
227
15
|
DOCX_MIME,
|
|
228
16
|
FILE_FORMATS,
|
|
229
17
|
IMPORT_FORMATS,
|
|
18
|
+
ODT_MIME,
|
|
230
19
|
exportFile,
|
|
20
|
+
exportOdt,
|
|
231
21
|
fromTextDoc,
|
|
232
22
|
importFile,
|
|
233
23
|
toTextDoc
|
package/dist/index.d.ts
CHANGED
|
@@ -1,13 +1,18 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export { a as
|
|
1
|
+
import { A as AgenticDoc, P as Principal } from './doc-BXG9qG5X.js';
|
|
2
|
+
export { a as Anchor, b as AnchorTarget, D as DocOptions, E as EditEntry, c as PRINCIPAL_KINDS, d as PmNode, e as PrincipalKind, S as Section, f as SectionTarget, T as Target, g as TextTarget, h as blocksToMarkdown, m as markdownToBlocks, p as parseAuthor } from './doc-BXG9qG5X.js';
|
|
3
3
|
import { Schema } from 'prosemirror-model';
|
|
4
|
-
export {
|
|
4
|
+
export { D as DocError, a as DocErrorCode, M as Message, S as Suggestion, b as Suggestions, T as Thread, c as Threads } from './review-Ds-i5Vnc.js';
|
|
5
5
|
import { z } from 'zod';
|
|
6
|
-
import {
|
|
7
|
-
export {
|
|
8
|
-
|
|
6
|
+
import { D as DocAccess } from './service-Ck6oX-Kq.js';
|
|
7
|
+
export { a as DocInfo, b as DocsPorts, c as DocsService } from './service-Ck6oX-Kq.js';
|
|
8
|
+
import { E as ExportFormat, a as ExportOptions, b as ExportResult } from './render-463xHb-x.js';
|
|
9
|
+
export { c as EXPORT_FORMATS } from './render-463xHb-x.js';
|
|
9
10
|
import { AdapterOptions, Blobs, Store } from 'agentic-identity';
|
|
11
|
+
export { ODT_MIME, exportOdt } from './formats.js';
|
|
10
12
|
import 'yjs';
|
|
13
|
+
import 'agentic-formats';
|
|
14
|
+
|
|
15
|
+
declare function exportDoc(doc: AgenticDoc, format: ExportFormat, options?: ExportOptions): ExportResult;
|
|
11
16
|
|
|
12
17
|
declare const schema: Schema<string, string>;
|
|
13
18
|
|
|
@@ -46,8 +51,4 @@ declare function createFileStore(dir: string, options?: AdapterOptions & Pick<Fi
|
|
|
46
51
|
shared?: string;
|
|
47
52
|
}): Store;
|
|
48
53
|
|
|
49
|
-
|
|
50
|
-
/** Write blocks as an OpenDocument text file (.odt): content, styles, and images as embedded files. */
|
|
51
|
-
declare function exportOdt(blocks: PmNode[]): Uint8Array;
|
|
52
|
-
|
|
53
|
-
export { type Command, type FileBlobsOptions, ODT_MIME, PmNode, Principal, commands, createFileBlobs, createFileStore, exportOdt, schema };
|
|
54
|
+
export { AgenticDoc, type Command, ExportFormat, ExportOptions, ExportResult, type FileBlobsOptions, Principal, commands, createFileBlobs, createFileStore, exportDoc, schema };
|
package/dist/index.js
CHANGED
|
@@ -1,32 +1,34 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createFileBlobs,
|
|
3
3
|
createFileStore
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-34C47PDC.js";
|
|
5
|
+
import {
|
|
6
|
+
commands,
|
|
7
|
+
exportDoc
|
|
8
|
+
} from "./chunk-6UYJV2EJ.js";
|
|
5
9
|
import {
|
|
6
10
|
DocsService
|
|
7
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-JBAQEIOH.js";
|
|
8
12
|
import {
|
|
9
|
-
|
|
10
|
-
|
|
13
|
+
Suggestions,
|
|
14
|
+
Threads
|
|
15
|
+
} from "./chunk-5IQX2W52.js";
|
|
11
16
|
import {
|
|
12
17
|
EXPORT_FORMATS,
|
|
13
18
|
ODT_MIME,
|
|
14
|
-
exportDoc,
|
|
15
19
|
exportOdt
|
|
16
|
-
} from "./chunk-
|
|
17
|
-
import {
|
|
18
|
-
Suggestions,
|
|
19
|
-
Threads
|
|
20
|
-
} from "./chunk-UPEGODUV.js";
|
|
20
|
+
} from "./chunk-KC5KFB5R.js";
|
|
21
21
|
import {
|
|
22
22
|
AgenticDoc,
|
|
23
23
|
DocError,
|
|
24
|
-
PRINCIPAL_KINDS,
|
|
25
24
|
blocksToMarkdown,
|
|
26
25
|
markdownToBlocks,
|
|
27
26
|
parseAuthor,
|
|
28
27
|
schema
|
|
29
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-GQ5E6T7Z.js";
|
|
29
|
+
import {
|
|
30
|
+
PRINCIPAL_KINDS
|
|
31
|
+
} from "./chunk-DWVJIKVT.js";
|
|
30
32
|
export {
|
|
31
33
|
AgenticDoc,
|
|
32
34
|
DocError,
|
package/dist/live-worker.d.ts
CHANGED
|
@@ -5,9 +5,9 @@ import 'hono';
|
|
|
5
5
|
import 'agentic-identity';
|
|
6
6
|
import 'agentic-identity/cloudflare';
|
|
7
7
|
import 'agentic-realtime';
|
|
8
|
-
import './doc-
|
|
8
|
+
import './doc-BXG9qG5X.js';
|
|
9
9
|
import 'yjs';
|
|
10
|
-
import './service-
|
|
10
|
+
import './service-Ck6oX-Kq.js';
|
|
11
11
|
|
|
12
12
|
type Namespace = Parameters<typeof createDurableObjectRealtime>[0];
|
|
13
13
|
interface LiveEnv extends WorkerEnv {
|
package/dist/live-worker.js
CHANGED
|
@@ -2,14 +2,15 @@ import {
|
|
|
2
2
|
createApp,
|
|
3
3
|
regionOf,
|
|
4
4
|
serviceFor
|
|
5
|
-
} from "./chunk-
|
|
6
|
-
import "./chunk-
|
|
7
|
-
import "./chunk-
|
|
8
|
-
import "./chunk-
|
|
9
|
-
import "./chunk-
|
|
5
|
+
} from "./chunk-V6TBTOHW.js";
|
|
6
|
+
import "./chunk-6UYJV2EJ.js";
|
|
7
|
+
import "./chunk-JBAQEIOH.js";
|
|
8
|
+
import "./chunk-5IQX2W52.js";
|
|
9
|
+
import "./chunk-KC5KFB5R.js";
|
|
10
10
|
import {
|
|
11
11
|
DocError
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-GQ5E6T7Z.js";
|
|
13
|
+
import "./chunk-DWVJIKVT.js";
|
|
13
14
|
|
|
14
15
|
// src/live-worker.ts
|
|
15
16
|
import { createDurableObjectRealtime } from "agentic-realtime/worker";
|
package/dist/live.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Peer } from 'agentic-realtime/client';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { A as AgenticDoc, P as Principal, D as DocOptions } from './doc-BXG9qG5X.js';
|
|
3
|
+
import { D as DocAccess, d as DocSummary } from './service-Ck6oX-Kq.js';
|
|
4
4
|
import 'yjs';
|
|
5
5
|
import 'agentic-identity';
|
|
6
6
|
|
package/dist/live.js
CHANGED
|
@@ -2,10 +2,11 @@ import {
|
|
|
2
2
|
LiveDoc,
|
|
3
3
|
LiveService,
|
|
4
4
|
whoAmI
|
|
5
|
-
} from "./chunk-
|
|
6
|
-
import "./chunk-
|
|
7
|
-
import "./chunk-
|
|
8
|
-
import "./chunk-
|
|
5
|
+
} from "./chunk-CN6UAW7B.js";
|
|
6
|
+
import "./chunk-JBAQEIOH.js";
|
|
7
|
+
import "./chunk-5IQX2W52.js";
|
|
8
|
+
import "./chunk-GQ5E6T7Z.js";
|
|
9
|
+
import "./chunk-DWVJIKVT.js";
|
|
9
10
|
export {
|
|
10
11
|
LiveDoc,
|
|
11
12
|
LiveService,
|
|
@@ -3,12 +3,13 @@ import {
|
|
|
3
3
|
} from "./chunk-5Y66UCTE.js";
|
|
4
4
|
import {
|
|
5
5
|
commands
|
|
6
|
-
} from "./chunk-
|
|
7
|
-
import "./chunk-
|
|
8
|
-
import "./chunk-
|
|
6
|
+
} from "./chunk-6UYJV2EJ.js";
|
|
7
|
+
import "./chunk-5IQX2W52.js";
|
|
8
|
+
import "./chunk-KC5KFB5R.js";
|
|
9
9
|
import {
|
|
10
10
|
DocError
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-GQ5E6T7Z.js";
|
|
12
|
+
import "./chunk-DWVJIKVT.js";
|
|
12
13
|
|
|
13
14
|
// src/mcp.ts
|
|
14
15
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import { a as AgenticDoc } from './doc-mJPajXEQ.js';
|
|
2
|
-
|
|
3
1
|
declare const EXPORT_FORMATS: readonly ["md", "html", "odt"];
|
|
4
2
|
type ExportFormat = (typeof EXPORT_FORMATS)[number];
|
|
5
3
|
interface ExportOptions {
|
|
@@ -11,7 +9,8 @@ interface ExportResult {
|
|
|
11
9
|
contentType: string;
|
|
12
10
|
encoding: "utf8" | "base64";
|
|
13
11
|
data: string;
|
|
12
|
+
/** One line for each part of the document that the format cannot hold. Empty when nothing was lost. */
|
|
13
|
+
warnings: string[];
|
|
14
14
|
}
|
|
15
|
-
declare function exportDoc(doc: AgenticDoc, format: ExportFormat, options?: ExportOptions): ExportResult;
|
|
16
15
|
|
|
17
|
-
export { type ExportFormat as E, type ExportOptions as a,
|
|
16
|
+
export { type ExportFormat as E, type ExportOptions as a, type ExportResult as b, EXPORT_FORMATS as c };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { a as Anchor, P as Principal, A as AgenticDoc, g as TextTarget, b as AnchorTarget } from './doc-BXG9qG5X.js';
|
|
2
2
|
|
|
3
3
|
type DocErrorCode = "NO_MATCH" | "AMBIGUOUS_MATCH" | "STALE_ANCHOR" | "NO_SECTION" | "INVALID_AUTHOR" | "INVALID_INPUT" | "NO_THREAD" | "NO_SUGGESTION" | "ALREADY_DECIDED" | "FORBIDDEN" | "NO_DOCUMENT" | "DOCUMENT_EXISTS" | "LOCKED" | "CONFLICT" | "MISCONFIGURED";
|
|
4
4
|
declare class DocError extends Error {
|
|
@@ -82,4 +82,4 @@ declare class Suggestions {
|
|
|
82
82
|
}): Suggestion[];
|
|
83
83
|
}
|
|
84
84
|
|
|
85
|
-
export {
|
|
85
|
+
export { DocError as D, type Message as M, type Suggestion as S, type Thread as T, type DocErrorCode as a, Suggestions as b, Threads as c };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { e as PrincipalKind, P as Principal, A as AgenticDoc, D as DocOptions } from './doc-BXG9qG5X.js';
|
|
2
2
|
import { Blobs, Store } from 'agentic-identity';
|
|
3
3
|
|
|
4
4
|
/** What the catalog keeps for each document. The author kind stays, so machine-made work stays labeled. */
|
|
@@ -88,4 +88,4 @@ declare class DocsService implements DocAccess {
|
|
|
88
88
|
write<T>(id: string, run: (doc: AgenticDoc) => T, author?: Principal): Promise<T>;
|
|
89
89
|
}
|
|
90
90
|
|
|
91
|
-
export { type
|
|
91
|
+
export { type DocAccess as D, type DocInfo as a, type DocsPorts as b, DocsService as c, type DocSummary as d };
|
package/dist/ui/app.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url("./assets/inter-latin-ext-wght-normal-HA22NDSG.woff2") format("woff2-variations");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url("./assets/inter-latin-wght-normal-NRMW37G5.woff2") format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url("./assets/jetbrains-mono-latin-ext-wght-normal-TSLVDSQR.woff2") format("woff2-variations");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url("./assets/jetbrains-mono-latin-wght-normal-VBS632QH.woff2") format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root,[data-theme=light]{color-scheme:light;--ad-color-bg: #FAF9F7;--ad-color-surface: #FFFFFF;--ad-color-surface-raised: #FFFFFF;--ad-color-surface-sunken: #F3F1EE;--ad-color-surface-hover: #E9E6E1;--ad-color-text: #1D1C1A;--ad-color-text-muted: #5E5A53;--ad-color-text-on-accent: #FFFFFF;--ad-color-border: #DAD7D1;--ad-color-border-strong: #827D73;--ad-color-accent: #2B4BC4;--ad-color-accent-hover: #223D9F;--ad-color-accent-subtle: #E8EDFC;--ad-color-accent-text: #223D9F;--ad-color-agent: #8E2C86;--ad-color-agent-subtle: #F7E8F5;--ad-color-agent-text: #7A2273;--ad-color-danger: #B42318;--ad-color-danger-subtle: #FDECEA;--ad-color-danger-text: #A11D14;--ad-color-warning: #92520A;--ad-color-warning-subtle: #FDF1DC;--ad-color-warning-text: #7A4208;--ad-color-success: #1B6B3A;--ad-color-success-subtle: #E6F5EC;--ad-color-success-text: #175C32;--ad-color-focus: #2B4BC4;--ad-color-scrim: rgb(29 28 26 / .4);--ad-shadow-raised: 0 1px 2px rgb(29 28 26 / .06), 0 2px 16px rgb(29 28 26 / .08);--ad-shadow-floating: 0 2px 6px rgb(29 28 26 / .08), 0 8px 40px rgb(29 28 26 / .16)}:root{--ad-space-1: .25rem;--ad-space-2: .5rem;--ad-space-3: .75rem;--ad-space-4: 1rem;--ad-space-6: 1.5rem;--ad-space-8: 2rem;--ad-space-12: 3rem;--ad-space-16: 4rem;--ad-space-24: 6rem;--ad-radius-sm: .25rem;--ad-radius-md: .5rem;--ad-radius-lg: .75rem;--ad-radius-full: 9999px;--ad-font-family-sans: "Inter Variable", ui-sans-serif, system-ui, sans-serif;--ad-font-family-mono: "JetBrains Mono Variable", ui-monospace, "SF Mono", Menlo, monospace;--ad-font-size-xs: .75rem;--ad-font-size-sm: .875rem;--ad-font-size-md: 1rem;--ad-font-size-lg: 1.125rem;--ad-font-size-xl: 1.5rem;--ad-font-size-2xl: 2rem;--ad-line-height-tight: 1.25;--ad-line-height-snug: 1.4;--ad-line-height-normal: 1.55;--ad-font-weight-regular: 400;--ad-font-weight-medium: 500;--ad-font-weight-semibold: 600;--ad-duration-fast: .1s;--ad-duration-base: .16s;--ad-duration-slow: .24s;--ad-easing-out: cubic-bezier(.16, 1, .3, 1);--ad-size-control: 2rem;--ad-size-control-touch: 2.75rem;--ad-size-sidebar: 16rem;--ad-size-topbar: 3rem;--ad-size-content: 46rem}@media(prefers-color-scheme:dark){:root:not([data-theme]){color-scheme:dark;--ad-color-bg: #141311;--ad-color-surface: #1B1A18;--ad-color-surface-raised: #232220;--ad-color-surface-sunken: #100F0E;--ad-color-surface-hover: #2E2C29;--ad-color-text: #EDEBE7;--ad-color-text-muted: #A9A49A;--ad-color-text-on-accent: #0E1633;--ad-color-border: #2E2C29;--ad-color-border-strong: #7A756B;--ad-color-accent: #8EA4FF;--ad-color-accent-hover: #A9BAFF;--ad-color-accent-subtle: #1E2745;--ad-color-accent-text: #B3C2FF;--ad-color-agent: #E49BDC;--ad-color-agent-subtle: #3A1F37;--ad-color-agent-text: #F0B8E9;--ad-color-danger: #F2877D;--ad-color-danger-subtle: #3B1A17;--ad-color-danger-text: #F8A39B;--ad-color-warning: #E8B04A;--ad-color-warning-subtle: #3A2A0F;--ad-color-warning-text: #F0C677;--ad-color-success: #6FCF97;--ad-color-success-subtle: #14301F;--ad-color-success-text: #8BDBAC;--ad-color-focus: #A9BAFF;--ad-color-scrim: rgb(0 0 0 / .6);--ad-shadow-raised: 0 1px 2px rgb(0 0 0 / .3), 0 2px 16px rgb(0 0 0 / .3);--ad-shadow-floating: 0 2px 6px rgb(0 0 0 / .3), 0 8px 40px rgb(0 0 0 / .5)}}[data-theme=dark]{color-scheme:dark;--ad-color-bg: #141311;--ad-color-surface: #1B1A18;--ad-color-surface-raised: #232220;--ad-color-surface-sunken: #100F0E;--ad-color-surface-hover: #2E2C29;--ad-color-text: #EDEBE7;--ad-color-text-muted: #A9A49A;--ad-color-text-on-accent: #0E1633;--ad-color-border: #2E2C29;--ad-color-border-strong: #7A756B;--ad-color-accent: #8EA4FF;--ad-color-accent-hover: #A9BAFF;--ad-color-accent-subtle: #1E2745;--ad-color-accent-text: #B3C2FF;--ad-color-agent: #E49BDC;--ad-color-agent-subtle: #3A1F37;--ad-color-agent-text: #F0B8E9;--ad-color-danger: #F2877D;--ad-color-danger-subtle: #3B1A17;--ad-color-danger-text: #F8A39B;--ad-color-warning: #E8B04A;--ad-color-warning-subtle: #3A2A0F;--ad-color-warning-text: #F0C677;--ad-color-success: #6FCF97;--ad-color-success-subtle: #14301F;--ad-color-success-text: #8BDBAC;--ad-color-focus: #A9BAFF;--ad-color-scrim: rgb(0 0 0 / .6);--ad-shadow-raised: 0 1px 2px rgb(0 0 0 / .3), 0 2px 16px rgb(0 0 0 / .3);--ad-shadow-floating: 0 2px 6px rgb(0 0 0 / .3), 0 8px 40px rgb(0 0 0 / .5)}@media(prefers-reduced-motion:reduce){:root{--ad-duration-fast: .01ms;--ad-duration-base: .01ms;--ad-duration-slow: .01ms}}*,*:before,*:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;text-size-adjust:100%}body{margin:0;background:var(--ad-color-bg);color:var(--ad-color-text);font-family:var(--ad-font-family-sans);font-size:var(--ad-font-size-sm);line-height:var(--ad-line-height-normal);font-feature-settings:"cv11","ss03";-webkit-font-smoothing:antialiased}h1,h2,h3,h4{margin:0;line-height:var(--ad-line-height-tight);font-weight:var(--ad-font-weight-semibold);text-wrap:balance}h1{font-size:var(--ad-font-size-2xl)}h2{font-size:var(--ad-font-size-xl)}h3{font-size:var(--ad-font-size-lg)}h4{font-size:var(--ad-font-size-md)}p{margin:0;text-wrap:pretty}a{color:var(--ad-color-accent-text);text-underline-offset:.2em}code,kbd,pre{font-family:var(--ad-font-family-mono);font-size:.9em}:focus-visible{outline:2px solid var(--ad-color-focus);outline-offset:2px}::selection{background:var(--ad-color-accent-subtle);color:var(--ad-color-accent-text)}.ad-sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}.ad-skip-link{position:absolute;inset-block-start:var(--ad-space-2);inset-inline-start:var(--ad-space-2);z-index:100;padding:var(--ad-space-2) var(--ad-space-4);border-radius:var(--ad-radius-md);background:var(--ad-color-surface-raised);color:var(--ad-color-text);box-shadow:var(--ad-shadow-floating);transform:translateY(-200%)}.ad-skip-link:focus{transform:none}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;scroll-behavior:auto!important;transition-duration:.01ms!important}}:root{--ad-control-h: var(--ad-size-control)}@media(pointer:coarse){:root{--ad-control-h: var(--ad-size-control-touch)}}.ad-button{--button-bg: var(--ad-color-surface);--button-bg-hover: var(--ad-color-surface-hover);--button-bg-active: var(--ad-color-surface-sunken);--button-fg: var(--ad-color-text);--button-border: var(--ad-color-border-strong);display:inline-flex;align-items:center;justify-content:center;gap:var(--ad-space-2);min-height:var(--ad-control-h);padding:0 var(--ad-space-4);border:1px solid var(--button-border);border-radius:var(--ad-radius-md);background:var(--button-bg);color:var(--button-fg);font:inherit;font-weight:var(--ad-font-weight-medium);line-height:1;white-space:nowrap;cursor:pointer;transition:background-color var(--ad-duration-fast) var(--ad-easing-out)}.ad-button:hover{background:var(--button-bg-hover)}.ad-button:active{background:var(--button-bg-active)}.ad-button--sm{min-height:1.75rem;padding:0 var(--ad-space-3);font-size:var(--ad-font-size-xs)}@media(pointer:coarse){.ad-button--sm{min-height:var(--ad-control-h)}}.ad-button--primary{--button-bg: var(--ad-color-accent);--button-bg-hover: var(--ad-color-accent-hover);--button-bg-active: var(--ad-color-accent-hover);--button-fg: var(--ad-color-text-on-accent);--button-border: transparent}.ad-button--ghost{--button-bg: transparent;--button-border: transparent}.ad-button--danger{--button-bg-hover: var(--ad-color-danger-subtle);--button-bg-active: var(--ad-color-danger-subtle);--button-fg: var(--ad-color-danger-text);--button-border: var(--ad-color-danger)}.ad-button:disabled{--button-bg: var(--ad-color-surface-sunken);--button-bg-hover: var(--ad-color-surface-sunken);--button-fg: var(--ad-color-text-muted);--button-border: var(--ad-color-border);cursor:not-allowed}.ad-button[aria-busy=true]{cursor:progress}.ad-icon-button{width:var(--ad-control-h);padding:0}.ad-icon-button.ad-button--sm{width:1.75rem}@media(pointer:coarse){.ad-icon-button.ad-button--sm{width:var(--ad-control-h)}}.ad-spinner{width:1em;height:1em;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:ad-spin .7s linear infinite}@keyframes ad-spin{to{transform:rotate(360deg)}}.ad-field{display:grid;gap:var(--ad-space-1)}.ad-field__label{font-weight:var(--ad-font-weight-medium)}.ad-field__hint{color:var(--ad-color-text-muted);font-size:var(--ad-font-size-xs)}.ad-field__error{display:flex;align-items:flex-start;gap:var(--ad-space-1);color:var(--ad-color-danger-text);font-size:var(--ad-font-size-xs)}.ad-field__error svg{flex:none;margin-top:-.1em}.ad-input{width:100%;min-height:var(--ad-control-h);padding:0 var(--ad-space-3);border:1px solid var(--ad-color-border-strong);border-radius:var(--ad-radius-md);background:var(--ad-color-surface);color:var(--ad-color-text);font:inherit}.ad-input::placeholder{color:var(--ad-color-text-muted);opacity:1}.ad-input:hover:not(:disabled){background:var(--ad-color-surface-sunken)}.ad-input[aria-invalid=true]{border-color:var(--ad-color-danger);box-shadow:inset 0 0 0 1px var(--ad-color-danger)}.ad-input:disabled{background:var(--ad-color-surface-sunken);border-color:var(--ad-color-border);color:var(--ad-color-text-muted);cursor:not-allowed}.ad-textarea{min-height:5rem;padding:var(--ad-space-2) var(--ad-space-3);resize:vertical}.ad-select{position:relative;display:block}.ad-select select{appearance:none;padding-inline-end:var(--ad-space-8);cursor:pointer}.ad-select:after{content:"";position:absolute;inset-inline-end:var(--ad-space-3);inset-block-start:50%;width:.45rem;height:.45rem;border:solid var(--ad-color-text-muted);border-width:0 2px 2px 0;transform:translateY(-75%) rotate(45deg);pointer-events:none}.ad-toggle{display:grid;gap:var(--ad-space-1)}.ad-toggle__row{display:flex;align-items:center;gap:var(--ad-space-3);min-height:var(--ad-control-h);cursor:pointer}.ad-checkbox,.ad-switch{appearance:none;flex:none;margin:0;border:1px solid var(--ad-color-border-strong);background:var(--ad-color-surface);cursor:pointer;transition:background-color var(--ad-duration-fast) var(--ad-easing-out)}.ad-checkbox{display:grid;place-items:center;width:1.25rem;height:1.25rem;border-radius:var(--ad-radius-sm)}.ad-checkbox:before{content:"";width:.75rem;height:.75rem;background:var(--ad-color-text-on-accent);clip-path:polygon(14% 52%,0 66%,38% 100%,100% 20%,86% 8%,38% 72%);transform:scale(0);transition:transform var(--ad-duration-fast) var(--ad-easing-out)}.ad-checkbox:checked{background:var(--ad-color-accent);border-color:var(--ad-color-accent)}.ad-checkbox:checked:before{transform:scale(1)}.ad-switch{position:relative;width:2.25rem;height:1.375rem;border-radius:var(--ad-radius-full);background:var(--ad-color-surface-sunken)}.ad-switch:before{content:"";position:absolute;inset-block-start:50%;inset-inline-start:.2rem;width:.875rem;height:.875rem;border-radius:var(--ad-radius-full);background:var(--ad-color-text-muted);transform:translateY(-50%);transition:inset-inline-start var(--ad-duration-base) var(--ad-easing-out)}.ad-switch:checked{background:var(--ad-color-accent);border-color:var(--ad-color-accent)}.ad-switch:checked:before{background:var(--ad-color-text-on-accent);inset-inline-start:calc(100% - 1.075rem)}.ad-checkbox:disabled,.ad-switch:disabled{background:var(--ad-color-surface-sunken);border-color:var(--ad-color-border);cursor:not-allowed}.ad-checkbox:disabled:before{background:var(--ad-color-text-muted)}.ad-switch:disabled:before{background:var(--ad-color-border)}@keyframes ad-fade-in{0%{opacity:0}}@keyframes ad-pop-in{0%{opacity:0;scale:.97}}.ad-overlay{position:fixed;z-index:50;inset:0;background:var(--ad-color-scrim);animation:ad-fade-in var(--ad-duration-base) var(--ad-easing-out)}.ad-dialog{position:fixed;z-index:50;inset:0;margin:auto;width:min(32rem,calc(100vw - 2rem));height:fit-content;max-height:calc(100vh - 2rem);overflow:auto;padding:var(--ad-space-6);border:1px solid var(--ad-color-border);border-radius:var(--ad-radius-lg);background:var(--ad-color-surface-raised);box-shadow:var(--ad-shadow-floating);animation:ad-pop-in var(--ad-duration-base) var(--ad-easing-out)}.ad-dialog__title{padding-inline-end:var(--ad-space-8);font-size:var(--ad-font-size-lg)}.ad-dialog__description{margin-top:var(--ad-space-2);color:var(--ad-color-text-muted)}.ad-dialog__body{margin-top:var(--ad-space-4)}.ad-dialog__footer{display:flex;justify-content:flex-end;gap:var(--ad-space-2);margin-top:var(--ad-space-6)}.ad-dialog__close{position:absolute;inset-block-start:var(--ad-space-3);inset-inline-end:var(--ad-space-3)}.ad-tooltip{z-index:60;max-width:16rem;padding:var(--ad-space-1) var(--ad-space-2);border-radius:var(--ad-radius-sm);background:var(--ad-color-text);color:var(--ad-color-bg);font-size:var(--ad-font-size-xs);animation:ad-fade-in var(--ad-duration-fast) var(--ad-easing-out)}.ad-menu{z-index:60;min-width:11rem;padding:var(--ad-space-1);border:1px solid var(--ad-color-border);border-radius:var(--ad-radius-md);background:var(--ad-color-surface-raised);box-shadow:var(--ad-shadow-floating);animation:ad-pop-in var(--ad-duration-fast) var(--ad-easing-out)}.ad-menu__item{display:flex;align-items:center;gap:var(--ad-space-2);min-height:var(--ad-control-h);padding:0 var(--ad-space-3);border-radius:var(--ad-radius-sm);color:var(--ad-color-text);cursor:pointer;outline:none;user-select:none}.ad-menu__item[data-highlighted]{background:var(--ad-color-surface-hover)}.ad-menu__item[data-highlighted]:focus-visible,.ad-menu__item:focus-visible{outline:2px solid var(--ad-color-focus);outline-offset:-2px}.ad-menu__item[data-disabled]{color:var(--ad-color-text-muted);cursor:not-allowed}.ad-menu__item--danger{color:var(--ad-color-danger-text)}.ad-menu__shortcut{margin-inline-start:auto;color:var(--ad-color-text-muted);font-size:var(--ad-font-size-xs)}.ad-menu__separator{height:1px;margin:var(--ad-space-1) 0;background:var(--ad-color-border)}.ad-toast-viewport{position:fixed;inset-block-end:var(--ad-space-4);inset-inline-end:var(--ad-space-4);z-index:70;display:grid;gap:var(--ad-space-2);width:min(24rem,calc(100vw - 2rem));margin:0;padding:0;list-style:none}.ad-toast{display:grid;grid-template-columns:auto 1fr auto;align-items:start;gap:var(--ad-space-3);padding:var(--ad-space-3) var(--ad-space-3) var(--ad-space-3) var(--ad-space-4);border:1px solid var(--ad-color-border);border-radius:var(--ad-radius-md);background:var(--ad-color-surface-raised);box-shadow:var(--ad-shadow-floating)}.ad-toast[data-state=open]{animation:ad-pop-in var(--ad-duration-base) var(--ad-easing-out)}.ad-toast__icon{margin-top:var(--ad-space-1)}.ad-toast--info .ad-toast__icon{color:var(--ad-color-accent)}.ad-toast--success .ad-toast__icon{color:var(--ad-color-success)}.ad-toast--warning .ad-toast__icon{color:var(--ad-color-warning)}.ad-toast--danger .ad-toast__icon{color:var(--ad-color-danger)}.ad-toast__title{font-weight:var(--ad-font-weight-medium)}.ad-toast__description{margin-top:var(--ad-space-1);color:var(--ad-color-text-muted)}.ad-tabs__list{display:flex;gap:var(--ad-space-1);border-bottom:1px solid var(--ad-color-border)}.ad-tabs__trigger{position:relative;min-height:var(--ad-control-h);padding:0 var(--ad-space-3);border:0;background:transparent;color:var(--ad-color-text-muted);font:inherit;cursor:pointer}.ad-tabs__trigger:hover{color:var(--ad-color-text)}.ad-tabs__trigger[data-state=active]{color:var(--ad-color-text);font-weight:var(--ad-font-weight-semibold)}.ad-tabs__trigger[data-state=active]:after{content:"";position:absolute;inset:auto var(--ad-space-3) -1px;height:2px;background:var(--ad-color-accent)}.ad-tabs__panel{padding-top:var(--ad-space-4)}.ad-shell{display:grid;grid-template-columns:var(--ad-size-sidebar) minmax(0,1fr);grid-template-rows:auto 1fr;grid-template-areas:"sidebar topbar" "sidebar content";min-height:100vh}.ad-shell__sidebar{grid-area:sidebar;display:flex;flex-direction:column;gap:var(--ad-space-4);padding:var(--ad-space-4) var(--ad-space-3);border-inline-end:1px solid var(--ad-color-border);background:var(--ad-color-surface-sunken)}.ad-shell__brand{padding:0 var(--ad-space-3);font-weight:var(--ad-font-weight-semibold)}.ad-shell__topbar{grid-area:topbar;display:flex;align-items:center;gap:var(--ad-space-3);min-height:var(--ad-size-topbar);padding:0 var(--ad-space-6);border-bottom:1px solid var(--ad-color-border);background:var(--ad-color-bg)}.ad-shell__actions{display:flex;align-items:center;gap:var(--ad-space-4);margin-inline-start:auto}.ad-shell__content{grid-area:content;min-width:0;padding:var(--ad-space-8) var(--ad-space-6) var(--ad-space-24);outline:none}.ad-shell__menu{display:none}@media(max-width:47.99rem){.ad-shell{grid-template-columns:minmax(0,1fr);grid-template-rows:auto auto 1fr;grid-template-areas:"topbar" "sidebar" "content"}.ad-shell__menu{display:inline-flex}.ad-shell__sidebar[data-open=false]{display:none}.ad-shell__sidebar{border-inline-end:0;border-bottom:1px solid var(--ad-color-border)}.ad-shell__topbar,.ad-shell__content{padding-inline:var(--ad-space-4)}}.ad-sidebar-nav{display:grid;gap:var(--ad-space-1);margin:0;padding:0;list-style:none}.ad-sidebar-nav__link{display:flex;align-items:center;gap:var(--ad-space-2);min-height:var(--ad-control-h);padding:0 var(--ad-space-3);border-radius:var(--ad-radius-md);color:var(--ad-color-text);text-decoration:none}.ad-sidebar-nav__link:hover{background:var(--ad-color-surface-hover)}.ad-sidebar-nav__link[aria-current=page]{background:var(--ad-color-accent-subtle);color:var(--ad-color-accent-text);font-weight:var(--ad-font-weight-semibold)}.ad-toolbar{display:inline-flex;align-items:center;gap:var(--ad-space-1);padding:var(--ad-space-1);border:1px solid var(--ad-color-border);border-radius:var(--ad-radius-md);background:var(--ad-color-surface)}.ad-toolbar__separator{align-self:stretch;width:1px;margin:var(--ad-space-1);background:var(--ad-color-border)}.ad-button[aria-pressed=true]{box-shadow:inset 0 0 0 1px var(--button-border);font-weight:var(--ad-font-weight-semibold);--button-bg: var(--ad-color-accent-subtle);--button-bg-hover: var(--ad-color-accent-subtle);--button-fg: var(--ad-color-accent-text);--button-border: var(--ad-color-accent)}.ad-empty{display:grid;justify-items:center;gap:var(--ad-space-3);padding:var(--ad-space-12) var(--ad-space-6);text-align:center}.ad-empty__title{font-size:var(--ad-font-size-lg)}.ad-empty__description{max-width:28rem;color:var(--ad-color-text-muted)}.ad-files{margin:0;padding:0;list-style:none;border-top:1px solid var(--ad-color-border)}.ad-file-row{display:grid;grid-template-columns:auto minmax(0,1fr) auto auto auto;align-items:center;gap:var(--ad-space-4);min-height:3rem;padding:var(--ad-space-1) var(--ad-space-2);border-bottom:1px solid var(--ad-color-border)}.ad-file-row:hover{background:var(--ad-color-surface-sunken)}.ad-file-row__icon{display:inline-flex;color:var(--ad-color-text-muted)}.ad-file-row__name{min-height:1.5rem;overflow:hidden;color:var(--ad-color-text);font-weight:var(--ad-font-weight-medium);text-overflow:ellipsis;white-space:nowrap}.ad-file-row__meta,.ad-file-row__time{display:inline-flex;align-items:center;gap:var(--ad-space-2);color:var(--ad-color-text-muted);font-size:var(--ad-font-size-xs)}.ad-file-row__actions{display:inline-flex}@media(max-width:47.99rem){.ad-file-row{grid-template-columns:auto minmax(0,1fr) auto;grid-template-areas:"icon name actions" ". meta meta" ". time time"}.ad-file-row__icon{grid-area:icon}.ad-file-row__name{grid-area:name}.ad-file-row__meta{grid-area:meta}.ad-file-row__time{grid-area:time}.ad-file-row__actions{grid-area:actions}}.ad-avatar{display:inline-grid;flex:none;place-items:center;width:1.5rem;height:1.5rem;border:1px solid var(--ad-color-border-strong);background:var(--ad-color-surface-sunken);color:var(--ad-color-text);font-size:var(--ad-font-size-xs);font-weight:var(--ad-font-weight-medium);line-height:1}.ad-avatar svg{width:.9rem;height:.9rem}.ad-avatar--person{border-radius:var(--ad-radius-full)}.ad-avatar--agent{border-color:var(--ad-color-agent);border-radius:var(--ad-radius-sm);background:var(--ad-color-agent-subtle);color:var(--ad-color-agent-text)}.ad-avatar--more{border-radius:var(--ad-radius-full);background:var(--ad-color-surface);color:var(--ad-color-text-muted)}.ad-chip{display:inline-flex;align-items:center;gap:var(--ad-space-2);max-width:100%;min-width:0}.ad-chip__name{overflow:hidden;color:var(--ad-color-text);font-weight:var(--ad-font-weight-medium);text-overflow:ellipsis;white-space:nowrap}.ad-chip__meta{color:var(--ad-color-text-muted);font-size:var(--ad-font-size-xs);white-space:nowrap}.ad-pill{flex:none;padding:.125rem var(--ad-space-2);border:1px solid var(--ad-color-agent);border-radius:var(--ad-radius-full);color:var(--ad-color-agent-text);font-size:var(--ad-font-size-xs);font-weight:var(--ad-font-weight-semibold);letter-spacing:.02em;line-height:1.2;text-transform:uppercase}.ad-stack{display:inline-flex;align-items:center;gap:var(--ad-space-3)}.ad-stack__list{display:flex;margin:0;padding:0;list-style:none}.ad-stack__list li+li{margin-inline-start:-.25rem}.ad-stack__list .ad-avatar{width:1.75rem;height:1.75rem;box-shadow:0 0 0 2px var(--ad-color-bg)}.ad-stack__summary{color:var(--ad-color-text-muted);font-size:var(--ad-font-size-xs);white-space:nowrap}@media(forced-colors:active){.ad-checkbox:checked,.ad-switch:checked{background:Highlight;border-color:Highlight}.ad-checkbox:before{background:HighlightText}.ad-switch{background:Canvas;border-color:ButtonText}.ad-switch:before{background:ButtonText}.ad-switch:checked:before{background:HighlightText}.ad-button[aria-busy=true]{border-style:dashed}.ad-button[aria-pressed=true]{background:Highlight;color:HighlightText;border-color:Highlight}.ad-tabs__trigger[data-state=active]:after{background:Highlight}.ad-menu__item[data-highlighted]{outline:2px solid Highlight;outline-offset:-2px}}.ad-dialog:has(.ad-share){width:min(36rem,calc(100vw - 2rem))}.ad-share{display:grid;gap:var(--ad-space-4)}.ad-share__invite{display:grid;grid-template-columns:minmax(0,1fr) auto auto;align-items:start;gap:var(--ad-space-3)}.ad-share__invite .ad-field:first-child{grid-column:1 / -1}.ad-share__invite .ad-button{align-self:end}.ad-share__sent{color:var(--ad-color-success-text);font-size:var(--ad-font-size-xs)}.ad-share__people{display:grid;margin:0;padding:0;list-style:none;border-top:1px solid var(--ad-color-border)}.ad-share__people li{display:flex;align-items:center;justify-content:space-between;gap:var(--ad-space-3);padding:var(--ad-space-2) 0;border-bottom:1px solid var(--ad-color-border)}.ad-share__people .ad-field{min-width:9rem}.ad-share__controls{display:inline-flex;align-items:center;gap:var(--ad-space-2)}.ad-share__owner{padding-inline:var(--ad-space-3);color:var(--ad-color-text-muted)}.ad-share__row{display:grid;grid-template-columns:1fr 1fr;gap:var(--ad-space-3)}.ad-share__copy{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:end;gap:var(--ad-space-3)}@media(max-width:30rem){.ad-share__invite,.ad-share__row,.ad-share__copy{grid-template-columns:1fr}}.ad-cursor{position:relative;display:inline-block;width:0;vertical-align:baseline;user-select:none}.ad-cursor__caret{position:absolute;inset-block:-.2em -.15em;inset-inline-start:0;width:2px;background:var(--ad-color-accent)}.ad-cursor__tag{position:absolute;inset-block-end:1.45em;inset-inline-start:0;padding:.0625rem var(--ad-space-2);border:1px solid var(--ad-color-accent);border-radius:var(--ad-radius-sm) var(--ad-radius-sm) var(--ad-radius-sm) 0;background:var(--ad-color-accent);color:var(--ad-color-text-on-accent);font-size:var(--ad-font-size-xs);font-weight:var(--ad-font-weight-medium);line-height:1.3;white-space:nowrap}.ad-cursor--agent .ad-cursor__caret{background:var(--ad-color-agent)}.ad-cursor--agent .ad-cursor__tag{border-color:var(--ad-color-agent);border-radius:var(--ad-radius-sm);background:var(--ad-color-agent-subtle);color:var(--ad-color-agent-text)}.page-head{display:flex;align-items:center;justify-content:space-between;gap:var(--ad-space-4);flex-wrap:wrap;margin-block-end:var(--ad-space-6);max-width:var(--ad-size-content)}.page-head h1{margin:0;font-size:var(--ad-font-size-xl);line-height:var(--ad-line-height-tight);overflow-wrap:anywhere}.page-head h1:focus-visible{outline:2px solid var(--ad-color-focus);outline-offset:4px;border-radius:var(--ad-radius-sm)}.page-actions{display:flex;gap:var(--ad-space-2);flex-wrap:wrap}.muted{color:var(--ad-color-text-muted);font-size:var(--ad-font-size-sm);margin:0}.notice{max-width:var(--ad-size-content)}.signin{max-width:24rem;margin:var(--ad-space-24) auto 0;padding:0 var(--ad-space-4);display:grid;gap:var(--ad-space-4)}.signin h1{margin:0;font-size:var(--ad-font-size-xl)}.form{display:grid;gap:var(--ad-space-4)}.form-actions{display:flex;gap:var(--ad-space-2);align-items:center;justify-content:flex-end;flex-wrap:wrap}.form-error{color:var(--ad-color-danger-text);margin:0;font-size:var(--ad-font-size-sm)}.section-title{margin:var(--ad-space-2) 0 0;font-size:var(--ad-font-size-md)}.people{list-style:none;margin:0;padding:0;display:grid;gap:var(--ad-space-2)}.editor-bar{display:flex;align-items:center;justify-content:space-between;gap:var(--ad-space-4);flex-wrap:wrap;max-width:var(--ad-size-content);margin-block-end:var(--ad-space-3)}.editor-meta{display:flex;align-items:center;gap:var(--ad-space-4);flex-wrap:wrap}.glyph{font-weight:var(--ad-font-weight-semibold);min-width:1.25rem;text-align:center}.glyph--b{font-weight:800}.glyph--i{font-style:italic;font-family:serif}.editor-host{max-width:var(--ad-size-content);background:var(--ad-color-surface);border:1px solid var(--ad-color-border);border-radius:var(--ad-radius-md)}.editor-host:focus-within{outline:2px solid var(--ad-color-focus);outline-offset:2px}.prose{min-height:20rem;padding:var(--ad-space-6);outline:none;line-height:var(--ad-line-height-normal);overflow-wrap:anywhere}.prose>:first-child{margin-top:0}.prose h1{font-size:var(--ad-font-size-2xl);line-height:var(--ad-line-height-tight)}.prose h2{font-size:var(--ad-font-size-xl);line-height:var(--ad-line-height-tight)}.prose h3{font-size:var(--ad-font-size-lg)}.prose a{color:var(--ad-color-accent-text);text-decoration:underline}.prose blockquote{margin-inline:0;padding-inline-start:var(--ad-space-4);border-inline-start:3px solid var(--ad-color-border-strong)}.prose code{font-family:var(--ad-font-family-mono);background:var(--ad-color-surface-sunken);padding:0 .25em;border-radius:var(--ad-radius-sm)}.prose pre{background:var(--ad-color-surface-sunken);padding:var(--ad-space-3);border-radius:var(--ad-radius-md);overflow-x:auto}.prose table{border-collapse:collapse}.prose th,.prose td{border:1px solid var(--ad-color-border-strong);padding:var(--ad-space-1) var(--ad-space-2)}.prose img{max-width:100%}.prose ul[data-type=taskList]{list-style:none;padding-inline-start:var(--ad-space-2)}.prose ul[data-type=taskList] li{display:flex;gap:var(--ad-space-2)}.agent-text{text-decoration:underline dotted 2px var(--ad-color-agent);text-underline-offset:3px;background:var(--ad-color-agent-subtle);border-radius:2px}.legend{margin-block-start:var(--ad-space-3)}.caret{position:relative;border-inline-start:2px solid var(--ad-color-accent);margin-inline:-1px;pointer-events:none;word-break:normal}.caret--agent{border-inline-start:2px dashed var(--ad-color-agent)}.caret__tag{position:absolute;top:-1.45em;inset-inline-start:-2px;white-space:nowrap;font-size:var(--ad-font-size-xs);line-height:1.3;padding:0 var(--ad-space-1);border-radius:var(--ad-radius-sm) var(--ad-radius-sm) var(--ad-radius-sm) 0;background:var(--ad-color-accent);color:var(--ad-color-text-on-accent);user-select:none}.caret--agent .caret__tag{background:var(--ad-color-surface);color:var(--ad-color-agent-text);border:1px solid var(--ad-color-agent);border-radius:0}
|
|
1
|
+
@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url("./assets/inter-latin-ext-wght-normal-HA22NDSG.woff2") format("woff2-variations");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url("./assets/inter-latin-wght-normal-NRMW37G5.woff2") format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url("./assets/jetbrains-mono-latin-ext-wght-normal-TSLVDSQR.woff2") format("woff2-variations");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url("./assets/jetbrains-mono-latin-wght-normal-VBS632QH.woff2") format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root,[data-theme=light]{color-scheme:light;--ad-color-bg: #FAF9F7;--ad-color-surface: #FFFFFF;--ad-color-surface-raised: #FFFFFF;--ad-color-surface-sunken: #F3F1EE;--ad-color-surface-hover: #E9E6E1;--ad-color-text: #1D1C1A;--ad-color-text-muted: #5E5A53;--ad-color-text-on-accent: #FFFFFF;--ad-color-border: #DAD7D1;--ad-color-border-strong: #827D73;--ad-color-accent: #2B4BC4;--ad-color-accent-hover: #223D9F;--ad-color-accent-subtle: #E8EDFC;--ad-color-accent-text: #223D9F;--ad-color-agent: #8E2C86;--ad-color-agent-subtle: #F7E8F5;--ad-color-agent-text: #7A2273;--ad-color-danger: #B42318;--ad-color-danger-subtle: #FDECEA;--ad-color-danger-text: #A11D14;--ad-color-warning: #92520A;--ad-color-warning-subtle: #FDF1DC;--ad-color-warning-text: #7A4208;--ad-color-success: #1B6B3A;--ad-color-success-subtle: #E6F5EC;--ad-color-success-text: #175C32;--ad-color-focus: #2B4BC4;--ad-color-scrim: rgb(29 28 26 / .4);--ad-shadow-raised: 0 1px 2px rgb(29 28 26 / .06), 0 2px 16px rgb(29 28 26 / .08);--ad-shadow-floating: 0 2px 6px rgb(29 28 26 / .08), 0 8px 40px rgb(29 28 26 / .16)}:root{--ad-space-1: .25rem;--ad-space-2: .5rem;--ad-space-3: .75rem;--ad-space-4: 1rem;--ad-space-6: 1.5rem;--ad-space-8: 2rem;--ad-space-12: 3rem;--ad-space-16: 4rem;--ad-space-24: 6rem;--ad-radius-sm: .25rem;--ad-radius-md: .5rem;--ad-radius-lg: .75rem;--ad-radius-full: 9999px;--ad-font-family-sans: "Inter Variable", ui-sans-serif, system-ui, sans-serif;--ad-font-family-mono: "JetBrains Mono Variable", ui-monospace, "SF Mono", Menlo, monospace;--ad-font-size-xs: .75rem;--ad-font-size-sm: .875rem;--ad-font-size-md: 1rem;--ad-font-size-lg: 1.125rem;--ad-font-size-xl: 1.5rem;--ad-font-size-2xl: 2rem;--ad-line-height-tight: 1.25;--ad-line-height-snug: 1.4;--ad-line-height-normal: 1.55;--ad-font-weight-regular: 400;--ad-font-weight-medium: 500;--ad-font-weight-semibold: 600;--ad-duration-fast: .1s;--ad-duration-base: .16s;--ad-duration-slow: .24s;--ad-easing-out: cubic-bezier(.16, 1, .3, 1);--ad-size-control: 2rem;--ad-size-control-touch: 2.75rem;--ad-size-sidebar: 16rem;--ad-size-topbar: 3rem;--ad-size-content: 46rem}@media(prefers-color-scheme:dark){:root:not([data-theme]){color-scheme:dark;--ad-color-bg: #141311;--ad-color-surface: #1B1A18;--ad-color-surface-raised: #232220;--ad-color-surface-sunken: #100F0E;--ad-color-surface-hover: #2E2C29;--ad-color-text: #EDEBE7;--ad-color-text-muted: #A9A49A;--ad-color-text-on-accent: #0E1633;--ad-color-border: #2E2C29;--ad-color-border-strong: #7A756B;--ad-color-accent: #8EA4FF;--ad-color-accent-hover: #A9BAFF;--ad-color-accent-subtle: #1E2745;--ad-color-accent-text: #B3C2FF;--ad-color-agent: #E49BDC;--ad-color-agent-subtle: #3A1F37;--ad-color-agent-text: #F0B8E9;--ad-color-danger: #F2877D;--ad-color-danger-subtle: #3B1A17;--ad-color-danger-text: #F8A39B;--ad-color-warning: #E8B04A;--ad-color-warning-subtle: #3A2A0F;--ad-color-warning-text: #F0C677;--ad-color-success: #6FCF97;--ad-color-success-subtle: #14301F;--ad-color-success-text: #8BDBAC;--ad-color-focus: #A9BAFF;--ad-color-scrim: rgb(0 0 0 / .6);--ad-shadow-raised: 0 1px 2px rgb(0 0 0 / .3), 0 2px 16px rgb(0 0 0 / .3);--ad-shadow-floating: 0 2px 6px rgb(0 0 0 / .3), 0 8px 40px rgb(0 0 0 / .5)}}[data-theme=dark]{color-scheme:dark;--ad-color-bg: #141311;--ad-color-surface: #1B1A18;--ad-color-surface-raised: #232220;--ad-color-surface-sunken: #100F0E;--ad-color-surface-hover: #2E2C29;--ad-color-text: #EDEBE7;--ad-color-text-muted: #A9A49A;--ad-color-text-on-accent: #0E1633;--ad-color-border: #2E2C29;--ad-color-border-strong: #7A756B;--ad-color-accent: #8EA4FF;--ad-color-accent-hover: #A9BAFF;--ad-color-accent-subtle: #1E2745;--ad-color-accent-text: #B3C2FF;--ad-color-agent: #E49BDC;--ad-color-agent-subtle: #3A1F37;--ad-color-agent-text: #F0B8E9;--ad-color-danger: #F2877D;--ad-color-danger-subtle: #3B1A17;--ad-color-danger-text: #F8A39B;--ad-color-warning: #E8B04A;--ad-color-warning-subtle: #3A2A0F;--ad-color-warning-text: #F0C677;--ad-color-success: #6FCF97;--ad-color-success-subtle: #14301F;--ad-color-success-text: #8BDBAC;--ad-color-focus: #A9BAFF;--ad-color-scrim: rgb(0 0 0 / .6);--ad-shadow-raised: 0 1px 2px rgb(0 0 0 / .3), 0 2px 16px rgb(0 0 0 / .3);--ad-shadow-floating: 0 2px 6px rgb(0 0 0 / .3), 0 8px 40px rgb(0 0 0 / .5)}@media(prefers-reduced-motion:reduce){:root{--ad-duration-fast: .01ms;--ad-duration-base: .01ms;--ad-duration-slow: .01ms}}*,*:before,*:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;text-size-adjust:100%}body{margin:0;background:var(--ad-color-bg);color:var(--ad-color-text);font-family:var(--ad-font-family-sans);font-size:var(--ad-font-size-sm);line-height:var(--ad-line-height-normal);font-feature-settings:"cv11","ss03";-webkit-font-smoothing:antialiased}h1,h2,h3,h4{margin:0;line-height:var(--ad-line-height-tight);font-weight:var(--ad-font-weight-semibold);text-wrap:balance}h1{font-size:var(--ad-font-size-2xl)}h2{font-size:var(--ad-font-size-xl)}h3{font-size:var(--ad-font-size-lg)}h4{font-size:var(--ad-font-size-md)}p{margin:0;text-wrap:pretty}a{color:var(--ad-color-accent-text);text-underline-offset:.2em}code,kbd,pre{font-family:var(--ad-font-family-mono);font-size:.9em}:focus-visible{outline:2px solid var(--ad-color-focus);outline-offset:2px}::selection{background:var(--ad-color-accent-subtle);color:var(--ad-color-accent-text)}.ad-sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}.ad-skip-link{position:absolute;inset-block-start:var(--ad-space-2);inset-inline-start:var(--ad-space-2);z-index:100;padding:var(--ad-space-2) var(--ad-space-4);border-radius:var(--ad-radius-md);background:var(--ad-color-surface-raised);color:var(--ad-color-text);box-shadow:var(--ad-shadow-floating);transform:translateY(-200%)}.ad-skip-link:focus{transform:none}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;scroll-behavior:auto!important;transition-duration:.01ms!important}}:root{--ad-control-h: var(--ad-size-control)}@media(pointer:coarse){:root{--ad-control-h: var(--ad-size-control-touch)}}.ad-button{--button-bg: var(--ad-color-surface);--button-bg-hover: var(--ad-color-surface-hover);--button-bg-active: var(--ad-color-surface-sunken);--button-fg: var(--ad-color-text);--button-border: var(--ad-color-border-strong);display:inline-flex;align-items:center;justify-content:center;gap:var(--ad-space-2);min-height:var(--ad-control-h);padding:0 var(--ad-space-4);border:1px solid var(--button-border);border-radius:var(--ad-radius-md);background:var(--button-bg);color:var(--button-fg);font:inherit;font-weight:var(--ad-font-weight-medium);line-height:1;white-space:nowrap;cursor:pointer;transition:background-color var(--ad-duration-fast) var(--ad-easing-out)}.ad-button:hover{background:var(--button-bg-hover)}.ad-button:active{background:var(--button-bg-active)}.ad-button--sm{min-height:1.75rem;padding:0 var(--ad-space-3);font-size:var(--ad-font-size-xs)}@media(pointer:coarse){.ad-button--sm{min-height:var(--ad-control-h)}}.ad-button--primary{--button-bg: var(--ad-color-accent);--button-bg-hover: var(--ad-color-accent-hover);--button-bg-active: var(--ad-color-accent-hover);--button-fg: var(--ad-color-text-on-accent);--button-border: transparent}.ad-button--ghost{--button-bg: transparent;--button-border: transparent}.ad-button--danger{--button-bg-hover: var(--ad-color-danger-subtle);--button-bg-active: var(--ad-color-danger-subtle);--button-fg: var(--ad-color-danger-text);--button-border: var(--ad-color-danger)}.ad-button:disabled{--button-bg: var(--ad-color-surface-sunken);--button-bg-hover: var(--ad-color-surface-sunken);--button-fg: var(--ad-color-text-muted);--button-border: var(--ad-color-border);cursor:not-allowed}.ad-button[aria-busy=true]{cursor:progress}.ad-icon-button{width:var(--ad-control-h);padding:0}.ad-icon-button.ad-button--sm{width:1.75rem}@media(pointer:coarse){.ad-icon-button.ad-button--sm{width:var(--ad-control-h)}}.ad-spinner{width:1em;height:1em;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:ad-spin .7s linear infinite}@keyframes ad-spin{to{transform:rotate(360deg)}}.ad-field{display:grid;gap:var(--ad-space-1)}.ad-field__label{font-weight:var(--ad-font-weight-medium)}.ad-field__hint{color:var(--ad-color-text-muted);font-size:var(--ad-font-size-xs)}.ad-field__error{display:flex;align-items:flex-start;gap:var(--ad-space-1);color:var(--ad-color-danger-text);font-size:var(--ad-font-size-xs)}.ad-field__error svg{flex:none;margin-top:-.1em}.ad-input{width:100%;min-height:var(--ad-control-h);padding:0 var(--ad-space-3);border:1px solid var(--ad-color-border-strong);border-radius:var(--ad-radius-md);background:var(--ad-color-surface);color:var(--ad-color-text);font:inherit}.ad-input::placeholder{color:var(--ad-color-text-muted);opacity:1}.ad-input:hover:not(:disabled){background:var(--ad-color-surface-sunken)}.ad-input[aria-invalid=true]{border-color:var(--ad-color-danger);box-shadow:inset 0 0 0 1px var(--ad-color-danger)}.ad-input:disabled{background:var(--ad-color-surface-sunken);border-color:var(--ad-color-border);color:var(--ad-color-text-muted);cursor:not-allowed}.ad-textarea{min-height:5rem;padding:var(--ad-space-2) var(--ad-space-3);resize:vertical}.ad-select{position:relative;display:block}.ad-select select{appearance:none;padding-inline-end:var(--ad-space-8);cursor:pointer}.ad-select:after{content:"";position:absolute;inset-inline-end:var(--ad-space-3);inset-block-start:50%;width:.45rem;height:.45rem;border:solid var(--ad-color-text-muted);border-width:0 2px 2px 0;transform:translateY(-75%) rotate(45deg);pointer-events:none}.ad-toggle{display:grid;gap:var(--ad-space-1)}.ad-toggle__row{display:flex;align-items:center;gap:var(--ad-space-3);min-height:var(--ad-control-h);cursor:pointer}.ad-checkbox,.ad-switch{appearance:none;flex:none;margin:0;border:1px solid var(--ad-color-border-strong);background:var(--ad-color-surface);cursor:pointer;transition:background-color var(--ad-duration-fast) var(--ad-easing-out)}.ad-checkbox{display:grid;place-items:center;width:1.25rem;height:1.25rem;border-radius:var(--ad-radius-sm)}.ad-checkbox:before{content:"";width:.75rem;height:.75rem;background:var(--ad-color-text-on-accent);clip-path:polygon(14% 52%,0 66%,38% 100%,100% 20%,86% 8%,38% 72%);transform:scale(0);transition:transform var(--ad-duration-fast) var(--ad-easing-out)}.ad-checkbox:checked{background:var(--ad-color-accent);border-color:var(--ad-color-accent)}.ad-checkbox:checked:before{transform:scale(1)}.ad-switch{position:relative;width:2.25rem;height:1.375rem;border-radius:var(--ad-radius-full);background:var(--ad-color-surface-sunken)}.ad-switch:before{content:"";position:absolute;inset-block-start:50%;inset-inline-start:.2rem;width:.875rem;height:.875rem;border-radius:var(--ad-radius-full);background:var(--ad-color-text-muted);transform:translateY(-50%);transition:inset-inline-start var(--ad-duration-base) var(--ad-easing-out)}.ad-switch:checked{background:var(--ad-color-accent);border-color:var(--ad-color-accent)}.ad-switch:checked:before{background:var(--ad-color-text-on-accent);inset-inline-start:calc(100% - 1.075rem)}.ad-checkbox:disabled,.ad-switch:disabled{background:var(--ad-color-surface-sunken);border-color:var(--ad-color-border);cursor:not-allowed}.ad-checkbox:disabled:before{background:var(--ad-color-text-muted)}.ad-switch:disabled:before{background:var(--ad-color-border)}@keyframes ad-fade-in{0%{opacity:0}}@keyframes ad-pop-in{0%{opacity:0;scale:.97}}.ad-overlay{position:fixed;z-index:50;inset:0;background:var(--ad-color-scrim);animation:ad-fade-in var(--ad-duration-base) var(--ad-easing-out)}.ad-dialog{position:fixed;z-index:50;inset:0;margin:auto;width:min(32rem,calc(100vw - 2rem));height:fit-content;max-height:calc(100vh - 2rem);overflow:auto;padding:var(--ad-space-6);border:1px solid var(--ad-color-border);border-radius:var(--ad-radius-lg);background:var(--ad-color-surface-raised);box-shadow:var(--ad-shadow-floating);animation:ad-pop-in var(--ad-duration-base) var(--ad-easing-out)}.ad-dialog__title{padding-inline-end:var(--ad-space-8);font-size:var(--ad-font-size-lg)}.ad-dialog__description{margin-top:var(--ad-space-2);color:var(--ad-color-text-muted)}.ad-dialog__body{margin-top:var(--ad-space-4)}.ad-dialog__footer{display:flex;justify-content:flex-end;gap:var(--ad-space-2);margin-top:var(--ad-space-6)}.ad-dialog__close{position:absolute;inset-block-start:var(--ad-space-3);inset-inline-end:var(--ad-space-3)}.ad-tooltip{z-index:60;max-width:16rem;padding:var(--ad-space-1) var(--ad-space-2);border-radius:var(--ad-radius-sm);background:var(--ad-color-text);color:var(--ad-color-bg);font-size:var(--ad-font-size-xs);animation:ad-fade-in var(--ad-duration-fast) var(--ad-easing-out)}.ad-menu{z-index:60;min-width:11rem;padding:var(--ad-space-1);border:1px solid var(--ad-color-border);border-radius:var(--ad-radius-md);background:var(--ad-color-surface-raised);box-shadow:var(--ad-shadow-floating);animation:ad-pop-in var(--ad-duration-fast) var(--ad-easing-out)}.ad-menu__item{display:flex;align-items:center;gap:var(--ad-space-2);min-height:var(--ad-control-h);padding:0 var(--ad-space-3);border-radius:var(--ad-radius-sm);color:var(--ad-color-text);cursor:pointer;outline:none;user-select:none}.ad-menu__item[data-highlighted]{background:var(--ad-color-surface-hover)}.ad-menu__item[data-highlighted]:focus-visible,.ad-menu__item:focus-visible{outline:2px solid var(--ad-color-focus);outline-offset:-2px}.ad-menu__item[data-disabled]{color:var(--ad-color-text-muted);cursor:not-allowed}.ad-menu__item--danger{color:var(--ad-color-danger-text)}.ad-menu__shortcut{margin-inline-start:auto;color:var(--ad-color-text-muted);font-size:var(--ad-font-size-xs)}.ad-menu__separator{height:1px;margin:var(--ad-space-1) 0;background:var(--ad-color-border)}.ad-toast-viewport{position:fixed;inset-block-end:var(--ad-space-4);inset-inline-end:var(--ad-space-4);z-index:70;display:grid;gap:var(--ad-space-2);width:min(24rem,calc(100vw - 2rem));margin:0;padding:0;list-style:none}.ad-toast{display:grid;grid-template-columns:auto 1fr auto;align-items:start;gap:var(--ad-space-3);padding:var(--ad-space-3) var(--ad-space-3) var(--ad-space-3) var(--ad-space-4);border:1px solid var(--ad-color-border);border-radius:var(--ad-radius-md);background:var(--ad-color-surface-raised);box-shadow:var(--ad-shadow-floating)}.ad-toast[data-state=open]{animation:ad-pop-in var(--ad-duration-base) var(--ad-easing-out)}.ad-toast__icon{margin-top:var(--ad-space-1)}.ad-toast--info .ad-toast__icon{color:var(--ad-color-accent)}.ad-toast--success .ad-toast__icon{color:var(--ad-color-success)}.ad-toast--warning .ad-toast__icon{color:var(--ad-color-warning)}.ad-toast--danger .ad-toast__icon{color:var(--ad-color-danger)}.ad-toast__title{font-weight:var(--ad-font-weight-medium)}.ad-toast__description{margin-top:var(--ad-space-1);color:var(--ad-color-text-muted)}.ad-tabs__list{display:flex;gap:var(--ad-space-1);border-bottom:1px solid var(--ad-color-border)}.ad-tabs__trigger{position:relative;min-height:var(--ad-control-h);padding:0 var(--ad-space-3);border:0;background:transparent;color:var(--ad-color-text-muted);font:inherit;cursor:pointer}.ad-tabs__trigger:hover{color:var(--ad-color-text)}.ad-tabs__trigger[data-state=active]{color:var(--ad-color-text);font-weight:var(--ad-font-weight-semibold)}.ad-tabs__trigger[data-state=active]:after{content:"";position:absolute;inset:auto var(--ad-space-3) -1px;height:2px;background:var(--ad-color-accent)}.ad-tabs__panel{padding-top:var(--ad-space-4)}.ad-shell{display:grid;grid-template-columns:var(--ad-size-sidebar) minmax(0,1fr);grid-template-rows:auto 1fr;grid-template-areas:"sidebar topbar" "sidebar content";min-height:100vh}.ad-shell__sidebar{grid-area:sidebar;display:flex;flex-direction:column;gap:var(--ad-space-4);padding:var(--ad-space-4) var(--ad-space-3);border-inline-end:1px solid var(--ad-color-border);background:var(--ad-color-surface-sunken)}.ad-shell__brand{padding:0 var(--ad-space-3);font-weight:var(--ad-font-weight-semibold)}.ad-shell__topbar{grid-area:topbar;display:flex;align-items:center;gap:var(--ad-space-3);min-height:var(--ad-size-topbar);padding:0 var(--ad-space-6);border-bottom:1px solid var(--ad-color-border);background:var(--ad-color-bg)}.ad-shell__actions{display:flex;align-items:center;gap:var(--ad-space-4);margin-inline-start:auto}.ad-shell__content{grid-area:content;min-width:0;padding:var(--ad-space-8) var(--ad-space-6) var(--ad-space-24);outline:none}.ad-shell__menu{display:none}@media(max-width:47.99rem){.ad-shell{grid-template-columns:minmax(0,1fr);grid-template-rows:auto auto 1fr;grid-template-areas:"topbar" "sidebar" "content"}.ad-shell__menu{display:inline-flex}.ad-shell__sidebar[data-open=false]{display:none}.ad-shell__sidebar{border-inline-end:0;border-bottom:1px solid var(--ad-color-border)}.ad-shell__topbar,.ad-shell__content{padding-inline:var(--ad-space-4)}}.ad-sidebar-nav{display:grid;gap:var(--ad-space-1);margin:0;padding:0;list-style:none}.ad-sidebar-nav__link{display:flex;align-items:center;gap:var(--ad-space-2);min-height:var(--ad-control-h);padding:0 var(--ad-space-3);border-radius:var(--ad-radius-md);color:var(--ad-color-text);text-decoration:none}.ad-sidebar-nav__link:hover{background:var(--ad-color-surface-hover)}.ad-sidebar-nav__link[aria-current=page]{background:var(--ad-color-accent-subtle);color:var(--ad-color-accent-text);font-weight:var(--ad-font-weight-semibold)}.ad-toolbar{display:inline-flex;align-items:center;gap:var(--ad-space-1);padding:var(--ad-space-1);border:1px solid var(--ad-color-border);border-radius:var(--ad-radius-md);background:var(--ad-color-surface)}.ad-toolbar__separator{align-self:stretch;width:1px;margin:var(--ad-space-1);background:var(--ad-color-border)}.ad-button[aria-pressed=true]{box-shadow:inset 0 0 0 1px var(--button-border);font-weight:var(--ad-font-weight-semibold);--button-bg: var(--ad-color-accent-subtle);--button-bg-hover: var(--ad-color-accent-subtle);--button-fg: var(--ad-color-accent-text);--button-border: var(--ad-color-accent)}.ad-empty{display:grid;justify-items:center;gap:var(--ad-space-3);padding:var(--ad-space-12) var(--ad-space-6);text-align:center}.ad-empty__title{font-size:var(--ad-font-size-lg)}.ad-empty__description{max-width:28rem;color:var(--ad-color-text-muted)}.ad-files{margin:0;padding:0;list-style:none;border-top:1px solid var(--ad-color-border)}.ad-file-row{display:grid;grid-template-columns:auto minmax(0,1fr) auto auto auto;align-items:center;gap:var(--ad-space-4);min-height:3rem;padding:var(--ad-space-1) var(--ad-space-2);border-bottom:1px solid var(--ad-color-border)}.ad-file-row:hover{background:var(--ad-color-surface-sunken)}.ad-file-row__icon{display:inline-flex;color:var(--ad-color-text-muted)}.ad-file-row__name{min-height:1.5rem;overflow:hidden;color:var(--ad-color-text);font-weight:var(--ad-font-weight-medium);text-overflow:ellipsis;white-space:nowrap}.ad-file-row__meta,.ad-file-row__time{display:inline-flex;align-items:center;gap:var(--ad-space-2);color:var(--ad-color-text-muted);font-size:var(--ad-font-size-xs)}.ad-file-row__actions{display:inline-flex}@media(max-width:47.99rem){.ad-file-row{grid-template-columns:auto minmax(0,1fr) auto;grid-template-areas:"icon name actions" ". meta meta" ". time time"}.ad-file-row__icon{grid-area:icon}.ad-file-row__name{grid-area:name}.ad-file-row__meta{grid-area:meta}.ad-file-row__time{grid-area:time}.ad-file-row__actions{grid-area:actions}}.ad-avatar{display:inline-grid;flex:none;place-items:center;width:1.5rem;height:1.5rem;border:1px solid var(--ad-color-border-strong);background:var(--ad-color-surface-sunken);color:var(--ad-color-text);font-size:var(--ad-font-size-xs);font-weight:var(--ad-font-weight-medium);line-height:1}.ad-avatar svg{width:.9rem;height:.9rem}.ad-avatar--person{border-radius:var(--ad-radius-full)}.ad-avatar--agent{border-color:var(--ad-color-agent);border-radius:var(--ad-radius-sm);background:var(--ad-color-agent-subtle);color:var(--ad-color-agent-text)}.ad-avatar--more{border-radius:var(--ad-radius-full);background:var(--ad-color-surface);color:var(--ad-color-text-muted)}.ad-chip{display:inline-flex;align-items:center;gap:var(--ad-space-2);max-width:100%;min-width:0}.ad-chip__name{overflow:hidden;color:var(--ad-color-text);font-weight:var(--ad-font-weight-medium);text-overflow:ellipsis;white-space:nowrap}.ad-chip__meta{color:var(--ad-color-text-muted);font-size:var(--ad-font-size-xs);white-space:nowrap}.ad-pill{flex:none;padding:.125rem var(--ad-space-2);border:1px solid var(--ad-color-agent);border-radius:var(--ad-radius-full);color:var(--ad-color-agent-text);font-size:var(--ad-font-size-xs);font-weight:var(--ad-font-weight-semibold);letter-spacing:.02em;line-height:1.2;text-transform:uppercase}.ad-stack{display:inline-flex;align-items:center;gap:var(--ad-space-3)}.ad-stack__list{display:flex;margin:0;padding:0;list-style:none}.ad-stack__list li+li{margin-inline-start:-.25rem}.ad-stack__list .ad-avatar{width:1.75rem;height:1.75rem;box-shadow:0 0 0 2px var(--ad-color-bg)}.ad-stack__summary{color:var(--ad-color-text-muted);font-size:var(--ad-font-size-xs);white-space:nowrap}@media(forced-colors:active){.ad-checkbox:checked,.ad-switch:checked{background:Highlight;border-color:Highlight}.ad-checkbox:before{background:HighlightText}.ad-switch{background:Canvas;border-color:ButtonText}.ad-switch:before{background:ButtonText}.ad-switch:checked:before{background:HighlightText}.ad-button[aria-busy=true]{border-style:dashed}.ad-button[aria-pressed=true]{background:Highlight;color:HighlightText;border-color:Highlight}.ad-tabs__trigger[data-state=active]:after{background:Highlight}.ad-menu__item[data-highlighted]{outline:2px solid Highlight;outline-offset:-2px}}.ad-dialog:has(.ad-share){width:min(36rem,calc(100vw - 2rem))}.ad-share{display:grid;gap:var(--ad-space-4)}.ad-share__invite{display:grid;grid-template-columns:minmax(0,1fr) auto auto;align-items:start;gap:var(--ad-space-3)}.ad-share__invite .ad-field:first-child{grid-column:1 / -1}.ad-share__invite .ad-button{align-self:end}.ad-share__sent{color:var(--ad-color-success-text);font-size:var(--ad-font-size-xs)}.ad-share__people{display:grid;margin:0;padding:0;list-style:none;border-top:1px solid var(--ad-color-border)}.ad-share__people li{display:flex;align-items:center;justify-content:space-between;gap:var(--ad-space-3);padding:var(--ad-space-2) 0;border-bottom:1px solid var(--ad-color-border)}.ad-share__people .ad-field{min-width:9rem}.ad-share__controls{display:inline-flex;align-items:center;gap:var(--ad-space-2)}.ad-share__owner{padding-inline:var(--ad-space-3);color:var(--ad-color-text-muted)}.ad-share__row{display:grid;grid-template-columns:1fr 1fr;gap:var(--ad-space-3)}.ad-share__copy{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:end;gap:var(--ad-space-3)}@media(max-width:30rem){.ad-share__invite,.ad-share__row,.ad-share__copy{grid-template-columns:1fr}}.ad-cursor{position:relative;display:inline-block;width:0;vertical-align:baseline;user-select:none}.ad-cursor__caret{position:absolute;inset-block:-.2em -.15em;inset-inline-start:0;width:2px;background:var(--ad-color-accent)}.ad-cursor__tag{position:absolute;inset-block-end:1.45em;inset-inline-start:0;padding:.0625rem var(--ad-space-2);border:1px solid var(--ad-color-accent);border-radius:var(--ad-radius-sm) var(--ad-radius-sm) var(--ad-radius-sm) 0;background:var(--ad-color-accent);color:var(--ad-color-text-on-accent);font-size:var(--ad-font-size-xs);font-weight:var(--ad-font-weight-medium);line-height:1.3;white-space:nowrap}.ad-cursor--agent .ad-cursor__caret{background:var(--ad-color-agent)}.ad-cursor--agent .ad-cursor__tag{border-color:var(--ad-color-agent);border-radius:var(--ad-radius-sm);background:var(--ad-color-agent-subtle);color:var(--ad-color-agent-text)}.adoc.muted,.adoc .muted{color:var(--ad-color-text-muted);font-size:var(--ad-font-size-sm);margin:0}.adoc.notice,.adoc .notice{max-width:var(--ad-size-content)}.adoc.form{display:grid;gap:var(--ad-space-4)}.adoc.form .form-actions{display:flex;gap:var(--ad-space-2);align-items:center;justify-content:flex-end;flex-wrap:wrap}.adoc .editor-bar{display:flex;align-items:center;justify-content:space-between;gap:var(--ad-space-4);flex-wrap:wrap;max-width:var(--ad-size-content);margin-block-end:var(--ad-space-3)}.adoc .editor-meta{display:flex;align-items:center;gap:var(--ad-space-4);flex-wrap:wrap}.adoc .glyph{font-weight:var(--ad-font-weight-semibold);min-width:1.25rem;text-align:center}.adoc .glyph--b{font-weight:800}.adoc .glyph--i{font-style:italic;font-family:serif}.adoc .editor-host{max-width:var(--ad-size-content);background:var(--ad-color-surface);border:1px solid var(--ad-color-border);border-radius:var(--ad-radius-md)}.adoc .editor-host:focus-within{outline:2px solid var(--ad-color-focus);outline-offset:2px}.adoc .prose{min-height:20rem;padding:var(--ad-space-6);outline:none;line-height:var(--ad-line-height-normal);overflow-wrap:anywhere}.adoc .prose>:first-child{margin-top:0}.adoc .prose h1{font-size:var(--ad-font-size-2xl);line-height:var(--ad-line-height-tight)}.adoc .prose h2{font-size:var(--ad-font-size-xl);line-height:var(--ad-line-height-tight)}.adoc .prose h3{font-size:var(--ad-font-size-lg)}.adoc .prose a{color:var(--ad-color-accent-text);text-decoration:underline}.adoc .prose blockquote{margin-inline:0;padding-inline-start:var(--ad-space-4);border-inline-start:3px solid var(--ad-color-border-strong)}.adoc .prose code{font-family:var(--ad-font-family-mono);background:var(--ad-color-surface-sunken);padding:0 .25em;border-radius:var(--ad-radius-sm)}.adoc .prose pre{background:var(--ad-color-surface-sunken);padding:var(--ad-space-3);border-radius:var(--ad-radius-md);overflow-x:auto}.adoc .prose table{border-collapse:collapse}.adoc .prose th,.adoc .prose td{border:1px solid var(--ad-color-border-strong);padding:var(--ad-space-1) var(--ad-space-2)}.adoc .prose img{max-width:100%}.adoc .prose ul[data-type=taskList]{list-style:none;padding-inline-start:var(--ad-space-2)}.adoc .prose ul[data-type=taskList] li{display:flex;gap:var(--ad-space-2)}.adoc .agent-text{text-decoration:underline dotted 2px var(--ad-color-agent);text-underline-offset:3px;background:var(--ad-color-agent-subtle);border-radius:2px}.adoc .legend{margin-block-start:var(--ad-space-3)}.adoc .caret{position:relative;border-inline-start:2px solid var(--ad-color-accent);margin-inline:-1px;pointer-events:none;word-break:normal}.adoc .caret--agent{border-inline-start:2px dashed var(--ad-color-agent)}.adoc .caret__tag{position:absolute;top:-1.45em;inset-inline-start:-2px;white-space:nowrap;font-size:var(--ad-font-size-xs);line-height:1.3;padding:0 var(--ad-space-1);border-radius:var(--ad-radius-sm) var(--ad-radius-sm) var(--ad-radius-sm) 0;background:var(--ad-color-accent);color:var(--ad-color-text-on-accent);user-select:none}.adoc .caret--agent .caret__tag{background:var(--ad-color-surface);color:var(--ad-color-agent-text);border:1px solid var(--ad-color-agent);border-radius:0}.page-head{display:flex;align-items:center;justify-content:space-between;gap:var(--ad-space-4);flex-wrap:wrap;margin-block-end:var(--ad-space-6);max-width:var(--ad-size-content)}.page-head h1{margin:0;font-size:var(--ad-font-size-xl);line-height:var(--ad-line-height-tight);overflow-wrap:anywhere}.page-head h1:focus-visible{outline:2px solid var(--ad-color-focus);outline-offset:4px;border-radius:var(--ad-radius-sm)}.page-actions{display:flex;gap:var(--ad-space-2);flex-wrap:wrap}.muted{color:var(--ad-color-text-muted);font-size:var(--ad-font-size-sm);margin:0}.notice{max-width:var(--ad-size-content)}.signin{max-width:24rem;margin:var(--ad-space-24) auto 0;padding:0 var(--ad-space-4);display:grid;gap:var(--ad-space-4)}.signin h1{margin:0;font-size:var(--ad-font-size-xl)}.form{display:grid;gap:var(--ad-space-4)}.form-actions{display:flex;gap:var(--ad-space-2);align-items:center;justify-content:flex-end;flex-wrap:wrap}.form-error{color:var(--ad-color-danger-text);margin:0;font-size:var(--ad-font-size-sm)}.section-title{margin:var(--ad-space-2) 0 0;font-size:var(--ad-font-size-md)}.people{list-style:none;margin:0;padding:0;display:grid;gap:var(--ad-space-2)}
|