fix: correct observation embedding and orphan waiting state

This commit is contained in:
2026-09-15 07:50:07 -07:00
parent 9884a5beb2
commit f163de2643
2 changed files with 30 additions and 0 deletions
@@ -2445,9 +2445,37 @@ body.surface-observation > main {
body.surface-observation .observation-overlay {
position: fixed;
inset: 0;
/* The NGN pane is already the surface viewport. Do not retain the console
overlay's centered 16:9 box, transform, or its outside-pane letterbox. */
width: auto;
height: auto;
transform: none;
box-shadow: none;
z-index: 1;
}
/* A secondary surface has no authority of its own. This is only shown after
its attach request times out; the inactive Observation controls stay hidden. */
body.surface-observation.surface-waiting::before {
content: "WAITING FOR EXHIBIT OWNER\A Observation surface is not connected.";
white-space: pre-line;
position: fixed;
inset: 0;
z-index: 2;
display: grid;
place-items: center;
padding: 2rem;
box-sizing: border-box;
background: #010308;
color: var(--tertiary-accent);
font-family: var(--mono-font);
font-size: clamp(.8rem, 1.4vw, 1.1rem);
letter-spacing: .12em;
line-height: 1.8;
text-align: center;
pointer-events: none;
}
/* Exiting/returning to the console is NGN's job (pane lifecycle), not the
surface's -- these controls would otherwise mutate the *console's* own
view.observation overlay flag from a stray click (report SS7/SS8). */
@@ -337,6 +337,7 @@ document.addEventListener('DOMContentLoaded', () => {
channelName: XZBTSurfaceMode.channelName(xzbtInstanceId),
timeoutMs: 1500,
onSnapshot: (values, stateRevision, registryRevision, presentation) => {
document.body.classList.remove('surface-waiting');
Object.keys(values || {}).forEach(target => applyPresentationState(target, values[target]));
if (presentation && typeof presentation.tickerText === 'string' && presentation.tickerText) {
const ticker = document.getElementById('observation-ticker-text');
@@ -368,6 +369,7 @@ document.addEventListener('DOMContentLoaded', () => {
// No console instance open on this channel (or a stale/unknown
// ?xi=). Degrade to a clear waiting state rather than inventing
// local authority (report SS9, Museum's proven behavior).
document.body.classList.add('surface-waiting');
console.warn('[SciFi-XZBT] Observation surface: no console instance found for xi=' + xzbtInstanceId);
}
});