Rebrand the PL catalog links and the self-paced progress bar - #74643
Open
levadadenys wants to merge 2 commits into
Open
Rebrand the PL catalog links and the self-paced progress bar#74643levadadenys wants to merge 2 commits into
levadadenys wants to merge 2 commits into
Conversation
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>
There was a problem hiding this comment.
💡 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".
--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
requested review from
a team,
etaderhold and
moshebaricdo
and removed request for
a team
August 14, 2026 14:15
moshebaricdo
approved these changes
Aug 14, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

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




After:




/professional-learning/workshopslinks#8C52BA(2022 purple)#4C42CF(codeai-next)/my-professional-learning"Course Completion" fill#0093A4(legacy teal)#4C42CFWhy 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 thatbrandOverrides.csssays gets deleted at cutover cleanup.shared/css/2022-rebrand-update.scss— the sitewidearule 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,.linkTextused--brand-purple-50. These render correctly today only becausebrandLegacyAliases.css:181re-points--brand-teal-50at--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..linkTextwas also nested under.withWsCardsContainerwhile 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.scssis loaded by the workshop catalog,/home, the sign-in page, LTI account linking and/projects, and is@imported by fourapps/CSS modules (certificates, curriculum catalog cards). Counting anchors that thisarule actually wins on, with the old sheet in place:/professional-learning/workshops— 2 (National workshops,contact your regional partner)/projects— 0#4C42CF)So in practice the change lands on the reported page while fixing the cause rather than the symptom.
Verification
Local dashboard at
:3000on a staticyarn build, default brand (codeai-next), Chrome via Playwright, resolvedgetComputedStylevalues rather than eyeballed hues:National workshopslinkrgb(140, 82, 186)rgb(76, 66, 207)contact your regional partnerlinkrgb(140, 82, 186)rgb(76, 66, 207)rgb(0, 147, 164)rgb(76, 66, 207)rgb(234, 236, 239)rgb(76, 66, 207)#4C42CFon 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_dataresponse, and the/my-professional-learningrows 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-commitclean.Deliberately not in scope
regionalWorkshopCatalog.module.scssalso uses--neutral-*primitives throughout, andselfPacedProgressTable.module.scssstill uses$light_gray_100for 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 ownLinkuses. Those names are declared only incolors.cssandbrandLegacyAliases.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 andbrandLegacyShim.cssboth declare. Same#4C42CFunder codeai-next — re-measured after the change, all probes above unchanged.Under the legacy
code/codeaibrands 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 DCDObrand-router-enabledon.Worth a separate ticket:
--text-brand-purple-*is still used bylink,genericButton,popover,alert,notificationBannerandiconButtonincomponent-library. The same cleanup will strand all of them.🤖 Generated with Claude Code