fix(web): keep generated muted foreground dimmer than entered text - #9113

Merged
maria-rcks merged 1 commit into
pingdotgg:mainfrom
flamboh:t3code/fix-vivid-muted-foreground
Sep 2, 2026
Merged

fix(web): keep generated muted foreground dimmer than entered text#9113
maria-rcks merged 1 commit into
pingdotgg:mainfrom
flamboh:t3code/fix-vivid-muted-foreground

Conversation

@flamboh

@flambohflamboh commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Note

🤖 GPT-5.6 Sol on behalf of Oliver

Problem

Vivid generated themes used the primary-text solver for mutedForeground, so an already readable text color stayed unchanged. In dark themes, this made the attach icon, context-window meter icon, and "Context Window" popover heading as bright as primary text.

This is a follow-up to #9104, which corrected the same behavior for placeholders.

Fix

One line now generates mutedForeground with readableThemeText, matching managed themes and choosing the quietest mix that still clears the contrast minimum.

HexContrast vs canvasContrast vs muted
Before#edecff14.09:111.78:1
After#9593aa5.49:14.59:1

UI changes

Before

(note that the before shows old placeholder text because latest nightly hasn't rolled out with the changes from #9104)

image

After

image

Verification

  • cd apps/web && npx vitest run src/themePalette.test.ts src/vscodeThemeImport.test.ts — passed, 2 files and 49 tests.
  • vp lint apps/web/src/themePalette.ts apps/web/src/themePalette.test.ts — passed.
  • vp fmt --check apps/web/src/themePalette.ts apps/web/src/themePalette.test.ts — passed, 2 files.
  • cd apps/web && vp run typecheck — passed with tsgo --noEmit.

Changes prepared by GPT-5.6 Sol through Codex in T3 Code.

Note

Fix mutedForeground in createVividThemeColors to stay dimmer than primary text

Replaces the foregroundOn(mutedRgb) derivation of mutedForeground with readableThemeText(mutedRgb, textRgb, 1, 4.6), then converts the result via themeRgbToThemeColor. This keeps mutedForeground accessible on the muted surface while ensuring it has lower contrast than the primary text color on that surface. Adds a test in themePalette.test.ts asserting the contrast ordering.

  • Risk: any consumers relying on the old surface-dependent mutedForeground lightness value will see a different color; verify in-tree usages in apps/web/src.

Macroscope summarized 68211cf.

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:XS 0-9 changed lines (additions + deletions). labels Sep 1, 2026
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at 68211cf

Macroscope's review found this PR approvable — This is a focused two-file fix that adjusts only the derived muted foreground color for generated themes and adds coverage for the intended contrast ordering. The change preserves accessibility constraints without altering default palettes, APIs, or broader runtime workflows.

You can add or adjust custom eligibility rules. Learn more.

@maria-rcks
maria-rcks merged commit cdbf324 into pingdotgg:mainSep 2, 2026
22 checks passed
github-actionsBot added a commit to omarcresp/t3code-flake that referenced this pull request Sep 2, 2026
## What's Changed
* perf(client-runtime): keep turn and checkpoint refs stable while streaming by @t3dotgg in pingdotgg/t3code#9145
* perf(clients): lease sidebar status by visibility by @StiensWout in pingdotgg/t3code#9052
* fix(desktop): show newest changes in nightly previews by @t3dotgg in pingdotgg/t3code#9138
* fix(settings): sync auto-settle and other shared preferences across environments by @t3dotgg in pingdotgg/t3code#9147
* fix(server): prevent accidental service downgrades by @t3dotgg in pingdotgg/t3code#5302
* fix(server): keep attachments until the command commits by @t3dotgg in pingdotgg/t3code#7941
* fix(claude): preview images read from the workspace by @t3dotgg in pingdotgg/t3code#9119
* fix(web): keep generated muted foreground dimmer than entered text by @flamboh in pingdotgg/t3code#9113
* fix(clients): stop repeating expanded commands by @t3dotgg in pingdotgg/t3code#9120
* fix(grok): health check, model selection, and stop all work against the real CLI by @t3dotgg in pingdotgg/t3code#9154
* perf(web): halve the cold-start bundle by splitting Clerk and cold routes by @StiensWout in pingdotgg/t3code#9058
* feat(desktop): update the desktop app on remote Macs from the Update button by @t3dotgg in pingdotgg/t3code#6554
* test(server): measure shell, second client, and reconnect transfer by @t3dotgg in pingdotgg/t3code#9157
* fix(web): project default model works on the hosted app by @juliusmarminge in pingdotgg/t3code#9142
* fix(web): darken neutral control surfaces by @maria-rcks in pingdotgg/t3code#9064
* fix(web): preserve panel state across workspace refreshes by @maria-rcks in pingdotgg/t3code#8968
* feat(files): open markdown, HTML, and PDF files outside the workspace by @juliusmarminge in pingdotgg/t3code#9140
* feat(web): render HTML and PDF files in the file viewer by @juliusmarminge in pingdotgg/t3code#9143
* fix(web): compact project settings actions by @maria-rcks in pingdotgg/t3code#9160
* fix(web): browse folders from file breadcrumbs by @404khai in pingdotgg/t3code#8910
## New Contributors
* @404khai made their first contribution in pingdotgg/t3code#8910
**Full Changelog**: pingdotgg/t3code@v0.0.39-nightly.20260902.1252...v0.0.39-nightly.20260902.1253
Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.39-nightly.20260902.1253
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XS0-9 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@flamboh@maria-rcks
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

fix(web): keep generated muted foreground dimmer than entered text - #9113

Merged
maria-rcks merged 1 commit into
pingdotgg:mainfrom
flamboh:t3code/fix-vivid-muted-foreground
Sep 2, 2026
Merged

fix(web): keep generated muted foreground dimmer than entered text#9113
maria-rcks merged 1 commit into
pingdotgg:mainfrom
flamboh:t3code/fix-vivid-muted-foreground

Conversation

@flamboh

@flambohflamboh commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Note

🤖 GPT-5.6 Sol on behalf of Oliver

Problem

Vivid generated themes used the primary-text solver for mutedForeground, so an already readable text color stayed unchanged. In dark themes, this made the attach icon, context-window meter icon, and "Context Window" popover heading as bright as primary text.

This is a follow-up to #9104, which corrected the same behavior for placeholders.

Fix

One line now generates mutedForeground with readableThemeText, matching managed themes and choosing the quietest mix that still clears the contrast minimum.

HexContrast vs canvasContrast vs muted
Before#edecff14.09:111.78:1
After#9593aa5.49:14.59:1

UI changes

Before

(note that the before shows old placeholder text because latest nightly hasn't rolled out with the changes from #9104)

image

After

image

Verification

  • cd apps/web && npx vitest run src/themePalette.test.ts src/vscodeThemeImport.test.ts — passed, 2 files and 49 tests.
  • vp lint apps/web/src/themePalette.ts apps/web/src/themePalette.test.ts — passed.
  • vp fmt --check apps/web/src/themePalette.ts apps/web/src/themePalette.test.ts — passed, 2 files.
  • cd apps/web && vp run typecheck — passed with tsgo --noEmit.

Changes prepared by GPT-5.6 Sol through Codex in T3 Code.

Note

Fix mutedForeground in createVividThemeColors to stay dimmer than primary text

Replaces the foregroundOn(mutedRgb) derivation of mutedForeground with readableThemeText(mutedRgb, textRgb, 1, 4.6), then converts the result via themeRgbToThemeColor. This keeps mutedForeground accessible on the muted surface while ensuring it has lower contrast than the primary text color on that surface. Adds a test in themePalette.test.ts asserting the contrast ordering.

  • Risk: any consumers relying on the old surface-dependent mutedForeground lightness value will see a different color; verify in-tree usages in apps/web/src.

Macroscope summarized 68211cf.

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:XS 0-9 changed lines (additions + deletions). labels Sep 1, 2026
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at 68211cf

Macroscope's review found this PR approvable — This is a focused two-file fix that adjusts only the derived muted foreground color for generated themes and adds coverage for the intended contrast ordering. The change preserves accessibility constraints without altering default palettes, APIs, or broader runtime workflows.

You can add or adjust custom eligibility rules. Learn more.

@maria-rcks
maria-rcks merged commit cdbf324 into pingdotgg:mainSep 2, 2026
22 checks passed
github-actionsBot added a commit to omarcresp/t3code-flake that referenced this pull request Sep 2, 2026
## What's Changed
* perf(client-runtime): keep turn and checkpoint refs stable while streaming by @t3dotgg in pingdotgg/t3code#9145
* perf(clients): lease sidebar status by visibility by @StiensWout in pingdotgg/t3code#9052
* fix(desktop): show newest changes in nightly previews by @t3dotgg in pingdotgg/t3code#9138
* fix(settings): sync auto-settle and other shared preferences across environments by @t3dotgg in pingdotgg/t3code#9147
* fix(server): prevent accidental service downgrades by @t3dotgg in pingdotgg/t3code#5302
* fix(server): keep attachments until the command commits by @t3dotgg in pingdotgg/t3code#7941
* fix(claude): preview images read from the workspace by @t3dotgg in pingdotgg/t3code#9119
* fix(web): keep generated muted foreground dimmer than entered text by @flamboh in pingdotgg/t3code#9113
* fix(clients): stop repeating expanded commands by @t3dotgg in pingdotgg/t3code#9120
* fix(grok): health check, model selection, and stop all work against the real CLI by @t3dotgg in pingdotgg/t3code#9154
* perf(web): halve the cold-start bundle by splitting Clerk and cold routes by @StiensWout in pingdotgg/t3code#9058
* feat(desktop): update the desktop app on remote Macs from the Update button by @t3dotgg in pingdotgg/t3code#6554
* test(server): measure shell, second client, and reconnect transfer by @t3dotgg in pingdotgg/t3code#9157
* fix(web): project default model works on the hosted app by @juliusmarminge in pingdotgg/t3code#9142
* fix(web): darken neutral control surfaces by @maria-rcks in pingdotgg/t3code#9064
* fix(web): preserve panel state across workspace refreshes by @maria-rcks in pingdotgg/t3code#8968
* feat(files): open markdown, HTML, and PDF files outside the workspace by @juliusmarminge in pingdotgg/t3code#9140
* feat(web): render HTML and PDF files in the file viewer by @juliusmarminge in pingdotgg/t3code#9143
* fix(web): compact project settings actions by @maria-rcks in pingdotgg/t3code#9160
* fix(web): browse folders from file breadcrumbs by @404khai in pingdotgg/t3code#8910
## New Contributors
* @404khai made their first contribution in pingdotgg/t3code#8910
**Full Changelog**: pingdotgg/t3code@v0.0.39-nightly.20260902.1252...v0.0.39-nightly.20260902.1253
Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.39-nightly.20260902.1253
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XS0-9 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@flamboh@maria-rcks
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(web): keep generated muted foreground dimmer than entered text - #9113

Merged
maria-rcks merged 1 commit into
pingdotgg:mainfrom
flamboh:t3code/fix-vivid-muted-foreground
Sep 2, 2026
Merged

fix(web): keep generated muted foreground dimmer than entered text#9113
maria-rcks merged 1 commit into
pingdotgg:mainfrom
flamboh:t3code/fix-vivid-muted-foreground

Conversation

@flamboh

@flambohflamboh commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Note

🤖 GPT-5.6 Sol on behalf of Oliver

Problem

Vivid generated themes used the primary-text solver for mutedForeground, so an already readable text color stayed unchanged. In dark themes, this made the attach icon, context-window meter icon, and "Context Window" popover heading as bright as primary text.

This is a follow-up to #9104, which corrected the same behavior for placeholders.

Fix

One line now generates mutedForeground with readableThemeText, matching managed themes and choosing the quietest mix that still clears the contrast minimum.

HexContrast vs canvasContrast vs muted
Before#edecff14.09:111.78:1
After#9593aa5.49:14.59:1

UI changes

Before

(note that the before shows old placeholder text because latest nightly hasn't rolled out with the changes from #9104)

image

After

image

Verification

  • cd apps/web && npx vitest run src/themePalette.test.ts src/vscodeThemeImport.test.ts — passed, 2 files and 49 tests.
  • vp lint apps/web/src/themePalette.ts apps/web/src/themePalette.test.ts — passed.
  • vp fmt --check apps/web/src/themePalette.ts apps/web/src/themePalette.test.ts — passed, 2 files.
  • cd apps/web && vp run typecheck — passed with tsgo --noEmit.

Changes prepared by GPT-5.6 Sol through Codex in T3 Code.

Note

Fix mutedForeground in createVividThemeColors to stay dimmer than primary text

Replaces the foregroundOn(mutedRgb) derivation of mutedForeground with readableThemeText(mutedRgb, textRgb, 1, 4.6), then converts the result via themeRgbToThemeColor. This keeps mutedForeground accessible on the muted surface while ensuring it has lower contrast than the primary text color on that surface. Adds a test in themePalette.test.ts asserting the contrast ordering.

  • Risk: any consumers relying on the old surface-dependent mutedForeground lightness value will see a different color; verify in-tree usages in apps/web/src.

Macroscope summarized 68211cf.

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:XS 0-9 changed lines (additions + deletions). labels Sep 1, 2026
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at 68211cf

Macroscope's review found this PR approvable — This is a focused two-file fix that adjusts only the derived muted foreground color for generated themes and adds coverage for the intended contrast ordering. The change preserves accessibility constraints without altering default palettes, APIs, or broader runtime workflows.

You can add or adjust custom eligibility rules. Learn more.

@maria-rcks
maria-rcks merged commit cdbf324 into pingdotgg:mainSep 2, 2026
22 checks passed
github-actionsBot added a commit to omarcresp/t3code-flake that referenced this pull request Sep 2, 2026
## What's Changed
* perf(client-runtime): keep turn and checkpoint refs stable while streaming by @t3dotgg in pingdotgg/t3code#9145
* perf(clients): lease sidebar status by visibility by @StiensWout in pingdotgg/t3code#9052
* fix(desktop): show newest changes in nightly previews by @t3dotgg in pingdotgg/t3code#9138
* fix(settings): sync auto-settle and other shared preferences across environments by @t3dotgg in pingdotgg/t3code#9147
* fix(server): prevent accidental service downgrades by @t3dotgg in pingdotgg/t3code#5302
* fix(server): keep attachments until the command commits by @t3dotgg in pingdotgg/t3code#7941
* fix(claude): preview images read from the workspace by @t3dotgg in pingdotgg/t3code#9119
* fix(web): keep generated muted foreground dimmer than entered text by @flamboh in pingdotgg/t3code#9113
* fix(clients): stop repeating expanded commands by @t3dotgg in pingdotgg/t3code#9120
* fix(grok): health check, model selection, and stop all work against the real CLI by @t3dotgg in pingdotgg/t3code#9154
* perf(web): halve the cold-start bundle by splitting Clerk and cold routes by @StiensWout in pingdotgg/t3code#9058
* feat(desktop): update the desktop app on remote Macs from the Update button by @t3dotgg in pingdotgg/t3code#6554
* test(server): measure shell, second client, and reconnect transfer by @t3dotgg in pingdotgg/t3code#9157
* fix(web): project default model works on the hosted app by @juliusmarminge in pingdotgg/t3code#9142
* fix(web): darken neutral control surfaces by @maria-rcks in pingdotgg/t3code#9064
* fix(web): preserve panel state across workspace refreshes by @maria-rcks in pingdotgg/t3code#8968
* feat(files): open markdown, HTML, and PDF files outside the workspace by @juliusmarminge in pingdotgg/t3code#9140
* feat(web): render HTML and PDF files in the file viewer by @juliusmarminge in pingdotgg/t3code#9143
* fix(web): compact project settings actions by @maria-rcks in pingdotgg/t3code#9160
* fix(web): browse folders from file breadcrumbs by @404khai in pingdotgg/t3code#8910
## New Contributors
* @404khai made their first contribution in pingdotgg/t3code#8910
**Full Changelog**: pingdotgg/t3code@v0.0.39-nightly.20260902.1252...v0.0.39-nightly.20260902.1253
Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.39-nightly.20260902.1253
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XS0-9 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@flamboh@maria-rcks
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(web): keep generated muted foreground dimmer than entered text - #9113

Merged
maria-rcks merged 1 commit into
pingdotgg:mainfrom
flamboh:t3code/fix-vivid-muted-foreground
Sep 2, 2026
Merged

fix(web): keep generated muted foreground dimmer than entered text#9113
maria-rcks merged 1 commit into
pingdotgg:mainfrom
flamboh:t3code/fix-vivid-muted-foreground

Conversation

@flamboh

@flambohflamboh commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Note

🤖 GPT-5.6 Sol on behalf of Oliver

Problem

Vivid generated themes used the primary-text solver for mutedForeground, so an already readable text color stayed unchanged. In dark themes, this made the attach icon, context-window meter icon, and "Context Window" popover heading as bright as primary text.

This is a follow-up to #9104, which corrected the same behavior for placeholders.

Fix

One line now generates mutedForeground with readableThemeText, matching managed themes and choosing the quietest mix that still clears the contrast minimum.

HexContrast vs canvasContrast vs muted
Before#edecff14.09:111.78:1
After#9593aa5.49:14.59:1

UI changes

Before

(note that the before shows old placeholder text because latest nightly hasn't rolled out with the changes from #9104)

image

After

image

Verification

  • cd apps/web && npx vitest run src/themePalette.test.ts src/vscodeThemeImport.test.ts — passed, 2 files and 49 tests.
  • vp lint apps/web/src/themePalette.ts apps/web/src/themePalette.test.ts — passed.
  • vp fmt --check apps/web/src/themePalette.ts apps/web/src/themePalette.test.ts — passed, 2 files.
  • cd apps/web && vp run typecheck — passed with tsgo --noEmit.

Changes prepared by GPT-5.6 Sol through Codex in T3 Code.

Note

Fix mutedForeground in createVividThemeColors to stay dimmer than primary text

Replaces the foregroundOn(mutedRgb) derivation of mutedForeground with readableThemeText(mutedRgb, textRgb, 1, 4.6), then converts the result via themeRgbToThemeColor. This keeps mutedForeground accessible on the muted surface while ensuring it has lower contrast than the primary text color on that surface. Adds a test in themePalette.test.ts asserting the contrast ordering.

  • Risk: any consumers relying on the old surface-dependent mutedForeground lightness value will see a different color; verify in-tree usages in apps/web/src.

Macroscope summarized 68211cf.

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:XS 0-9 changed lines (additions + deletions). labels Sep 1, 2026
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at 68211cf

Macroscope's review found this PR approvable — This is a focused two-file fix that adjusts only the derived muted foreground color for generated themes and adds coverage for the intended contrast ordering. The change preserves accessibility constraints without altering default palettes, APIs, or broader runtime workflows.

You can add or adjust custom eligibility rules. Learn more.

@maria-rcks
maria-rcks merged commit cdbf324 into pingdotgg:mainSep 2, 2026
22 checks passed
github-actionsBot added a commit to omarcresp/t3code-flake that referenced this pull request Sep 2, 2026
## What's Changed
* perf(client-runtime): keep turn and checkpoint refs stable while streaming by @t3dotgg in pingdotgg/t3code#9145
* perf(clients): lease sidebar status by visibility by @StiensWout in pingdotgg/t3code#9052
* fix(desktop): show newest changes in nightly previews by @t3dotgg in pingdotgg/t3code#9138
* fix(settings): sync auto-settle and other shared preferences across environments by @t3dotgg in pingdotgg/t3code#9147
* fix(server): prevent accidental service downgrades by @t3dotgg in pingdotgg/t3code#5302
* fix(server): keep attachments until the command commits by @t3dotgg in pingdotgg/t3code#7941
* fix(claude): preview images read from the workspace by @t3dotgg in pingdotgg/t3code#9119
* fix(web): keep generated muted foreground dimmer than entered text by @flamboh in pingdotgg/t3code#9113
* fix(clients): stop repeating expanded commands by @t3dotgg in pingdotgg/t3code#9120
* fix(grok): health check, model selection, and stop all work against the real CLI by @t3dotgg in pingdotgg/t3code#9154
* perf(web): halve the cold-start bundle by splitting Clerk and cold routes by @StiensWout in pingdotgg/t3code#9058
* feat(desktop): update the desktop app on remote Macs from the Update button by @t3dotgg in pingdotgg/t3code#6554
* test(server): measure shell, second client, and reconnect transfer by @t3dotgg in pingdotgg/t3code#9157
* fix(web): project default model works on the hosted app by @juliusmarminge in pingdotgg/t3code#9142
* fix(web): darken neutral control surfaces by @maria-rcks in pingdotgg/t3code#9064
* fix(web): preserve panel state across workspace refreshes by @maria-rcks in pingdotgg/t3code#8968
* feat(files): open markdown, HTML, and PDF files outside the workspace by @juliusmarminge in pingdotgg/t3code#9140
* feat(web): render HTML and PDF files in the file viewer by @juliusmarminge in pingdotgg/t3code#9143
* fix(web): compact project settings actions by @maria-rcks in pingdotgg/t3code#9160
* fix(web): browse folders from file breadcrumbs by @404khai in pingdotgg/t3code#8910
## New Contributors
* @404khai made their first contribution in pingdotgg/t3code#8910
**Full Changelog**: pingdotgg/t3code@v0.0.39-nightly.20260902.1252...v0.0.39-nightly.20260902.1253
Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.39-nightly.20260902.1253
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XS0-9 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@flamboh@maria-rcks
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

fix(web): keep generated muted foreground dimmer than entered text - #9113

Merged
maria-rcks merged 1 commit into
pingdotgg:mainfrom
flamboh:t3code/fix-vivid-muted-foreground
Sep 2, 2026
Merged

fix(web): keep generated muted foreground dimmer than entered text#9113
maria-rcks merged 1 commit into
pingdotgg:mainfrom
flamboh:t3code/fix-vivid-muted-foreground

Conversation

@flamboh

@flambohflamboh commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Note

🤖 GPT-5.6 Sol on behalf of Oliver

Problem

Vivid generated themes used the primary-text solver for mutedForeground, so an already readable text color stayed unchanged. In dark themes, this made the attach icon, context-window meter icon, and "Context Window" popover heading as bright as primary text.

This is a follow-up to #9104, which corrected the same behavior for placeholders.

Fix

One line now generates mutedForeground with readableThemeText, matching managed themes and choosing the quietest mix that still clears the contrast minimum.

HexContrast vs canvasContrast vs muted
Before#edecff14.09:111.78:1
After#9593aa5.49:14.59:1

UI changes

Before

(note that the before shows old placeholder text because latest nightly hasn't rolled out with the changes from #9104)

image

After

image

Verification

  • cd apps/web && npx vitest run src/themePalette.test.ts src/vscodeThemeImport.test.ts — passed, 2 files and 49 tests.
  • vp lint apps/web/src/themePalette.ts apps/web/src/themePalette.test.ts — passed.
  • vp fmt --check apps/web/src/themePalette.ts apps/web/src/themePalette.test.ts — passed, 2 files.
  • cd apps/web && vp run typecheck — passed with tsgo --noEmit.

Changes prepared by GPT-5.6 Sol through Codex in T3 Code.

Note

Fix mutedForeground in createVividThemeColors to stay dimmer than primary text

Replaces the foregroundOn(mutedRgb) derivation of mutedForeground with readableThemeText(mutedRgb, textRgb, 1, 4.6), then converts the result via themeRgbToThemeColor. This keeps mutedForeground accessible on the muted surface while ensuring it has lower contrast than the primary text color on that surface. Adds a test in themePalette.test.ts asserting the contrast ordering.

  • Risk: any consumers relying on the old surface-dependent mutedForeground lightness value will see a different color; verify in-tree usages in apps/web/src.

Macroscope summarized 68211cf.

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:XS 0-9 changed lines (additions + deletions). labels Sep 1, 2026
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at 68211cf

Macroscope's review found this PR approvable — This is a focused two-file fix that adjusts only the derived muted foreground color for generated themes and adds coverage for the intended contrast ordering. The change preserves accessibility constraints without altering default palettes, APIs, or broader runtime workflows.

You can add or adjust custom eligibility rules. Learn more.

@maria-rcks
maria-rcks merged commit cdbf324 into pingdotgg:mainSep 2, 2026
22 checks passed
github-actionsBot added a commit to omarcresp/t3code-flake that referenced this pull request Sep 2, 2026
## What's Changed
* perf(client-runtime): keep turn and checkpoint refs stable while streaming by @t3dotgg in pingdotgg/t3code#9145
* perf(clients): lease sidebar status by visibility by @StiensWout in pingdotgg/t3code#9052
* fix(desktop): show newest changes in nightly previews by @t3dotgg in pingdotgg/t3code#9138
* fix(settings): sync auto-settle and other shared preferences across environments by @t3dotgg in pingdotgg/t3code#9147
* fix(server): prevent accidental service downgrades by @t3dotgg in pingdotgg/t3code#5302
* fix(server): keep attachments until the command commits by @t3dotgg in pingdotgg/t3code#7941
* fix(claude): preview images read from the workspace by @t3dotgg in pingdotgg/t3code#9119
* fix(web): keep generated muted foreground dimmer than entered text by @flamboh in pingdotgg/t3code#9113
* fix(clients): stop repeating expanded commands by @t3dotgg in pingdotgg/t3code#9120
* fix(grok): health check, model selection, and stop all work against the real CLI by @t3dotgg in pingdotgg/t3code#9154
* perf(web): halve the cold-start bundle by splitting Clerk and cold routes by @StiensWout in pingdotgg/t3code#9058
* feat(desktop): update the desktop app on remote Macs from the Update button by @t3dotgg in pingdotgg/t3code#6554
* test(server): measure shell, second client, and reconnect transfer by @t3dotgg in pingdotgg/t3code#9157
* fix(web): project default model works on the hosted app by @juliusmarminge in pingdotgg/t3code#9142
* fix(web): darken neutral control surfaces by @maria-rcks in pingdotgg/t3code#9064
* fix(web): preserve panel state across workspace refreshes by @maria-rcks in pingdotgg/t3code#8968
* feat(files): open markdown, HTML, and PDF files outside the workspace by @juliusmarminge in pingdotgg/t3code#9140
* feat(web): render HTML and PDF files in the file viewer by @juliusmarminge in pingdotgg/t3code#9143
* fix(web): compact project settings actions by @maria-rcks in pingdotgg/t3code#9160
* fix(web): browse folders from file breadcrumbs by @404khai in pingdotgg/t3code#8910
## New Contributors
* @404khai made their first contribution in pingdotgg/t3code#8910
**Full Changelog**: pingdotgg/t3code@v0.0.39-nightly.20260902.1252...v0.0.39-nightly.20260902.1253
Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.39-nightly.20260902.1253
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XS0-9 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@flamboh@maria-rcks
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(web): keep generated muted foreground dimmer than entered text - #9113

Merged
maria-rcks merged 1 commit into
pingdotgg:mainfrom
flamboh:t3code/fix-vivid-muted-foreground
Sep 2, 2026
Merged

fix(web): keep generated muted foreground dimmer than entered text#9113
maria-rcks merged 1 commit into
pingdotgg:mainfrom
flamboh:t3code/fix-vivid-muted-foreground

Conversation

@flamboh

@flambohflamboh commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Note

🤖 GPT-5.6 Sol on behalf of Oliver

Problem

Vivid generated themes used the primary-text solver for mutedForeground, so an already readable text color stayed unchanged. In dark themes, this made the attach icon, context-window meter icon, and "Context Window" popover heading as bright as primary text.

This is a follow-up to #9104, which corrected the same behavior for placeholders.

Fix

One line now generates mutedForeground with readableThemeText, matching managed themes and choosing the quietest mix that still clears the contrast minimum.

HexContrast vs canvasContrast vs muted
Before#edecff14.09:111.78:1
After#9593aa5.49:14.59:1

UI changes

Before

(note that the before shows old placeholder text because latest nightly hasn't rolled out with the changes from #9104)

image

After

image

Verification

  • cd apps/web && npx vitest run src/themePalette.test.ts src/vscodeThemeImport.test.ts — passed, 2 files and 49 tests.
  • vp lint apps/web/src/themePalette.ts apps/web/src/themePalette.test.ts — passed.
  • vp fmt --check apps/web/src/themePalette.ts apps/web/src/themePalette.test.ts — passed, 2 files.
  • cd apps/web && vp run typecheck — passed with tsgo --noEmit.

Changes prepared by GPT-5.6 Sol through Codex in T3 Code.

Note

Fix mutedForeground in createVividThemeColors to stay dimmer than primary text

Replaces the foregroundOn(mutedRgb) derivation of mutedForeground with readableThemeText(mutedRgb, textRgb, 1, 4.6), then converts the result via themeRgbToThemeColor. This keeps mutedForeground accessible on the muted surface while ensuring it has lower contrast than the primary text color on that surface. Adds a test in themePalette.test.ts asserting the contrast ordering.

  • Risk: any consumers relying on the old surface-dependent mutedForeground lightness value will see a different color; verify in-tree usages in apps/web/src.

Macroscope summarized 68211cf.

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:XS 0-9 changed lines (additions + deletions). labels Sep 1, 2026
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at 68211cf

Macroscope's review found this PR approvable — This is a focused two-file fix that adjusts only the derived muted foreground color for generated themes and adds coverage for the intended contrast ordering. The change preserves accessibility constraints without altering default palettes, APIs, or broader runtime workflows.

You can add or adjust custom eligibility rules. Learn more.

@maria-rcks
maria-rcks merged commit cdbf324 into pingdotgg:mainSep 2, 2026
22 checks passed
github-actionsBot added a commit to omarcresp/t3code-flake that referenced this pull request Sep 2, 2026
## What's Changed
* perf(client-runtime): keep turn and checkpoint refs stable while streaming by @t3dotgg in pingdotgg/t3code#9145
* perf(clients): lease sidebar status by visibility by @StiensWout in pingdotgg/t3code#9052
* fix(desktop): show newest changes in nightly previews by @t3dotgg in pingdotgg/t3code#9138
* fix(settings): sync auto-settle and other shared preferences across environments by @t3dotgg in pingdotgg/t3code#9147
* fix(server): prevent accidental service downgrades by @t3dotgg in pingdotgg/t3code#5302
* fix(server): keep attachments until the command commits by @t3dotgg in pingdotgg/t3code#7941
* fix(claude): preview images read from the workspace by @t3dotgg in pingdotgg/t3code#9119
* fix(web): keep generated muted foreground dimmer than entered text by @flamboh in pingdotgg/t3code#9113
* fix(clients): stop repeating expanded commands by @t3dotgg in pingdotgg/t3code#9120
* fix(grok): health check, model selection, and stop all work against the real CLI by @t3dotgg in pingdotgg/t3code#9154
* perf(web): halve the cold-start bundle by splitting Clerk and cold routes by @StiensWout in pingdotgg/t3code#9058
* feat(desktop): update the desktop app on remote Macs from the Update button by @t3dotgg in pingdotgg/t3code#6554
* test(server): measure shell, second client, and reconnect transfer by @t3dotgg in pingdotgg/t3code#9157
* fix(web): project default model works on the hosted app by @juliusmarminge in pingdotgg/t3code#9142
* fix(web): darken neutral control surfaces by @maria-rcks in pingdotgg/t3code#9064
* fix(web): preserve panel state across workspace refreshes by @maria-rcks in pingdotgg/t3code#8968
* feat(files): open markdown, HTML, and PDF files outside the workspace by @juliusmarminge in pingdotgg/t3code#9140
* feat(web): render HTML and PDF files in the file viewer by @juliusmarminge in pingdotgg/t3code#9143
* fix(web): compact project settings actions by @maria-rcks in pingdotgg/t3code#9160
* fix(web): browse folders from file breadcrumbs by @404khai in pingdotgg/t3code#8910
## New Contributors
* @404khai made their first contribution in pingdotgg/t3code#8910
**Full Changelog**: pingdotgg/t3code@v0.0.39-nightly.20260902.1252...v0.0.39-nightly.20260902.1253
Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.39-nightly.20260902.1253
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XS0-9 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@flamboh@maria-rcks
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(web): keep generated muted foreground dimmer than entered text - #9113

Merged
maria-rcks merged 1 commit into
pingdotgg:mainfrom
flamboh:t3code/fix-vivid-muted-foreground
Sep 2, 2026
Merged

fix(web): keep generated muted foreground dimmer than entered text#9113
maria-rcks merged 1 commit into
pingdotgg:mainfrom
flamboh:t3code/fix-vivid-muted-foreground

Conversation

@flamboh

@flambohflamboh commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Note

🤖 GPT-5.6 Sol on behalf of Oliver

Problem

Vivid generated themes used the primary-text solver for mutedForeground, so an already readable text color stayed unchanged. In dark themes, this made the attach icon, context-window meter icon, and "Context Window" popover heading as bright as primary text.

This is a follow-up to #9104, which corrected the same behavior for placeholders.

Fix

One line now generates mutedForeground with readableThemeText, matching managed themes and choosing the quietest mix that still clears the contrast minimum.

HexContrast vs canvasContrast vs muted
Before#edecff14.09:111.78:1
After#9593aa5.49:14.59:1

UI changes

Before

(note that the before shows old placeholder text because latest nightly hasn't rolled out with the changes from #9104)

image

After

image

Verification

  • cd apps/web && npx vitest run src/themePalette.test.ts src/vscodeThemeImport.test.ts — passed, 2 files and 49 tests.
  • vp lint apps/web/src/themePalette.ts apps/web/src/themePalette.test.ts — passed.
  • vp fmt --check apps/web/src/themePalette.ts apps/web/src/themePalette.test.ts — passed, 2 files.
  • cd apps/web && vp run typecheck — passed with tsgo --noEmit.

Changes prepared by GPT-5.6 Sol through Codex in T3 Code.

Note

Fix mutedForeground in createVividThemeColors to stay dimmer than primary text

Replaces the foregroundOn(mutedRgb) derivation of mutedForeground with readableThemeText(mutedRgb, textRgb, 1, 4.6), then converts the result via themeRgbToThemeColor. This keeps mutedForeground accessible on the muted surface while ensuring it has lower contrast than the primary text color on that surface. Adds a test in themePalette.test.ts asserting the contrast ordering.

  • Risk: any consumers relying on the old surface-dependent mutedForeground lightness value will see a different color; verify in-tree usages in apps/web/src.

Macroscope summarized 68211cf.

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:XS 0-9 changed lines (additions + deletions). labels Sep 1, 2026
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at 68211cf

Macroscope's review found this PR approvable — This is a focused two-file fix that adjusts only the derived muted foreground color for generated themes and adds coverage for the intended contrast ordering. The change preserves accessibility constraints without altering default palettes, APIs, or broader runtime workflows.

You can add or adjust custom eligibility rules. Learn more.

@maria-rcks
maria-rcks merged commit cdbf324 into pingdotgg:mainSep 2, 2026
22 checks passed
github-actionsBot added a commit to omarcresp/t3code-flake that referenced this pull request Sep 2, 2026
## What's Changed
* perf(client-runtime): keep turn and checkpoint refs stable while streaming by @t3dotgg in pingdotgg/t3code#9145
* perf(clients): lease sidebar status by visibility by @StiensWout in pingdotgg/t3code#9052
* fix(desktop): show newest changes in nightly previews by @t3dotgg in pingdotgg/t3code#9138
* fix(settings): sync auto-settle and other shared preferences across environments by @t3dotgg in pingdotgg/t3code#9147
* fix(server): prevent accidental service downgrades by @t3dotgg in pingdotgg/t3code#5302
* fix(server): keep attachments until the command commits by @t3dotgg in pingdotgg/t3code#7941
* fix(claude): preview images read from the workspace by @t3dotgg in pingdotgg/t3code#9119
* fix(web): keep generated muted foreground dimmer than entered text by @flamboh in pingdotgg/t3code#9113
* fix(clients): stop repeating expanded commands by @t3dotgg in pingdotgg/t3code#9120
* fix(grok): health check, model selection, and stop all work against the real CLI by @t3dotgg in pingdotgg/t3code#9154
* perf(web): halve the cold-start bundle by splitting Clerk and cold routes by @StiensWout in pingdotgg/t3code#9058
* feat(desktop): update the desktop app on remote Macs from the Update button by @t3dotgg in pingdotgg/t3code#6554
* test(server): measure shell, second client, and reconnect transfer by @t3dotgg in pingdotgg/t3code#9157
* fix(web): project default model works on the hosted app by @juliusmarminge in pingdotgg/t3code#9142
* fix(web): darken neutral control surfaces by @maria-rcks in pingdotgg/t3code#9064
* fix(web): preserve panel state across workspace refreshes by @maria-rcks in pingdotgg/t3code#8968
* feat(files): open markdown, HTML, and PDF files outside the workspace by @juliusmarminge in pingdotgg/t3code#9140
* feat(web): render HTML and PDF files in the file viewer by @juliusmarminge in pingdotgg/t3code#9143
* fix(web): compact project settings actions by @maria-rcks in pingdotgg/t3code#9160
* fix(web): browse folders from file breadcrumbs by @404khai in pingdotgg/t3code#8910
## New Contributors
* @404khai made their first contribution in pingdotgg/t3code#8910
**Full Changelog**: pingdotgg/t3code@v0.0.39-nightly.20260902.1252...v0.0.39-nightly.20260902.1253
Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.39-nightly.20260902.1253
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XS0-9 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@flamboh@maria-rcks
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

fix(web): keep generated muted foreground dimmer than entered text - #9113

Merged
maria-rcks merged 1 commit into
pingdotgg:mainfrom
flamboh:t3code/fix-vivid-muted-foreground
Sep 2, 2026
Merged

fix(web): keep generated muted foreground dimmer than entered text#9113
maria-rcks merged 1 commit into
pingdotgg:mainfrom
flamboh:t3code/fix-vivid-muted-foreground

Conversation

@flamboh

@flambohflamboh commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Note

🤖 GPT-5.6 Sol on behalf of Oliver

Problem

Vivid generated themes used the primary-text solver for mutedForeground, so an already readable text color stayed unchanged. In dark themes, this made the attach icon, context-window meter icon, and "Context Window" popover heading as bright as primary text.

This is a follow-up to #9104, which corrected the same behavior for placeholders.

Fix

One line now generates mutedForeground with readableThemeText, matching managed themes and choosing the quietest mix that still clears the contrast minimum.

HexContrast vs canvasContrast vs muted
Before#edecff14.09:111.78:1
After#9593aa5.49:14.59:1

UI changes

Before

(note that the before shows old placeholder text because latest nightly hasn't rolled out with the changes from #9104)

image

After

image

Verification

  • cd apps/web && npx vitest run src/themePalette.test.ts src/vscodeThemeImport.test.ts — passed, 2 files and 49 tests.
  • vp lint apps/web/src/themePalette.ts apps/web/src/themePalette.test.ts — passed.
  • vp fmt --check apps/web/src/themePalette.ts apps/web/src/themePalette.test.ts — passed, 2 files.
  • cd apps/web && vp run typecheck — passed with tsgo --noEmit.

Changes prepared by GPT-5.6 Sol through Codex in T3 Code.

Note

Fix mutedForeground in createVividThemeColors to stay dimmer than primary text

Replaces the foregroundOn(mutedRgb) derivation of mutedForeground with readableThemeText(mutedRgb, textRgb, 1, 4.6), then converts the result via themeRgbToThemeColor. This keeps mutedForeground accessible on the muted surface while ensuring it has lower contrast than the primary text color on that surface. Adds a test in themePalette.test.ts asserting the contrast ordering.

  • Risk: any consumers relying on the old surface-dependent mutedForeground lightness value will see a different color; verify in-tree usages in apps/web/src.

Macroscope summarized 68211cf.

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:XS 0-9 changed lines (additions + deletions). labels Sep 1, 2026
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at 68211cf

Macroscope's review found this PR approvable — This is a focused two-file fix that adjusts only the derived muted foreground color for generated themes and adds coverage for the intended contrast ordering. The change preserves accessibility constraints without altering default palettes, APIs, or broader runtime workflows.

You can add or adjust custom eligibility rules. Learn more.

@maria-rcks
maria-rcks merged commit cdbf324 into pingdotgg:mainSep 2, 2026
22 checks passed
github-actionsBot added a commit to omarcresp/t3code-flake that referenced this pull request Sep 2, 2026
## What's Changed
* perf(client-runtime): keep turn and checkpoint refs stable while streaming by @t3dotgg in pingdotgg/t3code#9145
* perf(clients): lease sidebar status by visibility by @StiensWout in pingdotgg/t3code#9052
* fix(desktop): show newest changes in nightly previews by @t3dotgg in pingdotgg/t3code#9138
* fix(settings): sync auto-settle and other shared preferences across environments by @t3dotgg in pingdotgg/t3code#9147
* fix(server): prevent accidental service downgrades by @t3dotgg in pingdotgg/t3code#5302
* fix(server): keep attachments until the command commits by @t3dotgg in pingdotgg/t3code#7941
* fix(claude): preview images read from the workspace by @t3dotgg in pingdotgg/t3code#9119
* fix(web): keep generated muted foreground dimmer than entered text by @flamboh in pingdotgg/t3code#9113
* fix(clients): stop repeating expanded commands by @t3dotgg in pingdotgg/t3code#9120
* fix(grok): health check, model selection, and stop all work against the real CLI by @t3dotgg in pingdotgg/t3code#9154
* perf(web): halve the cold-start bundle by splitting Clerk and cold routes by @StiensWout in pingdotgg/t3code#9058
* feat(desktop): update the desktop app on remote Macs from the Update button by @t3dotgg in pingdotgg/t3code#6554
* test(server): measure shell, second client, and reconnect transfer by @t3dotgg in pingdotgg/t3code#9157
* fix(web): project default model works on the hosted app by @juliusmarminge in pingdotgg/t3code#9142
* fix(web): darken neutral control surfaces by @maria-rcks in pingdotgg/t3code#9064
* fix(web): preserve panel state across workspace refreshes by @maria-rcks in pingdotgg/t3code#8968
* feat(files): open markdown, HTML, and PDF files outside the workspace by @juliusmarminge in pingdotgg/t3code#9140
* feat(web): render HTML and PDF files in the file viewer by @juliusmarminge in pingdotgg/t3code#9143
* fix(web): compact project settings actions by @maria-rcks in pingdotgg/t3code#9160
* fix(web): browse folders from file breadcrumbs by @404khai in pingdotgg/t3code#8910
## New Contributors
* @404khai made their first contribution in pingdotgg/t3code#8910
**Full Changelog**: pingdotgg/t3code@v0.0.39-nightly.20260902.1252...v0.0.39-nightly.20260902.1253
Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.39-nightly.20260902.1253
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XS0-9 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@flamboh@maria-rcks