refactor(theme): reduce theme schema to 20 colors - #7169

Closed
StiensWout wants to merge 1 commit into
pingdotgg:mainfrom
StiensWout:t3code/reduce-theme-css-tokens
Closed

refactor(theme): reduce theme schema to 20 colors#7169
StiensWout wants to merge 1 commit into
pingdotgg:mainfrom
StiensWout:t3code/reduce-theme-css-tokens

Conversation

@StiensWout

@StiensWoutStiensWout commented Aug 16, 2026

Copy link
Copy Markdown
Contributor

Follow-up to #7107.

The Advanced theme creator exposes 20 controls, but the stored schema and runtime still maintained 57 source colors.

This reduces the shared schema, every built-in palette, imports, exports, and web runtime inputs to the same 20 colors. Web and mobile semantic colors are derived from those sources, known legacy v1 roles remain import-compatible, and the current editor layout is unchanged.

The theme inspector now finds semantic utility usage without changing live theme colors. Its accent highlight is attached to matched elements, so it stays aligned while scrolling and clears immediately on Cancel.

Verification

  • 81 focused web theme service tests
  • 20 focused mobile theme service tests
  • Web, mobile, and shared typechecks
  • Targeted lint and formatting
  • Production web build
  • Browser-verified token selection, scrolling, and Cancel cleanup
  • Light and dark captures for every built-in theme at 1440×900, with pairwise SSIM of at least 0.9996

Before and after

Each sheet shows Before Light, After Light, Before Dark, and After Dark.

T3 Chat

T3 Chat before and after

Grove

Grove before and after

Ocean

Ocean before and after

Ember

Ember before and after

Iris

Iris before and after

Generated by GPT-5.6 through the Codex harness in T3 Code.

Note

Reduce theme schema from ~57 roles to 20 source roles with derived semantic colors

  • Replaces the large --app-theme-* CSS variable set with 20 --theme-* source roles; derived semantic variables (foregrounds, surfaces, status colors) are computed at runtime by the new deriveThemeSemanticColors function in themePalette.ts.
  • Built-in theme definitions in themePalettes.ts drop dozens of previously stored roles (toolbar, sidebar, terminal, muted, placeholder, focus, etc.); textMuted is renamed to mutedForeground.
  • The theme inspector in themeInspector.ts is rewritten to detect roles from Tailwind utility classes and data attributes instead of computed-style probing; spotlight overlay rendering is removed.
  • Mobile theme variables in mobileTheme.ts switch sheets from chrome to canvas and compute foregrounds for readability against their surfaces.
  • Boot-time splash color in index.html now uses canvas instead of chrome for document background and meta theme-color.
  • Risk: any code or saved theme files referencing removed roles (e.g. sidebarForeground, terminalCursor, accentForeground) will silently receive no value; legacy keys in override files are now skipped rather than applied.

Macroscope summarized 3a1e7d1.


Note

Medium Risk
Wide theme contract change across web, mobile, boot, and imports; visual parity relies on derivation and extensive tests rather than per-role storage.

Overview
Aligns stored themes with the Advanced editor by shrinking the shared palette from ~57 roles to 20 source colors (canvas, text, accent, surfaces, sidebar, terminal, status hues, etc.). Built-in palettes, VS Code import, and exports use only those roles; legacy v1 keys (e.g. chrome, terminalCursor) are still accepted on import but dropped from serialized files.

Runtime semantics are derived, not stored. Web adds deriveThemeSemanticColors and paints --theme-* source variables plus computed pairs (--primary-foreground, error/warning surfaces, terminal text, etc.) via a new CSS bridge. Mobile maps the same roles into native variables with contrast-aware foreground helpers. Terminal theming uses text / accent instead of removed terminal-specific foreground/cursor roles.

Editor and boot paths follow the slimmer model: advanced color families map one role each; boot splash drops chrome and keys document/meta color off canvas. The theme inspector no longer probes live CSS with sentinel colors or a spotlight overlay—it highlights matches from Tailwind utilities, responsive variants, and data-theme-terminal-surface / data-theme-code-surface markers.

Reviewed by Cursor Bugbot for commit 3a1e7d1. Bugbot is set up for automated code reviews on this repo. Configure here.

@coderabbitai

