agentic-documents 0.4.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 +56 -0
- package/README.md +161 -11
- package/dist/{chunk-TFCRPEEM.js → chunk-34C47PDC.js} +1 -1
- package/dist/chunk-5IQX2W52.js +195 -0
- package/dist/chunk-6UYJV2EJ.js +163 -0
- package/dist/{chunk-R5XUTBC3.js → chunk-CN6UAW7B.js} +32 -9
- package/dist/chunk-DWVJIKVT.js +8 -0
- package/dist/{chunk-YBBQNCMC.js → chunk-GQ5E6T7Z.js} +18 -191
- package/dist/{chunk-FZA5LQV3.js → chunk-JBAQEIOH.js} +89 -12
- package/dist/chunk-KC5KFB5R.js +354 -0
- package/dist/{chunk-IU3YIQ4Y.js → chunk-V6TBTOHW.js} +38 -13
- package/dist/cli.js +16 -12
- package/dist/client.d.ts +23 -6
- package/dist/client.js +9 -2
- package/dist/{doc-C_8kCsl7.d.ts → doc-BXG9qG5X.d.ts} +8 -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 +52 -0
- package/dist/formats.js +24 -0
- package/dist/index.d.ts +12 -10
- package/dist/index.js +15 -9
- package/dist/live-worker.d.ts +2 -2
- package/dist/live-worker.js +7 -4
- package/dist/live.d.ts +6 -2
- package/dist/live.js +5 -3
- package/dist/{mcp-P2C75IIG.js → mcp-ZTUTC4CS.js} +5 -2
- package/dist/render-463xHb-x.d.ts +16 -0
- package/dist/{review-BQW2Ci2h.d.ts → review-Ds-i5Vnc.d.ts} +2 -16
- package/dist/{service-Do2Jwb5U.d.ts → service-Ck6oX-Kq.d.ts} +38 -5
- package/dist/ui/_headers +4 -0
- package/dist/ui/app.css +1 -0
- package/dist/ui/app.js +270 -0
- package/dist/ui/assets/inter-latin-ext-wght-normal-HA22NDSG.woff2 +0 -0
- package/dist/ui/assets/inter-latin-wght-normal-NRMW37G5.woff2 +0 -0
- package/dist/ui/assets/jetbrains-mono-latin-ext-wght-normal-TSLVDSQR.woff2 +0 -0
- package/dist/ui/assets/jetbrains-mono-latin-wght-normal-VBS632QH.woff2 +0 -0
- package/dist/ui/index.html +13 -0
- package/dist/worker.d.ts +2 -2
- package/dist/worker.js +7 -4
- package/llms.txt +1 -0
- package/package.json +43 -10
- package/dist/chunk-GYQFTF2E.js +0 -389
package/dist/index.js
CHANGED
|
@@ -1,28 +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";
|
|
12
|
+
import {
|
|
13
|
+
Suggestions,
|
|
14
|
+
Threads
|
|
15
|
+
} from "./chunk-5IQX2W52.js";
|
|
8
16
|
import {
|
|
9
17
|
EXPORT_FORMATS,
|
|
10
18
|
ODT_MIME,
|
|
11
|
-
commands,
|
|
12
|
-
exportDoc,
|
|
13
19
|
exportOdt
|
|
14
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-KC5KFB5R.js";
|
|
15
21
|
import {
|
|
16
22
|
AgenticDoc,
|
|
17
23
|
DocError,
|
|
18
|
-
PRINCIPAL_KINDS,
|
|
19
|
-
Suggestions,
|
|
20
|
-
Threads,
|
|
21
24
|
blocksToMarkdown,
|
|
22
25
|
markdownToBlocks,
|
|
23
26
|
parseAuthor,
|
|
24
27
|
schema
|
|
25
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-GQ5E6T7Z.js";
|
|
29
|
+
import {
|
|
30
|
+
PRINCIPAL_KINDS
|
|
31
|
+
} from "./chunk-DWVJIKVT.js";
|
|
26
32
|
export {
|
|
27
33
|
AgenticDoc,
|
|
28
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,12 +2,15 @@ import {
|
|
|
2
2
|
createApp,
|
|
3
3
|
regionOf,
|
|
4
4
|
serviceFor
|
|
5
|
-
} from "./chunk-
|
|
6
|
-
import "./chunk-
|
|
7
|
-
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";
|
|
8
10
|
import {
|
|
9
11
|
DocError
|
|
10
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-GQ5E6T7Z.js";
|
|
13
|
+
import "./chunk-DWVJIKVT.js";
|
|
11
14
|
|
|
12
15
|
// src/live-worker.ts
|
|
13
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 { D as DocAccess } from './service-
|
|
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
|
|
|
@@ -64,8 +64,12 @@ declare class LiveService implements DocAccess {
|
|
|
64
64
|
private readonly options;
|
|
65
65
|
constructor(options: Pick<LiveOptions, "server" | "token" | "name" | "doc">);
|
|
66
66
|
private join;
|
|
67
|
+
private call;
|
|
67
68
|
/** The room is only a copy, so a new document is made in the store. A room seeds from it on the next join. */
|
|
68
69
|
create(id: string, markdown: string): Promise<void>;
|
|
70
|
+
list(): Promise<DocSummary[]>;
|
|
71
|
+
rename(id: string, title: string): Promise<void>;
|
|
72
|
+
remove(id: string): Promise<void>;
|
|
69
73
|
read<T>(id: string, run: (doc: AgenticDoc) => T): Promise<T>;
|
|
70
74
|
write<T>(id: string, run: (doc: AgenticDoc) => T): Promise<T>;
|
|
71
75
|
private exists;
|
package/dist/live.js
CHANGED
|
@@ -2,9 +2,11 @@ import {
|
|
|
2
2
|
LiveDoc,
|
|
3
3
|
LiveService,
|
|
4
4
|
whoAmI
|
|
5
|
-
} from "./chunk-
|
|
6
|
-
import "./chunk-
|
|
7
|
-
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";
|
|
8
10
|
export {
|
|
9
11
|
LiveDoc,
|
|
10
12
|
LiveService,
|
|
@@ -3,10 +3,13 @@ import {
|
|
|
3
3
|
} from "./chunk-5Y66UCTE.js";
|
|
4
4
|
import {
|
|
5
5
|
commands
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-6UYJV2EJ.js";
|
|
7
|
+
import "./chunk-5IQX2W52.js";
|
|
8
|
+
import "./chunk-KC5KFB5R.js";
|
|
7
9
|
import {
|
|
8
10
|
DocError
|
|
9
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-GQ5E6T7Z.js";
|
|
12
|
+
import "./chunk-DWVJIKVT.js";
|
|
10
13
|
|
|
11
14
|
// src/mcp.ts
|
|
12
15
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
declare const EXPORT_FORMATS: readonly ["md", "html", "odt"];
|
|
2
|
+
type ExportFormat = (typeof EXPORT_FORMATS)[number];
|
|
3
|
+
interface ExportOptions {
|
|
4
|
+
/** Keep `<img>` for web and relative sources. Opening the page then asks those hosts for the image. Off by default. */
|
|
5
|
+
remoteImages?: boolean;
|
|
6
|
+
}
|
|
7
|
+
interface ExportResult {
|
|
8
|
+
format: ExportFormat;
|
|
9
|
+
contentType: string;
|
|
10
|
+
encoding: "utf8" | "base64";
|
|
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
|
+
}
|
|
15
|
+
|
|
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 {
|
|
@@ -13,20 +13,6 @@ declare class DocError extends Error {
|
|
|
13
13
|
}[]);
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
declare const EXPORT_FORMATS: readonly ["md", "html", "odt"];
|
|
17
|
-
type ExportFormat = (typeof EXPORT_FORMATS)[number];
|
|
18
|
-
interface ExportOptions {
|
|
19
|
-
/** Keep `<img>` for web and relative sources. Opening the page then asks those hosts for the image. Off by default. */
|
|
20
|
-
remoteImages?: boolean;
|
|
21
|
-
}
|
|
22
|
-
interface ExportResult {
|
|
23
|
-
format: ExportFormat;
|
|
24
|
-
contentType: string;
|
|
25
|
-
encoding: "utf8" | "base64";
|
|
26
|
-
data: string;
|
|
27
|
-
}
|
|
28
|
-
declare function exportDoc(doc: AgenticDoc, format: ExportFormat, options?: ExportOptions): ExportResult;
|
|
29
|
-
|
|
30
16
|
interface Message {
|
|
31
17
|
id: string;
|
|
32
18
|
at: string;
|
|
@@ -96,4 +82,4 @@ declare class Suggestions {
|
|
|
96
82
|
}): Suggestion[];
|
|
97
83
|
}
|
|
98
84
|
|
|
99
|
-
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. */
|
|
@@ -8,6 +8,23 @@ interface DocInfo {
|
|
|
8
8
|
name: string;
|
|
9
9
|
};
|
|
10
10
|
createdAt: number;
|
|
11
|
+
/** The name a person gave the document. Without one, a list shows the id. */
|
|
12
|
+
title?: string;
|
|
13
|
+
/** The last save, and who made it. They start as the creation. */
|
|
14
|
+
updatedAt?: number;
|
|
15
|
+
updatedBy?: {
|
|
16
|
+
kind: PrincipalKind;
|
|
17
|
+
name: string;
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
/** One row of the document list. */
|
|
21
|
+
interface DocSummary {
|
|
22
|
+
id: string;
|
|
23
|
+
title: string;
|
|
24
|
+
createdBy: DocInfo["createdBy"];
|
|
25
|
+
createdAt: number;
|
|
26
|
+
updatedAt: number;
|
|
27
|
+
updatedBy: DocInfo["createdBy"];
|
|
11
28
|
}
|
|
12
29
|
interface DocsPorts {
|
|
13
30
|
/** Holds each document as a Yjs update. Saves are conditional on the version that was read. */
|
|
@@ -19,7 +36,10 @@ interface DocsPorts {
|
|
|
19
36
|
interface DocAccess {
|
|
20
37
|
create(id: string, markdown: string, author: Principal): Promise<void>;
|
|
21
38
|
read<T>(id: string, run: (doc: AgenticDoc) => T): Promise<T>;
|
|
22
|
-
write<T>(id: string, run: (doc: AgenticDoc) => T): Promise<T>;
|
|
39
|
+
write<T>(id: string, run: (doc: AgenticDoc) => T, author?: Principal): Promise<T>;
|
|
40
|
+
list(): Promise<DocSummary[]>;
|
|
41
|
+
rename(id: string, title: string, author: Principal): Promise<void>;
|
|
42
|
+
remove(id: string, author: Principal): Promise<void>;
|
|
23
43
|
}
|
|
24
44
|
/** Loads and saves documents as Yjs updates in a Blobs port. The CLI, MCP server, and API share it. */
|
|
25
45
|
declare class DocsService implements DocAccess {
|
|
@@ -36,7 +56,9 @@ declare class DocsService implements DocAccess {
|
|
|
36
56
|
* has none. A merge is safe to repeat and to run in any order. The save is conditional, so two
|
|
37
57
|
* checkpoints at once both land.
|
|
38
58
|
*/
|
|
39
|
-
checkpoint(id: string, update: Uint8Array, author: Principal
|
|
59
|
+
checkpoint(id: string, update: Uint8Array, author: Principal, options?: {
|
|
60
|
+
create?: boolean;
|
|
61
|
+
}): Promise<void>;
|
|
40
62
|
/**
|
|
41
63
|
* The encoded document, once it reads back and every stored entry has the shape the commands rely on. Yjs does not
|
|
42
64
|
* check types, so an update can put text where the editor expects blocks, or a thread with no messages, and then a
|
|
@@ -45,6 +67,17 @@ declare class DocsService implements DocAccess {
|
|
|
45
67
|
private checked;
|
|
46
68
|
private fits;
|
|
47
69
|
private catalog;
|
|
70
|
+
/**
|
|
71
|
+
* Record a save. The catalog is a side record that follows the blob, so a failure here never fails a save that worked:
|
|
72
|
+
* the caller would repeat a change that is not safe to repeat. A document with no catalog entry stays without one.
|
|
73
|
+
*/
|
|
74
|
+
private touch;
|
|
75
|
+
/** Every cataloged document, newest first, up to ${MAX_LISTED}. A damaged entry is skipped, so one bad entry never hides the list. */
|
|
76
|
+
list(): Promise<DocSummary[]>;
|
|
77
|
+
/** Give the document a name. It does not change the text. */
|
|
78
|
+
rename(id: string, title: string, author: Principal): Promise<void>;
|
|
79
|
+
/** Delete the document and its catalog entry. An agent needs the remove scope. A live room keeps its own copy of the text. */
|
|
80
|
+
remove(id: string, author: Principal): Promise<void>;
|
|
48
81
|
/** Who created the document and when, or null when it has no catalog entry (made before the catalog, or a failed catalog write). */
|
|
49
82
|
info(id: string): Promise<DocInfo | null>;
|
|
50
83
|
read<T>(id: string, run: (doc: AgenticDoc) => T): Promise<T>;
|
|
@@ -52,7 +85,7 @@ declare class DocsService implements DocAccess {
|
|
|
52
85
|
* Load, run the change, and save only if nobody saved in between. When someone did, load again and
|
|
53
86
|
* run the change again, so a check such as "is it still pending" sees the new state.
|
|
54
87
|
*/
|
|
55
|
-
write<T>(id: string, run: (doc: AgenticDoc) => T): Promise<T>;
|
|
88
|
+
write<T>(id: string, run: (doc: AgenticDoc) => T, author?: Principal): Promise<T>;
|
|
56
89
|
}
|
|
57
90
|
|
|
58
|
-
export { type DocAccess as D, type DocInfo as a, type DocsPorts as b, DocsService as c };
|
|
91
|
+
export { type DocAccess as D, type DocInfo as a, type DocsPorts as b, DocsService as c, type DocSummary as d };
|
package/dist/ui/_headers
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Content-Security-Policy: default-src 'none'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self'; connect-src 'self'; base-uri 'none'; form-action 'none'; frame-ancestors 'none'
|
|
3
|
+
X-Content-Type-Options: nosniff
|
|
4
|
+
Referrer-Policy: no-referrer
|
package/dist/ui/app.css
ADDED
|
@@ -0,0 +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)}.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)}
|