Summary
On the New Chat / landing screen the welcome splash (the "⚓ Odysseus / Yours for the voyage" branding, tip, and the incognito "Nobody" button) is invisible, even though #welcome-screen is fully rendered (opacity:1, laid out, content present). It briefly flashes into view when opening an existing chat, then disappears — the tell of an occlusion, not a paint or visibility bug.
Root cause
#welcome-screen is position:absolute with no z-index. Two develop-only fork changes to .chat-history combine to paint the (empty) chat log over it:
contain: layout style (7ad973f6) makes .chat-history a stacking context, lifting it to the same paint level as the positioned welcome screen.
background: var(--bg) (667c1006, a compositor tile-fill workaround) makes it opaque.
#chat-history comes later in the DOM (index.html:1021) than #welcome-screen (index.html:979), so at equal stacking level the log paints on top and hides the splash. The flash-on-open is selectSession fading #chat-history to opacity:0 for 120 ms, briefly exposing the splash before the chat covers it.
Upstream has neither contain nor background on .chat-history, so its chat log stays below the positioned splash — which is why upstream shows the welcome screen and the fork does not.
Fix
Give the overlay an explicit z-index: 1 on #welcome-screen so it paints above the chat log's containment layer. Keeps both fork optimizations (the Qt contain fix and the background) and carries no tile-fill risk. Regression guard added asserting #welcome-screen declares a z-index.
Classification
Develop-only fork regression (the containment/background live only on develop, not on the #2 branch or upstream). Fix lands on develop; no upstream PR.
Summary
On the New Chat / landing screen the welcome splash (the "⚓ Odysseus / Yours for the voyage" branding, tip, and the incognito "Nobody" button) is invisible, even though
#welcome-screenis fully rendered (opacity:1, laid out, content present). It briefly flashes into view when opening an existing chat, then disappears — the tell of an occlusion, not a paint or visibility bug.Root cause
#welcome-screenisposition:absolutewith noz-index. Two develop-only fork changes to.chat-historycombine to paint the (empty) chat log over it:contain: layout style(7ad973f6) makes.chat-historya stacking context, lifting it to the same paint level as the positioned welcome screen.background: var(--bg)(667c1006, a compositor tile-fill workaround) makes it opaque.#chat-historycomes later in the DOM (index.html:1021) than#welcome-screen(index.html:979), so at equal stacking level the log paints on top and hides the splash. The flash-on-open isselectSessionfading#chat-historytoopacity:0for 120 ms, briefly exposing the splash before the chat covers it.Upstream has neither
containnorbackgroundon.chat-history, so its chat log stays below the positioned splash — which is why upstream shows the welcome screen and the fork does not.Fix
Give the overlay an explicit
z-index: 1on#welcome-screenso it paints above the chat log's containment layer. Keeps both fork optimizations (the Qtcontainfix and the background) and carries no tile-fill risk. Regression guard added asserting#welcome-screendeclares az-index.Classification
Develop-only fork regression (the containment/background live only on develop, not on the #2 branch or upstream). Fix lands on develop; no upstream PR.