(feat)rebrand: NTP - Favorites tile styles - #2887
Conversation
Co-authored-by: Cursor <cursoragent@cursor.com>
There was a problem hiding this comment.
Stale comment
Injected PR Evaluation: Web Compatibility & Security
PR: #2887 — NTP Favorites tile rebrand styles
Scope: 1 file, +23 lines —special-pages/pages/new-tab/app/favorites/components/Tile.module.cssonly. Noinjected/,messaging/, or runtime API changes.
Web Compatibility Assessment
File Lines Severity Finding Tile.module.css150–171 info CSS-only visual refresh for first-party NTP favorites tiles. Does not run in third-party page injection context; standard injected web-compat criteria (API fidelity, prototype chain, DOM timing) do not apply. Tile.module.css151 info Rebrand styles are correctly gated behind :global(body[data-rebrand="true"]), matching the established NTP rebrand pattern (newTabPageRebranding→document.body.dataset.rebrandinapp/index.js). Default-off flag limits rollout risk.Tile.module.css156–169 info Rebrand .draggableoverridesdisplay,padding,border-radius, andbox-shadowbut does not unset basebackdrop-filter: blur(48px). If the design intent is a flat card (per new shadow tokens), consider addingbackdrop-filter: nonein the rebrand block to avoid unintended blur stacking.Tile.module.css— info Favorites screenshot tests ( new-tab.screenshots.spec.js) run with rebrand disabled by default. No regression signal for rebrand-on visuals; consider a rebrand-enabled screenshot case if native enables the flag broadly.No warnings or errors.
Security Assessment
File Lines Severity Finding — — info No changes to captured-globals.js, messaging transports, message bridge, or API overrides.— — info No user-controlled values in CSS — only static design tokens ( --ds-space-x02-5,--ds-color-theme-shadow-*, etc.). No CSS injection or data-exfiltration vectors.— — info Feature remains remotely disableable via native newTabPageRebrandingsetting; no new un-gated behavior.— — info No new notify()/request()schemas,nativeDataforwarding, orpostMessageusage.No warnings, errors, or critical findings.
Risk Level
Low Risk — Special-pages CSS-only change behind an existing remote-config rebrand flag; zero injected-runtime, messaging, or security-sensitive surface area.
Recommendations
- (info) Verify rebrand-on favorites tiles visually on macOS/Windows with
newTabPageRebrandingenabled — confirm whetherbackdrop-filtershould be removed in the rebrand block.- (info) Optional: add a rebrand-enabled favorites screenshot integration test to catch future CSS regressions when the flag ships broadly.
Sent by Cursor Automation: Web compat and sec
[Beta] Generated file diffTime updated: Mon, 27 Jul 2026 17:48:23 GMT Apple
File has changed Integration
File has changed Windows
File has changed |
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 9e07863. Configure here.
|
This PR requires a manual review and approval from a member of one of the following teams:
|
Co-authored-by: Cursor <cursoragent@cursor.com>
Build Branch
Static preview entry points
QR codes (mobile preview)
Integration commandsnpm (Android / Extension): Swift Package Manager (Apple): .package(url: "https://github.com/duckduckgo/content-scope-scripts.git", branch: "pr-releases/matteo/rebrand/ntp-favorite")git submodule (Windows): git -C submodules/content-scope-scripts fetch origin pr-releases/matteo/rebrand/ntp-favorite
git -C submodules/content-scope-scripts checkout origin/pr-releases/matteo/rebrand/ntp-favoritePin to exact commitnpm (Android / Extension): Swift Package Manager (Apple): .package(url: "https://github.com/duckduckgo/content-scope-scripts.git", revision: "5a3a7363f1d4a0c329aefe1061558260e59f474c")git submodule (Windows): git -C submodules/content-scope-scripts fetch origin pr-releases/matteo/rebrand/ntp-favorite
git -C submodules/content-scope-scripts checkout 5a3a7363f1d4a0c329aefe1061558260e59f474c |
Co-authored-by: Cursor <cursoragent@cursor.com>
There was a problem hiding this comment.
Stale comment
Injected PR Evaluation: Web Compatibility & Security
PR: #2887 — NTP Favorites tile rebrand styles
Scope: 3 files, +27/−5 lines —Tile.module.cssrebrand block +@duckduckgo/design-tokensv0.30.0 → v0.32.0 (devDependency). Noinjected/,messaging/, or runtime API changes.Delta since prior review: commit
64529d367bumps design-tokens to v0.32.0 so the new--ds-space-x02-5,--ds-space-x04, and--ds-radius-x04tokens resolve at build time.
Web Compatibility Assessment
File Lines Severity Finding Tile.module.css150–171 info CSS-only visual refresh for first-party NTP favorites tiles. Does not run in third-party page injection context; standard injected web-compat criteria (API fidelity, prototype chain, DOM timing) do not apply. Tile.module.css151 info Rebrand styles are correctly gated behind :global(body[data-rebrand="true"]), matching the established NTP rebrand pattern (newTabPageRebranding→document.body.dataset.rebrandinapp/index.js). Default-off flag limits rollout risk.Tile.module.css156–169 info Rebrand .draggableoverridesdisplay,padding,border-radius, andbox-shadowbut does not unset basebackdrop-filter: blur(48px). If the design intent is a flat card (per new shadow tokens), consider addingbackdrop-filter: nonein the rebrand block to avoid unintended blur stacking.package.json/package-lock.json— info @duckduckgo/design-tokensbumped v0.30.0 → v0.32.0 (devDependency). Build-time token import only viashared/styles/design-tokens.css; not bundled into content-scope injection runtime.Tile.module.css— info Favorites integration/screenshot tests run with rebrand disabled by default. No regression signal for rebrand-on visuals. No warnings or errors.
Security Assessment
File Lines Severity Finding — — info No changes to captured-globals.js, messaging transports, message bridge, or API overrides.— — info No user-controlled values in CSS — only static design tokens ( --ds-space-x02-5,--ds-color-theme-shadow-*, etc.). No CSS injection or data-exfiltration vectors.— — info Feature remains remotely disableable via native newTabPageRebrandingsetting; no new un-gated behavior.— — info No new notify()/request()schemas,nativeDataforwarding, orpostMessageusage.No warnings, errors, or critical findings.
Risk Level
Low Risk — Special-pages CSS-only change behind an existing remote-config rebrand flag, plus a devDependency design-tokens bump; zero injected-runtime, messaging, or security-sensitive surface area.
Recommendations
- (info) Verify rebrand-on favorites tiles visually on macOS/Windows with
newTabPageRebrandingenabled — confirm whetherbackdrop-filtershould be removed in the rebrand block.- (info) Optional: add a rebrand-enabled favorites screenshot integration test to catch future CSS regressions when the flag ships broadly.
Sent by Cursor Automation: Web compat and sec
There was a problem hiding this comment.
Stale comment
Injected PR Evaluation: Web Compatibility & Security
Re-assessed at
ae5b99d1(synchronize). Scope note: this PR touchesspecial-pages/only — noinjected/,messaging/,wrapper-utils.js, orcaptured-globals.jschanges. The injected threat model does not apply to runtime behavior here; findings below are scoped accordingly.Web Compatibility Assessment
File Lines Severity Finding special-pages/pages/new-tab/app/favorites/components/Tile.module.css150–172 info Rebrand tile styles are correctly gated behind :global(body[data-rebrand="true"]). Default path (newTabPageRebranding.state === 'disabled') is unchanged — no third-party web compatibility impact.special-pages/pages/new-tab/app/favorites/components/Tile.module.css166 info Resolved ( ae5b99d1): rebrand.draggablenow setsbackdrop-filter: none, overriding the baseblur(48px). Prevents stacked blur/perf artifacts in rebrand mode.special-pages/pages/new-tab/app/favorites/components/Tile.module.css156–170 info Rebrand block changes layout ( display: flex, padding, tokenized radius/shadow) but does not alter DOM structure or JS event handling — low regression risk within first-party NTP.special-pages/package.json31 info @duckduckgo/design-tokensbumpedv0.30.0→v0.32.0(devDependency). Supplies--ds-space-x02-5,--ds-space-x04,--ds-radius-x04, and shadow tokens used by the rebrand block. Build-time only for this PR's CSS.special-pages/pages/new-tab/integration-tests/new-tab.screenshots.spec.js— info Favorites screenshot tests run with rebrand off (default). No rebrand-on visual regression coverage for the new tile styles. No API surface fidelity, prototype chain, DOM timing, platform API, or third-party script compatibility concerns — this code does not run in arbitrary page contexts.
Security Assessment
File Lines Severity Finding (none) — — No messaging schema changes, no nativeDataforwarding, no bridge/origin validation changes, no captured-global usage, nopostMessage, no dynamic code execution, no iframe access.special-pages/pages/new-tab/app/index.js(context, unchanged)179 info Rebrand activation remains native-controlled via settings.newTabPageRebranding→document.body.dataset.rebrand. Remote kill-switch path intact.Risk Level
Low Risk — CSS-only, feature-flag-gated visual refresh in the embedded New Tab Page; zero injected-runtime or messaging surface changes.
Recommendations
- (Optional, info) Add a rebrand-on favorites screenshot test (e.g.
?rebrand=enabledmock transport flag) to lock in tile padding, radius, and shadow tokens.- (Done)
backdrop-filter: nonein rebrand mode — good fix for the prior stacked-blur note.- (Ship gate) Confirm native clients ship
newTabPageRebrandingdefaultdisableduntil coordinated rollout.
Automation assessment — Injected PR Evaluation (Web Compatibility & Security)
Sent by Cursor Automation: Web compat and sec
There was a problem hiding this comment.
Stale comment
Injected PR Evaluation: Web Compatibility & Security
Re-assessed at
4d90259c(synchronize). Scope:special-pages/only — noinjected/,messaging/,wrapper-utils.js, orcaptured-globals.jschanges. The injected threat model does not apply to runtime behavior here.Delta since
ae5b99d1:@duckduckgo/design-tokensbumpedv0.32.0→v0.33.0and 28 onboarding screenshot baselines updated (collateral from the tokens bump). No further CSS or JS changes to the NTP favorites tile rebrand block.Web Compatibility Assessment
File Lines Severity Finding special-pages/pages/new-tab/app/favorites/components/Tile.module.css150–172 info Rebrand tile styles gated behind :global(body[data-rebrand="true"]). Default path (newTabPageRebranding.state === 'disabled') unchanged — no third-party web compatibility impact.special-pages/pages/new-tab/app/favorites/components/Tile.module.css166 info Rebrand .draggablesetsbackdrop-filter: none, overriding baseblur(48px). Prevents stacked blur/perf artifacts in rebrand mode.special-pages/pages/new-tab/app/favorites/components/Tile.module.css156–170 info Rebrand block changes layout ( display: flex, padding, tokenized radius/shadow) but does not alter DOM structure or JS event handling — low regression risk within first-party NTP.special-pages/package.json31 info @duckduckgo/design-tokensbumpedv0.30.0→v0.33.0(devDependency). Supplies--ds-space-x02-5,--ds-space-x04,--ds-radius-x04, and shadow tokens. Build-time only for this PR's CSS.special-pages/pages/onboarding/integration-tests/*.png— info 28 onboarding screenshot rebaselines from design-tokens bumps. Unrelated to NTP favorites runtime; no injected or third-party page impact. special-pages/pages/new-tab/integration-tests/new-tab.screenshots.spec.js— info Favorites screenshot tests run with rebrand off (default). No rebrand-on visual regression coverage for the new tile styles. No API surface fidelity, prototype chain, DOM timing, platform API, or third-party script compatibility concerns — this code does not run in arbitrary page contexts.
Security Assessment
File Lines Severity Finding (none) — — No messaging schema changes, no nativeDataforwarding, no bridge/origin validation changes, no captured-global usage, nopostMessage, no dynamic code execution, no iframe access.special-pages/pages/new-tab/app/index.js(context, unchanged)179 info Rebrand activation remains native-controlled via settings.newTabPageRebranding→document.body.dataset.rebrand. Remote kill-switch path intact.Risk Level
Low Risk — CSS-only, feature-flag-gated visual refresh in the embedded New Tab Page; zero injected-runtime or messaging surface changes.
Recommendations
- (Optional, info) Add a rebrand-on favorites screenshot test (e.g.
?rebrand=enabledmock transport flag) to lock in tile padding, radius, and shadow tokens.- (Done)
backdrop-filter: nonein rebrand mode — good fix for stacked-blur artifacts.- (Ship gate) Confirm native clients ship
newTabPageRebrandingdefaultdisableduntil coordinated rollout.
Automation assessment — Injected PR Evaluation (Web Compatibility & Security)
Sent by Cursor Automation: Web compat and sec
There was a problem hiding this comment.
Injected PR Evaluation: Web Compatibility & Security
PR: #2887 — NTP Favorites tile rebrand styles
HEAD: bcbe69936 (workflow snapshot rebaseline; no code changes since 4d90259c)
Scope: 23 files — special-pages/ only; zero injected/ changes
Web Compatibility Assessment
| File | Lines | Severity | Finding |
|---|---|---|---|
| (none) | — | — | No injected code, browser API overrides, prototype patches, or third-party page interactions. Standard injected web-compat categories are not applicable. |
special-pages/pages/new-tab/app/favorites/components/Tile.module.css |
150–172 | info | Rebrand styles are correctly gated behind :global(body[data-rebrand="true"]), set by native config (settings.newTabPageRebranding) in app/index.js. Legacy layout is unchanged when the flag is off. |
Tile.module.css |
156–171 | info | Rebrand block switches .draggable from display: grid → flex, removes backdrop-filter: blur(48px), and applies tokenized shadows/radius/spacing. Visual-only; no DOM API or timing changes. |
special-pages/pages/new-tab/integration-tests/new-tab.screenshots.spec.js |
562–593 | info | Favorites screenshot tests do not pass rebrand: 'enabled', so the new tile styles are not covered by visual regression tests. Unit test in new-tab.spec.js (L113–118) only asserts the data-rebrand attribute. |
package-lock.json, special-pages/package.json |
— | info | Collateral @duckduckgo/design-tokens bump v0.30.0 → v0.33.0 drives 20 onboarding screenshot rebaselines (unrelated to favorites logic). |
Security Assessment
| File | Lines | Severity | Finding |
|---|---|---|---|
| (none) | — | — | No changes to captured-globals.js, messaging transports, message bridge, wrapper-utils.js, DDGProxy, or any injected feature code. |
Tile.module.css |
150–172 | info | Static CSS using design-system tokens; no page-derived values, no eval/Function, no postMessage, no network requests. |
| NTP context | — | info | Special-pages run in a privileged embedded browser context (DDG NTP), not in hostile third-party pages. Messaging trust-boundary categories are unchanged. |
Risk Level
Low Risk — Special-pages-only CSS behind a native feature flag; no injected runtime, API shimming, or messaging changes.
Recommendations
- (info) Add favorites screenshot tests with
rebrand: 'enabled'(e.g.favorites-single.pngrebrand variant) to lock in the new tile layout, shadows, andbackdrop-filter: nonebehavior. - (info) When the rebrand flag graduates, fold the
@todoblock (L150) into base rules and remove the:global(body[data-rebrand="true"])wrapper per the existing comment. - (info) Confirm onboarding screenshot rebaselines from the design-tokens v0.33.0 bump are intentional collateral (no favorites-specific action needed).
Sent by Cursor Automation: Web compat and sec



Asana Task/Github Issue: https://app.asana.com/1/137249556945/project/72649045549333/task/1216270925937867?focus=true
Description
Gates favorites tile rebrand styles behind
newTabPageRebranding(body[data-rebrand="true"]): updated radius, surface shadow, layout, and tile-to-label spacing.Testing Steps
?rebrand=enabled→ favorites tiles use the new chrome (16px radius, 2026 shadow, 10px gap to label)?rebrand=disabled(or omit) → live/legacy tile stylesScreenshots
Checklist
Please tick all that apply:
Made with Cursor