[rebrand] Brand-track legacy lab shell + Blockly SVG + viz resize bar#74002
Merged
Conversation
…into alex/spritelab-viz-column-workspace-bg
alex-m-brown
marked this pull request as ready for review
July 21, 2026 17:41
ebeastlake
approved these changes
Jul 21, 2026
ebeastlake
left a comment
Contributor
There was a problem hiding this comment.
Approved in design office hours!
Contributor
|
so much pink 🩷 |
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.
Migrate the visualization column background, workspace surrounds, and Blockly workspace SVG in every legacy lab to brand-aware semantic tokens. Also swap the visualization resize bar's
⋮⋮grabber color from a hardcoded gray to a semantic token so it tracks the active brand.Scope: three files.
dashboard/app/assets/stylesheets/application.scss— addsbody.pin_bottom { background-color: var(--background-neutral-secondary) }.pin_bottomis applied at runtime by every legacy lab entry point (StudioApp.js,WebLab.js,Javalab.js,Ailab.js,Fish.js,netsim.js) and NEVER by Lab2-based labs — so this scopes the brand-aware wrapper background to legacy labs only.apps/style/common.scss— swaps#visualizationResizeBarcolor: $lighter_gray(#c6cacd) →var(--borders-neutral-strong). Semantic role match (resizable edge accent), brand-aware.apps/src/blockly/addons/cdoCss.ts— registers.blocklySvg { background-color: var(--background-neutral-secondary) !important }alongside the existing Blockly workspace overrides from PR [rebrand] Migrate blockly workspace to design-system semantic tokens #73785. The.blocklySvgrule ships in Blockly's baked-in compiled CSS (hardcoded white); overriding viaBlockly.Css.registeris the same mechanism we already use for.blocklyToolbox,.blocklyFlyoutBackground, etc.Mapping
body.pin_bottominherited frombody { background-color: #f2f2f2 }— legacy raw hex, stayed gray under any brandbody.pin_bottom { background-color: var(--background-neutral-secondary) }—#f0f2f5under default brand (essentially indistinguishable), pink under audit, dark under dark themesvg.blocklySvg { background-color: white }(Blockly-baked default) — white rectangle in the middle of a themed workspace under audit / dark themesvg.blocklySvg { background-color: var(--background-neutral-secondary) !important }viaBlockly.Css.register— blends with the wrapper background so the whole lab shell tracks the brand as one continuous surface#visualizationResizeBar { color: $lighter_gray }(#c6cacd) — legacy hex, dots stayed gray under any brand#visualizationResizeBar { color: var(--borders-neutral-strong) }— slightly darker gray on default (#b7bfc8vs#c6cacd), pink on auditScope rationale — why
body.pin_bottomand notbodyor.wrapper:bodyalone would ripple across every dashboard page (marketing, curriculum, teacher dashboard, sign-in, etc.). Too broad..wrapperis the ancestor of#codeAppin the lab shell; scoping there works but requires knowing the.wrapperstructure.body.pin_bottomis simpler and covers the same territory since.wrapperis transparent and inherits body's background.body.pin_bottom(specificity 0,1,1) cleanly beats the basebody { background-color: #f2f2f2 }rule (0,0,1) atcommon.scss:55without touching the base.In scope (legacy labs — every lab that runtime-adds
pin_bottom):StudioApp.js: Sprite Lab, Game Lab, App Lab, Studio, Maze, Turtle, Flappy, Bounce, Craft, Jigsaw, Poetry.Links
Testing story
Before screenshot — Sprite Lab under

?brand=codeai-audit: viz column + workspace surround visibly gray (body#f2f2f2bleeding through), blocklySvg area a stark white rectangle in the middle of the pink workspace chrome, resize bar⋮⋮dots gray.After screenshot — same page: whole lab shell (viz column background + wrapper around workspace + workspace SVG) reads as one continuous light-pink surface; resize bar dots are pink; Blocks toolbox stays its own slightly-deeper pink for contrast. Under default brand: subtle light gray shell, essentially unchanged visually.



Code.org Brand
CodeAI Brand
Manual QA — please walk through:
?brand=codeai-audit: viz column background, workspace surround, and workspace SVG all resolve to the same light-pink#fff0f7. No stark white rectangle around the "when run" block.⋮⋮grabber is pink and visible against the light-pink shell.?brand=): viz column + workspace + resize bar all look essentially identical to today — no visible regression to the current gray-ish look.#f2f2f2. No visual change./musiclab, Python Lab, Web Lab 2): unchanged. They don't setpin_bottomso the new rule doesn't apply.Make sure you ask @moshebaricdo:
--background-neutral-secondary(neutral-gray-5=#f0f2f5on default) for the shell. That's the closest semantic token to legacy#f2f2f2. Confirm it's the right choice vs--background-neutral-primary(base white) or--background-neutral-tertiary(slightly deeper gray).--borders-neutral-strongfor the resize bar⋮⋮color. Semantic role fits (resizable edge accent). Confirm it's what you want vs a lighter subtle-chrome option.