@codexhost/cli-darwin-x64 0.6.1 → 0.6.2

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.
@@ -15484,6 +15484,9 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
15484
15484
  accountCredits: accountCreditsSnapshotSchema.optional()
15485
15485
  }).strict();
15486
15486
 
15487
+ // ../shared-contracts/dist/reasoning-transcript.js
15488
+ var REASONING_TRANSCRIPT_COMMAND = "thinking";
15489
+
15487
15490
  // ../shared-contracts/dist/harness-session-import.js
15488
15491
  var HARNESS_SESSION_IMPORT_ID_MAX_LENGTH = 1024;
15489
15492
  var HARNESS_SESSION_IMPORT_CWD_MAX_LENGTH = 16384;
@@ -16291,6 +16294,13 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16291
16294
  ["path", { d: "M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6" }]
16292
16295
  ];
16293
16296
 
16297
+ // ../../node_modules/lucide/dist/esm/icons/ellipsis.mjs
16298
+ var Ellipsis = [
16299
+ ["circle", { cx: "12", cy: "12", r: "1" }],
16300
+ ["circle", { cx: "19", cy: "12", r: "1" }],
16301
+ ["circle", { cx: "5", cy: "12", r: "1" }]
16302
+ ];
16303
+
16294
16304
  // ../../node_modules/lucide/dist/esm/icons/folder-input.mjs
16295
16305
  var FolderInput = [
16296
16306
  [
@@ -16504,7 +16514,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16504
16514
  "trash",
16505
16515
  "terminal",
16506
16516
  "search",
16507
- "help"
16517
+ "help",
16518
+ "ellipsis"
16508
16519
  ];
16509
16520
  var iconNodes = {
16510
16521
  settings: Settings,
@@ -16539,7 +16550,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16539
16550
  trash: Trash2,
16540
16551
  terminal: Terminal,
16541
16552
  search: Search,
16542
- help: CircleQuestionMark
16553
+ help: CircleQuestionMark,
16554
+ ellipsis: Ellipsis
16543
16555
  };
16544
16556
  function isRendererSettingsIconName(value) {
16545
16557
  return RENDERER_SETTINGS_ICON_NAMES.includes(value);
@@ -17357,6 +17369,9 @@ ${error51.stderrTail}`] : []
17357
17369
  sectionsLabel: "Settings sections",
17358
17370
  generalSection: "General",
17359
17371
  otherSection: "Other",
17372
+ appearanceDescription: "Adjust how thinking text is displayed in the conversation.",
17373
+ reasoningSoftWrapTitle: "Wrap thinking text",
17374
+ reasoningSoftWrapDescription: "Wrap long thinking lines in the transcript. Ordinary shell output is unaffected. Off by default.",
17360
17375
  pageUnavailable: "Page unavailable",
17361
17376
  inDevelopment: "In development",
17362
17377
  notAvailable: "Not available",
@@ -17393,26 +17408,26 @@ ${error51.stderrTail}`] : []
17393
17408
  sessionImportRetryOpen: "Try opening again",
17394
17409
  sessionImportRetrying: "Opening...",
17395
17410
  connectionsDescription: "View runtime status by Host. Select an item to inspect details or complete its setup.",
17396
- accountsDescription: "Choose the default account for new Codex tasks and check account limits.",
17397
- accountTaskHint: "Existing tasks keep the account they were created with. Multi-account is currently available for Codex.",
17398
- accountConnected: "Connected accounts",
17399
- accountDefaultBadge: "Default",
17400
- accountAdd: "Add Account",
17411
+ accountsDescription: "View accounts and limits across Agents, and manage your Codex default account.",
17412
+ accountConnected: "Accounts",
17413
+ accountDefaultBadge: "Codex default",
17414
+ accountAdd: "Add Codex account",
17401
17415
  accountColumnAccount: "Account",
17402
- accountColumnUsage: "Limits",
17403
- accountColumnActions: "Actions",
17404
- accountSearch: "Search accounts\u2026",
17405
- accountEmpty: "No accounts yet. Add an account to get started.",
17416
+ accountColumnActions: "Manage",
17417
+ accountSearch: "Search accounts or Agents\u2026",
17418
+ accountEmpty: "No accounts yet. Add a Codex account or sign in to an Agent in its native client.",
17406
17419
  accountNoMatches: "No matching accounts.",
17407
- accountLoginHelp: "Before signing in",
17408
- harnessAccountsTitle: "Other detected accounts",
17420
+ accountNativeManaged: "Native management",
17421
+ accountNativeManagementHint: "This account comes from {harness}'s native authentication. This page only displays identity and limits; manage sign-in, sign-out and switching in the native client.",
17422
+ accountMore: "Codex account actions",
17423
+ accountDetailsClose: "Close account details",
17424
+ accountDefaultHint: "Use as the default for new Codex tasks only",
17409
17425
  accountCreditsRemaining: "Remaining",
17410
17426
  accountCreditsLoading: "Loading limits\u2026",
17411
17427
  accountCreditsEmpty: "No limit data available",
17412
17428
  accountCreditsFailed: "Could not load limits",
17413
17429
  accountCreditsRetry: "Retry",
17414
17430
  accountCreditsRefresh: "Refresh limits",
17415
- accountResetCreditsUnknown: "No reset card data available",
17416
17431
  accountCreateFailed: "Could not add the Account.",
17417
17432
  accountDelete: "Delete",
17418
17433
  accountDeleteConfirm: "Delete this Account and its local data? This cannot be undone.",
@@ -17422,7 +17437,6 @@ ${error51.stderrTail}`] : []
17422
17437
  accountUse: "Set as default",
17423
17438
  accountSignIn: "Sign in",
17424
17439
  accountSigningIn: "Starting device sign-in...",
17425
- accountDeviceCodePrerequisite: "Before signing in, enable \u201CEnable device code authorization for Codex\u201D in Web Settings \u2192 Account security & sign-in.",
17426
17440
  accountVerificationDescription: "Open the verification page and enter this one-time code:",
17427
17441
  accountCopyCode: "Copy code",
17428
17442
  accountCopied: "Copied",
@@ -17431,7 +17445,10 @@ ${error51.stderrTail}`] : []
17431
17445
  accountLoginFailed: "Sign-in failed.",
17432
17446
  accountLoadFailed: "Could not load Codex Accounts.",
17433
17447
  accountCreditsUsed: "Used",
17434
- accountCreditsReset: "reset",
17448
+ accountCreditsResetAt: "Quota resets: {time}",
17449
+ accountCreditsResetIn: "Quota resets in {time}",
17450
+ accountCreditsResetPending: "Awaiting refresh",
17451
+ accountCreditsResetPendingHint: "The reset time has passed; refresh to check the actual quota.",
17435
17452
  accountCreditsPeriodWeekly: "Weekly limit",
17436
17453
  accountCreditsPeriodMonthly: "Monthly limit",
17437
17454
  accountCreditsPeriodFiveHour: "5-hour",
@@ -17547,6 +17564,7 @@ ${error51.stderrTail}`] : []
17547
17564
  aboutRepository: "Open-source repository",
17548
17565
  pageLabels: Object.freeze({
17549
17566
  connections: "Connections",
17567
+ appearance: "Appearance",
17550
17568
  accounts: "Accounts",
17551
17569
  "session-import": "Session Import",
17552
17570
  updates: "Updates",
@@ -17561,6 +17579,9 @@ ${error51.stderrTail}`] : []
17561
17579
  sectionsLabel: "\u8BBE\u7F6E\u5206\u7C7B",
17562
17580
  generalSection: "\u901A\u7528",
17563
17581
  otherSection: "\u5176\u4ED6",
17582
+ appearanceDescription: "\u8C03\u6574\u4F1A\u8BDD\u4E2D\u601D\u8003\u6587\u672C\u7684\u663E\u793A\u65B9\u5F0F\u3002",
17583
+ reasoningSoftWrapTitle: "\u6362\u884C\u663E\u793A\u601D\u8003\u6587\u672C",
17584
+ reasoningSoftWrapDescription: "\u8BA9\u601D\u8003\u5757\u4E2D\u7684\u957F\u884C\u81EA\u52A8\u6362\u884C\u3002\u666E\u901A Shell \u8F93\u51FA\u4E0D\u53D7\u5F71\u54CD\u3002\u9ED8\u8BA4\u5173\u95ED\u3002",
17564
17585
  pageUnavailable: "\u9875\u9762\u4E0D\u53EF\u7528",
17565
17586
  inDevelopment: "\u5F00\u53D1\u4E2D",
17566
17587
  notAvailable: "\u6682\u4E0D\u53EF\u7528",
@@ -17597,26 +17618,26 @@ ${error51.stderrTail}`] : []
17597
17618
  sessionImportRetryOpen: "\u91CD\u8BD5\u6253\u5F00",
17598
17619
  sessionImportRetrying: "\u6B63\u5728\u6253\u5F00\u2026\u2026",
17599
17620
  connectionsDescription: "\u6309 Host \u67E5\u770B\u8FD0\u884C\u65F6\u72B6\u6001\u3002\u9009\u62E9\u4E00\u9879\uFF0C\u5728\u53F3\u4FA7\u68C0\u67E5\u8BE6\u60C5\u6216\u5B8C\u6210\u914D\u7F6E\u3002",
17600
- accountsDescription: "\u9009\u62E9\u65B0\u5EFA Codex \u4EFB\u52A1\u7684\u9ED8\u8BA4\u8D26\u53F7\uFF0C\u5E76\u67E5\u770B\u5404\u8D26\u53F7\u989D\u5EA6\u3002",
17601
- accountTaskHint: "\u5207\u6362\u9ED8\u8BA4\u8D26\u53F7\u4E0D\u4F1A\u5F71\u54CD\u5DF2\u5F00\u59CB\u7684\u4EFB\u52A1\u3002\u76EE\u524D\u4EC5\u652F\u6301 Codex \u591A\u8D26\u53F7\u3002",
17602
- accountConnected: "\u5DF2\u8FDE\u63A5\u8D26\u53F7",
17603
- accountDefaultBadge: "\u9ED8\u8BA4",
17604
- accountAdd: "\u6DFB\u52A0\u8D26\u53F7",
17621
+ accountsDescription: "\u67E5\u770B\u5404 Agent \u7684\u8D26\u53F7\u4E0E\u989D\u5EA6\uFF0C\u7BA1\u7406 Codex \u9ED8\u8BA4\u8D26\u53F7\u3002",
17622
+ accountConnected: "\u8D26\u53F7",
17623
+ accountDefaultBadge: "Codex \u9ED8\u8BA4",
17624
+ accountAdd: "\u6DFB\u52A0 Codex \u8D26\u53F7",
17605
17625
  accountColumnAccount: "\u8D26\u53F7",
17606
- accountColumnUsage: "\u989D\u5EA6",
17607
- accountColumnActions: "\u64CD\u4F5C",
17608
- accountSearch: "\u641C\u7D22\u8D26\u53F7\u2026",
17609
- accountEmpty: "\u8FD8\u6CA1\u6709\u8D26\u53F7\uFF0C\u6DFB\u52A0\u4E00\u4E2A\u8D26\u53F7\u5373\u53EF\u5F00\u59CB\u3002",
17626
+ accountColumnActions: "\u7BA1\u7406",
17627
+ accountSearch: "\u641C\u7D22\u8D26\u53F7\u6216 Agent\u2026",
17628
+ accountEmpty: "\u8FD8\u6CA1\u6709\u8D26\u53F7\uFF0C\u53EF\u6DFB\u52A0 Codex \u8D26\u53F7\u6216\u5728\u5176\u4ED6 Agent \u7684\u539F\u751F\u5BA2\u6237\u7AEF\u767B\u5F55\u3002",
17610
17629
  accountNoMatches: "\u6CA1\u6709\u5339\u914D\u7684\u8D26\u53F7\u3002",
17611
- accountLoginHelp: "\u767B\u5F55\u524D\u987B\u77E5",
17612
- harnessAccountsTitle: "\u5176\u4ED6\u5DF2\u8BC6\u522B\u8D26\u53F7",
17630
+ accountNativeManaged: "\u539F\u751F\u7BA1\u7406",
17631
+ accountNativeManagementHint: "\u6B64\u8D26\u53F7\u6765\u81EA {harness} \u7684\u539F\u751F\u767B\u5F55\u3002\u8FD9\u91CC\u53EA\u8BFB\u5C55\u793A\u8EAB\u4EFD\u4E0E\u989D\u5EA6\uFF1B\u767B\u5F55\u3001\u9000\u51FA\u548C\u5207\u6362\u8BF7\u5728\u5176\u539F\u751F\u5BA2\u6237\u7AEF\u4E2D\u5B8C\u6210\u3002",
17632
+ accountMore: "Codex \u8D26\u53F7\u64CD\u4F5C",
17633
+ accountDetailsClose: "\u5173\u95ED\u8D26\u53F7\u8BE6\u60C5",
17634
+ accountDefaultHint: "\u4EC5\u8BBE\u4E3A\u65B0 Codex \u4EFB\u52A1\u7684\u9ED8\u8BA4\u8D26\u53F7",
17613
17635
  accountCreditsRemaining: "\u5269\u4F59",
17614
17636
  accountCreditsLoading: "\u6B63\u5728\u8BFB\u53D6\u989D\u5EA6\u2026",
17615
17637
  accountCreditsEmpty: "\u6682\u65E0\u989D\u5EA6\u6570\u636E",
17616
17638
  accountCreditsFailed: "\u989D\u5EA6\u8BFB\u53D6\u5931\u8D25",
17617
17639
  accountCreditsRetry: "\u91CD\u8BD5",
17618
17640
  accountCreditsRefresh: "\u5237\u65B0\u989D\u5EA6",
17619
- accountResetCreditsUnknown: "\u6682\u65E0\u91CD\u7F6E\u5361\u6570\u636E",
17620
17641
  accountCreateFailed: "\u6DFB\u52A0\u8D26\u53F7\u5931\u8D25\u3002",
17621
17642
  accountDelete: "\u5220\u9664",
17622
17643
  accountDeleteConfirm: "\u5220\u9664\u6B64\u8D26\u53F7\u53CA\u5176\u672C\u5730\u6570\u636E\uFF1F\u6B64\u64CD\u4F5C\u65E0\u6CD5\u64A4\u9500\u3002",
@@ -17626,7 +17647,6 @@ ${error51.stderrTail}`] : []
17626
17647
  accountUse: "\u8BBE\u4E3A\u9ED8\u8BA4",
17627
17648
  accountSignIn: "\u767B\u5F55",
17628
17649
  accountSigningIn: "\u6B63\u5728\u542F\u52A8\u8BBE\u5907\u767B\u5F55...",
17629
- accountDeviceCodePrerequisite: "\u767B\u5F55\u524D\uFF0C\u8BF7\u5148\u5728 Web \u7AEF\u7684\u201C\u8BBE\u7F6E \u2192 \u8D26\u53F7\u5B89\u5168\u4E0E\u767B\u5F55\u201D\u4E2D\u5F00\u542F\u201C\u4E3A Codex \u542F\u7528\u8BBE\u5907\u4EE3\u7801\u6388\u6743\u201D\u3002",
17630
17650
  accountVerificationDescription: "\u6253\u5F00\u9A8C\u8BC1\u9875\u9762\u5E76\u8F93\u5165\u4EE5\u4E0B\u4E00\u6B21\u6027\u4EE3\u7801\uFF1A",
17631
17651
  accountCopyCode: "\u590D\u5236\u4EE3\u7801",
17632
17652
  accountCopied: "\u5DF2\u590D\u5236",
@@ -17635,7 +17655,10 @@ ${error51.stderrTail}`] : []
17635
17655
  accountLoginFailed: "\u767B\u5F55\u5931\u8D25\u3002",
17636
17656
  accountLoadFailed: "\u65E0\u6CD5\u52A0\u8F7D Codex \u8D26\u53F7\u3002",
17637
17657
  accountCreditsUsed: "\u5DF2\u7528",
17638
- accountCreditsReset: "\u91CD\u7F6E",
17658
+ accountCreditsResetAt: "\u989D\u5EA6\u91CD\u7F6E\u65F6\u95F4\uFF1A{time}",
17659
+ accountCreditsResetIn: "\u8DDD\u91CD\u7F6E\u8FD8\u6709 {time}",
17660
+ accountCreditsResetPending: "\u5F85\u5237\u65B0",
17661
+ accountCreditsResetPendingHint: "\u91CD\u7F6E\u65F6\u95F4\u5DF2\u5230\uFF0C\u8BF7\u5237\u65B0\u4EE5\u786E\u8BA4\u5B9E\u9645\u989D\u5EA6\u3002",
17639
17662
  accountCreditsPeriodWeekly: "\u5468\u989D\u5EA6",
17640
17663
  accountCreditsPeriodMonthly: "\u6708\u989D\u5EA6",
17641
17664
  accountCreditsPeriodFiveHour: "5 \u5C0F\u65F6",
@@ -17751,6 +17774,7 @@ ${error51.stderrTail}`] : []
17751
17774
  aboutRepository: "\u5F00\u6E90\u4ED3\u5E93",
17752
17775
  pageLabels: Object.freeze({
17753
17776
  connections: "\u8FDE\u63A5",
17777
+ appearance: "\u5916\u89C2",
17754
17778
  accounts: "\u8D26\u53F7",
17755
17779
  "session-import": "\u4F1A\u8BDD\u5BFC\u5165",
17756
17780
  updates: "\u66F4\u65B0",
@@ -21035,6 +21059,51 @@ ${error51.stderrTail}`] : []
21035
21059
  control.picker.dispose();
21036
21060
  }
21037
21061
 
21062
+ // src/renderer-transcript-dom.ts
21063
+ var TRANSCRIPT_TEXT_BODY_SELECTOR = '[data-testid="exec-shell-body"]';
21064
+ var REASONING_SOFT_WRAP_STORAGE_KEY = "codexhost.reasoning-soft-wrap.v1";
21065
+ var REASONING_SOFT_WRAP_CHANGE_EVENT = "codexhost:reasoning-soft-wrap-changed";
21066
+ function readReasoningTranscriptSoftWrap(ownerWindow) {
21067
+ return ownerWindow.localStorage.getItem(REASONING_SOFT_WRAP_STORAGE_KEY) === "true";
21068
+ }
21069
+ function setReasoningTranscriptSoftWrap(ownerWindow, enabled) {
21070
+ ownerWindow.localStorage.setItem(REASONING_SOFT_WRAP_STORAGE_KEY, String(enabled));
21071
+ ownerWindow.dispatchEvent(new Event(REASONING_SOFT_WRAP_CHANGE_EVENT));
21072
+ }
21073
+ function installReasoningTranscriptSoftWrap(ownerDocument) {
21074
+ const ownerWindow = ownerDocument.defaultView;
21075
+ if (!ownerWindow) return () => {
21076
+ };
21077
+ const style = ownerDocument.createElement("style");
21078
+ style.setAttribute("data-codexhost-reasoning-soft-wrap", "true");
21079
+ const body = `${TRANSCRIPT_TEXT_BODY_SELECTOR}:has([aria-label="$ ${REASONING_TRANSCRIPT_COMMAND}"])`;
21080
+ style.textContent = `
21081
+ ${body} .whitespace-pre {
21082
+ white-space: pre-wrap;
21083
+ overflow-wrap: anywhere;
21084
+ }
21085
+ ${body} .whitespace-pre > .w-max {
21086
+ width: 100%;
21087
+ min-width: 0;
21088
+ }
21089
+ `;
21090
+ ownerDocument.head.append(style);
21091
+ const refresh = () => {
21092
+ style.disabled = !readReasoningTranscriptSoftWrap(ownerWindow);
21093
+ };
21094
+ const onStorage = (event) => {
21095
+ if (event.key === REASONING_SOFT_WRAP_STORAGE_KEY || event.key === null) refresh();
21096
+ };
21097
+ refresh();
21098
+ ownerWindow.addEventListener(REASONING_SOFT_WRAP_CHANGE_EVENT, refresh);
21099
+ ownerWindow.addEventListener("storage", onStorage);
21100
+ return () => {
21101
+ ownerWindow.removeEventListener(REASONING_SOFT_WRAP_CHANGE_EVENT, refresh);
21102
+ ownerWindow.removeEventListener("storage", onStorage);
21103
+ style.remove();
21104
+ };
21105
+ }
21106
+
21038
21107
  // src/renderer-codex-account-state.ts
21039
21108
  function resolveCodexAccountSelection(accounts, overrideAccountId) {
21040
21109
  const activeAccountId = accounts.find((account) => account.active)?.accountId ?? null;
@@ -23871,6 +23940,50 @@ ${error51.stderrTail}`] : []
23871
23940
  });
23872
23941
  }
23873
23942
 
23943
+ // src/settings/appearance-page.ts
23944
+ function createAppearanceSettingsPage(messages) {
23945
+ return Object.freeze({
23946
+ id: "appearance",
23947
+ label: messages.pageLabels.appearance,
23948
+ icon: "settings",
23949
+ mount(context) {
23950
+ const document2 = context.content.ownerDocument;
23951
+ const ownerWindow = document2.defaultView;
23952
+ if (!ownerWindow) return;
23953
+ const heading = document2.createElement("div");
23954
+ heading.className = "settings-section-label";
23955
+ heading.textContent = messages.pageLabels.appearance;
23956
+ const description = document2.createElement("p");
23957
+ description.className = "settings-page-description";
23958
+ description.textContent = messages.appearanceDescription;
23959
+ const row = document2.createElement("label");
23960
+ row.className = "settings-preference-row";
23961
+ const copy = document2.createElement("span");
23962
+ copy.className = "settings-preference-row__copy";
23963
+ const title = document2.createElement("strong");
23964
+ title.textContent = messages.reasoningSoftWrapTitle;
23965
+ const detail = document2.createElement("span");
23966
+ detail.textContent = messages.reasoningSoftWrapDescription;
23967
+ copy.append(title, detail);
23968
+ const checkbox = document2.createElement("input");
23969
+ checkbox.type = "checkbox";
23970
+ checkbox.className = "settings-preference-checkbox";
23971
+ checkbox.checked = readReasoningTranscriptSoftWrap(ownerWindow);
23972
+ checkbox.setAttribute("aria-label", messages.reasoningSoftWrapTitle);
23973
+ checkbox.addEventListener("change", () => {
23974
+ setReasoningTranscriptSoftWrap(ownerWindow, checkbox.checked);
23975
+ });
23976
+ const sync = () => {
23977
+ checkbox.checked = readReasoningTranscriptSoftWrap(ownerWindow);
23978
+ };
23979
+ ownerWindow.addEventListener(REASONING_SOFT_WRAP_CHANGE_EVENT, sync);
23980
+ row.append(copy, checkbox);
23981
+ context.content.append(heading, description, row);
23982
+ return () => ownerWindow.removeEventListener(REASONING_SOFT_WRAP_CHANGE_EVENT, sync);
23983
+ }
23984
+ });
23985
+ }
23986
+
23874
23987
  // src/settings/release-notes.ts
