Tracking issue for the multi-PR effort to give Hello Dolly a single, consistent treatment across Jetpack admin pages, built on WPDS design tokens.
Background
Hello Dolly renders <p id="dolly"> outside the React mount, at the top of #wpbody-content. Today it's styled by three overlapping, inconsistent rules: .wp-admin #dolly (admin-static.scss, #87a6bc), .jetpack-pagestyles #dolly (_main.scss, desaturated ≈#a1a1a1), and the central :global(.jetpack-admin-page #dolly) (components mixin). Color also drifts page-to-page because the WPDS token (--wpds-color-fg-content-neutral-weak = #707070) only resolves where tokens are loaded (e.g. Boost) and falls back to #87a6bc elsewhere (e.g. AI).
Part of the broader @wordpress/components → @wordpress/ui migration: the token-loading groundwork the migration depends on.
Phases
Risks / decisions
Tracking issue for the multi-PR effort to give Hello Dolly a single, consistent treatment across Jetpack admin pages, built on WPDS design tokens.
Background
Hello Dolly renders
<p id="dolly">outside the React mount, at the top of#wpbody-content. Today it's styled by three overlapping, inconsistent rules:.wp-admin #dolly(admin-static.scss,#87a6bc),.jetpack-pagestyles #dolly(_main.scss, desaturated≈#a1a1a1), and the central:global(.jetpack-admin-page #dolly)(components mixin). Color also drifts page-to-page because the WPDS token (--wpds-color-fg-content-neutral-weak=#707070) only resolves where tokens are loaded (e.g. Boost) and falls back to#87a6bcelsewhere (e.g. AI).Part of the broader @wordpress/components → @wordpress/ui migration: the token-loading groundwork the migration depends on.
Phases
var(--wpds-color-fg-content-neutral-weak, #87a6bc)); drop per-page Boost/Newsletter overrides. Merged._incbuild runspostcss-custom-propertieswithpreserve:false, which inlinesvar(--wpds-*, #fallback)to a literal and strips thevar()at build time — so a runtime:root{--wpds-*}has nothing to bind to on those pages, andpreserve:trueis not viable (breakscalypso-color-schemes' generic vars, which aren't loaded at runtime). Hence two complementary PRs:_incpages (Jetpack: resolve WPDS design tokens in legacy dashboard CSS #48750): feed@wordpress/theme/design-tokens.cssinto the jetpack plugin's postcss-global-data sovar(--wpds-*, #fallback)inlines to the token value (#707070). This is what actually colors Dolly on Dashboard/Settings/Debugger. Merged (trunk390f6821f84).:root{--wpds-*}stylesheet from@wordpress/themeand enqueue it on every Jetpack admin page (admin-uiAdmin_Menuchokepoint + jetpackis_jetpack_admin_page()gate). Fixes the modernized pages, dedupes per-package token copies (kills version skew), and pre-stages the @wordpress/ui migration of the legacy pages (where livevar()will replace the stripped_incCSS). Both PRs pin@wordpress/theme@0.13.0→ no skew. Ships a single reusableAdmin_Menu::enqueue_design_tokens()API both call sites delegate to. Merged (trunkeea718ca7fd)..jetpack-admin-page #dollyrule loads on all three. Phase 4 unblocked on the CSS-presence front..jetpack-admin-page #dollyrule governs everywhere. Merged (Hello Dolly: retire legacy per-page #dolly rules (#49285 Phase 4) #49402, trunkd8a6dee01e0) (verified live: Dashboard#dolly→#707070, no layout shift)..wp-admin #dollyblock —_inc/client/scss/shared/admin-static.scss:204-217..jetpack-pagestyles #dollyblock —_inc/client/scss/shared/_main.scss:45-63(its<660px{display:none}is already covered by rule Edit and rename the readme for GitHub #3's@media(max-width:659px)).p#dolly{display:none}(packages/my-jetpack/_inc/style.module.scss:113); JITM adjacency.position/top/left/right/padding/font-size, so removing Use class_exists() guard for Featured_Content. #1/Allow plugins to inject additional template-specific open graph tags #2 drops those on the legacy pages (Dolly → WP hello.php defaults + rule Edit and rename the readme for GitHub #3). Verify layout/positioning visually on Settings/Dashboard/Debugger + My Jetpack, not just color. Color converges to#707070(intended; needs sign-off).Risks / decisions
Build-time inline = no runtime theming— accepted and scoped: build-time (2a) is used only for the legacy_incpages, which can't consume runtime tokens anyway; modernized pages get the runtime path (2b), which stays themeable.#87a6bc/≈#a1a1a1→#707070on the exception pages (Settings/My Jetpack/Dashboard) once 2a/2b land — intended, needs sign-off.Admin_Menuhandle (2b), not per-plugin duplication.