/* The reception remains at its final full-screen size throughout arrival. */
.portal-veil{position:fixed;inset:0;z-index:1001;overflow:hidden;pointer-events:none;opacity:1;background:transparent}
.portal-light{position:absolute;inset:0;pointer-events:none;background:radial-gradient(ellipse at var(--portal-x,50%) var(--portal-y,50%),#fff5e6ee 0%,#f7dbad99 18%,#dfc9a52b 40%,transparent 68%);transform-origin:var(--portal-x,50%) var(--portal-y,50%);opacity:0}
.portal-veil[data-departure] .portal-light{animation:portal-light-spread 1.9s cubic-bezier(.25,.1,.25,1) both}
.portal-veil[data-covered] .portal-solid{opacity:1}
.portal-cloud{position:absolute;inset:-18%;width:136%;height:136%;object-fit:fill;opacity:0;filter:none;transition:opacity .45s ease;animation:portal-cloud-swirl 3.8s linear infinite alternate;will-change:transform}
.portal-cloud-back{animation-direction:alternate-reverse;animation-duration:5.1s;animation-delay:-1.4s;mix-blend-mode:screen}
.portal-veil[data-covered] .portal-cloud{opacity:.8}
.portal-veil[data-revealing] .portal-cloud{opacity:0;transition:opacity 1.25s ease-out}
.portal-veil[data-revealing] .portal-cloud-back{transition-duration:1.5s}
.portal-veil[data-arrival]{opacity:1;background:transparent}
/* A solid veil fades first, while larger cloud patches linger afterwards. */
.portal-veil[data-arrival][data-revealing]{opacity:1;background:transparent}
/* No expanding circular reveal: the cover clears quickly, clouds drift on. */
.portal-solid{position:absolute;inset:-8%;width:116%;height:116%;object-fit:fill;opacity:0;transition:opacity .65s cubic-bezier(.4,0,.2,1);animation:portal-cloud-drift 5.5s ease-in-out infinite alternate}
.portal-veil[data-arrival] .portal-solid{opacity:1;transition:opacity .85s ease-out}
.portal-veil[data-arrival][data-revealing] .portal-solid{opacity:0}
.portal-floor-fog{position:absolute;inset:-8%;width:116%;height:116%;object-fit:fill;opacity:0;transition:opacity .45s ease;animation:portal-floor-drift 5.5s linear infinite alternate;will-change:transform}
.portal-floor-fog-back{animation-direction:alternate-reverse;animation-duration:6.8s}
.portal-veil[data-covered] .portal-floor-fog{opacity:.8}
.portal-veil[data-revealing] .portal-floor-fog{opacity:0;transition:opacity 5.2s cubic-bezier(.2,.35,.35,1)}
.portal-veil[data-revealing] .portal-floor-fog-back{transition-duration:4.7s;transition-delay:0s}
@keyframes portal-floor-drift{from{transform:translate(-3%,2%) scale(1)}to{transform:translate(4%,-3%) scale(1.08)}}
body.portal-departing{overflow:hidden}
.portal-departing .scene{transform-origin:50% var(--door-y,50%);animation:portal-approach 1.9s cubic-bezier(.3,0,.2,1) forwards}
.portal-departing .title-clouds{transition:opacity .55s ease,filter .55s ease;opacity:0;filter:blur(8px)}
.portal-departing .gate{animation:portal-door-warmth 1.9s ease-in-out both!important}
.portal-departing .door-seam{left:50%;top:17%;width:1.2px;height:72%;box-shadow:none;background:linear-gradient(to bottom,transparent 0%,#cda57566 16%,#f5dcac 43%,#fbe9c4 58%,#ccaa7466 82%,transparent 100%);transform-origin:50% 55%;animation:portal-seam-wake 1.75s ease-in-out both;filter:blur(.3px) drop-shadow(0 0 3px #edcb8c66)}
.portal-departing .door-seam::before{content:"";position:absolute;left:calc(50% - 27.5px);top:-8%;width:55px;height:116%;background:radial-gradient(ellipse,#ffe4b6aa 0%,#ecc88c55 32%,transparent 72%);filter:blur(5px);animation:portal-seam-aura 1.75s ease-in-out both}
.portal-departing .door-seam::after{content:"";position:absolute;left:0;top:0;width:100%;height:100%;background:linear-gradient(to bottom,transparent 25%,#fff2d599 48%,transparent 68%);animation:portal-seam-current 1.75s ease-in-out both}
@keyframes portal-approach{to{transform:scale(1.1)}}
@keyframes portal-door-warmth{0%{filter:brightness(1) drop-shadow(0 8px 16px #0005)}45%{filter:brightness(1.12) sepia(.08) drop-shadow(0 0 8px #dcb47533)}100%{filter:brightness(1.3) sepia(.12) drop-shadow(0 0 16px #e5c28b44)}}
@keyframes portal-seam-wake{0%{width:1.2px;opacity:.08;transform:translateX(-50%) scaleY(.2);filter:blur(.3px) drop-shadow(0 0 3px #edcb8c66)}25%{width:2.2px;opacity:.4;transform:translateX(-50%) scaleY(.45)}52%{width:5.5px;opacity:1;transform:translateX(-50%) scaleY(.82);filter:brightness(1.65) blur(.4px) drop-shadow(0 0 7px #ffe3adbb)}72%{width:8.5px;opacity:.95;transform:translateX(-50%) scaleY(.95);filter:brightness(1.8) blur(.8px) drop-shadow(0 0 10px #ffe3ad99)}100%{width:12px;opacity:0;transform:translateX(-50%) scaleY(1);filter:brightness(1.3) blur(2px) drop-shadow(0 0 12px #edcb8c44)}}
@keyframes portal-seam-aura{0%{opacity:0;transform:scaleX(.4)}45%{opacity:.7;transform:scaleX(.8)}70%{opacity:.9;transform:scaleX(1.3)}100%{opacity:0;transform:scaleX(1.8)}}
@keyframes portal-seam-current{0%{opacity:0;transform:translateY(25%)}35%{opacity:.6}65%{opacity:.3}100%{opacity:0;transform:translateY(-30%)}}
@keyframes portal-light-spread{0%{opacity:0;transform:scale(.08,.28)}25%{opacity:.2;transform:scale(.2,.48)}55%{opacity:.7;transform:scale(.6,.85)}80%{opacity:.85;transform:scale(1.05,1.1)}100%{opacity:0;transform:scale(1.35,1.3)}}
@keyframes portal-cloud-swirl{0%{transform:translate(-6%,5%) rotate(-1.2deg) scale(1.02,1.05)}50%{transform:translate(0,-1%) rotate(.4deg) scale(1.08,1.02)}100%{transform:translate(7%,-6%) rotate(1.5deg) scale(1.04,1.1)}}
@keyframes portal-cloud-drift{from{transform:translate(-3%,4%) scale(1)}to{transform:translate(4%,-5%) scale(1.05)}}
@media(prefers-reduced-motion:reduce){.portal-departing .scene{animation:none}.portal-departing .title-clouds{filter:none}.portal-cloud,.portal-light,.portal-floor-fog{display:none}.portal-departing .gate,.portal-departing .door-seam{animation:none!important}.portal-departing .door-seam{opacity:0}.portal-veil .portal-solid{transition-duration:.18s}.portal-veil .portal-solid,.portal-veil[data-arrival][data-revealing] .portal-solid{animation:none;mask-image:none}.portal-veil[data-arrival] .portal-solid{transition-duration:.25s}}
