/* Camp-only backdrop: all existing controls remain above an inert, non-interactive layer. */
#lobby:has(>.camp-background){position:relative;isolation:isolate}
#lobby>.camp-background{position:fixed;inset:0;z-index:-1;overflow:hidden;pointer-events:none;user-select:none;zoom:1!important;background:var(--c-night-0,#10141c)}
#lobby>.camp-background[hidden]{display:none}
.camp-background-still,.camp-background-canvas{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:50% 50%;pointer-events:none}
.camp-background-still{image-rendering:auto}
.camp-background-canvas{opacity:0;image-rendering:pixelated;transition:opacity .3s linear}
.camp-background[data-mode="live"] .camp-background-canvas,.camp-background[data-mode="paused"] .camp-background-canvas{opacity:1}
.camp-background::after{content:"";position:absolute;inset:0;background:rgb(0 0 0 / 40%);pointer-events:none}
@media(prefers-reduced-motion:reduce){.camp-background-canvas{transition:none}}

/* Live pixels already contain the 40% darkening; one opaque layer replaces the R3 + scrim composition. */
.camp-background[data-mode="live"] .camp-background-still,.camp-background[data-mode="paused"] .camp-background-still{visibility:hidden}
.camp-background[data-mode="live"]::after,.camp-background[data-mode="paused"]::after{display:none}

/* Local review: one continuous camp world; remove the retired boxed stage/fire fallback. */
#lobby:has(>.camp-background:not([hidden])){background:none}
#lobby:has(>.camp-background:not([hidden])) .camp-scene{background:none}
#lobby:has(>.camp-background:not([hidden])) .camp-stage :is(.hero-glow,.pedestal,.camp-fire){display:none}
#lobby:has(>.camp-background:not([hidden])) .camp-stage .stage-portrait{filter:drop-shadow(0 7px 4px rgb(0 0 0 / 45%))}

/* First qualification/loading uses the world tone, never a title-art flash. */
.camp-background:not([data-mode="static"]) .camp-background-still{visibility:hidden}
.camp-background[data-mode="ready"] .camp-background-canvas{opacity:1}
.camp-background[data-mode="ready"]::after{display:none}

/* Keep non-home copy readable over the static mobile/reduced fallback. */
#lobby:not(:has(>#main-content>.camp-home))>.camp-background[data-mode="static"]::after{background:rgb(0 0 0 / 78%)}
