Uh oh!
There was an error while loading. Please reload this page.
Refresh docs site theme toward neutral GitHub-style surfaces - #40422
Conversation
Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
There was a problem hiding this comment.
Pull request overview
This PR retunes the docs site styling toward more neutral GitHub-like surfaces by introducing shared --aw-* theme tokens, shifting most docs chrome away from all-over purple treatments, and keeping the homepage intentionally more branded/purple (including the slide hero framing).
Changes:
- Added shared
--aw-*theme tokens for backgrounds, borders, muted text, shadows, and accent tinting (light + dark). - Updated global chrome styling (header/sidebar/buttons/cards/blockquotes) to use more neutral surfaces with purple reserved for emphasis/interaction.
- Refined landing-page-only glow behavior by keying it to the homepage slide hero (
[data-slide-hero]) and strengthenedWorkflowHeroframing.
Show a summary per file
| File | Description |
|---|---|
| docs/src/styles/custom.css | Introduces --aw-* tokens and rebalances light/dark theme surfaces; updates glow gating and various UI surfaces. |
| docs/src/components/WorkflowHero.astro | Adjusts hero feature/frame styling to keep homepage visually distinct after theme neutralization. |
| docs/src/components/CustomHeader.astro | Updates hover/accent and dropdown surface styling to use the new shared theme tokens. |
Copilot's findings
Tip
Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
- Files reviewed: 3/3 changed files
- Comments generated: 3
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
pelikhan
commented
Jun 20, 2026
@copilot run to their side and take screenshots. |
✅ Design Decision Gate 🏗️ completed the design decision gate check. No ADR enforcement needed: PR #40422 does not have the 'implementation' label (has_implementation_label=false) and has 0 new lines of code in business logic directories (default_business_additions=0, below the 100-line threshold). requires_adr_by_default_volume=false. |
🧠 Matt Pocock Skills Reviewer has completed the skills-based review. ✅ |
✅ Test Quality Sentinel completed test quality analysis. No test files were added or modified in this PR. The PR only changes docs/src/components/CustomHeader.astro, docs/src/components/WorkflowHero.astro, and docs/src/styles/custom.css (styling/UI changes). Test Quality Sentinel skipped. |
✅ PR Code Quality Reviewer completed the code quality review. |
Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Done in |
There was a problem hiding this comment.
Skills-Based Review 🧠
Applied /zoom-out and /improve-codebase-architecture — requesting changes on three real issues (animation perf, browser compat, body text contrast), with four lower-priority token consistency notes.
📋 Key Themes & Highlights
Issues to address
- Animation still runs on all pages —
opacity: 0does not stop the 24 s CSS animation loop onbody::before; usedisplay: noneinstead (or document why animation-in-background is intentional). - Missing
-webkit-backdrop-filteron dropdown — the header correctly uses both prefixed and unprefixed variants, but the new dropdown blur only has the unprefixed version and will silently break on Safari. - Body paragraph text demoted to muted colour —
--aw-text-mutedis reserved for secondary/hint text, but is now applied to.sl-markdown-content pandli, reducing the contrast of primary reading content in light mode.
Token consistency (lower priority)
- Light card/panel shadow hardcoded instead of using
var(--aw-shadow) WorkflowHero.astrohero card uses hardcodedrgbavalues outside the token system (no comment explaining this is intentional)- Light blockquote background hardcoded instead of using an
--aw-*surface token [data-slide-hero]couples global body glow logic to a component-internal attribute — a comment documenting this as a stable contract would help future contributors
Positive Highlights
- ✅ Clean
--aw-*token system is a solid foundation — replacing hundreds of scatteredrgbaliterals with a small set of named variables is the right direction - ✅ Scoping the animated glow to the landing page is a clear improvement in both UX and architecture intent
- ✅ Light theme buttons and card/panel light shadows were genuinely missing before; good catch
- ✅ Consistent
rgba(var(--aw-accent-rgb), ...)pattern for accent tints is elegant
🧠 Reviewed using Matt Pocock's skills by Matt Pocock Skills Reviewer · 87.5 AIC · ⌖ 10.2 AIC · ⊞ 6.9K
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
| :root[data-theme='light'] .card, | ||
| :root[data-theme='light'] .panel { | ||
| background-color: rgba(255, 255, 255, 0.88); | ||
| box-shadow: 0 10px 28px rgba(31, 35, 40, 0.06); |
There was a problem hiding this comment.
[/improve-codebase-architecture] The dark theme card/panel uses box-shadow: var(--aw-shadow) (line 1071), but the light theme override hardcodes a separate value instead of referencing the same token. This breaks the abstraction: if you later want to tune card shadows, you need to change two places rather than one.
💡 Fix
:root[data-theme='light'] .card,:root[data-theme='light'] .panel {
background-color:rgba(255,255,255,0.88);
box-shadow:var(--aw-shadow); /* already defined as the lighter value in light :root */
}--aw-shadow is already set to 0 18px 42px rgba(31, 35, 40, 0.08) in the light theme :root, so this gives the same visual result while keeping the token as the single source of truth.
There was a problem hiding this comment.
Addressed in ff00ee8: light .card/.panel now use shared tokens (var(--aw-bg-elevated) and var(--aw-shadow)).
Uh oh!
There was an error while loading. Please reload this page.
| :root[data-theme='light'] .sl-markdown-content p, | ||
| :root[data-theme='light'] .sl-markdown-content li { | ||
| color: #424a53; | ||
| color: var(--aw-text-muted); |
There was a problem hiding this comment.
[/zoom-out]--aw-text-muted (#57606a in light mode) is defined as the muted/secondary text token — the PR description itself calls it out as for muted text. Applying it to .sl-markdown-content p and li demotes the primary body text of every docs page to secondary contrast. This is the text users come to read; it should use the primary text colour, not the muted one.
💡 Suggestion
Leave body paragraph text at its default (the Starlight --sl-color-text it already inherits), or explicitly set color: var(--sl-color-text). Reserve var(--aw-text-muted) for captions, helper text, and sidebars where reduced contrast is intentional.
There was a problem hiding this comment.
Fixed in 6a14821: light-theme .sl-markdown-content p and li now use var(--sl-color-text) instead of the muted token.
| background: rgba(208, 215, 222, 0.15); | ||
| border-left-color: rgba(var(--aw-accent-rgb), 0.34); | ||
| color: var(--aw-text-muted); | ||
| background: rgba(208, 215, 222, 0.22); |
There was a problem hiding this comment.
[/improve-codebase-architecture] The dark blockquote background uses the tokenised rgba(110, 118, 129, 0.1) (line 940), but the light override hardcodes rgba(208, 215, 222, 0.22) instead of deriving from an --aw-* token. Minor inconsistency, but it's the kind of stray hardcoded value the token system was introduced to eliminate.
💡 Suggestion
Either define --aw-bg-blockquote in both theme roots, or use the already-defined --aw-bg-subtle as the background base:
background:var(--aw-bg-subtle); /* = #f6f8fa in light, #161b22 in dark */This keeps blockquote surfaces in sync with the broader neutral surface palette.
There was a problem hiding this comment.
Updated in 6a14821: light-theme blockquote now uses var(--aw-bg-subtle) background and var(--sl-color-text) for primary readability.
pelikhan
commented
Jun 20, 2026
@copilot run pr finisher skill |
There was a problem hiding this comment.
REQUEST_CHANGES — 2 new issues + 3 pre-existing issues need fixing before merge
🔍 Summary of all blocking issues
New findings (this review)
Medium —
--aw-text-mutedon primary body text (light theme) (custom.css:734)--aw-text-muted: #57606ais GitHubfg.muted— meant for metadata and secondary annotations. Applying it to.sl-markdown-content pandlidrops body text contrast from ~7.9:1 to ~5.8:1 on white. Documentation body copy should use the primary text color or a dedicated body token. The same issue applies to light-theme blockquotecolorat line 948.Low — Missing
-webkit-backdrop-filteron dropdown (CustomHeader.astro:125)
The rest of the codebase pairsbackdrop-filterwith-webkit-backdrop-filter(e.g. the header). The new dropdown only has the unprefixed form.
Pre-existing open comments (require resolution)
Medium — Animation runs at
opacity: 0on all non-home dark-theme pages (custom.css:433): switching fromdisplay: nonetoopacity: 0means the compositor still ticksglow-moveon every non-homepage, wasting GPU work.Medium — Same animation waste on light-theme non-home pages (
custom.css:131):light-glow-moveruns continuously even where the element is invisible.Medium —
.card/.panellight theme reintroduces hardcoded surface values (custom.css:1078):rgba(255,255,255,0.88)and0 10px 28px ...bypass the--aw-bg-elevated/--aw-shadowtokens introduced by this same PR.
The structural approach (tokenizing via --aw-*, restricting the glow to [data-slide-hero] pages) is the right direction. The issues above are fixable without rearchitecting.
🔎 Code quality review by PR Code Quality Reviewer · 157.2 AIC · ⌖ 7.32 AIC · ⊞ 5.1K
| :root[data-theme='light'] .sl-markdown-content p, | ||
| :root[data-theme='light'] .sl-markdown-content li { | ||
| color: #424a53; | ||
| color: var(--aw-text-muted); |
There was a problem hiding this comment.
Readability regression: --aw-text-muted is applied to primary paragraph and list-item text in the light theme, reducing contrast from ~7.9:1 (#424a53) to ~5.8:1 (#57606a) against a white background.
💡 Details and suggested fix
--aw-text-muted (GitHub fg.muted) is semantically designed for secondary/helper content — timestamps, captions, metadata labels. Applying it to .sl-markdown-content p and li means every paragraph in every light-theme docs page renders at reduced contrast.
GitHub itself uses #1f2328 (fg.default) for body text and reserves #57606a (fg.muted) for secondary annotations. The old #424a53 was closer to the right level for body copy.
Suggested fix:
:root[data-theme='light'] .sl-markdown-contentp,:root[data-theme='light'] .sl-markdown-contentli {
color:var(--sl-color-text); /* use the theme primary text color, not muted */
}Or introduce a dedicated --aw-text-body token that resolves to a darker value (e.g. #424a53) rather than reusing the muted token.
The same issue applies to blockquote { color: var(--aw-text-muted) } in light mode (line 948) — blockquote content is still primary text, not metadata.
There was a problem hiding this comment.
Fixed in 6a14821: reverted light-theme body/list text to var(--sl-color-text) and updated light blockquote text to primary text color.
| z-index: 1000; | ||
| box-shadow: 0 8px 24px rgba(0, 0, 0, 0.4); | ||
| box-shadow: var(--aw-shadow, 0 8px 24px rgba(0, 0, 0, 0.4)); | ||
| backdrop-filter: blur(16px); |
There was a problem hiding this comment.
Missing -webkit-backdrop-filter: The new dropdown uses backdrop-filter: blur(16px) alone, but the header in custom.css still pairs it with -webkit-backdrop-filter: blur(12px) for consistency across older Safari/WebKit.
💡 Suggested fix
Add the vendor-prefixed form to match the codebase convention:
-webkit-backdrop-filter:blur(16px);
backdrop-filter:blur(16px);While current Safari (18+) supports the unprefixed form, iOS Safari 15/16 which still has noticeable usage, required the prefix. Since the header already uses the paired form, the inconsistency here is the main concern.
There was a problem hiding this comment.
Fixed in 6a14821: added -webkit-backdrop-filter: blur(16px) to match the unprefixed backdrop-filter rule.
| border-left-color: #d0d7de; | ||
| color: #424a53; | ||
| background: rgba(208, 215, 222, 0.15); | ||
| border-left-color: rgba(var(--aw-accent-rgb), 0.34); |
There was a problem hiding this comment.
Silent border drop on CSS variable failure: rgba(var(--aw-accent-rgb), 0.34) has no fallback for --aw-accent-rgb, so if that variable is unresolved the entire border-left-color declaration is silently discarded by the browser (CSS spec guarantees an invalid computed value when a custom property inside a function has no fallback).
💡 Suggested fix
Add an inline fallback to the var() call:
border-left-color:rgba(var(--aw-accent-rgb,130,80,223),0.34);The existing uses of --aw-accent-rgb in CustomHeader.astro and elsewhere already do this correctly (e.g. rgba(var(--aw-accent-rgb, 130, 80, 223), 0.12)). This is the only occurrence that omits the fallback.
There was a problem hiding this comment.
Fixed in 6a14821: added fallback in rgba(var(--aw-accent-rgb, 130, 80, 223), 0.34) for the blockquote border color.
Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Ran PR finisher pass. Addressed in |
@copilot review all comments and address unresolved review feedback.
|
Refresh CI to clear stale checks and surface the current blocker.
|
@copilot review all comments and address unresolved review feedback.
|
pelikhan
commented
Jun 20, 2026
@copilot render screenshots |
Rendered screenshots from the current branch state:
No repository file changes were needed for this request. |
The docs site had drifted into a heavily purple treatment across all pages. This change pulls the shared light and dark themes back toward neutral GitHub-like surfaces while preserving a more distinctly purple visual identity on the landing page.
Theme tokens and shared surfaces
--aw-*tokens for neutral page backgrounds, elevated surfaces, borders, muted text, shadows, and accent tinting.Non-homepage docs chrome
Homepage remains intentionally purple
WorkflowHeroframe styling so the homepage still reads as branded and visually distinct.Navigation polish
Example of the new shared theme model: