/* F1 — the door stage (deck seat F1, 2026-08-19).
 *
 * The stage is a hidden layer INSIDE the frame that already holds the
 * agent's still (the profile hero wrap, the use-door face panel, the v2
 * avatar tile, the marketplace card photo). It takes exactly that frame's
 * box — geometry classes per surface below, never a size of its own — so
 * revealing a live face over the still moves nothing on the page: zero
 * layout shift by construction. [hidden] stays authoritative until the
 * chosen renderer reports it is live; every failure path leaves the still
 * exactly as the blade painted it.
 *
 * Loaded only when ai.features.alive_door_stage is on (the partial pushes
 * it); the flag-off render carries none of these bytes. */

.ns-door-stage {
    overflow: hidden;
    background: #1a1a1a;
}

.ns-door-stage[hidden] {
    display: none;
}

/* Surfaces whose frame is a positioned box the stage simply fills. */
.ns-door-stage--fill {
    position: absolute;
    inset: 0;
}

/* Every lane paints edge to edge in the frame: the 2D element, the kinetic
   canvas, the VRM host holder and its GL canvas. */
.ns-door-stage netshow-alive,
.ns-door-stage .ns-door-stage__lane {
    display: block;
    width: 100%;
    height: 100%;
}

.ns-door-stage .ns-door-stage__gl {
    position: absolute;
    inset: 0;
    width: 100% !important;
    height: 100% !important;
    display: block;
}

/* Profile v2's avatar tile is overflow:hidden but not positioned; the stage
   needs a positioning context there. 104px is under the 2D legibility floor
   (the loader knows), so this tile hosts the VRM head-shot or the still. */
.ns-profile__avatar {
    position: relative;
}

/* The use door's face panel already positions .nsk-alive-mount inset:0 —
   the stage reuses that geometry class; nothing to add. */

/* Print: never leave a blank frame — drop the stage, the still stands. */
@media print {
    .ns-door-stage { display: none !important; }
}

/* A guest who asked for less motion never sees the stage at all — the
   loader also stands down, this is the no-script belt for it. */
@media (prefers-reduced-motion: reduce) {
    .ns-door-stage { display: none !important; }
}
