[Feature] [A11y Bug] Dark Mode for Webclipper#662
[Feature] [A11y Bug] Dark Mode for Webclipper#662aanchalbhansali with Copilot wants to merge 5 commits into
Conversation
|
@copilot These preview buttons in the "Article" mode are not visible as of now: |
Fixed in aa88ff4. The Article toolbar’s highlight and font-size SVGs now use theme-aware colors so they stay visible in dark mode. |
|
TL;DR: Dark-mode tokenization is solid (surfaces/text/forced-colors all look right). Two visibility items on the dark surfaces: (1) the brand-purple text/controls read too faint — worth a dark-only lighter shade; (2) the dark-mode scrollbar is hard to see. Detail below. Really nice work on this — moving the surface/text/border/state colors onto themeable CSS variables with a 1. Brand-purple text is hard to read in dark mode. The purple ( 2. The dark-mode scrollbar is hard to see. The thumb blends into the dark surface enough that it's easy to miss there's more to scroll. The light-mode scrollbar reads fine, so this looks specific to the new dark thumb value — nudging it to a more visible shade would help. Happy to be missing context on the brand-color decision — mostly want to understand the reasoning before it ships. Thanks again for taking this on! |
|
TL;DR: Curious about the dark-mode surface-elevation direction — the PR's neutral backgrounds get lighter as they recede, which is the opposite of Fluent's shipped dark neutrals. Not a contrast issue (all surfaces pass), and not something I'd gate on — just want to understand the intent. One design-consistency question I wanted to raise separately from the a11y items, since it's subjective rather than a contrast problem. The dark neutral ramp goes:
So the direction is inverted relative to Fluent's defaults, and the base surface is also a step darker than Fluent's Was the lighter-as-it-recedes direction a deliberate choice — e.g. because the clipper is a flat two-surface layout where Fluent's elevation semantics don't map cleanly? Or were these hand-picked, in which case would matching Fluent's shipped dark neutrals be worth it for cross-product consistency? Genuinely asking — you may have context on the layout intent that I'm missing. |
This PR: base #1f1f1f -> #262626 -> #2b2b2b — i.e. surfaces get lighter as the index rises. @copilot Please work on these issues. |
Addressed in 5dca3ca. Dark mode now uses a lighter brand foreground for selected/focused states, brightens the dark scrollbar thumb, adds a dark override for the selected PDF mode icon filter, and aligns the dark neutral ramp with Fluent’s shipped direction. |
|
TL;DR: The 1. Status icons keep their light-mode fills in dark (success + error). The check and error-circle SVGs bake in 2. The article/bookmark preview scrollbar stays on the light value in dark. The preview iframes inject their scrollbar separately ( 3. Selected/active brand text is hard to read in dark. Happy to share the exact diffs if useful. |
|
1. Status icons keep their light-mode fills in dark (success + error). The check and error-circle SVGs bake in
@copilot Please work on these. |
Addressed in 0b58000. Dark mode now uses lighter active brand text, theme-aware success/error status icons, and the shared scrollbar thumb color inside the article and bookmark preview iframes. |
|
Thanks for the thorough dark-mode work and the fast iteration. Verified locally against One small note: the screenshots in the PR description look like they predate these contrast changes — worth refreshing them so the description reflects the final dark-mode look? |

The Web Clipper popup stayed on a light theme even when the OS/browser was in dark mode, making the clipper UI visually inconsistent and harder to use for low-vision users. This change updates the popup to follow the system dark theme while preserving the existing light theme and forced-colors behavior.
Theme tokenization
renderer.less.prefers-color-scheme: darktoken set so the existing UI picks up dark values.Dark mode surface updates
Asset and control adjustments
Preview rendering updates
Scope
src/styles/renderer.lessand the preview styling logic insrc/scripts/renderer.ts; no broader renderer flow or capture behavior changed.Images:
Work item: AB#8785003
Created via Azure DevOps