23875
23988
  var HEADING_PATTERN = /^(#{1,6})[ \t]+(.+?)\s*$/u;
23876
23989
  var BLOCKQUOTE_PATTERN = /^>[ \t]?(.*?)\s*$/u;
@@ -24046,6 +24159,140 @@ ${error51.stderrTail}`] : []
24046
24159
  }
24047
24160
  }
24048
24161
 
24162
+ // src/settings/accounts-details.ts
24163
+ function createAccountDetails(document2, messages, input) {
24164
+ const root = document2.createElement("div");
24165
+ root.className = "settings-account-details";
24166
+ const trigger = document2.createElement("button");
24167
+ trigger.type = "button";
24168
+ trigger.className = "settings-icon-button";
24169
+ trigger.title = input.triggerLabel ?? input.label;
24170
+ trigger.disabled = input.disabled ?? false;
24171
+ trigger.dataset.accountFocus = input.focusKey;
24172
+ trigger.setAttribute("aria-label", trigger.title);
24173
+ trigger.setAttribute("aria-haspopup", "dialog");
24174
+ trigger.append(createRendererSettingsIcon(input.icon, 16));
24175
+ const dialog = document2.createElement("dialog");
24176
+ dialog.className = "settings-account-dialog";
24177
+ dialog.id = `settings-account-${input.focusKey}-dialog`;
24178
+ dialog.setAttribute("aria-label", input.label);
24179
+ trigger.setAttribute("aria-controls", dialog.id);
24180
+ const heading = document2.createElement("h2");
24181
+ heading.textContent = input.label;
24182
+ const description = document2.createElement("p");
24183
+ description.textContent = input.description;
24184
+ description.id = `${dialog.id}-description`;
24185
+ dialog.setAttribute("aria-describedby", description.id);
24186
+ const close = document2.createElement("button");
24187
+ close.type = "button";
24188
+ close.className = "settings-icon-button settings-account-dialog__close";
24189
+ close.dataset.accountFocus = `${input.focusKey}:close`;
24190
+ close.setAttribute("aria-label", messages.accountDetailsClose);
24191
+ close.append(createRendererSettingsIcon("close", 16));
24192
+ close.addEventListener("click", () => dialog.close());
24193
+ dialog.addEventListener("close", () => {
24194
+ if (trigger.isConnected && !trigger.disabled) trigger.focus({ preventScroll: true });
24195
+ });
24196
+ dialog.addEventListener(
24197
+ "click",
24198
+ (event) => {
24199
+ if (input.actions.some((action) => action.contains(event.target))) {
24200
+ trigger.focus({ preventScroll: true });
24201
+ dialog.close();
24202
+ }
24203
+ },
24204
+ { capture: true }
24205
+ );
24206
+ const actions = document2.createElement("div");
24207
+ actions.className = "settings-account-dialog__actions";
24208
+ actions.append(...input.actions);
24209
+ dialog.append(close, heading, description, actions);
24210
+ trigger.addEventListener("click", () => dialog.showModal());
24211
+ root.append(trigger, dialog);
24212
+ return root;
24213
+ }
24214
+
24215
+ // src/settings/accounts-reset-time.ts
24216
+ function formatAccountResetCountdown(value, messages, now = Date.now()) {
24217
+ const timestamp = Date.parse(value);
24218
+ if (!Number.isFinite(timestamp)) return null;
24219
+ const minutes = Math.max(0, Math.ceil((timestamp - now) / 6e4));
24220
+ if (minutes === 0) {
24221
+ return {
24222
+ text: messages.accountCreditsResetPending,
24223
+ description: messages.accountCreditsResetPendingHint
24224
+ };
24225
+ }
24226
+ const chinese = messages.locale === "zh-CN";
24227
+ const parts = [
24228
+ { value: Math.floor(minutes / 1440), unit: "d", label: chinese ? "\u5929" : " days" },
24229
+ { value: Math.floor(minutes % 1440 / 60), unit: "h", label: chinese ? "\u5C0F\u65F6" : " hours" },
24230
+ { value: minutes % 60, unit: "m", label: chinese ? "\u5206\u949F" : " minutes" }
24231
+ ].filter((part, index) => part.value > 0 && (minutes < 1440 || index < 2));
24232
+ return {
24233
+ text: parts.map((part) => `${part.value}${part.unit}`).join(""),
24234
+ description: messages.accountCreditsResetIn.replace(
24235
+ "{time}",
24236
+ parts.map(
24237
+ (part) => `${part.value}${!chinese && part.value === 1 ? part.label.slice(0, -1) : part.label}`
24238
+ ).join(chinese ? "" : " ")
24239
+ )
24240
+ };
24241
+ }
24242
+ function updateCountdown(element, messages) {
24243
+ const value = formatAccountResetCountdown(element.dataset.resetsAt ?? "", messages);
24244
+ if (!value) return;
24245
+ element.textContent = value.text;
24246
+ element.title = value.description;
24247
+ element.setAttribute("aria-label", value.description);
24248
+ }
24249
+ function renderAccountResetTime(document2, value, messages) {
24250
+ const date5 = new Date(value);
24251
+ if (!Number.isFinite(date5.getTime())) return null;
24252
+ const countdown = document2.createElement("span");
24253
+ countdown.className = "settings-account-usage__countdown";
24254
+ countdown.dataset.resetsAt = date5.toISOString();
24255
+ updateCountdown(countdown, messages);
24256
+ const timestamp = document2.createElement("time");
24257
+ timestamp.className = "settings-account-usage__sub";
24258
+ timestamp.dateTime = date5.toISOString();
24259
+ const pad = (number4) => String(number4).padStart(2, "0");
24260
+ timestamp.textContent = `${pad(date5.getMonth() + 1)}/${pad(date5.getDate())} ${pad(date5.getHours())}:${pad(date5.getMinutes())}`;
24261
+ timestamp.title = messages.accountCreditsResetAt.replace(
24262
+ "{time}",
24263
+ date5.toLocaleString(messages.locale, {
24264
+ year: "numeric",
24265
+ month: "long",
24266
+ day: "numeric",
24267
+ hour: "2-digit",
24268
+ minute: "2-digit",
24269
+ hour12: false,
24270
+ timeZoneName: "short"
24271
+ })
24272
+ );
24273
+ timestamp.setAttribute("aria-label", timestamp.title);
24274
+ return { countdown, timestamp };
24275
+ }
24276
+ function mountAccountResetCountdowns(list, messages, signal) {
24277
+ const window2 = list.ownerDocument.defaultView;
24278
+ if (!window2 || signal.aborted) return () => void 0;
24279
+ const refresh = () => {
24280
+ if (signal.aborted) return;
24281
+ for (const element of list.querySelectorAll("[data-resets-at]")) {
24282
+ updateCountdown(element, messages);
24283
+ }
24284
+ };
24285
+ const timer = window2.setInterval(refresh, 6e4);
24286
+ window2.addEventListener("focus", refresh);
24287
+ const stop = () => {
24288
+ window2.clearInterval(timer);
24289
+ window2.removeEventListener("focus", refresh);
24290
+ signal.removeEventListener("abort", stop);
24291
+ };
24292
+ signal.addEventListener("abort", stop, { once: true });
24293
+ return stop;
24294
+ }
24295
+
24049
24296
  // src/settings/accounts-usage.ts
24050
24297
  function creditsPeriodLabel2(periodType, messages) {
24051
24298
  if (periodType === "weekly") return messages.accountCreditsPeriodWeekly;
@@ -24080,17 +24327,80 @@ ${error51.stderrTail}`] : []
24080
24327
  function resetCreditDetailLine(index, expiresAt, messages, now = /* @__PURE__ */ new Date()) {
24081
24328
  return messages.accountResetCreditsCardExpiry.replace("{index}", String(index)).replace("{time}", formatAccountCreditsReset(expiresAt, messages.locale, now));
24082
24329
  }
