"refs" drop down transparency issue #115

Closed
opened 2026-09-05 04:26:53 +00:00 by crueber · 3 comments
Owner

On the main repo page (ex: https://hub.packden.us/crueber/walhub )

image

The "refs" drop down is somewhat transparent and it's hard to read what's on top. Let's get rid of that transparency.

Let's also make that scrollbar look nicer.

On the main repo page (ex: https://hub.packden.us/crueber/walhub ) ![image](/attachments/2afe66e4-e7af-45aa-b10d-e638b3de4f43) The "refs" drop down is somewhat transparent and it's hard to read what's on top. Let's get rid of that transparency. Let's also make that scrollbar look nicer.
146 KiB
Author
Owner

Fixed by #125 — solid opaque panels for all floating dropdowns (refs, tasks, clone, notifications, reactions, labels, close-menu) + themed slim scrollbars on the scrollable lists. Browser-verified dark+light with zero console errors.

Fixed by https://git.packden.us/crueber/walhub/pulls/125 — solid opaque panels for all floating dropdowns (refs, tasks, clone, notifications, reactions, labels, close-menu) + themed slim scrollbars on the scrollable lists. Browser-verified dark+light with zero console errors.
Author
Owner

PR #125 review (branch fix/issue-115, commit d2d71a4) — opaque dropdown panels + styled scrollbars.

OPACITY — PASS. web/src/ui.css:99 groups .clone-body/.ref-drop/.tasks-drop/.notif-drop/.reaction-drop/.label-drop/.close-drop with bg-white/dark:bg-zinc-900. Verified in compiled vite output: .card dark rule is .card:where(.dark,.dark *) (0,1,0, zinc-900/70 translucent) and the override is :is(...):where(.dark,.dark *) (also 0,1,0) emitted later in @layer components, so it wins in both themes. Light mode is bg-white on both sides (no-op). BEFORE screenshot confirms the bug (refs list with page text bleeding through).

COVERAGE — PASS, none missed. Grep of web/src for floating .card popovers finds exactly 7, all carrying a hook class: Repo.jsx:96 (clone-body, pre-existing), Repo.jsx:269 (ref-drop, pre-existing), Repo.jsx:431 (tasks-drop, pre-existing), NotificationTray.jsx:89, ReactionMenu.jsx:112, LabelPicker.jsx:92, CommentComposer.jsx:91 (4 added by this PR). Only other translucent floaters are .site-header (intentional backdrop-blur) and .tray-entry (fixed error tray, out of scope).

SCROLLBARS — PASS. .scroll-slim (ui.css:105-110) sets Firefox scrollbar-width:thin + scrollbar-color plus ::-webkit-scrollbar width/track/thumb, with .dark overrides for both engines (zinc-400/300 light, zinc-600/700 dark). Applied on the actual scroll containers: ref-list (Repo.jsx:287), label menu + notif tray (same element as overflow-y-auto). Reaction/close/tasks menus are not scrollable — correctly excluded.

CLASS-ONLY — PASS. Each JSX diff is a single class-attribute token add; no logic/behavior/ARIA change.

DEPS/LAWS — PASS. No package.json/lock or Go changes (no new deps, Law 1; no seam/route changes, Law 8; N/A Law 7). Doc decision appended in docs/go/12_web_ui.md:418 in the same change (Law 12). One nit (non-blocking): the doc phrase 'so no JSX churn' slightly understates the 4 hook-class touches — the ordering claim itself is accurate.

TESTS (scratch worktree /tmp/pr125, symlinked node_modules — no browser per review instructions): node --test web/test/unit/*.test.js → 257/257 pass; vite build → clean (110 modules, CSS+JS emitted). Initial 2 failures were missing node_modules in the fresh worktree only, resolved via symlink, unrelated to the PR.

MERGE RECOMMENDATION: ready to merge.

PR #125 review (branch fix/issue-115, commit d2d71a4) — opaque dropdown panels + styled scrollbars. OPACITY — PASS. web/src/ui.css:99 groups .clone-body/.ref-drop/.tasks-drop/.notif-drop/.reaction-drop/.label-drop/.close-drop with bg-white/dark:bg-zinc-900. Verified in compiled vite output: .card dark rule is `.card:where(.dark,.dark *)` (0,1,0, zinc-900/70 translucent) and the override is `:is(...):where(.dark,.dark *)` (also 0,1,0) emitted later in @layer components, so it wins in both themes. Light mode is bg-white on both sides (no-op). BEFORE screenshot confirms the bug (refs list with page text bleeding through). COVERAGE — PASS, none missed. Grep of web/src for floating .card popovers finds exactly 7, all carrying a hook class: Repo.jsx:96 (clone-body, pre-existing), Repo.jsx:269 (ref-drop, pre-existing), Repo.jsx:431 (tasks-drop, pre-existing), NotificationTray.jsx:89, ReactionMenu.jsx:112, LabelPicker.jsx:92, CommentComposer.jsx:91 (4 added by this PR). Only other translucent floaters are .site-header (intentional backdrop-blur) and .tray-entry (fixed error tray, out of scope). SCROLLBARS — PASS. .scroll-slim (ui.css:105-110) sets Firefox scrollbar-width:thin + scrollbar-color plus ::-webkit-scrollbar width/track/thumb, with .dark overrides for both engines (zinc-400/300 light, zinc-600/700 dark). Applied on the actual scroll containers: ref-list (Repo.jsx:287), label menu + notif tray (same element as overflow-y-auto). Reaction/close/tasks menus are not scrollable — correctly excluded. CLASS-ONLY — PASS. Each JSX diff is a single class-attribute token add; no logic/behavior/ARIA change. DEPS/LAWS — PASS. No package.json/lock or Go changes (no new deps, Law 1; no seam/route changes, Law 8; N/A Law 7). Doc decision appended in docs/go/12_web_ui.md:418 in the same change (Law 12). One nit (non-blocking): the doc phrase 'so no JSX churn' slightly understates the 4 hook-class touches — the ordering claim itself is accurate. TESTS (scratch worktree /tmp/pr125, symlinked node_modules — no browser per review instructions): node --test web/test/unit/*.test.js → 257/257 pass; vite build → clean (110 modules, CSS+JS emitted). Initial 2 failures were missing node_modules in the fresh worktree only, resolved via symlink, unrelated to the PR. MERGE RECOMMENDATION: ready to merge.
Author
Owner

Fixed by PR #125 (review: specificity + coverage verified in compiled output; 257/257 node tests), merged. Closing.

Fixed by PR #125 (review: specificity + coverage verified in compiled output; 257/257 node tests), merged. Closing.
crueber added this to the v1 milestone 2026-09-10 22:27:19 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
crueber/walhub#115
No description provided.