runcastle 1.5.8 → 1.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/bin/runcastle.js +30 -7
- package/index.js +30 -7
- package/package.json +1 -1
- package/skills/packs/README.md +1 -1
- package/skills/packs/runcastle/skills/feature/SKILL.md +1 -1
- package/skills/packs/runcastle/skills/feature/references/grilling.md +5 -4
- package/skills/packs/runcastle/skills/feature/references/preview-starter.html +3 -3
- package/skills/packs/runcastle/skills/project/SKILL.md +10 -7
- package/web/assets/index-CSr2CMs2.css +1 -0
- package/web/assets/index-D_nwcaAO.js +190 -0
- package/web/index.html +2 -2
- package/web/assets/index-D10ktKMC.css +0 -1
- package/web/assets/index-D9aL9SRf.js +0 -188
package/bin/runcastle.js
CHANGED
|
@@ -1096,6 +1096,8 @@ function foldThread(log) {
|
|
|
1096
1096
|
const view = { ...EMPTY_THREAD_VIEW, items, plan: [], tasks: [], commands: [] };
|
|
1097
1097
|
view.cursor = log.length ? log[log.length - 1].i : -1;
|
|
1098
1098
|
let turn = null;
|
|
1099
|
+
const shownSubagents = new Set;
|
|
1100
|
+
const shownCalls = new Set;
|
|
1099
1101
|
let workIndex = -1;
|
|
1100
1102
|
let answerIndex = -1;
|
|
1101
1103
|
let ask;
|
|
@@ -1121,9 +1123,8 @@ function foldThread(log) {
|
|
|
1121
1123
|
case "thought":
|
|
1122
1124
|
return { kind: "thought", id: s.id, text: s.text, seconds: Math.max(1, Math.round((s.to - s.from) / 1000)) };
|
|
1123
1125
|
case "tools":
|
|
1124
|
-
return { kind: "tools", id: s.id, calls: s.calls.map((c) => ({ ...c })) };
|
|
1125
1126
|
case "subagent":
|
|
1126
|
-
return
|
|
1127
|
+
return s;
|
|
1127
1128
|
case "answered":
|
|
1128
1129
|
return null;
|
|
1129
1130
|
}
|
|
@@ -1196,13 +1197,12 @@ function foldThread(log) {
|
|
|
1196
1197
|
turn.id = String(e.i);
|
|
1197
1198
|
turn.startedAt = e.at;
|
|
1198
1199
|
turn.segments = [];
|
|
1199
|
-
turn.subagents = new Map;
|
|
1200
|
-
turn.calls = new Map;
|
|
1201
1200
|
workIndex = -1;
|
|
1202
1201
|
answerIndex = -1;
|
|
1203
1202
|
};
|
|
1204
1203
|
const addCall = (t, e, call, parentId) => {
|
|
1205
1204
|
t.calls.set(call.id, call);
|
|
1205
|
+
shownCalls.add(call.id);
|
|
1206
1206
|
const parent = parentId ? t.subagents.get(parentId) : undefined;
|
|
1207
1207
|
if (parent)
|
|
1208
1208
|
parent.calls.push(call);
|
|
@@ -1298,6 +1298,8 @@ function foldThread(log) {
|
|
|
1298
1298
|
break;
|
|
1299
1299
|
}
|
|
1300
1300
|
case "tool": {
|
|
1301
|
+
if (!e.call.title && shownCalls.has(e.call.id) && !turn?.calls.has(e.call.id))
|
|
1302
|
+
break;
|
|
1301
1303
|
const t = openTurn(e);
|
|
1302
1304
|
const known = t.calls.get(e.call.id);
|
|
1303
1305
|
if (known) {
|
|
@@ -1312,15 +1314,19 @@ function foldThread(log) {
|
|
|
1312
1314
|
break;
|
|
1313
1315
|
}
|
|
1314
1316
|
case "subagent": {
|
|
1315
|
-
const
|
|
1316
|
-
const known = t.subagents.get(e.id);
|
|
1317
|
+
const known = turn?.subagents.get(e.id);
|
|
1317
1318
|
if (known) {
|
|
1318
1319
|
if (e.title !== undefined)
|
|
1319
1320
|
known.title = e.title;
|
|
1320
1321
|
if (e.status !== undefined)
|
|
1321
1322
|
known.status = e.status;
|
|
1322
1323
|
} else {
|
|
1324
|
+
const running = e.status === "in_progress" || e.status === "pending";
|
|
1325
|
+
if (!running && (shownSubagents.has(e.id) || !e.title))
|
|
1326
|
+
break;
|
|
1327
|
+
const t = openTurn(e);
|
|
1323
1328
|
const seg = { kind: "subagent", id: e.id, title: e.title ?? "Subagent", status: e.status ?? "in_progress", calls: [] };
|
|
1329
|
+
shownSubagents.add(e.id);
|
|
1324
1330
|
t.subagents.set(e.id, seg);
|
|
1325
1331
|
t.segments.push(seg);
|
|
1326
1332
|
}
|
|
@@ -65222,6 +65228,7 @@ function loggedEntry(ctx, row, about) {
|
|
|
65222
65228
|
title: threadName3(row, events2, about),
|
|
65223
65229
|
role: ROLE[row.kind],
|
|
65224
65230
|
state: agentHost(ctx).isRunning(row.id) ? view.state : "idle",
|
|
65231
|
+
createdAt: row.createdAt ?? 0,
|
|
65225
65232
|
updatedAt: events2.at(-1)?.at ?? row.createdAt ?? 0,
|
|
65226
65233
|
runtime: row.runtime ?? DEFAULT_RUNTIME
|
|
65227
65234
|
};
|
|
@@ -65245,6 +65252,7 @@ function freshEntry(row, about) {
|
|
|
65245
65252
|
title: threadName3(row, [], about),
|
|
65246
65253
|
role: ROLE[row.kind],
|
|
65247
65254
|
state: "idle",
|
|
65255
|
+
createdAt: row.createdAt ?? 0,
|
|
65248
65256
|
updatedAt: row.createdAt ?? 0,
|
|
65249
65257
|
runtime: row.runtime ?? DEFAULT_RUNTIME
|
|
65250
65258
|
};
|
|
@@ -65262,6 +65270,7 @@ function transcriptEntry(ctx, row, source) {
|
|
|
65262
65270
|
title: title ?? NEW_CHAT_NAME,
|
|
65263
65271
|
role: ROLE[row.kind],
|
|
65264
65272
|
state: "idle",
|
|
65273
|
+
createdAt: row.createdAt ?? 0,
|
|
65265
65274
|
updatedAt: row.endedAt ?? row.createdAt ?? 0,
|
|
65266
65275
|
runtime: row.runtime ?? DEFAULT_RUNTIME,
|
|
65267
65276
|
readOnlyTranscript: true
|
|
@@ -66091,6 +66100,19 @@ function hostSaysHeader(ctx, row, opts) {
|
|
|
66091
66100
|
return opts.spawn !== false && !!row.ccSessionId && !agentHost(ctx).isRunning(row.id);
|
|
66092
66101
|
}
|
|
66093
66102
|
async function launchSession(ctx, input, opts = {}) {
|
|
66103
|
+
const before = launches.get(input.featureId);
|
|
66104
|
+
const launch3 = (before ?? Promise.resolve()).catch(() => {
|
|
66105
|
+
return;
|
|
66106
|
+
}).then(() => openMainChat(ctx, input, opts));
|
|
66107
|
+
launches.set(input.featureId, launch3);
|
|
66108
|
+
try {
|
|
66109
|
+
return await launch3;
|
|
66110
|
+
} finally {
|
|
66111
|
+
if (launches.get(input.featureId) === launch3)
|
|
66112
|
+
launches.delete(input.featureId);
|
|
66113
|
+
}
|
|
66114
|
+
}
|
|
66115
|
+
async function openMainChat(ctx, input, opts) {
|
|
66094
66116
|
if (input.kind === "drive-fix") {
|
|
66095
66117
|
throw new GateError('a drive-fix session is opened by "Fix drive" on the failed drive itself, not as a talk ' + "session \u2014 it needs the failure in hand and the developer's own checkout to repair.");
|
|
66096
66118
|
}
|
|
@@ -66426,7 +66448,7 @@ function probePrepareHost(repoPath) {
|
|
|
66426
66448
|
...lock ? { packageManager: lock[1] } : {}
|
|
66427
66449
|
};
|
|
66428
66450
|
}
|
|
66429
|
-
var HELD_OPENING_END = "The human's message follows.", COMPOSE_FILES;
|
|
66451
|
+
var HELD_OPENING_END = "The human's message follows.", launches, COMPOSE_FILES;
|
|
66430
66452
|
var init_launcher = __esm(() => {
|
|
66431
66453
|
init_paths();
|
|
66432
66454
|
init_src();
|
|
@@ -66453,6 +66475,7 @@ var init_launcher = __esm(() => {
|
|
|
66453
66475
|
init_lockfiles();
|
|
66454
66476
|
init_sessions();
|
|
66455
66477
|
init_end_session();
|
|
66478
|
+
launches = new Map;
|
|
66456
66479
|
COMPOSE_FILES = [
|
|
66457
66480
|
"docker-compose.yml",
|
|
66458
66481
|
"docker-compose.yaml",
|
package/index.js
CHANGED
|
@@ -1095,6 +1095,8 @@ function foldThread(log) {
|
|
|
1095
1095
|
const view = { ...EMPTY_THREAD_VIEW, items, plan: [], tasks: [], commands: [] };
|
|
1096
1096
|
view.cursor = log.length ? log[log.length - 1].i : -1;
|
|
1097
1097
|
let turn = null;
|
|
1098
|
+
const shownSubagents = new Set;
|
|
1099
|
+
const shownCalls = new Set;
|
|
1098
1100
|
let workIndex = -1;
|
|
1099
1101
|
let answerIndex = -1;
|
|
1100
1102
|
let ask;
|
|
@@ -1120,9 +1122,8 @@ function foldThread(log) {
|
|
|
1120
1122
|
case "thought":
|
|
1121
1123
|
return { kind: "thought", id: s.id, text: s.text, seconds: Math.max(1, Math.round((s.to - s.from) / 1000)) };
|
|
1122
1124
|
case "tools":
|
|
1123
|
-
return { kind: "tools", id: s.id, calls: s.calls.map((c) => ({ ...c })) };
|
|
1124
1125
|
case "subagent":
|
|
1125
|
-
return
|
|
1126
|
+
return s;
|
|
1126
1127
|
case "answered":
|
|
1127
1128
|
return null;
|
|
1128
1129
|
}
|
|
@@ -1195,13 +1196,12 @@ function foldThread(log) {
|
|
|
1195
1196
|
turn.id = String(e.i);
|
|
1196
1197
|
turn.startedAt = e.at;
|
|
1197
1198
|
turn.segments = [];
|
|
1198
|
-
turn.subagents = new Map;
|
|
1199
|
-
turn.calls = new Map;
|
|
1200
1199
|
workIndex = -1;
|
|
1201
1200
|
answerIndex = -1;
|
|
1202
1201
|
};
|
|
1203
1202
|
const addCall = (t, e, call, parentId) => {
|
|
1204
1203
|
t.calls.set(call.id, call);
|
|
1204
|
+
shownCalls.add(call.id);
|
|
1205
1205
|
const parent = parentId ? t.subagents.get(parentId) : undefined;
|
|
1206
1206
|
if (parent)
|
|
1207
1207
|
parent.calls.push(call);
|
|
@@ -1297,6 +1297,8 @@ function foldThread(log) {
|
|
|
1297
1297
|
break;
|
|
1298
1298
|
}
|
|
1299
1299
|
case "tool": {
|
|
1300
|
+
if (!e.call.title && shownCalls.has(e.call.id) && !turn?.calls.has(e.call.id))
|
|
1301
|
+
break;
|
|
1300
1302
|
const t = openTurn(e);
|
|
1301
1303
|
const known = t.calls.get(e.call.id);
|
|
1302
1304
|
if (known) {
|
|
@@ -1311,15 +1313,19 @@ function foldThread(log) {
|
|
|
1311
1313
|
break;
|
|
1312
1314
|
}
|
|
1313
1315
|
case "subagent": {
|
|
1314
|
-
const
|
|
1315
|
-
const known = t.subagents.get(e.id);
|
|
1316
|
+
const known = turn?.subagents.get(e.id);
|
|
1316
1317
|
if (known) {
|
|
1317
1318
|
if (e.title !== undefined)
|
|
1318
1319
|
known.title = e.title;
|
|
1319
1320
|
if (e.status !== undefined)
|
|
1320
1321
|
known.status = e.status;
|
|
1321
1322
|
} else {
|
|
1323
|
+
const running = e.status === "in_progress" || e.status === "pending";
|
|
1324
|
+
if (!running && (shownSubagents.has(e.id) || !e.title))
|
|
1325
|
+
break;
|
|
1326
|
+
const t = openTurn(e);
|
|
1322
1327
|
const seg = { kind: "subagent", id: e.id, title: e.title ?? "Subagent", status: e.status ?? "in_progress", calls: [] };
|
|
1328
|
+
shownSubagents.add(e.id);
|
|
1323
1329
|
t.subagents.set(e.id, seg);
|
|
1324
1330
|
t.segments.push(seg);
|
|
1325
1331
|
}
|
|
@@ -65221,6 +65227,7 @@ function loggedEntry(ctx, row, about) {
|
|
|
65221
65227
|
title: threadName3(row, events2, about),
|
|
65222
65228
|
role: ROLE[row.kind],
|
|
65223
65229
|
state: agentHost(ctx).isRunning(row.id) ? view.state : "idle",
|
|
65230
|
+
createdAt: row.createdAt ?? 0,
|
|
65224
65231
|
updatedAt: events2.at(-1)?.at ?? row.createdAt ?? 0,
|
|
65225
65232
|
runtime: row.runtime ?? DEFAULT_RUNTIME
|
|
65226
65233
|
};
|
|
@@ -65244,6 +65251,7 @@ function freshEntry(row, about) {
|
|
|
65244
65251
|
title: threadName3(row, [], about),
|
|
65245
65252
|
role: ROLE[row.kind],
|
|
65246
65253
|
state: "idle",
|
|
65254
|
+
createdAt: row.createdAt ?? 0,
|
|
65247
65255
|
updatedAt: row.createdAt ?? 0,
|
|
65248
65256
|
runtime: row.runtime ?? DEFAULT_RUNTIME
|
|
65249
65257
|
};
|
|
@@ -65261,6 +65269,7 @@ function transcriptEntry(ctx, row, source) {
|
|
|
65261
65269
|
title: title ?? NEW_CHAT_NAME,
|
|
65262
65270
|
role: ROLE[row.kind],
|
|
65263
65271
|
state: "idle",
|
|
65272
|
+
createdAt: row.createdAt ?? 0,
|
|
65264
65273
|
updatedAt: row.endedAt ?? row.createdAt ?? 0,
|
|
65265
65274
|
runtime: row.runtime ?? DEFAULT_RUNTIME,
|
|
65266
65275
|
readOnlyTranscript: true
|
|
@@ -66090,6 +66099,19 @@ function hostSaysHeader(ctx, row, opts) {
|
|
|
66090
66099
|
return opts.spawn !== false && !!row.ccSessionId && !agentHost(ctx).isRunning(row.id);
|
|
66091
66100
|
}
|
|
66092
66101
|
async function launchSession(ctx, input, opts = {}) {
|
|
66102
|
+
const before = launches.get(input.featureId);
|
|
66103
|
+
const launch3 = (before ?? Promise.resolve()).catch(() => {
|
|
66104
|
+
return;
|
|
66105
|
+
}).then(() => openMainChat(ctx, input, opts));
|
|
66106
|
+
launches.set(input.featureId, launch3);
|
|
66107
|
+
try {
|
|
66108
|
+
return await launch3;
|
|
66109
|
+
} finally {
|
|
66110
|
+
if (launches.get(input.featureId) === launch3)
|
|
66111
|
+
launches.delete(input.featureId);
|
|
66112
|
+
}
|
|
66113
|
+
}
|
|
66114
|
+
async function openMainChat(ctx, input, opts) {
|
|
66093
66115
|
if (input.kind === "drive-fix") {
|
|
66094
66116
|
throw new GateError('a drive-fix session is opened by "Fix drive" on the failed drive itself, not as a talk ' + "session \u2014 it needs the failure in hand and the developer's own checkout to repair.");
|
|
66095
66117
|
}
|
|
@@ -66425,7 +66447,7 @@ function probePrepareHost(repoPath) {
|
|
|
66425
66447
|
...lock ? { packageManager: lock[1] } : {}
|
|
66426
66448
|
};
|
|
66427
66449
|
}
|
|
66428
|
-
var HELD_OPENING_END = "The human's message follows.", COMPOSE_FILES;
|
|
66450
|
+
var HELD_OPENING_END = "The human's message follows.", launches, COMPOSE_FILES;
|
|
66429
66451
|
var init_launcher = __esm(() => {
|
|
66430
66452
|
init_paths();
|
|
66431
66453
|
init_src();
|
|
@@ -66452,6 +66474,7 @@ var init_launcher = __esm(() => {
|
|
|
66452
66474
|
init_lockfiles();
|
|
66453
66475
|
init_sessions();
|
|
66454
66476
|
init_end_session();
|
|
66477
|
+
launches = new Map;
|
|
66455
66478
|
COMPOSE_FILES = [
|
|
66456
66479
|
"docker-compose.yml",
|
|
66457
66480
|
"docker-compose.yaml",
|
package/package.json
CHANGED
package/skills/packs/README.md
CHANGED
|
@@ -8,7 +8,7 @@ Scope-specific skills, each namespaced `/runcastle:<skill>`:
|
|
|
8
8
|
|
|
9
9
|
| Skill | Invoked | Does |
|
|
10
10
|
|---|---|---|
|
|
11
|
-
| `/runcastle:feature` | entry for `kind=chat` | the feature's lead from its first message to merge: grills
|
|
11
|
+
| `/runcastle:feature` | entry for `kind=chat` | the feature's lead from its first message to merge: grills on what the brief did not settle, records decisions, writes the spec, builds itself or writes tickets and runs rounds, reviews when it is worth it, hands over the drive; grilling, spec, tickets, rounds, planning alone, the preview and design live in its `references/` |
|
|
12
12
|
| `/runcastle:qa` | entry for `kind=qa` | read-only Q&A over an existing feature; never changes it |
|
|
13
13
|
| `/runcastle:project` | entry for `kind=project` | project scope, not feature scope: consults the portfolio, advises on how a lump of intent should be cut into N features and creates them, routes, answers portfolio questions, curates advisory-only, and owns `CONTEXT.md` |
|
|
14
14
|
| `/runcastle:prepare` | entry for `kind=prepare` | *original* — establishes the project's prepared settings and drive machinery with the human |
|
|
@@ -17,7 +17,7 @@ Call `mcp__runcastle__get_feature_context` first, and again whenever you are uns
|
|
|
17
17
|
|
|
18
18
|
## Understand before you build
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
Grill before you settle anything the brief did not: one question at a time, each with your recommended answer and why. Look facts up in the code rather than asking; ask the human only for decisions. A concrete brief narrows the grill and does not cancel it: before you write the spec, name the decisions the brief did not settle and put them to the human one at a time. Skip the grill only when none remain, and say so in chat. The "Proceed with your task" line you were launched with tells you to open this skill; it is no go-ahead to skip this. (A run with no human present has nobody to ask, and `./references/planning-alone.md` governs it.) Record each settled decision in `docs/features/<slug>/decisions.md` the moment it settles. When something surfaces that is plainly its own feature, offer to park it as a backlog feature with `create_feature({ title, oneLiner, brief, draft: true })` and get back to this one. How: `./references/grilling.md`.
|
|
21
21
|
|
|
22
22
|
Write `spec.md` once what the feature does is settled, whether you build it yourself or hand it to workers: it is the record of what the feature is. How: `./references/spec.md`.
|
|
23
23
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Grilling, and recording what was decided
|
|
2
2
|
|
|
3
|
-
Load this when
|
|
4
|
-
|
|
3
|
+
Load this when you are about to interview the human on anything the brief did
|
|
4
|
+
not settle, or when you are about to write or change `decisions.md`.
|
|
5
5
|
|
|
6
6
|
## Context hygiene is the whole game
|
|
7
7
|
|
|
@@ -11,8 +11,9 @@ pressure, you grilled too wide: narrow, don't compact.
|
|
|
11
11
|
|
|
12
12
|
## Grill relentlessly
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
A concrete brief narrows the grill and does not cancel it: start from the
|
|
15
|
+
decisions the brief did not settle. Interview the human about every aspect of
|
|
16
|
+
the feature until you reach a genuinely shared understanding. Walk each branch of the design tree, resolving
|
|
16
17
|
dependencies between decisions one at a time.
|
|
17
18
|
|
|
18
19
|
- **One question at a time.** Wait for the answer before the next. Asking
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
Token names and values are the app's own (apps/web/src/theme.css): keep them in step. ---- */
|
|
11
11
|
:root{
|
|
12
12
|
color-scheme:dark;
|
|
13
|
-
--color-canvas:#0a0c11;--color-surface:#10131a;--color-surface-raised:#161a24;--color-surface-hover
|
|
13
|
+
--color-canvas:#0a0c11;--color-surface:#10131a;--color-surface-raised:#161a24;--color-surface-hover:color-mix(in oklab, var(--color-text) 3.5%, transparent);--color-surface-selected:color-mix(in oklab, var(--color-text) 6%, transparent);--color-fill-card:color-mix(in oklab, var(--color-text) 2.5%, transparent);--color-fill-well:color-mix(in oklab, var(--color-text) 6%, transparent);--color-surface-inset:#0c0e14;
|
|
14
14
|
--color-border:#222837;--color-border-subtle:rgb(200 215 255 / 0.06);--color-border-strong:#333a4d;
|
|
15
15
|
--color-text:#eceef4;--color-text-secondary:#a2a8b9;--color-text-tertiary:#8a91a5;--color-text-disabled:#4b5163;--color-icon:#8990a4;
|
|
16
16
|
--color-primary:#eceef4;--color-on-primary:#0a0c11;
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
}
|
|
24
24
|
:root[data-theme="light"]{
|
|
25
25
|
color-scheme:light;
|
|
26
|
-
--color-canvas:#f4f6f9;--color-surface:#ffffff;--color-surface-raised:#ffffff;--color-surface-hover
|
|
26
|
+
--color-canvas:#f4f6f9;--color-surface:#ffffff;--color-surface-raised:#ffffff;--color-surface-hover:color-mix(in oklab, var(--color-text) 4%, transparent);--color-surface-selected:color-mix(in oklab, var(--color-text) 7%, transparent);--color-fill-card:color-mix(in oklab, var(--color-text) 3%, transparent);--color-fill-well:color-mix(in oklab, var(--color-text) 7%, transparent);--color-surface-inset:#f4f6f9;
|
|
27
27
|
--color-border:#dfe3ec;--color-border-subtle:rgb(22 30 50 / 0.07);--color-border-strong:#cdd2de;
|
|
28
28
|
--color-text:#161a24;--color-text-secondary:#596075;--color-text-tertiary:#676e82;--color-text-disabled:#a4aab9;--color-icon:#7a8195;
|
|
29
29
|
--color-primary:#161a24;--color-on-primary:#ffffff;
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
@media (prefers-color-scheme:light){
|
|
35
35
|
:root:not([data-theme]){
|
|
36
36
|
color-scheme:light;
|
|
37
|
-
--color-canvas:#f4f6f9;--color-surface:#ffffff;--color-surface-raised:#ffffff;--color-surface-hover
|
|
37
|
+
--color-canvas:#f4f6f9;--color-surface:#ffffff;--color-surface-raised:#ffffff;--color-surface-hover:color-mix(in oklab, var(--color-text) 4%, transparent);--color-surface-selected:color-mix(in oklab, var(--color-text) 7%, transparent);--color-fill-card:color-mix(in oklab, var(--color-text) 3%, transparent);--color-fill-well:color-mix(in oklab, var(--color-text) 7%, transparent);--color-surface-inset:#f4f6f9;
|
|
38
38
|
--color-border:#dfe3ec;--color-border-subtle:rgb(22 30 50 / 0.07);--color-border-strong:#cdd2de;
|
|
39
39
|
--color-text:#161a24;--color-text-secondary:#596075;--color-text-tertiary:#676e82;--color-text-disabled:#a4aab9;--color-icon:#7a8195;
|
|
40
40
|
--color-primary:#161a24;--color-on-primary:#ffffff;
|
|
@@ -11,7 +11,7 @@ You belong to the **project**, not to any feature. You have no feature state of
|
|
|
11
11
|
|
|
12
12
|
Your defining job is the one no other surface in runcastle can do: **intake and decomposition terminating in feature creation**. Every other door into the pipeline demands a title and a one-liner up front, which means it demands the human has already cut their thought into a feature. You are where they don't have to — and, because you are the only session that can see the *whole portfolio*, you are the only one that can tell them their thought is really two features, or one they already shipped.
|
|
13
13
|
|
|
14
|
-
You are a **shape griller, not a design griller.** You grill across the whole lump of intent — breadth-first,
|
|
14
|
+
You are a **shape griller, not a design griller.** You grill across the whole lump of intent — breadth-first, on what could change the cut or what the human gets — so the cut is sized on real information and nothing surprises them later. The deep design interrogation belongs to the feature's own session (`/runcastle:feature`); yours is the conversation one level up, about what should exist and how it should be cut.
|
|
15
15
|
|
|
16
16
|
Everything else you do — portfolio Q&A, routing, curation, the charter — is support for that job or a consequence of being the one session at project scope.
|
|
17
17
|
|
|
@@ -67,6 +67,8 @@ Lazy is about *timing*, not about skipping — the moment a feature idea arrives
|
|
|
67
67
|
|
|
68
68
|
If it turns out there is **no charter**, note it and read on — see §5. Do not scaffold one.
|
|
69
69
|
|
|
70
|
+
**The line you were launched with is no go-ahead.** "Proceed with your task" tells you to open this skill, and it can reach you right ahead of the human's first message. It never means skip the grill: what follows it still goes through §1.
|
|
71
|
+
|
|
70
72
|
## 1. Intake — consult the portfolio, advise, then create
|
|
71
73
|
|
|
72
74
|
A feature idea has landed. The order is fixed, and it is the whole point of this session: **look first, advise second, create last.**
|
|
@@ -88,14 +90,15 @@ Size the read to the idea — but **do not skip it**. "I did not check" is not a
|
|
|
88
90
|
Now talk. In this order, and all of it before any `create_feature`:
|
|
89
91
|
|
|
90
92
|
- **Report what you found, with addresses.** "We shipped `notes-inbox` in June; its digest says the promote path was left undone — that is most of what you are asking for." Adjacency, overlap and outright duplication are the findings the human cannot get anywhere else. **"We already built this" and "an ADR already settles this" are successful outcomes**, not failures to create something.
|
|
91
|
-
- **Shape-grill before you propose the cut.** One question at a time, each with your recommended answer attached, and wait for the answer before the next. Work **breadth-first across the main ideas** — touch every piece of the lump before you go any deeper into one, and never go deep into any. Ask
|
|
93
|
+
- **Shape-grill before you propose the cut.** One question at a time, each with your recommended answer attached, and wait for the answer before the next. Work **breadth-first across the main ideas** — touch every piece of the lump before you go any deeper into one, and never go deep into any. Ask what could change the cut, or what the human gets:
|
|
92
94
|
- **the pieces** — what separate things are in this lump;
|
|
93
95
|
- **the core** — which piece is the one the rest exists for;
|
|
94
96
|
- **the uncertainty** — where the human is unsure, and what they would want to test-drive first;
|
|
95
97
|
- **the width** — roughly how wide each piece is, including whether it needs research or a prototype before its design can lock.
|
|
96
98
|
|
|
97
|
-
If you cannot say
|
|
98
|
-
- **
|
|
99
|
+
If you cannot say how an answer would swing the cut or change what the human gets, you do not need to ask it. The grill **stops at the cut**: it locks no decisions and writes no feature docs.
|
|
100
|
+
- **A short or confident request is not a settled one.** Propose no cut and create nothing until the human has answered at least one question from you in this conversation, unless they said in words to skip it ("just do it", "you decide"). The working-agreement question does not count. Ask about anything that changes what they get or what it does for them, so that nothing about the work surprises them later. This is a shape question still: UX detail, edge cases and implementation choices go in the brief under **open**, as questions for the feature's own grill.
|
|
101
|
+
- **Recommend with every question, and propose after the grill.** Never ask a bare question with no recommendation attached. Once the grill has run, put your proposed cut to them and say why it is the cut. They correct or confirm.
|
|
99
102
|
- **Suggest how to split the work.** This is the advice they came for: is this one feature or three? What lands first, and what is it that later work needs from it? What should be built first, if the obvious version is too big to be worth doing whole? Say which order you would take and why.
|
|
100
103
|
- **Cut until every feature fits one ideation window.** Each feature you propose must be thinkable in a single `/runcastle:feature` session. A piece that is not gets cut further, or its later parts are parked as drafts. Big intent never reaches ideation as one feature — you are the size gate.
|
|
101
104
|
- **Push on the cut, not the design.** For each candidate: *what must this feature NOT swallow?* A boundary nobody can state is not a boundary.
|
|
@@ -139,7 +142,7 @@ It is written into `brief.md` verbatim and it is what the feature's agent (and e
|
|
|
139
142
|
Anything that arrives (from the human, or from a sweep in §6) goes to exactly one of:
|
|
140
143
|
|
|
141
144
|
1. **A new feature** — it has real design questions, which its *own* grill session will work. `create_feature` with a brief.
|
|
142
|
-
2. **A small, concrete change** — work too small
|
|
145
|
+
2. **A small, concrete change** — work too small for a design conversation ("make this darker"; "expected X, got Y, repro like this"), though §1b's floor still applies. Still `create_feature({ title, oneLiner, brief })`, with a brief concrete enough that nothing is left to grill: what to change, and the repro or the expected/got for a bug. Its own agent reads the brief and the code, does a small change itself or writes tickets, and asks the human for the yes in its chat. **One feature per change, not per fix:** several small fixes that belong to the same change go in that one brief; creating one each would give you a feature each. **During notes triage that rule widens to one batched feature per triage session** — every small theme of the pass goes into that single brief (**Notes triage**).
|
|
143
146
|
3. **An existing feature's change** — it belongs to a feature already in flight. Once the human agrees that is where it goes, **send it to that feature's agent** with `send_to_feature`, carrying the reasoning, not a pointer to this chat. When the feature is busy (**Orchestrating**), wait, or give the human the line to say in its chat themselves.
|
|
144
147
|
4. **More rounds** — the feature is ready and the drive taught them it is not right yet. Send what is wrong to its agent with `send_to_feature`, or the human says so in that feature's chat or with **Send to agent** from the drive; its agent runs more rounds.
|
|
145
148
|
5. **Nothing** — it is already decided, already built, or not worth doing. Say so plainly, with the ADR or the shipped feature that settles it.
|
|
@@ -256,7 +259,7 @@ Watch for what no feature's agent can see: **conflicts or contradictions between
|
|
|
256
259
|
|
|
257
260
|
**Grill as this session always does** (§1): portfolio first, a shape grill one question at a time, the cut agreed before anything is created. Shape-grill only: the design grill is each feature's own agent's. **Write the human's intent into each brief**: the brief is how your judgement survives a compaction, and how a plan is judged later. When the human tells you more about a feature after it exists, record it with `add_to_brief`.
|
|
258
261
|
|
|
259
|
-
**Have a feature plan itself** with `plan_feature` when the human asked for it, or the agreement calls for it and you judge the feature ready. Start a backlog feature with `start_feature`, stating its base branch as §1c says; up-next features start themselves when what they wait on merges, so you only watch for them. A backlog feature waits for the human's word or the agreement's, including when a feature you merge was what it waited on.
|
|
262
|
+
**Have a feature plan itself** with `plan_feature` when the human asked for it, or the agreement calls for it and you judge the feature ready. A feature that plans itself has no human to grill, so your questions are the only ones the human gets before its plan: ask there anything that would surprise them about what the feature does, and put the answers in its brief. That is still no design grill. Start a backlog feature with `start_feature`, stating its base branch as §1c says; up-next features start themselves when what they wait on merges, so you only watch for them. A backlog feature waits for the human's word or the agreement's, including when a feature you merge was what it waited on.
|
|
260
263
|
|
|
261
264
|
### Talking to a feature's agent
|
|
262
265
|
|
|
@@ -325,7 +328,7 @@ A session that edits without committing leaves a dirty tree, and a dirty tree is
|
|
|
325
328
|
|
|
326
329
|
## Do NOT
|
|
327
330
|
|
|
328
|
-
- **Never create a feature before you have consulted the portfolio and agreed the cut.** §1's order — look, advise, create — is the session.
|
|
331
|
+
- **Never create a feature before you have consulted the portfolio, heard an answer from the human and agreed the cut.** §1's order — look, advise, create — is the session.
|
|
329
332
|
- **Never run a design grilling.** Shape-grill for the cut, and stop there. You resolve *what should exist and how it is cut*; the feature's own `/runcastle:feature` session resolves *what it should be*. Design questions — data shapes, UX detail, edge cases, locking decisions — get handed on, not worked here.
|
|
330
333
|
- **Never act on a feature beyond what the human asked, or what a cut's working agreement covers.** See **Orchestrating**, *What you act on*.
|
|
331
334
|
- **Never touch another feature's docs.** `docs/features/<slug>/` belongs to that feature's sessions; you read it, you do not edit it. `add_to_brief` is the one write you have, and it only appends.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.xterm{cursor:text;-webkit-user-select:none;user-select:none;position:relative}.xterm.focus,.xterm:focus{outline:none}.xterm .xterm-helpers{z-index:5;position:absolute;top:0}.xterm .xterm-helper-textarea{opacity:0;z-index:-5;white-space:nowrap;resize:none;border:0;width:0;height:0;margin:0;padding:0;position:absolute;top:0;left:-9999em;overflow:hidden}.xterm .composition-view{color:#fff;white-space:nowrap;z-index:1;background:#000;display:none;position:absolute}.xterm .composition-view.active{display:block}.xterm .xterm-viewport{cursor:default;background-color:#000;position:absolute;inset:0;overflow-y:scroll}.xterm .xterm-screen{position:relative}.xterm .xterm-screen canvas{position:absolute;top:0;left:0}.xterm-char-measure-element{visibility:hidden;line-height:normal;display:inline-block;position:absolute;top:0;left:-9999em}.xterm.enable-mouse-events{cursor:default}.xterm.xterm-cursor-pointer,.xterm .xterm-cursor-pointer{cursor:pointer}.xterm.column-select.focus{cursor:crosshair}.xterm .xterm-accessibility:not(.debug),.xterm .xterm-message{z-index:10;color:#0000;pointer-events:none;position:absolute;inset:0}.xterm .xterm-accessibility-tree:not(.debug) ::selection{color:#0000}.xterm .xterm-accessibility-tree{-webkit-user-select:text;user-select:text;white-space:pre;font-family:monospace}.xterm .xterm-accessibility-tree>div{transform-origin:0;width:fit-content}.xterm .live-region{width:1px;height:1px;position:absolute;left:-9999px;overflow:hidden}.xterm-dim{opacity:1!important}.xterm-underline-1{text-decoration:underline}.xterm-underline-2{-webkit-text-decoration:underline double;text-decoration:underline double}.xterm-underline-3{-webkit-text-decoration:underline wavy;text-decoration:underline wavy}.xterm-underline-4{-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.xterm-underline-5{-webkit-text-decoration:underline dashed;text-decoration:underline dashed}.xterm-overline{text-decoration:overline}.xterm-overline.xterm-underline-1{text-decoration:underline overline}.xterm-overline.xterm-underline-2{-webkit-text-decoration:overline double underline;text-decoration:overline double underline}.xterm-overline.xterm-underline-3{-webkit-text-decoration:overline wavy underline;text-decoration:overline wavy underline}.xterm-overline.xterm-underline-4{-webkit-text-decoration:overline dotted underline;text-decoration:overline dotted underline}.xterm-overline.xterm-underline-5{-webkit-text-decoration:overline dashed underline;text-decoration:overline dashed underline}.xterm-strikethrough{text-decoration:line-through}.xterm-screen .xterm-decoration-container .xterm-decoration{z-index:6;position:absolute}.xterm-screen .xterm-decoration-container .xterm-decoration.xterm-decoration-top-layer{z-index:7}.xterm-decoration-overview-ruler{z-index:8;pointer-events:none;position:absolute;top:0;right:0}.xterm-decoration-top{z-index:2;position:relative}.xterm .xterm-scrollable-element>.scrollbar{cursor:default}.xterm .xterm-scrollable-element>.scrollbar>.scra{cursor:pointer;font-size:11px!important}.xterm .xterm-scrollable-element>.visible{opacity:1;z-index:11;background:0 0;transition:opacity .1s linear}.xterm .xterm-scrollable-element>.invisible{opacity:0;pointer-events:none}.xterm .xterm-scrollable-element>.invisible.fade{transition:opacity .8s linear}.xterm .xterm-scrollable-element>.shadow{display:none;position:absolute}.xterm .xterm-scrollable-element>.shadow.top{width:100%;height:3px;box-shadow:var(--vscode-scrollbar-shadow,#000) 0 6px 6px -6px inset;display:block;top:0;left:3px}.xterm .xterm-scrollable-element>.shadow.left{width:3px;height:100%;box-shadow:var(--vscode-scrollbar-shadow,#000) 6px 0 6px -6px inset;display:block;top:3px;left:0}.xterm .xterm-scrollable-element>.shadow.top-left-corner{width:3px;height:3px;display:block;top:0;left:0}.xterm .xterm-scrollable-element>.shadow.top.left{box-shadow:var(--vscode-scrollbar-shadow,#000) 6px 0 6px -6px inset}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2)format("woff2-variations");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,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:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/geist-latin-wght-normal-BgDaEnEv.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/geist-mono-cyrillic-ext-wght-normal-X_5orZeX.woff2)format("woff2-variations");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/geist-mono-cyrillic-wght-normal-DiZS0aHC.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/geist-mono-symbols2-wght-normal-CO5SzqOn.woff2)format("woff2-variations");unicode-range:U+2000-2001,U+2004-2008,U+200A,U+23B8-23BD,U+2500-259F}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/geist-mono-vietnamese-wght-normal-DadHysG0.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/geist-mono-latin-ext-wght-normal-Bwz-egvJ.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,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:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/geist-mono-latin-wght-normal-XN7g48iV.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial;--tw-ease:initial;--tw-content:"";--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--orbit-angle:0deg}}}@layer theme{:root,:host{--font-sans:"Geist Variable", "Segoe UI Variable", system-ui, -apple-system, sans-serif;--font-mono:"Geist Mono Variable", "Cascadia Code", ui-monospace, Consolas, monospace;--spacing:.25rem;--container-sm:24rem;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--tracking-tight:-.025em;--leading-tight:1.25;--leading-snug:1.375;--ease-out:cubic-bezier(0, 0, .2, 1);--animate-spin:spin .8s linear infinite;--aspect-video:16 / 9;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--color-canvas:#0a0c11;--color-surface:#10131a;--color-surface-raised:#161a24;--color-surface-hover:#eceef409}@supports (color:color-mix(in lab, red, red)){:root,:host{--color-surface-hover:color-mix(in oklab, var(--color-text) 3.5%, transparent)}}:root,:host{--color-surface-selected:#eceef40f}@supports (color:color-mix(in lab, red, red)){:root,:host{--color-surface-selected:color-mix(in oklab, var(--color-text) 6%, transparent)}}:root,:host{--color-fill-card:#eceef406}@supports (color:color-mix(in lab, red, red)){:root,:host{--color-fill-card:color-mix(in oklab, var(--color-text) 2.5%, transparent)}}:root,:host{--color-fill-well:#eceef40f}@supports (color:color-mix(in lab, red, red)){:root,:host{--color-fill-well:color-mix(in oklab, var(--color-text) 6%, transparent)}}:root,:host{--color-surface-inset:#0c0e14;--color-border:#222837;--color-border-subtle:#c8d7ff0f;--color-border-strong:#333a4d;--color-text:#eceef4;--color-text-secondary:#a2a8b9;--color-text-tertiary:#8a91a5;--color-text-disabled:#4b5163;--color-icon:#8990a4;--color-primary:#eceef4;--color-primary-hover:#fff;--color-on-primary:#0a0c11;--color-accent:#4f8ef7;--color-accent-text:#7aaafa;--color-accent-fill:var(--color-accent);--color-accent-subtle:#16213a;--color-success:#46b67a;--color-success-text:#46b67a;--color-warning:#e2a53b;--color-warning-text:#e2a53b;--color-danger:#f06363;--color-danger-text:#f06363;--color-danger-subtle:#2a1515;--color-phase-draft:var(--color-text-disabled);--color-phase-ideation:#ec7cb5;--color-phase-ideation-text:#ec7cb5;--color-phase-spec:#35c2b8;--color-phase-spec-text:#35c2b8;--color-phase-planning:var(--color-phase-spec);--color-phase-planning-text:var(--color-phase-spec-text);--color-phase-tickets:var(--color-warning);--color-phase-tickets-text:var(--color-warning-text);--color-phase-implementation:#f08a4b;--color-phase-implementation-text:#f08a4b;--color-phase-building:var(--color-phase-implementation);--color-phase-building-text:var(--color-phase-implementation-text);--color-phase-review:var(--color-accent);--color-phase-review-text:var(--color-accent);--color-phase-shipped:var(--color-success);--color-phase-shipped-text:var(--color-success-text);--color-focus-ring:var(--color-accent);--color-scrim:#0009;--text-xs:12px;--text-xs--line-height:16px;--text-sm:13px;--text-sm--line-height:20px;--text-md:14px;--text-md--line-height:20px;--text-base:14px;--text-base--line-height:22px;--text-lg:16px;--text-lg--line-height:24px;--text-lg--letter-spacing:-.01em;--text-xl:22px;--text-xl--line-height:28px;--text-xl--letter-spacing:-.02em;--radius-sm:4px;--radius-md:6px;--radius-lg:10px;--radius-full:9999px;--shadow-popover:var(--elevation-popover);--shadow-dialog:var(--elevation-dialog);--ease-app:cubic-bezier(.22, .61, .24, 1);--ease-out-app:cubic-bezier(.16, 1, .3, 1);--animate-rise-in:riseIn var(--dur-3) var(--ease-out-app) both;--animate-fade-in:fadeIn var(--dur-2) var(--ease-out-app) both;--animate-dialog-in:dialogIn var(--dur-3) var(--ease-out-app) both;--animate-backdrop-in:backdropIn var(--dur-2) var(--ease-out-app) both;--animate-slide-in-right:slideInRight var(--dur-3) var(--ease-out-app) both;--animate-toast-in:toastIn var(--dur-3) var(--ease-out-app) both;--animate-breathe:breathe 2s ease-in-out infinite;--animate-overlay-in:cmdkIn var(--dur-2) var(--ease-out-app);--animate-dot-glow:dotGlow 2.2s var(--ease-app) infinite;--control-sm:24px;--control-h:32px;--control-lg:36px;--row-h:36px;--list-row-h:44px;--menu-item-h:32px;--menu-max-h:360px;--topbar-h:44px;--sidebar-w:248px;--inspector-w:320px;--aside-w:380px;--content-max:760px;--content-wide:1040px;--artifact-w:380px;--chat-panel-w:400px;--notes-rail-w:360px;--dur-1:.12s;--dur-2:.18s;--dur-3:.24s;--ring:0 0 0 2px var(--color-surface), 0 0 0 4px var(--color-focus-ring)}}@layer base{button{appearance:none;color:inherit;background:0 0;border:0;padding:0;font-family:inherit}input,textarea,select{font-family:inherit;font-size:inherit;line-height:inherit;color:inherit}:is(input,textarea,select):focus-visible{outline:2px solid var(--color-focus-ring);outline-offset:-1px}details[data-disclosure]::details-content{overflow-clip-margin:4px;block-size:0;transition:block-size var(--dur-2) var(--ease-app), content-visibility var(--dur-2) allow-discrete;overflow:clip}details[data-disclosure][open]::details-content{block-size:auto}}@layer components;@layer utilities{.\@container\/panel{container:panel/inline-size}.\@container{container-type:inline-size}.orbit-light:before{content:"";border-radius:inherit;pointer-events:none;background:conic-gradient(from var(--orbit-angle), transparent 0 64%, #4f8ef7bf 84%, transparent 98%);padding:1px;position:absolute;inset:0}@supports (color:color-mix(in lab, red, red)){.orbit-light:before{background:conic-gradient(from var(--orbit-angle), transparent 0 64%, color-mix(in oklab, var(--color-accent) 75%, transparent) 84%, transparent 98%)}}.orbit-light:before{-webkit-mask-composite:xor,source-over;-webkit-mask-composite:xor,source-over;animation:4s linear infinite orbit;-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor,source-over;mask:linear-gradient(#000 0 0) content-box exclude,linear-gradient(#000 0 0)}.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:0}.inset-3{inset:calc(var(--spacing) * 3)}.inset-x-0{inset-inline:0}.inset-x-3{inset-inline:calc(var(--spacing) * 3)}.inset-y-0{inset-block:0}.-top-0\.5{top:calc(var(--spacing) * -.5)}.-top-5{top:calc(var(--spacing) * -5)}.-top-6{top:calc(var(--spacing) * -6)}.-top-11{top:calc(var(--spacing) * -11)}.top-0{top:0}.top-0\.5{top:calc(var(--spacing) * .5)}.top-1{top:var(--spacing)}.top-1\.5{top:calc(var(--spacing) * 1.5)}.top-1\/2{top:50%}.top-3{top:calc(var(--spacing) * 3)}.top-3\.5{top:calc(var(--spacing) * 3.5)}.top-4{top:calc(var(--spacing) * 4)}.top-7{top:calc(var(--spacing) * 7)}.top-full{top:100%}.-right-0\.5{right:calc(var(--spacing) * -.5)}.-right-\[3px\]{right:-3px}.right-0{right:0}.right-1{right:var(--spacing)}.right-1\.5{right:calc(var(--spacing) * 1.5)}.right-2{right:calc(var(--spacing) * 2)}.right-3{right:calc(var(--spacing) * 3)}.right-4{right:calc(var(--spacing) * 4)}.right-7{right:calc(var(--spacing) * 7)}.right-8{right:calc(var(--spacing) * 8)}.right-full{right:100%}.bottom-0{bottom:0}.bottom-1\.5{bottom:calc(var(--spacing) * 1.5)}.bottom-3{bottom:calc(var(--spacing) * 3)}.bottom-4{bottom:calc(var(--spacing) * 4)}.-left-1\.5{left:calc(var(--spacing) * -1.5)}.-left-\[3px\]{left:-3px}.left-0{left:0}.left-1\/2{left:50%}.left-4{left:calc(var(--spacing) * 4)}.isolate{isolation:isolate}.-z-10{z-index:calc(10 * -1)}.z-1{z-index:1}.z-10{z-index:10}.z-20{z-index:20}.z-\[200\]{z-index:200}.z-\[300\]{z-index:300}.z-\[400\]{z-index:400}.col-span-full{grid-column:1/-1}.col-start-1{grid-column-start:1}.row-start-1{grid-row-start:1}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.m-0{margin:0}.m-4{margin:calc(var(--spacing) * 4)}.-mx-1{margin-inline:calc(var(--spacing) * -1)}.-mx-1\.5{margin-inline:calc(var(--spacing) * -1.5)}.-mx-2{margin-inline:calc(var(--spacing) * -2)}.-mx-2\.5{margin-inline:calc(var(--spacing) * -2.5)}.-mx-3{margin-inline:calc(var(--spacing) * -3)}.-mx-4{margin-inline:calc(var(--spacing) * -4)}.mx-0{margin-inline:0}.mx-0\.5{margin-inline:calc(var(--spacing) * .5)}.mx-1{margin-inline:var(--spacing)}.mx-2\.5{margin-inline:calc(var(--spacing) * 2.5)}.mx-4{margin-inline:calc(var(--spacing) * 4)}.mx-auto{margin-inline:auto}.-my-0\.5{margin-block:calc(var(--spacing) * -.5)}.my-1{margin-block:var(--spacing)}.my-1\.5{margin-block:calc(var(--spacing) * 1.5)}.my-2{margin-block:calc(var(--spacing) * 2)}.my-5{margin-block:calc(var(--spacing) * 5)}.-mt-3\.5{margin-top:calc(var(--spacing) * -3.5)}.mt-0{margin-top:0}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-2\.5{margin-top:calc(var(--spacing) * 2.5)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mt-8{margin-top:calc(var(--spacing) * 8)}.mt-9{margin-top:calc(var(--spacing) * 9)}.mt-10{margin-top:calc(var(--spacing) * 10)}.mt-12{margin-top:calc(var(--spacing) * 12)}.mt-px{margin-top:1px}.-mr-1{margin-right:calc(var(--spacing) * -1)}.mr-1{margin-right:var(--spacing)}.mr-2{margin-right:calc(var(--spacing) * 2)}.mr-2\.5{margin-right:calc(var(--spacing) * 2.5)}.mr-auto{margin-right:auto}.mb-0{margin-bottom:0}.mb-0\.5{margin-bottom:calc(var(--spacing) * .5)}.mb-1{margin-bottom:var(--spacing)}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-2\.5{margin-bottom:calc(var(--spacing) * 2.5)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.mb-8{margin-bottom:calc(var(--spacing) * 8)}.mb-10{margin-bottom:calc(var(--spacing) * 10)}.-ml-1{margin-left:calc(var(--spacing) * -1)}.-ml-1\.5{margin-left:calc(var(--spacing) * -1.5)}.-ml-2{margin-left:calc(var(--spacing) * -2)}.ml-0\.5{margin-left:calc(var(--spacing) * .5)}.ml-1{margin-left:var(--spacing)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-6{margin-left:calc(var(--spacing) * 6)}.ml-9{margin-left:calc(var(--spacing) * 9)}.ml-\[34px\]{margin-left:34px}.ml-auto{margin-left:auto}.box-border{box-sizing:border-box}.line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.\!hidden{display:none!important}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.inline-grid{display:inline-grid}.table{display:table}.aspect-video{aspect-ratio:var(--aspect-video)}.size-\(--control-h\){width:var(--control-h);height:var(--control-h)}.size-\(--control-lg\){width:var(--control-lg);height:var(--control-lg)}.size-\(--control-sm\){width:var(--control-sm);height:var(--control-sm)}.size-1\.5{width:calc(var(--spacing) * 1.5);height:calc(var(--spacing) * 1.5)}.size-2\.5{width:calc(var(--spacing) * 2.5);height:calc(var(--spacing) * 2.5)}.size-3{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.size-3\.5{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-5{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.size-6{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.size-7{width:calc(var(--spacing) * 7);height:calc(var(--spacing) * 7)}.size-8{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.size-9{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9)}.size-14{width:calc(var(--spacing) * 14);height:calc(var(--spacing) * 14)}.size-16{width:calc(var(--spacing) * 16);height:calc(var(--spacing) * 16)}.size-\[9px\]{width:9px;height:9px}.size-\[23px\]{width:23px;height:23px}.size-full{width:100%;height:100%}.h-\(--control-h\){height:var(--control-h)}.h-\(--control-lg\){height:var(--control-lg)}.h-\(--control-sm\){height:var(--control-sm)}.h-\(--row-h\){height:var(--row-h)}.h-\(--topbar-h\){height:var(--topbar-h)}.h-0\.75{height:calc(var(--spacing) * .75)}.h-1{height:var(--spacing)}.h-2{height:calc(var(--spacing) * 2)}.h-2\.5{height:calc(var(--spacing) * 2.5)}.h-3{height:calc(var(--spacing) * 3)}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-4{height:calc(var(--spacing) * 4)}.h-4\.5{height:calc(var(--spacing) * 4.5)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-11{height:calc(var(--spacing) * 11)}.h-13{height:calc(var(--spacing) * 13)}.h-60{height:calc(var(--spacing) * 60)}.h-64{height:calc(var(--spacing) * 64)}.h-70{height:calc(var(--spacing) * 70)}.h-\[26px\]{height:26px}.h-\[54px\]{height:54px}.h-\[86vh\]{height:86vh}.h-\[132px\]{height:132px}.h-\[min\(620px\,76vh\)\]{height:min(620px,76vh)}.h-\[min\(720px\,84vh\)\]{height:min(720px,84vh)}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.max-h-\(--menu-max-h\){max-height:var(--menu-max-h)}.max-h-\(--radix-popover-content-available-height\){max-height:var(--radix-popover-content-available-height)}.max-h-24{max-height:calc(var(--spacing) * 24)}.max-h-40{max-height:calc(var(--spacing) * 40)}.max-h-44{max-height:calc(var(--spacing) * 44)}.max-h-55{max-height:calc(var(--spacing) * 55)}.max-h-60{max-height:calc(var(--spacing) * 60)}.max-h-64{max-height:calc(var(--spacing) * 64)}.max-h-72{max-height:calc(var(--spacing) * 72)}.max-h-80{max-height:calc(var(--spacing) * 80)}.max-h-96{max-height:calc(var(--spacing) * 96)}.max-h-120{max-height:calc(var(--spacing) * 120)}.max-h-\[80vh\]{max-height:80vh}.max-h-\[82vh\]{max-height:82vh}.max-h-\[260px\]{max-height:260px}.max-h-\[calc\(100vh-320px\)\]{max-height:calc(100vh - 320px)}.max-h-\[clamp\(300px\,calc\(100dvh-340px\)\,1200px\)\]{max-height:clamp(300px,100dvh - 340px,1200px)}.max-h-\[min\(520px\,76vh\)\]{max-height:min(520px,76vh)}.max-h-\[min\(var\(--radix-dropdown-menu-content-available-height\)\,var\(--menu-max-h\)\)\]{max-height:min(var(--radix-dropdown-menu-content-available-height), var(--menu-max-h))}.max-h-\[min\(var\(--radix-select-content-available-height\)\,var\(--menu-max-h\)\)\]{max-height:min(var(--radix-select-content-available-height), var(--menu-max-h))}.min-h-\(--control-h\){min-height:var(--control-h)}.min-h-\(--list-row-h\){min-height:var(--list-row-h)}.min-h-\(--menu-item-h\){min-height:var(--menu-item-h)}.min-h-0{min-height:0}.min-h-4{min-height:calc(var(--spacing) * 4)}.min-h-5{min-height:calc(var(--spacing) * 5)}.min-h-6{min-height:calc(var(--spacing) * 6)}.min-h-7{min-height:calc(var(--spacing) * 7)}.min-h-8{min-height:calc(var(--spacing) * 8)}.min-h-10{min-height:calc(var(--spacing) * 10)}.min-h-11{min-height:calc(var(--spacing) * 11)}.min-h-12{min-height:calc(var(--spacing) * 12)}.min-h-40{min-height:calc(var(--spacing) * 40)}.min-h-65{min-height:calc(var(--spacing) * 65)}.min-h-\[30px\]{min-height:30px}.min-h-full{min-height:100%}.w-\(--aside-w\){width:var(--aside-w)}.w-\(--sidebar-w\){width:var(--sidebar-w)}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-1\/2{width:50%}.w-1\/3{width:33.3333%}.w-2{width:calc(var(--spacing) * 2)}.w-2\/3{width:66.6667%}.w-2\/5{width:40%}.w-3{width:calc(var(--spacing) * 3)}.w-3\/4{width:75%}.w-4{width:calc(var(--spacing) * 4)}.w-4\/5{width:80%}.w-5{width:calc(var(--spacing) * 5)}.w-5\/6{width:83.3333%}.w-6{width:calc(var(--spacing) * 6)}.w-7{width:calc(var(--spacing) * 7)}.w-8{width:calc(var(--spacing) * 8)}.w-10{width:calc(var(--spacing) * 10)}.w-11\/12{width:91.6667%}.w-12{width:calc(var(--spacing) * 12)}.w-14{width:calc(var(--spacing) * 14)}.w-16{width:calc(var(--spacing) * 16)}.w-20{width:calc(var(--spacing) * 20)}.w-24{width:calc(var(--spacing) * 24)}.w-28{width:calc(var(--spacing) * 28)}.w-32{width:calc(var(--spacing) * 32)}.w-36{width:calc(var(--spacing) * 36)}.w-40{width:calc(var(--spacing) * 40)}.w-44{width:calc(var(--spacing) * 44)}.w-48{width:calc(var(--spacing) * 48)}.w-50{width:calc(var(--spacing) * 50)}.w-52{width:calc(var(--spacing) * 52)}.w-56{width:calc(var(--spacing) * 56)}.w-64{width:calc(var(--spacing) * 64)}.w-72{width:calc(var(--spacing) * 72)}.w-80{width:calc(var(--spacing) * 80)}.w-105{width:calc(var(--spacing) * 105)}.w-\[264px\]{width:264px}.w-\[392px\]{width:392px}.w-\[640px\]{width:640px}.w-full{width:100%}.w-px{width:1px}.max-w-\(--content-max\){max-width:var(--content-max)}.max-w-\(--content-wide\){max-width:var(--content-wide)}.max-w-\(--radix-popover-content-available-width\){max-width:var(--radix-popover-content-available-width)}.max-w-48{max-width:calc(var(--spacing) * 48)}.max-w-56{max-width:calc(var(--spacing) * 56)}.max-w-64{max-width:calc(var(--spacing) * 64)}.max-w-72{max-width:calc(var(--spacing) * 72)}.max-w-80{max-width:calc(var(--spacing) * 80)}.max-w-95{max-width:calc(var(--spacing) * 95)}.max-w-96{max-width:calc(var(--spacing) * 96)}.max-w-160{max-width:calc(var(--spacing) * 160)}.max-w-\[44ch\]{max-width:44ch}.max-w-\[60\%\]{max-width:60%}.max-w-\[64ch\]{max-width:64ch}.max-w-\[85\%\]{max-width:85%}.max-w-\[460px\]{max-width:460px}.max-w-\[560px\]{max-width:560px}.max-w-\[620px\]{max-width:620px}.max-w-\[680px\]{max-width:680px}.max-w-\[780px\]{max-width:780px}.max-w-\[860px\]{max-width:860px}.max-w-\[940px\]{max-width:940px}.max-w-\[min\(1400px\,96vw\)\]{max-width:min(1400px,96vw)}.max-w-full{max-width:100%}.max-w-sm{max-width:var(--container-sm)}.min-w-\(--radix-select-trigger-width\){min-width:var(--radix-select-trigger-width)}.min-w-0{min-width:0}.min-w-3\.5{min-width:calc(var(--spacing) * 3.5)}.min-w-4{min-width:calc(var(--spacing) * 4)}.min-w-4\.5{min-width:calc(var(--spacing) * 4.5)}.min-w-5{min-width:calc(var(--spacing) * 5)}.min-w-32{min-width:calc(var(--spacing) * 32)}.min-w-48{min-width:calc(var(--spacing) * 48)}.min-w-56{min-width:calc(var(--spacing) * 56)}.min-w-64{min-width:calc(var(--spacing) * 64)}.min-w-max{min-width:max-content}.flex-1{flex:1}.flex-auto{flex:auto}.flex-none{flex:none}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.shrink-\[2\]{flex-shrink:2}.shrink-\[3\]{flex-shrink:3}.shrink-\[100\]{flex-shrink:100}.grow{flex-grow:1}.basis-0{flex-basis:0}.basis-80{flex-basis:calc(var(--spacing) * 80)}.basis-full{flex-basis:100%}.border-collapse{border-collapse:collapse}.animate-pop-in{animation:popIn var(--dur-2) var(--ease-out-app) both;transform-origin:var(--radix-popper-transform-origin,top)}.origin-top-left{transform-origin:0 0}.-translate-x-1\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-x-\[120\%\]{--tw-translate-x:calc(120% * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-0{--tw-translate-x:0px;translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-3{--tw-translate-x:calc(var(--spacing) * 3);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-y-px{--tw-translate-y:1px;translate:var(--tw-translate-x) var(--tw-translate-y)}.rotate-90{rotate:90deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.text-shimmer{background-image:linear-gradient(90deg, var(--color-text-tertiary) 0%, var(--color-text-tertiary) 35%, var(--color-text) 50%, var(--color-text-tertiary) 65%, var(--color-text-tertiary) 100%);color:#0000;background-size:250% 100%;-webkit-background-clip:text;background-clip:text;animation:2.4s linear infinite shimmer}.orchestrator-beat [data-node]{opacity:.55}.orchestrator-beat:hover [data-node]{animation:nodeBeat 1.2s var(--ease-app) infinite}.orchestrator-beat:hover [data-node]:nth-of-type(2){animation-delay:.15s}.orchestrator-beat:hover [data-node]:nth-of-type(3){animation-delay:.3s}.orchestrator-beat:hover [data-sheen]{animation:sheen 1.1s var(--ease-app) 1}.animate-backdrop-in{animation:var(--animate-backdrop-in)}.animate-breathe{animation:var(--animate-breathe)}.animate-dialog-in{animation:var(--animate-dialog-in)}.animate-fade-in{animation:var(--animate-fade-in)}.animate-none{animation:none}.animate-rise-in{animation:var(--animate-rise-in)}.animate-slide-in-right{animation:var(--animate-slide-in-right)}.animate-spin{animation:var(--animate-spin)}.animate-toast-in{animation:var(--animate-toast-in)}.cursor-col-resize{cursor:col-resize}.cursor-crosshair{cursor:crosshair}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.cursor-text{cursor:text}.cursor-zoom-in{cursor:zoom-in}.touch-none{touch-action:none}.resize{resize:both}.resize-none{resize:none}.resize-y{resize:vertical}.\[scrollbar-width\:thin\]{scrollbar-width:thin}.\[scrollbar-color\:var\(--color-border\)_transparent\]{scrollbar-color:var(--color-border) transparent}.\[scrollbar-color\:var\(--color-border-strong\)_transparent\]{scrollbar-color:var(--color-border-strong) transparent}.\[scrollbar-gutter\:stable\]{scrollbar-gutter:stable}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.appearance-none{appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-\[16px_96px_minmax\(0\,1fr\)\]{grid-template-columns:16px 96px minmax(0,1fr)}.grid-cols-\[28px_minmax\(0\,1fr\)_auto\]{grid-template-columns:28px minmax(0,1fr) auto}.grid-cols-\[150px_repeat\(4\,minmax\(176px\,1fr\)\)\]{grid-template-columns:150px repeat(4,minmax(176px,1fr))}.grid-cols-\[176px_minmax\(0\,1fr\)\]{grid-template-columns:176px minmax(0,1fr)}.grid-cols-\[208px_minmax\(0\,1fr\)\]{grid-template-columns:208px minmax(0,1fr)}.grid-cols-\[210px_1fr\]{grid-template-columns:210px 1fr}.grid-cols-\[auto_1fr\]{grid-template-columns:auto 1fr}.grid-cols-\[max-content_minmax\(0\,1fr\)\]{grid-template-columns:max-content minmax(0,1fr)}.grid-cols-\[minmax\(0\,1\.5fr\)_minmax\(0\,1\.3fr\)_minmax\(0\,0\.8fr\)_88px_24px\]{grid-template-columns:minmax(0,1.5fr) minmax(0,1.3fr) minmax(0,.8fr) 88px 24px}.grid-cols-\[minmax\(0\,1fr\)_132px_minmax\(0\,1\.2fr\)_auto\]{grid-template-columns:minmax(0,1fr) 132px minmax(0,1.2fr) auto}.grid-cols-\[minmax\(0\,1fr\)_260px_24px\]{grid-template-columns:minmax(0,1fr) 260px 24px}.grid-cols-\[minmax\(0\,1fr\)_minmax\(0\,300px\)\]{grid-template-columns:minmax(0,1fr) minmax(0,300px)}.grid-rows-\[minmax\(0\,1fr\)\]{grid-template-rows:minmax(0,1fr)}.flex-col{flex-direction:column}.flex-nowrap{flex-wrap:nowrap}.flex-wrap{flex-wrap:wrap}.place-items-center{place-items:center}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-7{gap:calc(var(--spacing) * 7)}.gap-10{gap:calc(var(--spacing) * 10)}.gap-12{gap:calc(var(--spacing) * 12)}.gap-px{gap:1px}.gap-x-0\.5{column-gap:calc(var(--spacing) * .5)}.gap-x-2{column-gap:calc(var(--spacing) * 2)}.gap-x-3{column-gap:calc(var(--spacing) * 3)}.gap-x-4{column-gap:calc(var(--spacing) * 4)}.gap-x-5{column-gap:calc(var(--spacing) * 5)}.gap-x-6{column-gap:calc(var(--spacing) * 6)}.gap-x-8{column-gap:calc(var(--spacing) * 8)}.gap-y-0\.5{row-gap:calc(var(--spacing) * .5)}.gap-y-1{row-gap:var(--spacing)}.gap-y-1\.5{row-gap:calc(var(--spacing) * 1.5)}.gap-y-2{row-gap:calc(var(--spacing) * 2)}.gap-y-2\.5{row-gap:calc(var(--spacing) * 2.5)}.gap-y-3{row-gap:calc(var(--spacing) * 3)}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-border-subtle>:not(:last-child)){border-color:var(--color-border-subtle)}.self-center{align-self:center}.self-start{align-self:flex-start}.justify-self-start{justify-self:flex-start}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-clip{overflow:clip}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.overscroll-contain{overscroll-behavior:contain}.rounded-\[5px\]{border-radius:5px}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:var(--radius-full)}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-t-lg{border-top-left-radius:var(--radius-lg);border-top-right-radius:var(--radius-lg)}.rounded-l-md{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.rounded-r-md{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-\[1\.5px\]{border-style:var(--tw-border-style);border-width:1.5px}.border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-\[color-mix\(in_oklab\,var\(--color-accent\)_22\%\,transparent\)\]{border-color:#4f8ef738}@supports (color:color-mix(in lab, red, red)){.border-\[color-mix\(in_oklab\,var\(--color-accent\)_22\%\,transparent\)\]{border-color:color-mix(in oklab,var(--color-accent) 22%,transparent)}}.border-accent{border-color:var(--color-accent)}.border-border{border-color:var(--color-border)}.border-border-strong{border-color:var(--color-border-strong)}.border-border-subtle{border-color:var(--color-border-subtle)}.border-current{border-color:currentColor}.border-danger{border-color:var(--color-danger)}.border-primary{border-color:var(--color-primary)}.border-success{border-color:var(--color-success)}.border-text-tertiary{border-color:var(--color-text-tertiary)}.border-transparent{border-color:#0000}.border-t-transparent{border-top-color:#0000}.card{background-color:var(--color-fill-card);box-shadow:inset 0 0 0 1px var(--color-border-subtle)}.bg-\[color-mix\(in_oklab\,var\(--color-accent\)_8\%\,transparent\)\]{background-color:#4f8ef714}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_oklab\,var\(--color-accent\)_8\%\,transparent\)\]{background-color:color-mix(in oklab,var(--color-accent) 8%,transparent)}}.bg-\[color-mix\(in_oklab\,var\(--color-accent\)_14\%\,transparent\)\]{background-color:#4f8ef724}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_oklab\,var\(--color-accent\)_14\%\,transparent\)\]{background-color:color-mix(in oklab,var(--color-accent) 14%,transparent)}}.bg-\[color-mix\(in_oklab\,var\(--color-accent\)_18\%\,transparent\)\]{background-color:#4f8ef72e}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_oklab\,var\(--color-accent\)_18\%\,transparent\)\]{background-color:color-mix(in oklab,var(--color-accent) 18%,transparent)}}.bg-\[color-mix\(in_oklab\,var\(--color-danger\)_12\%\,transparent\)\]{background-color:#f063631f}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_oklab\,var\(--color-danger\)_12\%\,transparent\)\]{background-color:color-mix(in oklab,var(--color-danger) 12%,transparent)}}.bg-\[color-mix\(in_oklab\,var\(--color-success\)_12\%\,transparent\)\]{background-color:#46b67a1f}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_oklab\,var\(--color-success\)_12\%\,transparent\)\]{background-color:color-mix(in oklab,var(--color-success) 12%,transparent)}}.bg-\[color-mix\(in_oklab\,var\(--color-text\)_6\%\,transparent\)\]{background-color:#eceef40f}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_oklab\,var\(--color-text\)_6\%\,transparent\)\]{background-color:color-mix(in oklab,var(--color-text) 6%,transparent)}}.bg-\[color-mix\(in_srgb\,var\(--color-danger\)_16\%\,var\(--color-surface\)\)\]{background-color:#342026}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_srgb\,var\(--color-danger\)_16\%\,var\(--color-surface\)\)\]{background-color:color-mix(in srgb,var(--color-danger) 16%,var(--color-surface))}}.bg-\[color-mix\(in_srgb\,var\(--color-icon\)_16\%\,var\(--color-surface\)\)\]{background-color:#232730}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_srgb\,var\(--color-icon\)_16\%\,var\(--color-surface\)\)\]{background-color:color-mix(in srgb,var(--color-icon) 16%,var(--color-surface))}}.bg-\[color-mix\(in_srgb\,var\(--color-success\)_16\%\,var\(--color-surface\)\)\]{background-color:#192d29}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_srgb\,var\(--color-success\)_16\%\,var\(--color-surface\)\)\]{background-color:color-mix(in srgb,var(--color-success) 16%,var(--color-surface))}}.bg-\[color-mix\(in_srgb\,var\(--color-warning\)_16\%\,var\(--color-surface\)\)\]{background-color:#322a1f}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_srgb\,var\(--color-warning\)_16\%\,var\(--color-surface\)\)\]{background-color:color-mix(in srgb,var(--color-warning) 16%,var(--color-surface))}}.bg-accent{background-color:var(--color-accent)}.bg-accent-fill{background-color:var(--color-accent-fill)}.bg-accent-subtle{background-color:var(--color-accent-subtle)}.bg-accent-subtle\/40{background-color:#16213a66}@supports (color:color-mix(in lab, red, red)){.bg-accent-subtle\/40{background-color:color-mix(in oklab, var(--color-accent-subtle) 40%, transparent)}}.bg-border{background-color:var(--color-border)}.bg-border-strong{background-color:var(--color-border-strong)}.bg-border-subtle{background-color:var(--color-border-subtle)}.bg-canvas{background-color:var(--color-canvas)}.bg-current{background-color:currentColor}.bg-danger{background-color:var(--color-danger)}.bg-danger-subtle{background-color:var(--color-danger-subtle)}.bg-fill-well{background-color:var(--color-fill-well)}.bg-icon{background-color:var(--color-icon)}.bg-inherit{background-color:inherit}.bg-on-primary{background-color:var(--color-on-primary)}.bg-primary{background-color:var(--color-primary)}.bg-scrim{background-color:var(--color-scrim)}.bg-scrim\/20{background-color:#0000001f}@supports (color:color-mix(in lab, red, red)){.bg-scrim\/20{background-color:color-mix(in oklab, var(--color-scrim) 20%, transparent)}}.bg-scrim\/40{background-color:#0000003d}@supports (color:color-mix(in lab, red, red)){.bg-scrim\/40{background-color:color-mix(in oklab, var(--color-scrim) 40%, transparent)}}.bg-success{background-color:var(--color-success)}.bg-surface{background-color:var(--color-surface)}.bg-surface-hover{background-color:var(--color-surface-hover)}.bg-surface-inset{background-color:var(--color-surface-inset)}.bg-surface-inset\/70{background-color:#0c0e14b3}@supports (color:color-mix(in lab, red, red)){.bg-surface-inset\/70{background-color:color-mix(in oklab, var(--color-surface-inset) 70%, transparent)}}.bg-surface-raised{background-color:var(--color-surface-raised)}.bg-surface-selected{background-color:var(--color-surface-selected)}.bg-text-disabled{background-color:var(--color-text-disabled)}.bg-text-secondary{background-color:var(--color-text-secondary)}.bg-text-tertiary{background-color:var(--color-text-tertiary)}.bg-transparent{background-color:#0000}.bg-warning{background-color:var(--color-warning)}.\[background-image\:linear-gradient\(to_right\,color-mix\(in_oklab\,var\(--color-accent\)_14\%\,transparent\)_1px\,transparent_1px\)\,linear-gradient\(to_bottom\,color-mix\(in_oklab\,var\(--color-accent\)_14\%\,transparent\)_1px\,transparent_1px\)\]{background-image:linear-gradient(90deg,#4f8ef724 1px,#0000 1px),linear-gradient(#4f8ef724 1px,#0000 1px)}@supports (color:color-mix(in lab, red, red)){.\[background-image\:linear-gradient\(to_right\,color-mix\(in_oklab\,var\(--color-accent\)_14\%\,transparent\)_1px\,transparent_1px\)\,linear-gradient\(to_bottom\,color-mix\(in_oklab\,var\(--color-accent\)_14\%\,transparent\)_1px\,transparent_1px\)\]{background-image:linear-gradient(to right,color-mix(in oklab,var(--color-accent) 14%,transparent) 1px,transparent 1px),linear-gradient(to bottom,color-mix(in oklab,var(--color-accent) 14%,transparent) 1px,transparent 1px)}}.bg-\[linear-gradient\(100deg\,color-mix\(in_oklab\,var\(--color-accent\)_16\%\,var\(--color-canvas\)\)\,color-mix\(in_oklab\,var\(--color-accent\)_5\%\,var\(--color-canvas\)\)_70\%\)\]{background-image:linear-gradient(100deg,#152136,#0d131d 70%)}@supports (color:color-mix(in lab, red, red)){.bg-\[linear-gradient\(100deg\,color-mix\(in_oklab\,var\(--color-accent\)_16\%\,var\(--color-canvas\)\)\,color-mix\(in_oklab\,var\(--color-accent\)_5\%\,var\(--color-canvas\)\)_70\%\)\]{background-image:linear-gradient(100deg,color-mix(in oklab,var(--color-accent) 16%,var(--color-canvas)),color-mix(in oklab,var(--color-accent) 5%,var(--color-canvas)) 70%)}}.bg-\[linear-gradient\(100deg\,transparent\,color-mix\(in_oklab\,var\(--color-text\)_7\%\,transparent\)\,transparent\)\]{background-image:linear-gradient(100deg,#0000,#eceef412,#0000)}@supports (color:color-mix(in lab, red, red)){.bg-\[linear-gradient\(100deg\,transparent\,color-mix\(in_oklab\,var\(--color-text\)_7\%\,transparent\)\,transparent\)\]{background-image:linear-gradient(100deg,transparent,color-mix(in oklab,var(--color-text) 7%,transparent),transparent)}}.bg-\[linear-gradient\(to_bottom\,transparent\,var\(--color-surface\)_24px\)\]{background-image:linear-gradient(to bottom,transparent,var(--color-surface) 24px)}.bg-\[linear-gradient\(to_bottom\,var\(--color-surface\)\,transparent\)\]{background-image:linear-gradient(to bottom,var(--color-surface),transparent)}.\[mask-image\:linear-gradient\(to_left\,black\,transparent\)\]{-webkit-mask-image:linear-gradient(270deg,#000,#0000);mask-image:linear-gradient(270deg,#000,#0000)}.\[background-size\:12px_12px\]{background-size:12px 12px}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.object-top{object-position:top}.p-0{padding:0}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:var(--spacing)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.p-px{padding:1px}.px-0{padding-inline:0}.px-1{padding-inline:var(--spacing)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-3\.5{padding-inline:calc(var(--spacing) * 3.5)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-6{padding-inline:calc(var(--spacing) * 6)}.px-8{padding-inline:calc(var(--spacing) * 8)}.py-0{padding-block:0}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-3\.75{padding-block:calc(var(--spacing) * 3.75)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-5{padding-block:calc(var(--spacing) * 5)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-10{padding-block:calc(var(--spacing) * 10)}.py-12{padding-block:calc(var(--spacing) * 12)}.py-16{padding-block:calc(var(--spacing) * 16)}.py-px{padding-block:1px}.pt-0{padding-top:0}.pt-0\.5{padding-top:calc(var(--spacing) * .5)}.pt-1{padding-top:var(--spacing)}.pt-1\.5{padding-top:calc(var(--spacing) * 1.5)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-2\.5{padding-top:calc(var(--spacing) * 2.5)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-3\.5{padding-top:calc(var(--spacing) * 3.5)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pt-5{padding-top:calc(var(--spacing) * 5)}.pt-6{padding-top:calc(var(--spacing) * 6)}.pt-8{padding-top:calc(var(--spacing) * 8)}.pt-9{padding-top:calc(var(--spacing) * 9)}.pt-12{padding-top:calc(var(--spacing) * 12)}.pt-\[8vh\]{padding-top:8vh}.pt-\[12vh\]{padding-top:12vh}.pt-\[14vh\]{padding-top:14vh}.pt-px{padding-top:1px}.pr-0\.5{padding-right:calc(var(--spacing) * .5)}.pr-1{padding-right:var(--spacing)}.pr-1\.5{padding-right:calc(var(--spacing) * 1.5)}.pr-2{padding-right:calc(var(--spacing) * 2)}.pr-2\.5{padding-right:calc(var(--spacing) * 2.5)}.pr-3{padding-right:calc(var(--spacing) * 3)}.pr-6{padding-right:calc(var(--spacing) * 6)}.pr-9{padding-right:calc(var(--spacing) * 9)}.pb-1{padding-bottom:var(--spacing)}.pb-1\.5{padding-bottom:calc(var(--spacing) * 1.5)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-2\.5{padding-bottom:calc(var(--spacing) * 2.5)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pb-5{padding-bottom:calc(var(--spacing) * 5)}.pb-10{padding-bottom:calc(var(--spacing) * 10)}.pb-12{padding-bottom:calc(var(--spacing) * 12)}.pb-16{padding-bottom:calc(var(--spacing) * 16)}.pl-0{padding-left:0}.pl-0\.5{padding-left:calc(var(--spacing) * .5)}.pl-1{padding-left:var(--spacing)}.pl-2{padding-left:calc(var(--spacing) * 2)}.pl-2\.5{padding-left:calc(var(--spacing) * 2.5)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-3\.5{padding-left:calc(var(--spacing) * 3.5)}.pl-4{padding-left:calc(var(--spacing) * 4)}.pl-4\.5{padding-left:calc(var(--spacing) * 4.5)}.pl-5{padding-left:calc(var(--spacing) * 5)}.pl-5\.5{padding-left:calc(var(--spacing) * 5.5)}.pl-6{padding-left:calc(var(--spacing) * 6)}.pl-8{padding-left:calc(var(--spacing) * 8)}.pl-8\.5{padding-left:calc(var(--spacing) * 8.5)}.pl-9{padding-left:calc(var(--spacing) * 9)}.pl-10{padding-left:calc(var(--spacing) * 10)}.pl-10\.5{padding-left:calc(var(--spacing) * 10.5)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.align-\[-1px\]{vertical-align:-1px}.align-\[-2px\]{vertical-align:-2px}.align-middle{vertical-align:middle}.align-top{vertical-align:top}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height));letter-spacing:var(--tw-tracking,var(--text-lg--letter-spacing))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height));letter-spacing:var(--tw-tracking,var(--text-xl--letter-spacing))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-md{font-size:var(--text-md);line-height:var(--tw-leading,var(--text-md--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[0\.88em\]{font-size:.88em}.text-\[0\.93em\]{font-size:.93em}.text-\[1\.3em\]{font-size:1.3em}.text-\[1\.12em\]{font-size:1.12em}.text-\[1em\]{font-size:1em}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.leading-5{--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5)}.leading-\[1\.5\]{--tw-leading:1.5;line-height:1.5}.leading-\[18px\]{--tw-leading:18px;line-height:18px}.leading-\[20px\]{--tw-leading:20px;line-height:20px}.leading-\[22px\]{--tw-leading:22px;line-height:22px}.leading-none{--tw-leading:1;line-height:1}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.text-pretty{text-wrap:pretty}.break-words{overflow-wrap:break-word}.wrap-anywhere{overflow-wrap:anywhere}.break-all{word-break:break-all}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[color-mix\(in_oklab\,var\(--color-accent-text\)_70\%\,var\(--color-text-tertiary\)\)\]{color:#7fa3e1}@supports (color:color-mix(in lab, red, red)){.text-\[color-mix\(in_oklab\,var\(--color-accent-text\)_70\%\,var\(--color-text-tertiary\)\)\]{color:color-mix(in oklab,var(--color-accent-text) 70%,var(--color-text-tertiary))}}.text-accent{color:var(--color-accent)}.text-accent-text{color:var(--color-accent-text)}.text-danger{color:var(--color-danger)}.text-danger-text{color:var(--color-danger-text)}.text-icon{color:var(--color-icon)}.text-inherit{color:inherit}.text-on-primary{color:var(--color-on-primary)}.text-phase-building{color:var(--color-phase-building)}.text-phase-draft{color:var(--color-phase-draft)}.text-phase-ideation{color:var(--color-phase-ideation)}.text-phase-implementation{color:var(--color-phase-implementation)}.text-phase-implementation-text{color:var(--color-phase-implementation-text)}.text-phase-planning{color:var(--color-phase-planning)}.text-phase-review{color:var(--color-phase-review)}.text-phase-review-text{color:var(--color-phase-review-text)}.text-phase-shipped{color:var(--color-phase-shipped)}.text-phase-spec{color:var(--color-phase-spec)}.text-phase-tickets{color:var(--color-phase-tickets)}.text-phase-tickets-text{color:var(--color-phase-tickets-text)}.text-success{color:var(--color-success)}.text-success-text{color:var(--color-success-text)}.text-surface{color:var(--color-surface)}.text-text{color:var(--color-text)}.text-text\!{color:var(--color-text)!important}.text-text-disabled{color:var(--color-text-disabled)}.text-text-secondary{color:var(--color-text-secondary)}.text-text-tertiary{color:var(--color-text-tertiary)}.text-warning{color:var(--color-warning)}.text-warning-text{color:var(--color-warning-text)}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.no-underline{text-decoration-line:none}.underline{text-decoration-line:underline}.decoration-accent-text\/50{text-decoration-color:#7aaafa80}@supports (color:color-mix(in lab, red, red)){.decoration-accent-text\/50{-webkit-text-decoration-color:color-mix(in oklab, var(--color-accent-text) 50%, transparent);-webkit-text-decoration-color:color-mix(in oklab, var(--color-accent-text) 50%, transparent);-webkit-text-decoration-color:color-mix(in oklab, var(--color-accent-text) 50%, transparent);text-decoration-color:color-mix(in oklab, var(--color-accent-text) 50%, transparent)}}.decoration-border-strong{-webkit-text-decoration-color:var(--color-border-strong);-webkit-text-decoration-color:var(--color-border-strong);-webkit-text-decoration-color:var(--color-border-strong);text-decoration-color:var(--color-border-strong)}.decoration-dotted{text-decoration-style:dotted}.underline-offset-2{text-underline-offset:2px}.underline-offset-4{text-underline-offset:4px}.accent-accent{accent-color:var(--color-accent)}.accent-text{accent-color:var(--color-text)}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-85{opacity:.85}.opacity-100{opacity:1}.shadow-\[0_0_0_1px_color-mix\(in_srgb\,var\(--color-danger\)_45\%\,transparent\)\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,#f0636373)}@supports (color:color-mix(in lab, red, red)){.shadow-\[0_0_0_1px_color-mix\(in_srgb\,var\(--color-danger\)_45\%\,transparent\)\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,color-mix(in srgb,var(--color-danger) 45%,transparent))}}.shadow-\[0_0_0_1px_color-mix\(in_srgb\,var\(--color-danger\)_45\%\,transparent\)\]{box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[0_0_0_1px_color-mix\(in_srgb\,var\(--color-icon\)_45\%\,transparent\)\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,#8990a473)}@supports (color:color-mix(in lab, red, red)){.shadow-\[0_0_0_1px_color-mix\(in_srgb\,var\(--color-icon\)_45\%\,transparent\)\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,color-mix(in srgb,var(--color-icon) 45%,transparent))}}.shadow-\[0_0_0_1px_color-mix\(in_srgb\,var\(--color-icon\)_45\%\,transparent\)\]{box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[0_0_0_1px_color-mix\(in_srgb\,var\(--color-success\)_45\%\,transparent\)\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,#46b67a73)}@supports (color:color-mix(in lab, red, red)){.shadow-\[0_0_0_1px_color-mix\(in_srgb\,var\(--color-success\)_45\%\,transparent\)\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,color-mix(in srgb,var(--color-success) 45%,transparent))}}.shadow-\[0_0_0_1px_color-mix\(in_srgb\,var\(--color-success\)_45\%\,transparent\)\]{box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[0_0_0_1px_color-mix\(in_srgb\,var\(--color-warning\)_45\%\,transparent\)\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,#e2a53b73)}@supports (color:color-mix(in lab, red, red)){.shadow-\[0_0_0_1px_color-mix\(in_srgb\,var\(--color-warning\)_45\%\,transparent\)\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,color-mix(in srgb,var(--color-warning) 45%,transparent))}}.shadow-\[0_0_0_1px_color-mix\(in_srgb\,var\(--color-warning\)_45\%\,transparent\)\]{box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[0_0_0_3px_var\(--color-accent-subtle\)\]{--tw-shadow:0 0 0 3px var(--tw-shadow-color,var(--color-accent-subtle));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[inset_0_1px_0_color-mix\(in_oklab\,var\(--color-text\)_5\%\,transparent\)\,inset_0_0_0_1px_var\(--color-border-subtle\)\]{--tw-shadow:inset 0 1px 0 var(--tw-shadow-color,#eceef40d), inset 0 0 0 1px var(--tw-shadow-color,var(--color-border-subtle))}@supports (color:color-mix(in lab, red, red)){.shadow-\[inset_0_1px_0_color-mix\(in_oklab\,var\(--color-text\)_5\%\,transparent\)\,inset_0_0_0_1px_var\(--color-border-subtle\)\]{--tw-shadow:inset 0 1px 0 var(--tw-shadow-color,color-mix(in oklab,var(--color-text) 5%,transparent)), inset 0 0 0 1px var(--tw-shadow-color,var(--color-border-subtle))}}.shadow-\[inset_0_1px_0_color-mix\(in_oklab\,var\(--color-text\)_5\%\,transparent\)\,inset_0_0_0_1px_var\(--color-border-subtle\)\]{box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[inset_0_1px_0_color-mix\(in_oklab\,var\(--color-text\)_7\%\,transparent\)\]{--tw-shadow:inset 0 1px 0 var(--tw-shadow-color,#eceef412)}@supports (color:color-mix(in lab, red, red)){.shadow-\[inset_0_1px_0_color-mix\(in_oklab\,var\(--color-text\)_7\%\,transparent\)\]{--tw-shadow:inset 0 1px 0 var(--tw-shadow-color,color-mix(in oklab,var(--color-text) 7%,transparent))}}.shadow-\[inset_0_1px_0_color-mix\(in_oklab\,var\(--color-text\)_7\%\,transparent\)\]{box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[inset_0_1px_0_color-mix\(in_oklab\,var\(--color-text\)_12\%\,transparent\)\]{--tw-shadow:inset 0 1px 0 var(--tw-shadow-color,#eceef41f)}@supports (color:color-mix(in lab, red, red)){.shadow-\[inset_0_1px_0_color-mix\(in_oklab\,var\(--color-text\)_12\%\,transparent\)\]{--tw-shadow:inset 0 1px 0 var(--tw-shadow-color,color-mix(in oklab,var(--color-text) 12%,transparent))}}.shadow-\[inset_0_1px_0_color-mix\(in_oklab\,var\(--color-text\)_12\%\,transparent\)\]{box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-dialog{--tw-shadow:var(--elevation-dialog);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-popover{--tw-shadow:var(--elevation-popover);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring,.ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-\[color-mix\(in_oklab\,var\(--color-accent\)_28\%\,transparent\)\]{--tw-ring-color:#4f8ef747}@supports (color:color-mix(in lab, red, red)){.ring-\[color-mix\(in_oklab\,var\(--color-accent\)_28\%\,transparent\)\]{--tw-ring-color:color-mix(in oklab,var(--color-accent) 28%,transparent)}}.ring-\[color-mix\(in_oklab\,var\(--color-accent\)_35\%\,transparent\)\]{--tw-ring-color:#4f8ef759}@supports (color:color-mix(in lab, red, red)){.ring-\[color-mix\(in_oklab\,var\(--color-accent\)_35\%\,transparent\)\]{--tw-ring-color:color-mix(in oklab,var(--color-accent) 35%,transparent)}}.ring-\[color-mix\(in_oklab\,var\(--color-accent\)_55\%\,transparent\)\]{--tw-ring-color:#4f8ef78c}@supports (color:color-mix(in lab, red, red)){.ring-\[color-mix\(in_oklab\,var\(--color-accent\)_55\%\,transparent\)\]{--tw-ring-color:color-mix(in oklab,var(--color-accent) 55%,transparent)}}.ring-border-subtle{--tw-ring-color:var(--color-border-subtle)}.ring-surface{--tw-ring-color:var(--color-surface)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.outline-2{outline-style:var(--tw-outline-style);outline-width:2px}.outline-offset-4{outline-offset:4px}.outline-accent{outline-color:var(--color-accent)}.sepia{--tw-sepia:sepia(100%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[border-color\]{transition-property:border-color;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[color\,background-color\,border-color\,transform\]{transition-property:color,background-color,border-color,transform;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[height\]{transition-property:height;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[outline-color\]{transition-property:outline-color;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\]{transition-property:width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-\(--dur-1\){--tw-duration:var(--dur-1);transition-duration:var(--dur-1)}.duration-\(--dur-2\){--tw-duration:var(--dur-2);transition-duration:var(--dur-2)}.duration-\(--dur-3\){--tw-duration:var(--dur-3);transition-duration:var(--dur-3)}.ease-app{--tw-ease:var(--ease-app);transition-timing-function:var(--ease-app)}.ease-out-app{--tw-ease:var(--ease-out-app);transition-timing-function:var(--ease-out-app)}.outline-none{--tw-outline-style:none;outline-style:none}.select-all{-webkit-user-select:all;user-select:all}.select-none{-webkit-user-select:none;user-select:none}.\[animation-delay\:300ms\]{animation-delay:.3s}.\[animation-delay\:calc\(var\(--i\)\*20ms\)\]{animation-delay:calc(var(--i) * 20ms)}.\[animation-delay\:calc\(var\(--i\)\*40ms\)\]{animation-delay:calc(var(--i) * 40ms)}.\[animation-fill-mode\:both\]{animation-fill-mode:both}.\[counter-increment\:checklist\]{counter-increment:checklist}.\[counter-reset\:checklist\]{counter-reset:checklist}.\[direction\:rtl\]{direction:rtl}.ring-inset{--tw-ring-inset:inset}.group-open\/disclosure\:rotate-90:is(:where(.group\/disclosure):is([open],:popover-open,:open) *){rotate:90deg}.group-focus-within\:opacity-100:is(:where(.group):focus-within *),.group-focus-within\/msg\:opacity-100:is(:where(.group\/msg):focus-within *){opacity:1}.group-focus-within\/nav\:opacity-0:is(:where(.group\/nav):focus-within *){opacity:0}.group-focus-within\/nav\:opacity-100:is(:where(.group\/nav):focus-within *),.group-focus-within\/note\:opacity-100:is(:where(.group\/note):focus-within *){opacity:1}.group-focus-within\/row\:opacity-0:is(:where(.group\/row):focus-within *){opacity:0}.group-focus-within\/row\:opacity-100:is(:where(.group\/row):focus-within *){opacity:1}@media (hover:hover){.group-hover\:opacity-100:is(:where(.group):hover *),.group-hover\/call\:opacity-100:is(:where(.group\/call):hover *){opacity:1}.group-hover\/choice\:text-text-secondary:is(:where(.group\/choice):hover *){color:var(--color-text-secondary)}.group-hover\/fold\:opacity-100:is(:where(.group\/fold):hover *){opacity:1}.group-hover\/head\:text-text:is(:where(.group\/head):hover *){color:var(--color-text)}.group-hover\/msg\:opacity-100:is(:where(.group\/msg):hover *){opacity:1}.group-hover\/nav\:text-text:is(:where(.group\/nav):hover *){color:var(--color-text)}.group-hover\/nav\:opacity-0:is(:where(.group\/nav):hover *){opacity:0}.group-hover\/nav\:opacity-100:is(:where(.group\/nav):hover *),.group-hover\/note\:opacity-100:is(:where(.group\/note):hover *){opacity:1}.group-hover\/row\:text-text:is(:where(.group\/row):hover *){color:var(--color-text)}.group-hover\/row\:opacity-0:is(:where(.group\/row):hover *){opacity:0}.group-hover\/row\:opacity-100:is(:where(.group\/row):hover *),.group-hover\/sum\:opacity-100:is(:where(.group\/sum):hover *){opacity:1}.group-hover\/thread\:opacity-0:is(:where(.group\/thread):hover *){opacity:0}.group-hover\/thread\:opacity-100:is(:where(.group\/thread):hover *){opacity:1}}.group-has-\[\:focus-visible\]\/nav\:opacity-0:is(:where(.group\/nav):has(:focus-visible) *){opacity:0}.group-has-\[\:focus-visible\]\/nav\:opacity-100:is(:where(.group\/nav):has(:focus-visible) *){opacity:1}.group-has-\[\:focus-visible\]\/thread\:opacity-0:is(:where(.group\/thread):has(:focus-visible) *){opacity:0}.group-has-\[\:focus-visible\]\/thread\:opacity-100:is(:where(.group\/thread):has(:focus-visible) *){opacity:1}.group-has-\[\[aria-expanded\=true\]\]\/nav\:opacity-0:is(:where(.group\/nav):has([aria-expanded=true]) *){opacity:0}.group-aria-expanded\:rotate-180:is(:where(.group)[aria-expanded=true] *){rotate:180deg}.peer-checked\:opacity-100:is(:where(.peer):checked~*){opacity:1}.first-letter\:uppercase:first-letter{text-transform:uppercase}.marker\:text-text-tertiary ::marker{color:var(--color-text-tertiary)}.marker\:text-text-tertiary::marker{color:var(--color-text-tertiary)}.marker\:text-text-tertiary ::-webkit-details-marker{color:var(--color-text-tertiary)}.marker\:text-text-tertiary::-webkit-details-marker{color:var(--color-text-tertiary)}.placeholder\:text-text-disabled::placeholder{color:var(--color-text-disabled)}.placeholder\:text-text-tertiary::placeholder{color:var(--color-text-tertiary)}.before\:absolute:before{content:var(--tw-content);position:absolute}.before\:top-4:before{content:var(--tw-content);top:calc(var(--spacing) * 4)}.before\:bottom-5:before{content:var(--tw-content);bottom:calc(var(--spacing) * 5)}.before\:left-\[11px\]:before{content:var(--tw-content);left:11px}.before\:w-px:before{content:var(--tw-content);width:1px}.before\:bg-border-strong:before{content:var(--tw-content);background-color:var(--color-border-strong)}.before\:content-\[\'\'\]:before{--tw-content:"";content:var(--tw-content)}.before\:content-\[counter\(checklist\)\]:before{--tw-content:counter(checklist);content:var(--tw-content)}.first\:mt-0:first-child{margin-top:0}.first\:border-t-0:first-child{border-top-style:var(--tw-border-style);border-top-width:0}.first\:pl-0:first-child{padding-left:0}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.checked\:border-primary:checked{border-color:var(--color-primary)}.checked\:bg-primary:checked{background-color:var(--color-primary)}.empty\:hidden:empty{display:none}.focus-within\:border-accent:focus-within{border-color:var(--color-accent)}.focus-within\:bg-surface-hover:focus-within{background-color:var(--color-surface-hover)}.focus-within\:outline-2:focus-within{outline-style:var(--tw-outline-style);outline-width:2px}.focus-within\:-outline-offset-1:focus-within{outline-offset:calc(1px * -1)}.focus-within\:outline-focus-ring:focus-within{outline-color:var(--color-focus-ring)}@media (hover:hover){.hover\:scale-110:hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x) var(--tw-scale-y)}.hover\:scale-125:hover{--tw-scale-x:125%;--tw-scale-y:125%;--tw-scale-z:125%;scale:var(--tw-scale-x) var(--tw-scale-y)}.hover\:border-border:hover{border-color:var(--color-border)}.hover\:border-border-strong:hover{border-color:var(--color-border-strong)}.hover\:border-text-tertiary:hover{border-color:var(--color-text-tertiary)}.hover\:bg-border-strong:hover{background-color:var(--color-border-strong)}.hover\:bg-danger-subtle:hover{background-color:var(--color-danger-subtle)}.hover\:bg-surface-hover:hover{background-color:var(--color-surface-hover)}.hover\:bg-surface-hover\/50:hover{background-color:color-mix(in srgb, color-mix(in oklab, var(--color-text) 3.5%, transparent) 50%, transparent)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-surface-hover\/50:hover{background-color:color-mix(in oklab, var(--color-surface-hover) 50%, transparent)}}.hover\:bg-transparent:hover{background-color:#0000}.hover\:text-accent-text:hover{color:var(--color-accent-text)}.hover\:text-text:hover{color:var(--color-text)}.hover\:text-text-secondary:hover{color:var(--color-text-secondary)}.hover\:underline:hover{text-decoration-line:underline}.hover\:decoration-accent-text:hover{-webkit-text-decoration-color:var(--color-accent-text);-webkit-text-decoration-color:var(--color-accent-text);-webkit-text-decoration-color:var(--color-accent-text);text-decoration-color:var(--color-accent-text)}.checked\:hover\:bg-primary-hover:checked:hover{background-color:var(--color-primary-hover)}}.focus\:border-accent:focus{border-color:var(--color-accent)}.focus\:bg-surface-inset:focus{background-color:var(--color-surface-inset)}.focus-visible\:opacity-100:focus-visible{opacity:1}.focus-visible\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.focus-visible\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\:outline-focus-ring:focus-visible{outline-color:var(--color-focus-ring)}@media (hover:hover){.enabled\:hover\:border-border-strong:enabled:hover{border-color:var(--color-border-strong)}.enabled\:hover\:border-danger-subtle:enabled:hover{border-color:var(--color-danger-subtle)}.enabled\:hover\:border-text-tertiary:enabled:hover{border-color:var(--color-text-tertiary)}.enabled\:hover\:bg-danger-subtle:enabled:hover{background-color:var(--color-danger-subtle)}.enabled\:hover\:bg-primary-hover:enabled:hover{background-color:var(--color-primary-hover)}.enabled\:hover\:bg-surface-hover:enabled:hover{background-color:var(--color-surface-hover)}.enabled\:hover\:text-danger:enabled:hover{color:var(--color-danger)}.enabled\:hover\:text-text:enabled:hover{color:var(--color-text)}.enabled\:hover\:text-text-secondary:enabled:hover{color:var(--color-text-secondary)}}.enabled\:active\:translate-y-px:enabled:active{--tw-translate-y:1px;translate:var(--tw-translate-x) var(--tw-translate-y)}.disabled\:cursor-default:disabled{cursor:default}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:border-border:disabled{border-color:var(--color-border)}.disabled\:border-border-subtle:disabled{border-color:var(--color-border-subtle)}.disabled\:bg-surface-selected:disabled{background-color:var(--color-surface-selected)}.disabled\:text-text-disabled:disabled{color:var(--color-text-disabled)}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:checked\:bg-text-disabled:disabled:checked{background-color:var(--color-text-disabled)}.has-\[\[aria-expanded\=true\]\]\:opacity-100:has([aria-expanded=true]){opacity:1}.has-\[input\:disabled\]\:cursor-not-allowed:has(:is(input:disabled)){cursor:not-allowed}.has-\[input\[aria-invalid\=true\]\]\:border-danger:has(:is(input[aria-invalid=true])){border-color:var(--color-danger)}.aria-expanded\:border-accent[aria-expanded=true]{border-color:var(--color-accent)}.aria-expanded\:bg-danger-subtle[aria-expanded=true]{background-color:var(--color-danger-subtle)}.aria-expanded\:bg-surface-selected[aria-expanded=true]{background-color:var(--color-surface-selected)}.aria-expanded\:text-danger[aria-expanded=true]{color:var(--color-danger)}.aria-expanded\:text-text[aria-expanded=true]{color:var(--color-text)}.aria-invalid\:border-danger[aria-invalid=true]{border-color:var(--color-danger)}.aria-pressed\:bg-surface-selected[aria-pressed=true]{background-color:var(--color-surface-selected)}.aria-pressed\:text-text[aria-pressed=true]{color:var(--color-text)}.aria-\[current\=true\]\:font-medium[aria-current=true]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.data-highlighted\:bg-danger-subtle[data-highlighted]{background-color:var(--color-danger-subtle)}.data-highlighted\:bg-surface-hover[data-highlighted]{background-color:var(--color-surface-hover)}.data-placeholder\:text-text-tertiary[data-placeholder]{color:var(--color-text-tertiary)}.data-\[disabled\=\'\'\]\:cursor-not-allowed[data-disabled=""]{cursor:not-allowed}.data-\[disabled\=\'\'\]\:opacity-50[data-disabled=""]{opacity:.5}.data-\[disabled\=true\]\:cursor-not-allowed[data-disabled=true]{cursor:not-allowed}.data-\[disabled\=true\]\:opacity-50[data-disabled=true]{opacity:.5}.data-\[selected\=true\]\:bg-surface-hover[data-selected=true]{background-color:var(--color-surface-hover)}.data-\[state\=checked\]\:font-medium[data-state=checked]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.data-\[state\=open\]\:border-accent[data-state=open]{border-color:var(--color-accent)}.data-\[state\=open\]\:bg-surface-hover[data-state=open]{background-color:var(--color-surface-hover)}.data-\[state\=open\]\:bg-surface-selected[data-state=open]{background-color:var(--color-surface-selected)}.data-\[state\=open\]\:text-text[data-state=open]{color:var(--color-text)}@media (prefers-reduced-motion:reduce){.motion-reduce\:transition-none{transition-property:none}}@media (width>=48rem){.md\:w-60{width:calc(var(--spacing) * 60)}.md\:flex-row{flex-direction:row}.md\:overflow-auto{overflow:auto}.md\:overflow-hidden{overflow:hidden}}@container not (width>=1100px){.\@max-\[1100px\]\:absolute{position:absolute}.\@max-\[1100px\]\:inset-y-0{inset-block:0}.\@max-\[1100px\]\:right-0{right:0}.\@max-\[1100px\]\:z-20{z-index:20}.\@max-\[1100px\]\:shadow-dialog{--tw-shadow:var(--elevation-dialog);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}}@container panel not (width>=520px){.\@max-\[520px\]\/panel\:sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}}@container not (width>=56rem){.\@max-4xl\:absolute{position:absolute}.\@max-4xl\:inset-y-0{inset-block:0}.\@max-4xl\:top-\(--topbar-h\){top:var(--topbar-h)}.\@max-4xl\:right-0{right:0}.\@max-4xl\:z-20{z-index:20}.\@max-4xl\:h-auto{height:auto}.\@max-4xl\:shadow-dialog{--tw-shadow:var(--elevation-dialog);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}}@container (width>=1000px){.\@min-\[1000px\]\:sticky{position:sticky}.\@min-\[1000px\]\:top-4{top:calc(var(--spacing) * 4)}.\@min-\[1000px\]\:-ml-30{margin-left:calc(var(--spacing) * -30)}.\@min-\[1000px\]\:grid-cols-\[120px_minmax\(0\,1fr\)\]{grid-template-columns:120px minmax(0,1fr)}.\@min-\[1000px\]\:gap-0{gap:0}.\@min-\[1000px\]\:px-0{padding-inline:0}.\@min-\[1000px\]\:leading-10{--tw-leading:calc(var(--spacing) * 10);line-height:calc(var(--spacing) * 10)}}.\[\&_\.xterm-viewport\]\:bg-transparent\! .xterm-viewport{background-color:#0000!important}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_svg\]\:text-danger svg{color:var(--color-danger)}.\[\&_svg\]\:text-icon svg{color:var(--color-icon)}.disabled\:\[\&_svg\]\:text-text-disabled:disabled svg{color:var(--color-text-disabled)}.\[\&\:\:-webkit-details-marker\]\:hidden::-webkit-details-marker{display:none}.\[\&\>\*\]\:min-h-0>*{min-height:0}.\[\&\>\*\]\:flex-1>*{flex:1}.\[\&\>\*\:first-child\]\:mt-0>:first-child{margin-top:0}.\[\&\>\*\:last-child\]\:mb-0>:last-child{margin-bottom:0}.\[\&\>\[data-list-row\]\]\:rounded-none>[data-list-row]{border-radius:0}.\[\&\>\[data-list-row\]\]\:border-b>[data-list-row]{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\[\&\>\[data-list-row\]\]\:border-border-subtle>[data-list-row]{border-color:var(--color-border-subtle)}.\[\&\>\[data-list-row\]\:last-child\]\:border-b-0>[data-list-row]:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.\[\&\>code\]\:border-0>code{border-style:var(--tw-border-style);border-width:0}.\[\&\>code\]\:bg-transparent>code{background-color:#0000}.\[\&\>code\]\:p-0>code{padding:0}.\[\&\>code\]\:text-\[1em\]>code{font-size:1em}.\[\&\>code\]\:text-text-secondary>code{color:var(--color-text-secondary)}.\[\&\>details\:last-child\]\:border-b>details:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\[\&\>details\:last-child\]\:border-border-subtle>details:last-child{border-color:var(--color-border-subtle)}.\[\&\>li\]\:relative>li{position:relative}.\[\&\>li\]\:pl-6>li{padding-left:calc(var(--spacing) * 6)}.\[\&\>ol\]\:mt-1>ol{margin-top:var(--spacing)}.\[\&\>ol\]\:mb-0>ol{margin-bottom:0}.\[\&\>p\]\:mb-1>p{margin-bottom:var(--spacing)}.\[\&\>span\:last-child\]\:truncate>span:last-child{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.\[\&\>svg\]\:mt-0\.5>svg{margin-top:calc(var(--spacing) * .5)}.\[\&\>svg\]\:size-3\.5>svg{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.\[\&\>svg\]\:size-4>svg{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.\[\&\>svg\]\:size-5>svg{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.\[\&\>ul\]\:mt-1>ul{margin-top:var(--spacing)}.\[\&\>ul\]\:mb-0>ul{margin-bottom:0}}:root{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--elevation-popover:0 0 0 1px #ffffff0f, 0 8px 24px -6px #0009, inset 0 1px 0 #eceef40f}@supports (color:color-mix(in lab, red, red)){:root{--elevation-popover:0 0 0 1px #ffffff0f, 0 8px 24px -6px #0009, inset 0 1px 0 color-mix(in oklab, var(--color-text) 6%, transparent)}}:root{--elevation-dialog:0 0 0 1px #ffffff12, 0 24px 64px -12px #000000bf, inset 0 1px 0 #eceef40f}@supports (color:color-mix(in lab, red, red)){:root{--elevation-dialog:0 0 0 1px #ffffff12, 0 24px 64px -12px #000000bf, inset 0 1px 0 color-mix(in oklab, var(--color-text) 6%, transparent)}}:root{interpolate-size:allow-keywords}:root[data-theme=light]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--color-canvas:#f4f6f9;--color-surface:#fff;--color-surface-raised:#fff;--color-surface-hover:#eceef40a}@supports (color:color-mix(in lab, red, red)){:root[data-theme=light]{--color-surface-hover:color-mix(in oklab, var(--color-text) 4%, transparent)}}:root[data-theme=light]{--color-surface-selected:#eceef412}@supports (color:color-mix(in lab, red, red)){:root[data-theme=light]{--color-surface-selected:color-mix(in oklab, var(--color-text) 7%, transparent)}}:root[data-theme=light]{--color-fill-card:#eceef408}@supports (color:color-mix(in lab, red, red)){:root[data-theme=light]{--color-fill-card:color-mix(in oklab, var(--color-text) 3%, transparent)}}:root[data-theme=light]{--color-fill-well:#eceef412}@supports (color:color-mix(in lab, red, red)){:root[data-theme=light]{--color-fill-well:color-mix(in oklab, var(--color-text) 7%, transparent)}}:root[data-theme=light]{--color-surface-inset:#f4f6f9;--color-border:#dfe3ec;--color-border-subtle:#161e3212;--color-border-strong:#cdd2de;--color-text:#161a24;--color-text-secondary:#596075;--color-text-tertiary:#676e82;--color-text-disabled:#a4aab9;--color-icon:#7a8195;--color-primary:#161a24;--color-primary-hover:#2a3040;--color-on-primary:#fff;--color-accent:#3a7ef0;--color-accent-text:#2361d4;--color-accent-subtle:#ecf2fe;--color-accent-fill:var(--color-accent-text);--color-phase-review-text:var(--color-accent-text);--color-success:#23955a;--color-success-text:#137745;--color-warning:#c06e00;--color-warning-text:#9c5600;--color-danger:#df5050;--color-danger-text:#c42828;--color-danger-subtle:#fdeeee;--color-phase-ideation:#d4529a;--color-phase-ideation-text:#ba3176;--color-phase-spec:#10928a;--color-phase-spec-text:#087570;--color-phase-implementation:#d4621a;--color-phase-implementation-text:#ac4b0a;--color-scrim:#161a2447;--elevation-popover:0 0 0 1px #0000000f, 0 8px 24px -8px #00000029, inset 0 1px 0 #eceef40f}@supports (color:color-mix(in lab, red, red)){:root[data-theme=light]{--elevation-popover:0 0 0 1px #0000000f, 0 8px 24px -8px #00000029, inset 0 1px 0 color-mix(in oklab, var(--color-text) 6%, transparent)}}:root[data-theme=light]{--elevation-dialog:0 0 0 1px #0000000f, 0 24px 64px -16px #00000038, inset 0 1px 0 #eceef40f}@supports (color:color-mix(in lab, red, red)){:root[data-theme=light]{--elevation-dialog:0 0 0 1px #0000000f, 0 24px 64px -16px #00000038, inset 0 1px 0 color-mix(in oklab, var(--color-text) 6%, transparent)}}:root[data-theme-switching] *,:root[data-theme-switching] :before,:root[data-theme-switching] :after{transition:none!important}@property --orbit-angle{syntax:"<angle>";inherits:false;initial-value:0deg}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}@keyframes breathe{0%,to{opacity:1}50%{opacity:.4}}@keyframes dotGlow{0%,to{box-shadow:0 0 0 3px color-mix(in oklab, var(--color-accent) 22%, transparent)}50%{box-shadow:0 0 0 5px color-mix(in oklab, var(--color-accent) 8%, transparent)}}@keyframes riseIn{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes fadeUp{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}@keyframes bodyIn{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}@keyframes detailIn{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:none}}@keyframes popIn{0%{opacity:0;transform:scale(.97)}to{opacity:1;transform:none}}@keyframes dialogIn{0%{opacity:0;transform:translateY(8px)scale(.98)}to{opacity:1;transform:none}}@keyframes cmdkIn{0%{opacity:0;transform:translateY(8px)scale(.98)}to{opacity:1;transform:none}}@keyframes backdropIn{0%{opacity:0}to{opacity:1}}@keyframes slideInRight{0%{opacity:0;transform:translate(12px)}to{opacity:1;transform:none}}@keyframes toastIn{0%{opacity:0;transform:translateY(8px)scale(.98)}to{opacity:1;transform:none}}@keyframes shimmer{0%{background-position:150% 0}to{background-position:-50% 0}}@keyframes orbit{to{--orbit-angle:360deg}}@keyframes nodeBeat{0%,to{opacity:.45}30%{opacity:1}}@keyframes sheen{0%{transform:translate(-120%)}to{transform:translate(220%)}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.001ms!important;animation-duration:.001ms!important;animation-iteration-count:1!important}[data-progress]{animation:2s ease-in-out infinite pulse!important}.text-shimmer{color:var(--color-text-secondary);background:0 0}.orbit-light:before{background:#4f8ef759}@supports (color:color-mix(in lab, red, red)){.orbit-light:before{background:color-mix(in oklab, var(--color-accent) 35%, transparent)}}details[data-disclosure]::details-content{transition-duration:.001ms!important}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}*{box-sizing:border-box}html,body,#root{height:100%;margin:0;padding:0}body{background:var(--color-canvas);color:var(--color-text);font-family:var(--font-sans);font-size:var(--text-sm);line-height:var(--text-sm--line-height);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizelegibility;overflow:hidden}html{scrollbar-width:thin;scrollbar-color:var(--color-border-strong) transparent}:focus-visible:not(input,textarea,select){outline:2px solid var(--color-focus-ring);outline-offset:2px}:is([tabindex="-1"],[role=menuitem],[role=menuitemradio],[role=menuitemcheckbox],[role=option],[cmdk-item]):focus-visible{outline:none}
|