/* Oversized, continuous cloud fields: no tiled SVG or straight texture seams. */
html::after,html::before{content:'';position:fixed;inset:-18%;z-index:1000;pointer-events:none;opacity:0;transition:opacity 1.8s cubic-bezier(.22,.61,.36,1),transform 2.4s ease;will-change:opacity,transform}
html::after{background:radial-gradient(ellipse at 25% 65%,#24385b 0,transparent 57%),radial-gradient(ellipse at 80% 25%,#302c53 0,transparent 60%),#08152b;transform:scale(1.03)}
html::before{z-index:1001;background:radial-gradient(ellipse at 12% 70%,#487bbd55 0,transparent 34%),radial-gradient(ellipse at 48% 38%,#6b80ce4d 0,transparent 38%),radial-gradient(ellipse at 88% 72%,#427bb955 0,transparent 40%),radial-gradient(ellipse at 68% 12%,#7662b947 0,transparent 32%);filter:blur(24px);transform:translate(-4%,4%) scale(1.12)}
html.dream-leaving::after,html.dream-arriving::after{opacity:1;transform:scale(1)}
html.dream-leaving::before,html.dream-arriving::before{opacity:1;transform:translate(3%,-3%) scale(1.03)}
html.dream-leaving::after,html.dream-leaving::before{transition-duration:1.2s}
html.dream-arriving body{visibility:hidden}
@media(prefers-reduced-motion:reduce){html::after,html::before{transition:opacity .15s linear;transform:none!important}html::before{display:none}}
html.dream-arriving::after,html.dream-arriving::before{animation:dream-failsafe .25s 12s forwards}
html.dream-arriving body{animation:dream-show .01s 12s forwards}
@keyframes dream-failsafe{to{opacity:0}}
@keyframes dream-show{to{visibility:visible}}

/* Native pixel canvas replaces the fallback veil only while the renderer is active. */
.dream-pixel-veil{position:fixed;inset:0;width:100%;height:100%;z-index:1002;pointer-events:none;image-rendering:pixelated;visibility:visible!important}
.dream-pixel-veil[hidden]{display:none!important}
html.dream-pixel-active::after,html.dream-pixel-active::before{display:none}
@media(prefers-reduced-motion:reduce){.dream-pixel-veil{display:none}}