.intro-layer {
    position: fixed;
    inset: 0;
    z-index: 999;
    opacity: 0;
    visibility: hidden;
    pointer-events: none;
    transition: opacity var(--intro-fade, 600ms) ease-in-out, visibility var(--intro-fade, 600ms) ease-in-out;
}
.intro-layer.is-active {
    opacity: 1;
    visibility: visible;
    pointer-events: auto;
}

.intro-loading {
    z-index: 1000;
    background: #00000080;
    display: flex;
    align-items: center;
    justify-content: center;
}
.intro-loading:not(.is-active) {
    transition: opacity var(--intro-fade, 600ms) ease-in-out 50ms, visibility var(--intro-fade, 600ms) ease-in-out 50ms;
}
.intro-video-wrap {
    z-index: 998;
    background: #000;
    cursor: pointer;
}
/* 未激活时保持 visibility:visible，仅用 opacity 隐藏，否则 iOS 等移动端不会预缓冲视频 */
.intro-video-wrap:not(.is-active) {
    opacity: 0;
    visibility: visible;
    pointer-events: none;
}
.intro-video,
inline-video.intro-video {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
}
/* 自定义元素默认 inline，需显式 block 才能正确参与布局 */
inline-video {
    display: block;
}
.intro-main {
    position: fixed;
    inset: 0;
    z-index: 997;
    opacity: 0;
    visibility: hidden;
    pointer-events: none;
    overflow: hidden;
    transition: opacity var(--intro-fade, 600ms) ease-in-out, visibility var(--intro-fade, 600ms) ease-in-out;
}
.intro-main.is-active {
    opacity: 1;
    visibility: visible;
    pointer-events: auto;
    overflow: hidden;
}
/* 移动端激活后恢复文档流，支持页面纵向滚动；PC 保持 fixed 全屏，避免 Swiper 尺寸错乱 */
html.mobile .intro-main.is-active {
    position: relative;
    inset: auto;
    overflow: visible;
}
