fix(scrollbar): make .app-scrollbar override component-scoped overflow

Two issues kept the scrollbar invisible on the global Favorites and
Recently viewed live-tv lists:

1. The wrong files. The visible Favorites/Recent pages render through
   <app-global-favorites-list> from portal/shared/ui (and the
   workspace-shell variant), not the channel-list-container's tabs.
   Apply .app-scrollbar to both of those components.

2. Specificity. Component CSS gets an Angular [_ngcontent-xxx]
   attribute selector, so `.nav-list { overflow-y: auto }` resolves to
   (0,2,0) — same as the doubled `.app-scrollbar.app-scrollbar` and
   wins on source order (component CSS loads after globals). Mark
   overflow-y: scroll !important on the utility so the contract holds:
   applying .app-scrollbar always reserves the gutter.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Entire-Checkpoint: 8ae011808369
This commit is contained in:
4grayandClaude Opus 4.7 committed 2026-04-29 01:13:58 +02:00
1 parent 6c0c04bcba
commit 2db99769f9
3 files changed
+14 -7

No files matched your search

+12 -5
View File
@@ -29,16 +29,22 @@
// Always-visible themed scrollbar. Apply to scroll containers that should
// reserve gutter and not rely on macOS overlay scrollbars (which auto-fade).
.app-scrollbar {
overflow-y: scroll;
// Selector is doubled (.app-scrollbar.app-scrollbar) throughout so the rules
// outrank both component-scoped overflow declarations and the global
// `.dark-theme ::-webkit-scrollbar` block below.
.app-scrollbar.app-scrollbar {
// !important so the utility wins over component-scoped overflow rules
// (Angular ViewEncapsulation adds an attribute selector that pushes
// host specificity above the doubled class selector).
overflow-y: scroll !important;
scrollbar-gutter: stable;
scrollbar-width: thin;
scrollbar-color: color-mix(in srgb, var(--app-muted-color) 55%, transparent)
transparent;
&::-webkit-scrollbar {
width: 8px;
height: 8px;
width: 10px;
height: 10px;
}
&::-webkit-scrollbar-track {
@@ -48,12 +54,13 @@
&::-webkit-scrollbar-thumb {
background-color: color-mix(
in srgb,
var(--app-muted-color) 55%,
var(--app-muted-color) 70%,
transparent
);
border-radius: 999px;
border: 2px solid transparent;
background-clip: content-box;
min-height: 32px;
&:hover {
background-color: var(--app-muted-color);
@@ -1,5 +1,5 @@
<div
class="nav-list"
class="nav-list app-scrollbar"
cdkDropList
[cdkDropListDisabled]="!canDragDrop()"
(cdkDropListDropped)="onDrop($event)"
@@ -13,7 +13,7 @@
</mat-form-field>
</div>
<div class="nav-list" cdkDropList (cdkDropListDropped)="onDrop($event)">
<div class="nav-list app-scrollbar" cdkDropList (cdkDropListDropped)="onDrop($event)">
@if (enrichedChannels().length === 0) {
<div class="empty-state">
<mat-icon class="empty-icon">star_border</mat-icon>