coderabbitaiBot commented Aug 16, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: a198d06c-b841-4298-8443-c2314540406a

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL 1,000+ changed lines (additions + deletions). labels Aug 16, 2026
Comment threadapps/web/src/components/settings/themeInspector.ts
Comment threadapps/web/src/themePalette.ts
Comment threadapps/web/src/themePalette.ts Outdated
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from dbc72da to d0a5254CompareAugust 16, 2026 08:14
Comment threadapps/web/src/index.css Outdated
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from d0a5254 to cff9be4CompareAugust 16, 2026 08:17

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed the theme token reduction for consistency with the runtime token bridge and themed contrast behavior. Four concrete findings, all in the new CSS derivation layer and its consumers:

  • index.css derives every surface foreground from --theme-text, dropping the per-surface contrast solving that the removed palette roles provided (the repo's own inverted-surface VS Code import fixture now produces ~1.0:1 sidebar/terminal text).
  • Solid action/destructive foregrounds are only contrast-solved inside @supports (color: contrast-color(red)); the fallback path lands well below AA on the shipped built-in palettes.
  • themeInspector.ts maps several *-foreground utilities to surface roles that no longer drive them, so the inspector's fast path resolves the wrong editable swatch.
  • ThemeImportDialog.tsx swapped runtime --theme-* inputs for always-defined semantic tokens, which kills the intended JSON highlight fallbacks.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/components/settings/ThemeImportDialog.tsx Outdated
Comment threadapps/web/src/components/settings/themeInspector.ts Outdated
Comment threadapps/web/src/index.css Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed the theme-token reduction for UI consistency and runtime-token behavior. Two concrete regressions in changed lines (readable foreground on the themed --primary fill, and the JSON highlight tokens in the import dialog), plus one coverage note on the inspector mapping.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/settings/themeInspector.ts Outdated
Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/components/settings/ThemeImportDialog.tsx Outdated
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from cff9be4 to 2ef8e33CompareAugust 16, 2026 08:21

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed the theme-token reduction for UI/theming consistency. The 20-role schema and the runtime --theme-* bridge look coherent, and the editor/label/family plumbing matches the new role list. Six concrete regressions in the derived semantic layer are flagged inline: solid-control and status foregrounds are no longer contrast-solved (measured below AA on shipped built-ins), --destructive-foreground loses its red signal, the T3 Chat branded sidebar edge and light-mode toolbar hover direction change, the theme inspector now selects surface roles for text tokens, and the JSON preview highlighter lost its fallbacks.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/index.css
Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/components/settings/themeInspector.ts Outdated
Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/components/settings/ThemeImportDialog.tsx Outdated
Comment threadapps/web/src/index.css Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed the changes made since the previous run (the new @supports custom-theme foreground block, the data-theme-custom marker, and the inspector's custom-theme role table). Two findings on the new code; earlier threads are left as-is.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/settings/themeInspector.ts Outdated
Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/themePalette.ts
@macroscopeapp

macroscopeappBot commented Aug 16, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

Major refactor reducing theme schema from 57 to 20 colors with new runtime derivation logic for semantic colors. Changes fundamental theming architecture including CSS variable mapping, theme inspector, and built-in theme definitions.

You can customize Macroscope's approvability policy. Learn more.

@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from 2ef8e33 to 03c053eCompareAugust 16, 2026 08:50
@StiensWoutStiensWout changed the title refactor(web): reduce theme schema to 20 colorsrefactor(theme): reduce theme schema to 20 colorsAug 16, 2026
Comment threadapps/web/src/components/settings/themeInspector.ts Outdated
Comment threadapps/web/src/components/settings/themeInspector.ts
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from 03c053e to 9fb475eCompareAugust 16, 2026 09:11
Comment threadapps/web/src/themePalette.ts
Comment threadapps/web/src/components/settings/themeInspector.ts
Comment threadapps/web/src/themePalette.ts Outdated
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from 9fb475e to b0d0e3dCompareAugust 16, 2026 09:16

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Three findings on the token-reduction bridge: one contrast hole for the muted-text family on independently editable surfaces, one theme-inspector hit-test regression, and one dead dataset attribute.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/components/settings/themeInspector.ts
Comment threadapps/web/src/themePalette.ts
Comment threadapps/web/src/themePalette.ts Outdated
Comment threadapps/web/src/components/settings/themeInspector.ts
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from b0d0e3d to 2efc6edCompareAugust 16, 2026 09:19
Comment threadapps/web/src/themePalette.ts Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed the web-side theme token reduction (apps/web/src/** CSS/TS). The runtime contrast service now fills the foreground/status pairs, which resolves the earlier readability findings on --primary-foreground, --destructive-foreground, and the status families, and the T3 Chat sidebar edge is preserved. Three remaining issues, all in the inspector/runtime plumbing.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/settings/themeInspector.ts Outdated
Comment threadapps/web/src/components/settings/themeInspector.ts
Comment threadapps/web/src/themePalette.ts
Comment threadapps/mobile/src/lib/mobileTheme.ts Outdated
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from 2efc6ed to eecd9a5CompareAugust 16, 2026 09:25

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One new finding on the themed token bridge: the derived hover fill for the primary action can now drop the label below AA. Earlier findings from previous runs on this PR (--placeholder/--sidebar-muted-foreground solved only against canvas, the inspector's variant handling in the hit test, and the unread data-theme-custom attribute) still apply and are not repeated here.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/index.css

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

There are 2 total unresolved issues (including 1 from previous review).

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit eecd9a5. Configure here.

Comment threadapps/web/src/components/settings/themeInspector.ts Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One finding on the new variant-activity check in themeInspector.ts. The rest of this round looks good: the semantic foregrounds are now contrast-solved in deriveThemeSemanticColors (including placeholder and sidebarMutedForeground against their own surfaces), the JSON highlighter is back on runtime-only --theme-* inputs so its fallbacks stay reachable, and the toolbar hover is derived from the resting control fill.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/settings/themeInspector.ts
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch 2 times, most recently from 0fd78d0 to 78f6b35CompareAugust 16, 2026 09:41

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One finding: the muted-surface contrast guarantee is lost by the mutedsecondary remap.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/themePalette.ts

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Two findings on the theme token reduction: one contrast guarantee that the new derivation no longer covers (and whose test was removed), and one token that now has two divergent owners.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/themePalette.ts Outdated
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from 78f6b35 to 16bdc8bCompareAugust 16, 2026 09:54

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One finding: the themed toolbar surfaces lost inspector coverage when the computed-style probe was replaced by the utility/class map. Details inline.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/settings/themeInspector.ts
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from 16bdc8b to 3a1e7d1CompareAugust 16, 2026 10:04
@t3dotgg

Copy link
Copy Markdown
Member

Note

🤖 GPT-5.6 Sol responding on behalf of Theo

We're closing this PR as we clean up the T3 Code backlog. Thank you for taking the time to put this together.

This refactors the theme contract across 20 files without fixing a current user-facing or reliability problem. The broad migration cost is not justified.

If you believe we closed this in error, please reopen the PR and leave a comment explaining what we missed.

@t3dotggt3dotgg closed this Aug 28, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL1,000+ changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@StiensWout@t3dotgg
, '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

refactor(theme): reduce theme schema to 20 colors - #7169

Closed
StiensWout wants to merge 1 commit into
pingdotgg:mainfrom
StiensWout:t3code/reduce-theme-css-tokens
Closed

refactor(theme): reduce theme schema to 20 colors#7169
StiensWout wants to merge 1 commit into
pingdotgg:mainfrom
StiensWout:t3code/reduce-theme-css-tokens

Conversation

@StiensWout

@StiensWoutStiensWout commented Aug 16, 2026

Copy link
Copy Markdown
Contributor

Follow-up to #7107.

The Advanced theme creator exposes 20 controls, but the stored schema and runtime still maintained 57 source colors.

This reduces the shared schema, every built-in palette, imports, exports, and web runtime inputs to the same 20 colors. Web and mobile semantic colors are derived from those sources, known legacy v1 roles remain import-compatible, and the current editor layout is unchanged.

The theme inspector now finds semantic utility usage without changing live theme colors. Its accent highlight is attached to matched elements, so it stays aligned while scrolling and clears immediately on Cancel.

Verification

  • 81 focused web theme service tests
  • 20 focused mobile theme service tests
  • Web, mobile, and shared typechecks
  • Targeted lint and formatting
  • Production web build
  • Browser-verified token selection, scrolling, and Cancel cleanup
  • Light and dark captures for every built-in theme at 1440×900, with pairwise SSIM of at least 0.9996

Before and after

Each sheet shows Before Light, After Light, Before Dark, and After Dark.

T3 Chat

T3 Chat before and after

Grove

Grove before and after

Ocean

Ocean before and after

Ember

Ember before and after

Iris

Iris before and after

Generated by GPT-5.6 through the Codex harness in T3 Code.

Note

Reduce theme schema from ~57 roles to 20 source roles with derived semantic colors

  • Replaces the large --app-theme-* CSS variable set with 20 --theme-* source roles; derived semantic variables (foregrounds, surfaces, status colors) are computed at runtime by the new deriveThemeSemanticColors function in themePalette.ts.
  • Built-in theme definitions in themePalettes.ts drop dozens of previously stored roles (toolbar, sidebar, terminal, muted, placeholder, focus, etc.); textMuted is renamed to mutedForeground.
  • The theme inspector in themeInspector.ts is rewritten to detect roles from Tailwind utility classes and data attributes instead of computed-style probing; spotlight overlay rendering is removed.
  • Mobile theme variables in mobileTheme.ts switch sheets from chrome to canvas and compute foregrounds for readability against their surfaces.
  • Boot-time splash color in index.html now uses canvas instead of chrome for document background and meta theme-color.
  • Risk: any code or saved theme files referencing removed roles (e.g. sidebarForeground, terminalCursor, accentForeground) will silently receive no value; legacy keys in override files are now skipped rather than applied.

Macroscope summarized 3a1e7d1.


Note

Medium Risk
Wide theme contract change across web, mobile, boot, and imports; visual parity relies on derivation and extensive tests rather than per-role storage.

Overview
Aligns stored themes with the Advanced editor by shrinking the shared palette from ~57 roles to 20 source colors (canvas, text, accent, surfaces, sidebar, terminal, status hues, etc.). Built-in palettes, VS Code import, and exports use only those roles; legacy v1 keys (e.g. chrome, terminalCursor) are still accepted on import but dropped from serialized files.

Runtime semantics are derived, not stored. Web adds deriveThemeSemanticColors and paints --theme-* source variables plus computed pairs (--primary-foreground, error/warning surfaces, terminal text, etc.) via a new CSS bridge. Mobile maps the same roles into native variables with contrast-aware foreground helpers. Terminal theming uses text / accent instead of removed terminal-specific foreground/cursor roles.

Editor and boot paths follow the slimmer model: advanced color families map one role each; boot splash drops chrome and keys document/meta color off canvas. The theme inspector no longer probes live CSS with sentinel colors or a spotlight overlay—it highlights matches from Tailwind utilities, responsive variants, and data-theme-terminal-surface / data-theme-code-surface markers.

Reviewed by Cursor Bugbot for commit 3a1e7d1. Bugbot is set up for automated code reviews on this repo. Configure here.

@coderabbitai

coderabbitaiBot commented Aug 16, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: a198d06c-b841-4298-8443-c2314540406a

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL 1,000+ changed lines (additions + deletions). labels Aug 16, 2026
Comment threadapps/web/src/components/settings/themeInspector.ts
Comment threadapps/web/src/themePalette.ts
Comment threadapps/web/src/themePalette.ts Outdated
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from dbc72da to d0a5254CompareAugust 16, 2026 08:14
Comment threadapps/web/src/index.css Outdated
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from d0a5254 to cff9be4CompareAugust 16, 2026 08:17

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed the theme token reduction for consistency with the runtime token bridge and themed contrast behavior. Four concrete findings, all in the new CSS derivation layer and its consumers:

  • index.css derives every surface foreground from --theme-text, dropping the per-surface contrast solving that the removed palette roles provided (the repo's own inverted-surface VS Code import fixture now produces ~1.0:1 sidebar/terminal text).
  • Solid action/destructive foregrounds are only contrast-solved inside @supports (color: contrast-color(red)); the fallback path lands well below AA on the shipped built-in palettes.
  • themeInspector.ts maps several *-foreground utilities to surface roles that no longer drive them, so the inspector's fast path resolves the wrong editable swatch.
  • ThemeImportDialog.tsx swapped runtime --theme-* inputs for always-defined semantic tokens, which kills the intended JSON highlight fallbacks.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/components/settings/ThemeImportDialog.tsx Outdated
Comment threadapps/web/src/components/settings/themeInspector.ts Outdated
Comment threadapps/web/src/index.css Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed the theme-token reduction for UI consistency and runtime-token behavior. Two concrete regressions in changed lines (readable foreground on the themed --primary fill, and the JSON highlight tokens in the import dialog), plus one coverage note on the inspector mapping.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/settings/themeInspector.ts Outdated
Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/components/settings/ThemeImportDialog.tsx Outdated
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from cff9be4 to 2ef8e33CompareAugust 16, 2026 08:21

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed the theme-token reduction for UI/theming consistency. The 20-role schema and the runtime --theme-* bridge look coherent, and the editor/label/family plumbing matches the new role list. Six concrete regressions in the derived semantic layer are flagged inline: solid-control and status foregrounds are no longer contrast-solved (measured below AA on shipped built-ins), --destructive-foreground loses its red signal, the T3 Chat branded sidebar edge and light-mode toolbar hover direction change, the theme inspector now selects surface roles for text tokens, and the JSON preview highlighter lost its fallbacks.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/index.css
Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/components/settings/themeInspector.ts Outdated
Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/components/settings/ThemeImportDialog.tsx Outdated
Comment threadapps/web/src/index.css Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed the changes made since the previous run (the new @supports custom-theme foreground block, the data-theme-custom marker, and the inspector's custom-theme role table). Two findings on the new code; earlier threads are left as-is.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/settings/themeInspector.ts Outdated
Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/themePalette.ts
@macroscopeapp

macroscopeappBot commented Aug 16, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

Major refactor reducing theme schema from 57 to 20 colors with new runtime derivation logic for semantic colors. Changes fundamental theming architecture including CSS variable mapping, theme inspector, and built-in theme definitions.

You can customize Macroscope's approvability policy. Learn more.

@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from 2ef8e33 to 03c053eCompareAugust 16, 2026 08:50
@StiensWoutStiensWout changed the title refactor(web): reduce theme schema to 20 colorsrefactor(theme): reduce theme schema to 20 colorsAug 16, 2026
Comment threadapps/web/src/components/settings/themeInspector.ts Outdated
Comment threadapps/web/src/components/settings/themeInspector.ts
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from 03c053e to 9fb475eCompareAugust 16, 2026 09:11
Comment threadapps/web/src/themePalette.ts
Comment threadapps/web/src/components/settings/themeInspector.ts
Comment threadapps/web/src/themePalette.ts Outdated
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from 9fb475e to b0d0e3dCompareAugust 16, 2026 09:16

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Three findings on the token-reduction bridge: one contrast hole for the muted-text family on independently editable surfaces, one theme-inspector hit-test regression, and one dead dataset attribute.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/components/settings/themeInspector.ts
Comment threadapps/web/src/themePalette.ts
Comment threadapps/web/src/themePalette.ts Outdated
Comment threadapps/web/src/components/settings/themeInspector.ts
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from b0d0e3d to 2efc6edCompareAugust 16, 2026 09:19
Comment threadapps/web/src/themePalette.ts Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed the web-side theme token reduction (apps/web/src/** CSS/TS). The runtime contrast service now fills the foreground/status pairs, which resolves the earlier readability findings on --primary-foreground, --destructive-foreground, and the status families, and the T3 Chat sidebar edge is preserved. Three remaining issues, all in the inspector/runtime plumbing.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/settings/themeInspector.ts Outdated
Comment threadapps/web/src/components/settings/themeInspector.ts
Comment threadapps/web/src/themePalette.ts
Comment threadapps/mobile/src/lib/mobileTheme.ts Outdated
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from 2efc6ed to eecd9a5CompareAugust 16, 2026 09:25

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One new finding on the themed token bridge: the derived hover fill for the primary action can now drop the label below AA. Earlier findings from previous runs on this PR (--placeholder/--sidebar-muted-foreground solved only against canvas, the inspector's variant handling in the hit test, and the unread data-theme-custom attribute) still apply and are not repeated here.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/index.css

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

There are 2 total unresolved issues (including 1 from previous review).

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit eecd9a5. Configure here.

Comment threadapps/web/src/components/settings/themeInspector.ts Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One finding on the new variant-activity check in themeInspector.ts. The rest of this round looks good: the semantic foregrounds are now contrast-solved in deriveThemeSemanticColors (including placeholder and sidebarMutedForeground against their own surfaces), the JSON highlighter is back on runtime-only --theme-* inputs so its fallbacks stay reachable, and the toolbar hover is derived from the resting control fill.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/settings/themeInspector.ts
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch 2 times, most recently from 0fd78d0 to 78f6b35CompareAugust 16, 2026 09:41

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One finding: the muted-surface contrast guarantee is lost by the mutedsecondary remap.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/themePalette.ts

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Two findings on the theme token reduction: one contrast guarantee that the new derivation no longer covers (and whose test was removed), and one token that now has two divergent owners.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/themePalette.ts Outdated
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from 78f6b35 to 16bdc8bCompareAugust 16, 2026 09:54

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One finding: the themed toolbar surfaces lost inspector coverage when the computed-style probe was replaced by the utility/class map. Details inline.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/settings/themeInspector.ts
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from 16bdc8b to 3a1e7d1CompareAugust 16, 2026 10:04
@t3dotgg

Copy link
Copy Markdown
Member

Note

🤖 GPT-5.6 Sol responding on behalf of Theo

We're closing this PR as we clean up the T3 Code backlog. Thank you for taking the time to put this together.

This refactors the theme contract across 20 files without fixing a current user-facing or reliability problem. The broad migration cost is not justified.

If you believe we closed this in error, please reopen the PR and leave a comment explaining what we missed.

@t3dotggt3dotgg closed this Aug 28, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL1,000+ changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@StiensWout@t3dotgg
, '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

refactor(theme): reduce theme schema to 20 colors - #7169

Closed
StiensWout wants to merge 1 commit into
pingdotgg:mainfrom
StiensWout:t3code/reduce-theme-css-tokens
Closed

refactor(theme): reduce theme schema to 20 colors#7169
StiensWout wants to merge 1 commit into
pingdotgg:mainfrom
StiensWout:t3code/reduce-theme-css-tokens

Conversation

@StiensWout

@StiensWoutStiensWout commented Aug 16, 2026

Copy link
Copy Markdown
Contributor

Follow-up to #7107.

The Advanced theme creator exposes 20 controls, but the stored schema and runtime still maintained 57 source colors.

This reduces the shared schema, every built-in palette, imports, exports, and web runtime inputs to the same 20 colors. Web and mobile semantic colors are derived from those sources, known legacy v1 roles remain import-compatible, and the current editor layout is unchanged.

The theme inspector now finds semantic utility usage without changing live theme colors. Its accent highlight is attached to matched elements, so it stays aligned while scrolling and clears immediately on Cancel.

Verification

  • 81 focused web theme service tests
  • 20 focused mobile theme service tests
  • Web, mobile, and shared typechecks
  • Targeted lint and formatting
  • Production web build
  • Browser-verified token selection, scrolling, and Cancel cleanup
  • Light and dark captures for every built-in theme at 1440×900, with pairwise SSIM of at least 0.9996

Before and after

Each sheet shows Before Light, After Light, Before Dark, and After Dark.

T3 Chat

T3 Chat before and after

Grove

Grove before and after

Ocean

Ocean before and after

Ember

Ember before and after

Iris

Iris before and after

Generated by GPT-5.6 through the Codex harness in T3 Code.

Note

Reduce theme schema from ~57 roles to 20 source roles with derived semantic colors

  • Replaces the large --app-theme-* CSS variable set with 20 --theme-* source roles; derived semantic variables (foregrounds, surfaces, status colors) are computed at runtime by the new deriveThemeSemanticColors function in themePalette.ts.
  • Built-in theme definitions in themePalettes.ts drop dozens of previously stored roles (toolbar, sidebar, terminal, muted, placeholder, focus, etc.); textMuted is renamed to mutedForeground.
  • The theme inspector in themeInspector.ts is rewritten to detect roles from Tailwind utility classes and data attributes instead of computed-style probing; spotlight overlay rendering is removed.
  • Mobile theme variables in mobileTheme.ts switch sheets from chrome to canvas and compute foregrounds for readability against their surfaces.
  • Boot-time splash color in index.html now uses canvas instead of chrome for document background and meta theme-color.
  • Risk: any code or saved theme files referencing removed roles (e.g. sidebarForeground, terminalCursor, accentForeground) will silently receive no value; legacy keys in override files are now skipped rather than applied.

Macroscope summarized 3a1e7d1.


Note

Medium Risk
Wide theme contract change across web, mobile, boot, and imports; visual parity relies on derivation and extensive tests rather than per-role storage.

Overview
Aligns stored themes with the Advanced editor by shrinking the shared palette from ~57 roles to 20 source colors (canvas, text, accent, surfaces, sidebar, terminal, status hues, etc.). Built-in palettes, VS Code import, and exports use only those roles; legacy v1 keys (e.g. chrome, terminalCursor) are still accepted on import but dropped from serialized files.

Runtime semantics are derived, not stored. Web adds deriveThemeSemanticColors and paints --theme-* source variables plus computed pairs (--primary-foreground, error/warning surfaces, terminal text, etc.) via a new CSS bridge. Mobile maps the same roles into native variables with contrast-aware foreground helpers. Terminal theming uses text / accent instead of removed terminal-specific foreground/cursor roles.

Editor and boot paths follow the slimmer model: advanced color families map one role each; boot splash drops chrome and keys document/meta color off canvas. The theme inspector no longer probes live CSS with sentinel colors or a spotlight overlay—it highlights matches from Tailwind utilities, responsive variants, and data-theme-terminal-surface / data-theme-code-surface markers.

Reviewed by Cursor Bugbot for commit 3a1e7d1. Bugbot is set up for automated code reviews on this repo. Configure here.

@coderabbitai

coderabbitaiBot commented Aug 16, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: a198d06c-b841-4298-8443-c2314540406a

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL 1,000+ changed lines (additions + deletions). labels Aug 16, 2026
Comment threadapps/web/src/components/settings/themeInspector.ts
Comment threadapps/web/src/themePalette.ts
Comment threadapps/web/src/themePalette.ts Outdated
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from dbc72da to d0a5254CompareAugust 16, 2026 08:14
Comment threadapps/web/src/index.css Outdated
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from d0a5254 to cff9be4CompareAugust 16, 2026 08:17

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed the theme token reduction for consistency with the runtime token bridge and themed contrast behavior. Four concrete findings, all in the new CSS derivation layer and its consumers:

  • index.css derives every surface foreground from --theme-text, dropping the per-surface contrast solving that the removed palette roles provided (the repo's own inverted-surface VS Code import fixture now produces ~1.0:1 sidebar/terminal text).
  • Solid action/destructive foregrounds are only contrast-solved inside @supports (color: contrast-color(red)); the fallback path lands well below AA on the shipped built-in palettes.
  • themeInspector.ts maps several *-foreground utilities to surface roles that no longer drive them, so the inspector's fast path resolves the wrong editable swatch.
  • ThemeImportDialog.tsx swapped runtime --theme-* inputs for always-defined semantic tokens, which kills the intended JSON highlight fallbacks.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/components/settings/ThemeImportDialog.tsx Outdated
Comment threadapps/web/src/components/settings/themeInspector.ts Outdated
Comment threadapps/web/src/index.css Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed the theme-token reduction for UI consistency and runtime-token behavior. Two concrete regressions in changed lines (readable foreground on the themed --primary fill, and the JSON highlight tokens in the import dialog), plus one coverage note on the inspector mapping.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/settings/themeInspector.ts Outdated
Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/components/settings/ThemeImportDialog.tsx Outdated
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from cff9be4 to 2ef8e33CompareAugust 16, 2026 08:21

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed the theme-token reduction for UI/theming consistency. The 20-role schema and the runtime --theme-* bridge look coherent, and the editor/label/family plumbing matches the new role list. Six concrete regressions in the derived semantic layer are flagged inline: solid-control and status foregrounds are no longer contrast-solved (measured below AA on shipped built-ins), --destructive-foreground loses its red signal, the T3 Chat branded sidebar edge and light-mode toolbar hover direction change, the theme inspector now selects surface roles for text tokens, and the JSON preview highlighter lost its fallbacks.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/index.css
Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/components/settings/themeInspector.ts Outdated
Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/components/settings/ThemeImportDialog.tsx Outdated
Comment threadapps/web/src/index.css Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed the changes made since the previous run (the new @supports custom-theme foreground block, the data-theme-custom marker, and the inspector's custom-theme role table). Two findings on the new code; earlier threads are left as-is.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/settings/themeInspector.ts Outdated
Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/themePalette.ts
@macroscopeapp

macroscopeappBot commented Aug 16, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

Major refactor reducing theme schema from 57 to 20 colors with new runtime derivation logic for semantic colors. Changes fundamental theming architecture including CSS variable mapping, theme inspector, and built-in theme definitions.

You can customize Macroscope's approvability policy. Learn more.

@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from 2ef8e33 to 03c053eCompareAugust 16, 2026 08:50
@StiensWoutStiensWout changed the title refactor(web): reduce theme schema to 20 colorsrefactor(theme): reduce theme schema to 20 colorsAug 16, 2026
Comment threadapps/web/src/components/settings/themeInspector.ts Outdated
Comment threadapps/web/src/components/settings/themeInspector.ts
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from 03c053e to 9fb475eCompareAugust 16, 2026 09:11
Comment threadapps/web/src/themePalette.ts
Comment threadapps/web/src/components/settings/themeInspector.ts
Comment threadapps/web/src/themePalette.ts Outdated
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from 9fb475e to b0d0e3dCompareAugust 16, 2026 09:16

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Three findings on the token-reduction bridge: one contrast hole for the muted-text family on independently editable surfaces, one theme-inspector hit-test regression, and one dead dataset attribute.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/components/settings/themeInspector.ts
Comment threadapps/web/src/themePalette.ts
Comment threadapps/web/src/themePalette.ts Outdated
Comment threadapps/web/src/components/settings/themeInspector.ts
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from b0d0e3d to 2efc6edCompareAugust 16, 2026 09:19
Comment threadapps/web/src/themePalette.ts Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed the web-side theme token reduction (apps/web/src/** CSS/TS). The runtime contrast service now fills the foreground/status pairs, which resolves the earlier readability findings on --primary-foreground, --destructive-foreground, and the status families, and the T3 Chat sidebar edge is preserved. Three remaining issues, all in the inspector/runtime plumbing.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/settings/themeInspector.ts Outdated
Comment threadapps/web/src/components/settings/themeInspector.ts
Comment threadapps/web/src/themePalette.ts
Comment threadapps/mobile/src/lib/mobileTheme.ts Outdated
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from 2efc6ed to eecd9a5CompareAugust 16, 2026 09:25

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One new finding on the themed token bridge: the derived hover fill for the primary action can now drop the label below AA. Earlier findings from previous runs on this PR (--placeholder/--sidebar-muted-foreground solved only against canvas, the inspector's variant handling in the hit test, and the unread data-theme-custom attribute) still apply and are not repeated here.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/index.css

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

There are 2 total unresolved issues (including 1 from previous review).

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit eecd9a5. Configure here.

Comment threadapps/web/src/components/settings/themeInspector.ts Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One finding on the new variant-activity check in themeInspector.ts. The rest of this round looks good: the semantic foregrounds are now contrast-solved in deriveThemeSemanticColors (including placeholder and sidebarMutedForeground against their own surfaces), the JSON highlighter is back on runtime-only --theme-* inputs so its fallbacks stay reachable, and the toolbar hover is derived from the resting control fill.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/settings/themeInspector.ts
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch 2 times, most recently from 0fd78d0 to 78f6b35CompareAugust 16, 2026 09:41

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One finding: the muted-surface contrast guarantee is lost by the mutedsecondary remap.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/themePalette.ts

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Two findings on the theme token reduction: one contrast guarantee that the new derivation no longer covers (and whose test was removed), and one token that now has two divergent owners.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/themePalette.ts Outdated
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from 78f6b35 to 16bdc8bCompareAugust 16, 2026 09:54

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One finding: the themed toolbar surfaces lost inspector coverage when the computed-style probe was replaced by the utility/class map. Details inline.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/settings/themeInspector.ts
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from 16bdc8b to 3a1e7d1CompareAugust 16, 2026 10:04
@t3dotgg

Copy link
Copy Markdown
Member

Note

🤖 GPT-5.6 Sol responding on behalf of Theo

We're closing this PR as we clean up the T3 Code backlog. Thank you for taking the time to put this together.

This refactors the theme contract across 20 files without fixing a current user-facing or reliability problem. The broad migration cost is not justified.

If you believe we closed this in error, please reopen the PR and leave a comment explaining what we missed.

@t3dotggt3dotgg closed this Aug 28, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL1,000+ changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@StiensWout@t3dotgg
, '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

refactor(theme): reduce theme schema to 20 colors - #7169

Closed
StiensWout wants to merge 1 commit into
pingdotgg:mainfrom
StiensWout:t3code/reduce-theme-css-tokens
Closed

refactor(theme): reduce theme schema to 20 colors#7169
StiensWout wants to merge 1 commit into
pingdotgg:mainfrom
StiensWout:t3code/reduce-theme-css-tokens

Conversation

@StiensWout

@StiensWoutStiensWout commented Aug 16, 2026

Copy link
Copy Markdown
Contributor

Follow-up to #7107.

The Advanced theme creator exposes 20 controls, but the stored schema and runtime still maintained 57 source colors.

This reduces the shared schema, every built-in palette, imports, exports, and web runtime inputs to the same 20 colors. Web and mobile semantic colors are derived from those sources, known legacy v1 roles remain import-compatible, and the current editor layout is unchanged.

The theme inspector now finds semantic utility usage without changing live theme colors. Its accent highlight is attached to matched elements, so it stays aligned while scrolling and clears immediately on Cancel.

Verification

  • 81 focused web theme service tests
  • 20 focused mobile theme service tests
  • Web, mobile, and shared typechecks
  • Targeted lint and formatting
  • Production web build
  • Browser-verified token selection, scrolling, and Cancel cleanup
  • Light and dark captures for every built-in theme at 1440×900, with pairwise SSIM of at least 0.9996

Before and after

Each sheet shows Before Light, After Light, Before Dark, and After Dark.

T3 Chat

T3 Chat before and after

Grove

Grove before and after

Ocean

Ocean before and after

Ember

Ember before and after

Iris

Iris before and after

Generated by GPT-5.6 through the Codex harness in T3 Code.

Note

Reduce theme schema from ~57 roles to 20 source roles with derived semantic colors

  • Replaces the large --app-theme-* CSS variable set with 20 --theme-* source roles; derived semantic variables (foregrounds, surfaces, status colors) are computed at runtime by the new deriveThemeSemanticColors function in themePalette.ts.
  • Built-in theme definitions in themePalettes.ts drop dozens of previously stored roles (toolbar, sidebar, terminal, muted, placeholder, focus, etc.); textMuted is renamed to mutedForeground.
  • The theme inspector in themeInspector.ts is rewritten to detect roles from Tailwind utility classes and data attributes instead of computed-style probing; spotlight overlay rendering is removed.
  • Mobile theme variables in mobileTheme.ts switch sheets from chrome to canvas and compute foregrounds for readability against their surfaces.
  • Boot-time splash color in index.html now uses canvas instead of chrome for document background and meta theme-color.
  • Risk: any code or saved theme files referencing removed roles (e.g. sidebarForeground, terminalCursor, accentForeground) will silently receive no value; legacy keys in override files are now skipped rather than applied.

Macroscope summarized 3a1e7d1.


Note

Medium Risk
Wide theme contract change across web, mobile, boot, and imports; visual parity relies on derivation and extensive tests rather than per-role storage.

Overview
Aligns stored themes with the Advanced editor by shrinking the shared palette from ~57 roles to 20 source colors (canvas, text, accent, surfaces, sidebar, terminal, status hues, etc.). Built-in palettes, VS Code import, and exports use only those roles; legacy v1 keys (e.g. chrome, terminalCursor) are still accepted on import but dropped from serialized files.

Runtime semantics are derived, not stored. Web adds deriveThemeSemanticColors and paints --theme-* source variables plus computed pairs (--primary-foreground, error/warning surfaces, terminal text, etc.) via a new CSS bridge. Mobile maps the same roles into native variables with contrast-aware foreground helpers. Terminal theming uses text / accent instead of removed terminal-specific foreground/cursor roles.

Editor and boot paths follow the slimmer model: advanced color families map one role each; boot splash drops chrome and keys document/meta color off canvas. The theme inspector no longer probes live CSS with sentinel colors or a spotlight overlay—it highlights matches from Tailwind utilities, responsive variants, and data-theme-terminal-surface / data-theme-code-surface markers.

Reviewed by Cursor Bugbot for commit 3a1e7d1. Bugbot is set up for automated code reviews on this repo. Configure here.

@coderabbitai

coderabbitaiBot commented Aug 16, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: a198d06c-b841-4298-8443-c2314540406a

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL 1,000+ changed lines (additions + deletions). labels Aug 16, 2026
Comment threadapps/web/src/components/settings/themeInspector.ts
Comment threadapps/web/src/themePalette.ts
Comment threadapps/web/src/themePalette.ts Outdated
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from dbc72da to d0a5254CompareAugust 16, 2026 08:14
Comment threadapps/web/src/index.css Outdated
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from d0a5254 to cff9be4CompareAugust 16, 2026 08:17

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed the theme token reduction for consistency with the runtime token bridge and themed contrast behavior. Four concrete findings, all in the new CSS derivation layer and its consumers:

  • index.css derives every surface foreground from --theme-text, dropping the per-surface contrast solving that the removed palette roles provided (the repo's own inverted-surface VS Code import fixture now produces ~1.0:1 sidebar/terminal text).
  • Solid action/destructive foregrounds are only contrast-solved inside @supports (color: contrast-color(red)); the fallback path lands well below AA on the shipped built-in palettes.
  • themeInspector.ts maps several *-foreground utilities to surface roles that no longer drive them, so the inspector's fast path resolves the wrong editable swatch.
  • ThemeImportDialog.tsx swapped runtime --theme-* inputs for always-defined semantic tokens, which kills the intended JSON highlight fallbacks.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/components/settings/ThemeImportDialog.tsx Outdated
Comment threadapps/web/src/components/settings/themeInspector.ts Outdated
Comment threadapps/web/src/index.css Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed the theme-token reduction for UI consistency and runtime-token behavior. Two concrete regressions in changed lines (readable foreground on the themed --primary fill, and the JSON highlight tokens in the import dialog), plus one coverage note on the inspector mapping.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/settings/themeInspector.ts Outdated
Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/components/settings/ThemeImportDialog.tsx Outdated
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from cff9be4 to 2ef8e33CompareAugust 16, 2026 08:21

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed the theme-token reduction for UI/theming consistency. The 20-role schema and the runtime --theme-* bridge look coherent, and the editor/label/family plumbing matches the new role list. Six concrete regressions in the derived semantic layer are flagged inline: solid-control and status foregrounds are no longer contrast-solved (measured below AA on shipped built-ins), --destructive-foreground loses its red signal, the T3 Chat branded sidebar edge and light-mode toolbar hover direction change, the theme inspector now selects surface roles for text tokens, and the JSON preview highlighter lost its fallbacks.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/index.css
Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/components/settings/themeInspector.ts Outdated
Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/components/settings/ThemeImportDialog.tsx Outdated
Comment threadapps/web/src/index.css Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed the changes made since the previous run (the new @supports custom-theme foreground block, the data-theme-custom marker, and the inspector's custom-theme role table). Two findings on the new code; earlier threads are left as-is.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/settings/themeInspector.ts Outdated
Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/themePalette.ts
@macroscopeapp

macroscopeappBot commented Aug 16, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

Major refactor reducing theme schema from 57 to 20 colors with new runtime derivation logic for semantic colors. Changes fundamental theming architecture including CSS variable mapping, theme inspector, and built-in theme definitions.

You can customize Macroscope's approvability policy. Learn more.

@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from 2ef8e33 to 03c053eCompareAugust 16, 2026 08:50
@StiensWoutStiensWout changed the title refactor(web): reduce theme schema to 20 colorsrefactor(theme): reduce theme schema to 20 colorsAug 16, 2026
Comment threadapps/web/src/components/settings/themeInspector.ts Outdated
Comment threadapps/web/src/components/settings/themeInspector.ts
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from 03c053e to 9fb475eCompareAugust 16, 2026 09:11
Comment threadapps/web/src/themePalette.ts
Comment threadapps/web/src/components/settings/themeInspector.ts
Comment threadapps/web/src/themePalette.ts Outdated
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from 9fb475e to b0d0e3dCompareAugust 16, 2026 09:16

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Three findings on the token-reduction bridge: one contrast hole for the muted-text family on independently editable surfaces, one theme-inspector hit-test regression, and one dead dataset attribute.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/components/settings/themeInspector.ts
Comment threadapps/web/src/themePalette.ts
Comment threadapps/web/src/themePalette.ts Outdated
Comment threadapps/web/src/components/settings/themeInspector.ts
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from b0d0e3d to 2efc6edCompareAugust 16, 2026 09:19
Comment threadapps/web/src/themePalette.ts Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed the web-side theme token reduction (apps/web/src/** CSS/TS). The runtime contrast service now fills the foreground/status pairs, which resolves the earlier readability findings on --primary-foreground, --destructive-foreground, and the status families, and the T3 Chat sidebar edge is preserved. Three remaining issues, all in the inspector/runtime plumbing.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/settings/themeInspector.ts Outdated
Comment threadapps/web/src/components/settings/themeInspector.ts
Comment threadapps/web/src/themePalette.ts
Comment threadapps/mobile/src/lib/mobileTheme.ts Outdated
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from 2efc6ed to eecd9a5CompareAugust 16, 2026 09:25

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One new finding on the themed token bridge: the derived hover fill for the primary action can now drop the label below AA. Earlier findings from previous runs on this PR (--placeholder/--sidebar-muted-foreground solved only against canvas, the inspector's variant handling in the hit test, and the unread data-theme-custom attribute) still apply and are not repeated here.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/index.css

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

There are 2 total unresolved issues (including 1 from previous review).

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit eecd9a5. Configure here.

Comment threadapps/web/src/components/settings/themeInspector.ts Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One finding on the new variant-activity check in themeInspector.ts. The rest of this round looks good: the semantic foregrounds are now contrast-solved in deriveThemeSemanticColors (including placeholder and sidebarMutedForeground against their own surfaces), the JSON highlighter is back on runtime-only --theme-* inputs so its fallbacks stay reachable, and the toolbar hover is derived from the resting control fill.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/settings/themeInspector.ts
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch 2 times, most recently from 0fd78d0 to 78f6b35CompareAugust 16, 2026 09:41

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One finding: the muted-surface contrast guarantee is lost by the mutedsecondary remap.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/themePalette.ts

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Two findings on the theme token reduction: one contrast guarantee that the new derivation no longer covers (and whose test was removed), and one token that now has two divergent owners.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/themePalette.ts Outdated
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from 78f6b35 to 16bdc8bCompareAugust 16, 2026 09:54

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One finding: the themed toolbar surfaces lost inspector coverage when the computed-style probe was replaced by the utility/class map. Details inline.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/settings/themeInspector.ts
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from 16bdc8b to 3a1e7d1CompareAugust 16, 2026 10:04
@t3dotgg

Copy link
Copy Markdown
Member

Note

🤖 GPT-5.6 Sol responding on behalf of Theo

We're closing this PR as we clean up the T3 Code backlog. Thank you for taking the time to put this together.

This refactors the theme contract across 20 files without fixing a current user-facing or reliability problem. The broad migration cost is not justified.

If you believe we closed this in error, please reopen the PR and leave a comment explaining what we missed.

@t3dotggt3dotgg closed this Aug 28, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL1,000+ changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@StiensWout@t3dotgg
, '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

refactor(theme): reduce theme schema to 20 colors - #7169

Closed
StiensWout wants to merge 1 commit into
pingdotgg:mainfrom
StiensWout:t3code/reduce-theme-css-tokens
Closed

refactor(theme): reduce theme schema to 20 colors#7169
StiensWout wants to merge 1 commit into
pingdotgg:mainfrom
StiensWout:t3code/reduce-theme-css-tokens

Conversation

@StiensWout

@StiensWoutStiensWout commented Aug 16, 2026

Copy link
Copy Markdown
Contributor

Follow-up to #7107.

The Advanced theme creator exposes 20 controls, but the stored schema and runtime still maintained 57 source colors.

This reduces the shared schema, every built-in palette, imports, exports, and web runtime inputs to the same 20 colors. Web and mobile semantic colors are derived from those sources, known legacy v1 roles remain import-compatible, and the current editor layout is unchanged.

The theme inspector now finds semantic utility usage without changing live theme colors. Its accent highlight is attached to matched elements, so it stays aligned while scrolling and clears immediately on Cancel.

Verification

  • 81 focused web theme service tests
  • 20 focused mobile theme service tests
  • Web, mobile, and shared typechecks
  • Targeted lint and formatting
  • Production web build
  • Browser-verified token selection, scrolling, and Cancel cleanup
  • Light and dark captures for every built-in theme at 1440×900, with pairwise SSIM of at least 0.9996

Before and after

Each sheet shows Before Light, After Light, Before Dark, and After Dark.

T3 Chat

T3 Chat before and after

Grove

Grove before and after

Ocean

Ocean before and after

Ember

Ember before and after

Iris

Iris before and after

Generated by GPT-5.6 through the Codex harness in T3 Code.

Note

Reduce theme schema from ~57 roles to 20 source roles with derived semantic colors

  • Replaces the large --app-theme-* CSS variable set with 20 --theme-* source roles; derived semantic variables (foregrounds, surfaces, status colors) are computed at runtime by the new deriveThemeSemanticColors function in themePalette.ts.
  • Built-in theme definitions in themePalettes.ts drop dozens of previously stored roles (toolbar, sidebar, terminal, muted, placeholder, focus, etc.); textMuted is renamed to mutedForeground.
  • The theme inspector in themeInspector.ts is rewritten to detect roles from Tailwind utility classes and data attributes instead of computed-style probing; spotlight overlay rendering is removed.
  • Mobile theme variables in mobileTheme.ts switch sheets from chrome to canvas and compute foregrounds for readability against their surfaces.
  • Boot-time splash color in index.html now uses canvas instead of chrome for document background and meta theme-color.
  • Risk: any code or saved theme files referencing removed roles (e.g. sidebarForeground, terminalCursor, accentForeground) will silently receive no value; legacy keys in override files are now skipped rather than applied.

Macroscope summarized 3a1e7d1.


Note

Medium Risk
Wide theme contract change across web, mobile, boot, and imports; visual parity relies on derivation and extensive tests rather than per-role storage.

Overview
Aligns stored themes with the Advanced editor by shrinking the shared palette from ~57 roles to 20 source colors (canvas, text, accent, surfaces, sidebar, terminal, status hues, etc.). Built-in palettes, VS Code import, and exports use only those roles; legacy v1 keys (e.g. chrome, terminalCursor) are still accepted on import but dropped from serialized files.

Runtime semantics are derived, not stored. Web adds deriveThemeSemanticColors and paints --theme-* source variables plus computed pairs (--primary-foreground, error/warning surfaces, terminal text, etc.) via a new CSS bridge. Mobile maps the same roles into native variables with contrast-aware foreground helpers. Terminal theming uses text / accent instead of removed terminal-specific foreground/cursor roles.

Editor and boot paths follow the slimmer model: advanced color families map one role each; boot splash drops chrome and keys document/meta color off canvas. The theme inspector no longer probes live CSS with sentinel colors or a spotlight overlay—it highlights matches from Tailwind utilities, responsive variants, and data-theme-terminal-surface / data-theme-code-surface markers.

Reviewed by Cursor Bugbot for commit 3a1e7d1. Bugbot is set up for automated code reviews on this repo. Configure here.

@coderabbitai

coderabbitaiBot commented Aug 16, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: a198d06c-b841-4298-8443-c2314540406a

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL 1,000+ changed lines (additions + deletions). labels Aug 16, 2026
Comment threadapps/web/src/components/settings/themeInspector.ts
Comment threadapps/web/src/themePalette.ts
Comment threadapps/web/src/themePalette.ts Outdated
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from dbc72da to d0a5254CompareAugust 16, 2026 08:14
Comment threadapps/web/src/index.css Outdated
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from d0a5254 to cff9be4CompareAugust 16, 2026 08:17

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed the theme token reduction for consistency with the runtime token bridge and themed contrast behavior. Four concrete findings, all in the new CSS derivation layer and its consumers:

  • index.css derives every surface foreground from --theme-text, dropping the per-surface contrast solving that the removed palette roles provided (the repo's own inverted-surface VS Code import fixture now produces ~1.0:1 sidebar/terminal text).
  • Solid action/destructive foregrounds are only contrast-solved inside @supports (color: contrast-color(red)); the fallback path lands well below AA on the shipped built-in palettes.
  • themeInspector.ts maps several *-foreground utilities to surface roles that no longer drive them, so the inspector's fast path resolves the wrong editable swatch.
  • ThemeImportDialog.tsx swapped runtime --theme-* inputs for always-defined semantic tokens, which kills the intended JSON highlight fallbacks.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/components/settings/ThemeImportDialog.tsx Outdated
Comment threadapps/web/src/components/settings/themeInspector.ts Outdated
Comment threadapps/web/src/index.css Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed the theme-token reduction for UI consistency and runtime-token behavior. Two concrete regressions in changed lines (readable foreground on the themed --primary fill, and the JSON highlight tokens in the import dialog), plus one coverage note on the inspector mapping.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/settings/themeInspector.ts Outdated
Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/components/settings/ThemeImportDialog.tsx Outdated
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from cff9be4 to 2ef8e33CompareAugust 16, 2026 08:21

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed the theme-token reduction for UI/theming consistency. The 20-role schema and the runtime --theme-* bridge look coherent, and the editor/label/family plumbing matches the new role list. Six concrete regressions in the derived semantic layer are flagged inline: solid-control and status foregrounds are no longer contrast-solved (measured below AA on shipped built-ins), --destructive-foreground loses its red signal, the T3 Chat branded sidebar edge and light-mode toolbar hover direction change, the theme inspector now selects surface roles for text tokens, and the JSON preview highlighter lost its fallbacks.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/index.css
Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/components/settings/themeInspector.ts Outdated
Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/components/settings/ThemeImportDialog.tsx Outdated
Comment threadapps/web/src/index.css Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed the changes made since the previous run (the new @supports custom-theme foreground block, the data-theme-custom marker, and the inspector's custom-theme role table). Two findings on the new code; earlier threads are left as-is.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/settings/themeInspector.ts Outdated
Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/themePalette.ts
@macroscopeapp

macroscopeappBot commented Aug 16, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

Major refactor reducing theme schema from 57 to 20 colors with new runtime derivation logic for semantic colors. Changes fundamental theming architecture including CSS variable mapping, theme inspector, and built-in theme definitions.

You can customize Macroscope's approvability policy. Learn more.

@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from 2ef8e33 to 03c053eCompareAugust 16, 2026 08:50
@StiensWoutStiensWout changed the title refactor(web): reduce theme schema to 20 colorsrefactor(theme): reduce theme schema to 20 colorsAug 16, 2026
Comment threadapps/web/src/components/settings/themeInspector.ts Outdated
Comment threadapps/web/src/components/settings/themeInspector.ts
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from 03c053e to 9fb475eCompareAugust 16, 2026 09:11
Comment threadapps/web/src/themePalette.ts
Comment threadapps/web/src/components/settings/themeInspector.ts
Comment threadapps/web/src/themePalette.ts Outdated
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from 9fb475e to b0d0e3dCompareAugust 16, 2026 09:16

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Three findings on the token-reduction bridge: one contrast hole for the muted-text family on independently editable surfaces, one theme-inspector hit-test regression, and one dead dataset attribute.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/components/settings/themeInspector.ts
Comment threadapps/web/src/themePalette.ts
Comment threadapps/web/src/themePalette.ts Outdated
Comment threadapps/web/src/components/settings/themeInspector.ts
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from b0d0e3d to 2efc6edCompareAugust 16, 2026 09:19
Comment threadapps/web/src/themePalette.ts Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed the web-side theme token reduction (apps/web/src/** CSS/TS). The runtime contrast service now fills the foreground/status pairs, which resolves the earlier readability findings on --primary-foreground, --destructive-foreground, and the status families, and the T3 Chat sidebar edge is preserved. Three remaining issues, all in the inspector/runtime plumbing.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/settings/themeInspector.ts Outdated
Comment threadapps/web/src/components/settings/themeInspector.ts
Comment threadapps/web/src/themePalette.ts
Comment threadapps/mobile/src/lib/mobileTheme.ts Outdated
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from 2efc6ed to eecd9a5CompareAugust 16, 2026 09:25

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One new finding on the themed token bridge: the derived hover fill for the primary action can now drop the label below AA. Earlier findings from previous runs on this PR (--placeholder/--sidebar-muted-foreground solved only against canvas, the inspector's variant handling in the hit test, and the unread data-theme-custom attribute) still apply and are not repeated here.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/index.css

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

There are 2 total unresolved issues (including 1 from previous review).

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit eecd9a5. Configure here.

Comment threadapps/web/src/components/settings/themeInspector.ts Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One finding on the new variant-activity check in themeInspector.ts. The rest of this round looks good: the semantic foregrounds are now contrast-solved in deriveThemeSemanticColors (including placeholder and sidebarMutedForeground against their own surfaces), the JSON highlighter is back on runtime-only --theme-* inputs so its fallbacks stay reachable, and the toolbar hover is derived from the resting control fill.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/settings/themeInspector.ts
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch 2 times, most recently from 0fd78d0 to 78f6b35CompareAugust 16, 2026 09:41

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One finding: the muted-surface contrast guarantee is lost by the mutedsecondary remap.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/themePalette.ts

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Two findings on the theme token reduction: one contrast guarantee that the new derivation no longer covers (and whose test was removed), and one token that now has two divergent owners.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/themePalette.ts Outdated
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from 78f6b35 to 16bdc8bCompareAugust 16, 2026 09:54

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One finding: the themed toolbar surfaces lost inspector coverage when the computed-style probe was replaced by the utility/class map. Details inline.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/settings/themeInspector.ts
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from 16bdc8b to 3a1e7d1CompareAugust 16, 2026 10:04
@t3dotgg

Copy link
Copy Markdown
Member

Note

🤖 GPT-5.6 Sol responding on behalf of Theo

We're closing this PR as we clean up the T3 Code backlog. Thank you for taking the time to put this together.

This refactors the theme contract across 20 files without fixing a current user-facing or reliability problem. The broad migration cost is not justified.

If you believe we closed this in error, please reopen the PR and leave a comment explaining what we missed.

@t3dotggt3dotgg closed this Aug 28, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL1,000+ changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@StiensWout@t3dotgg
, '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

refactor(theme): reduce theme schema to 20 colors - #7169

Closed
StiensWout wants to merge 1 commit into
pingdotgg:mainfrom
StiensWout:t3code/reduce-theme-css-tokens
Closed

refactor(theme): reduce theme schema to 20 colors#7169
StiensWout wants to merge 1 commit into
pingdotgg:mainfrom
StiensWout:t3code/reduce-theme-css-tokens

Conversation

@StiensWout

@StiensWoutStiensWout commented Aug 16, 2026

Copy link
Copy Markdown
Contributor

Follow-up to #7107.

The Advanced theme creator exposes 20 controls, but the stored schema and runtime still maintained 57 source colors.

This reduces the shared schema, every built-in palette, imports, exports, and web runtime inputs to the same 20 colors. Web and mobile semantic colors are derived from those sources, known legacy v1 roles remain import-compatible, and the current editor layout is unchanged.

The theme inspector now finds semantic utility usage without changing live theme colors. Its accent highlight is attached to matched elements, so it stays aligned while scrolling and clears immediately on Cancel.

Verification

  • 81 focused web theme service tests
  • 20 focused mobile theme service tests
  • Web, mobile, and shared typechecks
  • Targeted lint and formatting
  • Production web build
  • Browser-verified token selection, scrolling, and Cancel cleanup
  • Light and dark captures for every built-in theme at 1440×900, with pairwise SSIM of at least 0.9996

Before and after

Each sheet shows Before Light, After Light, Before Dark, and After Dark.

T3 Chat

T3 Chat before and after

Grove

Grove before and after

Ocean

Ocean before and after

Ember

Ember before and after

Iris

Iris before and after

Generated by GPT-5.6 through the Codex harness in T3 Code.

Note

Reduce theme schema from ~57 roles to 20 source roles with derived semantic colors

  • Replaces the large --app-theme-* CSS variable set with 20 --theme-* source roles; derived semantic variables (foregrounds, surfaces, status colors) are computed at runtime by the new deriveThemeSemanticColors function in themePalette.ts.
  • Built-in theme definitions in themePalettes.ts drop dozens of previously stored roles (toolbar, sidebar, terminal, muted, placeholder, focus, etc.); textMuted is renamed to mutedForeground.
  • The theme inspector in themeInspector.ts is rewritten to detect roles from Tailwind utility classes and data attributes instead of computed-style probing; spotlight overlay rendering is removed.
  • Mobile theme variables in mobileTheme.ts switch sheets from chrome to canvas and compute foregrounds for readability against their surfaces.
  • Boot-time splash color in index.html now uses canvas instead of chrome for document background and meta theme-color.
  • Risk: any code or saved theme files referencing removed roles (e.g. sidebarForeground, terminalCursor, accentForeground) will silently receive no value; legacy keys in override files are now skipped rather than applied.

Macroscope summarized 3a1e7d1.


Note

Medium Risk
Wide theme contract change across web, mobile, boot, and imports; visual parity relies on derivation and extensive tests rather than per-role storage.

Overview
Aligns stored themes with the Advanced editor by shrinking the shared palette from ~57 roles to 20 source colors (canvas, text, accent, surfaces, sidebar, terminal, status hues, etc.). Built-in palettes, VS Code import, and exports use only those roles; legacy v1 keys (e.g. chrome, terminalCursor) are still accepted on import but dropped from serialized files.

Runtime semantics are derived, not stored. Web adds deriveThemeSemanticColors and paints --theme-* source variables plus computed pairs (--primary-foreground, error/warning surfaces, terminal text, etc.) via a new CSS bridge. Mobile maps the same roles into native variables with contrast-aware foreground helpers. Terminal theming uses text / accent instead of removed terminal-specific foreground/cursor roles.

Editor and boot paths follow the slimmer model: advanced color families map one role each; boot splash drops chrome and keys document/meta color off canvas. The theme inspector no longer probes live CSS with sentinel colors or a spotlight overlay—it highlights matches from Tailwind utilities, responsive variants, and data-theme-terminal-surface / data-theme-code-surface markers.

Reviewed by Cursor Bugbot for commit 3a1e7d1. Bugbot is set up for automated code reviews on this repo. Configure here.

@coderabbitai

coderabbitaiBot commented Aug 16, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: a198d06c-b841-4298-8443-c2314540406a

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL 1,000+ changed lines (additions + deletions). labels Aug 16, 2026
Comment threadapps/web/src/components/settings/themeInspector.ts
Comment threadapps/web/src/themePalette.ts
Comment threadapps/web/src/themePalette.ts Outdated
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from dbc72da to d0a5254CompareAugust 16, 2026 08:14
Comment threadapps/web/src/index.css Outdated
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from d0a5254 to cff9be4CompareAugust 16, 2026 08:17

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed the theme token reduction for consistency with the runtime token bridge and themed contrast behavior. Four concrete findings, all in the new CSS derivation layer and its consumers:

  • index.css derives every surface foreground from --theme-text, dropping the per-surface contrast solving that the removed palette roles provided (the repo's own inverted-surface VS Code import fixture now produces ~1.0:1 sidebar/terminal text).
  • Solid action/destructive foregrounds are only contrast-solved inside @supports (color: contrast-color(red)); the fallback path lands well below AA on the shipped built-in palettes.
  • themeInspector.ts maps several *-foreground utilities to surface roles that no longer drive them, so the inspector's fast path resolves the wrong editable swatch.
  • ThemeImportDialog.tsx swapped runtime --theme-* inputs for always-defined semantic tokens, which kills the intended JSON highlight fallbacks.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/components/settings/ThemeImportDialog.tsx Outdated
Comment threadapps/web/src/components/settings/themeInspector.ts Outdated
Comment threadapps/web/src/index.css Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed the theme-token reduction for UI consistency and runtime-token behavior. Two concrete regressions in changed lines (readable foreground on the themed --primary fill, and the JSON highlight tokens in the import dialog), plus one coverage note on the inspector mapping.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/settings/themeInspector.ts Outdated
Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/components/settings/ThemeImportDialog.tsx Outdated
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from cff9be4 to 2ef8e33CompareAugust 16, 2026 08:21

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed the theme-token reduction for UI/theming consistency. The 20-role schema and the runtime --theme-* bridge look coherent, and the editor/label/family plumbing matches the new role list. Six concrete regressions in the derived semantic layer are flagged inline: solid-control and status foregrounds are no longer contrast-solved (measured below AA on shipped built-ins), --destructive-foreground loses its red signal, the T3 Chat branded sidebar edge and light-mode toolbar hover direction change, the theme inspector now selects surface roles for text tokens, and the JSON preview highlighter lost its fallbacks.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/index.css
Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/components/settings/themeInspector.ts Outdated
Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/components/settings/ThemeImportDialog.tsx Outdated
Comment threadapps/web/src/index.css Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed the changes made since the previous run (the new @supports custom-theme foreground block, the data-theme-custom marker, and the inspector's custom-theme role table). Two findings on the new code; earlier threads are left as-is.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/settings/themeInspector.ts Outdated
Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/themePalette.ts
@macroscopeapp

macroscopeappBot commented Aug 16, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

Major refactor reducing theme schema from 57 to 20 colors with new runtime derivation logic for semantic colors. Changes fundamental theming architecture including CSS variable mapping, theme inspector, and built-in theme definitions.

You can customize Macroscope's approvability policy. Learn more.

@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from 2ef8e33 to 03c053eCompareAugust 16, 2026 08:50
@StiensWoutStiensWout changed the title refactor(web): reduce theme schema to 20 colorsrefactor(theme): reduce theme schema to 20 colorsAug 16, 2026
Comment threadapps/web/src/components/settings/themeInspector.ts Outdated
Comment threadapps/web/src/components/settings/themeInspector.ts
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from 03c053e to 9fb475eCompareAugust 16, 2026 09:11
Comment threadapps/web/src/themePalette.ts
Comment threadapps/web/src/components/settings/themeInspector.ts
Comment threadapps/web/src/themePalette.ts Outdated
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from 9fb475e to b0d0e3dCompareAugust 16, 2026 09:16

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Three findings on the token-reduction bridge: one contrast hole for the muted-text family on independently editable surfaces, one theme-inspector hit-test regression, and one dead dataset attribute.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/components/settings/themeInspector.ts
Comment threadapps/web/src/themePalette.ts
Comment threadapps/web/src/themePalette.ts Outdated
Comment threadapps/web/src/components/settings/themeInspector.ts
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from b0d0e3d to 2efc6edCompareAugust 16, 2026 09:19
Comment threadapps/web/src/themePalette.ts Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed the web-side theme token reduction (apps/web/src/** CSS/TS). The runtime contrast service now fills the foreground/status pairs, which resolves the earlier readability findings on --primary-foreground, --destructive-foreground, and the status families, and the T3 Chat sidebar edge is preserved. Three remaining issues, all in the inspector/runtime plumbing.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/settings/themeInspector.ts Outdated
Comment threadapps/web/src/components/settings/themeInspector.ts
Comment threadapps/web/src/themePalette.ts
Comment threadapps/mobile/src/lib/mobileTheme.ts Outdated
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from 2efc6ed to eecd9a5CompareAugust 16, 2026 09:25

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One new finding on the themed token bridge: the derived hover fill for the primary action can now drop the label below AA. Earlier findings from previous runs on this PR (--placeholder/--sidebar-muted-foreground solved only against canvas, the inspector's variant handling in the hit test, and the unread data-theme-custom attribute) still apply and are not repeated here.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/index.css

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

There are 2 total unresolved issues (including 1 from previous review).

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit eecd9a5. Configure here.

Comment threadapps/web/src/components/settings/themeInspector.ts Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One finding on the new variant-activity check in themeInspector.ts. The rest of this round looks good: the semantic foregrounds are now contrast-solved in deriveThemeSemanticColors (including placeholder and sidebarMutedForeground against their own surfaces), the JSON highlighter is back on runtime-only --theme-* inputs so its fallbacks stay reachable, and the toolbar hover is derived from the resting control fill.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/settings/themeInspector.ts
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch 2 times, most recently from 0fd78d0 to 78f6b35CompareAugust 16, 2026 09:41

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One finding: the muted-surface contrast guarantee is lost by the mutedsecondary remap.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/themePalette.ts

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Two findings on the theme token reduction: one contrast guarantee that the new derivation no longer covers (and whose test was removed), and one token that now has two divergent owners.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/themePalette.ts Outdated
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from 78f6b35 to 16bdc8bCompareAugust 16, 2026 09:54

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One finding: the themed toolbar surfaces lost inspector coverage when the computed-style probe was replaced by the utility/class map. Details inline.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/settings/themeInspector.ts
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from 16bdc8b to 3a1e7d1CompareAugust 16, 2026 10:04
@t3dotgg

Copy link
Copy Markdown
Member

Note

🤖 GPT-5.6 Sol responding on behalf of Theo

We're closing this PR as we clean up the T3 Code backlog. Thank you for taking the time to put this together.

This refactors the theme contract across 20 files without fixing a current user-facing or reliability problem. The broad migration cost is not justified.

If you believe we closed this in error, please reopen the PR and leave a comment explaining what we missed.

@t3dotggt3dotgg closed this Aug 28, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL1,000+ changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@StiensWout@t3dotgg
, '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

refactor(theme): reduce theme schema to 20 colors - #7169

Closed
StiensWout wants to merge 1 commit into
pingdotgg:mainfrom
StiensWout:t3code/reduce-theme-css-tokens
Closed

refactor(theme): reduce theme schema to 20 colors#7169
StiensWout wants to merge 1 commit into
pingdotgg:mainfrom
StiensWout:t3code/reduce-theme-css-tokens

Conversation

@StiensWout

@StiensWoutStiensWout commented Aug 16, 2026

Copy link
Copy Markdown
Contributor

Follow-up to #7107.

The Advanced theme creator exposes 20 controls, but the stored schema and runtime still maintained 57 source colors.

This reduces the shared schema, every built-in palette, imports, exports, and web runtime inputs to the same 20 colors. Web and mobile semantic colors are derived from those sources, known legacy v1 roles remain import-compatible, and the current editor layout is unchanged.

The theme inspector now finds semantic utility usage without changing live theme colors. Its accent highlight is attached to matched elements, so it stays aligned while scrolling and clears immediately on Cancel.

Verification

  • 81 focused web theme service tests
  • 20 focused mobile theme service tests
  • Web, mobile, and shared typechecks
  • Targeted lint and formatting
  • Production web build
  • Browser-verified token selection, scrolling, and Cancel cleanup
  • Light and dark captures for every built-in theme at 1440×900, with pairwise SSIM of at least 0.9996

Before and after

Each sheet shows Before Light, After Light, Before Dark, and After Dark.

T3 Chat

T3 Chat before and after

Grove

Grove before and after

Ocean

Ocean before and after

Ember

Ember before and after

Iris

Iris before and after

Generated by GPT-5.6 through the Codex harness in T3 Code.

Note

Reduce theme schema from ~57 roles to 20 source roles with derived semantic colors

  • Replaces the large --app-theme-* CSS variable set with 20 --theme-* source roles; derived semantic variables (foregrounds, surfaces, status colors) are computed at runtime by the new deriveThemeSemanticColors function in themePalette.ts.
  • Built-in theme definitions in themePalettes.ts drop dozens of previously stored roles (toolbar, sidebar, terminal, muted, placeholder, focus, etc.); textMuted is renamed to mutedForeground.
  • The theme inspector in themeInspector.ts is rewritten to detect roles from Tailwind utility classes and data attributes instead of computed-style probing; spotlight overlay rendering is removed.
  • Mobile theme variables in mobileTheme.ts switch sheets from chrome to canvas and compute foregrounds for readability against their surfaces.
  • Boot-time splash color in index.html now uses canvas instead of chrome for document background and meta theme-color.
  • Risk: any code or saved theme files referencing removed roles (e.g. sidebarForeground, terminalCursor, accentForeground) will silently receive no value; legacy keys in override files are now skipped rather than applied.

Macroscope summarized 3a1e7d1.


Note

Medium Risk
Wide theme contract change across web, mobile, boot, and imports; visual parity relies on derivation and extensive tests rather than per-role storage.

Overview
Aligns stored themes with the Advanced editor by shrinking the shared palette from ~57 roles to 20 source colors (canvas, text, accent, surfaces, sidebar, terminal, status hues, etc.). Built-in palettes, VS Code import, and exports use only those roles; legacy v1 keys (e.g. chrome, terminalCursor) are still accepted on import but dropped from serialized files.

Runtime semantics are derived, not stored. Web adds deriveThemeSemanticColors and paints --theme-* source variables plus computed pairs (--primary-foreground, error/warning surfaces, terminal text, etc.) via a new CSS bridge. Mobile maps the same roles into native variables with contrast-aware foreground helpers. Terminal theming uses text / accent instead of removed terminal-specific foreground/cursor roles.

Editor and boot paths follow the slimmer model: advanced color families map one role each; boot splash drops chrome and keys document/meta color off canvas. The theme inspector no longer probes live CSS with sentinel colors or a spotlight overlay—it highlights matches from Tailwind utilities, responsive variants, and data-theme-terminal-surface / data-theme-code-surface markers.

Reviewed by Cursor Bugbot for commit 3a1e7d1. Bugbot is set up for automated code reviews on this repo. Configure here.

@coderabbitai

coderabbitaiBot commented Aug 16, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: a198d06c-b841-4298-8443-c2314540406a

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL 1,000+ changed lines (additions + deletions). labels Aug 16, 2026
Comment threadapps/web/src/components/settings/themeInspector.ts
Comment threadapps/web/src/themePalette.ts
Comment threadapps/web/src/themePalette.ts Outdated
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from dbc72da to d0a5254CompareAugust 16, 2026 08:14
Comment threadapps/web/src/index.css Outdated
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from d0a5254 to cff9be4CompareAugust 16, 2026 08:17

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed the theme token reduction for consistency with the runtime token bridge and themed contrast behavior. Four concrete findings, all in the new CSS derivation layer and its consumers:

  • index.css derives every surface foreground from --theme-text, dropping the per-surface contrast solving that the removed palette roles provided (the repo's own inverted-surface VS Code import fixture now produces ~1.0:1 sidebar/terminal text).
  • Solid action/destructive foregrounds are only contrast-solved inside @supports (color: contrast-color(red)); the fallback path lands well below AA on the shipped built-in palettes.
  • themeInspector.ts maps several *-foreground utilities to surface roles that no longer drive them, so the inspector's fast path resolves the wrong editable swatch.
  • ThemeImportDialog.tsx swapped runtime --theme-* inputs for always-defined semantic tokens, which kills the intended JSON highlight fallbacks.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/components/settings/ThemeImportDialog.tsx Outdated
Comment threadapps/web/src/components/settings/themeInspector.ts Outdated
Comment threadapps/web/src/index.css Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed the theme-token reduction for UI consistency and runtime-token behavior. Two concrete regressions in changed lines (readable foreground on the themed --primary fill, and the JSON highlight tokens in the import dialog), plus one coverage note on the inspector mapping.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/settings/themeInspector.ts Outdated
Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/components/settings/ThemeImportDialog.tsx Outdated
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from cff9be4 to 2ef8e33CompareAugust 16, 2026 08:21

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed the theme-token reduction for UI/theming consistency. The 20-role schema and the runtime --theme-* bridge look coherent, and the editor/label/family plumbing matches the new role list. Six concrete regressions in the derived semantic layer are flagged inline: solid-control and status foregrounds are no longer contrast-solved (measured below AA on shipped built-ins), --destructive-foreground loses its red signal, the T3 Chat branded sidebar edge and light-mode toolbar hover direction change, the theme inspector now selects surface roles for text tokens, and the JSON preview highlighter lost its fallbacks.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/index.css
Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/components/settings/themeInspector.ts Outdated
Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/components/settings/ThemeImportDialog.tsx Outdated
Comment threadapps/web/src/index.css Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed the changes made since the previous run (the new @supports custom-theme foreground block, the data-theme-custom marker, and the inspector's custom-theme role table). Two findings on the new code; earlier threads are left as-is.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/settings/themeInspector.ts Outdated
Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/themePalette.ts
@macroscopeapp

macroscopeappBot commented Aug 16, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

Major refactor reducing theme schema from 57 to 20 colors with new runtime derivation logic for semantic colors. Changes fundamental theming architecture including CSS variable mapping, theme inspector, and built-in theme definitions.

You can customize Macroscope's approvability policy. Learn more.

@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from 2ef8e33 to 03c053eCompareAugust 16, 2026 08:50
@StiensWoutStiensWout changed the title refactor(web): reduce theme schema to 20 colorsrefactor(theme): reduce theme schema to 20 colorsAug 16, 2026
Comment threadapps/web/src/components/settings/themeInspector.ts Outdated
Comment threadapps/web/src/components/settings/themeInspector.ts
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from 03c053e to 9fb475eCompareAugust 16, 2026 09:11
Comment threadapps/web/src/themePalette.ts
Comment threadapps/web/src/components/settings/themeInspector.ts
Comment threadapps/web/src/themePalette.ts Outdated
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from 9fb475e to b0d0e3dCompareAugust 16, 2026 09:16

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Three findings on the token-reduction bridge: one contrast hole for the muted-text family on independently editable surfaces, one theme-inspector hit-test regression, and one dead dataset attribute.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/components/settings/themeInspector.ts
Comment threadapps/web/src/themePalette.ts
Comment threadapps/web/src/themePalette.ts Outdated
Comment threadapps/web/src/components/settings/themeInspector.ts
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from b0d0e3d to 2efc6edCompareAugust 16, 2026 09:19
Comment threadapps/web/src/themePalette.ts Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed the web-side theme token reduction (apps/web/src/** CSS/TS). The runtime contrast service now fills the foreground/status pairs, which resolves the earlier readability findings on --primary-foreground, --destructive-foreground, and the status families, and the T3 Chat sidebar edge is preserved. Three remaining issues, all in the inspector/runtime plumbing.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/settings/themeInspector.ts Outdated
Comment threadapps/web/src/components/settings/themeInspector.ts
Comment threadapps/web/src/themePalette.ts
Comment threadapps/mobile/src/lib/mobileTheme.ts Outdated
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from 2efc6ed to eecd9a5CompareAugust 16, 2026 09:25

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One new finding on the themed token bridge: the derived hover fill for the primary action can now drop the label below AA. Earlier findings from previous runs on this PR (--placeholder/--sidebar-muted-foreground solved only against canvas, the inspector's variant handling in the hit test, and the unread data-theme-custom attribute) still apply and are not repeated here.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/index.css

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

There are 2 total unresolved issues (including 1 from previous review).

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit eecd9a5. Configure here.

Comment threadapps/web/src/components/settings/themeInspector.ts Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One finding on the new variant-activity check in themeInspector.ts. The rest of this round looks good: the semantic foregrounds are now contrast-solved in deriveThemeSemanticColors (including placeholder and sidebarMutedForeground against their own surfaces), the JSON highlighter is back on runtime-only --theme-* inputs so its fallbacks stay reachable, and the toolbar hover is derived from the resting control fill.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/settings/themeInspector.ts
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch 2 times, most recently from 0fd78d0 to 78f6b35CompareAugust 16, 2026 09:41

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One finding: the muted-surface contrast guarantee is lost by the mutedsecondary remap.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/themePalette.ts

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Two findings on the theme token reduction: one contrast guarantee that the new derivation no longer covers (and whose test was removed), and one token that now has two divergent owners.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/themePalette.ts Outdated
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from 78f6b35 to 16bdc8bCompareAugust 16, 2026 09:54

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One finding: the themed toolbar surfaces lost inspector coverage when the computed-style probe was replaced by the utility/class map. Details inline.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/settings/themeInspector.ts
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from 16bdc8b to 3a1e7d1CompareAugust 16, 2026 10:04
@t3dotgg

Copy link
Copy Markdown
Member

Note

🤖 GPT-5.6 Sol responding on behalf of Theo

We're closing this PR as we clean up the T3 Code backlog. Thank you for taking the time to put this together.

This refactors the theme contract across 20 files without fixing a current user-facing or reliability problem. The broad migration cost is not justified.

If you believe we closed this in error, please reopen the PR and leave a comment explaining what we missed.

@t3dotggt3dotgg closed this Aug 28, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL1,000+ changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@StiensWout@t3dotgg
, '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

refactor(theme): reduce theme schema to 20 colors - #7169

Closed
StiensWout wants to merge 1 commit into
pingdotgg:mainfrom
StiensWout:t3code/reduce-theme-css-tokens
Closed

refactor(theme): reduce theme schema to 20 colors#7169
StiensWout wants to merge 1 commit into
pingdotgg:mainfrom
StiensWout:t3code/reduce-theme-css-tokens

Conversation

@StiensWout

@StiensWoutStiensWout commented Aug 16, 2026

Copy link
Copy Markdown
Contributor

Follow-up to #7107.

The Advanced theme creator exposes 20 controls, but the stored schema and runtime still maintained 57 source colors.

This reduces the shared schema, every built-in palette, imports, exports, and web runtime inputs to the same 20 colors. Web and mobile semantic colors are derived from those sources, known legacy v1 roles remain import-compatible, and the current editor layout is unchanged.

The theme inspector now finds semantic utility usage without changing live theme colors. Its accent highlight is attached to matched elements, so it stays aligned while scrolling and clears immediately on Cancel.

Verification

  • 81 focused web theme service tests
  • 20 focused mobile theme service tests
  • Web, mobile, and shared typechecks
  • Targeted lint and formatting
  • Production web build
  • Browser-verified token selection, scrolling, and Cancel cleanup
  • Light and dark captures for every built-in theme at 1440×900, with pairwise SSIM of at least 0.9996

Before and after

Each sheet shows Before Light, After Light, Before Dark, and After Dark.

T3 Chat

T3 Chat before and after

Grove

Grove before and after

Ocean

Ocean before and after

Ember

Ember before and after

Iris

Iris before and after

Generated by GPT-5.6 through the Codex harness in T3 Code.

Note

Reduce theme schema from ~57 roles to 20 source roles with derived semantic colors

  • Replaces the large --app-theme-* CSS variable set with 20 --theme-* source roles; derived semantic variables (foregrounds, surfaces, status colors) are computed at runtime by the new deriveThemeSemanticColors function in themePalette.ts.
  • Built-in theme definitions in themePalettes.ts drop dozens of previously stored roles (toolbar, sidebar, terminal, muted, placeholder, focus, etc.); textMuted is renamed to mutedForeground.
  • The theme inspector in themeInspector.ts is rewritten to detect roles from Tailwind utility classes and data attributes instead of computed-style probing; spotlight overlay rendering is removed.
  • Mobile theme variables in mobileTheme.ts switch sheets from chrome to canvas and compute foregrounds for readability against their surfaces.
  • Boot-time splash color in index.html now uses canvas instead of chrome for document background and meta theme-color.
  • Risk: any code or saved theme files referencing removed roles (e.g. sidebarForeground, terminalCursor, accentForeground) will silently receive no value; legacy keys in override files are now skipped rather than applied.

Macroscope summarized 3a1e7d1.


Note

Medium Risk
Wide theme contract change across web, mobile, boot, and imports; visual parity relies on derivation and extensive tests rather than per-role storage.

Overview
Aligns stored themes with the Advanced editor by shrinking the shared palette from ~57 roles to 20 source colors (canvas, text, accent, surfaces, sidebar, terminal, status hues, etc.). Built-in palettes, VS Code import, and exports use only those roles; legacy v1 keys (e.g. chrome, terminalCursor) are still accepted on import but dropped from serialized files.

Runtime semantics are derived, not stored. Web adds deriveThemeSemanticColors and paints --theme-* source variables plus computed pairs (--primary-foreground, error/warning surfaces, terminal text, etc.) via a new CSS bridge. Mobile maps the same roles into native variables with contrast-aware foreground helpers. Terminal theming uses text / accent instead of removed terminal-specific foreground/cursor roles.

Editor and boot paths follow the slimmer model: advanced color families map one role each; boot splash drops chrome and keys document/meta color off canvas. The theme inspector no longer probes live CSS with sentinel colors or a spotlight overlay—it highlights matches from Tailwind utilities, responsive variants, and data-theme-terminal-surface / data-theme-code-surface markers.

Reviewed by Cursor Bugbot for commit 3a1e7d1. Bugbot is set up for automated code reviews on this repo. Configure here.

@coderabbitai

coderabbitaiBot commented Aug 16, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: a198d06c-b841-4298-8443-c2314540406a

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL 1,000+ changed lines (additions + deletions). labels Aug 16, 2026
Comment threadapps/web/src/components/settings/themeInspector.ts
Comment threadapps/web/src/themePalette.ts
Comment threadapps/web/src/themePalette.ts Outdated
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from dbc72da to d0a5254CompareAugust 16, 2026 08:14
Comment threadapps/web/src/index.css Outdated
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from d0a5254 to cff9be4CompareAugust 16, 2026 08:17

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed the theme token reduction for consistency with the runtime token bridge and themed contrast behavior. Four concrete findings, all in the new CSS derivation layer and its consumers:

  • index.css derives every surface foreground from --theme-text, dropping the per-surface contrast solving that the removed palette roles provided (the repo's own inverted-surface VS Code import fixture now produces ~1.0:1 sidebar/terminal text).
  • Solid action/destructive foregrounds are only contrast-solved inside @supports (color: contrast-color(red)); the fallback path lands well below AA on the shipped built-in palettes.
  • themeInspector.ts maps several *-foreground utilities to surface roles that no longer drive them, so the inspector's fast path resolves the wrong editable swatch.
  • ThemeImportDialog.tsx swapped runtime --theme-* inputs for always-defined semantic tokens, which kills the intended JSON highlight fallbacks.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/components/settings/ThemeImportDialog.tsx Outdated
Comment threadapps/web/src/components/settings/themeInspector.ts Outdated
Comment threadapps/web/src/index.css Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed the theme-token reduction for UI consistency and runtime-token behavior. Two concrete regressions in changed lines (readable foreground on the themed --primary fill, and the JSON highlight tokens in the import dialog), plus one coverage note on the inspector mapping.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/settings/themeInspector.ts Outdated
Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/components/settings/ThemeImportDialog.tsx Outdated
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from cff9be4 to 2ef8e33CompareAugust 16, 2026 08:21

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed the theme-token reduction for UI/theming consistency. The 20-role schema and the runtime --theme-* bridge look coherent, and the editor/label/family plumbing matches the new role list. Six concrete regressions in the derived semantic layer are flagged inline: solid-control and status foregrounds are no longer contrast-solved (measured below AA on shipped built-ins), --destructive-foreground loses its red signal, the T3 Chat branded sidebar edge and light-mode toolbar hover direction change, the theme inspector now selects surface roles for text tokens, and the JSON preview highlighter lost its fallbacks.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/index.css
Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/components/settings/themeInspector.ts Outdated
Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/components/settings/ThemeImportDialog.tsx Outdated
Comment threadapps/web/src/index.css Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed the changes made since the previous run (the new @supports custom-theme foreground block, the data-theme-custom marker, and the inspector's custom-theme role table). Two findings on the new code; earlier threads are left as-is.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/settings/themeInspector.ts Outdated
Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/themePalette.ts
@macroscopeapp

macroscopeappBot commented Aug 16, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

Major refactor reducing theme schema from 57 to 20 colors with new runtime derivation logic for semantic colors. Changes fundamental theming architecture including CSS variable mapping, theme inspector, and built-in theme definitions.

You can customize Macroscope's approvability policy. Learn more.

@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from 2ef8e33 to 03c053eCompareAugust 16, 2026 08:50
@StiensWoutStiensWout changed the title refactor(web): reduce theme schema to 20 colorsrefactor(theme): reduce theme schema to 20 colorsAug 16, 2026
Comment threadapps/web/src/components/settings/themeInspector.ts Outdated
Comment threadapps/web/src/components/settings/themeInspector.ts
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from 03c053e to 9fb475eCompareAugust 16, 2026 09:11
Comment threadapps/web/src/themePalette.ts
Comment threadapps/web/src/components/settings/themeInspector.ts
Comment threadapps/web/src/themePalette.ts Outdated
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from 9fb475e to b0d0e3dCompareAugust 16, 2026 09:16

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Three findings on the token-reduction bridge: one contrast hole for the muted-text family on independently editable surfaces, one theme-inspector hit-test regression, and one dead dataset attribute.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/components/settings/themeInspector.ts
Comment threadapps/web/src/themePalette.ts
Comment threadapps/web/src/themePalette.ts Outdated
Comment threadapps/web/src/components/settings/themeInspector.ts
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from b0d0e3d to 2efc6edCompareAugust 16, 2026 09:19
Comment threadapps/web/src/themePalette.ts Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed the web-side theme token reduction (apps/web/src/** CSS/TS). The runtime contrast service now fills the foreground/status pairs, which resolves the earlier readability findings on --primary-foreground, --destructive-foreground, and the status families, and the T3 Chat sidebar edge is preserved. Three remaining issues, all in the inspector/runtime plumbing.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/settings/themeInspector.ts Outdated
Comment threadapps/web/src/components/settings/themeInspector.ts
Comment threadapps/web/src/themePalette.ts
Comment threadapps/mobile/src/lib/mobileTheme.ts Outdated
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from 2efc6ed to eecd9a5CompareAugust 16, 2026 09:25

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One new finding on the themed token bridge: the derived hover fill for the primary action can now drop the label below AA. Earlier findings from previous runs on this PR (--placeholder/--sidebar-muted-foreground solved only against canvas, the inspector's variant handling in the hit test, and the unread data-theme-custom attribute) still apply and are not repeated here.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/index.css

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

There are 2 total unresolved issues (including 1 from previous review).

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit eecd9a5. Configure here.

Comment threadapps/web/src/components/settings/themeInspector.ts Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One finding on the new variant-activity check in themeInspector.ts. The rest of this round looks good: the semantic foregrounds are now contrast-solved in deriveThemeSemanticColors (including placeholder and sidebarMutedForeground against their own surfaces), the JSON highlighter is back on runtime-only --theme-* inputs so its fallbacks stay reachable, and the toolbar hover is derived from the resting control fill.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/settings/themeInspector.ts
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch 2 times, most recently from 0fd78d0 to 78f6b35CompareAugust 16, 2026 09:41

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One finding: the muted-surface contrast guarantee is lost by the mutedsecondary remap.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/themePalette.ts

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Two findings on the theme token reduction: one contrast guarantee that the new derivation no longer covers (and whose test was removed), and one token that now has two divergent owners.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/themePalette.ts Outdated
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from 78f6b35 to 16bdc8bCompareAugust 16, 2026 09:54

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One finding: the themed toolbar surfaces lost inspector coverage when the computed-style probe was replaced by the utility/class map. Details inline.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/settings/themeInspector.ts
@StiensWout
StiensWoutforce-pushed the t3code/reduce-theme-css-tokens branch from 16bdc8b to 3a1e7d1CompareAugust 16, 2026 10:04
@t3dotgg

Copy link
Copy Markdown
Member

Note

🤖 GPT-5.6 Sol responding on behalf of Theo

We're closing this PR as we clean up the T3 Code backlog. Thank you for taking the time to put this together.

This refactors the theme contract across 20 files without fixing a current user-facing or reliability problem. The broad migration cost is not justified.

If you believe we closed this in error, please reopen the PR and leave a comment explaining what we missed.

@t3dotggt3dotgg closed this Aug 28, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL1,000+ changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@StiensWout@t3dotgg