diff --git a/apps/mana/apps/web/src/lib/components/EncryptionIntroBanner.svelte b/apps/mana/apps/web/src/lib/components/EncryptionIntroBanner.svelte index e40a7a99b..33e6726bc 100644 --- a/apps/mana/apps/web/src/lib/components/EncryptionIntroBanner.svelte +++ b/apps/mana/apps/web/src/lib/components/EncryptionIntroBanner.svelte @@ -16,9 +16,17 @@ "you understand and accept what's happening" social contract that encryption-at-rest requires. - The component is mounted once at the root layout. It self-checks - the vault state on mount and via a small interval, so it can fire - even if the unlock happens asynchronously after the layout renders. + The component is mounted inside the bottom-stack of (app)/+layout.svelte + (NOT the root layout) so it shares the stack's reflow with the + QuickInputBar / TagStrip / PillNav and can't end up rendered + behind them. Earlier the banner used its own `position: fixed` + with z-index 60, which the QuickInputBar's higher stacking context + covered up — fix was to make positioning the parent's job. + + It self-checks the vault state on mount and via a small interval, + so it can fire even if the unlock happens asynchronously after the + layout renders. Guests never see it because isVaultUnlocked() + returns false until a real master key is loaded. NOTE: The flag uses a constant string instead of a STORAGE_KEYS import because the central storage-keys file was removed in a @@ -112,13 +120,14 @@ {/if}