24330
+ function accountUsageColumnLabel(period, display, messages) {
24331
+ const mode = display === "remaining" ? messages.accountCreditsRemaining : messages.accountCreditsUsed;
24332
+ return `${creditsPeriodLabel2(period, messages)}${messages.locale === "zh-CN" ? "" : " "}${mode}`;
24333
+ }
24334
+ function splitUsageWindows(credits, messages) {
24335
+ const columns = {};
24336
+ const additional = [];
24337
+ const primary = {
24338
+ label: credits.label ?? creditsPeriodLabel2(credits.periodType, messages),
24339
+ usedPercent: credits.usedPercent,
24340
+ resetsAt: credits.resetsAt
24341
+ };
24342
+ if (!credits.label && credits.periodType === "five_hour") columns.five_hour = primary;
24343
+ else if (!credits.label && ["seven_day", "weekly"].includes(credits.periodType))
24344
+ columns.seven_day = { ...primary, label: messages.accountCreditsPeriodSevenDay };
24345
+ else additional.push(primary);
24346
+ for (const product of credits.productUsage ?? []) {
24347
+ const window2 = {
24348
+ label: creditsProductLabel(product.product, messages),
24349
+ usedPercent: product.usagePercent,
24350
+ resetsAt: product.resetsAt
24351
+ };
24352
+ const period = product.product === "7-day window" ? "seven_day" : product.product === "5-hour window" ? "five_hour" : null;
24353
+ if (period && !columns[period])
24354
+ columns[period] = { ...window2, label: creditsPeriodLabel2(period, messages) };
24355
+ else additional.push(window2);
24356
+ }
24357
+ return { columns, additional };
24358
+ }
24359
+ function renderUsageWindow(document2, window2, messages, display) {
24360
+ const meter = document2.createElement("div");
24361
+ meter.className = "settings-account-usage__meter";
24362
+ const label = document2.createElement("span");
24363
+ label.className = "settings-account-usage__title";
24364
+ label.textContent = window2.label;
24365
+ label.title = window2.label;
24366
+ const value = display === "remaining" ? 100 - window2.usedPercent : window2.usedPercent;
24367
+ const valueLabel = display === "remaining" ? messages.accountCreditsRemaining : messages.accountCreditsUsed;
24368
+ const tone = rendererCreditsTone(window2.usedPercent);
24369
+ const percent = document2.createElement("div");
24370
+ percent.className = `settings-account-usage__percent settings-account-usage__percent--${tone}`;
24371
+ const number4 = document2.createElement("span");
24372
+ number4.textContent = formatRendererCreditsPercent(value);
24373
+ const reset = window2.resetsAt ? renderAccountResetTime(document2, window2.resetsAt, messages) : null;
24374
+ if (reset) percent.append(reset.countdown);
24375
+ percent.append(number4);
24376
+ const bar = document2.createElement("div");
24377
+ bar.className = `settings-account-usage__bar settings-account-usage__bar--${tone}`;
24378
+ bar.setAttribute("role", "meter");
24379
+ bar.setAttribute("aria-label", `${window2.label} \xB7 ${valueLabel}`);
24380
+ bar.setAttribute("aria-valuemin", "0");
24381
+ bar.setAttribute("aria-valuemax", "100");
24382
+ bar.setAttribute("aria-valuenow", String(value));
24383
+ const fill = document2.createElement("span");
24384
+ fill.style.width = `${Math.min(100, Math.max(0, value))}%`;
24385
+ bar.append(fill);
24386
+ meter.append(label, percent, bar);
24387
+ if (reset) meter.append(reset.timestamp);
24388
+ return meter;
24389
+ }
24083
24390
  function renderAccountUsage(document2, state, messages, display, onRetry) {
24084
- if (!state) return null;
24085
- const usage = document2.createElement("div");
24086
- usage.className = "settings-account-usage";
24087
- if (state.status !== "ready") {
24391
+ if (state?.status !== "ready") {
24392
+ const cell = document2.createElement("td");
24393
+ cell.colSpan = 2;
24394
+ cell.className = "settings-account-usage-cell settings-account-usage-cell--message";
24395
+ const usage = document2.createElement("div");
24396
+ usage.className = "settings-account-usage";
24088
24397
  const message = document2.createElement("span");
24089
24398
  message.className = "settings-account-usage__message";
24090
- message.textContent = state.status === "loading" ? messages.accountCreditsLoading : state.status === "error" ? messages.accountCreditsFailed : messages.accountCreditsEmpty;
24399
+ message.textContent = !state ? "\u2014" : state.status === "loading" ? messages.accountCreditsLoading : state.status === "error" ? messages.accountCreditsFailed : messages.accountCreditsEmpty;
24400
+ if (!state) message.title = messages.accountCreditsEmpty;
24091
24401
  usage.append(message);
24092
- if (state.status === "loading") usage.setAttribute("aria-busy", "true");
24093
- if (state.status === "error") {
24402
+ if (state?.status === "loading") usage.setAttribute("aria-busy", "true");
24403
+ if (state?.status === "error") {
24094
24404
  const retry = document2.createElement("button");
24095
24405
  retry.type = "button";
24096
24406
  retry.className = "settings-command-button settings-command-button--secondary";
@@ -24098,59 +24408,35 @@ ${error51.stderrTail}`] : []
24098
24408
  retry.addEventListener("click", onRetry);
24099
24409
  usage.append(retry);
24100
24410
  }
24101
- return usage;
24411
+ cell.append(usage);
24412
+ return { cells: [cell], additional: null };
24102
24413
  }
24103
- const credits = state.credits;
24104
- const windows = [
24105
- {
24106
- label: credits.label ?? creditsPeriodLabel2(credits.periodType, messages),
24107
- usedPercent: credits.usedPercent,
24108
- resetsAt: credits.resetsAt
24109
- },
24110
- ...(credits.productUsage ?? []).map((product) => ({
24111
- label: creditsProductLabel(product.product, messages),
24112
- usedPercent: product.usagePercent,
24113
- resetsAt: product.resetsAt
24114
- }))
24115
- ];
24116
- for (const window2 of windows) {
24117
- const meter = document2.createElement("div");
24118
- meter.className = "settings-account-usage__meter";
24119
- const label = document2.createElement("span");
24120
- label.className = "settings-account-usage__title";
24121
- label.textContent = window2.label;
24122
- label.title = window2.label;
24123
- const value = display === "remaining" ? 100 - window2.usedPercent : window2.usedPercent;
24124
- const valueLabel = display === "remaining" ? messages.accountCreditsRemaining : messages.accountCreditsUsed;
24125
- const tone = rendererCreditsTone(window2.usedPercent);
24126
- const bar = document2.createElement("div");
24127
- bar.className = `settings-account-usage__bar settings-account-usage__bar--${tone}`;
24128
- bar.setAttribute("role", "meter");
24129
- bar.setAttribute("aria-label", `${window2.label} \xB7 ${valueLabel}`);
24130
- bar.setAttribute("aria-valuemin", "0");
24131
- bar.setAttribute("aria-valuemax", "100");
24132
- bar.setAttribute("aria-valuenow", String(value));
24133
- const fill = document2.createElement("span");
24134
- fill.style.width = `${Math.min(100, Math.max(0, value))}%`;
24135
- bar.append(fill);
24136
- const percent = document2.createElement("span");
24137
- percent.className = `settings-account-usage__percent settings-account-usage__percent--${tone}`;
24138
- const prefix = document2.createElement("span");
24139
- prefix.textContent = valueLabel;
24140
- prefix.className = "settings-account-usage__value-label";
24141
- const number4 = document2.createElement("span");
24142
- number4.textContent = formatRendererCreditsPercent(value);
24143
- percent.append(prefix, number4);
24144
- meter.append(label, bar, percent);
24145
- if (window2.resetsAt) {
24146
- const reset = document2.createElement("span");
24147
- reset.className = "settings-account-usage__sub";
24148
- reset.textContent = `${formatAccountCreditsReset(window2.resetsAt, messages.locale)} ${messages.accountCreditsReset}`;
24149
- meter.append(reset);
24150
- }
24151
- usage.append(meter);
24152
- }
24153
- return usage;
24414
+ const { columns, additional } = splitUsageWindows(state.credits, messages);
24415
+ const cells = ["five_hour", "seven_day"].map((period) => {
24416
+ const cell = document2.createElement("td");
24417
+ cell.className = "settings-account-usage-cell";
24418
+ const window2 = columns[period];
24419
+ if (window2) cell.append(renderUsageWindow(document2, window2, messages, display));
24420
+ else {
24421
+ const missing = document2.createElement("div");
24422
+ missing.className = "settings-account-usage__missing";
24423
+ const label = document2.createElement("span");
24424
+ label.className = "settings-account-usage__title";
24425
+ label.textContent = creditsPeriodLabel2(period, messages);
24426
+ const dash = document2.createElement("span");
24427
+ dash.textContent = "\u2014";
24428
+ dash.setAttribute("aria-hidden", "true");
24429
+ missing.append(label, dash);
24430
+ cell.append(missing);
24431
+ }
24432
+ return cell;
24433
+ });
24434
+ if (!additional.length) return { cells, additional: null };
24435
+ const extra = document2.createElement("div");
24436
+ extra.className = "settings-account-extra-usage";
24437
+ for (const window2 of additional)
24438
+ extra.append(renderUsageWindow(document2, window2, messages, display));
24439
+ return { cells, additional: extra };
24154
24440
  }
24155
24441
  function renderAccountResetCredits(document2, credits, messages, options) {
24156
24442
  const resetCredits = credits.resetCredits;
@@ -24162,8 +24448,11 @@ ${error51.stderrTail}`] : []
24162
24448
  summary.title = messages.accountResetCreditsDetails;
24163
24449
  const count = document2.createElement("span");
24164
24450
  count.textContent = messages.locale === "zh-CN" ? `${resetCredits.availableCount} \u5F20` : String(resetCredits.availableCount);
24451
+ const label = document2.createElement("span");
24452
+ label.textContent = messages.accountResetCredits;
24165
24453
  summary.append(
24166
24454
  createRendererSettingsIcon("ticket", 16),
24455
+ label,
24167
24456
  count,
24168
24457
  createRendererSettingsIcon("chevron-right", 14)
24169
24458
  );
@@ -24233,6 +24522,8 @@ ${error51.stderrTail}`] : []
24233
24522
  return () => {
24234
24523
  const target = key ? list.querySelector(`[data-account-focus="${CSS.escape(key)}"]`) : null;
24235
24524
  if (target && !target.matches(":disabled")) {
24525
+ const dialog = target.closest("dialog");
24526
+ if (dialog && !dialog.open) dialog.showModal();
24236
24527
  target.focus({ preventScroll: true });
24237
24528
  return;
24238
24529
  }
@@ -24248,87 +24539,100 @@ ${error51.stderrTail}`] : []
24248
24539
  table.setAttribute("aria-label", messages.pageLabels.accounts);
24249
24540
  const head = document2.createElement("thead");
24250
24541
  const row = document2.createElement("tr");
24251
- for (const label of [
24252
- messages.accountColumnAccount,
24253
- messages.accountColumnUsage,
24254
- messages.accountResetCredits,
24255
- messages.accountColumnActions
24256
- ]) {
24542
+ const headers = Array.from({ length: 4 }, () => {
24257
24543
  const cell = document2.createElement("th");
24258
24544
  cell.scope = "col";
24259
- cell.textContent = label;
24260
24545
  row.append(cell);
24261
- }
24546
+ return cell;
24547
+ });
24548
+ const updateDisplay = (display) => {
24549
+ const labels = [
24550
+ messages.accountColumnAccount,
24551
+ accountUsageColumnLabel("five_hour", display, messages),
24552
+ accountUsageColumnLabel("seven_day", display, messages),
24553
+ messages.accountColumnActions
24554
+ ];
24555
+ headers.forEach((cell, index) => {
24556
+ cell.textContent = labels[index] ?? "";
24557
+ });
24558
+ };
24559
+ updateDisplay("remaining");
24262
24560
  head.append(row);
24263
24561
  const body = document2.createElement("tbody");
24264
24562
  table.append(head, body);
24265
- return { table, body };
24563
+ return { table, body, updateDisplay };
24266
24564
  }
24267
- function renderAccountRows(document2, account, messages, input) {
24268
- const row = document2.createElement("tr");
24269
- row.className = "settings-account-row";
24270
- row.dataset.accountId = account.accountId;
24271
- row.dataset.accountFocus = `${account.accountId}:row`;
24272
- row.tabIndex = -1;
24273
- const name = codexAccountDisplayName(account);
24274
- row.setAttribute("aria-label", name.full);
24275
- const personCell = document2.createElement("td");
24565
+ function createAccountPerson(document2, messages, input) {
24276
24566
  const person = document2.createElement("div");
24277
24567
  person.className = "settings-account-row__person";
24278
- const mark = document2.createElement("div");
24279
- mark.className = "settings-account-row__mark";
24280
- mark.setAttribute("aria-hidden", "true");
24281
- mark.append(createRendererSettingsIcon("terminal", 17));
24282
24568
  const identity = document2.createElement("div");
24283
24569
  identity.className = "settings-account-row__identity";
24284
- const title = document2.createElement("div");
24285
- title.className = "settings-account-title";
24286
- const local = document2.createElement("strong");
24287
- local.className = "settings-account-email";
24288
- local.textContent = name.local;
24289
- local.title = name.full;
24290
- title.append(local);
24291
- if (account.active) {
24292
- const badge = document2.createElement("span");
24293
- badge.className = "settings-account-active";
24294
- badge.textContent = messages.accountDefaultBadge;
24295
- title.append(badge);
24296
- }
24297
- identity.append(title);
24570
+ const title = document2.createElement("strong");
24571
+ title.className = "settings-account-email";
24572
+ title.textContent = input.name;
24573
+ title.title = input.name;
24574
+ title.translate = false;
24298
24575
  const metadata = document2.createElement("div");
24299
24576
  metadata.className = "settings-account-metadata";
24300
- if (name.domain) {
24301
- const domain2 = document2.createElement("span");
24302
- domain2.className = "settings-account-domain";
24303
- domain2.textContent = `@${name.domain}`;
24304
- metadata.append(domain2);
24305
- }
24306
- const planLabel = accountPlanLabel(account.planType);
24307
- if (planLabel) {
24308
- if (name.domain) {
24577
+ const agent = document2.createElement("span");
24578
+ agent.textContent = input.agent;
24579
+ agent.translate = false;
24580
+ if (input.name !== input.agent) metadata.append(agent);
24581
+ if (input.plan) {
24582
+ if (metadata.childElementCount) {
24309
24583
  const separator = document2.createElement("span");
24310
- separator.className = "settings-account-plan-separator";
24311
24584
  separator.textContent = "\xB7";
24312
24585
  separator.setAttribute("aria-hidden", "true");
24313
24586
  metadata.append(separator);
24314
24587
  }
24315
24588
  const plan = document2.createElement("span");
24316
- plan.className = account.planType === "pro" || account.planType === "prolite" ? "settings-account-plan settings-account-plan--highlighted" : "settings-account-plan";
24317
- plan.textContent = planLabel;
24589
+ plan.className = input.highlighted ? "settings-account-plan settings-account-plan--highlighted" : "settings-account-plan";
24590
+ plan.textContent = input.plan;
24591
+ plan.translate = false;
24318
24592
  metadata.append(plan);
24319
24593
  }
24320
- if (metadata.childElementCount > 0) identity.append(metadata);
24321
- person.append(mark, identity);
24322
- personCell.append(person);
24323
- const usageCell = document2.createElement("td");
24594
+ if (input.active) {
24595
+ const badge = document2.createElement("span");
24596
+ badge.className = "settings-account-active";
24597
+ badge.textContent = messages.accountDefaultBadge;
24598
+ badge.title = messages.accountDefaultHint;
24599
+ metadata.append(badge);
24600
+ }
24601
+ identity.append(title);
24602
+ if (metadata.childElementCount) identity.append(metadata);
24603
+ person.append(input.mark, identity);
24604
+ return person;
24605
+ }
24606
+ function renderAccountRows(document2, account, messages, input) {
24607
+ const row = document2.createElement("tr");
24608
+ row.className = "settings-account-row";
24609
+ row.dataset.accountId = account.accountId;
24610
+ row.dataset.accountFocus = `${account.accountId}:row`;
24611
+ row.tabIndex = -1;
24612
+ const name = codexAccountDisplayName(account);
24613
+ row.setAttribute("aria-label", name.full);
24614
+ const personCell = document2.createElement("td");
24615
+ personCell.className = "settings-account-person-cell";
24616
+ const mark = document2.createElement("div");
24617
+ mark.className = "settings-account-row__mark";
24618
+ mark.setAttribute("aria-hidden", "true");
24619
+ mark.append(createRendererSettingsIcon("terminal", 17));
24620
+ personCell.append(
24621
+ createAccountPerson(document2, messages, {
24622
+ name: name.full,
24623
+ agent: "Codex",
24624
+ plan: accountPlanLabel(account.planType),
24625
+ highlighted: account.planType === "pro" || account.planType === "prolite",
24626
+ active: account.active,
24627
+ mark
24628
+ })
24629
+ );
24324
24630
  const usage = renderAccountUsage(document2, input.usage, messages, input.display, input.onRetry);
24325
- if (usage) usageCell.append(usage);
24326
- const resetCell = document2.createElement("td");
24327
- const resetLabel2 = document2.createElement("span");
24328
- resetLabel2.className = "settings-account-mobile-label";
24329
- resetLabel2.textContent = messages.accountResetCredits;
24330
- resetCell.append(resetLabel2);
24631
+ if (usage.additional) personCell.append(usage.additional);
24331
24632
  const actionsCell = document2.createElement("td");
24633
+ actionsCell.className = "settings-account-management-cell";
24634
+ const management = document2.createElement("div");
24635
+ management.className = "settings-account-management";
24332
24636
  const actions = document2.createElement("div");
24333
24637
  actions.className = "settings-account-actions";
24334
24638
  if (!account.active) {
@@ -24336,6 +24640,7 @@ ${error51.stderrTail}`] : []
24336
24640
  activate.type = "button";
24337
24641
  activate.className = "settings-account-action";
24338
24642
  activate.textContent = messages.accountUse;
24643
+ activate.title = messages.accountDefaultHint;
24339
24644
  activate.dataset.accountFocus = `${account.accountId}:activate`;
24340
24645
  activate.disabled = input.actionsDisabled;
24341
24646
  activate.addEventListener("click", input.onActivate);
@@ -24351,30 +24656,45 @@ ${error51.stderrTail}`] : []
24351
24656
  signIn.addEventListener("click", input.onSignIn);
24352
24657
  actions.append(signIn);
24353
24658
  }
24659
+ const more = [];
24660
+ if (account.email && input.usage) {
24661
+ const refresh = document2.createElement("button");
24662
+ refresh.type = "button";
24663
+ refresh.className = "settings-account-action";
24664
+ refresh.textContent = messages.accountCreditsRefresh;
24665
+ refresh.dataset.accountFocus = `${account.accountId}:refresh`;
24666
+ refresh.disabled = input.actionsDisabled || input.usage.status === "loading";
24667
+ refresh.addEventListener("click", input.onRetry);
24668
+ more.push(refresh);
24669
+ }
24354
24670
  if (!account.isDefault) {
24355
24671
  const remove = document2.createElement("button");
24356
24672
  remove.type = "button";
24357
- remove.className = "settings-icon-button settings-account-delete";
24358
- remove.title = messages.accountDelete;
24673
+ remove.className = "settings-account-action settings-account-delete";
24674
+ remove.textContent = messages.accountDelete;
24359
24675
  remove.dataset.accountFocus = `${account.accountId}:delete`;
24360
24676
  remove.setAttribute("aria-label", `${messages.accountDelete}: ${name.full}`);
24361
24677
  remove.disabled = input.actionsDisabled;
24362
- remove.append(createRendererSettingsIcon("trash", 16));
24363
24678
  remove.addEventListener("click", input.onDelete);
24364
- actions.append(remove);
24365
- }
24366
- actionsCell.append(actions);
24367
- row.append(personCell, usageCell, resetCell, actionsCell);
24679
+ more.push(remove);
24680
+ }
24681
+ if (more.length)
24682
+ actions.append(
24683
+ createAccountDetails(document2, messages, {
24684
+ label: messages.accountMore,
24685
+ triggerLabel: `${name.full} \xB7 ${messages.accountMore}`,
24686
+ description: name.full,
24687
+ focusKey: `${account.accountId}:more`,
24688
+ icon: "ellipsis",
24689
+ disabled: input.actionsDisabled,
24690
+ actions: more
24691
+ })
24692
+ );
24693
+ management.append(actions);
24694
+ actionsCell.append(management);
24695
+ row.append(personCell, ...usage.cells, actionsCell);
24368
24696
  const reset = input.usage?.status === "ready" ? renderAccountResetCredits(document2, input.usage.credits, messages, input) : null;
24369
- if (!reset) {
24370
- const unknown2 = document2.createElement("span");
24371
- unknown2.className = "settings-account-unknown";
24372
- unknown2.textContent = "\u2014";
24373
- unknown2.title = messages.accountResetCreditsUnknown;
24374
- unknown2.setAttribute("aria-label", messages.accountResetCreditsUnknown);
24375
- resetCell.append(unknown2);
24376
- return [row];
24377
- }
24697
+ if (!reset) return [row];
24378
24698
  const detailsRow = document2.createElement("tr");
24379
24699
  detailsRow.className = "settings-account-details-row";
24380
24700
  detailsRow.id = `settings-account-reset-${++resetDetailsSequence}`;
@@ -24391,120 +24711,84 @@ ${error51.stderrTail}`] : []
24391
24711
  reset.summary.setAttribute("aria-expanded", String(!detailsRow.hidden));
24392
24712
  input.onResetExpanded(!detailsRow.hidden);
24393
24713
  });
24394
- resetCell.append(reset.summary);
24714
+ management.append(reset.summary);
24395
24715
  return [row, detailsRow];
24396
24716
  }
24717
+ function renderHarnessAccountRow(document2, account, messages, display) {
24718
+ const row = document2.createElement("tr");
24719
+ row.className = "settings-account-row";
24720
+ row.dataset.harnessId = account.harnessId;
24721
+ row.tabIndex = -1;
24722
+ const name = account.email ?? account.label ?? account.harnessName;
24723
+ row.setAttribute("aria-label", name);
24724
+ const personCell = document2.createElement("td");
24725
+ personCell.className = "settings-account-person-cell";
24726
+ const logo = document2.createElement("div");
24727
+ logo.className = "settings-harness-account__logo";
24728
+ logo.setAttribute("aria-hidden", "true");
24729
+ const agent = KNOWN_RENDERER_AGENTS.find((agent2) => agent2 === account.harnessId);
24730
+ if (agent) logo.append(createRendererAgentIcon(agent, 26, document2));
24731
+ personCell.append(
24732
+ createAccountPerson(document2, messages, {
24733
+ name,
24734
+ agent: account.harnessName,
24735
+ plan: account.plan ?? null,
24736
+ mark: logo
24737
+ })
24738
+ );
24739
+ const usage = renderAccountUsage(
24740
+ document2,
24741
+ { status: "ready", credits: account.credits },
24742
+ messages,
24743
+ display,
24744
+ () => void 0
24745
+ );
24746
+ if (usage.additional) personCell.append(usage.additional);
24747
+ const managementCell = document2.createElement("td");
24748
+ managementCell.className = "settings-account-management-cell";
24749
+ const management = document2.createElement("div");
24750
+ management.className = "settings-account-native";
24751
+ const label = document2.createElement("span");
24752
+ label.textContent = messages.accountNativeManaged;
24753
+ const info = createAccountDetails(document2, messages, {
24754
+ label: `${account.harnessName} \xB7 ${messages.accountNativeManaged}`,
24755
+ description: messages.accountNativeManagementHint.replace("{harness}", account.harnessName),
24756
+ focusKey: `harness:${account.harnessId}:info`,
24757
+ icon: "info",
24758
+ actions: []
24759
+ });
24760
+ management.append(label, info);
24761
+ managementCell.append(management);
24762
+ row.append(personCell, ...usage.cells, managementCell);
24763
+ return row;
24764
+ }
24397
24765
 
24398
24766
  // src/settings/harness-accounts.ts
24399
- function mountHarnessAccounts(context, messages, getClient, onChange) {
24400
- const document2 = context.content.ownerDocument;
24401
- const section = document2.createElement("section");
24402
- section.className = "settings-harness-accounts";
24403
- section.hidden = true;
24404
- const heading = document2.createElement("h2");
24405
- heading.className = "settings-harness-accounts__title";
24406
- heading.textContent = messages.harnessAccountsTitle;
24407
- const list = document2.createElement("div");
24408
- list.className = "settings-account-list";
24409
- section.append(heading, list);
24410
- context.content.append(section);
24767
+ function createHarnessAccounts(signal, getClient, onChange) {
24411
24768
  let accounts = [];
24412
24769
  let refreshing = false;
24413
- let query = "";
24414
- let display = "remaining";
24415
- const render = () => {
24416
- section.hidden = accounts.length === 0;
24417
- list.replaceChildren();
24418
- const visible = accounts.filter(
24419
- (account) => `${account.harnessName} ${account.email ?? ""} ${account.label ?? ""} ${account.plan ?? ""}`.toLocaleLowerCase().includes(query)
24420
- );
24421
- for (const account of visible) {
24422
- const row = document2.createElement("article");
24423
- row.className = "settings-harness-account";
24424
- row.dataset.harnessId = account.harnessId;
24425
- const identity = document2.createElement("div");
24426
- identity.className = "settings-harness-account__identity";
24427
- const name = document2.createElement("strong");
24428
- name.className = "settings-account-email";
24429
- const accountName = account.email ?? account.label;
24430
- name.textContent = accountName ?? account.harnessName;
24431
- name.title = name.textContent;
24432
- identity.append(name);
24433
- const metadata = document2.createElement("div");
24434
- metadata.className = "settings-account-metadata";
24435
- if (accountName) {
24436
- const harness = document2.createElement("span");
24437
- harness.textContent = account.harnessName;
24438
- metadata.append(harness);
24439
- }
24440
- if (account.plan) {
24441
- if (accountName) {
24442
- const separator = document2.createElement("span");
24443
- separator.textContent = "\xB7";
24444
- separator.setAttribute("aria-hidden", "true");
24445
- metadata.append(separator);
24446
- }
24447
- const plan = document2.createElement("span");
24448
- plan.className = "settings-account-plan";
24449
- plan.textContent = account.plan;
24450
- metadata.append(plan);
24451
- }
24452
- if (metadata.childElementCount) identity.append(metadata);
24453
- const usage = renderAccountUsage(
24454
- document2,
24455
- { status: "ready", credits: account.credits },
24456
- messages,
24457
- display,
24458
- () => void 0
24459
- );
24460
- const person = document2.createElement("div");
24461
- person.className = "settings-account-row__person";
24462
- const agent = KNOWN_RENDERER_AGENTS.find((agent2) => agent2 === account.harnessId);
24463
- if (agent) {
24464
- const logo = document2.createElement("div");
24465
- logo.className = "settings-harness-account__logo";
24466
- logo.setAttribute("aria-hidden", "true");
24467
- logo.append(createRendererAgentIcon(agent, 28, document2));
24468
- person.append(logo);
24469
- }
24470
- person.append(identity);
24471
- row.append(person);
24472
- if (usage) row.append(usage);
24473
- list.append(row);
24474
- }
24475
- if (accounts.length && !visible.length) {
24476
- const empty = document2.createElement("p");
24477
- empty.className = "settings-account-empty";
24478
- empty.textContent = messages.accountNoMatches;
24479
- list.append(empty);
24480
- }
24481
- };
24482
24770
  return {
24771
+ get accounts() {
24772
+ return accounts;
24773
+ },
24483
24774
  get refreshing() {
24484
24775
  return refreshing;
24485
24776
  },
24486
- update(nextQuery, nextDisplay) {
24487
- query = nextQuery;
24488
- display = nextDisplay;
24489
- render();
24490
- },
24491
24777
  async refresh() {
24492
- if (refreshing || context.signal.aborted) return;
24778
+ if (refreshing || signal.aborted) return;
24493
24779
  const client = getClient();
24494
24780
  if (!client?.listHarnessAccounts) return;
24495
24781
  refreshing = true;
24496
24782
  onChange();
24497
24783
  try {
24498
24784
  const result = await client.listHarnessAccounts();
24499
- if (!context.signal.aborted) accounts = result.accounts;
24785
+ if (!signal.aborted)
24786
+ accounts = [...result.accounts].sort((a, b) => a.harnessId.localeCompare(b.harnessId));
24500
24787
  } catch {
24501
- if (!context.signal.aborted) accounts = [];
24788
+ if (!signal.aborted) accounts = [];
24502
24789
  } finally {
24503
24790
  refreshing = false;
24504
- if (!context.signal.aborted) {
24505
- render();
24506
- onChange();
24507
- }
24791
+ if (!signal.aborted) onChange();
24508
24792
  }
24509
24793
  }
24510
24794
  };
@@ -24524,16 +24808,13 @@ ${error51.stderrTail}`] : []
24524
24808
  const header = document2.createElement("div");
24525
24809
  header.className = "settings-account-header";
24526
24810
  const copy = document2.createElement("div");
24527
- const eyebrow = document2.createElement("p");
24528
- eyebrow.className = "settings-account-eyebrow";
24529
- eyebrow.textContent = "ACCOUNT MANAGEMENT";
24530
24811
  const heading = document2.createElement("h1");
24531
24812
  heading.className = "settings-section-label";
24532
24813
  heading.textContent = messages.pageLabels.accounts;
24533
24814
  const description = document2.createElement("p");
24534
24815
  description.className = "settings-page-description";
24535
24816
  description.textContent = messages.accountsDescription;
24536
- copy.append(eyebrow, heading, description);
24817
+ copy.append(heading, description);
24537
24818
  const add = document2.createElement("button");
24538
24819
  add.type = "button";
24539
24820
  add.className = "settings-command-button";
@@ -24542,29 +24823,6 @@ ${error51.stderrTail}`] : []
24542
24823
  const status = document2.createElement("p");
24543
24824
  status.className = "settings-account-status";
24544
24825
  status.setAttribute("aria-live", "polite");
24545
- const helpRow = document2.createElement("div");
24546
- helpRow.className = "settings-account-help-row";
24547
- const taskHint = document2.createElement("p");
24548
- taskHint.className = "settings-account-task-hint";
24549
- const taskHintText = document2.createElement("span");
24550
- taskHintText.textContent = messages.accountTaskHint;
24551
- taskHint.append(createRendererSettingsIcon("info", 16), taskHintText);
24552
- const help = document2.createElement("button");
24553
- help.type = "button";
24554
- help.className = "settings-account-help-button";
24555
- help.append(createRendererSettingsIcon("help", 16), messages.accountLoginHelp);
24556
- help.setAttribute("aria-expanded", "false");
24557
- help.setAttribute("aria-controls", "settings-account-login-help");
24558
- const deviceCodeNote = document2.createElement("p");
24559
- deviceCodeNote.id = "settings-account-login-help";
24560
- deviceCodeNote.className = "settings-account-device-code-note";
24561
- deviceCodeNote.textContent = messages.accountDeviceCodePrerequisite;
24562
- deviceCodeNote.hidden = true;
24563
- help.addEventListener("click", () => {
24564
- deviceCodeNote.hidden = !deviceCodeNote.hidden;
24565
- help.setAttribute("aria-expanded", String(!deviceCodeNote.hidden));
24566
- });
24567
- helpRow.append(taskHint, help);
24568
24826
  const toolbar = document2.createElement("div");
24569
24827
  toolbar.className = "settings-account-toolbar";
24570
24828
  const connected = document2.createElement("div");
@@ -24612,9 +24870,10 @@ ${error51.stderrTail}`] : []
24612
24870
  toolbar.append(connected, searchWrapper, displayControls, refreshUsage);
24613
24871
  const list = document2.createElement("div");
24614
24872
  list.className = "settings-account-list";
24615
- const { table, body } = createAccountsTable(document2, messages);
24873
+ const { table, body, updateDisplay } = createAccountsTable(document2, messages);
24616
24874
  list.append(table);
24617
- context.content.append(header, helpRow, deviceCodeNote, status, toolbar, list);
24875
+ context.content.append(header, status, toolbar, list);
24876
+ const stopCountdowns = mountAccountResetCountdowns(list, messages, context.signal);
24618
24877
  let accounts = [];
24619
24878
  let accountCreating = false;
24620
24879
  let accountActivating = false;
@@ -24664,18 +24923,21 @@ ${error51.stderrTail}`] : []
24664
24923
  const restoreFocus = accountListFocusRestorer(list, search);
24665
24924
  body.replaceChildren();
24666
24925
  status.textContent = loginMessage ?? "";
24667
- connectedCount.textContent = String(accounts.filter((account) => account.email).length);
24926
+ connectedCount.textContent = String(accounts.length + harnessAccounts.accounts.length);
24927
+ updateDisplay(usageDisplay);
24668
24928
  search.disabled = login !== null || loginStartingAccountId !== null;
24669
24929
  for (const [display, button] of displayButtons) {
24670
24930
  button.setAttribute("aria-pressed", String(display === usageDisplay));
24671
24931
  }
24672
24932
  refreshUsage.disabled = (!getClient()?.inspectCodexAccountUsage || !accounts.some((account) => account.email)) && !getClient()?.listHarnessAccounts || harnessAccounts?.refreshing === true || [...usageByAccountId.values()].some((usage) => usage.status === "loading") || accountBusy();
24673
24933
  const query = search.value.trim().toLocaleLowerCase();
24674
- harnessAccounts?.update(query, usageDisplay);
24675
24934
  const visibleAccounts = accounts.filter(
24676
- (account) => `${account.email ?? ""} ${account.label}`.toLocaleLowerCase().includes(query)
24935
+ (account) => `Codex ${account.email ?? ""} ${account.label} ${accountPlanLabel(account.planType) ?? ""}`.toLocaleLowerCase().includes(query)
24677
24936
  );
24678
- if (visibleAccounts.length === 0) {
24937
+ const visibleHarnessAccounts = harnessAccounts.accounts.filter(
24938
+ (account) => `${account.harnessName} ${account.email ?? ""} ${account.label ?? ""} ${account.plan ?? ""}`.toLocaleLowerCase().includes(query)
24939
+ );
24940
+ if (visibleAccounts.length + visibleHarnessAccounts.length === 0) {
24679
24941
  const emptyRow = document2.createElement("tr");
24680
24942
  const emptyCell = document2.createElement("td");
24681
24943
  emptyCell.colSpan = 4;
@@ -24760,6 +25022,9 @@ ${error51.stderrTail}`] : []
24760
25022
  body.append(verificationRow);
24761
25023
  }
24762
25024
  }
25025
+ for (const account of visibleHarnessAccounts) {
25026
+ body.append(renderHarnessAccountRow(document2, account, messages, usageDisplay));
25027
+ }
24763
25028
  restoreFocus();
24764
25029
  };
24765
25030
  const client = () => {
@@ -24990,10 +25255,11 @@ ${error51.stderrTail}`] : []
24990
25255
  });
24991
25256
  } catch {
24992
25257
  }
24993
- const harnessAccounts = mountHarnessAccounts(context, messages, getClient, render);
25258
+ const harnessAccounts = createHarnessAccounts(context.signal, getClient, render);
24994
25259
  void harnessAccounts.refresh();
24995
25260
  load();
24996
25261
  return () => {
25262
+ stopCountdowns();
24997
25263
  clearLoginRefresh();
24998
25264
  unsubscribe?.();
24999
25265
  };
@@ -25485,6 +25751,7 @@ ${error51.stderrTail}`] : []
25485
25751
  createConnectionsSettingsPage(messages, getDiagnostics),
25486
25752
  createAccountsSettingsPage(messages, getAccountClient),
25487
25753
  createSessionImportSettingsPage(messages, getSessionImportClient, openImportedThread),
25754
+ createAppearanceSettingsPage(messages),
25488
25755
  updatesPage(messages, getUpdateClient),
25489
25756
  aboutPage(messages)
25490
25757
  ]);
