Skip to content

Fix the white scrollbar/outline artifacts: theme Chromium's Fluent overlay scrollbars in all islands#89

Merged
dovvnloading merged 3 commits into
mainfrom
hotfix/island-scrollbar-styling
Jul 21, 2026
Merged

Fix the white scrollbar/outline artifacts: theme Chromium's Fluent overlay scrollbars in all islands#89
dovvnloading merged 3 commits into
mainfrom
hotfix/island-scrollbar-styling

Conversation

@dovvnloading

Copy link
Copy Markdown
Owner

Summary

Fixes the white outline/marker artifacts across the UI (plugin-picker popup bars, the right-edge white pill, picker-popup edges, token-counter/composer fringes).

Diagnosis (all verified empirically on this machine with composited-pixel probes):

  • Page transparency is fine - setBackgroundColor(transparent) composites correctly (probe: background sampled rgb(16,16,16) through the page).
  • The white things are Qt 6.11 Chromium's Windows-11 Fluent overlay scrollbars: big white rounded pills drawn wherever an island surface overflows - the page itself when the host clamps shorter than content, inner lists, or a fixed-width shell overflowing by a sub-pixel at fractional DPI. They auto-hide when idle, which is why they seemed to come and go.
  • They ignore legacy ::-webkit-scrollbar rules; probes: default thumb brightness 252 (white), color-scheme: dark alone 160, scrollbar-color 60 (dark) - the property that actually works.

Fix:

  • New shared web_ui/src/lib/ui/base.css (color-scheme: dark + inherited scrollbar-color on the same runtime token island cards already use for borders + scrollbar-width: thin), imported first by every island's styles.css.
  • plugin-picker shell: fixed 520px (exactly the host width) → width: 100%; max-width: 520px - the sub-pixel overflow at fractional DPI was summoning the horizontal bar across the popup bottom.

Verification

  • All 19 islands rebuilt; 533 vitest tests pass (incl. the no-raw-colors guard - the shared file uses the runtime token, no hex)
  • The real built plugin-picker bundle probed on screen mid-scroll: V-scrollbar zone brightest 96, H-zone 28 - both dark (was 252)
  • Assets on this machine already rebuilt - restarting the app picks the fix up immediately

dovvnloading and others added 3 commits July 21, 2026 18:59
Qt 6.11's Chromium draws Windows-11 "Fluent" overlay scrollbars - large
WHITE rounded pills - on any island surface the moment it overflows: the
page itself when a host clamps shorter than its content, inner scroll lists,
or a fixed-width shell overflowing the viewport by a sub-pixel at fractional
DPI scaling. They auto-hide when idle (why the artifacts came and went) and
ignore legacy ::-webkit-scrollbar styling; the standard `scrollbar-color`
property is what actually themes them.

Verified empirically against this exact engine with on-screen composited
pixel sampling: default thumb ~rgb(252) (the white pills the user saw);
`color-scheme: dark` alone still ~rgb(160); `scrollbar-color` ~rgb(60).
Page transparency itself was confirmed working (composited pixel probe) -
the white was never the page background.

Fix: a shared lib/ui/base.css - color-scheme: dark + inherited
scrollbar-color using the same runtime token island cards already use for
borders + scrollbar-width: thin - imported first by every island's
styles.css (19 islands). Plus plugin-picker's shell switches from a fixed
520px (exactly the host width - sub-pixel overflow at fractional DPI
summoned a horizontal scrollbar across the popup) to width:100%/max-width.

Verified: all 19 islands rebuilt; 533 vitest tests pass (including the
no-raw-colors guard); the real built plugin-picker bundle probed on screen
while scrolling - V-zone brightest 96, H-zone 28, both dark.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The committed prebuilt assets now carry lib/ui/base.css (dark
scrollbar-color theming + color-scheme) and plugin-picker's width fix, so a
fresh checkout renders correctly without waiting for a local rebuild.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…omposer token-retrofit golden

CI caught what my local verification missed (I ran vitest but not the
Python suite for a "CSS-only" change): test_composer_token_retrofit.py is a
PYTHON golden test that resolves the composer's styles.css against each
theme and asserts a byte-for-byte match with a pre-retrofit fixture - the
@import line prepended to styles.css broke the byte-match.

Same bundle, different plumbing: every island's main.tsx now imports
lib/ui/base.css immediately before ./styles.css (identical cascade order,
identical vite output), and all 19 styles.css files are byte-identical to
main again. Verified: 533 vitest + full Python suite 1678 passed (golden
green), islands rebuilt, and the built plugin-picker bundle re-probed on
screen mid-scroll - scrollbar zone still dark (88, was 252 before the fix).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@dovvnloading
dovvnloading merged commit 95a41fc into main Jul 21, 2026
2 checks passed
@dovvnloading
dovvnloading deleted the hotfix/island-scrollbar-styling branch July 21, 2026 23:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant