From 4926df932498ffd87878fc46a685803ec385573e Mon Sep 17 00:00:00 2001 From: Jer Miller Date: Sun, 26 Jul 2026 17:33:25 -0600 Subject: [PATCH] fix(convey): isolate active workspace dialogs from shell chrome Dissolve the .workspace view-transition stacking context only while a managed dialog is open, and raise the active dialog above shell chrome with a new --z-active-dialog token. The modal layer inerts background branches with an ancestor-chain sibling walk and restores prior inert state exactly when the dialog closes or is removed. The managed set is body-wide [role="dialog"][aria-modal="true"] minus the shell-owned #talentViewModal and .report-error-modal dialogs, because Speakers mounts its backdrop directly to document.body. --- solstone/convey/static/app.css | 15 + solstone/convey/static/modal_layer.js | 333 ++++++++++++ solstone/convey/static/shell.html | 1 + tests/js/modal_layer_harness.js | 738 ++++++++++++++++++++++++++ tests/test_convey_modal_layer_js.py | 43 ++ tests/test_convey_shell_chrome.py | 34 ++ tests/test_convey_spa_shell.py | 1 + 7 files changed, 1165 insertions(+) create mode 100644 solstone/convey/static/modal_layer.js create mode 100644 tests/js/modal_layer_harness.js create mode 100644 tests/test_convey_modal_layer_js.py diff --git a/solstone/convey/static/app.css b/solstone/convey/static/app.css index ee80e724d..f3f6479b2 100644 --- a/solstone/convey/static/app.css +++ b/solstone/convey/static/app.css @@ -97,6 +97,11 @@ html { --z-modals: 200; /* Modal overlays */ --z-notifications: 300; /* Notifications, status pane, error log */ --z-tags: 400; /* Corner tags - topmost layer */ + /* + * Above .skip-link (9999) and presentation-mode body::after (9998); + * inert cannot disable that click-to-exit pseudo-element. + */ + --z-active-dialog: 10000; } body { @@ -113,6 +118,16 @@ body { margin-left: var(--menu-bar-width-minimal); } +body.has-managed-dialog .workspace { + view-transition-name: none; +} + +[data-convey-active-dialog], +[data-convey-active-dialog-host] { + /* App workspace