/*
 * K28 / LIVING FILAMENT ARTEFACT
 * The WebGL stage is progressively enhanced by pointcloud-motion-v2.js and
 * remains inert when rendering is unavailable or the URL carries ?pointcloud=off.
 */

html.k28-pointcloud-test .ix-visual-field {
    isolation: isolate;
}

.k28-pointcloud-stage {
    position: fixed;
    inset: 0;
    z-index: 1;
    width: 100%;
    height: 100%;
    overflow: hidden;
    pointer-events: none;
    contain: strict;
    opacity: 0;
    transition: opacity 1.8s cubic-bezier(0.22, 1, 0.36, 1);
}

.k28-pointcloud-stage.is-ready {
    opacity: 0.76;
}

.k28-pointcloud-canvas {
    position: absolute;
    inset: 0;
    display: block;
    width: 100%;
    height: 100%;
    pointer-events: none;
}

html.k28-pointcloud-test .ix-infinite-field {
    z-index: 1;
}

html.k28-pointcloud-test .ix-flock {
    z-index: 2;
}

html.k28-pointcloud-test .ix-chromatic {
    z-index: 3;
}

html.k28-pointcloud-test body.ix-ready[data-ix-view="manifesto"] .k28-pointcloud-stage.is-ready {
    opacity: 1;
}

html.k28-pointcloud-test body.ix-ready[data-ix-view="manifesto"][data-ix-layout="rail"] .k28-pointcloud-stage.is-ready {
    opacity: 0.48;
}

html.k28-pointcloud-test body.ix-ready[data-ix-view="manifesto"][data-ix-layout="ghost"] .ix-flock {
    opacity: 0.24;
}

html.k28-pointcloud-test body.ix-ready[data-ix-view="manifesto"][data-ix-layout="ghost"] .ix-infinite-field {
    opacity: 0.48;
}

html.k28-pointcloud-test body.ix-ready[data-ix-view="manifesto"][data-ix-layout="ghost"] .ix-infinite-window {
    border-color: rgba(238, 238, 234, 0.2);
}

html.k28-pointcloud-test body.ix-ready[data-ix-view="manifesto"][data-ix-layout="ghost"] .ix-infinite-window::before {
    border-bottom-color: rgba(238, 238, 234, 0.16);
    color: rgba(238, 238, 234, 0.5);
}

html.k28-pointcloud-test body.ix-ready[data-ix-view="manifesto"][data-ix-layout="ghost"] .ix-screen-line {
    color: rgba(238, 238, 234, 0.42);
}

/* The living filament belongs to Manifesto only. Other sections are authored
   visual environments and must never inherit or composite its canvas. */
html.k28-pointcloud-test body.ix-route-owns-background > .k28-pointcloud-stage,
html.k28-pointcloud-test body.ix-ready:not([data-ix-view="manifesto"]) > .k28-pointcloud-stage,
body.artwork-viewer-open .ix-visual-field,
body.artwork-viewer-open > .k28-pointcloud-stage {
    display: none !important;
    visibility: hidden !important;
    opacity: 0 !important;
    pointer-events: none !important;
}

body.artwork-viewer-open :is(
    #pip-root,
    .pip-pow,
    .momentum-launcher,
    .ix-karate-lab,
    .ix-layout-switcher,
    .ix-terminal
) {
    visibility: hidden !important;
    opacity: 0 !important;
    pointer-events: none !important;
}

html.k28-pointcloud-test body.ix-motion-paused .k28-pointcloud-stage,
html.k28-pointcloud-test body.ai-films-viewer-open .k28-pointcloud-stage,
html.k28-pointcloud-test body.k28os-immersive .k28-pointcloud-stage {
    opacity: 0.025;
}

/* Screenshot-only calibration state. The normal preview URL does not enable
   this class, so PIP remains fully available to the user. */
html.k28-pointcloud-review #pip-root,
html.k28-pointcloud-review .pip-pow {
    visibility: hidden !important;
}

@media (max-width: 700px) {
    html.k28-pointcloud-test body.ix-ready[data-ix-view="manifesto"] .k28-pointcloud-stage.is-ready {
        opacity: 0.92;
    }

    html.k28-pointcloud-test body.ix-ready[data-ix-view="manifesto"] .ix-flock {
        opacity: 0.26;
    }
}

@media (prefers-reduced-motion: reduce) {
    .k28-pointcloud-stage {
        transition: none;
    }

    html.k28-pointcloud-test body.ix-ready[data-ix-view="manifesto"] .k28-pointcloud-stage.is-ready {
        opacity: 0.28;
    }
}

