diff --git a/packages/pi-tui/src/overlay-layout.ts b/packages/pi-tui/src/overlay-layout.ts index d3c2d8b6a..ee614f094 100644 --- a/packages/pi-tui/src/overlay-layout.ts +++ b/packages/pi-tui/src/overlay-layout.ts @@ -324,10 +324,12 @@ export function compositeOverlays( const viewportStart = Math.max(0, workingHeight - termHeight); - // Apply backdrop dimming if any visible overlay requests it + // Apply backdrop dimming if any visible overlay requests it. + // Uses dim + dark gray background (256-color 233) so the overlay pops visually. const hasBackdrop = visibleEntries.some((e) => e.options?.backdrop); if (hasBackdrop) { - const dimFn = (text: string) => `\x1b[2m${text}\x1b[22m`; + const dimFn = (text: string) => + `\x1b[2m\x1b[38;5;242m\x1b[48;5;233m${text}\x1b[49m\x1b[39m\x1b[22m`; for (let i = viewportStart; i < result.length; i++) { if (!isImageLine(result[i]) && result[i].length > 0) { result[i] = applyBackgroundToLine(result[i], termWidth, dimFn); diff --git a/src/resources/extensions/gsd/notification-overlay.ts b/src/resources/extensions/gsd/notification-overlay.ts index 6ab73f729..412e68023 100644 --- a/src/resources/extensions/gsd/notification-overlay.ts +++ b/src/resources/extensions/gsd/notification-overlay.ts @@ -157,18 +157,12 @@ export class GSDNotificationOverlay { } const content = this.buildContentLines(width); - const viewportHeight = Math.max(5, process.stdout.rows ? process.stdout.rows - 8 : 24); - const chromeHeight = 2; // top + bottom border - const visibleContentRows = Math.max(1, viewportHeight - chromeHeight); + const maxVisibleRows = Math.max(5, process.stdout.rows ? process.stdout.rows - 8 : 24) - 2; + const visibleContentRows = Math.min(content.length, maxVisibleRows); const maxScroll = Math.max(0, content.length - visibleContentRows); this.scrollOffset = Math.min(this.scrollOffset, maxScroll); const visibleContent = content.slice(this.scrollOffset, this.scrollOffset + visibleContentRows); - // Pad to fill viewport so the overlay covers underlying content - while (visibleContent.length < visibleContentRows) { - visibleContent.push(""); - } - const lines = this.wrapInBox(visibleContent, width); this.cachedWidth = width;