Skip to content

fix(desktop): pin feedback-rail to grid column 2 - #12

Open
nycterent wants to merge 2 commits into
kieranklaassen:mainfrom
nycterent:fix/desktop-rail-grid-column
Open

fix(desktop): pin feedback-rail to grid column 2#12
nycterent wants to merge 2 commits into
kieranklaassen:mainfrom
nycterent:fix/desktop-rail-grid-column

Conversation

@nycterent

Copy link
Copy Markdown

Problem

Opening a website in the desktop recorder makes the entire feedback rail (capture toggles, consent, Start recording) disappear — the right ~354px goes blank. The app looks like it has no controls once you load the site you want to record.

Root cause

.workspace is a two-column grid: grid-template-columns: 1fr var(--rail-width) — column 1 is .empty-state, column 2 is .feedback-rail.

On navigation the renderer runs emptyState.hidden = hasWebsite (src/renderer.ts). The global [hidden] { display: none !important; } rule removes the empty-state from the grid entirely. With only one child left, the grid auto-places .feedback-rail into column 1 (1fr) — which is exactly where the website WebContentsView is composited on top. The rail ends up hidden behind the site, and column 2 is left empty (blank paper strip).

This is invisible to webContents.capturePage(), since that captures only the page layer and not the child website view composited over it — so the bug only shows on screen.

Fix

Pin the grid placement so removing the empty-state can't reflow the rail:

.empty-state   { grid-column: 1; }
.feedback-rail { grid-column: 2; }

Test plan

  • No site: rail renders in column 2 (unchanged)
  • Load a site: rail stays in column 2 alongside the website view (was vanishing)
  • npm run typecheck clean, npm test 32/32 pass
  • Verified on a packaged .app (GPU-on), not just dev

🤖 Generated with Claude Code

When a website loads, the renderer sets emptyState.hidden = true. The
[hidden] rule (display:none) removes the empty-state from the .workspace
grid, so the lone remaining child (.feedback-rail) auto-placed into
column 1 (1fr) — directly under the website WebContentsView overlay —
hiding the recording controls and leaving column 2 blank.

Pin .empty-state to column 1 and .feedback-rail to column 2 so removing
the empty-state can no longer reflow the rail.

capturePage() masked this because it does not composite the child
website view over the page.
Copilot AI review requested due to automatic review settings June 19, 2026 21:48

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Fixes a desktop-recorder layout bug where the feedback rail disappears behind the composited website view after navigation, by preventing grid auto-placement from moving the rail into column 1 when the empty-state is hidden.

Changes:

  • Explicitly pins .empty-state to grid column 1.
  • Explicitly pins .feedback-rail to grid column 2 to keep controls visible when .empty-state is removed via [hidden].

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Reads the real styles.css/index.html and asserts the workspace stays a
two-column grid, the rail is pinned to column 2 (and empty-state to
column 1), and both are direct grid children. Fails if the pin is
removed — the exact regression that hid the recording controls when a
site loaded.
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.

2 participants