agentic-drive 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/dist/worker.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  backfillAuthorIds,
3
3
  backfillResources
4
- } from "./chunk-L7GASKBQ.js";
4
+ } from "./chunk-BXFK3QXK.js";
5
5
  import {
6
6
  DEFAULT_MAX_BYTES,
7
7
  DEFAULT_URL_SECONDS,
@@ -12,7 +12,7 @@ import {
12
12
  publicNode,
13
13
  safeMime,
14
14
  upload
15
- } from "./chunk-ATJDMCRV.js";
15
+ } from "./chunk-WJZNXLTR.js";
16
16
 
17
17
  // src/worker.ts
18
18
  import { Hono } from "hono";
@@ -44,12 +44,12 @@ var STATUS = {
44
44
  };
45
45
  var fail = (code, message, status) => new Response(JSON.stringify({ error: { code, message } }), { status, headers: { "content-type": "application/json" } });
46
46
  var schemas = /* @__PURE__ */ new WeakMap();
47
- function settings(env) {
48
- let publicUrl;
47
+ function settings(env, needUrl = true) {
48
+ let publicUrl = "";
49
49
  try {
50
50
  publicUrl = new URL(env.DRIVE_PUBLIC_URL ?? "").origin;
51
51
  } catch {
52
- return null;
52
+ if (needUrl) return null;
53
53
  }
54
54
  const urlSecret = env.DRIVE_URL_SECRET;
55
55
  return typeof urlSecret === "string" && new TextEncoder().encode(urlSecret).length >= 32 ? { publicUrl, urlSecret } : null;
@@ -58,7 +58,7 @@ var regionOf = (env) => parseRegion(env.DRIVE_REGION ?? "eu");
58
58
  function blobsFor(env, config) {
59
59
  return createR2Blobs(env.FILES, { region: regionOf(env), urlBase: `${config.publicUrl}/api/v1/drive/blob`, urlSecret: config.urlSecret });
60
60
  }
61
- async function driveFor(env, config) {
61
+ async function defaultStore(env) {
62
62
  let ready = schemas.get(env.DB);
63
63
  if (!ready) {
64
64
  ready = env.DB.prepare(D1_SCHEMA).run().catch((error) => {
@@ -68,8 +68,7 @@ async function driveFor(env, config) {
68
68
  schemas.set(env.DB, ready);
69
69
  }
70
70
  await ready;
71
- const store = createD1Store(env.DB, { region: regionOf(env) });
72
- return { store, drive: createDrive({ store, blobs: blobsFor(env, config), sharing: createSharing(store) }) };
71
+ return createD1Store(env.DB, { region: regionOf(env) });
73
72
  }
74
73
  var number = (v, name) => {
75
74
  if (v === void 0) return void 0;
@@ -78,16 +77,40 @@ var number = (v, name) => {
78
77
  return n;
79
78
  };
80
79
  var claimedType = (header) => header === void 0 || /^(application\/x-www-form-urlencoded|application\/octet-stream|multipart\/form-data)\b/i.test(header) ? void 0 : header;
81
- function createApp() {
80
+ function createApp(options = {}) {
81
+ const injected = options;
82
+ const unset = (message) => fail("NOT_CONFIGURED", message, 503);
83
+ const urlSettings = "set DRIVE_PUBLIC_URL and DRIVE_URL_SECRET (32 bytes or more)";
84
+ const secretOf = (env) => (injected.blobs ? settings(env, false) : settings(env))?.urlSecret;
85
+ const blobsOf = async (env) => {
86
+ if (injected.blobs) return typeof injected.blobs === "function" ? injected.blobs(env) : injected.blobs;
87
+ const config = settings(env);
88
+ if (!env.FILES) return unset("bind FILES (R2), or inject blobs");
89
+ return config ? blobsFor(env, config) : unset(urlSettings);
90
+ };
91
+ const resolve = async (env) => {
92
+ if (!injected.store && !env.DB) return { stop: unset("bind DB (D1), or inject a store") };
93
+ const blobs = await blobsOf(env);
94
+ if (blobs instanceof Response) return { stop: blobs };
95
+ const store = injected.store ? await (typeof injected.store === "function" ? injected.store(env) : injected.store) : await defaultStore(env);
96
+ return { store, drive: createDrive({ store, blobs, sharing: createSharing(store) }) };
97
+ };
98
+ const who = async (request, store, env) => {
99
+ if (!injected.auth) return authenticate(request, store);
100
+ const ctx = await injected.auth(request, store, env);
101
+ const p = ctx?.principal;
102
+ return ctx && p && ctx.owner === p.chain[0]?.id && ctx.actor?.id === p.principalId && ctx.actor.kind === p.kind ? ctx : null;
103
+ };
104
+ const unauthorized = () => fail("UNAUTHORIZED", injected.auth ? "sign in first" : "send a valid bearer token", 401);
82
105
  const app2 = new Hono();
83
106
  app2.get("/health", (c) => c.json({ ok: true }));
84
107
  const api = new Hono();
85
108
  api.use("*", async (c, next) => {
86
- const config = settings(c.env);
87
- if (!config) return fail("NOT_CONFIGURED", "set DRIVE_PUBLIC_URL and DRIVE_URL_SECRET (32 bytes or more)", 503);
88
- const { drive, store } = await driveFor(c.env, config);
89
- const ctx = await authenticate(c.req.raw, store);
90
- if (!ctx) return fail("UNAUTHORIZED", "send a valid bearer token", 401);
109
+ const r = await resolve(c.env);
110
+ if ("stop" in r) return r.stop;
111
+ const { drive, store } = r;
112
+ const ctx = await who(c.req.raw, store, c.env);
113
+ if (!ctx) return unauthorized();
91
114
  c.set("ctx", ctx);
92
115
  c.set("drive", drive);
93
116
  c.set("store", store);
@@ -186,11 +209,13 @@ function createApp() {
186
209
  });
187
210
  api.delete("/documents", async (c) => c.json(await c.var.drive.forgetDocument(c.var.ctx, need(q(c, "ref"), "ref"))));
188
211
  app2.get("/api/v1/drive/blob", async (c) => {
189
- const config = settings(c.env);
190
- if (!config) return fail("NOT_CONFIGURED", "set DRIVE_PUBLIC_URL and DRIVE_URL_SECRET (32 bytes or more)", 503);
191
- const signed = await verifySignedBlobUrl(c.req.url, { secret: config.urlSecret });
212
+ const secret = secretOf(c.env);
213
+ if (!secret) return unset(urlSettings);
214
+ const signed = await verifySignedBlobUrl(c.req.url, { secret });
192
215
  if (!signed || signed.method !== "GET") return fail("INVALID_LINK", "this link is not valid, or it has expired", 403);
193
- const blob = await blobsFor(c.env, config).get(signed.key);
216
+ const blobs = await blobsOf(c.env);
217
+ if (blobs instanceof Response) return blobs;
218
+ const blob = await blobs.get(signed.key);
194
219
  if (!blob) return fail("NOT_FOUND", "the bytes are gone", 404);
195
220
  return new Response(blob.data, {
196
221
  headers: {
@@ -254,11 +279,11 @@ function createApp() {
254
279
  });
255
280
  const shared = new Hono();
256
281
  const visit = async (c) => {
257
- const config = settings(c.env);
258
- if (!config) return { stop: fail("NOT_CONFIGURED", "set DRIVE_PUBLIC_URL and DRIVE_URL_SECRET (32 bytes or more)", 503) };
259
- const { drive, store } = await driveFor(c.env, config);
260
- const ctx = await authenticate(c.req.raw, store);
261
- if (!ctx && c.req.header("authorization")) return { stop: fail("UNAUTHORIZED", "send a valid bearer token", 401) };
282
+ const r = await resolve(c.env);
283
+ if ("stop" in r) return r;
284
+ const { drive, store } = r;
285
+ const ctx = await who(c.req.raw, store, c.env);
286
+ if (!ctx && c.req.header("authorization")) return { stop: unauthorized() };
262
287
  return { drive, principal: ctx?.principal ?? null, token: c.req.header("x-link-token") };
263
288
  };
264
289
  shared.get("/:id", async (c) => {
package/llms.txt CHANGED
@@ -5,7 +5,12 @@ Store, sort, and share files and folders.
5
5
  Keywords: drive,files,folders,storage,upload,sharing,agents,mcp,cli,r2.
6
6
 
7
7
  - SDK: import { createDrive } from "agentic-drive".
8
+ - Other SDK exports: VERSION, ROOT_ID, ACTOR_KINDS, DEFAULT_MAX_BYTES, sniffMime, parseName, parseSubject, subjectKindOf, DriveError,
9
+ readZip, writeZip, AuthError, openLocal, addPrincipal, issueKey, resolveToken, revokeKey, revokePrincipal, publicNode.
10
+ See README, "Other exports".
8
11
  - Remote SDK: import { createClient } from "agentic-drive/client". createClient({ baseUrl, token, fetch?, retries? }) has one method for each bearer route and each shared route (list, stat, mkdir, upload, download, move, trash, restore, purge, search, share, createLink, and more). A failed call throws DriveApiError with code and status. It runs in browsers, Workers, and Node 22.
12
+ - Worker: import { createApp } from "agentic-drive/worker". createApp({ store?, blobs?, auth? }) takes an injected Store, Blobs, and auth callback `(request, store, env) => Ctx | null`. Each may be a value or a function of the env. With no options, it uses D1, R2, and bearer tokens from the store. See README, "Inject a store, blobs, and sign-in".
13
+ - UI: import { mount } from "agentic-drive/ui"; import "agentic-drive/ui.css" (with agentic-design/styles.css). mount(element, { baseUrl, getToken }) renders the drive (files, trash, upload, share) and returns { update(options), unmount() }. getToken is called before each request and returns a token or undefined. It does not touch the page address or theme. DriveBrowser is the same as a React component. React 19 is an optional peer dependency.
9
14
  - CLI: agentic-drive ls /. Needs a principal: set AGENTIC_DRIVE_TOKEN (or --token) to an API key. Make one with `principal add <id> [--of <person>]` and `key issue <id>`. No key, or a revoked key, exits 3.
10
15
  - MCP: run agentic-drive mcp, then call drive_ls.
11
16
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agentic-drive",
3
- "version": "0.4.0",
3
+ "version": "0.6.0",
4
4
  "description": "Store, sort, and share files and folders.",
5
5
  "keywords": [
6
6
  "drive",
@@ -52,7 +52,12 @@
52
52
  "./worker": {
53
53
  "types": "./dist/worker.d.ts",
54
54
  "import": "./dist/worker.js"
55
- }
55
+ },
56
+ "./ui": {
57
+ "types": "./dist/embed.d.ts",
58
+ "import": "./dist/embed.js"
59
+ },
60
+ "./ui.css": "./dist/embed.css"
56
61
  },
57
62
  "scripts": {
58
63
  "build": "tsup",
@@ -67,6 +72,7 @@
67
72
  },
68
73
  "dependencies": {
69
74
  "@modelcontextprotocol/sdk": "^1.12.0",
75
+ "agentic-design": "^0.1.0",
70
76
  "agentic-identity": "^0.4.0",
71
77
  "hono": "^4.13.14",
72
78
  "zod": "^3.25.0"
@@ -74,11 +80,13 @@
74
80
  "devDependencies": {
75
81
  "@axe-core/playwright": "^4.14.0",
76
82
  "@playwright/test": "^1.64.1",
83
+ "@types/jsdom": "^21.1.7",
77
84
  "@types/node": "^22.0.0",
78
85
  "@types/react": "^19.3.0",
79
86
  "@types/react-dom": "^19.3.0",
80
87
  "@vitejs/plugin-react": "^5.2.0",
81
- "agentic-design": "^0.1.0",
88
+ "esbuild": "^0.27.7",
89
+ "jsdom": "^26.1.0",
82
90
  "miniflare": "^4.20260730.0",
83
91
  "react": "^19.3.1",
84
92
  "react-dom": "^19.3.1",
@@ -90,5 +98,17 @@
90
98
  },
91
99
  "bin": {
92
100
  "agentic-drive": "./dist/cli.js"
101
+ },
102
+ "peerDependencies": {
103
+ "react": ">=19",
104
+ "react-dom": ">=19"
105
+ },
106
+ "peerDependenciesMeta": {
107
+ "react": {
108
+ "optional": true
109
+ },
110
+ "react-dom": {
111
+ "optional": true
112
+ }
93
113
  }
94
114
  }
@@ -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-DO1Apj_S.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-Dx4kXJAl.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-DBQx-q_a.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-B9CIFXIH.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;-webkit-user-select: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;-webkit-user-select:none;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)}.drive-main{max-width:72rem}.drive-muted{color:var(--ad-color-text-muted)}.drive-status{display:flex;align-items:center;gap:var(--ad-space-2);color:var(--ad-color-text-muted)}.drive-signin{display:grid;gap:var(--ad-space-4);max-width:24rem}.drive-form{display:grid;gap:var(--ad-space-4)}.drive-form__actions{display:flex;justify-content:flex-end;gap:var(--ad-space-2)}.drive-drop{min-height:60vh;border:2px dashed transparent;border-radius:var(--ad-radius-md);padding:var(--ad-space-2)}.drive-drop--over{border-color:var(--ad-color-accent);background:var(--ad-color-accent-subtle)}.drive-bar{display:flex;align-items:center;justify-content:space-between;gap:var(--ad-space-4);flex-wrap:wrap;margin-bottom:var(--ad-space-4)}.drive-bar h1{margin:0;font-size:var(--ad-font-size-xl);overflow-wrap:anywhere}.drive-crumbs ol{display:flex;flex-wrap:wrap;gap:var(--ad-space-2);list-style:none;margin:0 0 var(--ad-space-2);padding:0;color:var(--ad-color-text-muted)}.drive-crumbs li+li:before{content:"/";margin-right:var(--ad-space-2)}.drive-crumbs [aria-current=page]{color:var(--ad-color-text);font-weight:var(--ad-font-weight-semibold)}.drive-split{display:grid;grid-template-columns:14rem minmax(0,1fr);gap:var(--ad-space-6)}@media(max-width:48rem){.drive-split{grid-template-columns:1fr}}.drive-tree{list-style:none;margin:0;padding:0}.drive-tree .drive-tree{padding-left:var(--ad-space-4)}.drive-tree a{display:flex;align-items:center;gap:var(--ad-space-2);padding:var(--ad-space-1) var(--ad-space-2);border-radius:var(--ad-radius-sm);color:var(--ad-color-text);text-decoration:none}.drive-tree a:hover{background:var(--ad-color-surface-hover)}.drive-tree a[aria-current=page]{background:var(--ad-color-accent-subtle);color:var(--ad-color-accent-text);font-weight:var(--ad-font-weight-semibold)}.drive-tree svg{width:1rem;height:1rem;flex:none}.drive-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(12rem,1fr));gap:var(--ad-space-4);list-style:none;margin:0;padding:0}.drive-card{position:relative;display:grid;gap:var(--ad-space-2);padding:var(--ad-space-4);border:1px solid var(--ad-color-border);border-radius:var(--ad-radius-md);background:var(--ad-color-surface)}.drive-card__icon svg{width:2rem;height:2rem}.drive-card__name{overflow-wrap:anywhere;font-weight:var(--ad-font-weight-medium);color:var(--ad-color-text)}.drive-card__meta{font-size:var(--ad-font-size-sm);color:var(--ad-color-text-muted)}.drive-card__actions{display:flex;align-items:center;justify-content:space-between;gap:var(--ad-space-2)}
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-DO1Apj_S.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-Dx4kXJAl.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-DBQx-q_a.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-B9CIFXIH.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;-webkit-user-select: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;-webkit-user-select:none;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)}.drive-main{max-width:72rem}.drive-muted{color:var(--ad-color-text-muted)}.drive-status{display:flex;align-items:center;gap:var(--ad-space-2);color:var(--ad-color-text-muted)}.drive-signin{display:grid;gap:var(--ad-space-4);max-width:24rem}.drive-form{display:grid;gap:var(--ad-space-4)}.drive-form__actions{display:flex;justify-content:flex-end;gap:var(--ad-space-2)}.drive-drop{min-height:60vh;border:2px dashed transparent;border-radius:var(--ad-radius-md);padding:var(--ad-space-2)}.drive-drop--over{border-color:var(--ad-color-accent);background:var(--ad-color-accent-subtle)}.drive-bar{display:flex;align-items:center;justify-content:space-between;gap:var(--ad-space-4);flex-wrap:wrap;margin-bottom:var(--ad-space-4)}.drive-bar h1{margin:0;font-size:var(--ad-font-size-xl);overflow-wrap:anywhere}.drive-crumbs ol{display:flex;flex-wrap:wrap;gap:var(--ad-space-2);list-style:none;margin:0 0 var(--ad-space-2);padding:0;color:var(--ad-color-text-muted)}.drive-crumbs li+li:before{content:"/";margin-right:var(--ad-space-2)}.drive-crumbs [aria-current=page]{color:var(--ad-color-text);font-weight:var(--ad-font-weight-semibold)}.drive-split{display:grid;grid-template-columns:14rem minmax(0,1fr);gap:var(--ad-space-6)}@media(max-width:48rem){.drive-split{grid-template-columns:1fr}}.drive-tree{list-style:none;margin:0;padding:0}.drive-tree .drive-tree{padding-left:var(--ad-space-4)}.drive-tree a{display:flex;align-items:center;gap:var(--ad-space-2);padding:var(--ad-space-1) var(--ad-space-2);border-radius:var(--ad-radius-sm);color:var(--ad-color-text);text-decoration:none}.drive-tree a:hover{background:var(--ad-color-surface-hover)}.drive-tree a[aria-current=page]{background:var(--ad-color-accent-subtle);color:var(--ad-color-accent-text);font-weight:var(--ad-font-weight-semibold)}.drive-tree svg{width:1rem;height:1rem;flex:none}.drive-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(12rem,1fr));gap:var(--ad-space-4);list-style:none;margin:0;padding:0}.drive-card{position:relative;display:grid;gap:var(--ad-space-2);padding:var(--ad-space-4);border:1px solid var(--ad-color-border);border-radius:var(--ad-radius-md);background:var(--ad-color-surface)}.drive-card__icon svg{width:2rem;height:2rem}.drive-card__name{overflow-wrap:anywhere;font-weight:var(--ad-font-weight-medium);color:var(--ad-color-text)}.drive-card__meta{font-size:var(--ad-font-size-sm);color:var(--ad-color-text-muted)}.drive-card__actions{display:flex;align-items:center;justify-content:space-between;gap:var(--ad-space-2)}.drive-root{display:grid;grid-template-columns:12rem minmax(0,1fr);gap:var(--ad-space-6);color:var(--ad-color-text)}@media(max-width:48rem){.drive-root{grid-template-columns:1fr}}