/* The supplied floral film occupies the same inert Manifesto artwork layer. */
.k28-flower-stage .k28-flower-video {
    inset: auto;
    right: 4vw;
    top: 5vh;
    width: auto;
    height: 90vh;
    max-width: 60vw;
    object-fit: contain;
    object-position: center;
    /* Feather only the film's outer background into the existing dark field. */
    -webkit-mask-image: linear-gradient(to bottom, transparent, #000 7%, #000 82%, transparent), linear-gradient(to right, transparent, #000 9%, #000 91%, transparent);
    mask-image: linear-gradient(to bottom, transparent, #000 7%, #000 82%, transparent), linear-gradient(to right, transparent, #000 9%, #000 91%, transparent);
    -webkit-mask-composite: source-in;
    mask-composite: intersect;
}

@media (max-width: 700px) {
    .k28-flower-stage .k28-flower-video {
        top: 11vh;
        right: -4vw;
        width: 92vw;
        height: 78vh;
        max-width: none;
        opacity: 0.46;
    }
}

/* Measured moving-image study. All selectors belong to this artwork only. */
.k28-tracking-surface {
    position: absolute;
    left: 50%;
    top: 50%;
    width: 100vw;
    height: 100dvh;
    transform: translate(-50%, -50%);
    overflow: hidden;
    background: transparent;
}
.k28-tracking-stage .k28-tracking-surface {
    -webkit-mask-image: none;
    mask-image: none;
}
.k28-tracking-video, .k28-tracking-canvas, .k28-gaussian-live, .k28-tracking-poster {
    position: absolute;
    inset: 0;
    display: block;
    width: 100%;
    height: 100%;
    object-fit: contain;
}
.k28-tracking-poster { inset: 6% auto auto 6%; width: 88%; height: 88%; padding: 0; box-sizing: border-box; }
.k28-gaussian-live, .k28-tracking-video { display: none; }
.k28-tracking-surface.has-scene .k28-gaussian-live,
.k28-tracking-surface.is-local-video .k28-tracking-video { display: block; }
.k28-tracking-surface:is(.has-scene, .is-local-video) .k28-tracking-poster,
.k28-tracking-surface.is-local-video .k28-gaussian-live { display: none; }
.k28-tracking-video { filter: none; }
.k28-tracking-canvas { pointer-events: none; }
.k28-tracking-controls {
    position: fixed;
    z-index: 8250;
    right: 24px;
    bottom: 18px;
    display: flex;
    align-items: center;
    gap: 16px;
    color: #cad6d2;
    font: 9px/1.4 "IBM Plex Mono", monospace;
    letter-spacing: .06em;
}
.k28-tracking-controls[hidden] { display: none !important; }
.k28-tracking-controls button, .k28-tracking-dialog button, .k28-tracking-file-label {
    appearance: none;
    border: 1px solid #60706c;
    border-radius: 0;
    padding: 9px 12px;
    background: #091011;
    color: #e5e9e2;
    font: 10px/1.3 "IBM Plex Mono", monospace;
    letter-spacing: .02em;
    cursor: pointer;
    min-height: 36px;
}
.k28-tracking-controls button:hover, .k28-tracking-dialog button:hover, .k28-tracking-file-label:hover,
.k28-tracking-dialog button[aria-pressed="true"] { background: #c5dee0; color: #102127; }
.k28-tracking-controls button:focus-visible, .k28-tracking-dialog button:focus-visible, .k28-tracking-file-label:focus-within {
    outline: 2px solid #b4e2e6;
    outline-offset: 3px;
}
.k28-tracking-dialog {
    box-sizing: border-box;
    width: min(1100px, 94vw);
    height: min(1000px, 94dvh);
    max-width: 94vw;
    max-height: 94dvh;
    padding: 0;
    margin: auto;
    border: 1px solid #3e4c4a;
    background: transparent;
    color: #e5e9e2;
    overflow: hidden;
    font: 10px/1.5 "IBM Plex Mono", monospace;
}
.k28-tracking-dialog[open] { display: flex; flex-direction: column; }
.k28-tracking-dialog::backdrop { background: rgba(3,7,8,.42); backdrop-filter: blur(8px); }
.k28-tracking-dialog header, .k28-tracking-dialog footer {
    display: flex;
    flex: none;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    padding: 14px 18px;
    border-bottom: 1px solid #293331;
    background: rgba(3,7,8,.86);
}
.k28-tracking-dialog header span { letter-spacing: .12em; }
.k28-tracking-dialog header small { display: block; color: #8a9c99; font-size: 10px; margin-top: 3px; }
.k28-tracking-dialog footer { border-top: 1px solid #293331; border-bottom: 0; }
.k28-tracking-focus-body { position: relative; flex: 1; min-height: 0; overflow: hidden; }
.k28-tracking-dialog .k28-tracking-surface {
    top: 50%;
    left: 50%;
    right: auto;
    height: 100%;
    width: auto;
    max-width: 100%;
    transform: translate(-50%, -50%);
    pointer-events: auto;
}
.k28-tracking-dialog .k28-tracking-video { filter: none; }
.k28-tracking-source-picker { display: flex; gap: 6px; flex-wrap: wrap; align-items: center; }
.k28-tracking-file-label { position: relative; display: inline-flex; align-items: center; box-sizing: border-box; }
.k28-tracking-file-label input { position: absolute; inset: 0; width: 100%; opacity: 0; cursor: pointer; }
.k28-tracking-help { margin: 0; padding: 0 18px 12px; color: #94a5a2; font-size: 10px; background: rgba(3,7,8,.86); }
@media (max-width: 700px) {
    .k28-tracking-stage .k28-tracking-surface { left: 50%; top: 50%; opacity: .8; }
    .k28-tracking-controls { right: 12px; bottom: 66px; }
    .k28-tracking-control-label { display: none; }
    .k28-tracking-controls button { min-height: 40px; }
    .k28-tracking-dialog { width: 100vw; max-width: 100vw; height: 100dvh; max-height: 100dvh; border: 0; }
    .k28-tracking-dialog header, .k28-tracking-dialog footer { padding: 12px; }
    .k28-tracking-dialog header button { min-height: 42px; }
    .k28-tracking-dialog footer { align-items: flex-end; }
    .k28-tracking-dialog button, .k28-tracking-file-label { font-size: 9px; padding: 9px; min-height: 40px; }
    .k28-tracking-dialog .k28-tracking-surface { height: auto; width: 100%; max-height: 100%; }
}
