.djjc-scene-host {
    position: relative;
    box-sizing: border-box;
    width: 100%;
    min-height: 100vh;
    margin: 0;
    padding: 0;
    border: 0;
    border-radius: 0;
    overflow: hidden;
    isolation: isolate;
}

/*
 * THE STILL. A plain image under the scene: on screen from the first paint,
 * covered when the scene reveals, and what stays when the scene cannot run
 * (data-djjc-state "still" or "error"). The scene's own module decides when it
 * has taken over; see disco-ball.css. No transition: the reveal is a cut.
 */
.djjc-scene-host > .djjc-scene-still {
    position: absolute;
    inset: 0;
    z-index: 0;
    display: block;
    margin: 0;
    pointer-events: none;
}

.djjc-scene-host > .djjc-scene-still img {
    display: block;
    width: 100%;
    height: 100%;
    max-width: none;
    object-fit: cover;
    object-position: center center;
}

[data-djjc-scene-placement="1"] {
    --scene-engine-transition-progress: 0;
}

.djjc-scene-status {
    display: none;
    position: relative;
    z-index: 10;
    margin: 1rem;
    padding: 0.75rem 1rem;
    border: 1px solid #c92a2a;
    border-radius: 4px;
    background: #fff5f5;
    color: #7d1a1a;
    font: 600 14px/1.4 system-ui, sans-serif;
}

.elementor-editor-active .djjc-scene-host[data-djjc-state="error"] > .djjc-scene-status,
.elementor-editor-active .djjc-scene-host[data-djjc-state="unavailable"] > .djjc-scene-status {
    display: block;
}

/*
 * THE MUSIC PLAYER -- assets/js/scene-engine-player.js.
 *
 * IN THIS FILE AND NOT A NEW ONE, ON PURPOSE. The player is enqueued with the
 * runtime and lives as long as the document does, exactly like the host and
 * status rules above; a second stylesheet would be a second handle, a second
 * dependency edge and a second thing WordPress can fail to send, for thirty
 * lines of CSS. The one stylesheet the runtime already guarantees is the
 * cheapest place that is certain to arrive.
 *
 * FIXED, NOT INSIDE A HOST. Positioning it inside the scene host would put the
 * transport inside the element the runtime destroys on navigation -- which is
 * the exact failure the player was moved out of the scene to avoid, arriving by
 * the CSS door instead of the JS one. Fixed to the viewport, it survives the
 * host, and it lands where the storyboards put it because the scene host is
 * min-height: 100vh.
 */
.jcd-player {
    position: fixed;
    left: 50%;
    bottom: 6vh;
    z-index: 20;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 1.1rem;
    transform: translateX(-50%);
    color: #fff;
    /* The controls are interactive; the gap between them is not, so a pointer
     * that misses the button still reaches the carousel behind it. */
    pointer-events: none;
}

.jcd-player-volume {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    pointer-events: auto;
}

.jcd-player-speaker {
    display: block;
    width: 26px;
    height: 26px;
}

.jcd-player-speaker svg {
    display: block;
    width: 100%;
    height: 100%;
    fill: currentColor;
}

.jcd-player-level {
    width: 190px;
    max-width: 40vw;
    height: 4px;
    margin: 0;
    border-radius: 2px;
    background: rgba(255, 255, 255, 0.35);
    /* The browser's own track and thumb carry a colour scheme this scene has no
     * use for; appearance:none is what lets the two rules below draw it. */
    -webkit-appearance: none;
    appearance: none;
    cursor: pointer;
}

.jcd-player-level::-webkit-slider-thumb {
    width: 15px;
    height: 15px;
    border: 0;
    border-radius: 50%;
    background: #fff;
    -webkit-appearance: none;
    appearance: none;
}

.jcd-player-level::-moz-range-thumb {
    width: 15px;
    height: 15px;
    border: 0;
    border-radius: 50%;
    background: #fff;
}

.jcd-player-transport {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 62px;
    height: 62px;
    padding: 0;
    border: 0;
    border-radius: 50%;
    background: #000;
    color: #fff;
    cursor: pointer;
    pointer-events: auto;
}

.jcd-player-transport svg {
    display: block;
    width: 26px;
    height: 26px;
    fill: currentColor;
}

.jcd-player-transport:focus-visible {
    outline: 2px solid #fff;
    outline-offset: 3px;
}
