body {
    overflow-x: hidden;
}

/* ===== 流动光斑层 ===== */
.aurora {
    position: fixed;
    inset: -20vmax;
    z-index: -2;
    filter: blur(80px);
    opacity: 0.9;
    pointer-events: none;
}

.aurora span {
    position: absolute;
    width: 45vmax;
    height: 45vmax;
    border-radius: 50%;
    will-change: transform;
}

.aurora .blob1 {
    left: 5%;
    top: 10%;
    background: radial-gradient(circle, rgba(56,189,248,.55), transparent 65%);
    animation: drift1 18s ease-in-out infinite alternate;
}

.aurora .blob2 {
    right: 0%;
    top: 30%;
    background: radial-gradient(circle, rgba(99,102,241,.5), transparent 65%);
    animation: drift2 22s ease-in-out infinite alternate;
}

.aurora .blob3 {
    left: 30%;
    bottom: 0%;
    background: radial-gradient(circle, rgba(168,85,247,.4), transparent 65%);
    animation: drift3 26s ease-in-out infinite alternate;
}

@keyframes drift1 {
    0%   { transform: translate(0, 0) scale(1); }
    100% { transform: translate(30vw, 20vh) scale(1.25); }
}

@keyframes drift2 {
    0%   { transform: translate(0, 0) scale(1.1); }
    100% { transform: translate(-25vw, 25vh) scale(0.85); }
}

@keyframes drift3 {
    0%   { transform: translate(0, 0) scale(0.9); }
    100% { transform: translate(20vw, -25vh) scale(1.3); }
}

/* ===== 点阵 Canvas ===== */
#dot-grid {
    position: fixed;
    inset: 0;
    z-index: -1;
    pointer-events: none;
}

@media (prefers-reduced-motion: reduce) {
    .aurora span { animation: none; }
}