@@ -25503,10 +25770,10 @@ ${error51.stderrTail}`] : []
25503
25770
  }
25504
25771
 
25505
25772
  // src/settings/shell.css
25506
- var shell_default = ':host {\n --settings-bg: light-dark(#ffffff, #202020);\n --settings-sidebar: light-dark(#f7f7f8, #191919);\n --settings-panel: light-dark(#ffffff, #232323);\n --settings-surface: light-dark(#f6f6f6, #292929);\n --settings-surface-hover: light-dark(#eeeeee, #303030);\n --settings-inset: light-dark(#f3f3f3, #161616);\n --settings-text: light-dark(#0d0d0d, #ececec);\n --settings-muted: light-dark(#676767, #a3a3a3);\n --settings-subtle: light-dark(#8a8a8a, #777777);\n --settings-border: light-dark(rgb(13 13 13 / 9%), rgb(255 255 255 / 9%));\n --settings-divider: light-dark(rgb(13 13 13 / 7%), rgb(255 255 255 / 7%));\n --settings-hover: light-dark(rgb(13 13 13 / 5%), rgb(255 255 255 / 7%));\n --settings-active: light-dark(rgb(13 13 13 / 7%), rgb(255 255 255 / 9%));\n --settings-focus: light-dark(#0b75d1, #66aaf9);\n --settings-primary: light-dark(#171717, #f4f4f4);\n --settings-primary-hover: light-dark(#2f2f2f, #ffffff);\n --settings-primary-text: light-dark(#ffffff, #171717);\n --settings-warning: light-dark(#8a5500, #f5c96a);\n --settings-warning-bg: light-dark(#fff8e6, rgb(245 201 106 / 8%));\n --settings-warning-border: light-dark(#ead8a8, rgb(245 201 106 / 24%));\n --settings-danger: light-dark(#b42318, #f87171);\n --settings-danger-bg: light-dark(#fff1f0, rgb(239 68 68 / 8%));\n --settings-danger-border: light-dark(#f3c7c3, rgb(239 68 68 / 22%));\n --settings-success: light-dark(#16784a, #4ade80);\n color: var(--settings-text);\n color-scheme: inherit;\n font:\n 13px/1.5 system-ui,\n -apple-system,\n BlinkMacSystemFont,\n "Segoe UI",\n sans-serif;\n letter-spacing: 0;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n letter-spacing: 0;\n}\n\nbutton,\ninput,\nselect {\n font: inherit;\n}\n\nbutton {\n color: inherit;\n}\n\n[hidden] {\n display: none !important;\n}\n\n.settings-visually-hidden {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip-path: inset(50%);\n white-space: nowrap;\n border: 0;\n}\n\n.codexhost-settings-dialog {\n width: min(1120px, calc(100vw - 32px));\n height: min(780px, calc(100vh - 32px));\n max-width: none;\n max-height: none;\n margin: auto;\n padding: 0;\n overflow: hidden;\n color: var(--settings-text);\n background: var(--settings-bg);\n border: 1px solid var(--settings-border);\n border-radius: 14px;\n box-shadow: light-dark(0 16px 42px rgb(0 0 0 / 16%), 0 20px 54px rgb(0 0 0 / 42%));\n}\n\n.codexhost-settings-dialog::backdrop {\n background: light-dark(rgb(0 0 0 / 24%), rgb(0 0 0 / 56%));\n backdrop-filter: blur(1px);\n}\n\n.settings-frame,\n.settings-layout {\n width: 100%;\n height: 100%;\n min-width: 0;\n min-height: 0;\n}\n\n.settings-frame {\n display: flex;\n flex-direction: column;\n}\n\n.settings-layout {\n flex: 1;\n display: grid;\n grid-template-columns: 184px minmax(0, 1fr);\n background: var(--settings-bg);\n}\n\n.settings-sidebar {\n display: flex;\n min-width: 0;\n min-height: 0;\n flex-direction: column;\n overflow: hidden;\n background: var(--settings-sidebar);\n border-right: 1px solid var(--settings-border);\n padding-top: 14px;\n}\n\n.settings-header {\n display: flex;\n align-items: center;\n min-width: 0;\n height: 48px;\n flex: none;\n padding: 0 12px;\n border-bottom: 1px solid var(--settings-border);\n}\n\n.settings-header-actions {\n display: flex;\n align-items: center;\n flex: none;\n gap: 12px;\n margin-left: auto;\n}\n\n.settings-brand {\n display: flex;\n align-items: center;\n min-width: 0;\n gap: 7px;\n}\n\n.settings-brand__mark {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 26px;\n height: 26px;\n flex: none;\n color: var(--settings-text);\n}\n\n.settings-brand__mark .codexhost-settings-icon {\n width: 24px;\n height: 24px;\n object-fit: contain;\n}\n\n.settings-brand__copy {\n display: flex;\n min-width: 0;\n align-items: baseline;\n gap: 0;\n line-height: 20px;\n}\n\n.settings-brand__name {\n overflow: hidden;\n color: var(--settings-text);\n font-size: 13px;\n font-weight: 600;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.settings-brand__title {\n margin-left: 8px;\n padding-left: 8px;\n color: var(--settings-muted);\n font-size: 13px;\n font-weight: 400;\n border-left: 1px solid var(--settings-border);\n}\n\n.settings-nav {\n display: flex;\n min-width: 0;\n min-height: 0;\n flex: 1;\n flex-direction: column;\n gap: 2px;\n padding: 0 7px 10px;\n overflow-y: auto;\n}\n\n.settings-nav-section-label {\n min-height: 24px;\n padding: 4px 9px 2px;\n color: var(--settings-subtle);\n font-size: 11px;\n font-weight: 600;\n line-height: 18px;\n}\n\n.settings-nav-section-label:not(:first-child) {\n margin-top: 8px;\n}\n\n.settings-nav-button {\n display: grid;\n grid-template-columns: 16px minmax(0, 1fr);\n align-items: center;\n width: 100%;\n position: relative;\n min-height: 34px;\n flex: none;\n gap: 9px;\n padding: 6px 9px;\n color: var(--settings-text);\n font-size: 13px;\n line-height: 20px;\n text-align: left;\n background: transparent;\n border: 0;\n border-radius: 8px;\n cursor: pointer;\n}\n\n.settings-nav-button .codexhost-settings-icon {\n width: 16px;\n height: 16px;\n opacity: 0.9;\n}\n\n.settings-nav-button:hover {\n background: var(--settings-hover);\n}\n\n.settings-nav-button[aria-current="page"] {\n background: var(--settings-active);\n color: var(--settings-text);\n font-weight: 500;\n}\n\n.settings-nav-button span {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.settings-nav-star-link {\n margin-top: 0;\n color: var(--settings-text);\n text-decoration: none;\n}\n\n.settings-nav-star-link .codexhost-settings-icon {\n color: var(--settings-warning);\n}\n\n.settings-nav-star-link:hover {\n color: var(--settings-warning);\n background: var(--settings-warning-bg);\n}\n\n.settings-icon-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n flex: none;\n padding: 0;\n color: var(--settings-muted);\n background: transparent;\n border: 0;\n border-radius: 8px;\n cursor: pointer;\n}\n\n.settings-icon-button:hover {\n color: var(--settings-text);\n background: var(--settings-hover);\n}\n\n.settings-icon-button:focus-visible,\n.settings-nav-button:focus-visible {\n outline: 2px solid var(--settings-focus);\n outline-offset: 1px;\n}\n\n.settings-page {\n display: block;\n position: relative;\n min-width: 0;\n min-height: 0;\n overflow-y: auto;\n background: var(--settings-bg);\n scrollbar-gutter: stable;\n}\n\n.settings-page__content {\n width: min(930px, calc(100% - 80px));\n margin-inline: auto;\n}\n\n.settings-page__content {\n min-width: 0;\n padding: 28px 0 36px;\n}\n\n.settings-section-label {\n min-height: auto;\n margin: 0;\n padding: 0 0 18px;\n color: var(--settings-text);\n font-size: 18px;\n font-weight: 600;\n line-height: 26px;\n}\n\n.settings-status-list,\n.settings-empty {\n overflow: hidden;\n background: var(--settings-panel);\n}\n\n.settings-status-row {\n display: grid;\n grid-template-columns: minmax(170px, 1fr) auto minmax(280px, 1.45fr);\n position: relative;\n align-items: center;\n min-height: 72px;\n gap: 20px;\n padding: 12px 0;\n}\n\n.settings-status-row:not(:last-child)::after {\n content: "";\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n height: 1px;\n background: var(--settings-divider);\n}\n\n.settings-status-row__identity {\n display: inline-flex;\n align-items: center;\n min-width: 0;\n color: var(--settings-text);\n gap: 10px;\n font-size: 14px;\n font-weight: 500;\n line-height: 22px;\n}\n\n.settings-status-row__icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 36px;\n height: 36px;\n flex: none;\n color: var(--settings-muted);\n background: var(--settings-surface);\n border-radius: 50%;\n}\n\n.settings-status-badge {\n flex: none;\n padding: 3px 8px;\n color: var(--settings-muted);\n font-size: 11px;\n font-weight: 500;\n line-height: 18px;\n background: var(--settings-surface);\n border: 1px solid var(--settings-border);\n border-radius: 6px;\n}\n\n.settings-status-row__detail {\n min-width: 0;\n color: var(--settings-muted);\n font-size: 13px;\n line-height: 20px;\n}\n\n.settings-page-description {\n max-width: 760px;\n margin: -10px 0 20px;\n color: var(--settings-muted);\n font-size: 12px;\n line-height: 18px;\n}\n\n.settings-session-import-header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 24px;\n}\n\n.settings-session-import-header .settings-section-label {\n min-width: 0;\n}\n\n.settings-session-import-harness {\n display: flex;\n align-items: center;\n min-width: 0;\n gap: 12px;\n margin: -12px 0 16px;\n color: var(--settings-muted);\n font-size: 13px;\n}\n\n.settings-session-import-harness > span {\n flex: none;\n}\n\n.settings-session-import-harness__options {\n display: flex;\n align-items: center;\n min-width: 0;\n flex: 1;\n gap: 6px;\n overflow-x: auto;\n overflow-y: hidden;\n scrollbar-width: none;\n}\n\n.settings-session-import-harness__options::-webkit-scrollbar {\n display: none;\n}\n\n.settings-session-import-harness__option {\n min-height: 32px;\n flex: none;\n padding: 6px 10px;\n color: var(--settings-muted);\n font: inherit;\n font-size: 12px;\n white-space: nowrap;\n background: rgb(255 255 255 / 4%);\n border: 1px solid var(--settings-border);\n border-radius: 6px;\n cursor: pointer;\n}\n\n.settings-session-import-harness__option[aria-pressed="true"] {\n color: var(--settings-text);\n background: var(--settings-active);\n border-color: rgb(51 156 255 / 50%);\n}\n\n.settings-session-import-harness__option:disabled {\n opacity: 0.38;\n cursor: not-allowed;\n}\n\n.settings-session-import-harness__option:focus-visible {\n outline: 2px solid var(--settings-focus);\n outline-offset: 2px;\n}\n\n.settings-session-import-harness + .settings-page-description {\n margin-top: 0;\n margin-bottom: 4px;\n}\n\n.settings-session-import-availability-note {\n margin-top: 0;\n}\n\n.settings-session-import-search,\n.settings-session-import-pagination {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 10px;\n margin: 16px 0;\n}\n\n.settings-session-import-search input {\n flex: 1;\n min-width: 160px;\n}\n\n.settings-session-import-search input,\n.settings-session-import-pagination select {\n min-height: 36px;\n padding: 6px 10px;\n color: var(--settings-text);\n background: var(--settings-bg);\n border: 1px solid var(--settings-border);\n border-radius: 6px;\n}\n\n.settings-session-import-search input:focus-visible,\n.settings-session-import-pagination select:focus-visible {\n outline: 2px solid var(--settings-focus);\n outline-offset: 2px;\n}\n\n.settings-session-import-pagination {\n color: var(--settings-muted);\n font-size: 12px;\n}\n\n.settings-session-import-pagination label {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.settings-session-import-pagination > span {\n flex: 1;\n min-width: 130px;\n}\n\n.settings-session-import-pagination__navigation {\n display: flex;\n gap: 8px;\n margin-left: auto;\n}\n\n.settings-session-import-content,\n.settings-session-import-list {\n display: grid;\n gap: 10px;\n}\n\n.settings-session-import-status {\n display: flex;\n align-items: center;\n min-height: 64px;\n gap: 12px;\n padding: 16px;\n color: var(--settings-muted);\n background: var(--settings-panel);\n border: 1px solid var(--settings-border);\n border-radius: 8px;\n}\n\n.settings-session-import-status.is-error {\n color: #ef4444;\n}\n\n.settings-session-import-recovery {\n display: grid;\n justify-items: start;\n gap: 14px;\n padding: 16px;\n background: var(--settings-panel);\n border: 1px solid var(--settings-border);\n border-radius: 8px;\n}\n\n.settings-session-import-recovery:focus-visible {\n outline: 2px solid var(--settings-focus);\n outline-offset: 2px;\n}\n\n.settings-session-import-recovery__copy {\n display: grid;\n gap: 4px;\n}\n\n.settings-session-import-recovery__copy strong {\n color: var(--settings-text);\n font-size: 14px;\n}\n\n.settings-session-import-recovery__copy p {\n margin: 0;\n color: var(--settings-muted);\n font-size: 13px;\n line-height: 20px;\n}\n\n.settings-session-import-recovery__path {\n display: flex;\n align-items: stretch;\n width: 100%;\n min-width: 0;\n overflow: hidden;\n border: 1px solid var(--settings-border);\n border-radius: 6px;\n}\n\n.settings-session-import-recovery__path code {\n min-width: 0;\n flex: 1;\n padding: 8px 10px;\n overflow-x: auto;\n color: var(--settings-text);\n font-size: 12px;\n line-height: 20px;\n white-space: nowrap;\n}\n\n.settings-session-import-recovery__path .settings-command-button {\n min-height: 0;\n flex: none;\n border-width: 0 0 0 1px;\n border-radius: 0;\n}\n\n.settings-session-import-row {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n align-items: center;\n gap: 20px;\n min-width: 0;\n padding: 16px;\n background: var(--settings-panel);\n border: 1px solid var(--settings-border);\n border-radius: 8px;\n}\n\n.settings-session-import-row__copy {\n display: grid;\n min-width: 0;\n gap: 4px;\n}\n\n.settings-session-import-row__copy strong {\n overflow: hidden;\n color: var(--settings-text);\n font-size: 14px;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.settings-session-import-row__copy span,\n.settings-session-import-row__cwd {\n overflow: hidden;\n color: var(--settings-muted);\n font-size: 12px;\n line-height: 18px;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.settings-session-import-row__cwd {\n display: block;\n min-width: 0;\n background: transparent;\n}\n\n.settings-session-import-row__action {\n display: flex;\n align-items: flex-end;\n flex-direction: column;\n gap: 8px;\n}\n\n.settings-session-import-running {\n color: var(--settings-muted);\n font-size: 12px;\n}\n\n.settings-preference-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 32px;\n min-height: 88px;\n padding: 18px 0;\n border-top: 1px solid var(--settings-divider);\n border-bottom: 1px solid var(--settings-divider);\n}\n\n.settings-preference-row__copy {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n min-width: 0;\n gap: 5px;\n}\n\n.settings-preference-row__copy strong {\n color: var(--settings-text);\n font-size: 15px;\n font-weight: 600;\n line-height: 22px;\n}\n\n.settings-preference-row__copy span {\n max-width: 680px;\n color: var(--settings-muted);\n font-size: 13px;\n line-height: 20px;\n}\n\n.settings-preference-switch {\n display: inline-flex;\n align-items: center;\n width: 42px;\n height: 24px;\n flex: none;\n padding: 2px;\n border: 0;\n border-radius: 999px;\n background: var(--settings-surface-hover);\n cursor: pointer;\n transition: background 120ms ease;\n}\n\n.settings-preference-switch[aria-checked="true"] {\n justify-content: flex-end;\n background: var(--settings-focus);\n}\n\n.settings-preference-switch:focus-visible {\n outline: 2px solid var(--settings-focus);\n outline-offset: 2px;\n}\n\n.settings-preference-switch__thumb {\n width: 20px;\n height: 20px;\n border-radius: 50%;\n background: var(--settings-primary-text);\n box-shadow: 0 1px 3px rgb(0 0 0 / 24%);\n}\n\n.settings-connection-page-header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 18px;\n margin-bottom: 18px;\n}\n\n.settings-connection-page-header .settings-section-label {\n padding-bottom: 0;\n}\n\n.settings-connection-page-header .settings-page-description {\n margin: 5px 0 0;\n}\n\n.settings-connections-content,\n.settings-connections-layout,\n.settings-connection-list,\n.settings-connection-rows {\n min-width: 0;\n}\n\n.settings-connections-layout {\n display: grid;\n grid-template-columns: minmax(0, 1.55fr) minmax(280px, 0.85fr);\n align-items: start;\n gap: 18px;\n}\n\n.settings-connection-list,\n.settings-connection-inspector {\n overflow: hidden;\n background: var(--settings-panel);\n border: 1px solid var(--settings-border);\n border-radius: 10px;\n}\n\n.settings-connection-host-strip {\n display: grid;\n grid-template-columns: 30px minmax(0, 1fr) 30px;\n align-items: center;\n min-width: 0;\n gap: 5px;\n padding: 9px 10px;\n border-bottom: 1px solid var(--settings-divider);\n}\n\n.settings-connection-host-scroll {\n display: none;\n align-items: center;\n justify-content: center;\n width: 30px;\n height: 34px;\n padding: 0;\n color: var(--settings-muted);\n background: var(--settings-inset);\n border: 1px solid var(--settings-border);\n border-radius: 8px;\n cursor: pointer;\n}\n\n.settings-connection-host-strip[data-connection-host-overflow="true"]\n .settings-connection-host-scroll {\n display: inline-flex;\n}\n\n.settings-connection-host-strip:not([data-connection-host-overflow="true"]) {\n grid-template-columns: minmax(0, 1fr);\n}\n\n.settings-connection-host-scroll:hover:not(:disabled) {\n color: var(--settings-text);\n background: var(--settings-hover);\n}\n\n.settings-connection-host-scroll:disabled {\n cursor: default;\n opacity: 0.35;\n}\n\n.settings-connection-host-scroll:focus-visible,\n.settings-connection-host-tab:focus-visible,\n.settings-connection-row:focus-visible,\n.settings-connection-install-link:focus-visible,\n.settings-connection-view-error:focus-visible {\n outline: 2px solid var(--settings-focus);\n outline-offset: 1px;\n}\n\n.settings-connection-host-tabs {\n display: flex;\n align-items: center;\n min-width: 0;\n gap: 6px;\n overflow-x: auto;\n overflow-y: hidden;\n overscroll-behavior-x: contain;\n scrollbar-width: none;\n scroll-behavior: smooth;\n scroll-snap-type: x proximity;\n touch-action: pan-x;\n}\n\n.settings-connection-host-tabs::-webkit-scrollbar {\n display: none;\n}\n\n.settings-connection-host-tab {\n display: inline-flex;\n align-items: center;\n height: 30px;\n min-width: max-content;\n flex: none;\n padding: 0 9px;\n color: var(--settings-muted);\n font: inherit;\n font-size: 12px;\n line-height: 18px;\n white-space: nowrap;\n background: var(--settings-inset);\n border: 1px solid var(--settings-border);\n border-radius: 7px;\n cursor: pointer;\n scroll-snap-align: start;\n}\n\n.settings-connection-host-tab:hover {\n color: var(--settings-text);\n background: var(--settings-hover);\n}\n\n.settings-connection-host-tab[aria-selected="true"] {\n color: var(--settings-text);\n font-weight: 600;\n background: var(--settings-active);\n border-color: var(--settings-border);\n}\n\n.settings-connection-table-header,\n.settings-connection-row {\n display: grid;\n grid-template-columns: minmax(160px, 1fr) minmax(92px, auto) 108px;\n align-items: center;\n min-width: 0;\n gap: 10px;\n}\n\n.settings-connection-table-header {\n min-height: 30px;\n padding: 0 10px;\n color: var(--settings-muted);\n font-size: 10px;\n font-weight: 600;\n line-height: 16px;\n text-transform: uppercase;\n letter-spacing: 0.06em;\n background: transparent;\n border-bottom: 1px solid var(--settings-divider);\n}\n\n.settings-connection-row {\n min-height: 52px;\n padding: 8px 10px;\n cursor: pointer;\n border-bottom: 1px solid var(--settings-divider);\n}\n\n.settings-connection-row:last-child {\n border-bottom: 0;\n}\n\n.settings-connection-row:hover {\n background: var(--settings-hover);\n}\n\n.settings-connection-row[data-connection-selected="true"] {\n background: var(--settings-surface);\n}\n\n.settings-connection-row__identity,\n.settings-connection-inspector__identity {\n display: inline-flex;\n align-items: center;\n min-width: 0;\n gap: 8px;\n color: var(--settings-text);\n}\n\n.settings-connection-row__identity strong,\n.settings-connection-inspector__identity strong {\n min-width: 0;\n overflow-wrap: anywhere;\n font-size: 12px;\n font-weight: 500;\n line-height: 18px;\n}\n\n.settings-connection-row__mark {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n flex: none;\n color: var(--settings-muted);\n font-size: 10px;\n font-weight: 700;\n background: var(--settings-surface);\n border-radius: 6px;\n}\n\n.settings-connection-row__mark--logo {\n color: var(--settings-text);\n background: transparent;\n}\n\n.settings-connection-row__mark--logo > img,\n.settings-connection-row__mark--logo > svg {\n display: block;\n max-width: 18px;\n max-height: 18px;\n}\n\n.settings-connection-row__status {\n display: inline-flex;\n align-items: center;\n width: fit-content;\n gap: 5px;\n color: var(--settings-muted);\n font-size: 11px;\n font-weight: 500;\n line-height: 18px;\n}\n\n.settings-connection-row__status::before {\n width: 6px;\n height: 6px;\n flex: none;\n content: "";\n background: currentColor;\n border-radius: 50%;\n}\n\n.settings-connection-row__status[data-connection-tone="ready"] {\n color: var(--settings-success);\n}\n\n.settings-connection-row__status[data-connection-tone="checking"] {\n color: var(--settings-warning);\n}\n\n.settings-connection-row__status[data-connection-tone="setup"] {\n color: var(--settings-muted);\n}\n\n.settings-connection-row__status[data-connection-tone="setup"]::before {\n background: transparent;\n border: 1.5px solid currentColor;\n}\n\n.settings-connection-row__status[data-connection-tone="failed"] {\n color: var(--settings-danger);\n}\n\n.settings-connection-row__action {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n min-width: 0;\n gap: 4px;\n}\n\n.settings-connection-row__handle {\n display: inline-flex;\n flex: none;\n align-items: center;\n justify-content: center;\n width: 16px;\n color: var(--settings-muted);\n cursor: grab;\n opacity: 0.6;\n}\n\n.settings-connection-row__handle:hover {\n opacity: 1;\n}\n\n.settings-connection-row[draggable="true"] {\n cursor: grab;\n}\n\n.settings-connection-row[data-connection-dragging="true"] {\n opacity: 0.4;\n}\n\n.settings-connection-row[data-connection-drop-indicator="before"] {\n box-shadow: inset 0 2px 0 0 var(--settings-focus);\n}\n\n.settings-connection-row[data-connection-drop-indicator="after"] {\n box-shadow: inset 0 -2px 0 0 var(--settings-focus);\n}\n\n.settings-connection-row__group-toggle {\n display: inline-flex;\n flex: none;\n align-items: center;\n justify-content: center;\n width: 26px;\n height: 26px;\n color: var(--settings-muted);\n background: transparent;\n border: 0;\n border-radius: 6px;\n cursor: pointer;\n}\n\n.settings-connection-row__group-toggle:hover {\n color: var(--settings-text);\n background: var(--settings-hover);\n}\n\n.settings-connection-group-divider {\n padding: 10px 12px 6px;\n color: var(--settings-muted);\n font-size: 10px;\n font-weight: 600;\n line-height: 16px;\n text-transform: uppercase;\n letter-spacing: 0.06em;\n /* No border-top here: the row immediately above already carries its own\n border-bottom (it is no longer :last-child once this divider follows\n it), so adding one here would double the separator line. */\n}\n\n.settings-connection-group-more[data-connection-drag-over="true"] {\n background: rgb(51 156 255 / 8%);\n}\n\n.settings-connection-group-hint {\n display: grid;\n gap: 3px;\n margin: 0 12px 12px;\n padding: 14px 16px;\n text-align: center;\n border: 1.5px dashed var(--settings-border);\n border-radius: 10px;\n}\n\n.settings-connection-group-more[data-connection-drag-over="true"] .settings-connection-group-hint {\n border-color: var(--settings-focus);\n}\n\n.settings-connection-group-hint strong {\n color: var(--settings-text);\n font-size: 12.5px;\n font-weight: 500;\n line-height: 18px;\n}\n\n.settings-connection-group-hint span {\n color: var(--settings-muted);\n font-size: 12px;\n line-height: 17px;\n}\n\n.settings-connection-group-reset {\n display: flex;\n width: 100%;\n align-items: center;\n gap: 6px;\n padding: 10px 12px;\n color: var(--settings-muted);\n font: inherit;\n font-size: 12px;\n text-align: left;\n background: transparent;\n border: 0;\n border-top: 1px solid var(--settings-divider);\n cursor: pointer;\n}\n\n.settings-connection-group-reset:hover {\n color: var(--settings-text);\n background: var(--settings-hover);\n}\n\n.settings-connection-install-link {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 26px;\n height: 26px;\n color: var(--settings-focus);\n text-decoration: none;\n background: transparent;\n border: 1px solid transparent;\n border-radius: 7px;\n opacity: 0;\n transition: opacity 120ms ease;\n}\n\n.settings-connection-row:hover .settings-connection-install-link,\n.settings-connection-install-link:focus-visible {\n opacity: 1;\n}\n\n.settings-connection-install-link:hover {\n color: var(--settings-focus);\n background: var(--settings-active);\n border-color: var(--settings-border);\n}\n\n.settings-connection-view-error {\n padding: 4px 7px;\n color: var(--settings-danger);\n font: inherit;\n font-size: 11px;\n line-height: 18px;\n background: transparent;\n border: 0;\n border-radius: 6px;\n cursor: pointer;\n}\n\n.settings-connection-view-error:hover {\n color: var(--settings-danger);\n background: var(--settings-danger-bg);\n}\n\n.settings-connection-inspector {\n position: sticky;\n top: 18px;\n}\n\n.settings-connection-inspector__header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n min-width: 0;\n gap: 10px;\n padding: 12px;\n border-bottom: 1px solid var(--settings-divider);\n}\n\n.settings-connection-inspector__body {\n display: grid;\n min-width: 0;\n gap: 12px;\n padding: 12px;\n}\n\n.settings-connection-install-callout {\n display: grid;\n grid-template-columns: 28px minmax(0, 1fr);\n gap: 9px;\n padding: 11px;\n background: var(--settings-surface);\n border: 0;\n border-radius: 8px;\n}\n\n.settings-connection-install-callout__icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n color: var(--settings-focus);\n background: var(--settings-active);\n border-radius: 7px;\n}\n\n.settings-connection-install-callout strong,\n.settings-connection-error-summary strong,\n.settings-connection-state-summary strong {\n display: block;\n margin: 0 0 4px;\n color: var(--settings-text);\n font-size: 12px;\n font-weight: 500;\n line-height: 18px;\n}\n\n.settings-connection-install-callout p,\n.settings-connection-error-summary p,\n.settings-connection-state-summary p,\n.settings-connection-issue-note {\n margin: 0;\n color: var(--settings-muted);\n font-size: 11px;\n line-height: 16px;\n}\n\n.settings-connection-install-button {\n width: fit-content;\n}\n\n.settings-connection-error-summary {\n padding: 13px 14px;\n color: var(--settings-danger);\n background: var(--settings-danger-bg);\n border: 1px solid var(--settings-danger-border);\n border-radius: 10px;\n}\n\n.settings-connection-error-metadata {\n display: grid;\n gap: 7px;\n padding: 12px;\n background: var(--settings-inset);\n border: 1px solid var(--settings-border);\n border-radius: 9px;\n}\n\n.settings-connection-detail-line {\n display: grid;\n grid-template-columns: 92px minmax(0, 1fr);\n gap: 10px;\n min-width: 0;\n color: var(--settings-muted);\n font-size: 10px;\n line-height: 16px;\n}\n\n.settings-connection-detail-line code {\n min-width: 0;\n overflow-wrap: anywhere;\n color: var(--settings-text);\n font-family: ui-monospace, "SFMono-Regular", Consolas, "Liberation Mono", monospace;\n white-space: pre-wrap;\n}\n\n.settings-connection-error-log-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 10px;\n}\n\n.settings-connection-error-log-header strong {\n color: var(--settings-text);\n font-size: 11px;\n font-weight: 600;\n}\n\n.settings-connection-error-log-header .settings-command-button {\n min-height: 30px;\n padding: 5px 9px;\n font-size: 11px;\n}\n\n.settings-connection-stderr {\n max-height: 220px;\n min-width: 0;\n margin: 0;\n padding: 11px;\n overflow: auto;\n color: var(--settings-text);\n font:\n 10px/16px ui-monospace,\n "SFMono-Regular",\n Consolas,\n "Liberation Mono",\n monospace;\n white-space: pre-wrap;\n overflow-wrap: anywhere;\n background: var(--settings-inset);\n border: 1px solid var(--settings-border);\n border-radius: 9px;\n}\n\n.settings-connection-error-actions {\n display: grid;\n grid-template-columns: minmax(0, 1fr);\n gap: 8px;\n}\n\n.settings-connection-error-actions .settings-command-button {\n width: 100%;\n}\n\n.settings-connection-issue-note {\n margin-top: -4px;\n}\n\n.settings-connection-state-summary {\n padding: 14px;\n background: var(--settings-surface);\n border: 1px solid var(--settings-border);\n border-radius: 10px;\n}\n\n.settings-empty {\n display: flex;\n align-items: center;\n min-height: 72px;\n padding: 12px 16px;\n}\n\n.settings-empty > div {\n display: grid;\n min-width: 0;\n gap: 2px;\n}\n\n.settings-empty strong {\n color: var(--settings-text);\n font-size: 13px;\n font-weight: 500;\n line-height: 19px;\n}\n\n.settings-empty span {\n color: var(--settings-muted);\n font-size: 13px;\n line-height: 19px;\n}\n\n.settings-about-panel {\n display: grid;\n max-width: 720px;\n gap: 18px;\n padding: 24px;\n background: var(--settings-panel);\n border: 1px solid var(--settings-border);\n border-radius: 12px;\n}\n\n.settings-about-product {\n color: var(--settings-text);\n font-size: 24px;\n font-weight: 700;\n line-height: 32px;\n}\n\n.settings-about-tagline {\n color: var(--settings-text);\n font-size: 16px;\n font-weight: 600;\n line-height: 24px;\n}\n\n.settings-about-copy {\n display: grid;\n max-width: 660px;\n gap: 12px;\n}\n\n.settings-about-copy p,\n.settings-about-repository p {\n margin: 0;\n color: var(--settings-muted);\n font-size: 13px;\n line-height: 21px;\n}\n\n.settings-about-star-callout {\n margin: 2px 0;\n color: var(--settings-warning);\n font-size: 14px;\n font-weight: 600;\n line-height: 22px;\n}\n\n.settings-about-repository {\n display: grid;\n gap: 10px;\n padding-top: 18px;\n border-top: 1px solid var(--settings-divider);\n}\n\n.settings-about-repository-link {\n display: flex;\n align-items: center;\n width: fit-content;\n min-width: 0;\n max-width: 100%;\n gap: 8px;\n color: var(--settings-focus);\n font-size: 13px;\n font-weight: 600;\n text-decoration: none;\n}\n\n.settings-about-repository-link:hover {\n text-decoration: underline;\n}\n\n.settings-about-repository-link code {\n min-width: 0;\n overflow: hidden;\n color: var(--settings-muted);\n font-family: ui-monospace, "SFMono-Regular", Consolas, "Liberation Mono", monospace;\n font-size: 11px;\n font-weight: 400;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.settings-page-error {\n padding: 16px;\n color: var(--settings-text);\n font-size: 13px;\n background: var(--settings-panel);\n border: 1px solid var(--settings-border);\n border-radius: 20px;\n}\n\n.settings-update-metadata {\n display: grid;\n grid-template-columns: repeat(3, minmax(0, 1fr));\n gap: 24px;\n margin-bottom: 24px;\n padding: 0 4px 20px;\n border-bottom: 1px solid var(--settings-divider);\n}\n\n.settings-update-metadata__item {\n display: grid;\n min-width: 0;\n gap: 4px;\n}\n\n.settings-update-metadata__item span {\n color: var(--settings-muted);\n font-size: 12px;\n line-height: 18px;\n}\n\n.settings-update-metadata__item strong {\n min-width: 0;\n overflow-wrap: anywhere;\n color: var(--settings-text);\n font-size: 15px;\n font-weight: 500;\n line-height: 22px;\n}\n\n/* The only emphasis on this screen: a latest version newer than the installed one. */\n.settings-update-metadata__value--newer {\n color: var(--settings-focus);\n}\n\n.settings-update-panel {\n display: grid;\n gap: 12px;\n padding: 20px;\n color: var(--settings-text);\n background: var(--settings-panel);\n border: 1px solid var(--settings-border);\n border-radius: 8px;\n}\n\n.settings-update-panel__head {\n display: flex;\n align-items: center;\n min-width: 0;\n gap: 8px;\n}\n\n.settings-update-panel__head .codexhost-settings-icon {\n color: var(--settings-muted);\n}\n\n.settings-update-panel[data-update-state="available"] .codexhost-settings-icon,\n.settings-update-panel[data-update-state="downloading"] .codexhost-settings-icon,\n.settings-update-panel[data-update-state="installing"] .codexhost-settings-icon,\n.settings-update-panel[data-update-state="restarting"] .codexhost-settings-icon {\n color: var(--settings-focus);\n}\n\n.settings-update-panel[data-update-state="current"] .codexhost-settings-icon {\n color: var(--settings-success);\n}\n\n.settings-update-panel[data-update-state="failed"] .codexhost-settings-icon,\n.settings-update-panel[data-update-state="error"] .codexhost-settings-icon {\n color: var(--settings-danger);\n}\n\n.settings-update-panel__title {\n min-width: 0;\n overflow-wrap: anywhere;\n color: var(--settings-text);\n font-size: 14px;\n font-weight: 600;\n line-height: 22px;\n}\n\n.settings-update-summary,\n.settings-update-error {\n margin: 0;\n overflow-wrap: anywhere;\n font-size: 13px;\n line-height: 20px;\n}\n\n.settings-update-summary {\n color: var(--settings-muted);\n}\n\n.settings-update-error {\n color: var(--settings-danger);\n}\n\n.settings-update-progress {\n width: 100%;\n height: 8px;\n accent-color: var(--settings-focus);\n}\n\n.settings-update-progress-detail {\n color: var(--settings-muted);\n font-size: 12px;\n line-height: 18px;\n}\n\n/* Release notes scroll with the page; a scroller inside a scroller traps the wheel. */\n.settings-update-notes-section {\n min-width: 0;\n margin-top: 24px;\n padding-top: 24px;\n border-top: 1px solid var(--settings-divider);\n}\n\n.settings-update-notes-section:empty {\n display: none;\n}\n\n.settings-update-notes {\n display: grid;\n min-width: 0;\n gap: 12px;\n color: var(--settings-muted);\n font-size: 14px;\n line-height: 22px;\n overflow-wrap: anywhere;\n}\n\n.settings-update-notes > :first-child {\n margin-top: 0;\n}\n\n.settings-update-notes > :last-child {\n margin-bottom: 0;\n}\n\n.settings-update-notes h1,\n.settings-update-notes h2,\n.settings-update-notes h3,\n.settings-update-notes h4,\n.settings-update-notes h5,\n.settings-update-notes h6 {\n margin: 6px 0 0;\n color: var(--settings-text);\n font-weight: 600;\n}\n\n.settings-update-notes h1 {\n font-size: 18px;\n line-height: 26px;\n}\n\n.settings-update-notes h2 {\n font-size: 17px;\n line-height: 24px;\n}\n\n.settings-update-notes h3,\n.settings-update-notes h4,\n.settings-update-notes h5,\n.settings-update-notes h6 {\n font-size: 14px;\n line-height: 22px;\n}\n\n.settings-update-notes p,\n.settings-update-notes ul,\n.settings-update-notes ol,\n.settings-update-notes pre,\n.settings-update-notes blockquote {\n margin: 0;\n}\n\n.settings-update-notes ul,\n.settings-update-notes ol {\n padding-left: 24px;\n}\n\n.settings-update-notes li {\n padding-left: 4px;\n}\n\n.settings-update-notes li::marker {\n color: var(--settings-muted);\n font-size: 0.85em;\n}\n\n.settings-update-notes li + li {\n margin-top: 14px;\n}\n\n.settings-update-notes .release-note-translation {\n display: block;\n margin-top: 3px;\n color: var(--settings-muted);\n font-size: 13px;\n line-height: 20px;\n}\n\n.settings-update-notes blockquote {\n padding: 8px 12px;\n color: var(--settings-muted);\n border-left: 3px solid var(--settings-focus);\n background: var(--settings-surface);\n}\n\n.settings-update-notes hr {\n width: 100%;\n margin: 2px 0;\n border: 0;\n border-top: 1px solid var(--settings-divider);\n}\n\n.settings-update-notes strong {\n color: var(--settings-text);\n font-weight: 600;\n}\n\n.settings-update-notes a {\n color: var(--settings-focus);\n text-decoration: none;\n}\n\n.settings-update-notes a:hover {\n text-decoration: underline;\n}\n\n.settings-update-notes code {\n font-family: ui-monospace, "SFMono-Regular", Consolas, "Liberation Mono", monospace;\n font-size: 12px;\n}\n\n.settings-update-notes :not(pre) > code {\n padding: 1px 5px;\n background: var(--settings-surface);\n border-radius: 4px;\n}\n\n.settings-update-notes pre {\n min-width: 0;\n max-width: 100%;\n padding: 10px 12px;\n overflow-x: auto;\n overflow-y: hidden;\n background: var(--settings-inset);\n border-radius: 6px;\n}\n\n.settings-update-notes pre code {\n line-height: 18px;\n white-space: pre-wrap;\n}\n\n/* Manual update sits directly under the status panel, not behind a disclosure:\n automatic updates can fail for machine-local reasons and this is the way out. */\n.settings-update-controls {\n display: grid;\n min-width: 0;\n gap: 10px;\n margin-top: 24px;\n}\n\n.settings-update-manual-title {\n color: var(--settings-text);\n font-size: 15px;\n font-weight: 600;\n line-height: 22px;\n}\n\n.settings-update-manual {\n display: grid;\n min-width: 0;\n gap: 8px;\n}\n\n.settings-update-manual[hidden] {\n display: none;\n}\n\n.settings-update-manual-description {\n margin: 0;\n color: var(--settings-muted);\n font-size: 12px;\n line-height: 18px;\n}\n\n.settings-update-manual-description.is-fallback {\n color: var(--settings-danger);\n}\n\n.settings-update-command {\n display: flex;\n align-items: stretch;\n min-width: 0;\n overflow: hidden;\n border: 1px solid var(--settings-border);\n border-radius: 6px;\n}\n\n.settings-update-command code {\n min-width: 0;\n flex: 1;\n padding: 9px 12px;\n overflow-x: auto;\n color: var(--settings-text);\n font-family: ui-monospace, "SFMono-Regular", Consolas, "Liberation Mono", monospace;\n font-size: 12px;\n line-height: 20px;\n white-space: nowrap;\n}\n\n.settings-update-command__copy {\n display: inline-flex;\n align-items: center;\n flex: none;\n gap: 6px;\n padding: 0 12px;\n color: var(--settings-muted);\n font-size: 12px;\n background: transparent;\n border: 0;\n border-left: 1px solid var(--settings-border);\n cursor: pointer;\n}\n\n.settings-update-command__copy:hover {\n color: var(--settings-text);\n background: var(--settings-hover);\n}\n\n.settings-update-command__copy:focus-visible {\n outline: 2px solid var(--settings-focus);\n outline-offset: -2px;\n}\n\n.settings-update-actions {\n display: flex;\n align-items: center;\n min-width: 0;\n gap: 12px;\n flex-wrap: wrap;\n}\n\n.settings-command-button,\n.settings-update-link {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex: none;\n width: max-content;\n max-width: 100%;\n min-height: 30px;\n gap: 6px;\n padding: 5px 10px;\n white-space: nowrap;\n color: var(--settings-primary-text);\n font: inherit;\n font-size: 12px;\n text-decoration: none;\n background: var(--settings-primary);\n border: 1px solid var(--settings-primary);\n border-radius: 7px;\n cursor: pointer;\n}\n\n.settings-command-button--secondary,\n.settings-update-link {\n color: var(--settings-text);\n background: var(--settings-panel);\n border-color: var(--settings-border);\n}\n\n.settings-command-button:hover:not(:disabled) {\n background: var(--settings-primary-hover);\n border-color: var(--settings-primary-hover);\n}\n\n.settings-command-button--secondary:hover:not(:disabled),\n.settings-update-link:hover {\n background: var(--settings-hover);\n border-color: var(--settings-border);\n}\n\n.settings-command-button--danger {\n color: #f87171;\n}\n\n.settings-command-button--danger:hover:not(:disabled) {\n color: #fecaca;\n background: rgb(127 29 29 / 24%);\n border-color: rgb(248 113 113 / 45%);\n}\n\n.settings-command-button:disabled {\n cursor: default;\n opacity: 0.45;\n}\n\n.settings-command-button:disabled,\n.settings-command-button[aria-disabled="true"] {\n opacity: 0.55;\n cursor: not-allowed;\n filter: none;\n}\n\n.settings-command-button:focus-visible,\n.settings-update-link:focus-visible {\n outline: 2px solid var(--settings-focus);\n outline-offset: 2px;\n}\n\n.codexhost-settings-icon {\n display: block;\n flex: none;\n stroke: currentColor;\n}\n\n@media (max-width: 720px) {\n .codexhost-settings-dialog {\n width: calc(100vw - 16px);\n height: calc(100vh - 16px);\n border-radius: 10px;\n }\n\n .settings-layout {\n grid-template-columns: minmax(0, 1fr);\n grid-template-rows: auto minmax(0, 1fr);\n }\n\n .settings-session-import-row {\n grid-template-columns: minmax(0, 1fr);\n }\n\n .settings-session-import-row__action {\n align-items: flex-start;\n }\n\n .settings-sidebar {\n border-right: 0;\n border-bottom: 1px solid var(--settings-border);\n }\n\n .settings-header {\n height: 56px;\n padding-inline: 14px;\n }\n\n .settings-sidebar {\n padding-top: 20px;\n }\n\n .settings-nav {\n flex: none;\n flex-direction: row;\n gap: 4px;\n padding: 7px 8px 8px;\n overflow-x: auto;\n overflow-y: hidden;\n }\n\n .settings-nav-section-label {\n display: none;\n }\n\n .settings-nav-button {\n width: auto;\n min-width: max-content;\n min-height: 34px;\n grid-template-columns: 16px auto;\n border-radius: 10px;\n }\n\n .settings-nav-star-link {\n margin-top: 0;\n }\n\n .settings-page__content {\n width: calc(100% - 40px);\n }\n\n .settings-page__content {\n padding-top: 32px;\n padding-bottom: 32px;\n }\n\n .settings-section-label {\n padding-bottom: 20px;\n font-size: 20px;\n line-height: 26px;\n }\n\n .settings-update-metadata {\n grid-template-columns: minmax(0, 1fr);\n gap: 16px;\n }\n\n .settings-status-row {\n grid-template-columns: minmax(0, 1fr) auto;\n gap: 16px;\n }\n\n .settings-account-header,\n .settings-connection-page-header {\n flex-direction: column;\n }\n\n .settings-account-header > .settings-command-button,\n .settings-connection-page-header > .settings-command-button {\n width: 100%;\n }\n\n .settings-connections-layout {\n grid-template-columns: minmax(0, 1fr);\n }\n\n .settings-connection-inspector {\n position: static;\n }\n\n .settings-status-row__detail {\n grid-column: 1 / -1;\n margin: -8px 0 0 58px;\n }\n}\n\n@media (forced-colors: active) {\n :host {\n --settings-bg: Canvas;\n --settings-sidebar: Canvas;\n --settings-panel: Canvas;\n --settings-surface: Canvas;\n --settings-surface-hover: Highlight;\n --settings-inset: Canvas;\n --settings-text: CanvasText;\n --settings-muted: GrayText;\n --settings-subtle: GrayText;\n --settings-border: ButtonBorder;\n --settings-divider: ButtonBorder;\n --settings-hover: Highlight;\n --settings-active: Highlight;\n --settings-focus: Highlight;\n --settings-primary: ButtonFace;\n --settings-primary-hover: Highlight;\n --settings-primary-text: ButtonText;\n --settings-warning: CanvasText;\n --settings-warning-bg: Canvas;\n --settings-warning-border: ButtonBorder;\n --settings-danger: CanvasText;\n --settings-danger-bg: Canvas;\n --settings-danger-border: ButtonBorder;\n --settings-success: CanvasText;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n *,\n *::before,\n *::after {\n scroll-behavior: auto !important;\n transition-duration: 0s !important;\n }\n}\n';
25773
+ var shell_default = ':host {\n --settings-bg: light-dark(#ffffff, #202020);\n --settings-sidebar: light-dark(#f7f7f8, #191919);\n --settings-panel: light-dark(#ffffff, #232323);\n --settings-surface: light-dark(#f6f6f6, #292929);\n --settings-surface-hover: light-dark(#eeeeee, #303030);\n --settings-inset: light-dark(#f3f3f3, #161616);\n --settings-text: light-dark(#0d0d0d, #ececec);\n --settings-muted: light-dark(#676767, #a3a3a3);\n --settings-subtle: light-dark(#8a8a8a, #777777);\n --settings-border: light-dark(rgb(13 13 13 / 9%), rgb(255 255 255 / 9%));\n --settings-divider: light-dark(rgb(13 13 13 / 7%), rgb(255 255 255 / 7%));\n --settings-hover: light-dark(rgb(13 13 13 / 5%), rgb(255 255 255 / 7%));\n --settings-active: light-dark(rgb(13 13 13 / 7%), rgb(255 255 255 / 9%));\n --settings-focus: light-dark(#0b75d1, #66aaf9);\n --settings-primary: light-dark(#171717, #f4f4f4);\n --settings-primary-hover: light-dark(#2f2f2f, #ffffff);\n --settings-primary-text: light-dark(#ffffff, #171717);\n --settings-warning: light-dark(#8a5500, #f5c96a);\n --settings-warning-bg: light-dark(#fff8e6, rgb(245 201 106 / 8%));\n --settings-warning-border: light-dark(#ead8a8, rgb(245 201 106 / 24%));\n --settings-danger: light-dark(#b42318, #f87171);\n --settings-danger-bg: light-dark(#fff1f0, rgb(239 68 68 / 8%));\n --settings-danger-border: light-dark(#f3c7c3, rgb(239 68 68 / 22%));\n --settings-success: light-dark(#16784a, #4ade80);\n color: var(--settings-text);\n color-scheme: inherit;\n font:\n 13px/1.5 system-ui,\n -apple-system,\n BlinkMacSystemFont,\n "Segoe UI",\n sans-serif;\n letter-spacing: 0;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n letter-spacing: 0;\n}\n\nbutton,\ninput,\nselect {\n font: inherit;\n}\n\nbutton {\n color: inherit;\n}\n\n[hidden] {\n display: none !important;\n}\n\n.settings-visually-hidden {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip-path: inset(50%);\n white-space: nowrap;\n border: 0;\n}\n\n.codexhost-settings-dialog {\n width: min(1120px, calc(100vw - 32px));\n height: min(780px, calc(100vh - 32px));\n max-width: none;\n max-height: none;\n margin: auto;\n padding: 0;\n overflow: hidden;\n color: var(--settings-text);\n background: var(--settings-bg);\n border: 1px solid var(--settings-border);\n border-radius: 14px;\n box-shadow: light-dark(0 16px 42px rgb(0 0 0 / 16%), 0 20px 54px rgb(0 0 0 / 42%));\n}\n\n.codexhost-settings-dialog::backdrop {\n background: light-dark(rgb(0 0 0 / 24%), rgb(0 0 0 / 56%));\n backdrop-filter: blur(1px);\n}\n\n.settings-frame,\n.settings-layout {\n width: 100%;\n height: 100%;\n min-width: 0;\n min-height: 0;\n}\n\n.settings-frame {\n display: flex;\n flex-direction: column;\n}\n\n.settings-layout {\n flex: 1;\n display: grid;\n grid-template-columns: 184px minmax(0, 1fr);\n background: var(--settings-bg);\n}\n\n.settings-sidebar {\n display: flex;\n min-width: 0;\n min-height: 0;\n flex-direction: column;\n overflow: hidden;\n background: var(--settings-sidebar);\n border-right: 1px solid var(--settings-border);\n padding-top: 14px;\n}\n\n.settings-header {\n display: flex;\n align-items: center;\n min-width: 0;\n height: 48px;\n flex: none;\n padding: 0 12px;\n border-bottom: 1px solid var(--settings-border);\n}\n\n.settings-header-actions {\n display: flex;\n align-items: center;\n flex: none;\n gap: 12px;\n margin-left: auto;\n}\n\n.settings-brand {\n display: flex;\n align-items: center;\n min-width: 0;\n gap: 7px;\n}\n\n.settings-brand__mark {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 26px;\n height: 26px;\n flex: none;\n color: var(--settings-text);\n}\n\n.settings-brand__mark .codexhost-settings-icon {\n width: 24px;\n height: 24px;\n object-fit: contain;\n}\n\n.settings-brand__copy {\n display: flex;\n min-width: 0;\n align-items: baseline;\n gap: 0;\n line-height: 20px;\n}\n\n.settings-brand__name {\n overflow: hidden;\n color: var(--settings-text);\n font-size: 13px;\n font-weight: 600;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.settings-brand__title {\n margin-left: 8px;\n padding-left: 8px;\n color: var(--settings-muted);\n font-size: 13px;\n font-weight: 400;\n border-left: 1px solid var(--settings-border);\n}\n\n.settings-nav {\n display: flex;\n min-width: 0;\n min-height: 0;\n flex: 1;\n flex-direction: column;\n gap: 2px;\n padding: 0 7px 10px;\n overflow-y: auto;\n}\n\n.settings-nav-section-label {\n min-height: 24px;\n padding: 4px 9px 2px;\n color: var(--settings-subtle);\n font-size: 11px;\n font-weight: 600;\n line-height: 18px;\n}\n\n.settings-nav-section-label:not(:first-child) {\n margin-top: 8px;\n}\n\n.settings-nav-button {\n display: grid;\n grid-template-columns: 16px minmax(0, 1fr);\n align-items: center;\n width: 100%;\n position: relative;\n min-height: 34px;\n flex: none;\n gap: 9px;\n padding: 6px 9px;\n color: var(--settings-text);\n font-size: 13px;\n line-height: 20px;\n text-align: left;\n background: transparent;\n border: 0;\n border-radius: 8px;\n cursor: pointer;\n}\n\n.settings-nav-button .codexhost-settings-icon {\n width: 16px;\n height: 16px;\n opacity: 0.9;\n}\n\n.settings-nav-button:hover {\n background: var(--settings-hover);\n}\n\n.settings-nav-button[aria-current="page"] {\n background: var(--settings-active);\n color: var(--settings-text);\n font-weight: 500;\n}\n\n.settings-nav-button span {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.settings-nav-star-link {\n margin-top: 0;\n color: var(--settings-text);\n text-decoration: none;\n}\n\n.settings-nav-star-link .codexhost-settings-icon {\n color: var(--settings-warning);\n}\n\n.settings-nav-star-link:hover {\n color: var(--settings-warning);\n background: var(--settings-warning-bg);\n}\n\n.settings-icon-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n flex: none;\n padding: 0;\n color: var(--settings-muted);\n background: transparent;\n border: 0;\n border-radius: 8px;\n cursor: pointer;\n}\n\n.settings-icon-button:hover {\n color: var(--settings-text);\n background: var(--settings-hover);\n}\n\n.settings-icon-button:focus-visible,\n.settings-nav-button:focus-visible {\n outline: 2px solid var(--settings-focus);\n outline-offset: 1px;\n}\n\n.settings-page {\n display: block;\n position: relative;\n min-width: 0;\n min-height: 0;\n overflow-y: auto;\n background: var(--settings-bg);\n scrollbar-gutter: stable;\n}\n\n.settings-page__content {\n width: min(930px, calc(100% - 80px));\n margin-inline: auto;\n}\n\n.settings-page__content {\n min-width: 0;\n padding: 28px 0 36px;\n}\n\n.settings-section-label {\n min-height: auto;\n margin: 0;\n padding: 0 0 18px;\n color: var(--settings-text);\n font-size: 18px;\n font-weight: 600;\n line-height: 26px;\n}\n\n.settings-status-list,\n.settings-empty {\n overflow: hidden;\n background: var(--settings-panel);\n}\n\n.settings-status-row {\n display: grid;\n grid-template-columns: minmax(170px, 1fr) auto minmax(280px, 1.45fr);\n position: relative;\n align-items: center;\n min-height: 72px;\n gap: 20px;\n padding: 12px 0;\n}\n\n.settings-status-row:not(:last-child)::after {\n content: "";\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n height: 1px;\n background: var(--settings-divider);\n}\n\n.settings-status-row__identity {\n display: inline-flex;\n align-items: center;\n min-width: 0;\n color: var(--settings-text);\n gap: 10px;\n font-size: 14px;\n font-weight: 500;\n line-height: 22px;\n}\n\n.settings-status-row__icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 36px;\n height: 36px;\n flex: none;\n color: var(--settings-muted);\n background: var(--settings-surface);\n border-radius: 50%;\n}\n\n.settings-status-badge {\n flex: none;\n padding: 3px 8px;\n color: var(--settings-muted);\n font-size: 11px;\n font-weight: 500;\n line-height: 18px;\n background: var(--settings-surface);\n border: 1px solid var(--settings-border);\n border-radius: 6px;\n}\n\n.settings-status-row__detail {\n min-width: 0;\n color: var(--settings-muted);\n font-size: 13px;\n line-height: 20px;\n}\n\n.settings-page-description {\n max-width: 760px;\n margin: -10px 0 20px;\n color: var(--settings-muted);\n font-size: 12px;\n line-height: 18px;\n}\n\n.settings-session-import-header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 24px;\n}\n\n.settings-session-import-header .settings-section-label {\n min-width: 0;\n}\n\n.settings-session-import-harness {\n display: flex;\n align-items: center;\n min-width: 0;\n gap: 12px;\n margin: -12px 0 16px;\n color: var(--settings-muted);\n font-size: 13px;\n}\n\n.settings-session-import-harness > span {\n flex: none;\n}\n\n.settings-session-import-harness__options {\n display: flex;\n align-items: center;\n min-width: 0;\n flex: 1;\n gap: 6px;\n overflow-x: auto;\n overflow-y: hidden;\n scrollbar-width: none;\n}\n\n.settings-session-import-harness__options::-webkit-scrollbar {\n display: none;\n}\n\n.settings-session-import-harness__option {\n min-height: 32px;\n flex: none;\n padding: 6px 10px;\n color: var(--settings-muted);\n font: inherit;\n font-size: 12px;\n white-space: nowrap;\n background: rgb(255 255 255 / 4%);\n border: 1px solid var(--settings-border);\n border-radius: 6px;\n cursor: pointer;\n}\n\n.settings-session-import-harness__option[aria-pressed="true"] {\n color: var(--settings-text);\n background: var(--settings-active);\n border-color: rgb(51 156 255 / 50%);\n}\n\n.settings-session-import-harness__option:disabled {\n opacity: 0.38;\n cursor: not-allowed;\n}\n\n.settings-session-import-harness__option:focus-visible {\n outline: 2px solid var(--settings-focus);\n outline-offset: 2px;\n}\n\n.settings-session-import-harness + .settings-page-description {\n margin-top: 0;\n margin-bottom: 4px;\n}\n\n.settings-session-import-availability-note {\n margin-top: 0;\n}\n\n.settings-session-import-search,\n.settings-session-import-pagination {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 10px;\n margin: 16px 0;\n}\n\n.settings-session-import-search input {\n flex: 1;\n min-width: 160px;\n}\n\n.settings-session-import-search input,\n.settings-session-import-pagination select {\n min-height: 36px;\n padding: 6px 10px;\n color: var(--settings-text);\n background: var(--settings-bg);\n border: 1px solid var(--settings-border);\n border-radius: 6px;\n}\n\n.settings-session-import-search input:focus-visible,\n.settings-session-import-pagination select:focus-visible {\n outline: 2px solid var(--settings-focus);\n outline-offset: 2px;\n}\n\n.settings-session-import-pagination {\n color: var(--settings-muted);\n font-size: 12px;\n}\n\n.settings-session-import-pagination label {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.settings-session-import-pagination > span {\n flex: 1;\n min-width: 130px;\n}\n\n.settings-session-import-pagination__navigation {\n display: flex;\n gap: 8px;\n margin-left: auto;\n}\n\n.settings-session-import-content,\n.settings-session-import-list {\n display: grid;\n gap: 10px;\n}\n\n.settings-session-import-status {\n display: flex;\n align-items: center;\n min-height: 64px;\n gap: 12px;\n padding: 16px;\n color: var(--settings-muted);\n background: var(--settings-panel);\n border: 1px solid var(--settings-border);\n border-radius: 8px;\n}\n\n.settings-session-import-status.is-error {\n color: #ef4444;\n}\n\n.settings-session-import-recovery {\n display: grid;\n justify-items: start;\n gap: 14px;\n padding: 16px;\n background: var(--settings-panel);\n border: 1px solid var(--settings-border);\n border-radius: 8px;\n}\n\n.settings-session-import-recovery:focus-visible {\n outline: 2px solid var(--settings-focus);\n outline-offset: 2px;\n}\n\n.settings-session-import-recovery__copy {\n display: grid;\n gap: 4px;\n}\n\n.settings-session-import-recovery__copy strong {\n color: var(--settings-text);\n font-size: 14px;\n}\n\n.settings-session-import-recovery__copy p {\n margin: 0;\n color: var(--settings-muted);\n font-size: 13px;\n line-height: 20px;\n}\n\n.settings-session-import-recovery__path {\n display: flex;\n align-items: stretch;\n width: 100%;\n min-width: 0;\n overflow: hidden;\n border: 1px solid var(--settings-border);\n border-radius: 6px;\n}\n\n.settings-session-import-recovery__path code {\n min-width: 0;\n flex: 1;\n padding: 8px 10px;\n overflow-x: auto;\n color: var(--settings-text);\n font-size: 12px;\n line-height: 20px;\n white-space: nowrap;\n}\n\n.settings-session-import-recovery__path .settings-command-button {\n min-height: 0;\n flex: none;\n border-width: 0 0 0 1px;\n border-radius: 0;\n}\n\n.settings-session-import-row {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n align-items: center;\n gap: 20px;\n min-width: 0;\n padding: 16px;\n background: var(--settings-panel);\n border: 1px solid var(--settings-border);\n border-radius: 8px;\n}\n\n.settings-session-import-row__copy {\n display: grid;\n min-width: 0;\n gap: 4px;\n}\n\n.settings-session-import-row__copy strong {\n overflow: hidden;\n color: var(--settings-text);\n font-size: 14px;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.settings-session-import-row__copy span,\n.settings-session-import-row__cwd {\n overflow: hidden;\n color: var(--settings-muted);\n font-size: 12px;\n line-height: 18px;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.settings-session-import-row__cwd {\n display: block;\n min-width: 0;\n background: transparent;\n}\n\n.settings-session-import-row__action {\n display: flex;\n align-items: flex-end;\n flex-direction: column;\n gap: 8px;\n}\n\n.settings-session-import-running {\n color: var(--settings-muted);\n font-size: 12px;\n}\n\n.settings-preference-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 32px;\n min-height: 88px;\n padding: 18px 0;\n border-top: 1px solid var(--settings-divider);\n border-bottom: 1px solid var(--settings-divider);\n}\n\n.settings-preference-row__copy {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n min-width: 0;\n gap: 5px;\n}\n\n.settings-preference-row__copy strong {\n color: var(--settings-text);\n font-size: 15px;\n font-weight: 600;\n line-height: 22px;\n}\n\n.settings-preference-row__copy span {\n max-width: 680px;\n color: var(--settings-muted);\n font-size: 13px;\n line-height: 20px;\n}\n\n.settings-preference-switch {\n display: inline-flex;\n align-items: center;\n width: 42px;\n height: 24px;\n flex: none;\n padding: 2px;\n border: 0;\n border-radius: 999px;\n background: var(--settings-surface-hover);\n cursor: pointer;\n transition: background 120ms ease;\n}\n\n.settings-preference-switch[aria-checked="true"] {\n justify-content: flex-end;\n background: var(--settings-focus);\n}\n\n.settings-preference-switch:focus-visible {\n outline: 2px solid var(--settings-focus);\n outline-offset: 2px;\n}\n\n.settings-preference-switch__thumb {\n width: 20px;\n height: 20px;\n border-radius: 50%;\n background: var(--settings-primary-text);\n box-shadow: 0 1px 3px rgb(0 0 0 / 24%);\n}\n\n.settings-preference-checkbox {\n width: 18px;\n height: 18px;\n flex: none;\n margin: 0;\n accent-color: var(--settings-focus);\n cursor: pointer;\n}\n\n.settings-preference-checkbox:focus-visible {\n outline: 2px solid var(--settings-focus);\n outline-offset: 2px;\n}\n\n.settings-connection-page-header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 18px;\n margin-bottom: 18px;\n}\n\n.settings-connection-page-header .settings-section-label {\n padding-bottom: 0;\n}\n\n.settings-connection-page-header .settings-page-description {\n margin: 5px 0 0;\n}\n\n.settings-connections-content,\n.settings-connections-layout,\n.settings-connection-list,\n.settings-connection-rows {\n min-width: 0;\n}\n\n.settings-connections-layout {\n display: grid;\n grid-template-columns: minmax(0, 1.55fr) minmax(280px, 0.85fr);\n align-items: start;\n gap: 18px;\n}\n\n.settings-connection-list,\n.settings-connection-inspector {\n overflow: hidden;\n background: var(--settings-panel);\n border: 1px solid var(--settings-border);\n border-radius: 10px;\n}\n\n.settings-connection-host-strip {\n display: grid;\n grid-template-columns: 30px minmax(0, 1fr) 30px;\n align-items: center;\n min-width: 0;\n gap: 5px;\n padding: 9px 10px;\n border-bottom: 1px solid var(--settings-divider);\n}\n\n.settings-connection-host-scroll {\n display: none;\n align-items: center;\n justify-content: center;\n width: 30px;\n height: 34px;\n padding: 0;\n color: var(--settings-muted);\n background: var(--settings-inset);\n border: 1px solid var(--settings-border);\n border-radius: 8px;\n cursor: pointer;\n}\n\n.settings-connection-host-strip[data-connection-host-overflow="true"]\n .settings-connection-host-scroll {\n display: inline-flex;\n}\n\n.settings-connection-host-strip:not([data-connection-host-overflow="true"]) {\n grid-template-columns: minmax(0, 1fr);\n}\n\n.settings-connection-host-scroll:hover:not(:disabled) {\n color: var(--settings-text);\n background: var(--settings-hover);\n}\n\n.settings-connection-host-scroll:disabled {\n cursor: default;\n opacity: 0.35;\n}\n\n.settings-connection-host-scroll:focus-visible,\n.settings-connection-host-tab:focus-visible,\n.settings-connection-row:focus-visible,\n.settings-connection-install-link:focus-visible,\n.settings-connection-view-error:focus-visible {\n outline: 2px solid var(--settings-focus);\n outline-offset: 1px;\n}\n\n.settings-connection-host-tabs {\n display: flex;\n align-items: center;\n min-width: 0;\n gap: 6px;\n overflow-x: auto;\n overflow-y: hidden;\n overscroll-behavior-x: contain;\n scrollbar-width: none;\n scroll-behavior: smooth;\n scroll-snap-type: x proximity;\n touch-action: pan-x;\n}\n\n.settings-connection-host-tabs::-webkit-scrollbar {\n display: none;\n}\n\n.settings-connection-host-tab {\n display: inline-flex;\n align-items: center;\n height: 30px;\n min-width: max-content;\n flex: none;\n padding: 0 9px;\n color: var(--settings-muted);\n font: inherit;\n font-size: 12px;\n line-height: 18px;\n white-space: nowrap;\n background: var(--settings-inset);\n border: 1px solid var(--settings-border);\n border-radius: 7px;\n cursor: pointer;\n scroll-snap-align: start;\n}\n\n.settings-connection-host-tab:hover {\n color: var(--settings-text);\n background: var(--settings-hover);\n}\n\n.settings-connection-host-tab[aria-selected="true"] {\n color: var(--settings-text);\n font-weight: 600;\n background: var(--settings-active);\n border-color: var(--settings-border);\n}\n\n.settings-connection-table-header,\n.settings-connection-row {\n display: grid;\n grid-template-columns: minmax(160px, 1fr) minmax(92px, auto) 108px;\n align-items: center;\n min-width: 0;\n gap: 10px;\n}\n\n.settings-connection-table-header {\n min-height: 30px;\n padding: 0 10px;\n color: var(--settings-muted);\n font-size: 10px;\n font-weight: 600;\n line-height: 16px;\n text-transform: uppercase;\n letter-spacing: 0.06em;\n background: transparent;\n border-bottom: 1px solid var(--settings-divider);\n}\n\n.settings-connection-row {\n min-height: 52px;\n padding: 8px 10px;\n cursor: pointer;\n border-bottom: 1px solid var(--settings-divider);\n}\n\n.settings-connection-row:last-child {\n border-bottom: 0;\n}\n\n.settings-connection-row:hover {\n background: var(--settings-hover);\n}\n\n.settings-connection-row[data-connection-selected="true"] {\n background: var(--settings-surface);\n}\n\n.settings-connection-row__identity,\n.settings-connection-inspector__identity {\n display: inline-flex;\n align-items: center;\n min-width: 0;\n gap: 8px;\n color: var(--settings-text);\n}\n\n.settings-connection-row__identity strong,\n.settings-connection-inspector__identity strong {\n min-width: 0;\n overflow-wrap: anywhere;\n font-size: 12px;\n font-weight: 500;\n line-height: 18px;\n}\n\n.settings-connection-row__mark {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n flex: none;\n color: var(--settings-muted);\n font-size: 10px;\n font-weight: 700;\n background: var(--settings-surface);\n border-radius: 6px;\n}\n\n.settings-connection-row__mark--logo {\n color: var(--settings-text);\n background: transparent;\n}\n\n.settings-connection-row__mark--logo > img,\n.settings-connection-row__mark--logo > svg {\n display: block;\n max-width: 18px;\n max-height: 18px;\n}\n\n.settings-connection-row__status {\n display: inline-flex;\n align-items: center;\n width: fit-content;\n gap: 5px;\n color: var(--settings-muted);\n font-size: 11px;\n font-weight: 500;\n line-height: 18px;\n}\n\n.settings-connection-row__status::before {\n width: 6px;\n height: 6px;\n flex: none;\n content: "";\n background: currentColor;\n border-radius: 50%;\n}\n\n.settings-connection-row__status[data-connection-tone="ready"] {\n color: var(--settings-success);\n}\n\n.settings-connection-row__status[data-connection-tone="checking"] {\n color: var(--settings-warning);\n}\n\n.settings-connection-row__status[data-connection-tone="setup"] {\n color: var(--settings-muted);\n}\n\n.settings-connection-row__status[data-connection-tone="setup"]::before {\n background: transparent;\n border: 1.5px solid currentColor;\n}\n\n.settings-connection-row__status[data-connection-tone="failed"] {\n color: var(--settings-danger);\n}\n\n.settings-connection-row__action {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n min-width: 0;\n gap: 4px;\n}\n\n.settings-connection-row__handle {\n display: inline-flex;\n flex: none;\n align-items: center;\n justify-content: center;\n width: 16px;\n color: var(--settings-muted);\n cursor: grab;\n opacity: 0.6;\n}\n\n.settings-connection-row__handle:hover {\n opacity: 1;\n}\n\n.settings-connection-row[draggable="true"] {\n cursor: grab;\n}\n\n.settings-connection-row[data-connection-dragging="true"] {\n opacity: 0.4;\n}\n\n.settings-connection-row[data-connection-drop-indicator="before"] {\n box-shadow: inset 0 2px 0 0 var(--settings-focus);\n}\n\n.settings-connection-row[data-connection-drop-indicator="after"] {\n box-shadow: inset 0 -2px 0 0 var(--settings-focus);\n}\n\n.settings-connection-row__group-toggle {\n display: inline-flex;\n flex: none;\n align-items: center;\n justify-content: center;\n width: 26px;\n height: 26px;\n color: var(--settings-muted);\n background: transparent;\n border: 0;\n border-radius: 6px;\n cursor: pointer;\n}\n\n.settings-connection-row__group-toggle:hover {\n color: var(--settings-text);\n background: var(--settings-hover);\n}\n\n.settings-connection-group-divider {\n padding: 10px 12px 6px;\n color: var(--settings-muted);\n font-size: 10px;\n font-weight: 600;\n line-height: 16px;\n text-transform: uppercase;\n letter-spacing: 0.06em;\n /* No border-top here: the row immediately above already carries its own\n border-bottom (it is no longer :last-child once this divider follows\n it), so adding one here would double the separator line. */\n}\n\n.settings-connection-group-more[data-connection-drag-over="true"] {\n background: rgb(51 156 255 / 8%);\n}\n\n.settings-connection-group-hint {\n display: grid;\n gap: 3px;\n margin: 0 12px 12px;\n padding: 14px 16px;\n text-align: center;\n border: 1.5px dashed var(--settings-border);\n border-radius: 10px;\n}\n\n.settings-connection-group-more[data-connection-drag-over="true"] .settings-connection-group-hint {\n border-color: var(--settings-focus);\n}\n\n.settings-connection-group-hint strong {\n color: var(--settings-text);\n font-size: 12.5px;\n font-weight: 500;\n line-height: 18px;\n}\n\n.settings-connection-group-hint span {\n color: var(--settings-muted);\n font-size: 12px;\n line-height: 17px;\n}\n\n.settings-connection-group-reset {\n display: flex;\n width: 100%;\n align-items: center;\n gap: 6px;\n padding: 10px 12px;\n color: var(--settings-muted);\n font: inherit;\n font-size: 12px;\n text-align: left;\n background: transparent;\n border: 0;\n border-top: 1px solid var(--settings-divider);\n cursor: pointer;\n}\n\n.settings-connection-group-reset:hover {\n color: var(--settings-text);\n background: var(--settings-hover);\n}\n\n.settings-connection-install-link {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 26px;\n height: 26px;\n color: var(--settings-focus);\n text-decoration: none;\n background: transparent;\n border: 1px solid transparent;\n border-radius: 7px;\n opacity: 0;\n transition: opacity 120ms ease;\n}\n\n.settings-connection-row:hover .settings-connection-install-link,\n.settings-connection-install-link:focus-visible {\n opacity: 1;\n}\n\n.settings-connection-install-link:hover {\n color: var(--settings-focus);\n background: var(--settings-active);\n border-color: var(--settings-border);\n}\n\n.settings-connection-view-error {\n padding: 4px 7px;\n color: var(--settings-danger);\n font: inherit;\n font-size: 11px;\n line-height: 18px;\n background: transparent;\n border: 0;\n border-radius: 6px;\n cursor: pointer;\n}\n\n.settings-connection-view-error:hover {\n color: var(--settings-danger);\n background: var(--settings-danger-bg);\n}\n\n.settings-connection-inspector {\n position: sticky;\n top: 18px;\n}\n\n.settings-connection-inspector__header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n min-width: 0;\n gap: 10px;\n padding: 12px;\n border-bottom: 1px solid var(--settings-divider);\n}\n\n.settings-connection-inspector__body {\n display: grid;\n min-width: 0;\n gap: 12px;\n padding: 12px;\n}\n\n.settings-connection-install-callout {\n display: grid;\n grid-template-columns: 28px minmax(0, 1fr);\n gap: 9px;\n padding: 11px;\n background: var(--settings-surface);\n border: 0;\n border-radius: 8px;\n}\n\n.settings-connection-install-callout__icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n color: var(--settings-focus);\n background: var(--settings-active);\n border-radius: 7px;\n}\n\n.settings-connection-install-callout strong,\n.settings-connection-error-summary strong,\n.settings-connection-state-summary strong {\n display: block;\n margin: 0 0 4px;\n color: var(--settings-text);\n font-size: 12px;\n font-weight: 500;\n line-height: 18px;\n}\n\n.settings-connection-install-callout p,\n.settings-connection-error-summary p,\n.settings-connection-state-summary p,\n.settings-connection-issue-note {\n margin: 0;\n color: var(--settings-muted);\n font-size: 11px;\n line-height: 16px;\n}\n\n.settings-connection-install-button {\n width: fit-content;\n}\n\n.settings-connection-error-summary {\n padding: 13px 14px;\n color: var(--settings-danger);\n background: var(--settings-danger-bg);\n border: 1px solid var(--settings-danger-border);\n border-radius: 10px;\n}\n\n.settings-connection-error-metadata {\n display: grid;\n gap: 7px;\n padding: 12px;\n background: var(--settings-inset);\n border: 1px solid var(--settings-border);\n border-radius: 9px;\n}\n\n.settings-connection-detail-line {\n display: grid;\n grid-template-columns: 92px minmax(0, 1fr);\n gap: 10px;\n min-width: 0;\n color: var(--settings-muted);\n font-size: 10px;\n line-height: 16px;\n}\n\n.settings-connection-detail-line code {\n min-width: 0;\n overflow-wrap: anywhere;\n color: var(--settings-text);\n font-family: ui-monospace, "SFMono-Regular", Consolas, "Liberation Mono", monospace;\n white-space: pre-wrap;\n}\n\n.settings-connection-error-log-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 10px;\n}\n\n.settings-connection-error-log-header strong {\n color: var(--settings-text);\n font-size: 11px;\n font-weight: 600;\n}\n\n.settings-connection-error-log-header .settings-command-button {\n min-height: 30px;\n padding: 5px 9px;\n font-size: 11px;\n}\n\n.settings-connection-stderr {\n max-height: 220px;\n min-width: 0;\n margin: 0;\n padding: 11px;\n overflow: auto;\n color: var(--settings-text);\n font:\n 10px/16px ui-monospace,\n "SFMono-Regular",\n Consolas,\n "Liberation Mono",\n monospace;\n white-space: pre-wrap;\n overflow-wrap: anywhere;\n background: var(--settings-inset);\n border: 1px solid var(--settings-border);\n border-radius: 9px;\n}\n\n.settings-connection-error-actions {\n display: grid;\n grid-template-columns: minmax(0, 1fr);\n gap: 8px;\n}\n\n.settings-connection-error-actions .settings-command-button {\n width: 100%;\n}\n\n.settings-connection-issue-note {\n margin-top: -4px;\n}\n\n.settings-connection-state-summary {\n padding: 14px;\n background: var(--settings-surface);\n border: 1px solid var(--settings-border);\n border-radius: 10px;\n}\n\n.settings-empty {\n display: flex;\n align-items: center;\n min-height: 72px;\n padding: 12px 16px;\n}\n\n.settings-empty > div {\n display: grid;\n min-width: 0;\n gap: 2px;\n}\n\n.settings-empty strong {\n color: var(--settings-text);\n font-size: 13px;\n font-weight: 500;\n line-height: 19px;\n}\n\n.settings-empty span {\n color: var(--settings-muted);\n font-size: 13px;\n line-height: 19px;\n}\n\n.settings-about-panel {\n display: grid;\n max-width: 720px;\n gap: 18px;\n padding: 24px;\n background: var(--settings-panel);\n border: 1px solid var(--settings-border);\n border-radius: 12px;\n}\n\n.settings-about-product {\n color: var(--settings-text);\n font-size: 24px;\n font-weight: 700;\n line-height: 32px;\n}\n\n.settings-about-tagline {\n color: var(--settings-text);\n font-size: 16px;\n font-weight: 600;\n line-height: 24px;\n}\n\n.settings-about-copy {\n display: grid;\n max-width: 660px;\n gap: 12px;\n}\n\n.settings-about-copy p,\n.settings-about-repository p {\n margin: 0;\n color: var(--settings-muted);\n font-size: 13px;\n line-height: 21px;\n}\n\n.settings-about-star-callout {\n margin: 2px 0;\n color: var(--settings-warning);\n font-size: 14px;\n font-weight: 600;\n line-height: 22px;\n}\n\n.settings-about-repository {\n display: grid;\n gap: 10px;\n padding-top: 18px;\n border-top: 1px solid var(--settings-divider);\n}\n\n.settings-about-repository-link {\n display: flex;\n align-items: center;\n width: fit-content;\n min-width: 0;\n max-width: 100%;\n gap: 8px;\n color: var(--settings-focus);\n font-size: 13px;\n font-weight: 600;\n text-decoration: none;\n}\n\n.settings-about-repository-link:hover {\n text-decoration: underline;\n}\n\n.settings-about-repository-link code {\n min-width: 0;\n overflow: hidden;\n color: var(--settings-muted);\n font-family: ui-monospace, "SFMono-Regular", Consolas, "Liberation Mono", monospace;\n font-size: 11px;\n font-weight: 400;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.settings-page-error {\n padding: 16px;\n color: var(--settings-text);\n font-size: 13px;\n background: var(--settings-panel);\n border: 1px solid var(--settings-border);\n border-radius: 20px;\n}\n\n.settings-update-metadata {\n display: grid;\n grid-template-columns: repeat(3, minmax(0, 1fr));\n gap: 24px;\n margin-bottom: 24px;\n padding: 0 4px 20px;\n border-bottom: 1px solid var(--settings-divider);\n}\n\n.settings-update-metadata__item {\n display: grid;\n min-width: 0;\n gap: 4px;\n}\n\n.settings-update-metadata__item span {\n color: var(--settings-muted);\n font-size: 12px;\n line-height: 18px;\n}\n\n.settings-update-metadata__item strong {\n min-width: 0;\n overflow-wrap: anywhere;\n color: var(--settings-text);\n font-size: 15px;\n font-weight: 500;\n line-height: 22px;\n}\n\n/* The only emphasis on this screen: a latest version newer than the installed one. */\n.settings-update-metadata__value--newer {\n color: var(--settings-focus);\n}\n\n.settings-update-panel {\n display: grid;\n gap: 12px;\n padding: 20px;\n color: var(--settings-text);\n background: var(--settings-panel);\n border: 1px solid var(--settings-border);\n border-radius: 8px;\n}\n\n.settings-update-panel__head {\n display: flex;\n align-items: center;\n min-width: 0;\n gap: 8px;\n}\n\n.settings-update-panel__head .codexhost-settings-icon {\n color: var(--settings-muted);\n}\n\n.settings-update-panel[data-update-state="available"] .codexhost-settings-icon,\n.settings-update-panel[data-update-state="downloading"] .codexhost-settings-icon,\n.settings-update-panel[data-update-state="installing"] .codexhost-settings-icon,\n.settings-update-panel[data-update-state="restarting"] .codexhost-settings-icon {\n color: var(--settings-focus);\n}\n\n.settings-update-panel[data-update-state="current"] .codexhost-settings-icon {\n color: var(--settings-success);\n}\n\n.settings-update-panel[data-update-state="failed"] .codexhost-settings-icon,\n.settings-update-panel[data-update-state="error"] .codexhost-settings-icon {\n color: var(--settings-danger);\n}\n\n.settings-update-panel__title {\n min-width: 0;\n overflow-wrap: anywhere;\n color: var(--settings-text);\n font-size: 14px;\n font-weight: 600;\n line-height: 22px;\n}\n\n.settings-update-summary,\n.settings-update-error {\n margin: 0;\n overflow-wrap: anywhere;\n font-size: 13px;\n line-height: 20px;\n}\n\n.settings-update-summary {\n color: var(--settings-muted);\n}\n\n.settings-update-error {\n color: var(--settings-danger);\n}\n\n.settings-update-progress {\n width: 100%;\n height: 8px;\n accent-color: var(--settings-focus);\n}\n\n.settings-update-progress-detail {\n color: var(--settings-muted);\n font-size: 12px;\n line-height: 18px;\n}\n\n/* Release notes scroll with the page; a scroller inside a scroller traps the wheel. */\n.settings-update-notes-section {\n min-width: 0;\n margin-top: 24px;\n padding-top: 24px;\n border-top: 1px solid var(--settings-divider);\n}\n\n.settings-update-notes-section:empty {\n display: none;\n}\n\n.settings-update-notes {\n display: grid;\n min-width: 0;\n gap: 12px;\n color: var(--settings-muted);\n font-size: 14px;\n line-height: 22px;\n overflow-wrap: anywhere;\n}\n\n.settings-update-notes > :first-child {\n margin-top: 0;\n}\n\n.settings-update-notes > :last-child {\n margin-bottom: 0;\n}\n\n.settings-update-notes h1,\n.settings-update-notes h2,\n.settings-update-notes h3,\n.settings-update-notes h4,\n.settings-update-notes h5,\n.settings-update-notes h6 {\n margin: 6px 0 0;\n color: var(--settings-text);\n font-weight: 600;\n}\n\n.settings-update-notes h1 {\n font-size: 18px;\n line-height: 26px;\n}\n\n.settings-update-notes h2 {\n font-size: 17px;\n line-height: 24px;\n}\n\n.settings-update-notes h3,\n.settings-update-notes h4,\n.settings-update-notes h5,\n.settings-update-notes h6 {\n font-size: 14px;\n line-height: 22px;\n}\n\n.settings-update-notes p,\n.settings-update-notes ul,\n.settings-update-notes ol,\n.settings-update-notes pre,\n.settings-update-notes blockquote {\n margin: 0;\n}\n\n.settings-update-notes ul,\n.settings-update-notes ol {\n padding-left: 24px;\n}\n\n.settings-update-notes li {\n padding-left: 4px;\n}\n\n.settings-update-notes li::marker {\n color: var(--settings-muted);\n font-size: 0.85em;\n}\n\n.settings-update-notes li + li {\n margin-top: 14px;\n}\n\n.settings-update-notes .release-note-translation {\n display: block;\n margin-top: 3px;\n color: var(--settings-muted);\n font-size: 13px;\n line-height: 20px;\n}\n\n.settings-update-notes blockquote {\n padding: 8px 12px;\n color: var(--settings-muted);\n border-left: 3px solid var(--settings-focus);\n background: var(--settings-surface);\n}\n\n.settings-update-notes hr {\n width: 100%;\n margin: 2px 0;\n border: 0;\n border-top: 1px solid var(--settings-divider);\n}\n\n.settings-update-notes strong {\n color: var(--settings-text);\n font-weight: 600;\n}\n\n.settings-update-notes a {\n color: var(--settings-focus);\n text-decoration: none;\n}\n\n.settings-update-notes a:hover {\n text-decoration: underline;\n}\n\n.settings-update-notes code {\n font-family: ui-monospace, "SFMono-Regular", Consolas, "Liberation Mono", monospace;\n font-size: 12px;\n}\n\n.settings-update-notes :not(pre) > code {\n padding: 1px 5px;\n background: var(--settings-surface);\n border-radius: 4px;\n}\n\n.settings-update-notes pre {\n min-width: 0;\n max-width: 100%;\n padding: 10px 12px;\n overflow-x: auto;\n overflow-y: hidden;\n background: var(--settings-inset);\n border-radius: 6px;\n}\n\n.settings-update-notes pre code {\n line-height: 18px;\n white-space: pre-wrap;\n}\n\n/* Manual update sits directly under the status panel, not behind a disclosure:\n automatic updates can fail for machine-local reasons and this is the way out. */\n.settings-update-controls {\n display: grid;\n min-width: 0;\n gap: 10px;\n margin-top: 24px;\n}\n\n.settings-update-manual-title {\n color: var(--settings-text);\n font-size: 15px;\n font-weight: 600;\n line-height: 22px;\n}\n\n.settings-update-manual {\n display: grid;\n min-width: 0;\n gap: 8px;\n}\n\n.settings-update-manual[hidden] {\n display: none;\n}\n\n.settings-update-manual-description {\n margin: 0;\n color: var(--settings-muted);\n font-size: 12px;\n line-height: 18px;\n}\n\n.settings-update-manual-description.is-fallback {\n color: var(--settings-danger);\n}\n\n.settings-update-command {\n display: flex;\n align-items: stretch;\n min-width: 0;\n overflow: hidden;\n border: 1px solid var(--settings-border);\n border-radius: 6px;\n}\n\n.settings-update-command code {\n min-width: 0;\n flex: 1;\n padding: 9px 12px;\n overflow-x: auto;\n color: var(--settings-text);\n font-family: ui-monospace, "SFMono-Regular", Consolas, "Liberation Mono", monospace;\n font-size: 12px;\n line-height: 20px;\n white-space: nowrap;\n}\n\n.settings-update-command__copy {\n display: inline-flex;\n align-items: center;\n flex: none;\n gap: 6px;\n padding: 0 12px;\n color: var(--settings-muted);\n font-size: 12px;\n background: transparent;\n border: 0;\n border-left: 1px solid var(--settings-border);\n cursor: pointer;\n}\n\n.settings-update-command__copy:hover {\n color: var(--settings-text);\n background: var(--settings-hover);\n}\n\n.settings-update-command__copy:focus-visible {\n outline: 2px solid var(--settings-focus);\n outline-offset: -2px;\n}\n\n.settings-update-actions {\n display: flex;\n align-items: center;\n min-width: 0;\n gap: 12px;\n flex-wrap: wrap;\n}\n\n.settings-command-button,\n.settings-update-link {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex: none;\n width: max-content;\n max-width: 100%;\n min-height: 30px;\n gap: 6px;\n padding: 5px 10px;\n white-space: nowrap;\n color: var(--settings-primary-text);\n font: inherit;\n font-size: 12px;\n text-decoration: none;\n background: var(--settings-primary);\n border: 1px solid var(--settings-primary);\n border-radius: 7px;\n cursor: pointer;\n}\n\n.settings-command-button--secondary,\n.settings-update-link {\n color: var(--settings-text);\n background: var(--settings-panel);\n border-color: var(--settings-border);\n}\n\n.settings-command-button:hover:not(:disabled) {\n background: var(--settings-primary-hover);\n border-color: var(--settings-primary-hover);\n}\n\n.settings-command-button--secondary:hover:not(:disabled),\n.settings-update-link:hover {\n background: var(--settings-hover);\n border-color: var(--settings-border);\n}\n\n.settings-command-button--danger {\n color: #f87171;\n}\n\n.settings-command-button--danger:hover:not(:disabled) {\n color: #fecaca;\n background: rgb(127 29 29 / 24%);\n border-color: rgb(248 113 113 / 45%);\n}\n\n.settings-command-button:disabled {\n cursor: default;\n opacity: 0.45;\n}\n\n.settings-command-button:disabled,\n.settings-command-button[aria-disabled="true"] {\n opacity: 0.55;\n cursor: not-allowed;\n filter: none;\n}\n\n.settings-command-button:focus-visible,\n.settings-update-link:focus-visible {\n outline: 2px solid var(--settings-focus);\n outline-offset: 2px;\n}\n\n.codexhost-settings-icon {\n display: block;\n flex: none;\n stroke: currentColor;\n}\n\n@media (max-width: 720px) {\n .codexhost-settings-dialog {\n width: calc(100vw - 16px);\n height: calc(100vh - 16px);\n border-radius: 10px;\n }\n\n .settings-layout {\n grid-template-columns: minmax(0, 1fr);\n grid-template-rows: auto minmax(0, 1fr);\n }\n\n .settings-session-import-row {\n grid-template-columns: minmax(0, 1fr);\n }\n\n .settings-session-import-row__action {\n align-items: flex-start;\n }\n\n .settings-sidebar {\n border-right: 0;\n border-bottom: 1px solid var(--settings-border);\n }\n\n .settings-header {\n height: 56px;\n padding-inline: 14px;\n }\n\n .settings-sidebar {\n padding-top: 20px;\n }\n\n .settings-nav {\n flex: none;\n flex-direction: row;\n gap: 4px;\n padding: 7px 8px 8px;\n overflow-x: auto;\n overflow-y: hidden;\n }\n\n .settings-nav-section-label {\n display: none;\n }\n\n .settings-nav-button {\n width: auto;\n min-width: max-content;\n min-height: 34px;\n grid-template-columns: 16px auto;\n border-radius: 10px;\n }\n\n .settings-nav-star-link {\n margin-top: 0;\n }\n\n .settings-page__content {\n width: calc(100% - 40px);\n }\n\n .settings-page__content {\n padding-top: 32px;\n padding-bottom: 32px;\n }\n\n .settings-section-label {\n padding-bottom: 20px;\n font-size: 20px;\n line-height: 26px;\n }\n\n .settings-update-metadata {\n grid-template-columns: minmax(0, 1fr);\n gap: 16px;\n }\n\n .settings-status-row {\n grid-template-columns: minmax(0, 1fr) auto;\n gap: 16px;\n }\n\n .settings-account-header,\n .settings-connection-page-header {\n flex-direction: column;\n }\n\n .settings-account-header > .settings-command-button,\n .settings-connection-page-header > .settings-command-button {\n width: 100%;\n }\n\n .settings-connections-layout {\n grid-template-columns: minmax(0, 1fr);\n }\n\n .settings-connection-inspector {\n position: static;\n }\n\n .settings-status-row__detail {\n grid-column: 1 / -1;\n margin: -8px 0 0 58px;\n }\n}\n\n@media (forced-colors: active) {\n :host {\n --settings-bg: Canvas;\n --settings-sidebar: Canvas;\n --settings-panel: Canvas;\n --settings-surface: Canvas;\n --settings-surface-hover: Highlight;\n --settings-inset: Canvas;\n --settings-text: CanvasText;\n --settings-muted: GrayText;\n --settings-subtle: GrayText;\n --settings-border: ButtonBorder;\n --settings-divider: ButtonBorder;\n --settings-hover: Highlight;\n --settings-active: Highlight;\n --settings-focus: Highlight;\n --settings-primary: ButtonFace;\n --settings-primary-hover: Highlight;\n --settings-primary-text: ButtonText;\n --settings-warning: CanvasText;\n --settings-warning-bg: Canvas;\n --settings-warning-border: ButtonBorder;\n --settings-danger: CanvasText;\n --settings-danger-bg: Canvas;\n --settings-danger-border: ButtonBorder;\n --settings-success: CanvasText;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n *,\n *::before,\n *::after {\n scroll-behavior: auto !important;\n transition-duration: 0s !important;\n }\n}\n';
25507
25774
 
25508
25775
  // src/settings/accounts.css
25509
- var accounts_default = '.settings-harness-accounts {\n margin-top: 32px;\n}\n\n.settings-harness-accounts__title {\n margin: 0 0 16px;\n font-size: 14px;\n font-weight: 500;\n}\n\n.settings-harness-account__identity {\n min-width: 0;\n}\n\n.settings-harness-account__identity > .settings-account-email {\n display: block;\n max-width: 24ch;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.settings-harness-account__logo {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 40px;\n height: 40px;\n flex: none;\n}\n\n.settings-harness-account {\n display: grid;\n grid-template-columns: minmax(180px, 1fr) minmax(0, 2fr);\n align-items: center;\n gap: 24px;\n padding: 24px;\n}\n\n.settings-harness-account + .settings-harness-account {\n border-top: 1px solid var(--settings-border);\n}\n\n.settings-harness-account > div {\n min-width: 0;\n overflow-wrap: anywhere;\n}\n\n@media (max-width: 700px) {\n .settings-harness-account {\n grid-template-columns: minmax(0, 1fr);\n padding: 16px;\n }\n}\n\n.settings-account-header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 20px;\n}\n\n.settings-account-eyebrow {\n margin: 0 0 8px;\n color: var(--settings-muted);\n font-size: 11px;\n letter-spacing: 0.13em;\n}\n\n.settings-account-header > :first-child {\n min-width: 0;\n flex: 1 1 auto;\n}\n\n.settings-account-header > .settings-command-button {\n flex: none;\n white-space: nowrap;\n margin-top: 20px;\n min-height: 36px;\n padding: 8px 12px;\n border-radius: 7px;\n}\n\n.settings-account-header .settings-section-label {\n margin: 0;\n padding: 0;\n font-size: 27px;\n line-height: 1.4;\n font-weight: 650;\n letter-spacing: -0.035em;\n}\n.settings-account-header .settings-page-description {\n margin: 8px 0 0;\n font-size: 13px;\n}\n\n.settings-account-status {\n margin: 0;\n color: var(--settings-muted);\n font-size: 12px;\n}\n.settings-account-status:empty {\n display: none;\n}\n\n.settings-account-help-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n margin-top: 20px;\n flex-wrap: wrap;\n}\n.settings-account-task-hint {\n display: flex;\n align-items: flex-start;\n gap: 9px;\n margin: 0;\n color: var(--settings-muted);\n font-size: 12px;\n flex: 1 1 280px;\n}\n.settings-account-task-hint svg {\n flex: none;\n margin-top: 1px;\n}\n.settings-account-help-button {\n display: inline-flex;\n align-items: center;\n gap: 7px;\n padding: 8px 12px;\n color: var(--settings-muted);\n font-size: 12px;\n background: transparent;\n border: 0;\n border-radius: 7px;\n cursor: pointer;\n}\n.settings-account-help-button:hover {\n color: var(--settings-text);\n background: var(--settings-hover);\n}\n.settings-account-device-code-note {\n margin: 12px 0 0;\n font-size: 12px;\n padding: 10px 12px;\n color: var(--settings-warning);\n background: var(--settings-warning-bg);\n border: 1px solid var(--settings-warning-border);\n border-radius: 8px;\n}\n\n.settings-account-toolbar {\n margin-top: 27px;\n padding: 18px 0;\n border-top: 1px solid var(--settings-border);\n display: flex;\n align-items: center;\n gap: 14px;\n flex-wrap: wrap;\n}\n.settings-account-count {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n white-space: nowrap;\n}\n.settings-account-count > :last-child {\n color: var(--settings-muted);\n font-variant-numeric: tabular-nums;\n}\n.settings-account-search {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--settings-muted);\n margin-right: auto;\n min-width: 0;\n max-width: 100%;\n}\n.settings-account-search svg {\n flex: none;\n}\n.settings-account-toolbar input {\n min-width: 80px;\n width: 150px;\n max-width: 100%;\n padding: 5px 0;\n color: var(--settings-text);\n background: transparent;\n border: 0;\n font-size: 13px;\n}\n.settings-account-toolbar input::placeholder {\n color: var(--settings-muted);\n}\n.settings-account-display-controls {\n display: flex;\n padding: 3px;\n border: 1px solid var(--settings-border);\n border-radius: 7px;\n background: var(--settings-inset);\n}\n.settings-account-display-controls button {\n padding: 4px 10px;\n color: var(--settings-muted);\n background: transparent;\n border: 0;\n border-radius: 4px;\n font-size: 12px;\n cursor: pointer;\n}\n.settings-account-display-controls button:hover {\n color: var(--settings-text);\n}\n.settings-account-display-controls button[aria-pressed="true"] {\n color: var(--settings-text);\n background: var(--settings-active);\n}\n\n.settings-account-list {\n --account-border: light-dark(#e2e2e8, #36363b);\n --account-muted: light-dark(#676773, #a5a5af);\n border: 1px solid var(--account-border);\n border-radius: 11px;\n overflow: hidden;\n container-type: inline-size;\n}\n.settings-account-table {\n width: 100%;\n table-layout: fixed;\n border-collapse: collapse;\n font-size: 12px;\n}\n.settings-account-table th {\n padding: 13px 20px;\n color: var(--account-muted);\n background: light-dark(#f8f8fa, #202024);\n font-size: 11px;\n font-weight: 500;\n text-align: left;\n}\n.settings-account-table th:nth-child(1) {\n width: 32%;\n}\n.settings-account-table th:nth-child(2) {\n width: 38%;\n}\n.settings-account-table th:nth-child(3) {\n width: 12%;\n}\n.settings-account-table th:nth-child(4) {\n width: 18%;\n text-align: right;\n}\n.settings-account-table td {\n padding: 19px 20px;\n vertical-align: middle;\n border-top: 1px solid var(--settings-divider);\n}\n.settings-account-row {\n background: light-dark(#ffffff, #232326);\n}\n.settings-account-row:hover {\n background: light-dark(#f7f7fa, #26262a);\n}\n.settings-account-row__person {\n display: grid;\n grid-template-columns: 34px minmax(0, 1fr);\n align-items: center;\n gap: 11px;\n min-width: 0;\n}\n.settings-account-row__mark {\n display: grid;\n place-items: center;\n width: 34px;\n height: 34px;\n color: light-dark(#67558d, #c3baff);\n background: light-dark(#f0ecf7, #353044);\n border: 1px solid light-dark(#d9d0e6, #4d435f);\n border-radius: 10px;\n}\n.settings-account-row__identity {\n min-width: 0;\n}\n.settings-account-title {\n display: flex;\n align-items: center;\n gap: 6px;\n flex-wrap: wrap;\n}\n.settings-account-email {\n min-width: 0;\n overflow: hidden;\n font-size: 13px;\n font-weight: 550;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.settings-account-metadata {\n display: flex;\n align-items: center;\n min-width: 0;\n gap: 7px;\n margin-top: 4px;\n color: var(--settings-muted);\n}\n.settings-account-domain {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.settings-account-plan-separator {\n flex: none;\n}\n.settings-account-plan {\n flex: none;\n padding: 1px 6px;\n color: var(--settings-muted);\n border: 1px solid var(--settings-border);\n border-radius: 5px;\n font-size: 11px;\n white-space: nowrap;\n}\n.settings-account-plan--highlighted {\n color: light-dark(#654f91, #c8bfff);\n background: light-dark(#f2edf9, #a99bff18);\n border-color: light-dark(#d9ccea, #a99bff52);\n font-weight: 600;\n}\n.settings-account-active {\n flex: none;\n padding: 2px 7px;\n color: light-dark(#66548e, #bdb4ff);\n background: light-dark(#f4f0fb, #aca0ff12);\n border: 1px solid light-dark(#dfd5f1, #aca0ff24);\n border-radius: 5px;\n font-size: 11px;\n white-space: nowrap;\n}\n\n.settings-account-usage {\n display: grid;\n gap: 14px;\n max-width: 380px;\n}\n.settings-account-usage__meter {\n display: grid;\n grid-template-columns: 48px minmax(36px, 1fr) 96px;\n align-items: center;\n gap: 3px 10px;\n}\n:host([lang="zh-CN"]) .settings-account-usage__meter {\n grid-template-columns: 48px minmax(36px, 1fr) 72px;\n}\n\n.settings-account-usage__title {\n color: light-dark(#5d5d68, #c3c3cd);\n font-size: 12px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.settings-account-usage__percent {\n display: flex;\n align-items: baseline;\n justify-content: flex-end;\n gap: 4px;\n font-size: 14px;\n font-weight: 600;\n font-variant-numeric: tabular-nums;\n white-space: nowrap;\n}\n.settings-account-usage__value-label {\n color: var(--settings-muted);\n font-size: 11px;\n font-weight: 400;\n}\n.settings-account-usage__percent--warn {\n color: var(--settings-warning);\n}\n.settings-account-usage__percent--hot {\n color: var(--settings-danger);\n}\n.settings-account-usage__bar {\n height: 4px;\n overflow: hidden;\n background: light-dark(#e3e1e8, #3c3c43);\n border-radius: 4px;\n}\n.settings-account-usage__bar > span {\n display: block;\n height: 100%;\n background: light-dark(#81769e, #9993b8);\n border-radius: inherit;\n}\n.settings-account-usage__bar--warn > span {\n background: var(--settings-warning);\n}\n.settings-account-usage__bar--hot > span {\n background: var(--settings-danger);\n}\n.settings-account-usage__sub {\n grid-column: 2 / -1;\n color: var(--account-muted);\n font-size: 11px;\n font-variant-numeric: tabular-nums;\n overflow-wrap: anywhere;\n}\n.settings-account-usage__message,\n.settings-account-unknown {\n color: var(--settings-muted);\n}\n.settings-account-usage > button {\n justify-self: start;\n}\n.settings-account-actions {\n display: flex;\n justify-content: flex-end;\n align-items: center;\n gap: 4px;\n flex-wrap: wrap;\n}\n.settings-account-action {\n padding: 8px 10px;\n min-height: 36px;\n font-size: 12px;\n color: var(--settings-text);\n background: transparent;\n border: 1px solid transparent;\n border-radius: 7px;\n white-space: nowrap;\n cursor: pointer;\n}\n.settings-account-action:hover {\n background: var(--settings-hover);\n}\n.settings-account-action:disabled {\n opacity: 0.45;\n cursor: not-allowed;\n}\n.settings-account-actions .settings-account-delete {\n color: var(--settings-muted);\n}\n.settings-account-actions .settings-account-delete:hover,\n.settings-account-actions .settings-account-delete:focus-visible {\n color: var(--settings-danger);\n background: var(--settings-danger-bg);\n}\n.settings-account-mobile-label {\n display: none;\n}\n.settings-account-reset-summary {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n min-height: 32px;\n padding: 3px 0;\n font-size: 12px;\n white-space: nowrap;\n color: var(--settings-text);\n background: transparent;\n border: 0;\n border-radius: 5px;\n cursor: pointer;\n}\n.settings-account-reset-summary:hover {\n background: var(--settings-hover);\n}\n.settings-account-reset-summary[aria-expanded="true"] > svg:last-child {\n transform: rotate(90deg);\n}\n.settings-account-details-row > td {\n background: var(--settings-inset);\n}\n.settings-account-reset-details {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 16px;\n flex-wrap: wrap;\n}\n.settings-account-reset-details strong {\n font-size: 12px;\n}\n.settings-account-reset-expiry {\n margin: 6px 0;\n color: var(--settings-muted);\n font-size: 11px;\n}\n.settings-account-reset-expiry.is-warn {\n color: var(--settings-warning);\n}\n.settings-account-reset-expiry.is-hot {\n color: var(--settings-danger);\n}\n.settings-account-reset-list {\n margin: 8px 0 0;\n padding: 0;\n list-style: none;\n color: var(--settings-muted);\n font-size: 11px;\n}\n.settings-account-reset-list li + li {\n margin-top: 4px;\n}\n.settings-account-empty {\n text-align: center;\n color: var(--settings-muted);\n}\n.settings-account-verification {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n color: var(--settings-muted);\n}\n.settings-account-verification a {\n color: var(--settings-focus);\n overflow-wrap: anywhere;\n}\n.settings-account-verification code {\n padding: 5px 8px;\n color: var(--settings-text);\n font-size: 15px;\n font-weight: 600;\n letter-spacing: 0.08em;\n background: var(--settings-inset);\n border-radius: 6px;\n}\n.settings-account-list :focus-visible,\n.settings-account-toolbar :focus-visible,\n.settings-account-help-button:focus-visible {\n outline: 2px solid var(--settings-focus);\n outline-offset: -2px;\n}\n\n@container (min-width: 611px) and (max-width: 800px) {\n .settings-account-table th,\n .settings-account-table td {\n padding-left: 12px;\n padding-right: 12px;\n }\n .settings-account-table th:nth-child(1) {\n width: 30%;\n }\n .settings-account-table th:nth-child(2) {\n width: 37%;\n }\n .settings-account-table th:nth-child(4) {\n width: 21%;\n }\n}\n\n@container (max-width: 610px) {\n .settings-account-table,\n .settings-account-table tbody {\n display: block;\n }\n .settings-account-table thead {\n display: none;\n }\n .settings-account-row {\n display: grid;\n grid-template-columns: 1fr 1fr;\n padding: 16px;\n gap: 12px;\n border-bottom: 1px solid var(--settings-divider);\n }\n .settings-account-table .settings-account-row > td {\n padding: 0;\n border: 0;\n }\n .settings-account-row > td:nth-child(1),\n .settings-account-row > td:nth-child(2) {\n grid-column: 1 / -1;\n }\n .settings-account-row > td:nth-child(3) {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n .settings-account-mobile-label {\n display: inline;\n color: var(--settings-muted);\n font-size: 11px;\n }\n .settings-account-usage {\n max-width: none;\n }\n .settings-account-table tr:not(.settings-account-row),\n .settings-account-table tr:not(.settings-account-row) > td {\n display: block;\n }\n}\n\n@media (forced-colors: active) {\n .settings-account-usage__bar {\n border: 1px solid CanvasText;\n }\n .settings-account-usage__bar > span {\n background: Highlight;\n }\n}\n';
25776
+ var accounts_default = '.settings-harness-account__logo {\n display: grid;\n place-items: center;\n width: 34px;\n height: 34px;\n}\n\n.settings-account-header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 20px;\n}\n\n.settings-account-header > :first-child {\n min-width: 0;\n flex: 1 1 auto;\n}\n\n.settings-account-header > .settings-command-button {\n flex: none;\n white-space: nowrap;\n margin-top: 0;\n min-height: 36px;\n padding: 8px 12px;\n border-radius: 7px;\n}\n\n.settings-account-header .settings-section-label {\n margin: 0;\n padding: 0;\n font-size: 27px;\n line-height: 1.4;\n font-weight: 650;\n letter-spacing: -0.035em;\n}\n.settings-account-header .settings-page-description {\n margin: 8px 0 0;\n font-size: 13px;\n}\n\n.settings-account-status {\n margin: 0;\n color: var(--settings-muted);\n font-size: 12px;\n}\n.settings-account-status:empty {\n display: none;\n}\n\n.settings-account-toolbar {\n margin-top: 27px;\n padding: 18px 0;\n border-top: 1px solid var(--settings-border);\n display: flex;\n align-items: center;\n gap: 14px;\n flex-wrap: wrap;\n}\n.settings-account-count {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n white-space: nowrap;\n}\n.settings-account-count > :last-child {\n color: var(--settings-muted);\n font-variant-numeric: tabular-nums;\n}\n.settings-account-search {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--settings-muted);\n margin-right: auto;\n min-width: 0;\n max-width: 100%;\n}\n.settings-account-search svg {\n flex: none;\n}\n.settings-account-toolbar input {\n min-width: 80px;\n width: 210px;\n max-width: 100%;\n padding: 5px 0;\n color: var(--settings-text);\n background: transparent;\n border: 0;\n font-size: 13px;\n}\n.settings-account-toolbar input::placeholder {\n color: var(--settings-muted);\n}\n.settings-account-display-controls {\n display: flex;\n padding: 3px;\n border: 1px solid var(--settings-border);\n border-radius: 7px;\n background: var(--settings-inset);\n}\n.settings-account-display-controls button {\n padding: 4px 10px;\n color: var(--settings-muted);\n background: transparent;\n border: 0;\n border-radius: 4px;\n font-size: 12px;\n cursor: pointer;\n}\n.settings-account-display-controls button:hover {\n color: var(--settings-text);\n}\n.settings-account-display-controls button[aria-pressed="true"] {\n color: var(--settings-text);\n background: var(--settings-active);\n}\n\n.settings-account-list {\n --account-border: light-dark(#e2e2e8, #36363b);\n --account-muted: light-dark(#676773, #a5a5af);\n border: 1px solid var(--account-border);\n border-radius: 11px;\n overflow: hidden;\n container-type: inline-size;\n}\n.settings-account-table {\n width: 100%;\n table-layout: fixed;\n border-collapse: collapse;\n font-size: 12px;\n}\n.settings-account-table th {\n padding: 12px 16px;\n color: var(--account-muted);\n background: light-dark(#f8f8fa, #202024);\n font-size: 11px;\n font-weight: 500;\n text-align: left;\n}\n.settings-account-table th:nth-child(1) {\n width: 32%;\n}\n.settings-account-table th:nth-child(2),\n.settings-account-table th:nth-child(3) {\n width: 24%;\n}\n.settings-account-table th:nth-child(4) {\n width: 20%;\n text-align: right;\n}\n.settings-account-table td {\n padding: 17px 16px;\n vertical-align: middle;\n border-top: 1px solid var(--settings-divider);\n}\n.settings-account-row {\n background: light-dark(#ffffff, #232326);\n}\n.settings-account-row:hover {\n background: light-dark(#f7f7fa, #26262a);\n}\n.settings-account-row__person {\n display: grid;\n grid-template-columns: 34px minmax(0, 1fr);\n align-items: center;\n gap: 11px;\n min-width: 0;\n}\n.settings-account-row__mark {\n display: grid;\n place-items: center;\n width: 34px;\n height: 34px;\n color: light-dark(#67558d, #c3baff);\n background: light-dark(#f0ecf7, #353044);\n border: 1px solid light-dark(#d9d0e6, #4d435f);\n border-radius: 10px;\n}\n.settings-account-row__identity {\n min-width: 0;\n}\n.settings-account-email {\n display: block;\n min-width: 0;\n overflow: hidden;\n font-size: 12px;\n font-weight: 550;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.settings-account-metadata {\n display: flex;\n align-items: center;\n min-width: 0;\n gap: 5px;\n margin-top: 4px;\n color: var(--settings-muted);\n flex-wrap: wrap;\n font-size: 11px;\n overflow-wrap: anywhere;\n}\n.settings-account-plan {\n flex: none;\n padding: 0 4px;\n color: var(--settings-muted);\n border: 1px solid var(--settings-border);\n border-radius: 5px;\n font-size: 10px;\n max-width: 100%;\n overflow-wrap: anywhere;\n}\n.settings-account-plan--highlighted {\n color: light-dark(#654f91, #c8bfff);\n background: light-dark(#f2edf9, #a99bff18);\n border-color: light-dark(#d9ccea, #a99bff52);\n font-weight: 600;\n}\n.settings-account-active {\n flex: none;\n color: light-dark(#66548e, #c8bfff);\n font-size: 10px;\n white-space: nowrap;\n}\n\n.settings-account-usage {\n display: grid;\n gap: 10px;\n}\n.settings-account-usage__meter {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n grid-template-rows: 20px 4px 17px;\n align-items: center;\n gap: 6px 0;\n min-width: 0;\n font-variant-numeric: tabular-nums;\n}\n.settings-account-usage__title {\n display: none;\n min-width: 0;\n color: var(--settings-muted);\n font-size: 11px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.settings-account-extra-usage {\n display: grid;\n gap: 12px;\n margin-top: 14px;\n}\n.settings-account-extra-usage .settings-account-usage__meter {\n grid-template-rows: auto 20px 4px 17px;\n}\n.settings-account-extra-usage .settings-account-usage__title {\n display: block;\n grid-column: 1 / -1;\n white-space: normal;\n overflow-wrap: anywhere;\n}\n.settings-account-usage__percent {\n grid-column: 1 / -1;\n min-width: 0;\n display: flex;\n align-items: baseline;\n justify-content: flex-end;\n gap: 7px;\n font-size: 14px;\n font-weight: 600;\n font-variant-numeric: tabular-nums;\n white-space: nowrap;\n}\n.settings-account-usage__countdown {\n min-width: 0;\n color: var(--settings-muted);\n font-size: 10px;\n font-weight: 400;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.settings-account-usage__percent > :last-child {\n flex: none;\n}\n.settings-account-usage__percent--warn {\n color: var(--settings-warning);\n}\n.settings-account-usage__percent--hot {\n color: var(--settings-danger);\n}\n.settings-account-usage__bar {\n grid-column: 1 / -1;\n height: 4px;\n overflow: hidden;\n background: light-dark(#e3e1e8, #3c3c43);\n border-radius: 4px;\n}\n.settings-account-usage__bar > span {\n display: block;\n height: 100%;\n background: light-dark(#81769e, #9993b8);\n border-radius: inherit;\n}\n.settings-account-usage__bar--warn > span {\n background: var(--settings-warning);\n}\n.settings-account-usage__bar--hot > span {\n background: var(--settings-danger);\n}\n.settings-account-usage__sub {\n grid-column: 1 / -1;\n color: var(--account-muted);\n font-size: 10px;\n font-variant-numeric: tabular-nums;\n text-align: right;\n white-space: nowrap;\n}\n.settings-account-usage__message {\n color: var(--settings-muted);\n}\n.settings-account-usage__missing {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n align-content: center;\n gap: 6px;\n min-height: 53px;\n color: var(--settings-muted);\n}\n.settings-account-usage__missing > span:not(.settings-account-usage__title) {\n grid-column: 1 / -1;\n font-size: 14px;\n}\n.settings-account-management {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: 4px;\n}\n.settings-account-native {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: 3px;\n color: var(--settings-muted);\n font-size: 11px;\n}\n.settings-account-native .settings-icon-button {\n width: 25px;\n height: 28px;\n}\n.settings-account-usage > button {\n justify-self: start;\n}\n.settings-account-actions {\n display: flex;\n justify-content: flex-end;\n align-items: center;\n gap: 4px;\n flex-wrap: wrap;\n}\n.settings-account-action {\n padding: 4px 5px;\n min-height: 30px;\n font-size: 12px;\n color: var(--settings-text);\n background: transparent;\n border: 1px solid transparent;\n border-radius: 7px;\n white-space: nowrap;\n cursor: pointer;\n}\n.settings-account-action:hover {\n background: var(--settings-hover);\n}\n.settings-account-action:disabled {\n opacity: 0.45;\n cursor: not-allowed;\n}\n.settings-account-delete {\n color: var(--settings-danger);\n}\n.settings-account-delete:hover,\n.settings-account-delete:focus-visible {\n color: var(--settings-danger);\n background: var(--settings-danger-bg);\n}\n.settings-account-reset-summary {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n min-height: 24px;\n padding: 3px 0;\n font-size: 10px;\n white-space: nowrap;\n color: var(--settings-muted);\n background: transparent;\n border: 0;\n border-radius: 5px;\n cursor: pointer;\n}\n.settings-account-reset-summary:hover {\n background: var(--settings-hover);\n}\n.settings-account-reset-summary[aria-expanded="true"] > svg:last-child {\n transform: rotate(90deg);\n}\n.settings-account-details-row > td {\n background: var(--settings-inset);\n}\n.settings-account-reset-details {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 16px;\n flex-wrap: wrap;\n}\n.settings-account-reset-details strong {\n font-size: 12px;\n}\n.settings-account-reset-expiry {\n margin: 6px 0;\n color: var(--settings-muted);\n font-size: 11px;\n}\n.settings-account-reset-expiry.is-warn {\n color: var(--settings-warning);\n}\n.settings-account-reset-expiry.is-hot {\n color: var(--settings-danger);\n}\n.settings-account-reset-list {\n margin: 8px 0 0;\n padding: 0;\n list-style: none;\n color: var(--settings-muted);\n font-size: 11px;\n}\n.settings-account-reset-list li + li {\n margin-top: 4px;\n}\n.settings-account-empty {\n text-align: center;\n color: var(--settings-muted);\n}\n.settings-account-verification {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n color: var(--settings-muted);\n}\n.settings-account-verification a {\n color: var(--settings-focus);\n overflow-wrap: anywhere;\n}\n.settings-account-verification code {\n padding: 5px 8px;\n color: var(--settings-text);\n font-size: 15px;\n font-weight: 600;\n letter-spacing: 0.08em;\n background: var(--settings-inset);\n border-radius: 6px;\n}\n.settings-account-list :focus-visible,\n.settings-account-toolbar :focus-visible {\n outline: 2px solid var(--settings-focus);\n outline-offset: -2px;\n}\n\n.settings-account-dialog {\n position: fixed;\n width: min(360px, calc(100vw - 40px));\n max-height: calc(100vh - 40px);\n overflow: auto;\n padding: 22px;\n color: var(--settings-text);\n background: var(--settings-surface);\n border: 1px solid var(--settings-border);\n border-radius: 12px;\n text-align: left;\n}\n.settings-account-dialog::backdrop {\n background: #0005;\n}\n.settings-account-dialog h2 {\n margin: 0 28px 12px 0;\n font-size: 15px;\n}\n.settings-account-dialog p {\n color: var(--settings-muted);\n font-size: 12px;\n line-height: 1.6;\n overflow-wrap: anywhere;\n}\n.settings-account-dialog__close {\n position: absolute;\n top: 12px;\n right: 12px;\n}\n.settings-account-dialog__actions {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n flex-wrap: wrap;\n}\n\n@container (max-width: 680px) {\n .settings-account-table,\n .settings-account-table tbody {\n display: block;\n }\n .settings-account-table thead {\n display: none;\n }\n .settings-account-row {\n display: grid;\n grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);\n padding: 18px;\n gap: 18px 22px;\n border-top: 1px solid var(--settings-divider);\n }\n .settings-account-row:first-child {\n border-top: 0;\n }\n .settings-account-table .settings-account-row > td {\n display: block;\n min-width: 0;\n padding: 0;\n border: 0;\n }\n .settings-account-person-cell,\n .settings-account-management-cell,\n .settings-account-usage-cell--message {\n grid-column: 1 / -1;\n }\n .settings-account-table .settings-account-management-cell {\n border-top: 1px solid var(--settings-divider);\n padding-top: 8px;\n }\n .settings-account-email {\n font-size: 13px;\n }\n .settings-account-usage__title {\n display: block;\n grid-column: 1;\n }\n .settings-account-usage__percent,\n .settings-account-usage__missing > span:not(.settings-account-usage__title) {\n grid-column: 2;\n text-align: right;\n }\n .settings-account-extra-usage .settings-account-usage__percent {\n grid-column: 1 / -1;\n }\n .settings-account-management {\n flex-direction: row;\n justify-content: space-between;\n }\n .settings-account-actions {\n order: 1;\n margin-left: auto;\n }\n .settings-account-native {\n justify-content: flex-start;\n }\n .settings-account-table tr:not(.settings-account-row, [hidden]),\n .settings-account-table tr:not(.settings-account-row, [hidden]) > td {\n display: block;\n }\n}\n\n@container (max-width: 360px) {\n .settings-account-row {\n grid-template-columns: minmax(0, 1fr);\n gap: 16px;\n padding: 16px;\n }\n}\n\n@media (forced-colors: active) {\n .settings-account-usage__bar {\n border: 1px solid CanvasText;\n }\n .settings-account-usage__bar > span {\n background: Highlight;\n }\n}\n';
25510
25777
 
25511
25778
  // src/settings/shell.ts
25512
25779
  var SETTINGS_SHELL_ATTRIBUTE = "data-codexhost-settings-shell";
@@ -26406,6 +26673,7 @@ ${accounts_default}`;
26406
26673
  const mountedByComposer = /* @__PURE__ */ new Map();
