Skip to content

Rebrand the PL catalog links and the self-paced progress bar - #74643

Open
levadadenys wants to merge 2 commits into
stagingfrom
denys/re/pl-brand-fast-follows
Open

Rebrand the PL catalog links and the self-paced progress bar#74643
levadadenys wants to merge 2 commits into
stagingfrom
denys/re/pl-brand-fast-follows

Conversation

@levadadenys

@levadadenys levadadenys commented Aug 14, 2026

Copy link
Copy Markdown
Contributor

Two rebrand fast-follows on the professional-learning pages, plus the primitive-color cleanup they turned up.

Before:
cat-cards-before
cat-header-before
mypl-table-before
workshop-catalog-before

After:
cat-cards-after
cat-header-after
mypl-table-after
workshop-catalog-after

Report Element Before After
Moshe /professional-learning/workshops links #8C52BA (2022 purple) #4C42CF (codeai-next)
Bethany /my-professional-learning "Course Completion" fill #0093A4 (legacy teal) #4C42CF

Why they missed the rebrand

The brand layer works by redefining semantic custom properties, so anything written as a compile-time SCSS literal is invisible to it, and a primitive is rebranded only by brandLegacyAliases.css — the pre-cutover shim that brandOverrides.css says gets deleted at cutover cleanup.

  • shared/css/2022-rebrand-update.scss — the sitewide a rule used $brand_secondary_default.
  • selfPacedProgressTable.module.scss — the progress fill used $light_primary_500.
  • regionalWorkshopCatalog.module.scss — the seats-remaining icon and supported-grade cells used --brand-teal-50, .linkText used --brand-purple-50. These render correctly today only because brandLegacyAliases.css:181 re-points --brand-teal-50 at --brand-purple-50; they break when the shim goes. So Moshe's suspicion about hardcoded card colors was right about the code, even though the cards look correct on screen.

.linkText was also nested under .withWsCardsContainer while the link it targets lives in .bodyContainerHeaderText, a sibling — the rule never matched, which is why that link fell through to the sitewide purple. Hoisted one level.

Blast radius of the shared-stylesheet change

2022-rebrand-update.scss is loaded by the workshop catalog, /home, the sign-in page, LTI account linking and /projects, and is @imported by four apps/ CSS modules (certificates, curriculum catalog cards). Counting anchors that this a rule actually wins on, with the old sheet in place:

  • /professional-learning/workshops — 2 (National workshops, contact your regional partner)
  • /projects — 0
  • sign-in — 0 (its links already resolve to #4C42CF)

So in practice the change lands on the reported page while fixing the cause rather than the symptom.

Verification

Local dashboard at :3000 on a static yarn build, default brand (codeai-next), Chrome via Playwright, resolved getComputedStyle values rather than eyeballed hues:

Probe Before After
National workshops link rgb(140, 82, 186) rgb(76, 66, 207)
contact your regional partner link rgb(140, 82, 186) rgb(76, 66, 207)
progress-bar fill rgb(0, 147, 164) rgb(76, 66, 207)
progress-bar track rgb(234, 236, 239) unchanged
seats-remaining icon / supported grade rgb(76, 66, 207) unchanged

#4C42CF on the page backgrounds (white and #F0F2F5) is ~7.4:1, so the link contrast improves over #8C52BA.

No workshops or regional partners are seeded locally (nor on staging, per the report), so the catalog cards above were rendered against a stubbed regional_workshop_data response, and the /my-professional-learning rows against a local dev teacher with partial PL progress. Neither is part of this change.

apps/test/unit/code-studio/pd/professional_learning/ — 100 tests, all passing. ./tools/hooks/pre-commit clean.

Deliberately not in scope

regionalWorkshopCatalog.module.scss also uses --neutral-* primitives throughout, and selfPacedProgressTable.module.scss still uses $light_gray_100 for the bar track and the completed pill. Those are neutrals, so they are not brand bugs; they want the same primitive-to-semantic sweep, separately.

Token names (review follow-up)

The link rule first used --text-brand-purple-primary / -secondary, matching what the design system's own Link uses. Those names are declared only in colors.css and brandLegacyAliases.css, both on the cutover deletion list, so they would go undefined at cleanup. Switched to --text-brand-primary / --text-brand-secondary, which the CADS brands and brandLegacyShim.css both declare. Same #4C42CF under codeai-next — re-measured after the change, all probes above unchanged.

Under the legacy code / codeai brands the links now resolve teal instead of 2022 purple, since that is what the shim maps the CADS brand family to. Those brands only render with DCDO brand-router-enabled on.

Worth a separate ticket: --text-brand-purple-* is still used by link, genericButton, popover, alert, notificationBanner and iconButton in component-library. The same cleanup will strand all of them.

🤖 Generated with Claude Code

Three colors on the professional-learning pages were written as
compile-time SCSS literals or as color primitives. Neither can be
rebranded: the brand layer works by redefining semantic custom
properties, so a literal keeps its 2022 value and a primitive is only
rebranded by the pre-cutover alias shim, which is scheduled for
deletion.

  - shared/css/2022-rebrand-update.scss: the sitewide `a` rule used
    $brand_secondary_default, so every link on a page that loads this
    sheet rendered 2022 purple #8C52BA next to codeai-next indigo
    #4C42CF. The workshop catalog is the only such page that has any
    link this rule still wins on ("National workshops", "contact your
    regional partner"); on /projects and the sign-in page the count is
    zero.

  - selfPacedProgressTable.module.scss: the "Course Completion" fill
    used $light_primary_500, so it stayed legacy teal #0093A4.

  - regionalWorkshopCatalog.module.scss: the seats-remaining icon and
    the supported-grade cells used --brand-teal-50, and .linkText used
    --brand-purple-50. Both are primitives. They render correctly today
    only because brandLegacyAliases.css re-points the teal primitives at
    purple; they break when that shim is deleted.

.linkText was also nested under .withWsCardsContainer, a sibling of the
container the link actually lives in, so the rule never matched. Hoisted
one level so it applies.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 2b050470ec

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread shared/css/2022-rebrand-update.scss Outdated
Comment thread apps/src/code-studio/pd/professional_learning/selfPacedProgressTable.module.scss Outdated
--text-brand-purple-primary/-secondary are defined only in colors.css and
brandLegacyAliases.css, both on the cutover deletion list, so the
declarations would go undefined at cleanup. --text-brand-primary and
--text-brand-secondary are declared by both the CADS brands and the
legacy shim, and resolve to the same #4C42CF under codeai-next.

Under the legacy code/codeai brands the links become teal rather than
2022 purple, which is what brandLegacyShim.css maps the CADS brand
family to. Those brands only render when DCDO brand-router-enabled is on.

Also drops the comments narrating what the colors used to be, per
apps/src/AGENTS.md.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@levadadenys
levadadenys requested review from a team, etaderhold and moshebaricdo and removed request for a team August 14, 2026 14:15

@moshebaricdo moshebaricdo 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.

Love it, ty! Can we fix this broken tag in the table while we're here?

Image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants