harness-wingman 0.9.5 → 0.9.6

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.
@@ -556,6 +556,8 @@ var init_panel = __esm({
556
556
  "panel.taskboard.turnEnded": "Turn ended",
557
557
  "panel.taskboard.ended": "Ended",
558
558
  "panel.taskboard.inProgress": "In progress",
559
+ "panel.taskboard.allowed": "Allowed",
560
+ "panel.taskboard.denied": "Declined",
559
561
  "panel.taskboard.dshHasNoObservedCommandTo": "dsh has no observed command to resume a specific session; continue in the original terminal",
560
562
  "panel.taskboard.sourceSessionIdFromHookEvents": "Source: session id from hook events; command syntax from codex resume --help",
561
563
  "panel.taskboard.sourceSessionIdFromHookEvents132": "Source: session id from hook events; command syntax from claude --help; run in the original project directory",
@@ -602,6 +604,7 @@ var init_panel_narrative = __esm({
602
604
  "panel.narrative.event.UserPromptSubmit": "New prompt received",
603
605
  "panel.narrative.event.PreToolUse": "Tool call started",
604
606
  "panel.narrative.event.PostToolUse": "Tool call completed",
607
+ "panel.narrative.event.userRejected": "You declined",
605
608
  "panel.narrative.event.Stop": "Turn ended",
606
609
  "panel.narrative.event.Notification": "Notification received",
607
610
  "panel.narrative.event.PermissionRequest": "Waiting for permission",
@@ -649,6 +652,7 @@ var init_render = __esm({
649
652
  "panel.render.olderSessions": "{count} older sessions",
650
653
  "panel.render.olderSessionsSource": "Source: sessions.ended and lastActivity more than {days} days ago; display only",
651
654
  "panel.render.archiveSession": "Archive",
655
+ "panel.render.archiveThisSession": "Archive this session",
652
656
  "panel.render.restoreSession": "Restore",
653
657
  "panel.render.archivedSessions": "Archived sessions ({count})",
654
658
  "panel.render.sessionArchiveSource": "Source: local task-overlay.json session / project archived; harness data is retained",
@@ -828,9 +832,22 @@ var init_render = __esm({
828
832
  "panel.render.closeDialog": "Close dialog",
829
833
  "panel.render.dayFreeTrialUntil": "30-day free trial until {p0}",
830
834
  "panel.render.dayFreeTrialEnding": "30-day free trial until {p0} \xB7 then the free tier (one tool)",
831
- "panel.render.freeTierOneHarness": "The free tier shows one tool",
832
835
  "panel.render.freeTierHarness": "Free tier tool",
833
- "panel.render.freeTierLock": "The free tier shows one tool; a trial or subscription shows them all.",
836
+ "panel.render.freeTierBarLabel": "Free tier",
837
+ "panel.render.freeTierBarChoose": "Choose one tool. You can change it after 7 days",
838
+ "panel.render.freeTierBarCurrent": "Current tool: {tool}",
839
+ "panel.render.freeTierBarDay": "Change in {days} day",
840
+ "panel.render.freeTierBarDays": "Change in {days} days",
841
+ "panel.render.freeTierBarToday": "Can change today",
842
+ "panel.render.freeTierBarChange": "Change",
843
+ "panel.render.freeTierBarSwitchableAt": "Can change on {date}",
844
+ "panel.render.freeTierModalTitle": "Free tier shows one tool",
845
+ "panel.render.freeTierModalBody": "You are currently viewing {tool}. A trial or subscription unlocks all three tools, the cross-tool project overview and write access to config toggles.",
846
+ "panel.render.freeTierModalTrial": "Start the 30-day free trial",
847
+ "panel.render.freeTierModalDismiss": "Not now",
848
+ "panel.render.freeTierModalExisting": "Already have a license?",
849
+ "panel.render.freeTierModalImport": "Import",
850
+ "panel.render.freeTierModalRefresh": "Refresh",
834
851
  "panel.render.dayFreeTrialActive": "30-day free trial active",
835
852
  "panel.render.freeTrialEndedRefreshOrSubscribe": "Free trial ended \xB7 the free tier shows one tool \xB7 refresh or subscribe",
836
853
  "panel.render.subscriptionExpiredInGracePeriodRenew": "Subscription expired, in grace period \xB7 renew",
@@ -975,13 +992,12 @@ var init_render = __esm({
975
992
  "panel.render.failureSuffix": " \xB7 Failed",
976
993
  "panel.render.sourceTranscriptHookToolEventOriginal": "Source: transcript / hook tool event; original parameters: ",
977
994
  "panel.render.noWingmanPlanMd": "No .wingman/plan.md",
978
- "panel.render.loadingProjectData": "Loading project data",
979
995
  "panel.render.projectDataUnavailable": "Project data unavailable",
980
996
  "panel.render.openProject": "Open project",
981
997
  "panel.render.thisSessionAttachedTo": "This session: attached to",
982
998
  "panel.render.thisSessionUnattached": "This session: unattached (",
983
999
  "panel.render.copyInstallCommand": "Copy install command",
984
- "panel.render.currentPointPrefix": "Current point: ",
1000
+ "panel.render.currentPointPrefix": "Project current point: ",
985
1001
  "panel.render.markedCompleteByAgentNoThe": "Agent has not declared completion (the previous instruction's plan is complete; no plan declared for this instruction)",
986
1002
  "panel.render.agentCompletionStatus": "Agent has not declared completion",
987
1003
  "panel.render.agentStructuredPlanStepStatesTaskWorkflow": "Agent structured plan step states; taskWorkflow.plan.forInstruction",
@@ -1280,6 +1296,7 @@ var init_server = __esm({
1280
1296
  "cli.server.localeInvalid": "locale must be a registered language tag",
1281
1297
  "cli.server.settingsInvalid": "Settings require a registered locale, a valid island position and size, or a known freeHarness",
1282
1298
  "cli.server.freeHarnessNotDetected": "This tool has not been detected and cannot be selected for the free tier.",
1299
+ "cli.server.freeHarnessCooldown": "The free tool cannot be changed for 7 days after selection. You can change it on {switchableAt}.",
1283
1300
  "cli.server.fixturesSettings": "Fixtures mode is read-only: language settings are not saved",
1284
1301
  "cli.server.settingsHome": "Language settings require homeDir"
1285
1302
  };
@@ -1843,6 +1860,8 @@ var init_panel2 = __esm({
1843
1860
  "panel.taskboard.turnEnded": "\u56DE\u5408\u7ED3\u675F",
1844
1861
  "panel.taskboard.ended": "\u5DF2\u7ED3\u675F",
1845
1862
  "panel.taskboard.inProgress": "\u8FDB\u884C\u4E2D",
1863
+ "panel.taskboard.allowed": "\u5DF2\u5141\u8BB8",
1864
+ "panel.taskboard.denied": "\u5DF2\u62D2\u7EDD",
1846
1865
  "panel.taskboard.dshHasNoObservedCommandTo": "dsh \u672A\u63D0\u4F9B\u6309\u4F1A\u8BDD\u6062\u590D\u7684\u547D\u4EE4(\u672A\u89C2\u5BDF\u5230),\u8BF7\u5728\u539F\u7EC8\u7AEF\u7EE7\u7EED",
1847
1866
  "panel.taskboard.sourceSessionIdFromHookEvents": "\u6765\u6E90:\u4F1A\u8BDD id \u6765\u81EA hook \u4E8B\u4EF6;\u547D\u4EE4\u5F62\u5F0F\u6765\u81EA codex resume --help",
1848
1867
  "panel.taskboard.sourceSessionIdFromHookEvents132": "\u6765\u6E90:\u4F1A\u8BDD id \u6765\u81EA hook \u4E8B\u4EF6;\u547D\u4EE4\u5F62\u5F0F\u6765\u81EA claude --help;\u9700\u5728\u539F\u9879\u76EE\u76EE\u5F55\u8FD0\u884C",
@@ -1889,6 +1908,7 @@ var init_panel_narrative2 = __esm({
1889
1908
  "panel.narrative.event.UserPromptSubmit": "\u6536\u5230\u65B0\u63D0\u793A",
1890
1909
  "panel.narrative.event.PreToolUse": "\u5DE5\u5177\u8C03\u7528\u5F00\u59CB",
1891
1910
  "panel.narrative.event.PostToolUse": "\u5DE5\u5177\u8C03\u7528\u5B8C\u6210",
1911
+ "panel.narrative.event.userRejected": "\u4F60\u62D2\u7EDD\u4E86",
1892
1912
  "panel.narrative.event.Stop": "\u56DE\u5408\u7ED3\u675F",
1893
1913
  "panel.narrative.event.Notification": "\u6536\u5230\u901A\u77E5",
1894
1914
  "panel.narrative.event.PermissionRequest": "\u7B49\u5F85\u6388\u6743",
@@ -1936,6 +1956,7 @@ var init_render2 = __esm({
1936
1956
  "panel.render.olderSessions": "\u66F4\u65E9\u7684 {count} \u4E2A\u4F1A\u8BDD",
1937
1957
  "panel.render.olderSessionsSource": "\u6765\u6E90:sessions.ended \u4E14 lastActivity \u65E9\u4E8E\u5F53\u524D\u65F6\u95F4 {days} \u5929;\u4EC5\u6298\u53E0\u663E\u793A",
1938
1958
  "panel.render.archiveSession": "\u5F52\u6863",
1959
+ "panel.render.archiveThisSession": "\u5F52\u6863\u6B64\u4F1A\u8BDD",
1939
1960
  "panel.render.restoreSession": "\u6062\u590D",
1940
1961
  "panel.render.archivedSessions": "\u5DF2\u5F52\u6863 {count} \u4E2A\u4F1A\u8BDD",
1941
1962
  "panel.render.sessionArchiveSource": "\u6765\u6E90:\u672C\u673A task-overlay.json \u4F1A\u8BDD / \u9879\u76EE archived;\u4E0D\u5220\u9664 harness \u6570\u636E",
@@ -2115,9 +2136,22 @@ var init_render2 = __esm({
2115
2136
  "panel.render.closeDialog": "\u5173\u95ED\u5F39\u7A97",
2116
2137
  "panel.render.dayFreeTrialUntil": "30 \u5929\u514D\u8D39\u8BD5\u7528\u81F3 {p0}",
2117
2138
  "panel.render.dayFreeTrialEnding": "30 \u5929\u514D\u8D39\u8BD5\u7528\u81F3 {p0} \xB7 \u5230\u671F\u540E\u8F6C\u4E3A\u514D\u8D39\u5C42(\u4E00\u4E2A\u5DE5\u5177)",
2118
- "panel.render.freeTierOneHarness": "\u514D\u8D39\u5C42\u53EA\u663E\u793A\u4E00\u4E2A\u5DE5\u5177",
2119
2139
  "panel.render.freeTierHarness": "\u514D\u8D39\u5C42\u5DE5\u5177",
2120
- "panel.render.freeTierLock": "\u514D\u8D39\u5C42\u53EA\u663E\u793A\u4E00\u4E2A\u5DE5\u5177;\u8BD5\u7528\u6216\u8BA2\u9605\u53EF\u770B\u5168\u90E8\u3002",
2140
+ "panel.render.freeTierBarLabel": "\u514D\u8D39\u5C42",
2141
+ "panel.render.freeTierBarChoose": "\u9009\u4E00\u4E2A\u5DE5\u5177,7 \u5929\u5185\u4E0D\u80FD\u66F4\u6362",
2142
+ "panel.render.freeTierBarCurrent": "\u5F53\u524D\u5DE5\u5177 {tool}",
2143
+ "panel.render.freeTierBarDay": "{days} \u5929\u540E\u53EF\u66F4\u6362",
2144
+ "panel.render.freeTierBarDays": "{days} \u5929\u540E\u53EF\u66F4\u6362",
2145
+ "panel.render.freeTierBarToday": "\u4ECA\u5929\u53EF\u66F4\u6362",
2146
+ "panel.render.freeTierBarChange": "\u66F4\u6362",
2147
+ "panel.render.freeTierBarSwitchableAt": "\u53EF\u66F4\u6362\u65F6\u95F4:{date}",
2148
+ "panel.render.freeTierModalTitle": "\u514D\u8D39\u5C42\u53EA\u663E\u793A\u4E00\u4E2A\u5DE5\u5177",
2149
+ "panel.render.freeTierModalBody": "\u4F60\u73B0\u5728\u770B\u7684\u662F {tool}\u3002\u8BD5\u7528\u6216\u8BA2\u9605\u540E,\u4E09\u5BB6\u5DE5\u5177\u548C\u8DE8\u5DE5\u5177\u7684\u9879\u76EE\u603B\u89C8\u4E00\u8D77\u6253\u5F00,\u914D\u7F6E\u5F00\u5173\u4E5F\u80FD\u5199\u5165\u3002",
2150
+ "panel.render.freeTierModalTrial": "\u5F00\u59CB 30 \u5929\u514D\u8D39\u8BD5\u7528",
2151
+ "panel.render.freeTierModalDismiss": "\u5148\u4E0D\u7528",
2152
+ "panel.render.freeTierModalExisting": "\u5DF2\u6709 license?",
2153
+ "panel.render.freeTierModalImport": "\u5BFC\u5165 license",
2154
+ "panel.render.freeTierModalRefresh": "\u5237\u65B0\u6388\u6743",
2121
2155
  "panel.render.dayFreeTrialActive": "30 \u5929\u514D\u8D39\u8BD5\u7528\u4E2D",
2122
2156
  "panel.render.freeTrialEndedRefreshOrSubscribe": "\u514D\u8D39\u8BD5\u7528\u5DF2\u7ED3\u675F \xB7 \u514D\u8D39\u5C42\u53EA\u663E\u793A\u4E00\u4E2A\u5DE5\u5177 \xB7 \u5237\u65B0\u6216\u8BA2\u9605",
2123
2157
  "panel.render.subscriptionExpiredInGracePeriodRenew": "\u8BA2\u9605\u5DF2\u5230\u671F,\u5BBD\u9650\u671F\u5185 \xB7 \u70B9\u6B64\u7EED\u671F",
@@ -2262,13 +2296,12 @@ var init_render2 = __esm({
2262
2296
  "panel.render.failureSuffix": " \xB7 \u5931\u8D25",
2263
2297
  "panel.render.sourceTranscriptHookToolEventOriginal": "\u6765\u6E90:transcript / hook tool event;\u539F\u59CB\u53C2\u6570:",
2264
2298
  "panel.render.noWingmanPlanMd": "\u6CA1\u6709 .wingman/plan.md",
2265
- "panel.render.loadingProjectData": "\u9879\u76EE\u8F7D\u8377\u8F7D\u5165\u4E2D",
2266
2299
  "panel.render.projectDataUnavailable": "\u9879\u76EE\u8F7D\u8377\u4E0D\u53EF\u7528",
2267
2300
  "panel.render.openProject": "\u6253\u5F00\u9879\u76EE",
2268
2301
  "panel.render.thisSessionAttachedTo": "\u672C\u4F1A\u8BDD:\u5F52\u5C5E",
2269
2302
  "panel.render.thisSessionUnattached": "\u672C\u4F1A\u8BDD:\u672A\u5173\u8054(",
2270
2303
  "panel.render.copyInstallCommand": "\u590D\u5236\u5B89\u88C5\u547D\u4EE4",
2271
- "panel.render.currentPointPrefix": "\u5F53\u524D\u70B9:",
2304
+ "panel.render.currentPointPrefix": "\u9879\u76EE\u5F53\u524D\u70B9:",
2272
2305
  "panel.render.markedCompleteByAgentNoThe": "Agent \u672A\u58F0\u660E\u5B8C\u6210(\u4E0A\u4E00\u6761\u6307\u4EE4\u7684\u8BA1\u5212\u5DF2\u5B8C\u6210,\u672C\u6761\u6307\u4EE4\u5C1A\u672A\u58F0\u660E\u8BA1\u5212)",
2273
2306
  "panel.render.agentCompletionStatus": "Agent \u672A\u58F0\u660E\u5B8C\u6210",
2274
2307
  "panel.render.agentStructuredPlanStepStatesTaskWorkflow": "Agent \u7ED3\u6784\u5316\u8BA1\u5212\u6B65\u9AA4\u72B6\u6001;taskWorkflow.plan.forInstruction",
@@ -2567,6 +2600,7 @@ var init_server2 = __esm({
2567
2600
  "cli.server.localeInvalid": "locale \u53EA\u63A5\u53D7\u5DF2\u6CE8\u518C\u8BED\u8A00\u6807\u7B7E",
2568
2601
  "cli.server.settingsInvalid": "\u8BBE\u7F6E\u53EA\u63A5\u53D7\u5DF2\u6CE8\u518C\u7684 locale\u3001\u5408\u6CD5\u7684 island \u4F4D\u7F6E\u4E0E\u5927\u5C0F\u6216\u5DF2\u77E5\u7684 freeHarness",
2569
2602
  "cli.server.freeHarnessNotDetected": "\u5C1A\u672A\u63A2\u6D4B\u5230\u8FD9\u4E2A\u5DE5\u5177\uFF0C\u4E0D\u80FD\u8BBE\u4E3A\u514D\u8D39\u5DE5\u5177\u3002",
2603
+ "cli.server.freeHarnessCooldown": "\u514D\u8D39\u5DE5\u5177\u9009\u5B9A\u540E 7 \u5929\u5185\u4E0D\u80FD\u66F4\u6362\uFF0C\u53EF\u4E8E {switchableAt} \u66F4\u6362\u3002",
2570
2604
  "cli.server.fixturesSettings": "fixtures \u6A21\u5F0F\u53EA\u8BFB:\u4E0D\u4FDD\u5B58\u8BED\u8A00\u8BBE\u7F6E",
2571
2605
  "cli.server.settingsHome": "\u8BED\u8A00\u8BBE\u7F6E\u7F3A\u5C11 homeDir"
2572
2606
  };
@@ -19628,7 +19662,7 @@ function resolveWingmanVersion({ defined, moduleUrl = import.meta.url, readPacka
19628
19662
  return void 0;
19629
19663
  }
19630
19664
  function wingmanVersion() {
19631
- const defined = false ? void 0 : "0.9.5";
19665
+ const defined = false ? void 0 : "0.9.6";
19632
19666
  return resolveWingmanVersion({
19633
19667
  defined,
19634
19668
  readPackage: (url) => JSON.parse(readFileSync17(url, "utf8"))
@@ -19639,6 +19673,7 @@ function wingmanVersion() {
19639
19673
  var MAX_SESSIONS = 8;
19640
19674
  var STARTUP_DISCOVERY_WINDOW_MS = 30 * 6e4;
19641
19675
  var ENDED_AFTER_STOP_MS = 10 * 6e4;
19676
+ var WAIT_OUTCOME_TTL_MS = 8e3;
19642
19677
  var DETAIL_LIMIT = 80;
19643
19678
  var QUOTE_LIMIT = 160;
19644
19679
  var ERROR_BRIEF_LIMIT = 60;
@@ -19775,6 +19810,30 @@ function createNarrativeService(options = {}) {
19775
19810
  if (session.subagentTimer !== void 0)
19776
19811
  clearInterval(session.subagentTimer);
19777
19812
  session.subagentTimer = void 0;
19813
+ clearWaitOutcome(session);
19814
+ }
19815
+ function clearWaitOutcome(session) {
19816
+ if (session.waitOutcomeTimer !== void 0)
19817
+ clearTimeout(session.waitOutcomeTimer);
19818
+ session.waitOutcomeTimer = void 0;
19819
+ session.waitOutcome = void 0;
19820
+ }
19821
+ function recordWaitOutcome(harness, session, waiting, outcome, source) {
19822
+ clearWaitOutcome(session);
19823
+ session.waitOutcome = {
19824
+ outcome,
19825
+ at: now().toISOString(),
19826
+ get message() {
19827
+ return waiting.message;
19828
+ },
19829
+ ...waiting.messageI18n === void 0 ? {} : { messageI18n: waiting.messageI18n },
19830
+ source
19831
+ };
19832
+ session.waitOutcomeTimer = setTimeout(() => {
19833
+ session.waitOutcomeTimer = void 0;
19834
+ session.dirty = true;
19835
+ notify(harness);
19836
+ }, WAIT_OUTCOME_TTL_MS);
19778
19837
  }
19779
19838
  function anchorCwd(harness, session, cwd) {
19780
19839
  if (session.cwd !== void 0 || cwd.trim() === "")
@@ -20136,9 +20195,11 @@ function createNarrativeService(options = {}) {
20136
20195
  if (closed || generation !== session.generation)
20137
20196
  return;
20138
20197
  let timestamp;
20198
+ let contentActivity = false;
20139
20199
  if (harness === "codex") {
20140
20200
  const parsed = parseCodexRolloutLine(line);
20141
20201
  session.codexLines.push(parsed);
20202
+ contentActivity = parsed.kind === "user" || parsed.kind === "assistant" || parsed.kind === "tool_call" || parsed.kind === "tool_result";
20142
20203
  if ((parsed.kind === "session_meta" && parsed.parentThreadId === void 0 || parsed.kind === "turn_context") && parsed.cwd !== void 0) {
20143
20204
  anchorCwd(harness, session, parsed.cwd);
20144
20205
  }
@@ -20147,14 +20208,30 @@ function createNarrativeService(options = {}) {
20147
20208
  } else {
20148
20209
  const parsed = parseTranscriptLine(line);
20149
20210
  session.lines.push(parsed);
20211
+ contentActivity = parsed.kind === "user" || parsed.kind === "assistant";
20150
20212
  if (parsed.kind !== "unknown")
20151
20213
  timestamp = parsed.timestamp;
20214
+ const waiting = session.waiting;
20215
+ if (harness === "cc" && path === session.transcriptPath && waiting?.kind === "permission" && parsed.kind === "user" && parsed.timestamp !== void 0 && Date.parse(parsed.timestamp) >= Date.parse(waiting.since) - 5e3 && (parsed.raw.toolDenialKind === void 0 || parsed.raw.toolDenialKind === "user-rejected") && parsed.toolResults.some((result5) => result5.isError && (waiting.toolUseId === void 0 || result5.toolUseId === waiting.toolUseId) && (parsed.raw.toolDenialKind === "user-rejected" || parsed.toolUseResult === "User rejected tool use" || parsed.raw.toolDenialKind === void 0 && typeof result5.content === "string" && result5.content.startsWith("The user doesn't want to proceed with this tool use")))) {
20216
+ session.waitEpisodes.push({
20217
+ ...waiting,
20218
+ get message() {
20219
+ return waiting.message;
20220
+ },
20221
+ until: parsed.timestamp,
20222
+ resolvedBy: "transcript:user-rejected"
20223
+ });
20224
+ session.waiting = null;
20225
+ session.waitingToolName = void 0;
20226
+ session.feedbackState = void 0;
20227
+ recordWaitOutcome(harness, session, waiting, "denied", "cc transcript tool_result(user-rejected)");
20228
+ }
20152
20229
  }
20153
20230
  if (session.discoveredAt !== void 0 && path === session.transcriptPath && timestamp !== void 0) {
20154
20231
  session.lastActivity = timestamp;
20155
20232
  }
20156
20233
  const endedAt = session.endedAt ?? session.stopAt;
20157
- if (timestamp !== void 0 && endedAt !== void 0 && Date.parse(timestamp) > Date.parse(endedAt)) {
20234
+ if (contentActivity && timestamp !== void 0 && endedAt !== void 0 && Date.parse(timestamp) > Date.parse(endedAt)) {
20158
20235
  session.endedAt = void 0;
20159
20236
  session.stopAt = void 0;
20160
20237
  }
@@ -20245,7 +20322,9 @@ function createNarrativeService(options = {}) {
20245
20322
  session.pendingHookTool = {
20246
20323
  toolName: payload.tool_name,
20247
20324
  detail: hookToolDetail(payload.tool_input),
20248
- since: event.received_at
20325
+ since: event.received_at,
20326
+ ...event.harness === "cc" && typeof payload.tool_use_id === "string" ? { toolUseId: payload.tool_use_id } : {},
20327
+ ...event.harness === "cc" ? { toolInput: payload.tool_input } : {}
20249
20328
  };
20250
20329
  } else if (name === "PostToolUse" && typeof payload.tool_name === "string" || name === "Stop" || name === "SessionEnd") {
20251
20330
  session.pendingHookTool = void 0;
@@ -20253,24 +20332,33 @@ function createNarrativeService(options = {}) {
20253
20332
  const signal = waitingSignal(payload);
20254
20333
  if (signal !== null) {
20255
20334
  const { kind } = signal;
20335
+ const toolUseId = event.harness === "cc" && name === "PermissionRequest" && session.pendingHookTool !== void 0 && session.pendingHookTool.toolName === payload.tool_name && JSON.stringify(session.pendingHookTool.toolInput) === JSON.stringify(payload.tool_input) ? session.pendingHookTool.toolUseId : void 0;
20256
20336
  session.feedbackRequestAt = event.received_at;
20257
20337
  if (session.waiting === null) {
20338
+ clearWaitOutcome(session);
20339
+ session.waitingToolName = event.harness === "cc" && typeof payload.tool_name === "string" ? payload.tool_name : void 0;
20258
20340
  session.waiting = {
20259
20341
  kind,
20260
20342
  get message() {
20261
20343
  return signal.message;
20262
20344
  },
20263
20345
  ...signal.messageI18n === void 0 ? {} : { messageI18n: signal.messageI18n },
20264
- since: event.received_at
20346
+ since: event.received_at,
20347
+ ...toolUseId === void 0 ? {} : { toolUseId }
20265
20348
  };
20266
20349
  } else if (kind === "permission" || session.waiting.kind === kind) {
20350
+ const retainedToolUseId = toolUseId ?? session.waiting.toolUseId;
20351
+ if (event.harness === "cc" && typeof payload.tool_name === "string") {
20352
+ session.waitingToolName = payload.tool_name;
20353
+ }
20267
20354
  session.waiting = {
20268
20355
  kind,
20269
20356
  get message() {
20270
20357
  return signal.message;
20271
20358
  },
20272
20359
  ...signal.messageI18n === void 0 ? {} : { messageI18n: signal.messageI18n },
20273
- since: session.waiting.since
20360
+ since: session.waiting.since,
20361
+ ...retainedToolUseId === void 0 ? {} : { toolUseId: retainedToolUseId }
20274
20362
  };
20275
20363
  }
20276
20364
  session.feedbackState = {
@@ -20281,7 +20369,8 @@ function createNarrativeService(options = {}) {
20281
20369
  return signal.message;
20282
20370
  }
20283
20371
  };
20284
- } else {
20372
+ } else if (!(event.harness === "cc" && session.waiting?.toolUseId !== void 0 && (name === "PreToolUse" || name === "PostToolUse") && payload.tool_use_id !== session.waiting.toolUseId)) {
20373
+ const allowed = event.harness === "cc" && session.waiting?.kind === "permission" && name === "PostToolUse" && (session.waiting.toolUseId !== void 0 ? payload.tool_use_id === session.waiting.toolUseId : session.waitingToolName !== void 0 && payload.tool_name === session.waitingToolName);
20285
20374
  if (session.waiting !== null) {
20286
20375
  const waiting = session.waiting;
20287
20376
  session.waitEpisodes.push({
@@ -20294,9 +20383,13 @@ function createNarrativeService(options = {}) {
20294
20383
  ...session.feedbackRequestAt === void 0 ? {} : { requestAt: session.feedbackRequestAt }
20295
20384
  });
20296
20385
  session.waiting = null;
20386
+ session.waitingToolName = void 0;
20387
+ if (allowed) {
20388
+ recordWaitOutcome(event.harness, session, waiting, "allowed", `cc PostToolUse tool_use_id=${typeof payload.tool_use_id === "string" ? payload.tool_use_id : "none"}`);
20389
+ }
20297
20390
  }
20298
20391
  const resetFeedback = name === "UserPromptSubmit" || name === "Stop" || name === "SessionEnd";
20299
- if (resetFeedback) {
20392
+ if (allowed || resetFeedback) {
20300
20393
  session.feedbackState = void 0;
20301
20394
  } else if (session.feedbackState?.state === "needs_user") {
20302
20395
  const previous = session.feedbackState;
@@ -20412,6 +20505,7 @@ function createNarrativeService(options = {}) {
20412
20505
  const infos = [...sessions.values()].map((session) => {
20413
20506
  const user = overlayEntries[`${harness}:${session.id}`];
20414
20507
  const lastActivity = lastActivityOf(session);
20508
+ const lastInstruction = session.hookInstructions.at(-1)?.at;
20415
20509
  const state = deriveCached(harness, session, configuredPlugins, configuredMcpServers);
20416
20510
  const ended = isEnded(session, nowIso);
20417
20511
  const turnEnded = session.stopAt !== void 0 && !ended && state.waiting === null && feedbackView(harness, feedback, humanFeedbackState(harness, session)).state !== "needs_user";
@@ -20422,9 +20516,18 @@ function createNarrativeService(options = {}) {
20422
20516
  label: session.projectResolution?.isHome ? t("narrative.homeDirectory") : session.label ?? shortSessionId(session.id),
20423
20517
  ...session.cwd === void 0 ? {} : { cwd: session.cwd },
20424
20518
  lastActivity,
20519
+ ...lastInstruction === void 0 ? {} : { lastInstruction },
20425
20520
  waiting: state.waiting !== null,
20426
20521
  ended,
20427
20522
  ...turnEnded ? { turnEnded: true } : {},
20523
+ ...state.waiting === null && session.waitOutcome !== void 0 && Date.parse(nowIso) - Date.parse(session.waitOutcome.at) < WAIT_OUTCOME_TTL_MS ? {
20524
+ waitOutcome: {
20525
+ outcome: session.waitOutcome.outcome,
20526
+ at: session.waitOutcome.at,
20527
+ message: session.waitOutcome.message,
20528
+ source: session.waitOutcome.source
20529
+ }
20530
+ } : {},
20428
20531
  archived: user?.archived === true,
20429
20532
  archivedHasNewActivity: user?.archived === true && user.archivedAt !== void 0 && Date.parse(lastActivity) > Date.parse(user.archivedAt),
20430
20533
  ...feedback === void 0 ? {} : { feedback }
@@ -20649,6 +20752,7 @@ function createNarrativeService(options = {}) {
20649
20752
  label,
20650
20753
  ended: info?.ended ?? false,
20651
20754
  ...info?.turnEnded === true ? { turnEnded: true } : {},
20755
+ ...info?.waitOutcome === void 0 ? {} : { waitOutcome: info.waitOutcome },
20652
20756
  ...state?.origin === void 0 ? {} : { origin: state.origin },
20653
20757
  ...state?.skillsUsed === void 0 ? {} : { skillsUsed: state.skillsUsed },
20654
20758
  title: attachedTitle !== void 0 ? { text: attachedTitle, source: "plan.md \u6B65\u9AA4" } : planInstruction !== void 0 ? { text: truncate(planInstruction, DETAIL_LIMIT), source: "\u8BA1\u5212\u6240\u5C5E\u6307\u4EE4" } : instructionTitle !== void 0 ? { text: truncate(instructionTitle, DETAIL_LIMIT), source: "\u6700\u65B0\u6307\u4EE4" } : { text: label, source: "\u5DE5\u4F5C\u76EE\u5F55" },
@@ -22215,9 +22319,13 @@ init_dist();
22215
22319
  import { randomBytes as randomBytes4 } from "node:crypto";
22216
22320
  import { closeSync as closeSync3, copyFileSync as copyFileSync3, mkdirSync as mkdirSync12, openSync as openSync3, readFileSync as readFileSync18, renameSync as renameSync5, rmSync as rmSync10, statSync as statSync9, writeFileSync as writeFileSync13 } from "node:fs";
22217
22321
  import { dirname as dirname18, join as join29, resolve as resolve13 } from "node:path";
22322
+ var FREE_HARNESS_SWITCH_COOLDOWN_MS = 7 * 24 * 60 * 60 * 1e3;
22218
22323
  function isHarnessId3(value) {
22219
22324
  return typeof value === "string" && HARNESS_IDS.includes(value);
22220
22325
  }
22326
+ function isIsoTimestamp(value) {
22327
+ return typeof value === "string" && Number.isFinite(Date.parse(value)) && new Date(value).toISOString() === value;
22328
+ }
22221
22329
  function isIslandSetting(value) {
22222
22330
  return isRecord8(value) && Object.keys(value).every((key) => ["edge", "offset", "screen", "size"].includes(key)) && ["top", "bottom", "left", "right"].includes(value.edge) && typeof value.offset === "number" && Number.isFinite(value.offset) && value.offset >= 0 && value.offset <= 1 && (value.screen === void 0 || typeof value.screen === "string") && (value.size === "compact" || value.size === "standard");
22223
22331
  }
@@ -22279,6 +22387,9 @@ function saveSettings(homeDir, patch) {
22279
22387
  if (patch.freeHarness !== void 0 && !isHarnessId3(patch.freeHarness)) {
22280
22388
  return { unavailable: t("cli.server.settingsInvalid") };
22281
22389
  }
22390
+ if (patch.freeHarnessChosenAt !== void 0 && !isIsoTimestamp(patch.freeHarnessChosenAt)) {
22391
+ return { unavailable: t("cli.server.settingsInvalid") };
22392
+ }
22282
22393
  const current = readReturnTargetSettings(homeDir);
22283
22394
  if ("unavailable" in current)
22284
22395
  return current;
@@ -22317,10 +22428,17 @@ function saveSettings(homeDir, patch) {
22317
22428
  }
22318
22429
  }
22319
22430
  function isSettings(value) {
22320
- if (!isRecord8(value) || value.version !== 1 || !Object.keys(value).every((key) => ["version", "returnTarget", "locale", "island", "freeHarness"].includes(key))) {
22431
+ if (!isRecord8(value) || value.version !== 1 || !Object.keys(value).every((key) => [
22432
+ "version",
22433
+ "returnTarget",
22434
+ "locale",
22435
+ "island",
22436
+ "freeHarness",
22437
+ "freeHarnessChosenAt"
22438
+ ].includes(key))) {
22321
22439
  return false;
22322
22440
  }
22323
- return (value.island === void 0 || isIslandSetting(value.island)) && (value.freeHarness === void 0 || isHarnessId3(value.freeHarness)) && (value.returnTarget === void 0 || isRecord8(value.returnTarget) && Object.keys(value.returnTarget).every((key) => key === "bundlePath") && typeof value.returnTarget.bundlePath === "string" && value.returnTarget.bundlePath.startsWith("/"));
22441
+ return (value.island === void 0 || isIslandSetting(value.island)) && (value.freeHarness === void 0 || isHarnessId3(value.freeHarness)) && (value.freeHarnessChosenAt === void 0 || isIsoTimestamp(value.freeHarnessChosenAt)) && (value.returnTarget === void 0 || isRecord8(value.returnTarget) && Object.keys(value.returnTarget).every((key) => key === "bundlePath") && typeof value.returnTarget.bundlePath === "string" && value.returnTarget.bundlePath.startsWith("/"));
22324
22442
  }
22325
22443
  function isRecord8(value) {
22326
22444
  return typeof value === "object" && value !== null && !Array.isArray(value);
@@ -22755,6 +22873,9 @@ async function handle(req, res, options, warn, runtime) {
22755
22873
  const settings = homeDir === void 0 ? void 0 : readReturnTargetSettings(homeDir);
22756
22874
  const selected = settings && !("unavailable" in settings) ? settings.freeHarness : void 0;
22757
22875
  body.freeHarness = selected !== void 0 && (cached === void 0 || detected.has(selected)) ? selected : HARNESS_IDS.find((harness) => detected.has(harness)) ?? HARNESS_IDS[0];
22876
+ if (settings && !("unavailable" in settings) && settings.freeHarnessChosenAt !== void 0) {
22877
+ body.freeHarnessSwitchableAt = new Date(Date.parse(settings.freeHarnessChosenAt) + FREE_HARNESS_SWITCH_COOLDOWN_MS).toISOString();
22878
+ }
22758
22879
  }
22759
22880
  sendJson2(res, 200, body);
22760
22881
  return;
@@ -23077,14 +23198,41 @@ async function handleSettings(req, res, options, runtime) {
23077
23198
  sendJson2(res, 400, { error: t("cli.server.freeHarnessNotDetected") });
23078
23199
  return;
23079
23200
  }
23080
- const result5 = saveSettings(options.homeDir, {
23201
+ let freeHarnessChosenAt;
23202
+ if (isHarnessId4(body.freeHarness)) {
23203
+ const settings2 = readReturnTargetSettings(options.homeDir);
23204
+ if ("unavailable" in settings2) {
23205
+ sendJson2(res, 409, { error: settings2.unavailable });
23206
+ return;
23207
+ }
23208
+ const now = options.now?.() ?? options.licenseOptions?.now ?? /* @__PURE__ */ new Date();
23209
+ const freeHarnessUnchanged = settings2.freeHarness === body.freeHarness && settings2.freeHarnessChosenAt !== void 0;
23210
+ if (settings2.freeHarnessChosenAt !== void 0 && !freeHarnessUnchanged) {
23211
+ const switchableAt = new Date(Date.parse(settings2.freeHarnessChosenAt) + FREE_HARNESS_SWITCH_COOLDOWN_MS);
23212
+ if (now.getTime() < switchableAt.getTime()) {
23213
+ sendJson2(res, 409, {
23214
+ error: t("cli.server.freeHarnessCooldown", {
23215
+ switchableAt: `${switchableAt.getFullYear()}-${String(switchableAt.getMonth() + 1).padStart(2, "0")}-${String(switchableAt.getDate()).padStart(2, "0")}`
23216
+ }),
23217
+ switchableAt: switchableAt.toISOString()
23218
+ });
23219
+ return;
23220
+ }
23221
+ }
23222
+ if (!freeHarnessUnchanged)
23223
+ freeHarnessChosenAt = now.toISOString();
23224
+ }
23225
+ const patch = {
23081
23226
  ...body.locale === void 0 ? {} : { locale: body.locale },
23082
23227
  ...isIslandSetting(body.island) ? { island: body.island } : {},
23083
- ...isHarnessId4(body.freeHarness) ? { freeHarness: body.freeHarness } : {}
23084
- });
23085
- if ("unavailable" in result5) {
23086
- sendJson2(res, 409, { error: result5.unavailable });
23087
- return;
23228
+ ...isHarnessId4(body.freeHarness) && freeHarnessChosenAt !== void 0 ? { freeHarness: body.freeHarness, freeHarnessChosenAt } : {}
23229
+ };
23230
+ if (Object.keys(patch).length > 0) {
23231
+ const result5 = saveSettings(options.homeDir, patch);
23232
+ if ("unavailable" in result5) {
23233
+ sendJson2(res, 409, { error: result5.unavailable });
23234
+ return;
23235
+ }
23088
23236
  }
23089
23237
  if (body.locale !== void 0) {
23090
23238
  setLocale(body.locale);
@@ -0,0 +1 @@
1
+ :root{color-scheme:dark;--page: #0d0d0d;--surface: #1a1a19;--pill: #050505;--ink: #ffffff;--ink2: #c3c2b7;--muted: #898781;--hairline: rgba(255, 255, 255, .1);--grid: #2c2c2a;--s1: #3987e5;--s2: #d95926;--s3: #199e70;--s4: #c98500;--s5: #d55181;--warn: #fab219;--bad: #e5534b;--fs-1: 18px;--fs-2: 14px;--fs-3: 12px}*{box-sizing:border-box;margin:0;padding:0}body{background:var(--page);color:var(--ink);font-family:system-ui,-apple-system,Segoe UI,PingFang SC,Microsoft YaHei,sans-serif;min-height:100vh;display:flex;flex-direction:column;align-items:center;padding:28px 16px 48px}.wrap{display:flex;width:100%;max-width:100%;min-width:0;flex-direction:column;align-items:center}.pill{display:flex;max-width:min(100%,640px);min-width:0;align-items:center;gap:10px;background:var(--pill);border:1px solid var(--hairline);border-radius:999px;padding:10px 18px;cursor:pointer;-webkit-user-select:none;user-select:none;box-shadow:0 8px 30px #0000008c;transition:transform .15s ease}.pill:hover{transform:scale(1.03)}.dot{width:8px;height:8px;border-radius:50%;background:var(--s1);animation:pulse 1.6s infinite;flex:none}@keyframes pulse{0%,to{opacity:1}50%{opacity:.35}}.dot.quiet{animation:none;background:var(--muted);opacity:.6}.dot.live{background:var(--s3);box-shadow:0 0 8px #199e70cc}.pill .t1{font-size:13px;font-weight:600;flex:none}.pill .t2{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px;color:var(--ink2)}.pill .chev{color:var(--muted);font-size:11px;flex:none}.dot.wait{background:var(--warn);box-shadow:0 0 8px #fab219cc;animation:pulse 1.2s infinite}.pill.waiting{border-color:#fab2198c}.pill.waiting .t2{color:var(--warn)}.panel{display:none;width:min(700px,94vw);background:var(--surface);border:1px solid var(--hairline);border-radius:20px;padding:20px 22px 16px;box-shadow:0 18px 60px #0009;transform-origin:top center}.open .panel{display:block;animation:drop .22s ease}.open .pill{display:none}.panel-region{display:contents}@keyframes drop{0%{opacity:0;transform:scale(.92) translateY(-8px)}to{opacity:1;transform:none}}.head{display:flex;align-items:center;gap:10px;margin-bottom:12px;flex-wrap:wrap}.head .title{font-size:15px;font-weight:700}.head .meta{font-size:12px;color:var(--muted)}.badge{font-size:10px;letter-spacing:.1em;color:var(--warn);border:1px solid var(--warn);border-radius:4px;padding:2px 6px}.collapse{margin-left:auto;background:none;border:1px solid var(--hairline);color:var(--ink2);border-radius:8px;padding:4px 10px;font-size:12px;cursor:pointer}.collapse:hover{border-color:var(--muted)}.tabs{display:flex;gap:4px;background:var(--pill);border:1px solid var(--hairline);border-radius:10px;padding:3px;width:max-content;margin-bottom:6px}.tab{border:none;background:none;color:var(--muted);font-size:12.5px;padding:5px 14px;border-radius:8px;cursor:pointer;font-family:inherit}.tab.act{background:var(--surface);color:var(--ink);font-weight:600;border:1px solid var(--hairline)}.tab.locked{color:var(--muted)}.tab-lock{display:inline-block;position:relative;width:7px;height:6px;margin-left:6px;border:1px solid currentColor;border-radius:2px}.tab-lock:before{content:"";position:absolute;left:1px;top:-4px;width:3px;height:4px;border:1px solid currentColor;border-radius:4px 4px 0 0}.now{background:var(--pill);border:1px solid var(--hairline);border-radius:12px;padding:10px 14px;margin:8px 0 10px}.now .ntask{font-size:14px;font-weight:700;display:flex;align-items:center;gap:8px}.now .ntask .muted{color:var(--muted);font-weight:400}.now .ndoing{font-size:12px;color:var(--ink2);margin-top:5px}.now .ndoing b{color:var(--ink);font-weight:600}.now .nquote{font-size:11.5px;color:var(--muted);margin-top:5px;line-height:1.6}.now .nwait{font-size:12px;color:var(--warn);border:1px solid rgba(250,178,25,.55);border-radius:8px;padding:5px 9px;margin-bottom:8px;animation:pulse 1.2s infinite}.taskflow{margin:8px 0 10px;font-size:var(--fs-2);line-height:1.55}.box{background:var(--pill);border:1px solid var(--hairline);border-radius:12px;padding:12px}.box+.box,.ask-line+.box,.fold{margin-top:16px}.box>*+*{margin-top:8px}.ask-box.active{border-color:var(--warn);color:var(--warn)}.ask-text{font-size:var(--fs-2);font-weight:650}.ask-meta{display:flex;align-items:center;flex-wrap:wrap;gap:6px 8px;font-size:var(--fs-3)}.ask-generic{font-size:var(--fs-3)}.ask-meta button{margin-left:auto;border:1px solid currentColor;border-radius:8px;background:transparent;color:inherit;cursor:pointer;font:inherit;padding:4px 8px}.ask-line{display:flex;align-items:baseline;gap:8px;color:var(--muted);font-size:var(--fs-3)}.wfheading{display:flex;align-items:baseline;gap:12px}.wfheading :where(.wftitle){flex:1;min-width:0}.wfheading :where(.task-status){flex-shrink:0}.wftitle{font-size:var(--fs-1);font-weight:650}.wfgoal,.wflead{display:flex;align-items:baseline;gap:8px;color:var(--ink2)}.wfsteps[data-expanded=false]{max-height:3.1em;-webkit-line-clamp:unset}.wfsteps[data-expanded=true]{max-height:none}.wflabel{display:inline-block;margin-right:8px;color:var(--muted);font-size:var(--fs-3);flex:none}.wfsource{color:var(--muted);font-size:var(--fs-3)}.wfsteps{margin-top:5px}.wfstep{display:flex;gap:7px;align-items:baseline}.wfstep.completed{color:var(--muted)}.wfstep.in_progress{font-weight:600}.wfrecent{display:flex;flex-wrap:wrap;gap:4px 8px}.wfrecent-step{color:var(--ink2)}.wfproject,.wfproject-details{display:flex;align-items:baseline;flex-wrap:wrap;gap:4px 6px;color:var(--ink2)}.wfcurrent{display:flex;align-items:baseline;min-width:0;gap:6px}.wfproject-node{padding:1px 7px}.wfproject-link{border:1px solid var(--hairline);border-radius:999px;background:transparent;color:var(--ink2);cursor:pointer;font:inherit;font-size:var(--fs-3);padding:2px 8px}.wfverify{display:flex;align-items:center;flex-wrap:wrap;gap:6px;color:var(--ink2)}.wfverify-sep{color:var(--muted)}.wfverify-action{border:1px solid var(--hairline);border-radius:999px;background:transparent;color:var(--ink2);cursor:pointer;font:inherit;font-size:var(--fs-3);padding:2px 8px}.wfverify-error{margin-top:5px}.fold>summary{display:flex;align-items:baseline;gap:8px;cursor:pointer;list-style:none}.fold>summary::-webkit-details-marker{display:none}.fold>summary:before{content:"▸";color:var(--muted);font-size:var(--fs-3);flex:none}.fold[open]>summary:before{content:"▾"}.fold>summary .wflabel{min-width:5em;margin-right:0}.fold-summary{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ink2);font-size:var(--fs-2)}.fold-body{margin-top:8px;padding:8px 12px;border-left:1px solid var(--hairline);color:var(--ink2);overflow-wrap:anywhere}.protocol-foot{margin-top:16px;color:var(--muted);font-size:var(--fs-3)}.protocol-foot button{margin-left:8px;border:0;padding:0;background:transparent;color:inherit;font:inherit;text-decoration:underline;cursor:pointer}.evidencegroup+.evidencegroup{margin-top:6px}.vtabs{display:flex;gap:22px;border-bottom:1px solid var(--grid);margin-bottom:4px}.vtab{background:none;border:none;font-family:inherit;font-size:13px;color:var(--muted);padding:8px 2px;cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px}.vtab.act{color:var(--ink);font-weight:700;border-bottom-color:var(--s1)}.vtab .vcnt{font-size:11px;color:var(--muted);font-weight:400;font-variant-numeric:tabular-nums}.pane{display:none}.pane.act{display:block}.td{padding:8px 0;border-top:1px dashed var(--grid);font-size:13px}.td:first-child{border-top:none}.tdr{display:flex;align-items:center;gap:9px}.tdr[data-act]{cursor:pointer}.mk{width:16px;flex:none;text-align:center;font-size:12px;color:var(--s3)}.mk.doing{color:var(--s1)}.td .tdc{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.td.done .tdr{color:var(--muted)}.td.done .tdc{text-decoration:line-through}.td.todo .tdr{color:var(--muted)}.td .tdc b{font-weight:700}.ag{font-size:10px;color:var(--s1);border:1px solid rgba(57,135,229,.5);border-radius:999px;padding:0 8px;flex:none}.loc{margin-left:auto;flex:none;font-size:10.5px;font-family:inherit;color:var(--ink2);background:none;border:1px solid var(--grid);border-radius:7px;padding:2px 8px;cursor:pointer}.loc:hover{border-color:var(--muted)}.trace{margin:8px 0 2px 24px;border-left:2px solid var(--grid);padding-left:14px}.tr{display:flex;align-items:center;gap:8px;padding:5px 0;font-size:12px;color:var(--ink2);cursor:pointer}.tr .ic{width:8px;height:8px;border-radius:50%;background:var(--s3);flex:none;margin-left:-19px;border:2px solid var(--surface)}.tr.bad .ic{background:var(--bad)}.tr.run .ic{background:var(--s1)}.tr .trlabel{flex:none}.tr .dur,.trs .dur{margin-left:auto;color:var(--muted);font-size:10.5px;font-variant-numeric:tabular-nums;flex:none;white-space:nowrap}.failchip{font-size:10px;color:var(--bad);border:1px solid var(--bad);border-radius:999px;padding:0 7px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.steps{margin-left:6px;padding:2px 0 4px}.trs{display:flex;align-items:center;gap:8px;padding:3px 0;font-size:11.5px;color:var(--muted)}.trs .cmd{font-family:ui-monospace,SF Mono,Menlo,Consolas,monospace;font-size:11px;color:var(--ink2);flex:none}.trs .sdetail{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.trs.bad .cmd{color:var(--bad)}.rawsec .rawhead{background:none;border:none;font-family:inherit;font-size:11px;letter-spacing:.14em;color:var(--muted);padding:0;cursor:pointer}.rawsec .rawhead:hover{color:var(--ink2)}.rawsec .rawbody{display:none}.rawsec .rawbody.open{display:block;margin-top:8px}.ubox{max-height:220px;overflow-y:auto;border:1px solid var(--grid);border-radius:8px;padding:2px 10px}.urow{display:flex;align-items:center;gap:8px;padding:5px 0;font-size:11.5px;border-top:1px dashed var(--grid);color:var(--ink2)}.urow:first-child{border-top:none}.urow .utime{color:var(--muted);font-size:10.5px;font-variant-numeric:tabular-nums;flex:none}.urow .unums{color:var(--muted);font-variant-numeric:tabular-nums;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.urow .utot{margin-left:auto;color:var(--ink);font-variant-numeric:tabular-nums;flex:none}.urow .ucost{color:var(--s3);font-variant-numeric:tabular-nums;flex:none}.sessions-empty,.session-notice{margin-top:8px;padding:7px 10px;border:1px solid var(--grid);border-radius:6px;color:var(--ink2);font-size:11px}.session-notice{display:flex;gap:8px;cursor:pointer}.session-notice-close{margin-left:auto;color:var(--ink3)}.session-chip-group{margin-top:8px}.old-sessions{margin:6px 0}.schips{display:flex;flex-wrap:wrap;gap:6px;padding:8px 0 2px}.session-chip{position:relative;display:inline-flex;min-width:0;max-width:100%}.session-chip-archive{position:absolute;right:1px;top:50%;transform:translateY(-50%);width:20pt;height:20pt;border:0;border-radius:50%;background:none;color:var(--ink2);font:inherit;font-size:16px;cursor:pointer;opacity:0;pointer-events:none}.session-chip:hover .session-chip-archive,.session-chip:focus-within .session-chip-archive{opacity:1;pointer-events:auto}.session-chip-archive:hover{color:var(--ink)}.schip{display:inline-flex;align-items:center;gap:5px;min-width:0;max-width:100%;background:none;border:1px solid var(--grid);border-radius:999px;padding:2px calc(20pt + 2px) 2px 10px;font-family:inherit;font-size:11px;color:var(--ink2);cursor:pointer}.schip:hover,.session-chip:hover .schip{border-color:var(--ink2)}.schip.act{color:var(--ink);border-color:var(--ink2);font-weight:600}.schip.ended{opacity:.55}.schip .sdot{width:6px;height:6px;border-radius:50%;background:var(--s1);flex:none}.schip .sdot.wait{background:var(--warn);animation:pulse 1.2s infinite}@keyframes chip-breathe{0%,to{border-color:var(--grid)}50%{border-color:var(--s1)}}.schip.fresh{animation:chip-breathe 2.5s ease-in-out infinite}@media(prefers-reduced-motion:reduce){.schip.fresh{animation:none;border-color:var(--s1)}}.session-chip-title{min-width:4em;max-width:18em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.wftitle.has-session-origin,.session-title-with-origin{display:flex;align-items:baseline;gap:6px;min-width:0}.chip.session-origin{font-size:11px;font-weight:400;line-height:1.4;color:var(--muted);border:1px solid var(--hairline);border-radius:4px;padding:1px 5px;flex:0 1 auto;min-width:0;max-width:16em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.feedbacksignal{margin:8px 0 2px;border:1px solid rgba(250,178,25,.4);border-radius:8px;padding:5px 9px;color:var(--warn);font-size:12px}.suggslot:empty{display:none}.suggslot{border-top:1px solid var(--grid);padding:8px 0 2px}.sugg{display:flex;align-items:center;gap:8px;padding:5px 0;font-size:12px;color:var(--ink2)}.sugg .sugtext{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sugg.r-waiting-timeout .sugtext{color:var(--warn)}.sugg .sugbtn,.sugg .sugdismiss{background:none;border:1px solid var(--grid);border-radius:6px;padding:1px 8px;font-family:inherit;font-size:11px;color:var(--ink2);cursor:pointer;flex:none}.sugg .sugbtn{color:var(--ink);border-color:var(--ink2);margin-left:auto}.sugg .sugbtn:hover{background:var(--grid)}.sugg .sugdismiss{color:var(--muted)}.sugg .sugbtn+.sugdismiss{margin-left:0}.sugg .sugdismiss:only-of-type{margin-left:auto}.sugg .sugdismiss:hover{color:var(--ink2)}.tr.waitrow{cursor:default}.tr.waitrow .trlabel{color:var(--warn)}.sec{border-top:1px solid var(--grid);padding:13px 0}.sec.first{border-top:none;padding-top:2px}.sec .label{font-size:11px;letter-spacing:.14em;color:var(--muted);margin-bottom:8px;display:flex;align-items:center;gap:8px}.tier{font-size:10px;letter-spacing:0;color:var(--ink2);border:1px solid var(--grid);border-radius:999px;padding:1px 8px;font-weight:400}.sec .headline{font-size:13px;color:var(--ink2);margin-bottom:10px}.sec .headline b{color:var(--ink);font-weight:700}.stack{display:flex;height:16px;margin-bottom:10px}.seg{margin-right:2px;cursor:default}.seg:last-child{margin-right:0}.seg:first-child{border-radius:4px 0 0 4px}.seg:last-child{border-radius:0 4px 4px 0}.seg:hover{filter:brightness(1.18)}.legend{display:grid;grid-template-columns:1fr 1fr;gap:5px 18px}@media(max-width:560px){.legend{grid-template-columns:1fr}}.lrow{display:flex;align-items:center;gap:7px;font-size:12.5px;color:var(--ink2);min-width:0}.sw{width:10px;height:10px;border-radius:3px;flex:none}.lrow .nat,.gtitle .nat{font-size:10.5px;color:var(--muted);border:1px solid var(--grid);border-radius:4px;padding:0 5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.lrow .v{margin-left:auto;color:var(--ink);font-variant-numeric:tabular-nums;flex:none}.lrow .cnt{color:var(--muted);font-size:10.5px;flex:none}.lrow.na,.lrow.na .v{color:var(--muted)}.grp{margin-bottom:10px}.grp:last-child{margin-bottom:0}.gtitle{font-size:11.5px;color:var(--muted);margin-bottom:4px;display:flex;align-items:center;gap:7px}.gdot{width:8px;height:8px;border-radius:2px;flex:none}.crow{display:flex;align-items:center;gap:10px;padding:6px 0;font-size:12.5px;border-top:1px dashed var(--grid)}.cname{color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.offrow .cname{color:var(--muted)}.chip{font-size:10px;color:var(--muted);border:1px solid var(--grid);border-radius:999px;padding:1px 7px;flex:none}.statechip{font-size:10px;border-radius:999px;padding:1px 7px;flex:none}.statechip.off{color:var(--warn);border:1px solid var(--warn)}.statechip.invocation:not(.off){color:var(--s3);border:1px solid var(--grid)}.statechip.nofile{color:var(--muted);border:1px dashed var(--grid)}.ctok{margin-left:auto;color:var(--muted);font-size:11.5px;font-variant-numeric:tabular-nums;flex:none}.crow.emptyrow{color:var(--muted);font-size:12px}.livenone{font-size:12.5px;color:var(--muted);border:1px dashed var(--grid);border-radius:8px;padding:10px 12px;margin-bottom:8px;line-height:1.7}.livenone:last-child{margin-bottom:0}.livenone code{color:var(--ink2);background:var(--pill);border:1px solid var(--grid);border-radius:4px;padding:1px 5px}.tier.none{color:var(--muted);border-style:dashed}.conn{font-size:10px;letter-spacing:0;font-weight:400;border-radius:999px;padding:1px 8px;border:1px solid var(--grid);color:var(--muted)}.conn.open{color:var(--s3);border-color:var(--s3)}.conn.retrying{color:var(--warn);border-color:var(--warn)}.conn.replay{color:var(--warn);border-style:dashed}.demobtn{margin-left:auto;background:none;border:1px dashed var(--warn);color:var(--warn);border-radius:6px;padding:2px 8px;font-size:10.5px;letter-spacing:0;cursor:pointer;font-family:inherit}.demobtn:hover:not(:disabled){border-style:solid}.demobtn:disabled{opacity:.5;cursor:default}.feed{max-height:240px;overflow-y:auto;border:1px solid var(--grid);border-radius:8px;padding:2px 10px}.lvrow{display:flex;align-items:center;gap:8px;padding:5px 0;font-size:12px;border-top:1px dashed var(--grid)}.lvrow:first-child{border-top:none}.lvtime{color:var(--muted);font-size:11px;font-variant-numeric:tabular-nums;flex:none}.lvname{color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.lvrow.own .lvname{font-weight:600}.lvrow.other{opacity:.45}.lvharness{margin-left:auto;font-size:10px;color:var(--muted);border:1px solid var(--grid);border-radius:4px;padding:0 5px;flex:none}.lvrow.own .lvharness{color:var(--ink2);border-color:var(--hairline)}.mockchip{font-size:9px;letter-spacing:.08em;color:var(--warn);border:1px solid var(--warn);border-radius:4px;padding:0 4px;flex:none}.labr{margin-left:auto;display:flex;align-items:center;gap:8px}.sharelink{background:none;border:1px solid var(--grid);color:var(--muted);border-radius:6px;padding:2px 8px;font-size:10.5px;letter-spacing:0;cursor:pointer;font-family:inherit}.sharelink:hover{color:var(--ink2);border-color:var(--muted)}.sharebox{max-height:320px;overflow:auto;border:1px solid var(--grid);border-radius:8px;background:var(--pill);padding:6px 8px;font-family:ui-monospace,SF Mono,Menlo,Consolas,monospace;font-size:11px;line-height:1.5}.shline{display:flex;gap:7px;align-items:flex-start;padding:1px 0}.shdel{flex:none;background:none;border:1px solid var(--grid);color:var(--muted);border-radius:4px;font-size:9px;line-height:1.3;padding:0 4px;margin-top:1px;cursor:pointer}.shdel:hover{color:var(--s2);border-color:var(--s2)}.shtext{color:var(--ink2);white-space:pre-wrap;word-break:break-all}.btn:disabled{opacity:.45;cursor:default}.btn:disabled:hover{filter:none}.empty-state{display:flex;flex-direction:column;align-items:center}.empty-card{width:min(460px,94vw);background:var(--surface);border:1px solid var(--hairline);border-radius:16px;padding:28px 26px;text-align:center}.empty-title{font-size:15px;font-weight:700;margin-bottom:8px}.empty-detail{font-size:12px;color:var(--warn);margin-bottom:8px;word-break:break-all}.empty-hint{font-size:12.5px;color:var(--muted);line-height:1.7}.empty-hint code{color:var(--ink2);background:var(--pill);border:1px solid var(--grid);border-radius:4px;padding:1px 5px}#tip{position:fixed;display:none;pointer-events:none;z-index:9;background:#050505;border:1px solid var(--hairline);border-radius:8px;padding:6px 10px;font-size:12px;color:var(--ink);max-width:300px;box-shadow:0 8px 24px #00000080;white-space:pre-line;line-height:1.5}.toggle{width:30px;height:17px;border-radius:999px;background:var(--grid);position:relative;cursor:pointer;flex:none;transition:background .15s;border:none;padding:0}.toggle:after{content:"";position:absolute;top:2px;left:2px;width:13px;height:13px;border-radius:50%;background:var(--ink2);transition:left .15s}.toggle.on{background:var(--s1)}.toggle.on:after{left:15px;background:#fff}.cc-feature{flex-wrap:wrap}.cc-feature .cname{flex:1;min-width:140px}.cc-feature-help{flex-basis:100%;min-width:0}.cc-warning{color:var(--muted);margin-left:6px}.cc-feature-help>summary{width:fit-content;color:var(--ink2);font-size:13px;cursor:pointer}.cc-help-body{max-width:68ch;color:var(--ink2);font-size:13px;line-height:1.7;overflow-wrap:anywhere}.cc-help-body p{margin:10px 0 0}.cc-status{flex-basis:100%;font-size:11px;color:var(--muted)}.cc-status.blocked{color:var(--warn)}.cc-segments{display:inline-flex;border:1px solid var(--grid);border-radius:6px;overflow:hidden}.cc-segments button{padding:4px 7px;font:inherit;font-size:11px;color:var(--muted);background:none;border:none;cursor:pointer}.cc-segments button+button{border-left:1px solid var(--grid)}.cc-segments button[aria-pressed=true]{background:var(--s1);color:#fff}.cc-feature button:disabled{opacity:.45;cursor:not-allowed}.cc-disable-all{padding:3px 7px;font-size:11px}.cright{display:flex;align-items:center;gap:8px;flex:none}.cfgnote{font-size:11px;color:var(--muted);padding:5px 0 2px;border-top:1px dashed var(--grid);line-height:1.6}.licbar{display:block;width:100%;text-align:left;font-size:12px;font-family:inherit;color:var(--warn);background:none;border:1px solid var(--warn);border-radius:8px;padding:6px 10px;margin-bottom:10px;cursor:pointer}.licbar.expired{color:var(--s2);border-color:var(--s2)}.licbar:hover{filter:brightness(1.12)}.licrow{display:flex;align-items:stretch;gap:8px;margin-bottom:10px}.licrow .licbar{flex:1;min-width:0;margin-bottom:0}.licsep{opacity:.5}.free-harness-cooldown{cursor:not-allowed}.free-harness{display:inline-flex;flex-wrap:wrap;align-items:center;gap:6px}.free-harness .act{color:var(--ink);background:var(--surface);border-color:var(--ink2)}.licimport{flex:none;font-size:11px;font-family:inherit;color:var(--muted);background:none;border:1px solid var(--grid);border-radius:8px;padding:6px 10px;cursor:pointer}.licimport:hover{color:var(--ink2);border-color:var(--muted)}.licfoot{margin-top:12px;text-align:center}.licfootlink{font-size:11px;font-family:inherit;color:var(--muted);background:none;border:none;padding:2px 4px;cursor:pointer;text-decoration:underline;text-decoration-color:var(--grid);text-underline-offset:3px}.licfootlink:hover{color:var(--ink2)}.feedbackfoot{display:flex;align-items:center;justify-content:center;gap:8px;flex-wrap:wrap;padding:0 18px 16px;color:var(--muted);font-size:10.5px;line-height:1.45;text-align:center}.feedbackfoot a{color:var(--ink2);text-underline-offset:2px}.feedbackfoot a:hover{color:var(--ink)}.feedbacklink{font-weight:650}.lictrial{margin:-2px 0 8px;text-align:right}.lictrial .licfootlink{text-decoration:none}.licrow.free{align-items:center;flex-wrap:wrap;gap:6px 8px;color:var(--muted);font-size:12.5px}.licrow.free b{color:var(--ink2)}.tier-license-links .licfootlink,.licrow.free .licfootlink{padding:0;color:var(--ink2);font-size:inherit}#drop{position:fixed;inset:0;z-index:40;display:none;align-items:center;justify-content:center;background:#000000a6;border:2px dashed var(--s1);color:var(--ink);font-size:15px;pointer-events:none}.overlay{position:fixed;inset:0;z-index:20;display:flex;align-items:center;justify-content:center;padding:20px}.scrim{position:absolute;inset:0;background:#0009}.modal{position:relative;width:min(560px,94vw);max-height:86vh;overflow-y:auto;background:var(--surface);border:1px solid var(--hairline);border-radius:16px;padding:16px 18px;box-shadow:0 18px 60px #0009;animation:drop .18s ease}.mhead{display:flex;align-items:center;gap:8px;margin-bottom:10px}.mtitle{font-size:14px;font-weight:700}.mclose{margin-left:auto;background:none;border:1px solid var(--hairline);color:var(--ink2);border-radius:8px;padding:2px 8px;font-size:12px;cursor:pointer}.mclose:hover{border-color:var(--muted)}.mnote{font-size:11px;color:var(--warn);border:1px dashed var(--warn);border-radius:8px;padding:8px 10px;margin-bottom:10px;line-height:1.6}.msec{border-top:1px solid var(--grid);padding:10px 0}.mlabel{font-size:11px;letter-spacing:.1em;color:var(--muted);margin-bottom:6px}.mtext{font-size:12.5px;color:var(--ink2);line-height:1.7;word-break:break-all}.mtext.muted{color:var(--muted)}.mtext code,.mpath{color:var(--ink2);background:var(--pill);border:1px solid var(--grid);border-radius:4px;padding:1px 5px;font-size:11px;word-break:break-all}.mfile{display:flex;align-items:center;gap:8px;padding:4px 0;font-size:12px;flex-wrap:wrap}.mkind{font-size:10px;border-radius:4px;padding:1px 6px;flex:none;border:1px solid var(--grid);color:var(--ink2)}.mkind.create{color:var(--s3);border-color:var(--s3)}.mkind.modify{color:var(--s4);border-color:var(--s4)}.mkind.delete{color:var(--s2);border-color:var(--s2)}.mlines{margin-left:auto;font-size:11px;color:var(--muted);font-variant-numeric:tabular-nums;flex:none}.mref{display:flex;gap:8px;padding:4px 0;font-size:12px;align-items:baseline;flex-wrap:wrap}.mctx{color:var(--muted);font-size:11.5px;line-height:1.5}.merror{font-size:12px;color:var(--warn);border:1px solid var(--warn);border-radius:8px;padding:8px 10px;margin-bottom:8px;white-space:pre-wrap;word-break:break-all}.mact{display:flex;gap:8px;justify-content:flex-end;margin-top:12px}.btn{border-radius:8px;padding:6px 14px;font-size:12.5px;cursor:pointer;font-family:inherit}.btn.ghost{background:none;border:1px solid var(--hairline);color:var(--ink2)}.btn.ghost:hover{border-color:var(--muted)}.btn.primary{background:var(--s1);border:1px solid var(--s1);color:#fff;font-weight:600}.btn.primary:hover{filter:brightness(1.1)}.free-harness .btn{padding:5px 10px}.projects{display:grid;gap:12px;padding:12px 14px 16px}.project-shell{min-width:0}.projects-empty,.project-empty{color:var(--muted);font-size:12px;padding:8px 0}.project-card{border:1px solid var(--hairline);border-radius:12px;padding:12px;background:var(--surface)}.project-toolbar{display:flex;align-items:center;flex-wrap:wrap;gap:12px}.project-organization{display:flex;align-items:center;gap:6px}.project-organization button{color:var(--muted);background:transparent;border:0;cursor:pointer;font-size:12px;padding:4px}.project-organization button:disabled{opacity:.35;cursor:default}.project-organization button[aria-pressed=true]{color:var(--ink2)}.project-row{display:flex;align-items:center;gap:10px;min-height:36px;cursor:pointer}.project-row-layout{display:flex;align-items:center;gap:12px;overflow-x:auto}.project-row-layout>.project-row{flex:1;min-width:min-content}.project-row-actions{display:flex;flex:none;align-items:center;gap:6px;white-space:nowrap}.project-row>span{white-space:nowrap}.project-row-name{flex:none;font-weight:600}.project-row-goal,.project-row-task{flex:1;width:0;min-width:0;overflow:hidden;text-overflow:ellipsis;color:var(--muted)}.project-row-action{flex:none;min-width:max-content;font-size:12px;border:1px solid var(--hairline);border-radius:4px;padding:3px 6px}.project-row-action[data-kind=ended]{color:var(--muted)}.project-row-action[data-kind=decision],.project-row-action[data-kind=checkpoint]{color:var(--warn)}.project-row:focus-visible{outline:2px solid var(--ink2);outline-offset:4px}.projects-toggle,.project-collapse{color:var(--muted);background:transparent;border:0;font-size:12px;padding:6px 0;cursor:pointer}.project-collapse{display:block;margin-left:auto}.project-progress{display:grid;gap:7px;margin-top:12px;font-size:12px}.project-progress>div{display:flex;align-items:baseline;flex-wrap:wrap;gap:5px}.project-branches,.project-current-points{flex:1;min-width:0;display:grid;gap:5px}.project-branch{display:flex;align-items:baseline;gap:5px}.project-branches .fold,.project-current-points .fold{margin-top:0}.project-action{margin-top:14px;padding:10px 0;border-block:1px solid var(--hairline);font-size:12px}.project-action[data-kind=decision],.project-action[data-kind=checkpoint]{color:var(--warn)}.project-action-title{font-weight:650}.project-action-title>span{margin-left:6px;font-weight:400}.project-action-item{display:flex;align-items:baseline;flex-wrap:wrap;gap:7px;margin-top:8px}.project-tech{margin-top:14px;color:var(--muted);font-size:11px}.project-tech>summary,.project-plan-help>summary,.project-node-children>summary{cursor:pointer}.project-tech>summary{margin-bottom:7px}.project-node-children>summary{color:var(--muted);font-size:11px}.project-plan-help{margin-top:7px}.project-plan-help pre{white-space:pre-wrap}.project-action button:focus-visible,.project-tech summary:focus-visible,.project-node-children summary:focus-visible{outline:2px solid var(--s1);outline-offset:3px}.project-card.unavailable,.project-last-good{background:color-mix(in srgb,var(--surface) 88%,var(--grid))}.project-card-head{display:flex;justify-content:space-between;gap:12px;align-items:baseline}.project-title{font-size:15px;font-weight:700}.project-source{margin-left:7px;color:var(--muted);font-size:10.5px}.project-branch .project-source{flex:none;white-space:nowrap}.project-presence{color:var(--muted);font-size:11px;margin-top:4px}.project-memory-warning,.anatomy-refresh-warning{color:var(--warn);font-size:11px}.project-memory-warning{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}.project-memory-warning button{color:inherit;background:transparent;border:0;cursor:pointer}.project-root,.project-meta,.project-counts,.project-facts{color:var(--muted);font-size:11px;overflow-wrap:anywhere}.project-meta{margin-top:4px}.project-protocols{display:grid;gap:6px;margin-top:8px}.project-protocol-row{display:flex;align-items:center;flex-wrap:wrap;gap:5px}.project-protocol-chip,.project-protocol-copy{border:1px solid var(--hairline);border-radius:999px;color:var(--ink2);font-family:inherit;font-size:10.5px;padding:2px 7px}.project-protocol-chip.plan_present,.project-protocol-chip.session_wrote_plan{border-color:var(--s3);color:var(--s3)}.project-protocol-chip.installed_not_loaded{border-color:var(--warn);color:var(--warn)}.project-protocol-note{color:var(--muted);font-size:10px;overflow-wrap:anywhere}.project-protocol-copy{background:transparent;cursor:pointer;padding-inline:6px}.project-protocol-copy:hover{border-color:var(--s1)}.project-goal,.project-section,.project-counts,.project-facts,.project-complete,.project-l0,.project-error,.project-last-good{margin-top:10px}.project-label{color:var(--ink2);font-size:11px;font-weight:650;margin-right:8px}.project-l0,.project-error{border:1px solid var(--hairline);border-radius:8px;padding:8px 10px;font-size:12px}.project-error{color:var(--warn);border-color:var(--warn)}.project-complete{color:var(--s3);font-size:12px;font-weight:650}.project-points{display:flex;flex-wrap:wrap;gap:6px;margin-top:5px}.project-checkpoints{margin-top:5px}.project-checkpoint{font-size:12px;font-weight:400}.project-crumb{border:1px solid var(--hairline);border-radius:999px;background:transparent;color:var(--ink2);cursor:pointer;font-family:inherit;font-size:11px;padding:3px 8px}.project-crumb:hover{border-color:var(--s1)}.project-node-text,.project-crumb,.project-checkpoint{display:-webkit-box;min-width:0;max-width:100%;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;overflow-wrap:anywhere}.project-node-text{flex:1}.project-facts-group+.project-facts-group{margin-top:4px}.project-facts-toggle{border:0;background:transparent;color:inherit;cursor:pointer;font:inherit;padding:0;text-align:left}.project-facts-items{display:grid;gap:3px;margin:4px 0 0 14px}.task-filters{display:grid;grid-template-columns:max-content minmax(0,1fr);column-gap:5px;row-gap:7px;align-items:center;padding:12px 14px 0;color:var(--muted);font-size:10.5px}.task-filter-group{display:contents}.task-filter-chips{display:flex;align-items:center;flex-wrap:wrap;gap:5px;min-width:0}.task-filter-chip,.task-badge,.task-status{border:1px solid var(--hairline);border-radius:999px;background:transparent;color:var(--ink2);font-family:inherit;font-size:10.5px;padding:2px 7px}.task-filter-chip{cursor:pointer}.task-filter-chip:hover,.task-filter-chip.act{border-color:var(--s1);color:var(--s1)}.task-filter-summary,.task-hidden{color:var(--muted);font-size:11px}.task-filter-summary{padding:7px 14px 0}.task-hidden{margin:5px 0 0 19px}.task-card-list{display:grid;grid-template-columns:minmax(0,1fr);gap:8px;margin-top:12px}.task-card{display:block;width:100%;border:0;border-radius:12px;background:#262624;color:var(--ink);cursor:pointer;font-family:inherit;padding:16px 40px 16px 16px;text-align:left}.task-card:hover{background:#2d2d2a}.task-card-head{display:grid;grid-template-columns:92px minmax(0,1fr);align-items:baseline;gap:14px}.task-card-meta{display:flex;align-items:center;flex-wrap:wrap;gap:8px 18px;margin:9px 0 0 106px}.task-title{min-width:0;font-size:15px;font-weight:550;line-height:1.65;overflow-wrap:anywhere}.task-status.waiting{border-color:var(--warn);color:var(--warn)}.task-status .note.allowed,.task-status .note.denied{margin-left:6px;color:var(--ink2)}.task-status.turnEnded{color:var(--ink2)}.task-status.active,.task-status.complete{border-color:var(--s3);color:var(--s3)}.task-status.ended{color:var(--muted)}.task-card .task-badge,.task-card .task-status{border:0;padding:0;font-size:12px;line-height:1.6}.task-card .task-badge{color:#aaa9a2}.task-card .task-status.active{color:var(--ink2)}.task-card .task-status.active:before,.task-card .task-status.waiting:before{content:"";display:inline-block;width:6px;height:6px;margin:0 7px 1px 0;border-radius:50%;background:#9ab6a4}.task-card .task-status.waiting:before{background:var(--warn)}.task-card .task-status.complete{color:#aab9af}.task-skills{display:block;margin-top:6px;color:var(--muted);font-size:10.5px}.task-card-wrap{position:relative}.task-menu-button{position:absolute;top:6px;right:7px;width:28px;height:26px;border:1px solid transparent;border-radius:7px;background:transparent;color:var(--muted);cursor:pointer;font:700 17px / 1 inherit}.task-menu-button:hover,.task-menu-button[aria-expanded=true]{border-color:var(--hairline);color:var(--ink)}.task-menu{display:grid;gap:7px;max-width:100%;margin-top:5px;padding:8px;border:1px solid var(--hairline);border-radius:9px;background:color-mix(in srgb,var(--surface) 92%,var(--grid))}.task-menu label{display:grid;grid-template-columns:auto minmax(0,1fr);gap:7px;align-items:center;color:var(--muted);font-size:10.5px}.task-menu input{min-width:0;border:1px solid var(--hairline);border-radius:6px;background:var(--surface);color:var(--ink);font:inherit;padding:5px 7px}.task-menu-actions{display:flex;flex-wrap:wrap;gap:6px}.return-target-option,.return-settings-dismiss,.task-menu-actions button,.task-resume-command button,.task-unhide,.task-hidden-toggle{border:1px solid var(--hairline);border-radius:999px;background:transparent;color:var(--ink2);cursor:pointer;font:inherit;font-size:10.5px;padding:3px 8px}.task-resume-command{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:6px;align-items:center}.task-resume-command code{min-width:0;overflow-wrap:anywhere;white-space:pre-wrap}.task-return-result,.task-resume-note,.task-resume-unavailable,.task-error{grid-column:1 / -1;color:var(--muted);font-size:10.5px;overflow-wrap:anywhere}.task-error{margin-top:5px;color:var(--warn)}.schips>.task-error{flex-basis:100%;margin-top:0}.session-archived{margin-top:8px}.session-archived-row{display:flex;align-items:center;flex-wrap:wrap;gap:8px;padding:6px 0}.task-hidden-group{margin-top:6px}.task-hidden-toggle{color:var(--muted)}.project-organization .task-menu-button{position:static}.project-root-block{border-top:1px solid var(--hairline);padding-top:16px;margin-top:16px}.project-root-block>.project-card-head .project-title{font-size:14px}.project-archived{display:grid;gap:8px;margin-top:12px}.project-archived>.task-hidden-toggle{justify-self:start}.project-archived>.project-card,.project-archived>.project-shell{min-width:0}.task-card-hidden{opacity:.58}.task-unhide{margin-top:5px}@media(max-width:560px){.task-menu label{grid-template-columns:1fr}}.project-tree,.project-tree ul{list-style:none;margin:5px 0 0;padding-left:17px}.project-tree{padding-left:0}.project-plan-toolbar{display:flex;align-items:center;justify-content:space-between;gap:8px}.project-node-heading{flex:1;min-width:0}.project-node-detail{display:block;color:var(--muted);font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.project-node{margin:4px 0;font-size:12px}.project-node-line{display:flex;gap:7px;align-items:baseline}.project-node.in_progress>.project-node-line{color:var(--s3)}.project-node.completed,.project-node.cancelled,.project-node.collapsed{color:var(--muted)}.project-mark{width:12px;flex:none;text-align:center}.project-verify{color:var(--muted);font-size:11px;margin:3px 0 0 19px}.project-session-wrap,.task-card-wrap{margin:5px 0 6px 19px}.project-last-good{opacity:.72;border-radius:8px;padding:8px}html.island,html.island body{background:transparent}html.island body{padding:8px 0 12px;overflow:hidden}html.island .pill{box-shadow:0 2px 6px #0000008c}html.island .panel{box-shadow:0 2px 6px #0009}html.island #app{display:flex;flex-direction:column;width:100%;height:calc(100vh - 20px)}html.island[data-island-edge=bottom] #app{justify-content:flex-end}html.island[data-island-edge=left] .wrap{align-items:flex-start;padding-left:8px}html.island[data-island-edge=right] .wrap{align-items:flex-end;padding-right:8px}html.island-compact body{padding:8px 0}html.island-compact #app{height:calc(100vh - 16px)}html.island-compact .pill{height:32px;max-width:min(100%,360px);gap:8px;padding:0 12px;cursor:default}html.island-compact .pill:hover{transform:none}html.island-tab-mode body{padding:0}html.island-tab-mode #app{height:100vh}.island-tab{width:6px;height:64px;border:0;border-radius:3px;padding:0;flex:none;cursor:pointer;background:var(--muted);opacity:.6}.island-tab.live{background:var(--s3);opacity:1}.island-tab.wait{background:var(--warn);opacity:1}.island-tab.pulse{animation:pulse 1.2s 1}.island-tab:focus-visible{outline:1px solid var(--ink);outline-offset:-1px}.island-transition-tab{position:fixed;pointer-events:none}html.island[data-island-edge=left] .wrap:not(.open),html.island[data-island-edge=right] .wrap:not(.open){min-height:64px;justify-content:center}html.island .pill.island-edge-left{--island-edge-offset: calc(-100% - 8px) }html.island .pill.island-edge-right{--island-edge-offset: calc(100% + 8px) }html.island .pill.island-reveal{transform:translate(0);opacity:1;transition:transform .2s ease-out,opacity .2s ease-out}html.island .pill.island-retract{transform:translate(var(--island-edge-offset));opacity:0;transition:transform .15s ease-in,opacity .15s ease-in}html.island .pill.island-prepare{transform:translate(var(--island-edge-offset));opacity:0;transition:none}html.island .pill.island-motion-reduced{transform:none;transition:opacity 80ms linear}html.island .pill.island-motion-reduced.island-prepare{transition:none}@media(prefers-reduced-motion:reduce){html.island .pill.island-reveal,html.island .pill.island-retract{transform:none;transition:opacity 80ms linear}html.island .pill.island-prepare{transition:none}}html.island .open .panel{height:calc(100vh - 20px);overflow-y:auto}html.island .scrim{border-radius:20px}.return-target-options{display:flex;flex-wrap:wrap;gap:6px}.return-target-option.act{color:var(--s1);border-color:var(--s1);background:var(--surface)}.return-target-option:hover,.return-settings-dismiss:hover{color:var(--ink)}.return-target-option:focus-visible,.return-settings-dismiss:focus-visible{outline:2px solid var(--s1);outline-offset:2px}.return-target-option:disabled{opacity:.6;cursor:default}[data-expand-text]{display:-webkit-box;min-width:0;max-width:100%;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;overflow-wrap:anywhere}[data-expand-text][data-expanded=true]{-webkit-line-clamp:unset;white-space:normal;overflow:visible}.ask-line>[data-expand-text],.wfgoal>[data-expand-text],.wflead>[data-expand-text]{flex:1}.wftitle.has-session-origin>[data-expand-text],.session-title-with-origin>.task-title{flex:0 1 auto;min-width:4em}.expand{border:0;background:transparent;color:var(--s1);cursor:pointer;font:inherit;font-size:11px;padding:2px 4px}.expand[hidden]{display:none}.expand:focus-visible{outline:2px solid var(--s1);outline-offset:2px}.project-branch>.expand{flex:none;white-space:nowrap}.protocol-banner{display:flex;align-items:center;flex-wrap:wrap;gap:8px;border-color:var(--hairline);color:var(--ink2);font-size:var(--fs-3)}.protocol-banner small{color:var(--muted);font-size:var(--fs-3)}.protocol-banner.highlighted{outline:2px solid var(--ink2);outline-offset:2px}.taskflow .task-status{color:var(--ink2);border-color:var(--hairline)}.panel:has(.taskflow) .head .dot,.panel:has(.taskflow) .schip .sdot{background:var(--muted)}.panel:has(.taskflow) .head .badge{color:var(--muted);border-color:var(--muted)}.panel:has(.taskflow) .vtab.act{border-bottom-color:var(--muted)}.ask-box .task-return-result{font-size:var(--fs-3)}.taskflow .mk,.taskflow .ag,.taskflow .expand,.taskflow .mockchip,.taskflow .failchip,.taskflow .trs.bad .cmd,.taskflow .tr.waitrow .trlabel,.taskflow .task-error{color:var(--ink2)}.taskflow .box .muted,.taskflow .fold .muted{color:var(--muted)}.taskflow .tr .ic{background:var(--muted)}.taskflow .mockchip,.taskflow .ag,.taskflow .failchip,.taskflow .project-crumb:hover,.taskflow .project-protocol-copy:hover,.protocol-banner .project-protocol-copy:hover{border-color:var(--muted)}.taskflow .cfgnote,.taskflow .ag,.taskflow .mockchip,.taskflow .task-error,.taskflow .statechip,.taskflow .mk,.taskflow .tr,.taskflow .tr .dur,.taskflow .trs,.taskflow .trs .cmd,.taskflow .trs .dur,.taskflow .failchip,.taskflow .expand,.taskflow .livenone,.taskflow .project-crumb,.taskflow .project-protocol-copy,.taskflow .project-protocol-note{font-size:var(--fs-3)}.taskflow button:focus-visible,.taskflow summary:focus-visible,.protocol-banner button:focus-visible,.protocol-foot button:focus-visible{outline:2px solid var(--ink2);outline-offset:3px}.lang{font-size:12px;color:inherit;background:transparent;border:0}.project-card.compact>.task-error,.project-card.compact>.project-error{flex-basis:100%}.page-heading{margin:24px 0 22px}.page-heading h2{margin:0 0 6px;color:var(--ink);font-size:24px;font-weight:600;letter-spacing:-.025em;line-height:1.3}.page-heading p{margin:0;color:#aaa9a2;font-size:13px;line-height:1.65}.panel .sec>.label{font-size:13px;letter-spacing:0;font-weight:500}.panel .configure-section{border-top:0;padding-top:0}.panel .configure-section>.grp{margin:12px 0;padding:14px 16px;border:1px solid var(--hairline);border-radius:12px;background:#20201e}.panel .configure-section>details.grp>summary{flex-wrap:wrap;gap:6px 10px}.panel .configure-section>details.grp>summary .wflabel{color:var(--ink);font-size:14px;font-weight:500}.panel .configure-section .fold-summary{flex-basis:100%;margin:3px 0 0 14px;color:#aaa9a2;font-size:12px}.panel .gtitle{margin-bottom:9px;color:var(--ink2);font-size:13px}.panel .crow{gap:8px;padding:11px 0;border-top-style:solid;line-height:1.5}.panel .cfgnote{color:#aaa9a2;font-size:12px;line-height:1.65}.panel .usage-section{padding:16px 18px;border:1px solid var(--hairline);border-radius:12px;background:#20201e}.panel .usage-section .livenone{border:0;padding:0;margin:12px 0 0}.panel .sec .headline{margin:14px 0 18px}.panel .sec .headline b{display:block;margin-top:4px;font-size:22px;font-weight:500;letter-spacing:-.025em}.panel .legend{gap:13px 22px;padding:10px 0}.panel .lrow{flex-wrap:wrap}.panel .lrow .nat{order:5;flex-basis:calc(100% - 17px);border:0;padding:0 0 0 17px;white-space:normal}.panel .context-detail .sec{margin-top:0;border:0}.panel .feedback-reason>summary{cursor:pointer;padding:6px 0 10px;color:#aaa9a2;font-size:12px}.panel .feedback-reason .cfgnote{margin-bottom:12px;overflow-wrap:anywhere}.panel .projects-tools{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:10px;margin-bottom:18px}.panel .task-filters{margin-bottom:0}.panel .project-row-layout{align-items:flex-start;flex-wrap:nowrap;overflow:visible}.panel .project-row-layout>.project-row{display:grid;grid-template-columns:fit-content(40%) minmax(0,1fr) auto;flex:1;min-width:0;gap:3px 12px}.panel .project-row>span:not(.project-row-action){min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;overflow-wrap:anywhere}.panel .project-row-name{grid-column:1;grid-row:1;font-size:15px}.panel .project-row-action{grid-column:3;grid-row:1 / 3;align-self:start;min-width:max-content;overflow:visible}.panel .project-row-goal,.panel .project-row-task{width:auto;font-size:13px}.panel .project-row-goal{grid-column:2;grid-row:1;color:var(--ink2)}.panel .project-row-task{grid-column:1 / 3;grid-row:2}.panel .project-row-actions{margin-left:auto;white-space:normal;flex-wrap:wrap}.panel .projects{gap:8px}.panel .projects-tools{margin-bottom:10px}.panel .project-goal{margin-top:9px;color:var(--ink2);font-size:14px;line-height:1.6}.panel .project-title{font-size:19px}.panel .project-action{padding:14px;border:0;border-radius:8px;background:#292927;font-size:13px}.panel .project-action[data-kind=decision],.panel .project-action[data-kind=checkpoint]{background:#fab21912}.panel .project-progress{gap:12px;margin-block:18px}.panel .project-progress>div>.project-label:first-child{flex-basis:100%}.panel .project-section{margin-top:18px;padding-top:16px;border-top:1px solid var(--hairline)}.panel .project-tech>summary{padding:12px 0;font-size:12px}.modal{padding:24px;border-radius:18px;line-height:1.6}.modal .mhead{margin-bottom:20px}.modal .mtitle{font-size:20px;font-weight:600;letter-spacing:-.02em}.modal .msec{padding:16px 0}.modal .mlabel{font-size:12px;letter-spacing:0}.modal .mtext{font-size:13px;overflow-wrap:anywhere}.modal .mact{position:sticky;bottom:-24px;padding:16px 0;background:var(--surface);border-top:1px solid var(--hairline);flex-wrap:wrap}.tier-lock-modal{width:min(440px,100%);padding:22px 22px 18px;border-radius:16px}.tier-lock-modal .mhead{margin-bottom:8px}.tier-lock-modal .mtitle{font-size:17px}.tier-lock-modal .mtext{margin:0;font-size:14px}.tier-price{margin:10px 0 16px;color:var(--muted);font-size:12.5px}.tier-lock-modal .mact{position:static;justify-content:flex-start;gap:10px;margin:0;padding:0;border:0}.tier-lock-modal .btn{padding:9px 16px;text-decoration:none}.tier-lock-modal .btn.ghost{border-color:transparent;color:var(--muted)}.tier-license-links{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-top:12px;color:var(--muted);font-size:12.5px}.modal button:focus-visible,.modal input:focus-visible,.modal textarea:focus-visible{outline:2px solid #a8c7ff;outline-offset:3px}html:not(.island) .panel{width:min(780px,calc(100vw - 32px))}.panel{padding:24px 26px 18px;line-height:1.55}.panel .head{gap:10px;padding-bottom:18px;margin-bottom:18px;border-bottom:1px solid var(--hairline)}.panel .head .title{font-size:19px;font-weight:600;letter-spacing:-.02em}.panel .head .dot{animation:none}.panel .lang{margin-left:auto;font-size:13px;padding:7px 5px}.panel .collapse{margin-left:4px;padding:7px 11px}.panel .tabs{width:100%;max-width:100%;overflow-x:auto;background:none;border:0;padding:0;gap:6px;margin-bottom:18px}.panel .tab{flex:none;border:1px solid transparent;padding:8px 13px;font-size:13px;color:var(--ink2)}.panel .tab.act{background:#292927;border-color:#41413c;color:var(--ink)}.panel .vtabs{gap:26px;margin-bottom:16px}.panel .vtab{padding:9px 1px;font-size:13px}.panel .pane{min-width:0}.panel button,.panel select,.empty-state button{font-family:inherit}.panel button:focus-visible,.panel summary:focus-visible,.panel select:focus-visible,.panel a:focus-visible,.empty-state summary:focus-visible{outline:2px solid #a8c7ff;outline-offset:3px}.task-empty{padding:38px 20px 42px;text-align:center}.empty-eyebrow{color:var(--ink2);font-size:13px}.task-empty h2{margin:12px 0;color:#f1f1ef;font-size:26px;font-weight:500;line-height:1.3;letter-spacing:-.025em}.task-empty p{max-width:430px;margin:0 auto;color:#aaa9a2;font-size:14px;line-height:1.7;text-wrap:pretty}.empty-action{margin-top:24px;border:1px solid transparent;border-radius:9px;background:#a8c7ff;color:#112340;padding:10px 16px;font-size:13px;font-weight:500;cursor:pointer}.empty-action.secondary{margin-top:18px;color:#b2b1aa;background:none;font-weight:400}.empty-action:hover{filter:brightness(1.12)}.panel-detail{border-top:1px solid var(--hairline);margin-top:0;font-size:13px}.panel-detail>summary{padding:13px 2px;color:var(--ink2);gap:10px;line-height:1.5}.panel-detail>summary>span:first-of-type{flex-shrink:0}.panel-detail>summary .fold-summary{font-size:12px;color:#a4a39c;margin-left:auto;text-align:right}.panel-detail .fold-body{padding:4px 4px 16px;overflow-wrap:anywhere}.panel-detail .sessions-empty{border:0;padding:0;margin:10px 0}.connection-meta,.connection-command{color:var(--ink2);font-size:12px}.connection-command{display:flex;align-items:center;flex-wrap:wrap;gap:8px;margin-top:14px}.connection-command>span:first-child{flex-basis:100%}.connection-command code{flex:1;min-width:0;white-space:pre-wrap;overflow-wrap:anywhere}.connection-command button,.protocol-link button{color:var(--ink2);border:1px solid var(--hairline);border-radius:7px;padding:5px 9px;background:none;cursor:pointer}.protocol-link{padding-top:12px}.protocol-link button{font-size:12px;border:0;padding-left:0}.protocol-detail .protocol-banner,.protocol-detail .protocol-foot{margin:0;border:0;padding:6px 0}.panel-footer{display:flex;flex-wrap:wrap;align-items:baseline;gap:0 20px;margin-top:24px;padding-top:10px;border-top:1px solid var(--hairline)}.panel .suggestions-section{margin:20px 0;border-top:1px solid var(--hairline);padding-top:18px}.panel .suggestions-section h3{margin:0;color:var(--ink);font-size:15px;font-weight:500}.panel .suggestions-section>p{margin:6px 0 12px;color:#aaa9a2;font-size:12px;line-height:1.65}.panel .suggestions-section .suggslot{border:0;padding:0}.panel .suggestions-section .sugg{flex-wrap:wrap;padding:10px 0;font-size:13px;line-height:1.6}.panel .suggestions-section .sugg+.sugg{border-top:1px solid var(--hairline)}.panel .suggestions-section .sugtext{flex:1 1 280px;white-space:normal;overflow:visible;overflow-wrap:anywhere}.panel .suggestions-section .sugbtn,.panel .suggestions-section .sugdismiss{min-height:28px;font-size:12px}.panel .suggestions-section .sugactions{display:inline-flex;flex:none;gap:8px;margin-left:auto}.panel-footer .licfoot{margin:0;text-align:left}.panel-footer .help-detail{border:0;margin-left:auto}.panel-footer .help-detail[open]{flex-basis:100%}.help-detail .feedbackfoot{margin:0;padding:4px 0;text-align:left;align-items:flex-start;font-size:12px;line-height:1.65}.help-detail .feedbackfoot>span{color:#aaa9a2}.panel .taskflow{margin-top:10px}.panel .box{background:#20201e;border-radius:12px;padding:16px 18px}.panel .ask-box.active{background:#fab2190b}.panel .wftitle{font-size:21px;line-height:1.4;font-weight:600}.panel .wfgoal,.panel .wflead{margin-top:12px;line-height:1.6}.panel .taskflow>.fold>summary{padding-top:12px;padding-bottom:12px}.panel .taskflow>.fold{margin-top:0;border-bottom:1px solid var(--hairline)}.panel .taskflow>.box+.fold{margin-top:16px}.panel .project-card{background:#20201e;border-color:var(--hairline);border-radius:12px}.panel .project-title{font-weight:600;line-height:1.5}.panel .project-card:not(.compact){padding:18px}.panel .project-card.compact{padding:9px 14px}.panel .sec>.label{color:var(--ink2);line-height:1.6}.panel .livenone,.panel .emptyrow{line-height:1.65}.panel-detail code,.panel .livenone code{white-space:pre-wrap;overflow-wrap:anywhere}.panel :is(.td,.urow,.crow,.lvrow,.cfgnote){border-top-style:solid;border-color:var(--hairline)}.panel :is(.statechip.nofile,.tier.none,.conn.replay,.demobtn){border-style:solid;border-color:var(--hairline)}.panel .livenone{border:0;padding:10px 0}.panel .task-menu{border:0;border-radius:12px;background:#292927;padding:12px}.task-card-wrap:has(>.expand:not([hidden]))>.task-card{border-bottom-left-radius:0;border-bottom-right-radius:0}.task-card-wrap>.expand:not([hidden]){display:block;width:100%;margin:0;padding:0 16px 12px;border-radius:0 0 12px 12px;background:#262624;color:var(--ink2);text-align:right;font-size:12px}@media(max-width:640px){.panel .project-row-layout{flex-wrap:wrap}.panel .project-row-layout>.project-row{flex-basis:100%}}@media(max-width:520px){.session-chip-title{max-width:11em}.task-card-head{grid-template-columns:minmax(0,1fr);gap:5px}.task-card-meta{margin-left:0}.panel .suggestions-section .sugtext{flex-basis:100%}.panel .crow{flex-wrap:wrap}.panel .crow .cname{white-space:normal;overflow-wrap:anywhere}.panel .crow .ctok{flex-basis:100%}.panel .project-row-layout>.project-row{grid-template-columns:minmax(0,1fr)}.panel .project-row-layout{flex-wrap:wrap}.panel .project-row-layout>.project-row{flex-basis:100%}.panel .project-row-action{grid-column:1;grid-row:auto;justify-self:start}.panel .project-row-goal,.panel .project-row-task{grid-column:1;grid-row:auto}.modal{padding:18px}.panel{padding:18px 16px 14px}.panel .head{gap:6px}.panel .head .badge{flex-basis:auto;font-size:9px}.panel .tabs{gap:2px}.panel .tab{padding:7px 9px;font-size:12px}.task-empty{padding:28px 8px 32px}.task-empty h2{font-size:23px}.panel .box{padding:14px}.panel .wftitle{font-size:19px}.panel .project-card:not(.compact){padding:14px}.panel-detail>summary{flex-wrap:wrap}.panel-detail>summary .fold-summary{white-space:normal}}@media(max-width:380px){.chip.session-origin{max-width:6em}}