@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.
- package/README.md +1 -1
- package/app/codexhost-distribution.json +1 -1
- package/app/host-runtime.mjs +336 -117
- package/app/plugins/antigravity/plugin.mjs +9 -7
- package/app/plugins/deepseek-harness/plugin.mjs +7695 -10516
- package/app/plugins/grok/plugin.mjs +921 -74
- package/app/plugins/kiro-cli/plugin.mjs +29 -6
- package/app/renderer-extension.js +563 -293
- package/bin/codexhost +0 -0
- package/libexec/codexhost-shim +0 -0
- package/libexec/codexhost-updater +0 -0
- package/package.json +1 -1
|
@@ -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: "
|
|
17397
|
-
|
|
17398
|
-
|
|
17399
|
-
|
|
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
|
-
|
|
17403
|
-
|
|
17404
|
-
|
|
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
|
-
|
|
17408
|
-
|
|
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
|
-
|
|
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: "\
|
|
17601
|
-
|
|
17602
|
-
|
|
17603
|
-
|
|
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
|
-
|
|
17607
|
-
|
|
17608
|
-
|
|
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
|
-
|
|
17612
|
-
|
|
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
|
-
|
|
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 (
|
|
24085
|
-
|
|
24086
|
-
|
|
24087
|
-
|
|
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
|
|
24093
|
-
if (state
|
|
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
|
-
|
|
24411
|
+
cell.append(usage);
|
|
24412
|
+
return { cells: [cell], additional: null };
|
|
24102
24413
|
}
|
|
24103
|
-
const
|
|
24104
|
-
const
|
|
24105
|
-
|
|
24106
|
-
|
|
24107
|
-
|
|
24108
|
-
|
|
24109
|
-
|
|
24110
|
-
|
|
24111
|
-
|
|
24112
|
-
|
|
24113
|
-
|
|
24114
|
-
|
|
24115
|
-
|
|
24116
|
-
|
|
24117
|
-
|
|
24118
|
-
|
|
24119
|
-
|
|
24120
|
-
|
|
24121
|
-
|
|
24122
|
-
|
|
24123
|
-
|
|
24124
|
-
|
|
24125
|
-
|
|
24126
|
-
|
|
24127
|
-
|
|
24128
|
-
|
|
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
|
-
|
|
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
|
|
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("
|
|
24285
|
-
title.className = "settings-account-
|
|
24286
|
-
|
|
24287
|
-
|
|
24288
|
-
|
|
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
|
-
|
|
24301
|
-
|
|
24302
|
-
|
|
24303
|
-
|
|
24304
|
-
|
|
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 =
|
|
24317
|
-
plan.textContent =
|
|
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 (
|
|
24321
|
-
|
|
24322
|
-
|
|
24323
|
-
|
|
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)
|
|
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-
|
|
24358
|
-
remove.
|
|
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
|
-
|
|
24365
|
-
}
|
|
24366
|
-
|
|
24367
|
-
|
|
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
|
-
|
|
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
|
|
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 ||
|
|
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 (!
|
|
24785
|
+
if (!signal.aborted)
|
|
24786
|
+
accounts = [...result.accounts].sort((a, b) => a.harnessId.localeCompare(b.harnessId));
|
|
24500
24787
|
} catch {
|
|
24501
|
-
if (!
|
|
24788
|
+
if (!signal.aborted) accounts = [];
|
|
24502
24789
|
} finally {
|
|
24503
24790
|
refreshing = false;
|
|
24504
|
-
if (!
|
|
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(
|
|
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,
|
|
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.
|
|
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) =>
|
|
24935
|
+
(account) => `Codex ${account.email ?? ""} ${account.label} ${accountPlanLabel(account.planType) ?? ""}`.toLocaleLowerCase().includes(query)
|
|
24677
24936
|
);
|
|
24678
|
-
|
|
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 =
|
|
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:
|