Skip to content

Commit 05bdcc3

Browse files
committed
fix: only the active service renders — wrong page shown, and slowness
Clicking WhatsApp left Claude on screen while the address bar said web.whatsapp.com, and the app felt sluggish. Same cause for both. `.pane webview` declared `visibility: visible`. CSS visibility inherits, and an explicit `visible` on a child overrides a hidden ancestor — so every webview un-hid itself inside its hidden pane. All services rendered at once, stacked absolutely, and you saw whichever painted last. Chromium also never throttled them, since none were occluded. Measured before: four panes, four webviews `visible`, all full size. After: exactly one visible, three hidden, CPU 0% across the board. Also removes the global `webview { visibility: hidden }` / `webview.active` rules. They predate the pane wrapper and key off a class nothing sets any more; with the child rule gone they were hiding the active service too. Verified through single view, split, spotlight, back to single, and clicking each service in turn.
1 parent 4b328a9 commit 05bdcc3

3 files changed

Lines changed: 11 additions & 9 deletions

File tree

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "panebox",
33
"productName": "Panebox",
4-
"version": "2.2.0",
4+
"version": "2.2.1",
55
"description": "A small, private, open-source desktop deck for your web apps — AI tools, chat, mail and more in one window.",
66
"main": "main.js",
77
"license": "MIT",

styles.css

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -220,11 +220,9 @@ body.platform-darwin #sidebar { padding-top: 44px; }
220220
#view-wrap { flex: 1; display: flex; position: relative; overflow: hidden; }
221221
#view-container { flex: 1; position: relative; overflow: hidden; background: var(--bg); }
222222

223-
webview {
224-
position: absolute; inset: 0; width: 100%; height: 100%;
225-
border: none; visibility: hidden;
226-
}
227-
webview.active { visibility: visible; }
223+
/* Visibility is owned by the pane wrapper now — see `.pane` below. The old
224+
rules here predated panes and still keyed off `.active` on the webview
225+
itself, which nothing sets any more. */
228226

229227
/* ------------------------------------------------------------ todo panel */
230228

@@ -632,7 +630,11 @@ body.reordering webview { pointer-events: none; }
632630
paints, so the header appeared to exist and then vanish. */
633631
position: relative; inset: auto;
634632
flex: 1; min-height: 0; width: 100%; height: auto;
635-
border: none; visibility: visible;
633+
border: none;
634+
/* Deliberately no `visibility` here. It inherits, so declaring `visible` let
635+
every webview un-hide itself inside its hidden pane: all services rendered
636+
at once, stacked, and you saw whichever painted last rather than the one
637+
you clicked. It also meant Chromium never throttled the background ones. */
636638
}
637639
.pane-head { display: none; }
638640

0 commit comments

Comments
 (0)