26407
26674
  const pendingReplacements = /* @__PURE__ */ new Map();
26408
26675
  let disposed = false;
26676
+ const disposeReasoningSoftWrap = installReasoningTranscriptSoftWrap(document);
26409
26677
  let scanScheduled = false;
26410
26678
  let refreshTargetsOnNextScan = false;
26411
26679
  let adapterDispose = null;
@@ -28225,6 +28493,7 @@ ${accounts_default}`;
28225
28493
  applyAdapterAgent = null;
28226
28494
  modelControl = null;
28227
28495
  mutationObserver.disconnect();
28496
+ disposeReasoningSoftWrap();
28228
28497
  sidebarAgentIcons.dispose();
28229
28498
  settingsLifecycle.dispose();
28230
28499
  document.removeEventListener("beforeinput", onBeforeInput, true);
@@ -28307,6 +28576,7 @@ lucide/dist/esm/icons/circle-off.mjs:
28307
28576
  lucide/dist/esm/icons/copy.mjs:
28308
28577
  lucide/dist/esm/icons/download.mjs:
28309
28578
  lucide/dist/esm/icons/external-link.mjs:
28579
+ lucide/dist/esm/icons/ellipsis.mjs:
28310
28580
  lucide/dist/esm/icons/folder-input.mjs:
28311
28581
  lucide/dist/esm/icons/grip-vertical.mjs:
28312
28582
  lucide/dist/esm/icons/info.mjs: