Skip to content

UI/CSS fixes: focus rings, search fields, column dropdown, theme accordion#954

Merged
Psychotoxical merged 6 commits into
mainfrom
fix/css-fixes
Jun 2, 2026
Merged

UI/CSS fixes: focus rings, search fields, column dropdown, theme accordion#954
Psychotoxical merged 6 commits into
mainfrom
fix/css-fixes

Conversation

@Psychotoxical
Copy link
Copy Markdown
Owner

Summary

  • Keyboard focus rings no longer clipped. The global ring was drawn outside the element (positive outline-offset), so any ancestor with overflow:hidden or a scroll container cut it off (cards, rails, player bar, queue tabs, search fields). It's now inset from one shared --focus-ring-* knob; cards draw the ring above their cover (which would otherwise paint over an inset outline); ~6 scattered per-component focus styles fold onto the same knob.
  • Search fields unified. Page search, Help search and Settings search now share one look: radius-md, ctp-base background, accent border + soft accent-dim focus glow, no inner double ring.
  • Column dropdown no longer clipped on short lists. The column-visibility menu was an absolutely-positioned element inside the tracklist, so a one-song list (e.g. Favorites → Songs) clipped it. It now renders in a portal with fixed positioning anchored to the trigger (flips up when there's no room below), in the shared TracklistColumnPicker — fixing albums, playlists and favorites at once. Adds a behaviour test.
  • Theme settings polish. The inner theme-category accordion now rounds its corners to continue the section card's rounding.

Test plan

  • npm test green (183 files, 1562 tests) + css-imports check.
  • Manual: tab through cards / buttons / queue tabs / player icons — focus ring sits inside and is never cut, including above album/song card covers. The three search fields match. Favorites → Songs with one song: column dropdown fully visible; playlists/albums dropdown still opens, toggles, closes on outside-click/Escape, follows on scroll. Theme accordion corners rounded.

Notes

  • Frontend only — no Tauri boundary change.

The global :focus-visible ring used a positive outline-offset, so it was
drawn outside the element and clipped by any ancestor with overflow:hidden
or a scroll container (cards, rails, player bar, queue strip). Draw it inset
instead via shared --focus-ring-* variables (single source). Cards draw the
ring as an overlay above the cover, since a cover's own stacking context
(transform/contain for render stability) would otherwise paint over an inset
outline. Dracula now only sets --focus-ring-color.
Six components declared their own :focus-visible outline (mostly an exact copy
of the old global ring). Remove the redundant ones so they inherit the global
inset ring; keep the custom-coloured ones (genre pill, playback-delay modal)
but source width/offset from --focus-ring-*; move the because-card ring to the
central card focus ring (it has a cover and needs the lifted treatment).
The theme picker's inner accordion had square corners, so the first (open)
group header ran flush into the rounded Theme card. Give .theme-accordion a
border-radius + overflow:hidden so its top/bottom corners continue the parent
card's rounding, matching the other settings sections.
Live-search, Help and Settings search differed (pill vs rounded-rect, glow vs
plain border-change, mismatched backgrounds). Align them on the canonical input
look: radius-md, ctp-base background, accent border + soft accent-dim focus
glow. Drop the live-search pill radius, and suppress the input's own inset ring
so only the outer cluster glow shows (no double ring).
The column-visibility dropdown was an absolutely-positioned menu inside the
tracklist, so a short list (e.g. a one-song Favorites view) clipped it via the
ancestor's overflow box. Render the menu in a portal to <body> with fixed
positioning anchored to the trigger (flips above when there's no room below),
following on scroll/resize. Outside-click + Escape close now live in the shared
TracklistColumnPicker (the menu is portalled out of the wrapper, so the old
wrapper-only check would have closed it on every in-menu click). Fixes albums,
playlists and favorites in one shared place. Adds a behaviour test.
@Psychotoxical Psychotoxical merged commit 40932d2 into main Jun 2, 2026
4 checks passed
@Psychotoxical Psychotoxical deleted the fix/css-fixes branch June 2, 2026 19:43
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